跳转到主要内容

SDK 快速开始

官方 TypeScript SDK 封装了 OAuth Token 管理和事件上报,让你专注于业务逻辑。

安装

npm install @profy-ai/sdk
bun add @profy-ai/sdk

初始化

import { ProfyApp } from "@profy-ai/sdk";

const profy = new ProfyApp({
  clientId: process.env.PROFY_APP_ID!,
  clientSecret: process.env.PROFY_APP_SECRET!,
  baseUrl: "https://app.profy.cn",       // 可选,默认 profy.cn
  onTokenRefresh: (newToken) => {         // 可选,Token 轮换时触发
    saveToDatabase(newToken);             // 持久化新 Token
  },
});

OAuth 授权码交换

用户授权后,回调地址会收到 code 参数。在后端将其换成 Token:
const token = await profy.exchangeCode(code, redirectUri);
// → { accessToken, refreshToken, expiresAt }
字段类型说明
accessTokenstringJWT 格式,1 小时有效
refreshTokenstring90 天有效,每次使用后轮换
expiresAtnumber过期时间戳(毫秒)
exchangeCode 必须在后端调用。App Secret 不能暴露在前端。

上报计费事件

const result = await profy.reportEvent("generate_report", {
  token,
  idempotencyKey: "order-12345",  // 可选,防重复扣费
  metadata: { plan: "pro" },      // 可选,业务追踪
});
SDK 会自动处理 Token 过期:Access Token 过期时自动用 Refresh Token 续期,再重试请求。

错误处理

import {
  AuthExpired,
  InsufficientBalance,
  InvalidEvent,
  ProfyApiError,
} from "@profy-ai/sdk";

try {
  await profy.reportEvent("action", { token });
} catch (err) {
  if (err instanceof AuthExpired) {
    // Token 过期且无法刷新 → 引导用户重新授权
  } else if (err instanceof InsufficientBalance) {
    // 用户积分不足 → 提示充值
  } else if (err instanceof InvalidEvent) {
    // 事件名未配置 → 检查 Studio 计费事件设置
  } else if (err instanceof ProfyApiError) {
    // 其他 API 错误
    console.error(err.statusCode, err.body);
  }
}

错误类速查

错误类HTTP 状态码触发条件处理方式
AuthExpired401Token 过期且刷新失败重新授权
InsufficientBalance402用户积分不足提示充值
InvalidEvent400事件名未注册检查 Meter 配置
ProfyApiError*通用 API 错误按 statusCode 处理

完整示例

profy-app-template(Vite + Hono 全栈脚手架)

应用接入教程

5 分钟走通完整接入流程

API 参考

OAuth 端点与 Events API 详细文档