@clipboard-health/playwright-toolkit 1.0.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 +221 -0
- package/package.json +39 -0
- package/src/index.d.ts +7 -0
- package/src/index.js +11 -0
- package/src/index.js.map +1 -0
- package/src/lib/adminAuthToken.d.ts +56 -0
- package/src/lib/adminAuthToken.js +369 -0
- package/src/lib/adminAuthToken.js.map +1 -0
- package/src/lib/cognitoDiagnostics.d.ts +41 -0
- package/src/lib/cognitoDiagnostics.js +331 -0
- package/src/lib/cognitoDiagnostics.js.map +1 -0
- package/src/lib/deployedAssets.d.ts +77 -0
- package/src/lib/deployedAssets.js +348 -0
- package/src/lib/deployedAssets.js.map +1 -0
- package/src/lib/mailpit.d.ts +86 -0
- package/src/lib/mailpit.js +252 -0
- package/src/lib/mailpit.js.map +1 -0
- package/src/lib/retry.d.ts +66 -0
- package/src/lib/retry.js +262 -0
- package/src/lib/retry.js.map +1 -0
- package/src/lib/setupRetry.d.ts +29 -0
- package/src/lib/setupRetry.js +55 -0
- package/src/lib/setupRetry.js.map +1 -0
- package/src/lib/traceparent.d.ts +31 -0
- package/src/lib/traceparent.js +66 -0
- package/src/lib/traceparent.js.map +1 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOrCreateAdminAuthToken = getOrCreateAdminAuthToken;
|
|
4
|
+
exports.generateAdminAuthToken = generateAdminAuthToken;
|
|
5
|
+
exports.isRetryableAdminAuthTokenGenerationError = isRetryableAdminAuthTokenGenerationError;
|
|
6
|
+
exports.isAdminAuthTokenExpired = isAdminAuthTokenExpired;
|
|
7
|
+
const tslib_1 = require("tslib");
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
10
|
+
const promises_1 = require("node:fs/promises");
|
|
11
|
+
const node_os_1 = require("node:os");
|
|
12
|
+
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
13
|
+
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
14
|
+
const retry_1 = require("./retry");
|
|
15
|
+
// cspell:ignore defineauthchallenge getparameters maketesttoken
|
|
16
|
+
const DEFAULT_CACHE_DIRECTORY_NAME = "clipboard-health-playwright-admin-auth";
|
|
17
|
+
const DEFAULT_LOCK_STALE_AFTER_MS = 5 * 60 * 1000;
|
|
18
|
+
const DEFAULT_LOCK_WAIT_TIMEOUT_MS = 6 * 60 * 1000;
|
|
19
|
+
const DEFAULT_LOCK_RETRY_DELAY_MS = 250;
|
|
20
|
+
const DEFAULT_LOCK_RETRY_JITTER_MS = 250;
|
|
21
|
+
const BEARER_TOKEN_PREFIX = "Bearer ";
|
|
22
|
+
const DEFAULT_COMMAND_TIMEOUT_MS = 30_000;
|
|
23
|
+
const DEFAULT_GENERATION_MAX_ATTEMPTS = 4;
|
|
24
|
+
const DEFAULT_GENERATION_RETRY_DELAY_MS = 2000;
|
|
25
|
+
const DEFAULT_GENERATION_RETRY_JITTER_MS = 1000;
|
|
26
|
+
const REDACTED_USER_LABEL = "[redacted-user]";
|
|
27
|
+
/**
|
|
28
|
+
* Returns a valid cached admin token or creates one while holding an atomic
|
|
29
|
+
* filesystem lock shared by Playwright workers, shards, and local processes.
|
|
30
|
+
*/
|
|
31
|
+
async function getOrCreateAdminAuthToken(params) {
|
|
32
|
+
validateParams(params);
|
|
33
|
+
const cachePaths = getCachePaths(params);
|
|
34
|
+
const nowImplementation = params.nowImplementation ?? Date.now;
|
|
35
|
+
await (0, promises_1.mkdir)(cachePaths.cacheDirectoryPath, { recursive: true });
|
|
36
|
+
const cachedEntry = await readCachedEntry({
|
|
37
|
+
cacheFilePath: cachePaths.cacheFilePath,
|
|
38
|
+
nowImplementation,
|
|
39
|
+
});
|
|
40
|
+
if (cachedEntry !== undefined) {
|
|
41
|
+
return cachedEntry;
|
|
42
|
+
}
|
|
43
|
+
return await getOrCreateWithLock({
|
|
44
|
+
...params,
|
|
45
|
+
cachePaths,
|
|
46
|
+
nowImplementation,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generates an admin token with classified CLI retries, redacted errors, and
|
|
51
|
+
* the lock-serialized cross-process cache.
|
|
52
|
+
*/
|
|
53
|
+
async function generateAdminAuthToken(params) {
|
|
54
|
+
return await getOrCreateAdminAuthToken({
|
|
55
|
+
...params,
|
|
56
|
+
createToken: async () => {
|
|
57
|
+
const result = await (0, retry_1.runWithRetry)({
|
|
58
|
+
operationName: "generate admin auth token",
|
|
59
|
+
operation: async () => {
|
|
60
|
+
try {
|
|
61
|
+
const commandResult = await (params.commandRunner ?? runAdminAuthTokenCommand)({
|
|
62
|
+
executable: params.commandExecutable ?? "cbh",
|
|
63
|
+
arguments: getTokenCommandArguments(params),
|
|
64
|
+
timeoutMs: params.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS,
|
|
65
|
+
});
|
|
66
|
+
const rawToken = commandResult.stdout.split("\n")[0]?.trim();
|
|
67
|
+
if (rawToken === undefined || rawToken.length === 0) {
|
|
68
|
+
throw new Error("Token generation returned an empty token");
|
|
69
|
+
}
|
|
70
|
+
return `${BEARER_TOKEN_PREFIX}${rawToken}`;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw createSafeAdminAuthTokenError({
|
|
74
|
+
adminEmail: params.adminEmail,
|
|
75
|
+
commandTimeoutMs: params.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS,
|
|
76
|
+
error,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
mode: {
|
|
81
|
+
kind: "classified",
|
|
82
|
+
maxAttempts: params.generationMaxAttempts ?? DEFAULT_GENERATION_MAX_ATTEMPTS,
|
|
83
|
+
delayMs: ({ attemptNumber }) => (params.generationRetryDelayMs ?? DEFAULT_GENERATION_RETRY_DELAY_MS) * attemptNumber +
|
|
84
|
+
Math.floor((params.randomImplementation?.() ?? Math.random()) *
|
|
85
|
+
(params.retryJitterMs ?? DEFAULT_GENERATION_RETRY_JITTER_MS)),
|
|
86
|
+
isTransient: ({ error }) => isRetryableAdminAuthTokenGenerationError({ error }),
|
|
87
|
+
},
|
|
88
|
+
sleepImplementation: params.sleepImplementation,
|
|
89
|
+
nowImplementation: params.nowImplementation,
|
|
90
|
+
});
|
|
91
|
+
return result.value;
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function isRetryableAdminAuthTokenGenerationError(params) {
|
|
96
|
+
if (!(params.error instanceof Error)) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
const normalizedMessage = params.error.message.toLowerCase();
|
|
100
|
+
if (normalizedMessage.includes("timed out after")) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
if (normalizedMessage.includes("too many requests")) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
if (normalizedMessage.includes("defineauthchallenge failed") &&
|
|
107
|
+
normalizedMessage.includes("ssm:getparameters") &&
|
|
108
|
+
normalizedMessage.includes("s2s-external-client/zendesk-auto-login/client_id")) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return ((normalizedMessage.includes("maketesttoken") ||
|
|
112
|
+
normalizedMessage.includes("make_test_token")) &&
|
|
113
|
+
normalizedMessage.includes("incorrect username or password"));
|
|
114
|
+
}
|
|
115
|
+
function isAdminAuthTokenExpired(params) {
|
|
116
|
+
return (params.nowMs ?? Date.now()) >= params.cacheEntry.expiresAtMs;
|
|
117
|
+
}
|
|
118
|
+
async function getOrCreateWithLock(params) {
|
|
119
|
+
const waitStartedAtMs = params.nowImplementation();
|
|
120
|
+
const lockWaitTimeoutMs = params.lockWaitTimeoutMs ?? DEFAULT_LOCK_WAIT_TIMEOUT_MS;
|
|
121
|
+
const sleepImplementation = params.sleepImplementation ?? sleep;
|
|
122
|
+
/* eslint-disable no-await-in-loop -- Lock acquisition and ownership checks are sequential. */
|
|
123
|
+
while (params.nowImplementation() - waitStartedAtMs < lockWaitTimeoutMs) {
|
|
124
|
+
const lock = await tryAcquireLock({
|
|
125
|
+
lockFilePath: params.cachePaths.lockFilePath,
|
|
126
|
+
nowImplementation: params.nowImplementation,
|
|
127
|
+
});
|
|
128
|
+
if (lock !== undefined) {
|
|
129
|
+
try {
|
|
130
|
+
const cachedEntry = await readCachedEntry({
|
|
131
|
+
cacheFilePath: params.cachePaths.cacheFilePath,
|
|
132
|
+
nowImplementation: params.nowImplementation,
|
|
133
|
+
});
|
|
134
|
+
if (cachedEntry !== undefined) {
|
|
135
|
+
return cachedEntry;
|
|
136
|
+
}
|
|
137
|
+
const authToken = await params.createToken();
|
|
138
|
+
if (!isValidBearerToken(authToken)) {
|
|
139
|
+
throw new Error("Generated admin auth token is malformed");
|
|
140
|
+
}
|
|
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
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
await releaseLock({
|
|
153
|
+
lockFilePath: params.cachePaths.lockFilePath,
|
|
154
|
+
ownerId: lock.ownerId,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
await removeStaleLock({
|
|
159
|
+
lockFilePath: params.cachePaths.lockFilePath,
|
|
160
|
+
lockStaleAfterMs: params.lockStaleAfterMs ?? DEFAULT_LOCK_STALE_AFTER_MS,
|
|
161
|
+
nowImplementation: params.nowImplementation,
|
|
162
|
+
});
|
|
163
|
+
const retryDelayMs = (params.lockRetryDelayMs ?? DEFAULT_LOCK_RETRY_DELAY_MS) +
|
|
164
|
+
Math.floor((params.randomImplementation?.() ?? Math.random()) *
|
|
165
|
+
(params.lockRetryJitterMs ?? DEFAULT_LOCK_RETRY_JITTER_MS));
|
|
166
|
+
await sleepImplementation({ durationMs: retryDelayMs });
|
|
167
|
+
}
|
|
168
|
+
/* eslint-enable no-await-in-loop */
|
|
169
|
+
throw new Error(`Timed out waiting for admin auth token cache lock: ${params.cachePaths.lockFilePath}`);
|
|
170
|
+
}
|
|
171
|
+
function validateParams(params) {
|
|
172
|
+
if (params.adminEmail.trim().length === 0) {
|
|
173
|
+
throw new Error("adminEmail must not be empty");
|
|
174
|
+
}
|
|
175
|
+
if (params.apiEnvironmentName.trim().length === 0) {
|
|
176
|
+
throw new Error("apiEnvironmentName must not be empty");
|
|
177
|
+
}
|
|
178
|
+
if (!Number.isFinite(params.cacheDurationMs) || params.cacheDurationMs <= 0) {
|
|
179
|
+
throw new Error("cacheDurationMs must be positive");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function getCachePaths(params) {
|
|
183
|
+
const cacheDirectoryPath = params.cacheDirectory ?? node_path_1.default.join((0, node_os_1.tmpdir)(), DEFAULT_CACHE_DIRECTORY_NAME);
|
|
184
|
+
const environmentSegment = params.apiEnvironmentName.replaceAll(/[^a-zA-Z0-9._-]/g, "_");
|
|
185
|
+
const cacheKeyHash = (0, util_ts_1.createDeterministicHash)(`${params.apiEnvironmentName}\0${params.adminEmail}`).slice(0, 16);
|
|
186
|
+
const cacheFileName = `admin-auth-token-${environmentSegment}-${cacheKeyHash}.json`;
|
|
187
|
+
return {
|
|
188
|
+
cacheDirectoryPath,
|
|
189
|
+
cacheFilePath: node_path_1.default.join(cacheDirectoryPath, cacheFileName),
|
|
190
|
+
lockFilePath: node_path_1.default.join(cacheDirectoryPath, `${cacheFileName}.lock`),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async function readCachedEntry(params) {
|
|
194
|
+
try {
|
|
195
|
+
const contents = await (0, promises_1.readFile)(params.cacheFilePath, "utf8");
|
|
196
|
+
const parsed = JSON.parse(contents);
|
|
197
|
+
if (!isStoredCacheEntry(parsed)) {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
if (params.nowImplementation() >= parsed.expiresAtMs) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
return parsed;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (isNodeErrorWithCode({ error, code: "ENOENT" }) || error instanceof SyntaxError) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function isStoredCacheEntry(value) {
|
|
213
|
+
return ((0, util_ts_1.isRecord)(value) &&
|
|
214
|
+
typeof value["authToken"] === "string" &&
|
|
215
|
+
isValidBearerToken(value["authToken"]) &&
|
|
216
|
+
typeof value["expiresAtMs"] === "number" &&
|
|
217
|
+
Number.isFinite(value["expiresAtMs"]));
|
|
218
|
+
}
|
|
219
|
+
async function writeCachedEntry(params) {
|
|
220
|
+
const temporaryFilePath = `${params.cacheFilePath}.${process.pid}.${(0, node_crypto_1.randomUUID)()}.tmp`;
|
|
221
|
+
try {
|
|
222
|
+
await (0, promises_1.writeFile)(temporaryFilePath, JSON.stringify(params.storedEntry), {
|
|
223
|
+
encoding: "utf8",
|
|
224
|
+
mode: 0o600,
|
|
225
|
+
});
|
|
226
|
+
await (0, promises_1.rename)(temporaryFilePath, params.cacheFilePath);
|
|
227
|
+
}
|
|
228
|
+
finally {
|
|
229
|
+
await (0, promises_1.rm)(temporaryFilePath, { force: true });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
async function tryAcquireLock(params) {
|
|
233
|
+
const lock = {
|
|
234
|
+
ownerId: `${process.pid}-${(0, node_crypto_1.randomUUID)()}`,
|
|
235
|
+
createdAtMs: params.nowImplementation(),
|
|
236
|
+
pid: process.pid,
|
|
237
|
+
};
|
|
238
|
+
try {
|
|
239
|
+
await (0, promises_1.writeFile)(params.lockFilePath, JSON.stringify(lock), {
|
|
240
|
+
encoding: "utf8",
|
|
241
|
+
flag: "wx",
|
|
242
|
+
mode: 0o600,
|
|
243
|
+
});
|
|
244
|
+
return lock;
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
if (isNodeErrorWithCode({ error, code: "EEXIST" })) {
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function removeStaleLock(params) {
|
|
254
|
+
try {
|
|
255
|
+
const lock = await readLock(params.lockFilePath);
|
|
256
|
+
const lockFileStats = await (0, promises_1.stat)(params.lockFilePath);
|
|
257
|
+
const lockCreatedAtMs = lock?.createdAtMs ?? lockFileStats.mtimeMs;
|
|
258
|
+
if (params.nowImplementation() - lockCreatedAtMs < params.lockStaleAfterMs) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (lock === undefined) {
|
|
262
|
+
await (0, promises_1.rm)(params.lockFilePath, { force: true });
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
await releaseLock({
|
|
266
|
+
lockFilePath: params.lockFilePath,
|
|
267
|
+
ownerId: lock.ownerId,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
if (!isNodeErrorWithCode({ error, code: "ENOENT" })) {
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async function releaseLock(params) {
|
|
277
|
+
const currentLock = await readLock(params.lockFilePath);
|
|
278
|
+
if (currentLock?.ownerId === params.ownerId) {
|
|
279
|
+
await (0, promises_1.rm)(params.lockFilePath, { force: true });
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
async function readLock(lockFilePath) {
|
|
283
|
+
try {
|
|
284
|
+
const contents = await (0, promises_1.readFile)(lockFilePath, "utf8");
|
|
285
|
+
const parsed = JSON.parse(contents);
|
|
286
|
+
return isAdminAuthTokenLock(parsed) ? parsed : undefined;
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
if (isNodeErrorWithCode({ error, code: "ENOENT" }) || error instanceof SyntaxError) {
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
throw error;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
function isAdminAuthTokenLock(value) {
|
|
296
|
+
return ((0, util_ts_1.isRecord)(value) &&
|
|
297
|
+
typeof value["ownerId"] === "string" &&
|
|
298
|
+
typeof value["createdAtMs"] === "number" &&
|
|
299
|
+
Number.isFinite(value["createdAtMs"]) &&
|
|
300
|
+
typeof value["pid"] === "number" &&
|
|
301
|
+
Number.isFinite(value["pid"]));
|
|
302
|
+
}
|
|
303
|
+
function isValidBearerToken(authToken) {
|
|
304
|
+
return (authToken === authToken.trim() &&
|
|
305
|
+
authToken.startsWith(BEARER_TOKEN_PREFIX) &&
|
|
306
|
+
authToken.length > BEARER_TOKEN_PREFIX.length);
|
|
307
|
+
}
|
|
308
|
+
function isNodeErrorWithCode(params) {
|
|
309
|
+
return (0, util_ts_1.isRecord)(params.error) && params.error["code"] === params.code;
|
|
310
|
+
}
|
|
311
|
+
async function sleep(params) {
|
|
312
|
+
await new Promise((resolve) => {
|
|
313
|
+
setTimeout(resolve, params.durationMs);
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
function getTokenCommandArguments(params) {
|
|
317
|
+
const argumentsList = [
|
|
318
|
+
"auth",
|
|
319
|
+
"gentoken",
|
|
320
|
+
"user",
|
|
321
|
+
params.apiEnvironmentName,
|
|
322
|
+
params.adminEmail,
|
|
323
|
+
"--quiet",
|
|
324
|
+
];
|
|
325
|
+
if (params.clientName !== undefined) {
|
|
326
|
+
argumentsList.push("-n", params.clientName);
|
|
327
|
+
}
|
|
328
|
+
return argumentsList;
|
|
329
|
+
}
|
|
330
|
+
async function runAdminAuthTokenCommand(params) {
|
|
331
|
+
return await new Promise((resolve, reject) => {
|
|
332
|
+
(0, node_child_process_1.execFile)(params.executable, [...params.arguments], {
|
|
333
|
+
encoding: "utf8",
|
|
334
|
+
// oxlint-disable-next-line node/no-process-env -- The CLI needs inherited AWS credentials and config.
|
|
335
|
+
env: { ...process.env, DOTENV_CONFIG_QUIET: "true" },
|
|
336
|
+
timeout: params.timeoutMs,
|
|
337
|
+
}, (error, stdout, stderr) => {
|
|
338
|
+
if (error !== null) {
|
|
339
|
+
reject(new Error(error.message, { cause: error }));
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
resolve({ stdout, stderr });
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
function createSafeAdminAuthTokenError(params) {
|
|
347
|
+
const sourceMessage = params.error instanceof Error ? params.error.message : String(params.error);
|
|
348
|
+
const redactedMessage = sourceMessage.split(params.adminEmail).join(REDACTED_USER_LABEL);
|
|
349
|
+
const timeoutSuffix = isCommandTimeoutError({ error: params.error })
|
|
350
|
+
? `\nTimed out after ${params.commandTimeoutMs}ms`
|
|
351
|
+
: "";
|
|
352
|
+
return new Error(`${redactedMessage}${timeoutSuffix}`);
|
|
353
|
+
}
|
|
354
|
+
function isCommandTimeoutError(params) {
|
|
355
|
+
const inspectedErrors = new Set();
|
|
356
|
+
let error = params.error;
|
|
357
|
+
while ((0, util_ts_1.isRecord)(error) && !inspectedErrors.has(error)) {
|
|
358
|
+
inspectedErrors.add(error);
|
|
359
|
+
if (error["killed"] === true &&
|
|
360
|
+
(error["code"] === "ETIMEDOUT" ||
|
|
361
|
+
error["signal"] === "SIGTERM" ||
|
|
362
|
+
error["signal"] === "SIGKILL")) {
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
error = error["cause"];
|
|
366
|
+
}
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=adminAuthToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAuthToken.js","sourceRoot":"","sources":["../../../../../packages/playwright-toolkit/src/lib/adminAuthToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Page, TestInfo } from "@playwright/test";
|
|
2
|
+
type ExpectedUrl = Parameters<Page["waitForURL"]>[0];
|
|
3
|
+
export interface CognitoRequestLike {
|
|
4
|
+
headers(): Record<string, string>;
|
|
5
|
+
method(): string;
|
|
6
|
+
postDataJSON(): unknown;
|
|
7
|
+
url(): string;
|
|
8
|
+
}
|
|
9
|
+
export interface CognitoRequestSummary {
|
|
10
|
+
action: string;
|
|
11
|
+
challengeName: string;
|
|
12
|
+
method: string;
|
|
13
|
+
target: string;
|
|
14
|
+
url: string;
|
|
15
|
+
}
|
|
16
|
+
export interface FillOtpAndWaitForCognitoRedirectParams {
|
|
17
|
+
expectedUrl: ExpectedUrl;
|
|
18
|
+
otp: string;
|
|
19
|
+
page: Page;
|
|
20
|
+
testInfo?: TestInfo | undefined;
|
|
21
|
+
expectedUrlTimeoutMs?: number | undefined;
|
|
22
|
+
inputLabel?: string | RegExp | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Fills an OTP and waits for the login redirect. On failure it reports the
|
|
26
|
+
* observed Cognito challenge, sanitized response/page text, current URL, and
|
|
27
|
+
* an optional redacted screenshot attachment.
|
|
28
|
+
*/
|
|
29
|
+
export declare function fillOtpAndWaitForCognitoRedirect(params: FillOtpAndWaitForCognitoRedirectParams): Promise<{
|
|
30
|
+
redirectUrl: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function isCognitoOtpChallengeRequest(params: {
|
|
33
|
+
request: CognitoRequestLike;
|
|
34
|
+
}): boolean;
|
|
35
|
+
export declare function summarizeCognitoAuthRequest(params: {
|
|
36
|
+
request: CognitoRequestLike;
|
|
37
|
+
}): CognitoRequestSummary;
|
|
38
|
+
export declare function sanitizeCognitoDiagnosticText(params: {
|
|
39
|
+
text: string;
|
|
40
|
+
}): string;
|
|
41
|
+
export {};
|