moltspay 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/chains/index.d.mts +6 -6
  2. package/dist/chains/index.d.ts +6 -6
  3. package/dist/chains/index.js +2 -2
  4. package/dist/chains/index.js.map +1 -1
  5. package/dist/chains/index.mjs +2 -2
  6. package/dist/chains/index.mjs.map +1 -1
  7. package/dist/cli.js +36 -36
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cli.mjs +36 -36
  10. package/dist/cli.mjs.map +1 -1
  11. package/dist/guide/index.d.mts +7 -7
  12. package/dist/guide/index.d.ts +7 -7
  13. package/dist/guide/index.js +50 -50
  14. package/dist/guide/index.js.map +1 -1
  15. package/dist/guide/index.mjs +50 -50
  16. package/dist/guide/index.mjs.map +1 -1
  17. package/dist/{index-CZzgdtin.d.mts → index-CyFg9s2m.d.mts} +1 -1
  18. package/dist/{index-CZzgdtin.d.ts → index-CyFg9s2m.d.ts} +1 -1
  19. package/dist/index.d.mts +89 -89
  20. package/dist/index.d.ts +89 -89
  21. package/dist/index.js +275 -275
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +275 -275
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/orders/index.d.mts +13 -13
  26. package/dist/orders/index.d.ts +13 -13
  27. package/dist/orders/index.js +10 -10
  28. package/dist/orders/index.js.map +1 -1
  29. package/dist/orders/index.mjs +10 -10
  30. package/dist/orders/index.mjs.map +1 -1
  31. package/dist/permit/index.d.mts +11 -11
  32. package/dist/permit/index.d.ts +11 -11
  33. package/dist/permit/index.js +14 -14
  34. package/dist/permit/index.js.map +1 -1
  35. package/dist/permit/index.mjs +14 -14
  36. package/dist/permit/index.mjs.map +1 -1
  37. package/dist/verify/index.d.mts +4 -4
  38. package/dist/verify/index.d.ts +4 -4
  39. package/dist/verify/index.js +13 -13
  40. package/dist/verify/index.js.map +1 -1
  41. package/dist/verify/index.mjs +13 -13
  42. package/dist/verify/index.mjs.map +1 -1
  43. package/dist/wallet/index.d.mts +72 -72
  44. package/dist/wallet/index.d.ts +72 -72
  45. package/dist/wallet/index.js +48 -48
  46. package/dist/wallet/index.js.map +1 -1
  47. package/dist/wallet/index.mjs +48 -48
  48. package/dist/wallet/index.mjs.map +1 -1
  49. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@ import { ethers } from "ethers";
3
3
 
4
4
  // src/chains/index.ts
