arc402-cli 1.8.6 → 1.8.8
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/dist/commands/telegram.d.ts +3 -0
- package/dist/commands/telegram.d.ts.map +1 -0
- package/dist/commands/telegram.js +147 -0
- package/dist/commands/telegram.js.map +1 -0
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +18 -0
- package/dist/commands/wallet.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +2 -0
- package/dist/program.js.map +1 -1
- package/package.json +1 -1
- package/dist/tui-esm/App.js +0 -136
- package/dist/tui-esm/App.js.map +0 -1
- package/dist/tui-esm/Footer.js +0 -13
- package/dist/tui-esm/Footer.js.map +0 -1
- package/dist/tui-esm/Header.js +0 -19
- package/dist/tui-esm/Header.js.map +0 -1
- package/dist/tui-esm/InputLine.js +0 -121
- package/dist/tui-esm/InputLine.js.map +0 -1
- package/dist/tui-esm/Viewport.js +0 -39
- package/dist/tui-esm/Viewport.js.map +0 -1
- package/dist/tui-esm/WalletConnectPairing.js +0 -61
- package/dist/tui-esm/WalletConnectPairing.js.map +0 -1
- package/dist/tui-esm/command-catalog.js +0 -20
- package/dist/tui-esm/command-catalog.js.map +0 -1
- package/dist/tui-esm/command-renderers.js +0 -180
- package/dist/tui-esm/command-renderers.js.map +0 -1
- package/dist/tui-esm/commerce-format.js +0 -19
- package/dist/tui-esm/commerce-format.js.map +0 -1
- package/dist/tui-esm/components/Button.js +0 -21
- package/dist/tui-esm/components/Button.js.map +0 -1
- package/dist/tui-esm/components/CeremonyView.js +0 -10
- package/dist/tui-esm/components/CeremonyView.js.map +0 -1
- package/dist/tui-esm/components/CompletionDropdown.js +0 -23
- package/dist/tui-esm/components/CompletionDropdown.js.map +0 -1
- package/dist/tui-esm/components/ConfirmPrompt.js +0 -10
- package/dist/tui-esm/components/ConfirmPrompt.js.map +0 -1
- package/dist/tui-esm/components/CustomTextInput.js +0 -99
- package/dist/tui-esm/components/CustomTextInput.js.map +0 -1
- package/dist/tui-esm/components/InteractiveTable.js +0 -61
- package/dist/tui-esm/components/InteractiveTable.js.map +0 -1
- package/dist/tui-esm/components/StepSpinner.js +0 -32
- package/dist/tui-esm/components/StepSpinner.js.map +0 -1
- package/dist/tui-esm/components/Toast.js +0 -29
- package/dist/tui-esm/components/Toast.js.map +0 -1
- package/dist/tui-esm/components/commerce/AgreementList.js +0 -25
- package/dist/tui-esm/components/commerce/AgreementList.js.map +0 -1
- package/dist/tui-esm/components/commerce/ComputeCard.js +0 -9
- package/dist/tui-esm/components/commerce/ComputeCard.js.map +0 -1
- package/dist/tui-esm/components/commerce/DiscoverList.js +0 -14
- package/dist/tui-esm/components/commerce/DiscoverList.js.map +0 -1
- package/dist/tui-esm/components/commerce/HireCard.js +0 -11
- package/dist/tui-esm/components/commerce/HireCard.js.map +0 -1
- package/dist/tui-esm/components/commerce/RoundsList.js +0 -9
- package/dist/tui-esm/components/commerce/RoundsList.js.map +0 -1
- package/dist/tui-esm/components/commerce/SquadCard.js +0 -10
- package/dist/tui-esm/components/commerce/SquadCard.js.map +0 -1
- package/dist/tui-esm/components/commerce/StatusCard.js +0 -10
- package/dist/tui-esm/components/commerce/StatusCard.js.map +0 -1
- package/dist/tui-esm/components/commerce/SubscribeCard.js +0 -10
- package/dist/tui-esm/components/commerce/SubscribeCard.js.map +0 -1
- package/dist/tui-esm/components/commerce/WorkroomCard.js +0 -10
- package/dist/tui-esm/components/commerce/WorkroomCard.js.map +0 -1
- package/dist/tui-esm/components/commerce/common.js +0 -71
- package/dist/tui-esm/components/commerce/common.js.map +0 -1
- package/dist/tui-esm/components/commerce/index.js +0 -27
- package/dist/tui-esm/components/commerce/index.js.map +0 -1
- package/dist/tui-esm/index.js +0 -55
- package/dist/tui-esm/index.js.map +0 -1
- package/dist/tui-esm/kernel.js +0 -734
- package/dist/tui-esm/kernel.js.map +0 -1
- package/dist/tui-esm/render-inline.js +0 -32
- package/dist/tui-esm/render-inline.js.map +0 -1
- package/dist/tui-esm/useChat.js +0 -91
- package/dist/tui-esm/useChat.js.map +0 -1
- package/dist/tui-esm/useCommand.js +0 -142
- package/dist/tui-esm/useCommand.js.map +0 -1
- package/dist/tui-esm/useNotifications.js +0 -17
- package/dist/tui-esm/useNotifications.js.map +0 -1
- package/dist/tui-esm/useScroll.js +0 -46
- package/dist/tui-esm/useScroll.js.map +0 -1
- package/dist/tui-esm/useTerminalSize.js +0 -32
- package/dist/tui-esm/useTerminalSize.js.map +0 -1
- package/hermes/plugins/dist/arc402_hermes-1.0.0-py3-none-any.whl +0 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0.tar.gz +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/commands/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6G/D"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerTelegramCommands = registerTelegramCommands;
|
|
7
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
const colors_1 = require("../ui/colors");
|
|
11
|
+
async function telegramApi(botToken, method, body) {
|
|
12
|
+
const res = await fetch(`https://api.telegram.org/bot${botToken}/${method}`, {
|
|
13
|
+
method: body ? "POST" : "GET",
|
|
14
|
+
headers: body ? { "Content-Type": "application/json" } : undefined,
|
|
15
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
16
|
+
signal: AbortSignal.timeout(15000),
|
|
17
|
+
});
|
|
18
|
+
const json = await res.json();
|
|
19
|
+
return json;
|
|
20
|
+
}
|
|
21
|
+
async function validateBotToken(botToken) {
|
|
22
|
+
try {
|
|
23
|
+
const res = await telegramApi(botToken, "getMe");
|
|
24
|
+
if (!res.ok)
|
|
25
|
+
return { ok: false, error: res.description ?? "Telegram rejected the bot token." };
|
|
26
|
+
return { ok: true, username: res.result?.username };
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function sendTestMessage(botToken, chatId, threadId) {
|
|
33
|
+
try {
|
|
34
|
+
const res = await telegramApi(botToken, "sendMessage", {
|
|
35
|
+
chat_id: chatId,
|
|
36
|
+
...(threadId !== undefined ? { message_thread_id: threadId } : {}),
|
|
37
|
+
text: "🔧 ARC-402 CLI Telegram delivery test — approval prompts can be sent here.",
|
|
38
|
+
});
|
|
39
|
+
if (!res.ok || !res.result)
|
|
40
|
+
return { ok: false, error: res.description ?? "Telegram rejected the test message." };
|
|
41
|
+
return { ok: true, messageId: res.result.message_id };
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function registerTelegramCommands(program) {
|
|
48
|
+
const telegram = program.command("telegram").description("Configure Telegram delivery for WalletConnect approval prompts");
|
|
49
|
+
telegram.command("show")
|
|
50
|
+
.description("Show current Telegram delivery settings")
|
|
51
|
+
.action(() => {
|
|
52
|
+
const cfg = (0, config_1.loadConfig)();
|
|
53
|
+
console.log(JSON.stringify({
|
|
54
|
+
telegramBotToken: cfg.telegramBotToken ? "***configured***" : undefined,
|
|
55
|
+
telegramChatId: cfg.telegramChatId,
|
|
56
|
+
telegramThreadId: cfg.telegramThreadId,
|
|
57
|
+
}, null, 2));
|
|
58
|
+
});
|
|
59
|
+
telegram.command("init")
|
|
60
|
+
.description("Interactive setup for Telegram approval-button delivery")
|
|
61
|
+
.option("--bot-token <token>", "Telegram bot token from BotFather")
|
|
62
|
+
.option("--chat-id <id>", "Telegram chat ID, e.g. 123456789 or -100... for groups")
|
|
63
|
+
.option("--thread-id <id>", "Telegram topic/thread ID for forum groups")
|
|
64
|
+
.option("--skip-test", "Skip sending a Telegram test message")
|
|
65
|
+
.action(async (opts) => {
|
|
66
|
+
const existing = (0, config_1.loadConfig)();
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(chalk_1.default.white("Telegram approval-button setup"));
|
|
69
|
+
console.log(chalk_1.default.dim(" 1. Create a bot with @BotFather"));
|
|
70
|
+
console.log(chalk_1.default.dim(" 2. Add that bot to the target chat/group"));
|
|
71
|
+
console.log(chalk_1.default.dim(" 3. Paste the bot token + chat ID below"));
|
|
72
|
+
console.log(chalk_1.default.dim(" 4. Optional: add a forum topic/thread ID"));
|
|
73
|
+
console.log();
|
|
74
|
+
const answers = await (0, prompts_1.default)([
|
|
75
|
+
{
|
|
76
|
+
type: opts.botToken ? null : "text",
|
|
77
|
+
name: "botToken",
|
|
78
|
+
message: "Telegram bot token",
|
|
79
|
+
initial: existing.telegramBotToken,
|
|
80
|
+
validate: (value) => value.trim().length > 20 ? true : "Enter a valid bot token from BotFather.",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
type: opts.chatId ? null : "text",
|
|
84
|
+
name: "chatId",
|
|
85
|
+
message: "Telegram chat ID",
|
|
86
|
+
initial: existing.telegramChatId,
|
|
87
|
+
validate: (value) => value.trim() ? true : "Chat ID is required.",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
type: opts.threadId !== undefined ? null : "text",
|
|
91
|
+
name: "threadId",
|
|
92
|
+
message: "Telegram thread/topic ID (optional)",
|
|
93
|
+
initial: existing.telegramThreadId !== undefined ? String(existing.telegramThreadId) : undefined,
|
|
94
|
+
validate: (value) => !value.trim() || /^\d+$/.test(value.trim()) ? true : "Thread ID must be numeric.",
|
|
95
|
+
},
|
|
96
|
+
], {
|
|
97
|
+
onCancel: () => {
|
|
98
|
+
console.log(chalk_1.default.red("✗ Telegram setup cancelled"));
|
|
99
|
+
return true;
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
const botToken = (opts.botToken ?? answers.botToken ?? existing.telegramBotToken ?? "").trim();
|
|
103
|
+
const chatId = (opts.chatId ?? answers.chatId ?? existing.telegramChatId ?? "").trim();
|
|
104
|
+
const threadRaw = (opts.threadId ?? answers.threadId ?? "").trim();
|
|
105
|
+
const threadId = threadRaw ? Number(threadRaw) : undefined;
|
|
106
|
+
if (!botToken || !chatId) {
|
|
107
|
+
console.log(chalk_1.default.red("✗ Telegram setup incomplete"));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
process.stdout.write("Validating bot token… ");
|
|
111
|
+
const botCheck = await validateBotToken(botToken);
|
|
112
|
+
if (!botCheck.ok) {
|
|
113
|
+
console.log(chalk_1.default.red("failed"));
|
|
114
|
+
console.log(chalk_1.default.red(` ${botCheck.error}`));
|
|
115
|
+
console.log(chalk_1.default.dim(" Fix the bot token first, then rerun `arc402 telegram init`."));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
console.log(chalk_1.default.green(`✓ ${botCheck.username ? `@${botCheck.username}` : "bot ok"}`));
|
|
119
|
+
const cfg = {
|
|
120
|
+
...existing,
|
|
121
|
+
telegramBotToken: botToken,
|
|
122
|
+
telegramChatId: chatId,
|
|
123
|
+
...(threadId !== undefined ? { telegramThreadId: threadId } : {}),
|
|
124
|
+
};
|
|
125
|
+
if (threadId === undefined)
|
|
126
|
+
delete cfg.telegramThreadId;
|
|
127
|
+
(0, config_1.saveConfig)(cfg);
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(" " + colors_1.c.success + colors_1.c.white(" Telegram delivery saved"));
|
|
130
|
+
console.log(chalk_1.default.dim(" Chat ID ") + chalk_1.default.white(chatId));
|
|
131
|
+
console.log(chalk_1.default.dim(" Thread ID ") + chalk_1.default.white(threadId !== undefined ? String(threadId) : "(none)"));
|
|
132
|
+
console.log();
|
|
133
|
+
if (!opts.skipTest) {
|
|
134
|
+
process.stdout.write("Sending test message… ");
|
|
135
|
+
const test = await sendTestMessage(botToken, chatId, threadId);
|
|
136
|
+
if (!test.ok) {
|
|
137
|
+
console.log(chalk_1.default.red("failed"));
|
|
138
|
+
console.log(chalk_1.default.red(` ${test.error}`));
|
|
139
|
+
console.log(chalk_1.default.dim(" The config is saved, but Telegram delivery will not work until the bot can message that chat/topic."));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
console.log(chalk_1.default.green(`✓ message ${test.messageId}`));
|
|
143
|
+
}
|
|
144
|
+
console.log(chalk_1.default.dim(" Next: any WalletConnect-backed ARC-402 CLI command can now send approval prompts here."));
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/commands/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwrBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuuG7D"}
|
package/dist/commands/wallet.js
CHANGED
|
@@ -158,6 +158,13 @@ function getWalletAddressFromFactoryLogs(factoryInterface, logs) {
|
|
|
158
158
|
}
|
|
159
159
|
return null;
|
|
160
160
|
}
|
|
161
|
+
async function assertAddressHasCode(provider, address, label) {
|
|
162
|
+
const code = await provider.getCode(address);
|
|
163
|
+
if (code !== "0x")
|
|
164
|
+
return;
|
|
165
|
+
throw new Error(`${label} ${address} has no contract code. ` +
|
|
166
|
+
`This usually means an owner EOA was saved instead of the deployed ARC402Wallet contract.`);
|
|
167
|
+
}
|
|
161
168
|
// Standard onboarding categories required for a newly deployed wallet.
|
|
162
169
|
// These cover the full ARC-402 flow: spending, hiring, compute, research, protocol ops.
|
|
163
170
|
const ONBOARDING_CATEGORIES = [
|
|
@@ -1100,6 +1107,7 @@ function registerWalletCommands(program) {
|
|
|
1100
1107
|
console.error("UserOperation failed on-chain.");
|
|
1101
1108
|
process.exit(1);
|
|
1102
1109
|
}
|
|
1110
|
+
await assertAddressHasCode(provider, senderAddress, "Deployed wallet");
|
|
1103
1111
|
config.walletContractAddress = senderAddress;
|
|
1104
1112
|
config.ownerAddress = ownerAddress;
|
|
1105
1113
|
(0, config_1.saveConfig)(config);
|
|
@@ -1229,6 +1237,7 @@ function registerWalletCommands(program) {
|
|
|
1229
1237
|
console.error("Could not find WalletDeployed/WalletCreated event in receipt. Check the transaction on-chain.");
|
|
1230
1238
|
process.exit(1);
|
|
1231
1239
|
}
|
|
1240
|
+
await assertAddressHasCode(provider, deployedWallet, "Deployed wallet");
|
|
1232
1241
|
walletAddress = deployedWallet;
|
|
1233
1242
|
// ── Step 1 complete: save wallet + owner immediately ─────────────────
|
|
1234
1243
|
config.walletContractAddress = walletAddress;
|
|
@@ -1269,6 +1278,7 @@ function registerWalletCommands(program) {
|
|
|
1269
1278
|
deploySpinner.fail("Could not find WalletDeployed/WalletCreated event in receipt. Check the transaction on-chain.");
|
|
1270
1279
|
process.exit(1);
|
|
1271
1280
|
}
|
|
1281
|
+
await assertAddressHasCode(provider, walletAddress, "Deployed wallet");
|
|
1272
1282
|
deploySpinner.succeed("Wallet deployed");
|
|
1273
1283
|
// Generate guardian key (separate from hot key) and call setGuardian
|
|
1274
1284
|
const guardianWallet = ethers_1.ethers.Wallet.createRandom();
|
|
@@ -1327,6 +1337,14 @@ function registerWalletCommands(program) {
|
|
|
1327
1337
|
const policyAddress = resolvePolicyEngineAddress(config);
|
|
1328
1338
|
const chainId = config.network === "base-mainnet" ? 8453 : 84532;
|
|
1329
1339
|
const provider = new ethers_1.ethers.JsonRpcProvider(config.rpcUrl);
|
|
1340
|
+
try {
|
|
1341
|
+
await assertAddressHasCode(provider, walletAddress, "Configured walletContractAddress");
|
|
1342
|
+
}
|
|
1343
|
+
catch (error) {
|
|
1344
|
+
console.error(colors_1.c.failure + " " + colors_1.c.red(error instanceof Error ? error.message : String(error)));
|
|
1345
|
+
console.error(colors_1.c.dim("Tip: use the deployed wallet contract address, not the owner EOA, then rerun onboarding."));
|
|
1346
|
+
process.exit(1);
|
|
1347
|
+
}
|
|
1330
1348
|
// Resolve protocol contracts to whitelist
|
|
1331
1349
|
const handshakeAddress = config.handshakeAddress ??
|
|
1332
1350
|
config_1.NETWORK_DEFAULTS[config.network]?.handshakeAddress ??
|