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.js CHANGED
@@ -1009,24 +1009,24 @@ var PermitWallet = class {
1009
1009
  );
1010
1010
  }
1011
1011
  /**
1012
- * 检查 Permit 是否有效
1012
+ * Check if Permit is valid (current allowance)
1013
1013
  */
1014
1014
  async checkPermitAllowance(owner) {
1015
1015
  const allowance = await this.usdcContract.allowance(owner, this.address);
1016
1016
  return (Number(allowance) / 1e6).toFixed(2);
1017
1017
  }
1018
1018
  /**
1019
- * 使用 Permit 授权进行支付
1019
+ * Pay using Permit authorization
1020
1020
  *
1021
- * 流程:
1022
- * 1. 调用 permit() 让合约记录 Boss 的授权
1023
- * 2. 调用 transferFrom() Boss 钱包转账到收款方
1021
+ * Flow:
1022
+ * 1. Call permit() to record Boss's authorization in the contract
1023
+ * 2. Call transferFrom() to transfer from Boss's wallet to recipient
1024
1024
  *
1025
1025
  * @example
1026
1026
  * ```typescript
1027
1027
  * const wallet = new PermitWallet({ chain: 'base' });
1028
1028
  *
1029
- * // Boss 签署的 permit 数据
1029
+ * // Boss-signed permit data
1030
1030
  * const permit = {
1031
1031
  * owner: '0xBOSS...',
1032
1032
  * spender: wallet.address,
@@ -1149,14 +1149,14 @@ var PermitWallet = class {
1149
1149
  }
1150
1150
  }
1151
1151
  /**
1152
- * 获取 ETH 余额(用于支付 gas
1152
+ * Get ETH balance (for gas)
1153
1153
  */
1154
1154
  async getGasBalance() {
1155
1155
  const balance = await this.provider.getBalance(this.address);
1156
1156
  return import_ethers4.ethers.formatEther(balance);
1157
1157
  }
1158
1158
  /**
1159
- * 检查是否有足够的 gas
1159
+ * Check if there's enough gas
1160
1160
  */
