@crvouga/ mockingbird-service-wallscriptes 页面存档备份,存于互联网档案馆
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
国家模拟器 说明 用于测试套件的API:产品 目录,私人标签(MedPax)目录,命令提交,状态投票和取消. 命令 只在测试时(模拟器时钟上的管理员过渡或自动推进路径)移动. 批发稿没有发出webhooks,所以应用程序在下一次状态民意调查中看到每个变化.
- 行动范围: 支助
- 销售商没有发布任何信息。 合同
openapi.yaml由我们手写 消费者的Zod计划(后端和EMR)wholescripts.types.ts)和补充调度器的Python客户端.
安装
npm install -D @crvouga/mockingbird-service-wholescripts
仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务
npx mockingbird-wholescripts serve, (中文(简体) ), createServer 从 ./server (节点),或 createRuntime
与任何获取服务器.
使用量
点 WHOLESCRIPTS_API_URL 在模拟者那里。 是后端读取的
(单位:千美元)global-services/services/wholescripts),《欧洲公路货运公约》(services/wholescripts)和补充排程器
(单位:千美元)supplement_management) (中文(简体) ). 无空 WHOLESCRIPTS_USERNAME 编号 : WHOLESCRIPTS_PASSWORD
双对被接受,除非你用 --username/--password。 。 。 .
npx mockingbird-wholescripts serve --port 8803 --auto-advance "2000:Processing,Complete"
import { createServer } from "@crvouga/mockingbird-service-wholescripts/server"
// Test setup: a local Wholescripts.
const server = await createServer()
const baseUrl = server.url // the app's WHOLESCRIPTS_API_URL
// Application code: the order it submits to Wholescripts.
const headers = { authorization: `Basic ${btoa("acme:secret")}`, "content-type": "application/json" }
const response = await fetch(`${baseUrl}/api/Orders/Submit`, {
method: "POST",
headers,
body: JSON.stringify({
ShippingAddress: { FName: "Ada", LName: "L", Address1: "1 Main St", City: "Phoenix", State: "AZ", Zip: "85004" },
Items: [{ Sku: "SKU001", Quantity: 1 }],
ShippingMethod: "Ground",
}),
})
const submitted = (await response.json()) as { orderNumber: string }
// Test control: ship it the way the vendor would.
await fetch(`${baseUrl}/__admin/orders/${submitted.orderNumber}/transition`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ to: "Complete", trackingNumber: "1Z999", carrier: "UPS" }),
})
// Application code: its next status poll sees the shipment.
await fetch(`${baseUrl}/api/Orders/Status?ordernum=${submitted.orderNumber}`, { headers })
await server.close()
路线
| 路线 | 行为 |
|---|---|
GET /api/Orders/PrivateLabelProductList | {privateLabelProducts: [], medPaxPills: [{sku, genericName, privateLabelName, quantity}], privateLabelCartons: [{sku, name, cartonImage, quantity}]}。 。 。 . |
GET /api/Orders/ProductList | 产品行productName, (中文(简体) ), sku, (中文(简体) ), medPaxSku, (中文(简体) ), categories价格, quantity, (中文(简体) ), defaultDosing选项 medPaxDetails) (中文(简体) ). instockonly=true 保留 quantity > 0 (EMR号), search 匹配名称/SKU/品牌/类别(补充调度器), limit 盖子. |
POST /api/Orders/Submit | {ShippingAddress, Notes?, Items: [{Sku, Quantity, MedPaxName?, MedPaxPills?: [{Sku, Quantity, ItemTime}]}], ShippingMethod} → {orderNumber, success: true, msg}违反合同或未知的SKU(产品、MedPax、避孕药或卡通SKU)仍然 200个 与 success: false 和原因在内 msg,这是两个消费者 读. |
GET /api/Orders/Status?ordernum= | [{orderNumber, orderDate, salesOrder, status, tracking: [{trackingNumber, carrier, trackingUrl}], message, subTotal, shipMethod, shipCharge, discount, tax, serviceFee, orderTotal}]· ; [] 对于未知的命令。 总价来自目录(MedPax SKUs按其 medPaxDetails 价格)外加9.95航运("免费"方法为0). |
POST /api/Orders/Cancel | {OrderNumber} → {success, msg}成功时 Pending编号 :Processing 没有跟踪; 否则 success: false。未知顺序 : 404. |
缺少或错误 基本全权证书答401 {"Message": "Authorization has been denied for this request."}。 。 。 .
状态是 Pending (新设), Processing, (中文(简体) ), Complete, (中文(简体) ), Cancelled, (中文(简体) ), Error,或任意字符串 a
测试集。 我们的消费者如何阅读它们:排程地图 Pending编号 :Processing 改为 placed (或
shipped 一旦跟踪存在, Complete 改为 shipped (承运人交接,而不是交货),
任何包含 cancel编号 :error 改为 cancelled编号 :failed,其他一切则 unknown。 。 。 .
后端和EMR不映射状态.
管理员(超过标准合同)
| 路线 | 效果 |
|---|---|
POST /__admin/orders/:orderNumber/transition | {to, trackingNumber?, carrier?, trackingUrl?, message?}。一个追踪号码附于 tracking· ; Complete 不产生UPS号码. Processing编号 :Complete 设定 salesOrder。 。 。 . |
GET /__admin/orders | 命名空间的订单(只有SKU和数量). |
GET编号 :PUT /__admin/catalog | 读取或替换 {products, medPaxPills, privateLabelCartons} 用于命名空间. |
GET编号 :PUT /__admin/settings | {accounts?: [{username, password}], autoAdvance?: {afterMs, path} | null}。 。 。 . |
POST /__admin/tick | 应用模拟器时钟上到期的每个自动推进步骤(已安装的模拟器每100 ms). |
错误预设( E)POST /__admin/faults {"preset": "<name>", "count"?: n}· ; GET /__admin/faults/presets:
submit_rejected (200个) success: false, (中文(简体) ), submit_timeout (排列顺序,然后是
连接滴:调度器的"命令可能已经放置"分支,", status_empty (单位:千美元)[], (中文(简体) ),
status_schema_drift (后端的 zod 拒绝,所以它返回) null, (中文(简体) ), server_error
(500美元,计时器重复使用), unauthorized (401) (英语).
命名空间
x-mockingbird-namespace页:1 /__admin/ns/<name> 前缀在 WHOLESCRIPTS_API_URL,或按基本
用户名 : PUT /__admin/credentials {"credentials": {"<WHOLESCRIPTS_USERNAME>": "<namespace>"}}。 。 。 .
公司和种子数据
默认目录是我们消费者自己测试用的行
(消费者应用软件) wholescripts-service.test.ts)),并反复重复
medPaxSkus 独有, 加上调度器的 MedPax 框 000000000200095263 财务报告和审定财务报表 medPaxDetails
排行计时器的目录同步读取. Protein Powder (单位:千美元)PP001)已出库. 没有沙盒
记录存在; 装入记录行 serve --catalog <file>,则 catalog 选项,或
PUT /__admin/catalog。 。 。 .
serve --catalog rows.json 在每个命名空间的默认目录上设置一个 JSON 文件,并且
重设返回( 不同于 PUT /__admin/catalog,它取代目录,直到下一次重置。 文件为
{products?, medPaxPills?, privateLabelCartons?},或一系列产品。 一行需要它来
sku (和产品 productName; 其它字符串默认为 "" 和每个数字
0,所以给予 quantity 应生存的产品 instockonly=true默认
(单位:千美元)--catalog-mode merge) 默认的 SKU 已经替换了它的行,其他的就是
后附,并保留所保留文件的列表. --catalog-mode replace 让整个文件
目录( 它所遗漏的列表为空) 。 在舰队,设定 options: {"catalog": "rows.json", "catalog-mode": "replace"}编辑 catalog 选项 createRuntime 仍然需要一个整体 Catalog。 。 。 .
故意不模拟
- Webhooks:批发版无;状态有民意调查.
- 实际完成时间、部分装运和返回:除非测试或
autoAdvance移动它. - 货运地址和接收者经过验证,但从未存储或回放(PHI).
- 实际收税,贴现,服务费和承运人税率:收税/贴现/收费为0,航运为平价.
- 付款授权:未能付款只能通过
submit_rejected或一个Error过渡.
API 密码
| 导出 | 仁爱 | 说明 |
|---|---|---|
WholescriptsAPI | 类 | 进程模拟器 : fetch(request), (中文(简体) ), reset(), (中文(简体) ), transition(orderNumber, {to, …}), (中文(简体) ), tick(), (中文(简体) ), orders()选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), catalog, (中文(简体) ), settings。 。 。 . |
createRuntime | 函数 | 全面服务合同的仿真器(保健、管理员、命名空间、证书、预设)。 选项 : catalog, (中文(简体) ), settings, (中文(简体) ), tickMs, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog。 。 。 . |
WHOLESCRIPTS_PRESETS | 对象 | 每个命名的断层预设. |
WHOLESCRIPTS_NAMESPACE | 字符串 | 服务名称, "wholescripts"。 。 。 . |
basicUsername | 函数 | Basic 用户名包含一个请求( 如何将证书映射到命名空间) . |
canonicalStatus | 函数 | 过渡目标的犬壳(Canonic 外壳)complete → Complete) (中文(简体) ). |
DEFAULT_CATALOG | 对象 | 默认 {products, medPaxPills, privateLabelCartons}。 。 。 . |
parseCatalogDocument, (中文(简体) ), mergeCatalog | 函数 | 检查a --catalog 文档(填充已省略的字段)并将其放入SKU的目录. |
MEDPAX_BOX_SKU | 字符串 | 补充排程器的MedPax盒 SKU, 000000000200095263。 。 。 . |
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds | 数值 | 销售商为OpenAPI合同及其业务代号. |
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT (单位:千美元)./server(中文(简体) ) | 节点 | 服务过来 node:http (自动提醒每100米) serve CLI目标; 第8803口. |
部分 嘲笑鸟。 。 。 .