🔌 PostBot SDK
PostBot SDK 是 PostBot 内容同步助手 的官方 TypeScript SDK,封装了引擎的任务、平台、账号、客户端、发布调度、工作流与认证接口,方便在自有系统、服务端脚本与 CI/CD 中集成 PostBot 能力。
NOTE
本文对应 PostBot SDK v1.0.0,要求 Node.js >= 18,包为纯 ESM。
npm 包已发布,可直接安装;也可以从 GitHub 仓库 克隆后执行 npm ci && npm run build 使用。
SDK 只包含 API 客户端与类型定义,不包含浏览器扩展或桌面端运行时。如需开箱即用的产品,请访问 PostBot 内容同步助手。
✨ 特性与适用场景
- 零运行时依赖:仅使用 Node.js 内置的
fetch、AbortController与标准 Web API。 - 统一客户端:
App-Id、Bearer Token、超时与错误归一化一次配置。 - 完整 API 模块:任务、平台、账号、客户端、发布调度、工作流、会话、通知与浏览器指纹。
- 认证助手:开发者应用凭证、代理登录/注册/重置密码、直接登录与当前用户信息。
- 类型安全:完整 TypeScript 声明、严格模式、ESM 入口与 source map。
- 可预期错误:业务失败统一抛出
IamApiError,携带code与 HTTPstatus。
适用场景:
- 企业 CMS / 内容后台的“同步到 PostBot”能力。
- 服务端批量创建任务、定时发布与状态轮询。
- 将发布流程接入 GitHub Actions、GitLab CI、crontab 等自动化链路。
📦 安装
bash
# npm
npm install @gitcoffee-os/postbot-sdk
# pnpm
pnpm add @gitcoffee-os/postbot-sdk要求 Node.js >= 18,使用 import 引入。
🚀 快速开始
ts
import { PostbotClient, TaskApi } from '@gitcoffee-os/postbot-sdk';
const client = new PostbotClient({
baseUrl: 'https://your-postbot-host', // 你的 PostBot 服务地址
appId: 'your-app-id',
token: 'user-access-token',
});
const tasks = new TaskApi(client);
// 分页查询任务
const page = await tasks.list({ page: 1, size: 20, status: 'FAILED' });
console.log(page.total, page.list);
// 创建并自动发布任务
const task = await tasks.create({
name: '多平台文章',
platformCodes: ['weixin', 'xiaohongshu'],
data: {
title: 'Hello PostBot',
content: '<h2>Hello</h2><p>来自 SDK 的正文。</p>',
},
isAutoPublish: true,
});
console.log(task.id);⚙️ 客户端配置
ts
const client = new PostbotClient({
baseUrl: 'https://your-postbot-host',
appId: 'your-app-id',
token: 'optional-token',
timeoutMs: 30_000,
});
client.setToken('new-token'); // 登录后更新 Token| 选项 | 类型 | 必填 | 说明 |
|---|---|---|---|
baseUrl | string | 是 | 引擎 API 根地址,末尾斜杠可有可无 |
appId | string | 是 | 应用标识,写入 App-Id 请求头 |
token | string | 否 | 用户 Token,写入 Authorization: Bearer <token> |
timeoutMs | number | 否 | 单次请求超时,默认 30000 毫秒 |
🔐 认证
直接登录
ts
import { PostbotClient, directLogin } from '@gitcoffee-os/postbot-sdk';
const { access_token, expires_in } = await directLogin(baseUrl, username, password);
const client = new PostbotClient({
baseUrl,
appId,
token: access_token,
});开发者应用代理登录
ts
import { getAppToken, proxyLogin } from '@gitcoffee-os/postbot-sdk';
const appAccessToken = await getAppToken(iamBaseUrl, clientId, clientSecret);
const result = await proxyLogin({
iamBaseUrl,
appAccessToken,
clientId,
username,
password,
appId,
});
client.setToken(result.token);proxyRegister 用于注册,proxyForgotPassword 用于重置密码。所有 IAM 请求默认 30 秒超时,可通过参数中的 timeoutMs 覆盖。
当前用户
ts
import { getUserInfo } from '@gitcoffee-os/postbot-sdk';
const user = await getUserInfo(iamBaseUrl, token, appId);
console.log(user.preferred_username ?? user.username);🧩 核心模块
| 模块 | 主要方法 | 说明 |
|---|---|---|
TaskApi | list listAll get create update delete batchDelete bindContent | 任务 CRUD、批量删除、内容绑定 |
PlatformApi | listPaged list get create update remove batchRemove | 平台字典 |
AccountApi | listPaged list get findBySession save update remove batchRemove | 媒体账号 |
ClientApi | listPaged list get register update remove batchRemove | 扩展 / 桌面 / 云端客户端 |
WorkflowApi | executeWorkflow getExecutionStatus retryExecution listDefinitions | 工作流编排 |
AutoPublishApi | trigger getStatus listJobs listLogs | 自动发布调度与日志 |
FingerprintApi | load save remove | 账号浏览器指纹 |
SessionApi | listPaged list get | SessionBot 会话(只读) |
NotifyApi | send | 通用通知 |
| IAM helpers | getAppToken proxyLogin proxyRegister proxyForgotPassword directLogin getUserInfo | 认证与用户信息 |
发布调度
ts
import { AutoPublishApi } from '@gitcoffee-os/postbot-sdk';
const autoPublish = new AutoPublishApi(client);
await autoPublish.trigger(123); // 忽略定时时间,立即编排 Job
const job = await autoPublish.getStatus(123);
const jobs = await autoPublish.listJobs({ taskId: 123, status: 'FAILED', limit: 20 });
const logs = await autoPublish.listLogs({ taskId: 123, limit: 20 });工作流
ts
import { WorkflowApi } from '@gitcoffee-os/postbot-sdk';
const workflow = new WorkflowApi(client);
const execution = await workflow.executeWorkflow('STATUS_QUERY', { taskId: 123 });
const status = await workflow.getExecutionStatus(execution.executionId);
await workflow.retryExecution(execution.executionId);
const definitions = await workflow.listDefinitions();⚠️ 错误处理
后端可能以 HTTP 200 + 业务码返回失败,SDK 会统一转换为 IamApiError:
ts
import { IamApiError } from '@gitcoffee-os/postbot-sdk';
try {
await tasks.get(123);
} catch (err) {
if (err instanceof IamApiError) {
console.error(err.code); // 如 USER.TOKEN_EXPIRED、NOT_LOGIN
console.error(err.status); // HTTP 状态码
console.error(err.message);
} else {
throw err;
}
}自定义传输层可复用底层工具:
ts
import { isSuccessCode, toApiError } from '@gitcoffee-os/postbot-sdk';
if (!isSuccessCode(body.code)) {
throw toApiError(body, status);
}⏱️ 超时与安全
PostbotClient的每个请求都会在timeoutMs后中止,响应体读取阶段同样受超时保护。- IAM 助手默认
DEFAULT_IAM_TIMEOUT_MS(30 秒),可按调用覆盖。 - 生产环境必须使用 HTTPS;SDK 不会替调用方校验证书或协议。
clientSecret、用户密码与 Token 由调用方保管,不要把clientSecret放进浏览器或前端产物。- SDK 不持久化任何凭据,也不发送遥测数据。
🖥️ 运行时与兼容性
- 运行时:Node.js >= 18(依赖全局
fetch、AbortController)。 - 开发与测试:Node.js >= 20(Vitest 4 要求)。
- 纯 ESM,使用
import引入;类型声明随包发布。 getAppToken使用 Node.jsBuffer生成 Basic Auth,仅适用于 Node.js 环境;其余客户端逻辑不依赖 Node 专有 API。- 版本遵循 Semantic Versioning,变更记录见 CHANGELOG。