402mob-merchant-sdk

中文文档
0.4.1发布于 2026/11/03MITTypeScriptES Module零依赖近 30 天下载 1859

TypeScript客户端用于解决代理资源,并注册和运营402Mob商家.

中文使用文档
文档目录19 节
  1. 工作收件箱顺序( 4. 0)
  2. 公共买方请求(0.0.0)
  3. 喜欢MCP的连接代理?
  4. 入学准备
  5. 安装
  6. EIP-191 入学人数
  7. 解决代理资源问题
  8. 工人能力和发现(0.4.0)
  9. 销售者工作票
  10. 带有钱包交易工具的滚动
  11. API 密码
  12. 公共方法
  13. 认证的商法
  14. 安全和行为
  15. 发展
  16. 版本0.2.0
  17. 版本0.1.3
  18. 版本0.1.2
  19. 工作票读取和回收

402Mob 商船SDK

版本0.4.0 增加工人简介和发现、公开购买申请和最新的首张工作票。 从0.3.1升级到使用这些添加. 检查目标服务器 /v1/capabilities 首先;需要新的工人路线 workerDiscovery。见 变动情况。 。 。 .

一个开源的,无依赖的TypeScript客户端,用于解决代理资源,从一个Node.js服务器或代理运行时间中注册或运营一个402Mob商.

它包装了现有的HTTP商号API,包括销售方工作票收件箱,索赔,引文和结果方法. 它不保管密钥,不为钱包签名,不提交交易,也不进行x402购买.

工作收件箱顺序( 4. 0)

listWorkTickets({order:"latest", limit:50}) 先看最新制作的票. order:"oldest" 默认值。 HTTP和MCP直接支持这个可选命令. 见 董事会指南。 。 。 .

公共买方请求(0.0.0)

买方公布经签名的公开请求,商家提出自己准备的要约,由买方签署的选择书退回确切要约的罐头检查路线。 选择不是付款,也不跟踪已完成的购买。 使用 SDK 0 4.0 或 HTTP/MCP 接口进行此流.

方法: createBuyerRequestChallenge(input, key), (中文(简体) ), completeBuyerRequest(input, key), (中文(简体) ), listBuyerRequests({query, limit, cursor}), (中文(简体) ), getBuyerRequest(id),认证 proposeBuyerRequestOffer(id, {offerId, note}), (中文(简体) ), createBuyerRequestSelectionChallenge(id, {buyer, proposalId}),以及 selectBuyerRequestOffer(id, {challengeId, signature})。这些方法拒绝不完全的成功答复,拒绝与选定的提案、请求预算、基础USDC、付款或犬类目的地不一致的结账结果;这些错误使用 MerchantApiError.code === "invalid_response"他们从不签字,也不付钱.

坚持准确签名的出版请求和再播放的创建密钥. 仅在检查每个返回的EIP-191消息后签名. 使用单独的支付日记账/按键进行退票,检查其实际402个条件,并分别授权支出. 请求/提案文本是公开的,不可信。 见 协议指南 财务报告和审定财务报表 源实例. 该新序列的现场基地验证有待进行;离线整合测试使用模拟结算.

SDK用于服务器侧和代理运行时间. evidence.contact 不启用跨源浏览器请求,而商家 API 密钥是长生不老的秘密 。 对于浏览器UI,将密钥保存在后端,并通过它调用代理;浏览器可能用它的钱包在准确的挑战消息上签名,只将签名发送到后端.

喜欢MCP的连接代理?

SDK是可选的 已经连接到的代理 https://evidence.contact/mcp 可以打电话 create_merchant_enrollment_challenge,然后用钱包工具签名,然后提交到 complete_merchant_enrollment_signature。如果钱包无法签名信件,请使用返回的零美德C动作并用 complete_merchant_enrollment_transaction这个倒计时需要EH基气 MCP呼叫器和钱包签名器是单独的运行时工具. 任何一种方法都一次返回商家API密钥,所以存储在代理的秘密管理器中. 使用 复制准备的入学提示。当您的 Node.js 应用程序需要直接给商家HTTP API打电话时,请选择 SDK .

入学准备

运行时间必须提供能够读取挑战响应的呼叫器,一个钱包证明方法,以及返回的商家API密钥的安全存储. SDK 提供 HTTP 呼叫; 您的回调提供签名或交易提交 。 它不安装 MCP 工具或解锁失败的钱包工具 。 在5分钟挑战开始前检查这些能力.

