@alchemy/cli 0.7.3 → 0.7.4-alpha.37
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-GD7BJOMK.js → auth-D6CT363I.js} +2 -2
- package/dist/auth-R5QHPFMA.js +16 -0
- package/dist/{chunk-XSN4XA5Z.js → chunk-2OUAYCVA.js} +6 -6
- package/dist/{chunk-K6V3R7SH.js → chunk-5HYOZ773.js} +130 -8
- package/dist/{chunk-FD6YLNTB.js → chunk-6UHKZ5EN.js} +3 -3
- package/dist/{chunk-64A5W4M2.js → chunk-AUGBYMHT.js} +1 -1
- package/dist/{chunk-5IL2PMZ6.js → chunk-HR2UZ6ZU.js} +1 -1
- package/dist/{chunk-2BALTY22.js → chunk-MYHXAACL.js} +4 -4
- package/dist/{chunk-JUCUKTP3.js → chunk-PX2YJ7XC.js} +1 -1
- package/dist/{chunk-R4W44A6E.js → chunk-UYZH6GSY.js} +5 -5
- package/dist/{chunk-C5HNQOLB.js → chunk-WCZIVY4O.js} +1 -1
- package/dist/{errors-E2P6WHTX.js → errors-UL3W4ECQ.js} +1 -1
- package/dist/index.js +739 -214
- package/dist/{interactive-BNIJYEOV.js → interactive-Z2YHE6ME.js} +7 -7
- package/dist/{onboarding-TTUVIXM4.js → onboarding-Q5PBXH3M.js} +6 -6
- package/dist/{resolve-WXT5ZCUK.js → resolve-PAQKIAX3.js} +3 -3
- package/package.json +1 -1
- package/dist/auth-F2IXC6CM.js +0 -16
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
|
|
3
|
+
import {
|
|
4
|
+
registerAuth,
|
|
5
|
+
selectAppAfterAuth
|
|
6
|
+
} from "./chunk-2OUAYCVA.js";
|
|
7
|
+
import "./chunk-WCZIVY4O.js";
|
|
8
|
+
import "./chunk-AUGBYMHT.js";
|
|
9
|
+
import "./chunk-5HYOZ773.js";
|
|
10
|
+
import "./chunk-HR2UZ6ZU.js";
|
|
11
|
+
import "./chunk-PX2YJ7XC.js";
|
|
12
|
+
import "./chunk-MYHXAACL.js";
|
|
13
|
+
export {
|
|
14
|
+
registerAuth,
|
|
15
|
+
selectAppAfterAuth
|
|
16
|
+
};
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
completeLogin,
|
|
5
5
|
prepareLogin,
|
|
6
6
|
revokeToken
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WCZIVY4O.js";
|
|
8
8
|
import {
|
|
9
9
|
isInteractiveAllowed
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AUGBYMHT.js";
|
|
11
11
|
import {
|
|
12
12
|
AdminClient,
|
|
13
13
|
resolveAuthToken
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-5HYOZ773.js";
|
|
15
15
|
import {
|
|
16
16
|
bold,
|
|
17
17
|
brand,
|
|
@@ -20,13 +20,13 @@ import {
|
|
|
20
20
|
promptAutocomplete,
|
|
21
21
|
promptText,
|
|
22
22
|
withSpinner
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-HR2UZ6ZU.js";
|
|
24
24
|
import {
|
|
25
25
|
configPath,
|
|
26
26
|
load,
|
|
27
27
|
maskIf,
|
|
28
28
|
save
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-PX2YJ7XC.js";
|
|
30
30
|
import {
|
|
31
31
|
CLIError,
|
|
32
32
|
ErrorCode,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
exitWithError,
|
|
35
35
|
isJSONMode,
|
|
36
36
|
printHuman
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-MYHXAACL.js";
|
|
38
38
|
|
|
39
39
|
// src/commands/auth.ts
|
|
40
40
|
function registerAuth(program) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
configDir,
|
|
5
5
|
load,
|
|
6
6
|
save
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PX2YJ7XC.js";
|
|
8
8
|
import {
|
|
9
9
|
CLIError,
|
|
10
10
|
ErrorCode,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
parseBaseURLOverride,
|
|
30
30
|
redactSensitiveText,
|
|
31
31
|
verbose
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-MYHXAACL.js";
|
|
33
33
|
|
|
34
34
|
// src/lib/resolve.ts
|
|
35
35
|
import { readFileSync as readFileSync2 } from "fs";
|
|
@@ -884,7 +884,20 @@ var walletSessionEnvironmentSchema = z.object({
|
|
|
884
884
|
clientInstanceId: z.string().uuid().optional(),
|
|
885
885
|
clientInstanceName: z.string().min(1).max(64).optional()
|
|
886
886
|
}).strict();
|
|
887
|
+
var chainWalletSessionSchema = z.object({
|
|
888
|
+
sessionId: z.string().uuid(),
|
|
889
|
+
status: z.enum(["pending", "approved", "revoked", "expired"]),
|
|
890
|
+
expiresAt: z.string().datetime(),
|
|
891
|
+
chainType: z.enum(["evm", "solana"]),
|
|
892
|
+
walletId: z.string().min(1).optional(),
|
|
893
|
+
walletAddress: z.string().min(1).optional(),
|
|
894
|
+
providerKeyQuorumId: z.string().min(1).optional(),
|
|
895
|
+
providerSignerId: z.string().min(1).optional(),
|
|
896
|
+
capabilities: walletSessionCapabilitiesSchema.optional()
|
|
897
|
+
}).strict();
|
|
887
898
|
var walletSessionSchema = z.object({
|
|
899
|
+
version: z.number().int().positive().optional(),
|
|
900
|
+
connectionRequestId: z.string().min(1).optional(),
|
|
888
901
|
sessionId: z.string().uuid(),
|
|
889
902
|
status: z.enum(["pending", "approved", "revoked", "expired"]),
|
|
890
903
|
createdAt: z.string().datetime(),
|
|
@@ -903,7 +916,11 @@ var walletSessionSchema = z.object({
|
|
|
903
916
|
chainType: z.string().min(1).optional(),
|
|
904
917
|
backendBaseUrl: z.string().min(1).optional(),
|
|
905
918
|
environment: walletSessionEnvironmentSchema.optional(),
|
|
906
|
-
capabilities: walletSessionCapabilitiesSchema.optional()
|
|
919
|
+
capabilities: walletSessionCapabilitiesSchema.optional(),
|
|
920
|
+
sessionsByChain: z.object({
|
|
921
|
+
evm: chainWalletSessionSchema.optional(),
|
|
922
|
+
solana: chainWalletSessionSchema.optional()
|
|
923
|
+
}).strict().optional()
|
|
907
924
|
}).strict();
|
|
908
925
|
function sessionPath() {
|
|
909
926
|
return join(configDir(), SESSION_FILE);
|
|
@@ -911,7 +928,59 @@ function sessionPath() {
|
|
|
911
928
|
function parseStoredSession(value) {
|
|
912
929
|
const parsed = walletSessionSchema.safeParse(value);
|
|
913
930
|
if (!parsed.success) return null;
|
|
914
|
-
return parsed.data;
|
|
931
|
+
return withLegacyChainSessions(parsed.data);
|
|
932
|
+
}
|
|
933
|
+
function withLegacyChainSessions(session) {
|
|
934
|
+
if (session.sessionsByChain) {
|
|
935
|
+
return withCompatibilityAliases(session);
|
|
936
|
+
}
|
|
937
|
+
const chainType = session.chainType === "solana" ? "solana" : "evm";
|
|
938
|
+
const walletId = chainType === "solana" ? session.solanaWalletId ?? session.walletId : session.evmWalletId ?? session.walletId;
|
|
939
|
+
const walletAddress = chainType === "solana" ? session.solanaAddress : session.evmAddress;
|
|
940
|
+
return withCompatibilityAliases({
|
|
941
|
+
...session,
|
|
942
|
+
version: session.version ?? 1,
|
|
943
|
+
sessionsByChain: {
|
|
944
|
+
[chainType]: {
|
|
945
|
+
sessionId: session.sessionId,
|
|
946
|
+
status: session.status,
|
|
947
|
+
expiresAt: session.expiresAt,
|
|
948
|
+
chainType,
|
|
949
|
+
...walletId ? { walletId } : {},
|
|
950
|
+
...walletAddress ? { walletAddress } : {},
|
|
951
|
+
...session.privyKeyQuorumId ? { providerKeyQuorumId: session.privyKeyQuorumId } : {},
|
|
952
|
+
...session.privySignerId ? { providerSignerId: session.privySignerId } : {},
|
|
953
|
+
...session.capabilities ? { capabilities: session.capabilities } : {}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
});
|
|
957
|
+
}
|
|
958
|
+
function withCompatibilityAliases(session) {
|
|
959
|
+
const evm = session.sessionsByChain?.evm;
|
|
960
|
+
const solana = session.sessionsByChain?.solana;
|
|
961
|
+
const preferred = evm ?? solana;
|
|
962
|
+
if (!preferred) {
|
|
963
|
+
return session;
|
|
964
|
+
}
|
|
965
|
+
return {
|
|
966
|
+
...session,
|
|
967
|
+
sessionId: preferred.sessionId,
|
|
968
|
+
status: preferred.status,
|
|
969
|
+
expiresAt: preferred.expiresAt,
|
|
970
|
+
walletId: evm?.walletId ?? solana?.walletId ?? session.walletId,
|
|
971
|
+
evmWalletId: evm?.walletId ?? session.evmWalletId,
|
|
972
|
+
evmAddress: evm?.walletAddress ?? session.evmAddress,
|
|
973
|
+
solanaWalletId: solana?.walletId ?? session.solanaWalletId,
|
|
974
|
+
solanaAddress: solana?.walletAddress ?? session.solanaAddress,
|
|
975
|
+
privyKeyQuorumId: evm?.providerKeyQuorumId ?? solana?.providerKeyQuorumId ?? session.privyKeyQuorumId,
|
|
976
|
+
privySignerId: evm?.providerSignerId ?? solana?.providerSignerId ?? session.privySignerId,
|
|
977
|
+
chainType: evm && solana ? "both" : preferred.chainType,
|
|
978
|
+
capabilities: {
|
|
979
|
+
...evm?.capabilities ?? {},
|
|
980
|
+
...solana?.capabilities ?? {},
|
|
981
|
+
...session.capabilities ?? {}
|
|
982
|
+
}
|
|
983
|
+
};
|
|
915
984
|
}
|
|
916
985
|
function loadStoredSessionFromPath(path) {
|
|
917
986
|
if (!existsSync(path)) return null;
|
|
@@ -925,13 +994,23 @@ function isExpired(session) {
|
|
|
925
994
|
const expiresAt = new Date(session.expiresAt);
|
|
926
995
|
return !Number.isNaN(expiresAt.getTime()) && expiresAt <= /* @__PURE__ */ new Date();
|
|
927
996
|
}
|
|
997
|
+
function isSessionLoadable(session) {
|
|
998
|
+
if (session.sessionsByChain) {
|
|
999
|
+
return Object.values(session.sessionsByChain).some((chainSession) => {
|
|
1000
|
+
return Boolean(
|
|
1001
|
+
chainSession && chainSession.status !== "revoked" && !isExpired(chainSession)
|
|
1002
|
+
);
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
if (session.status === "revoked") return false;
|
|
1006
|
+
return !isExpired(session);
|
|
1007
|
+
}
|
|
928
1008
|
function createFileWalletSessionStore(path = sessionPath()) {
|
|
929
1009
|
return {
|
|
930
1010
|
load() {
|
|
931
1011
|
const session = loadStoredSessionFromPath(path);
|
|
932
1012
|
if (!session) return null;
|
|
933
|
-
if (session
|
|
934
|
-
if (isExpired(session)) return null;
|
|
1013
|
+
if (!isSessionLoadable(session)) return null;
|
|
935
1014
|
return session;
|
|
936
1015
|
},
|
|
937
1016
|
loadRaw() {
|
|
@@ -975,6 +1054,7 @@ function createPendingSession() {
|
|
|
975
1054
|
const now = /* @__PURE__ */ new Date();
|
|
976
1055
|
const expiresAt = new Date(now.getTime() + SESSION_TTL_DAYS * 24 * 60 * 60 * 1e3);
|
|
977
1056
|
const session = {
|
|
1057
|
+
version: 2,
|
|
978
1058
|
sessionId: randomUUID(),
|
|
979
1059
|
status: "pending",
|
|
980
1060
|
createdAt: now.toISOString(),
|
|
@@ -997,12 +1077,12 @@ function loadStoredSession() {
|
|
|
997
1077
|
return store.load();
|
|
998
1078
|
}
|
|
999
1079
|
function saveSession(session) {
|
|
1000
|
-
getWalletSessionStore().save(session);
|
|
1080
|
+
getWalletSessionStore().save(withCompatibilityAliases(session));
|
|
1001
1081
|
}
|
|
1002
1082
|
function updateSession(updates) {
|
|
1003
1083
|
const session = loadSession();
|
|
1004
1084
|
if (!session) return null;
|
|
1005
|
-
const updated = { ...session, ...updates };
|
|
1085
|
+
const updated = withCompatibilityAliases({ ...session, ...updates });
|
|
1006
1086
|
saveSession(updated);
|
|
1007
1087
|
return updated;
|
|
1008
1088
|
}
|
|
@@ -1010,11 +1090,52 @@ function clearSession() {
|
|
|
1010
1090
|
return getWalletSessionStore().clear();
|
|
1011
1091
|
}
|
|
1012
1092
|
function isSessionValid(session) {
|
|
1093
|
+
if (session.sessionsByChain) {
|
|
1094
|
+
return Object.values(session.sessionsByChain).some((chainSession) => {
|
|
1095
|
+
return Boolean(chainSession && isChainSessionValid(chainSession));
|
|
1096
|
+
});
|
|
1097
|
+
}
|
|
1013
1098
|
if (session.status !== "approved") return false;
|
|
1014
1099
|
const expiresAt = new Date(session.expiresAt);
|
|
1015
1100
|
if (Number.isNaN(expiresAt.getTime())) return false;
|
|
1016
1101
|
return expiresAt > /* @__PURE__ */ new Date();
|
|
1017
1102
|
}
|
|
1103
|
+
function isChainSessionValid(session) {
|
|
1104
|
+
if (session.status !== "approved") return false;
|
|
1105
|
+
const expiresAt = new Date(session.expiresAt);
|
|
1106
|
+
if (Number.isNaN(expiresAt.getTime())) return false;
|
|
1107
|
+
return expiresAt > /* @__PURE__ */ new Date();
|
|
1108
|
+
}
|
|
1109
|
+
function getWalletSessionByChain(session, chainType) {
|
|
1110
|
+
const chainSession = session.sessionsByChain?.[chainType];
|
|
1111
|
+
if (!chainSession) {
|
|
1112
|
+
if (!isSessionValid(session)) return null;
|
|
1113
|
+
if (chainType === "evm" && session.evmAddress) return session;
|
|
1114
|
+
if (chainType === "solana" && session.solanaAddress) return session;
|
|
1115
|
+
return null;
|
|
1116
|
+
}
|
|
1117
|
+
if (!isChainSessionValid(chainSession)) {
|
|
1118
|
+
return null;
|
|
1119
|
+
}
|
|
1120
|
+
return withCompatibilityAliases({
|
|
1121
|
+
...session,
|
|
1122
|
+
sessionId: chainSession.sessionId,
|
|
1123
|
+
status: chainSession.status,
|
|
1124
|
+
expiresAt: chainSession.expiresAt,
|
|
1125
|
+
walletId: chainSession.walletId,
|
|
1126
|
+
evmWalletId: chainType === "evm" ? chainSession.walletId : session.evmWalletId,
|
|
1127
|
+
evmAddress: chainType === "evm" ? chainSession.walletAddress : session.evmAddress,
|
|
1128
|
+
solanaWalletId: chainType === "solana" ? chainSession.walletId : session.solanaWalletId,
|
|
1129
|
+
solanaAddress: chainType === "solana" ? chainSession.walletAddress : session.solanaAddress,
|
|
1130
|
+
privyKeyQuorumId: chainSession.providerKeyQuorumId,
|
|
1131
|
+
privySignerId: chainSession.providerSignerId,
|
|
1132
|
+
chainType,
|
|
1133
|
+
capabilities: chainSession.capabilities ?? session.capabilities,
|
|
1134
|
+
sessionsByChain: {
|
|
1135
|
+
[chainType]: chainSession
|
|
1136
|
+
}
|
|
1137
|
+
});
|
|
1138
|
+
}
|
|
1018
1139
|
|
|
1019
1140
|
// src/lib/resolve.ts
|
|
1020
1141
|
function getCommandOptions(program) {
|
|
@@ -1249,6 +1370,7 @@ export {
|
|
|
1249
1370
|
updateSession,
|
|
1250
1371
|
clearSession,
|
|
1251
1372
|
isSessionValid,
|
|
1373
|
+
getWalletSessionByChain,
|
|
1252
1374
|
resolveAPIKey,
|
|
1253
1375
|
resolveAccessKey,
|
|
1254
1376
|
resolveNetwork,
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
|
|
3
3
|
import {
|
|
4
4
|
configPath
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PX2YJ7XC.js";
|
|
6
6
|
import {
|
|
7
7
|
esc
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MYHXAACL.js";
|
|
9
9
|
|
|
10
10
|
// src/lib/update-check.ts
|
|
11
11
|
import { execFileSync } from "child_process";
|
|
@@ -53,7 +53,7 @@ function semverLT(a, b) {
|
|
|
53
53
|
return false;
|
|
54
54
|
}
|
|
55
55
|
function currentVersion() {
|
|
56
|
-
return true ? "0.7.
|
|
56
|
+
return true ? "0.7.4-alpha.37" : "0.0.0";
|
|
57
57
|
}
|
|
58
58
|
function toUpdateStatus(latestVersion, checkedAt) {
|
|
59
59
|
const current = currentVersion();
|
|
@@ -448,8 +448,8 @@ function errAppRequired() {
|
|
|
448
448
|
function errWalletKeyRequired() {
|
|
449
449
|
return new CLIError(
|
|
450
450
|
ErrorCode.AUTH_REQUIRED,
|
|
451
|
-
"Wallet key required for x402. Set ALCHEMY_WALLET_KEY, run 'alchemy wallet connect --mode local
|
|
452
|
-
"alchemy wallet connect --mode local
|
|
451
|
+
"Wallet key required for x402. Set ALCHEMY_WALLET_KEY, run 'alchemy wallet connect --mode local', or use --wallet-key-file.",
|
|
452
|
+
"alchemy wallet connect --mode local"
|
|
453
453
|
);
|
|
454
454
|
}
|
|
455
455
|
function errSessionExpired() {
|
|
@@ -469,8 +469,8 @@ function errNoActiveSession() {
|
|
|
469
469
|
function errSolanaWalletKeyRequired() {
|
|
470
470
|
return new CLIError(
|
|
471
471
|
ErrorCode.AUTH_REQUIRED,
|
|
472
|
-
"Solana wallet key required. Set ALCHEMY_SOLANA_WALLET_KEY, run 'alchemy wallet connect --mode local
|
|
473
|
-
"alchemy wallet connect --mode local
|
|
472
|
+
"Solana wallet key required. Set ALCHEMY_SOLANA_WALLET_KEY, run 'alchemy wallet connect --mode local', or use --solana-wallet-key-file.",
|
|
473
|
+
"alchemy wallet connect --mode local"
|
|
474
474
|
);
|
|
475
475
|
}
|
|
476
476
|
function errSolanaTransactionFailed(details) {
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
|
|
3
3
|
import {
|
|
4
4
|
isInteractiveAllowed
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-AUGBYMHT.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveAuthToken,
|
|
8
8
|
resolveWalletSession
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-5HYOZ773.js";
|
|
10
10
|
|
|
11
11
|
// src/lib/onboarding.ts
|
|
12
12
|
var SETUP_CAPABILITY_ORDER = [
|
|
@@ -74,14 +74,14 @@ function getSetupCapabilities(cfg) {
|
|
|
74
74
|
missing: hasLocalWallet || hasSessionWallet ? [] : ["wallet signer"],
|
|
75
75
|
nextCommands: hasLocalWallet || hasSessionWallet ? [] : [
|
|
76
76
|
"alchemy wallet connect",
|
|
77
|
-
"alchemy wallet connect --mode local
|
|
77
|
+
"alchemy wallet connect --mode local"
|
|
78
78
|
]
|
|
79
79
|
}),
|
|
80
80
|
x402: capabilityStatus({
|
|
81
81
|
complete: x402Ready,
|
|
82
82
|
satisfiedBy: x402Ready ? "x402_wallet" : null,
|
|
83
83
|
missing: x402Ready ? [] : ["x402 enabled with wallet key file"],
|
|
84
|
-
nextCommands: x402Ready ? [] : ["alchemy wallet connect --mode local
|
|
84
|
+
nextCommands: x402Ready ? [] : ["alchemy wallet connect --mode local && alchemy config set x402 true"]
|
|
85
85
|
})
|
|
86
86
|
};
|
|
87
87
|
}
|
|
@@ -115,7 +115,7 @@ function getSetupStatus(cfg) {
|
|
|
115
115
|
"alchemy auth",
|
|
116
116
|
"alchemy config set app",
|
|
117
117
|
"alchemy config set access-key <key> && alchemy config set app <app-id>",
|
|
118
|
-
"alchemy wallet connect --mode local
|
|
118
|
+
"alchemy wallet connect --mode local && alchemy config set x402 true"
|
|
119
119
|
],
|
|
120
120
|
capabilities
|
|
121
121
|
};
|