@flung.dev/sdk

中文文档
0.10.0发布于 2026/11/12MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 2566

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

中文使用文档
文档目录10 节
  1. 行为
  2. 时区
  3. 图像和视频
  4. 在没有用户界面的情况下连接账户
  5. 让人们从你的页面连接
  6. 每个客户一个简介
  7. 绘图图
  8. 网络呼号
  9. 标准
  10. 目录

@flung.dev/sdk (英语)

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

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在服务器上转换:

// 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 或抵消工作完全如前.

图像和视频

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张照片或视频
页:14个最多为5 MB的图像,或 GIF 或最多为 512 MB 的视频
链接9个图像,或最多200 MB的视频
马斯多登4个图像, 或最多40 MB 的视频
解析器10 个文件至 10 MB
布鲁斯基4个最多 1 MB 的图像, 或最多 100 MB 的视频
兴趣5个图像,或1GB以下的视频,被固定在帖子上或账户默认值上
法克斯特语Name2个图像,或最多100 MB的视频,由永久链接嵌入
YouTube, TikTok (英语)一个视频

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

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

// 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 在浏览器中使用它。 符号只能列出,连接,再连接和断开账户,从您命名的出处,直到到期.

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

每个客户一个简介

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

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 并保留为带有备选案文的媒体文件.

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是否由谁连接.

网络呼号

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库也验证它们.

标准

代码如下:

目录

路径目的
openapi-ts.config.ts嘿- api 设置: 1 FlungApi 按操作 id 、 平分参数、 扔出错误来进行分类。 读取 ../../spec/openapi.json。 。 。 .
src/generated/生成的客户端 。 未犯; generate 在每个类型检查、测试和构建之前重建它.
src/client.tsFlung: 配置的客户端, 重试, 偶数键, paginate, (中文(简体) ), uploadMedia, (中文(简体) ), waitForConnection. 与 flung-app 相当 packages/sdk/src/client.ts他们的合同测试 运行它与API本身.
src/errors.tsFlungError。 。 。 .
src/webhooks.tsverifyWebhook 键入 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 共发布 14 个版本,首次发布于 2026/10/29;过去 12 个月发布了 14 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.10.0latest2026/11/123 天前
0.9.02026/11/069 天前
0.8.02026/11/069 天前
0.7.02026/11/0510 天前
0.6.02026/11/0114 天前
0.5.02026/10/3115 天前

关于 @flung.dev/sdk 的常见问题

@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 和提交记录判断。