@crvouga/mockingbird-service-plane(英语:
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
国家模拟器 飞机 REST API (v1) 用于测试套房, 涵盖我们的错误报告 解析和解析任务需要一个项目:工作项目(Plane的光标被涂上列表,获取, 创建,补丁,注释,链接,状态和标签,带有Plane的速率限制和出错形状. 项目以 Plane 默认工作流程( Backlog, Todo, In) 提供第一使用 进展,完成,取消),所以不需要设置.
- 行动范围: 支助
- 合同
openapi.yaml由Plane的API参考文献和消费者的 佐德计划( zod schemas )plane-response.ts) (中文(简体) ).
安装
npm install -D @crvouga/mockingbird-service-plane
仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务
npx mockingbird-plane serve, (中文(简体) ), createServer 从 ./server (节点),或 createRuntime 与
任何获取服务器.
使用量
后端硬码 https://api.plane.so (单位:千美元)plane-http-client.ts连接 G-Y1级: 让它
(原始内容存档于2013-10-12). env-驱动. 把它指向模仿者; PLANE_ACCESS_TOKEN, (中文(简体) ), PLANE_WORKSPACE_SLUG 财务报告和审定财务报表
PLANE_BUGS_PROJECT_ID 可以是任意值( 工程 ID 必须是一个 UUID, 因为我们的配置
验证).
npx mockingbird-plane serve --port 8821 --rate-limit 60
在测试中,应用程序的Plane SDK(@makeplane/plane-node-sdk)将模拟器的 URL 当作
联合国 baseUrl数字 :
import { PlaneClient } from "@makeplane/plane-node-sdk"
import { createServer } from "@crvouga/mockingbird-service-plane/server"
// Test setup: a local Plane.
const server = await createServer()
// Application code: Plane's SDK. Only its base URL changes.
const plane = new PlaneClient({ baseUrl: server.url, apiKey: "plane_api_test" })
const projectId = "33333333-3333-4333-8333-333333333333"
const item = await plane.workItems.create("acme", projectId, { name: "Checkout fails on Safari" })
// Test control: resolve it the way a teammate would; the resolution watcher then sees group
// "completed".
await fetch(`${server.url}/__admin/work-items/${item.id}/state`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ state: "Done" }),
})
await server.close()
路线
全部在 /api/v1/workspaces/{slug}/projects/{project_id}/,与 X-API-Key。 。 。 . {slug} 这是你的
工作空间的弹片( r)acme (见例中).
| 路线 | 行为 |
|---|---|
GET work-items/ | per_page (≤100), cursor=<per_page>:<page>:<is_prev>, (中文(简体) ), order_by (默认) -created_at) (中文(简体) ). 飞机的信封: results, (中文(简体) ), next_cursor, (中文(简体) ), prev_cursor, (中文(简体) ), next_page_results, (中文(简体) ), prev_page_results, (中文(简体) ), count, (中文(简体) ), total_count, (中文(简体) ), total_pages, (中文(简体) ), total_results, (中文(简体) ), grouped_by, (中文(简体) ), sub_grouped_by, (中文(简体) ), extra_stats。一个错误的光标是 400 . |
POST work-items/ | {name, description_html?, state?, labels?, priority?} − 201带UUID id每个项目 sequence_id, (中文(简体) ), state (默认后台日志), labels, (中文(简体) ), created_at...未知状态/标签代号为 DRF 400s({"state": ["Invalid pk \"…\" - object does not exist."]}); 缺少名称为 {"name": ["This field is required."]}。 。 。 . |
GET 编号 : PATCH work-items/{id}/ | 读取或部分更新state, (中文(简体) ), labels, (中文(简体) ), name, (中文(简体) ), description_html, (中文(简体) ), priority) (中文(简体) ). completed_at 随州之群. |
GET 编号 : POST work-items/{id}/comments/ | {comment_html, access?} • 201条评论. |
GET 编号 : POST work-items/{id}/links/ | {url, title?} ~ 201 链接; 相同的 URL 两次是 409 {error, id}。 。 。 . |
GET states/ | 该项目的工作流程规定:id, (中文(简体) ), name, (中文(简体) ), group, (中文(简体) ), color, (中文(简体) ), sequence, (中文(简体) ), default) (中文(简体) ). |
GET 编号 : POST labels/ | {name, color?, description?} − 201个标签;重复名称为409 {error, id: <existing>}。 。 。 . |
GET 编号 : POST cycles/ | 创建方式 {name, description?, start_date?, end_date?, external_source?, external_id?}。这两个日期必须同时存在或无效。 列表使用光标信封(默认为20行); cycle_view=current 返回空阵列。 其他意见: all, (中文(简体) ), upcoming, (中文(简体) ), completed, (中文(简体) ), draft, (中文(简体) ), incomplete。 。 。 . |
GET 编号 : POST cycles/{id}/cycle-issues/ | 邮政 {issues: [<work item UUID>]} 添加或移动项目并返回成员行,不重复。 获得最新字段的返回已分解的工作项目 。 未知/外国项目ID被忽略;缺失周期为404. 已完成周期拒绝添加 CYCLE_COMPLETED。 。 。 . |
GET work-item-types/ | 包括稳定的UUID、名称、, project_ids,默认/活性旗帜和时间戳。 此端点没有光标 pagination . |
种子类型通过 POST /__admin/work-item-types,然后发送 type_id 关于工作项目的创建或
补丁。 都回来 type_id 财务报告和审定财务报表 type和飞机一样
工作项目序列器
已经 未知的ID 以 DRF 失败 type_id 在任何字段或序列编号改变之前出错.
创建继承种子默认类型; 明确的补丁 type_id: null 释出.
周期日期使用 UTC 项目日及模拟时钟, 遵循 Plane 周期终点 财务报告和审定财务报表 日期转换器数字 : 未来/过去开始时间为00:00:01,今天的开始时间是创作时间,结束时间为23:59:00. 当前过滤器包括两个端点. 周期计数随工作项目状态变化而来.
错误: 无密钥 401 {"detail": "Authentication credentials were not provided."},外部键
apiKeys 401 (中文(简体) ) {"detail": "Given API token is not valid"},未知项目/项目404
{"error": "The requested resource does not exist."}节奏429 {"detail": "Request was throttled. Expected available in N seconds."} 与 x-ratelimit-* 头.
管理员(超过标准合同)
| 路线 | 效果 |
|---|---|
POST /__admin/work-items/:id/state | {state: "<id or name>"}: 移动项目(例如: Done就像队友一样. |
GET /__admin/work-items | 命名空间的工作项目 . |
POST /__admin/projects | {workspace, project}:现在提供一个项目;回答其状态和标签. |
POST /__admin/work-item-types | {workspace, project, types: [{name, description?, is_default?}]}:种子项目类型元数据有稳定的ID;重复调用更新元数据并保存创建时间. 类型开始为空 。 无效的批次不会部分写入 . |
GET/PUT /__admin/settings | {apiKeys?, rateLimitPerMinute?: number | null, projects?: ["<slug>/<uuid>"]}。 。 。 . rateLimitPerMinute: 60 复制模拟时钟上的平面限制; projects 已存在的指针(其他404). |
错误预设( E)POST /__admin/faults {"preset": "<name>", "count"?: n}: rate_limited (429个),
server_error (500个), bad_gateway (502 HTML), (中文(简体) ), unauthorized (401个), invalid_json (200个)
非JSON读取, network_drop, (中文(简体) ), slow (15秒,超过10秒),
pagination_missing_cursor, (中文(简体) ), pagination_repeated_cursor我们的客户在0,2和
8个,所以 count: 2 在第三次尝试中恢复 count: 3 预算用完; 写到
从来没有重复过.
命名空间
x-mockingbird-namespace页:1 /__admin/ns/<name> 前缀在基址上,或用 API 键:
PUT /__admin/credentials {"credentials": {"<PLANE_ACCESS_TOKEN>": "<namespace>"}}。 。 。 .
故意不模拟
- Plane webhooks(我们的应用民调),周期编辑/删除和非UTC项目时区,模块,页面,收录,附件,成员,
估计数、工作日志和
expand=。 。 。 . - 删除工作项目,注释,链接或标签;存档.
- 供应商工作项目类型管理,定制类型计划,史诗和跨项目类型共享. 具有此列表/任务表面管理器控制的种子类型 .
- 丰富文本处理 :
description_stripped编号 :comment_stripped是标记的文本.
API 密码
| 导出 | 仁爱 | 说明 |
|---|---|---|
PlaneAPI | 类 | 进程模拟器 : fetch(request), (中文(简体) ), reset(), (中文(简体) ), ensureProject(slug, id), (中文(简体) ), statesOf(id), (中文(简体) ), labelsOf(id), (中文(简体) ), moveToState(itemId, stateIdOrName), (中文(简体) ), applyPatch(item, patch), (中文(简体) ), workItems()选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), settings。 。 。 . |
createRuntime | 函数 | 全面服务合同的仿真器(保健、管理员、命名空间、证书、预设)。 选项 : settings, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog, (中文(简体) ), sqlite。 。 。 . |
PLANE_PRESETS | 对象 | 每个命名的断层预设. |
PLANE_NAMESPACE | 字符串 | 服务名称, "plane"。 。 。 . |
DEFAULT_STATES | 数组 | 新项目开始的工作流程. |
apiKeyCredential | 函数 | 这个 X-API-Key 请求包含( 如何绘制命名空间的证书映射) . |
uuidFrom | 函数 | 确定 v4 形状的 UUID 模拟器来自字符串 . |
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds | 数值 | OpenAPI合同及其操作代号. |
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT (单位:千美元)./server(中文(简体) ) | 节点 | 服务过来 node:http; 数据 serve CLI目标(--api-key, (中文(简体) ), --rate-limit; 第8821号口. |
部分 嘲笑鸟。 。 。 .