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,181 @@
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.PaymasterClient = exports.BundlerClient = exports.DEFAULT_BUNDLER_URL = exports.DEFAULT_ENTRY_POINT = void 0;
37
+ exports.buildUserOp = buildUserOp;
38
+ exports.buildSponsoredUserOp = buildSponsoredUserOp;
39
+ const ethers_1 = require("ethers");
40
+ const crypto_1 = require("crypto");
41
+ exports.DEFAULT_ENTRY_POINT = "0x0000000071727De22E5E9d8BAf0edAc6f37da032";
42
+ exports.DEFAULT_BUNDLER_URL = "https://api.pimlico.io/v2/base/rpc";
43
+ class BundlerClient {
44
+ constructor(bundlerUrl, entryPointAddress, chainId) {
45
+ this.bundlerUrl = bundlerUrl;
46
+ this.entryPointAddress = entryPointAddress;
47
+ this.chainId = chainId;
48
+ }
49
+ async rpc(method, params) {
50
+ const response = await fetch(this.bundlerUrl, {
51
+ method: "POST",
52
+ headers: { "Content-Type": "application/json" },
53
+ body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
54
+ });
55
+ if (!response.ok) {
56
+ throw new Error(`Bundler HTTP ${response.status}: ${response.statusText}`);
57
+ }
58
+ const json = (await response.json());
59
+ if (json.error) {
60
+ throw new Error(`Bundler RPC error [${json.error.code}]: ${json.error.message}`);
61
+ }
62
+ return json.result;
63
+ }
64
+ async sendUserOperation(userOp) {
65
+ const hash = await this.rpc("eth_sendUserOperation", [userOp, this.entryPointAddress]);
66
+ return hash;
67
+ }
68
+ async getUserOperationReceipt(userOpHash) {
69
+ const POLL_INTERVAL_MS = 2000;
70
+ const MAX_ATTEMPTS = 30;
71
+ for (let i = 0; i < MAX_ATTEMPTS; i++) {
72
+ const receipt = await this.rpc("eth_getUserOperationReceipt", [userOpHash]);
73
+ if (receipt !== null && receipt !== undefined) {
74
+ return receipt;
75
+ }
76
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
77
+ }
78
+ throw new Error(`UserOperation ${userOpHash} not confirmed after ${(MAX_ATTEMPTS * POLL_INTERVAL_MS) / 1000}s`);
79
+ }
80
+ async estimateUserOperationGas(userOp) {
81
+ const estimate = await this.rpc("eth_estimateUserOperationGas", [
82
+ userOp,
83
+ this.entryPointAddress,
84
+ ]);
85
+ return estimate;
86
+ }
87
+ }
88
+ exports.BundlerClient = BundlerClient;
89
+ // ─── PaymasterClient ──────────────────────────────────────────────────────────
90
+ class PaymasterClient {
91
+ constructor(paymasterUrl, cdpKeyName, cdpPrivateKey) {
92
+ this.paymasterUrl = paymasterUrl;
93
+ this.cdpKeyName = cdpKeyName;
94
+ this.cdpPrivateKey = cdpPrivateKey;
95
+ }
96
+ async buildJwt() {
97
+ if (!this.cdpKeyName || !this.cdpPrivateKey)
98
+ return null;
99
+ const { SignJWT, importPKCS8 } = await Promise.resolve().then(() => __importStar(require("jose")));
100
+ // Convert SEC1 base64 DER or SEC1 PEM → PKCS8 PEM using Node's crypto module
101
+ let pkcs8Pem;
102
+ if (this.cdpPrivateKey.includes("-----BEGIN")) {
103
+ if (this.cdpPrivateKey.includes("EC PRIVATE KEY")) {
104
+ const key = (0, crypto_1.createPrivateKey)({ key: this.cdpPrivateKey, format: "pem", type: "sec1" });
105
+ pkcs8Pem = key.export({ format: "pem", type: "pkcs8" });
106
+ }
107
+ else {
108
+ pkcs8Pem = this.cdpPrivateKey;
109
+ }
110
+ }
111
+ else {
112
+ const der = Buffer.from(this.cdpPrivateKey, "base64");
113
+ const key = (0, crypto_1.createPrivateKey)({ key: der, format: "der", type: "sec1" });
114
+ pkcs8Pem = key.export({ format: "pem", type: "pkcs8" });
115
+ }
116
+ const privateKey = await importPKCS8(pkcs8Pem, "ES256");
117
+ const now = Math.floor(Date.now() / 1000);
118
+ return new SignJWT({ sub: this.cdpKeyName })
119
+ .setProtectedHeader({ alg: "ES256", kid: this.cdpKeyName })
120
+ .setIssuer(this.cdpKeyName)
121
+ .setNotBefore(now)
122
+ .setExpirationTime(now + 120)
123
+ .sign(privateKey);
124
+ }
125
+ async rpc(method, params) {
126
+ const jwt = await this.buildJwt();
127
+ const headers = { "Content-Type": "application/json" };
128
+ if (jwt)
129
+ headers["Authorization"] = `Bearer ${jwt}`;
130
+ const response = await fetch(this.paymasterUrl, {
131
+ method: "POST",
132
+ headers,
133
+ body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
134
+ });
135
+ if (!response.ok) {
136
+ throw new Error(`Paymaster HTTP ${response.status}: ${response.statusText}`);
137
+ }
138
+ const json = (await response.json());
139
+ if (json.error) {
140
+ throw new Error(`Paymaster RPC error [${json.error.code}]: ${json.error.message}`);
141
+ }
142
+ return json.result;
143
+ }
144
+ async sponsorUserOperation(userOp, entryPoint) {
145
+ const result = (await this.rpc("pm_sponsorUserOperation", [userOp, entryPoint, {}]));
146
+ return {
147
+ ...userOp,
148
+ paymaster: result.paymaster,
149
+ paymasterData: result.paymasterData,
150
+ paymasterVerificationGasLimit: result.paymasterVerificationGasLimit,
151
+ paymasterPostOpGasLimit: result.paymasterPostOpGasLimit,
152
+ ...(result.callGasLimit && { callGasLimit: result.callGasLimit }),
153
+ ...(result.verificationGasLimit && { verificationGasLimit: result.verificationGasLimit }),
154
+ ...(result.preVerificationGas && { preVerificationGas: result.preVerificationGas }),
155
+ };
156
+ }
157
+ }
158
+ exports.PaymasterClient = PaymasterClient;
159
+ // ─── buildUserOp / buildSponsoredUserOp ───────────────────────────────────────
160
+ async function buildUserOp(callData, sender, nonce, config) {
161
+ const provider = new ethers_1.ethers.JsonRpcProvider(config.rpcUrl);
162
+ const feeData = await provider.getFeeData();
163
+ const maxFeePerGas = feeData.maxFeePerGas ?? BigInt(1000000000);
164
+ const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? BigInt(100000000);
165
+ return {
166
+ sender,
167
+ nonce: ethers_1.ethers.toBeHex(nonce),
168
+ callData,
169
+ callGasLimit: ethers_1.ethers.toBeHex(300000),
170
+ verificationGasLimit: ethers_1.ethers.toBeHex(150000),
171
+ preVerificationGas: ethers_1.ethers.toBeHex(50000),
172
+ maxFeePerGas: ethers_1.ethers.toBeHex(maxFeePerGas),
173
+ maxPriorityFeePerGas: ethers_1.ethers.toBeHex(maxPriorityFeePerGas),
174
+ signature: "0x",
175
+ };
176
+ }
177
+ async function buildSponsoredUserOp(callData, sender, nonce, config, paymasterClient) {
178
+ const userOp = await buildUserOp(callData, sender, nonce, config);
179
+ return paymasterClient.sponsorUserOperation(userOp, exports.DEFAULT_ENTRY_POINT);
180
+ }
181
+ //# sourceMappingURL=bundler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../src/bundler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ethers } from "ethers";
2
+ import { Arc402Config } from "./config";
3
+ export interface Arc402Client {
4
+ provider: ethers.JsonRpcProvider;
5
+ signer: ethers.Wallet | null;
6
+ address: string | null;
7
+ }
8
+ export declare function getClient(config: Arc402Config): Promise<Arc402Client>;
9
+ export declare function requireSigner(config: Arc402Config): Promise<{
10
+ provider: ethers.JsonRpcProvider;
11
+ signer: ethers.Wallet;
12
+ address: string;
13
+ }>;
14
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAU3E;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAUvF"}
package/dist/client.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getClient = getClient;
4
+ exports.requireSigner = requireSigner;
5
+ const ethers_1 = require("ethers");
6
+ async function getClient(config) {
7
+ const provider = new ethers_1.ethers.JsonRpcProvider(config.rpcUrl);
8
+ if (config.privateKey) {
9
+ const signer = new ethers_1.ethers.Wallet(config.privateKey, provider);
10
+ const address = await signer.getAddress();
11
+ return { provider, signer, address };
12
+ }
13
+ return { provider, signer: null, address: null };
14
+ }
15
+ async function requireSigner(config) {
16
+ const { provider, signer } = await getClient(config);
17
+ if (!signer) {
18
+ console.error("No private key configured. Run `arc402 config init` and provide a private key.");
19
+ process.exit(1);
20
+ }
21
+ const address = await signer.getAddress();
22
+ return { provider, signer, address };
23
+ }
24
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;AASA,8BAUC;AAED,sCAYC;AAjCD,mCAAgC;AASzB,KAAK,UAAU,SAAS,CAAC,MAAoB;IAClD,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,MAAoB;IAEpB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,gFAAgF,CACjF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * coinbase-smart-wallet.ts
3
+ *
4
+ * Base Smart Wallet connection via Coinbase Wallet SDK.
5
+ *
6
+ * IMPORTANT — Node.js limitation:
7
+ * @coinbase/wallet-sdk v4 is a browser-only library. It communicates with the
8
+ * wallet through a popup opened to keys.coinbase.com using window.postMessage.
9
+ * There is no scannable QR URL emitted — the popup IS the transport layer.
10
+ *
11
+ * Running the SDK in Node.js fails at the `window.open` call inside openPopup().
12
+ * See TODO.md at the project root for resolution paths.
13
+ *
14
+ * This module is a typed stub so that:
15
+ * - `arc402 wallet deploy --smart-wallet` exists and compiles cleanly.
16
+ * - The error shown to users is clear and actionable, not a raw stack trace.
17
+ * - The interface matches requestPhoneWalletSignature() so the caller in
18
+ * wallet.ts requires zero changes once a real implementation lands.
19
+ */
20
+ export declare function requestCoinbaseSmartWalletSignature(chainId: number, buildTx: (account: string) => {
21
+ to: string;
22
+ data: string;
23
+ value?: string;
24
+ }, prompt: string): Promise<{
25
+ txHash: string;
26
+ account: string;
27
+ }>;
28
+ //# sourceMappingURL=coinbase-smart-wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbase-smart-wallet.d.ts","sourceRoot":"","sources":["../src/coinbase-smart-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1E,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB9C"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * coinbase-smart-wallet.ts
4
+ *
5
+ * Base Smart Wallet connection via Coinbase Wallet SDK.
6
+ *
7
+ * IMPORTANT — Node.js limitation:
8
+ * @coinbase/wallet-sdk v4 is a browser-only library. It communicates with the
9
+ * wallet through a popup opened to keys.coinbase.com using window.postMessage.
10
+ * There is no scannable QR URL emitted — the popup IS the transport layer.
11
+ *
12
+ * Running the SDK in Node.js fails at the `window.open` call inside openPopup().
13
+ * See TODO.md at the project root for resolution paths.
14
+ *
15
+ * This module is a typed stub so that:
16
+ * - `arc402 wallet deploy --smart-wallet` exists and compiles cleanly.
17
+ * - The error shown to users is clear and actionable, not a raw stack trace.
18
+ * - The interface matches requestPhoneWalletSignature() so the caller in
19
+ * wallet.ts requires zero changes once a real implementation lands.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.requestCoinbaseSmartWalletSignature = requestCoinbaseSmartWalletSignature;
23
+ async function requestCoinbaseSmartWalletSignature(chainId, buildTx, prompt) {
24
+ console.log(`\n${prompt}`);
25
+ console.log("─────────────────────────────────────────────────────────");
26
+ console.log("Connect your Base Smart Wallet:\n");
27
+ console.log("⚠ Base Smart Wallet (Coinbase Wallet SDK v4) is not yet supported in the CLI.\n");
28
+ console.log(" The SDK requires a browser environment — it opens a popup to\n" +
29
+ " keys.coinbase.com and communicates via window.postMessage.\n" +
30
+ " There is no scannable QR URL available outside a browser context.\n");
31
+ console.log(" Workarounds are tracked in TODO.md at the project root.\n");
32
+ console.log(" To sign this transaction today, omit --smart-wallet and use WalletConnect instead:\n" +
33
+ " arc402 wallet deploy\n");
34
+ process.exit(1);
35
+ // Unreachable — satisfies the return type so the caller compiles without a cast.
36
+ return { txHash: "", account: "" };
37
+ }
38
+ //# sourceMappingURL=coinbase-smart-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbase-smart-wallet.js","sourceRoot":"","sources":["../src/coinbase-smart-wallet.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;AAKH,kFA2BC;AA3BM,KAAK,UAAU,mCAAmC,CACvD,OAAe,EACf,OAA0E,EAC1E,MAAc;IAEd,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CACT,kFAAkF,CACnF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,mEAAmE;QACjE,iEAAiE;QACjE,wEAAwE,CAC3E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,8DAA8D,CAC/D,CAAC;IACF,OAAO,CAAC,GAAG,CACT,yFAAyF;QACvF,6BAA6B,CAChC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhB,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAcceptCommand(program: Command): void;
3
+ //# sourceMappingURL=accept.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB5D"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAcceptCommand = registerAcceptCommand;
4
+ const sdk_1 = require("@arc402/sdk");
5
+ const config_1 = require("../config");
6
+ const client_1 = require("../client");
7
+ const wallet_router_1 = require("../wallet-router");
8
+ const abis_1 = require("../abis");
9
+ function registerAcceptCommand(program) {
10
+ program.command("accept <id>").description("Provider accepts a proposed agreement").action(async (id) => {
11
+ const config = (0, config_1.loadConfig)();
12
+ if (!config.serviceAgreementAddress)
13
+ throw new Error("serviceAgreementAddress missing in config");
14
+ const { signer } = await (0, client_1.requireSigner)(config);
15
+ (0, wallet_router_1.printSenderInfo)(config);
16
+ if (config.walletContractAddress) {
17
+ await (0, wallet_router_1.executeContractWriteViaWallet)(config.walletContractAddress, signer, config.serviceAgreementAddress, abis_1.SERVICE_AGREEMENT_ABI, "accept", [BigInt(id)]);
18
+ }
19
+ else {
20
+ const client = new sdk_1.ServiceAgreementClient(config.serviceAgreementAddress, signer);
21
+ await client.accept(BigInt(id));
22
+ }
23
+ console.log(`accepted ${id}`);
24
+ });
25
+ }
26
+ //# sourceMappingURL=accept.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":";;AAOA,sDAiBC;AAvBD,qCAAqD;AACrD,sCAAuC;AACvC,sCAA0C;AAC1C,oDAAkF;AAClF,kCAAgD;AAEhD,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACtG,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,uBAAuB;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAClG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;QAC/C,IAAA,+BAAe,EAAC,MAAM,CAAC,CAAC;QACxB,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;YACjC,MAAM,IAAA,6CAA6B,EACjC,MAAM,CAAC,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,uBAAuB,EACpE,4BAAqB,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAC9C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,4BAAsB,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;YAClF,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerHandshakeCommand(program: Command): void;
3
+ //# sourceMappingURL=agent-handshake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-handshake.d.ts","sourceRoot":"","sources":["../../src/commands/agent-handshake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqD/D"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerHandshakeCommand = registerHandshakeCommand;
4
+ const ethers_1 = require("ethers");
5
+ const config_1 = require("../config");
6
+ const client_1 = require("../client");
7
+ // Challenge-response: both agents sign a shared nonce with their agent key
8
+ // and verify each other against AgentRegistry
9
+ const AGENT_REGISTRY_ABI = [
10
+ "function isRegistered(address wallet) view returns (bool)",
11
+ "function getAgent(address wallet) view returns (tuple(address wallet, string endpoint, string serviceType, bool active, uint256 registeredAt))",
12
+ ];
13
+ function registerHandshakeCommand(program) {
14
+ program
15
+ .command("handshake <agentAddress>")
16
+ .description("Mutual challenge-response authentication with another ARC-402 agent. Verifies both parties are registered before any negotiation begins.")
17
+ .option("--json", "Output as machine-parseable JSON")
18
+ .action(async (agentAddress, opts) => {
19
+ const config = (0, config_1.loadConfig)();
20
+ const { signer, provider } = await (0, client_1.requireSigner)(config);
21
+ const myAddress = await signer.getAddress();
22
+ // Generate shared challenge nonce
23
+ const challengeNonce = ethers_1.ethers.hexlify(ethers_1.ethers.randomBytes(32));
24
+ const timestamp = Math.floor(Date.now() / 1000);
25
+ // Sign: keccak256(HANDSHAKE + myAddress + theirAddress + challengeNonce + timestamp)
26
+ const digest = ethers_1.ethers.solidityPackedKeccak256(["string", "address", "address", "bytes32", "uint256"], ["HANDSHAKE", myAddress, agentAddress, challengeNonce, timestamp]);
27
+ const mySig = await signer.signMessage(ethers_1.ethers.getBytes(digest));
28
+ // Fetch their endpoint from AgentRegistry to send challenge
29
+ if (!config.agentRegistryAddress)
30
+ throw new Error("agentRegistryAddress not configured");
31
+ const registry = new ethers_1.ethers.Contract(config.agentRegistryAddress, AGENT_REGISTRY_ABI, provider);
32
+ const myRegistered = await registry.isRegistered(myAddress);
33
+ if (!myRegistered)
34
+ throw new Error(`Your wallet ${myAddress} is not registered in AgentRegistry`);
35
+ const theirAgent = await registry.getAgent(agentAddress);
36
+ if (!theirAgent.active)
37
+ throw new Error(`Agent ${agentAddress} is not active in AgentRegistry`);
38
+ // For v1: output the signed challenge for manual relay / SDK integration
39
+ // Full async exchange (HTTP POST to their endpoint) is in NegotiationSession flow
40
+ const challenge = {
41
+ type: "HANDSHAKE_CHALLENGE",
42
+ from: myAddress,
43
+ to: agentAddress,
44
+ nonce: challengeNonce,
45
+ timestamp,
46
+ sig: mySig,
47
+ theirEndpoint: theirAgent.endpoint,
48
+ };
49
+ if (opts.json) {
50
+ console.log(JSON.stringify(challenge));
51
+ }
52
+ else {
53
+ console.log(`✓ Your identity: ${myAddress} (registered)`);
54
+ console.log(`✓ Their identity: ${agentAddress} (registered, active)`);
55
+ console.log(`✓ Their endpoint: ${theirAgent.endpoint}`);
56
+ console.log(`\nSigned challenge (send to their endpoint to complete handshake):`);
57
+ console.log(JSON.stringify(challenge, null, 2));
58
+ }
59
+ });
60
+ }
61
+ //# sourceMappingURL=agent-handshake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-handshake.js","sourceRoot":"","sources":["../../src/commands/agent-handshake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAgentCommands(program: Command): void;
3
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgW5D"}