safehands-pharos 1.3.0 → 1.5.0

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 (118) hide show
  1. package/.env.example +64 -26
  2. package/README.md +444 -445
  3. package/dist/cli.d.ts +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +36 -8
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +208 -147
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/auditLog.d.ts +9 -0
  12. package/dist/lib/auditLog.d.ts.map +1 -0
  13. package/dist/lib/auditLog.js +30 -0
  14. package/dist/lib/auditLog.js.map +1 -0
  15. package/dist/lib/constants.d.ts +12 -0
  16. package/dist/lib/constants.d.ts.map +1 -1
  17. package/dist/lib/constants.js +10 -0
  18. package/dist/lib/constants.js.map +1 -1
  19. package/dist/lib/dodoApi.d.ts +8 -0
  20. package/dist/lib/dodoApi.d.ts.map +1 -1
  21. package/dist/lib/dodoApi.js +22 -4
  22. package/dist/lib/dodoApi.js.map +1 -1
  23. package/dist/lib/envLoader.d.ts +2 -0
  24. package/dist/lib/envLoader.d.ts.map +1 -0
  25. package/dist/lib/envLoader.js +44 -0
  26. package/dist/lib/envLoader.js.map +1 -0
  27. package/dist/lib/pharosClient.d.ts.map +1 -1
  28. package/dist/lib/pharosClient.js +13 -3
  29. package/dist/lib/pharosClient.js.map +1 -1
  30. package/dist/lib/riskEngine.d.ts.map +1 -1
  31. package/dist/lib/riskEngine.js +50 -45
  32. package/dist/lib/riskEngine.js.map +1 -1
  33. package/dist/lib/signer/index.d.ts.map +1 -1
  34. package/dist/lib/signer/index.js +3 -4
  35. package/dist/lib/signer/index.js.map +1 -1
  36. package/dist/lib/spendAccumulator.d.ts +10 -0
  37. package/dist/lib/spendAccumulator.d.ts.map +1 -0
  38. package/dist/lib/spendAccumulator.js +54 -0
  39. package/dist/lib/spendAccumulator.js.map +1 -0
  40. package/dist/lib/testRpc.d.ts +1 -1
  41. package/dist/lib/testRpc.js +29 -29
  42. package/dist/lib/testTools.d.ts +1 -1
  43. package/dist/lib/testTools.js +4 -5
  44. package/dist/lib/wallet/index.d.ts +19 -0
  45. package/dist/lib/wallet/index.d.ts.map +1 -1
  46. package/dist/lib/wallet/index.js +65 -7
  47. package/dist/lib/wallet/index.js.map +1 -1
  48. package/dist/tools/approveToken.d.ts +0 -1
  49. package/dist/tools/approveToken.d.ts.map +1 -1
  50. package/dist/tools/approveToken.js +3 -1
  51. package/dist/tools/approveToken.js.map +1 -1
  52. package/dist/tools/assessRisk.d.ts.map +1 -1
  53. package/dist/tools/assessRisk.js +18 -7
  54. package/dist/tools/assessRisk.js.map +1 -1
  55. package/dist/tools/checkAllowance.d.ts +9 -2
  56. package/dist/tools/checkAllowance.d.ts.map +1 -1
  57. package/dist/tools/checkAllowance.js +20 -6
  58. package/dist/tools/checkAllowance.js.map +1 -1
  59. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  60. package/dist/tools/checkTokenSecurity.js +7 -0
  61. package/dist/tools/checkTokenSecurity.js.map +1 -1
  62. package/dist/tools/createAgentWallet.d.ts +2 -0
  63. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  64. package/dist/tools/createAgentWallet.js +30 -7
  65. package/dist/tools/createAgentWallet.js.map +1 -1
  66. package/dist/tools/executeSwap.d.ts +3 -1
  67. package/dist/tools/executeSwap.d.ts.map +1 -1
  68. package/dist/tools/executeSwap.js +13 -1
  69. package/dist/tools/executeSwap.js.map +1 -1
  70. package/dist/tools/getExecutionHistory.d.ts +15 -17
  71. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  72. package/dist/tools/getExecutionHistory.js +125 -64
  73. package/dist/tools/getExecutionHistory.js.map +1 -1
  74. package/dist/tools/getTransactionStatus.d.ts +5 -19
  75. package/dist/tools/getTransactionStatus.d.ts.map +1 -1
  76. package/dist/tools/getTransactionStatus.js +10 -18
  77. package/dist/tools/getTransactionStatus.js.map +1 -1
  78. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  79. package/dist/tools/publishRiskScore.js +3 -0
  80. package/dist/tools/publishRiskScore.js.map +1 -1
  81. package/dist/tools/queryRiskRegistry.d.ts +3 -13
  82. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  83. package/dist/tools/queryRiskRegistry.js +6 -11
  84. package/dist/tools/queryRiskRegistry.js.map +1 -1
  85. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  86. package/dist/tools/safehandsSafeExecute.js +12 -6
  87. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  88. package/dist/tools/sendPayment.d.ts +0 -1
  89. package/dist/tools/sendPayment.d.ts.map +1 -1
  90. package/dist/tools/sendPayment.js +10 -1
  91. package/dist/tools/sendPayment.js.map +1 -1
  92. package/dist/tools/simulateTransaction.d.ts +2 -23
  93. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  94. package/dist/tools/simulateTransaction.js +10 -15
  95. package/dist/tools/simulateTransaction.js.map +1 -1
  96. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  97. package/dist/tools/x402PayAndFetch.js +4 -1
  98. package/dist/tools/x402PayAndFetch.js.map +1 -1
  99. package/dist/x402Server.js +51 -3
  100. package/dist/x402Server.js.map +1 -1
  101. package/package.json +73 -84
  102. package/.agents/skill/safehands/SKILL.md +0 -212
  103. package/.agents/skill/safehands/assets/networks.json +0 -24
  104. package/.agents/skill/safehands/assets/tokens.json +0 -66
  105. package/.agents/wallets.json +0 -20
  106. package/docs/reports/OFFICIAL_DOCS_ALIGNMENT_REPORT.md +0 -137
  107. package/docs/reports/final_audit_report.md +0 -307
  108. package/docs/reports/live_verification_report.md +0 -147
  109. package/docs/reports/pharos_skill_engine_alignment_report.md +0 -85
  110. package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
  111. package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
  112. package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
  113. package/examples/pharos-skill-engine/references/safehands.md +0 -345
  114. package/examples/scenario-hack.ts +0 -38
  115. package/skill/SKILL.md +0 -133
  116. package/skill/assets/safehands/example-actions.json +0 -49
  117. package/skill/assets/safehands/policy-defaults.json +0 -11
  118. package/skill/references/safehands.md +0 -345
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/signer/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAC7F,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa,CAAC;AAE3D,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,IAAI,aAAa,CAEtE;AAsDD;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,aAAa,CAAA;CAAO,GACxC,OAAO,CAAC,eAAe,CAAC,CA0B1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/signer/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAC7F,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa,CAAC;AAE3D,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,IAAI,aAAa,CAEtE;AAqDD;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,aAAa,CAAA;CAAO,GACxC,OAAO,CAAC,eAAe,CAAC,CA0B1B"}
@@ -3,7 +3,7 @@
3
3
  // directly — they request a signer through this provider.