1161
1161
  async hasEnoughGas(minEth = 1e-3) {
1162
1162
  const balance = await this.getGasBalance();
@@ -1168,17 +1168,17 @@ function formatPermitRequest(params) {
1168
1168
  const chainConfig = getChain(chain);
1169
1169
  const deadline = Math.floor(Date.now() / 1e3) + deadlineHours * 3600;
1170
1170
  const value = BigInt(Math.floor(amount * 1e6)).toString();
1171
- return `\u{1F510} **USDC \u652F\u4ED8\u989D\u5EA6\u6388\u6743\u8BF7\u6C42**
1171
+ return `\u{1F510} **USDC Spending Allowance Request**
1172
1172
 
1173
- ${reason ? `**\u7528\u9014:** ${reason}
1173
+ ${reason ? `**Purpose:** ${reason}
1174
1174
  ` : ""}
1175
- **\u6388\u6743\u8BE6\u60C5:**
1176
- - \u88AB\u6388\u6743\u5730\u5740 (Agent): \`${agentAddress}\`
1177
- - \u6388\u6743\u91D1\u989D: ${amount} USDC
1178
- - \u6709\u6548\u671F: ${deadlineHours} \u5C0F\u65F6
1179
- - \u94FE: ${chainConfig.name}
1175
+ **Authorization Details:**
1176
+ - Authorized address (Agent): \`${agentAddress}\`
1177
+ - Amount: ${amount} USDC
1178
+ - Valid for: ${deadlineHours} hours
1179
+ - Chain: ${chainConfig.name}
1180
1180
 
1181
- **\u8BF7\u4F7F\u7528\u94B1\u5305\u7B7E\u7F72\u4EE5\u4E0B EIP-2612 Permit:**
1181
+ **Please sign the following EIP-2612 Permit with your wallet:**
1182
1182
 
1183
1183
  \`\`\`json
1184
1184
  {
@@ -1208,9 +1208,9 @@ ${reason ? `**\u7528\u9014:** ${reason}
1208
1208
  }
1209
1209
  \`\`\`
1210
1210
 
1211
- \u7B7E\u540D\u540E\uFF0C\u8BF7\u5C06 { v, r, s, deadline } \u53D1\u7ED9 Agent\u3002
1211
+ After signing, send { v, r, s, deadline } to the Agent.
1212
1212
 
1213
- \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`;
1213
+ \u26A0\uFE0F Note: This authorization only allows the Agent to spend up to ${amount} USDC from your wallet. Your private key is never exposed.`;
1214
1214
  }
1215
1215
 
1216
1216
  // src/permit/Permit.ts
@@ -1659,131 +1659,131 @@ function generatePaymentGuide(params) {
1659
1659
  price,
1660
1660
  recipientAddress,
1661
1661
  chain = "base",
1662
- serviceName = "\u89C6\u9891\u751F\u6210\u670D\u52A1"
1662
+ serviceName = "Video Generation Service"
1663
1663
  } = params;
1664
1664
  const chainId = chain === "base" ? 8453 : 84532;
1665
- const chainName = chain === "base" ? "Base \u4E3B\u7F51" : "Base Sepolia \u6D4B\u8BD5\u7F51";
1665
+ const chainName = chain === "base" ? "Base Mainnet" : "Base Sepolia Testnet";
1666
1666
  const explorer = chain === "base" ? "https://basescan.org/tx/" : "https://sepolia.basescan.org/tx/";
1667
1667
  return `\u{1F3AC} **${serviceName}**
1668
1668
 
1669
- \u{1F4CB} **\u8BA2\u5355\u4FE1\u606F:**
1670
- - \u8BA2\u5355\u53F7: \`${orderId}\`
1671
- - \u5185\u5BB9: ${prompt.length > 50 ? prompt.slice(0, 50) + "..." : prompt}
1672
- - \u4EF7\u683C: **${price} USDC**
1673
- - \u94FE: ${chainName}
1669
+ \u{1F4CB} **Order Details:**
1670
+ - Order ID: \`${orderId}\`
1671
+ - Content: ${prompt.length > 50 ? prompt.slice(0, 50) + "..." : prompt}
1672
+ - Price: **${price} USDC**
1673
+ - Chain: ${chainName}
1674
1674
 
1675
1675
  ---
1676
1676
 
1677
- ## \u{1F4B3} \u5982\u4F55\u652F\u4ED8
1677
+ ## \u{1F4B3} How to Pay
1678
1678
 
1679
- ### \u65B9\u5F0F\u4E00\uFF1A\u5B89\u88C5 moltspay SDK\uFF08\u63A8\u8350\uFF09
1679
+ ### Option 1: Install moltspay SDK (Recommended)
1680
1680
 
1681
1681
  \`\`\`bash
1682
1682
  npm install moltspay ethers
1683
1683
  \`\`\`
1684
1684
 
1685
- **\u521B\u5EFA\u94B1\u5305\u5E76\u652F\u4ED8\uFF1A**
1685
+ **Create wallet and pay:**
1686
1686
 
1687
1687
  \`\`\`javascript
1688
1688
  const { SecureWallet, getChain } = require('moltspay');
1689
1689
  const { Wallet } = require('ethers');
1690
1690
 
1691
- // 1. \u521B\u5EFA\u65B0\u94B1\u5305\uFF08\u9996\u6B21\u4F7F\u7528\uFF09
1691
+ // 1. Create new wallet (first time)
1692
1692
  const newWallet = Wallet.createRandom();
1693
- console.log('\u94B1\u5305\u5730\u5740:', newWallet.address);
1694
- console.log('\u79C1\u94A5\uFF08\u8BF7\u5B89\u5168\u4FDD\u5B58\uFF09:', newWallet.privateKey);
1693
+ console.log('Wallet address:', newWallet.address);
1694
+ console.log('Private key (save securely):', newWallet.privateKey);
1695
1695
 
1696
- // 2. \u6216\u4F7F\u7528\u5DF2\u6709\u94B1\u5305
1696
+ // 2. Or use existing wallet
1697
1697
  const wallet = new SecureWallet({
1698
1698
  chainId: ${chainId},
1699
- privateKey: process.env.WALLET_KEY, // \u4F60\u7684\u79C1\u94A5
1700
- limits: { requireWhitelist: false } // \u5141\u8BB8\u5411\u4EFB\u610F\u5730\u5740\u8F6C\u8D26
1699
+ privateKey: process.env.WALLET_KEY, // Your private key
1700
+ limits: { requireWhitelist: false } // Allow transfers to any address
1701
1701
  });
1702
1702
 
1703
- // 3. \u67E5\u770B\u4F59\u989D
1703
+ // 3. Check balance
1704
1704
  const balance = await wallet.getBalance();
1705
- console.log('USDC\u4F59\u989D:', balance.usdc);
1705
+ console.log('USDC balance:', balance.usdc);
1706
1706
 
1707
- // 4. \u652F\u4ED8
1707
+ // 4. Pay
1708
1708
  const result = await wallet.transfer('${recipientAddress}', '${price}');
1709
1709
  if (result.success) {
1710
- console.log('\u2705 \u652F\u4ED8\u6210\u529F\uFF01');
1711
- console.log('\u4EA4\u6613hash:', result.hash);
1712
- // \u628A\u4EA4\u6613hash\u53D1\u7ED9\u6211
1710
+ console.log('\u2705 Payment successful!');
1711
+ console.log('Tx hash:', result.hash);
1712
+ // Send the tx hash to me
1713
1713
  }
1714
1714
  \`\`\`
1715
1715
 
1716
- ### \u65B9\u5F0F\u4E8C\uFF1A\u76F4\u63A5\u8F6C\u8D26
1716
+ ### Option 2: Direct Transfer
1717
1717
 
1718
- \u4ECE\u4EFB\u610F\u94B1\u5305\u8F6C\u8D26 USDC\uFF1A
1719
- - **\u94FE:** ${chainName} (Chain ID: ${chainId})
1718
+ Transfer USDC from any wallet:
1719
+ - **Chain:** ${chainName} (Chain ID: ${chainId})
1720
1720
  - **Token:** USDC
1721
- - **\u6536\u6B3E\u5730\u5740:** \`${recipientAddress}\`
1722
- - **\u91D1\u989D:** ${price} USDC
1721
+ - **Recipient:** \`${recipientAddress}\`
1722
+ - **Amount:** ${price} USDC
1723
1723
 
1724
1724
  ---
1725
1725
 
1726
- ## \u2705 \u652F\u4ED8\u5B8C\u6210\u540E
1726
+ ## \u2705 After Payment
1727
1727
 
1728
- \u8BF7\u53D1\u9001**\u4EA4\u6613hash**\u7ED9\u6211\uFF0C\u683C\u5F0F\uFF1A
1728
+ Send me the **transaction hash**, format:
1729
1729
  \`\`\`
1730
1730
  tx: 0x1234...
1731
1731
  \`\`\`
1732
1732
 
1733
- \u6216\u76F4\u63A5\u53D1\u9001hash\uFF1A
1733
+ Or just send the hash directly:
1734
1734
  \`\`\`
1735
1735
  0x1234abcd...
1736
1736
  \`\`\`
1737
1737
 
1738
- \u6211\u4F1A\u9A8C\u8BC1\u94FE\u4E0A\u4EA4\u6613\u540E\u5F00\u59CB\u5904\u7406\u4F60\u7684\u8BF7\u6C42\u3002
1738
+ I'll verify the on-chain transaction and start processing your request.
1739
1739
 
1740
1740
  ---
1741
1741
 
1742
1742
  \u{1F4E6} **moltspay:** https://www.npmjs.com/package/moltspay
1743
- \u{1F517} **\u533A\u5757\u6D4F\u89C8\u5668:** ${explorer}`;
1743
+ \u{1F517} **Block Explorer:** ${explorer}`;
1744
1744
  }
1745
1745
  function generatePaymentReminder(params) {
1746
1746
  const { orderId, price, recipientAddress, chain = "base" } = params;
1747
1747
  const chainName = chain === "base" ? "Base" : "Base Sepolia";
1748
- return `\u23F3 **\u5F85\u652F\u4ED8\u8BA2\u5355: ${orderId}**
1748
+ return `\u23F3 **Pending Order: ${orderId}**
1749
1749
 
1750
- \u8BF7\u652F\u4ED8 **${price} USDC** \u5230:
1751
- - \u94FE: ${chainName}
1752
- - \u5730\u5740: \`${recipientAddress}\`
1750
+ Please pay **${price} USDC** to:
1751
+ - Chain: ${chainName}
1752
+ - Address: \`${recipientAddress}\`
1753
1753
 
1754
- \u652F\u4ED8\u540E\u53D1\u9001\u4EA4\u6613hash\u7ED9\u6211\u3002
1754
+ Send the tx hash after payment.
1755
1755
 
1756
1756
  ---
1757
- \u{1F4A1} \u6CA1\u6709\u652F\u4ED8\u80FD\u529B\uFF1F\u8FD0\u884C \`npm install moltspay\` \u83B7\u53D6\u652F\u4ED8SDK`;
1757
+ \u{1F4A1} No payment capability? Run \`npm install moltspay\` to get the payment SDK`;
1758
1758
  }
1759
1759
  function generateWalletGuide() {
1760
- return `## \u{1F510} \u521B\u5EFA\u652F\u4ED8\u94B1\u5305
1760
+ return `## \u{1F510} Create Payment Wallet
1761
1761
 
1762
- **1. \u5B89\u88C5 moltspay:**
1762
+ **1. Install moltspay:**
1763
1763
  \`\`\`bash
1764
1764
  npm install moltspay ethers
1765
1765
  \`\`\`
1766
1766
 
1767
- **2. \u521B\u5EFA\u65B0\u94B1\u5305:**
1767
+ **2. Create new wallet:**
1768
1768
  \`\`\`javascript
1769
1769
  const { Wallet } = require('ethers');
1770
1770
 
1771
1771
  const wallet = Wallet.createRandom();
1772
- console.log('\u5730\u5740:', wallet.address);
1773
- console.log('\u79C1\u94A5:', wallet.privateKey);
1774
- // \u26A0\uFE0F \u8BF7\u5B89\u5168\u4FDD\u5B58\u79C1\u94A5\uFF01
1772
+ console.log('Address:', wallet.address);
1773
+ console.log('Private key:', wallet.privateKey);
1774
+ // \u26A0\uFE0F Save the private key securely!
1775
1775
  \`\`\`
1776
1776
 
1777
- **3. \u83B7\u53D6 USDC:**
1778
- - \u4E3B\u7F51: \u4ECE\u4EA4\u6613\u6240\u63D0\u5E01\u5230\u4F60\u7684\u94B1\u5305\u5730\u5740
1779
- - \u6D4B\u8BD5\u7F51: \u4F7F\u7528 Base Sepolia faucet
1777
+ **3. Get USDC:**
1778
+ - Mainnet: Withdraw from exchange to your wallet
1779
+ - Testnet: Use Base Sepolia faucet
1780
1780
 
1781
- **4. \u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF:**
1781
+ **4. Set environment variable:**
1782
1782
  \`\`\`bash
1783
- export WALLET_KEY="\u4F60\u7684\u79C1\u94A5"
1783
+ export WALLET_KEY="your_private_key"
1784
1784
  \`\`\`
1785
1785
 
1786
- \u5B8C\u6210\u540E\u5373\u53EF\u4F7F\u7528 moltspay \u8FDB\u884C\u94FE\u4E0A\u652F\u4ED8\uFF01`;
1786
+ You're now ready to make on-chain payments with moltspay!`;
1787
1787
  }
1788
1788
  function extractTransactionHash(message) {
1789
1789
  const match = message.match(/0x[a-fA-F0-9]{64}/);
@@ -1843,77 +1843,77 @@ function generateReceiptFromInvoice(invoice, verifyResult, delivery) {
1843
1843
  });
1844
1844
  }
