# @flung\.dev/sdk 中文文档

规范地址：https://npmcn.com/package/%40flung.dev/sdk/

版本：0\.10\.0
npm 元数据更新时间：2026-11-12T13:28:59.508Z
中文译文更新时间：2026-11-15T02:49:50.045Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40flung.dev/sdk
原文对照：https://npmcn.com/package/%40flung.dev/sdk/?lang=original
项目主页：https://flung.dev/
源码仓库：https://github.com/flung-official/flung-sdk

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2.7 MB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：0 个
- 首次发布：2026-10-29T05:47:43.620Z
- 最新版本发布：2026-11-12T13:28:59.032Z
- 近 30 天下载量：2566（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：14（近 12 个月 14 个）

## 中文简介

Flung API 所打入的 TypeScript 客户端: 排程并发布社交媒体帖子,连接账户,并验证webhooks.

## 安装

```sh
npm install @flung.dev/sdk
```

也可以使用：`pnpm add @flung.dev/sdk`、`yarn add @flung.dev/sdk`、`bun add @flung.dev/sdk`

## README

# @flung.dev/sdk (英语)

为 Flung API 输入的 TypeScript 客户端: 安排并发布社交媒体帖子,连接账户,管理webhook端点和 API 密钥,并验证webhooks Flung 发送. 它随处可见 `fetch` 和WebCrypto:节点20+, Cloudflare工人,德诺, Bun.

```ts
import { Flung } from '@flung.dev/sdk'

const flung = new Flung({ apiKey: process.env.FLUNG_API_KEY! })

const { data: accounts } = await flung.accounts.list()
const post = await flung.posts.create({
  content: 'Launching today.',
  accountIds: accounts.map((account) => account.id),
  publishAt: '2026-11-01T09:00:00.000Z',
})
```

把钥匙放在服务器上 SDK的谈话 `https://api.flung.dev`; 通过 `baseUrl: 'https://api-preview.flung.dev'` 来测试预览.

## 行为

-   **错误.** 失败的调用 `FlungError` 与 `status`,一个马厩 `code` (单位:千美元)`unknown_accounts`, (中文(简体) ), `account_needs_reconnect`, (中文(简体) ), `network_error`,(......)和 `details`部门 `code`;消息可能会改变.
-   **复问.** 网络故障,超时, 408, 409, 429 和 5xx 默认要重复两次, 并有焦急的后退, 荣誉 `Retry-After`设置 `maxRetries` 财务报告和审定财务报表 `timeoutMs` 在建筑师.
-   **引证无能.** 每个POST都带一个 `Idempotency-Key`生成,除非您通过 `'idempotency-key'`,所以重试 从来没有安排两次帖子。 传出你自己的钥匙,比如一个命令ID, 让你自己的回想安全了.
-   **平起处.** `for await (const post of flung.paginate((page) => flung.posts.list(page), { limit: 100 }))` 每一页.

## 时区

在协调世界时,每一次都有Flung商店. 给 `publishAt` 或作为瞬间 `Z` 或抵消,或如某人在当地时间所说的,没有抵消,而Flung在服务器上转换:

```ts
// 9am in Athens on 3 November, whatever zone this code runs in.
const post = await flung.posts.create({
  content: 'Kalimera.',
  accountIds,
  publishAt: '2026-11-03T09:00',
  timeZone: 'Europe/Athens',
})
post.publishAt // '2026-11-03T07:00:00.000Z', in UTC
post.publishAtLocal // '2026-11-03T09:00:00+02:00'
post.timeZone // 'Europe/Athens'
```

无 `timeZone`,本地时间在 OAuth 符号背后的人所在区域读取,否则工作空间的默认区域(如 API 密钥),否则UTC. `flung.me.get()` 说: `timeZone`, (中文(简体) ), `timeZoneSource` (单位:千美元)`user`, (中文(简体) ), `workspace` 或者说 `default`和时间作为现在 `nowLocal`。当地时间,春季的时钟会跳过空隙向前移动,秋季的时钟会跳过两次,时间更早;或者增加一个条目 `post.warnings` (单位:千美元)`local_time_skipped`, (中文(简体) ), `local_time_ambiguous`) (中文(简体) ). 非 IANA 名称的区域被拒绝 `invalid_time_zone`时间与 `Z` 或抵消工作完全如前.

## 图像和视频

