seamless-cli 0.12.1 → 0.13.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/README.md +98 -26
- package/dist/commands/check.js +67 -42
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.js +7 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/helpTopics.js +28 -11
- package/dist/commands/helpTopics.js.map +1 -1
- package/dist/commands/init.js +71 -42
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/sessions.js +8 -3
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/users.js +20 -7
- package/dist/commands/users.js.map +1 -1
- package/dist/commands/verify.js +3 -2
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/whoami.js +21 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/core/admin.js +9 -2
- package/dist/core/admin.js.map +1 -1
- package/dist/core/authClient.js +71 -5
- package/dist/core/authClient.js.map +1 -1
- package/dist/core/config.js +55 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/errors.js +32 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/fetch.js +17 -1
- package/dist/core/fetch.js.map +1 -1
- package/dist/core/images.js +6 -0
- package/dist/core/images.js.map +1 -1
- package/dist/core/interactiveLogin.js +12 -13
- package/dist/core/interactiveLogin.js.map +1 -1
- package/dist/core/jwksKid.js +40 -0
- package/dist/core/jwksKid.js.map +1 -0
- package/dist/core/keychain.js +13 -26
- package/dist/core/keychain.js.map +1 -1
- package/dist/core/loginFlow.js +39 -14
- package/dist/core/loginFlow.js.map +1 -1
- package/dist/core/output.js +9 -29
- package/dist/core/output.js.map +1 -1
- package/dist/core/redact.js +68 -0
- package/dist/core/redact.js.map +1 -0
- package/dist/core/secrets.js +0 -3
- package/dist/core/secrets.js.map +1 -1
- package/dist/core/systemConfig.js +39 -4
- package/dist/core/systemConfig.js.map +1 -1
- package/dist/core/templates.js +6 -4
- package/dist/core/templates.js.map +1 -1
- package/dist/generators/admin/admin.js +102 -1
- package/dist/generators/admin/admin.js.map +1 -1
- package/dist/generators/auth/auth.js +2 -59
- package/dist/generators/auth/auth.js.map +1 -1
- package/dist/generators/docker/docker.js +0 -20
- package/dist/generators/docker/docker.js.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/prompts/projectSetup.js +1 -12
- package/dist/prompts/projectSetup.js.map +1 -1
- package/package.json +2 -2
- package/verify/docker-compose.verify.yml +22 -20
- package/dist/core/jwks.js +0 -19
- package/dist/core/jwks.js.map +0 -1
- package/dist/utils/writeEnv.js +0 -9
- package/dist/utils/writeEnv.js.map +0 -1
package/dist/commands/whoami.js
CHANGED
|
@@ -3,8 +3,10 @@ import { extractFlag } from "../core/args.js";
|
|
|
3
3
|
import { createAuthClient, createPortalClient, ReauthRequiredError, } from "../core/authClient.js";
|
|
4
4
|
import { fetchIdentity } from "../core/session.js";
|
|
5
5
|
import { getPortalSession } from "../core/config.js";
|
|
6
|
+
import { errorMessage } from "../core/errors.js";
|
|
6
7
|
export async function runWhoami(args) {
|
|
7
|
-
const { value: profileFlag } = extractFlag(args, "profile");
|
|
8
|
+
const { value: profileFlag, rest } = extractFlag(args, "profile");
|
|
9
|
+
const json = rest.includes("--json");
|
|
8
10
|
try {
|
|
9
11
|
// Without --profile this reports the portal account. An instance profile is
|
|
10
12
|
// still a useful answer when there is no portal session (a local-only or
|
|
@@ -15,17 +17,33 @@ export async function runWhoami(args) {
|
|
|
15
17
|
? await createAuthClient({ profileFlag })
|
|
16
18
|
: await createPortalClient();
|
|
17
19
|
const identity = await fetchIdentity(client);
|
|
18
|
-
|
|
20
|
+
const account = portal ? "Seamless portal" : client.profile.name;
|
|
21
|
+
if (json) {
|
|
22
|
+
printIdentityJson(account, client.profile, identity);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
printIdentity(account, client.profile, identity);
|
|
19
26
|
}
|
|
20
27
|
catch (err) {
|
|
21
28
|
if (err instanceof ReauthRequiredError) {
|
|
22
29
|
console.log(kleur.yellow(err.message));
|
|
23
30
|
process.exit(1);
|
|
24
31
|
}
|
|
25
|
-
console.error(kleur.red(err
|
|
32
|
+
console.error(kleur.red(errorMessage(err)));
|
|
26
33
|
process.exit(1);
|
|
27
34
|
}
|
|
28
35
|
}
|
|
36
|
+
// The same fields the table shows, as null rather than "(unknown)" when absent: a
|
|
37
|
+
// script asking for JSON wants a missing value it can test, not prose.
|
|
38
|
+
function printIdentityJson(account, profile, identity) {
|
|
39
|
+
console.log(JSON.stringify({
|
|
40
|
+
account,
|
|
41
|
+
instanceUrl: profile.instanceUrl,
|
|
42
|
+
sub: identity.sub ?? profile.sub ?? null,
|
|
43
|
+
email: identity.email ?? profile.email ?? null,
|
|
44
|
+
roles: identity.roles,
|
|
45
|
+
}, null, 2));
|
|
46
|
+
}
|
|
29
47
|
function printIdentity(target, profile, identity) {
|
|
30
48
|
const line = (label, value) => console.log(kleur.dim(`${label}:`.padEnd(11)) + value);
|
|
31
49
|
line("Account", target);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAiB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAgB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
|
package/dist/core/admin.js
CHANGED
|
@@ -26,10 +26,17 @@ async function call(client, method, path, body) {
|
|
|
26
26
|
throw new PermissionError();
|
|
27
27
|
return res;
|
|
28
28
|
}
|
|
29
|
-
export async function listUsers(client) {
|
|
30
|
-
const
|
|
29
|
+
export async function listUsers(client, opts = {}) {
|
|
30
|
+
const query = new URLSearchParams();
|
|
31
|
+
if (opts.limit !== undefined)
|
|
32
|
+
query.set("limit", String(opts.limit));
|
|
33
|
+
if (opts.offset !== undefined)
|
|
34
|
+
query.set("offset", String(opts.offset));
|
|
35
|
+
const suffix = query.size ? `?${query}` : "";
|
|
36
|
+
const res = await call(client, "GET", `/admin/users${suffix}`);
|
|
31
37
|
if (!res.ok)
|
|
32
38
|
throw new AdminApiError(`Could not list users (${res.status}).`);
|
|
39
|
+
// `total` counts every user, not just this page, so callers can report position.
|
|
33
40
|
return { users: arr(res.data?.users), total: res.data?.total ?? 0 };
|
|
34
41
|
}
|
|
35
42
|
export async function deleteUser(client, id) {
|
package/dist/core/admin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAID,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,MAAkB,EAClB,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,IAAI,GAAmB,CAAC;IACxB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAI,IAAI,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,eAAe,EAAE,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/core/authClient.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getActiveProfile, getPortalSession, } from "./config.js";
|
|
2
|
-
import { deleteTokens, getTokens, KeychainUnavailableError, saveTokens, } from "./keychain.js";
|
|
2
|
+
import { deleteTokens, getTokens, headlessRefreshToken, KeychainUnavailableError, saveTokens, } from "./keychain.js";
|
|
3
3
|
import { apiRequest, joinUrl } from "./http.js";
|
|
4
4
|
export class ReauthRequiredError extends Error {
|
|
5
5
|
constructor(message) {
|
|
@@ -24,6 +24,40 @@ export function tokensFromAuthResponse(data) {
|
|
|
24
24
|
refreshTokenExpiresAt: refreshTtl !== undefined ? now + refreshTtl * 1000 : undefined,
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Reads a `/refresh` response, keeping the current refresh token when the instance
|
|
29
|
+
* did not send a new one.
|
|
30
|
+
*
|
|
31
|
+
* Separate from `tokensFromAuthResponse` because the two answer different questions.
|
|
32
|
+
* A login must establish both tokens, and a response missing either is unusable. A
|
|
33
|
+
* refresh only has to produce a usable access token: the response schema marks both
|
|
34
|
+
* fields optional, so requiring the pair would wipe a session that is still valid
|
|
35
|
+
* the first time an instance rotates only the access token.
|
|
36
|
+
*/
|
|
37
|
+
export function tokensFromRefreshResponse(data, current) {
|
|
38
|
+
if (!data)
|
|
39
|
+
return null;
|
|
40
|
+
const accessToken = typeof data.token === "string" ? data.token : undefined;
|
|
41
|
+
if (!accessToken)
|
|
42
|
+
return null;
|
|
43
|
+
const rotated = typeof data.refreshToken === "string" && data.refreshToken
|
|
44
|
+
? data.refreshToken
|
|
45
|
+
: undefined;
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
const ttl = typeof data.ttl === "number" ? data.ttl : undefined;
|
|
48
|
+
const refreshTtl = typeof data.refreshTtl === "number" ? data.refreshTtl : undefined;
|
|
49
|
+
return {
|
|
50
|
+
accessToken,
|
|
51
|
+
refreshToken: rotated ?? current.refreshToken,
|
|
52
|
+
accessTokenExpiresAt: ttl !== undefined ? now + ttl * 1000 : undefined,
|
|
53
|
+
refreshTokenExpiresAt: refreshTtl !== undefined
|
|
54
|
+
? now + refreshTtl * 1000
|
|
55
|
+
: // An unrotated token keeps the expiry it already had.
|
|
56
|
+
rotated
|
|
57
|
+
? undefined
|
|
58
|
+
: current.refreshTokenExpiresAt,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
27
61
|
// A client for an auth instance a developer administers, resolved from the active
|
|
28
62
|
// profile. Portal calls use createPortalClient instead: the two sessions are
|
|
29
63
|
// different accounts on different hosts and must never be interchanged.
|
|
@@ -57,11 +91,16 @@ async function createClientForProfile(profile, copy) {
|
|
|
57
91
|
throw new ReauthRequiredError(`No session for ${copy.label}. Run: ${copy.reauthCommand}.`);
|
|
58
92
|
}
|
|
59
93
|
const session = tokens;
|
|
94
|
+
// A headless run reads SEAMLESS_REFRESH_TOKEN fresh every time, so the keychain is
|
|
95
|
+
// never consulted and writing a rotated token there only makes it look preserved.
|
|
96
|
+
const headless = headlessRefreshToken() !== undefined;
|
|
60
97
|
const persist = async (next) => {
|
|
61
98
|
session.accessToken = next.accessToken;
|
|
62
99
|
session.refreshToken = next.refreshToken;
|
|
63
100
|
session.accessTokenExpiresAt = next.accessTokenExpiresAt;
|
|
64
101
|
session.refreshTokenExpiresAt = next.refreshTokenExpiresAt;
|
|
102
|
+
if (headless)
|
|
103
|
+
return;
|
|
65
104
|
try {
|
|
66
105
|
await saveTokens(profile, next);
|
|
67
106
|
}
|
|
@@ -79,22 +118,37 @@ async function createClientForProfile(profile, copy) {
|
|
|
79
118
|
throw err;
|
|
80
119
|
}
|
|
81
120
|
};
|
|
82
|
-
const
|
|
121
|
+
const expiredMessage = () => headless
|
|
122
|
+
? `The refresh token in SEAMLESS_REFRESH_TOKEN was rejected by ${copy.label}. The instance rotates the refresh token on every refresh and revokes the session if a spent one is sent again, so a token that has already been refreshed once cannot be reused on a later run. Issue a fresh one with: ${copy.reauthCommand}.`
|
|
123
|
+
: `Your session for ${copy.label} has expired or was revoked. Run: ${copy.reauthCommand}.`;
|
|
124
|
+
const runRefresh = async () => {
|
|
83
125
|
const res = await apiRequest(joinUrl(profile.instanceUrl, "/refresh"), {
|
|
84
126
|
method: "POST",
|
|
85
127
|
headers: { Authorization: `Bearer ${session.refreshToken}` },
|
|
86
128
|
});
|
|
87
129
|
if (!res.ok) {
|
|
88
130
|
await clearSession();
|
|
89
|
-
throw new ReauthRequiredError(
|
|
131
|
+
throw new ReauthRequiredError(expiredMessage());
|
|
90
132
|
}
|
|
91
|
-
const next =
|
|
133
|
+
const next = tokensFromRefreshResponse(res.data, session);
|
|
92
134
|
if (!next) {
|
|
93
135
|
await clearSession();
|
|
94
136
|
throw new ReauthRequiredError(`Received an unexpected refresh response from ${profile.instanceUrl}. Run: ${copy.reauthCommand}.`);
|
|
95
137
|
}
|
|
96
138
|
await persist(next);
|
|
97
139
|
};
|
|
140
|
+
// Single-flight. The instance rotates the refresh token on every call and reads a
|
|
141
|
+
// second use of the old one as theft, revoking the whole session chain, so two
|
|
142
|
+
// concurrent refreshes would not merely race: they would log the developer out.
|
|
143
|
+
let inFlight = null;
|
|
144
|
+
const refresh = () => {
|
|
145
|
+
if (!inFlight) {
|
|
146
|
+
inFlight = runRefresh().finally(() => {
|
|
147
|
+
inFlight = null;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return inFlight;
|
|
151
|
+
};
|
|
98
152
|
const authedFetch = async (path, init = {}) => {
|
|
99
153
|
const build = () => ({
|
|
100
154
|
...init,
|
|
@@ -104,10 +158,22 @@ async function createClientForProfile(profile, copy) {
|
|
|
104
158
|
},
|
|
105
159
|
});
|
|
106
160
|
const url = joinUrl(profile.instanceUrl, path);
|
|
161
|
+
const sentWith = session.accessToken;
|
|
107
162
|
let res = await apiRequest(url, build());
|
|
108
163
|
if (res.status === 401 && session.refreshToken) {
|
|
109
|
-
|
|
164
|
+
// Only refresh if nothing else already did while this request was in flight.
|
|
165
|
+
// Otherwise a burst of 401s against one stale token would each rotate again.
|
|
166
|
+
if (session.accessToken === sentWith) {
|
|
167
|
+
await refresh();
|
|
168
|
+
}
|
|
110
169
|
res = await apiRequest(url, build());
|
|
170
|
+
// A 401 on a freshly refreshed token is not something a caller can act on by
|
|
171
|
+
// retrying, and returning it verbatim left commands reporting an opaque failure
|
|
172
|
+
// instead of saying the session is gone.
|
|
173
|
+
if (res.status === 401) {
|
|
174
|
+
await clearSession();
|
|
175
|
+
throw new ReauthRequiredError(`Your session for ${copy.label} was rejected after refreshing it. Run: ${copy.reauthCommand}.`);
|
|
176
|
+
}
|
|
111
177
|
}
|
|
112
178
|
return res;
|
|
113
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authClient.js","sourceRoot":"","sources":["../../src/core/authClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"authClient.js","sourceRoot":"","sources":["../../src/core/authClient.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js
CHANGED
|
@@ -162,7 +162,54 @@ export function clearPortalSession() {
|
|
|
162
162
|
saveConfig(config);
|
|
163
163
|
return config;
|
|
164
164
|
}
|
|
165
|
-
const LOCAL_HOSTS = new Set(["localhost", "
|
|
165
|
+
const LOCAL_HOSTS = new Set(["localhost", "::1", "[::1]", "::", "[::]"]);
|
|
166
|
+
/** An IPv4 dotted quad, as four numbers, or null when the host is not one. */
|
|
167
|
+
function ipv4Octets(host) {
|
|
168
|
+
const parts = host.split(".");
|
|
169
|
+
if (parts.length !== 4)
|
|
170
|
+
return null;
|
|
171
|
+
const octets = parts.map((part) => /^\d{1,3}$/.test(part) ? Number(part) : NaN);
|
|
172
|
+
return octets.every((n) => n >= 0 && n <= 255) ? octets : null;
|
|
173
|
+
}
|
|
174
|
+
function isPrivateIpv4(host) {
|
|
175
|
+
const octets = ipv4Octets(host);
|
|
176
|
+
if (!octets)
|
|
177
|
+
return false;
|
|
178
|
+
const [a, b] = octets;
|
|
179
|
+
if (a === 127)
|
|
180
|
+
return true; // loopback, the whole /8 rather than just .0.1
|
|
181
|
+
if (a === 0)
|
|
182
|
+
return true; // 0.0.0.0, what a dev server binds to for "every interface"
|
|
183
|
+
if (a === 10)
|
|
184
|
+
return true;
|
|
185
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
186
|
+
return true; // /12, so not 172.32+
|
|
187
|
+
if (a === 192 && b === 168)
|
|
188
|
+
return true;
|
|
189
|
+
if (a === 169 && b === 254)
|
|
190
|
+
return true; // link-local
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
function isPrivateIpv6(host) {
|
|
194
|
+
// URL.hostname keeps the brackets on an IPv6 literal.
|
|
195
|
+
const inner = host.startsWith("[") && host.endsWith("]")
|
|
196
|
+
? host.slice(1, -1).toLowerCase()
|
|
197
|
+
: null;
|
|
198
|
+
if (!inner)
|
|
199
|
+
return false;
|
|
200
|
+
// fc00::/7 unique-local and fe80::/10 link-local. Matching on the leading group
|
|
201
|
+
// is enough here: a global address never opens with one of these.
|
|
202
|
+
return /^f[cd]/.test(inner) || /^fe[89ab]/.test(inner);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Whether a URL points at something on the developer's own machine or network.
|
|
206
|
+
*
|
|
207
|
+
* Gates two things: allowing plaintext http, and `--local` OTP delivery, which asks
|
|
208
|
+
* the instance to return the code in the response body. A dev instance is commonly
|
|
209
|
+
* reached at something other than localhost, a container bound to `0.0.0.0`, a LAN
|
|
210
|
+
* address from a phone on the same network, or an mDNS `.local` name, and refusing
|
|
211
|
+
* those forced https onto a box that has no certificate.
|
|
212
|
+
*/
|
|
166
213
|
export function isLocalInstanceUrl(input) {
|
|
167
214
|
let url;
|
|
168
215
|
try {
|
|
@@ -171,8 +218,13 @@ export function isLocalInstanceUrl(input) {
|
|
|
171
218
|
catch {
|
|
172
219
|
return false;
|
|
173
220
|
}
|
|
174
|
-
const host = url.hostname;
|
|
175
|
-
return LOCAL_HOSTS.has(host) ||
|
|
221
|
+
const host = url.hostname.toLowerCase();
|
|
222
|
+
return (LOCAL_HOSTS.has(host) ||
|
|
223
|
+
host.endsWith(".localhost") ||
|
|
224
|
+
host === "local" ||
|
|
225
|
+
host.endsWith(".local") ||
|
|
226
|
+
isPrivateIpv4(host) ||
|
|
227
|
+
isPrivateIpv6(host));
|
|
176
228
|
}
|
|
177
229
|
export function normalizeInstanceUrl(input) {
|
|
178
230
|
const trimmed = (input ?? "").trim();
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { scrubTokens } from "./redact.js";
|
|
2
|
+
/**
|
|
3
|
+
* Renders a thrown value for display.
|
|
4
|
+
*
|
|
5
|
+
* `throw` accepts anything, so reading `.message` off it is a guess. When the guess
|
|
6
|
+
* was wrong the CLI printed "Error: undefined", which names neither the failure nor
|
|
7
|
+
* the fact that something unexpected was thrown.
|
|
8
|
+
*
|
|
9
|
+
* A thrown object is scrubbed before it is shown: it reaches here from a rejected
|
|
10
|
+
* request as often as from our own code, and a response body can carry a token.
|
|
11
|
+
*/
|
|
12
|
+
export function errorMessage(err) {
|
|
13
|
+
if (err instanceof Error)
|
|
14
|
+
return err.message || err.name;
|
|
15
|
+
if (typeof err === "string")
|
|
16
|
+
return err;
|
|
17
|
+
if (err && typeof err === "object") {
|
|
18
|
+
const message = err.message;
|
|
19
|
+
if (typeof message === "string" && message)
|
|
20
|
+
return message;
|
|
21
|
+
try {
|
|
22
|
+
return JSON.stringify(scrubTokens(err));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Circular, or something JSON cannot represent.
|
|
26
|
+
return String(err);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// null, undefined, and the other primitives, none of which say much on their own.
|
|
30
|
+
return `Unexpected error: ${String(err)}`;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC;IACzD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAExC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAI,GAA6B,CAAC,OAAO,CAAC;QACvD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC3D,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,OAAO,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5C,CAAC"}
|
package/dist/core/fetch.js
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { SEAMLESS_AUTH_API_VERSION } from "./images.js";
|
|
2
|
+
/**
|
|
3
|
+
* A GET whose connection-level failure says what it could not reach.
|
|
4
|
+
*
|
|
5
|
+
* When `fetch` never gets a response at all (offline, DNS, TLS, no route) it rejects
|
|
6
|
+
* with a bare `TypeError: fetch failed`, which reaches the top-level handler as
|
|
7
|
+
* "Error: fetch failed" and names neither the host nor what the CLI wanted from it.
|
|
8
|
+
* A non-ok response is left to the caller, which knows what its status means.
|
|
9
|
+
*/
|
|
10
|
+
export async function fetchRemote(url, purpose) {
|
|
11
|
+
try {
|
|
12
|
+
return await fetch(url);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
throw new Error(`Could not reach ${url} to ${purpose}. Check your network connection.`, { cause: err });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
2
18
|
export async function fetchEnvExample() {
|
|
3
19
|
const url = `https://raw.githubusercontent.com/fells-code/seamless-auth-api/${SEAMLESS_AUTH_API_VERSION}/.env.example`;
|
|
4
|
-
const res = await
|
|
20
|
+
const res = await fetchRemote(url, "read the auth server's env.example");
|
|
5
21
|
if (!res.ok) {
|
|
6
22
|
throw new Error("Failed to fetch auth env.example");
|
|
7
23
|
}
|
package/dist/core/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/core/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,GAAG,GACP,kEAAkE,yBAAyB,eAAe,CAAC;IAE7G,MAAM,GAAG,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/core/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAe;IAC5D,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,OAAO,OAAO,kCAAkC,EACtE,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,GAAG,GACP,kEAAkE,yBAAyB,eAAe,CAAC;IAE7G,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;IAEzE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
package/dist/core/images.js
CHANGED
|
@@ -6,6 +6,12 @@ export const SEAMLESS_AUTH_API_VERSION = "v0.7.1";
|
|
|
6
6
|
export const SEAMLESS_AUTH_API_IMAGE = `ghcr.io/fells-code/seamless-auth-api:${SEAMLESS_AUTH_API_VERSION}`;
|
|
7
7
|
export const SEAMLESS_AUTH_ADMIN_DASHBOARD_VERSION = "v0.4.0";
|
|
8
8
|
export const SEAMLESS_AUTH_ADMIN_DASHBOARD_IMAGE = `ghcr.io/fells-code/seamless-auth-admin-dashboard:${SEAMLESS_AUTH_ADMIN_DASHBOARD_VERSION}`;
|
|
9
|
+
// `--admin=source` unpacks the dashboard from this repo at the same tag the image
|
|
10
|
+
// above is built from, so both admin modes scaffold the same dashboard. Override
|
|
11
|
+
// the ref with SEAMLESS_ADMIN_DASHBOARD_REF, or point at a local checkout with
|
|
12
|
+
// SEAMLESS_ADMIN_DASHBOARD_DIR.
|
|
13
|
+
export const SEAMLESS_AUTH_ADMIN_DASHBOARD_REPO = "fells-code/seamless-auth-admin-dashboard";
|
|
14
|
+
export const SEAMLESS_AUTH_ADMIN_DASHBOARD_REF = SEAMLESS_AUTH_ADMIN_DASHBOARD_VERSION;
|
|
9
15
|
// The starter templates monorepo the CLI scaffolds from. Pinned to a tag so a given
|
|
10
16
|
// CLI version always produces the same project. Override the ref with
|
|
11
17
|
// SEAMLESS_TEMPLATES_REF, or point at a local checkout with SEAMLESS_TEMPLATES_DIR.
|
package/dist/core/images.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/core/images.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,kFAAkF;AAClF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,wCAAwC,yBAAyB,EAAE,CAAC;AAE3G,MAAM,CAAC,MAAM,qCAAqC,GAAG,QAAQ,CAAC;AAE9D,MAAM,CAAC,MAAM,mCAAmC,GAAG,oDAAoD,qCAAqC,EAAE,CAAC;AAE/I,oFAAoF;AACpF,sEAAsE;AACtE,oFAAoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAEvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/core/images.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,kFAAkF;AAClF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,wCAAwC,yBAAyB,EAAE,CAAC;AAE3G,MAAM,CAAC,MAAM,qCAAqC,GAAG,QAAQ,CAAC;AAE9D,MAAM,CAAC,MAAM,mCAAmC,GAAG,oDAAoD,qCAAqC,EAAE,CAAC;AAE/I,kFAAkF;AAClF,iFAAiF;AACjF,+EAA+E;AAC/E,gCAAgC;AAChC,MAAM,CAAC,MAAM,kCAAkC,GAC7C,0CAA0C,CAAC;AAE7C,MAAM,CAAC,MAAM,iCAAiC,GAAG,qCAAqC,CAAC;AAEvF,oFAAoF;AACpF,sEAAsE;AACtE,oFAAoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAEvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC"}
|
|
@@ -32,23 +32,19 @@ export async function promptLogin(opts) {
|
|
|
32
32
|
requireInteractive("Enter the code we sent you", "A one-time code cannot be supplied ahead of time, so this step needs a terminal.");
|
|
33
33
|
const answer = await text({
|
|
34
34
|
message: resent ? "Enter the new code" : "Enter the code we sent you",
|
|
35
|
+
// A hint, not a rule: the code format belongs to the instance, so the
|
|
36
|
+
// prompt only refuses an empty answer and lets the server judge the rest.
|
|
37
|
+
// Encoding today's shape here would reject a valid code from an instance
|
|
38
|
+
// that ever issues a different one, with no way to override it.
|
|
35
39
|
placeholder: email ? "ABCDEF" : "123456",
|
|
36
|
-
validate: (value) =>
|
|
37
|
-
const code = (value ?? "").trim();
|
|
38
|
-
if (email) {
|
|
39
|
-
return /^[A-Za-z]{6}$/.test(code)
|
|
40
|
-
? undefined
|
|
41
|
-
: "Enter the 6-letter code from the email.";
|
|
42
|
-
}
|
|
43
|
-
return /^\d{4,8}$/.test(code)
|
|
44
|
-
? undefined
|
|
45
|
-
: "Enter the numeric code from the message.";
|
|
46
|
-
},
|
|
40
|
+
validate: (value) => (value ?? "").trim() ? undefined : "A code is required",
|
|
47
41
|
});
|
|
48
42
|
if (isCancel(answer))
|
|
49
43
|
return null;
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
// Sent as typed apart from surrounding whitespace. The instance normalizes
|
|
45
|
+
// case for email codes itself, so uppercasing here would only corrupt a
|
|
46
|
+
// case-sensitive one.
|
|
47
|
+
return answer.trim();
|
|
52
48
|
},
|
|
53
49
|
notify: (event) => {
|
|
54
50
|
switch (event.type) {
|
|
@@ -58,6 +54,9 @@ export async function promptLogin(opts) {
|
|
|
58
54
|
// know.
|
|
59
55
|
console.log(kleur.dim(`If an account exists for ${resolved}, a code is on its way.`));
|
|
60
56
|
break;
|
|
57
|
+
case "code_expired":
|
|
58
|
+
console.log(kleur.yellow("That code was not sent: the five minute login window lapsed while you were typing."));
|
|
59
|
+
break;
|
|
61
60
|
case "code_resent":
|
|
62
61
|
console.log(kleur.dim("Your previous code expired, so we sent a new one."));
|
|
63
62
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveLogin.js","sourceRoot":"","sources":["../../src/core/interactiveLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAe9C,uEAAuE;AACvE,4EAA4E;AAC5E,oEAAoE;AACpE,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA6B;IAE7B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAEzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,kBAAkB,CAChB,gBAAgB,EAChB,iEAAiE,CAClE,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,iBAAiB;YACjD,YAAY,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B;SAClE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,UAAU,GAAI,MAAiB,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;QAC1C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,OAAO,KAAK,OAAO,CAAC;YAClC,yEAAyE;YACzE,qEAAqE;YACrE,kBAAkB,CAChB,4BAA4B,EAC5B,kFAAkF,CACnF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;gBACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B;gBACrE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"interactiveLogin.js","sourceRoot":"","sources":["../../src/core/interactiveLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAe9C,uEAAuE;AACvE,4EAA4E;AAC5E,oEAAoE;AACpE,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA6B;IAE7B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAEzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,kBAAkB,CAChB,gBAAgB,EAChB,iEAAiE,CAClE,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,iBAAiB;YACjD,YAAY,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B;SAClE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,UAAU,GAAI,MAAiB,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;QAC1C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,OAAO,KAAK,OAAO,CAAC;YAClC,yEAAyE;YACzE,qEAAqE;YACrE,kBAAkB,CAChB,4BAA4B,EAC5B,kFAAkF,CACnF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;gBACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B;gBACrE,sEAAsE;gBACtE,0EAA0E;gBAC1E,yEAAyE;gBACzE,gEAAgE;gBAChE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB;aAC1D,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,2EAA2E;YAC3E,wEAAwE;YACxE,sBAAsB;YACtB,OAAQ,MAAiB,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,WAAW;oBACd,yEAAyE;oBACzE,8EAA8E;oBAC9E,QAAQ;oBACR,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,4BAA4B,QAAQ,yBAAyB,CAAC,CACzE,CAAC;oBACF,MAAM;gBACR,KAAK,cAAc;oBACjB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,oFAAoF,CACrF,CACF,CAAC;oBACF,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAC/D,CAAC;oBACF,MAAM;gBACR,KAAK,iBAAiB;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;oBACpE,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+BAA+B,KAAK,CAAC,YAAY,WAC/C,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAClC,QAAQ,CACT,CACF,CAAC;oBACF,MAAM;YACV,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { apiRequest, joinUrl } from "./http.js";
|
|
2
|
+
/**
|
|
3
|
+
* The signing key id a managed instance is actually publishing.
|
|
4
|
+
*
|
|
5
|
+
* Instances pin their kid per tier (`trialkey1`, `paidkey1`), so a scaffold that
|
|
6
|
+
* hardcodes the dev default writes a value the instance never uses. Nothing verifies
|
|
7
|
+
* against it, adapters resolve the key from the token header's `kid` through the
|
|
8
|
+
* remote JWKS, but they also warn on boot when it is left at the dev default, so a
|
|
9
|
+
* managed scaffold otherwise ships an app that complains it is misconfigured.
|
|
10
|
+
*
|
|
11
|
+
* Returns undefined rather than throwing: the kid is cosmetic today, and an instance
|
|
12
|
+
* that is slow to come up should not fail a scaffold over it.
|
|
13
|
+
*/
|
|
14
|
+
export async function fetchActiveJwksKid(instanceUrl) {
|
|
15
|
+
let res;
|
|
16
|
+
try {
|
|
17
|
+
res = await apiRequest(joinUrl(instanceUrl, "/.well-known/jwks.json"), { method: "GET" });
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
if (!res.ok || !Array.isArray(res.data?.keys))
|
|
23
|
+
return undefined;
|
|
24
|
+
// Take the first RS256 signing key. The endpoint lists the active key first, and
|
|
25
|
+
// a set carrying a retired key alongside it keeps that one later in the array.
|
|
26
|
+
for (const key of res.data.keys) {
|
|
27
|
+
if (!key || typeof key !== "object")
|
|
28
|
+
continue;
|
|
29
|
+
const record = key;
|
|
30
|
+
if (typeof record.kid !== "string" || !record.kid)
|
|
31
|
+
continue;
|
|
32
|
+
if (record.use !== undefined && record.use !== "sig")
|
|
33
|
+
continue;
|
|
34
|
+
if (record.alg !== undefined && record.alg !== "RS256")
|
|
35
|
+
continue;
|
|
36
|
+
return record.kid;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=jwksKid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwksKid.js","sourceRoot":"","sources":["../../src/core/jwksKid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB;IAEnB,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,OAAO,CAAC,WAAW,EAAE,wBAAwB,CAAC,EAC9C,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEhE,iFAAiF;IACjF,+EAA+E;IAC/E,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,MAAM,GAAG,GAA8B,CAAC;QAC9C,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,SAAS;QAC5D,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK;YAAE,SAAS;QAC/D,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO;YAAE,SAAS;QACjE,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/core/keychain.js
CHANGED
|
@@ -64,8 +64,20 @@ export async function saveTokens(profile, bundle) {
|
|
|
64
64
|
const b = await loadBackend();
|
|
65
65
|
b.set(accountKey(profile), JSON.stringify(bundle));
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* The refresh token supplied by the environment, for a run with no keychain (CI).
|
|
69
|
+
*
|
|
70
|
+
* Worth knowing about separately from `getTokens`, because it is read fresh on every
|
|
71
|
+
* run: the instance rotates the refresh token on every `/refresh` and treats a second
|
|
72
|
+
* use of a spent one as theft, revoking the whole session chain. So a rotated token
|
|
73
|
+
* cannot be persisted anywhere this will read it back, and a run that rotates leaves
|
|
74
|
+
* the environment holding a token that must not be sent again.
|
|
75
|
+
*/
|
|
76
|
+
export function headlessRefreshToken() {
|
|
77
|
+
return process.env.SEAMLESS_REFRESH_TOKEN?.trim() || undefined;
|
|
78
|
+
}
|
|
67
79
|
export async function getTokens(profile) {
|
|
68
|
-
const envRefresh =
|
|
80
|
+
const envRefresh = headlessRefreshToken();
|
|
69
81
|
if (envRefresh) {
|
|
70
82
|
return { accessToken: "", refreshToken: envRefresh };
|
|
71
83
|
}
|
|
@@ -84,29 +96,4 @@ export async function deleteTokens(profile) {
|
|
|
84
96
|
const b = await loadBackend();
|
|
85
97
|
return b.delete(accountKey(profile));
|
|
86
98
|
}
|
|
87
|
-
export function redactToken(value) {
|
|
88
|
-
return value ? "[redacted]" : "(none)";
|
|
89
|
-
}
|
|
90
|
-
const TOKEN_KEYS = new Set([
|
|
91
|
-
"token",
|
|
92
|
-
"accesstoken",
|
|
93
|
-
"refreshtoken",
|
|
94
|
-
"verificationtoken",
|
|
95
|
-
"authorization",
|
|
96
|
-
]);
|
|
97
|
-
export function scrubTokens(value) {
|
|
98
|
-
if (Array.isArray(value)) {
|
|
99
|
-
return value.map((item) => scrubTokens(item));
|
|
100
|
-
}
|
|
101
|
-
if (value && typeof value === "object") {
|
|
102
|
-
const out = {};
|
|
103
|
-
for (const [key, val] of Object.entries(value)) {
|
|
104
|
-
out[key] = TOKEN_KEYS.has(key.toLowerCase())
|
|
105
|
-
? redactToken(typeof val === "string" ? val : String(val))
|
|
106
|
-
: scrubTokens(val);
|
|
107
|
-
}
|
|
108
|
-
return out;
|
|
109
|
-
}
|
|
110
|
-
return value;
|
|
111
|
-
}
|
|
112
99
|
//# sourceMappingURL=keychain.js.map
|