4
4
  // ────────────────────────────────────────────────────────────────────────
5
5
  import { privateKeyToAccount } from "viem/accounts";
6
- import { walletStore, deobfuscateKey } from "../wallet/index.js";
6
+ import { walletStore, decryptKey, getEffectiveEncryptionKey } from "../wallet/index.js";
7
7
  export function isSignerFailure(r) {
8
8
  return "error" in r;
9
9
  }
@@ -42,9 +42,8 @@ async function accountFromManagedWallet(agentId) {
42
42
  const stored = await walletStore.get(agentId);
43
43
  if (!stored)
44
44
  return null;
45
- const encryptionKey = process.env.WALLET_ENCRYPTION_KEY || "safehands-testnet-default-key";
46
45
  try {
47
- const privateKey = deobfuscateKey(stored.encryptedKey, encryptionKey);
46
+ const privateKey = decryptKey(stored.encryptedKey, getEffectiveEncryptionKey());
48
47
  const account = privateKeyToAccount(normalizePrivateKey(privateKey));
49
48
  return { account, address: account.address, mode: "managed-testnet" };
50
49
  }
@@ -52,7 +51,7 @@ async function accountFromManagedWallet(agentId) {
52
51
  return {
53
52
  error: {
54
53
  code: "NO_SIGNER_AVAILABLE",
55
- message: "Managed wallet key could not be decrypted/deobfuscated for signing.",
54
+ message: "Managed wallet key could not be decrypted for signing. Check WALLET_ENCRYPTION_KEY matches the key used when the wallet was created.",
56
55
  },
57
56
  };
58
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/signer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/signer/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,0DAA0D;AAC1D,2EAA2E;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAoBxF,MAAM,UAAU,eAAe,CAAC,CAAkB;IAChD,OAAO,OAAO,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAU;IACrC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAkB,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAkD,EAAE,IAAgB;IAC7F,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,GAAG,OAAO,8BAA8B;aAClD;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAAgB;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;IACrD,IAAI,UAAU,KAAK,iBAAiB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE9D,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACxE,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,gCAAgC;gBACtC,OAAO,EACL,0GAA0G;aAC7G;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,sIAAsI;aAChJ;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAgB,EAChB,UAAuC,EAAE;IAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,iBAAiB,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;QACzE,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;IACrD,IAAI,UAAU,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IAED,OAAO;QACL,KAAK,EAAE;YACL,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EACL,OAAO,KAAK,MAAM;gBAChB,CAAC,CAAC,gJAAgJ;gBAClJ,CAAC,CAAC,oIAAoI;SAC3I;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function getMaxDailySpendUsd(): number;
2
+ export declare function estimateUsd(amount: string, token: "PHRS" | "USDC" | "USDT" | string): number;
3
+ export declare function checkDailyLimit(walletAddress: string, amountUsd: number): {
4
+ allowed: boolean;
5
+ currentUsd: number;
6
+ limitUsd: number;
7
+ remainingUsd: number;
8
+ };
9
+ export declare function recordSpend(walletAddress: string, amountUsd: number): void;
10
+ //# sourceMappingURL=spendAccumulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spendAccumulator.d.ts","sourceRoot":"","sources":["../../src/lib/spendAccumulator.ts"],"names":[],"mappings":"AAqBA,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAO5F;AAED,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAalF;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAU1E"}
@@ -0,0 +1,54 @@
1
+ // ─── Daily Spend Accumulator ────────────────────────────────────────────
2
+ // In-memory per-wallet daily spend tracker. Resets at UTC midnight.
3
+ // Enforces MAX_DAILY_SPEND_USD across sendPayment and executeSwap.
4
+ // PHRS → USD conversion uses PHRS_USD_PRICE env var (default 1.0).
5
+ // ────────────────────────────────────────────────────────────────────────
6
+ const buckets = new Map();
7
+ function todayUtc() {
8
+ return new Date().toISOString().slice(0, 10);
9
+ }
10
+ function getPhrsUsdPrice() {
11
+ return parseFloat(process.env.PHRS_USD_PRICE || "1.0");
12
+ }
13
+ export function getMaxDailySpendUsd() {
14
+ return parseFloat(process.env.MAX_DAILY_SPEND_USD || "10");
15
+ }
16
+ export function estimateUsd(amount, token) {
17
+ const n = parseFloat(amount);
18
+ if (isNaN(n))
19
+ return 0;
20
+ const upper = token.toUpperCase();
21
+ if (upper === "PHRS")
22
+ return n * getPhrsUsdPrice();
23
+ if (upper === "USDC" || upper === "USDT")
24
+ return n;
25
+ return 0; // unknown token — do not count to avoid false blocks
26
+ }
27
+ export function checkDailyLimit(walletAddress, amountUsd) {
28
+ const key = walletAddress.toLowerCase();
29
+ const today = todayUtc();
30
+ const bucket = buckets.get(key);
31
+ const currentUsd = !bucket || bucket.dateUtc !== today ? 0 : bucket.totalUsd;
32
+ const limitUsd = getMaxDailySpendUsd();
33
+ const remainingUsd = Math.max(0, limitUsd - currentUsd);
34
+ return {
35
+ allowed: currentUsd + amountUsd <= limitUsd,
36
+ currentUsd,
37
+ limitUsd,
38
+ remainingUsd,
39
+ };
40
+ }
41
+ export function recordSpend(walletAddress, amountUsd) {
42
+ if (amountUsd <= 0)
43
+ return;
44
+ const key = walletAddress.toLowerCase();
45
+ const today = todayUtc();
46
+ const bucket = buckets.get(key);
47
+ if (!bucket || bucket.dateUtc !== today) {
48
+ buckets.set(key, { dateUtc: today, totalUsd: amountUsd });
49
+ }
50
+ else {
51
+ bucket.totalUsd += amountUsd;
52
+ }
53
+ }
54
+ //# sourceMappingURL=spendAccumulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spendAccumulator.js","sourceRoot":"","sources":["../../src/lib/spendAccumulator.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,oEAAoE;AACpE,mEAAmE;AACnE,mEAAmE;AACnE,2EAA2E;AAO3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE7C,SAAS,QAAQ;IACf,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,KAAwC;IAClF,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,CAAC,GAAG,eAAe,EAAE,CAAC;IACnD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,CAAC,qDAAqD;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,aAAqB,EACrB,SAAiB;IAEjB,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7E,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;IACxD,OAAO;QACL,OAAO,EAAE,UAAU,GAAG,SAAS,IAAI,QAAQ;QAC3C,UAAU;QACV,QAAQ;QACR,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAqB,EAAE,SAAiB;IAClE,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO;IAC3B,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=testRpc.d.ts.map
@@ -1,30 +1,30 @@
1
- // ─── RPC Connection Test ───────────────────────────────────────────────
2
- // Quick smoke test: connects to Pharos Atlantic Testnet and verifies
3
- // the chain ID matches 688689.
4
- // ────────────────────────────────────────────────────────────────────────
5
- import { publicClient } from "./pharosClient.js";
6
- import { CHAIN_ID } from "./constants.js";
7
- async function main() {
8
- console.log("🔌 Connecting to Pharos Atlantic Testnet...");
9
- console.log(` RPC: https://atlantic.dplabs-internal.com/`);
10
- try {
11
- const chainId = await publicClient.getChainId();
12
- console.log(` Chain ID returned: ${chainId}`);
13
- if (chainId === CHAIN_ID) {
14
- console.log(`✅ SUCCESS — Chain ID matches expected ${CHAIN_ID}`);
15
- }
16
- else {
17
- console.error(`❌ MISMATCH — Expected ${CHAIN_ID}, got ${chainId}`);
18
- process.exit(1);
19
- }
20
- const blockNumber = await publicClient.getBlockNumber();
21
- console.log(` Latest block: ${blockNumber}`);
22
- console.log("\n🎉 Pharos RPC connection verified.");
23
- }
24
- catch (error) {
25
- console.error("❌ RPC connection failed:", error);
26
- process.exit(1);
27
- }
28
- }
29
- main();
1
+ // ─── RPC Connection Test ───────────────────────────────────────────────
2
+ // Quick smoke test: connects to Pharos Atlantic Testnet and verifies
3
+ // the chain ID matches 688689.
4
+ // ────────────────────────────────────────────────────────────────────────
5
+ import { publicClient } from "./pharosClient.js";
6
+ import { CHAIN_ID } from "./constants.js";
7
+ async function main() {
8
+ console.log("🔌 Connecting to Pharos Atlantic Testnet...");
9
+ console.log(` RPC: https://atlantic.dplabs-internal.com/`);
10
+ try {
11
+ const chainId = await publicClient.getChainId();
12
+ console.log(` Chain ID returned: ${chainId}`);
13
+ if (chainId === CHAIN_ID) {
14
+ console.log(`✅ SUCCESS — Chain ID matches expected ${CHAIN_ID}`);
15
+ }
16
+ else {
17
+ console.error(`❌ MISMATCH — Expected ${CHAIN_ID}, got ${chainId}`);
18
+ process.exit(1);
19
+ }
20
+ const blockNumber = await publicClient.getBlockNumber();
21
+ console.log(` Latest block: ${blockNumber}`);
22
+ console.log("\n🎉 Pharos RPC connection verified.");
23
+ }
24
+ catch (error) {
25
+ console.error("❌ RPC connection failed:", error);
26
+ process.exit(1);
27
+ }
28
+ }
29
+ main();
30
30
  //# sourceMappingURL=testRpc.js.map
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=testTools.d.ts.map
@@ -359,12 +359,12 @@ async function run() {
359
359
  await record("readme_contains_final_positioning", async () => {
360
360
  const text = readFileSync(join(process.cwd(), "README.md"), "utf8");
361
361
  const required = [
362
- "# SafeHands-Pharos: Transaction Safety Firewall for AI Agents",
362
+ "# SafeHands-Pharos Transaction Safety Firewall for AI Agents",
363
363
  "Pharos Skill Engine-compatible MCP package",
364
- "SafeHands is a guardrail layer",
364
+ "ALLOW",
365
365
  "WRITE_TOOLS_ENABLED=false",
366
- "Testnet scope",
367
- "Using SafeHands with Pharos Skill Engine",
366
+ "safehands_preflight_check",
367
+ "Known Limitations",
368
368
  ];
369
369
  return hasAll(text, required) ? ok({ required }) : fail("README_POSITIONING_INCOMPLETE", "Missing final positioning text.", false, "readme");
370
370
  }, (res) => res.success);
@@ -395,4 +395,3 @@ run().catch((err) => {
395
395
  console.error(JSON.stringify(structured, null, 2));
396
396
  process.exit(1);
397
397
  });
398
- //# sourceMappingURL=testTools.js.map
@@ -12,8 +12,27 @@ export interface WalletStoreInterface {
12
12
  set(agentId: string, wallet: StoredWallet): Promise<void>;
13
13
  has(agentId: string): Promise<boolean>;
14
14
  }
15
+ /**
16
+ * Encrypts a private key with AES-256-GCM.
17
+ * Output format: <iv(12B)><tag(16B)><ciphertext> as hex string (no 0x prefix).
18
+ */
19
+ export declare function encryptKey(privateKey: string, encryptionKey: string): string;
20
+ /**
21
+ * Decrypts a private key. Handles both:
22
+ * - New AES-256-GCM format (pure hex, no 0x prefix)
23
+ * - Legacy XOR format (starts with "0x") — transparently supported for migration
24
+ */
25
+ export declare function decryptKey(encrypted: string, encryptionKey: string): string;
26
+ /** @deprecated Use encryptKey / decryptKey. Kept for callers that haven't migrated yet. */
15
27
  export declare function obfuscateKey(privateKey: string, encryptionKey: string): string;
28
+ /** @deprecated Use decryptKey. */
16
29
  export declare function deobfuscateKey(obfuscated: string, encryptionKey: string): string;
30
+ /**
31
+ * Returns the effective encryption key.
32
+ * - Persistent store: WALLET_ENCRYPTION_KEY must be set (wallets won't survive restarts otherwise).
33
+ * - In-memory store: falls back to a random per-process key.
34
+ */
35
+ export declare function getEffectiveEncryptionKey(): string;
17
36
  export declare function usesPersistentWalletStore(): boolean;
18
37
  export declare const walletStore: WalletStoreInterface;
19
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAqDD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAEhF;AAYD,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,eAAO,MAAM,WAAW,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AA4DD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAc3E;AAcD,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,kCAAkC;AAClC,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAEhF;AAOD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAYD,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,eAAO,MAAM,WAAW,sBAAsB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  // ─── WalletStore ────────────────────────────────────────────────────────
2
2
  // Abstraction for storing managed testnet agent wallets.
3
- // Private keys are XOR-obfuscated with encryption key before storage.
4
- // NOT mainnet-grade encryption testnet only.
3
+ // Private keys are AES-256-GCM encrypted before storage.
4
+ // Legacy XOR-obfuscated keys (starting with "0x") are transparently migrated
5
+ // on first read. NOT mainnet-grade KMS — testnet only.
5
6
  // ────────────────────────────────────────────────────────────────────────
6
- import { readFileSync, writeFileSync, existsSync } from "fs";
7
+ import { readFileSync, writeFileSync, renameSync, existsSync } from "fs";
8
+ import { randomBytes, createCipheriv, createDecipheriv, createHash } from "node:crypto";
7
9
  // ─── In-Memory Store (tests + default) ─────────────────────────────────
8
10
  class InMemoryWalletStore {
9
11
  store = new Map();
@@ -37,14 +39,54 @@ class FileWalletStore {
37
39
  }
38
40
  async set(agentId, wallet) {
39
41
  this.data[agentId] = wallet;
40
- writeFileSync(this.path, JSON.stringify(this.data, null, 2));
42
+ // Atomic write: write to .tmp then rename to avoid corruption on crash
43
+ const tmpPath = `${this.path}.tmp`;
44
+ writeFileSync(tmpPath, JSON.stringify(this.data, null, 2), "utf-8");
45
+ renameSync(tmpPath, this.path);
41
46
  }
42
47
  async has(agentId) {
43
48
  return agentId in this.data;
44
49
  }
45
50
  }
46
- // ─── Key Obfuscation (testnet only) ────────────────────────────────────
47
- export function obfuscateKey(privateKey, encryptionKey) {
51
+ // ─── AES-256-GCM Encryption ────────────────────────────────────────────
52
+ function deriveKey(encryptionKey) {
53
+ return createHash("sha256").update(encryptionKey).digest();
54
+ }
55
+ /**
56
+ * Encrypts a private key with AES-256-GCM.
57
+ * Output format: <iv(12B)><tag(16B)><ciphertext> as hex string (no 0x prefix).
58
+ */
59
+ export function encryptKey(privateKey, encryptionKey) {
60
+ const key = deriveKey(encryptionKey);
61
+ const iv = randomBytes(12);
62
+ const cipher = createCipheriv("aes-256-gcm", key, iv);
63
+ const plain = Buffer.from(privateKey.replace(/^0x/, ""), "hex");
64
+ const encrypted = Buffer.concat([cipher.update(plain), cipher.final()]);
65
+ const tag = cipher.getAuthTag();
66
+ return Buffer.concat([iv, tag, encrypted]).toString("hex");
67
+ }
68
+ /**
69
+ * Decrypts a private key. Handles both:
70
+ * - New AES-256-GCM format (pure hex, no 0x prefix)
71
+ * - Legacy XOR format (starts with "0x") — transparently supported for migration
72
+ */
73
+ export function decryptKey(encrypted, encryptionKey) {
74
+ if (encrypted.startsWith("0x")) {
75
+ // Legacy XOR path — symmetric, same operation
76
+ return _xorObfuscate(encrypted, encryptionKey);
77
+ }
78
+ const key = deriveKey(encryptionKey);
79
+ const data = Buffer.from(encrypted, "hex");
80
+ const iv = data.subarray(0, 12);
81
+ const tag = data.subarray(12, 28);
82
+ const ciphertext = data.subarray(28);
83
+ const decipher = createDecipheriv("aes-256-gcm", key, iv);
84
+ decipher.setAuthTag(tag);
85
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
86
+ return "0x" + decrypted.toString("hex");
87
+ }
88
+ // ─── Legacy XOR helpers (kept for migration read path only) ────────────
89
+ function _xorObfuscate(privateKey, encryptionKey) {
48
90
  const keyBytes = Buffer.from(encryptionKey.padEnd(32, "0").slice(0, 32));
49
91
  const pkBytes = Buffer.from(privateKey.replace("0x", ""), "hex");
50
92
  const result = Buffer.alloc(pkBytes.length);
@@ -53,8 +95,24 @@ export function obfuscateKey(privateKey, encryptionKey) {
53
95
  }
54
96
  return "0x" + result.toString("hex");
55
97
  }
98
+ /** @deprecated Use encryptKey / decryptKey. Kept for callers that haven't migrated yet. */
99
+ export function obfuscateKey(privateKey, encryptionKey) {
100
+ return _xorObfuscate(privateKey, encryptionKey);
101
+ }
102
+ /** @deprecated Use decryptKey. */
56
103
  export function deobfuscateKey(obfuscated, encryptionKey) {
57
- return obfuscateKey(obfuscated, encryptionKey); // XOR is symmetric
104
+ return _xorObfuscate(obfuscated, encryptionKey);
105
+ }
106
+ // ─── Encryption key resolution ─────────────────────────────────────────
107
+ // Random per-process fallback key — never hardcoded, never reused across restarts
108
+ const IN_MEMORY_FALLBACK_KEY = randomBytes(32).toString("hex");
109
+ /**
110
+ * Returns the effective encryption key.
111
+ * - Persistent store: WALLET_ENCRYPTION_KEY must be set (wallets won't survive restarts otherwise).
112
+ * - In-memory store: falls back to a random per-process key.
113
+ */
114
+ export function getEffectiveEncryptionKey() {
115
+ return process.env.WALLET_ENCRYPTION_KEY || IN_MEMORY_FALLBACK_KEY;
58
116
  }
59
117
  // ─── Factory ────────────────────────────────────────────────────────────
60
118
  function createWalletStore() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,6 @@ export declare const approveTokenTool: {
31
31
  }>;
32
32
  };
33
33
  export declare function handleApproveToken(raw: ApproveTokenInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
34
- txSuccess: boolean;
35
34
  txHash: `0x${string}`;
36
35
  explorerUrl: string;
37
36
  token: "USDC" | "USDT";
@@ -1 +1 @@
1
- {"version":3,"file":"approveToken.d.ts","sourceRoot":"","sources":["../../src/tools/approveToken.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAK5B,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB;;;;;;;;;;;;;IA4E9D"}
1
+ {"version":3,"file":"approveToken.d.ts","sourceRoot":"","sources":["../../src/tools/approveToken.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAK5B,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB;;;;;;;;;;;;IA+E9D"}
@@ -62,8 +62,10 @@ export async function handleApproveToken(raw) {
62
62
  args: [DODO_APPROVE_ADDRESS, approveAmount],
63
63
  });
64
64
  const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
65
+ if (receipt.status !== "success") {
66
+ return fail("TX_REVERTED", "approve_token transaction was mined but reverted on-chain.", false, "approve_token");
67
+ }
65
68
  return ok({
66
- txSuccess: receipt.status === "success",
67
69
  txHash,
68
70
  explorerUrl: getExplorerUrl(txHash),
69
71
  token: input.token,
@@ -1 +1 @@
1
- {"version":3,"file":"approveToken.js","sourceRoot":"","sources":["../../src/tools/approveToken.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approveToken.js","sourceRoot":"","sources":["../../src/tools/approveToken.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uDAAuD;AACvD,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,mCAAmC,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC1J,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,EAAE,EAA4B,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IACvF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;CAC3G,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,uGAAuG;IACzG,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAsB;IAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,IAAI,CACT,sBAAsB,EACtB,wGAAwG,EACxG,KAAK,EACL,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,UAAU,EAAE,eAAe;QAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;QAC5B,aAAa,EAAE,KAAK,CAAC,KAAK;QAC1B,iBAAiB,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK;QACzC,OAAO,EAAE,oBAAoB;QAC7B,eAAe,EAAE,IAAI;QACrB,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,KAAK;QAChB,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,IAAI;QACpB,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM;KACxE,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACtF,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,uCAAuC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACjH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC,yBAAyB,EAAE,qDAAqD,wBAAwB,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACpJ,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,aAAa,GACjB,KAAK,CAAC,MAAM,KAAK,KAAK;QACpB,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,EAAE;QACjB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mCAAmC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACxC,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,oBAAoB,EAAE,aAAa,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,aAAa,EAAE,4DAA4D,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QACnH,CAAC;QAED,OAAO,EAAE,CAAC;YACR,MAAM;YACN,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC;YACnC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY;YACZ,cAAc,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;YACnE,OAAO,EAAE,oBAAoB;YAC7B,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnC,MAAM;YACN,MAAM,EAAE,eAAe;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"assessRisk.d.ts","sourceRoot":"","sources":["../../src/tools/assessRisk.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMvE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,eAAe,CAAC,EAAE;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM1B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyEtF"}
1
+ {"version":3,"file":"assessRisk.d.ts","sourceRoot":"","sources":["../../src/tools/assessRisk.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMvE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,eAAe,CAAC,EAAE;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM1B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmFtF"}
@@ -74,13 +74,24 @@ export async function handleAssessRisk(raw) {
74
74
  assessment.recommendation,
75
75
  ],
76
76
  });
77
- await publicClient.waitForTransactionReceipt({ hash: txHash });
78
- result.registryPublish = {
79
- published: true,
80
- txHash,
81
- explorerUrl: getExplorerUrl(txHash),
82
- signerMode: signer.mode,
83
- };
77
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
78
+ if (receipt.status !== "success") {
79
+ result.registryPublish = {
80
+ published: false,
81
+ txHash,
82
+ explorerUrl: getExplorerUrl(txHash),
83
+ error: "TX_REVERTED: transaction was mined but reverted. Ensure the calling wallet is authorized via RiskRegistry.setAuthorizedAgent() by the contract owner.",
84
+ signerMode: signer.mode,
85
+ };
86
+ }
87
+ else {
88
+ result.registryPublish = {
89
+ published: true,
90
+ txHash,
91
+ explorerUrl: getExplorerUrl(txHash),
92
+ signerMode: signer.mode,
93
+ };
94
+ }
84
95
  }
85
96
  catch (err) {
86
97
  result.registryPublish = {
@@ -1 +1 @@
1
- {"version":3,"file":"assessRisk.js","sourceRoot":"","sources":["../../src/tools/assessRisk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assessRisk.js","sourceRoot":"","sources":["../../src/tools/assessRisk.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,15 @@ import { z } from "zod";
2
2
  export declare const checkAllowanceSchema: z.ZodObject<{
3
3
  walletAddress: z.ZodString;
4
4
  token: z.ZodEnum<["USDC", "USDT"]>;
5
+ amount: z.ZodOptional<z.ZodString>;
5
6
  }, "strip", z.ZodTypeAny, {
6
7
  token: "USDC" | "USDT";
7
8
  walletAddress: string;
9
+ amount?: string | undefined;
8
10
  }, {
9
11
  token: "USDC" | "USDT";
10
12
  walletAddress: string;
13
+ amount?: string | undefined;
11
14
  }>;
12
15
  export type CheckAllowanceInput = z.input<typeof checkAllowanceSchema>;
13
16
  export declare const checkAllowanceTool: {
@@ -16,15 +19,18 @@ export declare const checkAllowanceTool: {
16
19
  inputSchema: z.ZodObject<{
17
20
  walletAddress: z.ZodString;
18
21
  token: z.ZodEnum<["USDC", "USDT"]>;
22
+ amount: z.ZodOptional<z.ZodString>;
19
23
  }, "strip", z.ZodTypeAny, {
20
24
  token: "USDC" | "USDT";
21
25
  walletAddress: string;
26
+ amount?: string | undefined;
22
27
  }, {
23
28
  token: "USDC" | "USDT";
24
29
  walletAddress: string;
30
+ amount?: string | undefined;
25
31
  }>;
26
32
  };
27
- export declare function handleCheckAllowance(raw: CheckAllowanceInput): Promise<{
33
+ export declare function handleCheckAllowance(raw: CheckAllowanceInput): Promise<import("../lib/toolResponse.js").ToolSuccess<{
28
34
  token: "USDC" | "USDT";
29
35
  tokenAddress: "0xE7E84B8B4f39C507499c40B4ac199B050e2882d5" | "0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8";
30
36
  walletAddress: string;
@@ -33,5 +39,6 @@ export declare function handleCheckAllowance(raw: CheckAllowanceInput): Promise<
33
39
  allowanceRaw: string;
34
40
  isApproved: boolean;
35
41
  needsApproval: boolean;
36
- }>;
42
+ approvalNote: string;
43
+ }>>;
37
44
  //# sourceMappingURL=checkAllowance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkAllowance.d.ts","sourceRoot":"","sources":["../../src/tools/checkAllowance.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAK9B,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,mBAAmB;;;;;;;;;GA6BlE"}
1
+ {"version":3,"file":"checkAllowance.d.ts","sourceRoot":"","sources":["../../src/tools/checkAllowance.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;CAK9B,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,mBAAmB;;;;;;;;;;IAyClE"}
@@ -4,10 +4,12 @@
4
4
  import { z } from "zod";
5
5
  import { publicClient } from "../lib/pharosClient.js";
6
6
  import { DODO_APPROVE_ADDRESS, USDC_ADDRESS, USDT_ADDRESS, ERC20_ABI, } from "../lib/constants.js";
7
- import { formatUnits } from "viem";
7
+ import { formatUnits, parseUnits } from "viem";
8
+ import { ok } from "../lib/toolResponse.js";
8
9
  export const checkAllowanceSchema = z.object({
9
10
  walletAddress: z.string().describe("Wallet address to check allowance for"),
10
11
  token: z.enum(["USDC", "USDT"]).describe("ERC-20 token to check"),
12
+ amount: z.string().optional().describe("Human-readable swap/transfer amount to check against. When provided, needsApproval is exact (allowance < amount). When omitted, only checks allowance > 0."),
11
13
  });
12
14
  export const checkAllowanceTool = {
13
15
  name: "check_allowance",
@@ -26,10 +28,21 @@ export async function handleCheckAllowance(raw) {
26
28
  args: [walletAddr, DODO_APPROVE_ADDRESS],
27
29
  }));
28
30
  const allowanceFormatted = formatUnits(allowanceRaw, decimals);
29
- // Consider "approved" if allowance is at least 1,000,000 tokens (typical max approval)
30
- const isApproved = allowanceRaw > 0n;
31
- const needsApproval = !isApproved;
32
- return {
31
+ let isApproved;
32
+ let needsApproval;
33
+ let approvalNote;
34
+ if (input.amount !== undefined) {
35
+ const requiredWei = parseUnits(input.amount, decimals);
36
+ isApproved = allowanceRaw >= requiredWei;
37
+ needsApproval = !isApproved;
38
+ approvalNote = `Amount-aware: allowance ${allowanceFormatted} vs required ${input.amount}`;
39
+ }
40
+ else {
41
+ isApproved = allowanceRaw > 0n;
42
+ needsApproval = !isApproved;
43
+ approvalNote = "Heuristic (no amount provided): any nonzero allowance counts as approved. Pass 'amount' for an exact check.";
44
+ }
45
+ return ok({
33
46
  token: input.token,
34
47
  tokenAddress,
35
48
  walletAddress: input.walletAddress,
@@ -38,6 +51,7 @@ export async function handleCheckAllowance(raw) {
38
51
  allowanceRaw: allowanceRaw.toString(),
39
52
  isApproved,
40
53
  needsApproval,
41
- };
54
+ approvalNote,
55
+ });
42
56
  }
43
57
  //# sourceMappingURL=checkAllowance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkAllowance.js","sourceRoot":"","sources":["../../src/tools/checkAllowance.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0DAA0D;AAC1D,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAClE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,mIAAmI;IACrI,WAAW,EAAE,oBAAoB;CAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAwB;IACjE,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,aAA8B,CAAC;IACxD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACpD,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,CAAC,UAAU,EAAE,oBAAoB,CAAC;KACzC,CAAC,CAAW,CAAC;IAEd,MAAM,kBAAkB,GAAG,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAE/D,uFAAuF;IACvF,MAAM,UAAU,GAAG,YAAY,GAAG,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC;IAElC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY;QACZ,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,oBAAoB;QAC7B,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;QACrC,UAAU;QACV,aAAa;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"checkAllowance.js","sourceRoot":"","sources":["../../src/tools/checkAllowance.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0DAA0D;AAC1D,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAQ,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4JAA4J,CAAC;CACrM,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,mIAAmI;IACrI,WAAW,EAAE,oBAAoB;CAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAwB;IACjE,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,aAA8B,CAAC;IACxD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACpD,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,CAAC,UAAU,EAAE,oBAAoB,CAAC;KACzC,CAAC,CAAW,CAAC;IAEd,MAAM,kBAAkB,GAAG,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAE/D,IAAI,UAAmB,CAAC;IACxB,IAAI,aAAsB,CAAC;IAC3B,IAAI,YAAoB,CAAC;IAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,UAAU,GAAG,YAAY,IAAI,WAAW,CAAC;QACzC,aAAa,GAAG,CAAC,UAAU,CAAC;QAC5B,YAAY,GAAG,2BAA2B,kBAAkB,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,aAAa,GAAG,CAAC,UAAU,CAAC;QAC5B,YAAY,GAAG,6GAA6G,CAAC;IAC/H,CAAC;IAED,OAAO,EAAE,CAAC;QACR,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY;QACZ,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,oBAAoB;QAC7B,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;QACrC,UAAU;QACV,aAAa;QACb,YAAY;KACb,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkTokenSecurity.d.ts","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE/E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAKlC,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;IAqF1E"}
1
+ {"version":3,"file":"checkTokenSecurity.d.ts","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE/E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAKlC,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;IAkG1E"}
@@ -22,6 +22,13 @@ export async function handleCheckTokenSecurity(raw) {
22
22
  if (!isAddress(address)) {
23
23
  return fail("INVALID_TOKEN_ADDRESS", `Invalid token address: ${input.tokenAddress}`, false, "check_token_security");
24
24
  }
25
+ // GoPlus does not index Pharos Atlantic Testnet (chain 688689). Return a clear diagnostic
26
+ // rather than a confusing empty result from the API.
27
+ if (chainId === CHAIN_ID) {
28
+ return fail("CHAIN_NOT_SUPPORTED_BY_GOPLUS", `GoPlus Security API does not support Pharos Atlantic Testnet (chain ${CHAIN_ID}). ` +
29
+ "Token security data is unavailable for this chain. Use token_registry_status to check " +
30
+ "whether a token address is canonical, custom, or unknown on Pharos.", false, "check_token_security");
31
+ }
25
32
  const url = `https://api.gopluslabs.io/api/v1/token_security/${chainId}?contract_addresses=${address}`;
26
33
  try {
27
34
  const res = await fetchWithTimeoutAndRetry(url, { timeoutMs: 10_000, retries: 2, retryDelayMs: 300 });