```ts
const photo = await flung.uploadMedia(await readFile('launch.png'), { contentType: 'image/png' })
await flung.posts.create({ content: 'Launching today.', accountIds, mediaIds: [photo.id] })
// Or let Flung fetch a file that is already online:
const clip = await flung.media.import({ url: 'https://example.com/launch.mp4' })
```

JPEG、PNG和WebP最多可达20 MB、GIF 15 MB、MP4和QuickTime 1 GB; `uploadMedia` 发送超过100MB的东西 一部分。 检查文件的真实类型.

| 平台 | 带 |
| --- | --- |
| 内存 | 10个图像, 或最多300 MB 的里尔 |
| 线索 | 20个图像或视频 |
| 脸书 | 10张照片或视频 |
| 页:1 | 4个最多为5 MB的图像,或 GIF 或最多为 512 MB 的视频 |
| 链接 | 9个图像,或最多200 MB的视频 |
| 马斯多登 | 4个图像, 或最多40 MB 的视频 |
| 解析器 | 10 个文件至 10 MB |
| 布鲁斯基 | 4个最多 1 MB 的图像, 或最多 100 MB 的视频 |
| 兴趣 | 5个图像,或1GB以下的视频,被固定在帖子上或账户默认值上 |
| 法克斯特语Name | 2个图像,或最多100 MB的视频,由永久链接嵌入 |
| YouTube, TikTok (英语) | 一个视频 |

一个平台无法携带的帖子在创建时被拒绝,而不是在未能发布时被拒绝.

## 在没有用户界面的情况下连接账户

```ts
// A new account, or flung.accounts.reconnect({ id }) for one that needs it.
const session = await flung.accounts.connect({ platform: 'linkedin' })
console.warn(`Open ${session.authorizationUrl}`)
const done = await flung.waitForConnection(session.id)
if (done.status === 'connected') console.warn('Connected', done.accountIds)
```

没有 `redirectUrl` 个人结束于 Flung 自己的“你可以关闭此标签”页。 通过一个让他们回到你的应用程序.

链接 在公司页面中通过自己的应用程序连接: `flung.accounts.connect({ platform: 'linkedin', variant: 'pages' })` 连接个人管理的每一页,每页一个账户. `flung.platforms.list()` 给每个平台的 `variants`, (中文(简体) ), `['pages']` 链接 一旦设置了网页应用程序.

大多数平台通过同意连接: `authorizationUrl` 并回到一页。 法克斯特通过批准连接: `flung.platforms.list()` 给它 `connectFlow: 'approval'`, (中文(简体) ), `authorizationUrl` 打开Wrpcast(显示它作为链接或QR代码,因为批准通常发生在电话上),没有东西可以重定向,所以 `waitForConnection` 你是如何学习完成的。 会话没有人同意结束 `expired`。 。 。 .

每个账户都说如何保持连接: `renewal` 实值 `automatic` (Flung刷新它), `manual` (只有重新连接更新)或 `not_needed`,与 `tokenExpiresAt` 财务报告和审定财务报表 `reconnectBy`。 。 。 . `flung.accounts.list({ reconnectBefore })` 找到一个人必须尽快重接的, `account.reconnect_required_soon` 提前一个星期到达 `flung.accounts.refresh({ id })` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}现在要换个纪念品了 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}现在.

## 让人们从你的页面连接

