@clipboard-health/playwright-toolkit 1.1.0 → 1.1.2
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 +71 -1
- package/package.json +2 -2
- package/src/lib/adminAuthToken.d.ts +53 -3
- package/src/lib/adminAuthToken.js +462 -63
- package/src/lib/adminAuthToken.js.map +1 -1
package/README.md
CHANGED
|
@@ -111,14 +111,45 @@ The auto fixture creates one non-zero W3C `traceparent`, preserves project-level
|
|
|
111
111
|
const tokenEntry = await generateAdminAuthToken({
|
|
112
112
|
adminEmail: adminUser.email,
|
|
113
113
|
apiEnvironmentName: "staging",
|
|
114
|
+
cacheIdentity: {
|
|
115
|
+
namespace: "cbh-admin-frontend",
|
|
116
|
+
clientName: "admin-app",
|
|
117
|
+
issuer: "clipboard-health-staging",
|
|
118
|
+
tokenKind: "access",
|
|
119
|
+
},
|
|
114
120
|
clientName: "admin-app",
|
|
115
121
|
cacheDurationMs: 10 * 60 * 1000,
|
|
122
|
+
validationPolicy: "admin-session-v1",
|
|
123
|
+
validateToken: async ({ authToken, signal }) => {
|
|
124
|
+
const response = await fetch(`${adminApiUrl}/auth/session`, {
|
|
125
|
+
headers: { Authorization: authToken },
|
|
126
|
+
signal,
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
if (response.status === 401 || response.status === 403) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new Error(`Admin token validation failed with HTTP ${response.status}`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return true;
|
|
138
|
+
},
|
|
116
139
|
});
|
|
117
140
|
|
|
118
141
|
const adminAuthToken = tokenEntry.authToken;
|
|
119
142
|
```
|
|
120
143
|
|
|
121
|
-
The cache key contains the environment
|
|
144
|
+
The cache key contains the environment, a SHA-256 digest of the email, and the optional explicit cache identity; it never contains the email itself. Give each repository a stable `namespace`, and distinguish credentials by token kind, client, audience, and issuer when those values differ. `generateAdminAuthToken` automatically distinguishes different `clientName` values even when `cacheIdentity` is omitted.
|
|
145
|
+
|
|
146
|
+
JWT cache freshness is bounded to the earlier of `cacheDurationMs` and the token's `exp` claim minus a 60-second safety skew. Opaque bearer tokens continue to use `cacheDurationMs`. Set `jwtExpirationSafetySkewMs` when a suite needs a different skew.
|
|
147
|
+
|
|
148
|
+
When `validateToken` is provided, the toolkit runs the read-only probe while holding the cache lock and records successful validation in the cache entry, so waiting Playwright workers share one probe. Give the probe an explicit `validationPolicy` and increment it whenever the validation contract becomes stricter or otherwise changes; a policy change forces revalidation. The toolkit aborts validation after 30 seconds by default, bounded below the lock's stale lease. Pass the provided `signal` to network requests, and set `validationTimeoutMs` when the endpoint needs a shorter deadline.
|
|
149
|
+
|
|
150
|
+
Return `false` only when the consumer rejects the credential, such as HTTP `401` or `403`; throw for `5xx` responses and other validation infrastructure failures. A rejected cached token is evicted and replaced once for all waiting workers and shards sharing the cache filesystem. A rejected generated token is not cached. The probe should verify the same audience and permission boundary the suite needs without mutating application state.
|
|
151
|
+
|
|
152
|
+
The cache and lock files use mode `0600`. A process that acquires the lock re-reads the cache before generating, which prevents duplicate token mints across Playwright workers, shards, and local processes that share `cacheDirectory`. Separate CI hosts or containers with independent filesystems may still mint independently.
|
|
122
153
|
|
|
123
154
|
Use `getOrCreateAdminAuthToken` when the repository needs a different token command:
|
|
124
155
|
|
|
@@ -126,11 +157,50 @@ Use `getOrCreateAdminAuthToken` when the repository needs a different token comm
|
|
|
126
157
|
const tokenEntry = await getOrCreateAdminAuthToken({
|
|
127
158
|
adminEmail,
|
|
128
159
|
apiEnvironmentName,
|
|
160
|
+
cacheIdentity: {
|
|
161
|
+
namespace: "cbh-mobile-app",
|
|
162
|
+
audience: "monolith-api",
|
|
163
|
+
clientName: "mobile-app",
|
|
164
|
+
tokenKind: "access",
|
|
165
|
+
},
|
|
129
166
|
cacheDurationMs: 10 * 60 * 1000,
|
|
130
167
|
createToken: async () => await generateTokenWithRepositoryCli(),
|
|
131
168
|
});
|
|
132
169
|
```
|
|
133
170
|
|
|
171
|
+
After a consumer rejects a token, pass that credential to `forceRefresh`. Callers reporting the same rejected credential share one replacement, including callers that arrive after another worker has already refreshed the cache:
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
import { getOrCreateAdminAuthToken } from "@clipboard-health/playwright-toolkit";
|
|
175
|
+
|
|
176
|
+
const freshTokenEntry = await getOrCreateAdminAuthToken({
|
|
177
|
+
...tokenParams,
|
|
178
|
+
forceRefresh: {
|
|
179
|
+
rejectedAuthToken,
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Keep `forceRefresh: true` for deliberate unconditional rotation when no rejected credential is available.
|
|
185
|
+
|
|
186
|
+
Alternatively, invalidate a generated token explicitly with the API that applies the same default identity as `generateAdminAuthToken`:
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
import { invalidateGeneratedAdminAuthToken } from "@clipboard-health/playwright-toolkit";
|
|
190
|
+
|
|
191
|
+
await invalidateGeneratedAdminAuthToken({
|
|
192
|
+
adminEmail,
|
|
193
|
+
apiEnvironmentName,
|
|
194
|
+
clientName: "admin-app",
|
|
195
|
+
});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Use `invalidateAdminAuthToken` for `getOrCreateAdminAuthToken` entries, passing the same `cacheIdentity` used to create the entry.
|
|
199
|
+
|
|
200
|
+
Only retry a request automatically when it is read-only or otherwise safe to repeat. The toolkit does not replay consumer requests because it cannot determine whether a failed mutation had side effects.
|
|
201
|
+
|
|
202
|
+
Use `onCacheEvent` for safe diagnostics. Events expose `kind`, cache-key and credential fingerprints, the optional audience, and mint/expiration/validation timestamps. Fingerprints distinguish successive credentials without exposing the token, email, or raw cache identity.
|
|
203
|
+
|
|
134
204
|
## Deployed assets
|
|
135
205
|
|
|
136
206
|
Repository wrappers still discover assets and decide which files are runtime or fingerprinted. The package owns request concurrency, timeouts, cache busting, content-type checks, transient HTTP retries, attempt diagnostics, and stable-window polling.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/playwright-toolkit",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Shared anti-flake primitives for Clipboard Health Playwright suites.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cognito",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@clipboard-health/util-ts": "5.13.
|
|
29
|
+
"@clipboard-health/util-ts": "5.13.1",
|
|
30
30
|
"tslib": "2.8.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
@@ -2,22 +2,62 @@ export interface AdminAuthTokenCacheEntry {
|
|
|
2
2
|
authToken: string;
|
|
3
3
|
expiresAtMs: number;
|
|
4
4
|
}
|
|
5
|
-
export interface
|
|
5
|
+
export interface AdminAuthTokenCacheIdentity {
|
|
6
|
+
namespace: string;
|
|
7
|
+
tokenKind: string;
|
|
8
|
+
audience?: string | undefined;
|
|
9
|
+
clientName?: string | undefined;
|
|
10
|
+
issuer?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
export type AdminAuthTokenCacheEventKind = "created" | "hit" | "invalidated" | "miss" | "refresh" | "validation-rejected";
|
|
13
|
+
export interface AdminAuthTokenCacheEvent {
|
|
14
|
+
kind: AdminAuthTokenCacheEventKind;
|
|
15
|
+
audience?: string | undefined;
|
|
16
|
+
cacheKeyFingerprint: string;
|
|
17
|
+
credentialFingerprint?: string | undefined;
|
|
18
|
+
expiresAtMs?: number | undefined;
|
|
19
|
+
jwtExpiresAtMs?: number | undefined;
|
|
20
|
+
mintedAtMs?: number | undefined;
|
|
21
|
+
validatedAtMs?: number | undefined;
|
|
22
|
+
validationPolicyFingerprint?: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
export interface ValidateAdminAuthTokenParams {
|
|
25
|
+
authToken: string;
|
|
26
|
+
signal: AbortSignal;
|
|
27
|
+
}
|
|
28
|
+
export type AdminAuthTokenCacheEventHandler = (event: AdminAuthTokenCacheEvent) => Promise<void> | void;
|
|
29
|
+
export interface AdminAuthTokenCacheParams {
|
|
6
30
|
adminEmail: string;
|
|
7
31
|
apiEnvironmentName: string;
|
|
8
|
-
|
|
9
|
-
createToken: () => Promise<string>;
|
|
32
|
+
cacheIdentity?: AdminAuthTokenCacheIdentity | undefined;
|
|
10
33
|
cacheDirectory?: string | undefined;
|
|
11
34
|
lockStaleAfterMs?: number | undefined;
|
|
12
35
|
lockWaitTimeoutMs?: number | undefined;
|
|
13
36
|
lockRetryDelayMs?: number | undefined;
|
|
14
37
|
lockRetryJitterMs?: number | undefined;
|
|
15
38
|
nowImplementation?: (() => number) | undefined;
|
|
39
|
+
onCacheEvent?: AdminAuthTokenCacheEventHandler | undefined;
|
|
16
40
|
randomImplementation?: (() => number) | undefined;
|
|
17
41
|
sleepImplementation?: ((params: {
|
|
18
42
|
durationMs: number;
|
|
19
43
|
}) => Promise<void>) | undefined;
|
|
20
44
|
}
|
|
45
|
+
export interface AdminAuthTokenRefreshOptions {
|
|
46
|
+
rejectedAuthToken: string;
|
|
47
|
+
}
|
|
48
|
+
export interface GetOrCreateAdminAuthTokenParams extends AdminAuthTokenCacheParams {
|
|
49
|
+
cacheDurationMs: number;
|
|
50
|
+
createToken: () => Promise<string>;
|
|
51
|
+
forceRefresh?: boolean | AdminAuthTokenRefreshOptions | undefined;
|
|
52
|
+
jwtExpirationSafetySkewMs?: number | undefined;
|
|
53
|
+
validationPolicy?: string | undefined;
|
|
54
|
+
validationTimeoutMs?: number | undefined;
|
|
55
|
+
validateToken?: ((params: ValidateAdminAuthTokenParams) => Promise<boolean>) | undefined;
|
|
56
|
+
}
|
|
57
|
+
export type InvalidateAdminAuthTokenParams = AdminAuthTokenCacheParams;
|
|
58
|
+
export interface InvalidateGeneratedAdminAuthTokenParams extends AdminAuthTokenCacheParams {
|
|
59
|
+
clientName?: string | undefined;
|
|
60
|
+
}
|
|
21
61
|
export interface AdminAuthTokenCommandResult {
|
|
22
62
|
stdout: string;
|
|
23
63
|
stderr: string;
|
|
@@ -42,6 +82,16 @@ export interface GenerateAdminAuthTokenParams extends Omit<GetOrCreateAdminAuthT
|
|
|
42
82
|
* filesystem lock shared by Playwright workers, shards, and local processes.
|
|
43
83
|
*/
|
|
44
84
|
export declare function getOrCreateAdminAuthToken(params: GetOrCreateAdminAuthTokenParams): Promise<AdminAuthTokenCacheEntry>;
|
|
85
|
+
/**
|
|
86
|
+
* Invalidates one explicitly identified cached token while holding the same
|
|
87
|
+
* cross-process lock used by token readers and writers.
|
|
88
|
+
*/
|
|
89
|
+
export declare function invalidateAdminAuthToken(params: InvalidateAdminAuthTokenParams): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Invalidates a token created by generateAdminAuthToken using the same default
|
|
92
|
+
* cache identity normalization as generation.
|
|
93
|
+
*/
|
|
94
|
+
export declare function invalidateGeneratedAdminAuthToken(params: InvalidateGeneratedAdminAuthTokenParams): Promise<void>;
|
|
45
95
|
/**
|
|
46
96
|
* Generates an admin token with classified CLI retries, redacted errors, and
|
|
47
97
|
* the lock-serialized cross-process cache.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getOrCreateAdminAuthToken = getOrCreateAdminAuthToken;
|
|
4
|
+
exports.invalidateAdminAuthToken = invalidateAdminAuthToken;
|
|
5
|
+
exports.invalidateGeneratedAdminAuthToken = invalidateGeneratedAdminAuthToken;
|
|
4
6
|
exports.generateAdminAuthToken = generateAdminAuthToken;
|
|
5
7
|
exports.isRetryableAdminAuthTokenGenerationError = isRetryableAdminAuthTokenGenerationError;
|
|
6
8
|
exports.isAdminAuthTokenExpired = isAdminAuthTokenExpired;
|
|
@@ -10,6 +12,8 @@ const node_crypto_1 = require("node:crypto");
|
|
|
10
12
|
const promises_1 = require("node:fs/promises");
|
|
11
13
|
const node_os_1 = require("node:os");
|
|
12
14
|
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
15
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
16
|
+
const promises_2 = require("node:timers/promises");
|
|
13
17
|
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
14
18
|
const retry_1 = require("./retry");
|
|
15
19
|
// cspell:ignore defineauthchallenge getparameters maketesttoken
|
|
@@ -23,6 +27,8 @@ const DEFAULT_COMMAND_TIMEOUT_MS = 30_000;
|
|
|
23
27
|
const DEFAULT_GENERATION_MAX_ATTEMPTS = 4;
|
|
24
28
|
const DEFAULT_GENERATION_RETRY_DELAY_MS = 2000;
|
|
25
29
|
const DEFAULT_GENERATION_RETRY_JITTER_MS = 1000;
|
|
30
|
+
const DEFAULT_JWT_EXPIRATION_SAFETY_SKEW_MS = 60_000;
|
|
31
|
+
const DEFAULT_VALIDATION_TIMEOUT_MS = 30_000;
|
|
26
32
|
const REDACTED_USER_LABEL = "[redacted-user]";
|
|
27
33
|
/**
|
|
28
34
|
* Returns a valid cached admin token or creates one while holding an atomic
|
|
@@ -32,18 +38,86 @@ async function getOrCreateAdminAuthToken(params) {
|
|
|
32
38
|
validateParams(params);
|
|
33
39
|
const cachePaths = getCachePaths(params);
|
|
34
40
|
const nowImplementation = params.nowImplementation ?? Date.now;
|
|
41
|
+
const jwtExpirationSafetySkewMs = params.jwtExpirationSafetySkewMs ?? DEFAULT_JWT_EXPIRATION_SAFETY_SKEW_MS;
|
|
42
|
+
const validationPolicyFingerprint = getValidationPolicyFingerprint(params);
|
|
43
|
+
const validationTimeoutMs = getValidationTimeoutMs(params);
|
|
35
44
|
await (0, promises_1.mkdir)(cachePaths.cacheDirectoryPath, { recursive: true });
|
|
36
|
-
const cachedEntry =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
const cachedEntry = typeof params.forceRefresh === "object"
|
|
46
|
+
? undefined
|
|
47
|
+
: await readCachedEntry({
|
|
48
|
+
cacheFilePath: cachePaths.cacheFilePath,
|
|
49
|
+
jwtExpirationSafetySkewMs,
|
|
50
|
+
nowImplementation,
|
|
51
|
+
});
|
|
52
|
+
if (!isForceRefreshRequested(params)) {
|
|
53
|
+
const needsValidation = (0, util_ts_1.isDefined)(params.validateToken) &&
|
|
54
|
+
cachedEntry?.validationPolicyFingerprint !== validationPolicyFingerprint;
|
|
55
|
+
if ((0, util_ts_1.isDefined)(cachedEntry) && !needsValidation) {
|
|
56
|
+
emitCacheEvent({
|
|
57
|
+
cachePaths,
|
|
58
|
+
event: {
|
|
59
|
+
kind: "hit",
|
|
60
|
+
...getCredentialEventMetadata({ storedEntry: cachedEntry }),
|
|
61
|
+
expiresAtMs: cachedEntry.expiresAtMs,
|
|
62
|
+
jwtExpiresAtMs: getJwtExpirationMs({ authToken: cachedEntry.authToken }),
|
|
63
|
+
validatedAtMs: cachedEntry.validatedAtMs,
|
|
64
|
+
validationPolicyFingerprint: cachedEntry.validationPolicyFingerprint,
|
|
65
|
+
},
|
|
66
|
+
onCacheEvent: params.onCacheEvent,
|
|
67
|
+
});
|
|
68
|
+
return getPublicCacheEntry({ storedEntry: cachedEntry });
|
|
69
|
+
}
|
|
42
70
|
}
|
|
43
71
|
return await getOrCreateWithLock({
|
|
44
72
|
...params,
|
|
45
73
|
cachePaths,
|
|
74
|
+
jwtExpirationSafetySkewMs,
|
|
46
75
|
nowImplementation,
|
|
76
|
+
forceRefreshTargetCredentialFingerprint: getForceRefreshTargetCredentialFingerprint({
|
|
77
|
+
cachedEntry,
|
|
78
|
+
forceRefresh: params.forceRefresh,
|
|
79
|
+
}),
|
|
80
|
+
validationPolicyFingerprint,
|
|
81
|
+
validationTimeoutMs,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Invalidates one explicitly identified cached token while holding the same
|
|
86
|
+
* cross-process lock used by token readers and writers.
|
|
87
|
+
*/
|
|
88
|
+
async function invalidateAdminAuthToken(params) {
|
|
89
|
+
validateCacheLocationParams(params);
|
|
90
|
+
const cachePaths = getCachePaths(params);
|
|
91
|
+
await (0, promises_1.mkdir)(cachePaths.cacheDirectoryPath, { recursive: true });
|
|
92
|
+
await runWithAdminAuthTokenLock({
|
|
93
|
+
...params,
|
|
94
|
+
cachePaths,
|
|
95
|
+
operation: async () => {
|
|
96
|
+
const cachedEntry = await readCachedEntry({
|
|
97
|
+
cacheFilePath: cachePaths.cacheFilePath,
|
|
98
|
+
jwtExpirationSafetySkewMs: DEFAULT_JWT_EXPIRATION_SAFETY_SKEW_MS,
|
|
99
|
+
nowImplementation: params.nowImplementation ?? Date.now,
|
|
100
|
+
});
|
|
101
|
+
await (0, promises_1.rm)(cachePaths.cacheFilePath, { force: true });
|
|
102
|
+
emitCacheEvent({
|
|
103
|
+
cachePaths,
|
|
104
|
+
event: {
|
|
105
|
+
kind: "invalidated",
|
|
106
|
+
...getCredentialEventMetadata({ storedEntry: cachedEntry }),
|
|
107
|
+
},
|
|
108
|
+
onCacheEvent: params.onCacheEvent,
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Invalidates a token created by generateAdminAuthToken using the same default
|
|
115
|
+
* cache identity normalization as generation.
|
|
116
|
+
*/
|
|
117
|
+
async function invalidateGeneratedAdminAuthToken(params) {
|
|
118
|
+
await invalidateAdminAuthToken({
|
|
119
|
+
...params,
|
|
120
|
+
cacheIdentity: getGeneratedAdminAuthTokenCacheIdentity(params),
|
|
47
121
|
});
|
|
48
122
|
}
|
|
49
123
|
/**
|
|
@@ -53,6 +127,7 @@ async function getOrCreateAdminAuthToken(params) {
|
|
|
53
127
|
async function generateAdminAuthToken(params) {
|
|
54
128
|
return await getOrCreateAdminAuthToken({
|
|
55
129
|
...params,
|
|
130
|
+
cacheIdentity: getGeneratedAdminAuthTokenCacheIdentity(params),
|
|
56
131
|
createToken: async () => {
|
|
57
132
|
const result = await (0, retry_1.runWithRetry)({
|
|
58
133
|
operationName: "generate admin auth token",
|
|
@@ -64,7 +139,7 @@ async function generateAdminAuthToken(params) {
|
|
|
64
139
|
timeoutMs: params.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS,
|
|
65
140
|
});
|
|
66
141
|
const rawToken = commandResult.stdout.split("\n")[0]?.trim();
|
|
67
|
-
if (rawToken
|
|
142
|
+
if ((0, util_ts_1.isNil)(rawToken) || rawToken.length === 0) {
|
|
68
143
|
throw new Error("Token generation returned an empty token");
|
|
69
144
|
}
|
|
70
145
|
return `${BEARER_TOKEN_PREFIX}${rawToken}`;
|
|
@@ -116,80 +191,250 @@ function isAdminAuthTokenExpired(params) {
|
|
|
116
191
|
return (params.nowMs ?? Date.now()) >= params.cacheEntry.expiresAtMs;
|
|
117
192
|
}
|
|
118
193
|
async function getOrCreateWithLock(params) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
194
|
+
return await runWithAdminAuthTokenLock({
|
|
195
|
+
...params,
|
|
196
|
+
operation: async () => {
|
|
197
|
+
const cachedEntry = await readCachedEntry({
|
|
198
|
+
cacheFilePath: params.cachePaths.cacheFilePath,
|
|
199
|
+
jwtExpirationSafetySkewMs: params.jwtExpirationSafetySkewMs,
|
|
200
|
+
nowImplementation: params.nowImplementation,
|
|
201
|
+
});
|
|
202
|
+
const refreshesCurrentEntry = isForceRefreshRequested(params) &&
|
|
203
|
+
((0, util_ts_1.isDefined)(cachedEntry)
|
|
204
|
+
? getCredentialFingerprint({ authToken: cachedEntry.authToken }) ===
|
|
205
|
+
params.forceRefreshTargetCredentialFingerprint
|
|
206
|
+
: (0, util_ts_1.isNil)(params.forceRefreshTargetCredentialFingerprint));
|
|
207
|
+
if (refreshesCurrentEntry) {
|
|
208
|
+
await (0, promises_1.rm)(params.cachePaths.cacheFilePath, { force: true });
|
|
209
|
+
emitCacheEvent({
|
|
210
|
+
cachePaths: params.cachePaths,
|
|
211
|
+
event: {
|
|
212
|
+
kind: "refresh",
|
|
213
|
+
...getCredentialEventMetadata({ storedEntry: cachedEntry }),
|
|
214
|
+
},
|
|
215
|
+
onCacheEvent: params.onCacheEvent,
|
|
133
216
|
});
|
|
134
|
-
|
|
135
|
-
|
|
217
|
+
}
|
|
218
|
+
else if ((0, util_ts_1.isDefined)(cachedEntry)) {
|
|
219
|
+
const needsValidation = (0, util_ts_1.isDefined)(params.validateToken) &&
|
|
220
|
+
cachedEntry.validationPolicyFingerprint !== params.validationPolicyFingerprint;
|
|
221
|
+
const isAccepted = needsValidation
|
|
222
|
+
? await validateAdminAuthToken({
|
|
223
|
+
authToken: cachedEntry.authToken,
|
|
224
|
+
validationTimeoutMs: params.validationTimeoutMs,
|
|
225
|
+
validateToken: params.validateToken,
|
|
226
|
+
})
|
|
227
|
+
: true;
|
|
228
|
+
if (isAccepted) {
|
|
229
|
+
const acceptedEntry = needsValidation
|
|
230
|
+
? {
|
|
231
|
+
...cachedEntry,
|
|
232
|
+
validatedAtMs: params.nowImplementation(),
|
|
233
|
+
validationPolicyFingerprint: params.validationPolicyFingerprint,
|
|
234
|
+
}
|
|
235
|
+
: cachedEntry;
|
|
236
|
+
const expiredDuringValidation = isAdminAuthTokenExpired({
|
|
237
|
+
cacheEntry: acceptedEntry,
|
|
238
|
+
nowMs: params.nowImplementation(),
|
|
239
|
+
});
|
|
240
|
+
if (!expiredDuringValidation) {
|
|
241
|
+
await persistCachedValidation({
|
|
242
|
+
cacheFilePath: params.cachePaths.cacheFilePath,
|
|
243
|
+
needsValidation,
|
|
244
|
+
storedEntry: acceptedEntry,
|
|
245
|
+
});
|
|
246
|
+
emitCacheEvent({
|
|
247
|
+
cachePaths: params.cachePaths,
|
|
248
|
+
event: {
|
|
249
|
+
kind: "hit",
|
|
250
|
+
...getCredentialEventMetadata({ storedEntry: acceptedEntry }),
|
|
251
|
+
expiresAtMs: acceptedEntry.expiresAtMs,
|
|
252
|
+
jwtExpiresAtMs: getJwtExpirationMs({ authToken: acceptedEntry.authToken }),
|
|
253
|
+
validatedAtMs: acceptedEntry.validatedAtMs,
|
|
254
|
+
validationPolicyFingerprint: acceptedEntry.validationPolicyFingerprint,
|
|
255
|
+
},
|
|
256
|
+
onCacheEvent: params.onCacheEvent,
|
|
257
|
+
});
|
|
258
|
+
return getPublicCacheEntry({ storedEntry: acceptedEntry });
|
|
259
|
+
}
|
|
260
|
+
await (0, promises_1.rm)(params.cachePaths.cacheFilePath, { force: true });
|
|
136
261
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
262
|
+
else {
|
|
263
|
+
await (0, promises_1.rm)(params.cachePaths.cacheFilePath, { force: true });
|
|
264
|
+
emitCacheEvent({
|
|
265
|
+
cachePaths: params.cachePaths,
|
|
266
|
+
event: {
|
|
267
|
+
kind: "validation-rejected",
|
|
268
|
+
...getCredentialEventMetadata({ storedEntry: cachedEntry }),
|
|
269
|
+
expiresAtMs: cachedEntry.expiresAtMs,
|
|
270
|
+
jwtExpiresAtMs: getJwtExpirationMs({ authToken: cachedEntry.authToken }),
|
|
271
|
+
},
|
|
272
|
+
onCacheEvent: params.onCacheEvent,
|
|
273
|
+
});
|
|
140
274
|
}
|
|
141
|
-
const storedEntry = {
|
|
142
|
-
authToken,
|
|
143
|
-
expiresAtMs: params.nowImplementation() + params.cacheDurationMs,
|
|
144
|
-
};
|
|
145
|
-
await writeCachedEntry({
|
|
146
|
-
cacheFilePath: params.cachePaths.cacheFilePath,
|
|
147
|
-
storedEntry,
|
|
148
|
-
});
|
|
149
|
-
return storedEntry;
|
|
150
275
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
276
|
+
emitCacheEvent({
|
|
277
|
+
cachePaths: params.cachePaths,
|
|
278
|
+
event: { kind: "miss" },
|
|
279
|
+
onCacheEvent: params.onCacheEvent,
|
|
280
|
+
});
|
|
281
|
+
const authToken = await params.createToken();
|
|
282
|
+
if (!isValidBearerToken(authToken)) {
|
|
283
|
+
throw new Error("Generated admin auth token is malformed");
|
|
284
|
+
}
|
|
285
|
+
const mintedAtMs = params.nowImplementation();
|
|
286
|
+
const credentialFingerprint = getCredentialFingerprint({ authToken });
|
|
287
|
+
const isAccepted = await validateAdminAuthToken({
|
|
288
|
+
authToken,
|
|
289
|
+
validationTimeoutMs: params.validationTimeoutMs,
|
|
290
|
+
validateToken: params.validateToken,
|
|
291
|
+
});
|
|
292
|
+
if (!isAccepted) {
|
|
293
|
+
emitCacheEvent({
|
|
294
|
+
cachePaths: params.cachePaths,
|
|
295
|
+
event: {
|
|
296
|
+
kind: "validation-rejected",
|
|
297
|
+
credentialFingerprint,
|
|
298
|
+
jwtExpiresAtMs: getJwtExpirationMs({ authToken }),
|
|
299
|
+
mintedAtMs,
|
|
300
|
+
},
|
|
301
|
+
onCacheEvent: params.onCacheEvent,
|
|
155
302
|
});
|
|
303
|
+
throw new Error("Generated admin auth token was rejected by validation");
|
|
156
304
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
305
|
+
const nowMs = params.nowImplementation();
|
|
306
|
+
const expiration = getAdminAuthTokenExpiration({
|
|
307
|
+
authToken,
|
|
308
|
+
cacheDurationMs: params.cacheDurationMs,
|
|
309
|
+
jwtExpirationSafetySkewMs: params.jwtExpirationSafetySkewMs,
|
|
310
|
+
nowMs,
|
|
311
|
+
});
|
|
312
|
+
if (expiration.expiresAtMs <= nowMs) {
|
|
313
|
+
throw new Error("Generated admin auth token expires within the configured safety skew");
|
|
314
|
+
}
|
|
315
|
+
const storedEntry = {
|
|
316
|
+
authToken,
|
|
317
|
+
expiresAtMs: expiration.expiresAtMs,
|
|
318
|
+
mintedAtMs,
|
|
319
|
+
validatedAtMs: (0, util_ts_1.isDefined)(params.validateToken) ? nowMs : undefined,
|
|
320
|
+
validationPolicyFingerprint: params.validationPolicyFingerprint,
|
|
321
|
+
};
|
|
322
|
+
await writeCachedEntry({
|
|
323
|
+
cacheFilePath: params.cachePaths.cacheFilePath,
|
|
324
|
+
storedEntry,
|
|
325
|
+
});
|
|
326
|
+
emitCacheEvent({
|
|
327
|
+
cachePaths: params.cachePaths,
|
|
328
|
+
event: {
|
|
329
|
+
kind: "created",
|
|
330
|
+
...getCredentialEventMetadata({ storedEntry }),
|
|
331
|
+
expiresAtMs: storedEntry.expiresAtMs,
|
|
332
|
+
jwtExpiresAtMs: expiration.jwtExpiresAtMs,
|
|
333
|
+
validatedAtMs: storedEntry.validatedAtMs,
|
|
334
|
+
validationPolicyFingerprint: storedEntry.validationPolicyFingerprint,
|
|
335
|
+
},
|
|
336
|
+
onCacheEvent: params.onCacheEvent,
|
|
337
|
+
});
|
|
338
|
+
return getPublicCacheEntry({ storedEntry });
|
|
339
|
+
},
|
|
340
|
+
});
|
|
170
341
|
}
|
|
171
342
|
function validateParams(params) {
|
|
343
|
+
validateCacheLocationParams(params);
|
|
344
|
+
if (!Number.isFinite(params.cacheDurationMs) || params.cacheDurationMs <= 0) {
|
|
345
|
+
throw new Error("cacheDurationMs must be positive");
|
|
346
|
+
}
|
|
347
|
+
if ((0, util_ts_1.isDefined)(params.jwtExpirationSafetySkewMs) &&
|
|
348
|
+
(!Number.isFinite(params.jwtExpirationSafetySkewMs) || params.jwtExpirationSafetySkewMs < 0)) {
|
|
349
|
+
throw new Error("jwtExpirationSafetySkewMs must be finite and non-negative");
|
|
350
|
+
}
|
|
351
|
+
if ((0, util_ts_1.isDefined)(params.validateToken) &&
|
|
352
|
+
((0, util_ts_1.isNil)(params.validationPolicy) || params.validationPolicy.trim().length === 0)) {
|
|
353
|
+
throw new Error("validationPolicy must be provided when validateToken is configured");
|
|
354
|
+
}
|
|
355
|
+
if ((0, util_ts_1.isDefined)(params.validationTimeoutMs) &&
|
|
356
|
+
(!Number.isFinite(params.validationTimeoutMs) || params.validationTimeoutMs <= 0)) {
|
|
357
|
+
throw new Error("validationTimeoutMs must be positive");
|
|
358
|
+
}
|
|
359
|
+
if (typeof params.forceRefresh === "object" &&
|
|
360
|
+
!isValidBearerToken(params.forceRefresh.rejectedAuthToken)) {
|
|
361
|
+
throw new Error("forceRefresh.rejectedAuthToken must be a valid bearer token");
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
function validateCacheLocationParams(params) {
|
|
172
365
|
if (params.adminEmail.trim().length === 0) {
|
|
173
366
|
throw new Error("adminEmail must not be empty");
|
|
174
367
|
}
|
|
175
368
|
if (params.apiEnvironmentName.trim().length === 0) {
|
|
176
369
|
throw new Error("apiEnvironmentName must not be empty");
|
|
177
370
|
}
|
|
178
|
-
if (
|
|
179
|
-
throw new Error("
|
|
371
|
+
if (params.cacheIdentity?.namespace.trim().length === 0) {
|
|
372
|
+
throw new Error("cacheIdentity.namespace must not be empty");
|
|
373
|
+
}
|
|
374
|
+
if (params.cacheIdentity?.tokenKind.trim().length === 0) {
|
|
375
|
+
throw new Error("cacheIdentity.tokenKind must not be empty");
|
|
180
376
|
}
|
|
181
377
|
}
|
|
378
|
+
function getGeneratedAdminAuthTokenCacheIdentity(params) {
|
|
379
|
+
return {
|
|
380
|
+
namespace: params.cacheIdentity?.namespace ?? "generateAdminAuthToken",
|
|
381
|
+
tokenKind: params.cacheIdentity?.tokenKind ?? "admin-user",
|
|
382
|
+
audience: params.cacheIdentity?.audience,
|
|
383
|
+
clientName: params.clientName ?? params.cacheIdentity?.clientName,
|
|
384
|
+
issuer: params.cacheIdentity?.issuer,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function isForceRefreshRequested(params) {
|
|
388
|
+
return (0, util_ts_1.isDefined)(params.forceRefresh) && params.forceRefresh !== false;
|
|
389
|
+
}
|
|
390
|
+
function getForceRefreshTargetCredentialFingerprint(params) {
|
|
391
|
+
if (!isForceRefreshRequested(params)) {
|
|
392
|
+
return undefined;
|
|
393
|
+
}
|
|
394
|
+
if (typeof params.forceRefresh === "object") {
|
|
395
|
+
return getCredentialFingerprint({ authToken: params.forceRefresh.rejectedAuthToken });
|
|
396
|
+
}
|
|
397
|
+
return (0, util_ts_1.isDefined)(params.cachedEntry)
|
|
398
|
+
? getCredentialFingerprint({ authToken: params.cachedEntry.authToken })
|
|
399
|
+
: undefined;
|
|
400
|
+
}
|
|
182
401
|
function getCachePaths(params) {
|
|
183
402
|
const cacheDirectoryPath = params.cacheDirectory ?? node_path_1.default.join((0, node_os_1.tmpdir)(), DEFAULT_CACHE_DIRECTORY_NAME);
|
|
184
403
|
const environmentSegment = params.apiEnvironmentName.replaceAll(/[^a-zA-Z0-9._-]/g, "_");
|
|
185
|
-
const
|
|
186
|
-
|
|
404
|
+
const cacheKeyFingerprint = (0, util_ts_1.createDeterministicHash)(JSON.stringify({
|
|
405
|
+
adminEmail: params.adminEmail,
|
|
406
|
+
apiEnvironmentName: params.apiEnvironmentName,
|
|
407
|
+
cacheIdentity: (0, util_ts_1.isNil)(params.cacheIdentity)
|
|
408
|
+
? undefined
|
|
409
|
+
: {
|
|
410
|
+
namespace: params.cacheIdentity.namespace,
|
|
411
|
+
tokenKind: params.cacheIdentity.tokenKind,
|
|
412
|
+
audience: params.cacheIdentity.audience,
|
|
413
|
+
clientName: params.cacheIdentity.clientName,
|
|
414
|
+
issuer: params.cacheIdentity.issuer,
|
|
415
|
+
},
|
|
416
|
+
})).slice(0, 16);
|
|
417
|
+
const cacheFileName = `admin-auth-token-${environmentSegment}-${cacheKeyFingerprint}.json`;
|
|
187
418
|
return {
|
|
419
|
+
audience: params.cacheIdentity?.audience,
|
|
188
420
|
cacheDirectoryPath,
|
|
189
421
|
cacheFilePath: node_path_1.default.join(cacheDirectoryPath, cacheFileName),
|
|
422
|
+
cacheKeyFingerprint,
|
|
190
423
|
lockFilePath: node_path_1.default.join(cacheDirectoryPath, `${cacheFileName}.lock`),
|
|
191
424
|
};
|
|
192
425
|
}
|
|
426
|
+
function getCredentialFingerprint(params) {
|
|
427
|
+
return (0, util_ts_1.createDeterministicHash)(params.authToken).slice(0, 16);
|
|
428
|
+
}
|
|
429
|
+
function getCredentialEventMetadata(params) {
|
|
430
|
+
if ((0, util_ts_1.isNil)(params.storedEntry)) {
|
|
431
|
+
return {};
|
|
432
|
+
}
|
|
433
|
+
return {
|
|
434
|
+
credentialFingerprint: getCredentialFingerprint({ authToken: params.storedEntry.authToken }),
|
|
435
|
+
mintedAtMs: params.storedEntry.mintedAtMs,
|
|
436
|
+
};
|
|
437
|
+
}
|
|
193
438
|
async function readCachedEntry(params) {
|
|
194
439
|
try {
|
|
195
440
|
const contents = await (0, promises_1.readFile)(params.cacheFilePath, "utf8");
|
|
@@ -197,10 +442,20 @@ async function readCachedEntry(params) {
|
|
|
197
442
|
if (!isStoredCacheEntry(parsed)) {
|
|
198
443
|
return undefined;
|
|
199
444
|
}
|
|
200
|
-
|
|
445
|
+
const nowMs = params.nowImplementation();
|
|
446
|
+
const expiration = getAdminAuthTokenExpiration({
|
|
447
|
+
authToken: parsed.authToken,
|
|
448
|
+
cacheDurationMs: parsed.expiresAtMs - nowMs,
|
|
449
|
+
jwtExpirationSafetySkewMs: params.jwtExpirationSafetySkewMs,
|
|
450
|
+
nowMs,
|
|
451
|
+
});
|
|
452
|
+
if (nowMs >= expiration.expiresAtMs) {
|
|
201
453
|
return undefined;
|
|
202
454
|
}
|
|
203
|
-
return
|
|
455
|
+
return {
|
|
456
|
+
...parsed,
|
|
457
|
+
expiresAtMs: Math.min(parsed.expiresAtMs, expiration.expiresAtMs),
|
|
458
|
+
};
|
|
204
459
|
}
|
|
205
460
|
catch (error) {
|
|
206
461
|
if (isNodeErrorWithCode({ error, code: "ENOENT" }) || error instanceof SyntaxError) {
|
|
@@ -214,7 +469,19 @@ function isStoredCacheEntry(value) {
|
|
|
214
469
|
typeof value["authToken"] === "string" &&
|
|
215
470
|
isValidBearerToken(value["authToken"]) &&
|
|
216
471
|
typeof value["expiresAtMs"] === "number" &&
|
|
217
|
-
Number.isFinite(value["expiresAtMs"])
|
|
472
|
+
Number.isFinite(value["expiresAtMs"]) &&
|
|
473
|
+
((0, util_ts_1.isNil)(value["mintedAtMs"]) ||
|
|
474
|
+
(typeof value["mintedAtMs"] === "number" && Number.isFinite(value["mintedAtMs"]))) &&
|
|
475
|
+
((0, util_ts_1.isNil)(value["validatedAtMs"]) ||
|
|
476
|
+
(typeof value["validatedAtMs"] === "number" && Number.isFinite(value["validatedAtMs"]))) &&
|
|
477
|
+
((0, util_ts_1.isNil)(value["validationPolicyFingerprint"]) ||
|
|
478
|
+
typeof value["validationPolicyFingerprint"] === "string"));
|
|
479
|
+
}
|
|
480
|
+
function getPublicCacheEntry(params) {
|
|
481
|
+
return {
|
|
482
|
+
authToken: params.storedEntry.authToken,
|
|
483
|
+
expiresAtMs: params.storedEntry.expiresAtMs,
|
|
484
|
+
};
|
|
218
485
|
}
|
|
219
486
|
async function writeCachedEntry(params) {
|
|
220
487
|
const temporaryFilePath = `${params.cacheFilePath}.${process.pid}.${(0, node_crypto_1.randomUUID)()}.tmp`;
|
|
@@ -229,10 +496,51 @@ async function writeCachedEntry(params) {
|
|
|
229
496
|
await (0, promises_1.rm)(temporaryFilePath, { force: true });
|
|
230
497
|
}
|
|
231
498
|
}
|
|
499
|
+
async function persistCachedValidation(params) {
|
|
500
|
+
if (!params.needsValidation) {
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
await writeCachedEntry({
|
|
504
|
+
cacheFilePath: params.cacheFilePath,
|
|
505
|
+
storedEntry: params.storedEntry,
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
async function runWithAdminAuthTokenLock(params) {
|
|
509
|
+
const waitStartedAtMs = node_perf_hooks_1.performance.now();
|
|
510
|
+
const lockWaitTimeoutMs = params.lockWaitTimeoutMs ?? DEFAULT_LOCK_WAIT_TIMEOUT_MS;
|
|
511
|
+
const sleepImplementation = params.sleepImplementation ?? sleep;
|
|
512
|
+
/* eslint-disable no-await-in-loop -- Lock acquisition and ownership checks are sequential. */
|
|
513
|
+
while (node_perf_hooks_1.performance.now() - waitStartedAtMs < lockWaitTimeoutMs) {
|
|
514
|
+
const lock = await tryAcquireLock({
|
|
515
|
+
lockFilePath: params.cachePaths.lockFilePath,
|
|
516
|
+
});
|
|
517
|
+
if ((0, util_ts_1.isDefined)(lock)) {
|
|
518
|
+
try {
|
|
519
|
+
return await params.operation();
|
|
520
|
+
}
|
|
521
|
+
finally {
|
|
522
|
+
await releaseLock({
|
|
523
|
+
lockFilePath: params.cachePaths.lockFilePath,
|
|
524
|
+
ownerId: lock.ownerId,
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
await removeStaleLock({
|
|
529
|
+
lockFilePath: params.cachePaths.lockFilePath,
|
|
530
|
+
lockStaleAfterMs: params.lockStaleAfterMs ?? DEFAULT_LOCK_STALE_AFTER_MS,
|
|
531
|
+
});
|
|
532
|
+
const retryDelayMs = (params.lockRetryDelayMs ?? DEFAULT_LOCK_RETRY_DELAY_MS) +
|
|
533
|
+
Math.floor((params.randomImplementation?.() ?? Math.random()) *
|
|
534
|
+
(params.lockRetryJitterMs ?? DEFAULT_LOCK_RETRY_JITTER_MS));
|
|
535
|
+
await sleepImplementation({ durationMs: retryDelayMs });
|
|
536
|
+
}
|
|
537
|
+
/* eslint-enable no-await-in-loop */
|
|
538
|
+
throw new Error(`Timed out waiting for admin auth token cache lock: ${params.cachePaths.lockFilePath}`);
|
|
539
|
+
}
|
|
232
540
|
async function tryAcquireLock(params) {
|
|
233
541
|
const lock = {
|
|
234
542
|
ownerId: `${process.pid}-${(0, node_crypto_1.randomUUID)()}`,
|
|
235
|
-
createdAtMs:
|
|
543
|
+
createdAtMs: Date.now(),
|
|
236
544
|
pid: process.pid,
|
|
237
545
|
};
|
|
238
546
|
try {
|
|
@@ -255,10 +563,10 @@ async function removeStaleLock(params) {
|
|
|
255
563
|
const lock = await readLock(params.lockFilePath);
|
|
256
564
|
const lockFileStats = await (0, promises_1.stat)(params.lockFilePath);
|
|
257
565
|
const lockCreatedAtMs = lock?.createdAtMs ?? lockFileStats.mtimeMs;
|
|
258
|
-
if (
|
|
566
|
+
if (Date.now() - lockCreatedAtMs < params.lockStaleAfterMs) {
|
|
259
567
|
return;
|
|
260
568
|
}
|
|
261
|
-
if (
|
|
569
|
+
if ((0, util_ts_1.isNil)(lock)) {
|
|
262
570
|
await (0, promises_1.rm)(params.lockFilePath, { force: true });
|
|
263
571
|
return;
|
|
264
572
|
}
|
|
@@ -305,6 +613,97 @@ function isValidBearerToken(authToken) {
|
|
|
305
613
|
authToken.startsWith(BEARER_TOKEN_PREFIX) &&
|
|
306
614
|
authToken.length > BEARER_TOKEN_PREFIX.length);
|
|
307
615
|
}
|
|
616
|
+
async function validateAdminAuthToken(params) {
|
|
617
|
+
if ((0, util_ts_1.isNil)(params.validateToken)) {
|
|
618
|
+
return true;
|
|
619
|
+
}
|
|
620
|
+
const abortController = new AbortController();
|
|
621
|
+
const timeoutAbortController = new AbortController();
|
|
622
|
+
try {
|
|
623
|
+
return await Promise.race([
|
|
624
|
+
params.validateToken({
|
|
625
|
+
authToken: params.authToken,
|
|
626
|
+
signal: abortController.signal,
|
|
627
|
+
}),
|
|
628
|
+
throwAfterAdminAuthTokenValidationTimeout({
|
|
629
|
+
signal: timeoutAbortController.signal,
|
|
630
|
+
timeoutMs: params.validationTimeoutMs,
|
|
631
|
+
}),
|
|
632
|
+
]);
|
|
633
|
+
}
|
|
634
|
+
finally {
|
|
635
|
+
abortController.abort();
|
|
636
|
+
timeoutAbortController.abort();
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
async function throwAfterAdminAuthTokenValidationTimeout(params) {
|
|
640
|
+
await (0, promises_2.setTimeout)(params.timeoutMs, undefined, { signal: params.signal });
|
|
641
|
+
throw new Error(`Admin auth token validation timed out after ${params.timeoutMs}ms`);
|
|
642
|
+
}
|
|
643
|
+
function getValidationPolicyFingerprint(params) {
|
|
644
|
+
return (0, util_ts_1.isDefined)(params.validateToken) && (0, util_ts_1.isDefined)(params.validationPolicy)
|
|
645
|
+
? (0, util_ts_1.createDeterministicHash)(params.validationPolicy).slice(0, 16)
|
|
646
|
+
: undefined;
|
|
647
|
+
}
|
|
648
|
+
function getValidationTimeoutMs(params) {
|
|
649
|
+
const lockStaleAfterMs = params.lockStaleAfterMs ?? DEFAULT_LOCK_STALE_AFTER_MS;
|
|
650
|
+
return Math.min(params.validationTimeoutMs ?? DEFAULT_VALIDATION_TIMEOUT_MS, Math.max(1, Math.floor(lockStaleAfterMs / 2)));
|
|
651
|
+
}
|
|
652
|
+
function getAdminAuthTokenExpiration(params) {
|
|
653
|
+
const jwtExpiresAtMs = getJwtExpirationMs({ authToken: params.authToken });
|
|
654
|
+
const configuredExpiresAtMs = params.nowMs + params.cacheDurationMs;
|
|
655
|
+
const jwtCacheExpiresAtMs = (0, util_ts_1.isNil)(jwtExpiresAtMs)
|
|
656
|
+
? Number.POSITIVE_INFINITY
|
|
657
|
+
: jwtExpiresAtMs - params.jwtExpirationSafetySkewMs;
|
|
658
|
+
return {
|
|
659
|
+
expiresAtMs: Math.min(configuredExpiresAtMs, jwtCacheExpiresAtMs),
|
|
660
|
+
jwtExpiresAtMs,
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
function getJwtExpirationMs(params) {
|
|
664
|
+
const rawToken = params.authToken.slice(BEARER_TOKEN_PREFIX.length);
|
|
665
|
+
const tokenSegments = rawToken.split(".");
|
|
666
|
+
if (tokenSegments.length !== 3) {
|
|
667
|
+
return undefined;
|
|
668
|
+
}
|
|
669
|
+
const [, encodedPayload] = tokenSegments;
|
|
670
|
+
if ((0, util_ts_1.isNil)(encodedPayload)) {
|
|
671
|
+
return undefined;
|
|
672
|
+
}
|
|
673
|
+
try {
|
|
674
|
+
const payload = JSON.parse(Buffer.from(encodedPayload, "base64url").toString("utf8"));
|
|
675
|
+
const expirationSeconds = (0, util_ts_1.isRecord)(payload) ? payload["exp"] : undefined;
|
|
676
|
+
return typeof expirationSeconds === "number" && Number.isFinite(expirationSeconds)
|
|
677
|
+
? expirationSeconds * 1000
|
|
678
|
+
: undefined;
|
|
679
|
+
}
|
|
680
|
+
catch {
|
|
681
|
+
return undefined;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
function emitCacheEvent(params) {
|
|
685
|
+
try {
|
|
686
|
+
const callbackResult = params.onCacheEvent?.({
|
|
687
|
+
...params.event,
|
|
688
|
+
audience: params.cachePaths.audience,
|
|
689
|
+
cacheKeyFingerprint: params.cachePaths.cacheKeyFingerprint,
|
|
690
|
+
});
|
|
691
|
+
if (callbackResult instanceof Promise) {
|
|
692
|
+
void ignoreRejectedCacheEventCallback({ callbackResult });
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
catch {
|
|
696
|
+
// Diagnostics must never block token creation or cache access.
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
async function ignoreRejectedCacheEventCallback(params) {
|
|
700
|
+
try {
|
|
701
|
+
await params.callbackResult;
|
|
702
|
+
}
|
|
703
|
+
catch {
|
|
704
|
+
// Diagnostics must never block token creation or cache access.
|
|
705
|
+
}
|
|
706
|
+
}
|
|
308
707
|
function isNodeErrorWithCode(params) {
|
|
309
708
|
return (0, util_ts_1.isRecord)(params.error) && params.error["code"] === params.code;
|
|
310
709
|
}
|
|
@@ -322,7 +721,7 @@ function getTokenCommandArguments(params) {
|
|
|
322
721
|
params.adminEmail,
|
|
323
722
|
"--quiet",
|
|
324
723
|
];
|
|
325
|
-
if (params.clientName
|
|
724
|
+
if ((0, util_ts_1.isDefined)(params.clientName)) {
|
|
326
725
|
argumentsList.push("-n", params.clientName);
|
|
327
726
|
}
|
|
328
727
|
return argumentsList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adminAuthToken.js","sourceRoot":"","sources":["../../../../../packages/playwright-toolkit/src/lib/adminAuthToken.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adminAuthToken.js","sourceRoot":"","sources":["../../../../../packages/playwright-toolkit/src/lib/adminAuthToken.ts"],"names":[],"mappings":"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"}
|