@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,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fillOtpAndWaitForCognitoRedirect = fillOtpAndWaitForCognitoRedirect;
|
|
4
|
+
exports.isCognitoOtpChallengeRequest = isCognitoOtpChallengeRequest;
|
|
5
|
+
exports.summarizeCognitoAuthRequest = summarizeCognitoAuthRequest;
|
|
6
|
+
exports.sanitizeCognitoDiagnosticText = sanitizeCognitoDiagnosticText;
|
|
7
|
+
// cspell:ignore requestfailed
|
|
8
|
+
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
9
|
+
const COGNITO_HOST_PATTERN = /^cognito-idp\.[^.]+\.amazonaws\.com$/;
|
|
10
|
+
const RESPOND_TO_AUTH_CHALLENGE_TARGET = "AWSCognitoIdentityProviderService.RespondToAuthChallenge";
|
|
11
|
+
const OTP_CHALLENGE_NAMES = new Set(["EMAIL_OTP", "SMS_OTP"]);
|
|
12
|
+
const DEFAULT_REDIRECT_TIMEOUT_MS = 30_000;
|
|
13
|
+
const DIAGNOSTIC_SAMPLE_MAX_LENGTH = 700;
|
|
14
|
+
const SCREENSHOT_ATTACHMENT_NAME = "cognito-otp-diagnostics";
|
|
15
|
+
/**
|
|
16
|
+
* Fills an OTP and waits for the login redirect. On failure it reports the
|
|
17
|
+
* observed Cognito challenge, sanitized response/page text, current URL, and
|
|
18
|
+
* an optional redacted screenshot attachment.
|
|
19
|
+
*/
|
|
20
|
+
async function fillOtpAndWaitForCognitoRedirect(params) {
|
|
21
|
+
const timeoutMs = params.expectedUrlTimeoutMs ?? DEFAULT_REDIRECT_TIMEOUT_MS;
|
|
22
|
+
const monitor = createCognitoChallengeMonitor({
|
|
23
|
+
page: params.page,
|
|
24
|
+
timeoutMs,
|
|
25
|
+
});
|
|
26
|
+
try {
|
|
27
|
+
await params.page
|
|
28
|
+
.getByLabel(params.inputLabel ?? "Verification Code", { exact: true })
|
|
29
|
+
.fill(params.otp);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
monitor.dispose();
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
await params.page.waitForURL(params.expectedUrl, { timeout: timeoutMs });
|
|
37
|
+
monitor.dispose();
|
|
38
|
+
return { redirectUrl: params.page.url() };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const diagnostics = await getFailureDiagnostics({
|
|
42
|
+
attemptPromise: monitor.result,
|
|
43
|
+
page: params.page,
|
|
44
|
+
testInfo: params.testInfo,
|
|
45
|
+
});
|
|
46
|
+
const finalErrorMessage = sanitizeCognitoDiagnosticText({
|
|
47
|
+
text: (0, util_ts_1.toErrorMessage)(error),
|
|
48
|
+
});
|
|
49
|
+
// oxlint-disable-next-line preserve-caught-error -- Raw Playwright errors may contain OTPs or account PII.
|
|
50
|
+
throw new Error(`Post-OTP redirect did not reach ${formatExpectedUrl(params.expectedUrl)} ` +
|
|
51
|
+
`within ${timeoutMs}ms. ${diagnostics} Last error: ${finalErrorMessage}`, { cause: new Error(finalErrorMessage) });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function isCognitoOtpChallengeRequest(params) {
|
|
55
|
+
const { request } = params;
|
|
56
|
+
if (request.method() !== "POST" || !isCognitoIdpUrl({ rawUrl: request.url() })) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (request.headers()["x-amz-target"] !== RESPOND_TO_AUTH_CHALLENGE_TARGET) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
const challengeName = getStringProperty({
|
|
63
|
+
value: getRequestPostDataJson({ request }),
|
|
64
|
+
propertyName: "ChallengeName",
|
|
65
|
+
});
|
|
66
|
+
return challengeName !== undefined && OTP_CHALLENGE_NAMES.has(challengeName);
|
|
67
|
+
}
|
|
68
|
+
function summarizeCognitoAuthRequest(params) {
|
|
69
|
+
const target = params.request.headers()["x-amz-target"] ?? "unknown";
|
|
70
|
+
const targetParts = target.split(".");
|
|
71
|
+
const postData = getRequestPostDataJson({ request: params.request });
|
|
72
|
+
return {
|
|
73
|
+
action: targetParts.at(-1) ?? target,
|
|
74
|
+
challengeName: getStringProperty({ value: postData, propertyName: "ChallengeName" }) ?? "unknown",
|
|
75
|
+
method: params.request.method(),
|
|
76
|
+
target,
|
|
77
|
+
url: sanitizeUrl({ rawUrl: params.request.url() }),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function sanitizeCognitoDiagnosticText(params) {
|
|
81
|
+
return params.text
|
|
82
|
+
.replaceAll(/Bearer\s+[A-Za-z0-9._-]+/gi, "Bearer [redacted-token]")
|
|
83
|
+
.replaceAll(/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, "[redacted-jwt]")
|
|
84
|
+
.replaceAll(/("(?:[^"]*(?:authorization|challengeResponse|code|email|password|phone|session|token)[^"]*)"\s*:\s*)"[^"]*"/gi, '$1"[redacted]"')
|
|
85
|
+
.replaceAll(/\b(?:authorization|challengeResponse|code|email|password|phone|session|token)=\S+/gi, (match) => match.replace(/[=].*/, "=[redacted]"))
|
|
86
|
+
.replaceAll(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[redacted-email]")
|
|
87
|
+
.replaceAll(/\+?\d[\d\s().-]{5,}\d/g, "[redacted-number]")
|
|
88
|
+
.replaceAll(/\b\d{4,}\b/g, "[redacted-number]");
|
|
89
|
+
}
|
|
90
|
+
function createCognitoChallengeMonitor(params) {
|
|
91
|
+
let complete;
|
|
92
|
+
const result = new Promise((resolve) => {
|
|
93
|
+
let isComplete = false;
|
|
94
|
+
const timeout = setTimeout(() => {
|
|
95
|
+
completeAttempt({ timeoutMs: params.timeoutMs, type: "not-observed" });
|
|
96
|
+
}, params.timeoutMs);
|
|
97
|
+
function completeAttempt(attempt) {
|
|
98
|
+
if (isComplete) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
isComplete = true;
|
|
102
|
+
clearTimeout(timeout);
|
|
103
|
+
params.page.off("response", handleResponse);
|
|
104
|
+
params.page.off("requestfailed", handleRequestFailure);
|
|
105
|
+
resolve(attempt);
|
|
106
|
+
}
|
|
107
|
+
complete = completeAttempt;
|
|
108
|
+
async function handleResponse(response) {
|
|
109
|
+
if (!isCognitoOtpChallengeRequest({ request: response.request() })) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
completeAttempt(await buildResponseAttempt({ response }));
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
completeAttempt({
|
|
117
|
+
request: summarizeCognitoAuthRequest({ request: response.request() }),
|
|
118
|
+
responseBodySample: `unavailable: ${sanitizeCognitoDiagnosticText({
|
|
119
|
+
text: (0, util_ts_1.toErrorMessage)(error),
|
|
120
|
+
})}`,
|
|
121
|
+
status: response.status(),
|
|
122
|
+
statusText: response.statusText(),
|
|
123
|
+
type: "response",
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function handleRequestFailure(request) {
|
|
128
|
+
if (!isCognitoOtpChallengeRequest({ request })) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
completeAttempt({
|
|
132
|
+
failureText: sanitizeCognitoDiagnosticText({
|
|
133
|
+
text: request.failure()?.errorText ?? "unknown request failure",
|
|
134
|
+
}),
|
|
135
|
+
request: summarizeCognitoAuthRequest({ request }),
|
|
136
|
+
type: "request-failure",
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
params.page.on("response", handleResponse);
|
|
140
|
+
params.page.on("requestfailed", handleRequestFailure);
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
result,
|
|
144
|
+
dispose() {
|
|
145
|
+
complete?.({ timeoutMs: params.timeoutMs, type: "not-observed" });
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async function buildResponseAttempt(params) {
|
|
150
|
+
return {
|
|
151
|
+
request: summarizeCognitoAuthRequest({
|
|
152
|
+
request: params.response.request(),
|
|
153
|
+
}),
|
|
154
|
+
responseBodySample: await getResponseBodySample({
|
|
155
|
+
response: params.response,
|
|
156
|
+
}),
|
|
157
|
+
status: params.response.status(),
|
|
158
|
+
statusText: params.response.statusText(),
|
|
159
|
+
type: "response",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
async function getFailureDiagnostics(params) {
|
|
163
|
+
const [attempt, pageTextSample, screenshotStatus] = await Promise.all([
|
|
164
|
+
params.attemptPromise,
|
|
165
|
+
getVisiblePageTextSample({ page: params.page }),
|
|
166
|
+
attachSanitizedScreenshot({ page: params.page, testInfo: params.testInfo }),
|
|
167
|
+
]);
|
|
168
|
+
return [
|
|
169
|
+
`Cognito OTP challenge: ${formatAttempt(attempt)}.`,
|
|
170
|
+
`Current URL: ${sanitizeUrl({ rawUrl: params.page.url() })}.`,
|
|
171
|
+
`Visible page text sample: "${pageTextSample}".`,
|
|
172
|
+
`Screenshot: ${screenshotStatus}.`,
|
|
173
|
+
].join(" ");
|
|
174
|
+
}
|
|
175
|
+
function formatAttempt(attempt) {
|
|
176
|
+
if (attempt.type === "not-observed") {
|
|
177
|
+
return `not observed within ${attempt.timeoutMs}ms`;
|
|
178
|
+
}
|
|
179
|
+
const request = [
|
|
180
|
+
`method=${attempt.request.method}`,
|
|
181
|
+
`url=${attempt.request.url}`,
|
|
182
|
+
`target=${attempt.request.target}`,
|
|
183
|
+
`action=${attempt.request.action}`,
|
|
184
|
+
`challengeName=${attempt.request.challengeName}`,
|
|
185
|
+
].join("; ");
|
|
186
|
+
if (attempt.type === "request-failure") {
|
|
187
|
+
return `${request}; failureText="${attempt.failureText}"`;
|
|
188
|
+
}
|
|
189
|
+
const status = attempt.statusText.length === 0
|
|
190
|
+
? `${attempt.status}`
|
|
191
|
+
: `${attempt.status} ${attempt.statusText}`;
|
|
192
|
+
return `${request}; status=${status}; responseBodySample="${attempt.responseBodySample}"`;
|
|
193
|
+
}
|
|
194
|
+
async function getResponseBodySample(params) {
|
|
195
|
+
if (params.response.status() >= 200 && params.response.status() < 400) {
|
|
196
|
+
return "omitted because successful Cognito responses can include tokens";
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
return truncateDiagnosticText({
|
|
200
|
+
text: sanitizeCognitoDiagnosticText({
|
|
201
|
+
text: await params.response.text(),
|
|
202
|
+
}),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
return `unavailable: ${sanitizeCognitoDiagnosticText({ text: (0, util_ts_1.toErrorMessage)(error) })}`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async function getVisiblePageTextSample(params) {
|
|
210
|
+
try {
|
|
211
|
+
const bodyText = (await params.page.locator("body").textContent({ timeout: 1000 })) ?? "";
|
|
212
|
+
return truncateDiagnosticText({
|
|
213
|
+
text: sanitizeCognitoDiagnosticText({ text: bodyText }),
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
return `unavailable: ${sanitizeCognitoDiagnosticText({ text: (0, util_ts_1.toErrorMessage)(error) })}`;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async function attachSanitizedScreenshot(params) {
|
|
221
|
+
if (params.testInfo === undefined) {
|
|
222
|
+
return "not attached; testInfo unavailable";
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
await redactPageForScreenshot({ page: params.page });
|
|
226
|
+
const screenshot = await params.page.screenshot({ fullPage: true });
|
|
227
|
+
await params.testInfo.attach(SCREENSHOT_ATTACHMENT_NAME, {
|
|
228
|
+
body: screenshot,
|
|
229
|
+
contentType: "image/png",
|
|
230
|
+
});
|
|
231
|
+
return `attached as ${SCREENSHOT_ATTACHMENT_NAME}`;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
return `unavailable: ${sanitizeCognitoDiagnosticText({ text: (0, util_ts_1.toErrorMessage)(error) })}`;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async function redactPageForScreenshot(params) {
|
|
238
|
+
await params.page.evaluate(() => {
|
|
239
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized into the browser context.
|
|
240
|
+
function redact(value) {
|
|
241
|
+
return value
|
|
242
|
+
.replaceAll(/Bearer\s+[A-Za-z0-9._-]+/gi, "Bearer [redacted-token]")
|
|
243
|
+
.replaceAll(/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, "[redacted-jwt]")
|
|
244
|
+
.replaceAll(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[redacted-email]")
|
|
245
|
+
.replaceAll(/\+?\d[\d\s().-]{5,}\d/g, "[redacted-number]")
|
|
246
|
+
.replaceAll(/\b\d{4,}\b/g, "[redacted-number]");
|
|
247
|
+
}
|
|
248
|
+
if (document.body === null) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
|
|
252
|
+
let currentNode = treeWalker.nextNode();
|
|
253
|
+
while (currentNode !== null) {
|
|
254
|
+
const originalText = currentNode.textContent ?? "";
|
|
255
|
+
const redactedText = redact(originalText);
|
|
256
|
+
if (redactedText !== originalText) {
|
|
257
|
+
currentNode.textContent = redactedText;
|
|
258
|
+
}
|
|
259
|
+
currentNode = treeWalker.nextNode();
|
|
260
|
+
}
|
|
261
|
+
const fields = document.querySelectorAll("input, textarea");
|
|
262
|
+
for (const field of fields) {
|
|
263
|
+
const redactedValue = redact(field.value);
|
|
264
|
+
if (redactedValue !== field.value) {
|
|
265
|
+
field.value = redactedValue;
|
|
266
|
+
}
|
|
267
|
+
const valueAttribute = field.getAttribute("value");
|
|
268
|
+
if (valueAttribute !== null) {
|
|
269
|
+
const redactedValueAttribute = redact(valueAttribute);
|
|
270
|
+
if (redactedValueAttribute !== valueAttribute) {
|
|
271
|
+
field.setAttribute("value", redactedValueAttribute);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function getRequestPostDataJson(params) {
|
|
278
|
+
try {
|
|
279
|
+
return params.request.postDataJSON();
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function getStringProperty(params) {
|
|
286
|
+
if (!(0, util_ts_1.isRecord)(params.value)) {
|
|
287
|
+
return undefined;
|
|
288
|
+
}
|
|
289
|
+
const propertyValue = params.value[params.propertyName];
|
|
290
|
+
return typeof propertyValue === "string" ? propertyValue : undefined;
|
|
291
|
+
}
|
|
292
|
+
function isCognitoIdpUrl(params) {
|
|
293
|
+
try {
|
|
294
|
+
return COGNITO_HOST_PATTERN.test(new URL(params.rawUrl).hostname);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
function sanitizeUrl(params) {
|
|
301
|
+
try {
|
|
302
|
+
const url = new URL(params.rawUrl);
|
|
303
|
+
return [
|
|
304
|
+
url.origin,
|
|
305
|
+
url.pathname === "/" ? "/" : "/[redacted-path]",
|
|
306
|
+
url.search.length === 0 ? "" : "?[redacted-query]",
|
|
307
|
+
url.hash.length === 0 ? "" : "#[redacted-hash]",
|
|
308
|
+
].join("");
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return truncateDiagnosticText({
|
|
312
|
+
text: sanitizeCognitoDiagnosticText({ text: params.rawUrl }),
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function formatExpectedUrl(expectedUrl) {
|
|
317
|
+
if (typeof expectedUrl === "string") {
|
|
318
|
+
return sanitizeUrl({ rawUrl: expectedUrl });
|
|
319
|
+
}
|
|
320
|
+
if (expectedUrl instanceof RegExp) {
|
|
321
|
+
return sanitizeCognitoDiagnosticText({ text: expectedUrl.toString() });
|
|
322
|
+
}
|
|
323
|
+
return "[URL predicate]";
|
|
324
|
+
}
|
|
325
|
+
function truncateDiagnosticText(params) {
|
|
326
|
+
const normalizedText = params.text.replaceAll(/\s+/g, " ").trim();
|
|
327
|
+
return normalizedText.length <= DIAGNOSTIC_SAMPLE_MAX_LENGTH
|
|
328
|
+
? normalizedText
|
|
329
|
+
: `${normalizedText.slice(0, DIAGNOSTIC_SAMPLE_MAX_LENGTH)}...`;
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=cognitoDiagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognitoDiagnostics.js","sourceRoot":"","sources":["../../../../../packages/playwright-toolkit/src/lib/cognitoDiagnostics.ts"],"names":[],"mappings":";;;;;;AAAA,8BAA8B;AAC9B,uDAAwF;AAGxF,MAAM,oBAAoB,GAAG,sCAAsC,CAAC;AACpE,MAAM,gCAAgC,GAAG,0DAA0D,CAAC;AACpG,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9D,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAC3C,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAmD7D;;;;GAIG;AACI,KAAK,2CACV,MAA8C;IAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,IAAI,2BAA2B,CAAC;IAC7E,MAAM,OAAO,GAAG,6BAA6B,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI;aACd,UAAU,CAAC,MAAM,CAAC,UAAU,IAAI,mBAAmB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;YAC9C,cAAc,EAAE,OAAO,CAAC,MAAM;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;YACtD,IAAI,EAAE,IAAA,wBAAe,EAAC,KAAK,CAAC;SAC7B,CAAC,CAAC;QAEH,2GAA2G;QAC3G,MAAM,IAAI,KAAK,CACb,mCAAmC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;YACzE,UAAU,SAAS,OAAO,WAAW,gBAAgB,iBAAiB,EAAE,EAC1E,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CACxC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sCAA6C,MAAuC;IAClF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,KAAK,gCAAgC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC;QACtC,KAAK,EAAE,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;QAC1C,YAAY,EAAE,eAAe;KAC9B,CAAC,CAAC;IAEH,OAAO,aAAa,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC/E,CAAC;AAED,qCAA4C,MAE3C;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;IACrE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAErE,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM;QACpC,aAAa,EACX,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,IAAI,SAAS;QACpF,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QAC/B,MAAM;QACN,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,uCAA8C,MAAwB;IACpE,OAAO,MAAM,CAAC,IAAI;SACf,UAAU,CAAC,4BAA4B,EAAE,yBAAyB,CAAC;SACnE,UAAU,CAAC,oDAAoD,EAAE,gBAAgB,CAAC;SAClF,UAAU,CACT,+GAA+G,EAC/G,gBAAgB,CACjB;SACA,UAAU,CACT,qFAAqF,EACrF,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CACjD;SACA,UAAU,CAAC,yCAAyC,EAAE,kBAAkB,CAAC;SACzE,UAAU,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;SACzD,UAAU,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,6BAA6B,CAAC,MAGtC;IACC,IAAI,QAAkE,CAAC;IAEvE,MAAM,MAAM,GAAG,IAAI,OAAO,CAA0B,CAAC,OAAO,EAAE,EAAE;QAC9D,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACzE,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAErB,SAAS,eAAe,CAAC,OAAgC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,UAAU,GAAG,IAAI,CAAC;YAClB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;YACvD,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QAED,QAAQ,GAAG,eAAe,CAAC;QAE3B,KAAK,UAAU,cAAc,CAAC,QAAkB;YAC9C,IAAI,CAAC,4BAA4B,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,eAAe,CAAC,MAAM,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,eAAe,CAAC;oBACd,OAAO,EAAE,2BAA2B,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrE,kBAAkB,EAAE,gBAAgB,6BAA6B,CAAC;wBAChE,IAAI,EAAE,IAAA,wBAAe,EAAC,KAAK,CAAC;qBAC7B,CAAC,EAAE;oBACJ,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;oBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;oBACjC,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,SAAS,oBAAoB,CAAC,OAAgB;YAC5C,IAAI,CAAC,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,eAAe,CAAC;gBACd,WAAW,EAAE,6BAA6B,CAAC;oBACzC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,IAAI,yBAAyB;iBAChE,CAAC;gBACF,OAAO,EAAE,2BAA2B,CAAC,EAAE,OAAO,EAAE,CAAC;gBACjD,IAAI,EAAE,iBAAiB;aACxB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACpE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAEnC;IACC,OAAO;QACL,OAAO,EAAE,2BAA2B,CAAC;YACnC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;SACnC,CAAC;QACF,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;YAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAChC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;QACxC,IAAI,EAAE,UAAU;KACjB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,MAIpC;IACC,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpE,MAAM,CAAC,cAAc;QACrB,wBAAwB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/C,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;KAC5E,CAAC,CAAC;IAEH,OAAO;QACL,0BAA0B,aAAa,CAAC,OAAO,CAAC,GAAG;QACnD,gBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG;QAC7D,8BAA8B,cAAc,IAAI;QAChD,eAAe,gBAAgB,GAAG;KACnC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC;IACrD,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,uBAAuB,OAAO,CAAC,SAAS,IAAI,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG;QACd,UAAU,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,UAAU,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;QAClC,UAAU,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;QAClC,iBAAiB,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACvC,OAAO,GAAG,OAAO,kBAAkB,OAAO,CAAC,WAAW,GAAG,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GACV,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC7B,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE;QACrB,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAEhD,OAAO,GAAG,OAAO,YAAY,MAAM,yBAAyB,OAAO,CAAC,kBAAkB,GAAG,CAAC;AAC5F,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,MAA8B;IACjE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;QACtE,OAAO,iEAAiE,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC;QACH,OAAO,sBAAsB,CAAC;YAC5B,IAAI,EAAE,6BAA6B,CAAC;gBAClC,IAAI,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;aACnC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,gBAAgB,6BAA6B,CAAC,EAAE,IAAI,EAAE,IAAA,wBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,MAAsB;IAC5D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1F,OAAO,sBAAsB,CAAC;YAC5B,IAAI,EAAE,6BAA6B,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,gBAAgB,6BAA6B,CAAC,EAAE,IAAI,EAAE,IAAA,wBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,MAGxC;IACC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,uBAAuB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,0BAA0B,EAAE;YACvD,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QACH,OAAO,eAAe,0BAA0B,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,gBAAgB,6BAA6B,CAAC,EAAE,IAAI,EAAE,IAAA,wBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,MAAsB;IAC3D,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC9B,uGAAuG;QACvG,SAAS,MAAM,CAAC,KAAa;YAC3B,OAAO,KAAK;iBACT,UAAU,CAAC,4BAA4B,EAAE,yBAAyB,CAAC;iBACnE,UAAU,CAAC,oDAAoD,EAAE,gBAAgB,CAAC;iBAClF,UAAU,CAAC,yCAAyC,EAAE,kBAAkB,CAAC;iBACzE,UAAU,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;iBACzD,UAAU,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAClF,IAAI,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAExC,OAAO,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;YAE1C,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;gBAClC,WAAW,CAAC,WAAW,GAAG,YAAY,CAAC;YACzC,CAAC;YAED,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CACtC,iBAAiB,CAClB,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,aAAa,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;gBAClC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC;YAC9B,CAAC;YAED,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;gBAEtD,IAAI,sBAAsB,KAAK,cAAc,EAAE,CAAC;oBAC9C,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAuC;IACrE,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgD;IACzE,IAAI,CAAC,IAAA,kBAAQ,EAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B;IACjD,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAA0B;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO;YACL,GAAG,CAAC,MAAM;YACV,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;YAC/C,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;YAClD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;SAChD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sBAAsB,CAAC;YAC5B,IAAI,EAAE,6BAA6B,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB;IACjD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,WAAW,YAAY,MAAM,EAAE,CAAC;QAClC,OAAO,6BAA6B,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAwB;IACtD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAElE,OAAO,cAAc,CAAC,MAAM,IAAI,4BAA4B;QAC1D,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,KAAK,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export type DeployedAssetRequestMethod = "GET" | "HEAD";
|
|
2
|
+
export type DeployedAssetCacheMode = "cache-busted" | "normal";
|
|
3
|
+
export interface DeployedAssetValidationResult {
|
|
4
|
+
isValid: boolean;
|
|
5
|
+
message?: string | undefined;
|
|
6
|
+
isTransient?: boolean | undefined;
|
|
7
|
+
}
|
|
8
|
+
export interface DeployedAssetCheck {
|
|
9
|
+
path: string;
|
|
10
|
+
url: string;
|
|
11
|
+
method?: DeployedAssetRequestMethod | undefined;
|
|
12
|
+
cacheMode?: DeployedAssetCacheMode | undefined;
|
|
13
|
+
expectedContentTypes?: readonly string[] | undefined;
|
|
14
|
+
headers?: Record<string, string> | undefined;
|
|
15
|
+
validateResponse?: ((params: {
|
|
16
|
+
response: Response;
|
|
17
|
+
}) => Promise<DeployedAssetValidationResult> | DeployedAssetValidationResult) | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface DeployedAssetAttempt {
|
|
20
|
+
attemptNumber: number;
|
|
21
|
+
contentType?: string | undefined;
|
|
22
|
+
durationMs: number;
|
|
23
|
+
errorMessage?: string | undefined;
|
|
24
|
+
status?: number | undefined;
|
|
25
|
+
url: string;
|
|
26
|
+
}
|
|
27
|
+
export type DeployedAssetReportCheck = Omit<DeployedAssetCheck, "headers" | "validateResponse">;
|
|
28
|
+
export interface DeployedAssetResult {
|
|
29
|
+
attempts: DeployedAssetAttempt[];
|
|
30
|
+
check: DeployedAssetReportCheck;
|
|
31
|
+
contentType?: string | undefined;
|
|
32
|
+
errorMessage?: string | undefined;
|
|
33
|
+
isSuccess: boolean;
|
|
34
|
+
status?: number | undefined;
|
|
35
|
+
}
|
|
36
|
+
export interface DeployedAssetVerificationReport {
|
|
37
|
+
results: DeployedAssetResult[];
|
|
38
|
+
summary: {
|
|
39
|
+
failureCount: number;
|
|
40
|
+
passedCount: number;
|
|
41
|
+
totalCount: number;
|
|
42
|
+
};
|
|
43
|
+
wait?: {
|
|
44
|
+
attempts: number;
|
|
45
|
+
isStableWindowSatisfied: boolean;
|
|
46
|
+
stableWindowElapsedMs: number;
|
|
47
|
+
} | undefined;
|
|
48
|
+
}
|
|
49
|
+
export interface VerifyDeployedAssetsParams {
|
|
50
|
+
checks: readonly DeployedAssetCheck[];
|
|
51
|
+
concurrencyLimit?: number | undefined;
|
|
52
|
+
fetchImplementation?: typeof fetch | undefined;
|
|
53
|
+
fetchTimeoutMs?: number | undefined;
|
|
54
|
+
nowImplementation?: (() => number) | undefined;
|
|
55
|
+
retry?: {
|
|
56
|
+
maxAttempts?: number | undefined;
|
|
57
|
+
delayMs?: number | undefined;
|
|
58
|
+
} | undefined;
|
|
59
|
+
sleepImplementation?: ((params: {
|
|
60
|
+
durationMs: number;
|
|
61
|
+
}) => Promise<void>) | undefined;
|
|
62
|
+
}
|
|
63
|
+
export interface WaitForDeployedAssetsParams extends VerifyDeployedAssetsParams {
|
|
64
|
+
timeoutMs: number;
|
|
65
|
+
pollIntervalMs?: number | undefined;
|
|
66
|
+
stableWindowMs?: number | undefined;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Checks a repo-supplied deployed asset graph with bounded concurrency and
|
|
70
|
+
* classified per-asset retries. Discovery and asset classification remain in
|
|
71
|
+
* thin repo wrappers.
|
|
72
|
+
*/
|
|
73
|
+
export declare function verifyDeployedAssets(params: VerifyDeployedAssetsParams): Promise<DeployedAssetVerificationReport>;
|
|
74
|
+
/**
|
|
75
|
+
* Polls the whole graph until it is healthy for an optional stable window.
|
|
76
|
+
*/
|
|
77
|
+
export declare function waitForDeployedAssets(params: WaitForDeployedAssetsParams): Promise<DeployedAssetVerificationReport>;
|