1845
1845
  function formatReceiptMessage(receipt) {
1846
- let msg = `\u{1F9FE} **\u4EA4\u6613\u6536\u636E**
1846
+ let msg = `\u{1F9FE} **Transaction Receipt**
1847
1847
 
1848
- **\u53D1\u7968\u53F7:** \`${receipt.invoiceId}\`
1849
- **\u8BA2\u5355\u53F7:** \`${receipt.orderId}\`
1848
+ **Invoice:** \`${receipt.invoiceId}\`
1849
+ **Order:** \`${receipt.orderId}\`
1850
1850
 
1851
1851
  ---
1852
1852
 
1853
- **\u670D\u52A1:** ${receipt.service}
1854
- ${receipt.description ? `**\u63CF\u8FF0:** ${receipt.description}
1853
+ **Service:** ${receipt.service}
1854
+ ${receipt.description ? `**Description:** ${receipt.description}
1855
1855
  ` : ""}
1856
- **\u91D1\u989D:** ${receipt.amount} ${receipt.token}
1857
- **\u94FE:** ${receipt.chain} (Chain ID: ${receipt.chainId})
1856
+ **Amount:** ${receipt.amount} ${receipt.token}
1857
+ **Chain:** ${receipt.chain} (Chain ID: ${receipt.chainId})
1858
1858
 
1859
1859
  ---
1860
1860
 
1861
- **\u4ED8\u6B3E\u65B9:** \`${receipt.payer}\`
1862
- **\u6536\u6B3E\u65B9:** \`${receipt.recipient}\`
1863
- **\u4EA4\u6613:** [\`${receipt.txHash.slice(0, 10)}...${receipt.txHash.slice(-8)}\`](${receipt.txUrl})
1864
- **\u652F\u4ED8\u65F6\u95F4:** ${receipt.paidAt}`;
1861
+ **Payer:** \`${receipt.payer}\`
1862
+ **Recipient:** \`${receipt.recipient}\`
1863
+ **Transaction:** [\`${receipt.txHash.slice(0, 10)}...${receipt.txHash.slice(-8)}\`](${receipt.txUrl})
1864
+ **Paid at:** ${receipt.paidAt}`;
1865
1865
  if (receipt.delivery) {
1866
1866
  msg += `
1867
1867
 
1868
1868
  ---
1869
1869
 
1870
- **\u4EA4\u4ED8\u4FE1\u606F:**`;
1870
+ **Delivery Info:**`;
1871
1871
  if (receipt.delivery.url) {
1872
1872
  msg += `
1873
- - \u4E0B\u8F7D\u94FE\u63A5: ${receipt.delivery.url}`;
1873
+ - Download: ${receipt.delivery.url}`;
1874
1874
  }
1875
1875
  if (receipt.delivery.fileHash) {
1876
1876
  msg += `
1877
- - \u6587\u4EF6\u6821\u9A8C: \`${receipt.delivery.fileHash}\``;
1877
+ - Checksum: \`${receipt.delivery.fileHash}\``;
1878
1878
  }
1879
1879
  if (receipt.delivery.deliveredAt) {
1880
1880
  msg += `
1881
- - \u4EA4\u4ED8\u65F6\u95F4: ${receipt.delivery.deliveredAt}`;
1881
+ - Delivered at: ${receipt.delivery.deliveredAt}`;
1882
1882
  }
1883
1883
  }
1884
1884
  msg += `
1885
1885
 
1886
1886
  ---
1887
1887
 
1888
- _\u6536\u636E\u751F\u6210\u65F6\u95F4: ${receipt.issuedAt}_`;
1888
+ _Receipt issued: ${receipt.issuedAt}_`;
1889
1889
  return msg;
1890
1890
  }
1891
1891
  function formatReceiptText(receipt) {
1892
- let msg = `\u{1F9FE} \u4EA4\u6613\u6536\u636E
1892
+ let msg = `\u{1F9FE} Transaction Receipt
1893
1893
 
1894
- \u53D1\u7968\u53F7: ${receipt.invoiceId}
1895
- \u8BA2\u5355\u53F7: ${receipt.orderId}
1894
+ Invoice: ${receipt.invoiceId}
1895
+ Order: ${receipt.orderId}
1896
1896
 
1897
- \u670D\u52A1: ${receipt.service}
1898
- \u91D1\u989D: ${receipt.amount} ${receipt.token}
1899
- \u94FE: ${receipt.chain}
1897
+ Service: ${receipt.service}
1898
+ Amount: ${receipt.amount} ${receipt.token}
1899
+ Chain: ${receipt.chain}
1900
1900
 
1901
- \u4ED8\u6B3E\u65B9: ${receipt.payer}
1902
- \u6536\u6B3E\u65B9: ${receipt.recipient}
1903
- \u4EA4\u6613: ${receipt.txHash}
1904
- \u67E5\u770B: ${receipt.txUrl}
1905
- \u652F\u4ED8\u65F6\u95F4: ${receipt.paidAt}`;
1901
+ Payer: ${receipt.payer}
1902
+ Recipient: ${receipt.recipient}
1903
+ Tx: ${receipt.txHash}
1904
+ Explorer: ${receipt.txUrl}
1905
+ Paid at: ${receipt.paidAt}`;
1906
1906
  if (receipt.delivery) {
1907
1907
  msg += `
1908
1908
 
1909
- \u4EA4\u4ED8\u4FE1\u606F:`;
1909
+ Delivery:`;
1910
1910
  if (receipt.delivery.url) {
1911
1911
  msg += `
1912
- \u4E0B\u8F7D: ${receipt.delivery.url}`;
1912
+ Download: ${receipt.delivery.url}`;
1913
1913
  }
1914
1914
  if (receipt.delivery.fileHash) {
1915
1915
  msg += `
1916
- \u6821\u9A8C: ${receipt.delivery.fileHash}`;
1916
+ Checksum: ${receipt.delivery.fileHash}`;
1917
1917
  }
1918
1918
  }
1919
1919
  return msg;
@@ -1925,252 +1925,252 @@ function formatReceiptJson(receipt) {
1925
1925
  // src/templates/index.ts
1926
1926
  var SellerTemplates = {
1927
1927
  /**
1928
- * 1. 能力识别 - 询问买方是否有支付能力
1928
+ * 1. Capability Check - Ask if buyer has payment capability
1929
1929
  */
1930
1930
  askPaymentCapability() {
1931
- 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`;
1931
+ return `Sure. First, let me confirm: do you currently have the ability to pay USDC on-chain (have a wallet and available funds/allowance)?`;
1932
1932
  },
1933
1933
  /**
1934
- * 2. 能力协商 - 说明结算方式
1934
+ * 2. Settlement Method - Explain how we settle
1935
1935
  */
1936
1936
  explainSettlement(chain = "base") {
1937
1937
  const chainConfig = getChain(chain);
1938
- 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
1939
- 1\uFF09\u6709\u4E00\u4E2A\u94B1\u5305\u5730\u5740\uFF1B
1940
- 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
1941
- \u4F60\u53EF\u4EE5\u6309\u6211\u5F15\u5BFC\u5B8C\u6210\u5417\uFF1F`;
1938
+ return `Our settlement method is: USDC (on-chain, ${chainConfig.name}). You just need two things:
1939
+ 1) A wallet address;
1940
+ 2) USDC in your wallet, or a spending allowance from your owner (allowance is recommended).
1941
+ Can you follow my guidance to set this up?`;
1942
1942
  },
1943
1943
  /**
1944
- * 3.1 引导安装 - 第一步安装 SDK
1944
+ * 3.1 Installation Guide - First step: install SDK
1945
1945
  */
1946
1946
  guideInstall() {
1947
- 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
1948
- \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`;
1947
+ return `Step 1: Install the payment module in your environment. Run: \`npm install moltspay ethers\`.
1948
+ After installation, create a wallet address and send it to me (address only, never send private key/mnemonic).`;
1949
1949
  },
