arc402-cli 0.7.5 → 0.8.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.
- package/MIGRATION-SPEC.md +108 -0
- package/dist/abis.js +14 -17
- package/dist/abis.js.map +1 -1
- package/dist/bundler.d.ts +1 -1
- package/dist/bundler.d.ts.map +1 -1
- package/dist/bundler.js +27 -61
- package/dist/bundler.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -9
- package/dist/client.js.map +1 -1
- package/dist/coinbase-smart-wallet.js +1 -4
- package/dist/coinbase-smart-wallet.js.map +1 -1
- package/dist/commands/accept.js +25 -28
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/agent-handshake.js +15 -18
- package/dist/commands/agent-handshake.js.map +1 -1
- package/dist/commands/agent.js +98 -104
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/agreements.js +62 -98
- package/dist/commands/agreements.js.map +1 -1
- package/dist/commands/arbitrator.js +45 -81
- package/dist/commands/arbitrator.js.map +1 -1
- package/dist/commands/arena-handshake.js +27 -30
- package/dist/commands/arena-handshake.js.map +1 -1
- package/dist/commands/arena.js +12 -18
- package/dist/commands/arena.js.map +1 -1
- package/dist/commands/backup.js +30 -36
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cancel.js +15 -18
- package/dist/commands/cancel.js.map +1 -1
- package/dist/commands/channel.js +45 -81
- package/dist/commands/channel.js.map +1 -1
- package/dist/commands/coldstart.js +31 -34
- package/dist/commands/coldstart.js.map +1 -1
- package/dist/commands/config.js +23 -29
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contract-interaction.js +12 -15
- package/dist/commands/contract-interaction.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +98 -135
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/deliver.js +37 -76
- package/dist/commands/deliver.js.map +1 -1
- package/dist/commands/discover.js +24 -27
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/dispute.js +104 -110
- package/dist/commands/dispute.js.map +1 -1
- package/dist/commands/doctor.js +16 -55
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/endpoint.js +56 -95
- package/dist/commands/endpoint.js.map +1 -1
- package/dist/commands/feed.js +11 -18
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/hire.js +37 -40
- package/dist/commands/hire.js.map +1 -1
- package/dist/commands/migrate.js +30 -33
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/negotiate.d.ts.map +1 -1
- package/dist/commands/negotiate.js +34 -36
- package/dist/commands/negotiate.js.map +1 -1
- package/dist/commands/openshell.js +68 -104
- package/dist/commands/openshell.js.map +1 -1
- package/dist/commands/owner.js +17 -20
- package/dist/commands/owner.js.map +1 -1
- package/dist/commands/policy.js +41 -43
- package/dist/commands/policy.js.map +1 -1
- package/dist/commands/relay.d.ts.map +1 -1
- package/dist/commands/relay.js +18 -51
- package/dist/commands/relay.js.map +1 -1
- package/dist/commands/remediate.js +20 -23
- package/dist/commands/remediate.js.map +1 -1
- package/dist/commands/reputation.js +25 -27
- package/dist/commands/reputation.js.map +1 -1
- package/dist/commands/setup.js +65 -104
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/trust.js +17 -20
- package/dist/commands/trust.js.map +1 -1
- package/dist/commands/verify.js +18 -21
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/wallet.js +619 -625
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/watch.js +33 -36
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/watchtower.js +37 -73
- package/dist/commands/watchtower.js.map +1 -1
- package/dist/commands/workroom.d.ts.map +1 -1
- package/dist/commands/workroom.js +138 -171
- package/dist/commands/workroom.js.map +1 -1
- package/dist/config.js +21 -65
- package/dist/config.js.map +1 -1
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +16 -53
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/hire-listener.d.ts +3 -3
- package/dist/daemon/hire-listener.d.ts.map +1 -1
- package/dist/daemon/hire-listener.js +13 -47
- package/dist/daemon/hire-listener.js.map +1 -1
- package/dist/daemon/index.d.ts +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +50 -88
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/job-lifecycle.d.ts +1 -1
- package/dist/daemon/job-lifecycle.d.ts.map +1 -1
- package/dist/daemon/job-lifecycle.js +11 -51
- package/dist/daemon/job-lifecycle.js.map +1 -1
- package/dist/daemon/notify.d.ts +1 -1
- package/dist/daemon/notify.d.ts.map +1 -1
- package/dist/daemon/notify.js +19 -53
- package/dist/daemon/notify.js.map +1 -1
- package/dist/daemon/token-metering.js +8 -47
- package/dist/daemon/token-metering.js.map +1 -1
- package/dist/daemon/userops.d.ts +2 -2
- package/dist/daemon/userops.d.ts.map +1 -1
- package/dist/daemon/userops.js +23 -27
- package/dist/daemon/userops.js.map +1 -1
- package/dist/daemon/wallet-monitor.d.ts +1 -1
- package/dist/daemon/wallet-monitor.d.ts.map +1 -1
- package/dist/daemon/wallet-monitor.js +8 -12
- package/dist/daemon/wallet-monitor.js.map +1 -1
- package/dist/drain-v4.js +26 -64
- package/dist/drain-v4.js.map +1 -1
- package/dist/endpoint-config.js +20 -63
- package/dist/endpoint-config.js.map +1 -1
- package/dist/endpoint-notify.js +9 -48
- package/dist/endpoint-notify.js.map +1 -1
- package/dist/index.js +16 -50
- package/dist/index.js.map +1 -1
- package/dist/openshell-runtime.d.ts.map +1 -1
- package/dist/openshell-runtime.js +38 -82
- package/dist/openshell-runtime.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +77 -83
- package/dist/program.js.map +1 -1
- package/dist/repl.js +25 -31
- package/dist/repl.js.map +1 -1
- package/dist/signing.js +3 -6
- package/dist/signing.js.map +1 -1
- package/dist/telegram-notify.js +3 -40
- package/dist/telegram-notify.js.map +1 -1
- package/dist/tui/App.d.ts +1 -9
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +47 -65
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Footer.js +4 -7
- package/dist/tui/Footer.js.map +1 -1
- package/dist/tui/Header.d.ts +1 -2
- package/dist/tui/Header.d.ts.map +1 -1
- package/dist/tui/Header.js +8 -14
- package/dist/tui/Header.js.map +1 -1
- package/dist/tui/InputLine.js +17 -23
- package/dist/tui/InputLine.js.map +1 -1
- package/dist/tui/Viewport.d.ts +5 -4
- package/dist/tui/Viewport.d.ts.map +1 -1
- package/dist/tui/Viewport.js +20 -13
- package/dist/tui/Viewport.js.map +1 -1
- package/dist/tui/WalletConnectPairing.d.ts +23 -0
- package/dist/tui/WalletConnectPairing.d.ts.map +1 -0
- package/dist/tui/WalletConnectPairing.js +75 -0
- package/dist/tui/WalletConnectPairing.js.map +1 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +14 -21
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/useChat.js +13 -19
- package/dist/tui/useChat.js.map +1 -1
- package/dist/tui/useCommand.d.ts +2 -7
- package/dist/tui/useCommand.d.ts.map +1 -1
- package/dist/tui/useCommand.js +77 -165
- package/dist/tui/useCommand.js.map +1 -1
- package/dist/tui/useScroll.js +9 -12
- package/dist/tui/useScroll.js.map +1 -1
- package/dist/ui/banner.js +12 -19
- package/dist/ui/banner.js.map +1 -1
- package/dist/ui/colors.js +13 -19
- package/dist/ui/colors.js.map +1 -1
- package/dist/ui/format.js +6 -14
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/spinner.js +6 -12
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/tree.js +3 -6
- package/dist/ui/tree.js.map +1 -1
- package/dist/utils/format.js +27 -41
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/hash.js +4 -42
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/time.js +2 -6
- package/dist/utils/time.js.map +1 -1
- package/dist/wallet-router.d.ts +1 -1
- package/dist/wallet-router.d.ts.map +1 -1
- package/dist/wallet-router.js +12 -19
- package/dist/wallet-router.js.map +1 -1
- package/dist/walletconnect-session.d.ts +1 -1
- package/dist/walletconnect-session.d.ts.map +1 -1
- package/dist/walletconnect-session.js +6 -11
- package/dist/walletconnect-session.js.map +1 -1
- package/dist/walletconnect.d.ts +6 -1
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js +32 -35
- package/dist/walletconnect.js.map +1 -1
- package/package.json +7 -6
- package/src/bundler.ts +1 -1
- package/src/client.ts +1 -1
- package/src/commands/accept.ts +7 -7
- package/src/commands/agent-handshake.ts +4 -4
- package/src/commands/agent.ts +9 -9
- package/src/commands/agreements.ts +8 -8
- package/src/commands/arbitrator.ts +5 -5
- package/src/commands/arena-handshake.ts +6 -6
- package/src/commands/arena.ts +2 -2
- package/src/commands/backup.ts +1 -1
- package/src/commands/cancel.ts +6 -6
- package/src/commands/channel.ts +6 -6
- package/src/commands/coldstart.ts +5 -5
- package/src/commands/config.ts +2 -2
- package/src/commands/contract-interaction.ts +2 -2
- package/src/commands/daemon.ts +14 -11
- package/src/commands/deliver.ts +9 -9
- package/src/commands/discover.ts +5 -5
- package/src/commands/dispute.ts +7 -7
- package/src/commands/doctor.ts +2 -2
- package/src/commands/endpoint.ts +6 -6
- package/src/commands/feed.ts +1 -1
- package/src/commands/hire.ts +10 -10
- package/src/commands/migrate.ts +7 -7
- package/src/commands/negotiate.ts +6 -5
- package/src/commands/openshell.ts +4 -4
- package/src/commands/owner.ts +5 -5
- package/src/commands/policy.ts +5 -5
- package/src/commands/relay.ts +5 -1
- package/src/commands/remediate.ts +5 -5
- package/src/commands/reputation.ts +6 -6
- package/src/commands/setup.ts +1 -1
- package/src/commands/trust.ts +6 -6
- package/src/commands/verify.ts +6 -6
- package/src/commands/wallet.ts +15 -15
- package/src/commands/watch.ts +3 -3
- package/src/commands/watchtower.ts +6 -6
- package/src/commands/workroom.ts +14 -10
- package/src/daemon/config.ts +2 -1
- package/src/daemon/hire-listener.ts +3 -3
- package/src/daemon/index.ts +10 -9
- package/src/daemon/job-lifecycle.ts +1 -1
- package/src/daemon/notify.ts +4 -4
- package/src/daemon/userops.ts +4 -4
- package/src/daemon/wallet-monitor.ts +2 -2
- package/src/endpoint-notify.ts +1 -1
- package/src/index.ts +8 -7
- package/src/openshell-runtime.ts +5 -1
- package/src/program.ts +36 -36
- package/src/repl.ts +3 -3
- package/src/tui/App.tsx +26 -47
- package/src/tui/Header.tsx +3 -10
- package/src/tui/InputLine.tsx +1 -1
- package/src/tui/Viewport.tsx +22 -18
- package/src/tui/WalletConnectPairing.tsx +131 -0
- package/src/tui/index.tsx +7 -8
- package/src/tui/useChat.ts +1 -1
- package/src/tui/useCommand.ts +86 -183
- package/src/ui/banner.ts +2 -2
- package/src/ui/tree.ts +1 -1
- package/src/wallet-router.ts +2 -2
- package/src/walletconnect-session.ts +1 -1
- package/src/walletconnect.ts +20 -5
- package/tsconfig.json +16 -7
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.verifyWallet = verifyWallet;
|
|
4
|
-
exports.getWalletBalance = getWalletBalance;
|
|
5
1
|
/**
|
|
6
2
|
* Wallet monitor — verifies wallet contract exists and is operational.
|
|
7
3
|
* Steps 4 and 5 of the daemon startup sequence (Spec 32 §3).
|
|
8
4
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
async function verifyWallet(config, provider, machineKeyAddress) {
|
|
5
|
+
import { ethers } from "ethers";
|
|
6
|
+
import { ARC402_WALLET_GUARDIAN_ABI, ARC402_WALLET_MACHINE_KEY_ABI, } from "../abis.js";
|
|
7
|
+
export async function verifyWallet(config, provider, machineKeyAddress) {
|
|
12
8
|
const { contract_address, owner_address } = config.wallet;
|
|
13
9
|
// Step 4: Verify wallet contract exists
|
|
14
10
|
const code = await provider.getCode(contract_address);
|
|
15
11
|
if (code === "0x") {
|
|
16
12
|
throw new Error(`No contract at wallet address ${contract_address}`);
|
|
17
13
|
}
|
|
18
|
-
const guardianContract = new
|
|
14
|
+
const guardianContract = new ethers.Contract(contract_address, ARC402_WALLET_GUARDIAN_ABI, provider);
|
|
19
15
|
// Verify owner matches config (if owner_address is set)
|
|
20
16
|
if (owner_address) {
|
|
21
17
|
const onChainOwner = await guardianContract.owner();
|
|
@@ -32,7 +28,7 @@ async function verifyWallet(config, provider, machineKeyAddress) {
|
|
|
32
28
|
// Check machine key authorization (best effort — v1 wallets may not have registry)
|
|
33
29
|
let machineKeyAuthorized = false;
|
|
34
30
|
try {
|
|
35
|
-
const machineKeyContract = new
|
|
31
|
+
const machineKeyContract = new ethers.Contract(contract_address, ARC402_WALLET_MACHINE_KEY_ABI, provider);
|
|
36
32
|
machineKeyAuthorized = await machineKeyContract.authorizedMachineKeys(machineKeyAddress);
|
|
37
33
|
}
|
|
38
34
|
catch {
|
|
@@ -41,7 +37,7 @@ async function verifyWallet(config, provider, machineKeyAddress) {
|
|
|
41
37
|
}
|
|
42
38
|
// Get ETH balance
|
|
43
39
|
const balanceBig = await provider.getBalance(contract_address);
|
|
44
|
-
const ethBalance =
|
|
40
|
+
const ethBalance = ethers.formatEther(balanceBig);
|
|
45
41
|
return {
|
|
46
42
|
contractAddress: contract_address,
|
|
47
43
|
ownerAddress: onChainOwner,
|
|
@@ -50,8 +46,8 @@ async function verifyWallet(config, provider, machineKeyAddress) {
|
|
|
50
46
|
ethBalance,
|
|
51
47
|
};
|
|
52
48
|
}
|
|
53
|
-
async function getWalletBalance(contractAddress, provider) {
|
|
49
|
+
export async function getWalletBalance(contractAddress, provider) {
|
|
54
50
|
const balanceBig = await provider.getBalance(contractAddress);
|
|
55
|
-
return
|
|
51
|
+
return ethers.formatEther(balanceBig);
|
|
56
52
|
}
|
|
57
53
|
//# sourceMappingURL=wallet-monitor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-monitor.js","sourceRoot":"","sources":["../../src/daemon/wallet-monitor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wallet-monitor.js","sourceRoot":"","sources":["../../src/daemon/wallet-monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAUpB,MAAM,CAAC,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,MAAM,CAAC,QAAQ,CAC1C,gBAAgB,EAChB,0BAA0B,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,MAAM,CAAC,QAAQ,CAC5C,gBAAgB,EAChB,6BAA6B,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,MAAM,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;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,eAAuB,EACvB,QAAyB;IAEzB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/drain-v4.js
CHANGED
|
@@ -1,60 +1,22 @@
|
|
|
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
1
|
/**
|
|
40
2
|
* drain-v4.ts
|
|
41
3
|
* Drains ETH from v4 wallet (0xb4aF8760) to owner (0x7745772d) via WalletConnect.
|
|
42
4
|
* Steps: openContext → attest → executeSpend → closeContext
|
|
43
5
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
6
|
+
import { ethers } from "ethers";
|
|
7
|
+
import { SignClient } from "@walletconnect/sign-client";
|
|
8
|
+
import { KeyValueStorage } from "@walletconnect/keyvaluestorage";
|
|
9
|
+
import qrcode from "qrcode-terminal";
|
|
10
|
+
import path from "path";
|
|
11
|
+
import os from "os";
|
|
12
|
+
import * as fs from "fs";
|
|
51
13
|
const V4_WALLET = "0xb4aF8760d349a6A4C8495Ae4da9089bC84994eE6";
|
|
52
14
|
const OWNER = "0x7745772d67Cd52c1F38706bF5550AdcD925c7c00";
|
|
53
15
|
const INTENT_ATTEST = "0x7ad8db6C5f394542E8e9658F86C85cC99Cf6D460";
|
|
54
16
|
const CHAIN_ID = 8453;
|
|
55
17
|
const RPC = "https://base-mainnet.g.alchemy.com/v2/YIA2uRCsFI-j5pqH-aRzflrACSlV1Qrs";
|
|
56
18
|
// Leave 0.00005 ETH for gas
|
|
57
|
-
const DRAIN_AMOUNT =
|
|
19
|
+
const DRAIN_AMOUNT = ethers.parseEther("0.00045");
|
|
58
20
|
const WALLET_ABI = [
|
|
59
21
|
"function openContext(bytes32 contextId, string calldata taskType) external",
|
|
60
22
|
"function attest(bytes32 attestationId, string calldata action, string calldata reason, address recipient, uint256 amount, address token, uint256 expiresAt) external",
|
|
@@ -66,24 +28,24 @@ const ATTEST_ABI = [
|
|
|
66
28
|
"function attest(bytes32 attestationId, string calldata action, string calldata reason, address recipient, uint256 amount, address token, uint256 expiresAt) external",
|
|
67
29
|
];
|
|
68
30
|
async function main() {
|
|
69
|
-
const provider = new
|
|
31
|
+
const provider = new ethers.JsonRpcProvider(RPC);
|
|
70
32
|
const balance = await provider.getBalance(V4_WALLET);
|
|
71
|
-
console.log(`v4 balance: ${
|
|
33
|
+
console.log(`v4 balance: ${ethers.formatEther(balance)} ETH`);
|
|
72
34
|
if (balance < DRAIN_AMOUNT) {
|
|
73
35
|
console.error("Insufficient balance");
|
|
74
36
|
process.exit(1);
|
|
75
37
|
}
|
|
76
38
|
// Load config for machine key
|
|
77
|
-
const config = JSON.parse(fs.readFileSync(
|
|
78
|
-
const machineKey = new
|
|
39
|
+
const config = JSON.parse(fs.readFileSync(path.join(os.homedir(), ".arc402/config.json"), "utf8"));
|
|
40
|
+
const machineKey = new ethers.Wallet(config.privateKey, provider);
|
|
79
41
|
console.log(`Machine key: ${machineKey.address}`);
|
|
80
42
|
// WalletConnect setup
|
|
81
43
|
const projectId = config.walletConnectProjectId;
|
|
82
|
-
const storagePath =
|
|
83
|
-
const client = await
|
|
44
|
+
const storagePath = path.join(os.homedir(), ".arc402/wc-storage.json");
|
|
45
|
+
const client = await SignClient.init({
|
|
84
46
|
projectId,
|
|
85
47
|
metadata: { name: "ARC-402 Drain v4", description: "Drain v4 wallet ETH to owner", url: "https://app.arc402.xyz", icons: [] },
|
|
86
|
-
storage: new
|
|
48
|
+
storage: new KeyValueStorage({ database: storagePath }),
|
|
87
49
|
});
|
|
88
50
|
const { uri, approval } = await client.connect({
|
|
89
51
|
requiredNamespaces: {
|
|
@@ -95,16 +57,16 @@ async function main() {
|
|
|
95
57
|
},
|
|
96
58
|
});
|
|
97
59
|
console.log("\nScan this QR in MetaMask (make sure you're on Base):\n");
|
|
98
|
-
|
|
60
|
+
qrcode.generate(uri, { small: true });
|
|
99
61
|
console.log(`\nMetaMask deep link:\nmetamask://wc?uri=${encodeURIComponent(uri)}\n`);
|
|
100
62
|
console.log("Waiting for MetaMask approval...");
|
|
101
63
|
const session = await approval();
|
|
102
64
|
console.log("✓ MetaMask connected");
|
|
103
65
|
// Build transactions
|
|
104
|
-
const walletIface = new
|
|
105
|
-
const attestIface = new
|
|
106
|
-
const contextId =
|
|
107
|
-
const attestationId =
|
|
66
|
+
const walletIface = new ethers.Interface(WALLET_ABI);
|
|
67
|
+
const attestIface = new ethers.Interface(ATTEST_ABI);
|
|
68
|
+
const contextId = ethers.keccak256(ethers.toUtf8Bytes(`drain-${Date.now()}`));
|
|
69
|
+
const attestationId = ethers.keccak256(ethers.toUtf8Bytes(`attest-${Date.now()}`));
|
|
108
70
|
const expiry = Math.floor(Date.now() / 1000) + 600; // 10 min
|
|
109
71
|
const account = session.namespaces.eip155.accounts[0].split(":")[2];
|
|
110
72
|
console.log(`Owner address: ${account}`);
|
|
@@ -126,7 +88,7 @@ async function main() {
|
|
|
126
88
|
}
|
|
127
89
|
// Step 1: close stale context via machine key if needed
|
|
128
90
|
console.log("\nStep 1: Checking context state...");
|
|
129
|
-
const walletContract = new
|
|
91
|
+
const walletContract = new ethers.Contract(V4_WALLET, WALLET_ABI, machineKey);
|
|
130
92
|
const isOpen = await walletContract.contextOpen();
|
|
131
93
|
if (isOpen) {
|
|
132
94
|
console.log(" Stale context found — closing it...");
|
|
@@ -137,16 +99,16 @@ async function main() {
|
|
|
137
99
|
}
|
|
138
100
|
// Step 2: owner opens context (MetaMask signs — so simulation sees it)
|
|
139
101
|
console.log("\nStep 2: Owner opens context via MetaMask...");
|
|
140
|
-
await sendTx(V4_WALLET, new
|
|
102
|
+
await sendTx(V4_WALLET, new ethers.Interface(WALLET_ABI).encodeFunctionData("openContext", [contextId, "drain"]), "Open context");
|
|
141
103
|
// Step 3: call attest() directly on wallet (onlyOwnerOrMachineKey — no executeContractCall needed)
|
|
142
|
-
const walletIface2 = new
|
|
104
|
+
const walletIface2 = new ethers.Interface(WALLET_ABI);
|
|
143
105
|
await sendTx(V4_WALLET, walletIface2.encodeFunctionData("attest", [
|
|
144
106
|
attestationId,
|
|
145
107
|
"spend",
|
|
146
108
|
"drain v4 to owner",
|
|
147
109
|
OWNER,
|
|
148
110
|
DRAIN_AMOUNT,
|
|
149
|
-
|
|
111
|
+
ethers.ZeroAddress,
|
|
150
112
|
expiry,
|
|
151
113
|
]), "Create spend attestation");
|
|
152
114
|
// Step 4: machine key executes spend
|
|
@@ -159,8 +121,8 @@ async function main() {
|
|
|
159
121
|
await closeTx.wait();
|
|
160
122
|
console.log(`✓ Context closed: ${closeTx.hash}`);
|
|
161
123
|
const newBalance = await provider.getBalance(V4_WALLET);
|
|
162
|
-
console.log(`\nv4 remaining balance: ${
|
|
163
|
-
console.log(`Done. ${
|
|
124
|
+
console.log(`\nv4 remaining balance: ${ethers.formatEther(newBalance)} ETH`);
|
|
125
|
+
console.log(`Done. ${ethers.formatEther(DRAIN_AMOUNT)} ETH sent to ${OWNER}`);
|
|
164
126
|
process.exit(0);
|
|
165
127
|
}
|
|
166
128
|
main().catch(e => { console.error(e); process.exit(1); });
|
package/dist/drain-v4.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drain-v4.js","sourceRoot":"","sources":["../src/drain-v4.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drain-v4.js","sourceRoot":"","sources":["../src/drain-v4.ts"],"names":[],"mappings":"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"}
|
package/dist/endpoint-config.js
CHANGED
|
@@ -1,80 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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);
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as os from "os";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
export const ARC402_DIR = path.join(os.homedir(), ".arc402");
|
|
5
|
+
export const ENDPOINT_CONFIG_PATH = path.join(ARC402_DIR, "endpoint.json");
|
|
6
|
+
export const DEFAULT_LOCAL_INGRESS_TARGET = "http://127.0.0.1:4402";
|
|
7
|
+
export const DEFAULT_TUNNEL_MODE = "host-cloudflared";
|
|
8
|
+
export function endpointConfigExists() {
|
|
9
|
+
return fs.existsSync(ENDPOINT_CONFIG_PATH);
|
|
53
10
|
}
|
|
54
|
-
function loadEndpointConfig() {
|
|
11
|
+
export function loadEndpointConfig() {
|
|
55
12
|
if (!endpointConfigExists())
|
|
56
13
|
return null;
|
|
57
14
|
try {
|
|
58
|
-
return JSON.parse(fs.readFileSync(
|
|
15
|
+
return JSON.parse(fs.readFileSync(ENDPOINT_CONFIG_PATH, "utf-8"));
|
|
59
16
|
}
|
|
60
17
|
catch {
|
|
61
18
|
return null;
|
|
62
19
|
}
|
|
63
20
|
}
|
|
64
|
-
function saveEndpointConfig(config) {
|
|
65
|
-
fs.mkdirSync(
|
|
66
|
-
fs.writeFileSync(
|
|
21
|
+
export function saveEndpointConfig(config) {
|
|
22
|
+
fs.mkdirSync(ARC402_DIR, { recursive: true, mode: 0o700 });
|
|
23
|
+
fs.writeFileSync(ENDPOINT_CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", { mode: 0o600 });
|
|
67
24
|
}
|
|
68
|
-
function normalizeAgentName(value) {
|
|
25
|
+
export function normalizeAgentName(value) {
|
|
69
26
|
return value.trim().toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
70
27
|
}
|
|
71
|
-
function buildHostname(agentName) {
|
|
28
|
+
export function buildHostname(agentName) {
|
|
72
29
|
return `${normalizeAgentName(agentName)}.arc402.xyz`;
|
|
73
30
|
}
|
|
74
|
-
function buildPublicUrl(hostname) {
|
|
31
|
+
export function buildPublicUrl(hostname) {
|
|
75
32
|
return `https://${hostname}`;
|
|
76
33
|
}
|
|
77
|
-
function buildEndpointConfig(input) {
|
|
34
|
+
export function buildEndpointConfig(input) {
|
|
78
35
|
const normalizedName = normalizeAgentName(input.agentName);
|
|
79
36
|
const hostname = buildHostname(normalizedName);
|
|
80
37
|
const now = new Date().toISOString();
|
|
@@ -83,8 +40,8 @@ function buildEndpointConfig(input) {
|
|
|
83
40
|
agentName: normalizedName,
|
|
84
41
|
hostname,
|
|
85
42
|
publicUrl: buildPublicUrl(hostname),
|
|
86
|
-
localIngressTarget: input.localIngressTarget ?? input.existing?.localIngressTarget ??
|
|
87
|
-
tunnelMode: input.tunnelMode ?? input.existing?.tunnelMode ??
|
|
43
|
+
localIngressTarget: input.localIngressTarget ?? input.existing?.localIngressTarget ?? DEFAULT_LOCAL_INGRESS_TARGET,
|
|
44
|
+
tunnelMode: input.tunnelMode ?? input.existing?.tunnelMode ?? DEFAULT_TUNNEL_MODE,
|
|
88
45
|
tunnelTarget: input.tunnelTarget ?? input.existing?.tunnelTarget,
|
|
89
46
|
walletAddress: input.walletAddress ?? input.existing?.walletAddress,
|
|
90
47
|
subdomainApi: input.subdomainApi ?? input.existing?.subdomainApi,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-config.js","sourceRoot":"","sources":["../src/endpoint-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"endpoint-config.js","sourceRoot":"","sources":["../src/endpoint-config.ts"],"names":[],"mappings":"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"}
|
package/dist/endpoint-notify.js
CHANGED
|
@@ -1,51 +1,12 @@
|
|
|
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_REGISTRY_ADDRESS = void 0;
|
|
37
|
-
exports.validateEndpointUrl = validateEndpointUrl;
|
|
38
|
-
exports.resolveAgentEndpoint = resolveAgentEndpoint;
|
|
39
|
-
exports.notifyAgent = notifyAgent;
|
|
40
1
|
/**
|
|
41
2
|
* Shared endpoint-notify helper for CLI commands.
|
|
42
3
|
* Resolves an agent's registered HTTP endpoint from AgentRegistry
|
|
43
4
|
* and POSTs lifecycle events after onchain transactions.
|
|
44
5
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
6
|
+
import { ethers } from "ethers";
|
|
7
|
+
import { AGENT_REGISTRY_ABI } from "./abis.js";
|
|
8
|
+
import * as dns from "dns/promises";
|
|
9
|
+
export const DEFAULT_REGISTRY_ADDRESS = "0xD5c2851B00090c92Ba7F4723FB548bb30C9B6865";
|
|
49
10
|
// ─── SSRF protection ──────────────────────────────────────────────────────────
|
|
50
11
|
const RFC1918_RANGES = [
|
|
51
12
|
// 10.0.0.0/8
|
|
@@ -77,7 +38,7 @@ function isPrivateIp(ip) {
|
|
|
77
38
|
* Allows HTTPS (any host) and HTTP only for localhost/127.0.0.1.
|
|
78
39
|
* Blocks RFC 1918, link-local, loopback non-localhost, and AWS metadata IPs.
|
|
79
40
|
*/
|
|
80
|
-
async function validateEndpointUrl(endpoint) {
|
|
41
|
+
export async function validateEndpointUrl(endpoint) {
|
|
81
42
|
let parsed;
|
|
82
43
|
try {
|
|
83
44
|
parsed = new URL(endpoint);
|
|
@@ -111,8 +72,8 @@ async function validateEndpointUrl(endpoint) {
|
|
|
111
72
|
* Reads an agent's public HTTP endpoint from AgentRegistry.
|
|
112
73
|
* Returns empty string if not registered or no endpoint.
|
|
113
74
|
*/
|
|
114
|
-
async function resolveAgentEndpoint(address, provider, registryAddress =
|
|
115
|
-
const registry = new
|
|
75
|
+
export async function resolveAgentEndpoint(address, provider, registryAddress = DEFAULT_REGISTRY_ADDRESS) {
|
|
76
|
+
const registry = new ethers.Contract(registryAddress, AGENT_REGISTRY_ABI, provider);
|
|
116
77
|
const agentData = await registry.getAgent(address);
|
|
117
78
|
return agentData.endpoint ?? "";
|
|
118
79
|
}
|
|
@@ -122,7 +83,7 @@ async function resolveAgentEndpoint(address, provider, registryAddress = exports
|
|
|
122
83
|
* Validates endpoint URL for SSRF before connecting.
|
|
123
84
|
* If signingKey is provided, signs the payload and adds X-ARC402-Signature / X-ARC402-Signer headers.
|
|
124
85
|
*/
|
|
125
|
-
async function notifyAgent(endpoint, path, payload, signingKey) {
|
|
86
|
+
export async function notifyAgent(endpoint, path, payload, signingKey) {
|
|
126
87
|
if (!endpoint)
|
|
127
88
|
return false;
|
|
128
89
|
try {
|
|
@@ -136,7 +97,7 @@ async function notifyAgent(endpoint, path, payload, signingKey) {
|
|
|
136
97
|
const body = JSON.stringify(payload);
|
|
137
98
|
const headers = { "Content-Type": "application/json" };
|
|
138
99
|
if (signingKey) {
|
|
139
|
-
const wallet = new
|
|
100
|
+
const wallet = new ethers.Wallet(signingKey);
|
|
140
101
|
const signature = await wallet.signMessage(body);
|
|
141
102
|
headers["X-ARC402-Signature"] = signature;
|
|
142
103
|
headers["X-ARC402-Signer"] = wallet.address;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-notify.js","sourceRoot":"","sources":["../src/endpoint-notify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"endpoint-notify.js","sourceRoot":"","sources":["../src/endpoint-notify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,50 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
const program_1 = require("./program");
|
|
38
|
-
const repl_1 = require("./repl");
|
|
39
|
-
const config_1 = require("./config");
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { createProgram } from "./program.js";
|
|
4
|
+
import { startREPL } from "./repl.js";
|
|
5
|
+
import { configExists, loadConfig, saveConfig } from "./config.js";
|
|
40
6
|
// ── Upgrade safety check ────────────────────────────────────────────────────
|
|
41
|
-
|
|
42
|
-
const currentVersion =
|
|
7
|
+
const _require = createRequire(import.meta.url);
|
|
8
|
+
const currentVersion = _require("../package.json").version;
|
|
43
9
|
function checkUpgrade() {
|
|
44
|
-
if (!
|
|
10
|
+
if (!configExists())
|
|
45
11
|
return;
|
|
46
12
|
try {
|
|
47
|
-
const config =
|
|
13
|
+
const config = loadConfig();
|
|
48
14
|
const prev = config.lastCliVersion;
|
|
49
15
|
if (prev && prev !== currentVersion) {
|
|
50
16
|
// Compare semver loosely — just print if different
|
|
@@ -52,7 +18,7 @@ function checkUpgrade() {
|
|
|
52
18
|
}
|
|
53
19
|
if (config.lastCliVersion !== currentVersion) {
|
|
54
20
|
// Never overwrite existing fields — only update lastCliVersion
|
|
55
|
-
|
|
21
|
+
saveConfig({ ...config, lastCliVersion: currentVersion });
|
|
56
22
|
}
|
|
57
23
|
}
|
|
58
24
|
catch {
|
|
@@ -63,7 +29,7 @@ const printMode = process.argv.includes("--print");
|
|
|
63
29
|
// Detect if a subcommand was provided (any arg after the binary that doesn't start with -)
|
|
64
30
|
const knownSubcommands = (() => {
|
|
65
31
|
try {
|
|
66
|
-
const prog =
|
|
32
|
+
const prog = createProgram();
|
|
67
33
|
return new Set(prog.commands.map((cmd) => cmd.name()));
|
|
68
34
|
}
|
|
69
35
|
catch {
|
|
@@ -80,30 +46,30 @@ if (printMode) {
|
|
|
80
46
|
process.env["FORCE_COLOR"] = "0";
|
|
81
47
|
process.env["ARC402_PRINT"] = "1";
|
|
82
48
|
checkUpgrade();
|
|
83
|
-
const program =
|
|
49
|
+
const program = createProgram();
|
|
84
50
|
void program.parseAsync(process.argv).then(() => process.exit(0)).catch((e) => {
|
|
85
51
|
console.error(e instanceof Error ? e.message : String(e));
|
|
86
52
|
process.exit(1);
|
|
87
53
|
});
|
|
88
54
|
}
|
|
89
55
|
else if (process.stdout.isTTY && !hasSubcommand && process.argv.length <= 2 && !process.env.ARC402_NO_TUI) {
|
|
90
|
-
// TTY with no subcommand — launch Ink TUI
|
|
56
|
+
// TTY with no subcommand — launch Ink TUI
|
|
91
57
|
checkUpgrade();
|
|
92
|
-
void
|
|
58
|
+
void import("./tui/index.js").then(({ launchTUI }) => launchTUI()).catch((e) => {
|
|
93
59
|
console.error("TUI failed to start:", e instanceof Error ? e.message : String(e));
|
|
94
60
|
// Fallback to REPL
|
|
95
|
-
void
|
|
61
|
+
void startREPL();
|
|
96
62
|
});
|
|
97
63
|
}
|
|
98
64
|
else if (process.argv.length <= 2) {
|
|
99
65
|
// No subcommand, not TTY — enter basic REPL fallback
|
|
100
66
|
checkUpgrade();
|
|
101
|
-
void
|
|
67
|
+
void startREPL();
|
|
102
68
|
}
|
|
103
69
|
else {
|
|
104
70
|
// One-shot mode — arc402 wallet deploy still works as usual
|
|
105
71
|
checkUpgrade();
|
|
106
|
-
const program =
|
|
72
|
+
const program = createProgram();
|
|
107
73
|
program.parse(process.argv);
|
|
108
74
|
}
|
|
109
75
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|