cdk-serverless 2.22.5 → 3.1.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/.agents/tasks/task-api-gateway-authorizer/2025-01-20-120000-review.md +79 -0
- package/.agents/tasks/task-api-gateway-authorizer/context.json +25 -0
- package/.agents/tasks/task-api-gateway-authorizer/features/FEAT-001.json +22 -0
- package/.agents/tasks/task-api-gateway-authorizer/features/FEAT-002.json +31 -0
- package/.agents/tasks/task-api-gateway-authorizer/features/FEAT-003.json +25 -0
- package/.agents/tasks/task-api-gateway-authorizer/features/FEAT-004.json +24 -0
- package/.agents/tasks/task-api-gateway-authorizer/features/FEAT-005.json +22 -0
- package/.agents/tasks/task-api-gateway-authorizer/task.json +14 -0
- package/README.md +64 -0
- package/docs/constructs/assets/hierarchy.js +1 -1
- package/docs/constructs/assets/highlight.css +4 -4
- package/docs/constructs/assets/search.js +1 -1
- package/docs/constructs/classes/LambdaFunction.html +8 -8
- package/docs/constructs/classes/RestApi.html +22 -5
- package/docs/constructs/classes/SingleTableDatastore.html +1 -1
- package/docs/constructs/classes/Workflow.html +1 -1
- package/docs/constructs/hierarchy.html +1 -1
- package/docs/constructs/index.html +45 -1
- package/docs/constructs/interfaces/RestApiProps.html +39 -14
- package/docs/lambda/assets/highlight.css +9 -2
- package/docs/lambda/classes/errors.BadRequestError.html +1 -1
- package/docs/lambda/classes/errors.ForbiddenError.html +1 -1
- package/docs/lambda/classes/errors.HttpError.html +1 -1
- package/docs/lambda/classes/errors.NotFoundError.html +1 -1
- package/docs/lambda/classes/errors.UnauthenticatedError.html +1 -1
- package/docs/lambda/index.html +45 -1
- package/docs/projen/assets/highlight.css +13 -6
- package/docs/projen/index.html +45 -1
- package/docs/projen/interfaces/ServerlessProjectOptions.html +4 -4
- package/lib/constructs/rest-api.d.ts +88 -0
- package/lib/constructs/rest-api.js +194 -3
- package/lib/lambda/auth.js +10 -4
- package/lib/lambda/rest-api.jwt-authorizer.d.ts +1 -0
- package/lib/lambda/rest-api.jwt-authorizer.js +154 -0
- package/lib/tests/http-client.d.ts +48 -0
- package/lib/tests/http-client.js +82 -0
- package/lib/tests/index.d.ts +1 -0
- package/lib/tests/index.js +2 -1
- package/lib/tests/integ-test-util.d.ts +4 -3
- package/lib/tests/integ-test-util.js +14 -27
- package/package.json +1 -2
- package/specs/remove-axios-dependency.md +240 -0
package/lib/lambda/auth.js
CHANGED
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AppSyncCognitoAuthorizer = exports.ApiGatewayv2CognitoAuthorizer = exports.ApiGatewayv1CognitoAuthorizer = exports.ApiGatewayv2JwtAuthorizer = exports.ApiGatewayv1JwtAuthorizer = exports.CognitoAuthorizer = exports.JwtAuthorizer = void 0;
|
|
7
7
|
const process_1 = require("process");
|
|
8
|
-
const axios_1 = __importDefault(require("axios"));
|
|
9
8
|
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
10
9
|
const jwk_to_pem_1 = __importDefault(require("jwk-to-pem"));
|
|
11
10
|
const errors_1 = require("./errors");
|
|
@@ -16,9 +15,16 @@ const jwtJwksUrl = cognitoPoolId ? `${jwtIssuerUrl}/.well-known/jwks.json` : pro
|
|
|
16
15
|
const jwtGroupClaim = cognitoPoolId ? 'cognito:groups' : (process_1.env.JWT_GROUP_CLAIM ?? '');
|
|
17
16
|
const jwtAudience = (process_1.env.JWT_AUDIENCE_URL && process_1.env.JWT_AUDIENCE_URL.length > 0) ? process_1.env.JWT_AUDIENCE_URL.split('||') : undefined;
|
|
18
17
|
let cacheKeys;
|
|
18
|
+
const fetchJson = async (url) => {
|
|
19
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
20
|
+
if (!res.ok) {
|
|
21
|
+
throw new Error(`Request to ${url} failed: ${res.status} ${res.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
return (await res.json());
|
|
24
|
+
};
|
|
19
25
|
const getPublicKeys = async (jwksUrl) => {
|
|
20
26
|
if (!cacheKeys) {
|
|
21
|
-
const publicKeys =
|
|
27
|
+
const publicKeys = await fetchJson(jwksUrl);
|
|
22
28
|
cacheKeys = publicKeys.keys.reduce((agg, current) => {
|
|
23
29
|
const pem = (0, jwk_to_pem_1.default)(current);
|
|
24
30
|
agg[current.kid] = { instance: current, pem };
|
|
@@ -36,7 +42,7 @@ const getJwksUri = async (discoveryUri, jwksUri) => {
|
|
|
36
42
|
return jwksUri;
|
|
37
43
|
}
|
|
38
44
|
const wellKnownUri = `${discoveryUri}/.well-known`;
|
|
39
|
-
const issuerMetadata =
|
|
45
|
+
const issuerMetadata = await fetchJson(wellKnownUri);
|
|
40
46
|
if (!issuerMetadata.jwks_uri) {
|
|
41
47
|
throw new Error('Issuer does not offer JWKS endpoint');
|
|
42
48
|
}
|
|
@@ -304,4 +310,4 @@ class AppSyncCognitoAuthorizer extends CognitoAuthorizer {
|
|
|
304
310
|
}
|
|
305
311
|
}
|
|
306
312
|
exports.AppSyncCognitoAuthorizer = AppSyncCognitoAuthorizer;
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FBOEI7QUFDOUIsa0RBQTBCO0FBQzFCLCtDQUFxRTtBQUNyRSw0REFBa0M7QUFFbEMscUNBQWdFO0FBRWhFLE1BQU0sYUFBYSxHQUFHLGFBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsYUFBRyxDQUFDLGdCQUFnQixJQUFJLGFBQUcsQ0FBQyxVQUFVLElBQUksY0FBYyxDQUFDO0FBRW5GLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLGlCQUFpQixrQkFBa0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1SSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLFlBQVksQ0FBQztBQUM5RixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxhQUFHLENBQUMsZ0JBQWdCLElBQUksYUFBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBNkI3SCxJQUFJLFNBQTBDLENBQUM7QUFFL0MsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLE9BQWUsRUFBZ0MsRUFBRTtJQUM1RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7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LEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM0NELDhEQTJDQztBQUVEOzs7R0FHRztBQUNILE1BQWEsNkJBQThCLFNBQVEseUJBQXlCO0lBRTFFOztPQUVHO0lBQ0gsWUFBc0IsS0FBMEQsRUFBWSxPQUF5QjtRQUNuSCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQURYLFVBQUssR0FBTCxLQUFLLENBQXFEO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBa0I7SUFFckgsQ0FBQztDQUNGO0FBUkQsc0VBUUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSx5QkFBeUI7SUFFMUU7O09BRUc7SUFDSCxZQUFzQixLQUF3RCxFQUFZLE9BQXlCO1FBQ2pILEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFERixVQUFLLEdBQUwsS0FBSyxDQUFtRDtRQUFZLFlBQU8sR0FBUCxPQUFPLENBQWtCO0lBRW5ILENBQUM7Q0FDRjtBQVJELHNFQVFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsaUJBQWlCO0lBRTdEOztPQUVHO0lBQ0gsWUFBc0IsS0FBMEM7UUFDOUQsS0FBSyxFQUFFLENBQUM7UUFEWSxVQUFLLEdBQUwsS0FBSyxDQUFxQztJQUVoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2Qix1Q0FBdUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUE2QyxDQUFDLE1BQU0sQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBbkJELDREQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudiB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IEF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHZlcmlmeSwgSnd0SGVhZGVyLCBTaWduaW5nS2V5Q2FsbGJhY2sgfSBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IGp3a1RvUGVtIGZyb20gJ2p3ay10by1wZW0nO1xuaW1wb3J0IGxvZ2dlciBmcm9tICdsYW1iZGEtbG9nJztcbmltcG9ydCB7IEZvcmJpZGRlbkVycm9yLCBVbmF1dGhlbnRpY2F0ZWRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuY29uc3QgY29nbml0b1Bvb2xJZCA9IGVudi5VU0VSX1BPT0xfSUQgPz8gJyc7XG5jb25zdCBjb2duaXRvUG9vbFJlZ2lvbiA9IGVudi5VU0VSX1BPT0xfUkVHSU9OID8/IGVudi5BV1NfUkVHSU9OID8/ICdldS1jZW50cmFsLTEnO1xuXG5jb25zdCBqd3RJc3N1ZXJVcmwgPSBjb2duaXRvUG9vbElkID8gYGh0dHBzOi8vY29nbml0by1pZHAuJHtjb2duaXRvUG9vbFJlZ2lvbn0uYW1hem9uYXdzLmNvbS8ke2NvZ25pdG9Qb29sSWR9YCA6IChlbnYuSldUX0lTU1VFUl9VUkwgPz8gJycpO1xuY29uc3Qgand0Sndrc1VybCA9IGNvZ25pdG9Qb29sSWQgPyBgJHtqd3RJc3N1ZXJVcmx9Ly53ZWxsLWtub3duL2p3a3MuanNvbmAgOiBlbnYuSldUX0pXS1NfVVJMO1xuY29uc3Qgand0R3JvdXBDbGFpbSA9IGNvZ25pdG9Qb29sSWQgPyAnY29nbml0bzpncm91cHMnIDogKGVudi5KV1RfR1JPVVBfQ0xBSU0gPz8gJycpO1xuY29uc3Qgand0QXVkaWVuY2UgPSAoZW52LkpXVF9BVURJRU5DRV9VUkwgJiYgZW52LkpXVF9BVURJRU5DRV9VUkwubGVuZ3RoID4gMCkgPyBlbnYuSldUX0FVRElFTkNFX1VSTC5zcGxpdCgnfHwnKSA6IHVuZGVmaW5lZDtcblxuaW50ZXJmYWNlIFB1YmxpY0tleSB7XG4gIGFsZzogc3RyaW5nO1xuICBlOiBzdHJpbmc7XG4gIGtpZDogc3RyaW5nO1xuICBrdHk6IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB1c2U6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFB1YmxpY0tleU1ldGEge1xuICBpbnN0YW5jZTogUHVibGljS2V5O1xuICBwZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFB1YmxpY0tleXMge1xuICBrZXlzOiBQdWJsaWNLZXlbXTtcbn1cblxuaW50ZXJmYWNlIElzc3Vlck1ldGFkYXRhIHtcbiAgandrc191cmk/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmludGVyZmFjZSBNYXBPZktpZFRvUHVibGljS2V5IHtcbiAgW2tleTogc3RyaW5nXTogUHVibGljS2V5TWV0YTtcbn1cblxubGV0IGNhY2hlS2V5czogTWFwT2ZLaWRUb1B1YmxpY0tleSB8IHVuZGVmaW5lZDtcblxuY29uc3QgZ2V0UHVibGljS2V5cyA9IGFzeW5jIChqd2tzVXJsOiBzdHJpbmcpOiBQcm9taXNlPE1hcE9mS2lkVG9QdWJsaWNLZXk+ID0+IHtcbiAgaWYgKCFjYWNoZUtleXMpIHtcbiAgICBjb25zdCBwdWJsaWNLZXlzOiBQdWJsaWNLZXlzID0gKGF3YWl0IEF4aW9zLmdldDxQdWJsaWNLZXlzPihqd2tzVXJsKSkuZGF0YTtcbiAgICBjYWNoZUtleXMgPSBwdWJsaWNLZXlzLmtleXMucmVkdWNlKChhZ2csIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHBlbSA9IGp3a1RvUGVtKGN1cnJlbnQgYXMgandrVG9QZW0uSldLKTtcbiAgICAgIGFnZ1tjdXJyZW50LmtpZF0gPSB7IGluc3RhbmNlOiBjdXJyZW50LCBwZW0gfTtcbiAgICAgIHJldHVybiBhZ2c7XG4gICAgfSwge30gYXMgTWFwT2ZLaWRUb1B1YmxpY0tleSk7XG4gICAgcmV0dXJuIGNhY2hlS2V5cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FjaGVLZXlzO1xuICB9XG59O1xuXG4vLyBHcmFiIHRoZSBKV0tTIFVSSSBmcm9tIHRoZSBKV1QgaXNzdWVyJ3MgbWV0YWRhdGFcbmNvbnN0IGdldEp3a3NVcmkgPSBhc3luYyAoZGlzY292ZXJ5VXJpOiBzdHJpbmcsIGp3a3NVcmk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZiAoandrc1VyaSkge1xuICAgIHJldHVybiBqd2tzVXJpO1xuICB9XG4gIGNvbnN0IHdlbGxLbm93blVyaSA9IGAke2Rpc2NvdmVyeVVyaX0vLndlbGwta25vd25gO1xuICBjb25zdCBpc3N1ZXJNZXRhZGF0YSA9IChhd2FpdCBBeGlvcy5nZXQ8SXNzdWVyTWV0YWRhdGE+KHdlbGxLbm93blVyaSkpLmRhdGE7XG4gIGlmICghaXNzdWVyTWV0YWRhdGEuandrc191cmkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lzc3VlciBkb2VzIG5vdCBvZmZlciBKV0tTIGVuZHBvaW50Jyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlck1ldGFkYXRhLmp3a3NfdXJpO1xufTtcblxuY29uc3QgcHJvbWlzZWRWZXJpZnkgPSAodG9rZW46IHN0cmluZywgaXNzdWVyVXJpOiBzdHJpbmcsIGp3a3NVcmk/OiBzdHJpbmcpOiBQcm9taXNlPHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9PiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdmVyaWZ5KHRva2VuLCAoaGVhZGVyOiBKd3RIZWFkZXIsIGNiOiBTaWduaW5nS2V5Q2FsbGJhY2spID0+IHtcbiAgICAgIGlmICghaGVhZGVyLmtpZCkge1xuICAgICAgICBjYihuZXcgRXJyb3IoJ25vIGtleSBpZCBmb3VuZCcpKTtcbiAgICAgIH1cbiAgICAgIGdldEp3a3NVcmkoaXNzdWVyVXJpLCBqd2tzVXJpKS50aGVuKGdldFB1YmxpY0tleXMpLnRoZW4oKGtleXMpID0+IHtcbiAgICAgICAgY2IobnVsbCwga2V5c1toZWFkZXIua2lkIV0ucGVtKTtcbiAgICAgIH0sIGNiKTtcbiAgICB9LCB7IGlzc3VlcjogaXNzdWVyVXJpLCBhdWRpZW5jZTogand0QXVkaWVuY2UgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dIH0sIChlcnI6IGFueSwgZGVjb2RlZDogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShkZWNvZGVkIGFzIHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBKV1QgYXV0aG9yaXplciBiYXNlIGNsYXNzLCBwcmVzdXBwb3NpbmcgdGhlIHByZXNlbmNlIG9mIGFuIGlzc3VlciwgYSBudW1iZXIgb2YgYXV0aG9yaXphdGlvbiBjbGFpbXMsIGFuXG4gKiBhZG1pbiBwZXJtaXNzaW9uIGNsYWltIGFuZCBvcHRpb25hbGx5IGEgc2VwYXJhdGUgVVJMIHRvIGEgSldLUyB0byB1c2UgaWYgdGhlIGlzc3VlcnMgd2VsbC1rbm93biBVUkwgZG9lcyBub3RcbiAqIHBvaW50IHRvIGl0IGluIGl0cyBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEp3dEF1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhaW1zIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2xhaW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpc3N1ZXJVcmw6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgZ3JvdXBDbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBhZG1pbkNsYWltOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGp3a3NVcmw/OiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZ3JvdXBzIHRoZSB1c2VyIGJlbG9uZ3MgdG8sIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZSB1c2VyXG4gICAqIGlzIG5vdCBhdXRoZW50aWNhdGVkIG9yIGhhcyBubyBncm91cHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0R3JvdXBzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkgfHwgIXRoaXMuY2xhaW1zIS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmdyb3VwQ2xhaW0pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsYWltcyFbdGhpcy5ncm91cENsYWltXSBhcyB1bmtub3duIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIGdyb3VwIFRoZSBuYW1lIG9mIHRoZSBncm91cCB0byBjaGVjay5cbiAgICovXG4gIHB1YmxpYyBoYXNHcm91cChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gJ2NvZ25pdG86Z3JvdXBzJzogWyAnYWRtaW4nIF0sXG4gICAgcmV0dXJuIHRoaXMuZ2V0R3JvdXBzKCkuaW5jbHVkZXMoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYW5kIHNldHMgdGhlIGNsYWltcy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhaW1zICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIFVuYXV0aGVudGljYXRlZEVycm9yIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcHVibGljIGFzc2VydEF1dGhlbnRpY2F0ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5hdXRoZW50aWNhdGVkRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgRm9yYmlkZGVuRXJyb3IgaWYgdGhlIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQgb3IgZG9lcyBub3QgYmVsb25nXG4gICAqIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAuXG4gICAqIEBwYXJhbSBncm91cCBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgdG8gY2hlY2suXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0R3JvdXAoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIGlmICghdGhpcy5oYXNHcm91cChncm91cCkpIHtcbiAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgYmVsb25ncyB0byB0aGUgJ2FkbWluJyBncm91cCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzR3JvdXAodGhpcy5hZG1pbkNsYWltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBGb3JiaWRkZW5FcnJvciBpZiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZCBvciBpcyBub3QgYW4gYWRtaW4uXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0QWRtaW4oKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnRHcm91cCh0aGlzLmFkbWluQ2xhaW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVtYWlsIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0RU1haWwoKTogc3RyaW5nIHtcbiAgICB0aGlzLmFzc2VydEF1dGhlbnRpY2F0ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbGFpbXMhLmVtYWlsIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0U3ViamVjdCgpOiBzdHJpbmcge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyEuc3ViIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY2xhaW0gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiB0aGVcbiAgICogY2xhaW0gZG9lcyBub3QgZXhpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFpbSB0byByZXRyaWV2ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRDbGFpbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyFbbmFtZV07XG4gIH1cbn1cblxuLyoqXG4gKiBDb2duaXRvQXV0aG9yaXplciBpcyBhbiBhYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXV0aG9yaXplclxuICogdGhhdCBjYW4gYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgYW5kIGF1dGhvcml6ZSBhIHVzZXIgdGhyb3VnaCBDb2duaXRvLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoand0SXNzdWVyVXJsLCBqd3RHcm91cENsYWltLCAnYWRtaW4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYXV0aG9yaXphdGlvbiBvbiBBUEkgR2F0ZXdheSB2MSAoUmVzdCBBUEkpIHVzaW5nIEpXVC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudCwgLy9GSVhNRTogTGVhcm4gYWJvdXQgcG9zc2libGUgcmVxdWVzdENvbnRleHQuYXV0aG9yaXplciBzb3VyY2VzIGluIEFQSSBnYXRld2F5XG4gICAgYWRtaW5DbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nLFxuICApIHtcbiAgICBzdXBlcihqd3RJc3N1ZXJVcmwsIGp3dEdyb3VwQ2xhaW0sIGFkbWluQ2xhaW0sIGp3dEp3a3NVcmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgdXNpbmcgdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgQVBJIEdhdGV3YXkgZXZlbnQgb3JcbiAgICogYnkgZGVjb2RpbmcgYSBKV1QgdG9rZW4gZnJvbSB0aGUgJ0F1dGhvcml6YXRpb24nIGhlYWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICAvLyBDb3VsZCBiZSBhbG1vc3QgdGhlIGV4YWN0IHNhbWUgY29kZSBhcyBDb2duaXRvIGlmIHdlIGNhbiBzcGVjaWZ5IG91ciBvd24gQXV0aG9yaXplciBpbiB0aGUgZXZlbnQncyByZXF1ZXN0IGNvbnRleHRcbiAgICBpZiAodGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyICYmIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMpIHtcbiAgICAgIHRoaXMuY2xhaW1zID0gdGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoSGVhZGVyID0gdGhpcy5ldmVudC5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgaWYgKCFhdXRoSGVhZGVyIHx8ICFhdXRoSGVhZGVyLnN0YXJ0c1dpdGgoJ0JlYXJlciAnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGF1dGhIZWFkZXIuc3Vic3RyaW5nKCdCZWFyZXIgJy5sZW5ndGgpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSB0b2tlbiBhbmQgc2V0IHRoZSBjbGFpbXMgb24gdGhlIGV2ZW50IGFuZCB0aGlzIG9iamVjdFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGFpbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0gYXdhaXQgcHJvbWlzZWRWZXJpZnkodG9rZW4sIHRoaXMuaXNzdWVyVXJsLCB0aGlzLmp3a3NVcmwpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKEpTT04uc3RyaW5naWZ5KGNsYWltcykpO1xuXG4gICAgICB0aGlzLmV2ZW50LnJlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIgPSB7IGNsYWltcyB9O1xuICAgICAgdGhpcy5jbGFpbXMgPSBjbGFpbXM7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgSldUIEF1dGhvcml6YXRpb24gb24gQVBJIEdhdGV3YXkgdjIgKEhUVFAgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2Mkp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGp3dElzc3VlclVybCwgJ2NvZ25pdG86Z3JvdXBzJywgJ2FkbWluJywgand0Sndrc1VybCk7XG4gIH1cblxuICAvKipcbiAgICogQXV0aGVudGljYXRlcyB0aGUgdXNlciB1c2luZyB0aGUgY2xhaW1zIHByb3ZpZGVkIGJ5IHRoZSBBUEkgR2F0ZXdheSBldmVudCBvclxuICAgKiBieSBkZWNvZGluZyBhIEpXVCB0b2tlbiBmcm9tIHRoZSAnQXV0aG9yaXphdGlvbicgaGVhZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUcnkgdG8gZ2V0IHRoZSBjbGFpbXMgZnJvbSB0aGUgZXZlbnRcbiAgICB0aGlzLmNsYWltcyA9IHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplcj8uand0Py5jbGFpbXM7XG5cbiAgICAvLyBJZiBubyBwb29sIElEIGlzIGRlZmluZWQgb3IgY2xhaW1zIGV4aXN0LCByZXR1cm4gZWFybHlcbiAgICBpZiAoIWNvZ25pdG9Qb29sSWQgfHwgdGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHRoZSB0b2tlbiBmcm9tIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgIGNvbnN0IGF1dGhIZWFkZXIgPSB0aGlzLmV2ZW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcbiAgICBpZiAoIWF1dGhIZWFkZXIgfHwgIWF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYXV0aEhlYWRlci5zdWJzdHJpbmcoJ0JlYXJlciAnLmxlbmd0aCk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIHRva2VuIGFuZCBzZXQgdGhlIGNsYWltcyBvbiB0aGUgZXZlbnQgYW5kIHRoaXMgb2JqZWN0XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsYWltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSBhd2FpdCBwcm9taXNlZFZlcmlmeSh0b2tlbiwgdGhpcy5pc3N1ZXJVcmwsIHRoaXMuandrc1VybCk7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoSlNPTi5zdHJpbmdpZnkoY2xhaW1zKSk7XG5cbiAgICAgIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplciA9IHtcbiAgICAgICAgand0OiB7XG4gICAgICAgICAgY2xhaW1zLFxuICAgICAgICAgIHNjb3BlczogWydvcGVuaWQnLCAnZW1haWwnXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb25MYXRlbmN5OiAwLFxuICAgICAgICBwcmluY2lwYWxJZDogJ3Rvb2xib3gnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2xhaW1zID0gY2xhaW1zO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlHYXRld2F5djFDb2duaXRvQXV0aG9yaXplciBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIGFuIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MSByZXF1ZXN0cyB3aGVuIHVzaW5nIENvZ25pdG8uLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYxQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djFKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5V2l0aENvZ25pdG9BdXRob3JpemVyRXZlbnQsIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nKSB7XG4gICAgc3VwZXIoZXZlbnQsICdhZG1pbicsIF9sb2dnZXIpO1xuICB9XG59XG5cbi8qKlxuICogQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgaXMgYSBjbGFzcyB0aGF0IGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MiByZXF1ZXN0cyB3aXRoIGFcbiAqIEpXVCBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djJKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGV2ZW50LCBfbG9nZ2VyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcFN5bmNDb2duaXRvQXV0aG9yaXplciBpcyBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBDb2duaXRvQXV0aG9yaXplclxuICogYW5kIGltcGxlbWVudHMgYXV0aGVudGljYXRpb24gbG9naWMgZm9yIEFwcFN5bmMgcmVzb2x2ZXIgZXZlbnRzIHdpdGggYVxuICogQ29nbml0byBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBwU3luY0NvZ25pdG9BdXRob3JpemVyIGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGF1dGhvcml6YXRpb24gY2hlY2suXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BcHBTeW5jUmVzb2x2ZXJFdmVudDxhbnk+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIHRoZSB1c2VyIHVzaW5nIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIEFwcFN5bmMgZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRyeSB0byBnZXQgdGhlIGNsYWltcyBmcm9tIHRoZSBldmVudFxuICAgIGlmICh0aGlzLmV2ZW50LmlkZW50aXR5KSB7XG4gICAgICB0aGlzLmNsYWltcyA9ICh0aGlzLmV2ZW50LmlkZW50aXR5IGFzIEFXU0xhbWJkYS5BcHBTeW5jSWRlbnRpdHlDb2duaXRvKS5jbGFpbXM7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FBOEI7QUFDOUIsK0NBQXFFO0FBQ3JFLDREQUFrQztBQUVsQyxxQ0FBZ0U7QUFFaEUsTUFBTSxhQUFhLEdBQUcsYUFBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDN0MsTUFBTSxpQkFBaUIsR0FBRyxhQUFHLENBQUMsZ0JBQWdCLElBQUksYUFBRyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUM7QUFFbkYsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsaUJBQWlCLGtCQUFrQixhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVJLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxhQUFHLENBQUMsWUFBWSxDQUFDO0FBQzlGLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyRixNQUFNLFdBQVcsR0FBRyxDQUFDLGFBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxhQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUE2QjdILElBQUksU0FBMEMsQ0FBQztBQUUvQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUssR0FBVyxFQUFjLEVBQUU7SUFDckQsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFF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QUVHO0lBQ0ksS0FBSyxDQUFDLFlBQVk7UUFDdkIsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBNkMsQ0FBQyxNQUFNLENBQUM7UUFDakYsQ0FBQztJQUNILENBQUM7Q0FFRjtBQW5CRCw0REFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbnYgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IHZlcmlmeSwgSnd0SGVhZGVyLCBTaWduaW5nS2V5Q2FsbGJhY2sgfSBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IGp3a1RvUGVtIGZyb20gJ2p3ay10by1wZW0nO1xuaW1wb3J0IGxvZ2dlciBmcm9tICdsYW1iZGEtbG9nJztcbmltcG9ydCB7IEZvcmJpZGRlbkVycm9yLCBVbmF1dGhlbnRpY2F0ZWRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuY29uc3QgY29nbml0b1Bvb2xJZCA9IGVudi5VU0VSX1BPT0xfSUQgPz8gJyc7XG5jb25zdCBjb2duaXRvUG9vbFJlZ2lvbiA9IGVudi5VU0VSX1BPT0xfUkVHSU9OID8/IGVudi5BV1NfUkVHSU9OID8/ICdldS1jZW50cmFsLTEnO1xuXG5jb25zdCBqd3RJc3N1ZXJVcmwgPSBjb2duaXRvUG9vbElkID8gYGh0dHBzOi8vY29nbml0by1pZHAuJHtjb2duaXRvUG9vbFJlZ2lvbn0uYW1hem9uYXdzLmNvbS8ke2NvZ25pdG9Qb29sSWR9YCA6IChlbnYuSldUX0lTU1VFUl9VUkwgPz8gJycpO1xuY29uc3Qgand0Sndrc1VybCA9IGNvZ25pdG9Qb29sSWQgPyBgJHtqd3RJc3N1ZXJVcmx9Ly53ZWxsLWtub3duL2p3a3MuanNvbmAgOiBlbnYuSldUX0pXS1NfVVJMO1xuY29uc3Qgand0R3JvdXBDbGFpbSA9IGNvZ25pdG9Qb29sSWQgPyAnY29nbml0bzpncm91cHMnIDogKGVudi5KV1RfR1JPVVBfQ0xBSU0gPz8gJycpO1xuY29uc3Qgand0QXVkaWVuY2UgPSAoZW52LkpXVF9BVURJRU5DRV9VUkwgJiYgZW52LkpXVF9BVURJRU5DRV9VUkwubGVuZ3RoID4gMCkgPyBlbnYuSldUX0FVRElFTkNFX1VSTC5zcGxpdCgnfHwnKSA6IHVuZGVmaW5lZDtcblxuaW50ZXJmYWNlIFB1YmxpY0tleSB7XG4gIGFsZzogc3RyaW5nO1xuICBlOiBzdHJpbmc7XG4gIGtpZDogc3RyaW5nO1xuICBrdHk6IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB1c2U6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFB1YmxpY0tleU1ldGEge1xuICBpbnN0YW5jZTogUHVibGljS2V5O1xuICBwZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFB1YmxpY0tleXMge1xuICBrZXlzOiBQdWJsaWNLZXlbXTtcbn1cblxuaW50ZXJmYWNlIElzc3Vlck1ldGFkYXRhIHtcbiAgandrc191cmk/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmludGVyZmFjZSBNYXBPZktpZFRvUHVibGljS2V5IHtcbiAgW2tleTogc3RyaW5nXTogUHVibGljS2V5TWV0YTtcbn1cblxubGV0IGNhY2hlS2V5czogTWFwT2ZLaWRUb1B1YmxpY0tleSB8IHVuZGVmaW5lZDtcblxuY29uc3QgZmV0Y2hKc29uID0gYXN5bmMgPFQ+KHVybDogc3RyaW5nKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoNTAwMCkgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQ6ICR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH1gKTtcbiAgfVxuICByZXR1cm4gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFQ7XG59O1xuXG5jb25zdCBnZXRQdWJsaWNLZXlzID0gYXN5bmMgKGp3a3NVcmw6IHN0cmluZyk6IFByb21pc2U8TWFwT2ZLaWRUb1B1YmxpY0tleT4gPT4ge1xuICBpZiAoIWNhY2hlS2V5cykge1xuICAgIGNvbnN0IHB1YmxpY0tleXMgPSBhd2FpdCBmZXRjaEpzb248UHVibGljS2V5cz4oandrc1VybCk7XG4gICAgY2FjaGVLZXlzID0gcHVibGljS2V5cy5rZXlzLnJlZHVjZSgoYWdnLCBjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBwZW0gPSBqd2tUb1BlbShjdXJyZW50IGFzIGp3a1RvUGVtLkpXSyk7XG4gICAgICBhZ2dbY3VycmVudC5raWRdID0geyBpbnN0YW5jZTogY3VycmVudCwgcGVtIH07XG4gICAgICByZXR1cm4gYWdnO1xuICAgIH0sIHt9IGFzIE1hcE9mS2lkVG9QdWJsaWNLZXkpO1xuICAgIHJldHVybiBjYWNoZUtleXM7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhY2hlS2V5cztcbiAgfVxufTtcblxuLy8gR3JhYiB0aGUgSldLUyBVUkkgZnJvbSB0aGUgSldUIGlzc3VlcidzIG1ldGFkYXRhXG5jb25zdCBnZXRKd2tzVXJpID0gYXN5bmMgKGRpc2NvdmVyeVVyaTogc3RyaW5nLCBqd2tzVXJpPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYgKGp3a3NVcmkpIHtcbiAgICByZXR1cm4gandrc1VyaTtcbiAgfVxuICBjb25zdCB3ZWxsS25vd25VcmkgPSBgJHtkaXNjb3ZlcnlVcml9Ly53ZWxsLWtub3duYDtcbiAgY29uc3QgaXNzdWVyTWV0YWRhdGEgPSBhd2FpdCBmZXRjaEpzb248SXNzdWVyTWV0YWRhdGE+KHdlbGxLbm93blVyaSk7XG4gIGlmICghaXNzdWVyTWV0YWRhdGEuandrc191cmkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lzc3VlciBkb2VzIG5vdCBvZmZlciBKV0tTIGVuZHBvaW50Jyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlck1ldGFkYXRhLmp3a3NfdXJpO1xufTtcblxuY29uc3QgcHJvbWlzZWRWZXJpZnkgPSAodG9rZW46IHN0cmluZywgaXNzdWVyVXJpOiBzdHJpbmcsIGp3a3NVcmk/OiBzdHJpbmcpOiBQcm9taXNlPHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9PiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdmVyaWZ5KHRva2VuLCAoaGVhZGVyOiBKd3RIZWFkZXIsIGNiOiBTaWduaW5nS2V5Q2FsbGJhY2spID0+IHtcbiAgICAgIGlmICghaGVhZGVyLmtpZCkge1xuICAgICAgICBjYihuZXcgRXJyb3IoJ25vIGtleSBpZCBmb3VuZCcpKTtcbiAgICAgIH1cbiAgICAgIGdldEp3a3NVcmkoaXNzdWVyVXJpLCBqd2tzVXJpKS50aGVuKGdldFB1YmxpY0tleXMpLnRoZW4oKGtleXMpID0+IHtcbiAgICAgICAgY2IobnVsbCwga2V5c1toZWFkZXIua2lkIV0ucGVtKTtcbiAgICAgIH0sIGNiKTtcbiAgICB9LCB7IGlzc3VlcjogaXNzdWVyVXJpLCBhdWRpZW5jZTogand0QXVkaWVuY2UgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dIH0sIChlcnI6IGFueSwgZGVjb2RlZDogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShkZWNvZGVkIGFzIHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBKV1QgYXV0aG9yaXplciBiYXNlIGNsYXNzLCBwcmVzdXBwb3NpbmcgdGhlIHByZXNlbmNlIG9mIGFuIGlzc3VlciwgYSBudW1iZXIgb2YgYXV0aG9yaXphdGlvbiBjbGFpbXMsIGFuXG4gKiBhZG1pbiBwZXJtaXNzaW9uIGNsYWltIGFuZCBvcHRpb25hbGx5IGEgc2VwYXJhdGUgVVJMIHRvIGEgSldLUyB0byB1c2UgaWYgdGhlIGlzc3VlcnMgd2VsbC1rbm93biBVUkwgZG9lcyBub3RcbiAqIHBvaW50IHRvIGl0IGluIGl0cyBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEp3dEF1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhaW1zIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2xhaW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpc3N1ZXJVcmw6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgZ3JvdXBDbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBhZG1pbkNsYWltOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGp3a3NVcmw/OiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZ3JvdXBzIHRoZSB1c2VyIGJlbG9uZ3MgdG8sIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZSB1c2VyXG4gICAqIGlzIG5vdCBhdXRoZW50aWNhdGVkIG9yIGhhcyBubyBncm91cHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0R3JvdXBzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkgfHwgIXRoaXMuY2xhaW1zIS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmdyb3VwQ2xhaW0pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsYWltcyFbdGhpcy5ncm91cENsYWltXSBhcyB1bmtub3duIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIGdyb3VwIFRoZSBuYW1lIG9mIHRoZSBncm91cCB0byBjaGVjay5cbiAgICovXG4gIHB1YmxpYyBoYXNHcm91cChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gJ2NvZ25pdG86Z3JvdXBzJzogWyAnYWRtaW4nIF0sXG4gICAgcmV0dXJuIHRoaXMuZ2V0R3JvdXBzKCkuaW5jbHVkZXMoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYW5kIHNldHMgdGhlIGNsYWltcy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhaW1zICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIFVuYXV0aGVudGljYXRlZEVycm9yIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcHVibGljIGFzc2VydEF1dGhlbnRpY2F0ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5hdXRoZW50aWNhdGVkRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgRm9yYmlkZGVuRXJyb3IgaWYgdGhlIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQgb3IgZG9lcyBub3QgYmVsb25nXG4gICAqIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAuXG4gICAqIEBwYXJhbSBncm91cCBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgdG8gY2hlY2suXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0R3JvdXAoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIGlmICghdGhpcy5oYXNHcm91cChncm91cCkpIHtcbiAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgYmVsb25ncyB0byB0aGUgJ2FkbWluJyBncm91cCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzR3JvdXAodGhpcy5hZG1pbkNsYWltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBGb3JiaWRkZW5FcnJvciBpZiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZCBvciBpcyBub3QgYW4gYWRtaW4uXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0QWRtaW4oKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnRHcm91cCh0aGlzLmFkbWluQ2xhaW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVtYWlsIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0RU1haWwoKTogc3RyaW5nIHtcbiAgICB0aGlzLmFzc2VydEF1dGhlbnRpY2F0ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbGFpbXMhLmVtYWlsIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0U3ViamVjdCgpOiBzdHJpbmcge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyEuc3ViIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY2xhaW0gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiB0aGVcbiAgICogY2xhaW0gZG9lcyBub3QgZXhpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFpbSB0byByZXRyaWV2ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRDbGFpbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyFbbmFtZV07XG4gIH1cbn1cblxuLyoqXG4gKiBDb2duaXRvQXV0aG9yaXplciBpcyBhbiBhYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXV0aG9yaXplclxuICogdGhhdCBjYW4gYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgYW5kIGF1dGhvcml6ZSBhIHVzZXIgdGhyb3VnaCBDb2duaXRvLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoand0SXNzdWVyVXJsLCBqd3RHcm91cENsYWltLCAnYWRtaW4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYXV0aG9yaXphdGlvbiBvbiBBUEkgR2F0ZXdheSB2MSAoUmVzdCBBUEkpIHVzaW5nIEpXVC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudCwgLy9GSVhNRTogTGVhcm4gYWJvdXQgcG9zc2libGUgcmVxdWVzdENvbnRleHQuYXV0aG9yaXplciBzb3VyY2VzIGluIEFQSSBnYXRld2F5XG4gICAgYWRtaW5DbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nLFxuICApIHtcbiAgICBzdXBlcihqd3RJc3N1ZXJVcmwsIGp3dEdyb3VwQ2xhaW0sIGFkbWluQ2xhaW0sIGp3dEp3a3NVcmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgdXNpbmcgdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgQVBJIEdhdGV3YXkgZXZlbnQgb3JcbiAgICogYnkgZGVjb2RpbmcgYSBKV1QgdG9rZW4gZnJvbSB0aGUgJ0F1dGhvcml6YXRpb24nIGhlYWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICAvLyBDb3VsZCBiZSBhbG1vc3QgdGhlIGV4YWN0IHNhbWUgY29kZSBhcyBDb2duaXRvIGlmIHdlIGNhbiBzcGVjaWZ5IG91ciBvd24gQXV0aG9yaXplciBpbiB0aGUgZXZlbnQncyByZXF1ZXN0IGNvbnRleHRcbiAgICBpZiAodGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyICYmIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMpIHtcbiAgICAgIHRoaXMuY2xhaW1zID0gdGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoSGVhZGVyID0gdGhpcy5ldmVudC5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgaWYgKCFhdXRoSGVhZGVyIHx8ICFhdXRoSGVhZGVyLnN0YXJ0c1dpdGgoJ0JlYXJlciAnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGF1dGhIZWFkZXIuc3Vic3RyaW5nKCdCZWFyZXIgJy5sZW5ndGgpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSB0b2tlbiBhbmQgc2V0IHRoZSBjbGFpbXMgb24gdGhlIGV2ZW50IGFuZCB0aGlzIG9iamVjdFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGFpbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0gYXdhaXQgcHJvbWlzZWRWZXJpZnkodG9rZW4sIHRoaXMuaXNzdWVyVXJsLCB0aGlzLmp3a3NVcmwpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKEpTT04uc3RyaW5naWZ5KGNsYWltcykpO1xuXG4gICAgICB0aGlzLmV2ZW50LnJlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIgPSB7IGNsYWltcyB9O1xuICAgICAgdGhpcy5jbGFpbXMgPSBjbGFpbXM7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgSldUIEF1dGhvcml6YXRpb24gb24gQVBJIEdhdGV3YXkgdjIgKEhUVFAgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2Mkp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGp3dElzc3VlclVybCwgJ2NvZ25pdG86Z3JvdXBzJywgJ2FkbWluJywgand0Sndrc1VybCk7XG4gIH1cblxuICAvKipcbiAgICogQXV0aGVudGljYXRlcyB0aGUgdXNlciB1c2luZyB0aGUgY2xhaW1zIHByb3ZpZGVkIGJ5IHRoZSBBUEkgR2F0ZXdheSBldmVudCBvclxuICAgKiBieSBkZWNvZGluZyBhIEpXVCB0b2tlbiBmcm9tIHRoZSAnQXV0aG9yaXphdGlvbicgaGVhZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUcnkgdG8gZ2V0IHRoZSBjbGFpbXMgZnJvbSB0aGUgZXZlbnRcbiAgICB0aGlzLmNsYWltcyA9IHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplcj8uand0Py5jbGFpbXM7XG5cbiAgICAvLyBJZiBubyBwb29sIElEIGlzIGRlZmluZWQgb3IgY2xhaW1zIGV4aXN0LCByZXR1cm4gZWFybHlcbiAgICBpZiAoIWNvZ25pdG9Qb29sSWQgfHwgdGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHRoZSB0b2tlbiBmcm9tIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgIGNvbnN0IGF1dGhIZWFkZXIgPSB0aGlzLmV2ZW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcbiAgICBpZiAoIWF1dGhIZWFkZXIgfHwgIWF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYXV0aEhlYWRlci5zdWJzdHJpbmcoJ0JlYXJlciAnLmxlbmd0aCk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIHRva2VuIGFuZCBzZXQgdGhlIGNsYWltcyBvbiB0aGUgZXZlbnQgYW5kIHRoaXMgb2JqZWN0XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsYWltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSBhd2FpdCBwcm9taXNlZFZlcmlmeSh0b2tlbiwgdGhpcy5pc3N1ZXJVcmwsIHRoaXMuandrc1VybCk7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoSlNPTi5zdHJpbmdpZnkoY2xhaW1zKSk7XG5cbiAgICAgIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplciA9IHtcbiAgICAgICAgand0OiB7XG4gICAgICAgICAgY2xhaW1zLFxuICAgICAgICAgIHNjb3BlczogWydvcGVuaWQnLCAnZW1haWwnXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb25MYXRlbmN5OiAwLFxuICAgICAgICBwcmluY2lwYWxJZDogJ3Rvb2xib3gnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2xhaW1zID0gY2xhaW1zO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlHYXRld2F5djFDb2duaXRvQXV0aG9yaXplciBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIGFuIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MSByZXF1ZXN0cyB3aGVuIHVzaW5nIENvZ25pdG8uLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYxQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djFKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5V2l0aENvZ25pdG9BdXRob3JpemVyRXZlbnQsIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nKSB7XG4gICAgc3VwZXIoZXZlbnQsICdhZG1pbicsIF9sb2dnZXIpO1xuICB9XG59XG5cbi8qKlxuICogQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgaXMgYSBjbGFzcyB0aGF0IGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MiByZXF1ZXN0cyB3aXRoIGFcbiAqIEpXVCBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djJKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGV2ZW50LCBfbG9nZ2VyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcFN5bmNDb2duaXRvQXV0aG9yaXplciBpcyBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBDb2duaXRvQXV0aG9yaXplclxuICogYW5kIGltcGxlbWVudHMgYXV0aGVudGljYXRpb24gbG9naWMgZm9yIEFwcFN5bmMgcmVzb2x2ZXIgZXZlbnRzIHdpdGggYVxuICogQ29nbml0byBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBwU3luY0NvZ25pdG9BdXRob3JpemVyIGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGF1dGhvcml6YXRpb24gY2hlY2suXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BcHBTeW5jUmVzb2x2ZXJFdmVudDxhbnk+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIHRoZSB1c2VyIHVzaW5nIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIEFwcFN5bmMgZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRyeSB0byBnZXQgdGhlIGNsYWltcyBmcm9tIHRoZSBldmVudFxuICAgIGlmICh0aGlzLmV2ZW50LmlkZW50aXR5KSB7XG4gICAgICB0aGlzLmNsYWltcyA9ICh0aGlzLmV2ZW50LmlkZW50aXR5IGFzIEFXU0xhbWJkYS5BcHBTeW5jSWRlbnRpdHlDb2duaXRvKS5jbGFpbXM7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function handler(event: AWSLambda.APIGatewayTokenAuthorizerEvent | AWSLambda.APIGatewayRequestAuthorizerEvent): Promise<AWSLambda.APIGatewayAuthorizerResult>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handler = handler;
|
|
7
|
+
const process_1 = require("process");
|
|
8
|
+
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
9
|
+
const jwk_to_pem_1 = __importDefault(require("jwk-to-pem"));
|
|
10
|
+
const jwtIssuerUrl = process_1.env.JWT_ISSUER_URL ?? '';
|
|
11
|
+
const jwtJwksUrl = process_1.env.JWT_JWKS_URL;
|
|
12
|
+
const jwtAudience = (process_1.env.JWT_AUDIENCE_URL && process_1.env.JWT_AUDIENCE_URL.length > 0) ? process_1.env.JWT_AUDIENCE_URL.split('||') : undefined;
|
|
13
|
+
let cacheKeys;
|
|
14
|
+
const fetchJson = async (url) => {
|
|
15
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
throw new Error(`Request to ${url} failed: ${res.status} ${res.statusText}`);
|
|
18
|
+
}
|
|
19
|
+
return (await res.json());
|
|
20
|
+
};
|
|
21
|
+
const getPublicKeys = async (jwksUrl) => {
|
|
22
|
+
if (!cacheKeys) {
|
|
23
|
+
const publicKeys = await fetchJson(jwksUrl);
|
|
24
|
+
cacheKeys = publicKeys.keys.reduce((agg, current) => {
|
|
25
|
+
const pem = (0, jwk_to_pem_1.default)(current);
|
|
26
|
+
agg[current.kid] = { instance: current, pem };
|
|
27
|
+
return agg;
|
|
28
|
+
}, {});
|
|
29
|
+
return cacheKeys;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return cacheKeys;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const getJwksUri = async (discoveryUri, jwksUri) => {
|
|
36
|
+
if (jwksUri) {
|
|
37
|
+
return jwksUri;
|
|
38
|
+
}
|
|
39
|
+
const wellKnownUri = `${discoveryUri}/.well-known/openid-configuration`;
|
|
40
|
+
const issuerMetadata = await fetchJson(wellKnownUri);
|
|
41
|
+
if (!issuerMetadata.jwks_uri) {
|
|
42
|
+
throw new Error('Issuer does not offer JWKS endpoint');
|
|
43
|
+
}
|
|
44
|
+
return issuerMetadata.jwks_uri;
|
|
45
|
+
};
|
|
46
|
+
const promisedVerify = (token, issuerUri, jwksUri) => {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
(0, jsonwebtoken_1.verify)(token, (header, cb) => {
|
|
49
|
+
if (!header.kid) {
|
|
50
|
+
cb(new Error('no key id found'));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
getJwksUri(issuerUri, jwksUri).then(getPublicKeys).then((keys) => {
|
|
54
|
+
const key = keys[header.kid];
|
|
55
|
+
if (!key) {
|
|
56
|
+
cb(new Error('signing key not found for kid'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
cb(null, key.pem);
|
|
60
|
+
}, cb);
|
|
61
|
+
}, { issuer: issuerUri, audience: jwtAudience }, (err, decoded) => {
|
|
62
|
+
if (err) {
|
|
63
|
+
reject(err);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
resolve(decoded);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
function generatePolicy(principalId, effect, resource, context) {
|
|
72
|
+
const policyDocument = {
|
|
73
|
+
Version: '2012-10-17',
|
|
74
|
+
Statement: [
|
|
75
|
+
{
|
|
76
|
+
Action: 'execute-api:Invoke',
|
|
77
|
+
Effect: effect,
|
|
78
|
+
Resource: resource,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
return {
|
|
83
|
+
principalId,
|
|
84
|
+
policyDocument,
|
|
85
|
+
...(context && { context }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function handler(event) {
|
|
89
|
+
// Detect event type: TOKEN has event.type === 'TOKEN', REQUEST has event.type === 'REQUEST'
|
|
90
|
+
if (event.type === 'REQUEST') {
|
|
91
|
+
return handleRequestEvent(event);
|
|
92
|
+
}
|
|
93
|
+
return handleTokenEvent(event);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Verifies a JWT token and generates an Allow policy with claims context.
|
|
97
|
+
* Handles JWKS cache invalidation on signature/key-rotation errors with a single retry.
|
|
98
|
+
*/
|
|
99
|
+
async function verifyTokenAndGeneratePolicy(token, resource) {
|
|
100
|
+
let claims;
|
|
101
|
+
try {
|
|
102
|
+
claims = await promisedVerify(token, jwtIssuerUrl, jwtJwksUrl);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
// If verification failed due to a signature error (possibly rotated keys),
|
|
106
|
+
// clear the JWKS cache and retry once
|
|
107
|
+
if (err && err.message && (err.message.includes('invalid signature') || err.message.includes('signing key not found'))) {
|
|
108
|
+
cacheKeys = undefined;
|
|
109
|
+
claims = await promisedVerify(token, jwtIssuerUrl, jwtJwksUrl);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const context = {};
|
|
116
|
+
for (const [key, value] of Object.entries(claims)) {
|
|
117
|
+
if (typeof value === 'string') {
|
|
118
|
+
context[key] = value;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
context[key] = JSON.stringify(value);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return generatePolicy(claims.sub || 'user', 'Allow', resource, context);
|
|
125
|
+
}
|
|
126
|
+
async function handleTokenEvent(event) {
|
|
127
|
+
const token = event.authorizationToken;
|
|
128
|
+
if (!token || !token.startsWith('Bearer ')) {
|
|
129
|
+
throw new Error('Unauthorized');
|
|
130
|
+
}
|
|
131
|
+
const jwtToken = token.substring('Bearer '.length);
|
|
132
|
+
try {
|
|
133
|
+
return await verifyTokenAndGeneratePolicy(jwtToken, event.methodArn);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
throw new Error('Unauthorized');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async function handleRequestEvent(event) {
|
|
140
|
+
const authHeader = event.headers?.Authorization || event.headers?.authorization;
|
|
141
|
+
const resource = event.methodArn;
|
|
142
|
+
// No Authorization header: allow as anonymous (optional auth behavior)
|
|
143
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
144
|
+
return generatePolicy('anonymous', 'Allow', resource, {});
|
|
145
|
+
}
|
|
146
|
+
const jwtToken = authHeader.substring('Bearer '.length);
|
|
147
|
+
try {
|
|
148
|
+
return await verifyTokenAndGeneratePolicy(jwtToken, resource);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
throw new Error('Unauthorized');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuand0LWF1dGhvcml6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFtYmRhL3Jlc3QtYXBpLmp3dC1hdXRob3JpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBbUhBLDBCQVFDO0FBM0hELHFDQUE4QjtBQUM5QiwrQ0FBcUU7QUFDckUsNERBQWtDO0FBRWxDLE1BQU0sWUFBWSxHQUFHLGFBQUcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO0FBQzlDLE1BQU0sVUFBVSxHQUFHLGFBQUcsQ0FBQyxZQUFZLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxhQUFHLENBQUMsZ0JBQWdCLElBQUksYUFBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBNkI3SCxJQUFJLFNBQTBDLENBQUM7QUFFL0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFLLEdBQVcsRUFBYyxFQUFFO0lBQ3JELE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLEdBQUcsWUFBWSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQU0sQ0FBQztBQUNqQyxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsT0FBZSxFQUFnQyxFQUFFO0lBQzVF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QUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsYUFBYSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO0lBQ2hGLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFFakMsdUVBQXVFO0lBQ3ZFLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsT0FBTyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW52IH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyB2ZXJpZnksIEp3dEhlYWRlciwgU2lnbmluZ0tleUNhbGxiYWNrIH0gZnJvbSAnanNvbndlYnRva2VuJztcbmltcG9ydCBqd2tUb1BlbSBmcm9tICdqd2stdG8tcGVtJztcblxuY29uc3Qgand0SXNzdWVyVXJsID0gZW52LkpXVF9JU1NVRVJfVVJMID8/ICcnO1xuY29uc3Qgand0Sndrc1VybCA9IGVudi5KV1RfSldLU19VUkw7XG5jb25zdCBqd3RBdWRpZW5jZSA9IChlbnYuSldUX0FVRElFTkNFX1VSTCAmJiBlbnYuSldUX0FVRElFTkNFX1VSTC5sZW5ndGggPiAwKSA/IGVudi5KV1RfQVVESUVOQ0VfVVJMLnNwbGl0KCd8fCcpIDogdW5kZWZpbmVkO1xuXG5pbnRlcmZhY2UgUHVibGljS2V5IHtcbiAgYWxnOiBzdHJpbmc7XG4gIGU6IHN0cmluZztcbiAga2lkOiBzdHJpbmc7XG4gIGt0eTogc3RyaW5nO1xuICBuOiBzdHJpbmc7XG4gIHVzZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHVibGljS2V5TWV0YSB7XG4gIGluc3RhbmNlOiBQdWJsaWNLZXk7XG4gIHBlbTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHVibGljS2V5cyB7XG4gIGtleXM6IFB1YmxpY0tleVtdO1xufVxuXG5pbnRlcmZhY2UgSXNzdWVyTWV0YWRhdGEge1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIE1hcE9mS2lkVG9QdWJsaWNLZXkge1xuICBba2V5OiBzdHJpbmddOiBQdWJsaWNLZXlNZXRhO1xufVxuXG5sZXQgY2FjaGVLZXlzOiBNYXBPZktpZFRvUHVibGljS2V5IHwgdW5kZWZpbmVkO1xuXG5jb25zdCBmZXRjaEpzb24gPSBhc3luYyA8VD4odXJsOiBzdHJpbmcpOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCg1MDAwKSB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZDogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fWApO1xuICB9XG4gIHJldHVybiAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVDtcbn07XG5cbmNvbnN0IGdldFB1YmxpY0tleXMgPSBhc3luYyAoandrc1VybDogc3RyaW5nKTogUHJvbWlzZTxNYXBPZktpZFRvUHVibGljS2V5PiA9PiB7XG4gIGlmICghY2FjaGVLZXlzKSB7XG4gICAgY29uc3QgcHVibGljS2V5cyA9IGF3YWl0IGZldGNoSnNvbjxQdWJsaWNLZXlzPihqd2tzVXJsKTtcbiAgICBjYWNoZUtleXMgPSBwdWJsaWNLZXlzLmtleXMucmVkdWNlKChhZ2csIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHBlbSA9IGp3a1RvUGVtKGN1cnJlbnQgYXMgandrVG9QZW0uSldLKTtcbiAgICAgIGFnZ1tjdXJyZW50LmtpZF0gPSB7IGluc3RhbmNlOiBjdXJyZW50LCBwZW0gfTtcbiAgICAgIHJldHVybiBhZ2c7XG4gICAgfSwge30gYXMgTWFwT2ZLaWRUb1B1YmxpY0tleSk7XG4gICAgcmV0dXJuIGNhY2hlS2V5cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FjaGVLZXlzO1xuICB9XG59O1xuXG5jb25zdCBnZXRKd2tzVXJpID0gYXN5bmMgKGRpc2NvdmVyeVVyaTogc3RyaW5nLCBqd2tzVXJpPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYgKGp3a3NVcmkpIHtcbiAgICByZXR1cm4gandrc1VyaTtcbiAgfVxuICBjb25zdCB3ZWxsS25vd25VcmkgPSBgJHtkaXNjb3ZlcnlVcml9Ly53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYDtcbiAgY29uc3QgaXNzdWVyTWV0YWRhdGEgPSBhd2FpdCBmZXRjaEpzb248SXNzdWVyTWV0YWRhdGE+KHdlbGxLbm93blVyaSk7XG4gIGlmICghaXNzdWVyTWV0YWRhdGEuandrc191cmkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lzc3VlciBkb2VzIG5vdCBvZmZlciBKV0tTIGVuZHBvaW50Jyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlck1ldGFkYXRhLmp3a3NfdXJpO1xufTtcblxuY29uc3QgcHJvbWlzZWRWZXJpZnkgPSAodG9rZW46IHN0cmluZywgaXNzdWVyVXJpOiBzdHJpbmcsIGp3a3NVcmk/OiBzdHJpbmcpOiBQcm9taXNlPHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9PiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdmVyaWZ5KHRva2VuLCAoaGVhZGVyOiBKd3RIZWFkZXIsIGNiOiBTaWduaW5nS2V5Q2FsbGJhY2spID0+IHtcbiAgICAgIGlmICghaGVhZGVyLmtpZCkge1xuICAgICAgICBjYihuZXcgRXJyb3IoJ25vIGtleSBpZCBmb3VuZCcpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZ2V0Sndrc1VyaShpc3N1ZXJVcmksIGp3a3NVcmkpLnRoZW4oZ2V0UHVibGljS2V5cykudGhlbigoa2V5cykgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2hlYWRlci5raWQhXTtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICBjYihuZXcgRXJyb3IoJ3NpZ25pbmcga2V5IG5vdCBmb3VuZCBmb3Iga2lkJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYihudWxsLCBrZXkucGVtKTtcbiAgICAgIH0sIGNiKTtcbiAgICB9LCB7IGlzc3VlcjogaXNzdWVyVXJpLCBhdWRpZW5jZTogand0QXVkaWVuY2UgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dIH0sIChlcnI6IGFueSwgZGVjb2RlZDogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShkZWNvZGVkIGFzIHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVBvbGljeShwcmluY2lwYWxJZDogc3RyaW5nLCBlZmZlY3Q6ICdBbGxvdycgfCAnRGVueScsIHJlc291cmNlOiBzdHJpbmcsIGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogQVdTTGFtYmRhLkFQSUdhdGV3YXlBdXRob3JpemVyUmVzdWx0IHtcbiAgY29uc3QgcG9saWN5RG9jdW1lbnQ6IEFXU0xhbWJkYS5Qb2xpY3lEb2N1bWVudCA9IHtcbiAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgU3RhdGVtZW50OiBbXG4gICAgICB7XG4gICAgICAgIEFjdGlvbjogJ2V4ZWN1dGUtYXBpOkludm9rZScsXG4gICAgICAgIEVmZmVjdDogZWZmZWN0LFxuICAgICAgICBSZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwcmluY2lwYWxJZCxcbiAgICBwb2xpY3lEb2N1bWVudCxcbiAgICAuLi4oY29udGV4dCAmJiB7IGNvbnRleHQgfSksXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKFxuICBldmVudDogQVdTTGFtYmRhLkFQSUdhdGV3YXlUb2tlbkF1dGhvcml6ZXJFdmVudCB8IEFXU0xhbWJkYS5BUElHYXRld2F5UmVxdWVzdEF1dGhvcml6ZXJFdmVudCxcbik6IFByb21pc2U8QVdTTGFtYmRhLkFQSUdhdGV3YXlBdXRob3JpemVyUmVzdWx0PiB7XG4gIC8vIERldGVjdCBldmVudCB0eXBlOiBUT0tFTiBoYXMgZXZlbnQudHlwZSA9PT0gJ1RPS0VOJywgUkVRVUVTVCBoYXMgZXZlbnQudHlwZSA9PT0gJ1JFUVVFU1QnXG4gIGlmIChldmVudC50eXBlID09PSAnUkVRVUVTVCcpIHtcbiAgICByZXR1cm4gaGFuZGxlUmVxdWVzdEV2ZW50KGV2ZW50IGFzIEFXU0xhbWJkYS5BUElHYXRld2F5UmVxdWVzdEF1dGhvcml6ZXJFdmVudCk7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZVRva2VuRXZlbnQoZXZlbnQgYXMgQVdTTGFtYmRhLkFQSUdhdGV3YXlUb2tlbkF1dGhvcml6ZXJFdmVudCk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgYSBKV1QgdG9rZW4gYW5kIGdlbmVyYXRlcyBhbiBBbGxvdyBwb2xpY3kgd2l0aCBjbGFpbXMgY29udGV4dC5cbiAqIEhhbmRsZXMgSldLUyBjYWNoZSBpbnZhbGlkYXRpb24gb24gc2lnbmF0dXJlL2tleS1yb3RhdGlvbiBlcnJvcnMgd2l0aCBhIHNpbmdsZSByZXRyeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VG9rZW5BbmRHZW5lcmF0ZVBvbGljeSh0b2tlbjogc3RyaW5nLCByZXNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxBV1NMYW1iZGEuQVBJR2F0ZXdheUF1dGhvcml6ZXJSZXN1bHQ+IHtcbiAgbGV0IGNsYWltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHRyeSB7XG4gICAgY2xhaW1zID0gYXdhaXQgcHJvbWlzZWRWZXJpZnkodG9rZW4sIGp3dElzc3VlclVybCwgand0Sndrc1VybCk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgLy8gSWYgdmVyaWZpY2F0aW9uIGZhaWxlZCBkdWUgdG8gYSBzaWduYXR1cmUgZXJyb3IgKHBvc3NpYmx5IHJvdGF0ZWQga2V5cyksXG4gICAgLy8gY2xlYXIgdGhlIEpXS1MgY2FjaGUgYW5kIHJldHJ5IG9uY2VcbiAgICBpZiAoZXJyICYmIGVyci5tZXNzYWdlICYmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnaW52YWxpZCBzaWduYXR1cmUnKSB8fCBlcnIubWVzc2FnZS5pbmNsdWRlcygnc2lnbmluZyBrZXkgbm90IGZvdW5kJykpKSB7XG4gICAgICBjYWNoZUtleXMgPSB1bmRlZmluZWQ7XG4gICAgICBjbGFpbXMgPSBhd2FpdCBwcm9taXNlZFZlcmlmeSh0b2tlbiwgand0SXNzdWVyVXJsLCBqd3RKd2tzVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2xhaW1zKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dFtrZXldID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0ZVBvbGljeShjbGFpbXMuc3ViIHx8ICd1c2VyJywgJ0FsbG93JywgcmVzb3VyY2UsIGNvbnRleHQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVUb2tlbkV2ZW50KGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVRva2VuQXV0aG9yaXplckV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuQVBJR2F0ZXdheUF1dGhvcml6ZXJSZXN1bHQ+IHtcbiAgY29uc3QgdG9rZW4gPSBldmVudC5hdXRob3JpemF0aW9uVG9rZW47XG5cbiAgaWYgKCF0b2tlbiB8fCAhdG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKTtcbiAgfVxuXG4gIGNvbnN0IGp3dFRva2VuID0gdG9rZW4uc3Vic3RyaW5nKCdCZWFyZXIgJy5sZW5ndGgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHZlcmlmeVRva2VuQW5kR2VuZXJhdGVQb2xpY3koand0VG9rZW4sIGV2ZW50Lm1ldGhvZEFybik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hdXRob3JpemVkJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEV2ZW50KGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVJlcXVlc3RBdXRob3JpemVyRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5BUElHYXRld2F5QXV0aG9yaXplclJlc3VsdD4ge1xuICBjb25zdCBhdXRoSGVhZGVyID0gZXZlbnQuaGVhZGVycz8uQXV0aG9yaXphdGlvbiB8fCBldmVudC5oZWFkZXJzPy5hdXRob3JpemF0aW9uO1xuICBjb25zdCByZXNvdXJjZSA9IGV2ZW50Lm1ldGhvZEFybjtcblxuICAvLyBObyBBdXRob3JpemF0aW9uIGhlYWRlcjogYWxsb3cgYXMgYW5vbnltb3VzIChvcHRpb25hbCBhdXRoIGJlaGF2aW9yKVxuICBpZiAoIWF1dGhIZWFkZXIgfHwgIWF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlUG9saWN5KCdhbm9ueW1vdXMnLCAnQWxsb3cnLCByZXNvdXJjZSwge30pO1xuICB9XG5cbiAgY29uc3Qgand0VG9rZW4gPSBhdXRoSGVhZGVyLnN1YnN0cmluZygnQmVhcmVyICcubGVuZ3RoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB2ZXJpZnlUb2tlbkFuZEdlbmVyYXRlUG9saWN5KGp3dFRva2VuLCByZXNvdXJjZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hdXRob3JpemVkJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal HTTP client used by IntegTestUtil, backed by the native `fetch`
|
|
3
|
+
* API. It exists to keep the integration-test API stable while removing the
|
|
4
|
+
* `axios` runtime dependency.
|
|
5
|
+
*/
|
|
6
|
+
export interface HttpClientConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Base URL prepended to relative paths passed to client methods.
|
|
9
|
+
*/
|
|
10
|
+
readonly baseURL?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Default headers applied to every request issued by this client.
|
|
13
|
+
* Per-request headers override these on collision.
|
|
14
|
+
*/
|
|
15
|
+
readonly headers?: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
export interface HttpClientRequestOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Per-request headers, merged on top of the client's default headers.
|
|
20
|
+
*/
|
|
21
|
+
readonly headers?: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Response wrapper returned by every `HttpClient` request method.
|
|
25
|
+
*/
|
|
26
|
+
export declare class HttpClientResponse {
|
|
27
|
+
readonly status: number;
|
|
28
|
+
readonly ok: boolean;
|
|
29
|
+
readonly headers: Headers;
|
|
30
|
+
readonly body: string;
|
|
31
|
+
constructor(status: number, ok: boolean, headers: Headers, body: string);
|
|
32
|
+
/**
|
|
33
|
+
* Parse the response body as JSON. Throws if the body is not valid JSON.
|
|
34
|
+
*/
|
|
35
|
+
json<T = unknown>(): T;
|
|
36
|
+
}
|
|
37
|
+
export declare class HttpClient {
|
|
38
|
+
private readonly baseURL?;
|
|
39
|
+
private readonly defaultHeaders;
|
|
40
|
+
constructor(config?: HttpClientConfig);
|
|
41
|
+
get(path: string, options?: HttpClientRequestOptions): Promise<HttpClientResponse>;
|
|
42
|
+
delete(path: string, options?: HttpClientRequestOptions): Promise<HttpClientResponse>;
|
|
43
|
+
post(path: string, body?: unknown, options?: HttpClientRequestOptions): Promise<HttpClientResponse>;
|
|
44
|
+
put(path: string, body?: unknown, options?: HttpClientRequestOptions): Promise<HttpClientResponse>;
|
|
45
|
+
patch(path: string, body?: unknown, options?: HttpClientRequestOptions): Promise<HttpClientResponse>;
|
|
46
|
+
private request;
|
|
47
|
+
private resolveUrl;
|
|
48
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A minimal HTTP client used by IntegTestUtil, backed by the native `fetch`
|
|
4
|
+
* API. It exists to keep the integration-test API stable while removing the
|
|
5
|
+
* `axios` runtime dependency.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.HttpClient = exports.HttpClientResponse = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Response wrapper returned by every `HttpClient` request method.
|
|
11
|
+
*/
|
|
12
|
+
class HttpClientResponse {
|
|
13
|
+
constructor(status, ok, headers, body) {
|
|
14
|
+
this.status = status;
|
|
15
|
+
this.ok = ok;
|
|
16
|
+
this.headers = headers;
|
|
17
|
+
this.body = body;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse the response body as JSON. Throws if the body is not valid JSON.
|
|
21
|
+
*/
|
|
22
|
+
json() {
|
|
23
|
+
return JSON.parse(this.body);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.HttpClientResponse = HttpClientResponse;
|
|
27
|
+
class HttpClient {
|
|
28
|
+
constructor(config = {}) {
|
|
29
|
+
this.baseURL = config.baseURL;
|
|
30
|
+
this.defaultHeaders = { ...(config.headers ?? {}) };
|
|
31
|
+
}
|
|
32
|
+
get(path, options) {
|
|
33
|
+
return this.request('GET', path, undefined, options);
|
|
34
|
+
}
|
|
35
|
+
delete(path, options) {
|
|
36
|
+
return this.request('DELETE', path, undefined, options);
|
|
37
|
+
}
|
|
38
|
+
post(path, body, options) {
|
|
39
|
+
return this.request('POST', path, body, options);
|
|
40
|
+
}
|
|
41
|
+
put(path, body, options) {
|
|
42
|
+
return this.request('PUT', path, body, options);
|
|
43
|
+
}
|
|
44
|
+
patch(path, body, options) {
|
|
45
|
+
return this.request('PATCH', path, body, options);
|
|
46
|
+
}
|
|
47
|
+
async request(method, path, body, options) {
|
|
48
|
+
const url = this.resolveUrl(path);
|
|
49
|
+
const headers = {
|
|
50
|
+
...this.defaultHeaders,
|
|
51
|
+
...(options?.headers ?? {}),
|
|
52
|
+
};
|
|
53
|
+
let requestBody;
|
|
54
|
+
if (body !== undefined && body !== null) {
|
|
55
|
+
if (typeof body === 'string') {
|
|
56
|
+
requestBody = body;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
requestBody = JSON.stringify(body);
|
|
60
|
+
if (!Object.keys(headers).some((h) => h.toLowerCase() === 'content-type')) {
|
|
61
|
+
headers['Content-Type'] = 'application/json';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const res = await fetch(url, { method, headers, body: requestBody });
|
|
66
|
+
const responseBody = await res.text();
|
|
67
|
+
return new HttpClientResponse(res.status, res.ok, res.headers, responseBody);
|
|
68
|
+
}
|
|
69
|
+
resolveUrl(path) {
|
|
70
|
+
if (!this.baseURL) {
|
|
71
|
+
return path;
|
|
72
|
+
}
|
|
73
|
+
if (/^https?:\/\//i.test(path)) {
|
|
74
|
+
return path;
|
|
75
|
+
}
|
|
76
|
+
const base = this.baseURL.endsWith('/') ? this.baseURL.slice(0, -1) : this.baseURL;
|
|
77
|
+
const suffix = path.startsWith('/') ? path : `/${path}`;
|
|
78
|
+
return `${base}${suffix}`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.HttpClient = HttpClient;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdHMvaHR0cC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQXNCSDs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBTTdCLFlBQVksTUFBYyxFQUFFLEVBQVcsRUFBRSxPQUFnQixFQUFFLElBQVk7UUFDckUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFuQkQsZ0RBbUJDO0FBRUQsTUFBYSxVQUFVO0lBSXJCLFlBQVksU0FBMkIsRUFBRTtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsT0FBa0M7UUFDekQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxNQUFNLENBQUMsSUFBWSxFQUFFLE9BQWtDO1FBQzVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sSUFBSSxDQUFDLElB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Y2VzQ29udGVudCI6WyIvKipcbiAqIEEgbWluaW1hbCBIVFRQIGNsaWVudCB1c2VkIGJ5IEludGVnVGVzdFV0aWwsIGJhY2tlZCBieSB0aGUgbmF0aXZlIGBmZXRjaGBcbiAqIEFQSS4gSXQgZXhpc3RzIHRvIGtlZXAgdGhlIGludGVncmF0aW9uLXRlc3QgQVBJIHN0YWJsZSB3aGlsZSByZW1vdmluZyB0aGVcbiAqIGBheGlvc2AgcnVudGltZSBkZXBlbmRlbmN5LlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudENvbmZpZyB7XG4gIC8qKlxuICAgKiBCYXNlIFVSTCBwcmVwZW5kZWQgdG8gcmVsYXRpdmUgcGF0aHMgcGFzc2VkIHRvIGNsaWVudCBtZXRob2RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVVSTD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmYXVsdCBoZWFkZXJzIGFwcGxpZWQgdG8gZXZlcnkgcmVxdWVzdCBpc3N1ZWQgYnkgdGhpcyBjbGllbnQuXG4gICAqIFBlci1yZXF1ZXN0IGhlYWRlcnMgb3ZlcnJpZGUgdGhlc2Ugb24gY29sbGlzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudFJlcXVlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBlci1yZXF1ZXN0IGhlYWRlcnMsIG1lcmdlZCBvbiB0b3Agb2YgdGhlIGNsaWVudCdzIGRlZmF1bHQgaGVhZGVycy5cbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIHdyYXBwZXIgcmV0dXJuZWQgYnkgZXZlcnkgYEh0dHBDbGllbnRgIHJlcXVlc3QgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlc3BvbnNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgb2s6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBoZWFkZXJzOiBIZWFkZXJzO1xuICBwdWJsaWMgcmVhZG9ubHkgYm9keTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXR1czogbnVtYmVyLCBvazogYm9vbGVhbiwgaGVhZGVyczogSGVhZGVycywgYm9keTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy5vayA9IG9rO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVzcG9uc2UgYm9keSBhcyBKU09OLiBUaHJvd3MgaWYgdGhlIGJvZHkgaXMgbm90IHZhbGlkIEpTT04uXG4gICAqL1xuICBwdWJsaWMganNvbjxUID0gdW5rbm93bj4oKTogVCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5ib2R5KSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlVVJMPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRIZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSHR0cENsaWVudENvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5iYXNlVVJMID0gY29uZmlnLmJhc2VVUkw7XG4gICAgdGhpcy5kZWZhdWx0SGVhZGVycyA9IHsgLi4uKGNvbmZpZy5oZWFkZXJzID8/IHt9KSB9O1xuICB9XG5cbiAgcHVibGljIGdldChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0dFVCcsIHBhdGgsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnREVMRVRFJywgcGF0aCwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHBhdGg6IHN0cmluZywgYm9keT86IHVua25vd24sIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCBwYXRoLCBib2R5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQocGF0aDogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUFVUJywgcGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcGF0Y2gocGF0aDogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCBwYXRoLCBib2R5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdChtZXRob2Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBib2R5OiB1bmtub3duLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlc29sdmVVcmwocGF0aCk7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC4uLnRoaXMuZGVmYXVsdEhlYWRlcnMsXG4gICAgICAuLi4ob3B0aW9ucz8uaGVhZGVycyA/PyB7fSksXG4gICAgfTtcblxuICAgIGxldCByZXF1ZXN0Qm9keTogQm9keUluaXQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGJvZHkgIT09IHVuZGVmaW5lZCAmJiBib2R5ICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlcXVlc3RCb2R5ID0gYm9keTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RCb2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMoaGVhZGVycykuc29tZSgoaCkgPT4gaC50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBtZXRob2QsIGhlYWRlcnMsIGJvZHk6IHJlcXVlc3RCb2R5IH0pO1xuICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgcmV0dXJuIG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UocmVzLnN0YXR1cywgcmVzLm9rLCByZXMuaGVhZGVycywgcmVzcG9uc2VCb2R5KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVybChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5iYXNlVVJMKSB7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgaWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBiYXNlID0gdGhpcy5iYXNlVVJMLmVuZHNXaXRoKCcvJykgPyB0aGlzLmJhc2VVUkwuc2xpY2UoMCwgLTEpIDogdGhpcy5iYXNlVVJMO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWA7XG4gICAgcmV0dXJuIGAke2Jhc2V9JHtzdWZmaXh9YDtcbiAgfVxufVxuIl19
|
package/lib/tests/index.d.ts
CHANGED
package/lib/tests/index.js
CHANGED
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./http-client"), exports);
|
|
17
18
|
__exportStar(require("./integ-test-util"), exports);
|
|
18
19
|
__exportStar(require("./lambda-test-utils"), exports);
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5QixvREFBa0M7QUFDbEMsc0RBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9odHRwLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVnLXRlc3QtdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xhbWJkYS10ZXN0LXV0aWxzJzsiXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NativeAttributeValue } from '@aws-sdk/lib-dynamodb';
|
|
2
|
-
import { Axios, AxiosRequestConfig } from 'axios';
|
|
3
2
|
import { JwtPayload } from 'jsonwebtoken';
|
|
3
|
+
import { HttpClient, HttpClientConfig } from './http-client';
|
|
4
|
+
export { HttpClient, HttpClientConfig, HttpClientResponse } from './http-client';
|
|
4
5
|
export interface IntegTestUtilOptions {
|
|
5
6
|
readonly region: string;
|
|
6
7
|
readonly apiOptions?: {
|
|
@@ -28,8 +29,8 @@ export declare class IntegTestUtil {
|
|
|
28
29
|
private apiTokens;
|
|
29
30
|
private itemsToDelete;
|
|
30
31
|
constructor(options: IntegTestUtilOptions);
|
|
31
|
-
getClient(config?:
|
|
32
|
-
getAuthenticatedClient(email: string, password?: string, config?:
|
|
32
|
+
getClient(config?: HttpClientConfig): HttpClient;
|
|
33
|
+
getAuthenticatedClient(email: string, password?: string, config?: HttpClientConfig): Promise<HttpClient>;
|
|
33
34
|
initializeItemsToCleanup(): void;
|
|
34
35
|
addItemToDeleteAfterTest(key: Record<string, NativeAttributeValue>): void;
|
|
35
36
|
cleanupItems(): Promise<void>;
|