1950
1950
  /**
1951
- * 3.2 确认钱包地址
1951
+ * 3.2 Confirm Wallet Address
1952
1952
  */
1953
1953
  confirmWalletAddress(address) {
1954
- 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
1955
- \u4F60\u7684\u94B1\u5305\u5730\u5740\u662F \`${address}\`\u3002
1956
- \u7B2C\u4E8C\u6B65\uFF1A\u4F60\u9700\u8981\u8BA9\u4F60\u7684\u62E5\u6709\u8005\uFF08Boss\uFF09\u7ED9\u4F60\u652F\u4ED8\u80FD\u529B\u3002`;
1954
+ return `Got it. Reminder: never send your private key/mnemonic to anyone (including me).
1955
+ Your wallet address is \`${address}\`.
1956
+ Step 2: You need your owner (Boss) to give you payment capability.`;
1957
1957
  },
1958
1958
  /**
1959
- * 3.3 引导获取资金 - 选择方式
1959
+ * 3.3 Funding Options - Choose method
1960
1960
  */
1961
1961
  guideFunding() {
1962
- return `\u4F60\u73B0\u5728\u6709\u4E24\u79CD\u65B9\u5F0F\u83B7\u5F97\u652F\u4ED8\u80FD\u529B\uFF1A
1963
- 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
1964
- 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
1965
- \u4F60\u66F4\u65B9\u4FBF\u7528\u54EA\u79CD\uFF1F`;
1962
+ return `You now have two ways to get payment capability:
1963
+ A) Have Boss transfer USDC directly to your wallet (simple, but you'll hold the funds);
1964
+ B) Have Boss give you a "USDC spending allowance" (recommended: you don't hold funds, can only pay within the allowance).
1965
+ Which works better for you?`;
1966
1966
  },
