Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tuya/tuya-connector-nodejs

nodejs sdk
https://github.com/tuya/tuya-connector-nodejs

tuya

Last synced: 3 months ago
JSON representation

nodejs sdk

Awesome Lists containing this project

README

        

[English](README.md) | [中文版](README_CN.md)

### What is `tuya-connector`?

[Tuya Open Platform—API Reference](https://developer.tuya.com/en/docs/iot/api-reference?id=Ka7qb7vhber64)

Tuya provides a set of HTTP APIs and signature verification logic. You need to implement the logic when you make the API requests.

`tuya-connector` provides capabilities to sign a request, refresh, store, and renew a token, and encapsulate common APIs, helping you quickly connect to Tuya's open platform.

### Install

```bash
npm install @tuya/tuya-connector-nodejs

# or
yarn add @tuya/tuya-connector-nodejs
```

### Get started

```ts
import { TuyaContext } from '@tuya/tuya-connector-nodejs';

const tuya = new TuyaContext({
baseUrl: 'https://openapi.tuyacn.com',
accessKey: 'xx',
secretKey: 'xx',
});

const device = await tuya.device.detail({
device_id: 'device_id'
});

```

## Advanced development

### Custom `tokenStore`

By default, `tokenStore` is implemented based on memory. We recommend that you implement the store instance in your service. In the following code block, the Redis Store is used as an example.

```ts
// tokenStore.ts
import { TuyaTokenStorInterface, TuyaTokensSave } from '@tuya/tuya-connector-nodejs';
import IORedis from 'ioredis';

export class RedisTokenStore implements TuyaTokenStorInterface {
private readonly client: IORedis.Redis;
private readonly key: string;
constructor(client: IORedis.Redis, key: string = 'tuya::token') {
this.client = client;
this.key = key;
}

async setTokens(tokens: TuyaTokensSave): Promise {
const res = await this.client.set(this.key, JSON.stringify(tokens));
return ! ! res;
}
async getAccessToken(): Promise {
const jsonStr = await this.client.get(this.key) || '{}';
const tokens: TuyaTokensSave = JSON.parse(jsonStr);
return tokens && tokens.access_token;
}
async getRefreshToken(): Promise {
const jsonStr = await this.client.get(this.key) || '{}';
const tokens: TuyaTokensSave = JSON.parse(jsonStr);
return tokens.refresh_token;
}
}

// index.ts
import { RedisTokenStore } from './tokenStore';
import IoRedis from 'ioredis';
const redis = new IoRedis();

const tuya = new TuyaContext({
baseUrl: 'https://openapi.tuyacn.com',
accessKey: 'xx',
secretKey: 'xx',
store: new RedisTokenStore(redis),
});
```

### Custom request of `httpClient`

`tuya-connector` uses Axios as `httpClient` by default, and exposes replaceable parameters. If necessary, you can also customize `httpClient`.

```ts
import axios from 'axios';
import { TuyaContext } from '@tuya/tuya-connector-nodejs';

const tuya = new TuyaContext({
baseUrl: 'https://openapi.tuyacn.com',
accessKey: 'xx',
secretKey: 'xx',
rpc: axios
});
```

### Requests of other OpenAPIs

`tuya-connector` encapsulates common APIs, and declares the types of request and response parameters. You can customize additional API requests.

```ts
import { TuyaContext } from '@tuya/tuya-connector-nodejs';

const tuya = new TuyaContext({
baseUrl: 'https://openapi.tuyacn.com',
accessKey: 'xx',
secretKey: 'xx',
});

const { data } = await tuya.request({
method: 'GET',
path: '/v1.0/xx',
body: {},
});
```

### Other issues

1. Apply for an authorization key. On the [platform](https://iot.tuya.com/cloud/), you can create a project to get the access ID and access secret of the cloud application.

2. For more information about global error codes, see [Global Error Codes](https://developer.tuya.com/en/docs/iot/error-code?id=K989ruxx88swc).