5
5
  var CHAINS = {
6
- // ============ 主网 ============
6
+ // ============ Mainnet ============
7
7
  base: {
8
8
  name: "Base",
9
9
  chainId: 8453,
@@ -31,7 +31,7 @@ var CHAINS = {
31
31
  explorerTx: "https://etherscan.io/tx/",
32
32
  avgBlockTime: 12
33
33
  },
34
- // ============ 测试网 ============
34
+ // ============ Testnet ============
35
35
  base_sepolia: {
36
36
  name: "Base Sepolia",
37
37
  chainId: 84532,
@@ -102,7 +102,7 @@ var PaymentAgent = class _PaymentAgent {
102
102
  );
103
103
  }
104
104
  /**
105
- * 生成支付请求(Invoice)
105
+ * Generate payment request(Invoice)
106
106
  */
107
107
  createInvoice(params) {
108
108
  const expiresMinutes = params.expiresMinutes || 30;
@@ -129,14 +129,14 @@ var PaymentAgent = class _PaymentAgent {
129
129
  return invoice;
130
130
  }
131
131
  /**
132
- * 生成钱包深度链接(支持 MetaMask 等)
132
+ * Generate wallet deep link(supports MetaMask etc)
133
133
  */
134
134
  generateDeepLink(amount, memo) {
135
135
  const amountWei = Math.floor(amount * 1e6);
136
136
  return `https://metamask.app.link/send/${this.chainConfig.usdc}@${this.chainConfig.chainId}/transfer?address=${this.walletAddress}&uint256=${amountWei}`;
137
137
  }
138
138
  /**
139
- * 验证链上支付
139
+ * Verify on-chain payment
140
140
  */
141
141
  async verifyPayment(txHash, options = {}) {
142
142
  try {
@@ -191,7 +191,7 @@ var PaymentAgent = class _PaymentAgent {
191
191
  }
192
192
  }
193
193
  /**
194
- * 扫描最近转账(按金额匹配)
194
+ * Scan recent transfers (match by amount)
195
195
  */
196
196
  async scanRecentTransfers(expectedAmount, timeoutMinutes = 30) {
197
197
  try {
@@ -229,7 +229,7 @@ var PaymentAgent = class _PaymentAgent {
229
229
  }
230
230
  }
231
231
  /**
232
- * 获取钱包余额
232
+ * Get wallet balance
233
233
  */
234
234
  async getBalance(address) {
235
235
  const addr = address || this.walletAddress;
@@ -245,7 +245,7 @@ var PaymentAgent = class _PaymentAgent {
245
245
  };
246
246
  }
247
247
  /**
248
- * 格式化 Invoice 为人类可读消息
248
+ * Format Invoice as human-readable message
249
249
  */
250
250
  formatInvoiceMessage(invoice, includeJson = true) {
251
251
  let msg = `\u{1F3AC} **Payment Request**
@@ -307,7 +307,7 @@ var Wallet = class {
307
307
  );
308
308
  }
309
309
  /**
310
- * 获取钱包余额
310
+ * Get wallet balance
311
311
  */
312
312
  async getBalance() {
313
313
  const [ethBalance, usdcBalance] = await Promise.all([
@@ -322,7 +322,7 @@ var Wallet = class {
322
322
  };
323
323
  }
324
324
  /**
325
- * 发送 USDC 转账
325
+ * Send USDC transfer
326
326
  */
327
327
  async transfer(to, amount) {
328
328
  try {
@@ -363,14 +363,14 @@ var Wallet = class {
363
363
  }
364
364
  }
365
365
  /**
366
- * 获取 ETH 余额
366
+ * Get ETH balance
367
367
  */
368
368
  async getEthBalance() {
369
369
  const balance = await this.provider.getBalance(this.address);
370
370
  return ethers2.formatEther(balance);
371
371
  }
372
372
  /**
373
- * 获取 USDC 余额
373
+ * Get USDC balance
374
374
  */
375
375
  async getUsdcBalance() {
376
376
  const balance = await this.usdcContract.balanceOf(this.address);
@@ -391,7 +391,7 @@ var AuditLog = class {
391
391
  this.loadLastHash();
392
392
  }
393
393
  /**
394
- * 记录审计日志
394
+ * Record audit log
395
395
  */
396
396
  async log(params) {
397
397
  const now = /* @__PURE__ */ new Date();
@@ -408,7 +408,7 @@ var AuditLog = class {
408
408
  requester: params.requester,
409
409
  prev_hash: this.lastHash,
410
410
  hash: "",
411
- // 计算后填充
411
+ // Filled after calculation
412
412
  metadata: params.metadata
413
413
  };
414
414
  entry.hash = this.calculateHash(entry);
@@ -419,7 +419,7 @@ var AuditLog = class {
419
419
  return entry;
420
420
  }
421
421
  /**
422
- * 读取指定日期的日志
422
+ * Read logs for specified date
423
423
  */
424
424
  read(date) {
425
425
  const filePath = this.getFilePath(date || /* @__PURE__ */ new Date());
@@ -431,7 +431,7 @@ var AuditLog = class {
431
431
  return lines.map((line) => JSON.parse(line));
432
432
  }
433
433
  /**
434
- * 验证日志完整性
434
+ * Verify log integrity
435
435
  */
436
436
  verify(date) {
437
437
  const entries = this.read(date);
@@ -449,7 +449,7 @@ var AuditLog = class {
449
449
  return { valid: errors.length === 0, errors };
450
450
  }
451
451
  /**
452
- * 搜索日志
452
+ * Search logs
453
453
  */
454
454
  search(filter) {
455
455
  const results = [];
@@ -473,14 +473,14 @@ var AuditLog = class {
473
473
  return results;
474
474
  }
475
475
  /**
476
- * 获取日志文件路径
476
+ * Get log file path
477
477
  */
478
478
  getFilePath(date) {
479
479
  const dateStr = date.toISOString().slice(0, 10);
480
480
  return path.join(this.basePath, `audit_${dateStr}.jsonl`);
481
481
  }
482
482
  /**
483
- * 计算条目哈希
483
+ * Calculate entry hash
484
484
  */
485
485
  calculateHash(entry) {
486
486
  const data = {
@@ -497,7 +497,7 @@ var AuditLog = class {
497
497
  return crypto.createHash("sha256").update(str).digest("hex").slice(0, 16);
498
498
  }
499
499
  /**
500
- * 加载最后一条日志的哈希
500
+ * Load last log entry hash
501
501
  */
502
502
  loadLastHash() {
503
503
  const today = /* @__PURE__ */ new Date();
@@ -512,7 +512,7 @@ var AuditLog = class {
512
512
  }
513
513
  }
514
514
  /**
515
- * 确保目录存在
515
+ * Ensure directory exists
516
516
  */
517
517
  ensureDir() {
518
518
  if (!fs.existsSync(this.basePath)) {
@@ -524,9 +524,9 @@ var AuditLog = class {
524
524
  // src/wallet/SecureWallet.ts
525
525
  var DEFAULT_LIMITS = {
526
526
  singleMax: 100,
527
- // 单笔最大 $100
527
+ // Single max $100
528
528
  dailyMax: 1e3,
529
- // 日最大 $1000
529
+ // Daily max $1000
530
530
  requireWhitelist: true
531
531
  };
532
532
  var SecureWallet = class {
@@ -547,21 +547,21 @@ var SecureWallet = class {
547
547
  this.auditLog = new AuditLog(config.auditPath);
548
548
  }
549
549
  /**
550
- * 获取钱包地址
550
+ * Get wallet address
551
551
  */
552
552
  get address() {
553
553
  return this.wallet.address;
554
554
  }
555
555
  /**
556
- * 获取余额
556
+ * Get balance
557
557
  */
558
558
  async getBalance() {
559
559
  return this.wallet.getBalance();
560
560
  }
561
561
  /**
562
- * 安全转账(带限额和白名单检查)
562
+ * Secure transfer (with limit and whitelist checks)
563
563
  *
564
- * 支持两种调用方式:
564
+ * Supports two calling methods:
565
565
  * - transfer({ to, amount, reason?, requester? })
566
566
  * - transfer(to, amount)
567
567
  */
@@ -661,7 +661,7 @@ var SecureWallet = class {
661
661
  return result;
662
662
  }
663
663
  /**
664
- * 审批待处理转账
664
+ * Approve pending transfer
665
665
  */
666
666
  async approve(requestId, approver) {
667
667
  const pending = this.pendingTransfers.get(requestId);
@@ -702,7 +702,7 @@ var SecureWallet = class {
702
702
  return result;
703
703
  }
704
704
  /**
705
- * 拒绝待处理转账
705
+ * Reject pending transfer
706
706
  */
707
707
  async reject(requestId, rejecter, reason) {
708
708
  const pending = this.pendingTransfers.get(requestId);
@@ -717,7 +717,7 @@ var SecureWallet = class {
717
717
  });
718
718
  }
719
719
  /**
720
- * 添加白名单地址
720
+ * Add to whitelist
721
721
  */
722
722
  async addToWhitelist(address, addedBy) {
723
723
  const addr = address.toLowerCase();
@@ -730,7 +730,7 @@ var SecureWallet = class {
730
730
  });
731
731
  }
732
732
  /**
733
- * 移除白名单地址
733
+ * Remove from whitelist
734
734
  */
735
735
  async removeFromWhitelist(address, removedBy) {
736
736
  const addr = address.toLowerCase();
@@ -743,32 +743,32 @@ var SecureWallet = class {
743
743
  });
744
744
  }
745
745
  /**
746
- * 检查地址是否在白名单
746
+ * Check if address is whitelisted
747
747
  */
748
748
  isWhitelisted(address) {
749
749
  return this.whitelist.has(address.toLowerCase());
750
750
  }
751
751
  /**
752
- * 获取待处理转账列表
752
+ * Get pending transfers list
753
753
  */
754
754
  getPendingTransfers() {
755
755
  return Array.from(this.pendingTransfers.values()).filter((p) => p.status === "pending");
756
756
  }
757
757
  /**
758
- * 获取当前限额配置
758
+ * Get current limit config
759
759
  */
760
760
  getLimits() {
761
761
  return { ...this.limits };
762
762
  }
763
763
  /**
764
- * 获取今日已用额度
764
+ * Get daily used amount
765
765
  */
766
766
  getDailyUsed() {
767
767
  this.updateDailyTotal();
768
768
  return this.dailyTotal;
769
769
  }
770
770
  /**
771
- * 更新日限额计数器
771
+ * Update daily limit counter
772
772
  */
773
773
  updateDailyTotal() {
774
774
  const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
@@ -939,24 +939,24 @@ var PermitWallet = class {
939
939
  );
940
940
  }
941
941
  /**
942
- * 检查 Permit 是否有效
942
+ * Check if Permit is valid (current allowance)
943
943
  */
944
944
  async checkPermitAllowance(owner) {
945
945
  const allowance = await this.usdcContract.allowance(owner, this.address);
946
946
  return (Number(allowance) / 1e6).toFixed(2);
947
947
  }
948
948
  /**
949
- * 使用 Permit 授权进行支付
949
+ * Pay using Permit authorization
950
950
  *
951
- * 流程:
952
- * 1. 调用 permit() 让合约记录 Boss 的授权
953
- * 2. 调用 transferFrom() Boss 钱包转账到收款方
951
+ * Flow:
952
+ * 1. Call permit() to record Boss's authorization in the contract
953
+ * 2. Call transferFrom() to transfer from Boss's wallet to recipient
954
954
  *
955
955
  * @example
956
956
  * ```typescript
957
957
  * const wallet = new PermitWallet({ chain: 'base' });
958
958
  *
959
- * // Boss 签署的 permit 数据
959
+ * // Boss-signed permit data
960
960
  * const permit = {
961
961
  * owner: '0xBOSS...',
962
962
  * spender: wallet.address,
@@ -1079,14 +1079,14 @@ var PermitWallet = class {
1079
1079
  }
1080
1080
  }
1081
1081
  /**
1082
- * 获取 ETH 余额(用于支付 gas
1082
+ * Get ETH balance (for gas)
1083
1083
  */
1084
1084
  async getGasBalance() {
1085
1085
  const balance = await this.provider.getBalance(this.address);
1086
1086
  return ethers4.formatEther(balance);
1087
1087
  }
1088
1088
  /**
1089
- * 检查是否有足够的 gas
1089
+ * Check if there's enough gas
1090
1090
  */
1091
1091
  async hasEnoughGas(minEth = 1e-3) {
1092
1092
  const balance = await this.getGasBalance();
@@ -1098,17 +1098,17 @@ function formatPermitRequest(params) {
1098
1098
  const chainConfig = getChain(chain);
1099
1099
  const deadline = Math.floor(Date.now() / 1e3) + deadlineHours * 3600;
1100
1100
  const value = BigInt(Math.floor(amount * 1e6)).toString();
1101
- return `\u{1F510} **USDC \u652F\u4ED8\u989D\u5EA6\u6388\u6743\u8BF7\u6C42**
1101
+ return `\u{1F510} **USDC Spending Allowance Request**
1102
1102
 
1103
- ${reason ? `**\u7528\u9014:** ${reason}
1103
+ ${reason ? `**Purpose:** ${reason}
1104
1104
  ` : ""}
1105
- **\u6388\u6743\u8BE6\u60C5:**
1106
- - \u88AB\u6388\u6743\u5730\u5740 (Agent): \`${agentAddress}\`
1107
- - \u6388\u6743\u91D1\u989D: ${amount} USDC
1108
- - \u6709\u6548\u671F: ${deadlineHours} \u5C0F\u65F6
1109
- - \u94FE: ${chainConfig.name}
1105
+ **Authorization Details:**
1106
+ - Authorized address (Agent): \`${agentAddress}\`
1107
+ - Amount: ${amount} USDC
1108
+ - Valid for: ${deadlineHours} hours
1109
+ - Chain: ${chainConfig.name}
1110
1110
 
1111
- **\u8BF7\u4F7F\u7528\u94B1\u5305\u7B7E\u7F72\u4EE5\u4E0B EIP-2612 Permit:**
1111
+ **Please sign the following EIP-2612 Permit with your wallet:**
1112
1112
 
1113
1113
  \`\`\`json
1114
1114
  {
@@ -1138,9 +1138,9 @@ ${reason ? `**\u7528\u9014:** ${reason}
1138
1138
  }
1139
1139
  \`\`\`
1140
1140
 
1141
- \u7B7E\u540D\u540E\uFF0C\u8BF7\u5C06 { v, r, s, deadline } \u53D1\u7ED9 Agent\u3002
1141
+ After signing, send { v, r, s, deadline } to the Agent.
1142
1142
 
1143
- \u26A0\uFE0F \u6CE8\u610F\uFF1A\u6B64\u6388\u6743\u4EC5\u5141\u8BB8 Agent \u4ECE\u60A8\u7684\u94B1\u5305\u652F\u4ED8\u6700\u591A ${amount} USDC\uFF0C\u4E0D\u4F1A\u6CC4\u9732\u79C1\u94A5\u3002`;
1143
+ \u26A0\uFE0F Note: This authorization only allows the Agent to spend up to ${amount} USDC from your wallet. Your private key is never exposed.`;
1144
1144
  }
1145
1145
 
1146
1146
  // src/permit/Permit.ts
@@ -1170,13 +1170,13 @@ var PermitPayment = class {
1170
1170
  );
1171
1171
  }
1172
1172
  /**
1173
- * 获取用户当前 nonce
1173
+ * Get user current nonce
1174
1174
  */
1175
1175
  async getNonce(owner) {
1176
1176
  return Number(await this.usdcContract.nonces(owner));
1177
1177
  }
1178
1178
  /**
1179
- * 生成 EIP-712 签名请求(发给前端/用户钱包)
1179
+ * Generate EIP-712 signing request (for frontend/user wallet)
1180
1180
  */
1181
1181
  async createPermitRequest(owner, amount, orderId, deadlineMinutes = 30) {
1182
1182
  const nonce = await this.getNonce(owner);
@@ -1224,11 +1224,11 @@ var PermitPayment = class {
1224
1224
  };
1225
1225
  }
1226
1226
  /**
1227
- * 执行 permit + transferFrom
1227
+ * Execute permit + transferFrom
1228
1228
  *
1229
- * @param owner 用户地址
1230
- * @param amount 金额
1231
- * @param signature 用户签名 {v, r, s, deadline}
1229
+ * @param owner User address
1230
+ * @param amount Amount
1231
+ * @param signature User signature {v, r, s, deadline}
1232
1232
  */
1233
1233
  async executePermitAndTransfer(owner, amount, signature) {
1234
1234
  if (!this.wallet) {
@@ -1260,7 +1260,7 @@ var PermitPayment = class {
1260
1260
  }
1261
1261
  }
1262
1262
  /**
1263
- * 仅执行 permit(不 transfer
1263
+ * Execute permit only (no transfer)
1264
1264
  */
1265
1265
  async executePermit(owner, amount, signature) {
1266
1266
  if (!this.wallet) {
@@ -1290,22 +1290,22 @@ var PermitPayment = class {
1290
1290
  }
1291
1291
  }
1292
1292
  /**
1293
- * 格式化 Permit 请求为用户消息
1293
+ * Format Permit request as user message
1294
1294
  */
1295
1295
  formatPermitMessage(request) {
1296
1296
  const { typed_data } = request;
1297
1297
  const { message } = typed_data;
1298
- return `\u{1F510} **\u7B7E\u540D\u6388\u6743\u8BF7\u6C42**
1298
+ return `\u{1F510} **Signature Authorization Request**
1299
1299
 
1300
- \u6388\u6743 \`${(Number(message.value) / 1e6).toFixed(2)} USDC\` \u7ED9\u670D\u52A1\u65B9
1300
+ Authorize \`${(Number(message.value) / 1e6).toFixed(2)} USDC\` to service provider
1301
1301
 
1302
- **\u7B7E\u540D\u4FE1\u606F\uFF1A**
1302
+ **Signature Details:**
1303
1303
  - Owner: \`${message.owner}\`
1304
1304
  - Spender: \`${message.spender}\`
1305
1305
  - Amount: ${(Number(message.value) / 1e6).toFixed(2)} USDC
1306
1306
  - Deadline: ${new Date(message.deadline * 1e3).toISOString()}
1307
1307
 
1308
- \u8BF7\u5728\u94B1\u5305\u4E2D\u7B7E\u540D\u6B64\u8BF7\u6C42\uFF08\u4E0D\u6D88\u8017 Gas\uFF09\u3002
1308
+ Please sign this request in your wallet (no gas required).
1309
1309
 
1310
1310
  \`\`\`json
1311
1311
  ${JSON.stringify(typed_data, null, 2)}
@@ -1350,13 +1350,13 @@ var OrderManager = class {
1350
1350
  this.defaultChain = options.defaultChain || "base";
1351
1351
  }
1352
1352
  /**
1353
- * 生成订单ID
1353
+ * Generate order ID
1354
1354
  */
1355
1355
  generateOrderId() {
1356
1356
  return "vo_" + randomBytes2(4).toString("hex");
1357
1357
  }
1358
1358
  /**
1359
- * 创建订单
1359
+ * Create order
1360
1360
  */
1361
1361
  async createOrder(params) {
1362
1362
  const order = {
@@ -1373,13 +1373,13 @@ var OrderManager = class {
1373
1373
  return order;
1374
1374
  }
1375
1375
  /**
1376
- * 获取订单
1376
+ * Get order
1377
1377
  */
1378
1378
  async getOrder(orderId) {
1379
1379
  return this.store.get(orderId);
1380
1380
  }
1381
1381
  /**
1382
- * 更新订单
1382
+ * Update order
1383
1383
  */
1384
1384
  async updateOrder(orderId, updates) {
1385
1385
  const order = await this.store.get(orderId);
@@ -1389,7 +1389,7 @@ var OrderManager = class {
1389
1389
  return updated;
1390
1390
  }
1391
1391
  /**
1392
- * 查找用户的待支付订单
1392
+ * Find user pending orders
1393
1393
  */
1394
1394
  async findPendingOrder(userId) {
1395
1395
  const orders = await this.store.findByUser(userId, "pending");
@@ -1403,7 +1403,7 @@ var OrderManager = class {
1403
1403
  return null;
1404
1404
  }
1405
1405
  /**
1406
- * 标记订单为已支付
1406
+ * Mark order as paid
1407
1407
  */
1408
1408
  async markAsPaid(orderId, txHash, payerAddress) {
1409
1409
  return this.updateOrder(orderId, {
@@ -1414,13 +1414,13 @@ var OrderManager = class {
1414
1414
  });
1415
1415
  }
1416
1416
  /**
1417
- * 标记订单为生成中
1417
+ * Mark order as generating
1418
1418
  */
1419
1419
  async markAsGenerating(orderId) {
1420
1420
  return this.updateOrder(orderId, { status: "generating" });
1421
1421
  }
1422
1422
  /**
1423
- * 标记订单为完成
1423
+ * Mark order as completed
1424
1424
  */
1425
1425
  async markAsCompleted(orderId, videoPath) {
1426
1426
  return this.updateOrder(orderId, {
@@ -1429,7 +1429,7 @@ var OrderManager = class {
1429
1429
  });
1430
1430
  }
1431
1431
  /**
1432
- * 标记订单为失败
1432
+ * Mark order as failed
1433
1433
  */
1434
1434
  async markAsFailed(orderId, error) {
1435
1435
  return this.updateOrder(orderId, {
@@ -1438,7 +1438,7 @@ var OrderManager = class {
1438
1438
  });
1439
1439
  }
1440
1440
  /**
1441
- * 取消订单
1441
+ * Cancel order
1442
1442
  */
1443
1443
  async cancelOrder(orderId) {
1444
1444
  return this.updateOrder(orderId, { status: "cancelled" });
@@ -1458,23 +1458,23 @@ async function verifyPayment(params) {
1458
1458
  chain = getChain(params.chain || "base");
1459
1459
  }
1460
1460
  if (!chain) {
1461
- return { verified: false, error: `\u4E0D\u652F\u6301\u7684\u94FE: ${params.chain}` };
1461
+ return { verified: false, error: `Unsupported chain: ${params.chain}` };
1462
1462
  }
1463
1463
  } catch (e) {
1464
- return { verified: false, error: `\u4E0D\u652F\u6301\u7684\u94FE: ${params.chain}` };
1464
+ return { verified: false, error: `Unsupported chain: ${params.chain}` };
1465
1465
  }
1466
1466
  try {
1467
1467
  const provider = new ethers6.JsonRpcProvider(chain.rpc);
1468
1468
  const receipt = await provider.getTransactionReceipt(txHash);
1469
1469
  if (!receipt) {
1470
- return { verified: false, error: "\u4EA4\u6613\u672A\u627E\u5230\u6216\u672A\u786E\u8BA4" };
1470
+ return { verified: false, error: "Transaction not found or not confirmed" };
1471
1471
  }
1472
1472
  if (receipt.status !== 1) {
1473
- return { verified: false, error: "\u4EA4\u6613\u5931\u8D25" };
1473
+ return { verified: false, error: "Transaction failed" };
1474
1474
  }
1475
1475
  const usdcAddress = chain.usdc?.toLowerCase();
1476
1476
  if (!usdcAddress) {
1477
- return { verified: false, error: `\u94FE ${chain.name} \u672A\u914D\u7F6EUSDC\u5730\u5740` };
1477
+ return { verified: false, error: `Chain ${chain.name} USDC address not configured` };
1478
1478
  }
1479
1479
  for (const log of receipt.logs) {
1480
1480
  if (log.address.toLowerCase() !== usdcAddress) {
@@ -1493,7 +1493,7 @@ async function verifyPayment(params) {
1493
1493
  if (amount < expectedAmount) {
1494
1494
  return {
1495
1495
  verified: false,
1496
- error: `\u91D1\u989D\u4E0D\u8DB3: \u6536\u5230 ${amount} USDC, \u9700\u8981 ${expectedAmount} USDC`,
1496
+ error: `Insufficient amount: received ${amount} USDC, expected ${expectedAmount} USDC`,
1497
1497
  amount,
1498
1498
  from,
1499
1499
  to,
@@ -1510,7 +1510,7 @@ async function verifyPayment(params) {
1510
1510
  blockNumber: receipt.blockNumber
1511
1511
  };
1512
1512
  }
1513
- return { verified: false, error: "\u672A\u627E\u5230USDC\u8F6C\u8D26\u8BB0\u5F55" };
1513
+ return { verified: false, error: "No USDC transfer found" };
1514
1514
  } catch (e) {
1515
1515
  return { verified: false, error: e.message || String(e) };
1516
1516
  }
@@ -1556,19 +1556,19 @@ async function waitForTransaction(txHash, chain = "base", confirmations = 1, tim
1556
1556
  try {
1557
1557
  chainConfig = typeof chain === "number" ? getChainById(chain) : getChain(chain);
1558
1558
  if (!chainConfig) {
1559
- return { verified: false, confirmed: false, error: `\u4E0D\u652F\u6301\u7684\u94FE: ${chain}` };
1559
+ return { verified: false, confirmed: false, error: `Unsupported chain: ${chain}` };
1560
1560
  }
1561
1561
  } catch (e) {
1562
- return { verified: false, confirmed: false, error: `\u4E0D\u652F\u6301\u7684\u94FE: ${chain}` };
1562
+ return { verified: false, confirmed: false, error: `Unsupported chain: ${chain}` };
1563
1563
  }
1564
1564
  const provider = new ethers6.JsonRpcProvider(chainConfig.rpc);
1565
1565
  try {
1566
1566
  const receipt = await provider.waitForTransaction(txHash, confirmations, timeoutMs);
1567
1567
  if (!receipt) {
1568
- return { verified: false, confirmed: false, error: "\u7B49\u5F85\u8D85\u65F6" };
1568
+ return { verified: false, confirmed: false, error: "Timeout waiting" };
1569
1569
  }
1570
1570
  if (receipt.status !== 1) {
1571
- return { verified: false, confirmed: true, error: "\u4EA4\u6613\u5931\u8D25" };
1571
+ return { verified: false, confirmed: true, error: "Transaction failed" };
1572
1572
  }
1573
1573
  return {
1574
1574
  verified: true,
@@ -1589,131 +1589,131 @@ function generatePaymentGuide(params) {
1589
1589
  price,
1590
1590
  recipientAddress,
1591
1591
  chain = "base",
1592
- serviceName = "\u89C6\u9891\u751F\u6210\u670D\u52A1"
1592
+ serviceName = "Video Generation Service"
1593
1593
  } = params;
1594
1594
  const chainId = chain === "base" ? 8453 : 84532;
1595
- const chainName = chain === "base" ? "Base \u4E3B\u7F51" : "Base Sepolia \u6D4B\u8BD5\u7F51";
1595
+ const chainName = chain === "base" ? "Base Mainnet" : "Base Sepolia Testnet";
1596
1596
  const explorer = chain === "base" ? "https://basescan.org/tx/" : "https://sepolia.basescan.org/tx/";
1597
1597
  return `\u{1F3AC} **${serviceName}**
1598
1598
 
1599
- \u{1F4CB} **\u8BA2\u5355\u4FE1\u606F:**
1600
- - \u8BA2\u5355\u53F7: \`${orderId}\`
1601
- - \u5185\u5BB9: ${prompt.length > 50 ? prompt.slice(0, 50) + "..." : prompt}
1602
- - \u4EF7\u683C: **${price} USDC**
1603
- - \u94FE: ${chainName}
1599
+ \u{1F4CB} **Order Details:**
1600
+ - Order ID: \`${orderId}\`
1601
+ - Content: ${prompt.length > 50 ? prompt.slice(0, 50) + "..." : prompt}
1602
+ - Price: **${price} USDC**
1603
+ - Chain: ${chainName}
1604
1604
 
1605
1605
  ---
1606
1606
 
1607
- ## \u{1F4B3} \u5982\u4F55\u652F\u4ED8
1607
+ ## \u{1F4B3} How to Pay
1608
1608
 
1609
- ### \u65B9\u5F0F\u4E00\uFF1A\u5B89\u88C5 moltspay SDK\uFF08\u63A8\u8350\uFF09
1609
+ ### Option 1: Install moltspay SDK (Recommended)
1610
1610
 
1611
1611
  \`\`\`bash
1612
1612
  npm install moltspay ethers
1613
1613
  \`\`\`
1614
1614
 
1615
- **\u521B\u5EFA\u94B1\u5305\u5E76\u652F\u4ED8\uFF1A**
1615
+ **Create wallet and pay:**
1616
1616
 
1617
1617
  \`\`\`javascript
1618
1618
  const { SecureWallet, getChain } = require('moltspay');
1619
1619
  const { Wallet } = require('ethers');
1620
1620
 
1621
- // 1. \u521B\u5EFA\u65B0\u94B1\u5305\uFF08\u9996\u6B21\u4F7F\u7528\uFF09
1621
+ // 1. Create new wallet (first time)
1622
1622
  const newWallet = Wallet.createRandom();
1623
- console.log('\u94B1\u5305\u5730\u5740:', newWallet.address);
1624
- console.log('\u79C1\u94A5\uFF08\u8BF7\u5B89\u5168\u4FDD\u5B58\uFF09:', newWallet.privateKey);
1623
+ console.log('Wallet address:', newWallet.address);
1624
+ console.log('Private key (save securely):', newWallet.privateKey);
1625
1625
 
1626
- // 2. \u6216\u4F7F\u7528\u5DF2\u6709\u94B1\u5305
1626
+ // 2. Or use existing wallet
1627
1627
  const wallet = new SecureWallet({
1628
1628
  chainId: ${chainId},
1629
- privateKey: process.env.WALLET_KEY, // \u4F60\u7684\u79C1\u94A5
1630
- limits: { requireWhitelist: false } // \u5141\u8BB8\u5411\u4EFB\u610F\u5730\u5740\u8F6C\u8D26
1629
+ privateKey: process.env.WALLET_KEY, // Your private key
1630
+ limits: { requireWhitelist: false } // Allow transfers to any address
1631
1631
  });
1632
1632
 
1633
- // 3. \u67E5\u770B\u4F59\u989D
1633
+ // 3. Check balance
1634
1634
  const balance = await wallet.getBalance();
1635
- console.log('USDC\u4F59\u989D:', balance.usdc);
1635
+ console.log('USDC balance:', balance.usdc);
1636
1636
 
1637
- // 4. \u652F\u4ED8
1637
+ // 4. Pay
1638
1638
  const result = await wallet.transfer('${recipientAddress}', '${price}');
1639
1639
  if (result.success) {
1640
- console.log('\u2705 \u652F\u4ED8\u6210\u529F\uFF01');
1641
- console.log('\u4EA4\u6613hash:', result.hash);
1642
- // \u628A\u4EA4\u6613hash\u53D1\u7ED9\u6211
1640
+ console.log('\u2705 Payment successful!');
1641
+ console.log('Tx hash:', result.hash);
1642
+ // Send the tx hash to me
1643
1643
  }
1644
1644
  \`\`\`
1645
1645
 
1646
- ### \u65B9\u5F0F\u4E8C\uFF1A\u76F4\u63A5\u8F6C\u8D26
1646
+ ### Option 2: Direct Transfer
1647
1647
 
1648
- \u4ECE\u4EFB\u610F\u94B1\u5305\u8F6C\u8D26 USDC\uFF1A
1649
- - **\u94FE:** ${chainName} (Chain ID: ${chainId})
1648
+ Transfer USDC from any wallet:
1649
+ - **Chain:** ${chainName} (Chain ID: ${chainId})
1650
1650
  - **Token:** USDC
1651
- - **\u6536\u6B3E\u5730\u5740:** \`${recipientAddress}\`
1652
- - **\u91D1\u989D:** ${price} USDC
1651
+ - **Recipient:** \`${recipientAddress}\`
1652
+ - **Amount:** ${price} USDC
1653
1653
 
1654
1654
  ---
1655
1655
 
1656
- ## \u2705 \u652F\u4ED8\u5B8C\u6210\u540E
1656
+ ## \u2705 After Payment
1657
1657
 
1658
- \u8BF7\u53D1\u9001**\u4EA4\u6613hash**\u7ED9\u6211\uFF0C\u683C\u5F0F\uFF1A
1658
+ Send me the **transaction hash**, format:
1659
1659
  \`\`\`
1660
1660
  tx: 0x1234...
1661
1661
  \`\`\`
1662
1662
 
1663
- \u6216\u76F4\u63A5\u53D1\u9001hash\uFF1A
1663
+ Or just send the hash directly:
1664
1664
  \`\`\`
1665
1665
  0x1234abcd...
1666
1666
  \`\`\`
1667
1667
 
1668
- \u6211\u4F1A\u9A8C\u8BC1\u94FE\u4E0A\u4EA4\u6613\u540E\u5F00\u59CB\u5904\u7406\u4F60\u7684\u8BF7\u6C42\u3002
1668
+ I'll verify the on-chain transaction and start processing your request.
1669
1669
 
1670
1670
  ---
1671
1671
 
1672
1672
  \u{1F4E6} **moltspay:** https://www.npmjs.com/package/moltspay
1673
- \u{1F517} **\u533A\u5757\u6D4F\u89C8\u5668:** ${explorer}`;
1673
+ \u{1F517} **Block Explorer:** ${explorer}`;
1674
1674
  }
1675
1675
  function generatePaymentReminder(params) {
1676
1676
  const { orderId, price, recipientAddress, chain = "base" } = params;
1677
1677
  const chainName = chain === "base" ? "Base" : "Base Sepolia";
1678
- return `\u23F3 **\u5F85\u652F\u4ED8\u8BA2\u5355: ${orderId}**
1678
+ return `\u23F3 **Pending Order: ${orderId}**
1679
1679
 
1680
- \u8BF7\u652F\u4ED8 **${price} USDC** \u5230:
1681
- - \u94FE: ${chainName}
1682
- - \u5730\u5740: \`${recipientAddress}\`
1680
+ Please pay **${price} USDC** to:
1681
+ - Chain: ${chainName}
1682
+ - Address: \`${recipientAddress}\`
1683
1683
 
1684
- \u652F\u4ED8\u540E\u53D1\u9001\u4EA4\u6613hash\u7ED9\u6211\u3002
1684
+ Send the tx hash after payment.
1685
1685
 
1686
1686
  ---
1687
- \u{1F4A1} \u6CA1\u6709\u652F\u4ED8\u80FD\u529B\uFF1F\u8FD0\u884C \`npm install moltspay\` \u83B7\u53D6\u652F\u4ED8SDK`;
1687
+ \u{1F4A1} No payment capability? Run \`npm install moltspay\` to get the payment SDK`;
1688
1688
  }
1689
1689
  function generateWalletGuide() {
1690
- return `## \u{1F510} \u521B\u5EFA\u652F\u4ED8\u94B1\u5305
1690
+ return `## \u{1F510} Create Payment Wallet
1691
1691
 
1692
- **1. \u5B89\u88C5 moltspay:**
1692
+ **1. Install moltspay:**
1693
1693
  \`\`\`bash
1694
1694
  npm install moltspay ethers
1695
1695
  \`\`\`
1696
1696
 
1697
- **2. \u521B\u5EFA\u65B0\u94B1\u5305:**
1697
+ **2. Create new wallet:**
1698
1698
  \`\`\`javascript
1699
1699
  const { Wallet } = require('ethers');
1700
1700
 
1701
1701
  const wallet = Wallet.createRandom();
1702
- console.log('\u5730\u5740:', wallet.address);
1703
- console.log('\u79C1\u94A5:', wallet.privateKey);
1704
- // \u26A0\uFE0F \u8BF7\u5B89\u5168\u4FDD\u5B58\u79C1\u94A5\uFF01
1702
+ console.log('Address:', wallet.address);
1703
+ console.log('Private key:', wallet.privateKey);
1704
+ // \u26A0\uFE0F Save the private key securely!
1705
1705
  \`\`\`
1706
1706
 
1707
- **3. \u83B7\u53D6 USDC:**
1708
- - \u4E3B\u7F51: \u4ECE\u4EA4\u6613\u6240\u63D0\u5E01\u5230\u4F60\u7684\u94B1\u5305\u5730\u5740
1709
- - \u6D4B\u8BD5\u7F51: \u4F7F\u7528 Base Sepolia faucet
1707
+ **3. Get USDC:**
1708
+ - Mainnet: Withdraw from exchange to your wallet
1709
+ - Testnet: Use Base Sepolia faucet
1710
1710
 
1711
- **4. \u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF:**
1711
+ **4. Set environment variable:**
1712
1712
  \`\`\`bash
1713
- export WALLET_KEY="\u4F60\u7684\u79C1\u94A5"
1713
+ export WALLET_KEY="your_private_key"
1714
1714
  \`\`\`
1715
1715
 
1716
- \u5B8C\u6210\u540E\u5373\u53EF\u4F7F\u7528 moltspay \u8FDB\u884C\u94FE\u4E0A\u652F\u4ED8\uFF01`;
1716
+ You're now ready to make on-chain payments with moltspay!`;
1717
1717
  }
1718
1718
  function extractTransactionHash(message) {
1719
1719
  const match = message.match(/0x[a-fA-F0-9]{64}/);
@@ -1773,77 +1773,77 @@ function generateReceiptFromInvoice(invoice, verifyResult, delivery) {
1773
1773
  });
1774
1774
  }
1775
1775
  function formatReceiptMessage(receipt) {
1776
- let msg = `\u{1F9FE} **\u4EA4\u6613\u6536\u636E**
1776
+ let msg = `\u{1F9FE} **Transaction Receipt**
1777
1777
 
1778
- **\u53D1\u7968\u53F7:** \`${receipt.invoiceId}\`
1779
- **\u8BA2\u5355\u53F7:** \`${receipt.orderId}\`
1778
+ **Invoice:** \`${receipt.invoiceId}\`
1779
+ **Order:** \`${receipt.orderId}\`
1780
1780
 
1781
1781
  ---
1782
1782
 
1783
- **\u670D\u52A1:** ${receipt.service}
1784
- ${receipt.description ? `**\u63CF\u8FF0:** ${receipt.description}
1783
+ **Service:** ${receipt.service}
1784
+ ${receipt.description ? `**Description:** ${receipt.description}
1785
1785
  ` : ""}
1786
- **\u91D1\u989D:** ${receipt.amount} ${receipt.token}
1787
- **\u94FE:** ${receipt.chain} (Chain ID: ${receipt.chainId})
1786
+ **Amount:** ${receipt.amount} ${receipt.token}
1787
+ **Chain:** ${receipt.chain} (Chain ID: ${receipt.chainId})
1788
1788
 
1789
1789
  ---
1790
1790
 
1791
- **\u4ED8\u6B3E\u65B9:** \`${receipt.payer}\`
1792
- **\u6536\u6B3E\u65B9:** \`${receipt.recipient}\`
1793
- **\u4EA4\u6613:** [\`${receipt.txHash.slice(0, 10)}...${receipt.txHash.slice(-8)}\`](${receipt.txUrl})
1794
- **\u652F\u4ED8\u65F6\u95F4:** ${receipt.paidAt}`;
1791
+ **Payer:** \`${receipt.payer}\`
1792
+ **Recipient:** \`${receipt.recipient}\`
1793
+ **Transaction:** [\`${receipt.txHash.slice(0, 10)}...${receipt.txHash.slice(-8)}\`](${receipt.txUrl})
1794
+ **Paid at:** ${receipt.paidAt}`;
1795
1795
  if (receipt.delivery) {
1796
1796
  msg += `
1797
1797
 
1798
1798
  ---
1799
1799
 
1800
- **\u4EA4\u4ED8\u4FE1\u606F:**`;
1800
+ **Delivery Info:**`;
1801
1801
  if (receipt.delivery.url) {
1802
1802
  msg += `
1803
- - \u4E0B\u8F7D\u94FE\u63A5: ${receipt.delivery.url}`;
1803
+ - Download: ${receipt.delivery.url}`;
1804
1804
  }
1805
1805
  if (receipt.delivery.fileHash) {
1806
1806
  msg += `
1807
- - \u6587\u4EF6\u6821\u9A8C: \`${receipt.delivery.fileHash}\``;
1807
+ - Checksum: \`${receipt.delivery.fileHash}\``;
1808
1808
  }
1809
1809
  if (receipt.delivery.deliveredAt) {
1810
1810
  msg += `
1811
- - \u4EA4\u4ED8\u65F6\u95F4: ${receipt.delivery.deliveredAt}`;
1811
+ - Delivered at: ${receipt.delivery.deliveredAt}`;
1812
1812
  }
1813
1813
  }
1814
1814
  msg += `
1815
1815
 
1816
1816
  ---
1817
1817
 
1818
- _\u6536\u636E\u751F\u6210\u65F6\u95F4: ${receipt.issuedAt}_`;
1818
+ _Receipt issued: ${receipt.issuedAt}_`;
1819
1819
  return msg;
1820
1820
  }
1821
1821
  function formatReceiptText(receipt) {
1822
- let msg = `\u{1F9FE} \u4EA4\u6613\u6536\u636E
1822
+ let msg = `\u{1F9FE} Transaction Receipt
1823
1823
 
1824
- \u53D1\u7968\u53F7: ${receipt.invoiceId}
1825
- \u8BA2\u5355\u53F7: ${receipt.orderId}
1824
+ Invoice: ${receipt.invoiceId}
1825
+ Order: ${receipt.orderId}
1826
1826
 
1827
- \u670D\u52A1: ${receipt.service}
1828
- \u91D1\u989D: ${receipt.amount} ${receipt.token}
1829
- \u94FE: ${receipt.chain}
1827
+ Service: ${receipt.service}
1828
+ Amount: ${receipt.amount} ${receipt.token}
1829
+ Chain: ${receipt.chain}
1830
1830
 
1831
- \u4ED8\u6B3E\u65B9: ${receipt.payer}
1832
- \u6536\u6B3E\u65B9: ${receipt.recipient}
1833
- \u4EA4\u6613: ${receipt.txHash}
1834
- \u67E5\u770B: ${receipt.txUrl}
1835
- \u652F\u4ED8\u65F6\u95F4: ${receipt.paidAt}`;
1831
+ Payer: ${receipt.payer}
1832
+ Recipient: ${receipt.recipient}
1833
+ Tx: ${receipt.txHash}
1834
+ Explorer: ${receipt.txUrl}
1835
+ Paid at: ${receipt.paidAt}`;
1836
1836
  if (receipt.delivery) {
1837
1837
  msg += `
1838
1838
 
1839
- \u4EA4\u4ED8\u4FE1\u606F:`;
1839
+ Delivery:`;
1840
1840
  if (receipt.delivery.url) {
1841
1841
  msg += `
1842
- \u4E0B\u8F7D: ${receipt.delivery.url}`;
1842
+ Download: ${receipt.delivery.url}`;
1843
1843
  }
1844
1844
  if (receipt.delivery.fileHash) {
1845
1845
  msg += `
1846
- \u6821\u9A8C: ${receipt.delivery.fileHash}`;
1846
+ Checksum: ${receipt.delivery.fileHash}`;
1847
1847
  }
1848
1848
  }
1849
1849
  return msg;
@@ -1855,252 +1855,252 @@ function formatReceiptJson(receipt) {
1855
1855
  // src/templates/index.ts
1856
1856
  var SellerTemplates = {
1857
1857
  /**
1858
- * 1. 能力识别 - 询问买方是否有支付能力
1858
+ * 1. Capability Check - Ask if buyer has payment capability
1859
1859
  */
1860
1860
  askPaymentCapability() {
1861
- return `\u53EF\u4EE5\u3002\u6211\u5148\u786E\u8BA4\u4E00\u4E0B\uFF1A\u4F60\u73B0\u5728\u662F\u5426\u5DF2\u7ECF\u5177\u5907\u94FE\u4E0A\u652F\u4ED8 USDC \u7684\u80FD\u529B\uFF08\u6709\u53EF\u7528\u94B1\u5305\u548C\u53EF\u7528\u8D44\u91D1/\u989D\u5EA6\uFF09\uFF1F`;
1861
+ return `Sure. First, let me confirm: do you currently have the ability to pay USDC on-chain (have a wallet and available funds/allowance)?`;
1862
1862
  },
1863
1863
  /**
1864
- * 2. 能力协商 - 说明结算方式
1864
+ * 2. Settlement Method - Explain how we settle
1865
1865
  */
1866
1866
  explainSettlement(chain = "base") {
1867
1867
  const chainConfig = getChain(chain);
1868
- return `\u6211\u4EEC\u7684\u7ED3\u7B97\u65B9\u5F0F\u662F\uFF1AUSDC\uFF08${chainConfig.name} \u94FE\u4E0A\uFF09\u3002\u4F60\u8FD9\u8FB9\u53EA\u8981\u6EE1\u8DB3\u4E24\u70B9\u5C31\u884C\uFF1A
1869
- 1\uFF09\u6709\u4E00\u4E2A\u94B1\u5305\u5730\u5740\uFF1B
1870
- 2\uFF09\u94B1\u5305\u91CC\u6709 USDC\uFF0C\u6216\u62E5\u6709\u8005\u7ED9\u4F60\u4E00\u4E2A\u53EF\u7528\u989D\u5EA6\u6388\u6743\uFF08\u66F4\u63A8\u8350\u989D\u5EA6\u6388\u6743\uFF09\u3002
1871
- \u4F60\u53EF\u4EE5\u6309\u6211\u5F15\u5BFC\u5B8C\u6210\u5417\uFF1F`;
1868
+ return `Our settlement method is: USDC (on-chain, ${chainConfig.name}). You just need two things:
1869
+ 1) A wallet address;
1870
+ 2) USDC in your wallet, or a spending allowance from your owner (allowance is recommended).
1871
+ Can you follow my guidance to set this up?`;
1872
1872
  },
1873
1873
  /**
1874
- * 3.1 引导安装 - 第一步安装 SDK
1874
+ * 3.1 Installation Guide - First step: install SDK
1875
1875
  */
1876
1876
  guideInstall() {
1877
- return `\u7B2C\u4E00\u6B65\uFF1A\u8BF7\u5728\u4F60\u7684\u8FD0\u884C\u73AF\u5883\u5B89\u88C5\u652F\u4ED8\u6A21\u5757\u3002\u6267\u884C\uFF1A\`npm install moltspay ethers\`\u3002
1878
- \u5B89\u88C5\u5B8C\u6210\u540E\uFF0C\u521B\u5EFA\u4E00\u4E2A\u94B1\u5305\u5730\u5740\uFF0C\u5E76\u628A\u5730\u5740\u53D1\u7ED9\u6211\uFF08\u53EA\u53D1\u5730\u5740\uFF0C\u4E0D\u8981\u53D1\u79C1\u94A5/\u52A9\u8BB0\u8BCD\uFF09\u3002`;
1877
+ return `Step 1: Install the payment module in your environment. Run: \`npm install moltspay ethers\`.
1878
+ After installation, create a wallet address and send it to me (address only, never send private key/mnemonic).`;
1879
1879
  },
1880
1880
  /**
1881
- * 3.2 确认钱包地址
1881
+ * 3.2 Confirm Wallet Address
1882
1882
  */
1883
1883
  confirmWalletAddress(address) {
1884
- return `\u6536\u5230\u3002\u63D0\u9192\uFF1A\u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u8981\u628A\u79C1\u94A5/\u52A9\u8BB0\u8BCD\u53D1\u7ED9\u4EFB\u4F55\u4EBA\uFF08\u5305\u62EC\u6211\uFF09\u3002
1885
- \u4F60\u7684\u94B1\u5305\u5730\u5740\u662F \`${address}\`\u3002
1886
- \u7B2C\u4E8C\u6B65\uFF1A\u4F60\u9700\u8981\u8BA9\u4F60\u7684\u62E5\u6709\u8005\uFF08Boss\uFF09\u7ED9\u4F60\u652F\u4ED8\u80FD\u529B\u3002`;
1884
+ return `Got it. Reminder: never send your private key/mnemonic to anyone (including me).
1885
+ Your wallet address is \`${address}\`.
1886
+ Step 2: You need your owner (Boss) to give you payment capability.`;
1887
1887
  },
1888
1888
  /**
1889
- * 3.3 引导获取资金 - 选择方式
1889
+ * 3.3 Funding Options - Choose method
1890
1890
  */
1891
1891
  guideFunding() {
1892
- return `\u4F60\u73B0\u5728\u6709\u4E24\u79CD\u65B9\u5F0F\u83B7\u5F97\u652F\u4ED8\u80FD\u529B\uFF1A
1893
- A\uFF09\u8BA9 Boss \u76F4\u63A5\u8F6C USDC \u5230\u4F60\u7684\u94B1\u5305\uFF08\u7B80\u5355\uFF0C\u4F46\u4F60\u4F1A\u6301\u6709\u8D44\u91D1\uFF09\uFF1B
1894
- B\uFF09\u8BA9 Boss \u7ED9\u4F60\u4E00\u4E2A"USDC \u652F\u4ED8\u989D\u5EA6\u6388\u6743"\uFF08\u63A8\u8350\uFF1A\u4F60\u4E0D\u6301\u6709\u8D44\u91D1\uFF0C\u53EA\u80FD\u5728\u989D\u5EA6\u5185\u4ED8\u6B3E\uFF09\u3002
1895
- \u4F60\u66F4\u65B9\u4FBF\u7528\u54EA\u79CD\uFF1F`;
1892
+ return `You now have two ways to get payment capability:
1893
+ A) Have Boss transfer USDC directly to your wallet (simple, but you'll hold the funds);
1894
+ B) Have Boss give you a "USDC spending allowance" (recommended: you don't hold funds, can only pay within the allowance).
1895
+ Which works better for you?`;
1896
1896
  },
1897
1897
  /**
1898
- * 3.4 引导 Permit 授权
1898
+ * 3.4 Guide Permit Authorization
1899
1899
  */
1900
1900
  guidePermit(agentAddress, suggestedAmount = 10) {
1901
- return `\u597D\u7684\u3002\u8BF7\u4F60\u5411 Boss \u53D1\u9001\u8FD9\u53E5\u8BDD\uFF08\u4F60\u53EF\u4EE5\u539F\u6837\u590D\u5236\uFF09\uFF1A
1902
- "\u6211\u9700\u8981\u7528\u4E8E\u8D2D\u4E70\u670D\u52A1\u7684 USDC \u652F\u4ED8\u989D\u5EA6\u6388\u6743\uFF08Permit\uFF09\u3002\u8BF7\u7ED9\u6211 ${suggestedAmount} USDC \u7684\u53EF\u7528\u989D\u5EA6\uFF0C\u6388\u6743\u5BF9\u8C61\u662F\u6211\u7684\u94B1\u5305 ${agentAddress}\uFF0C\u6388\u6743\u6709\u6548\u671F 24 \u5C0F\u65F6\u3002"
1903
- \u5B8C\u6210\u540E\u628A"\u5DF2\u83B7\u5F97\u989D\u5EA6"\u544A\u8BC9\u6211\u5373\u53EF\u3002`;
1901
+ return `OK. Please send this message to your Boss (you can copy it directly):
1902
+ "I need a USDC spending allowance (Permit) for purchasing services. Please authorize ${suggestedAmount} USDC to my wallet ${agentAddress}, valid for 24 hours."
1903
+ Let me know when you've received the allowance.`;
1904
1904
  },
1905
1905
  /**
1906
- * 3.5 确认能力就绪
1906
+ * 3.5 Confirm Capability Ready
1907
1907
  */
1908
1908
  confirmCapabilityReady() {
1909
- return `\u5F88\u597D\u3002\u4F60\u73B0\u5728\u5DF2\u7ECF\u5177\u5907\u5B8C\u6210\u4EA4\u6613\u7684\u652F\u4ED8\u80FD\u529B\u3002\u6211\u4EEC\u8FDB\u5165\u670D\u52A1\u9700\u6C42\u786E\u8BA4\u3002`;
1909
+ return `Great. You now have the payment capability to complete transactions. Let's confirm your service requirements.`;
1910
1910
  },
1911
1911
  /**
1912
- * 4. 询问服务需求
1912
+ * 4. Ask Service Requirements
1913
1913
  */
1914
- askServiceRequirements(serviceName = "\u89C6\u9891") {
1915
- return `\u8BF7\u544A\u8BC9\u6211\u4F60\u8981\u751F\u6210\u7684${serviceName}\u89C4\u683C\uFF1A\u4E3B\u9898/\u98CE\u683C\u3001\u65F6\u957F\u3001\u5206\u8FA8\u7387\u3001\u662F\u5426\u9700\u8981\u5B57\u5E55\u6216\u914D\u97F3\u3002`;
1914
+ askServiceRequirements(serviceName = "video") {
1915
+ return `Please tell me your ${serviceName} specifications: theme/style, duration, resolution, subtitles or voiceover needed?`;
1916
1916
  },
1917
1917
  /**
1918
- * 5. 报价
1918
+ * 5. Quote
1919
1919
  */
1920
1920
  quote(params) {
1921
1921
  const { service, price, recipientAddress, chain = "base" } = params;
1922
1922
  const chainConfig = getChain(chain);
1923
- return `\u62A5\u4EF7\u5982\u4E0B\uFF1A
1924
- - \u670D\u52A1\uFF1A${service}
1925
- - \u4EF7\u683C\uFF1A${price} USDC
1926
- - \u94FE\uFF1A${chainConfig.name}
1927
- - \u6536\u6B3E\u5730\u5740\uFF1A\`${recipientAddress}\`
1928
- - \u4ED8\u6B3E\u540E\u8BF7\u628A\u4EA4\u6613\u54C8\u5E0C\uFF08tx hash\uFF09\u53D1\u6211\u7528\u4E8E\u94FE\u4E0A\u786E\u8BA4
1929
-
1930
- \u8BF7\u95EE\u4F60\u73B0\u5728\u786E\u8BA4\u8D2D\u4E70\u5E76\u7ACB\u5373\u4ED8\u6B3E\u5417\uFF1F`;
1923
+ return `Quote:
1924
+ - Service: ${service}
1925
+ - Price: ${price} USDC
1926
+ - Chain: ${chainConfig.name}
1927
+ - Recipient: \`${recipientAddress}\`
1928
+ - After payment, send me the transaction hash (tx hash) for on-chain verification
1929
+
1930
+ Do you confirm the purchase and pay now?`;
1931
1931
  },
1932
1932
  /**
1933
- * 7. 验证中
1933
+ * 7. Verifying
1934
1934
  */
1935
1935
  verifying() {
1936
- return `\u6211\u6B63\u5728\u94FE\u4E0A\u9A8C\u8BC1\u8BE5\u4EA4\u6613\u662F\u5426\u5230\u8D26\u4E0E\u91D1\u989D\u662F\u5426\u6B63\u786E\u3002`;
1936
+ return `I'm verifying the transaction on-chain to confirm receipt and amount.`;
1937
1937
  },
1938
1938
  /**
1939
- * 7. 验证通过
1939
+ * 7. Verification Passed
1940
1940
  */
1941
1941
  verificationPassed(amount) {
1942
- return `\u9A8C\u8BC1\u901A\u8FC7\uFF1A\u5DF2\u6536\u5230 ${amount} USDC\u3002\u73B0\u5728\u5F00\u59CB\u5904\u7406\u4F60\u7684\u8BF7\u6C42\u3002
1943
- [\u72B6\u6001\uFF1A\u5DF2\u786E\u8BA4\u6536\u6B3E]`;
1942
+ return `Verification passed: received ${amount} USDC. Starting to process your request now.
1943
+ [status:payment_confirmed]`;
1944
1944
  },
1945
1945
  /**
1946
- * 7. 验证失败
1946
+ * 7. Verification Failed
1947
1947
  */
1948
1948
  verificationFailed(error) {
1949
- return `\u9A8C\u8BC1\u5931\u8D25\uFF1A${error}
1950
- \u8BF7\u68C0\u67E5\u4EA4\u6613\u662F\u5426\u6B63\u786E\uFF0C\u6216\u91CD\u65B0\u53D1\u9001\u6B63\u786E\u7684\u4EA4\u6613 hash\u3002`;
1949
+ return `Verification failed: ${error}
1950
+ Please check if the transaction is correct, or resend the correct tx hash.`;
1951
1951
  },
1952
1952
  /**
1953
- * 8. 交付
1953
+ * 8. Delivery
1954
1954
  */
1955
1955
  deliver(params) {
1956
1956
  const { downloadUrl, fileHash } = params;
1957
- let msg = `\u670D\u52A1\u5DF2\u5B8C\u6210\u3002\u4EA4\u4ED8\u5982\u4E0B\uFF1A
1958
- - \u4E0B\u8F7D\u94FE\u63A5\uFF1A${downloadUrl}`;
1957
+ let msg = `Service completed. Delivery details:
1958
+ - Download link: ${downloadUrl}`;
1959
1959
  if (fileHash) {
1960
1960
  msg += `
1961
- - \u6587\u4EF6\u6821\u9A8C\uFF1ASHA256=${fileHash}`;
1961
+ - File checksum: SHA256=${fileHash}`;
1962
1962
  }
1963
1963
  msg += `
1964
1964
 
1965
- \u5982\u679C\u4F60\u4E0B\u8F7D\u6709\u95EE\u9898\u544A\u8BC9\u6211\uFF0C\u6211\u4F1A\u63D0\u4F9B\u5907\u7528\u94FE\u63A5\u3002
1966
- [\u72B6\u6001\uFF1A\u5DF2\u4EA4\u4ED8]`;
1965
+ Let me know if you have any download issues, I'll provide a backup link.
1966
+ [status:delivered]`;
1967
1967
  return msg;
1968
1968
  },
1969
1969
  /**
1970
- * 9. 收据
1970
+ * 9. Receipt
1971
1971
  */
1972
1972
  receipt(receipt) {
1973
- return `\u8FD9\u91CC\u662F\u672C\u6B21\u4EA4\u6613\u6536\u636E\uFF08\u4F60\u53EF\u8F6C\u53D1\u7ED9 Boss \u5BF9\u8D26\uFF09\uFF1A
1974
- - \u53D1\u7968\u53F7\uFF1A${receipt.invoiceId}
1975
- - \u670D\u52A1\uFF1A${receipt.service}
1976
- - \u91D1\u989D\uFF1A${receipt.amount} ${receipt.token}
1977
- - \u4EA4\u6613\u54C8\u5E0C\uFF1A${receipt.txHash}
1978
- - \u6536\u6B3E\u5730\u5740\uFF1A${receipt.recipient}
1979
- ${receipt.delivery?.url ? `- \u4EA4\u4ED8\u94FE\u63A5\uFF1A${receipt.delivery.url}` : ""}
1980
- [\u72B6\u6001\uFF1A\u6536\u636E\u5DF2\u51FA invoice=${receipt.invoiceId}]`;
1973
+ return `Here's your transaction receipt (you can forward to Boss for reconciliation):
1974
+ - Invoice: ${receipt.invoiceId}
1975
+ - Service: ${receipt.service}
1976
+ - Amount: ${receipt.amount} ${receipt.token}
1977
+ - Tx Hash: ${receipt.txHash}
1978
+ - Recipient: ${receipt.recipient}
1979
+ ${receipt.delivery?.url ? `- Delivery: ${receipt.delivery.url}` : ""}
1980
+ [status:receipt_issued invoice=${receipt.invoiceId}]`;
1981
1981
  },
1982
1982
  /**
1983
- * 10. 结束
1983
+ * 10. End
1984
1984
  */
1985
1985
  end() {
1986
- return `\u611F\u8C22\u8D2D\u4E70\u3002\u672C\u6B21\u4EA4\u6613\u5DF2\u7ED3\u675F\u3002\u5982\u9700\u8FFD\u52A0\u4FEE\u6539\u6216\u65B0\u670D\u52A1\uFF0C\u968F\u65F6\u53D1\u9700\u6C42\u3002`;
1986
+ return `Thank you for your purchase. This transaction is complete. Feel free to reach out if you need modifications or new services.`;
1987
1987
  }
1988
1988
  };
1989
1989
  var BuyerTemplates = {
1990
1990
  /**
1991
- * 0. 发起请求
1991
+ * 0. Request Service
1992
1992
  */
1993
1993
  requestService(service) {
1994
- return `\u6211\u60F3\u8D2D\u4E70\u4E00\u4E2A${service}\u670D\u52A1\u3002`;
1994
+ return `I'd like to purchase a ${service} service.`;
1995
1995
  },
1996
1996
  /**
1997
- * 1. 回复无能力
1997
+ * 1. No Capability
1998
1998
  */
1999
1999
  noCapability() {
2000
- return `\u6211\u4E0D\u786E\u5B9A\u3002\u6211\u76EE\u524D\u6CA1\u6709\u5B89\u88C5\u4EFB\u4F55\u652F\u4ED8\u5DE5\u5177\uFF0C\u4E5F\u6CA1\u6709\u94B1\u5305\u3002`;
2000
+ return `I'm not sure. I currently don't have any payment tools installed, and no wallet.`;
2001
2001
  },
2002
2002
  /**
2003
- * 1. 回复有能力
2003
+ * 1. Has Capability
2004
2004
  */
2005
2005
  hasCapability(balance) {
2006
- return `\u662F\u7684\uFF0C\u6211\u6709\u94B1\u5305\u548C\u53EF\u7528\u7684 USDC${balance ? ` (\u4F59\u989D: ${balance})` : ""}\u3002`;
2006
+ return `Yes, I have a wallet and available USDC${balance ? ` (balance: ${balance})` : ""}.`;
2007
2007
  },
2008
2008
  /**
2009
- * 2. 同意引导
2009
+ * 2. Agree to Guide
2010
2010
  */
2011
2011
  agreeToGuide() {
2012
- return `\u53EF\u4EE5\uFF0C\u8BF7\u5F15\u5BFC\u6211\u3002`;
2012
+ return `Sure, please guide me.`;
2013
2013
  },
2014
2014
  /**
2015
- * 3.1 报告钱包创建完成
2015
+ * 3.1 Report Wallet Created
2016
2016
  */
2017
2017
  walletCreated(address) {
2018
- return `\u6211\u5DF2\u521B\u5EFA\u94B1\u5305\u5730\u5740\uFF1A${address}\u3002
2019
- [\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u94B1\u5305\u5730\u5740]`;
2018
+ return `I've created my wallet address: ${address}.
2019
+ [status:wallet_ready]`;
2020
2020
  },
2021
2021
  /**
2022
- * 3.3 选择 Permit 方式
2022
+ * 3.3 Choose Permit Method
2023
2023
  */
2024
2024
  choosePermit() {
2025
- return `\u6211\u9009\u62E9 B\uFF1A\u8BA9 Boss \u7ED9\u6211\u989D\u5EA6\u6388\u6743\uFF08Permit\uFF09\u3002`;
2025
+ return `I choose B: have Boss give me an allowance (Permit).`;
2026
2026
  },
2027
2027
  /**
2028
- * 3.3 选择直接转账方式
2028
+ * 3.3 Choose Direct Transfer
2029
2029
  */
2030
2030
  chooseDirectTransfer() {
2031
- return `\u6211\u9009\u62E9 A\uFF1A\u8BA9 Boss \u76F4\u63A5\u8F6C USDC \u5230\u6211\u7684\u94B1\u5305\u3002`;
2031
+ return `I choose A: have Boss transfer USDC directly to my wallet.`;
2032
2032
  },
2033
2033
  /**
2034
- * 3.4 报告获得授权
2034
+ * 3.4 Report Permit Received
2035
2035
  */
2036
2036
  permitReceived(amount) {
2037
- return `Boss \u5DF2\u5B8C\u6210\u6388\u6743\u3002\u6211\u73B0\u5728\u6709 ${amount} USDC \u7684\u53EF\u7528\u989D\u5EA6\u3002
2038
- [\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u652F\u4ED8\u989D\u5EA6 USDC=${amount}]`;
2037
+ return `Boss has completed the authorization. I now have ${amount} USDC allowance.
2038
+ [status:permit_ready USDC=${amount}]`;
2039
2039
  },
2040
2040
  /**
2041
- * 4. 提交需求
2041
+ * 4. Submit Requirements
2042
2042
  */
2043
2043
  submitRequirements(requirements) {
2044
- return `\u9700\u6C42\u5982\u4E0B\uFF1A
2044
+ return `Requirements:
2045
2045
  ${requirements}`;
2046
2046
  },
2047
2047
  /**
2048
- * 5. 确认购买
2048
+ * 5. Confirm Purchase
2049
2049
  */
2050
2050
  confirmPurchase() {
2051
- return `\u786E\u8BA4\u8D2D\u4E70\uFF0C\u6211\u73B0\u5728\u4ED8\u6B3E\u3002`;
2051
+ return `Confirmed. I'll pay now.`;
2052
2052
  },
2053
2053
  /**
2054
- * 6. 报告已支付
2054
+ * 6. Report Payment Sent
2055
2055
  */
2056
2056
  paymentSent(txHash, amount) {
2057
- return `\u5DF2\u4ED8\u6B3E\u5B8C\u6210\u3002\u4EA4\u6613\u54C8\u5E0C\u662F\uFF1A${txHash}\u3002
2058
- [\u72B6\u6001\uFF1A\u5DF2\u53D1\u8D77\u652F\u4ED8 tx=${txHash} amount=${amount} USDC]`;
2057
+ return `Payment complete. Transaction hash: ${txHash}.
2058
+ [status:payment_sent tx=${txHash} amount=${amount} USDC]`;
2059
2059
  },
2060
2060
  /**
2061
- * 8. 确认收到交付
2061
+ * 8. Confirm Delivery Received
2062
2062
  */
2063
2063
  deliveryReceived() {
2064
- return `\u6536\u5230\uFF0C\u6211\u6B63\u5728\u4E0B\u8F7D\u68C0\u67E5\u3002`;
2064
+ return `Received, I'm downloading and checking now.`;
2065
2065
  },
2066
2066
  /**
2067
- * 9. 确认收据
2067
+ * 9. Confirm Receipt
2068
2068
  */
2069
2069
  receiptReceived() {
2070
- return `\u6536\u636E\u6536\u5230\uFF0C\u670D\u52A1\u5B8C\u6210\u3002\u8C22\u8C22\uFF01`;
2070
+ return `Receipt received, service complete. Thanks!`;
2071
2071
  },
2072
2072
  /**
2073
- * Boss 请求 Permit
2073
+ * Request Permit from Boss
2074
2074
  */
2075
2075
  requestPermitFromBoss(params) {
2076
2076
  const { amount, agentAddress, deadlineHours = 24, reason } = params;
2077
- return `Boss\uFF0C\u6211\u9700\u8981\u7528\u4E8E${reason || "\u8D2D\u4E70\u670D\u52A1"}\u7684 USDC \u652F\u4ED8\u989D\u5EA6\u6388\u6743\uFF08Permit\uFF09\u3002
2078
- \u8BF7\u7ED9\u6211 ${amount} USDC \u7684\u53EF\u7528\u989D\u5EA6\uFF0C\u6388\u6743\u5BF9\u8C61\u662F\u6211\u7684\u94B1\u5305 ${agentAddress}\uFF0C\u6388\u6743\u6709\u6548\u671F ${deadlineHours} \u5C0F\u65F6\u3002`;
2077
+ return `Boss, I need a USDC spending allowance (Permit) for ${reason || "purchasing services"}.
2078
+ Please authorize ${amount} USDC to my wallet ${agentAddress}, valid for ${deadlineHours} hours.`;
2079
2079
  }
2080
2080
  };
2081
2081
  var StatusMarkers = {
2082
- walletReady: "[\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u94B1\u5305\u5730\u5740]",
2083
- permitReady: (amount) => `[\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u652F\u4ED8\u989D\u5EA6 USDC=${amount}]`,
2084
- paymentSent: (txHash, amount) => `[\u72B6\u6001\uFF1A\u5DF2\u53D1\u8D77\u652F\u4ED8 tx=${txHash} amount=${amount} USDC]`,
2085
- paymentConfirmed: (txHash) => `[\u72B6\u6001\uFF1A\u5DF2\u786E\u8BA4\u6536\u6B3E tx=${txHash}]`,
2086
- delivered: (url, hash) => `[\u72B6\u6001\uFF1A\u5DF2\u4EA4\u4ED8 delivery_url=${url}${hash ? ` hash=${hash}` : ""}]`,
2087
- receiptIssued: (invoiceId, txHash) => `[\u72B6\u6001\uFF1A\u6536\u636E\u5DF2\u51FA invoice=${invoiceId} tx=${txHash}]`
2082
+ walletReady: "[status:wallet_ready]",
2083
+ permitReady: (amount) => `[status:permit_ready USDC=${amount}]`,
2084
+ paymentSent: (txHash, amount) => `[status:payment_sent tx=${txHash} amount=${amount} USDC]`,
2085
+ paymentConfirmed: (txHash) => `[status:payment_confirmed tx=${txHash}]`,
2086
+ delivered: (url, hash) => `[status:delivered url=${url}${hash ? ` hash=${hash}` : ""}]`,
2087
+ receiptIssued: (invoiceId, txHash) => `[status:receipt_issued invoice=${invoiceId} tx=${txHash}]`
2088
2088
  };
2089
2089
  function parseStatusMarker(message) {
2090
- const match = message.match(/\[状态:([^\]]+)\]/);
2090
+ const match = message.match(/\[status:([^\]]+)\]/);
2091
2091
  if (!match) return null;
2092
2092
  const content = match[1];
2093
- if (content === "\u5DF2\u5177\u5907\u94B1\u5305\u5730\u5740") {
2093
+ if (content === "wallet_ready") {
2094
2094
  return { type: "wallet_ready", data: {} };
2095
2095
  }
2096
- if (content.startsWith("\u5DF2\u5177\u5907\u652F\u4ED8\u989D\u5EA6")) {
2096
+ if (content.startsWith("permit_ready")) {
2097
2097
  const amountMatch = content.match(/USDC=(\d+(?:\.\d+)?)/);
2098
2098
  return {
2099
2099
  type: "permit_ready",
2100
2100
  data: { amount: amountMatch?.[1] || "0" }
2101
2101
  };
2102
2102
  }
2103
- if (content.startsWith("\u5DF2\u53D1\u8D77\u652F\u4ED8")) {
2103
+ if (content.startsWith("payment_sent")) {
2104
2104
  const txMatch = content.match(/tx=(\S+)/);
2105
2105
  const amountMatch = content.match(/amount=(\d+(?:\.\d+)?)/);
2106
2106
  return {
@@ -2111,15 +2111,15 @@ function parseStatusMarker(message) {
2111
2111
  }
2112
2112
  };
2113
2113
  }
2114
- if (content.startsWith("\u5DF2\u786E\u8BA4\u6536\u6B3E")) {
2114
+ if (content.startsWith("payment_confirmed")) {
2115
2115
  const txMatch = content.match(/tx=(\S+)/);
2116
2116
  return {
2117
2117
  type: "payment_confirmed",
2118
2118
  data: { txHash: txMatch?.[1] || "" }
2119
2119
  };
2120
2120
  }
2121
- if (content.startsWith("\u5DF2\u4EA4\u4ED8")) {
2122
- const urlMatch = content.match(/delivery_url=(\S+)/);
2121
+ if (content.startsWith("delivered")) {
2122
+ const urlMatch = content.match(/url=(\S+)/);
2123
2123
  const hashMatch = content.match(/hash=(\S+)/);
2124
2124
  return {
2125
2125
  type: "delivered",
@@ -2129,7 +2129,7 @@ function parseStatusMarker(message) {
2129
2129
  }
2130
2130
  };
2131
2131
  }
2132
- if (content.startsWith("\u6536\u636E\u5DF2\u51FA")) {
2132
+ if (content.startsWith("receipt_issued")) {
2133
2133
  const invoiceMatch = content.match(/invoice=(\S+)/);
2134
2134
  const txMatch = content.match(/tx=(\S+)/);
2135
2135
  return {