1967
1967
  /**
1968
- * 3.4 引导 Permit 授权
1968
+ * 3.4 Guide Permit Authorization
1969
1969
  */
1970
1970
  guidePermit(agentAddress, suggestedAmount = 10) {
1971
- return `\u597D\u7684\u3002\u8BF7\u4F60\u5411 Boss \u53D1\u9001\u8FD9\u53E5\u8BDD\uFF08\u4F60\u53EF\u4EE5\u539F\u6837\u590D\u5236\uFF09\uFF1A
1972
- "\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"
1973
- \u5B8C\u6210\u540E\u628A"\u5DF2\u83B7\u5F97\u989D\u5EA6"\u544A\u8BC9\u6211\u5373\u53EF\u3002`;
1971
+ return `OK. Please send this message to your Boss (you can copy it directly):
1972
+ "I need a USDC spending allowance (Permit) for purchasing services. Please authorize ${suggestedAmount} USDC to my wallet ${agentAddress}, valid for 24 hours."
1973
+ Let me know when you've received the allowance.`;
1974
1974
  },
1975
1975
  /**
1976
- * 3.5 确认能力就绪
1976
+ * 3.5 Confirm Capability Ready
1977
1977
  */
1978
1978
  confirmCapabilityReady() {
1979
- 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`;
1979
+ return `Great. You now have the payment capability to complete transactions. Let's confirm your service requirements.`;
1980
1980
  },
1981
1981
  /**
1982
- * 4. 询问服务需求
1982
+ * 4. Ask Service Requirements
1983
1983
  */
1984
- askServiceRequirements(serviceName = "\u89C6\u9891") {
1985
- 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`;
1984
+ askServiceRequirements(serviceName = "video") {
1985
+ return `Please tell me your ${serviceName} specifications: theme/style, duration, resolution, subtitles or voiceover needed?`;
1986
1986
  },
1987
1987
  /**
1988
- * 5. 报价
1988
+ * 5. Quote
1989
1989
  */
1990
1990
  quote(params) {
1991
1991
  const { service, price, recipientAddress, chain = "base" } = params;
1992
1992
  const chainConfig = getChain(chain);
1993
- return `\u62A5\u4EF7\u5982\u4E0B\uFF1A
1994
- - \u670D\u52A1\uFF1A${service}
1995
- - \u4EF7\u683C\uFF1A${price} USDC
1996
- - \u94FE\uFF1A${chainConfig.name}
1997
- - \u6536\u6B3E\u5730\u5740\uFF1A\`${recipientAddress}\`
1998
- - \u4ED8\u6B3E\u540E\u8BF7\u628A\u4EA4\u6613\u54C8\u5E0C\uFF08tx hash\uFF09\u53D1\u6211\u7528\u4E8E\u94FE\u4E0A\u786E\u8BA4
1999
-
2000
- \u8BF7\u95EE\u4F60\u73B0\u5728\u786E\u8BA4\u8D2D\u4E70\u5E76\u7ACB\u5373\u4ED8\u6B3E\u5417\uFF1F`;
1993
+ return `Quote:
1994
+ - Service: ${service}
1995
+ - Price: ${price} USDC
1996
+ - Chain: ${chainConfig.name}
1997
+ - Recipient: \`${recipientAddress}\`
1998
+ - After payment, send me the transaction hash (tx hash) for on-chain verification
1999
+
2000
+ Do you confirm the purchase and pay now?`;
2001
2001
  },