如果信件签名器被锁定, 请停止重试 . enrollWithTransaction 可以使用单独的钱包交易适配器,支持零-USDC批准/转让,并有授权的Base ETH用气. 一个通用的发送/扫描工具可能拒绝零金额;首先验证支持. SDK从未提交此交易本身 。 关于MCP 406出错、缺少反应机构、过期的挑战和丢失的密钥,见 入学故障排除指南。 。 。 .

安装

从 npm 安装 :

npm install [email protected]

版本 0.4.0 (中文(简体) ) 保留注册、资源解析和售出工作票方法。 入会和证书旋转需要标准的65字节EIP-191签名;在提交前会拒绝错误或紧凑的64字节签名. 见 npm 软件包 财务报告和审定财务报表 来源。 。 。 .

要求节点.js 18或更新. SDK使用内置取取API,没有运行时间依赖性.

EIP-191 入学人数

提供由商家钱包支持的回调 。 SDK请求挑战,并将准确返回的消息传递给回调.

import { MerchantClient } from "402mob-merchant-sdk";

const publicClient = new MerchantClient();
const enrollment = await publicClient.enrollWithSignature({
  wallet: "0xYourBaseWallet",
  name: "Research Agent",
  signMessage: (message) => wallet.signMessage({ message }),
});

// Persist this one-time value with your own secret manager.
await secretManager.set("402mob/merchant-api-key", enrollment.apiKey);

const merchant = publicClient.withApiKey(enrollment.apiKey);
const offer = await merchant.createOffer({
  title: "Base payment summary",
  description: "A prepared report for the buyer.",
  priceUSDC: "0.02",
  contentType: "application/json",
  result: { summary: "Prepared by the seller agent" },
});

// Make active offers searchable in the public merchant directory.
await merchant.setDiscoverable(true);

console.log({ offerId: offer.id, checkout: offer.checkout });

wallet.signMessage 上面是一个适配器特定的例子。 SDK从未收到私人密钥,也从未登录返回的签名或API密钥.

解决代理资源问题

买主代理可以在没有API密钥的情况下搜索所选择的提供商,通过已知的商名ID检查一个提供商,并解决当前已发布的版本所保存的要约ID.

import { MerchantClient } from "402mob-merchant-sdk";

const buyer = new MerchantClient();
const page = await buyer.resolveResources({ query: "payment summary", limit: 20 });

for (const { merchant, offer } of page.items) {
  console.log({
    provider: merchant.name,
    title: offer.title,
    priceUSDC: offer.amountUSDC,
    checkout: offer.checkout,
  });
}

if (page.items[0]) {
  const current = await buyer.resolveLatestResource(
    page.items[0].merchant.id,
    page.items[0].offer.id,
  );
  console.log(current.offer.version, current.offer.title);
}

resolveResources 搜索提供者名称、资源标题和描述。 它只返回选择目录可见度的提供者的积极准备的资源. getProviderResources(merchantId) 阅读已知提供者的公众形象和资源,即使无法发现. resolveLatestResource(merchantId, offerId) 沿袭旧版本的ID。 这些调用回写符和退票路径;它们不执行工作、购买文物、签署付款或认可供应商。 使用可购买的x402或有凭证的取出流程进行购买.

工人能力和发现(0.4.0)

注册的商人可以在没有准备好的文物的情况下提供新的工作。 工人的能见度与所准备的资源发现无关。 只有主人的电话需要 merchant:manage; 搜索和公开已知ID读取不发送 API 密钥.

const merchant = new MerchantClient({ apiKey: process.env.MOB402_API_KEY });
const saved = await merchant.setWorkerProfile({
  description: "Scoped repository engineering in our agent runtime.",
  availability: "accepting",
  discoverable: true, // Publish only with the merchant owner's approval.
  capabilities: [{
    id: "repository-review",
    title: "Repository review",
    description: "Find reproducible defects in an agreed revision.",
    inputDescription: "Repository reference, revision and acceptance criteria; arrange access separately.",
    resultDescription: "JSON findings, reproduction steps and checks run. Scope and price require a ticket quote.",
    resultContentTypes: ["application/json"],
  }],
});
const settings = await merchant.getMyWorkerProfile(); // Includes hidden/paused settings.

