125 lines
3.1 KiB
Markdown
125 lines
3.1 KiB
Markdown

|
|
|
|
# Zako Tap SDK js
|
|
|
|
This is the javascript sdk package required to create a javascript tap server responsible for the audio of `zako`, a discord audio bot.
|
|
|
|
## Quickstart Example
|
|
|
|
First, you need to download `tap-sdk-js` on your project.
|
|
|
|
```bash
|
|
npm install tap-sdk-js
|
|
```
|
|
|
|
Then, you can use the sdk.
|
|
Here is some example.
|
|
|
|
```js
|
|
import { createClient } from "tap-sdk-js";
|
|
|
|
const client = createClient({
|
|
name: "your zako tap server name",
|
|
token: "your zako tap server token",
|
|
zakoEndpoint: "zako endpoint (default is https://api.zako.ac)",
|
|
});
|
|
|
|
client.events.on("ready", () => {
|
|
console.log("ready");
|
|
});
|
|
|
|
client.events.on("request", (handle) => {
|
|
const { data, parameters } = handle;
|
|
// data is the actual data to handle.
|
|
|
|
// to respond the stream
|
|
handle.respond(/* stream here */);
|
|
|
|
// call this on error
|
|
handle.respondError("error message");
|
|
});
|
|
|
|
client.events.on("connectionError", (e) => {
|
|
console.error(e);
|
|
});
|
|
|
|
client.events.on("error", (e) => {
|
|
console.error(e);
|
|
});
|
|
|
|
client.connect();
|
|
```
|
|
|
|
## Client Description
|
|
|
|
### 1. Create Client and Connect
|
|
|
|
You can create tap server client by call `createClient` function in `tap-sdk-js` package.
|
|
|
|
You should put the client data written as `ZakoTapConfig` type inside the argument of `createClient`.
|
|
|
|
You can then connect to the tab server using `client.connect()`.
|
|
|
|
```js
|
|
import { createClient } from "zako-sdk-js"
|
|
|
|
const client = createClient({
|
|
name: "your zako tap server name",
|
|
token: "your zako tap server token",
|
|
zakoEndpoint: "zako endpoint (option)"
|
|
backoffBaseMs: "loop waiting time (option)";
|
|
});
|
|
|
|
client.connect();
|
|
```
|
|
|
|
### 2. Client Event
|
|
|
|
Using the client created above, you can use client.on to perform a specific function when the EventEmitter's event is called.
|
|
|
|
```js
|
|
client.events.on("event name", function)
|
|
```
|
|
|
|
The types of events are specified in TapEvents among the types in the zakotap package.
|
|
|
|
#### Tap Events
|
|
|
|
- `ready`: This event is called when the zako tap server successfully connects to the `zako tap hub`.
|
|
- `request`: This event is called when an `audio request` is received from the `zako tap hub`.
|
|
- `connectionError`: This event is called when an connection error occurs within the zakotap package.
|
|
- `error`: This event is called when an error occurs within the zakotap package.
|
|
|
|
### 3. Send Audio
|
|
|
|
You can send your audio stream by using `handle.respond()` function.
|
|
|
|
```js
|
|
handle.respond("your audio stream");
|
|
```
|
|
|
|
You can get `audio request handle` from request event parameter. If you don't send an audio stream, your tap server will be considered offline and you may be disconnected.
|
|
|
|
## Work Flow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant TapServer
|
|
participant TapHub
|
|
|
|
TapServer->>TapHub: WS TapHello
|
|
TapHub-->>TapServer: WS TapResponse
|
|
Note right of TapServer: Waiting for audio request
|
|
TapHub-->>TapServer: WS AudioRequest
|
|
TapServer->>TapHub: POST AudioStream
|
|
```
|
|
|
|
## Related Documents
|
|
|
|
- [Zako 2]()
|
|
- [Protocol Specification]()
|
|
|
|
## Authors
|
|
|
|
- [@ridanit-ruma](https://github.com/ridanit-ruma) (Discord: `ruma0607`)
|