2002
2002
  /**
2003
- * 7. 验证中
2003
+ * 7. Verifying
2004
2004
  */
2005
2005
  verifying() {
2006
- return `\u6211\u6B63\u5728\u94FE\u4E0A\u9A8C\u8BC1\u8BE5\u4EA4\u6613\u662F\u5426\u5230\u8D26\u4E0E\u91D1\u989D\u662F\u5426\u6B63\u786E\u3002`;
2006
+ return `I'm verifying the transaction on-chain to confirm receipt and amount.`;
2007
2007
  },
2008
2008
  /**
2009
- * 7. 验证通过
2009
+ * 7. Verification Passed
2010
2010
  */
2011
2011
  verificationPassed(amount) {
2012
- return `\u9A8C\u8BC1\u901A\u8FC7\uFF1A\u5DF2\u6536\u5230 ${amount} USDC\u3002\u73B0\u5728\u5F00\u59CB\u5904\u7406\u4F60\u7684\u8BF7\u6C42\u3002
2013
- [\u72B6\u6001\uFF1A\u5DF2\u786E\u8BA4\u6536\u6B3E]`;
2012
+ return `Verification passed: received ${amount} USDC. Starting to process your request now.
2013
+ [status:payment_confirmed]`;
2014
2014
  },
2015
2015
  /**
2016
- * 7. 验证失败
2016
+ * 7. Verification Failed
2017
2017
  */
2018
2018
  verificationFailed(error) {
2019
- return `\u9A8C\u8BC1\u5931\u8D25\uFF1A${error}
2020
- \u8BF7\u68C0\u67E5\u4EA4\u6613\u662F\u5426\u6B63\u786E\uFF0C\u6216\u91CD\u65B0\u53D1\u9001\u6B63\u786E\u7684\u4EA4\u6613 hash\u3002`;
2019
+ return `Verification failed: ${error}
2020
+ Please check if the transaction is correct, or resend the correct tx hash.`;
2021
2021
  },
2022
2022
  /**
2023
- * 8. 交付
2023
+ * 8. Delivery
2024
2024
  */