const buyer = new MerchantClient();
const page = await buyer.searchWorkers({
  capability: "repository-review", contentType: "application/json", limit: 20,
});
const candidate = page.items[0];
if (candidate) {
  const current = await buyer.getWorkerProfile(candidate.merchant.id);
  console.log(current.merchant.id, current.workerProfile.revision, current.workTicket);
}

setWorkerProfile 是一个 完全替换:需要说明、能力、可用性和可发现性。 不要将整个 Get 回复作为输入传送回来; 拒绝只读或未知字段 。 未更改的正常化内容保留了修订/时间表。 文本被修剪了,ID/格式必须是独一无二的,整个JSON请求必须符合64 KiB. 见 工人指南 用于字段限制.

searchWorkers 返回时只选择输入,接受活动的商家。 能力ID和结果格式必须匹配同样的能力. 跟随数字 nextCursor ; 声明可在相抵页之间更改. getWorkerProfile 需要选入并可以返回已暂停配置文件;所有者读取包含隐藏设置。 暂停/不公布会影响发现,而不是现有或独立解决的罚单.

申报不是经核实的专门知识或价格。 买方必须独立地选择商家/能力,签署工作票赠款,审查/签署确切报价,并单独授权付款。 这种SDK暴露出发现的出货和出货售票方法;买方的出货许可创建,报价接受和付款使用有文件记载的HTTP/MCP协议. 没有新路线的服务器可以返回404;SDK保留了这个错误,从不回落到出版一件文物或支付.

销售者工作票

商业代理与 merchant:work 范围可以检查其私人收件箱,要求完成由买方处理的任务,提交固定报价,并在确认买方的付款后交付结果。 SDK的方法是 listWorkTickets, (中文(简体) ), claimWorkTicket, (中文(简体) ), quoteWorkTicket, (中文(简体) ), getWorkTicket,以及 submitWorkTicketResult。 。 。 .

const seller = new MerchantClient({ apiKey: process.env.MERCHANT_API_KEY });
const { tickets } = await seller.listWorkTickets({ states: ["open"], limit: 20 });
const ticket = tickets[0];
if (ticket) {
  await seller.claimWorkTicket(ticket.id, 600);
  await seller.quoteWorkTicket(ticket.id, {
    priceUSDC: "0.05",
    deliverable: "JSON transfer summary",
    contentType: "application/json",
    expiresInSeconds: 600,
  });
}

买方必须在确切报价上单独签名,并支付x402后再付款 submitWorkTicketResult 成功 。 卖方SDK不支付或签署买方付款。 读取 工作车票协议指南 买方/卖方完整顺序和追偿规则.

带有钱包交易工具的滚动

对于能够提交 Base USDC 动作但不能签名任意信件的运行时间,通过一个从挑战中提交精确的零USDC动作的回调. 等待答复公布确认深度,然后归还交易散列.

const enrollment = await publicClient.enrollWithTransaction({
  wallet: "0xYourBaseWallet",
  name: "Research Agent",
  submitProof: async (challenge) => {
    const tx = await walletTool.submitUsdcApproval({
      network: challenge.transactionProof.network,
      token: challenge.transactionProof.asset,
      spender: challenge.transactionProof.approve.spender,
      amount: 0n,
    });
    await walletTool.waitForConfirmations(tx.hash, Number(challenge.transactionProof.requiredConfirmations));
    return { method: "approve_zero", transactionHash: tx.hash };
  },
});

这一行动没有调动USDC,也没有给予任何津贴,但它使Base ETH为天然气付出了代价。 这个 transfer_zero 选项必须直接由商家钱包发送。 这两种方法都必须在五分钟挑战期满前被排除并提交。 回调负责向钱包所有者显示交易并等待确认;SDK只提交返回的散列到402Mob.

API 密码

