arc402-cli 0.2.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 (308) hide show
  1. package/README.md +245 -0
  2. package/dist/abis.d.ts +19 -0
  3. package/dist/abis.d.ts.map +1 -0
  4. package/dist/abis.js +177 -0
  5. package/dist/abis.js.map +1 -0
  6. package/dist/bundler.d.ts +65 -0
  7. package/dist/bundler.d.ts.map +1 -0
  8. package/dist/bundler.js +181 -0
  9. package/dist/bundler.js.map +1 -0
  10. package/dist/client.d.ts +14 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +24 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coinbase-smart-wallet.d.ts +28 -0
  15. package/dist/coinbase-smart-wallet.d.ts.map +1 -0
  16. package/dist/coinbase-smart-wallet.js +38 -0
  17. package/dist/coinbase-smart-wallet.js.map +1 -0
  18. package/dist/commands/accept.d.ts +3 -0
  19. package/dist/commands/accept.d.ts.map +1 -0
  20. package/dist/commands/accept.js +26 -0
  21. package/dist/commands/accept.js.map +1 -0
  22. package/dist/commands/agent-handshake.d.ts +3 -0
  23. package/dist/commands/agent-handshake.d.ts.map +1 -0
  24. package/dist/commands/agent-handshake.js +61 -0
  25. package/dist/commands/agent-handshake.js.map +1 -0
  26. package/dist/commands/agent.d.ts +3 -0
  27. package/dist/commands/agent.d.ts.map +1 -0
  28. package/dist/commands/agent.js +417 -0
  29. package/dist/commands/agent.js.map +1 -0
  30. package/dist/commands/agreements.d.ts +3 -0
  31. package/dist/commands/agreements.d.ts.map +1 -0
  32. package/dist/commands/agreements.js +344 -0
  33. package/dist/commands/agreements.js.map +1 -0
  34. package/dist/commands/arbitrator.d.ts +3 -0
  35. package/dist/commands/arbitrator.d.ts.map +1 -0
  36. package/dist/commands/arbitrator.js +157 -0
  37. package/dist/commands/arbitrator.js.map +1 -0
  38. package/dist/commands/arena-handshake.d.ts +3 -0
  39. package/dist/commands/arena-handshake.d.ts.map +1 -0
  40. package/dist/commands/arena-handshake.js +187 -0
  41. package/dist/commands/arena-handshake.js.map +1 -0
  42. package/dist/commands/cancel.d.ts +3 -0
  43. package/dist/commands/cancel.d.ts.map +1 -0
  44. package/dist/commands/cancel.js +30 -0
  45. package/dist/commands/cancel.js.map +1 -0
  46. package/dist/commands/channel.d.ts +3 -0
  47. package/dist/commands/channel.d.ts.map +1 -0
  48. package/dist/commands/channel.js +238 -0
  49. package/dist/commands/channel.js.map +1 -0
  50. package/dist/commands/coldstart.d.ts +3 -0
  51. package/dist/commands/coldstart.d.ts.map +1 -0
  52. package/dist/commands/coldstart.js +148 -0
  53. package/dist/commands/coldstart.js.map +1 -0
  54. package/dist/commands/config.d.ts +3 -0
  55. package/dist/commands/config.d.ts.map +1 -0
  56. package/dist/commands/config.js +40 -0
  57. package/dist/commands/config.js.map +1 -0
  58. package/dist/commands/contract-interaction.d.ts +3 -0
  59. package/dist/commands/contract-interaction.d.ts.map +1 -0
  60. package/dist/commands/contract-interaction.js +165 -0
  61. package/dist/commands/contract-interaction.js.map +1 -0
  62. package/dist/commands/daemon.d.ts +3 -0
  63. package/dist/commands/daemon.d.ts.map +1 -0
  64. package/dist/commands/daemon.js +891 -0
  65. package/dist/commands/daemon.js.map +1 -0
  66. package/dist/commands/deliver.d.ts +3 -0
  67. package/dist/commands/deliver.d.ts.map +1 -0
  68. package/dist/commands/deliver.js +156 -0
  69. package/dist/commands/deliver.js.map +1 -0
  70. package/dist/commands/discover.d.ts +3 -0
  71. package/dist/commands/discover.d.ts.map +1 -0
  72. package/dist/commands/discover.js +224 -0
  73. package/dist/commands/discover.js.map +1 -0
  74. package/dist/commands/dispute.d.ts +3 -0
  75. package/dist/commands/dispute.d.ts.map +1 -0
  76. package/dist/commands/dispute.js +348 -0
  77. package/dist/commands/dispute.js.map +1 -0
  78. package/dist/commands/endpoint.d.ts +3 -0
  79. package/dist/commands/endpoint.d.ts.map +1 -0
  80. package/dist/commands/endpoint.js +604 -0
  81. package/dist/commands/endpoint.js.map +1 -0
  82. package/dist/commands/hire.d.ts +3 -0
  83. package/dist/commands/hire.d.ts.map +1 -0
  84. package/dist/commands/hire.js +189 -0
  85. package/dist/commands/hire.js.map +1 -0
  86. package/dist/commands/migrate.d.ts +3 -0
  87. package/dist/commands/migrate.d.ts.map +1 -0
  88. package/dist/commands/migrate.js +163 -0
  89. package/dist/commands/migrate.js.map +1 -0
  90. package/dist/commands/negotiate.d.ts +3 -0
  91. package/dist/commands/negotiate.d.ts.map +1 -0
  92. package/dist/commands/negotiate.js +247 -0
  93. package/dist/commands/negotiate.js.map +1 -0
  94. package/dist/commands/openshell.d.ts +3 -0
  95. package/dist/commands/openshell.d.ts.map +1 -0
  96. package/dist/commands/openshell.js +952 -0
  97. package/dist/commands/openshell.js.map +1 -0
  98. package/dist/commands/owner.d.ts +3 -0
  99. package/dist/commands/owner.d.ts.map +1 -0
  100. package/dist/commands/owner.js +32 -0
  101. package/dist/commands/owner.js.map +1 -0
  102. package/dist/commands/policy.d.ts +4 -0
  103. package/dist/commands/policy.d.ts.map +1 -0
  104. package/dist/commands/policy.js +248 -0
  105. package/dist/commands/policy.js.map +1 -0
  106. package/dist/commands/relay.d.ts +3 -0
  107. package/dist/commands/relay.d.ts.map +1 -0
  108. package/dist/commands/relay.js +279 -0
  109. package/dist/commands/relay.js.map +1 -0
  110. package/dist/commands/remediate.d.ts +3 -0
  111. package/dist/commands/remediate.d.ts.map +1 -0
  112. package/dist/commands/remediate.js +42 -0
  113. package/dist/commands/remediate.js.map +1 -0
  114. package/dist/commands/reputation.d.ts +4 -0
  115. package/dist/commands/reputation.d.ts.map +1 -0
  116. package/dist/commands/reputation.js +72 -0
  117. package/dist/commands/reputation.js.map +1 -0
  118. package/dist/commands/setup.d.ts +3 -0
  119. package/dist/commands/setup.d.ts.map +1 -0
  120. package/dist/commands/setup.js +332 -0
  121. package/dist/commands/setup.js.map +1 -0
  122. package/dist/commands/trust.d.ts +3 -0
  123. package/dist/commands/trust.d.ts.map +1 -0
  124. package/dist/commands/trust.js +23 -0
  125. package/dist/commands/trust.js.map +1 -0
  126. package/dist/commands/verify.d.ts +3 -0
  127. package/dist/commands/verify.d.ts.map +1 -0
  128. package/dist/commands/verify.js +88 -0
  129. package/dist/commands/verify.js.map +1 -0
  130. package/dist/commands/wallet.d.ts +3 -0
  131. package/dist/commands/wallet.d.ts.map +1 -0
  132. package/dist/commands/wallet.js +2520 -0
  133. package/dist/commands/wallet.js.map +1 -0
  134. package/dist/commands/watchtower.d.ts +3 -0
  135. package/dist/commands/watchtower.d.ts.map +1 -0
  136. package/dist/commands/watchtower.js +238 -0
  137. package/dist/commands/watchtower.js.map +1 -0
  138. package/dist/commands/workroom.d.ts +3 -0
  139. package/dist/commands/workroom.d.ts.map +1 -0
  140. package/dist/commands/workroom.js +855 -0
  141. package/dist/commands/workroom.js.map +1 -0
  142. package/dist/config.d.ts +62 -0
  143. package/dist/config.d.ts.map +1 -0
  144. package/dist/config.js +141 -0
  145. package/dist/config.js.map +1 -0
  146. package/dist/daemon/config.d.ts +74 -0
  147. package/dist/daemon/config.d.ts.map +1 -0
  148. package/dist/daemon/config.js +271 -0
  149. package/dist/daemon/config.js.map +1 -0
  150. package/dist/daemon/hire-listener.d.ts +31 -0
  151. package/dist/daemon/hire-listener.d.ts.map +1 -0
  152. package/dist/daemon/hire-listener.js +207 -0
  153. package/dist/daemon/hire-listener.js.map +1 -0
  154. package/dist/daemon/index.d.ts +29 -0
  155. package/dist/daemon/index.d.ts.map +1 -0
  156. package/dist/daemon/index.js +535 -0
  157. package/dist/daemon/index.js.map +1 -0
  158. package/dist/daemon/job-lifecycle.d.ts +62 -0
  159. package/dist/daemon/job-lifecycle.d.ts.map +1 -0
  160. package/dist/daemon/job-lifecycle.js +201 -0
  161. package/dist/daemon/job-lifecycle.js.map +1 -0
  162. package/dist/daemon/notify.d.ts +22 -0
  163. package/dist/daemon/notify.d.ts.map +1 -0
  164. package/dist/daemon/notify.js +148 -0
  165. package/dist/daemon/notify.js.map +1 -0
  166. package/dist/daemon/token-metering.d.ts +42 -0
  167. package/dist/daemon/token-metering.d.ts.map +1 -0
  168. package/dist/daemon/token-metering.js +178 -0
  169. package/dist/daemon/token-metering.js.map +1 -0
  170. package/dist/daemon/userops.d.ts +21 -0
  171. package/dist/daemon/userops.d.ts.map +1 -0
  172. package/dist/daemon/userops.js +88 -0
  173. package/dist/daemon/userops.js.map +1 -0
  174. package/dist/daemon/wallet-monitor.d.ts +16 -0
  175. package/dist/daemon/wallet-monitor.d.ts.map +1 -0
  176. package/dist/daemon/wallet-monitor.js +57 -0
  177. package/dist/daemon/wallet-monitor.js.map +1 -0
  178. package/dist/drain-v4.d.ts +2 -0
  179. package/dist/drain-v4.d.ts.map +1 -0
  180. package/dist/drain-v4.js +167 -0
  181. package/dist/drain-v4.js.map +1 -0
  182. package/dist/endpoint-config.d.ts +36 -0
  183. package/dist/endpoint-config.d.ts.map +1 -0
  184. package/dist/endpoint-config.js +96 -0
  185. package/dist/endpoint-config.js.map +1 -0
  186. package/dist/index.d.ts +3 -0
  187. package/dist/index.d.ts.map +1 -0
  188. package/dist/index.js +79 -0
  189. package/dist/index.js.map +1 -0
  190. package/dist/openshell-runtime.d.ts +55 -0
  191. package/dist/openshell-runtime.d.ts.map +1 -0
  192. package/dist/openshell-runtime.js +268 -0
  193. package/dist/openshell-runtime.js.map +1 -0
  194. package/dist/signing.d.ts +2 -0
  195. package/dist/signing.d.ts.map +1 -0
  196. package/dist/signing.js +23 -0
  197. package/dist/signing.js.map +1 -0
  198. package/dist/telegram-notify.d.ts +23 -0
  199. package/dist/telegram-notify.d.ts.map +1 -0
  200. package/dist/telegram-notify.js +106 -0
  201. package/dist/telegram-notify.js.map +1 -0
  202. package/dist/ui/banner.d.ts +7 -0
  203. package/dist/ui/banner.d.ts.map +1 -0
  204. package/dist/ui/banner.js +37 -0
  205. package/dist/ui/banner.js.map +1 -0
  206. package/dist/ui/colors.d.ts +14 -0
  207. package/dist/ui/colors.d.ts.map +1 -0
  208. package/dist/ui/colors.js +29 -0
  209. package/dist/ui/colors.js.map +1 -0
  210. package/dist/ui/format.d.ts +26 -0
  211. package/dist/ui/format.d.ts.map +1 -0
  212. package/dist/ui/format.js +77 -0
  213. package/dist/ui/format.js.map +1 -0
  214. package/dist/ui/spinner.d.ts +8 -0
  215. package/dist/ui/spinner.d.ts.map +1 -0
  216. package/dist/ui/spinner.js +43 -0
  217. package/dist/ui/spinner.js.map +1 -0
  218. package/dist/utils/format.d.ts +10 -0
  219. package/dist/utils/format.d.ts.map +1 -0
  220. package/dist/utils/format.js +61 -0
  221. package/dist/utils/format.js.map +1 -0
  222. package/dist/utils/hash.d.ts +3 -0
  223. package/dist/utils/hash.d.ts.map +1 -0
  224. package/dist/utils/hash.js +43 -0
  225. package/dist/utils/hash.js.map +1 -0
  226. package/dist/utils/time.d.ts +3 -0
  227. package/dist/utils/time.d.ts.map +1 -0
  228. package/dist/utils/time.js +21 -0
  229. package/dist/utils/time.js.map +1 -0
  230. package/dist/wallet-router.d.ts +25 -0
  231. package/dist/wallet-router.d.ts.map +1 -0
  232. package/dist/wallet-router.js +153 -0
  233. package/dist/wallet-router.js.map +1 -0
  234. package/dist/walletconnect-session.d.ts +12 -0
  235. package/dist/walletconnect-session.d.ts.map +1 -0
  236. package/dist/walletconnect-session.js +26 -0
  237. package/dist/walletconnect-session.js.map +1 -0
  238. package/dist/walletconnect.d.ts +46 -0
  239. package/dist/walletconnect.d.ts.map +1 -0
  240. package/dist/walletconnect.js +267 -0
  241. package/dist/walletconnect.js.map +1 -0
  242. package/package.json +38 -0
  243. package/scripts/authorize-machine-key.ts +43 -0
  244. package/scripts/drain-wallet.ts +149 -0
  245. package/scripts/execute-spend-only.ts +81 -0
  246. package/scripts/register-agent-userop.ts +186 -0
  247. package/src/abis.ts +187 -0
  248. package/src/bundler.ts +235 -0
  249. package/src/client.ts +34 -0
  250. package/src/coinbase-smart-wallet.ts +51 -0
  251. package/src/commands/accept.ts +25 -0
  252. package/src/commands/agent-handshake.ts +67 -0
  253. package/src/commands/agent.ts +458 -0
  254. package/src/commands/agreements.ts +324 -0
  255. package/src/commands/arbitrator.ts +129 -0
  256. package/src/commands/arena-handshake.ts +217 -0
  257. package/src/commands/cancel.ts +26 -0
  258. package/src/commands/channel.ts +208 -0
  259. package/src/commands/coldstart.ts +156 -0
  260. package/src/commands/config.ts +35 -0
  261. package/src/commands/contract-interaction.ts +166 -0
  262. package/src/commands/daemon.ts +971 -0
  263. package/src/commands/deliver.ts +116 -0
  264. package/src/commands/discover.ts +295 -0
  265. package/src/commands/dispute.ts +373 -0
  266. package/src/commands/endpoint.ts +619 -0
  267. package/src/commands/hire.ts +200 -0
  268. package/src/commands/migrate.ts +175 -0
  269. package/src/commands/negotiate.ts +270 -0
  270. package/src/commands/openshell.ts +1053 -0
  271. package/src/commands/owner.ts +30 -0
  272. package/src/commands/policy.ts +252 -0
  273. package/src/commands/relay.ts +272 -0
  274. package/src/commands/remediate.ts +22 -0
  275. package/src/commands/reputation.ts +71 -0
  276. package/src/commands/setup.ts +343 -0
  277. package/src/commands/trust.ts +15 -0
  278. package/src/commands/verify.ts +88 -0
  279. package/src/commands/wallet.ts +2892 -0
  280. package/src/commands/watchtower.ts +232 -0
  281. package/src/commands/workroom.ts +889 -0
  282. package/src/config.ts +153 -0
  283. package/src/daemon/config.ts +308 -0
  284. package/src/daemon/hire-listener.ts +226 -0
  285. package/src/daemon/index.ts +609 -0
  286. package/src/daemon/job-lifecycle.ts +215 -0
  287. package/src/daemon/notify.ts +157 -0
  288. package/src/daemon/token-metering.ts +183 -0
  289. package/src/daemon/userops.ts +119 -0
  290. package/src/daemon/wallet-monitor.ts +90 -0
  291. package/src/drain-v4.ts +159 -0
  292. package/src/endpoint-config.ts +83 -0
  293. package/src/index.ts +75 -0
  294. package/src/openshell-runtime.ts +277 -0
  295. package/src/signing.ts +28 -0
  296. package/src/telegram-notify.ts +88 -0
  297. package/src/ui/banner.ts +41 -0
  298. package/src/ui/colors.ts +30 -0
  299. package/src/ui/format.ts +77 -0
  300. package/src/ui/spinner.ts +46 -0
  301. package/src/utils/format.ts +48 -0
  302. package/src/utils/hash.ts +5 -0
  303. package/src/utils/time.ts +15 -0
  304. package/src/wallet-router.ts +178 -0
  305. package/src/walletconnect-session.ts +27 -0
  306. package/src/walletconnect.ts +294 -0
  307. package/test/time.test.js +11 -0
  308. package/tsconfig.json +19 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Truncate an address to 0x1234...abcd format (first 6 + last 4 chars).