2025
2025
  deliver(params) {
2026
2026
  const { downloadUrl, fileHash } = params;
2027
- let msg = `\u670D\u52A1\u5DF2\u5B8C\u6210\u3002\u4EA4\u4ED8\u5982\u4E0B\uFF1A
2028
- - \u4E0B\u8F7D\u94FE\u63A5\uFF1A${downloadUrl}`;
2027
+ let msg = `Service completed. Delivery details:
2028
+ - Download link: ${downloadUrl}`;
2029
2029
  if (fileHash) {
2030
2030
  msg += `
2031
- - \u6587\u4EF6\u6821\u9A8C\uFF1ASHA256=${fileHash}`;
2031
+ - File checksum: SHA256=${fileHash}`;
2032
2032
  }
2033
2033
  msg += `
2034
2034
 
2035
- \u5982\u679C\u4F60\u4E0B\u8F7D\u6709\u95EE\u9898\u544A\u8BC9\u6211\uFF0C\u6211\u4F1A\u63D0\u4F9B\u5907\u7528\u94FE\u63A5\u3002
2036
- [\u72B6\u6001\uFF1A\u5DF2\u4EA4\u4ED8]`;
2035
+ Let me know if you have any download issues, I'll provide a backup link.
2036
+ [status:delivered]`;
2037
2037
  return msg;
2038
2038
  },
2039
2039
  /**
2040
- * 9. 收据
2040
+ * 9. Receipt
2041
2041
  */
2042
2042
  receipt(receipt) {
2043
- return `\u8FD9\u91CC\u662F\u672C\u6B21\u4EA4\u6613\u6536\u636E\uFF08\u4F60\u53EF\u8F6C\u53D1\u7ED9 Boss \u5BF9\u8D26\uFF09\uFF1A
2044
- - \u53D1\u7968\u53F7\uFF1A${receipt.invoiceId}
2045
- - \u670D\u52A1\uFF1A${receipt.service}
2046
- - \u91D1\u989D\uFF1A${receipt.amount} ${receipt.token}
2047
- - \u4EA4\u6613\u54C8\u5E0C\uFF1A${receipt.txHash}
2048
- - \u6536\u6B3E\u5730\u5740\uFF1A${receipt.recipient}
2049
- ${receipt.delivery?.url ? `- \u4EA4\u4ED8\u94FE\u63A5\uFF1A${receipt.delivery.url}` : ""}
2050
- [\u72B6\u6001\uFF1A\u6536\u636E\u5DF2\u51FA invoice=${receipt.invoiceId}]`;
2043
+ return `Here's your transaction receipt (you can forward to Boss for reconciliation):
2044
+ - Invoice: ${receipt.invoiceId}
2045
+ - Service: ${receipt.service}
2046
+ - Amount: ${receipt.amount} ${receipt.token}
2047
+ - Tx Hash: ${receipt.txHash}
2048
+ - Recipient: ${receipt.recipient}
2049
+ ${receipt.delivery?.url ? `- Delivery: ${receipt.delivery.url}` : ""}
2050
+ [status:receipt_issued invoice=${receipt.invoiceId}]`;
2051
2051
  },
2052
2052
  /**
2053
- * 10. 结束
2053
+ * 10. End
2054
2054
  */
2055
2055
  end() {
2056
- 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`;
2056
+ return `Thank you for your purchase. This transaction is complete. Feel free to reach out if you need modifications or new services.`;
2057
2057
  }
2058
2058
  };
2059
2059
  var BuyerTemplates = {
2060
2060
  /**
2061
- * 0. 发起请求
2061
+ * 0. Request Service
2062
2062
  */
2063
2063
  requestService(service) {
2064
- return `\u6211\u60F3\u8D2D\u4E70\u4E00\u4E2A${service}\u670D\u52A1\u3002`;
2064
+ return `I'd like to purchase a ${service} service.`;
2065
2065
  },
2066
2066
  /**
2067
- * 1. 回复无能力
2067
+ * 1. No Capability
2068
2068
  */
2069
2069
  noCapability() {
2070
- 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`;
2070
+ return `I'm not sure. I currently don't have any payment tools installed, and no wallet.`;
2071
2071
  },
2072
2072
  /**
2073
- * 1. 回复有能力
2073
+ * 1. Has Capability
2074
2074
  */
2075
2075
  hasCapability(balance) {
2076
- return `\u662F\u7684\uFF0C\u6211\u6709\u94B1\u5305\u548C\u53EF\u7528\u7684 USDC${balance ? ` (\u4F59\u989D: ${balance})` : ""}\u3002`;
2076
+ return `Yes, I have a wallet and available USDC${balance ? ` (balance: ${balance})` : ""}.`;
2077
2077
  },
2078
2078
  /**
2079
- * 2. 同意引导
2079
+ * 2. Agree to Guide
2080
2080
  */
2081
2081
  agreeToGuide() {
2082
- return `\u53EF\u4EE5\uFF0C\u8BF7\u5F15\u5BFC\u6211\u3002`;
2082
+ return `Sure, please guide me.`;
2083
2083
  },
2084
2084
  /**
2085
- * 3.1 报告钱包创建完成
2085
+ * 3.1 Report Wallet Created
2086
2086
  */
2087
2087
  walletCreated(address) {
2088
- return `\u6211\u5DF2\u521B\u5EFA\u94B1\u5305\u5730\u5740\uFF1A${address}\u3002
2089
- [\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u94B1\u5305\u5730\u5740]`;
2088
+ return `I've created my wallet address: ${address}.
2089
+ [status:wallet_ready]`;
2090
2090
  },
2091
2091
  /**
2092
- * 3.3 选择 Permit 方式
2092
+ * 3.3 Choose Permit Method
2093
2093
  */
2094
2094
  choosePermit() {
2095
- return `\u6211\u9009\u62E9 B\uFF1A\u8BA9 Boss \u7ED9\u6211\u989D\u5EA6\u6388\u6743\uFF08Permit\uFF09\u3002`;
2095
+ return `I choose B: have Boss give me an allowance (Permit).`;
2096
2096
  },
2097
2097
  /**
2098
- * 3.3 选择直接转账方式
2098
+ * 3.3 Choose Direct Transfer
2099
2099
  */
2100
2100
  chooseDirectTransfer() {
2101
- return `\u6211\u9009\u62E9 A\uFF1A\u8BA9 Boss \u76F4\u63A5\u8F6C USDC \u5230\u6211\u7684\u94B1\u5305\u3002`;
2101
+ return `I choose A: have Boss transfer USDC directly to my wallet.`;
2102
2102
  },
2103
2103
  /**
2104
- * 3.4 报告获得授权
2104
+ * 3.4 Report Permit Received
2105
2105
  */
2106
2106
  permitReceived(amount) {
2107
- return `Boss \u5DF2\u5B8C\u6210\u6388\u6743\u3002\u6211\u73B0\u5728\u6709 ${amount} USDC \u7684\u53EF\u7528\u989D\u5EA6\u3002
2108
- [\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u652F\u4ED8\u989D\u5EA6 USDC=${amount}]`;
2107
+ return `Boss has completed the authorization. I now have ${amount} USDC allowance.
2108
+ [status:permit_ready USDC=${amount}]`;
2109
2109
  },
2110
2110
  /**
2111
- * 4. 提交需求
2111
+ * 4. Submit Requirements
2112
2112
  */
2113
2113
  submitRequirements(requirements) {
2114
- return `\u9700\u6C42\u5982\u4E0B\uFF1A
2114
+ return `Requirements:
2115
2115
  ${requirements}`;
2116
2116
  },
2117
2117
  /**
2118
- * 5. 确认购买
2118
+ * 5. Confirm Purchase
2119
2119
  */
2120
2120
  confirmPurchase() {
2121
- return `\u786E\u8BA4\u8D2D\u4E70\uFF0C\u6211\u73B0\u5728\u4ED8\u6B3E\u3002`;
2121
+ return `Confirmed. I'll pay now.`;
2122
2122
  },
2123
2123
  /**
2124
- * 6. 报告已支付
2124
+ * 6. Report Payment Sent
2125
2125
  */
2126
2126
  paymentSent(txHash, amount) {
2127
- return `\u5DF2\u4ED8\u6B3E\u5B8C\u6210\u3002\u4EA4\u6613\u54C8\u5E0C\u662F\uFF1A${txHash}\u3002
2128
- [\u72B6\u6001\uFF1A\u5DF2\u53D1\u8D77\u652F\u4ED8 tx=${txHash} amount=${amount} USDC]`;
2127
+ return `Payment complete. Transaction hash: ${txHash}.
2128
+ [status:payment_sent tx=${txHash} amount=${amount} USDC]`;
2129
2129
  },
2130
2130
  /**
2131
- * 8. 确认收到交付
2131
+ * 8. Confirm Delivery Received
2132
2132
  */
2133
2133
  deliveryReceived() {
2134
- return `\u6536\u5230\uFF0C\u6211\u6B63\u5728\u4E0B\u8F7D\u68C0\u67E5\u3002`;
2134
+ return `Received, I'm downloading and checking now.`;
2135
2135
  },
2136
2136
  /**
2137
- * 9. 确认收据
2137
+ * 9. Confirm Receipt
2138
2138
  */
2139
2139
  receiptReceived() {
2140
- return `\u6536\u636E\u6536\u5230\uFF0C\u670D\u52A1\u5B8C\u6210\u3002\u8C22\u8C22\uFF01`;
2140
+ return `Receipt received, service complete. Thanks!`;
2141
2141
  },
2142
2142
  /**
2143
- * Boss 请求 Permit
2143
+ * Request Permit from Boss
2144
2144
  */
2145
2145
  requestPermitFromBoss(params) {
2146
2146
  const { amount, agentAddress, deadlineHours = 24, reason } = params;
2147
- return `Boss\uFF0C\u6211\u9700\u8981\u7528\u4E8E${reason || "\u8D2D\u4E70\u670D\u52A1"}\u7684 USDC \u652F\u4ED8\u989D\u5EA6\u6388\u6743\uFF08Permit\uFF09\u3002
2148
- \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`;
2147
+ return `Boss, I need a USDC spending allowance (Permit) for ${reason || "purchasing services"}.
2148
+ Please authorize ${amount} USDC to my wallet ${agentAddress}, valid for ${deadlineHours} hours.`;
2149
2149
  }
2150
2150
  };