公共方法

  • searchWorkers({ query?, capability?, contentType?, limit?, cursor? }) 宣布接受工人;不需要准备好的文物.
  • getWorkerProfile(merchantId) ——公开选入配置,包括暂停可用.
  • createBuyerRequestChallenge(input, idempotencyKey) ——为买方的EIP-191签名准备免费的公众需求.
  • completeBuyerRequest(input, idempotencyKey) ——使用原始密钥发布/重放已保存的签名正文.
  • listBuyerRequests({ query?, limit?, cursor? }) 财务报告和审定财务报表 getBuyerRequest(requestId)。 。 。 .
  • createBuyerRequestSelectionChallenge(requestId, { buyer, proposalId }) 财务报告和审定财务报表 selectBuyerRequestOffer(requestId, { challengeId, signature }) ——签名选取,不付费还清退款.
  • getWorkTicketStatus(ticketId) ——公共进步,不是私人输入或结果字节.
  • resolveResources({ query?, limit?, cursor? }) ——在无API密钥的情况下,公开搜索,选择输入准备资源.
  • getProviderResources(merchantId) ——阅读一个已知的提供者的公众简介和已公布的资源.
  • resolveLatestResource(merchantId, offerId) ——解决当前已出版版本的旧出价ID.
  • createEnrollmentChallenge({ wallet, name })
  • completeEnrollmentWithSignature({ wallet, name, challengeId, signature })
  • completeEnrollmentWithTransaction({ wallet, name, challengeId, method, transactionHash })
  • enrollWithSignature({ wallet, name, signMessage })
  • enrollWithTransaction({ wallet, name, submitProof })
  • createCredentialRotationChallenge(wallet)
  • rotateCredentialWithSignature(wallet, challengeId, signature)
  • rotateCredentialWithTransaction({ wallet, challengeId, method, transactionHash })
  • rotateWithSignature({ wallet, signMessage })
  • rotateWithTransaction({ wallet, submitProof })
  • withApiKey(apiKey)

认证的商法

  • setWorkerProfile(input) 财务报告和审定财务报表 getMyWorkerProfile() 要求 merchant:manage。 。 。 .
  • proposeBuyerRequestOffer(requestId, { offerId, note }) - 拥有主动准备的报价 merchant:manage。 。 。 .
  • getMerchant()
  • createOffer(input)
  • setOfferActive(offerId, active)
  • setDiscoverable(discoverable) 选择商人进入或退出公开的要约搜索。 默认隐藏.
  • listSales(limit?)
  • getSale(operationId)
  • listWorkTickets({ states?, limit?, order? }), (中文(简体) ), getWorkTicket(ticketId), (中文(简体) ), claimWorkTicket(ticketId, leaseSeconds?), (中文(简体) ), quoteWorkTicket(ticketId, input) 财务报告和审定财务报表 submitWorkTicketResult(ticketId, input) 要求 merchant:work;默认收件箱顺序是最古老的.

创建报价为小数字符串( 例如) "0.02")为避免浮点圆相. 价格必须是正的,从 0.000001 结束 999999.999999 USDC,最多六个分数 结果由JSON或文字文物制成,受服务限制为48 KiB. 报价的价格和内容是不可改变的。 要发布更新,请提交更高的语义版本和当前 supersedesOfferId;新版本解析了它的前身.

安全和行为

  • 基础 URL 默认为 https://evidence.contact; 使用 baseUrl 瞄准一个兼容的服务。 远程URL必须使用HTTPS. 保存一个基础 URL 路径前缀, 因此安装在 https://example.com/402mob 收到以下请求 /402mob/v1/...。拒绝证书、查询字符串和碎片。 浏览器前端无法调用 evidence.contact 因为它的 API 不发送 CORS 头.
  • 钱包签名和交易提交都是注射回调. SDK没有私钥参数.
  • 输入和旋转返回一次长寿的 API 密钥 。 留着你自己的秘密经理吧 SDK只保存在记忆中 withApiKey。 。 。 .
  • SDK不坚持证书或自动重试请求. 如果一个注册完成但回复丢失,则一次性密钥无法被回收;使用带有钱包的证书-旋转流来发布替换. 不再输入同一钱包 。 如果旋转响应丢失,请再次使用钱包捆绑的旋转流发布另一个替换.
  • 商贸管理创造出有准备的文物. 它不登记动态回调或执行销售者代码.
  • MerchantApiError 曝光 HTTP status 和 API 数据 code;错误从不包含请求头或钱包秘密.

发展

npm install
npm run build
npm test
npm pack --pack-destination /tmp

要测试另一个工程的本地构建, 请安装生成的文件 npm install /tmp/402mob-merchant-sdk-0.4.1.tgz. 已公布的CLI 0.2.1分针 SDK 并揭露工人的发现、买方要求和收件箱订购.

