arc402-cli 0.7.4 → 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.map +1 -1
- package/dist/tui/App.js +44 -50
- 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.js +7 -13
- 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.js +5 -8
- 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.js +12 -18
- 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 +15 -10
- package/src/tui/Header.tsx +1 -1
- package/src/tui/InputLine.tsx +1 -1
- 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 +4 -4
- 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
package/dist/ui/spinner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAY,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,cAAc,GAAG;IACrB,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;CACjC,CAAC;AASF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAClC,OAAO;YACL,OAAO,CAAC,GAAY,IAAI,IAAI,GAAG;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,GAAY,IAAI,IAAI,GAAG;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,CAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,KAAI,CAAC;SACV,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAQ,GAAG,CAAC;QACxB,IAAI;QACJ,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO;QACL,OAAO,CAAC,GAAY;YAClB,QAAQ,CAAC,cAAc,CAAC;gBACtB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBACxB,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI;gBAC1B,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAY;YACf,QAAQ,CAAC,cAAc,CAAC;gBACtB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBACtB,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI;gBAC1B,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAY;YACjB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI;YACF,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/ui/tree.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.renderTree = renderTree;
|
|
4
|
-
const colors_1 = require("./colors");
|
|
5
|
-
function renderTree(items) {
|
|
1
|
+
import { c } from "./colors.js";
|
|
2
|
+
export function renderTree(items) {
|
|
6
3
|
items.forEach((item, i) => {
|
|
7
4
|
const isLast = item.last ?? (i === items.length - 1);
|
|
8
5
|
const branch = isLast ? "└" : "├";
|
|
9
6
|
const paddedLabel = item.label.padEnd(10);
|
|
10
|
-
console.log(` ${
|
|
7
|
+
console.log(` ${c.dim(branch)} ${c.dim(paddedLabel)} ${c.white(item.value)}`);
|
|
11
8
|
});
|
|
12
9
|
}
|
|
13
10
|
//# sourceMappingURL=tree.js.map
|
package/dist/ui/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAQhC,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/utils/format.js
CHANGED
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.getTrustTier = getTrustTier;
|
|
8
|
-
exports.agreementStatusLabel = agreementStatusLabel;
|
|
9
|
-
exports.colourStatus = colourStatus;
|
|
10
|
-
exports.printTable = printTable;
|
|
11
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
-
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
13
|
-
const sdk_1 = require("@arc402/sdk");
|
|
14
|
-
const truncateAddress = (address) => address.length <= 12 ? address : `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
15
|
-
exports.truncateAddress = truncateAddress;
|
|
16
|
-
const formatDate = (timestamp) => new Date(timestamp * 1000).toLocaleString();
|
|
17
|
-
exports.formatDate = formatDate;
|
|
18
|
-
function getTrustTier(score) {
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import Table from "cli-table3";
|
|
3
|
+
import { AgreementStatus, IdentityTier, ReputationSignalType } from "@arc402/sdk";
|
|
4
|
+
export const truncateAddress = (address) => address.length <= 12 ? address : `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
5
|
+
export const formatDate = (timestamp) => new Date(timestamp * 1000).toLocaleString();
|
|
6
|
+
export function getTrustTier(score) {
|
|
19
7
|
if (score >= 800)
|
|
20
8
|
return "Autonomous";
|
|
21
9
|
if (score >= 600)
|
|
@@ -26,35 +14,33 @@ function getTrustTier(score) {
|
|
|
26
14
|
return "Restricted";
|
|
27
15
|
return "Probationary";
|
|
28
16
|
}
|
|
29
|
-
function agreementStatusLabel(status) {
|
|
30
|
-
return
|
|
17
|
+
export function agreementStatusLabel(status) {
|
|
18
|
+
return AgreementStatus[status] ?? "UNKNOWN";
|
|
31
19
|
}
|
|
32
|
-
function colourStatus(status) {
|
|
20
|
+
export function colourStatus(status) {
|
|
33
21
|
const label = agreementStatusLabel(status);
|
|
34
22
|
switch (status) {
|
|
35
|
-
case
|
|
36
|
-
case
|
|
37
|
-
return
|
|
38
|
-
case
|
|
39
|
-
case
|
|
40
|
-
case
|
|
41
|
-
return
|
|
42
|
-
case
|
|
43
|
-
return
|
|
44
|
-
case
|
|
45
|
-
case
|
|
46
|
-
case
|
|
47
|
-
return
|
|
23
|
+
case AgreementStatus.PROPOSED:
|
|
24
|
+
case AgreementStatus.REVISION_REQUESTED:
|
|
25
|
+
return chalk.yellow(label);
|
|
26
|
+
case AgreementStatus.ACCEPTED:
|
|
27
|
+
case AgreementStatus.REVISED:
|
|
28
|
+
case AgreementStatus.PENDING_VERIFICATION:
|
|
29
|
+
return chalk.blue(label);
|
|
30
|
+
case AgreementStatus.FULFILLED:
|
|
31
|
+
return chalk.green(label);
|
|
32
|
+
case AgreementStatus.DISPUTED:
|
|
33
|
+
case AgreementStatus.ESCALATED_TO_HUMAN:
|
|
34
|
+
case AgreementStatus.ESCALATED_TO_ARBITRATION:
|
|
35
|
+
return chalk.red(label);
|
|
48
36
|
default:
|
|
49
|
-
return
|
|
37
|
+
return chalk.gray(label);
|
|
50
38
|
}
|
|
51
39
|
}
|
|
52
|
-
const identityTierLabel = (tier) =>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
function printTable(head, rows) {
|
|
57
|
-
const table = new cli_table3_1.default({ head: head.map((value) => chalk_1.default.cyan(value)), style: { head: [], border: [] } });
|
|
40
|
+
export const identityTierLabel = (tier) => IdentityTier[tier] ?? "NONE";
|
|
41
|
+
export const reputationSignalLabel = (signal) => ReputationSignalType[signal] ?? "UNKNOWN";
|
|
42
|
+
export function printTable(head, rows) {
|
|
43
|
+
const table = new Table({ head: head.map((value) => chalk.cyan(value)), style: { head: [], border: [] } });
|
|
58
44
|
rows.forEach((row) => table.push(row));
|
|
59
45
|
console.log(table.toString());
|
|
60
46
|
}
|
package/dist/utils/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/hash.js
CHANGED
|
@@ -1,43 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.hashString = exports.hashFile = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const ethers_1 = require("ethers");
|
|
39
|
-
const hashFile = (filePath) => ethers_1.ethers.keccak256(fs.readFileSync(filePath));
|
|
40
|
-
exports.hashFile = hashFile;
|
|
41
|
-
const hashString = (value) => ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(value));
|
|
42
|
-
exports.hashString = hashString;
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import { ethers } from "ethers";
|
|
3
|
+
export const hashFile = (filePath) => ethers.keccak256(fs.readFileSync(filePath));
|
|
4
|
+
export const hashString = (value) => ethers.keccak256(ethers.toUtf8Bytes(value));
|
|
43
5
|
//# sourceMappingURL=hash.js.map
|
package/dist/utils/hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
package/dist/utils/time.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseDuration = parseDuration;
|
|
4
|
-
exports.formatDeadline = formatDeadline;
|
|
5
|
-
function parseDuration(duration) {
|
|
1
|
+
export function parseDuration(duration) {
|
|
6
2
|
const now = Math.floor(Date.now() / 1000);
|
|
7
3
|
const match = duration.match(/^(\d+)([hd])$/i);
|
|
8
4
|
if (!match)
|
|
@@ -10,7 +6,7 @@ function parseDuration(duration) {
|
|
|
10
6
|
const value = Number(match[1]);
|
|
11
7
|
return now + (match[2].toLowerCase() === "d" ? value * 86400 : value * 3600);
|
|
12
8
|
}
|
|
13
|
-
function formatDeadline(deadline) {
|
|
9
|
+
export function formatDeadline(deadline) {
|
|
14
10
|
const diff = deadline - Math.floor(Date.now() / 1000);
|
|
15
11
|
if (diff < 0)
|
|
16
12
|
return "EXPIRED";
|
package/dist/utils/time.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,0BAA0B,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC;AAChF,CAAC"}
|
package/dist/wallet-router.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ethers } from "ethers";
|
|
2
|
-
import { Arc402Config } from "./config";
|
|
2
|
+
import { Arc402Config } from "./config.js";
|
|
3
3
|
/**
|
|
4
4
|
* Attempts to decode a known ARC402Wallet custom error from a thrown error.
|
|
5
5
|
* If a recognized error is found, prints a human-readable message and exits.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-router.d.ts","sourceRoot":"","sources":["../src/wallet-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"wallet-router.d.ts","sourceRoot":"","sources":["../src/wallet-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA8C3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAyCnD;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAMnE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAS1D;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,qBAAqB,EAAE,MAAM,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,GAAE,MAAW,EAClB,aAAa,GAAE,MAA2B,EAC1C,iBAAiB,GAAE,MAAW,GAC7B,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAoB7C"}
|
package/dist/wallet-router.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.handleWalletError = handleWalletError;
|
|
4
|
-
exports.decodeWalletError = decodeWalletError;
|
|
5
|
-
exports.getEffectiveSender = getEffectiveSender;
|
|
6
|
-
exports.printSenderInfo = printSenderInfo;
|
|
7
|
-
exports.executeContractWriteViaWallet = executeContractWriteViaWallet;
|
|
8
|
-
const ethers_1 = require("ethers");
|
|
9
|
-
const abis_1 = require("./abis");
|
|
1
|
+
import { ethers } from "ethers";
|
|
2
|
+
import { ARC402_WALLET_EXECUTE_ABI } from "./abis.js";
|
|
10
3
|
// ─── ARC402Wallet custom error decoder ─────────────────────────────────────
|
|
11
|
-
const WALLET_CUSTOM_ERROR_IFACE = new
|
|
4
|
+
const WALLET_CUSTOM_ERROR_IFACE = new ethers.Interface([
|
|
12
5
|
"error WVel()",
|
|
13
6
|
"error WCtx()",
|
|
14
7
|
"error WAtt()",
|
|
@@ -43,7 +36,7 @@ const WALLET_ERROR_HELP = {
|
|
|
43
36
|
* If a recognized error is found, prints a human-readable message and exits.
|
|
44
37
|
* Otherwise, rethrows the original error.
|
|
45
38
|
*/
|
|
46
|
-
function handleWalletError(e) {
|
|
39
|
+
export function handleWalletError(e) {
|
|
47
40
|
// Extract revert data from various ethers v6 error shapes
|
|
48
41
|
let errorData;
|
|
49
42
|
if (e && typeof e === "object") {
|
|
@@ -104,26 +97,26 @@ const WALLET_ERROR_SELECTOR_MAP = {
|
|
|
104
97
|
* Decode a 4-byte ARC402Wallet custom error selector into a human-readable message.
|
|
105
98
|
* Returns null if the selector is not a known wallet error.
|
|
106
99
|
*/
|
|
107
|
-
function decodeWalletError(errorData) {
|
|
100
|
+
export function decodeWalletError(errorData) {
|
|
108
101
|
if (!errorData || errorData.length < 10)
|
|
109
102
|
return null;
|
|
110
103
|
const selector = errorData.slice(0, 10).toLowerCase();
|
|
111
104
|
return WALLET_ERROR_SELECTOR_MAP[selector] ?? null;
|
|
112
105
|
}
|
|
113
|
-
function getEffectiveSender(config) {
|
|
106
|
+
export function getEffectiveSender(config) {
|
|
114
107
|
if (config.walletContractAddress) {
|
|
115
108
|
return { address: config.walletContractAddress, useContract: true };
|
|
116
109
|
}
|
|
117
|
-
const wallet = new
|
|
110
|
+
const wallet = new ethers.Wallet(config.privateKey);
|
|
118
111
|
return { address: wallet.address, useContract: false };
|
|
119
112
|
}
|
|
120
|
-
function printSenderInfo(config) {
|
|
113
|
+
export function printSenderInfo(config) {
|
|
121
114
|
if (config.walletContractAddress) {
|
|
122
115
|
console.log(`Using ARC402Wallet: ${config.walletContractAddress}`);
|
|
123
116
|
console.log(`Policy enforcement active — transaction subject to configured limits`);
|
|
124
117
|
}
|
|
125
118
|
else {
|
|
126
|
-
const wallet = new
|
|
119
|
+
const wallet = new ethers.Wallet(config.privateKey);
|
|
127
120
|
console.log(`Using EOA wallet: ${wallet.address}`);
|
|
128
121
|
console.log(`Tip: run \`arc402 wallet deploy\` to enable spending limits and policy enforcement`);
|
|
129
122
|
}
|
|
@@ -132,10 +125,10 @@ function printSenderInfo(config) {
|
|
|
132
125
|
* Route a write transaction through the ARC402Wallet's executeContractCall when deployed,
|
|
133
126
|
* otherwise encode calldata directly against the target contract using the provided ABI.
|
|
134
127
|
*/
|
|
135
|
-
async function executeContractWriteViaWallet(walletContractAddress, signer, targetAddress, contractAbi, functionName, args, value = 0n, approvalToken =
|
|
136
|
-
const iface = new
|
|
128
|
+
export async function executeContractWriteViaWallet(walletContractAddress, signer, targetAddress, contractAbi, functionName, args, value = 0n, approvalToken = ethers.ZeroAddress, maxApprovalAmount = 0n) {
|
|
129
|
+
const iface = new ethers.Interface(contractAbi);
|
|
137
130
|
const data = iface.encodeFunctionData(functionName, args);
|
|
138
|
-
const walletContract = new
|
|
131
|
+
const walletContract = new ethers.Contract(walletContractAddress, ARC402_WALLET_EXECUTE_ABI, signer);
|
|
139
132
|
try {
|
|
140
133
|
return await walletContract.executeContractCall({
|
|
141
134
|
target: targetAddress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-router.js","sourceRoot":"","sources":["../src/wallet-router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wallet-router.js","sourceRoot":"","sources":["../src/wallet-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walletconnect-session.d.ts","sourceRoot":"","sources":["../src/walletconnect-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAc,MAAM,
|
|
1
|
+
{"version":3,"file":"walletconnect-session.d.ts","sourceRoot":"","sources":["../src/walletconnect-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMjG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAGhF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGzD"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadWCSession = loadWCSession;
|
|
4
|
-
exports.saveWCSession = saveWCSession;
|
|
5
|
-
exports.clearWCSession = clearWCSession;
|
|
6
|
-
const config_1 = require("./config");
|
|
1
|
+
import { saveConfig } from "./config.js";
|
|
7
2
|
/** Returns null if no session, expired, or wrong chainId. */
|
|
8
|
-
function loadWCSession(config, requiredChainId) {
|
|
3
|
+
export function loadWCSession(config, requiredChainId) {
|
|
9
4
|
if (!config.wcSession)
|
|
10
5
|
return null;
|
|
11
6
|
const now = Math.floor(Date.now() / 1000);
|
|
@@ -15,12 +10,12 @@ function loadWCSession(config, requiredChainId) {
|
|
|
15
10
|
return null;
|
|
16
11
|
return config.wcSession;
|
|
17
12
|
}
|
|
18
|
-
function saveWCSession(config, session) {
|
|
13
|
+
export function saveWCSession(config, session) {
|
|
19
14
|
config.wcSession = session;
|
|
20
|
-
|
|
15
|
+
saveConfig(config);
|
|
21
16
|
}
|
|
22
|
-
function clearWCSession(config) {
|
|
17
|
+
export function clearWCSession(config) {
|
|
23
18
|
delete config.wcSession;
|
|
24
|
-
|
|
19
|
+
saveConfig(config);
|
|
25
20
|
}
|
|
26
21
|
//# sourceMappingURL=walletconnect-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walletconnect-session.js","sourceRoot":"","sources":["../src/walletconnect-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"walletconnect-session.js","sourceRoot":"","sources":["../src/walletconnect-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AASvD,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,eAAuB;IACzE,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,MAAM,CAAC,SAA0B,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,OAAsB;IACxE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,SAAS,CAAC;IACxB,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC"}
|
package/dist/walletconnect.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SignClient } from "@walletconnect/sign-client";
|
|
2
|
-
import { Arc402Config } from "./config";
|
|
2
|
+
import { Arc402Config } from "./config.js";
|
|
3
3
|
export type TelegramOpts = {
|
|
4
4
|
botToken: string;
|
|
5
5
|
chatId: string;
|
|
@@ -12,10 +12,15 @@ type WCSession = ReturnType<SignClientT["session"]["get"]>;
|
|
|
12
12
|
* On fresh connect, shows deep links + QR and waits for WC approval.
|
|
13
13
|
* Saves session to config after a successful fresh pairing.
|
|
14
14
|
*/
|
|
15
|
+
export type WCCallbacks = {
|
|
16
|
+
onUri?: (uri: string, links: Record<string, string>) => void;
|
|
17
|
+
onStatus?: (status: "connecting" | "connected" | "chain-switching" | "ready" | "error", detail?: string) => void;
|
|
18
|
+
};
|
|
15
19
|
export declare function connectPhoneWallet(projectId: string, chainId: number, config: Arc402Config, opts?: {
|
|
16
20
|
telegramOpts?: TelegramOpts;
|
|
17
21
|
prompt?: string;
|
|
18
22
|
hardware?: boolean;
|
|
23
|
+
callbacks?: WCCallbacks;
|
|
19
24
|
}): Promise<{
|
|
20
25
|
client: SignClientT;
|
|
21
26
|
session: WCSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walletconnect.d.ts","sourceRoot":"","sources":["../src/walletconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"walletconnect.d.ts","sourceRoot":"","sources":["../src/walletconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAGF,KAAK,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,KAAK,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AA2B3D;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,OAAO,GAAG,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClH,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,GACnG,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyIvE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,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,EACd,YAAY,CAAC,EAAE,YAAY,EAC3B,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuE9C"}
|
package/dist/walletconnect.js
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports.requestPhoneWalletSignature = requestPhoneWalletSignature;
|
|
9
|
-
const sign_client_1 = require("@walletconnect/sign-client");
|
|
10
|
-
const keyvaluestorage_1 = require("@walletconnect/keyvaluestorage");
|
|
11
|
-
const qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const os_1 = __importDefault(require("os"));
|
|
14
|
-
const walletconnect_session_1 = require("./walletconnect-session");
|
|
15
|
-
const telegram_notify_1 = require("./telegram-notify");
|
|
1
|
+
import { SignClient } from "@walletconnect/sign-client";
|
|
2
|
+
import { KeyValueStorage } from "@walletconnect/keyvaluestorage";
|
|
3
|
+
import qrcode from "qrcode-terminal";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import os from "os";
|
|
6
|
+
import { loadWCSession, saveWCSession, clearWCSession } from "./walletconnect-session.js";
|
|
7
|
+
import { sendWalletConnectApprovalButton } from "./telegram-notify.js";
|
|
16
8
|
// Suppress unhandled rejections from stale WalletConnect sessions (known SDK issue)
|
|
17
9
|
process.on("unhandledRejection", (reason) => {
|
|
18
10
|
const msg = reason instanceof Error ? reason.message : String(reason);
|
|
@@ -21,9 +13,9 @@ process.on("unhandledRejection", (reason) => {
|
|
|
21
13
|
console.error("Unhandled rejection:", msg);
|
|
22
14
|
});
|
|
23
15
|
async function makeSignClient(projectId) {
|
|
24
|
-
const storageDir =
|
|
25
|
-
const storagePath =
|
|
26
|
-
return
|
|
16
|
+
const storageDir = path.join(os.homedir(), ".arc402");
|
|
17
|
+
const storagePath = path.join(storageDir, "wc-storage.json");
|
|
18
|
+
return SignClient.init({
|
|
27
19
|
projectId,
|
|
28
20
|
metadata: {
|
|
29
21
|
name: "ARC-402 CLI",
|
|
@@ -31,7 +23,7 @@ async function makeSignClient(projectId) {
|
|
|
31
23
|
url: "https://app.arc402.xyz",
|
|
32
24
|
icons: [],
|
|
33
25
|
},
|
|
34
|
-
storage: new
|
|
26
|
+
storage: new KeyValueStorage({ database: storagePath }),
|
|
35
27
|
});
|
|
36
28
|
}
|
|
37
29
|
function walletLinks(encodedUri) {
|
|
@@ -43,15 +35,10 @@ function walletLinks(encodedUri) {
|
|
|
43
35
|
"Rainbow": `rainbow://wc?uri=${encodedUri}`,
|
|
44
36
|
};
|
|
45
37
|
}
|
|
46
|
-
|
|
47
|
-
* Step 1 of the two-step flow: connect the phone wallet (or resume a valid session).
|
|
48
|
-
* On fresh connect, shows deep links + QR and waits for WC approval.
|
|
49
|
-
* Saves session to config after a successful fresh pairing.
|
|
50
|
-
*/
|
|
51
|
-
async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
38
|
+
export async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
52
39
|
const client = await makeSignClient(projectId);
|
|
53
40
|
// Try to restore an existing valid session
|
|
54
|
-
const stored =
|
|
41
|
+
const stored = loadWCSession(config, chainId);
|
|
55
42
|
if (stored) {
|
|
56
43
|
try {
|
|
57
44
|
const session = client.session.get(stored.topic);
|
|
@@ -66,7 +53,7 @@ async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
|
66
53
|
}
|
|
67
54
|
catch {
|
|
68
55
|
// Session stale or timed out — clear locally and do fresh pairing
|
|
69
|
-
|
|
56
|
+
clearWCSession(config);
|
|
70
57
|
try {
|
|
71
58
|
await client.disconnect({ topic: stored.topic, reason: { code: 6000, message: "session stale" } });
|
|
72
59
|
}
|
|
@@ -87,7 +74,13 @@ async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
|
87
74
|
throw new Error("Failed to create WalletConnect session");
|
|
88
75
|
const encodedUri = encodeURIComponent(uri);
|
|
89
76
|
const displayPrompt = opts?.prompt ?? "Connect your phone wallet";
|
|
90
|
-
|
|
77
|
+
const cbs = opts?.callbacks;
|
|
78
|
+
if (cbs?.onUri) {
|
|
79
|
+
// Callback mode — let the caller handle rendering (e.g. Ink TUI)
|
|
80
|
+
cbs.onUri(uri, walletLinks(encodedUri));
|
|
81
|
+
cbs.onStatus?.("connecting");
|
|
82
|
+
}
|
|
83
|
+
else if (opts?.hardware) {
|
|
91
84
|
console.log("\n─────────────────────────────────────────────────────");
|
|
92
85
|
console.log("Paste this URI into Ledger Live, Trezor Suite, or any WalletConnect-compatible signer:\n");
|
|
93
86
|
console.log(uri);
|
|
@@ -103,12 +96,12 @@ async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
|
103
96
|
console.log(`${name}:\n${link}\n`);
|
|
104
97
|
}
|
|
105
98
|
console.log("Or scan QR:");
|
|
106
|
-
|
|
99
|
+
qrcode.generate(uri, { small: true });
|
|
107
100
|
console.log("\nWaiting for approval...");
|
|
108
101
|
}
|
|
109
102
|
const telegramOpts = opts?.hardware ? undefined : opts?.telegramOpts;
|
|
110
103
|
if (telegramOpts) {
|
|
111
|
-
await
|
|
104
|
+
await sendWalletConnectApprovalButton({
|
|
112
105
|
botToken: telegramOpts.botToken,
|
|
113
106
|
chatId: telegramOpts.chatId,
|
|
114
107
|
threadId: telegramOpts.threadId,
|
|
@@ -123,9 +116,11 @@ async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
|
123
116
|
}
|
|
124
117
|
const session = await approval();
|
|
125
118
|
const account = session.namespaces.eip155.accounts[0].split(":")[2];
|
|
119
|
+
cbs?.onStatus?.("connected", account);
|
|
126
120
|
// Ensure wallet is on the correct chain before sending any tx
|
|
127
121
|
const hexChainId = `0x${chainId.toString(16)}`;
|
|
128
122
|
const networkName = chainId === 8453 ? "Base" : chainId === 84532 ? "Base Sepolia" : `chain ${chainId}`;
|
|
123
|
+
cbs?.onStatus?.("chain-switching", networkName);
|
|
129
124
|
// First try adding the chain (MetaMask ignores if already added)
|
|
130
125
|
if (chainId === 8453) {
|
|
131
126
|
try {
|
|
@@ -160,21 +155,23 @@ async function connectPhoneWallet(projectId, chainId, config, opts) {
|
|
|
160
155
|
}
|
|
161
156
|
}
|
|
162
157
|
if (!chainSwitched) {
|
|
158
|
+
cbs?.onStatus?.("error", `Could not auto-switch to ${networkName}`);
|
|
163
159
|
console.log(`\n⚠ Could not auto-switch to ${networkName}. IMPORTANT: Switch to ${networkName} in your wallet NOW before approving the next transaction.`);
|
|
164
160
|
console.log(` Otherwise the transaction will go to Ethereum mainnet and fail.`);
|
|
165
161
|
// Give user 5 seconds to read the warning and switch
|
|
166
162
|
await new Promise(r => setTimeout(r, 5000));
|
|
167
163
|
}
|
|
164
|
+
cbs?.onStatus?.("ready", account);
|
|
168
165
|
// Persist session (WC sessions last 7 days by default)
|
|
169
166
|
const expiry = Math.floor(Date.now() / 1000) + 7 * 24 * 60 * 60;
|
|
170
|
-
|
|
167
|
+
saveWCSession(config, { topic: session.topic, expiry, account, chainId });
|
|
171
168
|
return { client, session, account };
|
|
172
169
|
}
|
|
173
170
|
/**
|
|
174
171
|
* Step 2 of the two-step flow: send a transaction with an established session.
|
|
175
172
|
* Returns the transaction hash.
|
|
176
173
|
*/
|
|
177
|
-
async function sendTransactionWithSession(client, session, account, chainId, tx) {
|
|
174
|
+
export async function sendTransactionWithSession(client, session, account, chainId, tx) {
|
|
178
175
|
return client.request({
|
|
179
176
|
topic: session.topic,
|
|
180
177
|
chainId: `eip155:${chainId}`,
|
|
@@ -188,7 +185,7 @@ async function sendTransactionWithSession(client, session, account, chainId, tx)
|
|
|
188
185
|
* Convenience wrapper: connect + send in one call.
|
|
189
186
|
* Used by commands that haven't been split into two steps (e.g. policy set-limit).
|
|
190
187
|
*/
|
|
191
|
-
async function requestPhoneWalletSignature(projectId, chainId, buildTx, prompt, telegramOpts, config) {
|
|
188
|
+
export async function requestPhoneWalletSignature(projectId, chainId, buildTx, prompt, telegramOpts, config) {
|
|
192
189
|
if (!config) {
|
|
193
190
|
// Legacy path: no session persistence, disconnect after use
|
|
194
191
|
const client = await makeSignClient(projectId);
|
|
@@ -211,10 +208,10 @@ async function requestPhoneWalletSignature(projectId, chainId, buildTx, prompt,
|
|
|
211
208
|
for (const [name, link] of Object.entries(links))
|
|
212
209
|
console.log(`${name}:\n${link}\n`);
|
|
213
210
|
console.log("Or scan QR:");
|
|
214
|
-
|
|
211
|
+
qrcode.generate(uri, { small: true });
|
|
215
212
|
console.log("\nWaiting for approval...");
|
|
216
213
|
if (telegramOpts) {
|
|
217
|
-
await
|
|
214
|
+
await sendWalletConnectApprovalButton({
|
|
218
215
|
botToken: telegramOpts.botToken,
|
|
219
216
|
chatId: telegramOpts.chatId,
|
|
220
217
|
threadId: telegramOpts.threadId,
|