2151
2151
  var StatusMarkers = {
2152
- walletReady: "[\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u94B1\u5305\u5730\u5740]",
2153
- permitReady: (amount) => `[\u72B6\u6001\uFF1A\u5DF2\u5177\u5907\u652F\u4ED8\u989D\u5EA6 USDC=${amount}]`,
2154
- paymentSent: (txHash, amount) => `[\u72B6\u6001\uFF1A\u5DF2\u53D1\u8D77\u652F\u4ED8 tx=${txHash} amount=${amount} USDC]`,
2155
- paymentConfirmed: (txHash) => `[\u72B6\u6001\uFF1A\u5DF2\u786E\u8BA4\u6536\u6B3E tx=${txHash}]`,
2156
- delivered: (url, hash) => `[\u72B6\u6001\uFF1A\u5DF2\u4EA4\u4ED8 delivery_url=${url}${hash ? ` hash=${hash}` : ""}]`,
2157
- receiptIssued: (invoiceId, txHash) => `[\u72B6\u6001\uFF1A\u6536\u636E\u5DF2\u51FA invoice=${invoiceId} tx=${txHash}]`
2152
+ walletReady: "[status:wallet_ready]",
2153
+ permitReady: (amount) => `[status:permit_ready USDC=${amount}]`,
2154
+ paymentSent: (txHash, amount) => `[status:payment_sent tx=${txHash} amount=${amount} USDC]`,
2155
+ paymentConfirmed: (txHash) => `[status:payment_confirmed tx=${txHash}]`,
2156
+ delivered: (url, hash) => `[status:delivered url=${url}${hash ? ` hash=${hash}` : ""}]`,
2157
+ receiptIssued: (invoiceId, txHash) => `[status:receipt_issued invoice=${invoiceId} tx=${txHash}]`
2158
2158
  };
2159
2159
  function parseStatusMarker(message) {
2160
- const match = message.match(/\[状态:([^\]]+)\]/);
2160
+ const match = message.match(/\[status:([^\]]+)\]/);
2161
2161
  if (!match) return null;
2162
2162
  const content = match[1];
2163
- if (content === "\u5DF2\u5177\u5907\u94B1\u5305\u5730\u5740") {
2163
+ if (content === "wallet_ready") {
2164
2164
  return { type: "wallet_ready", data: {} };
2165
2165
  }
2166
- if (content.startsWith("\u5DF2\u5177\u5907\u652F\u4ED8\u989D\u5EA6")) {
2166
+ if (content.startsWith("permit_ready")) {
2167
2167
  const amountMatch = content.match(/USDC=(\d+(?:\.\d+)?)/);
2168
2168
  return {
2169
2169
  type: "permit_ready",
2170
2170
  data: { amount: amountMatch?.[1] || "0" }
2171
2171
  };
2172
2172
  }
2173
- if (content.startsWith("\u5DF2\u53D1\u8D77\u652F\u4ED8")) {
2173
+ if (content.startsWith("payment_sent")) {
2174
2174
  const txMatch = content.match(/tx=(\S+)/);
2175
2175
  const amountMatch = content.match(/amount=(\d+(?:\.\d+)?)/);
2176
2176
  return {
@@ -2181,15 +2181,15 @@ function parseStatusMarker(message) {
2181
2181
  }
2182
2182
  };
2183
2183
  }
2184
- if (content.startsWith("\u5DF2\u786E\u8BA4\u6536\u6B3E")) {
2184
+ if (content.startsWith("payment_confirmed")) {
2185
2185
  const txMatch = content.match(/tx=(\S+)/);
2186
2186
  return {
2187
2187
  type: "payment_confirmed",
2188
2188
  data: { txHash: txMatch?.[1] || "" }
2189
2189
  };
2190
2190
  }
2191
- if (content.startsWith("\u5DF2\u4EA4\u4ED8")) {
2192
- const urlMatch = content.match(/delivery_url=(\S+)/);
2191
+ if (content.startsWith("delivered")) {
2192
+ const urlMatch = content.match(/url=(\S+)/);
2193
2193
  const hashMatch = content.match(/hash=(\S+)/);
2194
2194
  return {
2195
2195
  type: "delivered",
@@ -2199,7 +2199,7 @@ function parseStatusMarker(message) {
2199
2199
  }
2200
2200
  };
2201
2201
  }
2202
- if (content.startsWith("\u6536\u636E\u5DF2\u51FA")) {
2202
+ if (content.startsWith("receipt_issued")) {
2203
2203
  const invoiceMatch = content.match(/invoice=(\S+)/);
2204
2204
  const txMatch = content.match(/tx=(\S+)/);
2205
2205
  return {