通讯SDK 类型脚本
官方TypeScript SDK为Comps REST API提供.
安装
npm install @doist/comms-sdk
使用量
import { CommsApi } from '@doist/comms-sdk'
const api = new CommsApi('YOUR_API_TOKEN')
api.users
.getSessionUser()
.then((user) => console.log(user))
.catch((error) => console.log(error))
默认情况下, SDK 目标生产时间为 https://comms.todoist.com。 。 。 .
传出 a baseUrl 选择指向不同的部署——中转
生活状况 https://comms.staging.todoist.com数字 :
const api = new CommsApi('YOUR_API_TOKEN', {
baseUrl: 'https://comms.staging.todoist.com',
})
创建实体
频道 / 线程 / 注释 / 对话 / 消息 / 组ID 是
不透明的基础58-编码的UUIDv7字符串; workspaceId 财务报告和审定财务报表 userId 为:
数相.
创建终点( E)createChannel, (中文(简体) ), createThread, (中文(简体) ), createComment, (中文(简体) ),
getOrCreateConversation, (中文(简体) ), createMessage, (中文(简体) ), createGroup接受
选项 id。 。 。 . 来电供应 id 必须是基础58编码
UUIDv7 (美国英语) 任何其它的都快失败了 UuidV7Error 之前
请求离开SDK。 要么用你的薄荷薄荷 generateId() (手脚)
表示乐观的UI——ID在往返旅行中存活不变)或省略
id 让SDK薄荷一:
import { CommsApi, generateId } from '@doist/comms-sdk'
const api = new CommsApi('YOUR_API_TOKEN')
// Option 1: let the SDK mint an ID
const channel = await api.channels.createChannel({
workspaceId: 1,
name: 'Engineering',
})
// Option 2: mint the ID yourself (must be a base58 UUIDv7 from generateId)
const id = generateId()
const sameChannel = await api.channels.createChannel({
workspaceId: 1,
name: 'Engineering',
id,
})
广播组标记
使用字符串常数 EVERYONE 编号 : EVERYONE_IN_THREAD 何时
输入 groups[] 编号 : directGroupMentions[] 直接或通过
notifyAudience 改为 createComment 编号 : closeThread 编号 : reopenThread
让SDK给你编码
await api.comments.createComment({
threadId,
content: 'Heads up everyone',
notifyAudience: 'channel', // encoded as EVERYONE
})
OAuth 2.0 数据
import { getAuthorizationUrl, getAuthToken, CommsApi } from '@doist/comms-sdk'
const authUrl = getAuthorizationUrl(
'your-client-id',
['user:read', 'channels:read'],
'state-parameter',
'https://yourapp.com/callback',
)
const tokenResponse = await getAuthToken({
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
code: 'authorization-code',
redirectUri: 'https://yourapp.com/callback',
})
const api = new CommsApi(tokenResponse.accessToken)
const user = await api.users.getSessionUser()
访问符过期( 见 tokenResponse.expiresIn) (中文(简体) ). 当他们这样做,使用
refreshToken 从原始交换方式获取新交换方式而不发送
用户通过授权流返回 :
import { refreshAuthToken } from '@doist/comms-sdk'
const refreshed = await refreshAuthToken({
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
refreshToken: tokenResponse.refreshToken,
})
// The server may rotate the refresh token — persist refreshed.refreshToken
// when present, otherwise keep using the previous one.
const api = new CommsApi(refreshed.accessToken)
REST 钩子
REST钩子需要托多主义OAuth与托多主义Commist的观众的连接符. 订阅
hTTPS 目标 URL 最多可达 150 个字符并导出其中之一
HOOK_EVENTS;后端将 POST Webhook 有效载荷到该 URL 当
匹配事件发生 :
import { CommsApi, HOOK_EVENTS } from '@doist/comms-sdk'
const api = new CommsApi('TODOIST_OAUTH_ACCESS_TOKEN')
const subscription = await api.hooks.subscribe({
targetUrl: 'https://example.com/comms-hook',
event: 'thread_added',
workspaceId: 1,
})
console.log(subscription.id, HOOK_EVENTS)
await api.hooks.unsubscribe({
targetUrl: 'https://example.com/comms-hook',
})
短寿命过程( CLI, 脚本)
在节点上,SDK在请求间保持连接池活性,所以HTTP/ 2个
多功能和TLS再利用实际有效. 长期运行的过程不会
需要考虑一下. 短期进程应 await api.close()
退出前,否则节点事件循环等待~4秒闲置
超时套接字 :
const api = new CommsApi('YOUR_API_TOKEN')
try {
await api.users.getSessionUser()
} finally {
await api.close()
}
api.close() 排出过程- 全球集合, 因此它也覆盖代码
仅使用独立的 OAuth 助手的路径( E)getAuthToken, (中文(简体) ),
refreshAuthToken, (中文(简体) ), revokeAuthToken, (中文(简体) ), registerClient) (中文(简体) ). 这些流动也可以进口
closeDefaultDispatcher 直接说.
发展
npm installnpm test- 维特npm run type-check— 类型脚本npm run check——克克林特+克克夫克特npm run build——发布CJS+无害环境管理+d.ts
释放
软件包遵循语义化版本;通过 GitHub工作流程.
反馈
公开会议 https://github.com/todoist/comms-sdk-typescription 页面存档备份,存于互联网档案馆。 。 。 .