@alchemy/cli 0.11.0 → 0.11.1
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/{auth-6X2DBBYQ.js → auth-AU7LPEQL.js} +2 -2
- package/dist/{chunk-KIYIW6SX.js → chunk-CJDHJYLM.js} +1 -1
- package/dist/{chunk-XZS6KZHN.js → chunk-ILPOKA4Y.js} +1 -1
- package/dist/{chunk-B5KVL3ZR.js → chunk-OL5MEN62.js} +6 -1
- package/dist/{chunk-CSBYGYG6.js → chunk-QWLBZTG5.js} +1 -1
- package/dist/{chunk-4QSVWWSK.js → chunk-SRGDGXY5.js} +1 -1
- package/dist/index.js +59 -25
- package/dist/{interactive-EXQM6HWQ.js → interactive-NPBITOGO.js} +3 -3
- package/dist/{onboarding-2FLKQYLY.js → onboarding-QOZOX4CZ.js} +2 -2
- package/dist/{policy-prompt-3EVE7DW3.js → policy-prompt-YU6L2VJZ.js} +2 -2
- package/dist/{resolve-FRMIY357.js → resolve-WXXPXPCU.js} +1 -1
- package/package.json +1 -1
|
@@ -3,10 +3,10 @@ if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
|
|
|
3
3
|
import {
|
|
4
4
|
registerAuth,
|
|
5
5
|
selectAppAfterAuth
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ILPOKA4Y.js";
|
|
7
7
|
import "./chunk-I6YQX7PF.js";
|
|
8
8
|
import "./chunk-RPSHRYCZ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-OL5MEN62.js";
|
|
10
10
|
import "./chunk-DXQAGBW6.js";
|
|
11
11
|
import "./chunk-LANOFNO6.js";
|
|
12
12
|
import "./chunk-5BEJA752.js";
|
|
@@ -624,6 +624,11 @@ var Client = class _Client {
|
|
|
624
624
|
if (networkNotEnabled) return networkNotEnabled;
|
|
625
625
|
return errInvalidAPIKey(detail || void 0);
|
|
626
626
|
}
|
|
627
|
+
isWrappedNetworkFailure(err) {
|
|
628
|
+
return err.status === void 0 && err.code === -32e3 && /\b(fetch failed|failed to fetch|network error|econnrefused|enotfound|etimedout|eai_again|socket hang up)\b/i.test(
|
|
629
|
+
err.message
|
|
630
|
+
);
|
|
631
|
+
}
|
|
627
632
|
tryParseRPCError(text) {
|
|
628
633
|
try {
|
|
629
634
|
const parsed = JSON.parse(text);
|
|
@@ -673,7 +678,7 @@ var Client = class _Client {
|
|
|
673
678
|
if (err.status !== void 0) {
|
|
674
679
|
throw errNetwork(`HTTP ${err.status}: ${err.message}`);
|
|
675
680
|
}
|
|
676
|
-
if (this.
|
|
681
|
+
if (this.isWrappedNetworkFailure(err)) {
|
|
677
682
|
throw errNetwork(err.message);
|
|
678
683
|
}
|
|
679
684
|
throw errRPC(err.code, err.message);
|
package/dist/index.js
CHANGED
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
errNotLoggedInForPolicyLookup,
|
|
6
6
|
errSponsorshipNeedsPolicy,
|
|
7
7
|
selectOrCreatePolicy
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-CJDHJYLM.js";
|
|
9
9
|
import {
|
|
10
10
|
registerAuth
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ILPOKA4Y.js";
|
|
12
12
|
import {
|
|
13
13
|
openBrowser
|
|
14
14
|
} from "./chunk-I6YQX7PF.js";
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
getSetupStatus,
|
|
19
19
|
isSetupComplete,
|
|
20
20
|
shouldRunOnboarding
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-QWLBZTG5.js";
|
|
22
22
|
import {
|
|
23
23
|
isInteractiveAllowed
|
|
24
24
|
} from "./chunk-RPSHRYCZ.js";
|
|
@@ -63,12 +63,12 @@ import {
|
|
|
63
63
|
updateSession,
|
|
64
64
|
validateNetwork,
|
|
65
65
|
walletNetworkToChain
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-OL5MEN62.js";
|
|
67
67
|
import {
|
|
68
68
|
getAvailableUpdate,
|
|
69
69
|
getUpdateStatus,
|
|
70
70
|
printUpdateNotice
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-SRGDGXY5.js";
|
|
72
72
|
import {
|
|
73
73
|
bold,
|
|
74
74
|
brand,
|
|
@@ -133,11 +133,13 @@ import {
|
|
|
133
133
|
isJSONMode,
|
|
134
134
|
isLocalhost,
|
|
135
135
|
isReplMode,
|
|
136
|
+
isRevealMode,
|
|
136
137
|
noColor,
|
|
137
138
|
parseBaseURLOverride,
|
|
138
139
|
printHuman,
|
|
139
140
|
printJSON,
|
|
140
141
|
quiet,
|
|
142
|
+
redactSensitiveText,
|
|
141
143
|
setFlags,
|
|
142
144
|
setNoColor,
|
|
143
145
|
timeout,
|
|
@@ -579,8 +581,8 @@ function registerConfig(program2) {
|
|
|
579
581
|
"Interactive policy selection requires an interactive terminal. Pass an ID: `alchemy config set evm-gas-policy-id <id>`."
|
|
580
582
|
);
|
|
581
583
|
}
|
|
582
|
-
const { selectOrCreatePolicy: selectOrCreatePolicy2 } = await import("./policy-prompt-
|
|
583
|
-
const { resolveNetwork: resolveNetwork2 } = await import("./resolve-
|
|
584
|
+
const { selectOrCreatePolicy: selectOrCreatePolicy2 } = await import("./policy-prompt-YU6L2VJZ.js");
|
|
585
|
+
const { resolveNetwork: resolveNetwork2 } = await import("./resolve-WXXPXPCU.js");
|
|
584
586
|
const network = resolveNetwork2(program2);
|
|
585
587
|
await selectOrCreatePolicy2({
|
|
586
588
|
flavor: "sponsorship",
|
|
@@ -634,8 +636,8 @@ function registerConfig(program2) {
|
|
|
634
636
|
"Interactive policy selection requires an interactive terminal. Pass an ID: `alchemy config set solana-fee-policy-id <id>`."
|
|
635
637
|
);
|
|
636
638
|
}
|
|
637
|
-
const { selectOrCreatePolicy: selectOrCreatePolicy2 } = await import("./policy-prompt-
|
|
638
|
-
const { resolveSolanaNetwork: resolveSolanaNetwork2 } = await import("./resolve-
|
|
639
|
+
const { selectOrCreatePolicy: selectOrCreatePolicy2 } = await import("./policy-prompt-YU6L2VJZ.js");
|
|
640
|
+
const { resolveSolanaNetwork: resolveSolanaNetwork2 } = await import("./resolve-WXXPXPCU.js");
|
|
639
641
|
const network = resolveSolanaNetwork2(program2);
|
|
640
642
|
await selectOrCreatePolicy2({
|
|
641
643
|
flavor: "solana",
|
|
@@ -692,7 +694,7 @@ function registerConfig(program2) {
|
|
|
692
694
|
printJSON(toMap(cfg));
|
|
693
695
|
return;
|
|
694
696
|
}
|
|
695
|
-
const { resolveAuthToken: resolveAuthToken2 } = await import("./resolve-
|
|
697
|
+
const { resolveAuthToken: resolveAuthToken2 } = await import("./resolve-WXXPXPCU.js");
|
|
696
698
|
const validToken = resolveAuthToken2(cfg);
|
|
697
699
|
const authStatus = cfg.auth_token ? validToken ? `${green("\u2713")} authenticated${cfg.auth_token_expires_at ? ` ${dim(`(expires ${cfg.auth_token_expires_at})`)}` : ""}` : `${yellow("\u25C6")} expired${cfg.auth_token_expires_at ? ` ${dim(`(${cfg.auth_token_expires_at})`)}` : ""}` : dim("(not set) \u2014 run 'alchemy auth' to log in");
|
|
698
700
|
const pairs = [
|
|
@@ -827,12 +829,24 @@ function registerVersion(program2) {
|
|
|
827
829
|
}
|
|
828
830
|
|
|
829
831
|
// src/commands/apps.ts
|
|
832
|
+
function redactAppUrl(value) {
|
|
833
|
+
return isRevealMode() ? value : redactSensitiveText(value);
|
|
834
|
+
}
|
|
830
835
|
function maskAppSecrets(app) {
|
|
831
|
-
|
|
836
|
+
const masked = {
|
|
832
837
|
...app,
|
|
833
838
|
...app.apiKey !== void 0 && { apiKey: maskIf(app.apiKey) },
|
|
834
839
|
...app.webhookApiKey !== void 0 && { webhookApiKey: maskIf(app.webhookApiKey) }
|
|
835
840
|
};
|
|
841
|
+
if (app.chainNetworks !== void 0) {
|
|
842
|
+
masked.chainNetworks = app.chainNetworks.map((network) => ({
|
|
843
|
+
...network,
|
|
844
|
+
...network.rpcUrl !== void 0 && { rpcUrl: redactAppUrl(network.rpcUrl) },
|
|
845
|
+
...network.wsUrl !== void 0 && { wsUrl: redactAppUrl(network.wsUrl) },
|
|
846
|
+
...network.grpcUrl !== void 0 && { grpcUrl: redactAppUrl(network.grpcUrl) }
|
|
847
|
+
}));
|
|
848
|
+
}
|
|
849
|
+
return masked;
|
|
836
850
|
}
|
|
837
851
|
function printFetchSummary(appsCount, pagesCount, opts) {
|
|
838
852
|
const suffix = opts?.suffix ? ` ${opts.suffix}` : "";
|
|
@@ -3164,6 +3178,24 @@ function resolveWebhookApiKey(opts) {
|
|
|
3164
3178
|
const cfg = load();
|
|
3165
3179
|
return opts?.webhookApiKey || opts?.notifyToken || process.env.ALCHEMY_WEBHOOK_API_KEY || process.env.ALCHEMY_NOTIFY_AUTH_TOKEN || cfg.webhook_api_key || cfg.app?.webhookApiKey;
|
|
3166
3180
|
}
|
|
3181
|
+
function isWebhookSigningKey(key) {
|
|
3182
|
+
const normalized = key.replace(/[^a-z0-9]/gi, "").toLowerCase();
|
|
3183
|
+
return (normalized.includes("signing") || normalized.includes("hmac")) && (normalized.includes("key") || normalized.includes("secret"));
|
|
3184
|
+
}
|
|
3185
|
+
function maskWebhookSecrets(value) {
|
|
3186
|
+
if (Array.isArray(value)) {
|
|
3187
|
+
return value.map(maskWebhookSecrets);
|
|
3188
|
+
}
|
|
3189
|
+
if (value && typeof value === "object") {
|
|
3190
|
+
return Object.fromEntries(
|
|
3191
|
+
Object.entries(value).map(([key, nested]) => [
|
|
3192
|
+
key,
|
|
3193
|
+
isWebhookSigningKey(key) && typeof nested === "string" ? maskIf(nested) : maskWebhookSecrets(nested)
|
|
3194
|
+
])
|
|
3195
|
+
);
|
|
3196
|
+
}
|
|
3197
|
+
return value;
|
|
3198
|
+
}
|
|
3167
3199
|
function registerWebhooks(program2) {
|
|
3168
3200
|
const cmd = program2.command("webhook").description("Notify API wrappers");
|
|
3169
3201
|
cmd.option("--webhook-api-key <key>", "Webhook API key").option("--notify-token <token>", "Deprecated alias for webhook API key");
|
|
@@ -3175,8 +3207,9 @@ function registerWebhooks(program2) {
|
|
|
3175
3207
|
"Webhooks fetched",
|
|
3176
3208
|
() => callNotify(token, "/team-webhooks")
|
|
3177
3209
|
);
|
|
3178
|
-
|
|
3179
|
-
|
|
3210
|
+
const output = maskWebhookSecrets(result);
|
|
3211
|
+
if (isJSONMode()) printJSON(output);
|
|
3212
|
+
else printSyntaxJSON(output);
|
|
3180
3213
|
} catch (err) {
|
|
3181
3214
|
exitWithError(err);
|
|
3182
3215
|
}
|
|
@@ -8360,13 +8393,7 @@ Examples:
|
|
|
8360
8393
|
return;
|
|
8361
8394
|
}
|
|
8362
8395
|
const client = clientFromFlags(program2);
|
|
8363
|
-
const parsed = params
|
|
8364
|
-
try {
|
|
8365
|
-
return JSON.parse(p);
|
|
8366
|
-
} catch {
|
|
8367
|
-
return p;
|
|
8368
|
-
}
|
|
8369
|
-
});
|
|
8396
|
+
const parsed = parseRPCParams(params);
|
|
8370
8397
|
debug(`rpc ${method} %o`, parsed);
|
|
8371
8398
|
const result = await withSpinner(
|
|
8372
8399
|
`Calling ${method}\u2026`,
|
|
@@ -8380,6 +8407,13 @@ Examples:
|
|
|
8380
8407
|
});
|
|
8381
8408
|
registerEvmRpcSurfaceCommands(program2, cmd);
|
|
8382
8409
|
}
|
|
8410
|
+
function parseRPCParams(params) {
|
|
8411
|
+
const parsed = parseCLIParams(params);
|
|
8412
|
+
if (parsed.length === 1 && Array.isArray(parsed[0])) {
|
|
8413
|
+
return parsed[0];
|
|
8414
|
+
}
|
|
8415
|
+
return parsed;
|
|
8416
|
+
}
|
|
8383
8417
|
function outputRpcHelp(cmd, method, params) {
|
|
8384
8418
|
if (method !== "help") {
|
|
8385
8419
|
return false;
|
|
@@ -10356,7 +10390,7 @@ async function flushProcessOutput() {
|
|
|
10356
10390
|
}
|
|
10357
10391
|
program.name("alchemy").description(
|
|
10358
10392
|
"The Alchemy CLI lets you query blockchain data, call JSON-RPC methods, and manage your Alchemy configuration."
|
|
10359
|
-
).version("0.11.
|
|
10393
|
+
).version("0.11.1", "-v, --version", "display CLI version").option("--api-key <key>", "Alchemy API key (env: ALCHEMY_API_KEY)").option(
|
|
10360
10394
|
"-n, --network <network>",
|
|
10361
10395
|
"Target network for networked commands"
|
|
10362
10396
|
).option("--x402", "Use x402 wallet-based gateway auth").option(
|
|
@@ -10543,11 +10577,11 @@ ${styledLine}`;
|
|
|
10543
10577
|
"wallet"
|
|
10544
10578
|
];
|
|
10545
10579
|
if (!skipAppPrompt.includes(cmdName) && isInteractiveAllowed(program) && !opts.apiKey && !process.env.ALCHEMY_API_KEY) {
|
|
10546
|
-
const { resolveAuthToken: resolveAuthToken2 } = await import("./resolve-
|
|
10580
|
+
const { resolveAuthToken: resolveAuthToken2 } = await import("./resolve-WXXPXPCU.js");
|
|
10547
10581
|
const authToken = resolveAuthToken2(cfg);
|
|
10548
10582
|
const hasApiKey = Boolean(cfg.api_key?.trim() || cfg.app?.apiKey);
|
|
10549
10583
|
if (authToken && !hasApiKey) {
|
|
10550
|
-
const { selectAppAfterAuth } = await import("./auth-
|
|
10584
|
+
const { selectAppAfterAuth } = await import("./auth-AU7LPEQL.js");
|
|
10551
10585
|
console.log("");
|
|
10552
10586
|
console.log(` No app selected. Please select an app to continue.`);
|
|
10553
10587
|
await selectAppAfterAuth(authToken);
|
|
@@ -10582,7 +10616,7 @@ ${styledLine}`;
|
|
|
10582
10616
|
if (isInteractiveAllowed(program)) {
|
|
10583
10617
|
let latestForInteractiveStartup = null;
|
|
10584
10618
|
if (shouldRunOnboarding(program, cfg)) {
|
|
10585
|
-
const { runOnboarding } = await import("./onboarding-
|
|
10619
|
+
const { runOnboarding } = await import("./onboarding-QOZOX4CZ.js");
|
|
10586
10620
|
const latest = getAvailableUpdateOnce();
|
|
10587
10621
|
const completed = await runOnboarding(program, latest);
|
|
10588
10622
|
updateShownDuringInteractiveStartup = Boolean(latest);
|
|
@@ -10596,7 +10630,7 @@ ${styledLine}`;
|
|
|
10596
10630
|
latestForInteractiveStartup
|
|
10597
10631
|
);
|
|
10598
10632
|
}
|
|
10599
|
-
const { startREPL } = await import("./interactive-
|
|
10633
|
+
const { startREPL } = await import("./interactive-NPBITOGO.js");
|
|
10600
10634
|
program.exitOverride();
|
|
10601
10635
|
program.configureOutput({
|
|
10602
10636
|
writeErr: () => {
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
|
|
3
3
|
import {
|
|
4
4
|
getSetupMethod
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QWLBZTG5.js";
|
|
6
6
|
import "./chunk-RPSHRYCZ.js";
|
|
7
7
|
import {
|
|
8
8
|
getRPCNetworkIds
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-OL5MEN62.js";
|
|
10
10
|
import {
|
|
11
11
|
getUpdateNoticeLines
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-SRGDGXY5.js";
|
|
13
13
|
import {
|
|
14
14
|
bold,
|
|
15
15
|
brand,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
|
|
3
3
|
import {
|
|
4
4
|
getUpdateNoticeLines
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SRGDGXY5.js";
|
|
6
6
|
import {
|
|
7
7
|
bold,
|
|
8
8
|
brand,
|
|
@@ -51,7 +51,7 @@ async function runOnboarding(_program, latestUpdate = null) {
|
|
|
51
51
|
auth_token_expires_at: result.expiresAt
|
|
52
52
|
});
|
|
53
53
|
console.log(` ${green("\u2713")} Logged in successfully`);
|
|
54
|
-
const { selectAppAfterAuth } = await import("./auth-
|
|
54
|
+
const { selectAppAfterAuth } = await import("./auth-AU7LPEQL.js");
|
|
55
55
|
await selectAppAfterAuth(result.token);
|
|
56
56
|
return true;
|
|
57
57
|
} catch (err) {
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
errNotLoggedInForPolicyLookup,
|
|
6
6
|
errSponsorshipNeedsPolicy,
|
|
7
7
|
selectOrCreatePolicy
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-CJDHJYLM.js";
|
|
9
|
+
import "./chunk-OL5MEN62.js";
|
|
10
10
|
import "./chunk-DXQAGBW6.js";
|
|
11
11
|
import "./chunk-LANOFNO6.js";
|
|
12
12
|
import "./chunk-5BEJA752.js";
|