您的服务器创建连接符号, 并且 `<flung-connect>` 从 [`@flung.dev/connect`](https://npmcn.com/package/%40flung.dev/connect/README.md) 在浏览器中使用它。 符号只能列出,连接,再连接和断开账户,从您命名的出处,直到到期.

```ts
const { token } = await flung.connectTokens.create({ origins: ['https://app.example.com'], expiresIn: 900 })
```

## 每个客户一个简介

当您的产品的用户各自连接到自己的账户时,给每个用户一个配置,由自己的用户代号作为 `externalId`的连接符号 `profileId` 以物配主,而视其账目.

```ts
const profile = await flung.profiles.create({ name: 'Acme Studio', externalId: 'user_8412' })
const { token } = await flung.connectTokens.create({ origins: ['https://app.example.com'], profileId: profile.id })
const { data: accounts } = await flung.accounts.list({ profileId: profile.id })
await flung.posts.create({ content: 'Hello', accountIds: accounts.map((account) => account.id), profileId: profile.id })
```

`flung.profiles.list({ externalId })` 再找一个档案. `flung.profiles.delete({ id })` 断开其账户并取消其预定员额.

一个简介(一个品牌,在Flung门户网站)在每个平台最多有一个账户;一个链接 在页面中,除了个人资料之外,还要计算. `flung.billing.get()` 给出限制为 `limits.accountsPerPlatformPerProfile`,以及计划允许的配置图。 将平台的第二个账户连接到相同的配置文件 `FlungError` 带代码 `platform_limit_reached`,其 `details` 命名平台、配置和 `upgradeUrl`。重新连接它已经持有的账户永远不会被拒绝.

## 绘图图

当一个工作空间已经连接 Plotwork 时, 它的图表可以直接进入一个帖子: `importDiagram` plotwork 将图画成 PNG 并保留为带有备选案文的媒体文件.

```ts
const { data: diagrams } = await flung.plotwork.listDiagrams({ q: 'architecture' })
const media = await flung.plotwork.importDiagram({ id: diagrams[0].id, width: 1600, scheme: 'light' })
await flung.posts.create({ content: 'How it fits together', accountIds, mediaIds: [media.id] })
```

`flung.plotwork.get()` 说明Plotwork是否由谁连接.

## 网络呼号

```ts
import { verifyWebhook } from '@flung.dev/sdk'

const event = await verifyWebhook({ body: rawBody, headers: request.headers, secret: process.env.FLUNG_WEBHOOK_SECRET! })
if (event.type === 'post.published') console.warn(event.data.post.id)
```

传出生身,不是再序取出. 在秘密旋转过程中 带着新旧秘密 秘密24小时 `secret` 切换时也同时使用。 事件遵循标准Webhooks的规格,所以任何标准Webhooks库也验证它们.

## 标准

代码如下:

-   [API 客户端](https://npmcn.com/package/.standards/docs/standards/core/api-clients.md) - 一个客户端, 超时, 重试只使用一等电话
-   [外出网点](https://npmcn.com/package/.standards/docs/standards/packs/node-api/webhooks-outbound.md) - 签字计划的接收方
-   [处理错误](https://npmcn.com/package/.standards/docs/standards/core/error-handling.md) - 一个输入有稳定代码的错误
-   [检测](https://npmcn.com/package/.standards/docs/standards/packs/vitest/testing.md) - 测试布局

## 目录

| 路径 | 目的 |
| --- | --- |
| `openapi-ts.config.ts` | 嘿- api 设置: 1 `FlungApi` 按操作 id 、 平分参数、 扔出错误来进行分类。 读取 `../../spec/openapi.json`。 。 。 . |
| `src/generated/` | 生成的客户端 。 未犯; `generate` 在每个类型检查、测试和构建之前重建它. |
| `src/client.ts` | `Flung`: 配置的客户端, 重试, 偶数键, `paginate`, (中文(简体) ), `uploadMedia`, (中文(简体) ), `waitForConnection`. 与 flung-app 相当 `packages/sdk/src/client.ts`他们的合同测试 运行它与API本身. |
| `src/errors.ts` | `FlungError`。 。 。 . |
| `src/webhooks.ts` | `verifyWebhook` 键入 `FlungWebhookEvent`。 。 。 . |
| `src/__tests__/` | 客户端反对脚本解答,Webhooks签名作为工作工人签名. |
| `tsdown.config.ts` | 套装 `dist/index.js` 财务报告和审定财务报表 `dist/index.d.ts` 为npm。 由TypeScript 6所建造:hey-api需要编译器API TypeScript 7不再出动. |

## 常见问题

### @flung\.dev/sdk 是什么？

Flung API 所打入的 TypeScript 客户端: 排程并发布社交媒体帖子,连接账户,并验证webhooks\.

### 如何安装 @flung\.dev/sdk？

在项目目录运行 npm install @flung\.dev/sdk，或使用 pnpm add / yarn add / bun add。

### @flung\.dev/sdk 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @flung\.dev/sdk 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @flung\.dev/sdk 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=20。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @flung\.dev/sdk 可以商用吗？

@flung\.dev/sdk 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @flung\.dev/sdk 的下载量有多少？

根据 npm 官方下载统计，@flung\.dev/sdk 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,566 次，日均约 86 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @flung\.dev/sdk 还在维护吗？

最新版本 0\.10\.0 发布于 2026/11/12（3 天前）；至今共发布 14 个版本，其中过去 12 个月发布了 14 个；首次发布于 2026/10/29。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

