@crvouga/mockingbird-service-app-store-connect

中文文档
1.11.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 2899

App Store Connect JSON:API 模拟器,具有已核实的ES256 JWTs和TestFlight成员状态.

中文使用文档
文档目录8 节
  1. 安装
  2. 使用量
  3. 认证
  4. 路线
  5. 控件
  6. 核查
  7. 故意不模拟
  8. API 密码

@crvouga/ mockingbird-service-app-shore-connect 互联网档案馆的存檔,存档日期2013-12-02

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

WIP App Store 连接模拟器,用于 JSON: API 应用程序,用户,用户邀请,β组和 β测试器. ES256签名实际上是被验证的;没有真正的苹果账户或电子邮件.

安装

bun add -d @crvouga/mockingbird-service-app-store-connect

使用量

import { SignJWT } from "jose"
import { createServer } from "@crvouga/mockingbird-service-app-store-connect/server"

// Test setup: a throwaway ES256 key pair. The emulator only gets the public half.
// Never use a real Apple private key here.
const pair = await crypto.subtle.generateKey(
  { name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"],
)
const server = await createServer({
  keys: [{ id: "mock-key", issuer: "mock-issuer", role: "ADMIN",
    publicKey: await crypto.subtle.exportKey("jwk", pair.publicKey) }],
})

// Apple publishes no JavaScript SDK, so the application signs its team JWT and calls the API
// over HTTP. Only the origin changes: server.url instead of api.appstoreconnect.apple.com.
const token = await new SignJWT({})
  .setProtectedHeader({ alg: "ES256", kid: "mock-key", typ: "JWT" })
  .setIssuer("mock-issuer")
  .setAudience("appstoreconnect-v1")
  .setIssuedAt()
  .setExpirationTime("10m")
  .sign(pair.privateKey)
const apps = await fetch(`${server.url}/v1/apps`, { headers: { authorization: `Bearer ${token}` } })
const { data } = (await apps.json()) as { data: { attributes: { name: string } }[] }
console.log(data[0]?.attributes.name) // Synthetic App

await server.close()

createRuntime().fetch(Request) 支持进程内客户端。 CLI 不可信地开始 密钥; 种子公开校验密钥通过 /__admin/state/keys,或者使用服务器选项. 没有静态绕行无记名标志。 模拟者从来不需要私人签名材料; 包含私人 JWK 选项被拒绝。 在测试启动时生成测试签名密钥 .

认证

JWT队需要ES256, typ: JWT已登记 kid,匹配发行者和 appstoreconnect-v1 对象,有效 iat编号 :exp,签名验证和最长20分钟的寿命. 模拟器时钟决定了过期 . enabled: false 取消种子密钥。 可选范围 请求限制 GET 路径/ query 参数; 限制/ coursor/ sort 在匹配时被忽略为 由苹果公司记录。 无效的认证返回 JSON:API 401 在突变前.

范围写作政策遵循了苹果的团队/TestFlight指南:ADMIN/ACCOUNT HOLDER 可能写入所有支持的表面; APP MANAGER 可能管理β组/测试器并创建 用户邀请。 其他种子角色以403被否定写作. 阅读授权和 应用特定角色限制简化;见下文限制.

路线

  • 获取 /v1/apps, (中文(简体) ), /v1/users, (中文(简体) ), /v1/userInvitations, (中文(简体) ), /v1/betaGroups, (中文(简体) ), /v1/betaTesters。 。 。 .
  • 邮政 /v1/userInvitations, (中文(简体) ), /v1/betaGroups, (中文(简体) ), /v1/betaTesters。 。 。 .
  • 获取 /v1/betaGroups/{id}/betaTesters。 。 。 .
  • 邮政/电子邮件 /v1/betaGroups/{id}/relationships/betaTesters。 。 。 .
  • 邮政 /v1/users/{id}/relationships/visibleApps。 。 。 .
  • 迪莱特 /v1/users/{id} 财务报告和审定财务报表 /v1/userInvitations/{id}。 。 。 .

列表支持限制/ 曲线, 稀有 fields[type],名称/电子邮件过滤器和请求 用于组/测试者的应用过滤器. links.next 保留在配置的本地来源上并保留 公共名称空间。 关系书写在改变任何东西之前验证每个目标; 删除测试者成员不删除测试者、组或应用程序用户. 复制测试器/邀请电子邮件返回一个409 JSON:API错误,也可以被错误注入.

控件

种子 resources 作为JSON:API记录和 keys 用作公共核查钥匙。 种子组/酯 和用户/可见的App关系初始化可持久边缘集合. /__admin/state 曝光情况 resources, (中文(简体) ), keys, (中文(简体) ), memberships, (中文(简体) ), visibleApps 用于合成装置. 标准重置,有时光线快照/快取,时钟,请求日记和断层. 请求使用页眉, /__admin/ns/<name>/… 路径或绘图的无记名证书命名空间; adminPrefix 移动保留树。 期刊没有JWT或请求机构. 预设 : unauthorized, (中文(简体) ), forbidden, (中文(简体) ), duplicate, (中文(简体) ), rate_limited, (中文(简体) ), server_error, (中文(简体) ), connection_drop;通用断层也支持确定性延迟. 没有释放出网络用户 .

核查

bun test 通过原始获取、实际签名、使用 独立生成 jose ES256 键, JWT 拒绝/撤销, 范围写入,种子边缘, 服务 HTTP, 命名空间/ 重置/ 错误控制, OpenAPI 随机行走和故意的相差 . 消费者是该期报道的"地表"的港口,并非没有私人应用代码. 没有要求官方 SDK 。 没有使用实时账户证书或写作. APP_STORE_CONNECT_TOKEN=… bun run parity 安全地探测出单一的应用程序列表响应形状; 缺少证书出口 2。 这不是一个完全的供应商随机行走平等主张.

合同来源:苹果公司 官方 OpenAPI 下载, (中文(简体) ), JWT指南, (中文(简体) ), 团队指南, (中文(简体) ), 财务报告和审定财务报表 外部测试器指南。 。 。 . 请求计划从已公布的 OpenAPI 中保留;响应字段是一个范围子集.

故意不模拟

二进制上传,App Store发布,真实邀请电子邮件,构建,设备安装, TestFlight审查先决条件和用户接受邀请. 个人钥匙 不相干的Apple API的长生代号在这个团队键表面之外. 不错 读取权限,每个应用程序密钥访问,高级角色分配限制,关系 扩大/纳入和生产重复诊断变体得不到保证. 管理固定编辑可以构建活的API禁止的状态;种子一致的记录.

API 密码

根运行时间导出 : AppStoreConnectAPI, (中文(简体) ), APP_STORE_CONNECT_NAMESPACE, (中文(简体) ), DEFAULT_RESOURCES, (中文(简体) ), createRuntime, (中文(简体) ), APP_STORE_CONNECT_PRESETS, (中文(简体) ), document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds。 。 。 . 类型 : ApiKey, (中文(简体) ), ResourceType, (中文(简体) ), Linkage, (中文(简体) ), Resource, (中文(简体) ), AppStoreConnectAPIOptions, (中文(简体) ), AppStoreConnectRuntimeOptions, (中文(简体) ), AppStoreConnectRuntime, (中文(简体) ), OperationId, (中文(简体) ), SupportedOperationId。 。 。 . 这个 /server 进口 createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT。 。 。 .

版本与发布记录

@crvouga/mockingbird-service-app-store-connect 共发布 22 个版本,首次发布于 2026/10/05;过去 12 个月发布了 22 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.11.0latest2026/11/11今天
1.10.92026/11/038 天前
1.10.82026/11/038 天前
1.10.72026/11/038 天前
1.10.62026/11/038 天前
1.10.52026/11/038 天前

关于 @crvouga/mockingbird-service-app-store-connect 的常见问题

@crvouga/mockingbird-service-app-store-connect 是什么?

App Store Connect JSON:API 模拟器,具有已核实的ES256 JWTs和TestFlight成员状态.

如何安装 @crvouga/mockingbird-service-app-store-connect?

在项目目录运行 npm install @crvouga/mockingbird-service-app-store-connect,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-app-store-connect,可以用 npx mockingbird-app-store-connect 直接运行。

@crvouga/mockingbird-service-app-store-connect 支持 TypeScript 吗?

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

@crvouga/mockingbird-service-app-store-connect 支持 ESM 还是 CommonJS?

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

@crvouga/mockingbird-service-app-store-connect 可以商用吗?

@crvouga/mockingbird-service-app-store-connect 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-app-store-connect 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-app-store-connect 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,899 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-app-store-connect 还在维护吗?

最新版本 1.11.0 发布于 2026/11/11(今天);至今共发布 22 个版本,其中过去 12 个月发布了 22 个;首次发布于 2026/10/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。