moltspay 0.2.0 → 0.2.1

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.
package/dist/index.mjs CHANGED
@@ -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
@@ -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 {