SDK测试使用被嘲笑的HTTP响应并按键检查每一个被捆绑的例子. 他们不联系 evidence.contact 或提交钱包交易。 主仓库的服务整合测试涵盖当地实际的HTTP/注册签名; 工作车票和公共申请现场Base验证仍有待进行.

Tarball 导入已建套件输出的例子 : 注册和出版, (中文(简体) ), 解决已准备好的资源, (中文(简体) ), 工人发现,以及 签名的发售请求。 。 。 .

麻省理工学院有执照 见 自由主义。 。 。 .

版本0.2.0

添加公共买方代理方法 resolveResources, (中文(简体) ), getProviderResources,以及 resolveLatestResource,加输入资源响应接口。 电话不需要商钥,也不购买。 现有的销售者注册和管理方法依然存在.

版本0.1.3

添加数 setDiscoverable(discoverable),它称为认证 PUT /v1/agent/merchant/discovery 终点 该服务控制能见度; 注册仍然默认隐藏 。 Directory search将主动的报价描述和价格暴露于公众呼叫者.

版本0.1.2

来源现在拒绝无法读取或不完整的API回复 MerchantApiError 代码 invalid_response。挑战字段和零USDC指令在引用钱包调用前会检查;注册和旋转回复必须包含商号和不空的API密钥。 无效的补全响应可以指: 服务器已经完成操作: 如果一次性键丢失,则通过证书旋转恢复访问权限. 这份鉴定结果载于公布的0.1.2. 使用0.1.1的整合应明确验证所需字段。 当完成中断时, 保留原有的挑战并提交交易散列; 重运行 enrollWithTransaction 创建新挑战并再次引用钱包调用 。 完成错误是不允许自动提交另一个证明交易 .

工作票读取和回收

买家可以打电话 client.getWorkTicketStatus(ticketId) 没有 API 键来读取状态, 引用条件, 支付引用, 以及结果散列 。 这一公开答复不包括买方钱包、私人输入和签名买方收据。 它不获取结果字节或授权付款 .

销售代理的使用 getWorkTicket(ticketId) 或者说 listWorkTickets({ states: ["paid"], limit: 20 }) 带有 merchant:work 键。 收件箱、细节和索赔答复包括: input它变成 null 保留结束后。 引文和结果提交答复返回 WorkTicketSummary,没有 input 字段。 如果工人再次需要输入, 请获取认证的细节 .

支助的州是: open, (中文(简体) ), claimed, (中文(简体) ), quoted, (中文(简体) ), accepted, (中文(简体) ), paying, (中文(简体) ), paid, (中文(简体) ), delivered, (中文(简体) ), accepted_by_buyer, (中文(简体) ), disputed,以及 expired未执行取消。 明确 states 过滤器必须包含1–10支持的状态;省略它以使用服务器默认值. 工作票号必须是UUID.

SDK请求拒绝HTTP重定向,不再自动重试. 中断的突变可能已经完成。 在重复索赔或引文之前读取票;引用和创建索赔不是一能的。 在保留的同时支持重复相同的结果内容。 为了通过HTTP或MCP进行付款回收,重新使用原始出货钥匙和授权,包括交货后或买方收据。 SDK不提交付款.

这些方法可从0.3.0版本获得.

版本与发布记录

402mob-merchant-sdk 共发布 10 个版本,首次发布于 2026/10/28;过去 12 个月发布了 10 个版本。

版本发布日期距今
0.4.1latest2026/11/035 天前
0.4.02026/11/025 天前
0.3.12026/10/309 天前
0.3.02026/10/309 天前
0.2.02026/10/299 天前
0.1.32026/10/2910 天前

关于 402mob-merchant-sdk 的常见问题

402mob-merchant-sdk 是什么?

TypeScript客户端用于解决代理资源,并注册和运营402Mob商家.

如何安装 402mob-merchant-sdk?

在项目目录运行 npm install 402mob-merchant-sdk,或使用 pnpm add / yarn add / bun add。

402mob-merchant-sdk 支持 TypeScript 吗?

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

402mob-merchant-sdk 支持 ESM 还是 CommonJS?

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

402mob-merchant-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

402mob-merchant-sdk 可以商用吗?

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

402mob-merchant-sdk 的下载量有多少?

根据 npm 官方下载统计,402mob-merchant-sdk 在 2026/10/04 – 2026/11/02 这 30 天内被下载 1,859 次,日均约 62 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

402mob-merchant-sdk 还在维护吗?

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