open-index/open-npm huggingface dataset:
npm package: @openfort/react-native
Description: React Native SDK for Openfort platform integration
Latest version: 1.1.2

<div align="center">
  <h4>
    <a href="https://www.openfort.io/">
      Website
    </a>
    <span> | </span>
    <a href="https://www.openfort.io/docs/products/embedded-wallet/react-native/">
      Documentation
    </a>
    <span> | </span>
    <a href="https://x.com/openfort_hq">
      X
    </a>
  </h4>
</div>

# Openfort React Native SDK

Quickstart sample:
https://github.com/openfort-xyz/react-native-auth-sample
npm package: @openfuse/ufs-js-client
Description: ufs js客户端的sdk
Latest version: 3.0.1

# UFS JS SDK

## 安装
```shell 
npm install @openfuse/ufs-js-client
```

## 使用
使用帮助见：https://docs.bingosoft.net/fuse/ufs-sdk/docs/intro/fast-started.html

### 1、初始化UFS Client
UfsClient是UFS的客户端，用于管理存储预览文件等操作。在进行所有UFS服务操作前，您都需先初始化一个UfsClient实例，以下代码用于创建UfsClient，一个工程中可以有一个或多个UfsClient，UfsClient支持并发使用

```js 
let client = new UfsClient({
    basePath: endpoint,  //如：'http://10.200.21.47:31365/ufsapi',
    accessToken: async () => {
        return getTokenFromSession();
    }
});

/**
 * 一般从前端的会话中获取token
 */
function getTokenFromSession(){
    // 如果使用fly-vue框架，可使用以下代码
    // import { Session } from '@fly-vue/core';
    // return Session.getToken();
    return "token_in_session";
}
```
新建UfsClient时， 需要指定Endpoint和AccessToken
- **Endpoint**: Endpoint的信息需要从UFS负责人处获取
- **AccessToken**: UFS接口调用凭据，一般有两种获取方式：
    - 方式一：从当前会话中获取，应用接入SSO后，用户从SSO登录成功后，会得到一个访问令牌，应用可以使用该令牌进行UFS相关操作
    - 方式二：使用应用的clientId和clientSecret生成应用的访问令牌，获取方式详见[SSO获取AccessToken接口](https://openfuse.bingosoft.net/sso/docs/endpoints/token.html)，(注：使用该类型的Token进行的操作，不包含操作人信息)
    - Token使用一段时间会自动过期，Token刷新方案详见[SSO刷新token接口](https://openfuse.bingosoft.net/sso/docs/endpoints/token_refresh.html)
    
### 2、文件上传
```js 
// 待上传的文件，一般为通过<input type="file">选择的文件，
const textFile = document.getElementById("fileInput").files[0];
const formData = new FormData();
formData.append('file', textFile);
    
const contentLengthPromise = new Promise<number>((resolve, reject) => {
    formData.getLength(async (_err, contentLength) => {
        if (_err) {
            reject(_err)
        } else {
            resolve(contentLength)
        }
    })
});
//这里注意：必须附加Content-Length头，否则会报错
const contentLength = await contentLengthPromise;

const fileAttrs = {
    filename: 'text.txt'
};
const signRequest: UploadSignRequest = { ...fileAttrs };
const commitRequest = { ...fileAttrs };
const res = await client.file()
    .upload(formData, signRequest, commitRequest, {
        headers: { 'Content-Length': contentLength }
    })
    .catch((err) => {
        console.log(err.response)
    });

// 处理文件上传结果
if (res) {
    let fileStatus: FileStatus = res.data
    return fileStatus;
}
```

### 3、文件下载
```js 
const fileId="xxxx";
const signedRes = await client.file()
    .downloadSign(fileId, {});
if(signedRes){
    // 获取文件下载地址，并下载文件
    const url=signedRes.data.url;
    window.open(url);
}
```

### 4、获取文件信息
```js
const fileId="xxxx";
const res = await client.file().status(fileId);
if(res){
    console.log(res.data);
}
```
npm package: @opengalaxium/tinyhttp
Description: Light, fast, compact web framework
Author: OpenGalaxium
Latest version: 1.0.7

# tinyhttp
Light, fast, compact web framework

GitHub repo: https://github.com/OpenGalaxium/tinyhttp

npm package: https://www.npmjs.com/package/@opengalaxium/tinyhttp

# Installation
```console
npm i @opengalaxium/tinyhttp
```

# Example usage
index.ts
```ts
import tinyhttp from '@opengalaxium/tinyhttp'
import { parser } from '@opengalaxium/tinyhttp'
import routes from './routes'

const app = new tinyhttp()

app.use(parser.json)
app.use(parser.urlencoded)

app.get('/', (req, res) => {
  res.send('working!')
})

routes(app)

app.run(80, 'localhost').then((port) => {
  console.log(`tinyhttp is running on port ${port}`)
})
```

routes.ts
```ts
import tinyhttp from 'tinyhttp'

function routes(app: tinyhttp) {
    app.get('/json', (req, res) => {
        res.json({ status: 'working' })
    })

    app.post('/post', (req, res) => {
        res.send(req.body)
    })

    app.get('/render', (req, res) => {
        res.render('index.html', { title: 'res.render example', msg: 'render' })
    })

    app.static('/www')
}

export default routes;
```