@crvouga/mockingbird-service-nodion (英语)
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
WIP 概念 2022-06-28 (英语) 数据库搜索、 OAuth 令牌交换、 数据库父页面创建和 街区儿童读取. 这是遗留数据库 API,而不是较新的数据源 API.
安装
bun add @crvouga/mockingbird-service-notion
使用量
import { Client } from "@notionhq/client"
import { createRuntime } from "@crvouga/mockingbird-service-notion"
// The app's own Notion client. Only its fetch changes: requests reach the
// emulator in this process instead of api.notion.com.
const emulator = createRuntime()
const notion = new Client({
auth: "mock_notion_token",
notionVersion: "2022-06-28",
fetch: (url: string, init?: RequestInit) => emulator.fetch(new Request(url, init)),
})
const { results } = await notion.search({ filter: { property: "object", value: "database" }, page_size: 100 })
const [database] = results
if (database?.object === "database") console.log(database.properties)
该示例使用 @notionhq/[email protected],这个API版本的SDK行. 运行
mockingbird-notion serve --port 12127 输入 http://localhost:12127 作为
消费者的API来源(SDK的) baseUrl) (中文(简体) ). 保留 /v1 在原始请求路径中。 没有通用供应商
此源代码覆盖的环境变量 。 所报告的整合使用原始取取法.
合同
POST /v1/oauth/token: HTTP 基本客户资格和JSON授权码赠款. 构造/ admin- seeded 代码绑定客户端, 重定向 URI 和工作空间授予 。 代码是 单用; 成功交换返回令牌、 机器人和工作空间元数据.POST /v1/search: 领取者补助金加Notion-Version: 2022-06-28. 回返遗产page_or_database列表中包含数据库 ids/propertys,查询过滤,页面大小, 启动 cursor, 下一个 cursor 有 more 。 成果仅限于授予的工作空间和 数据库编号。 Fixture 插入顺序是稳定的;相关性排名不是模拟的.POST /v1/pages: 数据库 id 父和属性通过名称或id地址. 成功 以页 UUID 返回 200 并保留父/属性。 未知或无法进入 父母返回404;只读补助金返回403。 未知属性和错误值类型 返回 400 不写部分.GET /v1/blocks/{block_id}/children: 返回一页内容的读取符(页 id 也是一页) block id; 连字符或32-hex ids 解析到同页)。 返回文件{object: "list", results, next_cursor, has_more, type: "block", block: {}}有种子的块 顺序; 每个块带id, (中文(简体) ),type, (中文(简体) ),has_children, (中文(简体) ),parent(单位:千美元)<type>对象 (单位:千美元)rich_text[].plain_text, (中文(简体) ),to_do.checked, (中文(简体) ),code.language编号 :code.caption[].plain_text) (中文(简体) ). 一个街区has_children: true列出它的嵌入区块,从它自己的id,到任何深度.page_size默认为100并封顶。 块形状是 已核实文件 (单位:千美元)https://developers.nodion.com/参考/get-block-儿童),没有甲骨文验证. 最好猜一猜,你猜怎么着, 未经甲骨文验证: 不透明next_cursor(最后返回的块的 id; 未知)start_cursor实值400 validation_error),准确的错误消息,404 object_not_found用于 不明身份或补助金以外的页面,400 validation_error用于非UUID标识,以及401unauthorized对于一个丢失或未知的标志。 429和5xx案件使用共享预设.
默认固定式是一个合成调查数据库(名称/标题、分数/号码),其编号为:
mock_notion_token配置 databases, (中文(简体) ), grants, (中文(简体) ), clients 财务报告和审定财务报表 codes 其他费用
工作空间和 OAuth 方案。 此子集不需要授权浏览器或webhooks.
控件
PUT /__admin/pages/{id}/blocks 种子 一个页面的块树 从一个嵌入的轮廓,例如.
{"blocks": [{"type": "heading_1", "text": "FAQ"}, {"type": "toggle", "text": "Q", "children": [{"type": "code", "text": "x", "language": "bash", "caption": "c"}]}], "workspaceId"?, "title"?}。 。 。 .
类型 : paragraph, (中文(简体) ), heading_1..3, (中文(简体) ), bulleted_list_item, (中文(简体) ), numbered_list_item, (中文(简体) ), to_do (单位:千美元)checked, (中文(简体) ),
toggle, (中文(简体) ), quote, (中文(简体) ), callout, (中文(简体) ), code (单位:千美元)language, (中文(简体) ), caption, (中文(简体) ), divider。模拟器将扩展
将缩放为逗号的块形状, 并替换该页上任何较早的树; 未知的 id 变为一个
独立页面。 整个大纲首先被验证:一个问题是 400 什么都没有储存.
块通过 API 写入( B)PATCH,更新,删除)不是模拟.
共享 /__admin/state/{databases,grants,clients,codes,pages} 表面种子并检查记录.
重置还原了构造器固定装置并清除所创建的页面。 共享时间线、时钟、日记
和错误 API 应用;日志不包含页面内容或证书。 只使用合成数据.
命名空间由标题选择, /__admin/ns/{name} 前缀或映射的无记名符号.
设定 adminPrefix 以移动控件.
预设 : unauthorized, (中文(简体) ), rate_limited (429,重试后), server_error (503个)
connection_drop共同过失规则支持延迟和一发一发失败.
接收测试涵盖通过原始取取取、OAuth绑定/重放、计划出错的第284期,
pagination,隔离/重置,日记编辑并服务HTTP. 全部进行财产测试
三次行动并探测出差异. bun scripts/parity.ts 需求 NOTION_API_KEY· ;
它只检查一个被绑定的版本的空搜索,从不创建真实的页面. 生活平等还没有实现.
官方SDK v2.2.15类型提供了存档的有线合同证据.
故意不模拟
新的数据源 API, 完整的丰富文本渲染/注释, 块写( 读取和管理员种子存在), 超出以上列表的块类型, 数据库编辑/ query, 页面母创建,关联排序,完整页面/数据库响应元数据,公式, 卷起、选择选项的创建、关系解决和供应商外地的充分限制. 属性验证检查请求的 schema 的值类型: 标题/ 文本、 数字、 复选框、, 可失效的字符串/日期,选择/状态/多选择,人/关系代号和文件对象. 它没有模仿每个Notion属性限制或将打出的请求值扩展至完整的响应对象. 只有被绑定的API版本被接受.
API 密码
NotionAPI: 用fetch, (中文(简体) ),reset数据库/赠款/客户/编码/页面收藏.createRuntime:共享管理员,名空间,时钟,断层和日记合同.NOTION_NAMESPACE:服务名.NOTION_PRESETS:确定断层预设.DEFAULT_DATABASES:合成调查计划.BLOCK_TYPES: 管理区块大纲接受的区块类型.document, (中文(简体) ),operationIds, (中文(简体) ),supportedOperationIds: 生成了 OpenAPI 元数据.createServer, (中文(简体) ),serveTarget, (中文(简体) ),DEFAULT_PORT从./server:节点HTTP/CLI目标 (默认端口12127).
公共类型 : Property, (中文(简体) ), Database, (中文(简体) ), Grant, (中文(简体) ), OAuthCode, (中文(简体) ), Client, (中文(简体) ), Page, (中文(简体) ),
NotionAPIOptions, (中文(简体) ), OperationId, (中文(简体) ), SupportedOperationId。 。 。 .