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,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserOpsManager = void 0;
4
+ exports.encodeWalletCall = encodeWalletCall;
5
+ exports.buildAcceptCalldata = buildAcceptCalldata;
6
+ exports.buildFulfillCalldata = buildFulfillCalldata;
7
+ /**
8
+ * UserOperation builder and submitter for the ARC-402 daemon.
9
+ * Wraps protocol calls (accept, fulfill) into ERC-4337 UserOperations.
10
+ */
11
+ const ethers_1 = require("ethers");
12
+ const bundler_1 = require("../bundler");
13
+ const abis_1 = require("../abis");
14
+ // ServiceAgreement calldata encoders
15
+ const SA_IFACE = new ethers_1.ethers.Interface([
16
+ "function accept(uint256 agreementId) external",
17
+ "function fulfill(uint256 agreementId, bytes32 actualDeliverablesHash) external",
18
+ ]);
19
+ // ARC402Wallet.executeContractCall param type
20
+ const WALLET_EXEC_IFACE = new ethers_1.ethers.Interface(abis_1.ARC402_WALLET_EXECUTE_ABI);
21
+ function encodeWalletCall(target, innerCalldata, value = BigInt(0)) {
22
+ return WALLET_EXEC_IFACE.encodeFunctionData("executeContractCall", [{
23
+ target,
24
+ data: innerCalldata,
25
+ value,
26
+ minReturnValue: BigInt(0),
27
+ maxApprovalAmount: BigInt(0),
28
+ approvalToken: ethers_1.ethers.ZeroAddress,
29
+ }]);
30
+ }
31
+ function buildAcceptCalldata(serviceAgreementAddress, agreementId, walletAddress) {
32
+ const inner = SA_IFACE.encodeFunctionData("accept", [BigInt(agreementId)]);
33
+ return encodeWalletCall(serviceAgreementAddress, inner);
34
+ }
35
+ function buildFulfillCalldata(serviceAgreementAddress, agreementId, deliveryHash, walletAddress) {
36
+ const inner = SA_IFACE.encodeFunctionData("fulfill", [BigInt(agreementId), deliveryHash]);
37
+ return encodeWalletCall(serviceAgreementAddress, inner);
38
+ }
39
+ class UserOpsManager {
40
+ constructor(config, provider) {
41
+ this.config = config;
42
+ this.provider = provider;
43
+ const bundlerUrl = config.bundler.endpoint || "https://api.pimlico.io/v2/base/rpc";
44
+ this.bundlerClient = new bundler_1.BundlerClient(bundlerUrl, config.network.entry_point, config.network.chain_id);
45
+ }
46
+ async buildUserOp(callData, senderWallet) {
47
+ const entryPointContract = new ethers_1.ethers.Contract(this.config.network.entry_point, ["function getNonce(address sender, uint192 key) external view returns (uint256)"], this.provider);
48
+ const nonce = await entryPointContract.getNonce(senderWallet, 0);
49
+ const feeData = await this.provider.getFeeData();
50
+ const maxFeePerGas = feeData.maxFeePerGas ?? BigInt(1000000000);
51
+ const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? BigInt(100000000);
52
+ return {
53
+ sender: senderWallet,
54
+ nonce: ethers_1.ethers.toBeHex(nonce),
55
+ callData,
56
+ callGasLimit: ethers_1.ethers.toBeHex(300000),
57
+ verificationGasLimit: ethers_1.ethers.toBeHex(150000),
58
+ preVerificationGas: ethers_1.ethers.toBeHex(50000),
59
+ maxFeePerGas: ethers_1.ethers.toBeHex(maxFeePerGas),
60
+ maxPriorityFeePerGas: ethers_1.ethers.toBeHex(maxPriorityFeePerGas),
61
+ signature: "0x",
62
+ };
63
+ }
64
+ async submit(callData, senderWallet) {
65
+ const userOp = await this.buildUserOp(callData, senderWallet);
66
+ return this.bundlerClient.sendUserOperation(userOp);
67
+ }
68
+ async waitForInclusion(userOpHash) {
69
+ await this.bundlerClient.getUserOperationReceipt(userOpHash);
70
+ }
71
+ async pingBundler() {
72
+ try {
73
+ const bundlerUrl = this.config.bundler.endpoint || "https://api.pimlico.io/v2/base/rpc";
74
+ const response = await fetch(bundlerUrl, {
75
+ method: "POST",
76
+ headers: { "Content-Type": "application/json" },
77
+ body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_chainId", params: [] }),
78
+ signal: AbortSignal.timeout(5000),
79
+ });
80
+ return response.ok;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ }
87
+ exports.UserOpsManager = UserOpsManager;
88
+ //# sourceMappingURL=userops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userops.js","sourceRoot":"","sources":["../../src/daemon/userops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Wallet monitor — verifies wallet contract exists and is operational.
3
+ * Steps 4 and 5 of the daemon startup sequence (Spec 32 §3).
4
+ */
5
+ import { ethers } from "ethers";
6
+ import type { DaemonConfig } from "./config";
7
+ export interface WalletStatus {
8
+ contractAddress: string;
9
+ ownerAddress: string;
10
+ isFrozen: boolean;
11
+ machineKeyAuthorized: boolean;
12
+ ethBalance: string;
13
+ }
14
+ export declare function verifyWallet(config: DaemonConfig, provider: ethers.Provider, machineKeyAddress: string): Promise<WalletStatus>;
15
+ export declare function getWalletBalance(contractAddress: string, provider: ethers.Provider): Promise<string>;
16
+ //# sourceMappingURL=wallet-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-monitor.d.ts","sourceRoot":"","sources":["../../src/daemon/wallet-monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAM7C,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CA0DvB;AAED,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyWallet = verifyWallet;
4
+ exports.getWalletBalance = getWalletBalance;
5
+ /**
6
+ * Wallet monitor — verifies wallet contract exists and is operational.
7
+ * Steps 4 and 5 of the daemon startup sequence (Spec 32 §3).
8
+ */
9
+ const ethers_1 = require("ethers");
10
+ const abis_1 = require("../abis");
11
+ async function verifyWallet(config, provider, machineKeyAddress) {
12
+ const { contract_address, owner_address } = config.wallet;
13
+ // Step 4: Verify wallet contract exists
14
+ const code = await provider.getCode(contract_address);
15
+ if (code === "0x") {
16
+ throw new Error(`No contract at wallet address ${contract_address}`);
17
+ }
18
+ const guardianContract = new ethers_1.ethers.Contract(contract_address, abis_1.ARC402_WALLET_GUARDIAN_ABI, provider);
19
+ // Verify owner matches config (if owner_address is set)
20
+ if (owner_address) {
21
+ const onChainOwner = await guardianContract.owner();
22
+ if (onChainOwner.toLowerCase() !== owner_address.toLowerCase()) {
23
+ throw new Error(`Wallet owner mismatch. Config: ${owner_address}, On-chain: ${onChainOwner}`);
24
+ }
25
+ }
26
+ const onChainOwner = await guardianContract.owner();
27
+ // Step 5: Check wallet is not frozen
28
+ const frozen = await guardianContract.frozen();
29
+ if (frozen) {
30
+ throw new Error("Wallet is frozen. Daemon cannot operate.");
31
+ }
32
+ // Check machine key authorization (best effort — v1 wallets may not have registry)
33
+ let machineKeyAuthorized = false;
34
+ try {
35
+ const machineKeyContract = new ethers_1.ethers.Contract(contract_address, abis_1.ARC402_WALLET_MACHINE_KEY_ABI, provider);
36
+ machineKeyAuthorized = await machineKeyContract.authorizedMachineKeys(machineKeyAddress);
37
+ }
38
+ catch {
39
+ // v1 wallet may not have machine key registry — policy-based auth, continue
40
+ machineKeyAuthorized = true;
41
+ }
42
+ // Get ETH balance
43
+ const balanceBig = await provider.getBalance(contract_address);
44
+ const ethBalance = ethers_1.ethers.formatEther(balanceBig);
45
+ return {
46
+ contractAddress: contract_address,
47
+ ownerAddress: onChainOwner,
48
+ isFrozen: false,
49
+ machineKeyAuthorized,
50
+ ethBalance,
51
+ };
52
+ }
53
+ async function getWalletBalance(contractAddress, provider) {
54
+ const balanceBig = await provider.getBalance(contractAddress);
55
+ return ethers_1.ethers.formatEther(balanceBig);
56
+ }
57
+ //# sourceMappingURL=wallet-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-monitor.js","sourceRoot":"","sources":["../../src/daemon/wallet-monitor.ts"],"names":[],"mappings":";;AAmBA,oCA8DC;AAED,4CAMC;AAzFD;;;GAGG;AACH,mCAAgC;AAEhC,kCAGiB;AAUV,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,QAAyB,EACzB,iBAAyB;IAEzB,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAE1D,wCAAwC;IACxC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,gBAAgB,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,eAAM,CAAC,QAAQ,CAC1C,gBAAgB,EAChB,iCAA0B,EAC1B,QAAQ,CACT,CAAC;IAEF,wDAAwD;IACxD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,YAAY,GAAW,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC5D,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CACb,kCAAkC,aAAa,eAAe,YAAY,EAAE,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAW,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAE5D,qCAAqC;IACrC,MAAM,MAAM,GAAY,MAAM,gBAAgB,CAAC,MAAM,EAAE,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,mFAAmF;IACnF,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,IAAI,eAAM,CAAC,QAAQ,CAC5C,gBAAgB,EAChB,oCAA6B,EAC7B,QAAQ,CACT,CAAC;QACF,oBAAoB,GAAG,MAAM,kBAAkB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,eAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAElD,OAAO;QACL,eAAe,EAAE,gBAAgB;QACjC,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,KAAK;QACf,oBAAoB;QACpB,UAAU;KACX,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,eAAuB,EACvB,QAAyB;IAEzB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC9D,OAAO,eAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=drain-v4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain-v4.d.ts","sourceRoot":"","sources":["../src/drain-v4.ts"],"names":[],"mappings":""}
@@ -0,0 +1,167 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ /**
40
+ * drain-v4.ts
41
+ * Drains ETH from v4 wallet (0xb4aF8760) to owner (0x7745772d) via WalletConnect.
42
+ * Steps: openContext → attest → executeSpend → closeContext
43
+ */
44
+ const ethers_1 = require("ethers");
45
+ const sign_client_1 = require("@walletconnect/sign-client");
46
+ const keyvaluestorage_1 = require("@walletconnect/keyvaluestorage");
47
+ const qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
48
+ const path_1 = __importDefault(require("path"));
49
+ const os_1 = __importDefault(require("os"));
50
+ const fs = __importStar(require("fs"));
51
+ const V4_WALLET = "0xb4aF8760d349a6A4C8495Ae4da9089bC84994eE6";
52
+ const OWNER = "0x7745772d67Cd52c1F38706bF5550AdcD925c7c00";
53
+ const INTENT_ATTEST = "0x7ad8db6C5f394542E8e9658F86C85cC99Cf6D460";
54
+ const CHAIN_ID = 8453;
55
+ const RPC = "https://base-mainnet.g.alchemy.com/v2/YIA2uRCsFI-j5pqH-aRzflrACSlV1Qrs";
56
+ // Leave 0.00005 ETH for gas
57
+ const DRAIN_AMOUNT = ethers_1.ethers.parseEther("0.00045");
58
+ const WALLET_ABI = [
59
+ "function openContext(bytes32 contextId, string calldata taskType) external",
60
+ "function attest(bytes32 attestationId, string calldata action, string calldata reason, address recipient, uint256 amount, address token, uint256 expiresAt) external",
61
+ "function executeSpend(address payable recipient, uint256 amount, string calldata category, bytes32 attestationId) external",
62
+ "function closeContext() external",
63
+ "function contextOpen() external view returns (bool)",
64
+ ];
65
+ const ATTEST_ABI = [
66
+ "function attest(bytes32 attestationId, string calldata action, string calldata reason, address recipient, uint256 amount, address token, uint256 expiresAt) external",
67
+ ];
68
+ async function main() {
69
+ const provider = new ethers_1.ethers.JsonRpcProvider(RPC);
70
+ const balance = await provider.getBalance(V4_WALLET);
71
+ console.log(`v4 balance: ${ethers_1.ethers.formatEther(balance)} ETH`);
72
+ if (balance < DRAIN_AMOUNT) {
73
+ console.error("Insufficient balance");
74
+ process.exit(1);
75
+ }
76
+ // Load config for machine key
77
+ const config = JSON.parse(fs.readFileSync(path_1.default.join(os_1.default.homedir(), ".arc402/config.json"), "utf8"));
78
+ const machineKey = new ethers_1.ethers.Wallet(config.privateKey, provider);
79
+ console.log(`Machine key: ${machineKey.address}`);
80
+ // WalletConnect setup
81
+ const projectId = config.walletConnectProjectId;
82
+ const storagePath = path_1.default.join(os_1.default.homedir(), ".arc402/wc-storage.json");
83
+ const client = await sign_client_1.SignClient.init({
84
+ projectId,
85
+ metadata: { name: "ARC-402 Drain v4", description: "Drain v4 wallet ETH to owner", url: "https://app.arc402.xyz", icons: [] },
86
+ storage: new keyvaluestorage_1.KeyValueStorage({ database: storagePath }),
87
+ });
88
+ const { uri, approval } = await client.connect({
89
+ requiredNamespaces: {
90
+ eip155: {
91
+ methods: ["eth_sendTransaction"],
92
+ chains: [`eip155:${CHAIN_ID}`],
93
+ events: ["chainChanged", "accountsChanged"],
94
+ },
95
+ },
96
+ });
97
+ console.log("\nScan this QR in MetaMask (make sure you're on Base):\n");
98
+ qrcode_terminal_1.default.generate(uri, { small: true });
99
+ console.log(`\nMetaMask deep link:\nmetamask://wc?uri=${encodeURIComponent(uri)}\n`);
100
+ console.log("Waiting for MetaMask approval...");
101
+ const session = await approval();
102
+ console.log("✓ MetaMask connected");
103
+ // Build transactions
104
+ const walletIface = new ethers_1.ethers.Interface(WALLET_ABI);
105
+ const attestIface = new ethers_1.ethers.Interface(ATTEST_ABI);
106
+ const contextId = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(`drain-${Date.now()}`));
107
+ const attestationId = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(`attest-${Date.now()}`));
108
+ const expiry = Math.floor(Date.now() / 1000) + 600; // 10 min
109
+ const account = session.namespaces.eip155.accounts[0].split(":")[2];
110
+ console.log(`Owner address: ${account}`);
111
+ async function sendTx(to, data, description) {
112
+ console.log(`\nSending tx: ${description}`);
113
+ const result = await client.request({
114
+ topic: session.topic,
115
+ chainId: `eip155:${CHAIN_ID}`,
116
+ request: {
117
+ method: "eth_sendTransaction",
118
+ params: [{ from: account, to, data, gas: "0x30D40" }],
119
+ },
120
+ });
121
+ console.log(`✓ ${description}: ${result}`);
122
+ // Wait for confirmation
123
+ const receipt = await provider.waitForTransaction(result, 1, 60000);
124
+ console.log(` Confirmed in block ${receipt?.blockNumber}`);
125
+ return result;
126
+ }
127
+ // Step 1: close stale context via machine key if needed
128
+ console.log("\nStep 1: Checking context state...");
129
+ const walletContract = new ethers_1.ethers.Contract(V4_WALLET, WALLET_ABI, machineKey);
130
+ const isOpen = await walletContract.contextOpen();
131
+ if (isOpen) {
132
+ console.log(" Stale context found — closing it...");
133
+ const closeTx = await walletContract.closeContext();
134
+ await closeTx.wait(2);
135
+ await new Promise(r => setTimeout(r, 3000));
136
+ console.log(` ✓ Closed: ${closeTx.hash}`);
137
+ }
138
+ // Step 2: owner opens context (MetaMask signs — so simulation sees it)
139
+ console.log("\nStep 2: Owner opens context via MetaMask...");
140
+ await sendTx(V4_WALLET, new ethers_1.ethers.Interface(WALLET_ABI).encodeFunctionData("openContext", [contextId, "drain"]), "Open context");
141
+ // Step 3: call attest() directly on wallet (onlyOwnerOrMachineKey — no executeContractCall needed)
142
+ const walletIface2 = new ethers_1.ethers.Interface(WALLET_ABI);
143
+ await sendTx(V4_WALLET, walletIface2.encodeFunctionData("attest", [
144
+ attestationId,
145
+ "spend",
146
+ "drain v4 to owner",
147
+ OWNER,
148
+ DRAIN_AMOUNT,
149
+ ethers_1.ethers.ZeroAddress,
150
+ expiry,
151
+ ]), "Create spend attestation");
152
+ // Step 4: machine key executes spend
153
+ console.log("\nStep 4: Executing spend (machine key)...");
154
+ const spendTx = await walletContract.executeSpend(OWNER, DRAIN_AMOUNT, "general", attestationId);
155
+ await spendTx.wait();
156
+ console.log(`✓ ETH sent to owner: ${spendTx.hash}`);
157
+ // Step 4: close context
158
+ const closeTx = await walletContract.closeContext();
159
+ await closeTx.wait();
160
+ console.log(`✓ Context closed: ${closeTx.hash}`);
161
+ const newBalance = await provider.getBalance(V4_WALLET);
162
+ console.log(`\nv4 remaining balance: ${ethers_1.ethers.formatEther(newBalance)} ETH`);
163
+ console.log(`Done. ${ethers_1.ethers.formatEther(DRAIN_AMOUNT)} ETH sent to ${OWNER}`);
164
+ process.exit(0);
165
+ }
166
+ main().catch(e => { console.error(e); process.exit(1); });
167
+ //# sourceMappingURL=drain-v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain-v4.js","sourceRoot":"","sources":["../src/drain-v4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export declare const ARC402_DIR: string;
2
+ export declare const ENDPOINT_CONFIG_PATH: string;
3
+ export declare const DEFAULT_LOCAL_INGRESS_TARGET = "http://127.0.0.1:4402";
4
+ export declare const DEFAULT_TUNNEL_MODE: "host-cloudflared";
5
+ export interface EndpointConfig {
6
+ version: 1;
7
+ agentName: string;
8
+ hostname: string;
9
+ publicUrl: string;
10
+ localIngressTarget: string;
11
+ tunnelMode: "host-cloudflared";
12
+ tunnelTarget?: string;
13
+ walletAddress?: string;
14
+ subdomainApi?: string;
15
+ notes?: string;
16
+ claimedAt?: string;
17
+ updatedAt: string;
18
+ }
19
+ export declare function endpointConfigExists(): boolean;
20
+ export declare function loadEndpointConfig(): EndpointConfig | null;
21
+ export declare function saveEndpointConfig(config: EndpointConfig): void;
22
+ export declare function normalizeAgentName(value: string): string;
23
+ export declare function buildHostname(agentName: string): string;
24
+ export declare function buildPublicUrl(hostname: string): string;
25
+ export declare function buildEndpointConfig(input: {
26
+ agentName: string;
27
+ localIngressTarget?: string;
28
+ tunnelMode?: "host-cloudflared";
29
+ tunnelTarget?: string;
30
+ walletAddress?: string;
31
+ subdomainApi?: string;
32
+ notes?: string;
33
+ claimedAt?: string;
34
+ existing?: EndpointConfig | null;
35
+ }): EndpointConfig;
36
+ //# sourceMappingURL=endpoint-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-config.d.ts","sourceRoot":"","sources":["../src/endpoint-config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAAqC,CAAC;AAC7D,eAAO,MAAM,oBAAoB,QAAyC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AACpE,eAAO,MAAM,mBAAmB,EAAG,kBAA2B,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAO1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAG/D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CAClC,GAAG,cAAc,CAkBjB"}
@@ -0,0 +1,96 @@
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.DEFAULT_TUNNEL_MODE = exports.DEFAULT_LOCAL_INGRESS_TARGET = exports.ENDPOINT_CONFIG_PATH = exports.ARC402_DIR = void 0;
37
+ exports.endpointConfigExists = endpointConfigExists;
38
+ exports.loadEndpointConfig = loadEndpointConfig;
39
+ exports.saveEndpointConfig = saveEndpointConfig;
40
+ exports.normalizeAgentName = normalizeAgentName;
41
+ exports.buildHostname = buildHostname;
42
+ exports.buildPublicUrl = buildPublicUrl;
43
+ exports.buildEndpointConfig = buildEndpointConfig;
44
+ const fs = __importStar(require("fs"));
45
+ const os = __importStar(require("os"));
46
+ const path = __importStar(require("path"));
47
+ exports.ARC402_DIR = path.join(os.homedir(), ".arc402");
48
+ exports.ENDPOINT_CONFIG_PATH = path.join(exports.ARC402_DIR, "endpoint.json");
49
+ exports.DEFAULT_LOCAL_INGRESS_TARGET = "http://127.0.0.1:4402";
50
+ exports.DEFAULT_TUNNEL_MODE = "host-cloudflared";
51
+ function endpointConfigExists() {
52
+ return fs.existsSync(exports.ENDPOINT_CONFIG_PATH);
53
+ }
54
+ function loadEndpointConfig() {
55
+ if (!endpointConfigExists())
56
+ return null;
57
+ try {
58
+ return JSON.parse(fs.readFileSync(exports.ENDPOINT_CONFIG_PATH, "utf-8"));
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ function saveEndpointConfig(config) {
65
+ fs.mkdirSync(exports.ARC402_DIR, { recursive: true, mode: 0o700 });
66
+ fs.writeFileSync(exports.ENDPOINT_CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", { mode: 0o600 });
67
+ }
68
+ function normalizeAgentName(value) {
69
+ return value.trim().toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
70
+ }
71
+ function buildHostname(agentName) {
72
+ return `${normalizeAgentName(agentName)}.arc402.xyz`;
73
+ }
74
+ function buildPublicUrl(hostname) {
75
+ return `https://${hostname}`;
76
+ }
77
+ function buildEndpointConfig(input) {
78
+ const normalizedName = normalizeAgentName(input.agentName);
79
+ const hostname = buildHostname(normalizedName);
80
+ const now = new Date().toISOString();
81
+ return {
82
+ version: 1,
83
+ agentName: normalizedName,
84
+ hostname,
85
+ publicUrl: buildPublicUrl(hostname),
86
+ localIngressTarget: input.localIngressTarget ?? input.existing?.localIngressTarget ?? exports.DEFAULT_LOCAL_INGRESS_TARGET,
87
+ tunnelMode: input.tunnelMode ?? input.existing?.tunnelMode ?? exports.DEFAULT_TUNNEL_MODE,
88
+ tunnelTarget: input.tunnelTarget ?? input.existing?.tunnelTarget,
89
+ walletAddress: input.walletAddress ?? input.existing?.walletAddress,
90
+ subdomainApi: input.subdomainApi ?? input.existing?.subdomainApi,
91
+ notes: input.notes ?? input.existing?.notes,
92
+ claimedAt: input.claimedAt ?? input.existing?.claimedAt,
93
+ updatedAt: now,
94
+ };
95
+ }
96
+ //# sourceMappingURL=endpoint-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-config.js","sourceRoot":"","sources":["../src/endpoint-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const accept_1 = require("./commands/accept");
9
+ const agent_1 = require("./commands/agent");
10
+ const agreements_1 = require("./commands/agreements");
11
+ const arbitrator_1 = require("./commands/arbitrator");
12
+ const cancel_1 = require("./commands/cancel");
13
+ const channel_1 = require("./commands/channel");
14
+ const config_1 = require("./commands/config");
15
+ const deliver_1 = require("./commands/deliver");
16
+ const discover_1 = require("./commands/discover");
17
+ const endpoint_1 = require("./commands/endpoint");
18
+ const dispute_1 = require("./commands/dispute");
19
+ const hire_1 = require("./commands/hire");
20
+ const agent_handshake_1 = require("./commands/agent-handshake");
21
+ const negotiate_1 = require("./commands/negotiate");
22
+ const relay_1 = require("./commands/relay");
23
+ const remediate_1 = require("./commands/remediate");
24
+ const daemon_1 = require("./commands/daemon");
25
+ const openshell_1 = require("./commands/openshell");
26
+ const workroom_1 = require("./commands/workroom");
27
+ const arena_handshake_1 = require("./commands/arena-handshake");
28
+ const trust_1 = require("./commands/trust");
29
+ const wallet_1 = require("./commands/wallet");
30
+ const banner_1 = require("./ui/banner");
31
+ const owner_1 = require("./commands/owner");
32
+ const setup_1 = require("./commands/setup");
33
+ const verify_1 = require("./commands/verify");
34
+ const contract_interaction_1 = require("./commands/contract-interaction");
35
+ const watchtower_1 = require("./commands/watchtower");
36
+ const coldstart_1 = require("./commands/coldstart");
37
+ const migrate_1 = require("./commands/migrate");
38
+ const reputation_js_1 = __importDefault(require("./commands/reputation.js"));
39
+ const policy_js_1 = __importDefault(require("./commands/policy.js"));
40
+ // Show banner when invoked with no arguments
41
+ if (process.argv.length <= 2) {
42
+ (0, banner_1.renderBanner)();
43
+ process.exit(0);
44
+ }
45
+ const program = new commander_1.Command();
46
+ program.name("arc402").description("ARC-402 CLI aligned to canonical-capability discovery → negotiate → hire → remediate → dispute workflow").version("0.2.0");
47
+ (0, config_1.registerConfigCommands)(program);
48
+ (0, agent_handshake_1.registerHandshakeCommand)(program);
49
+ (0, agent_1.registerAgentCommands)(program);
50
+ (0, discover_1.registerDiscoverCommand)(program);
51
+ (0, endpoint_1.registerEndpointCommands)(program);
52
+ (0, negotiate_1.registerNegotiateCommands)(program);
53
+ (0, hire_1.registerHireCommand)(program);
54
+ (0, agreements_1.registerAgreementsCommands)(program);
55
+ (0, accept_1.registerAcceptCommand)(program);
56
+ (0, deliver_1.registerDeliverCommand)(program);
57
+ (0, remediate_1.registerRemediateCommands)(program);
58
+ (0, dispute_1.registerDisputeCommand)(program);
59
+ (0, arbitrator_1.registerArbitratorCommand)(program);
60
+ (0, cancel_1.registerCancelCommand)(program);
61
+ (0, channel_1.registerChannelCommands)(program);
62
+ (0, relay_1.registerRelayCommands)(program);
63
+ (0, daemon_1.registerDaemonCommands)(program);
64
+ (0, openshell_1.registerOpenShellCommands)(program);
65
+ (0, workroom_1.registerWorkroomCommands)(program);
66
+ (0, arena_handshake_1.registerArenaHandshakeCommands)(program);
67
+ (0, trust_1.registerTrustCommand)(program);
68
+ (0, wallet_1.registerWalletCommands)(program);
69
+ (0, owner_1.registerOwnerCommands)(program);
70
+ (0, setup_1.registerSetupCommands)(program);
71
+ (0, verify_1.registerVerifyCommand)(program);
72
+ (0, contract_interaction_1.registerContractInteractionCommands)(program);
73
+ (0, watchtower_1.registerWatchtowerCommands)(program);
74
+ (0, coldstart_1.registerColdStartCommands)(program);
75
+ (0, migrate_1.registerMigrateCommands)(program);
76
+ program.addCommand(reputation_js_1.default);
77
+ program.addCommand(policy_js_1.default);
78
+ program.parse(process.argv);
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,8CAA0D;AAC1D,4CAAyD;AACzD,sDAAmE;AACnE,sDAAkE;AAClE,8CAA0D;AAC1D,gDAA6D;AAC7D,8CAA2D;AAC3D,gDAA4D;AAC5D,kDAA8D;AAC9D,kDAA+D;AAC/D,gDAA4D;AAC5D,0CAAsD;AACtD,gEAAsE;AACtE,oDAAiE;AACjE,4CAAyD;AACzD,oDAAiE;AACjE,8CAA2D;AAC3D,oDAAiE;AACjE,kDAA+D;AAC/D,gEAA4E;AAC5E,4CAAwD;AACxD,8CAA2D;AAC3D,wCAA2C;AAC3C,4CAAyD;AACzD,4CAAyD;AACzD,8CAA0D;AAC1D,0EAAsF;AACtF,sDAAmE;AACnE,oDAAiE;AACjE,gDAA6D;AAC7D,6EAAkD;AAClD,qEAA0C;AAE1C,6CAA6C;AAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,IAAA,qBAAY,GAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,yGAAyG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/J,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,0CAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,uCAA0B,EAAC,OAAO,CAAC,CAAC;AACpC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,sCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,gDAA8B,EAAC,OAAO,CAAC,CAAC;AACxC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,0DAAmC,EAAC,OAAO,CAAC,CAAC;AAC7C,IAAA,uCAA0B,EAAC,OAAO,CAAC,CAAC;AACpC,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,uBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,mBAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}