# @crvouga/mockingbird-service-wholescripts 中文文档

规范地址：https://npmcn.com/package/%40crvouga/mockingbird-service-wholescripts/

版本：3\.10\.4
npm 元数据更新时间：2026-11-03T01:02:39.972Z
中文译文更新时间：2026-11-11T02:42:48.129Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crvouga/mockingbird-service-wholescripts
原文对照：https://npmcn.com/package/%40crvouga/mockingbird-service-wholescripts/?lang=original
项目主页：https://github.com/crvouga/mockingbird/tree/main/packages/service/wholescripts#readme
源码仓库：https://github.com/crvouga/mockingbird

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.4 MB，18 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-09-23T00:03:23.199Z
- 最新版本发布：2026-11-03T01:02:39.622Z
- 近 30 天下载量：15260（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：37（近 12 个月 37 个）

## 中文简介

状态仿真者 " 批发 " 补充 " API " :产品和私人标签目录、提交命令、状况民意测验和取消,并进行行政地位过渡.

## 安装

```sh
npm install @crvouga/mockingbird-service-wholescripts
```

也可以使用：`pnpm add @crvouga/mockingbird-service-wholescripts`、`yarn add @crvouga/mockingbird-service-wholescripts`、`bun add @crvouga/mockingbird-service-wholescripts`

## README

# @crvouga/ mockingbird-service-wallscriptes 页面存档备份,存于互联网档案馆

> 本地模拟器。 真正的API合同. 部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

国家模拟器 **说明** 用于测试套件的API:产品 目录,私人标签(MedPax)目录,命令提交,状态投票和取消. 命令 只在测试时(模拟器时钟上的管理员过渡或自动推进路径)移动. 批发稿没有发出webhooks,所以应用程序在下一次状态民意调查中看到每个变化.

-   行动范围: [支助](https://github.com/crvouga/mockingbird/blob/main/packages/service/wholescripts/SUPPORT.md)
-   销售商没有发布任何信息。 合同`openapi.yaml`由我们手写 消费者的Zod计划(后端和EMR) `wholescripts.types.ts`)和补充调度器的Python客户端.

## 安装

```bash
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`。 。 。 .

```bash
npx mockingbird-wholescripts serve --port 8803 --auto-advance "2000:Processing,Complete"
```

```ts
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`)),并反复重复 `medPaxSku`s 独有, 加上调度器的 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口. |

部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

## 常见问题

### @crvouga/mockingbird-service-wholescripts 是什么？

状态仿真者 " 批发 " 补充 " API " :产品和私人标签目录、提交命令、状况民意测验和取消,并进行行政地位过渡\.

### 如何安装 @crvouga/mockingbird-service-wholescripts？

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

### @crvouga/mockingbird-service-wholescripts 支持 TypeScript 吗？

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

### @crvouga/mockingbird-service-wholescripts 支持 ESM 还是 CommonJS？

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

### @crvouga/mockingbird-service-wholescripts 可以商用吗？

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

### @crvouga/mockingbird-service-wholescripts 的下载量有多少？

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

### @crvouga/mockingbird-service-wholescripts 还在维护吗？

最新版本 3\.10\.4 发布于 2026/11/03（8 天前）；至今共发布 37 个版本，其中过去 12 个月发布了 37 个；首次发布于 2026/09/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

