@pipeline-builder/api-core 4.1.19 → 4.1.21
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/lib/helpers/access-helpers.d.ts +50 -2
- package/lib/helpers/access-helpers.js +44 -3
- package/lib/helpers/index.d.ts +1 -1
- package/lib/helpers/index.js +2 -2
- package/lib/middleware/ask-provenance.d.ts +53 -0
- package/lib/middleware/ask-provenance.js +26 -0
- package/lib/middleware/index.d.ts +1 -0
- package/lib/middleware/index.js +2 -1
- package/lib/services/http-client.d.ts +0 -1
- package/lib/services/http-client.js +5 -7
- package/lib/services/index.d.ts +2 -2
- package/lib/services/index.js +3 -3
- package/lib/services/remote-audit-client.d.ts +1 -15
- package/lib/services/remote-audit-client.js +2 -295
- package/lib/services/s3-client.d.ts +54 -0
- package/lib/services/s3-client.js +106 -0
- package/lib/types/ask-proposals.d.ts +269 -0
- package/lib/types/ask-proposals.js +308 -0
- package/lib/types/compliance-exemption.d.ts +24 -0
- package/lib/types/compliance-exemption.js +4 -0
- package/lib/types/index.d.ts +5 -2
- package/lib/types/index.js +5 -2
- package/lib/types/remote-audit-actions.d.ts +23 -0
- package/lib/types/remote-audit-actions.js +305 -0
- package/lib/types/wire-vocabulary.d.ts +2 -2
- package/lib/types/wire-vocabulary.js +3 -3
- package/lib/utils/date.d.ts +19 -0
- package/lib/utils/date.js +22 -0
- package/lib/utils/dsse.d.ts +32 -0
- package/lib/utils/dsse.js +55 -0
- package/lib/utils/index.d.ts +3 -1
- package/lib/utils/index.js +4 -2
- package/lib/utils/response.d.ts +34 -4
- package/lib/utils/response.js +30 -5
- package/lib/utils/sensitive-patterns.js +17 -1
- package/lib/validation/index.d.ts +2 -2
- package/lib/validation/index.js +3 -3
- package/package.json +13 -1
package/lib/utils/index.js
CHANGED
|
@@ -5,7 +5,7 @@ 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 { sendSuccess, sendError, sendQuotaExceeded, sendPaginatedNested, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams,
|
|
8
|
+
export { sendSuccess, sendError, sendQuotaExceeded, sendPaginatedNested, paginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, } from './response.js';
|
|
9
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';
|
|
@@ -16,6 +16,7 @@ export * from './identity.js';
|
|
|
16
16
|
// leaking them to every service.
|
|
17
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 * from './date.js';
|
|
19
20
|
export { resetSupportAliasesCache, getPrimarySupportAlias, getAllSupportAliases, resolveRecipientAlias, DEFAULT_SUPPORT_ALIAS, } from './alias-resolver.js';
|
|
20
21
|
export * from './concurrency.js';
|
|
21
22
|
export * from './audit.js';
|
|
@@ -23,6 +24,7 @@ export { getDefaultKeyProvider, resetDefaultKeyProvider, setKeyProvider, encrypt
|
|
|
23
24
|
export * from './secret-rotation.js';
|
|
24
25
|
export { setCounterEmitter, resetCounterEmitter, emitCounter, } from './metric-emitter.js';
|
|
25
26
|
export * from './aws-scrub.js';
|
|
27
|
+
export { extractPredicate, SPDX_PREDICATE_TYPE, } from './dsse.js';
|
|
26
28
|
export { maskLine, looksSensitive, REDACTED, SENSITIVE_VALUE_PATTERNS, } from './sensitive-patterns.js';
|
|
27
29
|
export { isPrivateAddress, assertSafeUrl, safeFetch, } from './ssrf.js';
|
|
28
30
|
export * from './env.js';
|
|
@@ -30,4 +32,4 @@ export * from './service-registry.js';
|
|
|
30
32
|
export * from './retention.js';
|
|
31
33
|
export * from './compliance-attributes.js';
|
|
32
34
|
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,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBRVosTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFFZCxjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIscUJBQXFCLEdBR3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixjQUFjLEVBRWQsZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLHlFQUF5RTtBQUN6RSxtRUFBbUU7QUFDbkUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxpQ0FBaUM7QUFDakMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixjQUFjLEVBQ2QsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLE1BQU0sVUFBVSxDQUFDO0FBS2xCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEVBR2YsY0FBYyxFQUNkLGNBQWMsRUFHZCxvQkFBb0IsR0FDckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLFdBQVcsR0FDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLFFBQVEsRUFDUixjQUFjLEVBQ2QsUUFBUSxFQUNSLHdCQUF3QixHQUN6QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFNBQVMsR0FFVixNQUFNLFdBQVcsQ0FBQztBQUNuQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixZQUFZLEVBQ1osZUFBZSxFQUNmLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUdyQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHNldExvZ0NvbnRleHRQcm92aWRlcixcbiAgcmVkYWN0U2Vuc2l0aXZlLFxuICBjcmVhdGVMb2dnZXIsXG4gIHR5cGUgTG9nZ2VyLFxuICBsb2dnZXIsXG4gIGRlZmF1bHQsXG59IGZyb20gJy4vbG9nZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWtleS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyZS1jb21wYXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jhc2gtaGFuZGxlcnMuanMnO1xuZXhwb3J0IHtcbiAgc2VuZFN1Y2Nlc3MsXG4gIHNlbmRFcnJvcixcbiAgc2VuZFF1b3RhRXhjZWVkZWQsXG4gIHNlbmRQYWdpbmF0ZWROZXN0ZWQsXG4gIHBhZ2luYXRpb25NZXRhLFxuICB0eXBlIFBhZ2luYXRpb25NZXRhLFxuICBleHRyYWN0RGJFcnJvcixcbiAgZXJyb3JNZXNzYWdlLFxuICBzZW5kQmFkUmVxdWVzdCxcbiAgc2VuZEludGVybmFsRXJyb3IsXG4gIHBhcnNlUGFnaW5hdGlvblBhcmFtcyxcbiAgdHlwZSBQYWdpbmF0aW9uUGFyYW1zLFxuICB0eXBlIFNvcnRQYXJhbXMsXG59IGZyb20gJy4vcmVzcG9uc2UuanMnO1xuZXhwb3J0IHtcbiAgZ2V0UGFyYW0sXG4gIHBhcnNlUXVlcnlJbnQsXG4gIHBhcnNlUXVlcnlTdHJpbmcsXG4gIHBhcnNlT3B0aW9uYWxEYXRlLFxuICBwYXJzZVBvc2l0aXZlSW50LFxuICBwYXJzZVF1ZXJ5SW50Q2xhbXBlZCxcbiAgcGFyc2VQYWdlLFxuICB2YWxpZGF0ZUJ1bGtBcnJheSxcbiAgcGFyc2VSZXBvcnRJbnRlcnZhbCxcbiAgcGFyc2VEYXRlUmFuZ2UsXG4gIHR5cGUgUGFnZSxcbiAgUkVQT1JUX0lOVEVSVkFMUyxcbn0gZnJvbSAnLi9wYXJhbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaWRlbnRpdHkuanMnO1xuLy8gSldLIHByaW1pdGl2ZXMuIFBsYXRmb3JtIElTIHRoZSB0b2tlbiBzaWduZXIsIHNvIGl0IGxlZ2l0aW1hdGVseSBuZWVkc1xuLy8gYHB1YmxpY0p3a0Zyb21gICsgYGRlclRvSm9zZVNpZ25hdHVyZWAgZnJvbSB0aGUgcGFja2FnZSBzdXJmYWNlLlxuLy8gYGp3a1RodW1icHJpbnRgIGFuZCBgcHVibGljS2V5RnJvbUp3a2AgYXJlIGtpZC1kZXJpdmF0aW9uL3ZlcmlmaWNhdGlvblxuLy8gcGx1bWJpbmcgdXNlZCBvbmx5IGluc2lkZSBhcGktY29yZSDigJQgZGVlcC1pbXBvcnQgdGhlbSBmcm9tIHRoZXJlIGluc3RlYWQgb2Zcbi8vIGxlYWtpbmcgdGhlbSB0byBldmVyeSBzZXJ2aWNlLlxuZXhwb3J0IHtcbiAgVVNFUl9UT0tFTl9BTEdPUklUSE0sXG4gIFVTRVJfVE9LRU5fQ1VSVkUsXG4gIEpXS1NfUEFUSCxcbiAgZGVjb2RlSnd0SGVhZGVyLFxuICBpc0p3a3NEb2N1bWVudCxcbiAgcHVibGljSndrRnJvbSxcbiAgZGVyVG9Kb3NlU2lnbmF0dXJlLFxuICBlbmNvZGVKd3NTaWduaW5nSW5wdXQsXG4gIGNvbXBhY3RKd3MsXG59IGZyb20gJy4vandrLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUHVibGljSndrLFxuICBKd2tzRG9jdW1lbnQsXG59IGZyb20gJy4vandrLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS5qcyc7XG5leHBvcnQge1xuICByZXNldFN1cHBvcnRBbGlhc2VzQ2FjaGUsXG4gIGdldFByaW1hcnlTdXBwb3J0QWxpYXMsXG4gIGdldEFsbFN1cHBvcnRBbGlhc2VzLFxuICByZXNvbHZlUmVjaXBpZW50QWxpYXMsXG4gIERFRkFVTFRfU1VQUE9SVF9BTElBUyxcbn0gZnJvbSAnLi9hbGlhcy1yZXNvbHZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmN1cnJlbmN5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXVkaXQuanMnO1xuZXhwb3J0IHtcbiAgZ2V0RGVmYXVsdEtleVByb3ZpZGVyLFxuICByZXNldERlZmF1bHRLZXlQcm92aWRlcixcbiAgc2V0S2V5UHJvdmlkZXIsXG4gIGVuY3J5cHRTZWNyZXQsXG4gIGRlY3J5cHRTZWNyZXQsXG4gIGlzRW5jcnlwdGVkQmxvYixcbiAgdHlwZSBFbmNyeXB0ZWRCbG9iLFxuICB0eXBlIEtleVByb3ZpZGVyLFxuICBFbnZLZXlQcm92aWRlcixcbiAgS21zS2V5UHJvdmlkZXIsXG4gIHR5cGUgUGVyT3JnS21zQ29uZmlnLFxuICB0eXBlIFBlck9yZ0ttc1Jlc29sdmVyLFxuICBQZXJPcmdLbXNLZXlQcm92aWRlcixcbn0gZnJvbSAnLi9zZWNyZXQtZW5jcnlwdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3JldC1yb3RhdGlvbi5qcyc7XG5leHBvcnQge1xuICBzZXRDb3VudGVyRW1pdHRlcixcbiAgcmVzZXRDb3VudGVyRW1pdHRlcixcbiAgZW1pdENvdW50ZXIsXG59IGZyb20gJy4vbWV0cmljLWVtaXR0ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hd3Mtc2NydWIuanMnO1xuZXhwb3J0IHtcbiAgZXh0cmFjdFByZWRpY2F0ZSxcbiAgU1BEWF9QUkVESUNBVEVfVFlQRSxcbn0gZnJvbSAnLi9kc3NlLmpzJztcbmV4cG9ydCB7XG4gIG1hc2tMaW5lLFxuICBsb29rc1NlbnNpdGl2ZSxcbiAgUkVEQUNURUQsXG4gIFNFTlNJVElWRV9WQUxVRV9QQVRURVJOUyxcbn0gZnJvbSAnLi9zZW5zaXRpdmUtcGF0dGVybnMuanMnO1xuZXhwb3J0IHtcbiAgaXNQcml2YXRlQWRkcmVzcyxcbiAgYXNzZXJ0U2FmZVVybCxcbiAgc2FmZUZldGNoLFxuICB0eXBlIFNhZmVGZXRjaFJlc3BvbnNlLFxufSBmcm9tICcuL3NzcmYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmV0ZW50aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcGxpYW5jZS1hdHRyaWJ1dGVzLmpzJztcbmV4cG9ydCB7XG4gIGxlYWRpbmdaZXJvQml0cyxcbiAgcHJvb2ZPZldvcmtIYXNoLFxuICBjaGFsbGVuZ2VLZXksXG4gIGNsYW1wRGlmZmljdWx0eSxcbiAgY3JlYXRlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHBhcnNlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHZlcmlmeVByb29mT2ZXb3JrLFxuICBzb2x2ZVByb29mT2ZXb3JrLFxuICBQT1dfREVGQVVMVF9ESUZGSUNVTFRZLFxuICBQT1dfTUFYX0RJRkZJQ1VMVFksXG4gIFBPV19DSEFMTEVOR0VfVFRMX01TLFxuICB0eXBlIFByb29mT2ZXb3JrQ2hhbGxlbmdlLFxuICB0eXBlIFByb29mT2ZXb3JrU29sdXRpb24sXG59IGZyb20gJy4vcHJvb2Ytb2Ytd29yay5qcyc7XG4iXX0=
|
package/lib/utils/response.d.ts
CHANGED
|
@@ -46,16 +46,46 @@ export declare function sendError(res: Response, statusCode: number, message: st
|
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
48
|
export declare function sendQuotaExceeded(res: Response, quotaType: string, quota: QuotaInfo, resetAt?: string, message?: string): void;
|
|
49
|
+
/** The `pagination` envelope every list route returns. */
|
|
50
|
+
export interface PaginationMeta {
|
|
51
|
+
total: number;
|
|
52
|
+
offset: number;
|
|
53
|
+
limit: number;
|
|
54
|
+
hasMore: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Build the `pagination` envelope for one page.
|
|
58
|
+
*
|
|
59
|
+
* `hasMore` is derived, never hand-computed: `offset + <rows on this page> <
|
|
60
|
+
* total` was THE most-repeated expression in the codebase, and a route that
|
|
61
|
+
* spells it slightly differently reports a phantom next page (or hides a real
|
|
62
|
+
* one) — a paging bug that only shows on the last page, where nobody looks.
|
|
63
|
+
*
|
|
64
|
+
* `returned` is the row count this page actually carries. It defaults to
|
|
65
|
+
* `limit` because a list route that doesn't say otherwise returns a full page;
|
|
66
|
+
* pass it for a route whose page can be shorter than its limit, and for an
|
|
67
|
+
* unpaged "everything" answer (which reports `limit = total`).
|
|
68
|
+
*/
|
|
69
|
+
export declare function paginationMeta(options: {
|
|
70
|
+
total: number;
|
|
71
|
+
offset: number;
|
|
72
|
+
limit: number;
|
|
73
|
+
returned?: number;
|
|
74
|
+
}): PaginationMeta;
|
|
49
75
|
/**
|
|
50
76
|
* Send a paginated list response with the items nested under a named key.
|
|
51
77
|
* Use when the API contract is `{ <key>: [...], pagination: {...} }`
|
|
52
78
|
* (the dominant shape across api/* services).
|
|
53
79
|
*
|
|
80
|
+
* `hasMore` is OPTIONAL and defaults to `offset + data.length < total` — the
|
|
81
|
+
* expression every caller used to write out by hand. Pass it only when the
|
|
82
|
+
* route knows something the row count does not (a cursor page, or a window
|
|
83
|
+
* fetched with `limit + 1` to peek ahead). Without a `total` there is nothing to
|
|
84
|
+
* derive from, so it falls back to "a cursor was issued".
|
|
85
|
+
*
|
|
54
86
|
* @example
|
|
55
87
|
* ```typescript
|
|
56
|
-
* sendPaginatedNested(res, 'pipelines', items, {
|
|
57
|
-
* total: 50, limit: 25, offset: 0, hasMore: true,
|
|
58
|
-
* });
|
|
88
|
+
* sendPaginatedNested(res, 'pipelines', items, { total: 50, limit: 25, offset: 0 });
|
|
59
89
|
* // → { pipelines: [...], pagination: { total: 50, limit: 25, offset: 0, hasMore: true } }
|
|
60
90
|
* ```
|
|
61
91
|
*/
|
|
@@ -63,7 +93,7 @@ export declare function sendPaginatedNested<T>(res: Response, dataKey: string, d
|
|
|
63
93
|
total?: number;
|
|
64
94
|
limit: number;
|
|
65
95
|
offset: number;
|
|
66
|
-
hasMore
|
|
96
|
+
hasMore?: boolean;
|
|
67
97
|
nextCursor?: string;
|
|
68
98
|
statusCode?: number;
|
|
69
99
|
}): void;
|
package/lib/utils/response.js
CHANGED
|
@@ -99,16 +99,37 @@ export function sendQuotaExceeded(res, quotaType, quota, resetAt, message) {
|
|
|
99
99
|
}
|
|
100
100
|
sendError(res, 429, message ?? `${quotaType} quota exceeded (${quota.used}/${quota.limit}). Please try again later.`, ErrorCode.QUOTA_EXCEEDED, { quota });
|
|
101
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Build the `pagination` envelope for one page.
|
|
104
|
+
*
|
|
105
|
+
* `hasMore` is derived, never hand-computed: `offset + <rows on this page> <
|
|
106
|
+
* total` was THE most-repeated expression in the codebase, and a route that
|
|
107
|
+
* spells it slightly differently reports a phantom next page (or hides a real
|
|
108
|
+
* one) — a paging bug that only shows on the last page, where nobody looks.
|
|
109
|
+
*
|
|
110
|
+
* `returned` is the row count this page actually carries. It defaults to
|
|
111
|
+
* `limit` because a list route that doesn't say otherwise returns a full page;
|
|
112
|
+
* pass it for a route whose page can be shorter than its limit, and for an
|
|
113
|
+
* unpaged "everything" answer (which reports `limit = total`).
|
|
114
|
+
*/
|
|
115
|
+
export function paginationMeta(options) {
|
|
116
|
+
const { total, offset, limit, returned } = options;
|
|
117
|
+
return { total, offset, limit, hasMore: offset + (returned ?? limit) < total };
|
|
118
|
+
}
|
|
102
119
|
/**
|
|
103
120
|
* Send a paginated list response with the items nested under a named key.
|
|
104
121
|
* Use when the API contract is `{ <key>: [...], pagination: {...} }`
|
|
105
122
|
* (the dominant shape across api/* services).
|
|
106
123
|
*
|
|
124
|
+
* `hasMore` is OPTIONAL and defaults to `offset + data.length < total` — the
|
|
125
|
+
* expression every caller used to write out by hand. Pass it only when the
|
|
126
|
+
* route knows something the row count does not (a cursor page, or a window
|
|
127
|
+
* fetched with `limit + 1` to peek ahead). Without a `total` there is nothing to
|
|
128
|
+
* derive from, so it falls back to "a cursor was issued".
|
|
129
|
+
*
|
|
107
130
|
* @example
|
|
108
131
|
* ```typescript
|
|
109
|
-
* sendPaginatedNested(res, 'pipelines', items, {
|
|
110
|
-
* total: 50, limit: 25, offset: 0, hasMore: true,
|
|
111
|
-
* });
|
|
132
|
+
* sendPaginatedNested(res, 'pipelines', items, { total: 50, limit: 25, offset: 0 });
|
|
112
133
|
* // → { pipelines: [...], pagination: { total: 50, limit: 25, offset: 0, hasMore: true } }
|
|
113
134
|
* ```
|
|
114
135
|
*/
|
|
@@ -118,7 +139,11 @@ export function sendPaginatedNested(res, dataKey, data, options) {
|
|
|
118
139
|
return;
|
|
119
140
|
}
|
|
120
141
|
const { statusCode = 200, total, limit, offset, hasMore, nextCursor } = options;
|
|
121
|
-
const
|
|
142
|
+
const resolved = hasMore
|
|
143
|
+
?? (total !== undefined
|
|
144
|
+
? paginationMeta({ total, offset, limit, returned: data.length }).hasMore
|
|
145
|
+
: nextCursor !== undefined);
|
|
146
|
+
const pagination = { limit, offset, hasMore: resolved };
|
|
122
147
|
if (total !== undefined)
|
|
123
148
|
pagination.total = total;
|
|
124
149
|
if (nextCursor)
|
|
@@ -249,4 +274,4 @@ export function parseSort(query) {
|
|
|
249
274
|
export function parsePaginationParams(query) {
|
|
250
275
|
return { ...parsePage(query, { def: 10, max: MAX_PAGE_LIMIT }), ...parseSort(query) };
|
|
251
276
|
}
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWEsRUFDYixVQUFVLEdBQVcsR0FBRyxFQUN4QixJQUFRLEVBQ1IsT0FBZ0I7SUFFaEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FLVjtRQUNGLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVTtLQUNYLENBQUM7SUFFRixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FB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QUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgUXVvdGFJbmZvIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IE1BWF9QQUdFX0xJTUlUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5pbXBvcnQgeyBwYXJzZVBhZ2UgfSBmcm9tICcuL3BhcmFtcy5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVzcG9uc2UnKTtcblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIHN1Y2Nlc3MgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gc3RhdHVzQ29kZSAtIEhUVFAgc3RhdHVzIGNvZGUgKGRlZmF1bHQ6IDIwMClcbiAqIEBwYXJhbSBkYXRhIC0gUmVzcG9uc2UgZGF0YVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBzdWNjZXNzIG1lc3NhZ2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHsgcGx1Z2luOiBwbHVnaW5EYXRhIH0pO1xuICogc2VuZFN1Y2Nlc3MocmVzLCAyMDEsIHsgaWQ6IG5ld0lkIH0sICdSZXNvdXJjZSBjcmVhdGVkJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRTdWNjZXNzPFQ+KFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIgPSAyMDAsXG4gIGRhdGE/OiBULFxuICBtZXNzYWdlPzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGlmIChyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICBsb2dnZXIud2FybignQXR0ZW1wdGVkIHRvIHNlbmQgc3VjY2VzcyBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IHRydWU7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIGRhdGE/OiBUO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICB9O1xuXG4gIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmIChtZXNzYWdlKSB7XG4gICAgcmVzcG9uc2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIH1cblxuICByZXMuc3RhdHVzKHN0YXR1c0NvZGUpLmpzb24ocmVzcG9uc2UpO1xufVxuXG4vKipcbiAqIFNlbmQgYSBzdGFuZGFyZGl6ZWQgZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gc3RhdHVzQ29kZSAtIEhUVFAgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIGNvZGUgLSBFcnJvciBjb2RlIGZyb20gRXJyb3JDb2RlIGVudW1cbiAqIEBwYXJhbSBkZXRhaWxzIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBkZXRhaWxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRFcnJvcihyZXMsIDQwNCwgJ1BsdWdpbiBub3QgZm91bmQnLCBFcnJvckNvZGUuTk9UX0ZPVU5EKTtcbiAqIHNlbmRFcnJvcihyZXMsIDQwMCwgJ0ludmFsaWQgaW5wdXQnLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiwgeyBmaWVsZDogJ25hbWUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBjb2RlPzogRXJyb3JDb2RlIHwgc3RyaW5nLFxuICBkZXRhaWxzPzogdW5rbm93bixcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIGVycm9yIGFmdGVyIGhlYWRlcnMgYWxyZWFkeSBzZW50JywgeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlOiB7XG4gICAgc3VjY2VzczogZmFsc2U7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBjb2RlPzogc3RyaW5nO1xuICAgIGRldGFpbHM/OiB1bmtub3duO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIHN0YXR1c0NvZGUsXG4gICAgbWVzc2FnZSxcbiAgfTtcblxuICBpZiAoY29kZSkge1xuICAgIHJlc3BvbnNlLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgaWYgKGRldGFpbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3BvbnNlLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcXVvdGEgZXhjZWVkZWQgZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gcXVvdGFUeXBlIC0gVHlwZSBvZiBxdW90YSBleGNlZWRlZFxuICogQHBhcmFtIHF1b3RhIC0gQ3VycmVudCBxdW90YSBpbmZvcm1hdGlvblxuICogQHBhcmFtIHJlc2V0QXQgLSBJU08gdGltZXN0YW1wIHdoZW4gcXVvdGEgcmVzZXRzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRRdW90YUV4Y2VlZGVkKHJlcywgJ2FwaUNhbGxzJywgeyB0eXBlOiAnYXBpQ2FsbHMnLCBsaW1pdDogMTAwMDAsIHVzZWQ6IDEwMDAwLCByZW1haW5pbmc6IDAgfSwgcmVzZXRBdCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRRdW90YUV4Y2VlZGVkKFxuICByZXM6IFJlc3BvbnNlLFxuICBxdW90YVR5cGU6IHN0cmluZyxcbiAgcXVvdGE6IFF1b3RhSW5mbyxcbiAgcmVzZXRBdD86IHN0cmluZyxcbiAgbWVzc2FnZT86IHN0cmluZyxcbik6IHZvaWQge1xuICBjb25zdCByZXNldERhdGUgPSByZXNldEF0ID8gbmV3IERhdGUocmVzZXRBdCkgOiBuZXcgRGF0ZSgpO1xuICBjb25zdCByZXNldEluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChyZXNldERhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKSk7XG5cbiAgLy8gR3VhcmQgbGlrZSB0aGUgc2libGluZyBoZWxwZXJzOiBgc2V0SGVhZGVyYCB0aHJvd3Mgc3luY2hyb25vdXNseSBvbmNlIHRoZVxuICAvLyByZXNwb25zZSBoYXMgYmVlbiBzZW50LCBzbyBza2lwIHRoZSBxdW90YSBoZWFkZXJzIChhbmQgbGV0IGBzZW5kRXJyb3JgIG5vLW9wKVxuICAvLyBpbnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBoYW5kbGVyIG9uIGFuIGFscmVhZHktY29tbWl0dGVkIHJlc3BvbnNlLlxuICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JldHJ5LUFmdGVyJywgcmVzZXRJbik7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1MaW1pdCcsIHF1b3RhLmxpbWl0KTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVVzZWQnLCBxdW90YS51c2VkKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlbWFpbmluZycsIE1hdGgubWF4KDAsIHF1b3RhLnJlbWFpbmluZykpO1xuXG4gICAgaWYgKHJlc2V0QXQpIHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtUmVzZXQnLCByZXNldEF0KTtcbiAgICB9XG4gIH1cblxuICBzZW5kRXJyb3IoXG4gICAgcmVzLFxuICAgIDQyOSxcbiAgICBtZXNzYWdlID8/IGAke3F1b3RhVHlwZX0gcXVvdGEgZXhjZWVkZWQgKCR7cXVvdGEudXNlZH0vJHtxdW90YS5saW1pdH0pLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLmAsXG4gICAgRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVELFxuICAgIHsgcXVvdGEgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcGFnaW5hdGVkIGxpc3QgcmVzcG9uc2Ugd2l0aCB0aGUgaXRlbXMgbmVzdGVkIHVuZGVyIGEgbmFtZWQga2V5LlxuICogVXNlIHdoZW4gdGhlIEFQSSBjb250cmFjdCBpcyBgeyA8a2V5PjogWy4uLl0sIHBhZ2luYXRpb246IHsuLi59IH1gXG4gKiAodGhlIGRvbWluYW50IHNoYXBlIGFjcm9zcyBhcGkvKiBzZXJ2aWNlcykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRQYWdpbmF0ZWROZXN0ZWQocmVzLCAncGlwZWxpbmVzJywgaXRlbXMsIHtcbiAqICAgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCwgaGFzTW9yZTogdHJ1ZSxcbiAqIH0pO1xuICogLy8g4oaSIHsgcGlwZWxpbmVzOiBbLi4uXSwgcGFnaW5hdGlvbjogeyB0b3RhbDogNTAsIGxpbWl0OiAyNSwgb2Zmc2V0OiAwLCBoYXNNb3JlOiB0cnVlIH0gfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUGFnaW5hdGVkTmVzdGVkPFQ+KFxuICByZXM6IFJlc3BvbnNlLFxuICBkYXRhS2V5OiBzdHJpbmcsXG4gIGRhdGE6IFRbXSxcbiAgb3B0aW9uczoge1xuICAgIHRvdGFsPzogbnVtYmVyO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgICBuZXh0Q3Vyc29yPzogc3RyaW5nO1xuICAgIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIH0sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBwYWdpbmF0ZWQgcmVzcG9uc2UgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyBzdGF0dXNDb2RlID0gMjAwLCB0b3RhbCwgbGltaXQsIG9mZnNldCwgaGFzTW9yZSwgbmV4dEN1cnNvciB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGFnaW5hdGlvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGxpbWl0LCBvZmZzZXQsIGhhc01vcmUgfTtcbiAgaWYgKHRvdGFsICE9PSB1bmRlZmluZWQpIHBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcbiAgaWYgKG5leHRDdXJzb3IpIHBhZ2luYXRpb24ubmV4dEN1cnNvciA9IG5leHRDdXJzb3I7XG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbih7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIGRhdGE6IHsgW2RhdGFLZXldOiBkYXRhLCBwYWdpbmF0aW9uIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNRTFNUQVRFOiBleGFjdGx5IGZpdmUgY2hhcmFjdGVycywgZGlnaXRzIGFuZCB1cHBlcmNhc2UgTGF0aW4gbGV0dGVyc1xuICogKGUuZy4gYDIzNTA1YCB1bmlxdWVfdmlvbGF0aW9uLCBgNDI2MDFgIHN5bnRheF9lcnJvcikuIE5vZGUncyBvd24gc29ja2V0IGFuZFxuICogRE5TIGVycm9ycyB1c2UgdGhlIHNhbWUgYC5jb2RlYCBwcm9wZXJ0eSBidXQgc3BlbGwgaXQgZGlmZmVyZW50bHlcbiAqIChgRUNPTk5SRVNFVGAsIGBFVElNRURPVVRgLCBgRU5PVEZPVU5EYCksIHdoaWNoIGlzIHdoYXQgdGhpcyB0ZWxscyBhcGFydC5cbiAqL1xuY29uc3QgU1FMU1RBVEVfUEFUVEVSTiA9IC9eWzAtOUEtWl17NX0kLztcblxuLyoqXG4gKiBMZW5ndGggYWxvbmUgaXMgbm90IGVub3VnaDogYEVQSVBFYCBhbmQgYEUyQklHYCBhcmUgZml2ZSB1cHBlcmNhc2UgY2hhcmFjdGVyc1xuICogYW5kIHdvdWxkIHBhc3MgYXMgU1FMU1RBVEVzLiBFdmVyeSBsaWJ1di9Ob2RlIGVycm5vIHN0YXJ0cyB3aXRoIGBFYCwgYW5kXG4gKiBQb3N0Z3JlcyBkZWZpbmVzIG5vIGVycm9yIGNsYXNzIHRoYXQgZG9lcyDigJQgaXRzIGNsYXNzZXMgYXJlIDAwLTBaLCAyMC0yRixcbiAqIDM0LTNGLCA0MC00NCwgNTMtNTgsIDcyLCBGMCwgSFYsIFAwIGFuZCBYWCAoc2VlIHRoZSBzZXJ2ZXIncyBlcnJjb2Rlcy50eHQpLlxuICogU28gYSBsZWFkaW5nIGBFYCBzZXR0bGVzIGl0LlxuICovXG5jb25zdCBOT0RFX0VSUk5PX1BBVFRFUk4gPSAvXkUvO1xuXG4vKipcbiAqIEV4dHJhY3QgZGF0YWJhc2UgZXJyb3IgZGV0YWlscyBmb3IgbG9nZ2luZy9yZXNwb25zZS5cbiAqXG4gKiBFeHRyYWN0cyBQb3N0Z3JlU1FMIGVycm9yIGNvZGVzLCBkZXRhaWxzLCBoaW50cywgYW5kIGNvbnN0cmFpbnQgbmFtZXNcbiAqIGZyb20gZGF0YWJhc2UgZXJyb3JzIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogT25seSBhIGdlbnVpbmUgUG9zdGdyZXMgZXJyb3IgeWllbGRzIGEgYGRiQ29kZWA6IHJlcG9ydGluZyBhbnkgYC5jb2RlYCBhcyBvbmVcbiAqIHdvdWxkIGxvZyBhIHRyYW5zcG9ydCBmYWlsdXJlIChgRUNPTk5SRVNFVGAgd2hlbiB0aGUgcG9vbGVyIGRyb3BzIG91dCBvZiB0aGVcbiAqIFNlcnZpY2UgZW5kcG9pbnRzLCBzYXkpIGFzIGB7XCJkYlwiOntcImRiQ29kZVwiOlwiRUNPTk5SRVNFVFwifX1gIGFuZCBzZW5kIHJlYWRlcnNcbiAqIGh1bnRpbmcgdGhyb3VnaCBjbGVhbiBQb3N0Z3JlcyBsb2dzLiBUaGUgdHJhbnNwb3J0IGNvZGUgaXMgbm90IGxvc3Qg4oCUIGNhbGxlcnMgbG9nIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBpdHNlbGYgYWxvbmdzaWRlIHRoZXNlIGRldGFpbHMg4oCUIGl0IGp1c3Qgc3RvcHMgY2xhaW1pbmcgdG8gYmUgYSBEQiBmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvYmplY3QgZnJvbSBkYXRhYmFzZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV4dHJhY3RlZCBlcnJvciBkZXRhaWxzOyBge31gIHdoZW4gYGVycm9yYCBpcyBub3QgYVxuICogICBQb3N0Z3JlcyBlcnJvciAobm8gU1FMU1RBVEUgYW5kIG5vbmUgb2YgdGhlIHBnLXNwZWNpZmljIGZpZWxkcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgZGIuaW5zZXJ0KHBsdWdpbnMpLnZhbHVlcyhuZXdQbHVnaW4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc3QgZGJEZXRhaWxzID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNTAwLCAnRGF0YWJhc2UgZXJyb3InLCBFcnJvckNvZGUuREFUQUJBU0VfRVJST1IsIGRiRGV0YWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYkVycm9yKGVycm9yOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBEcml6emxlIE9STSB3cmFwcyB0aGUgb3JpZ2luYWwgcGcgZXJyb3IgaW4gZXJyb3IuY2F1c2Ug4oCUXG4gIC8vIGNoZWNrIHRoZSBjYXVzZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGVycm9yIGl0c2VsZi5cbiAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHNvdXJjZSA9IChlcnIuY2F1c2UgJiYgdHlwZW9mIGVyci5jYXVzZSA9PT0gJ29iamVjdCcgPyBlcnIuY2F1c2UgOiBlcnIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc291cmNlLmNvZGUgPT09ICdzdHJpbmcnXG4gICAgJiYgU1FMU1RBVEVfUEFUVEVSTi50ZXN0KHNvdXJjZS5jb2RlKVxuICAgICYmICFOT0RFX0VSUk5PX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSkpIHtcbiAgICBkZXRhaWxzLmRiQ29kZSA9IHNvdXJjZS5jb2RlO1xuICB9XG4gIGlmIChzb3VyY2UuZGV0YWlsKSBkZXRhaWxzLmRiRGV0YWlsID0gc291cmNlLmRldGFpbDtcbiAgaWYgKHNvdXJjZS5oaW50KSBkZXRhaWxzLmRiSGludCA9IHNvdXJjZS5oaW50O1xuICBpZiAoc291cmNlLmNvbnN0cmFpbnQpIGRldGFpbHMuY29uc3RyYWludCA9IHNvdXJjZS5jb25zdHJhaW50O1xuICBpZiAoc291cmNlLnRhYmxlKSBkZXRhaWxzLnRhYmxlID0gc291cmNlLnRhYmxlO1xuICBpZiAoc291cmNlLmNvbHVtbikgZGV0YWlscy5jb2x1bW4gPSBzb3VyY2UuY29sdW1uO1xuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vLyBDb252ZW5pZW5jZSBoZWxwZXJzIChzaGFyZWQgYWNyb3NzIHBsdWdpbiwgcGlwZWxpbmUsIHF1b3RhIHNlcnZpY2VzKVxuXG4vKipcbiAqIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gdW5rbm93biBjYXRjaCB2YWx1ZS5cbiAqXG4gKiBGYWxscyBiYWNrIGJleW9uZCBgLm1lc3NhZ2VgIGJlY2F1c2Ugc2V2ZXJhbCBjb21tb24gTm9kZSBlcnJvcnMgY2FycnkgYW5cbiAqIEVNUFRZIGAubWVzc2FnZWA6XG4gKiAgLSBkdWFsLXN0YWNrIChJUHY0K0lQdjYpIGNvbm5lY3QgZmFpbHVyZXMgc3VyZmFjZSBhcyBhbiBgQWdncmVnYXRlRXJyb3JgXG4gKiAgICB3aG9zZSBvd24gbWVzc2FnZSBpcyBibGFuayDigJQgdGhlIGNhdXNlIGxpdmVzIGluIGAuY29kZWAgKGUuZy5cbiAqICAgIGBFQ09OTlJFRlVTRURgL2BFVElNRURPVVRgKSBhbmQvb3IgdGhlIGAuZXJyb3JzW11gIHN1Yi1lcnJvcnM7XG4gKiAgLSByYXcgc29ja2V0IGBFcnJub0V4Y2VwdGlvbmBzIGNhbiBsaWtld2lzZSBjYXJyeSBvbmx5IGEgYC5jb2RlYC5cbiAqIFdpdGhvdXQgdGhpcywgYW4gdW5yZWFjaGFibGUgaW50ZXJuYWwgc2VydmljZSAoZS5nLiBjb21wbGlhbmNlIHN0aWxsXG4gKiBzdGFydGluZykgcHJvZHVjZWQgYmxhbmsgcGVyLWl0ZW0gZXJyb3JzIGluIGJ1bGsgcmVzcG9uc2VzIGFuZCBgZXJyb3I6XCJcImBcbiAqIGluIGxvZ3Mg4oCUIGEgc2lsZW50IGJsYWNrIGJveC4gT3JkZXI6IG1lc3NhZ2Ug4oaSIGNvZGUg4oaSIGpvaW5lZCBzdWItZXJyb3JzIOKGklxuICogZXJyb3IgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgaWYgKGVycm9yLm1lc3NhZ2UpIHJldHVybiBlcnJvci5tZXNzYWdlO1xuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG4gIGlmIChjb2RlKSByZXR1cm4gY29kZTtcblxuICBjb25zdCBpbm5lciA9IChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd25bXSB9KS5lcnJvcnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGlubmVyKSAmJiBpbm5lci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgam9pbmVkID0gaW5uZXIubWFwKGVycm9yTWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJzsgJyk7XG4gICAgaWYgKGpvaW5lZCkgcmV0dXJuIGpvaW5lZDtcbiAgfVxuXG4gIHJldHVybiBlcnJvci5uYW1lIHx8ICdVbmtub3duIGVycm9yJztcbn1cblxuLyoqIFNlbmQgYSA0MDAgYmFkLXJlcXVlc3QgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEJhZFJlcXVlc3QoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZTogRXJyb3JDb2RlIHwgc3RyaW5nID0gRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4pOiB2b2lkIHtcbiAgc2VuZEVycm9yKHJlcywgNDAwLCBtZXNzYWdlLCBjb2RlKTtcbn1cblxuLyoqIFNlbmQgYSA1MDAgaW50ZXJuYWwgZXJyb3IgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEludGVybmFsRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDUwMCwgbWVzc2FnZSwgRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SLCBkZXRhaWxzKTtcbn1cblxuLy8gUGFnaW5hdGlvblxuXG4vKiogQ29tbW9uIHBhZ2luYXRpb24gKyBzb3J0aW5nIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBsaW1pdDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBBIHBhcnNlZCBgP3NvcnRCeT0mc29ydE9yZGVyPWAgKGRlZmF1bHQ6IG5ld2VzdCBmaXJzdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYXJhbXMge1xuICBzb3J0Qnk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbn1cblxuLyoqIFBhcnNlIGA/c29ydEJ5PSZzb3J0T3JkZXI9YDsgZGVmYXVsdHMgdG8gYGNyZWF0ZWRBdGAgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvcnQocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU29ydFBhcmFtcyB7XG4gIGNvbnN0IHNvcnRCeSA9IFN0cmluZyhxdWVyeS5zb3J0QnkgfHwgJ2NyZWF0ZWRBdCcpO1xuICBjb25zdCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID1cbiAgICBTdHJpbmcocXVlcnkuc29ydE9yZGVyIHx8ICdkZXNjJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgcmV0dXJuIHsgc29ydEJ5LCBzb3J0T3JkZXIgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsaXN0LXJvdXRlIHdpbmRvdyArIHNvcnQ6IHtAbGluayBwYXJzZVBhZ2V9IHdpdGggYSBwYWdlIG9mIDEwXG4gKiAoY2FwcGVkIGF0IGBNQVhfUEFHRV9MSU1JVGAsIG9mZnNldCBjYXBwZWQgYXQgYE1BWF9QQUdFX09GRlNFVGAg4oCUIGRlZXAgcGFnaW5nXG4gKiB1c2VzIHRoZSBjdXJzb3IgQVBJKSBwbHVzIHtAbGluayBwYXJzZVNvcnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWdpbmF0aW9uUGFyYW1zKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBhZ2luYXRpb25QYXJhbXMge1xuICByZXR1cm4geyAuLi5wYXJzZVBhZ2UocXVlcnksIHsgZGVmOiAxMCwgbWF4OiBNQVhfUEFHRV9MSU1JVCB9KSwgLi4ucGFyc2VTb3J0KHF1ZXJ5KSB9O1xufVxuIl19
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWEsRUFDYixVQUFVLEdBQVcsR0FBRyxFQUN4QixJQUFRLEVBQ1IsT0FBZ0I7SUFFaEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FLVjtRQUNGLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVTtLQUNYLENBQUM7SUFFRixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixHQUFhLEVBQ2IsVUFBa0IsRUFDbEIsT0FBZSxFQUNmLElBQXlCLEVBQ3pCLE9BQWlCO0lBRWpCLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQU1WO1FBQ0YsT0FBTyxFQUFFLEtBQUs7UUFDZCxVQUFVO1FBQ1YsT0FBTztLQUNSLENBQUM7SUFFRixJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFhLEVBQ2IsU0FBaUIsRUFDakIsS0FBZ0IsRUFDaEIsT0FBZ0IsRUFDaEIsT0FBZ0I7SUFFaEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFbEYsNEVBQTRFO0lBQzVFLGdGQUFnRjtJQUNoRixvRUFBb0U7SUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUNQLEdBQUcsRUFDSCxHQUFHLEVBQ0gsT0FBTyxJQUFJLEdBQUcsU0FBUyxvQkFBb0IsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyw0QkFBNEIsRUFDaEcsU0FBUyxDQUFDLGNBQWMsRUFDeEIsRUFBRSxLQUFLLEVBQUUsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQVVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLE9BQTRFO0lBRTVFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFhLEVBQ2IsT0FBZSxFQUNmLElBQVMsRUFDVCxPQU9DO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQy9FLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxFQUFFLFVBQVUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNoRixNQUFNLFFBQVEsR0FBRyxPQUFPO1dBQ25CLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDckIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ3pFLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDaEMsTUFBTSxVQUFVLEdBQTRCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDakYsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xELElBQUksVUFBVTtRQUFFLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVTtRQUNWLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtLQUN0QyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYztJQUMzQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELDJEQUEyRDtJQUMzRCw2REFBNkQ7SUFDN0QsTUFBTSxHQUFHLEdBQUcsS0FBZ0MsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUE0QixDQUFDO0lBQ3pHLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7SUFFNUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtXQUM5QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztXQUNsQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSTtRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM5QyxJQUFJLE1BQU0sQ0FBQyxVQUFVO1FBQUUsT0FBTyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQzlELElBQUksTUFBTSxDQUFDLEtBQUs7UUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDL0MsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUVsRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsdUVBQXVFO0FBRXZFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWM7SUFDekMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELElBQUksS0FBSyxDQUFDLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFFeEMsTUFBTSxJQUFJLEdBQUksS0FBMkIsQ0FBQyxJQUFJLENBQUM7SUFDL0MsSUFBSSxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdEIsTUFBTSxLQUFLLEdBQUksS0FBZ0MsQ0FBQyxNQUFNLENBQUM7SUFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsR0FBYSxFQUNiLE9BQWUsRUFDZixJQUFJLEdBQXVCLFNBQVMsQ0FBQyxnQkFBZ0I7SUFFckQsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFhLEVBQ2IsT0FBZSxFQUNmLE9BQWlDO0lBRWpDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFrQkQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBOEI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQThCO0lBQ2xFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhSW5mbyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBNQVhfUEFHRV9MSU1JVCB9IGZyb20gJy4uL3ZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMuanMnO1xuaW1wb3J0IHsgcGFyc2VQYWdlIH0gZnJvbSAnLi9wYXJhbXMuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3Jlc3BvbnNlJyk7XG5cbi8qKlxuICogU2VuZCBhIHN0YW5kYXJkaXplZCBzdWNjZXNzIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlIChkZWZhdWx0OiAyMDApXG4gKiBAcGFyYW0gZGF0YSAtIFJlc3BvbnNlIGRhdGFcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgc3VjY2VzcyBtZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAwLCB7IHBsdWdpbjogcGx1Z2luRGF0YSB9KTtcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAxLCB7IGlkOiBuZXdJZCB9LCAnUmVzb3VyY2UgY3JlYXRlZCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kU3VjY2VzczxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyID0gMjAwLFxuICBkYXRhPzogVCxcbiAgbWVzc2FnZT86IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHN1Y2Nlc3MgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnLCB7IHN0YXR1c0NvZGUgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IHtcbiAgICBzdWNjZXNzOiB0cnVlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBkYXRhPzogVDtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgc3RhdHVzQ29kZSxcbiAgfTtcblxuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAobWVzc2FnZSkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSBjb2RlIC0gRXJyb3IgY29kZSBmcm9tIEVycm9yQ29kZSBlbnVtXG4gKiBAcGFyYW0gZGV0YWlscyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGV0YWlsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kRXJyb3IocmVzLCA0MDQsICdQbHVnaW4gbm90IGZvdW5kJywgRXJyb3JDb2RlLk5PVF9GT1VORCk7XG4gKiBzZW5kRXJyb3IocmVzLCA0MDAsICdJbnZhbGlkIGlucHV0JywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsIHsgZmllbGQ6ICduYW1lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEVycm9yKFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZT86IEVycm9yQ29kZSB8IHN0cmluZyxcbiAgZGV0YWlscz86IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBlcnJvciBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSwgbWVzc2FnZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IGZhbHNlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29kZT86IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfSA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIG1lc3NhZ2UsXG4gIH07XG5cbiAgaWYgKGNvZGUpIHtcbiAgICByZXNwb25zZS5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGlmIChkZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxuXG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogU2VuZCBhIHF1b3RhIGV4Y2VlZGVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFR5cGUgb2YgcXVvdGEgZXhjZWVkZWRcbiAqIEBwYXJhbSBxdW90YSAtIEN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSByZXNldEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUXVvdGFFeGNlZWRlZChyZXMsICdhcGlDYWxscycsIHsgdHlwZTogJ2FwaUNhbGxzJywgbGltaXQ6IDEwMDAwLCB1c2VkOiAxMDAwMCwgcmVtYWluaW5nOiAwIH0sIHJlc2V0QXQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUXVvdGFFeGNlZWRlZChcbiAgcmVzOiBSZXNwb25zZSxcbiAgcXVvdGFUeXBlOiBzdHJpbmcsXG4gIHF1b3RhOiBRdW90YUluZm8sXG4gIHJlc2V0QXQ/OiBzdHJpbmcsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVzZXREYXRlID0gcmVzZXRBdCA/IG5ldyBEYXRlKHJlc2V0QXQpIDogbmV3IERhdGUoKTtcbiAgY29uc3QgcmVzZXRJbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgocmVzZXREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpO1xuXG4gIC8vIEd1YXJkIGxpa2UgdGhlIHNpYmxpbmcgaGVscGVyczogYHNldEhlYWRlcmAgdGhyb3dzIHN5bmNocm9ub3VzbHkgb25jZSB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudCwgc28gc2tpcCB0aGUgcXVvdGEgaGVhZGVycyAoYW5kIGxldCBgc2VuZEVycm9yYCBuby1vcClcbiAgLy8gaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaGFuZGxlciBvbiBhbiBhbHJlYWR5LWNvbW1pdHRlZCByZXNwb25zZS5cbiAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIHJlc2V0SW4pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtTGltaXQnLCBxdW90YS5saW1pdCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1Vc2VkJywgcXVvdGEudXNlZCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1SZW1haW5pbmcnLCBNYXRoLm1heCgwLCBxdW90YS5yZW1haW5pbmcpKTtcblxuICAgIGlmIChyZXNldEF0KSB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlc2V0JywgcmVzZXRBdCk7XG4gICAgfVxuICB9XG5cbiAgc2VuZEVycm9yKFxuICAgIHJlcyxcbiAgICA0MjksXG4gICAgbWVzc2FnZSA/PyBgJHtxdW90YVR5cGV9IHF1b3RhIGV4Y2VlZGVkICgke3F1b3RhLnVzZWR9LyR7cXVvdGEubGltaXR9KS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5gLFxuICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICB7IHF1b3RhIH0sXG4gICk7XG59XG5cbi8qKiBUaGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGV2ZXJ5IGxpc3Qgcm91dGUgcmV0dXJucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbk1ldGEge1xuICB0b3RhbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGZvciBvbmUgcGFnZS5cbiAqXG4gKiBgaGFzTW9yZWAgaXMgZGVyaXZlZCwgbmV2ZXIgaGFuZC1jb21wdXRlZDogYG9mZnNldCArIDxyb3dzIG9uIHRoaXMgcGFnZT4gPFxuICogdG90YWxgIHdhcyBUSEUgbW9zdC1yZXBlYXRlZCBleHByZXNzaW9uIGluIHRoZSBjb2RlYmFzZSwgYW5kIGEgcm91dGUgdGhhdFxuICogc3BlbGxzIGl0IHNsaWdodGx5IGRpZmZlcmVudGx5IHJlcG9ydHMgYSBwaGFudG9tIG5leHQgcGFnZSAob3IgaGlkZXMgYSByZWFsXG4gKiBvbmUpIOKAlCBhIHBhZ2luZyBidWcgdGhhdCBvbmx5IHNob3dzIG9uIHRoZSBsYXN0IHBhZ2UsIHdoZXJlIG5vYm9keSBsb29rcy5cbiAqXG4gKiBgcmV0dXJuZWRgIGlzIHRoZSByb3cgY291bnQgdGhpcyBwYWdlIGFjdHVhbGx5IGNhcnJpZXMuIEl0IGRlZmF1bHRzIHRvXG4gKiBgbGltaXRgIGJlY2F1c2UgYSBsaXN0IHJvdXRlIHRoYXQgZG9lc24ndCBzYXkgb3RoZXJ3aXNlIHJldHVybnMgYSBmdWxsIHBhZ2U7XG4gKiBwYXNzIGl0IGZvciBhIHJvdXRlIHdob3NlIHBhZ2UgY2FuIGJlIHNob3J0ZXIgdGhhbiBpdHMgbGltaXQsIGFuZCBmb3IgYW5cbiAqIHVucGFnZWQgXCJldmVyeXRoaW5nXCIgYW5zd2VyICh3aGljaCByZXBvcnRzIGBsaW1pdCA9IHRvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0aW9uTWV0YShcbiAgb3B0aW9uczogeyB0b3RhbDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgbGltaXQ6IG51bWJlcjsgcmV0dXJuZWQ/OiBudW1iZXIgfSxcbik6IFBhZ2luYXRpb25NZXRhIHtcbiAgY29uc3QgeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCBoYXNNb3JlOiBvZmZzZXQgKyAocmV0dXJuZWQgPz8gbGltaXQpIDwgdG90YWwgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcGFnaW5hdGVkIGxpc3QgcmVzcG9uc2Ugd2l0aCB0aGUgaXRlbXMgbmVzdGVkIHVuZGVyIGEgbmFtZWQga2V5LlxuICogVXNlIHdoZW4gdGhlIEFQSSBjb250cmFjdCBpcyBgeyA8a2V5PjogWy4uLl0sIHBhZ2luYXRpb246IHsuLi59IH1gXG4gKiAodGhlIGRvbWluYW50IHNoYXBlIGFjcm9zcyBhcGkvKiBzZXJ2aWNlcykuXG4gKlxuICogYGhhc01vcmVgIGlzIE9QVElPTkFMIGFuZCBkZWZhdWx0cyB0byBgb2Zmc2V0ICsgZGF0YS5sZW5ndGggPCB0b3RhbGAg4oCUIHRoZVxuICogZXhwcmVzc2lvbiBldmVyeSBjYWxsZXIgdXNlZCB0byB3cml0ZSBvdXQgYnkgaGFuZC4gUGFzcyBpdCBvbmx5IHdoZW4gdGhlXG4gKiByb3V0ZSBrbm93cyBzb21ldGhpbmcgdGhlIHJvdyBjb3VudCBkb2VzIG5vdCAoYSBjdXJzb3IgcGFnZSwgb3IgYSB3aW5kb3dcbiAqIGZldGNoZWQgd2l0aCBgbGltaXQgKyAxYCB0byBwZWVrIGFoZWFkKS4gV2l0aG91dCBhIGB0b3RhbGAgdGhlcmUgaXMgbm90aGluZyB0b1xuICogZGVyaXZlIGZyb20sIHNvIGl0IGZhbGxzIGJhY2sgdG8gXCJhIGN1cnNvciB3YXMgaXNzdWVkXCIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRQYWdpbmF0ZWROZXN0ZWQocmVzLCAncGlwZWxpbmVzJywgaXRlbXMsIHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCB9KTtcbiAqIC8vIOKGkiB7IHBpcGVsaW5lczogWy4uLl0sIHBhZ2luYXRpb246IHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCwgaGFzTW9yZTogdHJ1ZSB9IH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFBhZ2luYXRlZE5lc3RlZDxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgZGF0YUtleTogc3RyaW5nLFxuICBkYXRhOiBUW10sXG4gIG9wdGlvbnM6IHtcbiAgICB0b3RhbD86IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGhhc01vcmU/OiBib29sZWFuO1xuICAgIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgfSxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHBhZ2luYXRlZCByZXNwb25zZSBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7IHN0YXR1c0NvZGUgPSAyMDAsIHRvdGFsLCBsaW1pdCwgb2Zmc2V0LCBoYXNNb3JlLCBuZXh0Q3Vyc29yIH0gPSBvcHRpb25zO1xuICBjb25zdCByZXNvbHZlZCA9IGhhc01vcmVcbiAgICA/PyAodG90YWwgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwYWdpbmF0aW9uTWV0YSh7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCByZXR1cm5lZDogZGF0YS5sZW5ndGggfSkuaGFzTW9yZVxuICAgICAgOiBuZXh0Q3Vyc29yICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBwYWdpbmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbGltaXQsIG9mZnNldCwgaGFzTW9yZTogcmVzb2x2ZWQgfTtcbiAgaWYgKHRvdGFsICE9PSB1bmRlZmluZWQpIHBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcbiAgaWYgKG5leHRDdXJzb3IpIHBhZ2luYXRpb24ubmV4dEN1cnNvciA9IG5leHRDdXJzb3I7XG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbih7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIGRhdGE6IHsgW2RhdGFLZXldOiBkYXRhLCBwYWdpbmF0aW9uIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNRTFNUQVRFOiBleGFjdGx5IGZpdmUgY2hhcmFjdGVycywgZGlnaXRzIGFuZCB1cHBlcmNhc2UgTGF0aW4gbGV0dGVyc1xuICogKGUuZy4gYDIzNTA1YCB1bmlxdWVfdmlvbGF0aW9uLCBgNDI2MDFgIHN5bnRheF9lcnJvcikuIE5vZGUncyBvd24gc29ja2V0IGFuZFxuICogRE5TIGVycm9ycyB1c2UgdGhlIHNhbWUgYC5jb2RlYCBwcm9wZXJ0eSBidXQgc3BlbGwgaXQgZGlmZmVyZW50bHlcbiAqIChgRUNPTk5SRVNFVGAsIGBFVElNRURPVVRgLCBgRU5PVEZPVU5EYCksIHdoaWNoIGlzIHdoYXQgdGhpcyB0ZWxscyBhcGFydC5cbiAqL1xuY29uc3QgU1FMU1RBVEVfUEFUVEVSTiA9IC9eWzAtOUEtWl17NX0kLztcblxuLyoqXG4gKiBMZW5ndGggYWxvbmUgaXMgbm90IGVub3VnaDogYEVQSVBFYCBhbmQgYEUyQklHYCBhcmUgZml2ZSB1cHBlcmNhc2UgY2hhcmFjdGVyc1xuICogYW5kIHdvdWxkIHBhc3MgYXMgU1FMU1RBVEVzLiBFdmVyeSBsaWJ1di9Ob2RlIGVycm5vIHN0YXJ0cyB3aXRoIGBFYCwgYW5kXG4gKiBQb3N0Z3JlcyBkZWZpbmVzIG5vIGVycm9yIGNsYXNzIHRoYXQgZG9lcyDigJQgaXRzIGNsYXNzZXMgYXJlIDAwLTBaLCAyMC0yRixcbiAqIDM0LTNGLCA0MC00NCwgNTMtNTgsIDcyLCBGMCwgSFYsIFAwIGFuZCBYWCAoc2VlIHRoZSBzZXJ2ZXIncyBlcnJjb2Rlcy50eHQpLlxuICogU28gYSBsZWFkaW5nIGBFYCBzZXR0bGVzIGl0LlxuICovXG5jb25zdCBOT0RFX0VSUk5PX1BBVFRFUk4gPSAvXkUvO1xuXG4vKipcbiAqIEV4dHJhY3QgZGF0YWJhc2UgZXJyb3IgZGV0YWlscyBmb3IgbG9nZ2luZy9yZXNwb25zZS5cbiAqXG4gKiBFeHRyYWN0cyBQb3N0Z3JlU1FMIGVycm9yIGNvZGVzLCBkZXRhaWxzLCBoaW50cywgYW5kIGNvbnN0cmFpbnQgbmFtZXNcbiAqIGZyb20gZGF0YWJhc2UgZXJyb3JzIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogT25seSBhIGdlbnVpbmUgUG9zdGdyZXMgZXJyb3IgeWllbGRzIGEgYGRiQ29kZWA6IHJlcG9ydGluZyBhbnkgYC5jb2RlYCBhcyBvbmVcbiAqIHdvdWxkIGxvZyBhIHRyYW5zcG9ydCBmYWlsdXJlIChgRUNPTk5SRVNFVGAgd2hlbiB0aGUgcG9vbGVyIGRyb3BzIG91dCBvZiB0aGVcbiAqIFNlcnZpY2UgZW5kcG9pbnRzLCBzYXkpIGFzIGB7XCJkYlwiOntcImRiQ29kZVwiOlwiRUNPTk5SRVNFVFwifX1gIGFuZCBzZW5kIHJlYWRlcnNcbiAqIGh1bnRpbmcgdGhyb3VnaCBjbGVhbiBQb3N0Z3JlcyBsb2dzLiBUaGUgdHJhbnNwb3J0IGNvZGUgaXMgbm90IGxvc3Qg4oCUIGNhbGxlcnMgbG9nIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBpdHNlbGYgYWxvbmdzaWRlIHRoZXNlIGRldGFpbHMg4oCUIGl0IGp1c3Qgc3RvcHMgY2xhaW1pbmcgdG8gYmUgYSBEQiBmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvYmplY3QgZnJvbSBkYXRhYmFzZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV4dHJhY3RlZCBlcnJvciBkZXRhaWxzOyBge31gIHdoZW4gYGVycm9yYCBpcyBub3QgYVxuICogICBQb3N0Z3JlcyBlcnJvciAobm8gU1FMU1RBVEUgYW5kIG5vbmUgb2YgdGhlIHBnLXNwZWNpZmljIGZpZWxkcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgZGIuaW5zZXJ0KHBsdWdpbnMpLnZhbHVlcyhuZXdQbHVnaW4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc3QgZGJEZXRhaWxzID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNTAwLCAnRGF0YWJhc2UgZXJyb3InLCBFcnJvckNvZGUuREFUQUJBU0VfRVJST1IsIGRiRGV0YWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYkVycm9yKGVycm9yOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBEcml6emxlIE9STSB3cmFwcyB0aGUgb3JpZ2luYWwgcGcgZXJyb3IgaW4gZXJyb3IuY2F1c2Ug4oCUXG4gIC8vIGNoZWNrIHRoZSBjYXVzZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGVycm9yIGl0c2VsZi5cbiAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHNvdXJjZSA9IChlcnIuY2F1c2UgJiYgdHlwZW9mIGVyci5jYXVzZSA9PT0gJ29iamVjdCcgPyBlcnIuY2F1c2UgOiBlcnIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc291cmNlLmNvZGUgPT09ICdzdHJpbmcnXG4gICAgJiYgU1FMU1RBVEVfUEFUVEVSTi50ZXN0KHNvdXJjZS5jb2RlKVxuICAgICYmICFOT0RFX0VSUk5PX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSkpIHtcbiAgICBkZXRhaWxzLmRiQ29kZSA9IHNvdXJjZS5jb2RlO1xuICB9XG4gIGlmIChzb3VyY2UuZGV0YWlsKSBkZXRhaWxzLmRiRGV0YWlsID0gc291cmNlLmRldGFpbDtcbiAgaWYgKHNvdXJjZS5oaW50KSBkZXRhaWxzLmRiSGludCA9IHNvdXJjZS5oaW50O1xuICBpZiAoc291cmNlLmNvbnN0cmFpbnQpIGRldGFpbHMuY29uc3RyYWludCA9IHNvdXJjZS5jb25zdHJhaW50O1xuICBpZiAoc291cmNlLnRhYmxlKSBkZXRhaWxzLnRhYmxlID0gc291cmNlLnRhYmxlO1xuICBpZiAoc291cmNlLmNvbHVtbikgZGV0YWlscy5jb2x1bW4gPSBzb3VyY2UuY29sdW1uO1xuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vLyBDb252ZW5pZW5jZSBoZWxwZXJzIChzaGFyZWQgYWNyb3NzIHBsdWdpbiwgcGlwZWxpbmUsIHF1b3RhIHNlcnZpY2VzKVxuXG4vKipcbiAqIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gdW5rbm93biBjYXRjaCB2YWx1ZS5cbiAqXG4gKiBGYWxscyBiYWNrIGJleW9uZCBgLm1lc3NhZ2VgIGJlY2F1c2Ugc2V2ZXJhbCBjb21tb24gTm9kZSBlcnJvcnMgY2FycnkgYW5cbiAqIEVNUFRZIGAubWVzc2FnZWA6XG4gKiAgLSBkdWFsLXN0YWNrIChJUHY0K0lQdjYpIGNvbm5lY3QgZmFpbHVyZXMgc3VyZmFjZSBhcyBhbiBgQWdncmVnYXRlRXJyb3JgXG4gKiAgICB3aG9zZSBvd24gbWVzc2FnZSBpcyBibGFuayDigJQgdGhlIGNhdXNlIGxpdmVzIGluIGAuY29kZWAgKGUuZy5cbiAqICAgIGBFQ09OTlJFRlVTRURgL2BFVElNRURPVVRgKSBhbmQvb3IgdGhlIGAuZXJyb3JzW11gIHN1Yi1lcnJvcnM7XG4gKiAgLSByYXcgc29ja2V0IGBFcnJub0V4Y2VwdGlvbmBzIGNhbiBsaWtld2lzZSBjYXJyeSBvbmx5IGEgYC5jb2RlYC5cbiAqIFdpdGhvdXQgdGhpcywgYW4gdW5yZWFjaGFibGUgaW50ZXJuYWwgc2VydmljZSAoZS5nLiBjb21wbGlhbmNlIHN0aWxsXG4gKiBzdGFydGluZykgcHJvZHVjZWQgYmxhbmsgcGVyLWl0ZW0gZXJyb3JzIGluIGJ1bGsgcmVzcG9uc2VzIGFuZCBgZXJyb3I6XCJcImBcbiAqIGluIGxvZ3Mg4oCUIGEgc2lsZW50IGJsYWNrIGJveC4gT3JkZXI6IG1lc3NhZ2Ug4oaSIGNvZGUg4oaSIGpvaW5lZCBzdWItZXJyb3JzIOKGklxuICogZXJyb3IgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgaWYgKGVycm9yLm1lc3NhZ2UpIHJldHVybiBlcnJvci5tZXNzYWdlO1xuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG4gIGlmIChjb2RlKSByZXR1cm4gY29kZTtcblxuICBjb25zdCBpbm5lciA9IChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd25bXSB9KS5lcnJvcnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGlubmVyKSAmJiBpbm5lci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgam9pbmVkID0gaW5uZXIubWFwKGVycm9yTWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJzsgJyk7XG4gICAgaWYgKGpvaW5lZCkgcmV0dXJuIGpvaW5lZDtcbiAgfVxuXG4gIHJldHVybiBlcnJvci5uYW1lIHx8ICdVbmtub3duIGVycm9yJztcbn1cblxuLyoqIFNlbmQgYSA0MDAgYmFkLXJlcXVlc3QgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEJhZFJlcXVlc3QoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZTogRXJyb3JDb2RlIHwgc3RyaW5nID0gRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4pOiB2b2lkIHtcbiAgc2VuZEVycm9yKHJlcywgNDAwLCBtZXNzYWdlLCBjb2RlKTtcbn1cblxuLyoqIFNlbmQgYSA1MDAgaW50ZXJuYWwgZXJyb3IgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEludGVybmFsRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDUwMCwgbWVzc2FnZSwgRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SLCBkZXRhaWxzKTtcbn1cblxuLy8gUGFnaW5hdGlvblxuXG4vKiogQ29tbW9uIHBhZ2luYXRpb24gKyBzb3J0aW5nIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBsaW1pdDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBBIHBhcnNlZCBgP3NvcnRCeT0mc29ydE9yZGVyPWAgKGRlZmF1bHQ6IG5ld2VzdCBmaXJzdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYXJhbXMge1xuICBzb3J0Qnk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbn1cblxuLyoqIFBhcnNlIGA/c29ydEJ5PSZzb3J0T3JkZXI9YDsgZGVmYXVsdHMgdG8gYGNyZWF0ZWRBdGAgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvcnQocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU29ydFBhcmFtcyB7XG4gIGNvbnN0IHNvcnRCeSA9IFN0cmluZyhxdWVyeS5zb3J0QnkgfHwgJ2NyZWF0ZWRBdCcpO1xuICBjb25zdCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID1cbiAgICBTdHJpbmcocXVlcnkuc29ydE9yZGVyIHx8ICdkZXNjJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgcmV0dXJuIHsgc29ydEJ5LCBzb3J0T3JkZXIgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsaXN0LXJvdXRlIHdpbmRvdyArIHNvcnQ6IHtAbGluayBwYXJzZVBhZ2V9IHdpdGggYSBwYWdlIG9mIDEwXG4gKiAoY2FwcGVkIGF0IGBNQVhfUEFHRV9MSU1JVGAsIG9mZnNldCBjYXBwZWQgYXQgYE1BWF9QQUdFX09GRlNFVGAg4oCUIGRlZXAgcGFnaW5nXG4gKiB1c2VzIHRoZSBjdXJzb3IgQVBJKSBwbHVzIHtAbGluayBwYXJzZVNvcnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWdpbmF0aW9uUGFyYW1zKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBhZ2luYXRpb25QYXJhbXMge1xuICByZXR1cm4geyAuLi5wYXJzZVBhZ2UocXVlcnksIHsgZGVmOiAxMCwgbWF4OiBNQVhfUEFHRV9MSU1JVCB9KSwgLi4ucGFyc2VTb3J0KHF1ZXJ5KSB9O1xufVxuIl19
|
|
@@ -82,6 +82,22 @@ export const SENSITIVE_VALUE_PATTERNS = [
|
|
|
82
82
|
re2: '\\bgh[pousr]_[A-Za-z0-9]{20,}\\b',
|
|
83
83
|
replacement: REDACTED,
|
|
84
84
|
},
|
|
85
|
+
{
|
|
86
|
+
// Fine-grained PAT: `github_pat_` + a 22-char id + `_` + a 59-char secret.
|
|
87
|
+
// The classic `gh[pousr]_` rule above does NOT cover it (`i` is not in that
|
|
88
|
+
// class), so without this one a fine-grained PAT reached Loki in the clear.
|
|
89
|
+
name: 'github_fine_grained_pat',
|
|
90
|
+
js: /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,
|
|
91
|
+
re2: '\\bgithub_pat_[A-Za-z0-9_]{20,}\\b',
|
|
92
|
+
replacement: REDACTED,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
// GitLab personal/project/group access tokens: `glpat-` + 20 chars.
|
|
96
|
+
name: 'gitlab_token',
|
|
97
|
+
js: /\bglpat-[A-Za-z0-9_-]{20,}\b/g,
|
|
98
|
+
re2: '\\bglpat-[A-Za-z0-9_-]{20,}\\b',
|
|
99
|
+
replacement: REDACTED,
|
|
100
|
+
},
|
|
85
101
|
{
|
|
86
102
|
name: 'slack_token',
|
|
87
103
|
js: /\bxox[abprs]-[A-Za-z0-9-]{10,}\b/g,
|
|
@@ -145,4 +161,4 @@ export function looksSensitive(input) {
|
|
|
145
161
|
return false;
|
|
146
162
|
return maskLine(input) !== input;
|
|
147
163
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vuc2l0aXZlLXBhdHRlcm5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlbnNpdGl2ZS1wYXR0ZXJucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQztBQUVyQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyx3SEFBd0gsQ0FBQztBQXFCOUo7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXFDO0lBQ3hFO1FBQ0UsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEVBQUUsRUFBRSwyRUFBMkU7UUFDL0UsR0FBRyxFQUFFLElBQUk7UUFDVCxXQUFXLEVBQUUsUUFBUTtLQUN0QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixFQUFFLEVBQUUsb0NBQW9DO1FBQ3hDLEdBQUcsRUFBRSxtQ0FBbUM7UUFDeEMsV0FBVyxFQUFFLFFBQVE7S0FDdEI7SUFDRDtRQUNFLElBQUksRUFBRSxLQUFLO1FBQ1gsRUFBRSxFQUFFLDBEQUEwRDtRQUM5RCxHQUFHLEVBQUUsMkRBQTJEO1FBQ2hFLFdBQVcsRUFBRSxRQUFRO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixFQUFFLEVBQUUsaUNBQWlDO1FBQ3JDLEdBQUcsRUFBRSxvQ0FBb0M7UUFDekMsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFO0tBQ2xDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEVBQUUsRUFBRSxzREFBc0Q7UUFDMUQsR0FBRyxFQUFFLHFEQUFxRDtRQUMxRCxXQUFXLEVBQUUsUUFBUTtLQUN0QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFlBQVk7UUFDbEIsRUFBRSxFQUFFLCtDQUErQztRQUNuRCxHQUFHLEVBQUUsNENBQTRDO1FBQ2pELFdBQVcsRUFBRSxRQUFRO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixFQUFFLEVBQUUsaUNBQWlDO1FBQ3JDLEdBQUcsRUFBRSxrQ0FBa0M7UUFDdkMsV0FBVyxFQUFFLFFBQVE7S0FDdEI7SUFDRDtRQUNFLElBQUksRUFBRSxhQUFhO1FBQ25CLEVBQUUsRUFBRSxtQ0FBbUM7UUFDdkMsR0FBRyxFQUFFLG9DQUFvQztRQUN6QyxXQUFXLEVBQUUsUUFBUTtLQUN0QjtJQUNEO1FBQ0UsMEVBQTBFO1FBQzFFLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsRUFBRSxFQUFFLG9EQUFvRDtRQUN4RCxHQUFHLEVBQUUsbURBQW1EO1FBQ3hELFdBQVcsRUFBRSxLQUFLLFFBQVEsR0FBRztLQUM5QjtJQUNEO1FBQ0Usd0VBQXdFO1FBQ3hFLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsRUFBRSxFQUFFLHNHQUFzRztRQUMxRyxHQUFHLEVBQUUsd0dBQXdHO1FBQzdHLFdBQVcsRUFBRSxLQUFLLFFBQVEsRUFBRTtLQUM3QjtJQUNEO1FBQ0UsaUVBQWlFO1FBQ2pFLGtFQUFrRTtRQUNsRSwyRUFBMkU7UUFDM0UsaUVBQWlFO1FBQ2pFLElBQUksRUFBRSwwQkFBMEI7UUFDaEMsRUFBRSxFQUFFLDRIQUE0SDtRQUNoSSxHQUFHLEVBQUUsZ0lBQWdJO1FBQ3JJLFdBQVcsRUFBRSxLQUFLLFFBQVEsRUFBRTtLQUM3QjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDcEMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxNQUFNLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDM0QsMkVBQTJFO1FBQzNFLHlFQUF5RTtRQUN6RSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNqQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE9BQU8sNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWE7SUFDMUMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwid2hhdCBjb3VudHMgYXMgc2Vuc2l0aXZlXCIgYWNyb3NzIGV2ZXJ5IG1hc2tpbmdcbiAqIGxheWVyLlxuICpcbiAqIEZvdXIgbGF5ZXJzIGNvbnN1bWUgdGhpcyBtb2R1bGUgKHNlZSBgZG9jcy9vYnNlcnZhYmlsaXR5LWxvZ3MubWRgKTpcbiAqXG4gKiAgIEwxICBrZXktYmFzZWQsIHdyaXRlLXRpbWUgICDigJQgd2luc3RvbiBgcmVkYWN0Rm9ybWF0YCAobWV0YWRhdGEga2V5cylcbiAqICAgTDIgIHZhbHVlLWJhc2VkLCB3cml0ZS10aW1lIOKAlCB3aW5zdG9uIGBtYXNrRm9ybWF0YCAodGhlIG1lc3NhZ2Ugc3RyaW5nKVxuICogICBMMyAgdmFsdWUtYmFzZWQsIGluZ2VzdC10aW1lIOKAlCBwcm9tdGFpbCBgcmVwbGFjZWAgc3RhZ2VzICDihpAgQVVUSE9SSVRBVElWRVxuICogICBMNCAgdmFsdWUtYmFzZWQsIHJlYWQtdGltZSAg4oCUIHBsYXRmb3JtJ3MgTG9raSBjbGllbnQsIGJlZm9yZSBzZXJ2aW5nL2V4cG9ydFxuICpcbiAqICoqTDMgaXMgdGhlIGd1YXJhbnRlZSwgbm90IEw0LioqIFJlYWQtdGltZSBtYXNraW5nIG9ubHkgbWFza3MgdGhlIERJU1BMQVk6IHRoZVxuICogc2VjcmV0IGlzIHN0aWxsIGluIExva2kgYW5kIHN0aWxsIG1hdGNoYWJsZSwgc28gYSB1c2VyIGNhbiBzZWFyY2ggYSBjYW5kaWRhdGVcbiAqIHZhbHVlIGFuZCBsZWFybiBmcm9tIHRoZSBoaXQgdGhhdCBpdCBpcyBwcmVzZW50LCBldmVuIHRob3VnaCB0aGUgbGluZSByZW5kZXJzXG4gKiBgW1JFREFDVEVEXWAuIFJlcGVhdCB0aGF0IGFuZCBzZWFyY2ggYmVjb21lcyBhbiBvcmFjbGUuIE1hc2tpbmcgdGhlcmVmb3JlIGhhc1xuICogdG8gaGFwcGVuIGJlZm9yZSBzdG9yYWdlIGZvciBhbnl0aGluZyB0aGUgc2VhcmNoIHBhdGggY2FuIG1hdGNoOyBMNCBleGlzdHMgdG9cbiAqIGNvdmVyIGhpc3Rvcnkgd3JpdHRlbiBiZWZvcmUgTDMgc2hpcHBlZCwgYW5kIGFzIGRlZmVuc2UgaW4gZGVwdGguXG4gKlxuICogQmVjYXVzZSBMMyBydW5zIGluc2lkZSBwcm9tdGFpbCAoR28gLyBSRTIpIGFuZCBMMS9MMi9MNCBydW4gaW4gTm9kZSwgZWFjaFxuICogcGF0dGVybiBjYXJyaWVzIEJPVEggZm9ybXMgYW5kIGEgZ2VuZXJhdG9yIGVtaXRzIHRoZSBwcm9tdGFpbCBZQU1MIGZyb20gdGhpc1xuICogbGlzdCDigJQgc2VlIGBzY3JpcHRzL2dlbi1wcm9tdGFpbC1tYXNraW5nLm1qc2AuIEtlZXBpbmcgT05FIGxpc3QgaXMgdGhlIHBvaW50OlxuICogaGFuZC1zeW5jZWQgY29waWVzIGRyaWZ0LlxuICovXG5cbmltcG9ydCB7IHNjcnViQXdzSWRlbnRpZmllcnNGcm9tU3RyaW5nIH0gZnJvbSAnLi9hd3Mtc2NydWIuanMnO1xuXG5leHBvcnQgY29uc3QgUkVEQUNURUQgPSAnW1JFREFDVEVEXSc7XG5cbi8qKlxuICogS2V5cyB3aG9zZSBWQUxVRSBtdXN0IGJlIG1hc2tlZCB3aG9sZXNhbGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlJ3Mgc2hhcGUuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLCBhbmNob3JlZC1zdWJzdHJpbmcgbWF0Y2guXG4gKlxuICogQWRkIGEgdGVybSBvbmx5IGZvciBsZWFrYWdlIHlvdSd2ZSBhY3R1YWxseSBzZWVuIOKAlCBvdmVyLXJlZGFjdGlvbiBtYWtlc1xuICogaW5jaWRlbnQgZGVidWdnaW5nIGhhcmRlciwgYW5kIHRoZXNlIGxvZ3MgYXJlIG5vdyBhIHByb2R1Y3Qgc3VyZmFjZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFTlNJVElWRV9LRVlfUEFUVEVSTiA9IC9wYXNzd29yZHxzZWNyZXR8YmVhcmVyfGFwaVtfLV0/a2V5fGNvb2tpZXx0b2tlbnxeYXV0aChvcml6YXRpb258X2hlYWRlcik/JHxzdHJpcGVbXy1dPyhrZXl8c2VjcmV0KXxtb25nbyhkYik/W18tXT91cmkvaTtcblxuLyoqXG4gKiBPbmUgc2VjcmV0LXNoYXBlZCB2YWx1ZSBwYXR0ZXJuLlxuICpcbiAqIGBqc2AgaXMgdXNlZCBieSB0aGUgTm9kZS1zaWRlIGxheWVycy4gYHJlMmAgaXMgdGhlIGVxdWl2YWxlbnQgc291cmNlIGZvclxuICogcHJvbXRhaWwncyBgcmVwbGFjZWAgc3RhZ2Ug4oCUIEdvJ3MgUkUyIGhhcyBubyBsb29rYXJvdW5kLCBzbyBhIHBhdHRlcm4gdGhhdFxuICogbmVlZHMgaXQgaGFzIGByZTI6IG51bGxgIGFuZCBzdGF5cyBOb2RlLW9ubHkgKEwyL0w0IHN0aWxsIGNhdGNoIGl0OyBpdCBqdXN0XG4gKiBpc24ndCBzY3J1YmJlZCBiZWZvcmUgc3RvcmFnZSkuIGAoP2kpYCBpcyBzcGVsbGVkIGlubGluZSBmb3IgUkUyIGJlY2F1c2VcbiAqIHByb210YWlsIHRha2VzIGEgYmFyZSBzb3VyY2Ugc3RyaW5nLCB3aGlsZSB0aGUgSlMgZm9ybSB1c2VzIHRoZSBgaWAgZmxhZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5zaXRpdmVWYWx1ZVBhdHRlcm4ge1xuICAvKiogU3RhYmxlIGlkZW50aWZpZXIsIHVzZWQgYXMgdGhlIHByb210YWlsIHN0YWdlIGNvbW1lbnQuICovXG4gIG5hbWU6IHN0cmluZztcbiAganM6IFJlZ0V4cDtcbiAgLyoqIFJFMiBzb3VyY2UgZm9yIHByb210YWlsLCBvciBudWxsIHdoZW4gdGhlIHBhdHRlcm4gaXMgSlMtb25seS4gKi9cbiAgcmUyOiBzdHJpbmcgfCBudWxsO1xuICAvKiogUmVwbGFjZW1lbnQgdGV4dC4gYCQxYCBrZWVwcyBhIGxlYWRpbmcgY2FwdHVyZSAoZS5nLiB0aGUgYD90b2tlbj1gIHByZWZpeCkuICovXG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3JkZXJlZCDigJQgZWFybGllciBwYXR0ZXJucyB3aW4sIHNvIHRoZSBzcGVjaWZpYyAoYSBTdHJpcGUga2V5KSBpcyBtYXNrZWRcbiAqIGJlZm9yZSB0aGUgZ2VuZXJpYyAoYSBgc2VjcmV0PWAgYXNzaWdubWVudCkgY2FuIHByb2R1Y2UgYSBtZXNzaWVyIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFTlNJVElWRV9WQUxVRV9QQVRURVJOUzogcmVhZG9ubHkgU2Vuc2l0aXZlVmFsdWVQYXR0ZXJuW10gPSBbXG4gIHtcbiAgICAvLyBBIFBFTSBibG9jayBzcGFucyBsaW5lcywgc28gcHJvbXRhaWwgKHdoaWNoIHJlcGxhY2VzIHBlciBsaW5lKSBjYW4ndCBzZWVcbiAgICAvLyB0aGUgd2hvbGUgdGhpbmcg4oCUIEpTLW9ubHkuIFRoZSBCRUdJTiBsaW5lIGFsb25lIGlzIHN0aWxsIGEgc3Ryb25nIHNpZ25hbC5cbiAgICBuYW1lOiAncGVtX3ByaXZhdGVfa2V5JyxcbiAgICBqczogLy0tLS0tQkVHSU5bQS1aIF0qUFJJVkFURSBLRVktLS0tLVtcXHNcXFNdKj8tLS0tLUVORFtBLVogXSpQUklWQVRFIEtFWS0tLS0tL2csXG4gICAgcmUyOiBudWxsLFxuICAgIHJlcGxhY2VtZW50OiBSRURBQ1RFRCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdwZW1fcHJpdmF0ZV9rZXlfaGVhZGVyJyxcbiAgICBqczogLy0tLS0tQkVHSU5bQS1aIF0qUFJJVkFURSBLRVktLS0tLS9nLFxuICAgIHJlMjogJy0tLS0tQkVHSU5bQS1aIF0qUFJJVkFURSBLRVktLS0tLScsXG4gICAgcmVwbGFjZW1lbnQ6IFJFREFDVEVELFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2p3dCcsXG4gICAganM6IC9leUpbQS1aYS16MC05Xy1dezgsfVxcLltBLVphLXowLTlfLV17OCx9XFwuW0EtWmEtejAtOV8tXSovZyxcbiAgICByZTI6ICdleUpbQS1aYS16MC05Xy1dezgsfVxcXFwuW0EtWmEtejAtOV8tXXs4LH1cXFxcLltBLVphLXowLTlfLV0qJyxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYmVhcmVyX3Rva2VuJyxcbiAgICBqczogL2JlYXJlclxccytbQS1aYS16MC05Ll9+Ky8tXSs9Ki9naSxcbiAgICByZTI6ICcoP2kpYmVhcmVyXFxcXHMrW0EtWmEtejAtOS5ffisvLV0rPSonLFxuICAgIHJlcGxhY2VtZW50OiBgQmVhcmVyICR7UkVEQUNURUR9YCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdhd3NfYWNjZXNzX2tleV9pZCcsXG4gICAganM6IC9cXGIoPzpBM1RbQS1aMC05XXxBS0lBfEFTSUF8QUJJQXxBQ0NBKVtBLVowLTldezE2fVxcYi9nLFxuICAgIHJlMjogJ1xcXFxiKEEzVFtBLVowLTldfEFLSUF8QVNJQXxBQklBfEFDQ0EpW0EtWjAtOV17MTZ9XFxcXGInLFxuICAgIHJlcGxhY2VtZW50OiBSRURBQ1RFRCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdzdHJpcGVfa2V5JyxcbiAgICBqczogL1xcYig/OnNrfHJrKV8oPzpsaXZlfHRlc3QpX1tBLVphLXowLTldezEwLH1cXGIvZyxcbiAgICByZTI6ICdcXFxcYihza3xyaylfKGxpdmV8dGVzdClfW0EtWmEtejAtOV17MTAsfVxcXFxiJyxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnZ2l0aHViX3Rva2VuJyxcbiAgICBqczogL1xcYmdoW3BvdXNyXV9bQS1aYS16MC05XXsyMCx9XFxiL2csXG4gICAgcmUyOiAnXFxcXGJnaFtwb3Vzcl1fW0EtWmEtejAtOV17MjAsfVxcXFxiJyxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2xhY2tfdG9rZW4nLFxuICAgIGpzOiAvXFxieG94W2FicHJzXS1bQS1aYS16MC05LV17MTAsfVxcYi9nLFxuICAgIHJlMjogJ1xcXFxieG94W2FicHJzXS1bQS1aYS16MC05LV17MTAsfVxcXFxiJyxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICAvLyBgc2NoZW1lOi8vdXNlcjpwYXNzQGhvc3RgIOKAlCBrZWVwIHRoZSBzY2hlbWUgc28gdGhlIGxpbmUgc3RheXMgcmVhZGFibGUuXG4gICAgbmFtZTogJ3VybF9jcmVkZW50aWFscycsXG4gICAganM6IC8oW2EtekEtWl1bYS16QS1aMC05Ky4tXSo6XFwvXFwvKVteOkAvXFxzXSs6W15AL1xcc10rQC9nLFxuICAgIHJlMjogJyhbYS16QS1aXVthLXpBLVowLTkrLi1dKjovLylbXjpAL1xcXFxzXSs6W15AL1xcXFxzXStAJyxcbiAgICByZXBsYWNlbWVudDogYCQxJHtSRURBQ1RFRH1AYCxcbiAgfSxcbiAge1xuICAgIC8vIGA/dG9rZW494oCmYCAvIGAmYXBpX2tleT3igKZgIGluIGEgVVJMLiBLZWVwcyB0aGUgcGFyYW1ldGVyIG5hbWUgdmlzaWJsZS5cbiAgICBuYW1lOiAndXJsX3NlY3JldF9wYXJhbScsXG4gICAganM6IC8oWz8mXSg/OmFjY2Vzc1tfLV0/dG9rZW58YXBpW18tXT9rZXl8YXBpa2V5fGF1dGh8cGFzc3dvcmR8c2VjcmV0fHNpZ3xzaWduYXR1cmV8dG9rZW4pPSlbXiZcXHNcIic8Pl0rL2dpLFxuICAgIHJlMjogJyg/aSkoWz8mXShhY2Nlc3NbXy1dP3Rva2VufGFwaVtfLV0/a2V5fGFwaWtleXxhdXRofHBhc3N3b3JkfHNlY3JldHxzaWd8c2lnbmF0dXJlfHRva2VuKT0pW14mXFxcXHNcIlxcJzw+XSsnLFxuICAgIHJlcGxhY2VtZW50OiBgJDEke1JFREFDVEVEfWAsXG4gIH0sXG4gIHtcbiAgICAvLyBgc2VjcmV0PeKApmAgLyBgXCJwYXNzd29yZFwiOiBcIuKAplwiYCBzdHlsZSBhc3NpZ25tZW50cyBpbiBmcmVlIHRleHQuXG4gICAgLy8gYCZgIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIHZhbHVlIGNsYXNzIHNvIHRoaXMgY2FuJ3QgcnVuIG9uIGFmdGVyXG4gICAgLy8gYHVybF9zZWNyZXRfcGFyYW1gIGFuZCBzd2FsbG93IHRoZSByZXN0IG9mIGEgcXVlcnkgc3RyaW5nIOKAlCB0aGUgVVJMIHJ1bGVcbiAgICAvLyBoYXMgYWxyZWFkeSBtYXNrZWQgdGhvc2UsIGFuZCB0aGlzIG9uZSBtdXN0IG5vdCBlYXQgYCZwYWdlPTJgLlxuICAgIG5hbWU6ICdpbmxpbmVfc2VjcmV0X2Fzc2lnbm1lbnQnLFxuICAgIGpzOiAvKCg/OmF3c18pPyg/OnNlY3JldF9hY2Nlc3Nfa2V5fGNsaWVudF9zZWNyZXR8YXBpW18tXT9rZXl8YXBpa2V5fHBhc3N3b3JkfHBhc3N3ZHxzZWNyZXR8dG9rZW4pXCI/XFxzKls9Ol1cXHMqXCI/KVteXFxzXCInLDt9Jl0rL2dpLFxuICAgIHJlMjogJyg/aSkoKChhd3NfKT8oc2VjcmV0X2FjY2Vzc19rZXl8Y2xpZW50X3NlY3JldHxhcGlbXy1dP2tleXxhcGlrZXl8cGFzc3dvcmR8cGFzc3dkfHNlY3JldHx0b2tlbikpXCI/XFxcXHMqWz06XVxcXFxzKlwiPylbXlxcXFxzXCJcXCcsO30mXSsnLFxuICAgIHJlcGxhY2VtZW50OiBgJDEke1JFREFDVEVEfWAsXG4gIH0sXG5dO1xuXG4vKipcbiAqIE1hc2sgc2VjcmV0LXNoYXBlZCB2YWx1ZXMgaW4gYSBzaW5nbGUgc3RyaW5nLlxuICpcbiAqIEFsc28gc2NydWJzIEFXUyBhY2NvdW50IGlkZW50aWZpZXJzIHZpYSB7QGxpbmsgc2NydWJBd3NJZGVudGlmaWVyc0Zyb21TdHJpbmd9XG4gKiDigJQgYSBoYXJkIHJlcG8gcnVsZSAoYW4gQVdTIGFjY291bnQgaWQgbXVzdCBuZXZlciBiZSBwZXJzaXN0ZWQgb3Igc3VyZmFjZWQpLFxuICogY29tcG9zZWQgaGVyZSByYXRoZXIgdGhhbiBkdXBsaWNhdGVkIHNvIHRoZSB0d28gcnVsZXMgY2FuJ3QgZHJpZnQuXG4gKlxuICogTm9uLXRocm93aW5nIGFuZCBhbGxvY2F0aW9uLWxpZ2h0IG9uIHRoZSBjb21tb24gcGF0aDogc3RyaW5ncyB3aXRoIG5vIG1hdGNoXG4gKiBjb21lIGJhY2sgYnkgaWRlbnRpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXNrTGluZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGlucHV0O1xuICBsZXQgb3V0ID0gaW5wdXQ7XG4gIGZvciAoY29uc3QgeyBqcywgcmVwbGFjZW1lbnQgfSBvZiBTRU5TSVRJVkVfVkFMVUVfUEFUVEVSTlMpIHtcbiAgICAvLyBganNgIGNhcnJpZXMgdGhlIC9nIGZsYWcsIHNvIHJlc2V0IGxhc3RJbmRleCDigJQgYSBzaGFyZWQgUmVnRXhwIG9iamVjdCBpc1xuICAgIC8vIHN0YXRlZnVsIGFjcm9zcyBjYWxscyBhbmQgd291bGQgb3RoZXJ3aXNlIHNraXAgbWF0Y2hlcyBpbnRlcm1pdHRlbnRseS5cbiAgICBqcy5sYXN0SW5kZXggPSAwO1xuICAgIG91dCA9IG91dC5yZXBsYWNlKGpzLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHNjcnViQXdzSWRlbnRpZmllcnNGcm9tU3RyaW5nKG91dCk7XG59XG5cbi8qKlxuICogRG9lcyB0aGlzIHN0cmluZyBsb29rIGxpa2UgaXQgQ09OVEFJTlMgYSBzZWNyZXQ/IFVzZWQgdG8gcmVqZWN0IGxvZy1zZWFyY2hcbiAqIHRlcm1zLCBjbG9zaW5nIHRoZSBvdGhlciBlbmQgb2YgdGhlIG9yYWNsZSBkZXNjcmliZWQgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGU6XG4gKiBtYXNraW5nIHRoZSByZXN1bHQgaXMgcG9pbnRsZXNzIGlmIHRoZSBxdWVyeSBpdHNlbGYgY2FuIGNvbmZpcm0gYSBndWVzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2tzU2Vuc2l0aXZlKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbWFza0xpbmUoaW5wdXQpICE9PSBpbnB1dDtcbn1cbiJdfQ==
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vuc2l0aXZlLXBhdHRlcm5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlbnNpdGl2ZS1wYXR0ZXJucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQztBQUVyQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyx3SEFBd0gsQ0FBQztBQXFCOUo7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXFDO0lBQ3hFO1FBQ0UsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEVBQUUsRUFBRSwyRUFBMkU7UUFDL0UsR0FBRyxFQUFFLElBQUk7UUFDVCxXQUFXLEVBQUUsUUFBUTtLQUN0QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixFQUFFLEVBQUUsb0NBQW9DO1FBQ3hDLEdBQUcsRUFBRSxtQ0FBbUM7UUFDeEMsV0FBVyxFQUFFLFFBQVE7S0FDdEI7SUFDRDtRQUNFLElBQUksRUFBRSxLQUFLO1FBQ1gsRUFBRSxFQUFFLDBEQUEwRDtRQUM5RCxHQUFHLEVBQUUsMkRBQTJEO1FBQ2hFLFdBQVcsRUFBRSxRQUFRO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixFQUFFLEVBQUUsaUNBQWlDO1FBQ3JDLEdBQUcsRUFBRSxvQ0FBb0M7UUFDekMsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFO0tBQ2xDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEVBQUUsRUFBRSxzREFBc0Q7UUFDMUQsR0FBRyxFQUFFLHFEQUFxRDtRQUMxRCxXQUFXLEVBQUUsUUFBUTtLQUN0QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFlBQVk7UUFDbEIsRUFBRSxFQUFFLCtDQUErQztRQUNuRCxHQUFHLEVBQUUsNENBQTRDO1FBQ2pELFdBQVcsRUFBRSxRQUFRO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixFQUFFLEVBQUUsaUNBQWlDO1FBQ3JDLEdBQUcsRUFBRSxrQ0FBa0M7UUFDdkMsV0FBVyxFQUFFLFFBQVE7S0FDdEI7SUFDRDtRQUNFLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsRUFBRSxFQUFFLG1DQUFtQztRQUN2QyxHQUFHLEVBQUUsb0NBQW9DO1FBQ3pDLFdBQVcsRUFBRSxRQUFRO0tBQ3RCO0lBQ0Q7UUFDRSxvRUFBb0U7UUFDcEUsSUFBSSxFQUFFLGNBQWM7UUFDcEIsRUFBRSxFQUFFLCtCQUErQjtRQUNuQyxHQUFHLEVBQUUsZ0NBQWdDO1FBQ3JDLFdBQVcsRUFBRSxRQUFRO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsYUFBYTtRQUNuQixFQUFFLEVBQUUsbUNBQW1DO1FBQ3ZDLEdBQUcsRUFBRSxvQ0FBb0M7UUFDekMsV0FBVyxFQUFFLFFBQVE7S0FDdEI7SUFDRDtRQUNFLDBFQUEwRTtRQUMxRSxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEVBQUUsRUFBRSxvREFBb0Q7UUFDeEQsR0FBRyxFQUFFLG1EQUFtRDtRQUN4RCxXQUFXLEVBQUUsS0FBSyxRQUFRLEdBQUc7S0FDOUI7SUFDRDtRQUNFLHdFQUF3RTtRQUN4RSxJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLEVBQUUsRUFBRSxzR0FBc0c7UUFDMUcsR0FBRyxFQUFFLHdHQUF3RztRQUM3RyxXQUFXLEVBQUUsS0FBSyxRQUFRLEVBQUU7S0FDN0I7SUFDRDtRQUNFLGlFQUFpRTtRQUNqRSxrRUFBa0U7UUFDbEUsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSxJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLEVBQUUsRUFBRSw0SEFBNEg7UUFDaEksR0FBRyxFQUFFLGdJQUFnSTtRQUNySSxXQUFXLEVBQUUsS0FBSyxRQUFRLEVBQUU7S0FDN0I7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFhO0lBQ3BDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQzNELDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDakIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxPQUFPLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBcIndoYXQgY291bnRzIGFzIHNlbnNpdGl2ZVwiIGFjcm9zcyBldmVyeSBtYXNraW5nXG4gKiBsYXllci5cbiAqXG4gKiBGb3VyIGxheWVycyBjb25zdW1lIHRoaXMgbW9kdWxlIChzZWUgYGRvY3Mvb2JzZXJ2YWJpbGl0eS1sb2dzLm1kYCk6XG4gKlxuICogICBMMSAga2V5LWJhc2VkLCB3cml0ZS10aW1lICAg4oCUIHdpbnN0b24gYHJlZGFjdEZvcm1hdGAgKG1ldGFkYXRhIGtleXMpXG4gKiAgIEwyICB2YWx1ZS1iYXNlZCwgd3JpdGUtdGltZSDigJQgd2luc3RvbiBgbWFza0Zvcm1hdGAgKHRoZSBtZXNzYWdlIHN0cmluZylcbiAqICAgTDMgIHZhbHVlLWJhc2VkLCBpbmdlc3QtdGltZSDigJQgcHJvbXRhaWwgYHJlcGxhY2VgIHN0YWdlcyAg4oaQIEFVVEhPUklUQVRJVkVcbiAqICAgTDQgIHZhbHVlLWJhc2VkLCByZWFkLXRpbWUgIOKAlCBwbGF0Zm9ybSdzIExva2kgY2xpZW50LCBiZWZvcmUgc2VydmluZy9leHBvcnRcbiAqXG4gKiAqKkwzIGlzIHRoZSBndWFyYW50ZWUsIG5vdCBMNC4qKiBSZWFkLXRpbWUgbWFza2luZyBvbmx5IG1hc2tzIHRoZSBESVNQTEFZOiB0aGVcbiAqIHNlY3JldCBpcyBzdGlsbCBpbiBMb2tpIGFuZCBzdGlsbCBtYXRjaGFibGUsIHNvIGEgdXNlciBjYW4gc2VhcmNoIGEgY2FuZGlkYXRlXG4gKiB2YWx1ZSBhbmQgbGVhcm4gZnJvbSB0aGUgaGl0IHRoYXQgaXQgaXMgcHJlc2VudCwgZXZlbiB0aG91Z2ggdGhlIGxpbmUgcmVuZGVyc1xuICogYFtSRURBQ1RFRF1gLiBSZXBlYXQgdGhhdCBhbmQgc2VhcmNoIGJlY29tZXMgYW4gb3JhY2xlLiBNYXNraW5nIHRoZXJlZm9yZSBoYXNcbiAqIHRvIGhhcHBlbiBiZWZvcmUgc3RvcmFnZSBmb3IgYW55dGhpbmcgdGhlIHNlYXJjaCBwYXRoIGNhbiBtYXRjaDsgTDQgZXhpc3RzIHRvXG4gKiBjb3ZlciBoaXN0b3J5IHdyaXR0ZW4gYmVmb3JlIEwzIHNoaXBwZWQsIGFuZCBhcyBkZWZlbnNlIGluIGRlcHRoLlxuICpcbiAqIEJlY2F1c2UgTDMgcnVucyBpbnNpZGUgcHJvbXRhaWwgKEdvIC8gUkUyKSBhbmQgTDEvTDIvTDQgcnVuIGluIE5vZGUsIGVhY2hcbiAqIHBhdHRlcm4gY2FycmllcyBCT1RIIGZvcm1zIGFuZCBhIGdlbmVyYXRvciBlbWl0cyB0aGUgcHJvbXRhaWwgWUFNTCBmcm9tIHRoaXNcbiAqIGxpc3Qg4oCUIHNlZSBgc2NyaXB0cy9nZW4tcHJvbXRhaWwtbWFza2luZy5tanNgLiBLZWVwaW5nIE9ORSBsaXN0IGlzIHRoZSBwb2ludDpcbiAqIGhhbmQtc3luY2VkIGNvcGllcyBkcmlmdC5cbiAqL1xuXG5pbXBvcnQgeyBzY3J1YkF3c0lkZW50aWZpZXJzRnJvbVN0cmluZyB9IGZyb20gJy4vYXdzLXNjcnViLmpzJztcblxuZXhwb3J0IGNvbnN0IFJFREFDVEVEID0gJ1tSRURBQ1RFRF0nO1xuXG4vKipcbiAqIEtleXMgd2hvc2UgVkFMVUUgbXVzdCBiZSBtYXNrZWQgd2hvbGVzYWxlLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSdzIHNoYXBlLlxuICogQ2FzZS1pbnNlbnNpdGl2ZSwgYW5jaG9yZWQtc3Vic3RyaW5nIG1hdGNoLlxuICpcbiAqIEFkZCBhIHRlcm0gb25seSBmb3IgbGVha2FnZSB5b3UndmUgYWN0dWFsbHkgc2VlbiDigJQgb3Zlci1yZWRhY3Rpb24gbWFrZXNcbiAqIGluY2lkZW50IGRlYnVnZ2luZyBoYXJkZXIsIGFuZCB0aGVzZSBsb2dzIGFyZSBub3cgYSBwcm9kdWN0IHN1cmZhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTRU5TSVRJVkVfS0VZX1BBVFRFUk4gPSAvcGFzc3dvcmR8c2VjcmV0fGJlYXJlcnxhcGlbXy1dP2tleXxjb29raWV8dG9rZW58XmF1dGgob3JpemF0aW9ufF9oZWFkZXIpPyR8c3RyaXBlW18tXT8oa2V5fHNlY3JldCl8bW9uZ28oZGIpP1tfLV0/dXJpL2k7XG5cbi8qKlxuICogT25lIHNlY3JldC1zaGFwZWQgdmFsdWUgcGF0dGVybi5cbiAqXG4gKiBganNgIGlzIHVzZWQgYnkgdGhlIE5vZGUtc2lkZSBsYXllcnMuIGByZTJgIGlzIHRoZSBlcXVpdmFsZW50IHNvdXJjZSBmb3JcbiAqIHByb210YWlsJ3MgYHJlcGxhY2VgIHN0YWdlIOKAlCBHbydzIFJFMiBoYXMgbm8gbG9va2Fyb3VuZCwgc28gYSBwYXR0ZXJuIHRoYXRcbiAqIG5lZWRzIGl0IGhhcyBgcmUyOiBudWxsYCBhbmQgc3RheXMgTm9kZS1vbmx5IChMMi9MNCBzdGlsbCBjYXRjaCBpdDsgaXQganVzdFxuICogaXNuJ3Qgc2NydWJiZWQgYmVmb3JlIHN0b3JhZ2UpLiBgKD9pKWAgaXMgc3BlbGxlZCBpbmxpbmUgZm9yIFJFMiBiZWNhdXNlXG4gKiBwcm9tdGFpbCB0YWtlcyBhIGJhcmUgc291cmNlIHN0cmluZywgd2hpbGUgdGhlIEpTIGZvcm0gdXNlcyB0aGUgYGlgIGZsYWcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vuc2l0aXZlVmFsdWVQYXR0ZXJuIHtcbiAgLyoqIFN0YWJsZSBpZGVudGlmaWVyLCB1c2VkIGFzIHRoZSBwcm9tdGFpbCBzdGFnZSBjb21tZW50LiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIGpzOiBSZWdFeHA7XG4gIC8qKiBSRTIgc291cmNlIGZvciBwcm9tdGFpbCwgb3IgbnVsbCB3aGVuIHRoZSBwYXR0ZXJuIGlzIEpTLW9ubHkuICovXG4gIHJlMjogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJlcGxhY2VtZW50IHRleHQuIGAkMWAga2VlcHMgYSBsZWFkaW5nIGNhcHR1cmUgKGUuZy4gdGhlIGA/dG9rZW49YCBwcmVmaXgpLiAqL1xuICByZXBsYWNlbWVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9yZGVyZWQg4oCUIGVhcmxpZXIgcGF0dGVybnMgd2luLCBzbyB0aGUgc3BlY2lmaWMgKGEgU3RyaXBlIGtleSkgaXMgbWFza2VkXG4gKiBiZWZvcmUgdGhlIGdlbmVyaWMgKGEgYHNlY3JldD1gIGFzc2lnbm1lbnQpIGNhbiBwcm9kdWNlIGEgbWVzc2llciByZXN1bHQuXG4gKi9cbmV4cG9ydCBjb25zdCBTRU5TSVRJVkVfVkFMVUVfUEFUVEVSTlM6IHJlYWRvbmx5IFNlbnNpdGl2ZVZhbHVlUGF0dGVybltdID0gW1xuICB7XG4gICAgLy8gQSBQRU0gYmxvY2sgc3BhbnMgbGluZXMsIHNvIHByb210YWlsICh3aGljaCByZXBsYWNlcyBwZXIgbGluZSkgY2FuJ3Qgc2VlXG4gICAgLy8gdGhlIHdob2xlIHRoaW5nIOKAlCBKUy1vbmx5LiBUaGUgQkVHSU4gbGluZSBhbG9uZSBpcyBzdGlsbCBhIHN0cm9uZyBzaWduYWwuXG4gICAgbmFtZTogJ3BlbV9wcml2YXRlX2tleScsXG4gICAganM6IC8tLS0tLUJFR0lOW0EtWiBdKlBSSVZBVEUgS0VZLS0tLS1bXFxzXFxTXSo/LS0tLS1FTkRbQS1aIF0qUFJJVkFURSBLRVktLS0tLS9nLFxuICAgIHJlMjogbnVsbCxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAncGVtX3ByaXZhdGVfa2V5X2hlYWRlcicsXG4gICAganM6IC8tLS0tLUJFR0lOW0EtWiBdKlBSSVZBVEUgS0VZLS0tLS0vZyxcbiAgICByZTI6ICctLS0tLUJFR0lOW0EtWiBdKlBSSVZBVEUgS0VZLS0tLS0nLFxuICAgIHJlcGxhY2VtZW50OiBSRURBQ1RFRCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdqd3QnLFxuICAgIGpzOiAvZXlKW0EtWmEtejAtOV8tXXs4LH1cXC5bQS1aYS16MC05Xy1dezgsfVxcLltBLVphLXowLTlfLV0qL2csXG4gICAgcmUyOiAnZXlKW0EtWmEtejAtOV8tXXs4LH1cXFxcLltBLVphLXowLTlfLV17OCx9XFxcXC5bQS1aYS16MC05Xy1dKicsXG4gICAgcmVwbGFjZW1lbnQ6IFJFREFDVEVELFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2JlYXJlcl90b2tlbicsXG4gICAganM6IC9iZWFyZXJcXHMrW0EtWmEtejAtOS5ffisvLV0rPSovZ2ksXG4gICAgcmUyOiAnKD9pKWJlYXJlclxcXFxzK1tBLVphLXowLTkuX34rLy1dKz0qJyxcbiAgICByZXBsYWNlbWVudDogYEJlYXJlciAke1JFREFDVEVEfWAsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYXdzX2FjY2Vzc19rZXlfaWQnLFxuICAgIGpzOiAvXFxiKD86QTNUW0EtWjAtOV18QUtJQXxBU0lBfEFCSUF8QUNDQSlbQS1aMC05XXsxNn1cXGIvZyxcbiAgICByZTI6ICdcXFxcYihBM1RbQS1aMC05XXxBS0lBfEFTSUF8QUJJQXxBQ0NBKVtBLVowLTldezE2fVxcXFxiJyxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc3RyaXBlX2tleScsXG4gICAganM6IC9cXGIoPzpza3xyaylfKD86bGl2ZXx0ZXN0KV9bQS1aYS16MC05XXsxMCx9XFxiL2csXG4gICAgcmUyOiAnXFxcXGIoc2t8cmspXyhsaXZlfHRlc3QpX1tBLVphLXowLTldezEwLH1cXFxcYicsXG4gICAgcmVwbGFjZW1lbnQ6IFJFREFDVEVELFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2dpdGh1Yl90b2tlbicsXG4gICAganM6IC9cXGJnaFtwb3Vzcl1fW0EtWmEtejAtOV17MjAsfVxcYi9nLFxuICAgIHJlMjogJ1xcXFxiZ2hbcG91c3JdX1tBLVphLXowLTldezIwLH1cXFxcYicsXG4gICAgcmVwbGFjZW1lbnQ6IFJFREFDVEVELFxuICB9LFxuICB7XG4gICAgLy8gRmluZS1ncmFpbmVkIFBBVDogYGdpdGh1Yl9wYXRfYCArIGEgMjItY2hhciBpZCArIGBfYCArIGEgNTktY2hhciBzZWNyZXQuXG4gICAgLy8gVGhlIGNsYXNzaWMgYGdoW3BvdXNyXV9gIHJ1bGUgYWJvdmUgZG9lcyBOT1QgY292ZXIgaXQgKGBpYCBpcyBub3QgaW4gdGhhdFxuICAgIC8vIGNsYXNzKSwgc28gd2l0aG91dCB0aGlzIG9uZSBhIGZpbmUtZ3JhaW5lZCBQQVQgcmVhY2hlZCBMb2tpIGluIHRoZSBjbGVhci5cbiAgICBuYW1lOiAnZ2l0aHViX2ZpbmVfZ3JhaW5lZF9wYXQnLFxuICAgIGpzOiAvXFxiZ2l0aHViX3BhdF9bQS1aYS16MC05X117MjAsfVxcYi9nLFxuICAgIHJlMjogJ1xcXFxiZ2l0aHViX3BhdF9bQS1aYS16MC05X117MjAsfVxcXFxiJyxcbiAgICByZXBsYWNlbWVudDogUkVEQUNURUQsXG4gIH0sXG4gIHtcbiAgICAvLyBHaXRMYWIgcGVyc29uYWwvcHJvamVjdC9ncm91cCBhY2Nlc3MgdG9rZW5zOiBgZ2xwYXQtYCArIDIwIGNoYXJzLlxuICAgIG5hbWU6ICdnaXRsYWJfdG9rZW4nLFxuICAgIGpzOiAvXFxiZ2xwYXQtW0EtWmEtejAtOV8tXXsyMCx9XFxiL2csXG4gICAgcmUyOiAnXFxcXGJnbHBhdC1bQS1aYS16MC05Xy1dezIwLH1cXFxcYicsXG4gICAgcmVwbGFjZW1lbnQ6IFJFREFDVEVELFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3NsYWNrX3Rva2VuJyxcbiAgICBqczogL1xcYnhveFthYnByc10tW0EtWmEtejAtOS1dezEwLH1cXGIvZyxcbiAgICByZTI6ICdcXFxcYnhveFthYnByc10tW0EtWmEtejAtOS1dezEwLH1cXFxcYicsXG4gICAgcmVwbGFjZW1lbnQ6IFJFREFDVEVELFxuICB9LFxuICB7XG4gICAgLy8gYHNjaGVtZTovL3VzZXI6cGFzc0Bob3N0YCDigJQga2VlcCB0aGUgc2NoZW1lIHNvIHRoZSBsaW5lIHN0YXlzIHJlYWRhYmxlLlxuICAgIG5hbWU6ICd1cmxfY3JlZGVudGlhbHMnLFxuICAgIGpzOiAvKFthLXpBLVpdW2EtekEtWjAtOSsuLV0qOlxcL1xcLylbXjpAL1xcc10rOlteQC9cXHNdK0AvZyxcbiAgICByZTI6ICcoW2EtekEtWl1bYS16QS1aMC05Ky4tXSo6Ly8pW146QC9cXFxcc10rOlteQC9cXFxcc10rQCcsXG4gICAgcmVwbGFjZW1lbnQ6IGAkMSR7UkVEQUNURUR9QGAsXG4gIH0sXG4gIHtcbiAgICAvLyBgP3Rva2VuPeKApmAgLyBgJmFwaV9rZXk94oCmYCBpbiBhIFVSTC4gS2VlcHMgdGhlIHBhcmFtZXRlciBuYW1lIHZpc2libGUuXG4gICAgbmFtZTogJ3VybF9zZWNyZXRfcGFyYW0nLFxuICAgIGpzOiAvKFs/Jl0oPzphY2Nlc3NbXy1dP3Rva2VufGFwaVtfLV0/a2V5fGFwaWtleXxhdXRofHBhc3N3b3JkfHNlY3JldHxzaWd8c2lnbmF0dXJlfHRva2VuKT0pW14mXFxzXCInPD5dKy9naSxcbiAgICByZTI6ICcoP2kpKFs/Jl0oYWNjZXNzW18tXT90b2tlbnxhcGlbXy1dP2tleXxhcGlrZXl8YXV0aHxwYXNzd29yZHxzZWNyZXR8c2lnfHNpZ25hdHVyZXx0b2tlbik9KVteJlxcXFxzXCJcXCc8Pl0rJyxcbiAgICByZXBsYWNlbWVudDogYCQxJHtSRURBQ1RFRH1gLFxuICB9LFxuICB7XG4gICAgLy8gYHNlY3JldD3igKZgIC8gYFwicGFzc3dvcmRcIjogXCLigKZcImAgc3R5bGUgYXNzaWdubWVudHMgaW4gZnJlZSB0ZXh0LlxuICAgIC8vIGAmYCBpcyBleGNsdWRlZCBmcm9tIHRoZSB2YWx1ZSBjbGFzcyBzbyB0aGlzIGNhbid0IHJ1biBvbiBhZnRlclxuICAgIC8vIGB1cmxfc2VjcmV0X3BhcmFtYCBhbmQgc3dhbGxvdyB0aGUgcmVzdCBvZiBhIHF1ZXJ5IHN0cmluZyDigJQgdGhlIFVSTCBydWxlXG4gICAgLy8gaGFzIGFscmVhZHkgbWFza2VkIHRob3NlLCBhbmQgdGhpcyBvbmUgbXVzdCBub3QgZWF0IGAmcGFnZT0yYC5cbiAgICBuYW1lOiAnaW5saW5lX3NlY3JldF9hc3NpZ25tZW50JyxcbiAgICBqczogLygoPzphd3NfKT8oPzpzZWNyZXRfYWNjZXNzX2tleXxjbGllbnRfc2VjcmV0fGFwaVtfLV0/a2V5fGFwaWtleXxwYXNzd29yZHxwYXNzd2R8c2VjcmV0fHRva2VuKVwiP1xccypbPTpdXFxzKlwiPylbXlxcc1wiJyw7fSZdKy9naSxcbiAgICByZTI6ICcoP2kpKCgoYXdzXyk/KHNlY3JldF9hY2Nlc3Nfa2V5fGNsaWVudF9zZWNyZXR8YXBpW18tXT9rZXl8YXBpa2V5fHBhc3N3b3JkfHBhc3N3ZHxzZWNyZXR8dG9rZW4pKVwiP1xcXFxzKls9Ol1cXFxccypcIj8pW15cXFxcc1wiXFwnLDt9Jl0rJyxcbiAgICByZXBsYWNlbWVudDogYCQxJHtSRURBQ1RFRH1gLFxuICB9LFxuXTtcblxuLyoqXG4gKiBNYXNrIHNlY3JldC1zaGFwZWQgdmFsdWVzIGluIGEgc2luZ2xlIHN0cmluZy5cbiAqXG4gKiBBbHNvIHNjcnVicyBBV1MgYWNjb3VudCBpZGVudGlmaWVycyB2aWEge0BsaW5rIHNjcnViQXdzSWRlbnRpZmllcnNGcm9tU3RyaW5nfVxuICog4oCUIGEgaGFyZCByZXBvIHJ1bGUgKGFuIEFXUyBhY2NvdW50IGlkIG11c3QgbmV2ZXIgYmUgcGVyc2lzdGVkIG9yIHN1cmZhY2VkKSxcbiAqIGNvbXBvc2VkIGhlcmUgcmF0aGVyIHRoYW4gZHVwbGljYXRlZCBzbyB0aGUgdHdvIHJ1bGVzIGNhbid0IGRyaWZ0LlxuICpcbiAqIE5vbi10aHJvd2luZyBhbmQgYWxsb2NhdGlvbi1saWdodCBvbiB0aGUgY29tbW9uIHBhdGg6IHN0cmluZ3Mgd2l0aCBubyBtYXRjaFxuICogY29tZSBiYWNrIGJ5IGlkZW50aXR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFza0xpbmUoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5wdXQpIHJldHVybiBpbnB1dDtcbiAgbGV0IG91dCA9IGlucHV0O1xuICBmb3IgKGNvbnN0IHsganMsIHJlcGxhY2VtZW50IH0gb2YgU0VOU0lUSVZFX1ZBTFVFX1BBVFRFUk5TKSB7XG4gICAgLy8gYGpzYCBjYXJyaWVzIHRoZSAvZyBmbGFnLCBzbyByZXNldCBsYXN0SW5kZXgg4oCUIGEgc2hhcmVkIFJlZ0V4cCBvYmplY3QgaXNcbiAgICAvLyBzdGF0ZWZ1bCBhY3Jvc3MgY2FsbHMgYW5kIHdvdWxkIG90aGVyd2lzZSBza2lwIG1hdGNoZXMgaW50ZXJtaXR0ZW50bHkuXG4gICAganMubGFzdEluZGV4ID0gMDtcbiAgICBvdXQgPSBvdXQucmVwbGFjZShqcywgcmVwbGFjZW1lbnQpO1xuICB9XG4gIHJldHVybiBzY3J1YkF3c0lkZW50aWZpZXJzRnJvbVN0cmluZyhvdXQpO1xufVxuXG4vKipcbiAqIERvZXMgdGhpcyBzdHJpbmcgbG9vayBsaWtlIGl0IENPTlRBSU5TIGEgc2VjcmV0PyBVc2VkIHRvIHJlamVjdCBsb2ctc2VhcmNoXG4gKiB0ZXJtcywgY2xvc2luZyB0aGUgb3RoZXIgZW5kIG9mIHRoZSBvcmFjbGUgZGVzY3JpYmVkIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlOlxuICogbWFza2luZyB0aGUgcmVzdWx0IGlzIHBvaW50bGVzcyBpZiB0aGUgcXVlcnkgaXRzZWxmIGNhbiBjb25maXJtIGEgZ3Vlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb29rc1NlbnNpdGl2ZShpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIG1hc2tMaW5lKGlucHV0KSAhPT0gaW5wdXQ7XG59XG4iXX0=
|
|
@@ -2,11 +2,11 @@ export { VisibilitySchema, MAX_PAGE_LIMIT, DEFAULT_PAGE_LIMIT, UUIDPrefixSchema,
|
|
|
2
2
|
export * from './pipeline-schemas.js';
|
|
3
3
|
export { PipelineTemplateFilterSchema, PipelineTemplateCreateSchema, PipelineTemplateUpdateSchema, InstantiateTemplateSchema, } from './pipeline-template-schemas.js';
|
|
4
4
|
export * from './plugin-schemas.js';
|
|
5
|
-
export { isAllowedSpdxId, projectUrlProblem, validateCatalogField, findContractKeys, contractKeysMessage,
|
|
5
|
+
export { isAllowedSpdxId, projectUrlProblem, validateCatalogField, findContractKeys, contractKeysMessage, ICON_KEY_PATTERN, PluginCatalogEditsSchema, type PluginCatalogEdits, PLUGIN_CONTRACT_FIELDS, } from './plugin-catalog-metadata.js';
|
|
6
6
|
export { isAllowedAttachmentType, MessageTypeSchema, MessagePrioritySchema, MessageFilterSchema, MESSAGE_ATTACHMENT_MAX_BYTES, MESSAGE_ATTACHMENT_ALLOWED_MIME, MessageCreateSchema, MessageReplySchema, MessageEditSchema, } from './message-schemas.js';
|
|
7
7
|
export * from './ai-schemas.js';
|
|
8
8
|
export { validate, validateQuery, validateBody, } from './middleware.js';
|
|
9
|
-
export { isValidEgressHost, checkPluginSpec, checkPluginConfig, pluginSpecRequiredFieldsProblem, PLUGIN_TYPES, PLUGIN_COMPUTE_TYPES,
|
|
9
|
+
export { isValidEgressHost, checkPluginSpec, checkPluginConfig, pluginSpecRequiredFieldsProblem, PLUGIN_TYPES, PLUGIN_COMPUTE_TYPES, type PluginBuildType, PLUGIN_NAME_PATTERN, PLUGIN_VERSION_PATTERN, type PluginSpecInput, type PackageCheck, } from './plugin-spec-schema.js';
|
|
10
10
|
export { stripInlineMarkdown, readmeTitle, readmeFirstParagraph, firstSentence, detectCatalogMetadata, resolveCatalogMetadata, acceptAllCatalogMetadata, parseCatalogEdits, parseCatalogEditsPart, type DetectedField, type CatalogSpecFields, type ResolvedCatalog, } from './plugin-catalog-detect.js';
|
|
11
11
|
export { parseLabelArgs, parseDockerfile, OCI_LABELS, } from './dockerfile-static.js';
|
|
12
12
|
export { isPluginTemplatableField, checkPluginTemplates, formatPluginTemplateIssue, PLUGIN_TEMPLATE_SCOPE_ROOTS, type PluginTemplateEngine, type PluginTemplateIssue, } from './plugin-template-contract.js';
|
package/lib/validation/index.js
CHANGED
|
@@ -4,11 +4,11 @@ export { VisibilitySchema, MAX_PAGE_LIMIT, DEFAULT_PAGE_LIMIT, UUIDPrefixSchema,
|
|
|
4
4
|
export * from './pipeline-schemas.js';
|
|
5
5
|
export { PipelineTemplateFilterSchema, PipelineTemplateCreateSchema, PipelineTemplateUpdateSchema, InstantiateTemplateSchema, } from './pipeline-template-schemas.js';
|
|
6
6
|
export * from './plugin-schemas.js';
|
|
7
|
-
export { isAllowedSpdxId, projectUrlProblem, validateCatalogField, findContractKeys, contractKeysMessage,
|
|
7
|
+
export { isAllowedSpdxId, projectUrlProblem, validateCatalogField, findContractKeys, contractKeysMessage, ICON_KEY_PATTERN, PluginCatalogEditsSchema, PLUGIN_CONTRACT_FIELDS, } from './plugin-catalog-metadata.js';
|
|
8
8
|
export { isAllowedAttachmentType, MessageTypeSchema, MessagePrioritySchema, MessageFilterSchema, MESSAGE_ATTACHMENT_MAX_BYTES, MESSAGE_ATTACHMENT_ALLOWED_MIME, MessageCreateSchema, MessageReplySchema, MessageEditSchema, } from './message-schemas.js';
|
|
9
9
|
export * from './ai-schemas.js';
|
|
10
10
|
export { validate, validateQuery, validateBody, } from './middleware.js';
|
|
11
|
-
export { isValidEgressHost, checkPluginSpec, checkPluginConfig, pluginSpecRequiredFieldsProblem, PLUGIN_TYPES, PLUGIN_COMPUTE_TYPES,
|
|
11
|
+
export { isValidEgressHost, checkPluginSpec, checkPluginConfig, pluginSpecRequiredFieldsProblem, PLUGIN_TYPES, PLUGIN_COMPUTE_TYPES, PLUGIN_NAME_PATTERN, PLUGIN_VERSION_PATTERN, } from './plugin-spec-schema.js';
|
|
12
12
|
export { stripInlineMarkdown, readmeTitle, readmeFirstParagraph, firstSentence, detectCatalogMetadata, resolveCatalogMetadata, acceptAllCatalogMetadata, parseCatalogEdits, parseCatalogEditsPart, } from './plugin-catalog-detect.js';
|
|
13
13
|
export { parseLabelArgs, parseDockerfile, OCI_LABELS, } from './dockerfile-static.js';
|
|
14
14
|
export { isPluginTemplatableField, checkPluginTemplates, formatPluginTemplateIssue, PLUGIN_TEMPLATE_SCOPE_ROOTS, } from './plugin-template-contract.js';
|
|
@@ -16,4 +16,4 @@ export { lintPluginDockerfile, lintPluginSpec } from './plugin-lint.js';
|
|
|
16
16
|
export * from './plugin-base-images.js';
|
|
17
17
|
export { shannonEntropy, scanPluginSourceHeuristics, blockingHeuristics, HEURISTICS_MAX_FILE_BYTES, HEURISTICS_MAX_FINDINGS, } from './plugin-heuristics.js';
|
|
18
18
|
export { findConfusableName } from './plugin-name-confusable.js';
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qix5QkFBeUIsR0FDMUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQix3QkFBd0IsRUFFeEIsc0JBQXNCLEdBQ3ZCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsaUJBQWlCLEdBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEdBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsK0JBQStCLEVBQy9CLFlBQVksRUFDWixvQkFBb0IsRUFFcEIsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUd2QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUl0QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFVBQVUsR0FDWCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHlCQUF5QixFQUN6QiwyQkFBMkIsR0FHNUIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUEwQixNQUFNLGtCQUFrQixDQUFDO0FBQ2hHLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsT0FBTyxFQUNMLGNBQWMsRUFDZCwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBS2xCLHlCQUF5QixFQUN6Qix1QkFBdUIsR0FDeEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICBWaXNpYmlsaXR5U2NoZW1hLFxuICBNQVhfUEFHRV9MSU1JVCxcbiAgREVGQVVMVF9QQUdFX0xJTUlULFxuICBVVUlEUHJlZml4U2NoZW1hLFxufSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUtc2NoZW1hcy5qcyc7XG5leHBvcnQge1xuICBQaXBlbGluZVRlbXBsYXRlRmlsdGVyU2NoZW1hLFxuICBQaXBlbGluZVRlbXBsYXRlQ3JlYXRlU2NoZW1hLFxuICBQaXBlbGluZVRlbXBsYXRlVXBkYXRlU2NoZW1hLFxuICBJbnN0YW50aWF0ZVRlbXBsYXRlU2NoZW1hLFxufSBmcm9tICcuL3BpcGVsaW5lLXRlbXBsYXRlLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4tc2NoZW1hcy5qcyc7XG5leHBvcnQge1xuICBpc0FsbG93ZWRTcGR4SWQsXG4gIHByb2plY3RVcmxQcm9ibGVtLFxuICB2YWxpZGF0ZUNhdGFsb2dGaWVsZCxcbiAgZmluZENvbnRyYWN0S2V5cyxcbiAgY29udHJhY3RLZXlzTWVzc2FnZSxcbiAgSUNPTl9LRVlfUEFUVEVSTixcbiAgUGx1Z2luQ2F0YWxvZ0VkaXRzU2NoZW1hLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dFZGl0cyxcbiAgUExVR0lOX0NPTlRSQUNUX0ZJRUxEUyxcbn0gZnJvbSAnLi9wbHVnaW4tY2F0YWxvZy1tZXRhZGF0YS5qcyc7XG5leHBvcnQge1xuICBpc0FsbG93ZWRBdHRhY2htZW50VHlwZSxcbiAgTWVzc2FnZVR5cGVTY2hlbWEsXG4gIE1lc3NhZ2VQcmlvcml0eVNjaGVtYSxcbiAgTWVzc2FnZUZpbHRlclNjaGVtYSxcbiAgTUVTU0FHRV9BVFRBQ0hNRU5UX01BWF9CWVRFUyxcbiAgTUVTU0FHRV9BVFRBQ0hNRU5UX0FMTE9XRURfTUlNRSxcbiAgTWVzc2FnZUNyZWF0ZVNjaGVtYSxcbiAgTWVzc2FnZVJlcGx5U2NoZW1hLFxuICBNZXNzYWdlRWRpdFNjaGVtYSxcbn0gZnJvbSAnLi9tZXNzYWdlLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9haS1zY2hlbWFzLmpzJztcbmV4cG9ydCB7XG4gIHZhbGlkYXRlLFxuICB2YWxpZGF0ZVF1ZXJ5LFxuICB2YWxpZGF0ZUJvZHksXG59IGZyb20gJy4vbWlkZGxld2FyZS5qcyc7XG5leHBvcnQge1xuICBpc1ZhbGlkRWdyZXNzSG9zdCxcbiAgY2hlY2tQbHVnaW5TcGVjLFxuICBjaGVja1BsdWdpbkNvbmZpZyxcbiAgcGx1Z2luU3BlY1JlcXVpcmVkRmllbGRzUHJvYmxlbSxcbiAgUExVR0lOX1RZUEVTLFxuICBQTFVHSU5fQ09NUFVURV9UWVBFUyxcbiAgdHlwZSBQbHVnaW5CdWlsZFR5cGUsXG4gIFBMVUdJTl9OQU1FX1BBVFRFUk4sXG4gIFBMVUdJTl9WRVJTSU9OX1BBVFRFUk4sXG4gIHR5cGUgUGx1Z2luU3BlY0lucHV0LFxuICB0eXBlIFBhY2thZ2VDaGVjayxcbn0gZnJvbSAnLi9wbHVnaW4tc3BlYy1zY2hlbWEuanMnO1xuZXhwb3J0IHtcbiAgc3RyaXBJbmxpbmVNYXJrZG93bixcbiAgcmVhZG1lVGl0bGUsXG4gIHJlYWRtZUZpcnN0UGFyYWdyYXBoLFxuICBmaXJzdFNlbnRlbmNlLFxuICBkZXRlY3RDYXRhbG9nTWV0YWRhdGEsXG4gIHJlc29sdmVDYXRhbG9nTWV0YWRhdGEsXG4gIGFjY2VwdEFsbENhdGFsb2dNZXRhZGF0YSxcbiAgcGFyc2VDYXRhbG9nRWRpdHMsXG4gIHBhcnNlQ2F0YWxvZ0VkaXRzUGFydCxcbiAgdHlwZSBEZXRlY3RlZEZpZWxkLFxuICB0eXBlIENhdGFsb2dTcGVjRmllbGRzLFxuICB0eXBlIFJlc29sdmVkQ2F0YWxvZyxcbn0gZnJvbSAnLi9wbHVnaW4tY2F0YWxvZy1kZXRlY3QuanMnO1xuZXhwb3J0IHtcbiAgcGFyc2VMYWJlbEFyZ3MsXG4gIHBhcnNlRG9ja2VyZmlsZSxcbiAgT0NJX0xBQkVMUyxcbn0gZnJvbSAnLi9kb2NrZXJmaWxlLXN0YXRpYy5qcyc7XG5leHBvcnQge1xuICBpc1BsdWdpblRlbXBsYXRhYmxlRmllbGQsXG4gIGNoZWNrUGx1Z2luVGVtcGxhdGVzLFxuICBmb3JtYXRQbHVnaW5UZW1wbGF0ZUlzc3VlLFxuICBQTFVHSU5fVEVNUExBVEVfU0NPUEVfUk9PVFMsXG4gIHR5cGUgUGx1Z2luVGVtcGxhdGVFbmdpbmUsXG4gIHR5cGUgUGx1Z2luVGVtcGxhdGVJc3N1ZSxcbn0gZnJvbSAnLi9wbHVnaW4tdGVtcGxhdGUtY29udHJhY3QuanMnO1xuZXhwb3J0IHsgbGludFBsdWdpbkRvY2tlcmZpbGUsIGxpbnRQbHVnaW5TcGVjLCB0eXBlIFBsdWdpbkxpbnRGaW5kaW5nIH0gZnJvbSAnLi9wbHVnaW4tbGludC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi1iYXNlLWltYWdlcy5qcyc7XG5leHBvcnQge1xuICBzaGFubm9uRW50cm9weSxcbiAgc2NhblBsdWdpblNvdXJjZUhldXJpc3RpY3MsXG4gIGJsb2NraW5nSGV1cmlzdGljcyxcbiAgdHlwZSBIZXVyaXN0aWNTZXZlcml0eSxcbiAgdHlwZSBIZXVyaXN0aWNGaW5kaW5nLFxuICB0eXBlIEhldXJpc3RpY3NSZXBvcnQsXG4gIHR5cGUgSGV1cmlzdGljc0lucHV0RmlsZSxcbiAgSEVVUklTVElDU19NQVhfRklMRV9CWVRFUyxcbiAgSEVVUklTVElDU19NQVhfRklORElOR1MsXG59IGZyb20gJy4vcGx1Z2luLWhldXJpc3RpY3MuanMnO1xuZXhwb3J0IHsgZmluZENvbmZ1c2FibGVOYW1lIH0gZnJvbSAnLi9wbHVnaW4tbmFtZS1jb25mdXNhYmxlLmpzJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@asteasolutions/zod-to-openapi": "9.1.0",
|
|
27
27
|
"@aws-sdk/client-kms": "3.1136.0",
|
|
28
|
+
"@aws-sdk/client-s3": "3.1136.0",
|
|
28
29
|
"@aws-sdk/client-sts": "3.1136.0",
|
|
29
30
|
"@aws-sdk/credential-providers": "3.1136.0",
|
|
30
31
|
"express": "5.2.1",
|
|
@@ -100,10 +101,13 @@
|
|
|
100
101
|
],
|
|
101
102
|
"plugin-catalog": [
|
|
102
103
|
"lib/types/plugin-catalog.d.ts"
|
|
104
|
+
],
|
|
105
|
+
"ask-proposals": [
|
|
106
|
+
"lib/types/ask-proposals.d.ts"
|
|
103
107
|
]
|
|
104
108
|
}
|
|
105
109
|
},
|
|
106
|
-
"version": "4.1.
|
|
110
|
+
"version": "4.1.21",
|
|
107
111
|
"bugs": {
|
|
108
112
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
109
113
|
},
|
|
@@ -225,10 +229,18 @@
|
|
|
225
229
|
"types": "./lib/types/plugin-catalog.d.ts",
|
|
226
230
|
"default": "./lib/types/plugin-catalog.js"
|
|
227
231
|
},
|
|
232
|
+
"./ask-proposals": {
|
|
233
|
+
"types": "./lib/types/ask-proposals.d.ts",
|
|
234
|
+
"default": "./lib/types/ask-proposals.js"
|
|
235
|
+
},
|
|
228
236
|
"./testing": {
|
|
229
237
|
"types": "./lib/testing/index.d.ts",
|
|
230
238
|
"default": "./lib/testing/index.js"
|
|
231
239
|
},
|
|
240
|
+
"./s3": {
|
|
241
|
+
"types": "./lib/services/s3-client.d.ts",
|
|
242
|
+
"default": "./lib/services/s3-client.js"
|
|
243
|
+
},
|
|
232
244
|
"./lib/*": "./lib/*",
|
|
233
245
|
"./package.json": "./package.json"
|
|
234
246
|
},
|