@pipeline-builder/api-core 4.1.12 → 4.1.14
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 +3 -2
- package/lib/constants/index.d.ts +0 -1
- package/lib/constants/index.js +1 -2
- package/lib/errors/app-errors.d.ts +8 -3
- package/lib/errors/app-errors.js +10 -5
- package/lib/helpers/access-helpers.d.ts +4 -6
- package/lib/helpers/access-helpers.js +6 -8
- package/lib/helpers/index.d.ts +3 -3
- package/lib/helpers/index.js +4 -4
- package/lib/helpers/org-hierarchy-http.d.ts +11 -10
- package/lib/helpers/org-hierarchy-http.js +24 -35
- package/lib/helpers/org-hierarchy.d.ts +37 -3
- package/lib/helpers/org-hierarchy.js +45 -4
- package/lib/helpers/restore-helpers.d.ts +44 -24
- package/lib/helpers/restore-helpers.js +41 -52
- package/lib/helpers/sse-helpers.d.ts +29 -7
- package/lib/helpers/sse-helpers.js +36 -9
- package/lib/index.d.ts +16 -14
- package/lib/index.js +17 -15
- package/lib/middleware/assurance.d.ts +116 -0
- package/lib/middleware/assurance.js +176 -0
- package/lib/middleware/auth.d.ts +5 -427
- package/lib/middleware/auth.js +36 -789
- package/lib/middleware/ecosystem-guard.d.ts +47 -0
- package/lib/middleware/ecosystem-guard.js +60 -0
- package/lib/middleware/index.d.ts +11 -4
- package/lib/middleware/index.js +12 -5
- package/lib/middleware/jwt-verify.d.ts +52 -0
- package/lib/middleware/jwt-verify.js +105 -0
- package/lib/middleware/permission-gates.d.ts +133 -0
- package/lib/middleware/permission-gates.js +260 -0
- package/lib/middleware/revocation.d.ts +96 -0
- package/lib/middleware/revocation.js +162 -0
- package/lib/middleware/route-table.d.ts +11 -0
- package/lib/middleware/route-table.js +4 -1
- package/lib/middleware/service-tokens.d.ts +83 -0
- package/lib/middleware/service-tokens.js +158 -0
- package/lib/middleware/step-up.d.ts +2 -2
- package/lib/middleware/step-up.js +8 -7
- package/lib/middleware/system-org.d.ts +20 -0
- package/lib/middleware/system-org.js +25 -0
- package/lib/openapi/routes/plugin-routes.js +133 -10
- package/lib/openapi/schema-registry.js +2 -5
- package/lib/routes/index.d.ts +1 -1
- package/lib/routes/index.js +2 -2
- package/lib/services/api-key-exchange.js +7 -5
- package/lib/services/audit-spool.d.ts +34 -10
- package/lib/services/audit-spool.js +75 -34
- package/lib/services/cache-service.d.ts +7 -0
- package/lib/services/cache-service.js +1 -1
- package/lib/services/circuit-breaker.d.ts +14 -1
- package/lib/services/circuit-breaker.js +36 -10
- package/lib/services/compliance-client.d.ts +10 -2
- package/lib/services/compliance-client.js +17 -10
- package/lib/services/compliance-event-subscriber.js +6 -6
- package/lib/services/durable-event-bus.js +8 -11
- package/lib/services/ecosystem-notify-client.d.ts +32 -0
- package/lib/services/ecosystem-notify-client.js +71 -0
- package/lib/services/env-redis.d.ts +4 -1
- package/lib/services/env-redis.js +32 -3
- package/lib/services/http-client.d.ts +19 -0
- package/lib/services/http-client.js +98 -19
- package/lib/services/index.d.ts +25 -24
- package/lib/services/index.js +25 -22
- package/lib/services/jwks-cache.js +5 -4
- package/lib/services/leader-lock.d.ts +22 -5
- package/lib/services/leader-lock.js +61 -6
- package/lib/services/quota.d.ts +9 -4
- package/lib/services/quota.js +34 -40
- package/lib/services/remote-audit-client.d.ts +28 -32
- package/lib/services/remote-audit-client.js +166 -49
- package/lib/services/retry-forever.js +5 -11
- package/lib/services/retry-strategy.d.ts +1 -1
- package/lib/services/retry-strategy.js +5 -4
- package/lib/services/scheduler.d.ts +8 -3
- package/lib/services/scheduler.js +17 -5
- package/lib/services/service-boot.d.ts +14 -13
- package/lib/services/service-boot.js +18 -15
- package/lib/services/service-keys.d.ts +1 -1
- package/lib/services/service-keys.js +12 -18
- package/lib/services/sse-ticket-store.d.ts +9 -1
- package/lib/services/sse-ticket-store.js +24 -9
- package/lib/services/system-notification.d.ts +27 -0
- package/lib/services/system-notification.js +50 -0
- package/lib/services/token-revocation.d.ts +50 -1
- package/lib/services/token-revocation.js +103 -3
- package/lib/types/audit-events.d.ts +6 -6
- package/lib/types/audit-events.js +1 -1
- package/lib/types/common.d.ts +32 -13
- package/lib/types/common.js +2 -1
- package/lib/types/ecosystem-notifications.d.ts +142 -0
- package/lib/types/ecosystem-notifications.js +210 -0
- package/lib/types/ecosystem.d.ts +77 -0
- package/lib/types/ecosystem.js +119 -0
- package/lib/types/error-codes.d.ts +81 -0
- package/lib/types/error-codes.js +108 -1
- package/lib/types/feature-flags.d.ts +21 -1
- package/lib/types/feature-flags.js +36 -2
- package/lib/types/index.d.ts +14 -9
- package/lib/types/index.js +15 -10
- package/lib/types/permissions.d.ts +46 -8
- package/lib/types/permissions.js +75 -12
- package/lib/types/plugin-catalog.d.ts +35 -0
- package/lib/types/plugin-catalog.js +39 -0
- package/lib/types/plugin-health.d.ts +102 -0
- package/lib/types/plugin-health.js +184 -0
- package/lib/types/quota-tiers.d.ts +15 -0
- package/lib/types/quota-tiers.js +23 -3
- package/lib/types/wire-vocabulary.d.ts +102 -0
- package/lib/types/wire-vocabulary.js +94 -0
- package/lib/utils/alias-resolver.js +2 -2
- package/lib/utils/audit.d.ts +5 -2
- package/lib/utils/audit.js +6 -3
- package/lib/utils/compliance-attributes.js +3 -4
- package/lib/utils/concurrency.d.ts +7 -0
- package/lib/utils/concurrency.js +13 -1
- package/lib/utils/env.d.ts +3 -4
- package/lib/utils/env.js +4 -5
- package/lib/utils/identity.d.ts +13 -4
- package/lib/utils/identity.js +18 -10
- package/lib/utils/index.d.ts +13 -10
- package/lib/utils/index.js +13 -10
- package/lib/utils/jwk.d.ts +4 -0
- package/lib/utils/jwk.js +13 -1
- package/lib/utils/logger.d.ts +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/object.d.ts +11 -0
- package/lib/utils/object.js +24 -1
- package/lib/utils/params.d.ts +8 -22
- package/lib/utils/params.js +15 -43
- package/lib/utils/plugin-compliance.d.ts +98 -0
- package/lib/utils/plugin-compliance.js +78 -0
- package/lib/utils/proof-of-work.d.ts +69 -0
- package/lib/utils/proof-of-work.js +139 -0
- package/lib/utils/response.d.ts +16 -6
- package/lib/utils/response.js +18 -15
- package/lib/utils/retention.d.ts +17 -0
- package/lib/utils/retention.js +30 -0
- package/lib/utils/secret-encryption.d.ts +7 -7
- package/lib/utils/secret-encryption.js +9 -10
- package/lib/utils/secret-rotation.js +2 -2
- package/lib/utils/sensitive-patterns.js +4 -5
- package/lib/utils/service-registry.d.ts +15 -0
- package/lib/utils/service-registry.js +24 -0
- package/lib/utils/ssrf.d.ts +11 -2
- package/lib/utils/ssrf.js +112 -33
- package/lib/validation/ai-schemas.js +3 -2
- package/lib/validation/common-schemas.d.ts +0 -9
- package/lib/validation/common-schemas.js +1 -7
- package/lib/validation/dockerfile-static.d.ts +26 -0
- package/lib/validation/dockerfile-static.js +210 -0
- package/lib/validation/index.d.ts +13 -4
- package/lib/validation/index.js +14 -5
- package/lib/validation/message-schemas.js +6 -4
- package/lib/validation/pipeline-schemas.d.ts +8 -2
- package/lib/validation/pipeline-schemas.js +30 -4
- package/lib/validation/plugin-base-images.d.ts +20 -0
- package/lib/validation/plugin-base-images.js +17 -0
- package/lib/validation/plugin-catalog-detect.d.ts +86 -0
- package/lib/validation/plugin-catalog-detect.js +237 -0
- package/lib/validation/plugin-catalog-metadata.d.ts +141 -0
- package/lib/validation/plugin-catalog-metadata.js +162 -0
- package/lib/validation/plugin-heuristics.d.ts +41 -0
- package/lib/validation/plugin-heuristics.js +211 -0
- package/lib/validation/plugin-lint.d.ts +18 -0
- package/lib/validation/plugin-lint.js +136 -0
- package/lib/validation/plugin-name-confusable.d.ts +15 -0
- package/lib/validation/plugin-name-confusable.js +81 -0
- package/lib/validation/plugin-schemas.d.ts +40 -26
- package/lib/validation/plugin-schemas.js +26 -23
- package/lib/validation/plugin-spec-schema.d.ts +112 -0
- package/lib/validation/plugin-spec-schema.js +163 -0
- package/lib/validation/plugin-template-contract.d.ts +64 -0
- package/lib/validation/plugin-template-contract.js +113 -0
- package/package.json +69 -4
- package/lib/testing/mock-api-core.d.ts +0 -150
- package/lib/testing/mock-api-core.js +0 -246
- package/lib/testing/mock-drizzle.d.ts +0 -6
- package/lib/testing/mock-drizzle.js +0 -57
- package/lib/testing/route-coverage.d.ts +0 -64
- package/lib/testing/route-coverage.js +0 -183
- package/lib/testing/service-tokens.d.ts +0 -66
- package/lib/testing/service-tokens.js +0 -137
- package/lib/testing/tier-mock.d.ts +0 -44
- package/lib/testing/tier-mock.js +0 -65
- package/lib/testing/user-tokens.d.ts +0 -75
- package/lib/testing/user-tokens.js +0 -115
package/lib/utils/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
export
|
|
3
|
+
export { setLogContextProvider, redactSensitive, createLogger, logger, default, } from './logger.js';
|
|
4
4
|
export * from './api-key.js';
|
|
5
5
|
export * from './safe-require.js';
|
|
6
6
|
export * from './secure-compare.js';
|
|
7
7
|
export * from './crash-handlers.js';
|
|
8
|
-
export
|
|
9
|
-
export
|
|
8
|
+
export { sendSuccess, sendError, sendQuotaExceeded, sendPaginatedNested, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, parseSort, } from './response.js';
|
|
9
|
+
export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseDateRange, REPORT_INTERVALS, } from './params.js';
|
|
10
10
|
export * from './headers.js';
|
|
11
11
|
export * from './identity.js';
|
|
12
12
|
// JWK primitives. Platform IS the token signer, so it legitimately needs
|
|
@@ -14,17 +14,20 @@ export * from './identity.js';
|
|
|
14
14
|
// `jwkThumbprint` and `publicKeyFromJwk` are kid-derivation/verification
|
|
15
15
|
// plumbing used only inside api-core — deep-import them from there instead of
|
|
16
16
|
// leaking them to every service.
|
|
17
|
-
export { USER_TOKEN_ALGORITHM, USER_TOKEN_CURVE, JWKS_PATH, decodeJwtHeader, isJwksDocument, publicJwkFrom, derToJoseSignature, } from './jwk.js';
|
|
17
|
+
export { USER_TOKEN_ALGORITHM, USER_TOKEN_CURVE, JWKS_PATH, decodeJwtHeader, isJwksDocument, publicJwkFrom, derToJoseSignature, encodeJwsSigningInput, compactJws, } from './jwk.js';
|
|
18
18
|
export * from './object.js';
|
|
19
|
-
export
|
|
19
|
+
export { resetSupportAliasesCache, getPrimarySupportAlias, getAllSupportAliases, resolveRecipientAlias, DEFAULT_SUPPORT_ALIAS, } from './alias-resolver.js';
|
|
20
20
|
export * from './concurrency.js';
|
|
21
21
|
export * from './audit.js';
|
|
22
|
-
export
|
|
22
|
+
export { getDefaultKeyProvider, resetDefaultKeyProvider, setKeyProvider, encryptSecret, decryptSecret, isEncryptedBlob, EnvKeyProvider, KmsKeyProvider, PerOrgKmsKeyProvider, } from './secret-encryption.js';
|
|
23
23
|
export * from './secret-rotation.js';
|
|
24
|
-
export
|
|
24
|
+
export { setCounterEmitter, resetCounterEmitter, emitCounter, } from './metric-emitter.js';
|
|
25
25
|
export * from './aws-scrub.js';
|
|
26
|
-
export
|
|
27
|
-
export
|
|
26
|
+
export { maskLine, looksSensitive, REDACTED, SENSITIVE_VALUE_PATTERNS, } from './sensitive-patterns.js';
|
|
27
|
+
export { isPrivateAddress, assertSafeUrl, safeFetch, } from './ssrf.js';
|
|
28
28
|
export * from './env.js';
|
|
29
|
+
export * from './service-registry.js';
|
|
30
|
+
export * from './retention.js';
|
|
29
31
|
export * from './compliance-attributes.js';
|
|
30
|
-
|
|
32
|
+
export { leadingZeroBits, proofOfWorkHash, challengeKey, clampDifficulty, createProofOfWorkChallenge, parseProofOfWorkChallenge, verifyProofOfWork, solveProofOfWork, POW_DEFAULT_DIFFICULTY, POW_MAX_DIFFICULTY, POW_CHALLENGE_TTL_MS, } from './proof-of-work.js';
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBRVosTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxZQUFZLEVBQ1osY0FBYyxFQUNkLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixjQUFjLEVBRWQsZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLHlFQUF5RTtBQUN6RSxtRUFBbUU7QUFDbkUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxpQ0FBaUM7QUFDakMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixjQUFjLEVBQ2QsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLE1BQU0sVUFBVSxDQUFDO0FBS2xCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEVBR2YsY0FBYyxFQUNkLGNBQWMsRUFHZCxvQkFBb0IsR0FDckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLFdBQVcsR0FDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUNMLFFBQVEsRUFDUixjQUFjLEVBQ2QsUUFBUSxFQUNSLHdCQUF3QixHQUN6QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFNBQVMsR0FFVixNQUFNLFdBQVcsQ0FBQztBQUNuQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixZQUFZLEVBQ1osZUFBZSxFQUNmLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUdyQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHNldExvZ0NvbnRleHRQcm92aWRlcixcbiAgcmVkYWN0U2Vuc2l0aXZlLFxuICBjcmVhdGVMb2dnZXIsXG4gIHR5cGUgTG9nZ2VyLFxuICBsb2dnZXIsXG4gIGRlZmF1bHQsXG59IGZyb20gJy4vbG9nZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWtleS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyZS1jb21wYXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jhc2gtaGFuZGxlcnMuanMnO1xuZXhwb3J0IHtcbiAgc2VuZFN1Y2Nlc3MsXG4gIHNlbmRFcnJvcixcbiAgc2VuZFF1b3RhRXhjZWVkZWQsXG4gIHNlbmRQYWdpbmF0ZWROZXN0ZWQsXG4gIGV4dHJhY3REYkVycm9yLFxuICBlcnJvck1lc3NhZ2UsXG4gIHNlbmRCYWRSZXF1ZXN0LFxuICBzZW5kSW50ZXJuYWxFcnJvcixcbiAgcGFyc2VQYWdpbmF0aW9uUGFyYW1zLFxuICBwYXJzZVNvcnQsXG4gIHR5cGUgUGFnaW5hdGlvblBhcmFtcyxcbiAgdHlwZSBTb3J0UGFyYW1zLFxufSBmcm9tICcuL3Jlc3BvbnNlLmpzJztcbmV4cG9ydCB7XG4gIGdldFBhcmFtLFxuICBwYXJzZVF1ZXJ5SW50LFxuICBwYXJzZVF1ZXJ5U3RyaW5nLFxuICBwYXJzZU9wdGlvbmFsRGF0ZSxcbiAgcGFyc2VQb3NpdGl2ZUludCxcbiAgcGFyc2VRdWVyeUludENsYW1wZWQsXG4gIHBhcnNlUGFnZSxcbiAgdmFsaWRhdGVCdWxrQXJyYXksXG4gIHBhcnNlUmVwb3J0SW50ZXJ2YWwsXG4gIHBhcnNlRGF0ZVJhbmdlLFxuICB0eXBlIFBhZ2UsXG4gIFJFUE9SVF9JTlRFUlZBTFMsXG59IGZyb20gJy4vcGFyYW1zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkZW50aXR5LmpzJztcbi8vIEpXSyBwcmltaXRpdmVzLiBQbGF0Zm9ybSBJUyB0aGUgdG9rZW4gc2lnbmVyLCBzbyBpdCBsZWdpdGltYXRlbHkgbmVlZHNcbi8vIGBwdWJsaWNKd2tGcm9tYCArIGBkZXJUb0pvc2VTaWduYXR1cmVgIGZyb20gdGhlIHBhY2thZ2Ugc3VyZmFjZS5cbi8vIGBqd2tUaHVtYnByaW50YCBhbmQgYHB1YmxpY0tleUZyb21Kd2tgIGFyZSBraWQtZGVyaXZhdGlvbi92ZXJpZmljYXRpb25cbi8vIHBsdW1iaW5nIHVzZWQgb25seSBpbnNpZGUgYXBpLWNvcmUg4oCUIGRlZXAtaW1wb3J0IHRoZW0gZnJvbSB0aGVyZSBpbnN0ZWFkIG9mXG4vLyBsZWFraW5nIHRoZW0gdG8gZXZlcnkgc2VydmljZS5cbmV4cG9ydCB7XG4gIFVTRVJfVE9LRU5fQUxHT1JJVEhNLFxuICBVU0VSX1RPS0VOX0NVUlZFLFxuICBKV0tTX1BBVEgsXG4gIGRlY29kZUp3dEhlYWRlcixcbiAgaXNKd2tzRG9jdW1lbnQsXG4gIHB1YmxpY0p3a0Zyb20sXG4gIGRlclRvSm9zZVNpZ25hdHVyZSxcbiAgZW5jb2RlSndzU2lnbmluZ0lucHV0LFxuICBjb21wYWN0SndzLFxufSBmcm9tICcuL2p3ay5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFB1YmxpY0p3ayxcbiAgSndrc0RvY3VtZW50LFxufSBmcm9tICcuL2p3ay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdC5qcyc7XG5leHBvcnQge1xuICByZXNldFN1cHBvcnRBbGlhc2VzQ2FjaGUsXG4gIGdldFByaW1hcnlTdXBwb3J0QWxpYXMsXG4gIGdldEFsbFN1cHBvcnRBbGlhc2VzLFxuICByZXNvbHZlUmVjaXBpZW50QWxpYXMsXG4gIERFRkFVTFRfU1VQUE9SVF9BTElBUyxcbn0gZnJvbSAnLi9hbGlhcy1yZXNvbHZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmN1cnJlbmN5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXVkaXQuanMnO1xuZXhwb3J0IHtcbiAgZ2V0RGVmYXVsdEtleVByb3ZpZGVyLFxuICByZXNldERlZmF1bHRLZXlQcm92aWRlcixcbiAgc2V0S2V5UHJvdmlkZXIsXG4gIGVuY3J5cHRTZWNyZXQsXG4gIGRlY3J5cHRTZWNyZXQsXG4gIGlzRW5jcnlwdGVkQmxvYixcbiAgdHlwZSBFbmNyeXB0ZWRCbG9iLFxuICB0eXBlIEtleVByb3ZpZGVyLFxuICBFbnZLZXlQcm92aWRlcixcbiAgS21zS2V5UHJvdmlkZXIsXG4gIHR5cGUgUGVyT3JnS21zQ29uZmlnLFxuICB0eXBlIFBlck9yZ0ttc1Jlc29sdmVyLFxuICBQZXJPcmdLbXNLZXlQcm92aWRlcixcbn0gZnJvbSAnLi9zZWNyZXQtZW5jcnlwdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3JldC1yb3RhdGlvbi5qcyc7XG5leHBvcnQge1xuICBzZXRDb3VudGVyRW1pdHRlcixcbiAgcmVzZXRDb3VudGVyRW1pdHRlcixcbiAgZW1pdENvdW50ZXIsXG59IGZyb20gJy4vbWV0cmljLWVtaXR0ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hd3Mtc2NydWIuanMnO1xuZXhwb3J0IHtcbiAgbWFza0xpbmUsXG4gIGxvb2tzU2Vuc2l0aXZlLFxuICBSRURBQ1RFRCxcbiAgU0VOU0lUSVZFX1ZBTFVFX1BBVFRFUk5TLFxufSBmcm9tICcuL3NlbnNpdGl2ZS1wYXR0ZXJucy5qcyc7XG5leHBvcnQge1xuICBpc1ByaXZhdGVBZGRyZXNzLFxuICBhc3NlcnRTYWZlVXJsLFxuICBzYWZlRmV0Y2gsXG4gIHR5cGUgU2FmZUZldGNoUmVzcG9uc2UsXG59IGZyb20gJy4vc3NyZi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vudi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXRlbnRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wbGlhbmNlLWF0dHJpYnV0ZXMuanMnO1xuZXhwb3J0IHtcbiAgbGVhZGluZ1plcm9CaXRzLFxuICBwcm9vZk9mV29ya0hhc2gsXG4gIGNoYWxsZW5nZUtleSxcbiAgY2xhbXBEaWZmaWN1bHR5LFxuICBjcmVhdGVQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgcGFyc2VQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgdmVyaWZ5UHJvb2ZPZldvcmssXG4gIHNvbHZlUHJvb2ZPZldvcmssXG4gIFBPV19ERUZBVUxUX0RJRkZJQ1VMVFksXG4gIFBPV19NQVhfRElGRklDVUxUWSxcbiAgUE9XX0NIQUxMRU5HRV9UVExfTVMsXG4gIHR5cGUgUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHR5cGUgUHJvb2ZPZldvcmtTb2x1dGlvbixcbn0gZnJvbSAnLi9wcm9vZi1vZi13b3JrLmpzJztcbiJdfQ==
|
package/lib/utils/jwk.d.ts
CHANGED
|
@@ -96,3 +96,7 @@ export declare function isJwksDocument(value: unknown): value is JwksDocument;
|
|
|
96
96
|
* tokens that verify nowhere, so it is strict: any structural surprise throws.
|
|
97
97
|
*/
|
|
98
98
|
export declare function derToJoseSignature(der: Buffer, coordinateBytes?: number): Buffer;
|
|
99
|
+
/** The JWS signing input for an ES256 JWT: `base64url(header).base64url(body)`. */
|
|
100
|
+
export declare function encodeJwsSigningInput(kid: string, body: object): string;
|
|
101
|
+
/** A compact JWT from its signing input and its IEEE-P1363 signature. */
|
|
102
|
+
export declare function compactJws(signingInput: string, signature: Buffer): string;
|
package/lib/utils/jwk.js
CHANGED
|
@@ -136,4 +136,16 @@ export function derToJoseSignature(der, coordinateBytes = 32) {
|
|
|
136
136
|
const s = readInt();
|
|
137
137
|
return Buffer.concat([r, s]);
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiandrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2p3ay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxNQUFNLEVBQUUsRUFBa0IsTUFBTSxRQUFRLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUU1Qyw4RkFBOEY7QUFDOUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBRXhDLHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQUM7QUE0QmxEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2pELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFZLENBQUM7UUFDM0YsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoRixPQUFPLE1BQW1CLENBQUM7SUFDN0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7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LEtBQUssQ0FBQyxNQUFNLEdBQUcsZUFBZTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNyRyxrRUFBa0U7UUFDbEUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQyxDQUFDO0lBRUYsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDcEIsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDcEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEpXSyBwcmltaXRpdmVzIGZvciB0aGUgQVNZTU1FVFJJQyB1c2VyLXRva2VuIGNoYWluLlxuICpcbiAqIEV2ZXJ5IHRva2VuIHRoYXQgc3BlYWtzIGZvciBhIFBFUlNPTiAoYWNjZXNzLCByZWZyZXNoLCBzdGVwLXVwLCBhbmQgdGhlXG4gKiBzaG9ydC1saXZlZCB0b2tlbiBhbiBvcGFxdWUgYWNjZXNzIGtleSBpcyBleGNoYW5nZWQgZm9yKSBpcyBzaWduZWQgYnlcbiAqICoqcGxhdGZvcm0gYWxvbmUqKiwgd2l0aCBFUzI1NiBhbmQgYSBga2lkYCwgYW5kIHZlcmlmaWVkIGJ5IGV2ZXJ5b25lIGVsc2VcbiAqIGFnYWluc3QgdGhlIHB1YmxpYyBrZXlzIHBsYXRmb3JtIHB1Ymxpc2hlcyBhdCBgLy53ZWxsLWtub3duL2p3a3MuanNvbmAuIE5vXG4gKiBzZXJ2aWNlIGhvbGRzIGEga2V5IHRoYXQgY2FuIG1pbnQgYSB1c2VyIHRva2VuIGFueSBtb3JlLlxuICpcbiAqIE9ubHkgTm9kZSdzIGBjcnlwdG9gIGlzIHVzZWQg4oCUIGBjcmVhdGVQdWJsaWNLZXlgL2BleHBvcnRgIGFscmVhZHkgc3BlYWsgSldLLFxuICogc28gbm90aGluZyBoZXJlIG5lZWRzIGEgSk9TRSBsaWJyYXJ5LlxuICpcbiAqIEludGVybmFsIFNFUlZJQ0UgdG9rZW5zIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCkgYXJlIEVTMjU2IHRvbywgc2lnbmVkIGJ5XG4gKiB0aGUgQ0FMTElORyBzZXJ2aWNlIHdpdGggaXRzIG93biBrZXkgKCMxNCwgYHNlcnZpY2VzL3NlcnZpY2Uta2V5cy50c2ApLiBCb3RoXG4gKiBjaGFpbnMgdGhlcmVmb3JlIHNoYXJlIHRoZXNlIHByaW1pdGl2ZXMsIGFuZCBhIGJlYXJlciB0b2tlbiBpcyByb3V0ZWQgYnkgd2hpY2hcbiAqIGtleSBzZXQgb3ducyBpdHMgYGtpZGAgcmF0aGVyIHRoYW4gYnkgaXRzIGFsZ29yaXRobSDigJQgc2VlIGBtaWRkbGV3YXJlL2F1dGgudHNgLlxuICovXG5cbmltcG9ydCBjcnlwdG8sIHsgdHlwZSBLZXlPYmplY3QgfSBmcm9tICdjcnlwdG8nO1xuXG4vKiogVGhlIE9OTFkgYWxnb3JpdGhtIGEgdXNlciB0b2tlbiBtYXkgYmUgc2lnbmVkIHdpdGguICovXG5leHBvcnQgY29uc3QgVVNFUl9UT0tFTl9BTEdPUklUSE0gPSAnRVMyNTYnO1xuXG4vKiogVGhlIGN1cnZlIEVTMjU2IHBpbnMgKGBFQ0RTQV9OSVNUX1AyNTZgIC8gYHByaW1lMjU2djFgIC8gYEVDQ19OSVNUX1AyNTZgIGluIEtNUyB0ZXJtcykuICovXG5leHBvcnQgY29uc3QgVVNFUl9UT0tFTl9DVVJWRSA9ICdQLTI1Nic7XG5cbi8qKiBQYXRoIHRoZSBwdWJsaWMga2V5IHNldCBpcyBzZXJ2ZWQgZnJvbSAocGxhdGZvcm0gbW91bnRzIGl0OyBuZ2lueCBwcm94aWVzIGl0KS4gKi9cbmV4cG9ydCBjb25zdCBKV0tTX1BBVEggPSAnLy53ZWxsLWtub3duL2p3a3MuanNvbic7XG5cbi8qKiBPbmUgcHVibGlzaGVkIEVDIHB1YmxpYyBrZXkuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0p3ayB7XG4gIGt0eTogJ0VDJztcbiAgY3J2OiAnUC0yNTYnO1xuICAvKiogYmFzZTY0dXJsIFggY29vcmRpbmF0ZS4gKi9cbiAgeDogc3RyaW5nO1xuICAvKiogYmFzZTY0dXJsIFkgY29vcmRpbmF0ZS4gKi9cbiAgeTogc3RyaW5nO1xuICAvKiogUkZDIDc2MzggdGh1bWJwcmludCDigJQgc3RhYmxlIGZvciB0aGUga2V5LCBzbyByb3RhdGlvbiBpcyBhIGBraWRgIGNoYW5nZS4gKi9cbiAga2lkOiBzdHJpbmc7XG4gIHVzZTogJ3NpZyc7XG4gIGFsZzogJ0VTMjU2Jztcbn1cblxuLyoqIFRoZSBkb2N1bWVudCBzZXJ2ZWQgYXQge0BsaW5rIEpXS1NfUEFUSH0uICovXG5leHBvcnQgaW50ZXJmYWNlIEp3a3NEb2N1bWVudCB7XG4gIGtleXM6IFB1YmxpY0p3a1tdO1xufVxuXG4vKiogVGhlIGhlYWRlciBmaWVsZHMgYSB2ZXJpZmllciBuZWVkcyBiZWZvcmUgaXQgY2FuIHBpY2sgYSBrZXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEp3dEhlYWRlciB7XG4gIGFsZz86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICB0eXA/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgSldUJ3MgaGVhZGVyIFdJVEhPVVQgdmVyaWZ5aW5nIGFueXRoaW5nLiBSZXR1cm5zIGBudWxsYCBmb3IgYW55dGhpbmdcbiAqIHRoYXQgaXMgbm90IGEgdGhyZWUtcGFydCB0b2tlbiB3aXRoIGEgSlNPTiBvYmplY3QgaGVhZGVyIOKAlCB0aGUgY2FsbGVyIHRoZW5cbiAqIHJlamVjdHMsIHNvIHRoaXMgbmV2ZXIgd2lkZW5zIHdoYXQgaXMgYWNjZXB0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVKd3RIZWFkZXIodG9rZW46IHN0cmluZyk6IEp3dEhlYWRlciB8IG51bGwge1xuICBjb25zdCBwYXJ0cyA9IHRva2VuLnNwbGl0KCcuJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDMgfHwgIXBhcnRzWzBdKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXIgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHBhcnRzWzBdLCAnYmFzZTY0dXJsJykudG9TdHJpbmcoJ3V0Zi04JykpIGFzIHVua25vd247XG4gICAgaWYgKCFoZWFkZXIgfHwgdHlwZW9mIGhlYWRlciAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShoZWFkZXIpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gaGVhZGVyIGFzIEp3dEhlYWRlcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgUkZDIDc2MzggdGh1bWJwcmludCBvZiBhbiBFQyBwdWJsaWMga2V5LCBiYXNlNjR1cmwtZW5jb2RlZCDigJQgdXNlZCBhcyB0aGVcbiAqIGBraWRgIGV2ZXJ5d2hlcmUuXG4gKlxuICogRGVyaXZpbmcgdGhlIGlkIEZST00gdGhlIGtleSAocmF0aGVyIHRoYW4gbmFtaW5nIGtleXMgYnkgaGFuZCwgb3IgYnkgdGhlaXIgS01TXG4gKiBBUk4pIG1lYW5zIHRoZSBzYW1lIGtleSBhbHdheXMgcHVibGlzaGVzIHVuZGVyIHRoZSBzYW1lIGBraWRgIHdoYXRldmVyIHNpZ25lclxuICogaG9sZHMgaXQsIGEgcm90YXRlZC1pbiBrZXkgY2FuIG5ldmVyIGNvbGxpZGUgd2l0aCB0aGUgb25lIGl0IHJlcGxhY2VzLCBhbmQgbm9cbiAqIEFXUyBhY2NvdW50IGlkIGV2ZXIgcmVhY2hlcyBhIHRva2VuIG9yIHRoZSBwdWJsaWMgSldLUy5cbiAqXG4gKiBUaGUgaGFzaGVkIGZvcm0gaXMgdGhlIGNhbm9uaWNhbCBKU09OIG9mIGV4YWN0bHkgYGNydmAsIGBrdHlgLCBgeGAsIGB5YCwgaW5cbiAqIGxleGljb2dyYXBoaWMgb3JkZXIgYW5kIHdpdGggbm8gd2hpdGVzcGFjZSDigJQgdGhlIHNwZWMncyByZXF1aXJlZCBtZW1iZXJzIGZvclxuICogYW4gRUMga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gandrVGh1bWJwcmludChqd2s6IHsgY3J2OiBzdHJpbmc7IGt0eTogc3RyaW5nOyB4OiBzdHJpbmc7IHk6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgY29uc3QgY2Fub25pY2FsID0gSlNPTi5zdHJpbmdpZnkoeyBjcnY6IGp3ay5jcnYsIGt0eTogandrLmt0eSwgeDogandrLngsIHk6IGp3ay55IH0pO1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShjYW5vbmljYWwpLmRpZ2VzdCgnYmFzZTY0dXJsJyk7XG59XG5cbi8qKlxuICogUHJvamVjdCBhbiBFQyBQLTI1NiBwdWJsaWMga2V5IG9udG8gdGhlIHB1Ymxpc2hlZCBKV0sgc2hhcGUsIHdpdGggaXRzXG4gKiB0aHVtYnByaW50IGFzIGBraWRgLiBUaHJvd3Mgd2hlbiB0aGUga2V5IGlzIG5vdCBhIFAtMjU2IEVDIGtleSDigJQgYSBzaWduZXJcbiAqIGNvbmZpZ3VyZWQgd2l0aCB0aGUgd3Jvbmcga2V5IHR5cGUgbXVzdCBmYWlsIGF0IGJvb3QsIG5vdCBtaW50IHRva2VucyBub2JvZHlcbiAqIGNhbiB2ZXJpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaWNKd2tGcm9tKGtleTogS2V5T2JqZWN0KTogUHVibGljSndrIHtcbiAgY29uc3QgZXhwb3J0ZWQgPSBrZXkuZXhwb3J0KHsgZm9ybWF0OiAnandrJyB9KSBhcyB7IGt0eT86IHN0cmluZzsgY3J2Pzogc3RyaW5nOyB4Pzogc3RyaW5nOyB5Pzogc3RyaW5nIH07XG4gIGlmIChleHBvcnRlZC5rdHkgIT09ICdFQycgfHwgZXhwb3J0ZWQuY3J2ICE9PSBVU0VSX1RPS0VOX0NVUlZFIHx8ICFleHBvcnRlZC54IHx8ICFleHBvcnRlZC55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBzaWduaW5nIGtleSBtdXN0IGJlIGFuIEVDICR7VVNFUl9UT0tFTl9DVVJWRX0gcHVibGljIGtleSAoZ290ICR7ZXhwb3J0ZWQua3R5ID8/ICd1bmtub3duJ30vJHtleHBvcnRlZC5jcnYgPz8gJ3Vua25vd24nfSlgKTtcbiAgfVxuICBjb25zdCBiYXNlID0geyBrdHk6ICdFQycgYXMgY29uc3QsIGNydjogVVNFUl9UT0tFTl9DVVJWRSBhcyAnUC0yNTYnLCB4OiBleHBvcnRlZC54LCB5OiBleHBvcnRlZC55IH07XG4gIHJldHVybiB7IC4uLmJhc2UsIGtpZDogandrVGh1bWJwcmludChiYXNlKSwgdXNlOiAnc2lnJywgYWxnOiAnRVMyNTYnIH07XG59XG5cbi8qKlxuICogVHVybiBhIHB1Ymxpc2hlZCBKV0sgYmFjayBpbnRvIGEgdmVyaWZpY2F0aW9uIGtleS4gVGhyb3dzIGZvciBhbnl0aGluZyB0aGF0IGlzXG4gKiBub3QgYW4gRVMyNTYtdXNhYmxlIFAtMjU2IGtleSwgc28gYSBKV0tTIGRvY3VtZW50IHdpdGggYSBzdXJwcmlzZSBlbnRyeVxuICogKGEgZnV0dXJlIFJTQSBrZXksIGEgYHVzZTogJ2VuYydgIGtleSkgY2FuIG5ldmVyIGJlIHByZXNzZWQgaW50byB2ZXJpZnlpbmcgYVxuICogdXNlciB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0tleUZyb21Kd2soandrOiBQdWJsaWNKd2spOiBLZXlPYmplY3Qge1xuICBpZiAoandrLmt0eSAhPT0gJ0VDJyB8fCBqd2suY3J2ICE9PSBVU0VSX1RPS0VOX0NVUlZFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBKV0tTIGVudHJ5OiAke2p3ay5rdHl9LyR7andrLmNydn1gKTtcbiAgfVxuICBpZiAoandrLnVzZSAhPT0gdW5kZWZpbmVkICYmIGp3ay51c2UgIT09ICdzaWcnKSB0aHJvdyBuZXcgRXJyb3IoJ0pXS1MgZW50cnkgaXMgbm90IGEgc2lnbmluZyBrZXknKTtcbiAgaWYgKGp3ay5hbGcgIT09IHVuZGVmaW5lZCAmJiBqd2suYWxnICE9PSBVU0VSX1RPS0VOX0FMR09SSVRITSkgdGhyb3cgbmV3IEVycm9yKGBKV0tTIGVudHJ5IGFsZ29yaXRobSBpcyBub3QgJHtVU0VSX1RPS0VOX0FMR09SSVRITX1gKTtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoeyBrZXk6IHsga3R5OiAnRUMnLCBjcnY6IGp3ay5jcnYsIHg6IGp3ay54LCB5OiBqd2sueSB9LCBmb3JtYXQ6ICdqd2snIH0pO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGB2YWx1ZWAgaXMgc2hhcGVkIGxpa2UgdGhlIEpXS1MgZG9jdW1lbnQgKGtleXMgYXJyYXkgb2Ygb2JqZWN0cykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNKd2tzRG9jdW1lbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBKd2tzRG9jdW1lbnQge1xuICByZXR1cm4gISF2YWx1ZVxuICAgICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiBBcnJheS5pc0FycmF5KCh2YWx1ZSBhcyB7IGtleXM/OiB1bmtub3duIH0pLmtleXMpXG4gICAgJiYgKHZhbHVlIGFzIHsga2V5czogdW5rbm93bltdIH0pLmtleXMuZXZlcnkoKGspID0+ICEhayAmJiB0eXBlb2YgayA9PT0gJ29iamVjdCcpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gRUNEU0Egc2lnbmF0dXJlIGZyb20gQVNOLjEgREVSICh3aGF0IEFXUyBLTVMgcmV0dXJucykgdG8gdGhlIHJhd1xuICogZml4ZWQtd2lkdGggYHIgfHwgc2AgSk9TRSBmb3JtIGEgSldUIGNhcnJpZXMuXG4gKlxuICogREVSIGlzIGBTRVFVRU5DRSB7IElOVEVHRVIgciwgSU5URUdFUiBzIH1gIHdpdGggYm90aCBpbnRlZ2VycyBtaW5pbWFsbHlcbiAqIGVuY29kZWQgYW5kIHNpZ24tcGFkZGVkOyBKT1NFIHdhbnRzIGVhY2ggY29vcmRpbmF0ZSBsZWZ0LXplcm8tcGFkZGVkIHRvXG4gKiBleGFjdGx5IHRoZSBjdXJ2ZSBzaXplICgzMiBieXRlcyBmb3IgUC0yNTYpLiBHZXR0aW5nIHRoaXMgd3JvbmcgcHJvZHVjZXNcbiAqIHRva2VucyB0aGF0IHZlcmlmeSBub3doZXJlLCBzbyBpdCBpcyBzdHJpY3Q6IGFueSBzdHJ1Y3R1cmFsIHN1cnByaXNlIHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlclRvSm9zZVNpZ25hdHVyZShkZXI6IEJ1ZmZlciwgY29vcmRpbmF0ZUJ5dGVzID0gMzIpOiBCdWZmZXIge1xuICBpZiAoZGVyWzBdICE9PSAweDMwKSB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBERVIgc2lnbmF0dXJlOiBleHBlY3RlZCBTRVFVRU5DRScpO1xuICAvLyBMZW5ndGggYnl0ZShzKTogc2hvcnQgZm9ybSAoPDB4ODApIG9yIGxvbmcgZm9ybSAoMHg4MSBmb3IgYSAxLWJ5dGUgbGVuZ3RoKS5cbiAgbGV0IG9mZnNldCA9IDE7XG4gIGlmIChkZXJbb2Zmc2V0XSA9PT0gMHg4MSkgb2Zmc2V0ICs9IDI7XG4gIGVsc2UgaWYgKGRlcltvZmZzZXRdIDwgMHg4MCkgb2Zmc2V0ICs9IDE7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgREVSIHNpZ25hdHVyZTogdW5zdXBwb3J0ZWQgbGVuZ3RoIGVuY29kaW5nJyk7XG5cbiAgY29uc3QgcmVhZEludCA9ICgpOiBCdWZmZXIgPT4ge1xuICAgIGlmIChkZXJbb2Zmc2V0XSAhPT0gMHgwMikgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgREVSIHNpZ25hdHVyZTogZXhwZWN0ZWQgSU5URUdFUicpO1xuICAgIGNvbnN0IGxlbiA9IGRlcltvZmZzZXQgKyAxXTtcbiAgICBjb25zdCBzdGFydCA9IG9mZnNldCArIDI7XG4gICAgb2Zmc2V0ID0gc3RhcnQgKyBsZW47XG4gICAgbGV0IHZhbHVlID0gZGVyLnN1YmFycmF5KHN0YXJ0LCBvZmZzZXQpO1xuICAgIC8vIFN0cmlwIHRoZSBzaWduLXBhZGRpbmcgYnl0ZSBERVIgYWRkcyB3aGVuIHRoZSBoaWdoIGJpdCBpcyBzZXTigKZcbiAgICB3aGlsZSAodmFsdWUubGVuZ3RoID4gY29vcmRpbmF0ZUJ5dGVzICYmIHZhbHVlWzBdID09PSAweDAwKSB2YWx1ZSA9IHZhbHVlLnN1YmFycmF5KDEpO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiBjb29yZGluYXRlQnl0ZXMpIHRocm93IG5ldyBFcnJvcignTWFsZm9ybWVkIERFUiBzaWduYXR1cmU6IGNvb3JkaW5hdGUgdG9vIGxhcmdlJyk7XG4gICAgLy8g4oCmdGhlbiBsZWZ0LXBhZCBiYWNrIG91dCB0byB0aGUgZml4ZWQgY3VydmUgd2lkdGggSk9TRSByZXF1aXJlcy5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKGNvb3JkaW5hdGVCeXRlcyAtIHZhbHVlLmxlbmd0aCksIHZhbHVlXSk7XG4gIH07XG5cbiAgY29uc3QgciA9IHJlYWRJbnQoKTtcbiAgY29uc3QgcyA9IHJlYWRJbnQoKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3IsIHNdKTtcbn1cbiJdfQ==
|
|
139
|
+
/** base64url of a JSON value, the JWS way (no padding, URL alphabet). */
|
|
140
|
+
function b64uJson(value) {
|
|
141
|
+
return Buffer.from(JSON.stringify(value), 'utf-8').toString('base64url');
|
|
142
|
+
}
|
|
143
|
+
/** The JWS signing input for an ES256 JWT: `base64url(header).base64url(body)`. */
|
|
144
|
+
export function encodeJwsSigningInput(kid, body) {
|
|
145
|
+
return `${b64uJson({ alg: USER_TOKEN_ALGORITHM, typ: 'JWT', kid })}.${b64uJson(body)}`;
|
|
146
|
+
}
|
|
147
|
+
/** A compact JWT from its signing input and its IEEE-P1363 signature. */
|
|
148
|
+
export function compactJws(signingInput, signature) {
|
|
149
|
+
return `${signingInput}.${signature.toString('base64url')}`;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiandrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2p3ay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxNQUFNLEVBQUUsRUFBa0IsTUFBTSxRQUFRLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUU1Qyw4RkFBOEY7QUFDOUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBRXhDLHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQUM7QUE0QmxEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2pELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFZLENBQUM7UUFDM0YsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoRixPQUFPLE1BQW1CLENBQUM7SUFDN0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7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bi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogSldLIHByaW1pdGl2ZXMgZm9yIHRoZSBBU1lNTUVUUklDIHVzZXItdG9rZW4gY2hhaW4uXG4gKlxuICogRXZlcnkgdG9rZW4gdGhhdCBzcGVha3MgZm9yIGEgUEVSU09OIChhY2Nlc3MsIHJlZnJlc2gsIHN0ZXAtdXAsIGFuZCB0aGVcbiAqIHNob3J0LWxpdmVkIHRva2VuIGFuIG9wYXF1ZSBhY2Nlc3Mga2V5IGlzIGV4Y2hhbmdlZCBmb3IpIGlzIHNpZ25lZCBieVxuICogKipwbGF0Zm9ybSBhbG9uZSoqLCB3aXRoIEVTMjU2IGFuZCBhIGBraWRgLCBhbmQgdmVyaWZpZWQgYnkgZXZlcnlvbmUgZWxzZVxuICogYWdhaW5zdCB0aGUgcHVibGljIGtleXMgcGxhdGZvcm0gcHVibGlzaGVzIGF0IGAvLndlbGwta25vd24vandrcy5qc29uYC4gTm9cbiAqIHNlcnZpY2UgaG9sZHMgYSBrZXkgdGhhdCBjYW4gbWludCBhIHVzZXIgdG9rZW4gYW55IG1vcmUuXG4gKlxuICogT25seSBOb2RlJ3MgYGNyeXB0b2AgaXMgdXNlZCDigJQgYGNyZWF0ZVB1YmxpY0tleWAvYGV4cG9ydGAgYWxyZWFkeSBzcGVhayBKV0ssXG4gKiBzbyBub3RoaW5nIGhlcmUgbmVlZHMgYSBKT1NFIGxpYnJhcnkuXG4gKlxuICogSW50ZXJuYWwgU0VSVklDRSB0b2tlbnMgKGBwcmluY2lwYWxUeXBlOiAnc2VydmljZSdgKSBhcmUgRVMyNTYgdG9vLCBzaWduZWQgYnlcbiAqIHRoZSBDQUxMSU5HIHNlcnZpY2Ugd2l0aCBpdHMgb3duIGtleSAoIzE0LCBgc2VydmljZXMvc2VydmljZS1rZXlzLnRzYCkuIEJvdGhcbiAqIGNoYWlucyB0aGVyZWZvcmUgc2hhcmUgdGhlc2UgcHJpbWl0aXZlcywgYW5kIGEgYmVhcmVyIHRva2VuIGlzIHJvdXRlZCBieSB3aGljaFxuICoga2V5IHNldCBvd25zIGl0cyBga2lkYCByYXRoZXIgdGhhbiBieSBpdHMgYWxnb3JpdGhtIOKAlCBzZWUgYG1pZGRsZXdhcmUvYXV0aC50c2AuXG4gKi9cblxuaW1wb3J0IGNyeXB0bywgeyB0eXBlIEtleU9iamVjdCB9IGZyb20gJ2NyeXB0byc7XG5cbi8qKiBUaGUgT05MWSBhbGdvcml0aG0gYSB1c2VyIHRva2VuIG1heSBiZSBzaWduZWQgd2l0aC4gKi9cbmV4cG9ydCBjb25zdCBVU0VSX1RPS0VOX0FMR09SSVRITSA9ICdFUzI1Nic7XG5cbi8qKiBUaGUgY3VydmUgRVMyNTYgcGlucyAoYEVDRFNBX05JU1RfUDI1NmAgLyBgcHJpbWUyNTZ2MWAgLyBgRUNDX05JU1RfUDI1NmAgaW4gS01TIHRlcm1zKS4gKi9cbmV4cG9ydCBjb25zdCBVU0VSX1RPS0VOX0NVUlZFID0gJ1AtMjU2JztcblxuLyoqIFBhdGggdGhlIHB1YmxpYyBrZXkgc2V0IGlzIHNlcnZlZCBmcm9tIChwbGF0Zm9ybSBtb3VudHMgaXQ7IG5naW54IHByb3hpZXMgaXQpLiAqL1xuZXhwb3J0IGNvbnN0IEpXS1NfUEFUSCA9ICcvLndlbGwta25vd24vandrcy5qc29uJztcblxuLyoqIE9uZSBwdWJsaXNoZWQgRUMgcHVibGljIGtleS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljSndrIHtcbiAga3R5OiAnRUMnO1xuICBjcnY6ICdQLTI1Nic7XG4gIC8qKiBiYXNlNjR1cmwgWCBjb29yZGluYXRlLiAqL1xuICB4OiBzdHJpbmc7XG4gIC8qKiBiYXNlNjR1cmwgWSBjb29yZGluYXRlLiAqL1xuICB5OiBzdHJpbmc7XG4gIC8qKiBSRkMgNzYzOCB0aHVtYnByaW50IOKAlCBzdGFibGUgZm9yIHRoZSBrZXksIHNvIHJvdGF0aW9uIGlzIGEgYGtpZGAgY2hhbmdlLiAqL1xuICBraWQ6IHN0cmluZztcbiAgdXNlOiAnc2lnJztcbiAgYWxnOiAnRVMyNTYnO1xufVxuXG4vKiogVGhlIGRvY3VtZW50IHNlcnZlZCBhdCB7QGxpbmsgSldLU19QQVRIfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSndrc0RvY3VtZW50IHtcbiAga2V5czogUHVibGljSndrW107XG59XG5cbi8qKiBUaGUgaGVhZGVyIGZpZWxkcyBhIHZlcmlmaWVyIG5lZWRzIGJlZm9yZSBpdCBjYW4gcGljayBhIGtleS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnd0SGVhZGVyIHtcbiAgYWxnPzogc3RyaW5nO1xuICBraWQ/OiBzdHJpbmc7XG4gIHR5cD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBKV1QncyBoZWFkZXIgV0lUSE9VVCB2ZXJpZnlpbmcgYW55dGhpbmcuIFJldHVybnMgYG51bGxgIGZvciBhbnl0aGluZ1xuICogdGhhdCBpcyBub3QgYSB0aHJlZS1wYXJ0IHRva2VuIHdpdGggYSBKU09OIG9iamVjdCBoZWFkZXIg4oCUIHRoZSBjYWxsZXIgdGhlblxuICogcmVqZWN0cywgc28gdGhpcyBuZXZlciB3aWRlbnMgd2hhdCBpcyBhY2NlcHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUp3dEhlYWRlcih0b2tlbjogc3RyaW5nKTogSnd0SGVhZGVyIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gdG9rZW4uc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMyB8fCAhcGFydHNbMF0pIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGhlYWRlciA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20ocGFydHNbMF0sICdiYXNlNjR1cmwnKS50b1N0cmluZygndXRmLTgnKSkgYXMgdW5rbm93bjtcbiAgICBpZiAoIWhlYWRlciB8fCB0eXBlb2YgaGVhZGVyICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGhlYWRlcikpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBoZWFkZXIgYXMgSnd0SGVhZGVyO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBSRkMgNzYzOCB0aHVtYnByaW50IG9mIGFuIEVDIHB1YmxpYyBrZXksIGJhc2U2NHVybC1lbmNvZGVkIOKAlCB1c2VkIGFzIHRoZVxuICogYGtpZGAgZXZlcnl3aGVyZS5cbiAqXG4gKiBEZXJpdmluZyB0aGUgaWQgRlJPTSB0aGUga2V5IChyYXRoZXIgdGhhbiBuYW1pbmcga2V5cyBieSBoYW5kLCBvciBieSB0aGVpciBLTVNcbiAqIEFSTikgbWVhbnMgdGhlIHNhbWUga2V5IGFsd2F5cyBwdWJsaXNoZXMgdW5kZXIgdGhlIHNhbWUgYGtpZGAgd2hhdGV2ZXIgc2lnbmVyXG4gKiBob2xkcyBpdCwgYSByb3RhdGVkLWluIGtleSBjYW4gbmV2ZXIgY29sbGlkZSB3aXRoIHRoZSBvbmUgaXQgcmVwbGFjZXMsIGFuZCBub1xuICogQVdTIGFjY291bnQgaWQgZXZlciByZWFjaGVzIGEgdG9rZW4gb3IgdGhlIHB1YmxpYyBKV0tTLlxuICpcbiAqIFRoZSBoYXNoZWQgZm9ybSBpcyB0aGUgY2Fub25pY2FsIEpTT04gb2YgZXhhY3RseSBgY3J2YCwgYGt0eWAsIGB4YCwgYHlgLCBpblxuICogbGV4aWNvZ3JhcGhpYyBvcmRlciBhbmQgd2l0aCBubyB3aGl0ZXNwYWNlIOKAlCB0aGUgc3BlYydzIHJlcXVpcmVkIG1lbWJlcnMgZm9yXG4gKiBhbiBFQyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqd2tUaHVtYnByaW50KGp3azogeyBjcnY6IHN0cmluZzsga3R5OiBzdHJpbmc7IHg6IHN0cmluZzsgeTogc3RyaW5nIH0pOiBzdHJpbmcge1xuICBjb25zdCBjYW5vbmljYWwgPSBKU09OLnN0cmluZ2lmeSh7IGNydjogandrLmNydiwga3R5OiBqd2sua3R5LCB4OiBqd2sueCwgeTogandrLnkgfSk7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGNhbm9uaWNhbCkuZGlnZXN0KCdiYXNlNjR1cmwnKTtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IGFuIEVDIFAtMjU2IHB1YmxpYyBrZXkgb250byB0aGUgcHVibGlzaGVkIEpXSyBzaGFwZSwgd2l0aCBpdHNcbiAqIHRodW1icHJpbnQgYXMgYGtpZGAuIFRocm93cyB3aGVuIHRoZSBrZXkgaXMgbm90IGEgUC0yNTYgRUMga2V5IOKAlCBhIHNpZ25lclxuICogY29uZmlndXJlZCB3aXRoIHRoZSB3cm9uZyBrZXkgdHlwZSBtdXN0IGZhaWwgYXQgYm9vdCwgbm90IG1pbnQgdG9rZW5zIG5vYm9keVxuICogY2FuIHZlcmlmeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0p3a0Zyb20oa2V5OiBLZXlPYmplY3QpOiBQdWJsaWNKd2sge1xuICBjb25zdCBleHBvcnRlZCA9IGtleS5leHBvcnQoeyBmb3JtYXQ6ICdqd2snIH0pIGFzIHsga3R5Pzogc3RyaW5nOyBjcnY/OiBzdHJpbmc7IHg/OiBzdHJpbmc7IHk/OiBzdHJpbmcgfTtcbiAgaWYgKGV4cG9ydGVkLmt0eSAhPT0gJ0VDJyB8fCBleHBvcnRlZC5jcnYgIT09IFVTRVJfVE9LRU5fQ1VSVkUgfHwgIWV4cG9ydGVkLnggfHwgIWV4cG9ydGVkLnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRva2VuIHNpZ25pbmcga2V5IG11c3QgYmUgYW4gRUMgJHtVU0VSX1RPS0VOX0NVUlZFfSBwdWJsaWMga2V5IChnb3QgJHtleHBvcnRlZC5rdHkgPz8gJ3Vua25vd24nfS8ke2V4cG9ydGVkLmNydiA/PyAndW5rbm93bid9KWApO1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7IGt0eTogJ0VDJyBhcyBjb25zdCwgY3J2OiBVU0VSX1RPS0VOX0NVUlZFIGFzICdQLTI1NicsIHg6IGV4cG9ydGVkLngsIHk6IGV4cG9ydGVkLnkgfTtcbiAgcmV0dXJuIHsgLi4uYmFzZSwga2lkOiBqd2tUaHVtYnByaW50KGJhc2UpLCB1c2U6ICdzaWcnLCBhbGc6ICdFUzI1NicgfTtcbn1cblxuLyoqXG4gKiBUdXJuIGEgcHVibGlzaGVkIEpXSyBiYWNrIGludG8gYSB2ZXJpZmljYXRpb24ga2V5LiBUaHJvd3MgZm9yIGFueXRoaW5nIHRoYXQgaXNcbiAqIG5vdCBhbiBFUzI1Ni11c2FibGUgUC0yNTYga2V5LCBzbyBhIEpXS1MgZG9jdW1lbnQgd2l0aCBhIHN1cnByaXNlIGVudHJ5XG4gKiAoYSBmdXR1cmUgUlNBIGtleSwgYSBgdXNlOiAnZW5jJ2Aga2V5KSBjYW4gbmV2ZXIgYmUgcHJlc3NlZCBpbnRvIHZlcmlmeWluZyBhXG4gKiB1c2VyIHRva2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljS2V5RnJvbUp3ayhqd2s6IFB1YmxpY0p3ayk6IEtleU9iamVjdCB7XG4gIGlmIChqd2sua3R5ICE9PSAnRUMnIHx8IGp3ay5jcnYgIT09IFVTRVJfVE9LRU5fQ1VSVkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEpXS1MgZW50cnk6ICR7andrLmt0eX0vJHtqd2suY3J2fWApO1xuICB9XG4gIGlmIChqd2sudXNlICE9PSB1bmRlZmluZWQgJiYgandrLnVzZSAhPT0gJ3NpZycpIHRocm93IG5ldyBFcnJvcignSldLUyBlbnRyeSBpcyBub3QgYSBzaWduaW5nIGtleScpO1xuICBpZiAoandrLmFsZyAhPT0gdW5kZWZpbmVkICYmIGp3ay5hbGcgIT09IFVTRVJfVE9LRU5fQUxHT1JJVEhNKSB0aHJvdyBuZXcgRXJyb3IoYEpXS1MgZW50cnkgYWxnb3JpdGhtIGlzIG5vdCAke1VTRVJfVE9LRU5fQUxHT1JJVEhNfWApO1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7IGtleTogeyBrdHk6ICdFQycsIGNydjogandrLmNydiwgeDogandrLngsIHk6IGp3ay55IH0sIGZvcm1hdDogJ2p3aycgfSk7XG59XG5cbi8qKiBUcnVlIHdoZW4gYHZhbHVlYCBpcyBzaGFwZWQgbGlrZSB0aGUgSldLUyBkb2N1bWVudCAoa2V5cyBhcnJheSBvZiBvYmplY3RzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0p3a3NEb2N1bWVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEp3a3NEb2N1bWVudCB7XG4gIHJldHVybiAhIXZhbHVlXG4gICAgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmIEFycmF5LmlzQXJyYXkoKHZhbHVlIGFzIHsga2V5cz86IHVua25vd24gfSkua2V5cylcbiAgICAmJiAodmFsdWUgYXMgeyBrZXlzOiB1bmtub3duW10gfSkua2V5cy5ldmVyeSgoaykgPT4gISFrICYmIHR5cGVvZiBrID09PSAnb2JqZWN0Jyk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBFQ0RTQSBzaWduYXR1cmUgZnJvbSBBU04uMSBERVIgKHdoYXQgQVdTIEtNUyByZXR1cm5zKSB0byB0aGUgcmF3XG4gKiBmaXhlZC13aWR0aCBgciB8fCBzYCBKT1NFIGZvcm0gYSBKV1QgY2Fycmllcy5cbiAqXG4gKiBERVIgaXMgYFNFUVVFTkNFIHsgSU5URUdFUiByLCBJTlRFR0VSIHMgfWAgd2l0aCBib3RoIGludGVnZXJzIG1pbmltYWxseVxuICogZW5jb2RlZCBhbmQgc2lnbi1wYWRkZWQ7IEpPU0Ugd2FudHMgZWFjaCBjb29yZGluYXRlIGxlZnQtemVyby1wYWRkZWQgdG9cbiAqIGV4YWN0bHkgdGhlIGN1cnZlIHNpemUgKDMyIGJ5dGVzIGZvciBQLTI1NikuIEdldHRpbmcgdGhpcyB3cm9uZyBwcm9kdWNlc1xuICogdG9rZW5zIHRoYXQgdmVyaWZ5IG5vd2hlcmUsIHNvIGl0IGlzIHN0cmljdDogYW55IHN0cnVjdHVyYWwgc3VycHJpc2UgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyVG9Kb3NlU2lnbmF0dXJlKGRlcjogQnVmZmVyLCBjb29yZGluYXRlQnl0ZXMgPSAzMik6IEJ1ZmZlciB7XG4gIGlmIChkZXJbMF0gIT09IDB4MzApIHRocm93IG5ldyBFcnJvcignTWFsZm9ybWVkIERFUiBzaWduYXR1cmU6IGV4cGVjdGVkIFNFUVVFTkNFJyk7XG4gIC8vIExlbmd0aCBieXRlKHMpOiBzaG9ydCBmb3JtICg8MHg4MCkgb3IgbG9uZyBmb3JtICgweDgxIGZvciBhIDEtYnl0ZSBsZW5ndGgpLlxuICBsZXQgb2Zmc2V0ID0gMTtcbiAgaWYgKGRlcltvZmZzZXRdID09PSAweDgxKSBvZmZzZXQgKz0gMjtcbiAgZWxzZSBpZiAoZGVyW29mZnNldF0gPCAweDgwKSBvZmZzZXQgKz0gMTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBERVIgc2lnbmF0dXJlOiB1bnN1cHBvcnRlZCBsZW5ndGggZW5jb2RpbmcnKTtcblxuICBjb25zdCByZWFkSW50ID0gKCk6IEJ1ZmZlciA9PiB7XG4gICAgaWYgKGRlcltvZmZzZXRdICE9PSAweDAyKSB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBERVIgc2lnbmF0dXJlOiBleHBlY3RlZCBJTlRFR0VSJyk7XG4gICAgY29uc3QgbGVuID0gZGVyW29mZnNldCArIDFdO1xuICAgIGNvbnN0IHN0YXJ0ID0gb2Zmc2V0ICsgMjtcbiAgICBvZmZzZXQgPSBzdGFydCArIGxlbjtcbiAgICBsZXQgdmFsdWUgPSBkZXIuc3ViYXJyYXkoc3RhcnQsIG9mZnNldCk7XG4gICAgLy8gU3RyaXAgdGhlIHNpZ24tcGFkZGluZyBieXRlIERFUiBhZGRzIHdoZW4gdGhlIGhpZ2ggYml0IGlzIHNldOKAplxuICAgIHdoaWxlICh2YWx1ZS5sZW5ndGggPiBjb29yZGluYXRlQnl0ZXMgJiYgdmFsdWVbMF0gPT09IDB4MDApIHZhbHVlID0gdmFsdWUuc3ViYXJyYXkoMSk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IGNvb3JkaW5hdGVCeXRlcykgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgREVSIHNpZ25hdHVyZTogY29vcmRpbmF0ZSB0b28gbGFyZ2UnKTtcbiAgICAvLyDigKZ0aGVuIGxlZnQtcGFkIGJhY2sgb3V0IHRvIHRoZSBmaXhlZCBjdXJ2ZSB3aWR0aCBKT1NFIHJlcXVpcmVzLlxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtCdWZmZXIuYWxsb2MoY29vcmRpbmF0ZUJ5dGVzIC0gdmFsdWUubGVuZ3RoKSwgdmFsdWVdKTtcbiAgfTtcblxuICBjb25zdCByID0gcmVhZEludCgpO1xuICBjb25zdCBzID0gcmVhZEludCgpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbciwgc10pO1xufVxuXG4vKiogYmFzZTY0dXJsIG9mIGEgSlNPTiB2YWx1ZSwgdGhlIEpXUyB3YXkgKG5vIHBhZGRpbmcsIFVSTCBhbHBoYWJldCkuICovXG5mdW5jdGlvbiBiNjR1SnNvbih2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh2YWx1ZSksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKTtcbn1cblxuLyoqIFRoZSBKV1Mgc2lnbmluZyBpbnB1dCBmb3IgYW4gRVMyNTYgSldUOiBgYmFzZTY0dXJsKGhlYWRlcikuYmFzZTY0dXJsKGJvZHkpYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVKd3NTaWduaW5nSW5wdXQoa2lkOiBzdHJpbmcsIGJvZHk6IG9iamVjdCk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtiNjR1SnNvbih7IGFsZzogVVNFUl9UT0tFTl9BTEdPUklUSE0sIHR5cDogJ0pXVCcsIGtpZCB9KX0uJHtiNjR1SnNvbihib2R5KX1gO1xufVxuXG4vKiogQSBjb21wYWN0IEpXVCBmcm9tIGl0cyBzaWduaW5nIGlucHV0IGFuZCBpdHMgSUVFRS1QMTM2MyBzaWduYXR1cmUuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFjdEp3cyhzaWduaW5nSW5wdXQ6IHN0cmluZywgc2lnbmF0dXJlOiBCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7c2lnbmluZ0lucHV0fS4ke3NpZ25hdHVyZS50b1N0cmluZygnYmFzZTY0dXJsJyl9YDtcbn1cbiJdfQ==
|
package/lib/utils/logger.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import winston from 'winston';
|
|
|
4
4
|
* attributed to the org that caused them.
|
|
5
5
|
*
|
|
6
6
|
* `orgId` is the tenancy key for the Logs surface: promtail routes each line to
|
|
7
|
-
* its org's Loki tenant from this field (see `docs/
|
|
7
|
+
* its org's Loki tenant from this field (see `docs/observability-logs.md`). A
|
|
8
8
|
* line written outside a request scope (startup, background worker, migration)
|
|
9
9
|
* has no org and lands in the sysadmin-only `_infra` tenant — fail-closed.
|
|
10
10
|
*/
|
package/lib/utils/logger.js
CHANGED
|
@@ -218,4 +218,4 @@ export function createLogger(serviceName) {
|
|
|
218
218
|
*/
|
|
219
219
|
export const logger = createLogger(process.env.SERVICE_NAME || 'api');
|
|
220
220
|
export default logger;
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBGLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFFOUUsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQy9FLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNFLE9BQU8sR0FBRyxTQUFTLElBQUksS0FBSyxJQUFJLFdBQVcsSUFBSSxPQUFPLEdBQUcsT0FBTyxFQUFFLENB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QWUsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB3aW5zdG9uIGZyb20gJ3dpbnN0b24nO1xuaW1wb3J0IHsgc2FmZUNyZWF0ZVJlcXVpcmUgfSBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5pbXBvcnQgeyBTRU5TSVRJVkVfS0VZX1BBVFRFUk4sIFJFREFDVEVELCBtYXNrTGluZSB9IGZyb20gJy4vc2Vuc2l0aXZlLXBhdHRlcm5zLmpzJztcblxuY29uc3QgeyBjb21iaW5lLCB0aW1lc3RhbXAsIHByaW50ZiwgY29sb3JpemUsIGVycm9ycywganNvbiB9ID0gd2luc3Rvbi5mb3JtYXQ7XG5cbi8vIEVTTSBoYXMgbm8gZ2xvYmFsIGByZXF1aXJlYDsgc2FmZUNyZWF0ZVJlcXVpcmUgZW5hYmxlcyB0aGUgc3luY2hyb25vdXMsXG4vLyBPUFRJT05BTCBsYXp5LWxvYWQgb2YgQG9wZW50ZWxlbWV0cnkvYXBpIGluIGdldEN1cnJlbnRUcmFjZUlkKCkgYmVsb3cg4oCUIGFcbi8vIHdpbnN0b24gZm9ybWF0IGNhbGxiYWNrIG11c3Qgc3RheSBzeW5jaHJvbm91cywgc28gYSBkeW5hbWljIGltcG9ydCgpIHdvbid0XG4vLyB3b3JrIHRoZXJlLiAoQ0pTLWJ1bmRsZSBzYWZlIOKAlCBzZWUgc2FmZS1yZXF1aXJlLnRzLilcbmNvbnN0IHJlcXVpcmUgPSBzYWZlQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vKipcbiAqIEN1c3RvbSBsb2cgZm9ybWF0IGZvciBodW1hbi1yZWFkYWJsZSBjb25zb2xlIG91dHB1dC5cbiAqL1xuY29uc3QgY29uc29sZUZvcm1hdCA9IHByaW50ZigoeyBsZXZlbCwgbWVzc2FnZSwgdGltZXN0YW1wLCBzZXJ2aWNlLCAuLi5tZXRhIH0pID0+IHtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlID8gYFske3NlcnZpY2V9XWAgOiAnJztcbiAgY29uc3QgbWV0YVN0ciA9IE9iamVjdC5rZXlzKG1ldGEpLmxlbmd0aCA/IGAgJHtKU09OLnN0cmluZ2lmeShtZXRhKX1gIDogJyc7XG4gIHJldHVybiBgJHt0aW1lc3RhbXB9ICR7bGV2ZWx9ICR7c2VydmljZU5hbWV9ICR7bWVzc2FnZX0ke21ldGFTdHJ9YDtcbn0pO1xuXG4vKipcbiAqIExhenkgbG9va3VwIG9mIE9wZW5UZWxlbWV0cnkgdHJhY2UgSUQuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdHJhY2luZ1xuICogaXNuJ3QgaW5pdGlhbGl6ZWQgb3IgQG9wZW50ZWxlbWV0cnkvYXBpIGlzbid0IGluc3RhbGxlZCDigJQgbmV2ZXIgdGhyb3dzLlxuICogQ2hlYXA6IGEgc2luZ2xlIHByb3BlcnR5IHJlYWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbG9va3VwLlxuICovXG5sZXQgX290ZWxBcGk6IHsgdHJhY2U/OiB7IGdldEFjdGl2ZVNwYW4oKTogeyBzcGFuQ29udGV4dCgpOiB7IHRyYWNlSWQ6IHN0cmluZyB9IH0gfCB1bmRlZmluZWQgfSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChfb3RlbEFwaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICBfb3RlbEFwaSA9IHJlcXVpcmUoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgX290ZWxBcGkgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV9vdGVsQXBpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJldHVybiBfb3RlbEFwaS50cmFjZT8uZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgc3RhbXBzIGB0cmFjZV9pZGAgb24gZXZlcnkgZW50cnkgd2hlbiBhbiBPVGVsIHNwYW4gaXMgYWN0aXZlLiAqL1xuY29uc3QgdHJhY2VJZEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGNvbnN0IHRyYWNlSWQgPSBnZXRDdXJyZW50VHJhY2VJZCgpO1xuICBpZiAodHJhY2VJZCkgaW5mby50cmFjZV9pZCA9IHRyYWNlSWQ7XG4gIHJldHVybiBpbmZvO1xufSkoKTtcblxuLyoqXG4gKiBQZXItcmVxdWVzdCBpZGVudGl0eSBzdGFtcGVkIG9udG8gZXZlcnkgbG9nIGVudHJ5LCBzbyBsb2cgbGluZXMgY2FuIGJlXG4gKiBhdHRyaWJ1dGVkIHRvIHRoZSBvcmcgdGhhdCBjYXVzZWQgdGhlbS5cbiAqXG4gKiBgb3JnSWRgIGlzIHRoZSB0ZW5hbmN5IGtleSBmb3IgdGhlIExvZ3Mgc3VyZmFjZTogcHJvbXRhaWwgcm91dGVzIGVhY2ggbGluZSB0b1xuICogaXRzIG9yZydzIExva2kgdGVuYW50IGZyb20gdGhpcyBmaWVsZCAoc2VlIGBkb2NzL3BsYW5zL2Zyb250ZW5kLWxvZ3MubWRgKS4gQVxuICogbGluZSB3cml0dGVuIG91dHNpZGUgYSByZXF1ZXN0IHNjb3BlIChzdGFydHVwLCBiYWNrZ3JvdW5kIHdvcmtlciwgbWlncmF0aW9uKVxuICogaGFzIG5vIG9yZyBhbmQgbGFuZHMgaW4gdGhlIHN5c2FkbWluLW9ubHkgYF9pbmZyYWAgdGVuYW50IOKAlCBmYWlsLWNsb3NlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb250ZXh0IHtcbiAgb3JnSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbn1cblxudHlwZSBMb2dDb250ZXh0UHJvdmlkZXIgPSAoKSA9PiBMb2dDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5sZXQgbG9nQ29udGV4dFByb3ZpZGVyOiBMb2dDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHNvdXJjZSBvZiBwZXItZW50cnkge0BsaW5rIExvZ0NvbnRleHR9LlxuICpcbiAqIEEgcmVnaXN0cmF0aW9uIGhvb2sgcmF0aGVyIHRoYW4gYSBkaXJlY3QgaW1wb3J0IGJlY2F1c2UgdGhlIHJlcXVlc3Qgc2NvcGVcbiAqIGxpdmVzIGluIGBwaXBlbGluZS1kYXRhYCdzIEFzeW5jTG9jYWxTdG9yYWdlLCBhbmQgYHBpcGVsaW5lLWRhdGFgIGRlcGVuZHMgb25cbiAqIHRoaXMgcGFja2FnZSDigJQgaW1wb3J0aW5nIGl0IGhlcmUgd291bGQgaW52ZXJ0IHRoZSBkZXBlbmRlbmN5LiBgYXBpLXNlcnZlcmAnc1xuICogdGVuYW50LWNvbnRleHQgbW9kdWxlIG93bnMgdGhlIHNpbmdsZSBjYWxsLCB3aGljaCBjb3ZlcnMgZXZlcnkgc2VydmljZSB0aGF0XG4gKiBtb3VudHMgYHdpdGhUZW5hbnRDb250ZXh0YCAocGxhdGZvcm0gaW5jbHVkZWQpLlxuICpcbiAqIFBhc3MgYHVuZGVmaW5lZGAgdG8gdW5yZWdpc3RlciAodGVzdHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nQ29udGV4dFByb3ZpZGVyKGZuOiBMb2dDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgbG9nQ29udGV4dFByb3ZpZGVyID0gZm47XG59XG5cbi8qKiBXaW5zdG9uIGZvcm1hdCBzdGFtcGluZyB0aGUgYW1iaWVudCB7QGxpbmsgTG9nQ29udGV4dH0uIE5ldmVyIHRocm93czogYVxuICogIHByb3ZpZGVyIHRoYXQgYmxvd3MgdXAgbXVzdCBub3QgdGFrZSBkb3duIGxvZ2dpbmcuIEFuIGVudHJ5IHRoYXQgYWxyZWFkeVxuICogIGNhcnJpZXMgYW4gZXhwbGljaXQgYG9yZ0lkYCAoYSBjYWxsIHNpdGUgbG9nZ2luZyBhYm91dCBBTk9USEVSIG9yZykga2VlcHMgaXRcbiAqICDigJQgdGhlIGFtYmllbnQgdmFsdWUgbmV2ZXIgb3ZlcndyaXRlcyBhIGRlbGliZXJhdGUgb25lLiAqL1xuY29uc3QgbG9nQ29udGV4dEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGlmICghbG9nQ29udGV4dFByb3ZpZGVyKSByZXR1cm4gaW5mbztcbiAgbGV0IGN0eDogTG9nQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjdHggPSBsb2dDb250ZXh0UHJvdmlkZXIoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGluZm87XG4gIH1cbiAgaWYgKCFjdHgpIHJldHVybiBpbmZvO1xuICBpZiAoY3R4Lm9yZ0lkICYmIGluZm8ub3JnSWQgPT09IHVuZGVmaW5lZCkgaW5mby5vcmdJZCA9IGN0eC5vcmdJZDtcbiAgaWYgKGN0eC51c2VySWQgJiYgaW5mby51c2VySWQgPT09IHVuZGVmaW5lZCkgaW5mby51c2VySWQgPSBjdHgudXNlcklkO1xuICByZXR1cm4gaW5mbztcbn0pKCk7XG5cbi8vIGBTRU5TSVRJVkVfS0VZX1BBVFRFUk5gIChrZXlzKSBhbmQgYG1hc2tMaW5lYCAoc2VjcmV0LXNoYXBlZCB2YWx1ZXMpIGJvdGggY29tZVxuLy8gZnJvbSBgc2Vuc2l0aXZlLXBhdHRlcm5zLnRzYCwgc28gdGhlIGxvZ2dlciwgcGxhdGZvcm0ncyBsb2ctcmVhZCBwYXRoIGFuZCB0aGVcbi8vIGdlbmVyYXRlZCBwcm9tdGFpbCBgcmVwbGFjZWAgc3RhZ2VzIG1hc2sgdGhlIHNhbWUgdGhpbmdzLiBTZWUgdGhhdCBtb2R1bGUnc1xuLy8gaGVhZGVyIGZvciB3aHkgaW5nZXN0LXRpbWUgbWFza2luZyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBsYXllci5cblxuZnVuY3Rpb24gcmVkYWN0RGVlcCh2YWx1ZTogdW5rbm93biwgZGVwdGggPSAwKTogdW5rbm93biB7XG4gIC8vIENhcCBkZXB0aCBzbyBhIG1hbGljaW91cyAvIHBhdGhvbG9naWNhbCBjaXJjdWxhciBvYmplY3QgY2FuJ3QgbG9jayB0aGUgbG9nZ2VyLlxuICAvLyBEZWdyYWRlIHRvIGEgcGxhY2Vob2xkZXIgcmF0aGVyIHRoYW4gdGhlIHJhdyBzdWJ0cmVlOiByZXR1cm5pbmcgYHZhbHVlYCBoZXJlXG4gIC8vIHdvdWxkIGxvZyBhIHNlY3JldC1rZXllZCBmaWVsZCBuZXN0ZWQgZGVlcGVyIHRoYW4gdGhlIGNhcCBpbiBjbGVhcnRleHQuXG4gIGlmIChkZXB0aCA+IDYpIHJldHVybiAnW1RSVU5DQVRFRF0nO1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCgodikgPT4gcmVkYWN0RGVlcCh2LCBkZXB0aCArIDEpKTtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICBpZiAoU0VOU0lUSVZFX0tFWV9QQVRURVJOLnRlc3QoaykpIHtcbiAgICAgIG91dFtrXSA9IFJFREFDVEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRba10gPSByZWRhY3REZWVwKHYsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVkYWN0IHNlbnNpdGl2ZSB2YWx1ZXMgZnJvbSBhbiBBUkJJVFJBUlkgcGF5bG9hZCB1c2luZyB0aGUgc2FtZSBrZXktcGF0dGVyblxuICogcnVsZXMgdGhlIFdpbnN0b24gYHJlZGFjdEZvcm1hdGAgYXBwbGllcyB0byBsb2cgbWV0YWRhdGEuIFVzZSB0aGlzIGZvclxuICogcGF5bG9hZHMgdGhhdCByZWFjaCBhbiBvdXRwdXQgY2hhbm5lbCBPVVRTSURFIHRoZSBsb2dnZXIg4oCUIGUuZy4gYW4gU1NFIGZyYW1lXG4gKiBwdXNoZWQgc3RyYWlnaHQgdG8gYSBjbGllbnQg4oCUIHNvIGEgYHBhc3N3b3JkYC9gdG9rZW5gL2BzZWNyZXRgIGZpZWxkIGlzXG4gKiBtYXNrZWQgdGhlcmUgdG9vLiBBIHRvcC1sZXZlbCBzZW5zaXRpdmUga2V5IGlzIG1hc2tlZDsgbmVzdGVkIG9iamVjdHMvYXJyYXlzXG4gKiBhcmUgd2Fsa2VkIChkZXB0aC1jYXBwZWQpIGV4YWN0bHkgYXMgaW4gdGhlIGxvZ2dlci4gUmV0dXJucyBhIHJlZGFjdGVkIENPUFk7XG4gKiBwcmltaXRpdmVzIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWRhY3RTZW5zaXRpdmUodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gcmVkYWN0RGVlcCh2YWx1ZSk7XG59XG5cbi8qKiBXaW5zdG9uIGZvcm1hdCB0aGF0IG1hc2tzIHZhbHVlcyBmb3Igc2Vuc2l0aXZlLWxvb2tpbmcga2V5cyAoUElJIC8gc2VjcmV0cykuXG4gKiBNdXRhdGVzIGBpbmZvYCBpbiBwbGFjZSBzbyB3aW5zdG9uJ3MgaW50ZXJuYWwgU3ltYm9sLWtleWVkIHByb3BlcnRpZXNcbiAqIChgU3ltYm9sLmZvcignbGV2ZWwnKWAsIGBTeW1ib2wuZm9yKCdtZXNzYWdlJylgLCBgU3ltYm9sLmZvcignc3BsYXQnKWApIHN1cnZpdmVcbiAqIOKAlCByZWJ1aWxkaW5nIGEgZnJlc2ggb2JqZWN0IHZpYSBgT2JqZWN0LmVudHJpZXNgL3NwcmVhZCBzaWxlbnRseSBzdHJpcHMgdGhlbSxcbiAqIHdoaWNoIG1ha2VzIHRoZSBDb25zb2xlIHRyYW5zcG9ydCBkcm9wIGV2ZXJ5IGVudHJ5IHdpdGhvdXQgd2FybmluZy4gKi9cbi8qKiBLZXlzIHRoZSByZWRhY3RvciBtdXN0IGxlYXZlIGFsb25lLiBgb3JnSWRgL2B1c2VySWRgIGFyZSBsb2FkLWJlYXJpbmc6IHByb210YWlsXG4gKiAgcm91dGVzIGEgbGluZSB0byBpdHMgTG9raSB0ZW5hbnQgYnkgYG9yZ0lkYCwgc28gcmVkYWN0aW5nIGl0IHdvdWxkIG1pc2ZpbGUgdGhlXG4gKiAgbGluZSBpbnRvIHRoZSBzeXNhZG1pbi1vbmx5IGBfaW5mcmFgIHRlbmFudCBpbnN0ZWFkIG9mIHRoZSBvcmcncy4gTGlzdGVkIGhlcmVcbiAqICAobm90IG1lcmVseSBcImRvZXNuJ3QgbWF0Y2ggdGhlIHBhdHRlcm4gdG9kYXlcIikgc28gYSBmdXR1cmUgcGF0dGVybiBlZGl0IGNhbid0XG4gKiAgc2lsZW50bHkgYnJlYWsgbG9nIHRlbmFuY3kuICovXG5jb25zdCBQUkVTRVJWRURfS0VZUyA9IG5ldyBTZXQoWydsZXZlbCcsICdtZXNzYWdlJywgJ3RpbWVzdGFtcCcsICdzZXJ2aWNlJywgJ3RyYWNlX2lkJywgJ29yZ0lkJywgJ3VzZXJJZCddKTtcbmNvbnN0IHJlZGFjdEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluZm8pKSB7XG4gICAgaWYgKFBSRVNFUlZFRF9LRVlTLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICBpZiAoU0VOU0lUSVZFX0tFWV9QQVRURVJOLnRlc3Qoa2V5KSkge1xuICAgICAgaW5mb1trZXldID0gUkVEQUNURUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm9ba2V5XSA9IHJlZGFjdERlZXAoaW5mb1trZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZm87XG59KSgpO1xuXG4vKipcbiAqIFdpbnN0b24gZm9ybWF0IHRoYXQgbWFza3Mgc2VjcmV0LXNoYXBlZCBWQUxVRVMgaW4gdGhlIHJlbmRlcmVkIG1lc3NhZ2UgYW5kIGluXG4gKiBhbnkgc3RyaW5nIG1ldGFkYXRhLlxuICpcbiAqIGByZWRhY3RGb3JtYXRgIGFib3ZlIG9ubHkgbWFza3MgdmFsdWVzIHdob3NlIEtFWSBsb29rcyBzZW5zaXRpdmUuIFRoYXQgbWlzc2VzXG4gKiBhIHNlY3JldCBlbWJlZGRlZCBpbiBmcmVlIHRleHQg4oCUIGBsb2dnZXIuaW5mbygnUE9TVCAveD90b2tlbj1hYmMnKWAg4oCUIHdoaWNoXG4gKiBtYXR0ZXJzIG1vcmUgdGhhbiBpdCBsb29rczogcHJvbXRhaWwncyBgb3V0cHV0OiB7IHNvdXJjZTogbXNnIH1gIHN0YWdlIG1ha2VzXG4gKiB0aGUgbWVzc2FnZSBzdHJpbmcgdGhlIGVudGlyZSBzaGlwcGVkIGxvZyBsaW5lLCBzbyBhbiB1bm1hc2tlZCBtZXNzYWdlIGlzIGFuXG4gKiB1bm1hc2tlZCBsb2cuIE11dGF0ZXMgaW4gcGxhY2UgdG8gcHJlc2VydmUgd2luc3RvbidzIFN5bWJvbC1rZXllZCBpbnRlcm5hbHMsXG4gKiBleGFjdGx5IGFzIGByZWRhY3RGb3JtYXRgIGRvZXMuXG4gKi9cbmNvbnN0IG1hc2tGb3JtYXQgPSB3aW5zdG9uLmZvcm1hdCgoaW5mbykgPT4ge1xuICBpZiAodHlwZW9mIGluZm8ubWVzc2FnZSA9PT0gJ3N0cmluZycpIGluZm8ubWVzc2FnZSA9IG1hc2tMaW5lKGluZm8ubWVzc2FnZSk7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluZm8pKSB7XG4gICAgaWYgKGtleSA9PT0gJ21lc3NhZ2UnKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IGluZm9ba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgaW5mb1trZXldID0gbWFza0xpbmUodmFsdWUpO1xuICB9XG4gIHJldHVybiBpbmZvO1xufSkoKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBsb2dnZXIgaW5zdGFuY2UgZm9yIGEgc2VydmljZS5cbiAqXG4gKiBXaGVuIExPR19GT1JNQVQ9anNvbiAoZGVmYXVsdCksIG91dHB1dHMgc3RydWN0dXJlZCBKU09OIGZvciBMb2tpIGluZ2VzdGlvbjpcbiAqICAge1wibGV2ZWxcIjpcImluZm9cIixcIm1lc3NhZ2VcIjpcIlNlcnZlciBzdGFydGVkXCIsXCJzZXJ2aWNlXCI6XCJwaXBlbGluZVwiLFwidGltZXN0YW1wXCI6XCIuLi5cIn1cbiAqXG4gKiBXaGVuIExPR19GT1JNQVQ9dGV4dCwgb3V0cHV0cyBjb2xvcml6ZWQgaHVtYW4tcmVhZGFibGUgZm9ybWF0OlxuICogICAyMDI2LTAyLTEzVDEwOjMwOjAwLjAwMFogaW5mbyBbcGlwZWxpbmVdIFNlcnZlciBzdGFydGVkXG4gKlxuICogQHBhcmFtIHNlcnZpY2VOYW1lIC0gTmFtZSBvZiB0aGUgc2VydmljZSBmb3IgbG9nIGlkZW50aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIFdpbnN0b24gbG9nZ2VyIGluc3RhbmNlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbiAqXG4gKiBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2dldC1wbHVnaW4nKTtcbiAqIGxvZ2dlci5pbmZvKCdTZXJ2ZXIgc3RhcnRlZCcsIHsgcG9ydDogMzAwMCB9KTtcbiAqIGxvZ2dlci5lcnJvcignRGF0YWJhc2UgZXJyb3InLCB7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAqIGBgYFxuICovXG4vKiogVGhlIGxvZ2dlciBgY3JlYXRlTG9nZ2VyYCByZXR1cm5zLiBFeHBvcnRlZCBzbyBjb25zdW1lcnMgY2FuIGFubm90YXRlIGV4cG9ydGVkXG4gKiAgbG9nZ2VycyB3aXRob3V0IGRlcGVuZGluZyBvbiB3aW5zdG9uIHRoZW1zZWx2ZXMuICovXG5leHBvcnQgdHlwZSBMb2dnZXIgPSB3aW5zdG9uLkxvZ2dlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihzZXJ2aWNlTmFtZTogc3RyaW5nKTogTG9nZ2VyIHtcbiAgY29uc3QgbG9nTGV2ZWwgPSBwcm9jZXNzLmVudi5MT0dfTEVWRUwgfHwgJ2luZm8nO1xuICBjb25zdCBsb2dGb3JtYXQgPSBwcm9jZXNzLmVudi5MT0dfRk9STUFUIHx8ICdqc29uJztcbiAgaWYgKGxvZ0Zvcm1hdCAhPT0gJ2pzb24nICYmIGxvZ0Zvcm1hdCAhPT0gJ3RleHQnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc3RhcnR1cCB3YXJuaW5nIGJlZm9yZSBsb2dnZXIgaXMgYXZhaWxhYmxlXG4gICAgY29uc29sZS53YXJuKGBJbnZhbGlkIExPR19GT1JNQVQ9XCIke2xvZ0Zvcm1hdH1cIiwgZXhwZWN0ZWQgXCJqc29uXCIgb3IgXCJ0ZXh0XCIuIERlZmF1bHRpbmcgdG8gXCJqc29uXCIuYCk7XG4gIH1cbiAgY29uc3QgdXNlSnNvbiA9IGxvZ0Zvcm1hdCAhPT0gJ3RleHQnO1xuXG4gIC8vIE9yZGVyIG1hdHRlcnM6IHJlZGFjdCBCRUZPUkUgc2VyaWFsaXphdGlvbiBzbyBtYXNrZWQga2V5cyBuZXZlciByZWFjaFxuICAvLyB0aGUgb3V0cHV0LiB0cmFjZV9pZCBhbmQgdGhlIG9yZy91c2VyIGNvbnRleHQgYXJlIHN0YW1wZWQgZmlyc3Qgc28gdGhleVxuICAvLyBzdXJ2aXZlIHJlZGFjdGlvbiAoYm90aCBhcmUgaW4gUFJFU0VSVkVEX0tFWVMpLCB0aGVuIGBtYXNrRm9ybWF0YCBzY3J1YnNcbiAgLy8gc2VjcmV0LXNoYXBlZCBWQUxVRVMgb3V0IG9mIHRoZSByZW5kZXJlZCBtZXNzYWdlIOKAlCB0aGUga2V5LWJhc2VkXG4gIC8vIGByZWRhY3RGb3JtYXRgIG9ubHkgY292ZXJzIG1ldGFkYXRhIGtleXMsIGFuZCBhZnRlciBwcm9tdGFpbCdzXG4gIC8vIGBvdXRwdXQ6IHNvdXJjZTogbXNnYCByZXdyaXRlIHRoZSBzaGlwcGVkIGxpbmUgSVMgdGhlIG1lc3NhZ2Ugc3RyaW5nLlxuICBjb25zdCBiYXNlRm9ybWF0cyA9IFtcbiAgICBlcnJvcnMoeyBzdGFjazogdHJ1ZSB9KSxcbiAgICB0aW1lc3RhbXAoeyBmb3JtYXQ6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1onIH0pLFxuICAgIHRyYWNlSWRGb3JtYXQsXG4gICAgbG9nQ29udGV4dEZvcm1hdCxcbiAgICByZWRhY3RGb3JtYXQsXG4gICAgbWFza0Zvcm1hdCxcbiAgXTtcblxuICBpZiAodXNlSnNvbikge1xuICAgIHJldHVybiB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgICBsZXZlbDogbG9nTGV2ZWwsXG4gICAgICBkZWZhdWx0TWV0YTogeyBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSB9LFxuICAgICAgZm9ybWF0OiBjb21iaW5lKC4uLmJhc2VGb3JtYXRzLCBqc29uKCkpLFxuICAgICAgdHJhbnNwb3J0czogW25ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSgpXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgbGV2ZWw6IGxvZ0xldmVsLFxuICAgIGRlZmF1bHRNZXRhOiB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lIH0sXG4gICAgZm9ybWF0OiBjb21iaW5lKC4uLmJhc2VGb3JtYXRzKSxcbiAgICB0cmFuc3BvcnRzOiBbXG4gICAgICBuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoe1xuICAgICAgICBmb3JtYXQ6IGNvbWJpbmUoY29sb3JpemUoKSwgY29uc29sZUZvcm1hdCksXG4gICAgICB9KSxcbiAgICBdLFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGxvZ2dlciBpbnN0YW5jZSAoc2VydmljZSBuYW1lIGZyb20gU0VSVklDRV9OQU1FIGVudiB2YXIgb3IgJ2FwaScpLlxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBGLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFFOUUsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQy9FLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNFLE9BQU8sR0FBRyxTQUFTLElBQUksS0FBSyxJQUFJLFdBQVcsSUFBSSxPQUFPLEdBQUcsT0FBTyxFQUFFLENB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QWUsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB3aW5zdG9uIGZyb20gJ3dpbnN0b24nO1xuaW1wb3J0IHsgc2FmZUNyZWF0ZVJlcXVpcmUgfSBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5pbXBvcnQgeyBTRU5TSVRJVkVfS0VZX1BBVFRFUk4sIFJFREFDVEVELCBtYXNrTGluZSB9IGZyb20gJy4vc2Vuc2l0aXZlLXBhdHRlcm5zLmpzJztcblxuY29uc3QgeyBjb21iaW5lLCB0aW1lc3RhbXAsIHByaW50ZiwgY29sb3JpemUsIGVycm9ycywganNvbiB9ID0gd2luc3Rvbi5mb3JtYXQ7XG5cbi8vIEVTTSBoYXMgbm8gZ2xvYmFsIGByZXF1aXJlYDsgc2FmZUNyZWF0ZVJlcXVpcmUgZW5hYmxlcyB0aGUgc3luY2hyb25vdXMsXG4vLyBPUFRJT05BTCBsYXp5LWxvYWQgb2YgQG9wZW50ZWxlbWV0cnkvYXBpIGluIGdldEN1cnJlbnRUcmFjZUlkKCkgYmVsb3cg4oCUIGFcbi8vIHdpbnN0b24gZm9ybWF0IGNhbGxiYWNrIG11c3Qgc3RheSBzeW5jaHJvbm91cywgc28gYSBkeW5hbWljIGltcG9ydCgpIHdvbid0XG4vLyB3b3JrIHRoZXJlLiAoQ0pTLWJ1bmRsZSBzYWZlIOKAlCBzZWUgc2FmZS1yZXF1aXJlLnRzLilcbmNvbnN0IHJlcXVpcmUgPSBzYWZlQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vKipcbiAqIEN1c3RvbSBsb2cgZm9ybWF0IGZvciBodW1hbi1yZWFkYWJsZSBjb25zb2xlIG91dHB1dC5cbiAqL1xuY29uc3QgY29uc29sZUZvcm1hdCA9IHByaW50ZigoeyBsZXZlbCwgbWVzc2FnZSwgdGltZXN0YW1wLCBzZXJ2aWNlLCAuLi5tZXRhIH0pID0+IHtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlID8gYFske3NlcnZpY2V9XWAgOiAnJztcbiAgY29uc3QgbWV0YVN0ciA9IE9iamVjdC5rZXlzKG1ldGEpLmxlbmd0aCA/IGAgJHtKU09OLnN0cmluZ2lmeShtZXRhKX1gIDogJyc7XG4gIHJldHVybiBgJHt0aW1lc3RhbXB9ICR7bGV2ZWx9ICR7c2VydmljZU5hbWV9ICR7bWVzc2FnZX0ke21ldGFTdHJ9YDtcbn0pO1xuXG4vKipcbiAqIExhenkgbG9va3VwIG9mIE9wZW5UZWxlbWV0cnkgdHJhY2UgSUQuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdHJhY2luZ1xuICogaXNuJ3QgaW5pdGlhbGl6ZWQgb3IgQG9wZW50ZWxlbWV0cnkvYXBpIGlzbid0IGluc3RhbGxlZCDigJQgbmV2ZXIgdGhyb3dzLlxuICogQ2hlYXA6IGEgc2luZ2xlIHByb3BlcnR5IHJlYWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbG9va3VwLlxuICovXG5sZXQgX290ZWxBcGk6IHsgdHJhY2U/OiB7IGdldEFjdGl2ZVNwYW4oKTogeyBzcGFuQ29udGV4dCgpOiB7IHRyYWNlSWQ6IHN0cmluZyB9IH0gfCB1bmRlZmluZWQgfSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChfb3RlbEFwaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICBfb3RlbEFwaSA9IHJlcXVpcmUoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgX290ZWxBcGkgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV9vdGVsQXBpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJldHVybiBfb3RlbEFwaS50cmFjZT8uZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgc3RhbXBzIGB0cmFjZV9pZGAgb24gZXZlcnkgZW50cnkgd2hlbiBhbiBPVGVsIHNwYW4gaXMgYWN0aXZlLiAqL1xuY29uc3QgdHJhY2VJZEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGNvbnN0IHRyYWNlSWQgPSBnZXRDdXJyZW50VHJhY2VJZCgpO1xuICBpZiAodHJhY2VJZCkgaW5mby50cmFjZV9pZCA9IHRyYWNlSWQ7XG4gIHJldHVybiBpbmZvO1xufSkoKTtcblxuLyoqXG4gKiBQZXItcmVxdWVzdCBpZGVudGl0eSBzdGFtcGVkIG9udG8gZXZlcnkgbG9nIGVudHJ5LCBzbyBsb2cgbGluZXMgY2FuIGJlXG4gKiBhdHRyaWJ1dGVkIHRvIHRoZSBvcmcgdGhhdCBjYXVzZWQgdGhlbS5cbiAqXG4gKiBgb3JnSWRgIGlzIHRoZSB0ZW5hbmN5IGtleSBmb3IgdGhlIExvZ3Mgc3VyZmFjZTogcHJvbXRhaWwgcm91dGVzIGVhY2ggbGluZSB0b1xuICogaXRzIG9yZydzIExva2kgdGVuYW50IGZyb20gdGhpcyBmaWVsZCAoc2VlIGBkb2NzL29ic2VydmFiaWxpdHktbG9ncy5tZGApLiBBXG4gKiBsaW5lIHdyaXR0ZW4gb3V0c2lkZSBhIHJlcXVlc3Qgc2NvcGUgKHN0YXJ0dXAsIGJhY2tncm91bmQgd29ya2VyLCBtaWdyYXRpb24pXG4gKiBoYXMgbm8gb3JnIGFuZCBsYW5kcyBpbiB0aGUgc3lzYWRtaW4tb25seSBgX2luZnJhYCB0ZW5hbnQg4oCUIGZhaWwtY2xvc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbnRleHQge1xuICBvcmdJZD86IHN0cmluZztcbiAgdXNlcklkPzogc3RyaW5nO1xufVxuXG50eXBlIExvZ0NvbnRleHRQcm92aWRlciA9ICgpID0+IExvZ0NvbnRleHQgfCB1bmRlZmluZWQ7XG5cbmxldCBsb2dDb250ZXh0UHJvdmlkZXI6IExvZ0NvbnRleHRQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgc291cmNlIG9mIHBlci1lbnRyeSB7QGxpbmsgTG9nQ29udGV4dH0uXG4gKlxuICogQSByZWdpc3RyYXRpb24gaG9vayByYXRoZXIgdGhhbiBhIGRpcmVjdCBpbXBvcnQgYmVjYXVzZSB0aGUgcmVxdWVzdCBzY29wZVxuICogbGl2ZXMgaW4gYHBpcGVsaW5lLWRhdGFgJ3MgQXN5bmNMb2NhbFN0b3JhZ2UsIGFuZCBgcGlwZWxpbmUtZGF0YWAgZGVwZW5kcyBvblxuICogdGhpcyBwYWNrYWdlIOKAlCBpbXBvcnRpbmcgaXQgaGVyZSB3b3VsZCBpbnZlcnQgdGhlIGRlcGVuZGVuY3kuIGBhcGktc2VydmVyYCdzXG4gKiB0ZW5hbnQtY29udGV4dCBtb2R1bGUgb3ducyB0aGUgc2luZ2xlIGNhbGwsIHdoaWNoIGNvdmVycyBldmVyeSBzZXJ2aWNlIHRoYXRcbiAqIG1vdW50cyBgd2l0aFRlbmFudENvbnRleHRgIChwbGF0Zm9ybSBpbmNsdWRlZCkuXG4gKlxuICogUGFzcyBgdW5kZWZpbmVkYCB0byB1bnJlZ2lzdGVyICh0ZXN0cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dDb250ZXh0UHJvdmlkZXIoZm46IExvZ0NvbnRleHRQcm92aWRlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBsb2dDb250ZXh0UHJvdmlkZXIgPSBmbjtcbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHN0YW1waW5nIHRoZSBhbWJpZW50IHtAbGluayBMb2dDb250ZXh0fS4gTmV2ZXIgdGhyb3dzOiBhXG4gKiAgcHJvdmlkZXIgdGhhdCBibG93cyB1cCBtdXN0IG5vdCB0YWtlIGRvd24gbG9nZ2luZy4gQW4gZW50cnkgdGhhdCBhbHJlYWR5XG4gKiAgY2FycmllcyBhbiBleHBsaWNpdCBgb3JnSWRgIChhIGNhbGwgc2l0ZSBsb2dnaW5nIGFib3V0IEFOT1RIRVIgb3JnKSBrZWVwcyBpdFxuICogIOKAlCB0aGUgYW1iaWVudCB2YWx1ZSBuZXZlciBvdmVyd3JpdGVzIGEgZGVsaWJlcmF0ZSBvbmUuICovXG5jb25zdCBsb2dDb250ZXh0Rm9ybWF0ID0gd2luc3Rvbi5mb3JtYXQoKGluZm8pID0+IHtcbiAgaWYgKCFsb2dDb250ZXh0UHJvdmlkZXIpIHJldHVybiBpbmZvO1xuICBsZXQgY3R4OiBMb2dDb250ZXh0IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGN0eCA9IGxvZ0NvbnRleHRQcm92aWRlcigpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gaW5mbztcbiAgfVxuICBpZiAoIWN0eCkgcmV0dXJuIGluZm87XG4gIGlmIChjdHgub3JnSWQgJiYgaW5mby5vcmdJZCA9PT0gdW5kZWZpbmVkKSBpbmZvLm9yZ0lkID0gY3R4Lm9yZ0lkO1xuICBpZiAoY3R4LnVzZXJJZCAmJiBpbmZvLnVzZXJJZCA9PT0gdW5kZWZpbmVkKSBpbmZvLnVzZXJJZCA9IGN0eC51c2VySWQ7XG4gIHJldHVybiBpbmZvO1xufSkoKTtcblxuLy8gYFNFTlNJVElWRV9LRVlfUEFUVEVSTmAgKGtleXMpIGFuZCBgbWFza0xpbmVgIChzZWNyZXQtc2hhcGVkIHZhbHVlcykgYm90aCBjb21lXG4vLyBmcm9tIGBzZW5zaXRpdmUtcGF0dGVybnMudHNgLCBzbyB0aGUgbG9nZ2VyLCBwbGF0Zm9ybSdzIGxvZy1yZWFkIHBhdGggYW5kIHRoZVxuLy8gZ2VuZXJhdGVkIHByb210YWlsIGByZXBsYWNlYCBzdGFnZXMgbWFzayB0aGUgc2FtZSB0aGluZ3MuIFNlZSB0aGF0IG1vZHVsZSdzXG4vLyBoZWFkZXIgZm9yIHdoeSBpbmdlc3QtdGltZSBtYXNraW5nIGlzIHRoZSBhdXRob3JpdGF0aXZlIGxheWVyLlxuXG5mdW5jdGlvbiByZWRhY3REZWVwKHZhbHVlOiB1bmtub3duLCBkZXB0aCA9IDApOiB1bmtub3duIHtcbiAgLy8gQ2FwIGRlcHRoIHNvIGEgbWFsaWNpb3VzIC8gcGF0aG9sb2dpY2FsIGNpcmN1bGFyIG9iamVjdCBjYW4ndCBsb2NrIHRoZSBsb2dnZXIuXG4gIC8vIERlZ3JhZGUgdG8gYSBwbGFjZWhvbGRlciByYXRoZXIgdGhhbiB0aGUgcmF3IHN1YnRyZWU6IHJldHVybmluZyBgdmFsdWVgIGhlcmVcbiAgLy8gd291bGQgbG9nIGEgc2VjcmV0LWtleWVkIGZpZWxkIG5lc3RlZCBkZWVwZXIgdGhhbiB0aGUgY2FwIGluIGNsZWFydGV4dC5cbiAgaWYgKGRlcHRoID4gNikgcmV0dXJuICdbVFJVTkNBVEVEXSc7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKCh2KSA9PiByZWRhY3REZWVwKHYsIGRlcHRoICsgMSkpO1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChTRU5TSVRJVkVfS0VZX1BBVFRFUk4udGVzdChrKSkge1xuICAgICAgb3V0W2tdID0gUkVEQUNURUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFtrXSA9IHJlZGFjdERlZXAodiwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2Vuc2l0aXZlIHZhbHVlcyBmcm9tIGFuIEFSQklUUkFSWSBwYXlsb2FkIHVzaW5nIHRoZSBzYW1lIGtleS1wYXR0ZXJuXG4gKiBydWxlcyB0aGUgV2luc3RvbiBgcmVkYWN0Rm9ybWF0YCBhcHBsaWVzIHRvIGxvZyBtZXRhZGF0YS4gVXNlIHRoaXMgZm9yXG4gKiBwYXlsb2FkcyB0aGF0IHJlYWNoIGFuIG91dHB1dCBjaGFubmVsIE9VVFNJREUgdGhlIGxvZ2dlciDigJQgZS5nLiBhbiBTU0UgZnJhbWVcbiAqIHB1c2hlZCBzdHJhaWdodCB0byBhIGNsaWVudCDigJQgc28gYSBgcGFzc3dvcmRgL2B0b2tlbmAvYHNlY3JldGAgZmllbGQgaXNcbiAqIG1hc2tlZCB0aGVyZSB0b28uIEEgdG9wLWxldmVsIHNlbnNpdGl2ZSBrZXkgaXMgbWFza2VkOyBuZXN0ZWQgb2JqZWN0cy9hcnJheXNcbiAqIGFyZSB3YWxrZWQgKGRlcHRoLWNhcHBlZCkgZXhhY3RseSBhcyBpbiB0aGUgbG9nZ2VyLiBSZXR1cm5zIGEgcmVkYWN0ZWQgQ09QWTtcbiAqIHByaW1pdGl2ZXMgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdFNlbnNpdGl2ZSh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiByZWRhY3REZWVwKHZhbHVlKTtcbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgbWFza3MgdmFsdWVzIGZvciBzZW5zaXRpdmUtbG9va2luZyBrZXlzIChQSUkgLyBzZWNyZXRzKS5cbiAqIE11dGF0ZXMgYGluZm9gIGluIHBsYWNlIHNvIHdpbnN0b24ncyBpbnRlcm5hbCBTeW1ib2wta2V5ZWQgcHJvcGVydGllc1xuICogKGBTeW1ib2wuZm9yKCdsZXZlbCcpYCwgYFN5bWJvbC5mb3IoJ21lc3NhZ2UnKWAsIGBTeW1ib2wuZm9yKCdzcGxhdCcpYCkgc3Vydml2ZVxuICog4oCUIHJlYnVpbGRpbmcgYSBmcmVzaCBvYmplY3QgdmlhIGBPYmplY3QuZW50cmllc2Avc3ByZWFkIHNpbGVudGx5IHN0cmlwcyB0aGVtLFxuICogd2hpY2ggbWFrZXMgdGhlIENvbnNvbGUgdHJhbnNwb3J0IGRyb3AgZXZlcnkgZW50cnkgd2l0aG91dCB3YXJuaW5nLiAqL1xuLyoqIEtleXMgdGhlIHJlZGFjdG9yIG11c3QgbGVhdmUgYWxvbmUuIGBvcmdJZGAvYHVzZXJJZGAgYXJlIGxvYWQtYmVhcmluZzogcHJvbXRhaWxcbiAqICByb3V0ZXMgYSBsaW5lIHRvIGl0cyBMb2tpIHRlbmFudCBieSBgb3JnSWRgLCBzbyByZWRhY3RpbmcgaXQgd291bGQgbWlzZmlsZSB0aGVcbiAqICBsaW5lIGludG8gdGhlIHN5c2FkbWluLW9ubHkgYF9pbmZyYWAgdGVuYW50IGluc3RlYWQgb2YgdGhlIG9yZydzLiBMaXN0ZWQgaGVyZVxuICogIChub3QgbWVyZWx5IFwiZG9lc24ndCBtYXRjaCB0aGUgcGF0dGVybiB0b2RheVwiKSBzbyBhIGZ1dHVyZSBwYXR0ZXJuIGVkaXQgY2FuJ3RcbiAqICBzaWxlbnRseSBicmVhayBsb2cgdGVuYW5jeS4gKi9cbmNvbnN0IFBSRVNFUlZFRF9LRVlTID0gbmV3IFNldChbJ2xldmVsJywgJ21lc3NhZ2UnLCAndGltZXN0YW1wJywgJ3NlcnZpY2UnLCAndHJhY2VfaWQnLCAnb3JnSWQnLCAndXNlcklkJ10pO1xuY29uc3QgcmVkYWN0Rm9ybWF0ID0gd2luc3Rvbi5mb3JtYXQoKGluZm8pID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5mbykpIHtcbiAgICBpZiAoUFJFU0VSVkVEX0tFWVMuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgIGlmIChTRU5TSVRJVkVfS0VZX1BBVFRFUk4udGVzdChrZXkpKSB7XG4gICAgICBpbmZvW2tleV0gPSBSRURBQ1RFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mb1trZXldID0gcmVkYWN0RGVlcChpbmZvW2tleV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5mbztcbn0pKCk7XG5cbi8qKlxuICogV2luc3RvbiBmb3JtYXQgdGhhdCBtYXNrcyBzZWNyZXQtc2hhcGVkIFZBTFVFUyBpbiB0aGUgcmVuZGVyZWQgbWVzc2FnZSBhbmQgaW5cbiAqIGFueSBzdHJpbmcgbWV0YWRhdGEuXG4gKlxuICogYHJlZGFjdEZvcm1hdGAgYWJvdmUgb25seSBtYXNrcyB2YWx1ZXMgd2hvc2UgS0VZIGxvb2tzIHNlbnNpdGl2ZS4gVGhhdCBtaXNzZXNcbiAqIGEgc2VjcmV0IGVtYmVkZGVkIGluIGZyZWUgdGV4dCDigJQgYGxvZ2dlci5pbmZvKCdQT1NUIC94P3Rva2VuPWFiYycpYCDigJQgd2hpY2hcbiAqIG1hdHRlcnMgbW9yZSB0aGFuIGl0IGxvb2tzOiBwcm9tdGFpbCdzIGBvdXRwdXQ6IHsgc291cmNlOiBtc2cgfWAgc3RhZ2UgbWFrZXNcbiAqIHRoZSBtZXNzYWdlIHN0cmluZyB0aGUgZW50aXJlIHNoaXBwZWQgbG9nIGxpbmUsIHNvIGFuIHVubWFza2VkIG1lc3NhZ2UgaXMgYW5cbiAqIHVubWFza2VkIGxvZy4gTXV0YXRlcyBpbiBwbGFjZSB0byBwcmVzZXJ2ZSB3aW5zdG9uJ3MgU3ltYm9sLWtleWVkIGludGVybmFscyxcbiAqIGV4YWN0bHkgYXMgYHJlZGFjdEZvcm1hdGAgZG9lcy5cbiAqL1xuY29uc3QgbWFza0Zvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGlmICh0eXBlb2YgaW5mby5tZXNzYWdlID09PSAnc3RyaW5nJykgaW5mby5tZXNzYWdlID0gbWFza0xpbmUoaW5mby5tZXNzYWdlKTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5mbykpIHtcbiAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gaW5mb1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSBpbmZvW2tleV0gPSBtYXNrTGluZSh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGluZm87XG59KSgpO1xuXG4vKipcbiAqIENyZWF0ZSBhIGxvZ2dlciBpbnN0YW5jZSBmb3IgYSBzZXJ2aWNlLlxuICpcbiAqIFdoZW4gTE9HX0ZPUk1BVD1qc29uIChkZWZhdWx0KSwgb3V0cHV0cyBzdHJ1Y3R1cmVkIEpTT04gZm9yIExva2kgaW5nZXN0aW9uOlxuICogICB7XCJsZXZlbFwiOlwiaW5mb1wiLFwibWVzc2FnZVwiOlwiU2VydmVyIHN0YXJ0ZWRcIixcInNlcnZpY2VcIjpcInBpcGVsaW5lXCIsXCJ0aW1lc3RhbXBcIjpcIi4uLlwifVxuICpcbiAqIFdoZW4gTE9HX0ZPUk1BVD10ZXh0LCBvdXRwdXRzIGNvbG9yaXplZCBodW1hbi1yZWFkYWJsZSBmb3JtYXQ6XG4gKiAgIDIwMjYtMDItMTNUMTA6MzA6MDAuMDAwWiBpbmZvIFtwaXBlbGluZV0gU2VydmVyIHN0YXJ0ZWRcbiAqXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgLSBOYW1lIG9mIHRoZSBzZXJ2aWNlIGZvciBsb2cgaWRlbnRpZmljYXRpb25cbiAqIEByZXR1cm5zIENvbmZpZ3VyZWQgV2luc3RvbiBsb2dnZXIgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuICpcbiAqIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZ2V0LXBsdWdpbicpO1xuICogbG9nZ2VyLmluZm8oJ1NlcnZlciBzdGFydGVkJywgeyBwb3J0OiAzMDAwIH0pO1xuICogbG9nZ2VyLmVycm9yKCdEYXRhYmFzZSBlcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICogYGBgXG4gKi9cbi8qKiBUaGUgbG9nZ2VyIGBjcmVhdGVMb2dnZXJgIHJldHVybnMuIEV4cG9ydGVkIHNvIGNvbnN1bWVycyBjYW4gYW5ub3RhdGUgZXhwb3J0ZWRcbiAqICBsb2dnZXJzIHdpdGhvdXQgZGVwZW5kaW5nIG9uIHdpbnN0b24gdGhlbXNlbHZlcy4gKi9cbmV4cG9ydCB0eXBlIExvZ2dlciA9IHdpbnN0b24uTG9nZ2VyO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2dnZXIge1xuICBjb25zdCBsb2dMZXZlbCA9IHByb2Nlc3MuZW52LkxPR19MRVZFTCB8fCAnaW5mbyc7XG4gIGNvbnN0IGxvZ0Zvcm1hdCA9IHByb2Nlc3MuZW52LkxPR19GT1JNQVQgfHwgJ2pzb24nO1xuICBpZiAobG9nRm9ybWF0ICE9PSAnanNvbicgJiYgbG9nRm9ybWF0ICE9PSAndGV4dCcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzdGFydHVwIHdhcm5pbmcgYmVmb3JlIGxvZ2dlciBpcyBhdmFpbGFibGVcbiAgICBjb25zb2xlLndhcm4oYEludmFsaWQgTE9HX0ZPUk1BVD1cIiR7bG9nRm9ybWF0fVwiLCBleHBlY3RlZCBcImpzb25cIiBvciBcInRleHRcIi4gRGVmYXVsdGluZyB0byBcImpzb25cIi5gKTtcbiAgfVxuICBjb25zdCB1c2VKc29uID0gbG9nRm9ybWF0ICE9PSAndGV4dCc7XG5cbiAgLy8gT3JkZXIgbWF0dGVyczogcmVkYWN0IEJFRk9SRSBzZXJpYWxpemF0aW9uIHNvIG1hc2tlZCBrZXlzIG5ldmVyIHJlYWNoXG4gIC8vIHRoZSBvdXRwdXQuIHRyYWNlX2lkIGFuZCB0aGUgb3JnL3VzZXIgY29udGV4dCBhcmUgc3RhbXBlZCBmaXJzdCBzbyB0aGV5XG4gIC8vIHN1cnZpdmUgcmVkYWN0aW9uIChib3RoIGFyZSBpbiBQUkVTRVJWRURfS0VZUyksIHRoZW4gYG1hc2tGb3JtYXRgIHNjcnVic1xuICAvLyBzZWNyZXQtc2hhcGVkIFZBTFVFUyBvdXQgb2YgdGhlIHJlbmRlcmVkIG1lc3NhZ2Ug4oCUIHRoZSBrZXktYmFzZWRcbiAgLy8gYHJlZGFjdEZvcm1hdGAgb25seSBjb3ZlcnMgbWV0YWRhdGEga2V5cywgYW5kIGFmdGVyIHByb210YWlsJ3NcbiAgLy8gYG91dHB1dDogc291cmNlOiBtc2dgIHJld3JpdGUgdGhlIHNoaXBwZWQgbGluZSBJUyB0aGUgbWVzc2FnZSBzdHJpbmcuXG4gIGNvbnN0IGJhc2VGb3JtYXRzID0gW1xuICAgIGVycm9ycyh7IHN0YWNrOiB0cnVlIH0pLFxuICAgIHRpbWVzdGFtcCh7IGZvcm1hdDogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTWicgfSksXG4gICAgdHJhY2VJZEZvcm1hdCxcbiAgICBsb2dDb250ZXh0Rm9ybWF0LFxuICAgIHJlZGFjdEZvcm1hdCxcbiAgICBtYXNrRm9ybWF0LFxuICBdO1xuXG4gIGlmICh1c2VKc29uKSB7XG4gICAgcmV0dXJuIHdpbnN0b24uY3JlYXRlTG9nZ2VyKHtcbiAgICAgIGxldmVsOiBsb2dMZXZlbCxcbiAgICAgIGRlZmF1bHRNZXRhOiB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lIH0sXG4gICAgICBmb3JtYXQ6IGNvbWJpbmUoLi4uYmFzZUZvcm1hdHMsIGpzb24oKSksXG4gICAgICB0cmFuc3BvcnRzOiBbbmV3IHdpbnN0b24udHJhbnNwb3J0cy5Db25zb2xlKCldLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHdpbnN0b24uY3JlYXRlTG9nZ2VyKHtcbiAgICBsZXZlbDogbG9nTGV2ZWwsXG4gICAgZGVmYXVsdE1ldGE6IHsgc2VydmljZTogc2VydmljZU5hbWUgfSxcbiAgICBmb3JtYXQ6IGNvbWJpbmUoLi4uYmFzZUZvcm1hdHMpLFxuICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgIG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSh7XG4gICAgICAgIGZvcm1hdDogY29tYmluZShjb2xvcml6ZSgpLCBjb25zb2xlRm9ybWF0KSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xufVxuXG4vKipcbiAqIERlZmF1bHQgbG9nZ2VyIGluc3RhbmNlIChzZXJ2aWNlIG5hbWUgZnJvbSBTRVJWSUNFX05BTUUgZW52IHZhciBvciAnYXBpJykuXG4gKi9cbmV4cG9ydCBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIocHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nZ2VyO1xuIl19
|
package/lib/utils/object.d.ts
CHANGED
|
@@ -11,3 +11,14 @@
|
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
13
|
export declare function pickDefined<T extends Record<string, unknown>>(obj: T): Partial<T>;
|
|
14
|
+
/**
|
|
15
|
+
* Deterministic JSON serialization with recursively sorted object keys, so the
|
|
16
|
+
* same logical value always serializes (and hashes) identically:
|
|
17
|
+
* - `undefined` / `null` → `null` (so absent fields hash identically).
|
|
18
|
+
* - `Date` → its ISO string (Mongo round-trips these as `Date`).
|
|
19
|
+
* - object keys are sorted; `undefined`-valued keys are dropped (JSON semantics).
|
|
20
|
+
*
|
|
21
|
+
* The audit hash chain depends on this output byte-for-byte: changing it
|
|
22
|
+
* invalidates every stored chain.
|
|
23
|
+
*/
|
|
24
|
+
export declare function stableStringify(value: unknown): string;
|
package/lib/utils/object.js
CHANGED
|
@@ -15,4 +15,27 @@
|
|
|
15
15
|
export function pickDefined(obj) {
|
|
16
16
|
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Deterministic JSON serialization with recursively sorted object keys, so the
|
|
20
|
+
* same logical value always serializes (and hashes) identically:
|
|
21
|
+
* - `undefined` / `null` → `null` (so absent fields hash identically).
|
|
22
|
+
* - `Date` → its ISO string (Mongo round-trips these as `Date`).
|
|
23
|
+
* - object keys are sorted; `undefined`-valued keys are dropped (JSON semantics).
|
|
24
|
+
*
|
|
25
|
+
* The audit hash chain depends on this output byte-for-byte: changing it
|
|
26
|
+
* invalidates every stored chain.
|
|
27
|
+
*/
|
|
28
|
+
export function stableStringify(value) {
|
|
29
|
+
if (value === null || value === undefined)
|
|
30
|
+
return 'null';
|
|
31
|
+
if (value instanceof Date)
|
|
32
|
+
return JSON.stringify(value.toISOString());
|
|
33
|
+
if (typeof value !== 'object')
|
|
34
|
+
return JSON.stringify(value) ?? 'null';
|
|
35
|
+
if (Array.isArray(value))
|
|
36
|
+
return `[${value.map(stableStringify).join(',')}]`;
|
|
37
|
+
const obj = value;
|
|
38
|
+
const keys = Object.keys(obj).filter((k) => obj[k] !== undefined).sort();
|
|
39
|
+
return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(',')}}`;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL29iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBb0MsR0FBTTtJQUNuRSxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQ3pDLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYztJQUM1QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN6RCxJQUFJLEtBQUssWUFBWSxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDdEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzdFLE1BQU0sR0FBRyxHQUFHLEtBQWdDLENBQUM7SUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6RSxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEZpbHRlciBhbiBvYmplY3QgdG8gb25seSBpbmNsdWRlIGVudHJpZXMgd2hlcmUgdGhlIHZhbHVlIGlzIG5vdCBgdW5kZWZpbmVkYC5cbiAqIEtlZXBzIGBudWxsYCwgYGZhbHNlYCwgYDBgLCBhbmQgZW1wdHkgc3RyaW5nIOKAlCBvbmx5IHJlbW92ZXMgYHVuZGVmaW5lZGAuXG4gKlxuICogVXNlZnVsIGZvciBidWlsZGluZyBwYXJ0aWFsIHVwZGF0ZSBwYXlsb2FkcyBmcm9tIHZhbGlkYXRlZCByZXF1ZXN0IGJvZGllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYm9keSA9IHsgbmFtZTogJ2ZvbycsIGRlc2NyaXB0aW9uOiB1bmRlZmluZWQsIGlzQWN0aXZlOiBmYWxzZSB9O1xuICogcGlja0RlZmluZWQoYm9keSk7IC8vIHsgbmFtZTogJ2ZvbycsIGlzQWN0aXZlOiBmYWxzZSB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tEZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ob2JqOiBUKTogUGFydGlhbDxUPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5maWx0ZXIoKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpLFxuICApIGFzIFBhcnRpYWw8VD47XG59XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyBKU09OIHNlcmlhbGl6YXRpb24gd2l0aCByZWN1cnNpdmVseSBzb3J0ZWQgb2JqZWN0IGtleXMsIHNvIHRoZVxuICogc2FtZSBsb2dpY2FsIHZhbHVlIGFsd2F5cyBzZXJpYWxpemVzIChhbmQgaGFzaGVzKSBpZGVudGljYWxseTpcbiAqIC0gYHVuZGVmaW5lZGAgLyBgbnVsbGAg4oaSIGBudWxsYCAoc28gYWJzZW50IGZpZWxkcyBoYXNoIGlkZW50aWNhbGx5KS5cbiAqIC0gYERhdGVgIOKGkiBpdHMgSVNPIHN0cmluZyAoTW9uZ28gcm91bmQtdHJpcHMgdGhlc2UgYXMgYERhdGVgKS5cbiAqIC0gb2JqZWN0IGtleXMgYXJlIHNvcnRlZDsgYHVuZGVmaW5lZGAtdmFsdWVkIGtleXMgYXJlIGRyb3BwZWQgKEpTT04gc2VtYW50aWNzKS5cbiAqXG4gKiBUaGUgYXVkaXQgaGFzaCBjaGFpbiBkZXBlbmRzIG9uIHRoaXMgb3V0cHV0IGJ5dGUtZm9yLWJ5dGU6IGNoYW5naW5nIGl0XG4gKiBpbnZhbGlkYXRlcyBldmVyeSBzdG9yZWQgY2hhaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVTdHJpbmdpZnkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICdudWxsJztcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLnRvSVNPU3RyaW5nKCkpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKSA/PyAnbnVsbCc7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGBbJHt2YWx1ZS5tYXAoc3RhYmxlU3RyaW5naWZ5KS5qb2luKCcsJyl9XWA7XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoKGspID0+IG9ialtrXSAhPT0gdW5kZWZpbmVkKS5zb3J0KCk7XG4gIHJldHVybiBgeyR7a2V5cy5tYXAoKGspID0+IGAke0pTT04uc3RyaW5naWZ5KGspfToke3N0YWJsZVN0cmluZ2lmeShvYmpba10pfWApLmpvaW4oJywnKX19YDtcbn1cbiJdfQ==
|
package/lib/utils/params.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Request } from 'express';
|
|
2
1
|
/**
|
|
3
2
|
* Shape convention for the inline parse-guard helpers below.
|
|
4
3
|
*
|
|
@@ -32,22 +31,6 @@ type ParamValue = string | string[] | undefined;
|
|
|
32
31
|
* ```
|
|
33
32
|
*/
|
|
34
33
|
export declare function getParam(params: Record<string, ParamValue>, key: string): string | undefined;
|
|
35
|
-
/**
|
|
36
|
-
* Extract the organization ID from request.
|
|
37
|
-
* Checks params, headers, and user object.
|
|
38
|
-
*
|
|
39
|
-
* @param req - Express request object
|
|
40
|
-
* @returns Organization ID or undefined
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* const orgId = getOrgId(req);
|
|
45
|
-
* if (!orgId) {
|
|
46
|
-
* return sendError(res, 400, 'Organization ID required');
|
|
47
|
-
* }
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export declare function getOrgId(req: Request): string | undefined;
|
|
51
34
|
/**
|
|
52
35
|
* Parse a query parameter as an integer.
|
|
53
36
|
*
|
|
@@ -74,6 +57,11 @@ export declare function parseQueryInt(value: unknown, defaultValue: number): num
|
|
|
74
57
|
* ```
|
|
75
58
|
*/
|
|
76
59
|
export declare function parseQueryString(value: unknown): string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Parse an optional ISO date query param: `undefined` when absent, `null` when
|
|
62
|
+
* malformed (the route answers a 400), else the Date.
|
|
63
|
+
*/
|
|
64
|
+
export declare function parseOptionalDate(raw: unknown): Date | undefined | null;
|
|
77
65
|
/**
|
|
78
66
|
* Parse a string to a positive integer, returning a fallback if invalid.
|
|
79
67
|
* Useful for parsing environment variables with numeric defaults.
|
|
@@ -112,11 +100,9 @@ export interface Page {
|
|
|
112
100
|
* from a service-layer options object — numeric values work too).
|
|
113
101
|
*
|
|
114
102
|
* `limit` clamps to `[1, max]` and falls back to `def`; `offset` clamps to
|
|
115
|
-
* `[0, maxOffset]`.
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* are still per-route — a queue listing and a member roster want different page
|
|
119
|
-
* sizes — but they are now DECLARED here rather than re-derived, and no caller
|
|
103
|
+
* `[0, maxOffset]`. Route defaults are per-route — a queue listing and a member
|
|
104
|
+
* roster want different page sizes — but they are DECLARED here rather than
|
|
105
|
+
* hand-rolled with `Math.min(Math.max(...))` at the call site, and no caller
|
|
120
106
|
* can forget the cap.
|
|
121
107
|
*
|
|
122
108
|
* @example
|
package/lib/utils/params.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { getHeaderString } from './headers.js';
|
|
4
3
|
import { MAX_PAGE_OFFSET } from '../validation/common-schemas.js';
|
|
5
4
|
/**
|
|
6
5
|
* Extract a single string parameter from Express 5 route params.
|
|
@@ -25,42 +24,6 @@ export function getParam(params, key) {
|
|
|
25
24
|
}
|
|
26
25
|
return Array.isArray(value) ? value[0] : value;
|
|
27
26
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Extract the organization ID from request.
|
|
30
|
-
* Checks params, headers, and user object.
|
|
31
|
-
*
|
|
32
|
-
* @param req - Express request object
|
|
33
|
-
* @returns Organization ID or undefined
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* const orgId = getOrgId(req);
|
|
38
|
-
* if (!orgId) {
|
|
39
|
-
* return sendError(res, 400, 'Organization ID required');
|
|
40
|
-
* }
|
|
41
|
-
* ```
|
|
42
|
-
*/
|
|
43
|
-
export function getOrgId(req) {
|
|
44
|
-
// Prefer the VERIFIED JWT identity first. A spoofable `x-org-id` header must
|
|
45
|
-
// never override an authenticated user's org (cross-tenant footgun). For a
|
|
46
|
-
// superadmin acting cross-org, requireAuth already re-points
|
|
47
|
-
// `req.user.organizationId` to the chosen org via the isSuperAdmin-gated
|
|
48
|
-
// header override, so this still yields the intended scope.
|
|
49
|
-
const userOrgId = req.user?.organizationId?.trim();
|
|
50
|
-
if (userOrgId) {
|
|
51
|
-
return userOrgId;
|
|
52
|
-
}
|
|
53
|
-
// Pre-auth fallbacks only (req.user unset): route param, then header.
|
|
54
|
-
const paramOrgId = getParam(req.params, 'orgId');
|
|
55
|
-
if (paramOrgId) {
|
|
56
|
-
return paramOrgId;
|
|
57
|
-
}
|
|
58
|
-
const headerOrgId = getHeaderString(req.headers['x-org-id'])?.trim();
|
|
59
|
-
if (headerOrgId) {
|
|
60
|
-
return headerOrgId;
|
|
61
|
-
}
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
27
|
/**
|
|
65
28
|
* Parse a query parameter as an integer.
|
|
66
29
|
*
|
|
@@ -96,6 +59,17 @@ export function parseQueryString(value) {
|
|
|
96
59
|
return undefined;
|
|
97
60
|
return String(value);
|
|
98
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Parse an optional ISO date query param: `undefined` when absent, `null` when
|
|
64
|
+
* malformed (the route answers a 400), else the Date.
|
|
65
|
+
*/
|
|
66
|
+
export function parseOptionalDate(raw) {
|
|
67
|
+
const s = parseQueryString(raw);
|
|
68
|
+
if (!s)
|
|
69
|
+
return undefined;
|
|
70
|
+
const d = new Date(s);
|
|
71
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
72
|
+
}
|
|
99
73
|
/**
|
|
100
74
|
* Parse a string to a positive integer, returning a fallback if invalid.
|
|
101
75
|
* Useful for parsing environment variables with numeric defaults.
|
|
@@ -123,11 +97,9 @@ export function parseQueryIntClamped(value, defaultValue, max) {
|
|
|
123
97
|
* from a service-layer options object — numeric values work too).
|
|
124
98
|
*
|
|
125
99
|
* `limit` clamps to `[1, max]` and falls back to `def`; `offset` clamps to
|
|
126
|
-
* `[0, maxOffset]`.
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* are still per-route — a queue listing and a member roster want different page
|
|
130
|
-
* sizes — but they are now DECLARED here rather than re-derived, and no caller
|
|
100
|
+
* `[0, maxOffset]`. Route defaults are per-route — a queue listing and a member
|
|
101
|
+
* roster want different page sizes — but they are DECLARED here rather than
|
|
102
|
+
* hand-rolled with `Math.min(Math.max(...))` at the call site, and no caller
|
|
131
103
|
* can forget the cap.
|
|
132
104
|
*
|
|
133
105
|
* @example
|
|
@@ -226,4 +198,4 @@ export function parseDateRange(query, options = {}) {
|
|
|
226
198
|
}
|
|
227
199
|
return { from: fromStr, to: toStr };
|
|
228
200
|
}
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBb0JsRTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFrQyxFQUNsQyxHQUFXO0lBRVgsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBWTtJQUNuQyw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLDZEQUE2RDtJQUM3RCx5RUFBeUU7SUFDekUsNERBQTREO0lBQzVELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ25ELElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxX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LElBQUk7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGtDQUFrQyxFQUFFLENBQUM7SUFDeEUsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxpQ0FBaUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuL2hlYWRlcnMuanMnO1xuaW1wb3J0IHsgTUFYX1BBR0VfT0ZGU0VUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbi8qKlxuICogU2hhcGUgY29udmVudGlvbiBmb3IgdGhlIGlubGluZSBwYXJzZS1ndWFyZCBoZWxwZXJzIGJlbG93LlxuICpcbiAqIFRoZXNlIHJldHVybiBhIGxpZ2h0d2VpZ2h0IGB7IHZhbHVlIH0gfCB7IGVycm9yIH1gIChuYXJyb3dlZCB3aXRoXG4gKiBgJ2Vycm9yJyBpbiByZXN1bHRgKSDigJQgZGVsaWJlcmF0ZWx5IERJU1RJTkNUIGZyb20gdGhlIHNjaGVtYS12YWxpZGF0aW9uXG4gKiBgVmFsaWRhdGlvblJlc3VsdDxUPmAgKGB7IG9rLCB2YWx1ZSB9IHwgeyBvaywgZXJyb3IgfWApIGluXG4gKiBgdmFsaWRhdGlvbi9taWRkbGV3YXJlLnRzYC4gWm9kIHNjaGVtYSBwYXJzaW5nIHVzZXMgdGhlIGBva2AtZGlzY3JpbWluYXRlZFxuICogc2hhcGU7IHRoZXNlIGFkLWhvYyByZXF1ZXN0LXBhcmFtZXRlciBndWFyZHMgdXNlIGAnZXJyb3InIGluYC4gVGhlIHNwbGl0IGlzXG4gKiBpbnRlbnRpb25hbCBhbmQgZG9jdW1lbnRlZCAoc2VlIHRoZSBub3RlIG9uIGBWYWxpZGF0aW9uUmVzdWx0YCk6IGNvbnZlcmdpbmdcbiAqIHRoZW0gd291bGQgY2h1cm4gZXZlcnkgYCdlcnJvcicgaW4gcmVzdWx0YCBjYWxsIHNpdGUgYWNyb3NzIHRoZSBkb3duc3RyZWFtXG4gKiBzZXJ2aWNlcyB3aXRoIG5vIGJlaGF2aW91cmFsIGNoYW5nZSwgc28gaXQncyBsZWZ0IGFzIGEgZG9jdW1lbnRlZCBjb252ZW50aW9uLlxuICovXG5cbi8qKlxuICogRXhwcmVzcyA1IHBhcmFtZXRlciB0eXBlLlxuICovXG50eXBlIFBhcmFtVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSBFeHByZXNzIDUgcm91dGUgcGFyYW1zLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcyBvYmplY3RcbiAqIEBwYXJhbSBrZXkgLSBQYXJhbWV0ZXIga2V5XG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIHZhbHVlIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IHByZXNlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gUm91dGU6IEdFVCAvcGx1Z2lucy86aWRcbiAqIGNvbnN0IGlkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ2lkJyk7XG4gKiBpZiAoIWlkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIGlkIHBhcmFtZXRlcicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbShcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBQYXJhbVZhbHVlPixcbiAga2V5OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBvcmdhbml6YXRpb24gSUQgZnJvbSByZXF1ZXN0LlxuICogQ2hlY2tzIHBhcmFtcywgaGVhZGVycywgYW5kIHVzZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSByZXEgLSBFeHByZXNzIHJlcXVlc3Qgb2JqZWN0XG4gKiBAcmV0dXJucyBPcmdhbml6YXRpb24gSUQgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9yZ0lkID0gZ2V0T3JnSWQocmVxKTtcbiAqIGlmICghb3JnSWQpIHtcbiAqICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIDQwMCwgJ09yZ2FuaXphdGlvbiBJRCByZXF1aXJlZCcpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmdJZChyZXE6IFJlcXVlc3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBQcmVmZXIgdGhlIFZFUklGSUVEIEpXVCBpZGVudGl0eSBmaXJzdC4gQSBzcG9vZmFibGUgYHgtb3JnLWlkYCBoZWFkZXIgbXVzdFxuICAvLyBuZXZlciBvdmVycmlkZSBhbiBhdXRoZW50aWNhdGVkIHVzZXIncyBvcmcgKGNyb3NzLXRlbmFudCBmb290Z3VuKS4gRm9yIGFcbiAgLy8gc3VwZXJhZG1pbiBhY3RpbmcgY3Jvc3Mtb3JnLCByZXF1aXJlQXV0aCBhbHJlYWR5IHJlLXBvaW50c1xuICAvLyBgcmVxLnVzZXIub3JnYW5pemF0aW9uSWRgIHRvIHRoZSBjaG9zZW4gb3JnIHZpYSB0aGUgaXNTdXBlckFkbWluLWdhdGVkXG4gIC8vIGhlYWRlciBvdmVycmlkZSwgc28gdGhpcyBzdGlsbCB5aWVsZHMgdGhlIGludGVuZGVkIHNjb3BlLlxuICBjb25zdCB1c2VyT3JnSWQgPSByZXEudXNlcj8ub3JnYW5pemF0aW9uSWQ/LnRyaW0oKTtcbiAgaWYgKHVzZXJPcmdJZCkge1xuICAgIHJldHVybiB1c2VyT3JnSWQ7XG4gIH1cblxuICAvLyBQcmUtYXV0aCBmYWxsYmFja3Mgb25seSAocmVxLnVzZXIgdW5zZXQpOiByb3V0ZSBwYXJhbSwgdGhlbiBoZWFkZXIuXG4gIGNvbnN0IHBhcmFtT3JnSWQgPSBnZXRQYXJhbShyZXEucGFyYW1zLCAnb3JnSWQnKTtcbiAgaWYgKHBhcmFtT3JnSWQpIHtcbiAgICByZXR1cm4gcGFyYW1PcmdJZDtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlck9yZ0lkID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1pZCddKT8udHJpbSgpO1xuICBpZiAoaGVhZGVyT3JnSWQpIHtcbiAgICByZXR1cm4gaGVhZGVyT3JnSWQ7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgcGFyYW1ldGVyIGFzIGFuIGludGVnZXIuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRGVmYXVsdCB2YWx1ZSBpZiBwYXJzaW5nIGZhaWxzXG4gKiBAcmV0dXJucyBQYXJzZWQgaW50ZWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsaW1pdCA9IHBhcnNlUXVlcnlJbnQocmVxLnF1ZXJ5LmxpbWl0LCAxMCk7XG4gKiBjb25zdCBvZmZzZXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5vZmZzZXQsIDApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5SW50KHZhbHVlOiB1bmtub3duLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoU3RyaW5nKHZhbHVlKSwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IGRlZmF1bHRWYWx1ZSA6IHBhcnNlZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBRdWVyeSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIFN0cmluZyB2YWx1ZSBvciB1bmRlZmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VhcmNoID0gcGFyc2VRdWVyeVN0cmluZyhyZXEucXVlcnkuc2VhcmNoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyLCByZXR1cm5pbmcgYSBmYWxsYmFjayBpZiBpbnZhbGlkLlxuICogVXNlZnVsIGZvciBwYXJzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIG51bWVyaWMgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBvc2l0aXZlSW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSAmJiBwYXJzZWQgPiAwID8gcGFyc2VkIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBpbnQsIHRoZW4gY2xhbXAgdG8gYFsxLCBtYXhdYC4gUmV0dXJucyBgZGVmYXVsdFZhbHVlYCAoYWZ0ZXJcbiAqIHRoZSBzYW1lIGNsYW1wKSB3aGVuIHRoZSBpbnB1dCBpcyBtaXNzaW5nL2ludmFsaWQuIFVzZSBmb3IgYGxpbWl0YC1zdHlsZVxuICogcXVlcnkgcGFyYW1ldGVycyB3aGVyZSBhbiB1bmJvdW5kZWQgdmFsdWUgd291bGQgY29zdCByZWFsIG1vbmV5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBsaW1pdCA9IHBhcnNlUXVlcnlJbnRDbGFtcGVkKHJlcS5xdWVyeS5saW1pdCwgNTAsIDEwMDApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludENsYW1wZWQoXG4gIHZhbHVlOiB1bmtub3duLFxuICBkZWZhdWx0VmFsdWU6IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwYXJzZVF1ZXJ5SW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpO1xuICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5taW4ocmF3LCBtYXgpKTtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBwYXJzZVBhZ2V9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlT3B0aW9ucyB7XG4gIC8qKiBQYWdlIHNpemUgd2hlbiB0aGUgY2FsbGVyIG5hbWVzIG5vbmUuIFJFUVVJUkVEIOKAlCBwaWNrIGl0IGRlbGliZXJhdGVseS4gKi9cbiAgZGVmOiBudW1iZXI7XG4gIC8qKiBIYXJkIGNlaWxpbmcgb24gb25lIHBhZ2UuIFJFUVVJUkVEIOKAlCBhbiB1bmJvdW5kZWQgYD9saW1pdD1gIGNvc3RzIG1vbmV5LiAqL1xuICBtYXg6IG51bWJlcjtcbiAgLyoqXG4gICAqIERlZXBlc3QgYG9mZnNldGAgYSBjYWxsZXIgbWF5IHJlYWNoLiBBIG51bWJlciwgb3IgYSBmdW5jdGlvbiBvZiB0aGVcbiAgICogcmVzb2x2ZWQgbGltaXQgZm9yIHNvdXJjZXMgdGhhdCBwYWdlIGEgZml4ZWQtZGVwdGggd2luZG93ICh0aGUgcGx1Z2luIHF1ZXVlXG4gICAqIHJlYWRzIGBvZmZzZXQgKyBsaW1pdGAgZW50cmllcyBmcm9tIGV2ZXJ5IHNvdXJjZSwgc28gaXRzIGRlcHRoIGNhcCBpc1xuICAgKiBgREVQVEggLSBsaW1pdGApLiBEZWZhdWx0cyB0byBgTUFYX1BBR0VfT0ZGU0VUYC5cbiAgICovXG4gIG1heE9mZnNldD86IG51bWJlciB8ICgobGltaXQ6IG51bWJlcikgPT4gbnVtYmVyKTtcbn1cblxuLyoqIEEgcGFyc2VkLCBjbGFtcGVkIGA/bGltaXQ9Jm9mZnNldD1gIHdpbmRvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZSB7XG4gIGxpbWl0OiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRIRSBwYWdpbmF0aW9uIHByaW1pdGl2ZS4gUGFyc2UgYW5kIGNsYW1wIGBsaW1pdGAvYG9mZnNldGAgZnJvbSBhIHF1ZXJ5IChvclxuICogZnJvbSBhIHNlcnZpY2UtbGF5ZXIgb3B0aW9ucyBvYmplY3Qg4oCUIG51bWVyaWMgdmFsdWVzIHdvcmsgdG9vKS5cbiAqXG4gKiBgbGltaXRgIGNsYW1wcyB0byBgWzEsIG1heF1gIGFuZCBmYWxscyBiYWNrIHRvIGBkZWZgOyBgb2Zmc2V0YCBjbGFtcHMgdG9cbiAqIGBbMCwgbWF4T2Zmc2V0XWAuIFRocmVlIGRpZmZlcmVudCBjb252ZW50aW9ucyB3aXRoIHNpeCBkaXNhZ3JlZWluZyBkZWZhdWx0c1xuICogKDEwLzIwLzI1LzUwLCBjYXBzIG9mIDEwMDAvMjAwLzEwMCkgdXNlZCB0byBhbnN3ZXIgdGhlIHNhbWUgYD9saW1pdD1gLFxuICogZWFjaCBoYW5kLXJvbGxpbmcgYE1hdGgubWluKE1hdGgubWF4KC4uLikpYCBhdCB0aGUgY2FsbCBzaXRlLiBSb3V0ZSBkZWZhdWx0c1xuICogYXJlIHN0aWxsIHBlci1yb3V0ZSDigJQgYSBxdWV1ZSBsaXN0aW5nIGFuZCBhIG1lbWJlciByb3N0ZXIgd2FudCBkaWZmZXJlbnQgcGFnZVxuICogc2l6ZXMg4oCUIGJ1dCB0aGV5IGFyZSBub3cgREVDTEFSRUQgaGVyZSByYXRoZXIgdGhhbiByZS1kZXJpdmVkLCBhbmQgbm8gY2FsbGVyXG4gKiBjYW4gZm9yZ2V0IHRoZSBjYXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHsgbGltaXQsIG9mZnNldCB9ID0gcGFyc2VQYWdlKHJlcS5xdWVyeSwgeyBkZWY6IDUwLCBtYXg6IDIwMCB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFnZShxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wdHM6IFBhZ2VPcHRpb25zKTogUGFnZSB7XG4gIGNvbnN0IGxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4ocGFyc2VRdWVyeUludChxdWVyeS5saW1pdCwgb3B0cy5kZWYpLCBvcHRzLm1heCkpO1xuICBjb25zdCByYXdNYXhPZmZzZXQgPSB0eXBlb2Ygb3B0cy5tYXhPZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLm1heE9mZnNldChsaW1pdCkgOiBvcHRzLm1heE9mZnNldDtcbiAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgcmF3TWF4T2Zmc2V0ID8/IE1BWF9QQUdFX09GRlNFVCk7XG4gIGNvbnN0IG9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHBhcnNlUXVlcnlJbnQocXVlcnkub2Zmc2V0LCAwKSwgbWF4T2Zmc2V0KSk7XG4gIHJldHVybiB7IGxpbWl0LCBvZmZzZXQgfTtcbn1cblxuLyoqXG4gKiBCdWxrLWFycmF5IHJlcXVlc3QgZ3VhcmQuIFZhbGlkYXRlcyB0aGF0IGB2YWx1ZWAgaXMgYW4gYXJyYXksIG5vbi1lbXB0eSxcbiAqIGFuZCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgY2FwLiBSZXR1cm5zIHRoZSB0eXBlZCBhcnJheSBvciBhbiBlcnJvciBvYmplY3RcbiAqIHRoZSBjYWxsZXIgY2FuIGZvcndhcmQgdG8gYHNlbmRFcnJvcmAvYHNlbmRCYWRSZXF1ZXN0YC5cbiAqXG4gKiBSZXBsYWNlcyBhIGhhbmQtcm9sbGVkIGBpZiAoIUFycmF5LmlzQXJyYXkoLi4uKSkgeyAuLi4gfWAgKyBsZW5ndGggY2hlY2tcbiAqIGJsb2NrIHRoYXQgd2FzIGR1cGxpY2F0ZWQgYWNyb3NzIGJ1bGsgZW5kcG9pbnRzIGluIHBpcGVsaW5lLCBwbHVnaW4sXG4gKiBjb21wbGlhbmNlLCBldGMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQnVsa0FycmF5KHJlcS5ib2R5LmlkcywgJ2lkcycpO1xuICogaWYgKCdlcnJvcicgaW4gcmVzdWx0KSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IGlkcyA9IHJlc3VsdC52YWx1ZTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQnVsa0FycmF5PFQgPSB1bmtub3duPihcbiAgdmFsdWU6IHVua25vd24sXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBtYXhJdGVtcz86IG51bWJlcixcbik6IHsgdmFsdWU6IFRbXSB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGVycm9yOiBgUmVxdWVzdCBib2R5IG11c3QgaW5jbHVkZSBhIG5vbi1lbXB0eSBcIiR7ZmllbGROYW1lfVwiIGFycmF5YCB9O1xuICB9XG4gIC8vIENvcmVDb25zdGFudHMuTUFYX0JVTEtfSVRFTVMgaXNuJ3QgaW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBhIGNpcmN1bGFyXG4gIC8vIHBhdGggdGhyb3VnaCBjb25zdGFudHMvaW5kZXg7IGNhbGxlcnMgcGFzcyBpdCBleHBsaWNpdGx5IG9yIG9taXQgZm9yXG4gIC8vIG5vIHVwcGVyIGJvdW5kLlxuICBpZiAobWF4SXRlbXMgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBtYXhJdGVtcykge1xuICAgIHJldHVybiB7IGVycm9yOiBgTWF4aW11bSAke21heEl0ZW1zfSBpdGVtcyBwZXIgYnVsayBvcGVyYXRpb25gIH07XG4gIH1cbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIGFzIFRbXSB9O1xufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBpbnRlcnZhbHMgZm9yIHRpbWUtYnVja2V0ZWQgcmVwb3J0IHF1ZXJpZXMuIFVzZWQgYXMgdGhlXG4gKiBgREFURV9UUlVOQ2AgZmlyc3QgYXJndW1lbnQgaW4gUG9zdGdyZXM7IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBlbnVtIHNvXG4gKiB0aGUgdmFsdWUgY2FuIG5ldmVyIGJlIGluamVjdGVkIGludG8gcmF3IFNRTC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFUE9SVF9JTlRFUlZBTFMgPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXBvcnRJbnRlcnZhbCA9ICh0eXBlb2YgUkVQT1JUX0lOVEVSVkFMUylbbnVtYmVyXTtcblxuLyoqXG4gKiBQYXJzZSArIHZhbGlkYXRlIGEgYD9pbnRlcnZhbD1gIHJlcG9ydCBidWNrZXQgKGRlZmF1bHRzIHRvICd3ZWVrJykuIFJldHVybnMgdGhlXG4gKiB2YWxpZGF0ZWQgaW50ZXJ2YWwgb3IgYHsgZXJyb3IgfWAuIFNoYXJlZCBieSB0aGUgdGltZXNlcmllcyByZXBvcnQgcm91dGVzIHNvIHRoZVxuICogZGVmYXVsdCArIGFsbG93LWxpc3QgKyBlcnJvciBtZXNzYWdlIGxpdmUgaW4gb25lIHBsYWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpbnRlcnZhbCA9IHBhcnNlUmVwb3J0SW50ZXJ2YWwocmVxLnF1ZXJ5KTtcbiAqIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdvYmplY3QnKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCBpbnRlcnZhbC5lcnJvciwgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXBvcnRJbnRlcnZhbChxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXBvcnRJbnRlcnZhbCB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBTdHJpbmcocXVlcnkuaW50ZXJ2YWwgPz8gJ3dlZWsnKTtcbiAgaWYgKCFSRVBPUlRfSU5URVJWQUxTLmluY2x1ZGVzKGludGVydmFsIGFzIFJlcG9ydEludGVydmFsKSkge1xuICAgIHJldHVybiB7IGVycm9yOiBgaW50ZXJ2YWwgbXVzdCBiZSBvbmUgb2Y6ICR7UkVQT1JUX0lOVEVSVkFMUy5qb2luKCcsICcpfWAgfTtcbiAgfVxuICByZXR1cm4gaW50ZXJ2YWwgYXMgUmVwb3J0SW50ZXJ2YWw7XG59XG5cbi8qKlxuICogUGFyc2UgYSBgP2Zyb209JnRvPWAgZGF0ZSByYW5nZSB3aXRoIGRlZmF1bHRzIG9mIFwiMzAgZGF5cyBhZ28g4oaSIG5vd1wiLlxuICogUmVqZWN0cyBub24tc3RyaW5nIGlucHV0cyAoRXhwcmVzcydzIHBhcnNlciBjYW4gcHJvZHVjZSBzdHJpbmdbXSBmb3JcbiAqIHJlcGVhdGVkIGtleXMpLCBpbnZhbGlkIElTTyB0aW1lc3RhbXBzLCBhbmQgaW52ZXJ0ZWQgcmFuZ2VzLlxuICpcbiAqIFJldHVybnMgZWl0aGVyIGB7IGZyb20sIHRvIH1gIElTTyBzdHJpbmdzIG9yIGB7IGVycm9yIH1gLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZSA9IHBhcnNlRGF0ZVJhbmdlKHJlcS5xdWVyeSk7XG4gKiBpZiAoJ2Vycm9yJyBpbiByYW5nZSkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmFuZ2UuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IHJvd3MgPSBhd2FpdCBzdmMubGlzdChyYW5nZS5mcm9tLCByYW5nZS50byk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGVSYW5nZShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IG1heFJhbmdlTXM/OiBudW1iZXI7IGRlZmF1bHREYXlzQmFjaz86IG51bWJlciB9ID0ge30sXG4pOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCB7IG1heFJhbmdlTXMsIGRlZmF1bHREYXlzQmFjayA9IDMwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHJhd0Zyb20gPSBxdWVyeS5mcm9tO1xuICBjb25zdCByYXdUbyA9IHF1ZXJ5LnRvO1xuXG4gIGlmIChyYXdGcm9tICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJhd0Zyb20gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG4gIGlmIChyYXdUbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdUbyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ1widG9cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZnJvbVN0ciA9IHJhd0Zyb20gPz8gbmV3IERhdGUobm93IC0gZGVmYXVsdERheXNCYWNrICogMjQgKiA2MCAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgdG9TdHIgPSByYXdUbyA/PyBuZXcgRGF0ZShub3cpLnRvSVNPU3RyaW5nKCk7XG5cbiAgY29uc3QgZnJvbU1zID0gRGF0ZS5wYXJzZShmcm9tU3RyKTtcbiAgY29uc3QgdG9NcyA9IERhdGUucGFyc2UodG9TdHIpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShmcm9tTXMpKSByZXR1cm4geyBlcnJvcjogJ1wiZnJvbVwiIGlzIG5vdCBhIHZhbGlkIElTTyB0aW1lc3RhbXAnIH07XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRvTXMpKSByZXR1cm4geyBlcnJvcjogJ1widG9cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoZnJvbU1zID4gdG9NcykgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGVhcmxpZXIgdGhhbiBcInRvXCInIH07XG4gIGlmIChtYXhSYW5nZU1zICE9PSB1bmRlZmluZWQgJiYgdG9NcyAtIGZyb21NcyA+IG1heFJhbmdlTXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYERhdGUgcmFuZ2UgZXhjZWVkcyBtYXhpbXVtIG9mICR7TWF0aC5mbG9vcihtYXhSYW5nZU1zIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKX0gZGF5c2AgfTtcbiAgfVxuXG4gIHJldHVybiB7IGZyb206IGZyb21TdHIsIHRvOiB0b1N0ciB9O1xufVxuIl19
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQW9CbEU7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBa0MsRUFDbEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFjLEVBQUUsWUFBb0I7SUFDaEUsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUMvRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzdDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQUUs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LEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgTUFYX1BBR0VfT0ZGU0VUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbi8qKlxuICogU2hhcGUgY29udmVudGlvbiBmb3IgdGhlIGlubGluZSBwYXJzZS1ndWFyZCBoZWxwZXJzIGJlbG93LlxuICpcbiAqIFRoZXNlIHJldHVybiBhIGxpZ2h0d2VpZ2h0IGB7IHZhbHVlIH0gfCB7IGVycm9yIH1gIChuYXJyb3dlZCB3aXRoXG4gKiBgJ2Vycm9yJyBpbiByZXN1bHRgKSDigJQgZGVsaWJlcmF0ZWx5IERJU1RJTkNUIGZyb20gdGhlIHNjaGVtYS12YWxpZGF0aW9uXG4gKiBgVmFsaWRhdGlvblJlc3VsdDxUPmAgKGB7IG9rLCB2YWx1ZSB9IHwgeyBvaywgZXJyb3IgfWApIGluXG4gKiBgdmFsaWRhdGlvbi9taWRkbGV3YXJlLnRzYC4gWm9kIHNjaGVtYSBwYXJzaW5nIHVzZXMgdGhlIGBva2AtZGlzY3JpbWluYXRlZFxuICogc2hhcGU7IHRoZXNlIGFkLWhvYyByZXF1ZXN0LXBhcmFtZXRlciBndWFyZHMgdXNlIGAnZXJyb3InIGluYC4gVGhlIHNwbGl0IGlzXG4gKiBpbnRlbnRpb25hbCBhbmQgZG9jdW1lbnRlZCAoc2VlIHRoZSBub3RlIG9uIGBWYWxpZGF0aW9uUmVzdWx0YCk6IGNvbnZlcmdpbmdcbiAqIHRoZW0gd291bGQgY2h1cm4gZXZlcnkgYCdlcnJvcicgaW4gcmVzdWx0YCBjYWxsIHNpdGUgYWNyb3NzIHRoZSBkb3duc3RyZWFtXG4gKiBzZXJ2aWNlcyB3aXRoIG5vIGJlaGF2aW91cmFsIGNoYW5nZSwgc28gaXQncyBsZWZ0IGFzIGEgZG9jdW1lbnRlZCBjb252ZW50aW9uLlxuICovXG5cbi8qKlxuICogRXhwcmVzcyA1IHBhcmFtZXRlciB0eXBlLlxuICovXG50eXBlIFBhcmFtVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSBFeHByZXNzIDUgcm91dGUgcGFyYW1zLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcyBvYmplY3RcbiAqIEBwYXJhbSBrZXkgLSBQYXJhbWV0ZXIga2V5XG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIHZhbHVlIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IHByZXNlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gUm91dGU6IEdFVCAvcGx1Z2lucy86aWRcbiAqIGNvbnN0IGlkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ2lkJyk7XG4gKiBpZiAoIWlkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIGlkIHBhcmFtZXRlcicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbShcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBQYXJhbVZhbHVlPixcbiAga2V5OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFF1ZXJ5IHBhcmFtZXRlciB2YWx1ZVxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcGFyc2luZyBmYWlsc1xuICogQHJldHVybnMgUGFyc2VkIGludGVnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5saW1pdCwgMTApO1xuICogY29uc3Qgb2Zmc2V0ID0gcGFyc2VRdWVyeUludChyZXEucXVlcnkub2Zmc2V0LCAwKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludCh2YWx1ZTogdW5rbm93biwgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSksIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcmV0dXJucyBTdHJpbmcgdmFsdWUgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlYXJjaCA9IHBhcnNlUXVlcnlTdHJpbmcocmVxLnF1ZXJ5LnNlYXJjaCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIG9wdGlvbmFsIElTTyBkYXRlIHF1ZXJ5IHBhcmFtOiBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCwgYG51bGxgIHdoZW5cbiAqIG1hbGZvcm1lZCAodGhlIHJvdXRlIGFuc3dlcnMgYSA0MDApLCBlbHNlIHRoZSBEYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcHRpb25hbERhdGUocmF3OiB1bmtub3duKTogRGF0ZSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICBjb25zdCBzID0gcGFyc2VRdWVyeVN0cmluZyhyYXcpO1xuICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShzKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyB0byBhIHBvc2l0aXZlIGludGVnZXIsIHJldHVybmluZyBhIGZhbGxiYWNrIGlmIGludmFsaWQuXG4gKiBVc2VmdWwgZm9yIHBhcnNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggbnVtZXJpYyBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUG9zaXRpdmVJbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxsYmFjaztcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IGludCwgdGhlbiBjbGFtcCB0byBgWzEsIG1heF1gLiBSZXR1cm5zIGBkZWZhdWx0VmFsdWVgIChhZnRlclxuICogdGhlIHNhbWUgY2xhbXApIHdoZW4gdGhlIGlucHV0IGlzIG1pc3NpbmcvaW52YWxpZC4gVXNlIGZvciBgbGltaXRgLXN0eWxlXG4gKiBxdWVyeSBwYXJhbWV0ZXJzIHdoZXJlIGFuIHVuYm91bmRlZCB2YWx1ZSB3b3VsZCBjb3N0IHJlYWwgbW9uZXkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGxpbWl0ID0gcGFyc2VRdWVyeUludENsYW1wZWQocmVxLnF1ZXJ5LmxpbWl0LCA1MCwgMTAwMCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5SW50Q2xhbXBlZChcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlZmF1bHRWYWx1ZTogbnVtYmVyLFxuICBtYXg6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHBhcnNlUXVlcnlJbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSk7XG4gIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLm1pbihyYXcsIG1heCkpO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlUGFnZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VPcHRpb25zIHtcbiAgLyoqIFBhZ2Ugc2l6ZSB3aGVuIHRoZSBjYWxsZXIgbmFtZXMgbm9uZS4gUkVRVUlSRUQg4oCUIHBpY2sgaXQgZGVsaWJlcmF0ZWx5LiAqL1xuICBkZWY6IG51bWJlcjtcbiAgLyoqIEhhcmQgY2VpbGluZyBvbiBvbmUgcGFnZS4gUkVRVUlSRUQg4oCUIGFuIHVuYm91bmRlZCBgP2xpbWl0PWAgY29zdHMgbW9uZXkuICovXG4gIG1heDogbnVtYmVyO1xuICAvKipcbiAgICogRGVlcGVzdCBgb2Zmc2V0YCBhIGNhbGxlciBtYXkgcmVhY2guIEEgbnVtYmVyLCBvciBhIGZ1bmN0aW9uIG9mIHRoZVxuICAgKiByZXNvbHZlZCBsaW1pdCBmb3Igc291cmNlcyB0aGF0IHBhZ2UgYSBmaXhlZC1kZXB0aCB3aW5kb3cgKHRoZSBwbHVnaW4gcXVldWVcbiAgICogcmVhZHMgYG9mZnNldCArIGxpbWl0YCBlbnRyaWVzIGZyb20gZXZlcnkgc291cmNlLCBzbyBpdHMgZGVwdGggY2FwIGlzXG4gICAqIGBERVBUSCAtIGxpbWl0YCkuIERlZmF1bHRzIHRvIGBNQVhfUEFHRV9PRkZTRVRgLlxuICAgKi9cbiAgbWF4T2Zmc2V0PzogbnVtYmVyIHwgKChsaW1pdDogbnVtYmVyKSA9PiBudW1iZXIpO1xufVxuXG4vKiogQSBwYXJzZWQsIGNsYW1wZWQgYD9saW1pdD0mb2Zmc2V0PWAgd2luZG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlIHtcbiAgbGltaXQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogVEhFIHBhZ2luYXRpb24gcHJpbWl0aXZlLiBQYXJzZSBhbmQgY2xhbXAgYGxpbWl0YC9gb2Zmc2V0YCBmcm9tIGEgcXVlcnkgKG9yXG4gKiBmcm9tIGEgc2VydmljZS1sYXllciBvcHRpb25zIG9iamVjdCDigJQgbnVtZXJpYyB2YWx1ZXMgd29yayB0b28pLlxuICpcbiAqIGBsaW1pdGAgY2xhbXBzIHRvIGBbMSwgbWF4XWAgYW5kIGZhbGxzIGJhY2sgdG8gYGRlZmA7IGBvZmZzZXRgIGNsYW1wcyB0b1xuICogYFswLCBtYXhPZmZzZXRdYC4gUm91dGUgZGVmYXVsdHMgYXJlIHBlci1yb3V0ZSDigJQgYSBxdWV1ZSBsaXN0aW5nIGFuZCBhIG1lbWJlclxuICogcm9zdGVyIHdhbnQgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMg4oCUIGJ1dCB0aGV5IGFyZSBERUNMQVJFRCBoZXJlIHJhdGhlciB0aGFuXG4gKiBoYW5kLXJvbGxlZCB3aXRoIGBNYXRoLm1pbihNYXRoLm1heCguLi4pKWAgYXQgdGhlIGNhbGwgc2l0ZSwgYW5kIG5vIGNhbGxlclxuICogY2FuIGZvcmdldCB0aGUgY2FwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGxpbWl0LCBvZmZzZXQgfSA9IHBhcnNlUGFnZShyZXEucXVlcnksIHsgZGVmOiA1MCwgbWF4OiAyMDAgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhZ2UocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcHRzOiBQYWdlT3B0aW9ucyk6IFBhZ2Uge1xuICBjb25zdCBsaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKHBhcnNlUXVlcnlJbnQocXVlcnkubGltaXQsIG9wdHMuZGVmKSwgb3B0cy5tYXgpKTtcbiAgY29uc3QgcmF3TWF4T2Zmc2V0ID0gdHlwZW9mIG9wdHMubWF4T2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5tYXhPZmZzZXQobGltaXQpIDogb3B0cy5tYXhPZmZzZXQ7XG4gIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWF4KDAsIHJhd01heE9mZnNldCA/PyBNQVhfUEFHRV9PRkZTRVQpO1xuICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihwYXJzZVF1ZXJ5SW50KHF1ZXJ5Lm9mZnNldCwgMCksIG1heE9mZnNldCkpO1xuICByZXR1cm4geyBsaW1pdCwgb2Zmc2V0IH07XG59XG5cbi8qKlxuICogQnVsay1hcnJheSByZXF1ZXN0IGd1YXJkLiBWYWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LCBub24tZW1wdHksXG4gKiBhbmQgd2l0aGluIHRoZSBjb25maWd1cmVkIGNhcC4gUmV0dXJucyB0aGUgdHlwZWQgYXJyYXkgb3IgYW4gZXJyb3Igb2JqZWN0XG4gKiB0aGUgY2FsbGVyIGNhbiBmb3J3YXJkIHRvIGBzZW5kRXJyb3JgL2BzZW5kQmFkUmVxdWVzdGAuXG4gKlxuICogUmVwbGFjZXMgYSBoYW5kLXJvbGxlZCBgaWYgKCFBcnJheS5pc0FycmF5KC4uLikpIHsgLi4uIH1gICsgbGVuZ3RoIGNoZWNrXG4gKiBibG9jayB0aGF0IHdhcyBkdXBsaWNhdGVkIGFjcm9zcyBidWxrIGVuZHBvaW50cyBpbiBwaXBlbGluZSwgcGx1Z2luLFxuICogY29tcGxpYW5jZSwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUJ1bGtBcnJheShyZXEuYm9keS5pZHMsICdpZHMnKTtcbiAqIGlmICgnZXJyb3InIGluIHJlc3VsdCkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCBpZHMgPSByZXN1bHQudmFsdWU7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJ1bGtBcnJheTxUID0gdW5rbm93bj4oXG4gIHZhbHVlOiB1bmtub3duLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgbWF4SXRlbXM/OiBudW1iZXIsXG4pOiB7IHZhbHVlOiBUW10gfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBlcnJvcjogYFJlcXVlc3QgYm9keSBtdXN0IGluY2x1ZGUgYSBub24tZW1wdHkgXCIke2ZpZWxkTmFtZX1cIiBhcnJheWAgfTtcbiAgfVxuICAvLyBDb3JlQ29uc3RhbnRzLk1BWF9CVUxLX0lURU1TIGlzbid0IGltcG9ydGVkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhclxuICAvLyBwYXRoIHRocm91Z2ggY29uc3RhbnRzL2luZGV4OyBjYWxsZXJzIHBhc3MgaXQgZXhwbGljaXRseSBvciBvbWl0IGZvclxuICAvLyBubyB1cHBlciBib3VuZC5cbiAgaWYgKG1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gbWF4SXRlbXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYE1heGltdW0gJHttYXhJdGVtc30gaXRlbXMgcGVyIGJ1bGsgb3BlcmF0aW9uYCB9O1xuICB9XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSBhcyBUW10gfTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgaW50ZXJ2YWxzIGZvciB0aW1lLWJ1Y2tldGVkIHJlcG9ydCBxdWVyaWVzLiBVc2VkIGFzIHRoZVxuICogYERBVEVfVFJVTkNgIGZpcnN0IGFyZ3VtZW50IGluIFBvc3RncmVzOyByZXN0cmljdGVkIHRvIGEgZml4ZWQgZW51bSBzb1xuICogdGhlIHZhbHVlIGNhbiBuZXZlciBiZSBpbmplY3RlZCBpbnRvIHJhdyBTUUwuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVBPUlRfSU5URVJWQUxTID0gWydkYXknLCAnd2VlaycsICdtb250aCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVwb3J0SW50ZXJ2YWwgPSAodHlwZW9mIFJFUE9SVF9JTlRFUlZBTFMpW251bWJlcl07XG5cbi8qKlxuICogUGFyc2UgKyB2YWxpZGF0ZSBhIGA/aW50ZXJ2YWw9YCByZXBvcnQgYnVja2V0IChkZWZhdWx0cyB0byAnd2VlaycpLiBSZXR1cm5zIHRoZVxuICogdmFsaWRhdGVkIGludGVydmFsIG9yIGB7IGVycm9yIH1gLiBTaGFyZWQgYnkgdGhlIHRpbWVzZXJpZXMgcmVwb3J0IHJvdXRlcyBzbyB0aGVcbiAqIGRlZmF1bHQgKyBhbGxvdy1saXN0ICsgZXJyb3IgbWVzc2FnZSBsaXZlIGluIG9uZSBwbGFjZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgaW50ZXJ2YWwgPSBwYXJzZVJlcG9ydEludGVydmFsKHJlcS5xdWVyeSk7XG4gKiBpZiAodHlwZW9mIGludGVydmFsID09PSAnb2JqZWN0JykgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgaW50ZXJ2YWwuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVwb3J0SW50ZXJ2YWwocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVwb3J0SW50ZXJ2YWwgfCB7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IGludGVydmFsID0gU3RyaW5nKHF1ZXJ5LmludGVydmFsID8/ICd3ZWVrJyk7XG4gIGlmICghUkVQT1JUX0lOVEVSVkFMUy5pbmNsdWRlcyhpbnRlcnZhbCBhcyBSZXBvcnRJbnRlcnZhbCkpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYGludGVydmFsIG11c3QgYmUgb25lIG9mOiAke1JFUE9SVF9JTlRFUlZBTFMuam9pbignLCAnKX1gIH07XG4gIH1cbiAgcmV0dXJuIGludGVydmFsIGFzIFJlcG9ydEludGVydmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgYD9mcm9tPSZ0bz1gIGRhdGUgcmFuZ2Ugd2l0aCBkZWZhdWx0cyBvZiBcIjMwIGRheXMgYWdvIOKGkiBub3dcIi5cbiAqIFJlamVjdHMgbm9uLXN0cmluZyBpbnB1dHMgKEV4cHJlc3MncyBwYXJzZXIgY2FuIHByb2R1Y2Ugc3RyaW5nW10gZm9yXG4gKiByZXBlYXRlZCBrZXlzKSwgaW52YWxpZCBJU08gdGltZXN0YW1wcywgYW5kIGludmVydGVkIHJhbmdlcy5cbiAqXG4gKiBSZXR1cm5zIGVpdGhlciBgeyBmcm9tLCB0byB9YCBJU08gc3RyaW5ncyBvciBgeyBlcnJvciB9YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmFuZ2UgPSBwYXJzZURhdGVSYW5nZShyZXEucXVlcnkpO1xuICogaWYgKCdlcnJvcicgaW4gcmFuZ2UpIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsIHJhbmdlLmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCByb3dzID0gYXdhaXQgc3ZjLmxpc3QocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlUmFuZ2UoXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBtYXhSYW5nZU1zPzogbnVtYmVyOyBkZWZhdWx0RGF5c0JhY2s/OiBudW1iZXIgfSA9IHt9LFxuKTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgeyBtYXhSYW5nZU1zLCBkZWZhdWx0RGF5c0JhY2sgPSAzMCB9ID0gb3B0aW9ucztcblxuICBjb25zdCByYXdGcm9tID0gcXVlcnkuZnJvbTtcbiAgY29uc3QgcmF3VG8gPSBxdWVyeS50bztcblxuICBpZiAocmF3RnJvbSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdGcm9tICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuICBpZiAocmF3VG8gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmF3VG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZyb21TdHIgPSByYXdGcm9tID8/IG5ldyBEYXRlKG5vdyAtIGRlZmF1bHREYXlzQmFjayAqIDI0ICogNjAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHRvU3RyID0gcmF3VG8gPz8gbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpO1xuXG4gIGNvbnN0IGZyb21NcyA9IERhdGUucGFyc2UoZnJvbVN0cik7XG4gIGNvbnN0IHRvTXMgPSBEYXRlLnBhcnNlKHRvU3RyKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZnJvbU1zKSkgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b01zKSkgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgaXMgbm90IGEgdmFsaWQgSVNPIHRpbWVzdGFtcCcgfTtcbiAgaWYgKGZyb21NcyA+IHRvTXMpIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBlYXJsaWVyIHRoYW4gXCJ0b1wiJyB9O1xuICBpZiAobWF4UmFuZ2VNcyAhPT0gdW5kZWZpbmVkICYmIHRvTXMgLSBmcm9tTXMgPiBtYXhSYW5nZU1zKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBEYXRlIHJhbmdlIGV4Y2VlZHMgbWF4aW11bSBvZiAke01hdGguZmxvb3IobWF4UmFuZ2VNcyAvICgyNCAqIDYwICogNjAgKiAxMDAwKSl9IGRheXNgIH07XG4gIH1cblxuICByZXR1cm4geyBmcm9tOiBmcm9tU3RyLCB0bzogdG9TdHIgfTtcbn1cbiJdfQ==
|