@pipeline-builder/api-core 5.2.2 → 5.2.4
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/constants/ai-providers.d.ts +3 -22
- package/lib/constants/ai-providers.js +6 -56
- package/lib/errors/app-errors.d.ts +14 -0
- package/lib/errors/app-errors.js +21 -1
- package/lib/helpers/index.d.ts +1 -0
- package/lib/helpers/index.js +2 -1
- package/lib/helpers/sse-helpers.d.ts +33 -3
- package/lib/helpers/sse-helpers.js +91 -19
- package/lib/helpers/support-calendar.d.ts +69 -0
- package/lib/helpers/support-calendar.js +179 -0
- package/lib/middleware/auth.js +6 -3
- package/lib/middleware/deferred-quota-check.d.ts +5 -0
- package/lib/middleware/deferred-quota-check.js +33 -0
- package/lib/middleware/ecosystem-guard.d.ts +3 -3
- package/lib/middleware/ecosystem-guard.js +5 -5
- package/lib/middleware/index.d.ts +5 -2
- package/lib/middleware/index.js +6 -3
- package/lib/middleware/on-behalf.d.ts +37 -0
- package/lib/middleware/on-behalf.js +143 -0
- package/lib/middleware/permission-gates.d.ts +11 -0
- package/lib/middleware/permission-gates.js +7 -1
- package/lib/middleware/quota-exempt-routes.d.ts +36 -0
- package/lib/middleware/quota-exempt-routes.js +47 -0
- package/lib/middleware/route-table.d.ts +104 -0
- package/lib/middleware/route-table.js +72 -2
- package/lib/middleware/service-tokens.d.ts +8 -0
- package/lib/middleware/service-tokens.js +5 -3
- package/lib/middleware/step-up.js +11 -1
- package/lib/services/ai-call-weight.d.ts +24 -0
- package/lib/services/ai-call-weight.js +77 -0
- package/lib/services/alert-delivery.d.ts +99 -0
- package/lib/services/alert-delivery.js +132 -0
- package/lib/services/audit-context.d.ts +105 -0
- package/lib/services/audit-context.js +134 -0
- package/lib/services/index.d.ts +10 -2
- package/lib/services/index.js +10 -2
- package/lib/services/org-ai-client.d.ts +61 -0
- package/lib/services/org-ai-client.js +112 -0
- package/lib/services/pagerduty-inbound.d.ts +101 -0
- package/lib/services/pagerduty-inbound.js +195 -0
- package/lib/services/pagerduty.d.ts +109 -0
- package/lib/services/pagerduty.js +186 -0
- package/lib/services/quota-increment-batcher.d.ts +81 -0
- package/lib/services/quota-increment-batcher.js +166 -0
- package/lib/services/quota.d.ts +158 -14
- package/lib/services/quota.js +252 -22
- package/lib/services/remote-audit-client.d.ts +44 -1
- package/lib/services/remote-audit-client.js +106 -20
- package/lib/services/version-vuln-policy.d.ts +174 -0
- package/lib/services/version-vuln-policy.js +242 -0
- package/lib/types/ai-catalog.d.ts +63 -0
- package/lib/types/ai-catalog.js +82 -0
- package/lib/types/ask-proposals.js +6 -6
- package/lib/types/build-catalog.d.ts +154 -0
- package/lib/types/build-catalog.js +158 -0
- package/lib/types/common.d.ts +37 -3
- package/lib/types/common.js +20 -2
- package/lib/types/ecosystem-notifications.d.ts +5 -5
- package/lib/types/ecosystem-notifications.js +9 -3
- package/lib/types/error-codes.d.ts +13 -6
- package/lib/types/error-codes.js +18 -8
- package/lib/types/feature-flags.d.ts +71 -1
- package/lib/types/feature-flags.js +131 -11
- package/lib/types/index.d.ts +6 -4
- package/lib/types/index.js +12 -5
- package/lib/types/metadata-keys.d.ts +6 -0
- package/lib/types/metadata-keys.js +4 -1
- package/lib/types/permissions.d.ts +351 -3
- package/lib/types/permissions.js +610 -21
- package/lib/types/pipeline.d.ts +39 -0
- package/lib/types/pipeline.js +57 -1
- package/lib/types/plugin-health.d.ts +0 -2
- package/lib/types/plugin-health.js +1 -11
- package/lib/types/plugin-scan.d.ts +192 -42
- package/lib/types/plugin-scan.js +159 -43
- package/lib/types/quota-catalog.d.ts +247 -0
- package/lib/types/quota-catalog.js +122 -0
- package/lib/types/quota-tiers.d.ts +150 -0
- package/lib/types/quota-tiers.js +167 -2
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +217 -4
- package/lib/types/wire-vocabulary.js +8 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/response.d.ts +35 -2
- package/lib/utils/response.js +42 -3
- package/lib/validation/ai-schemas.d.ts +27 -0
- package/lib/validation/ai-schemas.js +31 -5
- package/lib/validation/plugin-schemas.d.ts +15 -0
- package/lib/validation/plugin-schemas.js +28 -1
- package/package.json +31 -2
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, paginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, } from './response.js';
|
|
8
|
+
export { sendSuccess, sendError, sendQuotaExceeded, quotaExceededMessage, sendPaginatedNested, paginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, } from './response.js';
|
|
9
9
|
export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseReportTimezone, parseWeekStart, isValidTimezone, parseDateRange, REPORT_INTERVALS, WEEK_STARTS, } from './params.js';
|
|
10
10
|
export * from './headers.js';
|
|
11
11
|
export * from './identity.js';
|
|
@@ -32,4 +32,4 @@ export * from './service-registry.js';
|
|
|
32
32
|
export * from './retention.js';
|
|
33
33
|
export * from './compliance-attributes.js';
|
|
34
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';
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBRVosTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsb0JBQW9CLEVBRXBCLG1CQUFtQixFQUNuQixjQUFjLEVBRWQsY0FBYyxFQUNkLFlBQVksRUFDWixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUd0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxlQUFlLEVBQ2YsY0FBYyxFQUlkLGdCQUFnQixFQUNoQixXQUFXLEdBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIseUVBQXlFO0FBQ3pFLG1FQUFtRTtBQUNuRSx5RUFBeUU7QUFDekUsOEVBQThFO0FBQzlFLGlDQUFpQztBQUNqQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsZUFBZSxFQUNmLGNBQWMsRUFDZCxhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixVQUFVLEdBQ1gsTUFBTSxVQUFVLENBQUM7QUFLbEIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixxQkFBcUIsR0FDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsRUFHZixjQUFjLEVBQ2QsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixvQkFBb0IsRUFHcEIsb0JBQW9CLEdBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEdBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsRUFDUix3QkFBd0IsR0FDekIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixTQUFTLEdBRVYsTUFBTSxXQUFXLENBQUM7QUFDbkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsWUFBWSxFQUNaLGVBQWUsRUFDZiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixvQkFBb0IsR0FHckIsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICBzZXRMb2dDb250ZXh0UHJvdmlkZXIsXG4gIHJlZGFjdFNlbnNpdGl2ZSxcbiAgY3JlYXRlTG9nZ2VyLFxuICB0eXBlIExvZ2dlcixcbiAgbG9nZ2VyLFxuICBkZWZhdWx0LFxufSBmcm9tICcuL2xvZ2dlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS1rZXkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYWZlLXJlcXVpcmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWN1cmUtY29tcGFyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NyYXNoLWhhbmRsZXJzLmpzJztcbmV4cG9ydCB7XG4gIHNlbmRTdWNjZXNzLFxuICBzZW5kRXJyb3IsXG4gIHNlbmRRdW90YUV4Y2VlZGVkLFxuICBxdW90YUV4Y2VlZGVkTWVzc2FnZSxcbiAgdHlwZSBRdW90YUV4Y2VlZGVkRGV0YWlscyxcbiAgc2VuZFBhZ2luYXRlZE5lc3RlZCxcbiAgcGFnaW5hdGlvbk1ldGEsXG4gIHR5cGUgUGFnaW5hdGlvbk1ldGEsXG4gIGV4dHJhY3REYkVycm9yLFxuICBlcnJvck1lc3NhZ2UsXG4gIHNlbmRCYWRSZXF1ZXN0LFxuICBzZW5kSW50ZXJuYWxFcnJvcixcbiAgcGFyc2VQYWdpbmF0aW9uUGFyYW1zLFxuICB0eXBlIFBhZ2luYXRpb25QYXJhbXMsXG4gIHR5cGUgU29ydFBhcmFtcyxcbn0gZnJvbSAnLi9yZXNwb25zZS5qcyc7XG5leHBvcnQge1xuICBnZXRQYXJhbSxcbiAgcGFyc2VRdWVyeUludCxcbiAgcGFyc2VRdWVyeVN0cmluZyxcbiAgcGFyc2VPcHRpb25hbERhdGUsXG4gIHBhcnNlUG9zaXRpdmVJbnQsXG4gIHBhcnNlUXVlcnlJbnRDbGFtcGVkLFxuICBwYXJzZVBhZ2UsXG4gIHZhbGlkYXRlQnVsa0FycmF5LFxuICBwYXJzZVJlcG9ydEludGVydmFsLFxuICBwYXJzZVJlcG9ydFRpbWV6b25lLFxuICBwYXJzZVdlZWtTdGFydCxcbiAgaXNWYWxpZFRpbWV6b25lLFxuICBwYXJzZURhdGVSYW5nZSxcbiAgdHlwZSBQYWdlLFxuICB0eXBlIFJlcG9ydEludGVydmFsLFxuICB0eXBlIFdlZWtTdGFydCxcbiAgUkVQT1JUX0lOVEVSVkFMUyxcbiAgV0VFS19TVEFSVFMsXG59IGZyb20gJy4vcGFyYW1zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkZW50aXR5LmpzJztcbi8vIEpXSyBwcmltaXRpdmVzLiBQbGF0Zm9ybSBJUyB0aGUgdG9rZW4gc2lnbmVyLCBzbyBpdCBsZWdpdGltYXRlbHkgbmVlZHNcbi8vIGBwdWJsaWNKd2tGcm9tYCArIGBkZXJUb0pvc2VTaWduYXR1cmVgIGZyb20gdGhlIHBhY2thZ2Ugc3VyZmFjZS5cbi8vIGBqd2tUaHVtYnByaW50YCBhbmQgYHB1YmxpY0tleUZyb21Kd2tgIGFyZSBraWQtZGVyaXZhdGlvbi92ZXJpZmljYXRpb25cbi8vIHBsdW1iaW5nIHVzZWQgb25seSBpbnNpZGUgYXBpLWNvcmUg4oCUIGRlZXAtaW1wb3J0IHRoZW0gZnJvbSB0aGVyZSBpbnN0ZWFkIG9mXG4vLyBsZWFraW5nIHRoZW0gdG8gZXZlcnkgc2VydmljZS5cbmV4cG9ydCB7XG4gIFVTRVJfVE9LRU5fQUxHT1JJVEhNLFxuICBVU0VSX1RPS0VOX0NVUlZFLFxuICBKV0tTX1BBVEgsXG4gIGRlY29kZUp3dEhlYWRlcixcbiAgaXNKd2tzRG9jdW1lbnQsXG4gIHB1YmxpY0p3a0Zyb20sXG4gIGRlclRvSm9zZVNpZ25hdHVyZSxcbiAgZW5jb2RlSndzU2lnbmluZ0lucHV0LFxuICBjb21wYWN0SndzLFxufSBmcm9tICcuL2p3ay5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFB1YmxpY0p3ayxcbiAgSndrc0RvY3VtZW50LFxufSBmcm9tICcuL2p3ay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUuanMnO1xuZXhwb3J0IHtcbiAgcmVzZXRTdXBwb3J0QWxpYXNlc0NhY2hlLFxuICBnZXRQcmltYXJ5U3VwcG9ydEFsaWFzLFxuICBnZXRBbGxTdXBwb3J0QWxpYXNlcyxcbiAgcmVzb2x2ZVJlY2lwaWVudEFsaWFzLFxuICBERUZBVUxUX1NVUFBPUlRfQUxJQVMsXG59IGZyb20gJy4vYWxpYXMtcmVzb2x2ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25jdXJyZW5jeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2F1ZGl0LmpzJztcbmV4cG9ydCB7XG4gIGdldERlZmF1bHRLZXlQcm92aWRlcixcbiAgcmVzZXREZWZhdWx0S2V5UHJvdmlkZXIsXG4gIHNldEtleVByb3ZpZGVyLFxuICBlbmNyeXB0U2VjcmV0LFxuICBkZWNyeXB0U2VjcmV0LFxuICBpc0VuY3J5cHRlZEJsb2IsXG4gIHR5cGUgRW5jcnlwdGVkQmxvYixcbiAgdHlwZSBLZXlQcm92aWRlcixcbiAgRW52S2V5UHJvdmlkZXIsXG4gIEttc0tleVByb3ZpZGVyLFxuICBjcmVhdGVCYXNlS2V5UHJvdmlkZXIsXG4gIGluaXRTZWNyZXRFbmNyeXB0aW9uLFxuICB0eXBlIFBlck9yZ0ttc0NvbmZpZyxcbiAgdHlwZSBQZXJPcmdLbXNSZXNvbHZlcixcbiAgUGVyT3JnS21zS2V5UHJvdmlkZXIsXG59IGZyb20gJy4vc2VjcmV0LWVuY3J5cHRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWNyZXQtcm90YXRpb24uanMnO1xuZXhwb3J0IHtcbiAgc2V0Q291bnRlckVtaXR0ZXIsXG4gIHJlc2V0Q291bnRlckVtaXR0ZXIsXG4gIHNldEdhdWdlRW1pdHRlcixcbiAgcmVzZXRHYXVnZUVtaXR0ZXIsXG4gIGVtaXRHYXVnZSxcbiAgZW1pdENvdW50ZXIsXG59IGZyb20gJy4vbWV0cmljLWVtaXR0ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hd3Mtc2NydWIuanMnO1xuZXhwb3J0IHtcbiAgZXh0cmFjdFByZWRpY2F0ZSxcbiAgU1BEWF9QUkVESUNBVEVfVFlQRSxcbn0gZnJvbSAnLi9kc3NlLmpzJztcbmV4cG9ydCB7XG4gIG1hc2tMaW5lLFxuICBsb29rc1NlbnNpdGl2ZSxcbiAgUkVEQUNURUQsXG4gIFNFTlNJVElWRV9WQUxVRV9QQVRURVJOUyxcbn0gZnJvbSAnLi9zZW5zaXRpdmUtcGF0dGVybnMuanMnO1xuZXhwb3J0IHtcbiAgaXNQcml2YXRlQWRkcmVzcyxcbiAgYXNzZXJ0U2FmZVVybCxcbiAgc2FmZUZldGNoLFxuICB0eXBlIFNhZmVGZXRjaFJlc3BvbnNlLFxufSBmcm9tICcuL3NzcmYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmV0ZW50aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcGxpYW5jZS1hdHRyaWJ1dGVzLmpzJztcbmV4cG9ydCB7XG4gIGxlYWRpbmdaZXJvQml0cyxcbiAgcHJvb2ZPZldvcmtIYXNoLFxuICBjaGFsbGVuZ2VLZXksXG4gIGNsYW1wRGlmZmljdWx0eSxcbiAgY3JlYXRlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHBhcnNlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHZlcmlmeVByb29mT2ZXb3JrLFxuICBzb2x2ZVByb29mT2ZXb3JrLFxuICBQT1dfREVGQVVMVF9ESUZGSUNVTFRZLFxuICBQT1dfTUFYX0RJRkZJQ1VMVFksXG4gIFBPV19DSEFMTEVOR0VfVFRMX01TLFxuICB0eXBlIFByb29mT2ZXb3JrQ2hhbGxlbmdlLFxuICB0eXBlIFByb29mT2ZXb3JrU29sdXRpb24sXG59IGZyb20gJy4vcHJvb2Ytb2Ytd29yay5qcyc7XG4iXX0=
|
package/lib/utils/response.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Response } from 'express';
|
|
2
|
-
import type
|
|
2
|
+
import { type QuotaInfo } from '../types/common.js';
|
|
3
3
|
import { ErrorCode } from '../types/error-codes.js';
|
|
4
4
|
/**
|
|
5
5
|
* Send a standardized success response.
|
|
@@ -32,20 +32,53 @@ export declare function sendSuccess<T>(res: Response, statusCode?: number, data?
|
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
34
34
|
export declare function sendError(res: Response, statusCode: number, message: string, code?: ErrorCode | string, details?: unknown): void;
|
|
35
|
+
/**
|
|
36
|
+
* The structured half of every 429 `QUOTA_EXCEEDED` body (`details`). Stable
|
|
37
|
+
* wire contract — the dashboard, the CLI and the pipeline Lambda all render a
|
|
38
|
+
* quota refusal from these fields rather than parsing `message`.
|
|
39
|
+
*/
|
|
40
|
+
export interface QuotaExceededDetails {
|
|
41
|
+
quota: QuotaInfo;
|
|
42
|
+
quotaType: string;
|
|
43
|
+
limit: number;
|
|
44
|
+
used: number;
|
|
45
|
+
/** ISO timestamp the period resets (absent when the caller didn't know). */
|
|
46
|
+
resetAt?: string;
|
|
47
|
+
/** Where a person raises the limit (relative to the dashboard origin). */
|
|
48
|
+
upgradeUrl: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The human sentence for a quota refusal: what ran out, when it comes back and
|
|
52
|
+
* where to raise it — "API call quota reached (25000/25000); resets 2026-11-05.
|
|
53
|
+
* Upgrade at /dashboard/billing." It says WHICH quota and gives a date, because
|
|
54
|
+
* "contact your administrator" sent people hunting for a person when the answer
|
|
55
|
+
* was a page.
|
|
56
|
+
*/
|
|
57
|
+
export declare function quotaExceededMessage(quotaType: string, quota: Pick<QuotaInfo, 'limit' | 'used'>, resetAt?: string): string;
|
|
35
58
|
/**
|
|
36
59
|
* Send a quota exceeded error response.
|
|
37
60
|
*
|
|
61
|
+
* The body carries `details` ({@link QuotaExceededDetails}: quotaType, limit,
|
|
62
|
+
* used, resetAt, upgradeUrl) and the {@link quotaExceededMessage} sentence; the
|
|
63
|
+
* `Retry-After` + `X-Quota-*` headers repeat the numbers for clients that only
|
|
64
|
+
* read headers. Counts `quota_denied_total{type}` — every user-facing quota
|
|
65
|
+
* refusal, labelled by the emitting `service`.
|
|
66
|
+
*
|
|
38
67
|
* @param res - Express response object
|
|
39
68
|
* @param quotaType - Type of quota exceeded
|
|
40
69
|
* @param quota - Current quota information
|
|
41
70
|
* @param resetAt - ISO timestamp when quota resets
|
|
71
|
+
* @param message - Override for the human sentence (rarely right — the default names the quota, the reset date and the upgrade page)
|
|
72
|
+
* @param options.countDenial - `false` for an INTERNAL refusal another service re-answers (the quota service's own /increment), so one refusal is counted once
|
|
42
73
|
*
|
|
43
74
|
* @example
|
|
44
75
|
* ```typescript
|
|
45
76
|
* sendQuotaExceeded(res, 'apiCalls', { type: 'apiCalls', limit: 10000, used: 10000, remaining: 0 }, resetAt);
|
|
46
77
|
* ```
|
|
47
78
|
*/
|
|
48
|
-
export declare function sendQuotaExceeded(res: Response, quotaType: string, quota: QuotaInfo, resetAt?: string, message?: string
|
|
79
|
+
export declare function sendQuotaExceeded(res: Response, quotaType: string, quota: QuotaInfo, resetAt?: string, message?: string, options?: {
|
|
80
|
+
countDenial?: boolean;
|
|
81
|
+
}): void;
|
|
49
82
|
/** The `pagination` envelope every list route returns. */
|
|
50
83
|
export interface PaginationMeta {
|
|
51
84
|
total: number;
|
package/lib/utils/response.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { createLogger } from './logger.js';
|
|
4
|
+
import { emitCounter } from './metric-emitter.js';
|
|
4
5
|
import { parsePage } from './params.js';
|
|
6
|
+
import { isValidQuotaType, QUOTA_TYPE_LABELS, QUOTA_UPGRADE_PATH } from '../types/common.js';
|
|
5
7
|
import { ErrorCode } from '../types/error-codes.js';
|
|
6
8
|
import { MAX_PAGE_LIMIT } from '../validation/common-schemas.js';
|
|
7
9
|
const logger = createLogger('response');
|
|
@@ -69,20 +71,47 @@ export function sendError(res, statusCode, message, code, details) {
|
|
|
69
71
|
}
|
|
70
72
|
res.status(statusCode).json(response);
|
|
71
73
|
}
|
|
74
|
+
/** `2026-11-05` — the reset DATE a person reads; the exact instant is in `resetAt`. */
|
|
75
|
+
function resetDateLabel(resetAt) {
|
|
76
|
+
if (!resetAt)
|
|
77
|
+
return undefined;
|
|
78
|
+
const ms = Date.parse(resetAt);
|
|
79
|
+
return Number.isFinite(ms) ? new Date(ms).toISOString().slice(0, 10) : undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The human sentence for a quota refusal: what ran out, when it comes back and
|
|
83
|
+
* where to raise it — "API call quota reached (25000/25000); resets 2026-11-05.
|
|
84
|
+
* Upgrade at /dashboard/billing." It says WHICH quota and gives a date, because
|
|
85
|
+
* "contact your administrator" sent people hunting for a person when the answer
|
|
86
|
+
* was a page.
|
|
87
|
+
*/
|
|
88
|
+
export function quotaExceededMessage(quotaType, quota, resetAt) {
|
|
89
|
+
const label = isValidQuotaType(quotaType) ? QUOTA_TYPE_LABELS[quotaType] : quotaType;
|
|
90
|
+
const when = resetDateLabel(resetAt);
|
|
91
|
+
return `${label} quota reached (${quota.used}/${quota.limit})${when ? `; resets ${when}` : ''}. Upgrade at ${QUOTA_UPGRADE_PATH}.`;
|
|
92
|
+
}
|
|
72
93
|
/**
|
|
73
94
|
* Send a quota exceeded error response.
|
|
74
95
|
*
|
|
96
|
+
* The body carries `details` ({@link QuotaExceededDetails}: quotaType, limit,
|
|
97
|
+
* used, resetAt, upgradeUrl) and the {@link quotaExceededMessage} sentence; the
|
|
98
|
+
* `Retry-After` + `X-Quota-*` headers repeat the numbers for clients that only
|
|
99
|
+
* read headers. Counts `quota_denied_total{type}` — every user-facing quota
|
|
100
|
+
* refusal, labelled by the emitting `service`.
|
|
101
|
+
*
|
|
75
102
|
* @param res - Express response object
|
|
76
103
|
* @param quotaType - Type of quota exceeded
|
|
77
104
|
* @param quota - Current quota information
|
|
78
105
|
* @param resetAt - ISO timestamp when quota resets
|
|
106
|
+
* @param message - Override for the human sentence (rarely right — the default names the quota, the reset date and the upgrade page)
|
|
107
|
+
* @param options.countDenial - `false` for an INTERNAL refusal another service re-answers (the quota service's own /increment), so one refusal is counted once
|
|
79
108
|
*
|
|
80
109
|
* @example
|
|
81
110
|
* ```typescript
|
|
82
111
|
* sendQuotaExceeded(res, 'apiCalls', { type: 'apiCalls', limit: 10000, used: 10000, remaining: 0 }, resetAt);
|
|
83
112
|
* ```
|
|
84
113
|
*/
|
|
85
|
-
export function sendQuotaExceeded(res, quotaType, quota, resetAt, message) {
|
|
114
|
+
export function sendQuotaExceeded(res, quotaType, quota, resetAt, message, options = {}) {
|
|
86
115
|
const resetDate = resetAt ? new Date(resetAt) : new Date();
|
|
87
116
|
const resetIn = Math.max(0, Math.ceil((resetDate.getTime() - Date.now()) / 1000));
|
|
88
117
|
// Guard like the sibling helpers: `setHeader` throws synchronously once the
|
|
@@ -97,7 +126,17 @@ export function sendQuotaExceeded(res, quotaType, quota, resetAt, message) {
|
|
|
97
126
|
res.setHeader('X-Quota-Reset', resetAt);
|
|
98
127
|
}
|
|
99
128
|
}
|
|
100
|
-
|
|
129
|
+
if (options.countDenial !== false)
|
|
130
|
+
emitCounter('quota_denied_total', { type: quotaType });
|
|
131
|
+
const details = {
|
|
132
|
+
quota,
|
|
133
|
+
quotaType,
|
|
134
|
+
limit: quota.limit,
|
|
135
|
+
used: quota.used,
|
|
136
|
+
...(resetAt ? { resetAt } : {}),
|
|
137
|
+
upgradeUrl: QUOTA_UPGRADE_PATH,
|
|
138
|
+
};
|
|
139
|
+
sendError(res, 429, message ?? quotaExceededMessage(quotaType, quota, resetAt), ErrorCode.QUOTA_EXCEEDED, details);
|
|
101
140
|
}
|
|
102
141
|
/**
|
|
103
142
|
* Build the `pagination` envelope for one page.
|
|
@@ -274,4 +313,4 @@ export function parseSort(query) {
|
|
|
274
313
|
export function parsePaginationParams(query) {
|
|
275
314
|
return { ...parsePage(query, { def: 10, max: MAX_PAGE_LIMIT }), ...parseSort(query) };
|
|
276
315
|
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWEsRUFDYixVQUFVLEdBQVcsR0FBRyxFQUN4QixJQUFRLEVBQ1IsT0FBZ0I7SUFFaEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FLVjtRQUNGLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVTtLQUNYLENBQUM7SUFFRixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FB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LE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFrQkQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBOEI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQThCO0lBQ2xFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVBhZ2UgfSBmcm9tICcuL3BhcmFtcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhSW5mbyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBNQVhfUEFHRV9MSU1JVCB9IGZyb20gJy4uL3ZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3Jlc3BvbnNlJyk7XG5cbi8qKlxuICogU2VuZCBhIHN0YW5kYXJkaXplZCBzdWNjZXNzIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlIChkZWZhdWx0OiAyMDApXG4gKiBAcGFyYW0gZGF0YSAtIFJlc3BvbnNlIGRhdGFcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgc3VjY2VzcyBtZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAwLCB7IHBsdWdpbjogcGx1Z2luRGF0YSB9KTtcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAxLCB7IGlkOiBuZXdJZCB9LCAnUmVzb3VyY2UgY3JlYXRlZCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kU3VjY2VzczxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyID0gMjAwLFxuICBkYXRhPzogVCxcbiAgbWVzc2FnZT86IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHN1Y2Nlc3MgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnLCB7IHN0YXR1c0NvZGUgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IHtcbiAgICBzdWNjZXNzOiB0cnVlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBkYXRhPzogVDtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgc3RhdHVzQ29kZSxcbiAgfTtcblxuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAobWVzc2FnZSkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSBjb2RlIC0gRXJyb3IgY29kZSBmcm9tIEVycm9yQ29kZSBlbnVtXG4gKiBAcGFyYW0gZGV0YWlscyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGV0YWlsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kRXJyb3IocmVzLCA0MDQsICdQbHVnaW4gbm90IGZvdW5kJywgRXJyb3JDb2RlLk5PVF9GT1VORCk7XG4gKiBzZW5kRXJyb3IocmVzLCA0MDAsICdJbnZhbGlkIGlucHV0JywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsIHsgZmllbGQ6ICduYW1lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEVycm9yKFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZT86IEVycm9yQ29kZSB8IHN0cmluZyxcbiAgZGV0YWlscz86IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBlcnJvciBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSwgbWVzc2FnZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IGZhbHNlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29kZT86IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfSA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIG1lc3NhZ2UsXG4gIH07XG5cbiAgaWYgKGNvZGUpIHtcbiAgICByZXNwb25zZS5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGlmIChkZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxuXG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogU2VuZCBhIHF1b3RhIGV4Y2VlZGVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFR5cGUgb2YgcXVvdGEgZXhjZWVkZWRcbiAqIEBwYXJhbSBxdW90YSAtIEN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSByZXNldEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUXVvdGFFeGNlZWRlZChyZXMsICdhcGlDYWxscycsIHsgdHlwZTogJ2FwaUNhbGxzJywgbGltaXQ6IDEwMDAwLCB1c2VkOiAxMDAwMCwgcmVtYWluaW5nOiAwIH0sIHJlc2V0QXQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUXVvdGFFeGNlZWRlZChcbiAgcmVzOiBSZXNwb25zZSxcbiAgcXVvdGFUeXBlOiBzdHJpbmcsXG4gIHF1b3RhOiBRdW90YUluZm8sXG4gIHJlc2V0QXQ/OiBzdHJpbmcsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVzZXREYXRlID0gcmVzZXRBdCA/IG5ldyBEYXRlKHJlc2V0QXQpIDogbmV3IERhdGUoKTtcbiAgY29uc3QgcmVzZXRJbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgocmVzZXREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpO1xuXG4gIC8vIEd1YXJkIGxpa2UgdGhlIHNpYmxpbmcgaGVscGVyczogYHNldEhlYWRlcmAgdGhyb3dzIHN5bmNocm9ub3VzbHkgb25jZSB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudCwgc28gc2tpcCB0aGUgcXVvdGEgaGVhZGVycyAoYW5kIGxldCBgc2VuZEVycm9yYCBuby1vcClcbiAgLy8gaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaGFuZGxlciBvbiBhbiBhbHJlYWR5LWNvbW1pdHRlZCByZXNwb25zZS5cbiAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIHJlc2V0SW4pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtTGltaXQnLCBxdW90YS5saW1pdCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1Vc2VkJywgcXVvdGEudXNlZCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1SZW1haW5pbmcnLCBNYXRoLm1heCgwLCBxdW90YS5yZW1haW5pbmcpKTtcblxuICAgIGlmIChyZXNldEF0KSB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlc2V0JywgcmVzZXRBdCk7XG4gICAgfVxuICB9XG5cbiAgc2VuZEVycm9yKFxuICAgIHJlcyxcbiAgICA0MjksXG4gICAgbWVzc2FnZSA/PyBgJHtxdW90YVR5cGV9IHF1b3RhIGV4Y2VlZGVkICgke3F1b3RhLnVzZWR9LyR7cXVvdGEubGltaXR9KS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5gLFxuICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICB7IHF1b3RhIH0sXG4gICk7XG59XG5cbi8qKiBUaGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGV2ZXJ5IGxpc3Qgcm91dGUgcmV0dXJucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbk1ldGEge1xuICB0b3RhbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGZvciBvbmUgcGFnZS5cbiAqXG4gKiBgaGFzTW9yZWAgaXMgZGVyaXZlZCwgbmV2ZXIgaGFuZC1jb21wdXRlZDogYG9mZnNldCArIDxyb3dzIG9uIHRoaXMgcGFnZT4gPFxuICogdG90YWxgIHdhcyBUSEUgbW9zdC1yZXBlYXRlZCBleHByZXNzaW9uIGluIHRoZSBjb2RlYmFzZSwgYW5kIGEgcm91dGUgdGhhdFxuICogc3BlbGxzIGl0IHNsaWdodGx5IGRpZmZlcmVudGx5IHJlcG9ydHMgYSBwaGFudG9tIG5leHQgcGFnZSAob3IgaGlkZXMgYSByZWFsXG4gKiBvbmUpIOKAlCBhIHBhZ2luZyBidWcgdGhhdCBvbmx5IHNob3dzIG9uIHRoZSBsYXN0IHBhZ2UsIHdoZXJlIG5vYm9keSBsb29rcy5cbiAqXG4gKiBgcmV0dXJuZWRgIGlzIHRoZSByb3cgY291bnQgdGhpcyBwYWdlIGFjdHVhbGx5IGNhcnJpZXMuIEl0IGRlZmF1bHRzIHRvXG4gKiBgbGltaXRgIGJlY2F1c2UgYSBsaXN0IHJvdXRlIHRoYXQgZG9lc24ndCBzYXkgb3RoZXJ3aXNlIHJldHVybnMgYSBmdWxsIHBhZ2U7XG4gKiBwYXNzIGl0IGZvciBhIHJvdXRlIHdob3NlIHBhZ2UgY2FuIGJlIHNob3J0ZXIgdGhhbiBpdHMgbGltaXQsIGFuZCBmb3IgYW5cbiAqIHVucGFnZWQgXCJldmVyeXRoaW5nXCIgYW5zd2VyICh3aGljaCByZXBvcnRzIGBsaW1pdCA9IHRvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0aW9uTWV0YShcbiAgb3B0aW9uczogeyB0b3RhbDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgbGltaXQ6IG51bWJlcjsgcmV0dXJuZWQ/OiBudW1iZXIgfSxcbik6IFBhZ2luYXRpb25NZXRhIHtcbiAgY29uc3QgeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCBoYXNNb3JlOiBvZmZzZXQgKyAocmV0dXJuZWQgPz8gbGltaXQpIDwgdG90YWwgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcGFnaW5hdGVkIGxpc3QgcmVzcG9uc2Ugd2l0aCB0aGUgaXRlbXMgbmVzdGVkIHVuZGVyIGEgbmFtZWQga2V5LlxuICogVXNlIHdoZW4gdGhlIEFQSSBjb250cmFjdCBpcyBgeyA8a2V5PjogWy4uLl0sIHBhZ2luYXRpb246IHsuLi59IH1gXG4gKiAodGhlIGRvbWluYW50IHNoYXBlIGFjcm9zcyBhcGkvKiBzZXJ2aWNlcykuXG4gKlxuICogYGhhc01vcmVgIGlzIE9QVElPTkFMIGFuZCBkZWZhdWx0cyB0byBgb2Zmc2V0ICsgZGF0YS5sZW5ndGggPCB0b3RhbGAg4oCUIHRoZVxuICogZXhwcmVzc2lvbiBldmVyeSBjYWxsZXIgdXNlZCB0byB3cml0ZSBvdXQgYnkgaGFuZC4gUGFzcyBpdCBvbmx5IHdoZW4gdGhlXG4gKiByb3V0ZSBrbm93cyBzb21ldGhpbmcgdGhlIHJvdyBjb3VudCBkb2VzIG5vdCAoYSBjdXJzb3IgcGFnZSwgb3IgYSB3aW5kb3dcbiAqIGZldGNoZWQgd2l0aCBgbGltaXQgKyAxYCB0byBwZWVrIGFoZWFkKS4gV2l0aG91dCBhIGB0b3RhbGAgdGhlcmUgaXMgbm90aGluZyB0b1xuICogZGVyaXZlIGZyb20sIHNvIGl0IGZhbGxzIGJhY2sgdG8gXCJhIGN1cnNvciB3YXMgaXNzdWVkXCIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRQYWdpbmF0ZWROZXN0ZWQocmVzLCAncGlwZWxpbmVzJywgaXRlbXMsIHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCB9KTtcbiAqIC8vIOKGkiB7IHBpcGVsaW5lczogWy4uLl0sIHBhZ2luYXRpb246IHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCwgaGFzTW9yZTogdHJ1ZSB9IH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFBhZ2luYXRlZE5lc3RlZDxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgZGF0YUtleTogc3RyaW5nLFxuICBkYXRhOiBUW10sXG4gIG9wdGlvbnM6IHtcbiAgICB0b3RhbD86IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGhhc01vcmU/OiBib29sZWFuO1xuICAgIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgfSxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHBhZ2luYXRlZCByZXNwb25zZSBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7IHN0YXR1c0NvZGUgPSAyMDAsIHRvdGFsLCBsaW1pdCwgb2Zmc2V0LCBoYXNNb3JlLCBuZXh0Q3Vyc29yIH0gPSBvcHRpb25zO1xuICBjb25zdCByZXNvbHZlZCA9IGhhc01vcmVcbiAgICA/PyAodG90YWwgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwYWdpbmF0aW9uTWV0YSh7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCByZXR1cm5lZDogZGF0YS5sZW5ndGggfSkuaGFzTW9yZVxuICAgICAgOiBuZXh0Q3Vyc29yICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBwYWdpbmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbGltaXQsIG9mZnNldCwgaGFzTW9yZTogcmVzb2x2ZWQgfTtcbiAgaWYgKHRvdGFsICE9PSB1bmRlZmluZWQpIHBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcbiAgaWYgKG5leHRDdXJzb3IpIHBhZ2luYXRpb24ubmV4dEN1cnNvciA9IG5leHRDdXJzb3I7XG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbih7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIGRhdGE6IHsgW2RhdGFLZXldOiBkYXRhLCBwYWdpbmF0aW9uIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNRTFNUQVRFOiBleGFjdGx5IGZpdmUgY2hhcmFjdGVycywgZGlnaXRzIGFuZCB1cHBlcmNhc2UgTGF0aW4gbGV0dGVyc1xuICogKGUuZy4gYDIzNTA1YCB1bmlxdWVfdmlvbGF0aW9uLCBgNDI2MDFgIHN5bnRheF9lcnJvcikuIE5vZGUncyBvd24gc29ja2V0IGFuZFxuICogRE5TIGVycm9ycyB1c2UgdGhlIHNhbWUgYC5jb2RlYCBwcm9wZXJ0eSBidXQgc3BlbGwgaXQgZGlmZmVyZW50bHlcbiAqIChgRUNPTk5SRVNFVGAsIGBFVElNRURPVVRgLCBgRU5PVEZPVU5EYCksIHdoaWNoIGlzIHdoYXQgdGhpcyB0ZWxscyBhcGFydC5cbiAqL1xuY29uc3QgU1FMU1RBVEVfUEFUVEVSTiA9IC9eWzAtOUEtWl17NX0kLztcblxuLyoqXG4gKiBMZW5ndGggYWxvbmUgaXMgbm90IGVub3VnaDogYEVQSVBFYCBhbmQgYEUyQklHYCBhcmUgZml2ZSB1cHBlcmNhc2UgY2hhcmFjdGVyc1xuICogYW5kIHdvdWxkIHBhc3MgYXMgU1FMU1RBVEVzLiBFdmVyeSBsaWJ1di9Ob2RlIGVycm5vIHN0YXJ0cyB3aXRoIGBFYCwgYW5kXG4gKiBQb3N0Z3JlcyBkZWZpbmVzIG5vIGVycm9yIGNsYXNzIHRoYXQgZG9lcyDigJQgaXRzIGNsYXNzZXMgYXJlIDAwLTBaLCAyMC0yRixcbiAqIDM0LTNGLCA0MC00NCwgNTMtNTgsIDcyLCBGMCwgSFYsIFAwIGFuZCBYWCAoc2VlIHRoZSBzZXJ2ZXIncyBlcnJjb2Rlcy50eHQpLlxuICogU28gYSBsZWFkaW5nIGBFYCBzZXR0bGVzIGl0LlxuICovXG5jb25zdCBOT0RFX0VSUk5PX1BBVFRFUk4gPSAvXkUvO1xuXG4vKipcbiAqIEV4dHJhY3QgZGF0YWJhc2UgZXJyb3IgZGV0YWlscyBmb3IgbG9nZ2luZy9yZXNwb25zZS5cbiAqXG4gKiBFeHRyYWN0cyBQb3N0Z3JlU1FMIGVycm9yIGNvZGVzLCBkZXRhaWxzLCBoaW50cywgYW5kIGNvbnN0cmFpbnQgbmFtZXNcbiAqIGZyb20gZGF0YWJhc2UgZXJyb3JzIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogT25seSBhIGdlbnVpbmUgUG9zdGdyZXMgZXJyb3IgeWllbGRzIGEgYGRiQ29kZWA6IHJlcG9ydGluZyBhbnkgYC5jb2RlYCBhcyBvbmVcbiAqIHdvdWxkIGxvZyBhIHRyYW5zcG9ydCBmYWlsdXJlIChgRUNPTk5SRVNFVGAgd2hlbiB0aGUgcG9vbGVyIGRyb3BzIG91dCBvZiB0aGVcbiAqIFNlcnZpY2UgZW5kcG9pbnRzLCBzYXkpIGFzIGB7XCJkYlwiOntcImRiQ29kZVwiOlwiRUNPTk5SRVNFVFwifX1gIGFuZCBzZW5kIHJlYWRlcnNcbiAqIGh1bnRpbmcgdGhyb3VnaCBjbGVhbiBQb3N0Z3JlcyBsb2dzLiBUaGUgdHJhbnNwb3J0IGNvZGUgaXMgbm90IGxvc3Qg4oCUIGNhbGxlcnMgbG9nIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBpdHNlbGYgYWxvbmdzaWRlIHRoZXNlIGRldGFpbHMg4oCUIGl0IGp1c3Qgc3RvcHMgY2xhaW1pbmcgdG8gYmUgYSBEQiBmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvYmplY3QgZnJvbSBkYXRhYmFzZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV4dHJhY3RlZCBlcnJvciBkZXRhaWxzOyBge31gIHdoZW4gYGVycm9yYCBpcyBub3QgYVxuICogICBQb3N0Z3JlcyBlcnJvciAobm8gU1FMU1RBVEUgYW5kIG5vbmUgb2YgdGhlIHBnLXNwZWNpZmljIGZpZWxkcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgZGIuaW5zZXJ0KHBsdWdpbnMpLnZhbHVlcyhuZXdQbHVnaW4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc3QgZGJEZXRhaWxzID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNTAwLCAnRGF0YWJhc2UgZXJyb3InLCBFcnJvckNvZGUuREFUQUJBU0VfRVJST1IsIGRiRGV0YWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYkVycm9yKGVycm9yOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBEcml6emxlIE9STSB3cmFwcyB0aGUgb3JpZ2luYWwgcGcgZXJyb3IgaW4gZXJyb3IuY2F1c2Ug4oCUXG4gIC8vIGNoZWNrIHRoZSBjYXVzZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGVycm9yIGl0c2VsZi5cbiAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHNvdXJjZSA9IChlcnIuY2F1c2UgJiYgdHlwZW9mIGVyci5jYXVzZSA9PT0gJ29iamVjdCcgPyBlcnIuY2F1c2UgOiBlcnIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc291cmNlLmNvZGUgPT09ICdzdHJpbmcnXG4gICAgJiYgU1FMU1RBVEVfUEFUVEVSTi50ZXN0KHNvdXJjZS5jb2RlKVxuICAgICYmICFOT0RFX0VSUk5PX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSkpIHtcbiAgICBkZXRhaWxzLmRiQ29kZSA9IHNvdXJjZS5jb2RlO1xuICB9XG4gIGlmIChzb3VyY2UuZGV0YWlsKSBkZXRhaWxzLmRiRGV0YWlsID0gc291cmNlLmRldGFpbDtcbiAgaWYgKHNvdXJjZS5oaW50KSBkZXRhaWxzLmRiSGludCA9IHNvdXJjZS5oaW50O1xuICBpZiAoc291cmNlLmNvbnN0cmFpbnQpIGRldGFpbHMuY29uc3RyYWludCA9IHNvdXJjZS5jb25zdHJhaW50O1xuICBpZiAoc291cmNlLnRhYmxlKSBkZXRhaWxzLnRhYmxlID0gc291cmNlLnRhYmxlO1xuICBpZiAoc291cmNlLmNvbHVtbikgZGV0YWlscy5jb2x1bW4gPSBzb3VyY2UuY29sdW1uO1xuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vLyBDb252ZW5pZW5jZSBoZWxwZXJzIChzaGFyZWQgYWNyb3NzIHBsdWdpbiwgcGlwZWxpbmUsIHF1b3RhIHNlcnZpY2VzKVxuXG4vKipcbiAqIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gdW5rbm93biBjYXRjaCB2YWx1ZS5cbiAqXG4gKiBGYWxscyBiYWNrIGJleW9uZCBgLm1lc3NhZ2VgIGJlY2F1c2Ugc2V2ZXJhbCBjb21tb24gTm9kZSBlcnJvcnMgY2FycnkgYW5cbiAqIEVNUFRZIGAubWVzc2FnZWA6XG4gKiAgLSBkdWFsLXN0YWNrIChJUHY0K0lQdjYpIGNvbm5lY3QgZmFpbHVyZXMgc3VyZmFjZSBhcyBhbiBgQWdncmVnYXRlRXJyb3JgXG4gKiAgICB3aG9zZSBvd24gbWVzc2FnZSBpcyBibGFuayDigJQgdGhlIGNhdXNlIGxpdmVzIGluIGAuY29kZWAgKGUuZy5cbiAqICAgIGBFQ09OTlJFRlVTRURgL2BFVElNRURPVVRgKSBhbmQvb3IgdGhlIGAuZXJyb3JzW11gIHN1Yi1lcnJvcnM7XG4gKiAgLSByYXcgc29ja2V0IGBFcnJub0V4Y2VwdGlvbmBzIGNhbiBsaWtld2lzZSBjYXJyeSBvbmx5IGEgYC5jb2RlYC5cbiAqIFdpdGhvdXQgdGhpcywgYW4gdW5yZWFjaGFibGUgaW50ZXJuYWwgc2VydmljZSAoZS5nLiBjb21wbGlhbmNlIHN0aWxsXG4gKiBzdGFydGluZykgcHJvZHVjZWQgYmxhbmsgcGVyLWl0ZW0gZXJyb3JzIGluIGJ1bGsgcmVzcG9uc2VzIGFuZCBgZXJyb3I6XCJcImBcbiAqIGluIGxvZ3Mg4oCUIGEgc2lsZW50IGJsYWNrIGJveC4gT3JkZXI6IG1lc3NhZ2Ug4oaSIGNvZGUg4oaSIGpvaW5lZCBzdWItZXJyb3JzIOKGklxuICogZXJyb3IgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgaWYgKGVycm9yLm1lc3NhZ2UpIHJldHVybiBlcnJvci5tZXNzYWdlO1xuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG4gIGlmIChjb2RlKSByZXR1cm4gY29kZTtcblxuICBjb25zdCBpbm5lciA9IChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd25bXSB9KS5lcnJvcnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGlubmVyKSAmJiBpbm5lci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgam9pbmVkID0gaW5uZXIubWFwKGVycm9yTWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJzsgJyk7XG4gICAgaWYgKGpvaW5lZCkgcmV0dXJuIGpvaW5lZDtcbiAgfVxuXG4gIHJldHVybiBlcnJvci5uYW1lIHx8ICdVbmtub3duIGVycm9yJztcbn1cblxuLyoqIFNlbmQgYSA0MDAgYmFkLXJlcXVlc3QgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEJhZFJlcXVlc3QoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZTogRXJyb3JDb2RlIHwgc3RyaW5nID0gRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4pOiB2b2lkIHtcbiAgc2VuZEVycm9yKHJlcywgNDAwLCBtZXNzYWdlLCBjb2RlKTtcbn1cblxuLyoqIFNlbmQgYSA1MDAgaW50ZXJuYWwgZXJyb3IgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEludGVybmFsRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDUwMCwgbWVzc2FnZSwgRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SLCBkZXRhaWxzKTtcbn1cblxuLy8gUGFnaW5hdGlvblxuXG4vKiogQ29tbW9uIHBhZ2luYXRpb24gKyBzb3J0aW5nIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBsaW1pdDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBBIHBhcnNlZCBgP3NvcnRCeT0mc29ydE9yZGVyPWAgKGRlZmF1bHQ6IG5ld2VzdCBmaXJzdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYXJhbXMge1xuICBzb3J0Qnk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbn1cblxuLyoqIFBhcnNlIGA/c29ydEJ5PSZzb3J0T3JkZXI9YDsgZGVmYXVsdHMgdG8gYGNyZWF0ZWRBdGAgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvcnQocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU29ydFBhcmFtcyB7XG4gIGNvbnN0IHNvcnRCeSA9IFN0cmluZyhxdWVyeS5zb3J0QnkgfHwgJ2NyZWF0ZWRBdCcpO1xuICBjb25zdCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID1cbiAgICBTdHJpbmcocXVlcnkuc29ydE9yZGVyIHx8ICdkZXNjJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgcmV0dXJuIHsgc29ydEJ5LCBzb3J0T3JkZXIgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsaXN0LXJvdXRlIHdpbmRvdyArIHNvcnQ6IHtAbGluayBwYXJzZVBhZ2V9IHdpdGggYSBwYWdlIG9mIDEwXG4gKiAoY2FwcGVkIGF0IGBNQVhfUEFHRV9MSU1JVGAsIG9mZnNldCBjYXBwZWQgYXQgYE1BWF9QQUdFX09GRlNFVGAg4oCUIGRlZXAgcGFnaW5nXG4gKiB1c2VzIHRoZSBjdXJzb3IgQVBJKSBwbHVzIHtAbGluayBwYXJzZVNvcnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWdpbmF0aW9uUGFyYW1zKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBhZ2luYXRpb25QYXJhbXMge1xuICByZXR1cm4geyAuLi5wYXJzZVBhZ2UocXVlcnksIHsgZGVmOiAxMCwgbWF4OiBNQVhfUEFHRV9MSU1JVCB9KSwgLi4ucGFyc2VTb3J0KHF1ZXJ5KSB9O1xufVxuIl19
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsR0FBYSxFQUNiLFVBQVUsR0FBVyxHQUFHLEVBQ3hCLElBQVEsRUFDUixPQUFnQjtJQUVoQixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNwRixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUtWO1FBQ0YsT0FBTyxFQUFFLElBQUk7UUFDYixVQUFVO0tBQ1gsQ0FBQztJQUVGLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEdBQWEsRUFDYixVQUFrQixFQUNsQixPQUFlLEVBQ2YsSUFBeUIsRUFDekIsT0FBaUI7SUFFakIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxvREFBb0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBTVY7UUFDRixPQUFPLEVBQUUsS0FBSztRQUNkLFVBQVU7UUFDVixPQUFPO0tBQ1IsQ0FBQztJQUVGLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFrQkQsdUZBQXVGO0FBQ3ZGLFNBQVMsY0FBYyxDQUFDLE9BQTJCO0lBQ2pELElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNuRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQWlCLEVBQUUsS0FBd0MsRUFBRSxPQUFnQjtJQUNoSCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsT0FBTyxHQUFHLEtBQUssbUJBQW1CLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLGtCQUFrQixHQUFHLENBQUM7QUFDckksQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsR0FBYSxFQUNiLFNBQWlCLEVBQ2pCLEtBQWdCLEVBQ2hCLE9BQWdCLEVBQ2hCLE9BQWdCLEVBQ2hCLE9BQU8sR0FBOEIsRUFBRTtJQUV2QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVsRiw0RUFBNEU7SUFDNUUsZ0ZBQWdGO0lBQ2hGLG9FQUFvRTtJQUNwRSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVqRSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssS0FBSztRQUFFLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTFGLE1BQU0sT0FBTyxHQUF5QjtRQUNwQyxLQUFLO1FBQ0wsU0FBUztRQUNULEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsRUFBRSxrQkFBa0I7S0FDL0IsQ0FBQztJQUNGLFNBQVMsQ0FDUCxHQUFHLEVBQ0gsR0FBRyxFQUNILE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUMxRCxTQUFTLENBQUMsY0FBYyxFQUN4QixPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUM7QUFVRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixPQUE0RTtJQUU1RSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBYSxFQUNiLE9BQWUsRUFDZixJQUFTLEVBQ1QsT0FPQztJQUVELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUMvRSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sRUFBRSxVQUFVLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDaEYsTUFBTSxRQUFRLEdBQUcsT0FBTztXQUNuQixDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3JCLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTztZQUN6RSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sVUFBVSxHQUE0QixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2pGLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsRCxJQUFJLFVBQVU7UUFBRSxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMxQixPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVU7UUFDVixJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFFekM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWM7SUFDM0MsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsNkRBQTZEO0lBQzdELE1BQU0sR0FBRyxHQUFHLEtBQWdDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBNEIsQ0FBQztJQUN6RyxNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFDO0lBRTVDLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVE7V0FDOUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7V0FDbEMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3BELElBQUksTUFBTSxDQUFDLElBQUk7UUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDOUMsSUFBSSxNQUFNLENBQUMsVUFBVTtRQUFFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUM5RCxJQUFJLE1BQU0sQ0FBQyxLQUFLO1FBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9DLElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFFbEQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELHVFQUF1RTtBQUV2RTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFjO0lBQ3pDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLEtBQUssQ0FBQyxPQUFPO1FBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBRXhDLE1BQU0sSUFBSSxHQUFJLEtBQTJCLENBQUMsSUFBSSxDQUFDO0lBQy9DLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXRCLE1BQU0sS0FBSyxHQUFJLEtBQWdDLENBQUMsTUFBTSxDQUFDO0lBQ3ZELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sVUFBVSxjQUFjLENBQzVCLEdBQWEsRUFDYixPQUFlLEVBQ2YsSUFBSSxHQUF1QixTQUFTLENBQUMsZ0JBQWdCO0lBRXJELFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsR0FBYSxFQUNiLE9BQWUsRUFDZixPQUFpQztJQUVqQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBa0JELHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQThCO0lBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUE4QjtJQUNsRSxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IHBhcnNlUGFnZSB9IGZyb20gJy4vcGFyYW1zLmpzJztcbmltcG9ydCB7IGlzVmFsaWRRdW90YVR5cGUsIFFVT1RBX1RZUEVfTEFCRUxTLCBRVU9UQV9VUEdSQURFX1BBVEgsIHR5cGUgUXVvdGFJbmZvIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IE1BWF9QQUdFX0xJTUlUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVzcG9uc2UnKTtcblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIHN1Y2Nlc3MgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gc3RhdHVzQ29kZSAtIEhUVFAgc3RhdHVzIGNvZGUgKGRlZmF1bHQ6IDIwMClcbiAqIEBwYXJhbSBkYXRhIC0gUmVzcG9uc2UgZGF0YVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBzdWNjZXNzIG1lc3NhZ2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHsgcGx1Z2luOiBwbHVnaW5EYXRhIH0pO1xuICogc2VuZFN1Y2Nlc3MocmVzLCAyMDEsIHsgaWQ6IG5ld0lkIH0sICdSZXNvdXJjZSBjcmVhdGVkJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRTdWNjZXNzPFQ+KFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIgPSAyMDAsXG4gIGRhdGE/OiBULFxuICBtZXNzYWdlPzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGlmIChyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICBsb2dnZXIud2FybignQXR0ZW1wdGVkIHRvIHNlbmQgc3VjY2VzcyBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IHRydWU7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIGRhdGE/OiBUO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICB9O1xuXG4gIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmIChtZXNzYWdlKSB7XG4gICAgcmVzcG9uc2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIH1cblxuICByZXMuc3RhdHVzKHN0YXR1c0NvZGUpLmpzb24ocmVzcG9uc2UpO1xufVxuXG4vKipcbiAqIFNlbmQgYSBzdGFuZGFyZGl6ZWQgZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gc3RhdHVzQ29kZSAtIEhUVFAgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIGNvZGUgLSBFcnJvciBjb2RlIGZyb20gRXJyb3JDb2RlIGVudW1cbiAqIEBwYXJhbSBkZXRhaWxzIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBkZXRhaWxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRFcnJvcihyZXMsIDQwNCwgJ1BsdWdpbiBub3QgZm91bmQnLCBFcnJvckNvZGUuTk9UX0ZPVU5EKTtcbiAqIHNlbmRFcnJvcihyZXMsIDQwMCwgJ0ludmFsaWQgaW5wdXQnLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiwgeyBmaWVsZDogJ25hbWUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBjb2RlPzogRXJyb3JDb2RlIHwgc3RyaW5nLFxuICBkZXRhaWxzPzogdW5rbm93bixcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIGVycm9yIGFmdGVyIGhlYWRlcnMgYWxyZWFkeSBzZW50JywgeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlOiB7XG4gICAgc3VjY2VzczogZmFsc2U7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBjb2RlPzogc3RyaW5nO1xuICAgIGRldGFpbHM/OiB1bmtub3duO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIHN0YXR1c0NvZGUsXG4gICAgbWVzc2FnZSxcbiAgfTtcblxuICBpZiAoY29kZSkge1xuICAgIHJlc3BvbnNlLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgaWYgKGRldGFpbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3BvbnNlLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBUaGUgc3RydWN0dXJlZCBoYWxmIG9mIGV2ZXJ5IDQyOSBgUVVPVEFfRVhDRUVERURgIGJvZHkgKGBkZXRhaWxzYCkuIFN0YWJsZVxuICogd2lyZSBjb250cmFjdCDigJQgdGhlIGRhc2hib2FyZCwgdGhlIENMSSBhbmQgdGhlIHBpcGVsaW5lIExhbWJkYSBhbGwgcmVuZGVyIGFcbiAqIHF1b3RhIHJlZnVzYWwgZnJvbSB0aGVzZSBmaWVsZHMgcmF0aGVyIHRoYW4gcGFyc2luZyBgbWVzc2FnZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFFeGNlZWRlZERldGFpbHMge1xuICBxdW90YTogUXVvdGFJbmZvO1xuICBxdW90YVR5cGU6IHN0cmluZztcbiAgbGltaXQ6IG51bWJlcjtcbiAgdXNlZDogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB0aGUgcGVyaW9kIHJlc2V0cyAoYWJzZW50IHdoZW4gdGhlIGNhbGxlciBkaWRuJ3Qga25vdykuICovXG4gIHJlc2V0QXQ/OiBzdHJpbmc7XG4gIC8qKiBXaGVyZSBhIHBlcnNvbiByYWlzZXMgdGhlIGxpbWl0IChyZWxhdGl2ZSB0byB0aGUgZGFzaGJvYXJkIG9yaWdpbikuICovXG4gIHVwZ3JhZGVVcmw6IHN0cmluZztcbn1cblxuLyoqIGAyMDI2LTExLTA1YCDigJQgdGhlIHJlc2V0IERBVEUgYSBwZXJzb24gcmVhZHM7IHRoZSBleGFjdCBpbnN0YW50IGlzIGluIGByZXNldEF0YC4gKi9cbmZ1bmN0aW9uIHJlc2V0RGF0ZUxhYmVsKHJlc2V0QXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghcmVzZXRBdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbXMgPSBEYXRlLnBhcnNlKHJlc2V0QXQpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG1zKSA/IG5ldyBEYXRlKG1zKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgaHVtYW4gc2VudGVuY2UgZm9yIGEgcXVvdGEgcmVmdXNhbDogd2hhdCByYW4gb3V0LCB3aGVuIGl0IGNvbWVzIGJhY2sgYW5kXG4gKiB3aGVyZSB0byByYWlzZSBpdCDigJQgXCJBUEkgY2FsbCBxdW90YSByZWFjaGVkICgyNTAwMC8yNTAwMCk7IHJlc2V0cyAyMDI2LTExLTA1LlxuICogVXBncmFkZSBhdCAvZGFzaGJvYXJkL2JpbGxpbmcuXCIgSXQgc2F5cyBXSElDSCBxdW90YSBhbmQgZ2l2ZXMgYSBkYXRlLCBiZWNhdXNlXG4gKiBcImNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yXCIgc2VudCBwZW9wbGUgaHVudGluZyBmb3IgYSBwZXJzb24gd2hlbiB0aGUgYW5zd2VyXG4gKiB3YXMgYSBwYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGFFeGNlZWRlZE1lc3NhZ2UocXVvdGFUeXBlOiBzdHJpbmcsIHF1b3RhOiBQaWNrPFF1b3RhSW5mbywgJ2xpbWl0JyB8ICd1c2VkJz4sIHJlc2V0QXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsYWJlbCA9IGlzVmFsaWRRdW90YVR5cGUocXVvdGFUeXBlKSA/IFFVT1RBX1RZUEVfTEFCRUxTW3F1b3RhVHlwZV0gOiBxdW90YVR5cGU7XG4gIGNvbnN0IHdoZW4gPSByZXNldERhdGVMYWJlbChyZXNldEF0KTtcbiAgcmV0dXJuIGAke2xhYmVsfSBxdW90YSByZWFjaGVkICgke3F1b3RhLnVzZWR9LyR7cXVvdGEubGltaXR9KSR7d2hlbiA/IGA7IHJlc2V0cyAke3doZW59YCA6ICcnfS4gVXBncmFkZSBhdCAke1FVT1RBX1VQR1JBREVfUEFUSH0uYDtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcXVvdGEgZXhjZWVkZWQgZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogVGhlIGJvZHkgY2FycmllcyBgZGV0YWlsc2AgKHtAbGluayBRdW90YUV4Y2VlZGVkRGV0YWlsc306IHF1b3RhVHlwZSwgbGltaXQsXG4gKiB1c2VkLCByZXNldEF0LCB1cGdyYWRlVXJsKSBhbmQgdGhlIHtAbGluayBxdW90YUV4Y2VlZGVkTWVzc2FnZX0gc2VudGVuY2U7IHRoZVxuICogYFJldHJ5LUFmdGVyYCArIGBYLVF1b3RhLSpgIGhlYWRlcnMgcmVwZWF0IHRoZSBudW1iZXJzIGZvciBjbGllbnRzIHRoYXQgb25seVxuICogcmVhZCBoZWFkZXJzLiBDb3VudHMgYHF1b3RhX2RlbmllZF90b3RhbHt0eXBlfWAg4oCUIGV2ZXJ5IHVzZXItZmFjaW5nIHF1b3RhXG4gKiByZWZ1c2FsLCBsYWJlbGxlZCBieSB0aGUgZW1pdHRpbmcgYHNlcnZpY2VgLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFR5cGUgb2YgcXVvdGEgZXhjZWVkZWRcbiAqIEBwYXJhbSBxdW90YSAtIEN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSByZXNldEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0c1xuICogQHBhcmFtIG1lc3NhZ2UgLSBPdmVycmlkZSBmb3IgdGhlIGh1bWFuIHNlbnRlbmNlIChyYXJlbHkgcmlnaHQg4oCUIHRoZSBkZWZhdWx0IG5hbWVzIHRoZSBxdW90YSwgdGhlIHJlc2V0IGRhdGUgYW5kIHRoZSB1cGdyYWRlIHBhZ2UpXG4gKiBAcGFyYW0gb3B0aW9ucy5jb3VudERlbmlhbCAtIGBmYWxzZWAgZm9yIGFuIElOVEVSTkFMIHJlZnVzYWwgYW5vdGhlciBzZXJ2aWNlIHJlLWFuc3dlcnMgKHRoZSBxdW90YSBzZXJ2aWNlJ3Mgb3duIC9pbmNyZW1lbnQpLCBzbyBvbmUgcmVmdXNhbCBpcyBjb3VudGVkIG9uY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2VuZFF1b3RhRXhjZWVkZWQocmVzLCAnYXBpQ2FsbHMnLCB7IHR5cGU6ICdhcGlDYWxscycsIGxpbWl0OiAxMDAwMCwgdXNlZDogMTAwMDAsIHJlbWFpbmluZzogMCB9LCByZXNldEF0KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFF1b3RhRXhjZWVkZWQoXG4gIHJlczogUmVzcG9uc2UsXG4gIHF1b3RhVHlwZTogc3RyaW5nLFxuICBxdW90YTogUXVvdGFJbmZvLFxuICByZXNldEF0Pzogc3RyaW5nLFxuICBtZXNzYWdlPzogc3RyaW5nLFxuICBvcHRpb25zOiB7IGNvdW50RGVuaWFsPzogYm9vbGVhbiB9ID0ge30sXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVzZXREYXRlID0gcmVzZXRBdCA/IG5ldyBEYXRlKHJlc2V0QXQpIDogbmV3IERhdGUoKTtcbiAgY29uc3QgcmVzZXRJbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgocmVzZXREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpO1xuXG4gIC8vIEd1YXJkIGxpa2UgdGhlIHNpYmxpbmcgaGVscGVyczogYHNldEhlYWRlcmAgdGhyb3dzIHN5bmNocm9ub3VzbHkgb25jZSB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudCwgc28gc2tpcCB0aGUgcXVvdGEgaGVhZGVycyAoYW5kIGxldCBgc2VuZEVycm9yYCBuby1vcClcbiAgLy8gaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaGFuZGxlciBvbiBhbiBhbHJlYWR5LWNvbW1pdHRlZCByZXNwb25zZS5cbiAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIHJlc2V0SW4pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtTGltaXQnLCBxdW90YS5saW1pdCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1Vc2VkJywgcXVvdGEudXNlZCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1SZW1haW5pbmcnLCBNYXRoLm1heCgwLCBxdW90YS5yZW1haW5pbmcpKTtcblxuICAgIGlmIChyZXNldEF0KSB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlc2V0JywgcmVzZXRBdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY291bnREZW5pYWwgIT09IGZhbHNlKSBlbWl0Q291bnRlcigncXVvdGFfZGVuaWVkX3RvdGFsJywgeyB0eXBlOiBxdW90YVR5cGUgfSk7XG5cbiAgY29uc3QgZGV0YWlsczogUXVvdGFFeGNlZWRlZERldGFpbHMgPSB7XG4gICAgcXVvdGEsXG4gICAgcXVvdGFUeXBlLFxuICAgIGxpbWl0OiBxdW90YS5saW1pdCxcbiAgICB1c2VkOiBxdW90YS51c2VkLFxuICAgIC4uLihyZXNldEF0ID8geyByZXNldEF0IH0gOiB7fSksXG4gICAgdXBncmFkZVVybDogUVVPVEFfVVBHUkFERV9QQVRILFxuICB9O1xuICBzZW5kRXJyb3IoXG4gICAgcmVzLFxuICAgIDQyOSxcbiAgICBtZXNzYWdlID8/IHF1b3RhRXhjZWVkZWRNZXNzYWdlKHF1b3RhVHlwZSwgcXVvdGEsIHJlc2V0QXQpLFxuICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICBkZXRhaWxzLFxuICApO1xufVxuXG4vKiogVGhlIGBwYWdpbmF0aW9uYCBlbnZlbG9wZSBldmVyeSBsaXN0IHJvdXRlIHJldHVybnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25NZXRhIHtcbiAgdG90YWw6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbWl0OiBudW1iZXI7XG4gIGhhc01vcmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBwYWdpbmF0aW9uYCBlbnZlbG9wZSBmb3Igb25lIHBhZ2UuXG4gKlxuICogYGhhc01vcmVgIGlzIGRlcml2ZWQsIG5ldmVyIGhhbmQtY29tcHV0ZWQ6IGBvZmZzZXQgKyA8cm93cyBvbiB0aGlzIHBhZ2U+IDxcbiAqIHRvdGFsYCB3YXMgVEhFIG1vc3QtcmVwZWF0ZWQgZXhwcmVzc2lvbiBpbiB0aGUgY29kZWJhc2UsIGFuZCBhIHJvdXRlIHRoYXRcbiAqIHNwZWxscyBpdCBzbGlnaHRseSBkaWZmZXJlbnRseSByZXBvcnRzIGEgcGhhbnRvbSBuZXh0IHBhZ2UgKG9yIGhpZGVzIGEgcmVhbFxuICogb25lKSDigJQgYSBwYWdpbmcgYnVnIHRoYXQgb25seSBzaG93cyBvbiB0aGUgbGFzdCBwYWdlLCB3aGVyZSBub2JvZHkgbG9va3MuXG4gKlxuICogYHJldHVybmVkYCBpcyB0aGUgcm93IGNvdW50IHRoaXMgcGFnZSBhY3R1YWxseSBjYXJyaWVzLiBJdCBkZWZhdWx0cyB0b1xuICogYGxpbWl0YCBiZWNhdXNlIGEgbGlzdCByb3V0ZSB0aGF0IGRvZXNuJ3Qgc2F5IG90aGVyd2lzZSByZXR1cm5zIGEgZnVsbCBwYWdlO1xuICogcGFzcyBpdCBmb3IgYSByb3V0ZSB3aG9zZSBwYWdlIGNhbiBiZSBzaG9ydGVyIHRoYW4gaXRzIGxpbWl0LCBhbmQgZm9yIGFuXG4gKiB1bnBhZ2VkIFwiZXZlcnl0aGluZ1wiIGFuc3dlciAod2hpY2ggcmVwb3J0cyBgbGltaXQgPSB0b3RhbGApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFnaW5hdGlvbk1ldGEoXG4gIG9wdGlvbnM6IHsgdG90YWw6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXI7IGxpbWl0OiBudW1iZXI7IHJldHVybmVkPzogbnVtYmVyIH0sXG4pOiBQYWdpbmF0aW9uTWV0YSB7XG4gIGNvbnN0IHsgdG90YWwsIG9mZnNldCwgbGltaXQsIHJldHVybmVkIH0gPSBvcHRpb25zO1xuICByZXR1cm4geyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgaGFzTW9yZTogb2Zmc2V0ICsgKHJldHVybmVkID8/IGxpbWl0KSA8IHRvdGFsIH07XG59XG5cbi8qKlxuICogU2VuZCBhIHBhZ2luYXRlZCBsaXN0IHJlc3BvbnNlIHdpdGggdGhlIGl0ZW1zIG5lc3RlZCB1bmRlciBhIG5hbWVkIGtleS5cbiAqIFVzZSB3aGVuIHRoZSBBUEkgY29udHJhY3QgaXMgYHsgPGtleT46IFsuLi5dLCBwYWdpbmF0aW9uOiB7Li4ufSB9YFxuICogKHRoZSBkb21pbmFudCBzaGFwZSBhY3Jvc3MgYXBpLyogc2VydmljZXMpLlxuICpcbiAqIGBoYXNNb3JlYCBpcyBPUFRJT05BTCBhbmQgZGVmYXVsdHMgdG8gYG9mZnNldCArIGRhdGEubGVuZ3RoIDwgdG90YWxgIOKAlCB0aGVcbiAqIGV4cHJlc3Npb24gZXZlcnkgY2FsbGVyIHVzZWQgdG8gd3JpdGUgb3V0IGJ5IGhhbmQuIFBhc3MgaXQgb25seSB3aGVuIHRoZVxuICogcm91dGUga25vd3Mgc29tZXRoaW5nIHRoZSByb3cgY291bnQgZG9lcyBub3QgKGEgY3Vyc29yIHBhZ2UsIG9yIGEgd2luZG93XG4gKiBmZXRjaGVkIHdpdGggYGxpbWl0ICsgMWAgdG8gcGVlayBhaGVhZCkuIFdpdGhvdXQgYSBgdG90YWxgIHRoZXJlIGlzIG5vdGhpbmcgdG9cbiAqIGRlcml2ZSBmcm9tLCBzbyBpdCBmYWxscyBiYWNrIHRvIFwiYSBjdXJzb3Igd2FzIGlzc3VlZFwiLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUGFnaW5hdGVkTmVzdGVkKHJlcywgJ3BpcGVsaW5lcycsIGl0ZW1zLCB7IHRvdGFsOiA1MCwgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSk7XG4gKiAvLyDihpIgeyBwaXBlbGluZXM6IFsuLi5dLCBwYWdpbmF0aW9uOiB7IHRvdGFsOiA1MCwgbGltaXQ6IDI1LCBvZmZzZXQ6IDAsIGhhc01vcmU6IHRydWUgfSB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRQYWdpbmF0ZWROZXN0ZWQ8VD4oXG4gIHJlczogUmVzcG9uc2UsXG4gIGRhdGFLZXk6IHN0cmluZyxcbiAgZGF0YTogVFtdLFxuICBvcHRpb25zOiB7XG4gICAgdG90YWw/OiBudW1iZXI7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICBvZmZzZXQ6IG51bWJlcjtcbiAgICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgICBuZXh0Q3Vyc29yPzogc3RyaW5nO1xuICAgIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIH0sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBwYWdpbmF0ZWQgcmVzcG9uc2UgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyBzdGF0dXNDb2RlID0gMjAwLCB0b3RhbCwgbGltaXQsIG9mZnNldCwgaGFzTW9yZSwgbmV4dEN1cnNvciB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVzb2x2ZWQgPSBoYXNNb3JlXG4gICAgPz8gKHRvdGFsICE9PSB1bmRlZmluZWRcbiAgICAgID8gcGFnaW5hdGlvbk1ldGEoeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQ6IGRhdGEubGVuZ3RoIH0pLmhhc01vcmVcbiAgICAgIDogbmV4dEN1cnNvciAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgcGFnaW5hdGlvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGxpbWl0LCBvZmZzZXQsIGhhc01vcmU6IHJlc29sdmVkIH07XG4gIGlmICh0b3RhbCAhPT0gdW5kZWZpbmVkKSBwYWdpbmF0aW9uLnRvdGFsID0gdG90YWw7XG4gIGlmIChuZXh0Q3Vyc29yKSBwYWdpbmF0aW9uLm5leHRDdXJzb3IgPSBuZXh0Q3Vyc29yO1xuICByZXMuc3RhdHVzKHN0YXR1c0NvZGUpLmpzb24oe1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgc3RhdHVzQ29kZSxcbiAgICBkYXRhOiB7IFtkYXRhS2V5XTogZGF0YSwgcGFnaW5hdGlvbiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBTUUxTVEFURTogZXhhY3RseSBmaXZlIGNoYXJhY3RlcnMsIGRpZ2l0cyBhbmQgdXBwZXJjYXNlIExhdGluIGxldHRlcnNcbiAqIChlLmcuIGAyMzUwNWAgdW5pcXVlX3Zpb2xhdGlvbiwgYDQyNjAxYCBzeW50YXhfZXJyb3IpLiBOb2RlJ3Mgb3duIHNvY2tldCBhbmRcbiAqIEROUyBlcnJvcnMgdXNlIHRoZSBzYW1lIGAuY29kZWAgcHJvcGVydHkgYnV0IHNwZWxsIGl0IGRpZmZlcmVudGx5XG4gKiAoYEVDT05OUkVTRVRgLCBgRVRJTUVET1VUYCwgYEVOT1RGT1VORGApLCB3aGljaCBpcyB3aGF0IHRoaXMgdGVsbHMgYXBhcnQuXG4gKi9cbmNvbnN0IFNRTFNUQVRFX1BBVFRFUk4gPSAvXlswLTlBLVpdezV9JC87XG5cbi8qKlxuICogTGVuZ3RoIGFsb25lIGlzIG5vdCBlbm91Z2g6IGBFUElQRWAgYW5kIGBFMkJJR2AgYXJlIGZpdmUgdXBwZXJjYXNlIGNoYXJhY3RlcnNcbiAqIGFuZCB3b3VsZCBwYXNzIGFzIFNRTFNUQVRFcy4gRXZlcnkgbGlidXYvTm9kZSBlcnJubyBzdGFydHMgd2l0aCBgRWAsIGFuZFxuICogUG9zdGdyZXMgZGVmaW5lcyBubyBlcnJvciBjbGFzcyB0aGF0IGRvZXMg4oCUIGl0cyBjbGFzc2VzIGFyZSAwMC0wWiwgMjAtMkYsXG4gKiAzNC0zRiwgNDAtNDQsIDUzLTU4LCA3MiwgRjAsIEhWLCBQMCBhbmQgWFggKHNlZSB0aGUgc2VydmVyJ3MgZXJyY29kZXMudHh0KS5cbiAqIFNvIGEgbGVhZGluZyBgRWAgc2V0dGxlcyBpdC5cbiAqL1xuY29uc3QgTk9ERV9FUlJOT19QQVRURVJOID0gL15FLztcblxuLyoqXG4gKiBFeHRyYWN0IGRhdGFiYXNlIGVycm9yIGRldGFpbHMgZm9yIGxvZ2dpbmcvcmVzcG9uc2UuXG4gKlxuICogRXh0cmFjdHMgUG9zdGdyZVNRTCBlcnJvciBjb2RlcywgZGV0YWlscywgaGludHMsIGFuZCBjb25zdHJhaW50IG5hbWVzXG4gKiBmcm9tIGRhdGFiYXNlIGVycm9ycyBmb3IgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIE9ubHkgYSBnZW51aW5lIFBvc3RncmVzIGVycm9yIHlpZWxkcyBhIGBkYkNvZGVgOiByZXBvcnRpbmcgYW55IGAuY29kZWAgYXMgb25lXG4gKiB3b3VsZCBsb2cgYSB0cmFuc3BvcnQgZmFpbHVyZSAoYEVDT05OUkVTRVRgIHdoZW4gdGhlIHBvb2xlciBkcm9wcyBvdXQgb2YgdGhlXG4gKiBTZXJ2aWNlIGVuZHBvaW50cywgc2F5KSBhcyBge1wiZGJcIjp7XCJkYkNvZGVcIjpcIkVDT05OUkVTRVRcIn19YCBhbmQgc2VuZCByZWFkZXJzXG4gKiBodW50aW5nIHRocm91Z2ggY2xlYW4gUG9zdGdyZXMgbG9ncy4gVGhlIHRyYW5zcG9ydCBjb2RlIGlzIG5vdCBsb3N0IOKAlCBjYWxsZXJzIGxvZyB0aGUgZXJyb3IgbWVzc2FnZVxuICogaXRzZWxmIGFsb25nc2lkZSB0aGVzZSBkZXRhaWxzIOKAlCBpdCBqdXN0IHN0b3BzIGNsYWltaW5nIHRvIGJlIGEgREIgZmF1bHQuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gRXJyb3Igb2JqZWN0IGZyb20gZGF0YWJhc2Ugb3BlcmF0aW9uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBleHRyYWN0ZWQgZXJyb3IgZGV0YWlsczsgYHt9YCB3aGVuIGBlcnJvcmAgaXMgbm90IGFcbiAqICAgUG9zdGdyZXMgZXJyb3IgKG5vIFNRTFNUQVRFIGFuZCBub25lIG9mIHRoZSBwZy1zcGVjaWZpYyBmaWVsZHMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRyeSB7XG4gKiAgIGF3YWl0IGRiLmluc2VydChwbHVnaW5zKS52YWx1ZXMobmV3UGx1Z2luKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGNvbnN0IGRiRGV0YWlscyA9IGV4dHJhY3REYkVycm9yKGVycm9yKTtcbiAqICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIDUwMCwgJ0RhdGFiYXNlIGVycm9yJywgRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SLCBkYkRldGFpbHMpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGJFcnJvcihlcnJvcjogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFlcnJvciB8fCB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gRHJpenpsZSBPUk0gd3JhcHMgdGhlIG9yaWdpbmFsIHBnIGVycm9yIGluIGVycm9yLmNhdXNlIOKAlFxuICAvLyBjaGVjayB0aGUgY2F1c2UgZmlyc3QsIHRoZW4gZmFsbCBiYWNrIHRvIHRoZSBlcnJvciBpdHNlbGYuXG4gIGNvbnN0IGVyciA9IGVycm9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBzb3VyY2UgPSAoZXJyLmNhdXNlICYmIHR5cGVvZiBlcnIuY2F1c2UgPT09ICdvYmplY3QnID8gZXJyLmNhdXNlIDogZXJyKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgZGV0YWlsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBpZiAodHlwZW9mIHNvdXJjZS5jb2RlID09PSAnc3RyaW5nJ1xuICAgICYmIFNRTFNUQVRFX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSlcbiAgICAmJiAhTk9ERV9FUlJOT19QQVRURVJOLnRlc3Qoc291cmNlLmNvZGUpKSB7XG4gICAgZGV0YWlscy5kYkNvZGUgPSBzb3VyY2UuY29kZTtcbiAgfVxuICBpZiAoc291cmNlLmRldGFpbCkgZGV0YWlscy5kYkRldGFpbCA9IHNvdXJjZS5kZXRhaWw7XG4gIGlmIChzb3VyY2UuaGludCkgZGV0YWlscy5kYkhpbnQgPSBzb3VyY2UuaGludDtcbiAgaWYgKHNvdXJjZS5jb25zdHJhaW50KSBkZXRhaWxzLmNvbnN0cmFpbnQgPSBzb3VyY2UuY29uc3RyYWludDtcbiAgaWYgKHNvdXJjZS50YWJsZSkgZGV0YWlscy50YWJsZSA9IHNvdXJjZS50YWJsZTtcbiAgaWYgKHNvdXJjZS5jb2x1bW4pIGRldGFpbHMuY29sdW1uID0gc291cmNlLmNvbHVtbjtcblxuICByZXR1cm4gZGV0YWlscztcbn1cblxuLy8gQ29udmVuaWVuY2UgaGVscGVycyAoc2hhcmVkIGFjcm9zcyBwbHVnaW4sIHBpcGVsaW5lLCBxdW90YSBzZXJ2aWNlcylcblxuLyoqXG4gKiBFeHRyYWN0IGEgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBmcm9tIGFuIHVua25vd24gY2F0Y2ggdmFsdWUuXG4gKlxuICogRmFsbHMgYmFjayBiZXlvbmQgYC5tZXNzYWdlYCBiZWNhdXNlIHNldmVyYWwgY29tbW9uIE5vZGUgZXJyb3JzIGNhcnJ5IGFuXG4gKiBFTVBUWSBgLm1lc3NhZ2VgOlxuICogIC0gZHVhbC1zdGFjayAoSVB2NCtJUHY2KSBjb25uZWN0IGZhaWx1cmVzIHN1cmZhY2UgYXMgYW4gYEFnZ3JlZ2F0ZUVycm9yYFxuICogICAgd2hvc2Ugb3duIG1lc3NhZ2UgaXMgYmxhbmsg4oCUIHRoZSBjYXVzZSBsaXZlcyBpbiBgLmNvZGVgIChlLmcuXG4gKiAgICBgRUNPTk5SRUZVU0VEYC9gRVRJTUVET1VUYCkgYW5kL29yIHRoZSBgLmVycm9yc1tdYCBzdWItZXJyb3JzO1xuICogIC0gcmF3IHNvY2tldCBgRXJybm9FeGNlcHRpb25gcyBjYW4gbGlrZXdpc2UgY2Fycnkgb25seSBhIGAuY29kZWAuXG4gKiBXaXRob3V0IHRoaXMsIGFuIHVucmVhY2hhYmxlIGludGVybmFsIHNlcnZpY2UgKGUuZy4gY29tcGxpYW5jZSBzdGlsbFxuICogc3RhcnRpbmcpIHByb2R1Y2VkIGJsYW5rIHBlci1pdGVtIGVycm9ycyBpbiBidWxrIHJlc3BvbnNlcyBhbmQgYGVycm9yOlwiXCJgXG4gKiBpbiBsb2dzIOKAlCBhIHNpbGVudCBibGFjayBib3guIE9yZGVyOiBtZXNzYWdlIOKGkiBjb2RlIOKGkiBqb2luZWQgc3ViLWVycm9ycyDihpJcbiAqIGVycm9yIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIGlmIChlcnJvci5tZXNzYWdlKSByZXR1cm4gZXJyb3IubWVzc2FnZTtcblxuICBjb25zdCBjb2RlID0gKGVycm9yIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlO1xuICBpZiAoY29kZSkgcmV0dXJuIGNvZGU7XG5cbiAgY29uc3QgaW5uZXIgPSAoZXJyb3IgYXMgeyBlcnJvcnM/OiB1bmtub3duW10gfSkuZXJyb3JzO1xuICBpZiAoQXJyYXkuaXNBcnJheShpbm5lcikgJiYgaW5uZXIubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGpvaW5lZCA9IGlubmVyLm1hcChlcnJvck1lc3NhZ2UpLmZpbHRlcihCb29sZWFuKS5qb2luKCc7ICcpO1xuICAgIGlmIChqb2luZWQpIHJldHVybiBqb2luZWQ7XG4gIH1cblxuICByZXR1cm4gZXJyb3IubmFtZSB8fCAnVW5rbm93biBlcnJvcic7XG59XG5cbi8qKiBTZW5kIGEgNDAwIGJhZC1yZXF1ZXN0IHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRCYWRSZXF1ZXN0KFxuICByZXM6IFJlc3BvbnNlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGNvZGU6IEVycm9yQ29kZSB8IHN0cmluZyA9IEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SLFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDQwMCwgbWVzc2FnZSwgY29kZSk7XG59XG5cbi8qKiBTZW5kIGEgNTAwIGludGVybmFsIGVycm9yIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRJbnRlcm5hbEVycm9yKFxuICByZXM6IFJlc3BvbnNlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IHZvaWQge1xuICBzZW5kRXJyb3IocmVzLCA1MDAsIG1lc3NhZ2UsIEVycm9yQ29kZS5JTlRFUk5BTF9FUlJPUiwgZGV0YWlscyk7XG59XG5cbi8vIFBhZ2luYXRpb25cblxuLyoqIENvbW1vbiBwYWdpbmF0aW9uICsgc29ydGluZyBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgbGltaXQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIHNvcnRCeTogc3RyaW5nO1xuICBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG4vKiogQSBwYXJzZWQgYD9zb3J0Qnk9JnNvcnRPcmRlcj1gIChkZWZhdWx0OiBuZXdlc3QgZmlyc3QpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3J0UGFyYW1zIHtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBQYXJzZSBgP3NvcnRCeT0mc29ydE9yZGVyPWA7IGRlZmF1bHRzIHRvIGBjcmVhdGVkQXRgIGRlc2NlbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTb3J0KHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNvcnRQYXJhbXMge1xuICBjb25zdCBzb3J0QnkgPSBTdHJpbmcocXVlcnkuc29ydEJ5IHx8ICdjcmVhdGVkQXQnKTtcbiAgY29uc3Qgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJyA9XG4gICAgU3RyaW5nKHF1ZXJ5LnNvcnRPcmRlciB8fCAnZGVzYycpLnRvTG93ZXJDYXNlKCkgPT09ICdhc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gIHJldHVybiB7IHNvcnRCeSwgc29ydE9yZGVyIH07XG59XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbGlzdC1yb3V0ZSB3aW5kb3cgKyBzb3J0OiB7QGxpbmsgcGFyc2VQYWdlfSB3aXRoIGEgcGFnZSBvZiAxMFxuICogKGNhcHBlZCBhdCBgTUFYX1BBR0VfTElNSVRgLCBvZmZzZXQgY2FwcGVkIGF0IGBNQVhfUEFHRV9PRkZTRVRgIOKAlCBkZWVwIHBhZ2luZ1xuICogdXNlcyB0aGUgY3Vyc29yIEFQSSkgcGx1cyB7QGxpbmsgcGFyc2VTb3J0fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFnaW5hdGlvblBhcmFtcyhxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgcmV0dXJuIHsgLi4ucGFyc2VQYWdlKHF1ZXJ5LCB7IGRlZjogMTAsIG1heDogTUFYX1BBR0VfTElNSVQgfSksIC4uLnBhcnNlU29ydChxdWVyeSkgfTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Largest `previousConfig` (serialized JSON, chars) an iterative refinement may
|
|
4
|
+
* send back. It rides in the model's prompt on every refinement, so an
|
|
5
|
+
* unbounded one turned a single `aiCalls` unit into an arbitrarily large input
|
|
6
|
+
* bill; a real generated pipeline config is a few KB.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MAX_PREVIOUS_CONFIG_CHARS = 64000;
|
|
2
9
|
/**
|
|
3
10
|
* Schema for AI generation request body.
|
|
4
11
|
* Used by both POST /pipelines/generate and POST /plugins/generate.
|
|
@@ -42,6 +49,17 @@ export declare const PluginDeployGeneratedSchema: z.ZodObject<{
|
|
|
42
49
|
private: "private";
|
|
43
50
|
public: "public";
|
|
44
51
|
}>>;
|
|
52
|
+
buildClass: z.ZodOptional<z.ZodEnum<{
|
|
53
|
+
flexible: "flexible";
|
|
54
|
+
standard: "standard";
|
|
55
|
+
}>>;
|
|
56
|
+
buildSize: z.ZodOptional<z.ZodEnum<{
|
|
57
|
+
"0.5x": "0.5x";
|
|
58
|
+
"1x": "1x";
|
|
59
|
+
"2x": "2x";
|
|
60
|
+
"4x": "4x";
|
|
61
|
+
"8x": "8x";
|
|
62
|
+
}>>;
|
|
45
63
|
}, z.core.$strip>;
|
|
46
64
|
/**
|
|
47
65
|
* Schema for POST /pipelines/generate/from-url/stream request body.
|
|
@@ -54,3 +72,12 @@ export declare const AIGenerateFromUrlBodySchema: z.ZodObject<{
|
|
|
54
72
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
55
73
|
repoToken: z.ZodOptional<z.ZodString>;
|
|
56
74
|
}, z.core.$strip>;
|
|
75
|
+
/**
|
|
76
|
+
* Schema for POST /pipelines/analyze/from-url — repository analysis ONLY (no AI
|
|
77
|
+
* call, no `aiCalls` slot): the Ask agent's `propose_plugin_from_repo` reads the
|
|
78
|
+
* analysis summary from it before drafting through the plugin generator.
|
|
79
|
+
*/
|
|
80
|
+
export declare const AnalyzeFromUrlBodySchema: z.ZodObject<{
|
|
81
|
+
gitUrl: z.ZodString;
|
|
82
|
+
repoToken: z.ZodOptional<z.ZodString>;
|
|
83
|
+
}, z.core.$strip>;
|
|
@@ -2,8 +2,16 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { VisibilitySchema } from './common-schemas.js';
|
|
5
|
+
import { BUILD_CLASSES, BUILD_SIZES } from '../types/build-catalog.js';
|
|
5
6
|
import { envInt } from '../utils/env.js';
|
|
6
7
|
const MAX_PROMPT_LENGTH = envInt('MAX_PROMPT_LENGTH', 5000, { min: 1 });
|
|
8
|
+
/**
|
|
9
|
+
* Largest `previousConfig` (serialized JSON, chars) an iterative refinement may
|
|
10
|
+
* send back. It rides in the model's prompt on every refinement, so an
|
|
11
|
+
* unbounded one turned a single `aiCalls` unit into an arbitrarily large input
|
|
12
|
+
* bill; a real generated pipeline config is a few KB.
|
|
13
|
+
*/
|
|
14
|
+
export const MAX_PREVIOUS_CONFIG_CHARS = 64_000;
|
|
7
15
|
// AI Generation Request
|
|
8
16
|
/**
|
|
9
17
|
* Schema for AI generation request body.
|
|
@@ -17,12 +25,14 @@ export const AIGenerateBodySchema = z.object({
|
|
|
17
25
|
.max(MAX_PROMPT_LENGTH, `Prompt must be ${MAX_PROMPT_LENGTH} characters or fewer`),
|
|
18
26
|
/** AI provider identifier (e.g. "anthropic", "openai", "google"). */
|
|
19
27
|
provider: z.string().min(1, 'A provider is required (e.g., "anthropic", "openai", "google")'),
|
|
20
|
-
/** AI model identifier (e.g. "claude-sonnet-5", "gpt-
|
|
21
|
-
model: z.string().min(1, 'A model is required (e.g., "claude-sonnet-5", "gpt-
|
|
28
|
+
/** AI model identifier (e.g. "claude-sonnet-5-5", "gpt-5.6-sol"). */
|
|
29
|
+
model: z.string().min(1, 'A model is required (e.g., "claude-sonnet-5-5", "gpt-5.6-sol")'),
|
|
22
30
|
/** Optional custom API key to override the server/org key for this request. */
|
|
23
31
|
apiKey: z.string().min(1).optional(),
|
|
24
32
|
/** Previous pipeline config for iterative refinement. */
|
|
25
|
-
previousConfig: z.record(z.string(), z.unknown())
|
|
33
|
+
previousConfig: z.record(z.string(), z.unknown())
|
|
34
|
+
.refine((v) => JSON.stringify(v).length <= MAX_PREVIOUS_CONFIG_CHARS, `previousConfig must serialize to ${MAX_PREVIOUS_CONFIG_CHARS} characters or fewer`)
|
|
35
|
+
.optional(),
|
|
26
36
|
/** Fallback AI providers if primary fails (e.g., ["openai", "google"]). */
|
|
27
37
|
fallbackProviders: z.array(z.string()).optional(),
|
|
28
38
|
});
|
|
@@ -58,6 +68,10 @@ export const PluginDeployGeneratedSchema = z.object({
|
|
|
58
68
|
dockerfile: z.string().min(1, 'Dockerfile content is required'),
|
|
59
69
|
/** Access visibility. */
|
|
60
70
|
visibility: VisibilitySchema.default('private'),
|
|
71
|
+
/** Scheduling class for the image build (D11); see `PluginUploadBodySchema`. */
|
|
72
|
+
buildClass: z.enum(BUILD_CLASSES).optional(),
|
|
73
|
+
/** Machine size for the image build (D13); refused above the tier's ceiling. */
|
|
74
|
+
buildSize: z.enum(BUILD_SIZES).optional(),
|
|
61
75
|
});
|
|
62
76
|
// AI Generate From URL Request
|
|
63
77
|
/**
|
|
@@ -69,11 +83,23 @@ export const AIGenerateFromUrlBodySchema = z.object({
|
|
|
69
83
|
gitUrl: z.string().min(1, 'A Git repository URL is required').max(500, 'URL must be 500 characters or fewer'),
|
|
70
84
|
/** AI provider identifier (e.g. "anthropic", "openai", "google"). */
|
|
71
85
|
provider: z.string().min(1, 'A provider is required'),
|
|
72
|
-
/** AI model identifier (e.g. "claude-sonnet-5", "gpt-
|
|
86
|
+
/** AI model identifier (e.g. "claude-sonnet-5-5", "gpt-5.6-sol"). */
|
|
73
87
|
model: z.string().min(1, 'A model is required'),
|
|
74
88
|
/** Optional custom API key to override the server config. */
|
|
75
89
|
apiKey: z.string().min(1).optional(),
|
|
76
90
|
/** Optional authentication token for accessing private repositories. */
|
|
77
91
|
repoToken: z.string().min(1).optional(),
|
|
78
92
|
});
|
|
79
|
-
|
|
93
|
+
// Repository Analysis Request
|
|
94
|
+
/**
|
|
95
|
+
* Schema for POST /pipelines/analyze/from-url — repository analysis ONLY (no AI
|
|
96
|
+
* call, no `aiCalls` slot): the Ask agent's `propose_plugin_from_repo` reads the
|
|
97
|
+
* analysis summary from it before drafting through the plugin generator.
|
|
98
|
+
*/
|
|
99
|
+
export const AnalyzeFromUrlBodySchema = z.object({
|
|
100
|
+
/** Git repository URL (HTTPS, SSH, or git@ format). */
|
|
101
|
+
gitUrl: z.string().min(1, 'A Git repository URL is required').max(500, 'URL must be 500 characters or fewer'),
|
|
102
|
+
/** Optional authentication token for accessing private repositories. */
|
|
103
|
+
repoToken: z.string().min(1).optional(),
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktc2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL2FpLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhFOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDO0FBRWhELHdCQUF3QjtBQUV4Qjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLHdEQUF3RDtJQUN4RCxNQUFNLEVBQUUsQ0FBQztTQUNOLE1BQU0sRUFBRTtTQUNSLEdBQUcsQ0FBQyxDQUFDLEVBQUUsMERBQTBELENBQUM7U0FDbEUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixpQkFBaUIsc0JBQXNCLENBQUM7SUFFcEYscUVBQXFFO0lBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxnRUFBZ0UsQ0FBQztJQUU3RixxRUFBcUU7SUFDckUsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGdFQUFnRSxDQUFDO0lBRTFGLCtFQUErRTtJQUMvRSxNQUFNLEVBQUUsQ0FB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U0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFZpc2liaWxpdHlTY2hlbWEgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IEJVSUxEX0NMQVNTRVMsIEJVSUxEX1NJWkVTIH0gZnJvbSAnLi4vdHlwZXMvYnVpbGQtY2F0YWxvZy5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuXG5jb25zdCBNQVhfUFJPTVBUX0xFTkdUSCA9IGVudkludCgnTUFYX1BST01QVF9MRU5HVEgnLCA1MDAwLCB7IG1pbjogMSB9KTtcblxuLyoqXG4gKiBMYXJnZXN0IGBwcmV2aW91c0NvbmZpZ2AgKHNlcmlhbGl6ZWQgSlNPTiwgY2hhcnMpIGFuIGl0ZXJhdGl2ZSByZWZpbmVtZW50IG1heVxuICogc2VuZCBiYWNrLiBJdCByaWRlcyBpbiB0aGUgbW9kZWwncyBwcm9tcHQgb24gZXZlcnkgcmVmaW5lbWVudCwgc28gYW5cbiAqIHVuYm91bmRlZCBvbmUgdHVybmVkIGEgc2luZ2xlIGBhaUNhbGxzYCB1bml0IGludG8gYW4gYXJiaXRyYXJpbHkgbGFyZ2UgaW5wdXRcbiAqIGJpbGw7IGEgcmVhbCBnZW5lcmF0ZWQgcGlwZWxpbmUgY29uZmlnIGlzIGEgZmV3IEtCLlxuICovXG5leHBvcnQgY29uc3QgTUFYX1BSRVZJT1VTX0NPTkZJR19DSEFSUyA9IDY0XzAwMDtcblxuLy8gQUkgR2VuZXJhdGlvbiBSZXF1ZXN0XG5cbi8qKlxuICogU2NoZW1hIGZvciBBSSBnZW5lcmF0aW9uIHJlcXVlc3QgYm9keS5cbiAqIFVzZWQgYnkgYm90aCBQT1NUIC9waXBlbGluZXMvZ2VuZXJhdGUgYW5kIFBPU1QgL3BsdWdpbnMvZ2VuZXJhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBBSUdlbmVyYXRlQm9keVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIE5hdHVyYWwgbGFuZ3VhZ2UgZGVzY3JpcHRpb24gb2Ygd2hhdCB0byBnZW5lcmF0ZS4gKi9cbiAgcHJvbXB0OiB6XG4gICAgLnN0cmluZygpXG4gICAgLm1pbigxLCAnQSBwcm9tcHQgd2l0aCBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGVzY3JpcHRpb24gaXMgcmVxdWlyZWQnKVxuICAgIC5tYXgoTUFYX1BST01QVF9MRU5HVEgsIGBQcm9tcHQgbXVzdCBiZSAke01BWF9QUk9NUFRfTEVOR1RIfSBjaGFyYWN0ZXJzIG9yIGZld2VyYCksXG5cbiAgLyoqIEFJIHByb3ZpZGVyIGlkZW50aWZpZXIgKGUuZy4gXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIiwgXCJnb29nbGVcIikuICovXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm1pbigxLCAnQSBwcm92aWRlciBpcyByZXF1aXJlZCAoZS5nLiwgXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIiwgXCJnb29nbGVcIiknKSxcblxuICAvKiogQUkgbW9kZWwgaWRlbnRpZmllciAoZS5nLiBcImNsYXVkZS1zb25uZXQtNS01XCIsIFwiZ3B0LTUuNi1zb2xcIikuICovXG4gIG1vZGVsOiB6LnN0cmluZygpLm1pbigxLCAnQSBtb2RlbCBpcyByZXF1aXJlZCAoZS5nLiwgXCJjbGF1ZGUtc29ubmV0LTUtNVwiLCBcImdwdC01LjYtc29sXCIpJyksXG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBBUEkga2V5IHRvIG92ZXJyaWRlIHRoZSBzZXJ2ZXIvb3JnIGtleSBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBhcGlLZXk6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG5cbiAgLyoqIFByZXZpb3VzIHBpcGVsaW5lIGNvbmZpZyBmb3IgaXRlcmF0aXZlIHJlZmluZW1lbnQuICovXG4gIHByZXZpb3VzQ29uZmlnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAucmVmaW5lKCh2KSA9PiBKU09OLnN0cmluZ2lmeSh2KS5sZW5ndGggPD0gTUFYX1BSRVZJT1VTX0NPTkZJR19DSEFSUywgYHByZXZpb3VzQ29uZmlnIG11c3Qgc2VyaWFsaXplIHRvICR7TUFYX1BSRVZJT1VTX0NPTkZJR19DSEFSU30gY2hhcmFjdGVycyBvciBmZXdlcmApXG4gICAgLm9wdGlvbmFsKCksXG5cbiAgLyoqIEZhbGxiYWNrIEFJIHByb3ZpZGVycyBpZiBwcmltYXJ5IGZhaWxzIChlLmcuLCBbXCJvcGVuYWlcIiwgXCJnb29nbGVcIl0pLiAqL1xuICBmYWxsYmFja1Byb3ZpZGVyczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxufSk7XG5cbi8vIFBsdWdpbiBEZXBsb3ktR2VuZXJhdGVkIFJlcXVlc3RcblxuLyoqXG4gKiBTY2hlbWEgZm9yIFBPU1QgL3BsdWdpbnMvZGVwbG95LWdlbmVyYXRlZCByZXF1ZXN0IGJvZHkuXG4gKiBWYWxpZGF0ZXMgdGhlIEFJLWdlbmVyYXRlZCBwbHVnaW4gY29uZmlndXJhdGlvbiBiZWZvcmUgRG9ja2VyIGJ1aWxkLlxuICovXG5leHBvcnQgY29uc3QgUGx1Z2luRGVwbG95R2VuZXJhdGVkU2NoZW1hID0gei5vYmplY3Qoe1xuICAvKiogUGx1Z2luIG5hbWUgKGxvd2VyY2FzZSwgYWxwaGFudW1lcmljIHdpdGggaHlwaGVucykuICovXG4gIG5hbWU6IHouc3RyaW5nKCkubWluKDEsICdQbHVnaW4gbmFtZSBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvKiogU2VtYW50aWMgdmVyc2lvbiAoZS5nLiBcIjEuMC4wXCIpLiAqL1xuICB2ZXJzaW9uOiB6LnN0cmluZygpLm1pbigxLCAnVmVyc2lvbiBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBQbHVnaW4gZXhlY3V0aW9uIHR5cGUuICovXG4gIHBsdWdpblR5cGU6IHouZW51bShbJ0NvZGVCdWlsZFN0ZXAnLCAnU2hlbGxTdGVwJywgJ01hbnVhbEFwcHJvdmFsU3RlcCddKS5kZWZhdWx0KCdDb2RlQnVpbGRTdGVwJyksXG5cbiAgLyoqIEFXUyBDb2RlQnVpbGQgY29tcHV0ZSBzaXplLiAqL1xuICBjb21wdXRlVHlwZTogei5lbnVtKFsnU01BTEwnLCAnTUVESVVNJywgJ0xBUkdFJywgJ1gyX0xBUkdFJ10pLmRlZmF1bHQoJ01FRElVTScpLFxuXG4gIC8qKiBLZXl3b3JkcyBmb3IgY2F0ZWdvcml6YXRpb24uICovXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCkuZGVmYXVsdChbXSksXG5cbiAgLyoqIFByaW1hcnkgb3V0cHV0IGRpcmVjdG9yeSBwYXRoLiAqL1xuICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcblxuICAvKiogQ29tbWFuZHMgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMuICovXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlZmF1bHQoW10pLFxuXG4gIC8qKiBCdWlsZC9leGVjdXRpb24gY29tbWFuZHMuICovXG4gIGNvbW1hbmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm1pbigxLCAnQXQgbGVhc3Qgb25lIGJ1aWxkIGNvbW1hbmQgaXMgcmVxdWlyZWQnKSxcblxuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzLiAqL1xuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG5cbiAgLyoqIERvY2tlciBidWlsZCBhcmd1bWVudHMgcGFzc2VkIHZpYSAtLWJ1aWxkLWFyZyBhdCBpbWFnZSBidWlsZCB0aW1lLiAqL1xuICBidWlsZEFyZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG5cbiAgLyoqIENvbXBsZXRlIERvY2tlcmZpbGUgY29udGVudCBmb3IgdGhlIGJ1aWxkIGVudmlyb25tZW50LiAqL1xuICBkb2NrZXJmaWxlOiB6LnN0cmluZygpLm1pbigxLCAnRG9ja2VyZmlsZSBjb250ZW50IGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIEFjY2VzcyB2aXNpYmlsaXR5LiAqL1xuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLmRlZmF1bHQoJ3ByaXZhdGUnKSxcblxuICAvKiogU2NoZWR1bGluZyBjbGFzcyBmb3IgdGhlIGltYWdlIGJ1aWxkIChEMTEpOyBzZWUgYFBsdWdpblVwbG9hZEJvZHlTY2hlbWFgLiAqL1xuICBidWlsZENsYXNzOiB6LmVudW0oQlVJTERfQ0xBU1NFUykub3B0aW9uYWwoKSxcblxuICAvKiogTWFjaGluZSBzaXplIGZvciB0aGUgaW1hZ2UgYnVpbGQgKEQxMyk7IHJlZnVzZWQgYWJvdmUgdGhlIHRpZXIncyBjZWlsaW5nLiAqL1xuICBidWlsZFNpemU6IHouZW51bShCVUlMRF9TSVpFUykub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBBSSBHZW5lcmF0ZSBGcm9tIFVSTCBSZXF1ZXN0XG5cbi8qKlxuICogU2NoZW1hIGZvciBQT1NUIC9waXBlbGluZXMvZ2VuZXJhdGUvZnJvbS11cmwvc3RyZWFtIHJlcXVlc3QgYm9keS5cbiAqIFZhbGlkYXRlcyBHaXQgVVJMICsgQUkgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgcmVwby1iYXNlZCBwaXBlbGluZSBnZW5lcmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgQUlHZW5lcmF0ZUZyb21VcmxCb2R5U2NoZW1hID0gei5vYmplY3Qoe1xuICAvKiogR2l0IHJlcG9zaXRvcnkgVVJMIChIVFRQUywgU1NILCBvciBnaXRAIGZvcm1hdCkuICovXG4gIGdpdFVybDogei5zdHJpbmcoKS5taW4oMSwgJ0EgR2l0IHJlcG9zaXRvcnkgVVJMIGlzIHJlcXVpcmVkJykubWF4KDUwMCwgJ1VSTCBtdXN0IGJlIDUwMCBjaGFyYWN0ZXJzIG9yIGZld2VyJyksXG5cbiAgLyoqIEFJIHByb3ZpZGVyIGlkZW50aWZpZXIgKGUuZy4gXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIiwgXCJnb29nbGVcIikuICovXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm1pbigxLCAnQSBwcm92aWRlciBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBBSSBtb2RlbCBpZGVudGlmaWVyIChlLmcuIFwiY2xhdWRlLXNvbm5ldC01LTVcIiwgXCJncHQtNS42LXNvbFwiKS4gKi9cbiAgbW9kZWw6IHouc3RyaW5nKCkubWluKDEsICdBIG1vZGVsIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBBUEkga2V5IHRvIG92ZXJyaWRlIHRoZSBzZXJ2ZXIgY29uZmlnLiAqL1xuICBhcGlLZXk6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG5cbiAgLyoqIE9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvciBhY2Nlc3NpbmcgcHJpdmF0ZSByZXBvc2l0b3JpZXMuICovXG4gIHJlcG9Ub2tlbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBSZXBvc2l0b3J5IEFuYWx5c2lzIFJlcXVlc3RcblxuLyoqXG4gKiBTY2hlbWEgZm9yIFBPU1QgL3BpcGVsaW5lcy9hbmFseXplL2Zyb20tdXJsIOKAlCByZXBvc2l0b3J5IGFuYWx5c2lzIE9OTFkgKG5vIEFJXG4gKiBjYWxsLCBubyBgYWlDYWxsc2Agc2xvdCk6IHRoZSBBc2sgYWdlbnQncyBgcHJvcG9zZV9wbHVnaW5fZnJvbV9yZXBvYCByZWFkcyB0aGVcbiAqIGFuYWx5c2lzIHN1bW1hcnkgZnJvbSBpdCBiZWZvcmUgZHJhZnRpbmcgdGhyb3VnaCB0aGUgcGx1Z2luIGdlbmVyYXRvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFuYWx5emVGcm9tVXJsQm9keVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIEdpdCByZXBvc2l0b3J5IFVSTCAoSFRUUFMsIFNTSCwgb3IgZ2l0QCBmb3JtYXQpLiAqL1xuICBnaXRVcmw6IHouc3RyaW5nKCkubWluKDEsICdBIEdpdCByZXBvc2l0b3J5IFVSTCBpcyByZXF1aXJlZCcpLm1heCg1MDAsICdVUkwgbXVzdCBiZSA1MDAgY2hhcmFjdGVycyBvciBmZXdlcicpLFxuXG4gIC8qKiBPcHRpb25hbCBhdXRoZW50aWNhdGlvbiB0b2tlbiBmb3IgYWNjZXNzaW5nIHByaXZhdGUgcmVwb3NpdG9yaWVzLiAqL1xuICByZXBvVG9rZW46IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG59KTtcbiJdfQ==
|
|
@@ -182,4 +182,19 @@ export declare const PluginUploadBodySchema: z.ZodObject<{
|
|
|
182
182
|
false: "false";
|
|
183
183
|
true: "true";
|
|
184
184
|
}>>;
|
|
185
|
+
setupLoad: z.ZodOptional<z.ZodEnum<{
|
|
186
|
+
false: "false";
|
|
187
|
+
true: "true";
|
|
188
|
+
}>>;
|
|
189
|
+
buildClass: z.ZodOptional<z.ZodEnum<{
|
|
190
|
+
flexible: "flexible";
|
|
191
|
+
standard: "standard";
|
|
192
|
+
}>>;
|
|
193
|
+
buildSize: z.ZodOptional<z.ZodEnum<{
|
|
194
|
+
"0.5x": "0.5x";
|
|
195
|
+
"1x": "1x";
|
|
196
|
+
"2x": "2x";
|
|
197
|
+
"4x": "4x";
|
|
198
|
+
"8x": "8x";
|
|
199
|
+
}>>;
|
|
185
200
|
}, z.core.$strip>;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { BaseFilterSchema, BooleanQuerySchema, VisibilitySchema, CatalogMetadataShape } from './common-schemas.js';
|
|
5
5
|
import { PluginCatalogEditsSchema } from './plugin-catalog-metadata.js';
|
|
6
|
+
import { BUILD_CLASSES, BUILD_SIZES } from '../types/build-catalog.js';
|
|
6
7
|
import { PUBLISHER_HANDLE_PATTERN } from '../types/ecosystem.js';
|
|
7
8
|
/**
|
|
8
9
|
* Plugin filter schema for query parameters
|
|
@@ -80,5 +81,31 @@ export const PluginUploadBodySchema = z.object({
|
|
|
80
81
|
* `visibility=public`. The Official catalog loader always sets it.
|
|
81
82
|
*/
|
|
82
83
|
publishRequest: z.enum(['true', 'false']).optional(),
|
|
84
|
+
/**
|
|
85
|
+
* `true`: this upload is the SETUP catalog load (deploy/bin/load-plugins.sh).
|
|
86
|
+
* Honoured only for a system-org build, where an image the scan gates refuse
|
|
87
|
+
* is KEPT in the registry for promotion (`POST /plugins/kept-setup-images/:id/promote`)
|
|
88
|
+
* instead of discarded. Ignored (normal discard) for any other org.
|
|
89
|
+
*/
|
|
90
|
+
setupLoad: z.enum(['true', 'false']).optional(),
|
|
91
|
+
/**
|
|
92
|
+
* Scheduling class for this build (D11). `standard` is the default and the
|
|
93
|
+
* only class an urgent fix should use; `batch` trades start latency for more
|
|
94
|
+
* per-org headroom, and every tier has both — a free account must still be
|
|
95
|
+
* able to push one urgent build through.
|
|
96
|
+
*
|
|
97
|
+
* Not a BullMQ priority: priorities are per-queue integers and builds are
|
|
98
|
+
* already split across one queue PER TIER, so a priority would only order a
|
|
99
|
+
* tier against itself. The class is a job field the worker admits against,
|
|
100
|
+
* which is where the contention actually is.
|
|
101
|
+
*/
|
|
102
|
+
buildClass: z.enum(BUILD_CLASSES).optional(),
|
|
103
|
+
/**
|
|
104
|
+
* Machine size for this build (D13). Credit-neutral per build — a `2x` build
|
|
105
|
+
* burns the same credits twice as fast — so this is a capability gate, not a
|
|
106
|
+
* price: `TIER_BUILD_SIZES` says which tier may ask for which, and a request
|
|
107
|
+
* above the tier's ceiling is refused rather than silently downgraded.
|
|
108
|
+
*/
|
|
109
|
+
buildSize: z.enum(BUILD_SIZES).optional(),
|
|
83
110
|
});
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDeEQsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ2xDLHVFQUF1RTtJQUN2RSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNuQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFR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RUFBRTtJQUN2QyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3hDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7Q0FDeEMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRVo7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkM7OztPQUdHO0lBQ0gsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMvQzs7Ozs7T0FLRztJQUNILGNBQWMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3JELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSwgVmlzaWJpbGl0eVNjaGVtYSwgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IFBsdWdpbkNhdGFsb2dFZGl0c1NjaGVtYSB9IGZyb20gJy4vcGx1Z2luLWNhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgUFVCTElTSEVSX0hBTkRMRV9QQVRURVJOIH0gZnJvbSAnLi4vdHlwZXMvZWNvc3lzdGVtLmpzJztcblxuLyoqXG4gKiBQbHVnaW4gZmlsdGVyIHNjaGVtYSBmb3IgcXVlcnkgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgUGx1Z2luRmlsdGVyU2NoZW1hID0gQmFzZUZpbHRlclNjaGVtYS5leHRlbmQoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICAvKiogUmVzb2x2ZSB0aHJvdWdoIHRoaXMgcHVibGlzaGVyJ3MgaW5zdGFsbGVkIGxpc3Rpbmc7IGxvb2t1cCBvbmx5LiAqL1xuICBwdWJsaXNoZXI6IHouc3RyaW5nKCkubWF4KDM5KS5yZWdleChQVUJMSVNIRVJfSEFORExFX1BBVFRFUk4pLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIG9yZ0lkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBwbHVnaW5UeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmQ6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogUGx1Z2luIGNyZWF0aW9uIHNjaGVtYSDigJQgdXNlZCBmb3IgT3BlbkFQSSBkb2N1bWVudGF0aW9uIGFuZCBkaXJlY3QgQVBJIGNyZWF0aW9uLlxuICogQ3VycmVudGx5IG5vIHJvdXRlIHVzZXMgdGhpcyBkaXJlY3RseTsgcGx1Z2lucyBhcmUgY3JlYXRlZCB2aWEgdXBsb2FkIG9yIEFJIGdlbmVyYXRpb24uXG4gKiBSZXRhaW5lZCBmb3IgZnV0dXJlIGRpcmVjdC1jcmVhdGUgZW5kcG9pbnQgYW5kIE9wZW5BUEkgc3BlYyBjb21wbGV0ZW5lc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBQbHVnaW5DcmVhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC4uLkNhdGFsb2dNZXRhZGF0YVNoYXBlLFxuICBvcmdJZDogei5zdHJpbmcoKS5taW4oMSwgJ09yZ2FuaXphdGlvbiBJRCBpcyByZXF1aXJlZCcpLFxuICBuYW1lOiB6LnN0cmluZygpLm1pbigxLCAnUGx1Z2luIG5hbWUgaXMgcmVxdWlyZWQnKSxcbiAgdmVyc2lvbjogei5zdHJpbmcoKS5taW4oMSwgJ1ZlcnNpb24gaXMgcmVxdWlyZWQnKSxcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb21wdXRlVHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGJ1aWxkQXJnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgaW5zdGFsbENvbW1hbmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNvbW1hbmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgdGltZW91dDogei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB6LmVudW0oWydmYWlsJywgJ3dhcm4nLCAnaWdub3JlJ10pLm9wdGlvbmFsKCksXG4gIHNlY3JldHM6IHouYXJyYXkoei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICAgIHJlcXVpcmVkOiB6LmJvb2xlYW4oKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFBsdWdpbiB1cGRhdGUgc2NoZW1hIChgUFVUIC9wbHVnaW5zLzppZGApLlxuICpcbiAqIERFU0NSSVBUSVZFIGNhdGFsb2cgZmllbGRzIG9ubHkgcGx1cyB0aGUgdmVyc2lvbidzIG9wZXJhdGlvbmFsXG4gKiBmbGFncyBhbmQgZGV2ZWxvcGVyLXBvcnRhbCBtZXRhZGF0YS4gRXhlY3V0aW9uLWNvbnRyYWN0IGtleXMgKGNvbW1hbmRzLCBlbnYsXG4gKiBzZWNyZXRzLCBjb21wdXRlIHR5cGUsIOKApikgYXJlIG5ldmVyIGFjY2VwdGVkIOKAlCB0aGUgcm91dGUgcmVmdXNlcyB0aGVtIHdpdGggYVxuICogNDAwIG5hbWluZyB0aGUga2V5cyBiZWZvcmUgdGhpcyBzY2hlbWEgcnVucywgYW5kIGAuc3RyaWN0KClgIHJlZnVzZXMgYW55dGhpbmdcbiAqIGVsc2UgdW5rbm93biByYXRoZXIgdGhhbiBzaWxlbnRseSBkcm9wcGluZyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpblVwZGF0ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLi4uQ2F0YWxvZ01ldGFkYXRhU2hhcGUsXG4gIC4uLlBsdWdpbkNhdGFsb2dFZGl0c1NjaGVtYS5zaGFwZSxcbiAgaXNBY3RpdmU6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICBpc0RlZmF1bHQ6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKTtcblxuLyoqXG4gKiBQbHVnaW4gdXBsb2FkIGJvZHkgc2NoZW1hIChtdWx0aXBhcnQgZm9ybS1kYXRhIHRleHQgZmllbGRzKVxuICovXG5leHBvcnQgY29uc3QgUGx1Z2luVXBsb2FkQm9keVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogQ2F0YWxvZyBtZXRhZGF0YSBlZGl0cyBhcyBhIEpTT04gb2JqZWN0IChhIHtAbGluayBQbHVnaW5DYXRhbG9nRWRpdHNTY2hlbWF9XG4gICAqIGRvY3VtZW50KS4gQWJzZW50IOKHkiBldmVyeSB2YWx1ZSBkZXRlY3RlZCBmcm9tIHRoZSBwYWNrYWdlIGlzIGFjY2VwdGVkLlxuICAgKi9cbiAgbWV0YWRhdGE6IHouc3RyaW5nKCkubWF4KDI1NiAqIDEwMjQpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBgdHJ1ZWA6IG9uY2UgdGhlIGJ1aWxkIGNvbXBsZXRlcywgc3VibWl0IGEgcHVibGlzaCByZXF1ZXN0IChuZXcgbGlzdGluZywgb3JcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIG9yZydzIGV4aXN0aW5nIGxpc3RpbmcpIGZvciB0aGUgYnVpbHQgdmVyc2lvbiBhcyB0aGVcbiAgICogdXBsb2FkZXIgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBOZWVkcyBgcGx1Z2luczpwdWJsaXNoYCBhbmRcbiAgICogYHZpc2liaWxpdHk9cHVibGljYC4gVGhlIE9mZmljaWFsIGNhdGFsb2cgbG9hZGVyIGFsd2F5cyBzZXRzIGl0LlxuICAgKi9cbiAgcHVibGlzaFJlcXVlc3Q6IHouZW51bShbJ3RydWUnLCAnZmFsc2UnXSkub3B0aW9uYWwoKSxcbn0pO1xuIl19
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN4RCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsdUVBQXVFO0lBQ3ZFLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN4RSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25DLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE9BQU8sRUFBRSxD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QUcsd0JBQXdCLENBQUMsS0FBSztJQUNqQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtDQUN4QyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFWjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtJQUN2Qzs7O09BR0c7SUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQy9DOzs7OztPQUtHO0lBQ0gsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDcEQ7Ozs7O09BS0c7SUFDSCxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMvQzs7Ozs7Ozs7OztPQVVHO0lBQ0gsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzVDOzs7OztPQUtHO0lBQ0gsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQzFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSwgVmlzaWJpbGl0eVNjaGVtYSwgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IFBsdWdpbkNhdGFsb2dFZGl0c1NjaGVtYSB9IGZyb20gJy4vcGx1Z2luLWNhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgQlVJTERfQ0xBU1NFUywgQlVJTERfU0laRVMgfSBmcm9tICcuLi90eXBlcy9idWlsZC1jYXRhbG9nLmpzJztcbmltcG9ydCB7IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiB9IGZyb20gJy4uL3R5cGVzL2Vjb3N5c3RlbS5qcyc7XG5cbi8qKlxuICogUGx1Z2luIGZpbHRlciBzY2hlbWEgZm9yIHF1ZXJ5IHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpbkZpbHRlclNjaGVtYSA9IEJhc2VGaWx0ZXJTY2hlbWEuZXh0ZW5kKHtcbiAgbmFtZTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgLyoqIFJlc29sdmUgdGhyb3VnaCB0aGlzIHB1Ymxpc2hlcidzIGluc3RhbGxlZCBsaXN0aW5nOyBsb29rdXAgb25seS4gKi9cbiAgcHVibGlzaGVyOiB6LnN0cmluZygpLm1heCgzOSkucmVnZXgoUFVCTElTSEVSX0hBTkRMRV9QQVRURVJOKS5vcHRpb25hbCgpLFxuICB2ZXJzaW9uOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBvcmdJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFBsdWdpbiBjcmVhdGlvbiBzY2hlbWEg4oCUIHVzZWQgZm9yIE9wZW5BUEkgZG9jdW1lbnRhdGlvbiBhbmQgZGlyZWN0IEFQSSBjcmVhdGlvbi5cbiAqIEN1cnJlbnRseSBubyByb3V0ZSB1c2VzIHRoaXMgZGlyZWN0bHk7IHBsdWdpbnMgYXJlIGNyZWF0ZWQgdmlhIHVwbG9hZCBvciBBSSBnZW5lcmF0aW9uLlxuICogUmV0YWluZWQgZm9yIGZ1dHVyZSBkaXJlY3QtY3JlYXRlIGVuZHBvaW50IGFuZCBPcGVuQVBJIHNwZWMgY29tcGxldGVuZXNzLlxuICovXG5leHBvcnQgY29uc3QgUGx1Z2luQ3JlYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICAuLi5DYXRhbG9nTWV0YWRhdGFTaGFwZSxcbiAgb3JnSWQ6IHouc3RyaW5nKCkubWluKDEsICdPcmdhbml6YXRpb24gSUQgaXMgcmVxdWlyZWQnKSxcbiAgbmFtZTogei5zdHJpbmcoKS5taW4oMSwgJ1BsdWdpbiBuYW1lIGlzIHJlcXVpcmVkJyksXG4gIHZlcnNpb246IHouc3RyaW5nKCkubWluKDEsICdWZXJzaW9uIGlzIHJlcXVpcmVkJyksXG4gIHZpc2liaWxpdHk6IFZpc2liaWxpdHlTY2hlbWEub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIHBsdWdpblR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY29tcHV0ZVR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBidWlsZEFyZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogQm9vbGVhblF1ZXJ5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzRGVmYXVsdDogQm9vbGVhblF1ZXJ5U2NoZW1hLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGZhaWx1cmVCZWhhdmlvcjogei5lbnVtKFsnZmFpbCcsICd3YXJuJywgJ2lnbm9yZSddKS5vcHRpb25hbCgpLFxuICBzZWNyZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICByZXF1aXJlZDogei5ib29sZWFuKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSkpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBQbHVnaW4gdXBkYXRlIHNjaGVtYSAoYFBVVCAvcGx1Z2lucy86aWRgKS5cbiAqXG4gKiBERVNDUklQVElWRSBjYXRhbG9nIGZpZWxkcyBvbmx5IHBsdXMgdGhlIHZlcnNpb24ncyBvcGVyYXRpb25hbFxuICogZmxhZ3MgYW5kIGRldmVsb3Blci1wb3J0YWwgbWV0YWRhdGEuIEV4ZWN1dGlvbi1jb250cmFjdCBrZXlzIChjb21tYW5kcywgZW52LFxuICogc2VjcmV0cywgY29tcHV0ZSB0eXBlLCDigKYpIGFyZSBuZXZlciBhY2NlcHRlZCDigJQgdGhlIHJvdXRlIHJlZnVzZXMgdGhlbSB3aXRoIGFcbiAqIDQwMCBuYW1pbmcgdGhlIGtleXMgYmVmb3JlIHRoaXMgc2NoZW1hIHJ1bnMsIGFuZCBgLnN0cmljdCgpYCByZWZ1c2VzIGFueXRoaW5nXG4gKiBlbHNlIHVua25vd24gcmF0aGVyIHRoYW4gc2lsZW50bHkgZHJvcHBpbmcgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBQbHVnaW5VcGRhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC4uLkNhdGFsb2dNZXRhZGF0YVNoYXBlLFxuICAuLi5QbHVnaW5DYXRhbG9nRWRpdHNTY2hlbWEuc2hhcGUsXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxufSkuc3RyaWN0KCk7XG5cbi8qKlxuICogUGx1Z2luIHVwbG9hZCBib2R5IHNjaGVtYSAobXVsdGlwYXJ0IGZvcm0tZGF0YSB0ZXh0IGZpZWxkcylcbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpblVwbG9hZEJvZHlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHZpc2liaWxpdHk6IFZpc2liaWxpdHlTY2hlbWEub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIENhdGFsb2cgbWV0YWRhdGEgZWRpdHMgYXMgYSBKU09OIG9iamVjdCAoYSB7QGxpbmsgUGx1Z2luQ2F0YWxvZ0VkaXRzU2NoZW1hfVxuICAgKiBkb2N1bWVudCkuIEFic2VudCDih5IgZXZlcnkgdmFsdWUgZGV0ZWN0ZWQgZnJvbSB0aGUgcGFja2FnZSBpcyBhY2NlcHRlZC5cbiAgICovXG4gIG1ldGFkYXRhOiB6LnN0cmluZygpLm1heCgyNTYgKiAxMDI0KS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogYHRydWVgOiBvbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHN1Ym1pdCBhIHB1Ymxpc2ggcmVxdWVzdCAobmV3IGxpc3RpbmcsIG9yXG4gICAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBvcmcncyBleGlzdGluZyBsaXN0aW5nKSBmb3IgdGhlIGJ1aWx0IHZlcnNpb24gYXMgdGhlXG4gICAqIHVwbG9hZGVyIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gTmVlZHMgYHBsdWdpbnM6cHVibGlzaGAgYW5kXG4gICAqIGB2aXNpYmlsaXR5PXB1YmxpY2AuIFRoZSBPZmZpY2lhbCBjYXRhbG9nIGxvYWRlciBhbHdheXMgc2V0cyBpdC5cbiAgICovXG4gIHB1Ymxpc2hSZXF1ZXN0OiB6LmVudW0oWyd0cnVlJywgJ2ZhbHNlJ10pLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBgdHJ1ZWA6IHRoaXMgdXBsb2FkIGlzIHRoZSBTRVRVUCBjYXRhbG9nIGxvYWQgKGRlcGxveS9iaW4vbG9hZC1wbHVnaW5zLnNoKS5cbiAgICogSG9ub3VyZWQgb25seSBmb3IgYSBzeXN0ZW0tb3JnIGJ1aWxkLCB3aGVyZSBhbiBpbWFnZSB0aGUgc2NhbiBnYXRlcyByZWZ1c2VcbiAgICogaXMgS0VQVCBpbiB0aGUgcmVnaXN0cnkgZm9yIHByb21vdGlvbiAoYFBPU1QgL3BsdWdpbnMva2VwdC1zZXR1cC1pbWFnZXMvOmlkL3Byb21vdGVgKVxuICAgKiBpbnN0ZWFkIG9mIGRpc2NhcmRlZC4gSWdub3JlZCAobm9ybWFsIGRpc2NhcmQpIGZvciBhbnkgb3RoZXIgb3JnLlxuICAgKi9cbiAgc2V0dXBMb2FkOiB6LmVudW0oWyd0cnVlJywgJ2ZhbHNlJ10pLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBTY2hlZHVsaW5nIGNsYXNzIGZvciB0aGlzIGJ1aWxkIChEMTEpLiBgc3RhbmRhcmRgIGlzIHRoZSBkZWZhdWx0IGFuZCB0aGVcbiAgICogb25seSBjbGFzcyBhbiB1cmdlbnQgZml4IHNob3VsZCB1c2U7IGBiYXRjaGAgdHJhZGVzIHN0YXJ0IGxhdGVuY3kgZm9yIG1vcmVcbiAgICogcGVyLW9yZyBoZWFkcm9vbSwgYW5kIGV2ZXJ5IHRpZXIgaGFzIGJvdGgg4oCUIGEgZnJlZSBhY2NvdW50IG11c3Qgc3RpbGwgYmVcbiAgICogYWJsZSB0byBwdXNoIG9uZSB1cmdlbnQgYnVpbGQgdGhyb3VnaC5cbiAgICpcbiAgICogTm90IGEgQnVsbE1RIHByaW9yaXR5OiBwcmlvcml0aWVzIGFyZSBwZXItcXVldWUgaW50ZWdlcnMgYW5kIGJ1aWxkcyBhcmVcbiAgICogYWxyZWFkeSBzcGxpdCBhY3Jvc3Mgb25lIHF1ZXVlIFBFUiBUSUVSLCBzbyBhIHByaW9yaXR5IHdvdWxkIG9ubHkgb3JkZXIgYVxuICAgKiB0aWVyIGFnYWluc3QgaXRzZWxmLiBUaGUgY2xhc3MgaXMgYSBqb2IgZmllbGQgdGhlIHdvcmtlciBhZG1pdHMgYWdhaW5zdCxcbiAgICogd2hpY2ggaXMgd2hlcmUgdGhlIGNvbnRlbnRpb24gYWN0dWFsbHkgaXMuXG4gICAqL1xuICBidWlsZENsYXNzOiB6LmVudW0oQlVJTERfQ0xBU1NFUykub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIE1hY2hpbmUgc2l6ZSBmb3IgdGhpcyBidWlsZCAoRDEzKS4gQ3JlZGl0LW5ldXRyYWwgcGVyIGJ1aWxkIOKAlCBhIGAyeGAgYnVpbGRcbiAgICogYnVybnMgdGhlIHNhbWUgY3JlZGl0cyB0d2ljZSBhcyBmYXN0IOKAlCBzbyB0aGlzIGlzIGEgY2FwYWJpbGl0eSBnYXRlLCBub3QgYVxuICAgKiBwcmljZTogYFRJRVJfQlVJTERfU0laRVNgIHNheXMgd2hpY2ggdGllciBtYXkgYXNrIGZvciB3aGljaCwgYW5kIGEgcmVxdWVzdFxuICAgKiBhYm92ZSB0aGUgdGllcidzIGNlaWxpbmcgaXMgcmVmdXNlZCByYXRoZXIgdGhhbiBzaWxlbnRseSBkb3duZ3JhZGVkLlxuICAgKi9cbiAgYnVpbGRTaXplOiB6LmVudW0oQlVJTERfU0laRVMpLm9wdGlvbmFsKCksXG59KTtcbiJdfQ==
|