3
+ * Full address is preserved in --json output only.
4
+ */
5
+ export declare function formatAddress(address: string): string;
6
+ /**
7
+ * Format a single token value: "0.024 ETH" or "150 USDC"
8
+ */
9
+ export declare function formatValue(amount: string | number, token: string): string;
10
+ /**
11
+ * Format a combined ETH + token balance: "0.024 ETH · 150 USDC"
12
+ */
13
+ export declare function formatBalance(ethAmount: string | number, tokenAmount?: string | number, tokenSymbol?: string): string;
14
+ /**
15
+ * Format a unix timestamp (seconds) as a relative "time ago" string.
16
+ */
17
+ export declare function formatTimeAgo(timestampSeconds: number): string;
18
+ /**
19
+ * Format seconds-until-expiry as "61h 14m" or "2d 3h".
20
+ */
21
+ export declare function formatDuration(seconds: number): string;
22
+ /**
23
+ * Format a unix timestamp (seconds) as a locale date/time string.
24
+ */
25
+ export declare function formatTimestamp(timestampSeconds: number): string;
26
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD;AAID;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAMR;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAe9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAStD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ // ─── Address Formatting ───────────────────────────────────────────────────────
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.formatAddress = formatAddress;
5
+ exports.formatValue = formatValue;
6
+ exports.formatBalance = formatBalance;
7
+ exports.formatTimeAgo = formatTimeAgo;
8
+ exports.formatDuration = formatDuration;
9
+ exports.formatTimestamp = formatTimestamp;
10
+ /**
11
+ * Truncate an address to 0x1234...abcd format (first 6 + last 4 chars).
12
+ * Full address is preserved in --json output only.
13
+ */
14
+ function formatAddress(address) {
15
+ if (address.length <= 12)
16
+ return address;
17
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
18
+ }
19
+ // ─── Value Formatting ─────────────────────────────────────────────────────────
20
+ /**
21
+ * Format a single token value: "0.024 ETH" or "150 USDC"
22
+ */
23
+ function formatValue(amount, token) {
24
+ return `${amount} ${token}`;
25
+ }
26
+ /**
27
+ * Format a combined ETH + token balance: "0.024 ETH · 150 USDC"
28
+ */
29
+ function formatBalance(ethAmount, tokenAmount, tokenSymbol) {
30
+ const eth = `${ethAmount} ETH`;
31
+ if (tokenAmount !== undefined && tokenSymbol) {
32
+ return `${eth} · ${tokenAmount} ${tokenSymbol}`;
33
+ }
34
+ return eth;
35
+ }
36
+ // ─── Timestamp Formatting ─────────────────────────────────────────────────────
37
+ /**
38
+ * Format a unix timestamp (seconds) as a relative "time ago" string.
39
+ */
40
+ function formatTimeAgo(timestampSeconds) {
41
+ const now = Math.floor(Date.now() / 1000);
42
+ const delta = now - timestampSeconds;
43
+ if (delta < 60)
44
+ return "just now";
45
+ if (delta < 3600) {
46
+ const m = Math.floor(delta / 60);
47
+ return `${m}m ago`;
48
+ }
49
+ if (delta < 86400) {
50
+ const h = Math.floor(delta / 3600);
51
+ return `${h}h ago`;
52
+ }
53
+ const d = Math.floor(delta / 86400);
54
+ return `${d}d ago`;
55
+ }
56
+ /**
57
+ * Format seconds-until-expiry as "61h 14m" or "2d 3h".
58
+ */
59
+ function formatDuration(seconds) {
60
+ if (seconds <= 0)
61
+ return "expired";
62
+ const d = Math.floor(seconds / 86400);
63
+ const h = Math.floor((seconds % 86400) / 3600);
64
+ const m = Math.floor((seconds % 3600) / 60);
65
+ if (d > 0)
66
+ return h > 0 ? `${d}d ${h}h` : `${d}d`;
67
+ if (h > 0)
68
+ return m > 0 ? `${h}h ${m}m` : `${h}h`;
69
+ return `${m}m`;
70
+ }
71
+ /**
72
+ * Format a unix timestamp (seconds) as a locale date/time string.
73
+ */
74
+ function formatTimestamp(timestampSeconds) {
75
+ return new Date(timestampSeconds * 1000).toLocaleString();
76
+ }
77
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":";AAAA,iFAAiF;;AAMjF,sCAGC;AAOD,kCAEC;AAKD,sCAUC;AAOD,sCAeC;AAKD,wCASC;AAKD,0CAEC;AA1ED;;;GAGG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC;IACzC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,iFAAiF;AAEjF;;GAEG;AACH,SAAgB,WAAW,CAAC,MAAuB,EAAE,KAAa;IAChE,OAAO,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,SAA0B,EAC1B,WAA6B,EAC7B,WAAoB;IAEpB,MAAM,GAAG,GAAG,GAAG,SAAS,MAAM,CAAC;IAC/B,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,EAAE,CAAC;QAC7C,OAAO,GAAG,GAAG,MAAM,WAAW,IAAI,WAAW,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iFAAiF;AAEjF;;GAEG;AACH,SAAgB,aAAa,CAAC,gBAAwB;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,GAAG,GAAG,gBAAgB,CAAC;IAErC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,UAAU,CAAC;IAClC,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAe;IAC5C,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE5C,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAClD,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,gBAAwB;IACtD,OAAO,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ArcSpinner {
2
+ succeed(text?: string): void;
3
+ fail(text?: string): void;
4
+ update(text: string): void;
5
+ stop(): void;
6
+ }
7
+ export declare function startSpinner(text: string): ArcSpinner;
8
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CA8BrD"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startSpinner = startSpinner;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const SPINNER_FRAMES = {
10
+ interval: 120,
11
+ frames: ["◈ ", "◉ ", "◎ ", "◉ "],
12
+ };
13
+ function startSpinner(text) {
14
+ const instance = (0, ora_1.default)({
15
+ text,
16
+ spinner: SPINNER_FRAMES,
17
+ color: "cyan",
18
+ prefixText: " ",
19
+ }).start();
20
+ return {
21
+ succeed(msg) {
22
+ instance.stopAndPersist({
23
+ symbol: chalk_1.default.green("✓"),
24
+ text: msg ?? instance.text,
25
+ prefixText: " ",
26
+ });
27
+ },
28
+ fail(msg) {
29
+ instance.stopAndPersist({
30
+ symbol: chalk_1.default.red("✗"),
31
+ text: msg ?? instance.text,
32
+ prefixText: " ",
33
+ });
34
+ },
35
+ update(text) {
36
+ instance.text = text;
37
+ },
38
+ stop() {
39
+ instance.stop();
40
+ },
41
+ };
42
+ }
43
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":";;;;;AAeA,oCA8BC;AA7CD,8CAA+B;AAC/B,kDAA0B;AAE1B,MAAM,cAAc,GAAG;IACrB,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;CACjC,CAAC;AASF,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,QAAQ,GAAQ,IAAA,aAAG,EAAC;QACxB,IAAI;QACJ,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO;QACL,OAAO,CAAC,GAAY;YAClB,QAAQ,CAAC,cAAc,CAAC;gBACtB,MAAM,EAAE,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBACxB,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI;gBAC1B,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAY;YACf,QAAQ,CAAC,cAAc,CAAC;gBACtB,MAAM,EAAE,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBACtB,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI;gBAC1B,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAY;YACjB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI;YACF,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AgreementStatus, IdentityTier, ReputationSignalType } from "@arc402/sdk";
2
+ export declare const truncateAddress: (address: string) => string;
3
+ export declare const formatDate: (timestamp: number) => string;
4
+ export declare function getTrustTier(score: number): string;
5
+ export declare function agreementStatusLabel(status: AgreementStatus): string;
6
+ export declare function colourStatus(status: AgreementStatus): string;
7
+ export declare const identityTierLabel: (tier: IdentityTier) => string;
8
+ export declare const reputationSignalLabel: (signal: ReputationSignalType) => string;
9
+ export declare function printTable(head: string[], rows: (string | number)[][]): void;
10
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAElF,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,WAAqF,CAAC;AACrI,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,WAAgD,CAAC;AAE7F,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAEpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAmB5D;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,WAAiC,CAAC;AACtF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,oBAAoB,WAA8C,CAAC;AAEjH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,QAIrE"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.reputationSignalLabel = exports.identityTierLabel = exports.formatDate = exports.truncateAddress = void 0;
7
+ exports.getTrustTier = getTrustTier;
8
+ exports.agreementStatusLabel = agreementStatusLabel;
9
+ exports.colourStatus = colourStatus;
10
+ exports.printTable = printTable;
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const cli_table3_1 = __importDefault(require("cli-table3"));
13
+ const sdk_1 = require("@arc402/sdk");
14
+ const truncateAddress = (address) => address.length <= 12 ? address : `${address.slice(0, 6)}...${address.slice(-4)}`;
15
+ exports.truncateAddress = truncateAddress;
16
+ const formatDate = (timestamp) => new Date(timestamp * 1000).toLocaleString();
17
+ exports.formatDate = formatDate;
18
+ function getTrustTier(score) {
19
+ if (score >= 800)
20
+ return "Autonomous";
21
+ if (score >= 600)
22
+ return "Elevated";
23
+ if (score >= 300)
24
+ return "Standard";
25
+ if (score >= 100)
26
+ return "Restricted";
27
+ return "Probationary";
28
+ }
29
+ function agreementStatusLabel(status) {
30
+ return sdk_1.AgreementStatus[status] ?? "UNKNOWN";
31
+ }
32
+ function colourStatus(status) {
33
+ const label = agreementStatusLabel(status);
34
+ switch (status) {
35
+ case sdk_1.AgreementStatus.PROPOSED:
36
+ case sdk_1.AgreementStatus.REVISION_REQUESTED:
37
+ return chalk_1.default.yellow(label);
38
+ case sdk_1.AgreementStatus.ACCEPTED:
39
+ case sdk_1.AgreementStatus.REVISED:
40
+ case sdk_1.AgreementStatus.PENDING_VERIFICATION:
41
+ return chalk_1.default.blue(label);
42
+ case sdk_1.AgreementStatus.FULFILLED:
43
+ return chalk_1.default.green(label);
44
+ case sdk_1.AgreementStatus.DISPUTED:
45
+ case sdk_1.AgreementStatus.ESCALATED_TO_HUMAN:
46
+ case sdk_1.AgreementStatus.ESCALATED_TO_ARBITRATION:
47
+ return chalk_1.default.red(label);
48
+ default:
49
+ return chalk_1.default.gray(label);
50
+ }
51
+ }
52
+ const identityTierLabel = (tier) => sdk_1.IdentityTier[tier] ?? "NONE";
53
+ exports.identityTierLabel = identityTierLabel;
54
+ const reputationSignalLabel = (signal) => sdk_1.ReputationSignalType[signal] ?? "UNKNOWN";
55
+ exports.reputationSignalLabel = reputationSignalLabel;
56
+ function printTable(head, rows) {
57
+ const table = new cli_table3_1.default({ head: head.map((value) => chalk_1.default.cyan(value)), style: { head: [], border: [] } });
58
+ rows.forEach((row) => table.push(row));
59
+ console.log(table.toString());
60
+ }
61
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const hashFile: (filePath: string) => string;
2
+ export declare const hashString: (value: string) => string;
3
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,WAAgD,CAAC;AAC1F,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,WAAgD,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.hashString = exports.hashFile = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const ethers_1 = require("ethers");
39
+ const hashFile = (filePath) => ethers_1.ethers.keccak256(fs.readFileSync(filePath));
40
+ exports.hashFile = hashFile;
41
+ const hashString = (value) => ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(value));
42
+ exports.hashString = hashString;
43
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,mCAAgC;AAEzB,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,eAAM,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAA7E,QAAA,QAAQ,YAAqE;AACnF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,eAAM,CAAC,SAAS,CAAC,eAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAA5E,QAAA,UAAU,cAAkE"}
@@ -0,0 +1,3 @@
1
+ export declare function parseDuration(duration: string): number;
2
+ export declare function formatDeadline(deadline: number): string;
3
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMvD"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDuration = parseDuration;
4
+ exports.formatDeadline = formatDeadline;
5
+ function parseDuration(duration) {
6
+ const now = Math.floor(Date.now() / 1000);
7
+ const match = duration.match(/^(\d+)([hd])$/i);
8
+ if (!match)
9
+ throw new Error(`Invalid duration format: \"${duration}\". Use e.g. 2h, 24h, 7d`);
10
+ const value = Number(match[1]);
11
+ return now + (match[2].toLowerCase() === "d" ? value * 86400 : value * 3600);
12
+ }
13
+ function formatDeadline(deadline) {
14
+ const diff = deadline - Math.floor(Date.now() / 1000);
15
+ if (diff < 0)
16
+ return "EXPIRED";
17
+ const hours = Math.floor(diff / 3600);
18
+ const days = Math.floor(hours / 24);
19
+ return days > 0 ? `${days}d ${hours % 24}h remaining` : `${hours}h remaining`;
20
+ }
21
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":";;AAAA,sCAMC;AAED,wCAMC;AAdD,SAAgB,aAAa,CAAC,QAAgB;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,0BAA0B,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC;AAChF,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { ethers } from "ethers";
2
+ import { Arc402Config } from "./config";
3
+ /**
4
+ * Attempts to decode a known ARC402Wallet custom error from a thrown error.
5
+ * If a recognized error is found, prints a human-readable message and exits.
6
+ * Otherwise, rethrows the original error.
7
+ */
8
+ export declare function handleWalletError(e: unknown): never;
9
+ /**
10
+ * Decode a 4-byte ARC402Wallet custom error selector into a human-readable message.
11
+ * Returns null if the selector is not a known wallet error.
12
+ */
13
+ export declare function decodeWalletError(errorData: string): string | null;
14
+ export interface SenderInfo {
15
+ address: string;
16
+ useContract: boolean;
17
+ }
18
+ export declare function getEffectiveSender(config: Arc402Config): SenderInfo;
19
+ export declare function printSenderInfo(config: Arc402Config): void;
20
+ /**
21
+ * Route a write transaction through the ARC402Wallet's executeContractCall when deployed,
22
+ * otherwise encode calldata directly against the target contract using the provided ABI.
23
+ */
24
+ export declare function executeContractWriteViaWallet(walletContractAddress: string, signer: ethers.Wallet, targetAddress: string, contractAbi: readonly string[], functionName: string, args: unknown[], value?: bigint, approvalToken?: string, maxApprovalAmount?: bigint): Promise<ethers.ContractTransactionResponse>;
25
+ //# sourceMappingURL=wallet-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-router.d.ts","sourceRoot":"","sources":["../src/wallet-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8CxC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAyCnD;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAMnE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAS1D;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,qBAAqB,EAAE,MAAM,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,GAAE,MAAW,EAClB,aAAa,GAAE,MAA2B,EAC1C,iBAAiB,GAAE,MAAW,GAC7B,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAoB7C"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleWalletError = handleWalletError;
4
+ exports.decodeWalletError = decodeWalletError;
5
+ exports.getEffectiveSender = getEffectiveSender;
6
+ exports.printSenderInfo = printSenderInfo;
7
+ exports.executeContractWriteViaWallet = executeContractWriteViaWallet;
8
+ const ethers_1 = require("ethers");
9
+ const abis_1 = require("./abis");
10
+ // ─── ARC402Wallet custom error decoder ─────────────────────────────────────
11
+ const WALLET_CUSTOM_ERROR_IFACE = new ethers_1.ethers.Interface([
12
+ "error WVel()",
13
+ "error WCtx()",
14
+ "error WAtt()",
15
+ "error WAuth()",
16
+ "error WCall()",
17
+ "error WZero()",
18
+ "error WFrozen()",
19
+ "error WPending()",
20
+ "error WLock()",
21
+ ]);
22
+ const WALLET_ERROR_HELP = {
23
+ WVel: "Velocity limit breached. Your wallet has been automatically frozen as a security measure.\n" +
24
+ " To unfreeze: arc402 wallet unfreeze\n" +
25
+ " To prevent this: check your spending velocity limits with arc402 wallet policy status",
26
+ WCtx: "Context error: either a context is already open, or no context is open when one is required.\n" +
27
+ " Note: each context allows exactly one spend — a new context must be opened per payment.\n" +
28
+ " Check context state: arc402 wallet check-context\n" +
29
+ " Close stale context: arc402 wallet close-context",
30
+ WAtt: "Attestation invalid: not found, already consumed, expired, or parameters do not match.\n" +
31
+ " Each attestation can only be used once. Create a new attestation for each spend.",
32
+ WAuth: "Machine key not authorized on this wallet.\n" +
33
+ " Fix: arc402 wallet authorize-machine-key <your-machine-key-address>",
34
+ WCall: "External contract call failed. The target contract reverted. Check the target address and calldata.",
35
+ WZero: "Zero address not allowed for a required address parameter.",
36
+ WFrozen: "Wallet is frozen and cannot process transactions.\n" +
37
+ " To unfreeze: arc402 wallet unfreeze (owner WalletConnect required)",
38
+ WPending: "A registry upgrade is already pending. Cancel it first: arc402 wallet cancel-registry-upgrade",
39
+ WLock: "Registry upgrade timelock has not elapsed yet. Check: arc402 wallet execute-registry-upgrade",
40
+ };
41
+ /**
42
+ * Attempts to decode a known ARC402Wallet custom error from a thrown error.
43
+ * If a recognized error is found, prints a human-readable message and exits.
44
+ * Otherwise, rethrows the original error.
45
+ */
46
+ function handleWalletError(e) {
47
+ // Extract revert data from various ethers v6 error shapes
48
+ let errorData;
49
+ if (e && typeof e === "object") {
50
+ const err = e;
51
+ if (typeof err.data === "string") {
52
+ errorData = err.data;
53
+ }
54
+ else if (err.error && typeof err.error === "object") {
55
+ const inner = err.error;
56
+ if (typeof inner.data === "string")
57
+ errorData = inner.data;
58
+ }
59
+ // ethers v6 sometimes nests it in info.error.data
60
+ if (!errorData && err.info && typeof err.info === "object") {
61
+ const info = err.info;
62
+ if (info.error && typeof info.error === "object") {
63
+ const ie = info.error;
64
+ if (typeof ie.data === "string")
65
+ errorData = ie.data;
66
+ }
67
+ }
68
+ // Fallback: parse from error message string
69
+ if (!errorData && typeof err.message === "string") {
70
+ const m = err.message.match(/"data"\s*:\s*"(0x[0-9a-fA-F]+)"/);
71
+ if (m)
72
+ errorData = m[1];
73
+ }
74
+ }
75
+ if (errorData && errorData.length >= 10) {
76
+ try {
77
+ const decoded = WALLET_CUSTOM_ERROR_IFACE.parseError(errorData);
78
+ if (decoded) {
79
+ const help = WALLET_ERROR_HELP[decoded.name];
80
+ if (help) {
81
+ console.error(`\nError: ${decoded.name}()`);
82
+ console.error(` ${help.split("\n").join("\n ")}`);
83
+ process.exit(1);
84
+ }
85
+ }
86
+ }
87
+ catch { /* decoding failed — fall through to rethrow */ }
88
+ }
89
+ throw e;
90
+ }
91
+ // ─── Selector-based error decoder (J1-06) ────────────────────────────────────
92
+ //
93
+ // Maps known 4-byte selectors to human-readable messages for use in external error handling.
94
+ const WALLET_ERROR_SELECTOR_MAP = {
95
+ "0x13af807f": "Context error: either a context is already open, or no context is open. Check with `arc402 wallet check-context`",
96
+ "0x88529d53": "Attestation error: attestation not found, already used, expired, or wrong parameters",
97
+ "0xd6636aaa": "Velocity limit breached — wallet is now frozen. Run `arc402 wallet unfreeze` to recover",
98
+ "0xbc34a075": "Unauthorized: this operation requires owner or machine key authorization",
99
+ "0xf5138cb6": "Contract call failed: the target contract reverted. Check that the target contract is working correctly",
100
+ "0xd92e233d": "Zero address error: a required address parameter was address(0)",
101
+ "0xb808d662": "Wallet is frozen. Run `arc402 wallet unfreeze` to recover (requires owner)",
102
+ };
103
+ /**
104
+ * Decode a 4-byte ARC402Wallet custom error selector into a human-readable message.
105
+ * Returns null if the selector is not a known wallet error.
106
+ */
107
+ function decodeWalletError(errorData) {
108
+ if (!errorData || errorData.length < 10)
109
+ return null;
110
+ const selector = errorData.slice(0, 10).toLowerCase();
111
+ return WALLET_ERROR_SELECTOR_MAP[selector] ?? null;
112
+ }
113
+ function getEffectiveSender(config) {
114
+ if (config.walletContractAddress) {
115
+ return { address: config.walletContractAddress, useContract: true };
116
+ }
117
+ const wallet = new ethers_1.ethers.Wallet(config.privateKey);
118
+ return { address: wallet.address, useContract: false };
119
+ }
120
+ function printSenderInfo(config) {
121
+ if (config.walletContractAddress) {
122
+ console.log(`Using ARC402Wallet: ${config.walletContractAddress}`);
123
+ console.log(`Policy enforcement active — transaction subject to configured limits`);
124
+ }
125
+ else {
126
+ const wallet = new ethers_1.ethers.Wallet(config.privateKey);
127
+ console.log(`Using EOA wallet: ${wallet.address}`);
128
+ console.log(`Tip: run \`arc402 wallet deploy\` to enable spending limits and policy enforcement`);
129
+ }
130
+ }
131
+ /**
132
+ * Route a write transaction through the ARC402Wallet's executeContractCall when deployed,
133
+ * otherwise encode calldata directly against the target contract using the provided ABI.
134
+ */
135
+ async function executeContractWriteViaWallet(walletContractAddress, signer, targetAddress, contractAbi, functionName, args, value = 0n, approvalToken = ethers_1.ethers.ZeroAddress, maxApprovalAmount = 0n) {
136
+ const iface = new ethers_1.ethers.Interface(contractAbi);
137
+ const data = iface.encodeFunctionData(functionName, args);
138
+ const walletContract = new ethers_1.ethers.Contract(walletContractAddress, abis_1.ARC402_WALLET_EXECUTE_ABI, signer);
139
+ try {
140
+ return await walletContract.executeContractCall({
141
+ target: targetAddress,
142
+ data,
143
+ value,
144
+ minReturnValue: 0n,
145
+ maxApprovalAmount,
146
+ approvalToken,
147
+ });
148
+ }
149
+ catch (e) {
150
+ handleWalletError(e);
151
+ }
152
+ }
153
+ //# sourceMappingURL=wallet-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-router.js","sourceRoot":"","sources":["../src/wallet-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Arc402Config } from "./config";
2
+ export interface WCSessionData {
3
+ topic: string;
4
+ expiry: number;
5
+ account: string;
6
+ chainId: number;
7
+ }
8
+ /** Returns null if no session, expired, or wrong chainId. */
9
+ export declare function loadWCSession(config: Arc402Config, requiredChainId: number): WCSessionData | null;
10
+ export declare function saveWCSession(config: Arc402Config, session: WCSessionData): void;
11
+ export declare function clearWCSession(config: Arc402Config): void;
12
+ //# sourceMappingURL=walletconnect-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletconnect-session.d.ts","sourceRoot":"","sources":["../src/walletconnect-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAc,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMjG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAGhF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGzD"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadWCSession = loadWCSession;
4
+ exports.saveWCSession = saveWCSession;
5
+ exports.clearWCSession = clearWCSession;
6
+ const config_1 = require("./config");
7
+ /** Returns null if no session, expired, or wrong chainId. */
8
+ function loadWCSession(config, requiredChainId) {
9
+ if (!config.wcSession)
10
+ return null;
11
+ const now = Math.floor(Date.now() / 1000);
12
+ if (config.wcSession.expiry <= now)
13
+ return null;
14
+ if (config.wcSession.chainId !== requiredChainId)
15
+ return null;
16
+ return config.wcSession;
17
+ }
18
+ function saveWCSession(config, session) {
19
+ config.wcSession = session;
20
+ (0, config_1.saveConfig)(config);
21
+ }
22
+ function clearWCSession(config) {
23
+ delete config.wcSession;
24
+ (0, config_1.saveConfig)(config);
25
+ }
26
+ //# sourceMappingURL=walletconnect-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletconnect-session.js","sourceRoot":"","sources":["../src/walletconnect-session.ts"],"names":[],"mappings":";;AAUA,sCAMC;AAED,sCAGC;AAED,wCAGC;AA1BD,qCAAoD;AASpD,6DAA6D;AAC7D,SAAgB,aAAa,CAAC,MAAoB,EAAE,eAAuB;IACzE,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,MAAM,CAAC,SAA0B,CAAC;AAC3C,CAAC;AAED,SAAgB,aAAa,CAAC,MAAoB,EAAE,OAAsB;IACxE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,SAAS,CAAC;IACxB,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { SignClient } from "@walletconnect/sign-client";
2
+ import { Arc402Config } from "./config";
3
+ export type TelegramOpts = {
4
+ botToken: string;
5
+ chatId: string;
6
+ threadId?: number;
7
+ };
8
+ type SignClientT = Awaited<ReturnType<typeof SignClient.init>>;
9
+ type WCSession = ReturnType<SignClientT["session"]["get"]>;
10
+ /**
11
+ * Step 1 of the two-step flow: connect the phone wallet (or resume a valid session).
12
+ * On fresh connect, shows deep links + QR and waits for WC approval.
13
+ * Saves session to config after a successful fresh pairing.
14
+ */
15
+ export declare function connectPhoneWallet(projectId: string, chainId: number, config: Arc402Config, opts?: {
16
+ telegramOpts?: TelegramOpts;
17
+ prompt?: string;
18
+ hardware?: boolean;
19
+ }): Promise<{
20
+ client: SignClientT;
21
+ session: WCSession;
22
+ account: string;
23
+ }>;
24
+ /**
25
+ * Step 2 of the two-step flow: send a transaction with an established session.
26
+ * Returns the transaction hash.
27
+ */
28
+ export declare function sendTransactionWithSession(client: SignClientT, session: WCSession, account: string, chainId: number, tx: {
29
+ to: string;
30
+ data: string;
31
+ value?: string;
32
+ }): Promise<string>;
33
+ /**
34
+ * Convenience wrapper: connect + send in one call.
35
+ * Used by commands that haven't been split into two steps (e.g. policy set-limit).
36
+ */
37
+ export declare function requestPhoneWalletSignature(projectId: string, chainId: number, buildTx: (account: string) => {
38
+ to: string;
39
+ data: string;
40
+ value?: string;
41
+ }, prompt: string, telegramOpts?: TelegramOpts, config?: Arc402Config): Promise<{
42
+ txHash: string;
43
+ account: string;
44
+ }>;
45
+ export {};
46
+ //# sourceMappingURL=walletconnect.d.ts.map