@pipeline-builder/api-core 3.4.104 → 3.4.106

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.
Files changed (37) hide show
  1. package/lib/middleware/auth.js +5 -1
  2. package/lib/openapi/routes/index.js +3 -1
  3. package/lib/openapi/routes/pipeline-routes.js +10 -1
  4. package/lib/openapi/routes/pipeline-template-routes.d.ts +1 -0
  5. package/lib/openapi/routes/pipeline-template-routes.js +59 -0
  6. package/lib/services/audit-spool.d.ts +21 -2
  7. package/lib/services/audit-spool.js +79 -7
  8. package/lib/services/entity-events.js +20 -1
  9. package/lib/services/index.d.ts +1 -0
  10. package/lib/services/index.js +2 -1
  11. package/lib/services/remote-audit-client.d.ts +1 -1
  12. package/lib/services/remote-audit-client.js +18 -1
  13. package/lib/types/catalog-metadata.d.ts +36 -0
  14. package/lib/types/catalog-metadata.js +21 -0
  15. package/lib/types/index.d.ts +2 -0
  16. package/lib/types/index.js +3 -1
  17. package/lib/types/pipeline-template.d.ts +30 -0
  18. package/lib/types/pipeline-template.js +13 -0
  19. package/lib/utils/identity.js +11 -2
  20. package/lib/utils/logger.d.ts +10 -0
  21. package/lib/utils/logger.js +15 -1
  22. package/lib/utils/params.d.ts +12 -0
  23. package/lib/utils/params.js +1 -1
  24. package/lib/validation/common-schemas.d.ts +62 -0
  25. package/lib/validation/common-schemas.js +33 -1
  26. package/lib/validation/index.d.ts +1 -0
  27. package/lib/validation/index.js +2 -1
  28. package/lib/validation/message-schemas.d.ts +6 -0
  29. package/lib/validation/middleware.d.ts +17 -1
  30. package/lib/validation/middleware.js +1 -1
  31. package/lib/validation/pipeline-schemas.d.ts +50 -0
  32. package/lib/validation/pipeline-schemas.js +4 -2
  33. package/lib/validation/pipeline-template-schemas.d.ts +152 -0
  34. package/lib/validation/pipeline-template-schemas.js +65 -0
  35. package/lib/validation/plugin-schemas.d.ts +50 -0
  36. package/lib/validation/plugin-schemas.js +4 -2
  37. package/package.json +1 -1
@@ -3,9 +3,11 @@
3
3
  export * from './error-codes.js';
4
4
  export * from './common.js';
5
5
  export * from './pipeline.js';
6
+ export * from './catalog-metadata.js';
7
+ export * from './pipeline-template.js';
6
8
  export * from './http.js';
7
9
  export * from './quota-tiers.js';
8
10
  export * from './feature-flags.js';
9
11
  export * from './permissions.js';
10
12
  export * from './audit-events.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci1jb2Rlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaHR0cC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXVkaXQtZXZlbnRzLmpzJztcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vZXJyb3ItY29kZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NhdGFsb2ctbWV0YWRhdGEuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZlYXR1cmUtZmxhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2F1ZGl0LWV2ZW50cy5qcyc7XG4iXX0=
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Golden-path pipeline templates: a parameterized starter a developer
3
+ * instantiates (fills inputs) to create a new pipeline. The template body is a
4
+ * BuilderProps with `{{ vars.* }}` placeholders; each declared input maps to a
5
+ * `vars.<name>` value. Instantiation bakes the supplied inputs into the new
6
+ * pipeline's `props.vars` — the placeholders resolve at synth time like any
7
+ * other pipeline var (no separate template runtime).
8
+ */
9
+ /** Scalar types a template input can carry. */
10
+ export declare const TEMPLATE_INPUT_TYPES: readonly ['string', 'number', 'boolean'];
11
+ export type TemplateInputType = (typeof TEMPLATE_INPUT_TYPES)[number];
12
+ /**
13
+ * One declared input of a pipeline template. `name` is the `vars.<name>` key the
14
+ * template body references. This is the template's counterpart to a plugin's
15
+ * `requiredVars` contract.
16
+ */
17
+ export interface TemplateInput {
18
+ /** Variable key — referenced in the template body as `{{ vars.<name> }}`. */
19
+ readonly name: string;
20
+ /** Human label for the instantiate form (falls back to `name`). */
21
+ readonly label?: string;
22
+ readonly description?: string;
23
+ readonly type: TemplateInputType;
24
+ /** When true, instantiation fails if no value (and no default) is supplied. */
25
+ readonly required?: boolean;
26
+ /** Default applied when the user leaves the input blank. */
27
+ readonly default?: string | number | boolean;
28
+ /** Optional fixed choice set (renders as a select in the UI). */
29
+ readonly options?: string[];
30
+ }
@@ -0,0 +1,13 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Golden-path pipeline templates: a parameterized starter a developer
5
+ * instantiates (fills inputs) to create a new pipeline. The template body is a
6
+ * BuilderProps with `{{ vars.* }}` placeholders; each declared input maps to a
7
+ * `vars.<name>` value. Instantiation bakes the supplied inputs into the new
8
+ * pipeline's `props.vars` — the placeholders resolve at synth time like any
9
+ * other pipeline var (no separate template runtime).
10
+ */
11
+ /** Scalar types a template input can carry. */
12
+ export const TEMPLATE_INPUT_TYPES = ['string', 'number', 'boolean'];
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGlwZWxpbmUtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBRUgsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEdvbGRlbi1wYXRoIHBpcGVsaW5lIHRlbXBsYXRlczogYSBwYXJhbWV0ZXJpemVkIHN0YXJ0ZXIgYSBkZXZlbG9wZXJcbiAqIGluc3RhbnRpYXRlcyAoZmlsbHMgaW5wdXRzKSB0byBjcmVhdGUgYSBuZXcgcGlwZWxpbmUuIFRoZSB0ZW1wbGF0ZSBib2R5IGlzIGFcbiAqIEJ1aWxkZXJQcm9wcyB3aXRoIGB7eyB2YXJzLiogfX1gIHBsYWNlaG9sZGVyczsgZWFjaCBkZWNsYXJlZCBpbnB1dCBtYXBzIHRvIGFcbiAqIGB2YXJzLjxuYW1lPmAgdmFsdWUuIEluc3RhbnRpYXRpb24gYmFrZXMgdGhlIHN1cHBsaWVkIGlucHV0cyBpbnRvIHRoZSBuZXdcbiAqIHBpcGVsaW5lJ3MgYHByb3BzLnZhcnNgIOKAlCB0aGUgcGxhY2Vob2xkZXJzIHJlc29sdmUgYXQgc3ludGggdGltZSBsaWtlIGFueVxuICogb3RoZXIgcGlwZWxpbmUgdmFyIChubyBzZXBhcmF0ZSB0ZW1wbGF0ZSBydW50aW1lKS5cbiAqL1xuXG4vKiogU2NhbGFyIHR5cGVzIGEgdGVtcGxhdGUgaW5wdXQgY2FuIGNhcnJ5LiAqL1xuZXhwb3J0IGNvbnN0IFRFTVBMQVRFX0lOUFVUX1RZUEVTID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRlbXBsYXRlSW5wdXRUeXBlID0gKHR5cGVvZiBURU1QTEFURV9JTlBVVF9UWVBFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBPbmUgZGVjbGFyZWQgaW5wdXQgb2YgYSBwaXBlbGluZSB0ZW1wbGF0ZS4gYG5hbWVgIGlzIHRoZSBgdmFycy48bmFtZT5gIGtleSB0aGVcbiAqIHRlbXBsYXRlIGJvZHkgcmVmZXJlbmNlcy4gVGhpcyBpcyB0aGUgdGVtcGxhdGUncyBjb3VudGVycGFydCB0byBhIHBsdWdpbidzXG4gKiBgcmVxdWlyZWRWYXJzYCBjb250cmFjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUlucHV0IHtcbiAgLyoqIFZhcmlhYmxlIGtleSDigJQgcmVmZXJlbmNlZCBpbiB0aGUgdGVtcGxhdGUgYm9keSBhcyBge3sgdmFycy48bmFtZT4gfX1gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBIdW1hbiBsYWJlbCBmb3IgdGhlIGluc3RhbnRpYXRlIGZvcm0gKGZhbGxzIGJhY2sgdG8gYG5hbWVgKS4gKi9cbiAgcmVhZG9ubHkgbGFiZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiBUZW1wbGF0ZUlucHV0VHlwZTtcbiAgLyoqIFdoZW4gdHJ1ZSwgaW5zdGFudGlhdGlvbiBmYWlscyBpZiBubyB2YWx1ZSAoYW5kIG5vIGRlZmF1bHQpIGlzIHN1cHBsaWVkLiAqL1xuICByZWFkb25seSByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBEZWZhdWx0IGFwcGxpZWQgd2hlbiB0aGUgdXNlciBsZWF2ZXMgdGhlIGlucHV0IGJsYW5rLiAqL1xuICByZWFkb25seSBkZWZhdWx0Pzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIGZpeGVkIGNob2ljZSBzZXQgKHJlbmRlcnMgYXMgYSBzZWxlY3QgaW4gdGhlIFVJKS4gKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuIl19
@@ -32,11 +32,20 @@ export function getIdentity(req) {
32
32
  // JWT (e.g. requestId). The JWT payload uses `sub` for the user id per
33
33
  // OIDC convention; that's our authoritative source.
34
34
  const user = req.user;
35
+ // Canonical orgId normalization — the SINGLE source of truth. Lowercasing
36
+ // (and trimming) ONCE here guarantees the RLS GUC (`identityScope` reads this
37
+ // raw `identity.orgId`) and the app-layer WHERE clauses (route-wrapper /
38
+ // app-factory, which historically re-lowercased) always agree on tenant. A
39
+ // mismatch — GUC set to `Acme` while WHERE queries `acme` — would, under
40
+ // owner-bypass RLS, silently scope reads to the wrong (or no) tenant. Empty /
41
+ // whitespace-only collapses to undefined so "missing org" stays falsy.
42
+ const rawOrgId = user?.organizationId || getHeaderString(req.headers['x-org-id']);
43
+ const orgId = rawOrgId?.trim().toLowerCase() || undefined;
35
44
  return {
36
- orgId: user?.organizationId || getHeaderString(req.headers['x-org-id']),
45
+ orgId,
37
46
  userId: user?.sub || getHeaderString(req.headers['x-user-id']),
38
47
  requestId: getHeaderString(req.headers['x-request-id']),
39
48
  role: user?.role || getHeaderString(req.headers['x-user-role']),
40
49
  };
41
50
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaWRlbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBaUIvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFnQjtJQUMxQyxvRUFBb0U7SUFDcEUsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUN0QixPQUFPO1FBQ0wsS0FBSyxFQUFFLElBQUksRUFBRSxjQUFjLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUQsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2hFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGdldEhlYWRlclN0cmluZyB9IGZyb20gJy4vaGVhZGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMvaHR0cC5qcyc7XG5cbi8qKlxuICogSWRlbnRpdHkgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gcmVxdWVzdCBoZWFkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJZGVudGl0eSB7XG4gIC8qKiBPcmdhbml6YXRpb24gSUQgZnJvbSB4LW9yZy1pZCBoZWFkZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBVc2VyIElEIGZyb20geC11c2VyLWlkIGhlYWRlciAqL1xuICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBSZXF1ZXN0IElEIGZyb20geC1yZXF1ZXN0LWlkIGhlYWRlciAqL1xuICByZWFkb25seSByZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKiBVc2VyIHJvbGUgZnJvbSB4LXVzZXItcm9sZSBoZWFkZXIgKGRlY29kZWQgZnJvbSBKV1QpICovXG4gIHJlYWRvbmx5IHJvbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXh0cmFjdCBpZGVudGl0eSBpbmZvcm1hdGlvbiBmcm9tIHJlcXVlc3QgaGVhZGVycy5cbiAqXG4gKiBFeHRyYWN0cyBjb21tb24gaWRlbnRpdHkgaGVhZGVycyB1c2VkIGZvciBtdWx0aS10ZW5hbnQgYXV0aGVudGljYXRpb246XG4gKiAtIHgtb3JnLWlkOiBPcmdhbml6YXRpb24gaWRlbnRpZmllclxuICogLSB4LXVzZXItaWQ6IFVzZXIgaWRlbnRpZmllclxuICogLSB4LXJlcXVlc3QtaWQ6IFJlcXVlc3QgdHJhY2UgaWRlbnRpZmllclxuICogLSB4LXVzZXItcm9sZTogVXNlciByb2xlXG4gKlxuICogQHBhcmFtIHJlcSAtIEhUVFAgcmVxdWVzdCBvYmplY3RcbiAqIEByZXR1cm5zIElkZW50aXR5IG9iamVjdCB3aXRoIG9yZ0lkLCB1c2VySWQsIHJlcXVlc3RJZCwgYW5kIHJvbGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXBwLnBvc3QoJy9hcGkvcmVzb3VyY2UnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gKiAgIGNvbnN0IGlkZW50aXR5ID0gZ2V0SWRlbnRpdHkocmVxKTtcbiAqXG4gKiAgIGlmICghaWRlbnRpdHkub3JnSWQpIHtcbiAqICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgNDAwLCAneC1vcmctaWQgaGVhZGVyIHJlcXVpcmVkJyk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIFVzZSBpZGVudGl0eS5vcmdJZCwgaWRlbnRpdHkudXNlcklkLCBldGMuXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpdHkocmVxOiBIdHRwUmVxdWVzdCk6IFJlcXVlc3RJZGVudGl0eSB7XG4gIC8vIFByZWZlciBKV1QtdmVyaWZpZWQgY2xhaW1zIChyZXEudXNlcikgb3ZlciByYXcgaGVhZGVycyB0byBwcmV2ZW50XG4gIC8vIHNwb29maW5nLiBIZWFkZXJzIGFyZSBvbmx5IHVzZWQgYXMgZmFsbGJhY2sgb3IgZm9yIGZpZWxkcyBub3QgaW4gdGhlXG4gIC8vIEpXVCAoZS5nLiByZXF1ZXN0SWQpLiBUaGUgSldUIHBheWxvYWQgdXNlcyBgc3ViYCBmb3IgdGhlIHVzZXIgaWQgcGVyXG4gIC8vIE9JREMgY29udmVudGlvbjsgdGhhdCdzIG91ciBhdXRob3JpdGF0aXZlIHNvdXJjZS5cbiAgY29uc3QgdXNlciA9IHJlcS51c2VyO1xuICByZXR1cm4ge1xuICAgIG9yZ0lkOiB1c2VyPy5vcmdhbml6YXRpb25JZCB8fCBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtb3JnLWlkJ10pLFxuICAgIHVzZXJJZDogdXNlcj8uc3ViIHx8IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC11c2VyLWlkJ10pLFxuICAgIHJlcXVlc3RJZDogZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LXJlcXVlc3QtaWQnXSksXG4gICAgcm9sZTogdXNlcj8ucm9sZSB8fCBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtdXNlci1yb2xlJ10pLFxuICB9O1xufVxuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaWRlbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBaUIvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFnQjtJQUMxQyxvRUFBb0U7SUFDcEUsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUN0QiwwRUFBMEU7SUFDMUUsOEVBQThFO0lBQzlFLHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLDhFQUE4RTtJQUM5RSx1RUFBdUU7SUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLGNBQWMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sS0FBSyxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUM7SUFDMUQsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDaEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZ2V0SGVhZGVyU3RyaW5nIH0gZnJvbSAnLi9oZWFkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgSHR0cFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9odHRwLmpzJztcblxuLyoqXG4gKiBJZGVudGl0eSBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSByZXF1ZXN0IGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdElkZW50aXR5IHtcbiAgLyoqIE9yZ2FuaXphdGlvbiBJRCBmcm9tIHgtb3JnLWlkIGhlYWRlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgLyoqIFVzZXIgSUQgZnJvbSB4LXVzZXItaWQgaGVhZGVyICovXG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgLyoqIFJlcXVlc3QgSUQgZnJvbSB4LXJlcXVlc3QtaWQgaGVhZGVyICovXG4gIHJlYWRvbmx5IHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqIFVzZXIgcm9sZSBmcm9tIHgtdXNlci1yb2xlIGhlYWRlciAoZGVjb2RlZCBmcm9tIEpXVCkgKi9cbiAgcmVhZG9ubHkgcm9sZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGlkZW50aXR5IGluZm9ybWF0aW9uIGZyb20gcmVxdWVzdCBoZWFkZXJzLlxuICpcbiAqIEV4dHJhY3RzIGNvbW1vbiBpZGVudGl0eSBoZWFkZXJzIHVzZWQgZm9yIG11bHRpLXRlbmFudCBhdXRoZW50aWNhdGlvbjpcbiAqIC0geC1vcmctaWQ6IE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXG4gKiAtIHgtdXNlci1pZDogVXNlciBpZGVudGlmaWVyXG4gKiAtIHgtcmVxdWVzdC1pZDogUmVxdWVzdCB0cmFjZSBpZGVudGlmaWVyXG4gKiAtIHgtdXNlci1yb2xlOiBVc2VyIHJvbGVcbiAqXG4gKiBAcGFyYW0gcmVxIC0gSFRUUCByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgSWRlbnRpdHkgb2JqZWN0IHdpdGggb3JnSWQsIHVzZXJJZCwgcmVxdWVzdElkLCBhbmQgcm9sZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhcHAucG9zdCgnL2FwaS9yZXNvdXJjZScsIHJlcXVpcmVBdXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAqICAgY29uc3QgaWRlbnRpdHkgPSBnZXRJZGVudGl0eShyZXEpO1xuICpcbiAqICAgaWYgKCFpZGVudGl0eS5vcmdJZCkge1xuICogICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICd4LW9yZy1pZCBoZWFkZXIgcmVxdWlyZWQnKTtcbiAqICAgfVxuICpcbiAqICAgLy8gVXNlIGlkZW50aXR5Lm9yZ0lkLCBpZGVudGl0eS51c2VySWQsIGV0Yy5cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGl0eShyZXE6IEh0dHBSZXF1ZXN0KTogUmVxdWVzdElkZW50aXR5IHtcbiAgLy8gUHJlZmVyIEpXVC12ZXJpZmllZCBjbGFpbXMgKHJlcS51c2VyKSBvdmVyIHJhdyBoZWFkZXJzIHRvIHByZXZlbnRcbiAgLy8gc3Bvb2ZpbmcuIEhlYWRlcnMgYXJlIG9ubHkgdXNlZCBhcyBmYWxsYmFjayBvciBmb3IgZmllbGRzIG5vdCBpbiB0aGVcbiAgLy8gSldUIChlLmcuIHJlcXVlc3RJZCkuIFRoZSBKV1QgcGF5bG9hZCB1c2VzIGBzdWJgIGZvciB0aGUgdXNlciBpZCBwZXJcbiAgLy8gT0lEQyBjb252ZW50aW9uOyB0aGF0J3Mgb3VyIGF1dGhvcml0YXRpdmUgc291cmNlLlxuICBjb25zdCB1c2VyID0gcmVxLnVzZXI7XG4gIC8vIENhbm9uaWNhbCBvcmdJZCBub3JtYWxpemF0aW9uIOKAlCB0aGUgU0lOR0xFIHNvdXJjZSBvZiB0cnV0aC4gTG93ZXJjYXNpbmdcbiAgLy8gKGFuZCB0cmltbWluZykgT05DRSBoZXJlIGd1YXJhbnRlZXMgdGhlIFJMUyBHVUMgKGBpZGVudGl0eVNjb3BlYCByZWFkcyB0aGlzXG4gIC8vIHJhdyBgaWRlbnRpdHkub3JnSWRgKSBhbmQgdGhlIGFwcC1sYXllciBXSEVSRSBjbGF1c2VzIChyb3V0ZS13cmFwcGVyIC9cbiAgLy8gYXBwLWZhY3RvcnksIHdoaWNoIGhpc3RvcmljYWxseSByZS1sb3dlcmNhc2VkKSBhbHdheXMgYWdyZWUgb24gdGVuYW50LiBBXG4gIC8vIG1pc21hdGNoIOKAlCBHVUMgc2V0IHRvIGBBY21lYCB3aGlsZSBXSEVSRSBxdWVyaWVzIGBhY21lYCDigJQgd291bGQsIHVuZGVyXG4gIC8vIG93bmVyLWJ5cGFzcyBSTFMsIHNpbGVudGx5IHNjb3BlIHJlYWRzIHRvIHRoZSB3cm9uZyAob3Igbm8pIHRlbmFudC4gRW1wdHkgL1xuICAvLyB3aGl0ZXNwYWNlLW9ubHkgY29sbGFwc2VzIHRvIHVuZGVmaW5lZCBzbyBcIm1pc3Npbmcgb3JnXCIgc3RheXMgZmFsc3kuXG4gIGNvbnN0IHJhd09yZ0lkID0gdXNlcj8ub3JnYW5pemF0aW9uSWQgfHwgZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1pZCddKTtcbiAgY29uc3Qgb3JnSWQgPSByYXdPcmdJZD8udHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIG9yZ0lkLFxuICAgIHVzZXJJZDogdXNlcj8uc3ViIHx8IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC11c2VyLWlkJ10pLFxuICAgIHJlcXVlc3RJZDogZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LXJlcXVlc3QtaWQnXSksXG4gICAgcm9sZTogdXNlcj8ucm9sZSB8fCBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtdXNlci1yb2xlJ10pLFxuICB9O1xufVxuIl19
@@ -1,4 +1,14 @@
1
1
  import winston from 'winston';
2
+ /**
3
+ * Redact sensitive values from an ARBITRARY payload using the same key-pattern
4
+ * rules the Winston `redactFormat` applies to log metadata. Use this for
5
+ * payloads that reach an output channel OUTSIDE the logger — e.g. an SSE frame
6
+ * pushed straight to a client — so a `password`/`token`/`secret` field is
7
+ * masked there too. A top-level sensitive key is masked; nested objects/arrays
8
+ * are walked (depth-capped) exactly as in the logger. Returns a redacted COPY;
9
+ * primitives pass through unchanged.
10
+ */
11
+ export declare function redactSensitive(value: unknown): unknown;
2
12
  /**
3
13
  * Create a logger instance for a service.
4
14
  *
@@ -75,6 +75,20 @@ function redactDeep(value, depth = 0) {
75
75
  }
76
76
  return out;
77
77
  }
78
+ /**
79
+ * Redact sensitive values from an ARBITRARY payload using the same key-pattern
80
+ * rules the Winston `redactFormat` applies to log metadata. Use this for
81
+ * payloads that reach an output channel OUTSIDE the logger — e.g. an SSE frame
82
+ * pushed straight to a client — so a `password`/`token`/`secret` field is
83
+ * masked there too. A top-level sensitive key is masked; nested objects/arrays
84
+ * are walked (depth-capped) exactly as in the logger. Returns a redacted COPY;
85
+ * primitives pass through unchanged.
86
+ */
87
+ export function redactSensitive(value) {
88
+ if (value == null || typeof value !== 'object')
89
+ return value;
90
+ return redactDeep(value);
91
+ }
78
92
  /** Winston format that masks values for sensitive-looking keys (PII / secrets).
79
93
  * Mutates `info` in place so winston's internal Symbol-keyed properties
80
94
  * (`Symbol.for('level')`, `Symbol.for('message')`, `Symbol.for('splat')`) survive
@@ -155,4 +169,4 @@ export function createLogger(serviceName) {
155
169
  */
156
170
  export const logger = createLogger(process.env.SERVICE_NAME || 'api');
157
171
  export default logger;
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBRTlFLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtJQUMvRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRSxPQUFPLEdBQUcsU0FBUyxJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILElBQUksUUFBZ0gsQ0FBQztBQUNySCxT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LENBQUMsWUFBWSxDQUFDO1FBQzFCLEtBQUssRUFBRSxRQUFRO1FBQ2YsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtRQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQy9CLFVBQVUsRUFBRTtZQUNWLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxDQUFDO2FBQzNDLENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUM7QUFFdEUsZUFBZSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQgeyBzYWZlQ3JlYXRlUmVxdWlyZSB9IGZyb20gJy4vc2FmZS1yZXF1aXJlLmpzJztcblxuY29uc3QgeyBjb21iaW5lLCB0aW1lc3RhbXAsIHByaW50ZiwgY29sb3JpemUsIGVycm9ycywganNvbiB9ID0gd2luc3Rvbi5mb3JtYXQ7XG5cbi8vIEVTTSBoYXMgbm8gZ2xvYmFsIGByZXF1aXJlYDsgc2FmZUNyZWF0ZVJlcXVpcmUgZW5hYmxlcyB0aGUgc3luY2hyb25vdXMsXG4vLyBPUFRJT05BTCBsYXp5LWxvYWQgb2YgQG9wZW50ZWxlbWV0cnkvYXBpIGluIGdldEN1cnJlbnRUcmFjZUlkKCkgYmVsb3cg4oCUIGFcbi8vIHdpbnN0b24gZm9ybWF0IGNhbGxiYWNrIG11c3Qgc3RheSBzeW5jaHJvbm91cywgc28gYSBkeW5hbWljIGltcG9ydCgpIHdvbid0XG4vLyB3b3JrIHRoZXJlLiAoQ0pTLWJ1bmRsZSBzYWZlIOKAlCBzZWUgc2FmZS1yZXF1aXJlLnRzLilcbmNvbnN0IHJlcXVpcmUgPSBzYWZlQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vKipcbiAqIEN1c3RvbSBsb2cgZm9ybWF0IGZvciBodW1hbi1yZWFkYWJsZSBjb25zb2xlIG91dHB1dC5cbiAqL1xuY29uc3QgY29uc29sZUZvcm1hdCA9IHByaW50ZigoeyBsZXZlbCwgbWVzc2FnZSwgdGltZXN0YW1wLCBzZXJ2aWNlLCAuLi5tZXRhIH0pID0+IHtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlID8gYFske3NlcnZpY2V9XWAgOiAnJztcbiAgY29uc3QgbWV0YVN0ciA9IE9iamVjdC5rZXlzKG1ldGEpLmxlbmd0aCA/IGAgJHtKU09OLnN0cmluZ2lmeShtZXRhKX1gIDogJyc7XG4gIHJldHVybiBgJHt0aW1lc3RhbXB9ICR7bGV2ZWx9ICR7c2VydmljZU5hbWV9ICR7bWVzc2FnZX0ke21ldGFTdHJ9YDtcbn0pO1xuXG4vKipcbiAqIExhenkgbG9va3VwIG9mIE9wZW5UZWxlbWV0cnkgdHJhY2UgSUQuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdHJhY2luZ1xuICogaXNuJ3QgaW5pdGlhbGl6ZWQgb3IgQG9wZW50ZWxlbWV0cnkvYXBpIGlzbid0IGluc3RhbGxlZCDigJQgbmV2ZXIgdGhyb3dzLlxuICogQ2hlYXA6IGEgc2luZ2xlIHByb3BlcnR5IHJlYWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbG9va3VwLlxuICovXG5sZXQgX290ZWxBcGk6IHsgdHJhY2U/OiB7IGdldEFjdGl2ZVNwYW4oKTogeyBzcGFuQ29udGV4dCgpOiB7IHRyYWNlSWQ6IHN0cmluZyB9IH0gfCB1bmRlZmluZWQgfSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChfb3RlbEFwaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICBfb3RlbEFwaSA9IHJlcXVpcmUoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgX290ZWxBcGkgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV9vdGVsQXBpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJldHVybiBfb3RlbEFwaS50cmFjZT8uZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgc3RhbXBzIGB0cmFjZV9pZGAgb24gZXZlcnkgZW50cnkgd2hlbiBhbiBPVGVsIHNwYW4gaXMgYWN0aXZlLiAqL1xuY29uc3QgdHJhY2VJZEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGNvbnN0IHRyYWNlSWQgPSBnZXRDdXJyZW50VHJhY2VJZCgpO1xuICBpZiAodHJhY2VJZCkgaW5mby50cmFjZV9pZCA9IHRyYWNlSWQ7XG4gIHJldHVybiBpbmZvO1xufSkoKTtcblxuLyoqXG4gKiBLZXlzIHRoYXQgc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBsb2dzLiBNYXRjaCBpcyBjYXNlLWluc2Vuc2l0aXZlIGFuZFxuICogYW5jaG9yZWQgc3Vic3RyaW5nIOKAlCBgQXV0aG9yaXphdGlvbmAsIGBhdXRoX2hlYWRlcmAsIGBNWV9QQVNTV09SRGAgYWxsIGhpdC5cbiAqIEFkZCBhIG5ldyB0ZXJtIGhlcmUgb25seSBpZiB5b3UndmUgc2VlbiByZWFsLXdvcmxkIGxlYWthZ2U7IG92ZXItcmVkYWN0aW9uXG4gKiBtYWtlcyBpbmNpZGVudCBkZWJ1Z2dpbmcgaGFyZGVyLlxuICovXG5jb25zdCBTRU5TSVRJVkVfS0VZX1BBVFRFUk4gPSAvcGFzc3dvcmR8c2VjcmV0fGJlYXJlcnxhcGlbXy1dP2tleXxjb29raWV8dG9rZW58XmF1dGgob3JpemF0aW9ufF9oZWFkZXIpPyR8c3RyaXBlW18tXT8oa2V5fHNlY3JldCl8bW9uZ28oZGIpP1tfLV0/dXJpL2k7XG5jb25zdCBSRURBQ1RFRCA9ICdbUkVEQUNURURdJztcblxuZnVuY3Rpb24gcmVkYWN0RGVlcCh2YWx1ZTogdW5rbm93biwgZGVwdGggPSAwKTogdW5rbm93biB7XG4gIC8vIENhcCBkZXB0aCBzbyBhIG1hbGljaW91cyAvIHBhdGhvbG9naWNhbCBjaXJjdWxhciBvYmplY3QgY2FuJ3QgbG9jayB0aGUgbG9nZ2VyLlxuICBpZiAoZGVwdGggPiA2KSByZXR1cm4gdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKCh2KSA9PiByZWRhY3REZWVwKHYsIGRlcHRoICsgMSkpO1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChTRU5TSVRJVkVfS0VZX1BBVFRFUk4udGVzdChrKSkge1xuICAgICAgb3V0W2tdID0gUkVEQUNURUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFtrXSA9IHJlZGFjdERlZXAodiwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgbWFza3MgdmFsdWVzIGZvciBzZW5zaXRpdmUtbG9va2luZyBrZXlzIChQSUkgLyBzZWNyZXRzKS5cbiAqIE11dGF0ZXMgYGluZm9gIGluIHBsYWNlIHNvIHdpbnN0b24ncyBpbnRlcm5hbCBTeW1ib2wta2V5ZWQgcHJvcGVydGllc1xuICogKGBTeW1ib2wuZm9yKCdsZXZlbCcpYCwgYFN5bWJvbC5mb3IoJ21lc3NhZ2UnKWAsIGBTeW1ib2wuZm9yKCdzcGxhdCcpYCkgc3Vydml2ZVxuICog4oCUIHJlYnVpbGRpbmcgYSBmcmVzaCBvYmplY3QgdmlhIGBPYmplY3QuZW50cmllc2Avc3ByZWFkIHNpbGVudGx5IHN0cmlwcyB0aGVtLFxuICogd2hpY2ggbWFrZXMgdGhlIENvbnNvbGUgdHJhbnNwb3J0IGRyb3AgZXZlcnkgZW50cnkgd2l0aG91dCB3YXJuaW5nLiAqL1xuY29uc3QgUFJFU0VSVkVEX0tFWVMgPSBuZXcgU2V0KFsnbGV2ZWwnLCAnbWVzc2FnZScsICd0aW1lc3RhbXAnLCAnc2VydmljZScsICd0cmFjZV9pZCddKTtcbmNvbnN0IHJlZGFjdEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluZm8pKSB7XG4gICAgaWYgKFBSRVNFUlZFRF9LRVlTLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICBpZiAoU0VOU0lUSVZFX0tFWV9QQVRURVJOLnRlc3Qoa2V5KSkge1xuICAgICAgaW5mb1trZXldID0gUkVEQUNURUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm9ba2V5XSA9IHJlZGFjdERlZXAoaW5mb1trZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZm87XG59KSgpO1xuXG4vKipcbiAqIENyZWF0ZSBhIGxvZ2dlciBpbnN0YW5jZSBmb3IgYSBzZXJ2aWNlLlxuICpcbiAqIFdoZW4gTE9HX0ZPUk1BVD1qc29uIChkZWZhdWx0KSwgb3V0cHV0cyBzdHJ1Y3R1cmVkIEpTT04gZm9yIExva2kgaW5nZXN0aW9uOlxuICogICB7XCJsZXZlbFwiOlwiaW5mb1wiLFwibWVzc2FnZVwiOlwiU2VydmVyIHN0YXJ0ZWRcIixcInNlcnZpY2VcIjpcInBpcGVsaW5lXCIsXCJ0aW1lc3RhbXBcIjpcIi4uLlwifVxuICpcbiAqIFdoZW4gTE9HX0ZPUk1BVD10ZXh0LCBvdXRwdXRzIGNvbG9yaXplZCBodW1hbi1yZWFkYWJsZSBmb3JtYXQ6XG4gKiAgIDIwMjYtMDItMTNUMTA6MzA6MDAuMDAwWiBpbmZvIFtwaXBlbGluZV0gU2VydmVyIHN0YXJ0ZWRcbiAqXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgLSBOYW1lIG9mIHRoZSBzZXJ2aWNlIGZvciBsb2cgaWRlbnRpZmljYXRpb25cbiAqIEByZXR1cm5zIENvbmZpZ3VyZWQgV2luc3RvbiBsb2dnZXIgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuICpcbiAqIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZ2V0LXBsdWdpbicpO1xuICogbG9nZ2VyLmluZm8oJ1NlcnZlciBzdGFydGVkJywgeyBwb3J0OiAzMDAwIH0pO1xuICogbG9nZ2VyLmVycm9yKCdEYXRhYmFzZSBlcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIoc2VydmljZU5hbWU6IHN0cmluZyk6IHdpbnN0b24uTG9nZ2VyIHtcbiAgY29uc3QgbG9nTGV2ZWwgPSBwcm9jZXNzLmVudi5MT0dfTEVWRUwgfHwgJ2luZm8nO1xuICBjb25zdCBsb2dGb3JtYXQgPSBwcm9jZXNzLmVudi5MT0dfRk9STUFUIHx8ICdqc29uJztcbiAgaWYgKGxvZ0Zvcm1hdCAhPT0gJ2pzb24nICYmIGxvZ0Zvcm1hdCAhPT0gJ3RleHQnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc3RhcnR1cCB3YXJuaW5nIGJlZm9yZSBsb2dnZXIgaXMgYXZhaWxhYmxlXG4gICAgY29uc29sZS53YXJuKGBJbnZhbGlkIExPR19GT1JNQVQ9XCIke2xvZ0Zvcm1hdH1cIiwgZXhwZWN0ZWQgXCJqc29uXCIgb3IgXCJ0ZXh0XCIuIERlZmF1bHRpbmcgdG8gXCJqc29uXCIuYCk7XG4gIH1cbiAgY29uc3QgdXNlSnNvbiA9IGxvZ0Zvcm1hdCAhPT0gJ3RleHQnO1xuXG4gIC8vIE9yZGVyIG1hdHRlcnM6IHJlZGFjdCBCRUZPUkUgc2VyaWFsaXphdGlvbiBzbyBtYXNrZWQga2V5cyBuZXZlciByZWFjaFxuICAvLyB0aGUgb3V0cHV0LiB0cmFjZV9pZCBpcyBzdGFtcGVkIGZpcnN0IHNvIGl0IHN1cnZpdmVzIHJlZGFjdGlvbi5cbiAgY29uc3QgYmFzZUZvcm1hdHMgPSBbXG4gICAgZXJyb3JzKHsgc3RhY2s6IHRydWUgfSksXG4gICAgdGltZXN0YW1wKHsgZm9ybWF0OiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyB9KSxcbiAgICB0cmFjZUlkRm9ybWF0LFxuICAgIHJlZGFjdEZvcm1hdCxcbiAgXTtcblxuICBpZiAodXNlSnNvbikge1xuICAgIHJldHVybiB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgICBsZXZlbDogbG9nTGV2ZWwsXG4gICAgICBkZWZhdWx0TWV0YTogeyBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSB9LFxuICAgICAgZm9ybWF0OiBjb21iaW5lKC4uLmJhc2VGb3JtYXRzLCBqc29uKCkpLFxuICAgICAgdHJhbnNwb3J0czogW25ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSgpXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgbGV2ZWw6IGxvZ0xldmVsLFxuICAgIGRlZmF1bHRNZXRhOiB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lIH0sXG4gICAgZm9ybWF0OiBjb21iaW5lKC4uLmJhc2VGb3JtYXRzKSxcbiAgICB0cmFuc3BvcnRzOiBbXG4gICAgICBuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoe1xuICAgICAgICBmb3JtYXQ6IGNvbWJpbmUoY29sb3JpemUoKSwgY29uc29sZUZvcm1hdCksXG4gICAgICB9KSxcbiAgICBdLFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGxvZ2dlciBpbnN0YW5jZSAoc2VydmljZSBuYW1lIGZyb20gU0VSVklDRV9OQU1FIGVudiB2YXIgb3IgJ2FwaScpLlxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBRTlFLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtJQUMvRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRSxPQUFPLEdBQUcsU0FBUyxJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILElBQUksUUFBZ0gsQ0FBQztBQUNySCxT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QVcsRUFBRTtZQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQzFCLEtBQUssRUFBRSxRQUFRO1FBQ2YsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtRQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQy9CLFVBQVUsRUFBRTtZQUNWLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxDQUFDO2FBQzNDLENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUM7QUFFdEUsZUFBZSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQgeyBzYWZlQ3JlYXRlUmVxdWlyZSB9IGZyb20gJy4vc2FmZS1yZXF1aXJlLmpzJztcblxuY29uc3QgeyBjb21iaW5lLCB0aW1lc3RhbXAsIHByaW50ZiwgY29sb3JpemUsIGVycm9ycywganNvbiB9ID0gd2luc3Rvbi5mb3JtYXQ7XG5cbi8vIEVTTSBoYXMgbm8gZ2xvYmFsIGByZXF1aXJlYDsgc2FmZUNyZWF0ZVJlcXVpcmUgZW5hYmxlcyB0aGUgc3luY2hyb25vdXMsXG4vLyBPUFRJT05BTCBsYXp5LWxvYWQgb2YgQG9wZW50ZWxlbWV0cnkvYXBpIGluIGdldEN1cnJlbnRUcmFjZUlkKCkgYmVsb3cg4oCUIGFcbi8vIHdpbnN0b24gZm9ybWF0IGNhbGxiYWNrIG11c3Qgc3RheSBzeW5jaHJvbm91cywgc28gYSBkeW5hbWljIGltcG9ydCgpIHdvbid0XG4vLyB3b3JrIHRoZXJlLiAoQ0pTLWJ1bmRsZSBzYWZlIOKAlCBzZWUgc2FmZS1yZXF1aXJlLnRzLilcbmNvbnN0IHJlcXVpcmUgPSBzYWZlQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vKipcbiAqIEN1c3RvbSBsb2cgZm9ybWF0IGZvciBodW1hbi1yZWFkYWJsZSBjb25zb2xlIG91dHB1dC5cbiAqL1xuY29uc3QgY29uc29sZUZvcm1hdCA9IHByaW50ZigoeyBsZXZlbCwgbWVzc2FnZSwgdGltZXN0YW1wLCBzZXJ2aWNlLCAuLi5tZXRhIH0pID0+IHtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlID8gYFske3NlcnZpY2V9XWAgOiAnJztcbiAgY29uc3QgbWV0YVN0ciA9IE9iamVjdC5rZXlzKG1ldGEpLmxlbmd0aCA/IGAgJHtKU09OLnN0cmluZ2lmeShtZXRhKX1gIDogJyc7XG4gIHJldHVybiBgJHt0aW1lc3RhbXB9ICR7bGV2ZWx9ICR7c2VydmljZU5hbWV9ICR7bWVzc2FnZX0ke21ldGFTdHJ9YDtcbn0pO1xuXG4vKipcbiAqIExhenkgbG9va3VwIG9mIE9wZW5UZWxlbWV0cnkgdHJhY2UgSUQuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdHJhY2luZ1xuICogaXNuJ3QgaW5pdGlhbGl6ZWQgb3IgQG9wZW50ZWxlbWV0cnkvYXBpIGlzbid0IGluc3RhbGxlZCDigJQgbmV2ZXIgdGhyb3dzLlxuICogQ2hlYXA6IGEgc2luZ2xlIHByb3BlcnR5IHJlYWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbG9va3VwLlxuICovXG5sZXQgX290ZWxBcGk6IHsgdHJhY2U/OiB7IGdldEFjdGl2ZVNwYW4oKTogeyBzcGFuQ29udGV4dCgpOiB7IHRyYWNlSWQ6IHN0cmluZyB9IH0gfCB1bmRlZmluZWQgfSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChfb3RlbEFwaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICBfb3RlbEFwaSA9IHJlcXVpcmUoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgX290ZWxBcGkgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV9vdGVsQXBpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJldHVybiBfb3RlbEFwaS50cmFjZT8uZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgc3RhbXBzIGB0cmFjZV9pZGAgb24gZXZlcnkgZW50cnkgd2hlbiBhbiBPVGVsIHNwYW4gaXMgYWN0aXZlLiAqL1xuY29uc3QgdHJhY2VJZEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGNvbnN0IHRyYWNlSWQgPSBnZXRDdXJyZW50VHJhY2VJZCgpO1xuICBpZiAodHJhY2VJZCkgaW5mby50cmFjZV9pZCA9IHRyYWNlSWQ7XG4gIHJldHVybiBpbmZvO1xufSkoKTtcblxuLyoqXG4gKiBLZXlzIHRoYXQgc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBsb2dzLiBNYXRjaCBpcyBjYXNlLWluc2Vuc2l0aXZlIGFuZFxuICogYW5jaG9yZWQgc3Vic3RyaW5nIOKAlCBgQXV0aG9yaXphdGlvbmAsIGBhdXRoX2hlYWRlcmAsIGBNWV9QQVNTV09SRGAgYWxsIGhpdC5cbiAqIEFkZCBhIG5ldyB0ZXJtIGhlcmUgb25seSBpZiB5b3UndmUgc2VlbiByZWFsLXdvcmxkIGxlYWthZ2U7IG92ZXItcmVkYWN0aW9uXG4gKiBtYWtlcyBpbmNpZGVudCBkZWJ1Z2dpbmcgaGFyZGVyLlxuICovXG5jb25zdCBTRU5TSVRJVkVfS0VZX1BBVFRFUk4gPSAvcGFzc3dvcmR8c2VjcmV0fGJlYXJlcnxhcGlbXy1dP2tleXxjb29raWV8dG9rZW58XmF1dGgob3JpemF0aW9ufF9oZWFkZXIpPyR8c3RyaXBlW18tXT8oa2V5fHNlY3JldCl8bW9uZ28oZGIpP1tfLV0/dXJpL2k7XG5jb25zdCBSRURBQ1RFRCA9ICdbUkVEQUNURURdJztcblxuZnVuY3Rpb24gcmVkYWN0RGVlcCh2YWx1ZTogdW5rbm93biwgZGVwdGggPSAwKTogdW5rbm93biB7XG4gIC8vIENhcCBkZXB0aCBzbyBhIG1hbGljaW91cyAvIHBhdGhvbG9naWNhbCBjaXJjdWxhciBvYmplY3QgY2FuJ3QgbG9jayB0aGUgbG9nZ2VyLlxuICBpZiAoZGVwdGggPiA2KSByZXR1cm4gdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKCh2KSA9PiByZWRhY3REZWVwKHYsIGRlcHRoICsgMSkpO1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChTRU5TSVRJVkVfS0VZX1BBVFRFUk4udGVzdChrKSkge1xuICAgICAgb3V0W2tdID0gUkVEQUNURUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFtrXSA9IHJlZGFjdERlZXAodiwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2Vuc2l0aXZlIHZhbHVlcyBmcm9tIGFuIEFSQklUUkFSWSBwYXlsb2FkIHVzaW5nIHRoZSBzYW1lIGtleS1wYXR0ZXJuXG4gKiBydWxlcyB0aGUgV2luc3RvbiBgcmVkYWN0Rm9ybWF0YCBhcHBsaWVzIHRvIGxvZyBtZXRhZGF0YS4gVXNlIHRoaXMgZm9yXG4gKiBwYXlsb2FkcyB0aGF0IHJlYWNoIGFuIG91dHB1dCBjaGFubmVsIE9VVFNJREUgdGhlIGxvZ2dlciDigJQgZS5nLiBhbiBTU0UgZnJhbWVcbiAqIHB1c2hlZCBzdHJhaWdodCB0byBhIGNsaWVudCDigJQgc28gYSBgcGFzc3dvcmRgL2B0b2tlbmAvYHNlY3JldGAgZmllbGQgaXNcbiAqIG1hc2tlZCB0aGVyZSB0b28uIEEgdG9wLWxldmVsIHNlbnNpdGl2ZSBrZXkgaXMgbWFza2VkOyBuZXN0ZWQgb2JqZWN0cy9hcnJheXNcbiAqIGFyZSB3YWxrZWQgKGRlcHRoLWNhcHBlZCkgZXhhY3RseSBhcyBpbiB0aGUgbG9nZ2VyLiBSZXR1cm5zIGEgcmVkYWN0ZWQgQ09QWTtcbiAqIHByaW1pdGl2ZXMgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdFNlbnNpdGl2ZSh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiByZWRhY3REZWVwKHZhbHVlKTtcbn1cblxuLyoqIFdpbnN0b24gZm9ybWF0IHRoYXQgbWFza3MgdmFsdWVzIGZvciBzZW5zaXRpdmUtbG9va2luZyBrZXlzIChQSUkgLyBzZWNyZXRzKS5cbiAqIE11dGF0ZXMgYGluZm9gIGluIHBsYWNlIHNvIHdpbnN0b24ncyBpbnRlcm5hbCBTeW1ib2wta2V5ZWQgcHJvcGVydGllc1xuICogKGBTeW1ib2wuZm9yKCdsZXZlbCcpYCwgYFN5bWJvbC5mb3IoJ21lc3NhZ2UnKWAsIGBTeW1ib2wuZm9yKCdzcGxhdCcpYCkgc3Vydml2ZVxuICog4oCUIHJlYnVpbGRpbmcgYSBmcmVzaCBvYmplY3QgdmlhIGBPYmplY3QuZW50cmllc2Avc3ByZWFkIHNpbGVudGx5IHN0cmlwcyB0aGVtLFxuICogd2hpY2ggbWFrZXMgdGhlIENvbnNvbGUgdHJhbnNwb3J0IGRyb3AgZXZlcnkgZW50cnkgd2l0aG91dCB3YXJuaW5nLiAqL1xuY29uc3QgUFJFU0VSVkVEX0tFWVMgPSBuZXcgU2V0KFsnbGV2ZWwnLCAnbWVzc2FnZScsICd0aW1lc3RhbXAnLCAnc2VydmljZScsICd0cmFjZV9pZCddKTtcbmNvbnN0IHJlZGFjdEZvcm1hdCA9IHdpbnN0b24uZm9ybWF0KChpbmZvKSA9PiB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluZm8pKSB7XG4gICAgaWYgKFBSRVNFUlZFRF9LRVlTLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICBpZiAoU0VOU0lUSVZFX0tFWV9QQVRURVJOLnRlc3Qoa2V5KSkge1xuICAgICAgaW5mb1trZXldID0gUkVEQUNURUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm9ba2V5XSA9IHJlZGFjdERlZXAoaW5mb1trZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZm87XG59KSgpO1xuXG4vKipcbiAqIENyZWF0ZSBhIGxvZ2dlciBpbnN0YW5jZSBmb3IgYSBzZXJ2aWNlLlxuICpcbiAqIFdoZW4gTE9HX0ZPUk1BVD1qc29uIChkZWZhdWx0KSwgb3V0cHV0cyBzdHJ1Y3R1cmVkIEpTT04gZm9yIExva2kgaW5nZXN0aW9uOlxuICogICB7XCJsZXZlbFwiOlwiaW5mb1wiLFwibWVzc2FnZVwiOlwiU2VydmVyIHN0YXJ0ZWRcIixcInNlcnZpY2VcIjpcInBpcGVsaW5lXCIsXCJ0aW1lc3RhbXBcIjpcIi4uLlwifVxuICpcbiAqIFdoZW4gTE9HX0ZPUk1BVD10ZXh0LCBvdXRwdXRzIGNvbG9yaXplZCBodW1hbi1yZWFkYWJsZSBmb3JtYXQ6XG4gKiAgIDIwMjYtMDItMTNUMTA6MzA6MDAuMDAwWiBpbmZvIFtwaXBlbGluZV0gU2VydmVyIHN0YXJ0ZWRcbiAqXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgLSBOYW1lIG9mIHRoZSBzZXJ2aWNlIGZvciBsb2cgaWRlbnRpZmljYXRpb25cbiAqIEByZXR1cm5zIENvbmZpZ3VyZWQgV2luc3RvbiBsb2dnZXIgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuICpcbiAqIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZ2V0LXBsdWdpbicpO1xuICogbG9nZ2VyLmluZm8oJ1NlcnZlciBzdGFydGVkJywgeyBwb3J0OiAzMDAwIH0pO1xuICogbG9nZ2VyLmVycm9yKCdEYXRhYmFzZSBlcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIoc2VydmljZU5hbWU6IHN0cmluZyk6IHdpbnN0b24uTG9nZ2VyIHtcbiAgY29uc3QgbG9nTGV2ZWwgPSBwcm9jZXNzLmVudi5MT0dfTEVWRUwgfHwgJ2luZm8nO1xuICBjb25zdCBsb2dGb3JtYXQgPSBwcm9jZXNzLmVudi5MT0dfRk9STUFUIHx8ICdqc29uJztcbiAgaWYgKGxvZ0Zvcm1hdCAhPT0gJ2pzb24nICYmIGxvZ0Zvcm1hdCAhPT0gJ3RleHQnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc3RhcnR1cCB3YXJuaW5nIGJlZm9yZSBsb2dnZXIgaXMgYXZhaWxhYmxlXG4gICAgY29uc29sZS53YXJuKGBJbnZhbGlkIExPR19GT1JNQVQ9XCIke2xvZ0Zvcm1hdH1cIiwgZXhwZWN0ZWQgXCJqc29uXCIgb3IgXCJ0ZXh0XCIuIERlZmF1bHRpbmcgdG8gXCJqc29uXCIuYCk7XG4gIH1cbiAgY29uc3QgdXNlSnNvbiA9IGxvZ0Zvcm1hdCAhPT0gJ3RleHQnO1xuXG4gIC8vIE9yZGVyIG1hdHRlcnM6IHJlZGFjdCBCRUZPUkUgc2VyaWFsaXphdGlvbiBzbyBtYXNrZWQga2V5cyBuZXZlciByZWFjaFxuICAvLyB0aGUgb3V0cHV0LiB0cmFjZV9pZCBpcyBzdGFtcGVkIGZpcnN0IHNvIGl0IHN1cnZpdmVzIHJlZGFjdGlvbi5cbiAgY29uc3QgYmFzZUZvcm1hdHMgPSBbXG4gICAgZXJyb3JzKHsgc3RhY2s6IHRydWUgfSksXG4gICAgdGltZXN0YW1wKHsgZm9ybWF0OiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyB9KSxcbiAgICB0cmFjZUlkRm9ybWF0LFxuICAgIHJlZGFjdEZvcm1hdCxcbiAgXTtcblxuICBpZiAodXNlSnNvbikge1xuICAgIHJldHVybiB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgICBsZXZlbDogbG9nTGV2ZWwsXG4gICAgICBkZWZhdWx0TWV0YTogeyBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSB9LFxuICAgICAgZm9ybWF0OiBjb21iaW5lKC4uLmJhc2VGb3JtYXRzLCBqc29uKCkpLFxuICAgICAgdHJhbnNwb3J0czogW25ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSgpXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgbGV2ZWw6IGxvZ0xldmVsLFxuICAgIGRlZmF1bHRNZXRhOiB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lIH0sXG4gICAgZm9ybWF0OiBjb21iaW5lKC4uLmJhc2VGb3JtYXRzKSxcbiAgICB0cmFuc3BvcnRzOiBbXG4gICAgICBuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoe1xuICAgICAgICBmb3JtYXQ6IGNvbWJpbmUoY29sb3JpemUoKSwgY29uc29sZUZvcm1hdCksXG4gICAgICB9KSxcbiAgICBdLFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGxvZ2dlciBpbnN0YW5jZSAoc2VydmljZSBuYW1lIGZyb20gU0VSVklDRV9OQU1FIGVudiB2YXIgb3IgJ2FwaScpLlxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==
@@ -1,4 +1,16 @@
1
1
  import type { Request } from 'express';
2
+ /**
3
+ * Shape convention for the inline parse-guard helpers below.
4
+ *
5
+ * These return a lightweight `{ value } | { error }` (narrowed with
6
+ * `'error' in result`) — deliberately DISTINCT from the schema-validation
7
+ * `ValidationResult<T>` (`{ ok, value } | { ok, error }`) in
8
+ * `validation/middleware.ts`. Zod schema parsing uses the `ok`-discriminated
9
+ * shape; these ad-hoc request-parameter guards use `'error' in`. The split is
10
+ * intentional and documented (see the note on `ValidationResult`): converging
11
+ * them would churn every `'error' in result` call site across the downstream
12
+ * services with no behavioural change, so it's left as a documented convention.
13
+ */
2
14
  /**
3
15
  * Express 5 parameter type.
4
16
  */
@@ -203,4 +203,4 @@ export function parseDateRange(query, options = {}) {
203
203
  }
204
204
  return { from: fromStr, to: toStr };
205
205
  }
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPL0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBa0MsRUFDbEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVk7SUFDbkMsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSw2REFBNkQ7SUFDN0QseUVBQXlFO0lBQ3pFLDREQUE0RDtJQUM1RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUs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QUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUscUNBQXFDLEVBQUUsQ0FBQztJQUN0RixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLG1DQUFtQyxFQUFFLENBQUM7SUFDbEYsSUFBSSxNQUFNLEdBQUcsSUFBSTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQztJQUN4RSxJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUMzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLGlDQUFpQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNHLENBQUM7SUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGdldEhlYWRlclN0cmluZyB9IGZyb20gJy4vaGVhZGVycy5qcyc7XG5cbi8qKlxuICogRXhwcmVzcyA1IHBhcmFtZXRlciB0eXBlLlxuICovXG50eXBlIFBhcmFtVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSBFeHByZXNzIDUgcm91dGUgcGFyYW1zLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcyBvYmplY3RcbiAqIEBwYXJhbSBrZXkgLSBQYXJhbWV0ZXIga2V5XG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIHZhbHVlIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IHByZXNlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gUm91dGU6IEdFVCAvcGx1Z2lucy86aWRcbiAqIGNvbnN0IGlkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ2lkJyk7XG4gKiBpZiAoIWlkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIGlkIHBhcmFtZXRlcicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbShcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBQYXJhbVZhbHVlPixcbiAga2V5OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBvcmdhbml6YXRpb24gSUQgZnJvbSByZXF1ZXN0LlxuICogQ2hlY2tzIHBhcmFtcywgaGVhZGVycywgYW5kIHVzZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSByZXEgLSBFeHByZXNzIHJlcXVlc3Qgb2JqZWN0XG4gKiBAcmV0dXJucyBPcmdhbml6YXRpb24gSUQgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9yZ0lkID0gZ2V0T3JnSWQocmVxKTtcbiAqIGlmICghb3JnSWQpIHtcbiAqICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIDQwMCwgJ09yZ2FuaXphdGlvbiBJRCByZXF1aXJlZCcpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmdJZChyZXE6IFJlcXVlc3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBQcmVmZXIgdGhlIFZFUklGSUVEIEpXVCBpZGVudGl0eSBmaXJzdC4gQSBzcG9vZmFibGUgYHgtb3JnLWlkYCBoZWFkZXIgbXVzdFxuICAvLyBuZXZlciBvdmVycmlkZSBhbiBhdXRoZW50aWNhdGVkIHVzZXIncyBvcmcgKGNyb3NzLXRlbmFudCBmb290Z3VuKS4gRm9yIGFcbiAgLy8gc3VwZXJhZG1pbiBhY3RpbmcgY3Jvc3Mtb3JnLCByZXF1aXJlQXV0aCBhbHJlYWR5IHJlLXBvaW50c1xuICAvLyBgcmVxLnVzZXIub3JnYW5pemF0aW9uSWRgIHRvIHRoZSBjaG9zZW4gb3JnIHZpYSB0aGUgaXNTdXBlckFkbWluLWdhdGVkXG4gIC8vIGhlYWRlciBvdmVycmlkZSwgc28gdGhpcyBzdGlsbCB5aWVsZHMgdGhlIGludGVuZGVkIHNjb3BlLlxuICBjb25zdCB1c2VyT3JnSWQgPSByZXEudXNlcj8ub3JnYW5pemF0aW9uSWQ/LnRyaW0oKTtcbiAgaWYgKHVzZXJPcmdJZCkge1xuICAgIHJldHVybiB1c2VyT3JnSWQ7XG4gIH1cblxuICAvLyBQcmUtYXV0aCBmYWxsYmFja3Mgb25seSAocmVxLnVzZXIgdW5zZXQpOiByb3V0ZSBwYXJhbSwgdGhlbiBoZWFkZXIuXG4gIGNvbnN0IHBhcmFtT3JnSWQgPSBnZXRQYXJhbShyZXEucGFyYW1zLCAnb3JnSWQnKTtcbiAgaWYgKHBhcmFtT3JnSWQpIHtcbiAgICByZXR1cm4gcGFyYW1PcmdJZDtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlck9yZ0lkID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1pZCddKT8udHJpbSgpO1xuICBpZiAoaGVhZGVyT3JnSWQpIHtcbiAgICByZXR1cm4gaGVhZGVyT3JnSWQ7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgcGFyYW1ldGVyIGFzIGFuIGludGVnZXIuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRGVmYXVsdCB2YWx1ZSBpZiBwYXJzaW5nIGZhaWxzXG4gKiBAcmV0dXJucyBQYXJzZWQgaW50ZWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsaW1pdCA9IHBhcnNlUXVlcnlJbnQocmVxLnF1ZXJ5LmxpbWl0LCAxMCk7XG4gKiBjb25zdCBvZmZzZXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5vZmZzZXQsIDApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5SW50KHZhbHVlOiB1bmtub3duLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoU3RyaW5nKHZhbHVlKSwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IGRlZmF1bHRWYWx1ZSA6IHBhcnNlZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBRdWVyeSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIFN0cmluZyB2YWx1ZSBvciB1bmRlZmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VhcmNoID0gcGFyc2VRdWVyeVN0cmluZyhyZXEucXVlcnkuc2VhcmNoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyLCByZXR1cm5pbmcgYSBmYWxsYmFjayBpZiBpbnZhbGlkLlxuICogVXNlZnVsIGZvciBwYXJzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIG51bWVyaWMgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBvc2l0aXZlSW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSAmJiBwYXJzZWQgPiAwID8gcGFyc2VkIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBpbnQsIHRoZW4gY2xhbXAgdG8gYFsxLCBtYXhdYC4gUmV0dXJucyBgZGVmYXVsdFZhbHVlYCAoYWZ0ZXJcbiAqIHRoZSBzYW1lIGNsYW1wKSB3aGVuIHRoZSBpbnB1dCBpcyBtaXNzaW5nL2ludmFsaWQuIFVzZSBmb3IgYGxpbWl0YC1zdHlsZVxuICogcXVlcnkgcGFyYW1ldGVycyB3aGVyZSBhbiB1bmJvdW5kZWQgdmFsdWUgd291bGQgY29zdCByZWFsIG1vbmV5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBsaW1pdCA9IHBhcnNlUXVlcnlJbnRDbGFtcGVkKHJlcS5xdWVyeS5saW1pdCwgNTAsIDEwMDApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludENsYW1wZWQoXG4gIHZhbHVlOiB1bmtub3duLFxuICBkZWZhdWx0VmFsdWU6IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwYXJzZVF1ZXJ5SW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpO1xuICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5taW4ocmF3LCBtYXgpKTtcbn1cblxuLyoqXG4gKiBCdWxrLWFycmF5IHJlcXVlc3QgZ3VhcmQuIFZhbGlkYXRlcyB0aGF0IGB2YWx1ZWAgaXMgYW4gYXJyYXksIG5vbi1lbXB0eSxcbiAqIGFuZCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgY2FwLiBSZXR1cm5zIHRoZSB0eXBlZCBhcnJheSBvciBhbiBlcnJvciBvYmplY3RcbiAqIHRoZSBjYWxsZXIgY2FuIGZvcndhcmQgdG8gYHNlbmRFcnJvcmAvYHNlbmRCYWRSZXF1ZXN0YC5cbiAqXG4gKiBSZXBsYWNlcyBhIGhhbmQtcm9sbGVkIGBpZiAoIUFycmF5LmlzQXJyYXkoLi4uKSkgeyAuLi4gfWAgKyBsZW5ndGggY2hlY2tcbiAqIGJsb2NrIHRoYXQgd2FzIGR1cGxpY2F0ZWQgYWNyb3NzIGJ1bGsgZW5kcG9pbnRzIGluIHBpcGVsaW5lLCBwbHVnaW4sXG4gKiBjb21wbGlhbmNlLCBldGMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQnVsa0FycmF5KHJlcS5ib2R5LmlkcywgJ2lkcycpO1xuICogaWYgKCdlcnJvcicgaW4gcmVzdWx0KSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IGlkcyA9IHJlc3VsdC52YWx1ZTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQnVsa0FycmF5PFQgPSB1bmtub3duPihcbiAgdmFsdWU6IHVua25vd24sXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBtYXhJdGVtcz86IG51bWJlcixcbik6IHsgdmFsdWU6IFRbXSB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGVycm9yOiBgUmVxdWVzdCBib2R5IG11c3QgaW5jbHVkZSBhIG5vbi1lbXB0eSBcIiR7ZmllbGROYW1lfVwiIGFycmF5YCB9O1xuICB9XG4gIC8vIENvcmVDb25zdGFudHMuTUFYX0JVTEtfSVRFTVMgaXNuJ3QgaW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBhIGNpcmN1bGFyXG4gIC8vIHBhdGggdGhyb3VnaCBjb25zdGFudHMvaW5kZXg7IGNhbGxlcnMgcGFzcyBpdCBleHBsaWNpdGx5IG9yIG9taXQgZm9yXG4gIC8vIG5vIHVwcGVyIGJvdW5kLlxuICBpZiAobWF4SXRlbXMgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBtYXhJdGVtcykge1xuICAgIHJldHVybiB7IGVycm9yOiBgTWF4aW11bSAke21heEl0ZW1zfSBpdGVtcyBwZXIgYnVsayBvcGVyYXRpb25gIH07XG4gIH1cbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIGFzIFRbXSB9O1xufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBpbnRlcnZhbHMgZm9yIHRpbWUtYnVja2V0ZWQgcmVwb3J0IHF1ZXJpZXMuIFVzZWQgYXMgdGhlXG4gKiBgREFURV9UUlVOQ2AgZmlyc3QgYXJndW1lbnQgaW4gUG9zdGdyZXM7IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBlbnVtIHNvXG4gKiB0aGUgdmFsdWUgY2FuIG5ldmVyIGJlIGluamVjdGVkIGludG8gcmF3IFNRTC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFUE9SVF9JTlRFUlZBTFMgPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXBvcnRJbnRlcnZhbCA9ICh0eXBlb2YgUkVQT1JUX0lOVEVSVkFMUylbbnVtYmVyXTtcblxuLyoqXG4gKiBQYXJzZSArIHZhbGlkYXRlIGEgYD9pbnRlcnZhbD1gIHJlcG9ydCBidWNrZXQgKGRlZmF1bHRzIHRvICd3ZWVrJykuIFJldHVybnMgdGhlXG4gKiB2YWxpZGF0ZWQgaW50ZXJ2YWwgb3IgYHsgZXJyb3IgfWAuIFNoYXJlZCBieSB0aGUgdGltZXNlcmllcyByZXBvcnQgcm91dGVzIHNvIHRoZVxuICogZGVmYXVsdCArIGFsbG93LWxpc3QgKyBlcnJvciBtZXNzYWdlIGxpdmUgaW4gb25lIHBsYWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpbnRlcnZhbCA9IHBhcnNlUmVwb3J0SW50ZXJ2YWwocmVxLnF1ZXJ5KTtcbiAqIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdvYmplY3QnKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCBpbnRlcnZhbC5lcnJvciwgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXBvcnRJbnRlcnZhbChxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXBvcnRJbnRlcnZhbCB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBTdHJpbmcocXVlcnkuaW50ZXJ2YWwgPz8gJ3dlZWsnKTtcbiAgaWYgKCFSRVBPUlRfSU5URVJWQUxTLmluY2x1ZGVzKGludGVydmFsIGFzIFJlcG9ydEludGVydmFsKSkge1xuICAgIHJldHVybiB7IGVycm9yOiBgaW50ZXJ2YWwgbXVzdCBiZSBvbmUgb2Y6ICR7UkVQT1JUX0lOVEVSVkFMUy5qb2luKCcsICcpfWAgfTtcbiAgfVxuICByZXR1cm4gaW50ZXJ2YWwgYXMgUmVwb3J0SW50ZXJ2YWw7XG59XG5cbi8qKlxuICogUGFyc2UgYSBgP2Zyb209JnRvPWAgZGF0ZSByYW5nZSB3aXRoIGRlZmF1bHRzIG9mIFwiMzAgZGF5cyBhZ28g4oaSIG5vd1wiLlxuICogUmVqZWN0cyBub24tc3RyaW5nIGlucHV0cyAoRXhwcmVzcydzIHBhcnNlciBjYW4gcHJvZHVjZSBzdHJpbmdbXSBmb3JcbiAqIHJlcGVhdGVkIGtleXMpLCBpbnZhbGlkIElTTyB0aW1lc3RhbXBzLCBhbmQgaW52ZXJ0ZWQgcmFuZ2VzLlxuICpcbiAqIFJldHVybnMgZWl0aGVyIGB7IGZyb20sIHRvIH1gIElTTyBzdHJpbmdzIG9yIGB7IGVycm9yIH1gLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZSA9IHBhcnNlRGF0ZVJhbmdlKHJlcS5xdWVyeSk7XG4gKiBpZiAoJ2Vycm9yJyBpbiByYW5nZSkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmFuZ2UuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IHJvd3MgPSBhd2FpdCBzdmMubGlzdChyYW5nZS5mcm9tLCByYW5nZS50byk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGVSYW5nZShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IG1heFJhbmdlTXM/OiBudW1iZXI7IGRlZmF1bHREYXlzQmFjaz86IG51bWJlciB9ID0ge30sXG4pOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCB7IG1heFJhbmdlTXMsIGRlZmF1bHREYXlzQmFjayA9IDMwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHJhd0Zyb20gPSBxdWVyeS5mcm9tO1xuICBjb25zdCByYXdUbyA9IHF1ZXJ5LnRvO1xuXG4gIGlmIChyYXdGcm9tICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJhd0Zyb20gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG4gIGlmIChyYXdUbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdUbyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ1widG9cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZnJvbVN0ciA9IHJhd0Zyb20gPz8gbmV3IERhdGUobm93IC0gZGVmYXVsdERheXNCYWNrICogMjQgKiA2MCAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgdG9TdHIgPSByYXdUbyA/PyBuZXcgRGF0ZShub3cpLnRvSVNPU3RyaW5nKCk7XG5cbiAgY29uc3QgZnJvbU1zID0gRGF0ZS5wYXJzZShmcm9tU3RyKTtcbiAgY29uc3QgdG9NcyA9IERhdGUucGFyc2UodG9TdHIpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShmcm9tTXMpKSByZXR1cm4geyBlcnJvcjogJ1wiZnJvbVwiIGlzIG5vdCBhIHZhbGlkIElTTyB0aW1lc3RhbXAnIH07XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRvTXMpKSByZXR1cm4geyBlcnJvcjogJ1widG9cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoZnJvbU1zID4gdG9NcykgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGVhcmxpZXIgdGhhbiBcInRvXCInIH07XG4gIGlmIChtYXhSYW5nZU1zICE9PSB1bmRlZmluZWQgJiYgdG9NcyAtIGZyb21NcyA+IG1heFJhbmdlTXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYERhdGUgcmFuZ2UgZXhjZWVkcyBtYXhpbXVtIG9mICR7TWF0aC5mbG9vcihtYXhSYW5nZU1zIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKX0gZGF5c2AgfTtcbiAgfVxuXG4gIHJldHVybiB7IGZyb206IGZyb21TdHIsIHRvOiB0b1N0ciB9O1xufVxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFvQi9DOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE1BQWtDLEVBQ2xDLEdBQVc7SUFFWCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFZO0lBQ25DLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UsNkRBQTZEO0lBQzdELHlFQUF5RTtJQUN6RSw0REFBNEQ7SUFDNUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFV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QUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHFDQUFxQyxFQUFFLENBQUM7SUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO0lBQ2xGLElBQUksTUFBTSxHQUFHLElBQUk7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGtDQUFrQyxFQUFFLENBQUM7SUFDeEUsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxpQ0FBaUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuL2hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFNoYXBlIGNvbnZlbnRpb24gZm9yIHRoZSBpbmxpbmUgcGFyc2UtZ3VhcmQgaGVscGVycyBiZWxvdy5cbiAqXG4gKiBUaGVzZSByZXR1cm4gYSBsaWdodHdlaWdodCBgeyB2YWx1ZSB9IHwgeyBlcnJvciB9YCAobmFycm93ZWQgd2l0aFxuICogYCdlcnJvcicgaW4gcmVzdWx0YCkg4oCUIGRlbGliZXJhdGVseSBESVNUSU5DVCBmcm9tIHRoZSBzY2hlbWEtdmFsaWRhdGlvblxuICogYFZhbGlkYXRpb25SZXN1bHQ8VD5gIChgeyBvaywgdmFsdWUgfSB8IHsgb2ssIGVycm9yIH1gKSBpblxuICogYHZhbGlkYXRpb24vbWlkZGxld2FyZS50c2AuIFpvZCBzY2hlbWEgcGFyc2luZyB1c2VzIHRoZSBgb2tgLWRpc2NyaW1pbmF0ZWRcbiAqIHNoYXBlOyB0aGVzZSBhZC1ob2MgcmVxdWVzdC1wYXJhbWV0ZXIgZ3VhcmRzIHVzZSBgJ2Vycm9yJyBpbmAuIFRoZSBzcGxpdCBpc1xuICogaW50ZW50aW9uYWwgYW5kIGRvY3VtZW50ZWQgKHNlZSB0aGUgbm90ZSBvbiBgVmFsaWRhdGlvblJlc3VsdGApOiBjb252ZXJnaW5nXG4gKiB0aGVtIHdvdWxkIGNodXJuIGV2ZXJ5IGAnZXJyb3InIGluIHJlc3VsdGAgY2FsbCBzaXRlIGFjcm9zcyB0aGUgZG93bnN0cmVhbVxuICogc2VydmljZXMgd2l0aCBubyBiZWhhdmlvdXJhbCBjaGFuZ2UsIHNvIGl0J3MgbGVmdCBhcyBhIGRvY3VtZW50ZWQgY29udmVudGlvbi5cbiAqL1xuXG4vKipcbiAqIEV4cHJlc3MgNSBwYXJhbWV0ZXIgdHlwZS5cbiAqL1xudHlwZSBQYXJhbVZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRXh0cmFjdCBhIHNpbmdsZSBzdHJpbmcgcGFyYW1ldGVyIGZyb20gRXhwcmVzcyA1IHJvdXRlIHBhcmFtcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUmVxdWVzdCBwYXJhbXMgb2JqZWN0XG4gKiBAcGFyYW0ga2V5IC0gUGFyYW1ldGVyIGtleVxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhIHN0cmluZywgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFJvdXRlOiBHRVQgL3BsdWdpbnMvOmlkXG4gKiBjb25zdCBpZCA9IGdldFBhcmFtKHJlcS5wYXJhbXMsICdpZCcpO1xuICogaWYgKCFpZCkge1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNDAwLCAnTWlzc2luZyBpZCBwYXJhbWV0ZXInKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW0oXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgUGFyYW1WYWx1ZT4sXG4gIGtleTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JnYW5pemF0aW9uIElEIGZyb20gcmVxdWVzdC5cbiAqIENoZWNrcyBwYXJhbXMsIGhlYWRlcnMsIGFuZCB1c2VyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gRXhwcmVzcyByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgT3JnYW5pemF0aW9uIElEIG9yIHVuZGVmaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvcmdJZCA9IGdldE9yZ0lkKHJlcSk7XG4gKiBpZiAoIW9yZ0lkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdPcmdhbml6YXRpb24gSUQgcmVxdWlyZWQnKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JnSWQocmVxOiBSZXF1ZXN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gUHJlZmVyIHRoZSBWRVJJRklFRCBKV1QgaWRlbnRpdHkgZmlyc3QuIEEgc3Bvb2ZhYmxlIGB4LW9yZy1pZGAgaGVhZGVyIG11c3RcbiAgLy8gbmV2ZXIgb3ZlcnJpZGUgYW4gYXV0aGVudGljYXRlZCB1c2VyJ3Mgb3JnIChjcm9zcy10ZW5hbnQgZm9vdGd1bikuIEZvciBhXG4gIC8vIHN1cGVyYWRtaW4gYWN0aW5nIGNyb3NzLW9yZywgcmVxdWlyZUF1dGggYWxyZWFkeSByZS1wb2ludHNcbiAgLy8gYHJlcS51c2VyLm9yZ2FuaXphdGlvbklkYCB0byB0aGUgY2hvc2VuIG9yZyB2aWEgdGhlIGlzU3VwZXJBZG1pbi1nYXRlZFxuICAvLyBoZWFkZXIgb3ZlcnJpZGUsIHNvIHRoaXMgc3RpbGwgeWllbGRzIHRoZSBpbnRlbmRlZCBzY29wZS5cbiAgY29uc3QgdXNlck9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkPy50cmltKCk7XG4gIGlmICh1c2VyT3JnSWQpIHtcbiAgICByZXR1cm4gdXNlck9yZ0lkO1xuICB9XG5cbiAgLy8gUHJlLWF1dGggZmFsbGJhY2tzIG9ubHkgKHJlcS51c2VyIHVuc2V0KTogcm91dGUgcGFyYW0sIHRoZW4gaGVhZGVyLlxuICBjb25zdCBwYXJhbU9yZ0lkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ29yZ0lkJyk7XG4gIGlmIChwYXJhbU9yZ0lkKSB7XG4gICAgcmV0dXJuIHBhcmFtT3JnSWQ7XG4gIH1cblxuICBjb25zdCBoZWFkZXJPcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk/LnRyaW0oKTtcbiAgaWYgKGhlYWRlck9yZ0lkKSB7XG4gICAgcmV0dXJuIGhlYWRlck9yZ0lkO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFF1ZXJ5IHBhcmFtZXRlciB2YWx1ZVxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcGFyc2luZyBmYWlsc1xuICogQHJldHVybnMgUGFyc2VkIGludGVnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5saW1pdCwgMTApO1xuICogY29uc3Qgb2Zmc2V0ID0gcGFyc2VRdWVyeUludChyZXEucXVlcnkub2Zmc2V0LCAwKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludCh2YWx1ZTogdW5rbm93biwgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSksIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcmV0dXJucyBTdHJpbmcgdmFsdWUgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlYXJjaCA9IHBhcnNlUXVlcnlTdHJpbmcocmVxLnF1ZXJ5LnNlYXJjaCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHRvIGEgcG9zaXRpdmUgaW50ZWdlciwgcmV0dXJuaW5nIGEgZmFsbGJhY2sgaWYgaW52YWxpZC5cbiAqIFVzZWZ1bCBmb3IgcGFyc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBudW1lcmljIGRlZmF1bHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQb3NpdGl2ZUludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID4gMCA/IHBhcnNlZCA6IGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgaW50LCB0aGVuIGNsYW1wIHRvIGBbMSwgbWF4XWAuIFJldHVybnMgYGRlZmF1bHRWYWx1ZWAgKGFmdGVyXG4gKiB0aGUgc2FtZSBjbGFtcCkgd2hlbiB0aGUgaW5wdXQgaXMgbWlzc2luZy9pbnZhbGlkLiBVc2UgZm9yIGBsaW1pdGAtc3R5bGVcbiAqIHF1ZXJ5IHBhcmFtZXRlcnMgd2hlcmUgYW4gdW5ib3VuZGVkIHZhbHVlIHdvdWxkIGNvc3QgcmVhbCBtb25leS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50Q2xhbXBlZChyZXEucXVlcnkubGltaXQsIDUwLCAxMDAwKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlJbnRDbGFtcGVkKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZGVmYXVsdFZhbHVlOiBudW1iZXIsXG4gIG1heDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcGFyc2VRdWVyeUludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGgubWluKHJhdywgbWF4KSk7XG59XG5cbi8qKlxuICogQnVsay1hcnJheSByZXF1ZXN0IGd1YXJkLiBWYWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LCBub24tZW1wdHksXG4gKiBhbmQgd2l0aGluIHRoZSBjb25maWd1cmVkIGNhcC4gUmV0dXJucyB0aGUgdHlwZWQgYXJyYXkgb3IgYW4gZXJyb3Igb2JqZWN0XG4gKiB0aGUgY2FsbGVyIGNhbiBmb3J3YXJkIHRvIGBzZW5kRXJyb3JgL2BzZW5kQmFkUmVxdWVzdGAuXG4gKlxuICogUmVwbGFjZXMgYSBoYW5kLXJvbGxlZCBgaWYgKCFBcnJheS5pc0FycmF5KC4uLikpIHsgLi4uIH1gICsgbGVuZ3RoIGNoZWNrXG4gKiBibG9jayB0aGF0IHdhcyBkdXBsaWNhdGVkIGFjcm9zcyBidWxrIGVuZHBvaW50cyBpbiBwaXBlbGluZSwgcGx1Z2luLFxuICogY29tcGxpYW5jZSwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUJ1bGtBcnJheShyZXEuYm9keS5pZHMsICdpZHMnKTtcbiAqIGlmICgnZXJyb3InIGluIHJlc3VsdCkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCBpZHMgPSByZXN1bHQudmFsdWU7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJ1bGtBcnJheTxUID0gdW5rbm93bj4oXG4gIHZhbHVlOiB1bmtub3duLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgbWF4SXRlbXM/OiBudW1iZXIsXG4pOiB7IHZhbHVlOiBUW10gfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBlcnJvcjogYFJlcXVlc3QgYm9keSBtdXN0IGluY2x1ZGUgYSBub24tZW1wdHkgXCIke2ZpZWxkTmFtZX1cIiBhcnJheWAgfTtcbiAgfVxuICAvLyBDb3JlQ29uc3RhbnRzLk1BWF9CVUxLX0lURU1TIGlzbid0IGltcG9ydGVkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhclxuICAvLyBwYXRoIHRocm91Z2ggY29uc3RhbnRzL2luZGV4OyBjYWxsZXJzIHBhc3MgaXQgZXhwbGljaXRseSBvciBvbWl0IGZvclxuICAvLyBubyB1cHBlciBib3VuZC5cbiAgaWYgKG1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gbWF4SXRlbXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYE1heGltdW0gJHttYXhJdGVtc30gaXRlbXMgcGVyIGJ1bGsgb3BlcmF0aW9uYCB9O1xuICB9XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSBhcyBUW10gfTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgaW50ZXJ2YWxzIGZvciB0aW1lLWJ1Y2tldGVkIHJlcG9ydCBxdWVyaWVzLiBVc2VkIGFzIHRoZVxuICogYERBVEVfVFJVTkNgIGZpcnN0IGFyZ3VtZW50IGluIFBvc3RncmVzOyByZXN0cmljdGVkIHRvIGEgZml4ZWQgZW51bSBzb1xuICogdGhlIHZhbHVlIGNhbiBuZXZlciBiZSBpbmplY3RlZCBpbnRvIHJhdyBTUUwuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVBPUlRfSU5URVJWQUxTID0gWydkYXknLCAnd2VlaycsICdtb250aCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVwb3J0SW50ZXJ2YWwgPSAodHlwZW9mIFJFUE9SVF9JTlRFUlZBTFMpW251bWJlcl07XG5cbi8qKlxuICogUGFyc2UgKyB2YWxpZGF0ZSBhIGA/aW50ZXJ2YWw9YCByZXBvcnQgYnVja2V0IChkZWZhdWx0cyB0byAnd2VlaycpLiBSZXR1cm5zIHRoZVxuICogdmFsaWRhdGVkIGludGVydmFsIG9yIGB7IGVycm9yIH1gLiBTaGFyZWQgYnkgdGhlIHRpbWVzZXJpZXMgcmVwb3J0IHJvdXRlcyBzbyB0aGVcbiAqIGRlZmF1bHQgKyBhbGxvdy1saXN0ICsgZXJyb3IgbWVzc2FnZSBsaXZlIGluIG9uZSBwbGFjZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgaW50ZXJ2YWwgPSBwYXJzZVJlcG9ydEludGVydmFsKHJlcS5xdWVyeSk7XG4gKiBpZiAodHlwZW9mIGludGVydmFsID09PSAnb2JqZWN0JykgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgaW50ZXJ2YWwuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVwb3J0SW50ZXJ2YWwocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVwb3J0SW50ZXJ2YWwgfCB7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IGludGVydmFsID0gU3RyaW5nKHF1ZXJ5LmludGVydmFsID8/ICd3ZWVrJyk7XG4gIGlmICghUkVQT1JUX0lOVEVSVkFMUy5pbmNsdWRlcyhpbnRlcnZhbCBhcyBSZXBvcnRJbnRlcnZhbCkpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYGludGVydmFsIG11c3QgYmUgb25lIG9mOiAke1JFUE9SVF9JTlRFUlZBTFMuam9pbignLCAnKX1gIH07XG4gIH1cbiAgcmV0dXJuIGludGVydmFsIGFzIFJlcG9ydEludGVydmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgYD9mcm9tPSZ0bz1gIGRhdGUgcmFuZ2Ugd2l0aCBkZWZhdWx0cyBvZiBcIjMwIGRheXMgYWdvIOKGkiBub3dcIi5cbiAqIFJlamVjdHMgbm9uLXN0cmluZyBpbnB1dHMgKEV4cHJlc3MncyBwYXJzZXIgY2FuIHByb2R1Y2Ugc3RyaW5nW10gZm9yXG4gKiByZXBlYXRlZCBrZXlzKSwgaW52YWxpZCBJU08gdGltZXN0YW1wcywgYW5kIGludmVydGVkIHJhbmdlcy5cbiAqXG4gKiBSZXR1cm5zIGVpdGhlciBgeyBmcm9tLCB0byB9YCBJU08gc3RyaW5ncyBvciBgeyBlcnJvciB9YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmFuZ2UgPSBwYXJzZURhdGVSYW5nZShyZXEucXVlcnkpO1xuICogaWYgKCdlcnJvcicgaW4gcmFuZ2UpIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsIHJhbmdlLmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCByb3dzID0gYXdhaXQgc3ZjLmxpc3QocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlUmFuZ2UoXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBtYXhSYW5nZU1zPzogbnVtYmVyOyBkZWZhdWx0RGF5c0JhY2s/OiBudW1iZXIgfSA9IHt9LFxuKTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgeyBtYXhSYW5nZU1zLCBkZWZhdWx0RGF5c0JhY2sgPSAzMCB9ID0gb3B0aW9ucztcblxuICBjb25zdCByYXdGcm9tID0gcXVlcnkuZnJvbTtcbiAgY29uc3QgcmF3VG8gPSBxdWVyeS50bztcblxuICBpZiAocmF3RnJvbSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdGcm9tICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuICBpZiAocmF3VG8gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmF3VG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZyb21TdHIgPSByYXdGcm9tID8/IG5ldyBEYXRlKG5vdyAtIGRlZmF1bHREYXlzQmFjayAqIDI0ICogNjAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHRvU3RyID0gcmF3VG8gPz8gbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpO1xuXG4gIGNvbnN0IGZyb21NcyA9IERhdGUucGFyc2UoZnJvbVN0cik7XG4gIGNvbnN0IHRvTXMgPSBEYXRlLnBhcnNlKHRvU3RyKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZnJvbU1zKSkgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b01zKSkgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgaXMgbm90IGEgdmFsaWQgSVNPIHRpbWVzdGFtcCcgfTtcbiAgaWYgKGZyb21NcyA+IHRvTXMpIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBlYXJsaWVyIHRoYW4gXCJ0b1wiJyB9O1xuICBpZiAobWF4UmFuZ2VNcyAhPT0gdW5kZWZpbmVkICYmIHRvTXMgLSBmcm9tTXMgPiBtYXhSYW5nZU1zKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBEYXRlIHJhbmdlIGV4Y2VlZHMgbWF4aW11bSBvZiAke01hdGguZmxvb3IobWF4UmFuZ2VNcyAvICgyNCAqIDYwICogNjAgKiAxMDAwKSl9IGRheXNgIH07XG4gIH1cblxuICByZXR1cm4geyBmcm9tOiBmcm9tU3RyLCB0bzogdG9TdHIgfTtcbn1cbiJdfQ==
@@ -8,6 +8,62 @@ export declare const AccessModifierSchema: z.ZodEnum<{
8
8
  private: "private";
9
9
  public: "public";
10
10
  }>;
11
+ /**
12
+ * Developer-portal catalog-metadata schemas — shared by pipeline and plugin
13
+ * create/update bodies (and the filter schema below). Mirror the shared types
14
+ * in `types/catalog-metadata.ts`.
15
+ */
16
+ export declare const LifecycleSchema: z.ZodEnum<{
17
+ deprecated: "deprecated";
18
+ experimental: "experimental";
19
+ production: "production";
20
+ }>;
21
+ export declare const CriticalitySchema: z.ZodEnum<{
22
+ critical: "critical";
23
+ high: "high";
24
+ low: "low";
25
+ medium: "medium";
26
+ }>;
27
+ export declare const OwnerTypeSchema: z.ZodEnum<{
28
+ team: "team";
29
+ user: "user";
30
+ }>;
31
+ export declare const EntityLinkSchema: z.ZodObject<{
32
+ title: z.ZodString;
33
+ url: z.ZodString;
34
+ icon: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>;
36
+ /** Typed classification labels: `{ team: 'payments', tier: 'gold' }`. */
37
+ export declare const EntityLabelsSchema: z.ZodRecord<z.ZodString, z.ZodString>;
38
+ /**
39
+ * Catalog-metadata fields common to catalog entities. Spread into create/update
40
+ * body schemas so pipelines and plugins accept identical ownership/lifecycle/
41
+ * classification input. All optional — owner defaults to the creator server-side.
42
+ */
43
+ export declare const CatalogMetadataShape: {
44
+ readonly ownerId: z.ZodOptional<z.ZodString>;
45
+ readonly ownerType: z.ZodOptional<z.ZodEnum<{
46
+ team: "team";
47
+ user: "user";
48
+ }>>;
49
+ readonly lifecycle: z.ZodOptional<z.ZodEnum<{
50
+ deprecated: "deprecated";
51
+ experimental: "experimental";
52
+ production: "production";
53
+ }>>;
54
+ readonly criticality: z.ZodOptional<z.ZodEnum<{
55
+ critical: "critical";
56
+ high: "high";
57
+ low: "low";
58
+ medium: "medium";
59
+ }>>;
60
+ readonly labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
61
+ readonly links: z.ZodOptional<z.ZodArray<z.ZodObject<{
62
+ title: z.ZodString;
63
+ url: z.ZodString;
64
+ icon: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strip>>>;
66
+ };
11
67
  /**
12
68
  * Sort order schema
13
69
  */
@@ -61,4 +117,10 @@ export declare const BaseFilterSchema: z.ZodObject<{
61
117
  false: "false";
62
118
  true: "true";
63
119
  }>, z.ZodTransform<boolean, "false" | "true">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
120
+ ownerId: z.ZodOptional<z.ZodString>;
121
+ lifecycle: z.ZodOptional<z.ZodEnum<{
122
+ deprecated: "deprecated";
123
+ experimental: "experimental";
124
+ production: "production";
125
+ }>>;
64
126
  }, z.core.$strip>;
@@ -8,6 +8,34 @@ import { z } from 'zod';
8
8
  * Defines visibility of resources (public or private)
9
9
  */
10
10
  export const AccessModifierSchema = z.enum(['public', 'private']);
11
+ /**
12
+ * Developer-portal catalog-metadata schemas — shared by pipeline and plugin
13
+ * create/update bodies (and the filter schema below). Mirror the shared types
14
+ * in `types/catalog-metadata.ts`.
15
+ */
16
+ export const LifecycleSchema = z.enum(['experimental', 'production', 'deprecated']);
17
+ export const CriticalitySchema = z.enum(['low', 'medium', 'high', 'critical']);
18
+ export const OwnerTypeSchema = z.enum(['user', 'team']);
19
+ export const EntityLinkSchema = z.object({
20
+ title: z.string().min(1).max(120),
21
+ url: z.string().url().max(2048),
22
+ icon: z.string().max(40).optional(),
23
+ });
24
+ /** Typed classification labels: `{ team: 'payments', tier: 'gold' }`. */
25
+ export const EntityLabelsSchema = z.record(z.string().min(1).max(63), z.string().max(255));
26
+ /**
27
+ * Catalog-metadata fields common to catalog entities. Spread into create/update
28
+ * body schemas so pipelines and plugins accept identical ownership/lifecycle/
29
+ * classification input. All optional — owner defaults to the creator server-side.
30
+ */
31
+ export const CatalogMetadataShape = {
32
+ ownerId: z.string().min(1).max(255).optional(),
33
+ ownerType: OwnerTypeSchema.optional(),
34
+ lifecycle: LifecycleSchema.optional(),
35
+ criticality: CriticalitySchema.optional(),
36
+ labels: EntityLabelsSchema.optional(),
37
+ links: z.array(EntityLinkSchema).max(50).optional(),
38
+ };
11
39
  /**
12
40
  * Sort order schema
13
41
  */
@@ -51,5 +79,9 @@ export const BaseFilterSchema = z.object({
51
79
  accessModifier: AccessModifierSchema.optional(),
52
80
  isActive: BooleanQuerySchema.optional(),
53
81
  isDefault: BooleanQuerySchema.optional(),
82
+ // Developer-portal catalog filters (applied only by entities that carry
83
+ // owner/lifecycle columns — pipelines and plugins).
84
+ ownerId: z.string().min(1).optional(),
85
+ lifecycle: LifecycleSchema.optional(),
54
86
  });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLDJFQUEyRTtBQUMzRSxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRWxFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUV2RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWpGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDcEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNqRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixTQUFTLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUM7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQztJQUMxRCxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQztDQUM1QyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3hDLE9BQU8sRUFBRSxxQkFBcUI7Q0FDL0IsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtJQUNoRSxPQUFPLEVBQUUsNEJBQTRCO0NBQ3RDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDM0UsY0FBYyxFQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFBRTtJQUMvQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7Q0FDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8vIE11c3QgcnVuIGJlZm9yZSBhbnkgei4qIHNjaGVtYSBjcmVhdGlvbiDigJQgWm9kIDQgcmVxdWlyZXMgZWFnZXIgZXh0ZW5zaW9uXG5pbXBvcnQgJy4uL29wZW5hcGkvZXh0ZW5kLXpvZC5qcyc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuLyoqXG4gKiBBY2Nlc3MgbW9kaWZpZXIgc2NoZW1hXG4gKiBEZWZpbmVzIHZpc2liaWxpdHkgb2YgcmVzb3VyY2VzIChwdWJsaWMgb3IgcHJpdmF0ZSlcbiAqL1xuZXhwb3J0IGNvbnN0IEFjY2Vzc01vZGlmaWVyU2NoZW1hID0gei5lbnVtKFsncHVibGljJywgJ3ByaXZhdGUnXSk7XG5cbi8qKlxuICogU29ydCBvcmRlciBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFNvcnRPcmRlclNjaGVtYSA9IHouZW51bShbJ2FzYycsICdkZXNjJ10pO1xuXG4vKipcbiAqIFBhZ2luYXRpb24gcGFyYW1ldGVycyBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9QQUdFX0xJTUlUID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX1BBR0VfTElNSVQgfHwgJzEwMDAnLCAxMCk7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBsaW1pdDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEpLm1heChNQVhfUEFHRV9MSU1JVCkub3B0aW9uYWwoKSxcbiAgb2Zmc2V0OiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMCkub3B0aW9uYWwoKSxcbiAgc29ydEJ5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHNvcnRPcmRlcjogU29ydE9yZGVyU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBCb29sZWFuIHF1ZXJ5IHBhcmFtZXRlciBzY2hlbWFcbiAqIEhhbmRsZXMgc3RyaW5nIFwidHJ1ZVwiL1wiZmFsc2VcIiBhbmQgYm9vbGVhbiB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEJvb2xlYW5RdWVyeVNjaGVtYSA9IHoudW5pb24oW1xuICB6LmJvb2xlYW4oKSxcbiAgei5lbnVtKFsndHJ1ZScsICdmYWxzZSddKS50cmFuc2Zvcm0odmFsID0+IHZhbCA9PT0gJ3RydWUnKSxcbiAgei5zdHJpbmcoKS50cmFuc2Zvcm0odmFsID0+IHZhbCA9PT0gJ3RydWUnKSxcbl0pO1xuXG4vKipcbiAqIFVVSUQgc2NoZW1hIHdpdGggdmFsaWRhdGlvblxuICovXG5leHBvcnQgY29uc3QgVVVJRFNjaGVtYSA9IHouc3RyaW5nKCkudXVpZCh7XG4gIG1lc3NhZ2U6ICdJbnZhbGlkIFVVSUQgZm9ybWF0Jyxcbn0pO1xuXG4vKipcbiAqIE9wdGlvbmFsIFVVSUQgc2NoZW1hIChmb3IgcGFydGlhbCBVVUlEcyBvciBwcmVmaXhlcylcbiAqL1xuZXhwb3J0IGNvbnN0IFVVSURQcmVmaXhTY2hlbWEgPSB6LnN0cmluZygpLnJlZ2V4KC9eWzAtOWEtZi1dKyQvaSwge1xuICBtZXNzYWdlOiAnSW52YWxpZCBVVUlEIHByZWZpeCBmb3JtYXQnLFxufSk7XG5cbi8qKlxuICogQmFzZSBmaWx0ZXIgc2NoZW1hIGZvciBlbnRpdGllcyB3aXRoIGNvbW1vbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IEJhc2VGaWx0ZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnVuaW9uKFtVVUlEU2NoZW1hLCB6LmFycmF5KFVVSURTY2hlbWEpLCBVVUlEUHJlZml4U2NoZW1hXSkub3B0aW9uYWwoKSxcbiAgYWNjZXNzTW9kaWZpZXI6IEFjY2Vzc01vZGlmaWVyU2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLDJFQUEyRTtBQUMzRSxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRWxFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNwRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMvRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENB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LENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzNFLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7SUFDL0MsUUFBUSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN2QyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3hDLHdFQUF3RTtJQUN4RSxvREFBb0Q7SUFDcEQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFNBQVMsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFO0NBQ3RDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vLyBNdXN0IHJ1biBiZWZvcmUgYW55IHouKiBzY2hlbWEgY3JlYXRpb24g4oCUIFpvZCA0IHJlcXVpcmVzIGVhZ2VyIGV4dGVuc2lvblxuaW1wb3J0ICcuLi9vcGVuYXBpL2V4dGVuZC16b2QuanMnO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbi8qKlxuICogQWNjZXNzIG1vZGlmaWVyIHNjaGVtYVxuICogRGVmaW5lcyB2aXNpYmlsaXR5IG9mIHJlc291cmNlcyAocHVibGljIG9yIHByaXZhdGUpXG4gKi9cbmV4cG9ydCBjb25zdCBBY2Nlc3NNb2RpZmllclNjaGVtYSA9IHouZW51bShbJ3B1YmxpYycsICdwcml2YXRlJ10pO1xuXG4vKipcbiAqIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZy1tZXRhZGF0YSBzY2hlbWFzIOKAlCBzaGFyZWQgYnkgcGlwZWxpbmUgYW5kIHBsdWdpblxuICogY3JlYXRlL3VwZGF0ZSBib2RpZXMgKGFuZCB0aGUgZmlsdGVyIHNjaGVtYSBiZWxvdykuIE1pcnJvciB0aGUgc2hhcmVkIHR5cGVzXG4gKiBpbiBgdHlwZXMvY2F0YWxvZy1tZXRhZGF0YS50c2AuXG4gKi9cbmV4cG9ydCBjb25zdCBMaWZlY3ljbGVTY2hlbWEgPSB6LmVudW0oWydleHBlcmltZW50YWwnLCAncHJvZHVjdGlvbicsICdkZXByZWNhdGVkJ10pO1xuZXhwb3J0IGNvbnN0IENyaXRpY2FsaXR5U2NoZW1hID0gei5lbnVtKFsnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ2NyaXRpY2FsJ10pO1xuZXhwb3J0IGNvbnN0IE93bmVyVHlwZVNjaGVtYSA9IHouZW51bShbJ3VzZXInLCAndGVhbSddKTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eUxpbmtTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLm1pbigxKS5tYXgoMTIwKSxcbiAgdXJsOiB6LnN0cmluZygpLnVybCgpLm1heCgyMDQ4KSxcbiAgaWNvbjogei5zdHJpbmcoKS5tYXgoNDApLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIFR5cGVkIGNsYXNzaWZpY2F0aW9uIGxhYmVsczogYHsgdGVhbTogJ3BheW1lbnRzJywgdGllcjogJ2dvbGQnIH1gLiAqL1xuZXhwb3J0IGNvbnN0IEVudGl0eUxhYmVsc1NjaGVtYSA9IHoucmVjb3JkKHouc3RyaW5nKCkubWluKDEpLm1heCg2MyksIHouc3RyaW5nKCkubWF4KDI1NSkpO1xuXG4vKipcbiAqIENhdGFsb2ctbWV0YWRhdGEgZmllbGRzIGNvbW1vbiB0byBjYXRhbG9nIGVudGl0aWVzLiBTcHJlYWQgaW50byBjcmVhdGUvdXBkYXRlXG4gKiBib2R5IHNjaGVtYXMgc28gcGlwZWxpbmVzIGFuZCBwbHVnaW5zIGFjY2VwdCBpZGVudGljYWwgb3duZXJzaGlwL2xpZmVjeWNsZS9cbiAqIGNsYXNzaWZpY2F0aW9uIGlucHV0LiBBbGwgb3B0aW9uYWwg4oCUIG93bmVyIGRlZmF1bHRzIHRvIHRoZSBjcmVhdG9yIHNlcnZlci1zaWRlLlxuICovXG5leHBvcnQgY29uc3QgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgPSB7XG4gIG93bmVySWQ6IHouc3RyaW5nKCkubWluKDEpLm1heCgyNTUpLm9wdGlvbmFsKCksXG4gIG93bmVyVHlwZTogT3duZXJUeXBlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGxpZmVjeWNsZTogTGlmZWN5Y2xlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGNyaXRpY2FsaXR5OiBDcml0aWNhbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxuICBsYWJlbHM6IEVudGl0eUxhYmVsc1NjaGVtYS5vcHRpb25hbCgpLFxuICBsaW5rczogei5hcnJheShFbnRpdHlMaW5rU2NoZW1hKS5tYXgoNTApLm9wdGlvbmFsKCksXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFNvcnQgb3JkZXIgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBTb3J0T3JkZXJTY2hlbWEgPSB6LmVudW0oWydhc2MnLCAnZGVzYyddKTtcblxuLyoqXG4gKiBQYWdpbmF0aW9uIHBhcmFtZXRlcnMgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfUEFHRV9MSU1JVCA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk1BWF9QQUdFX0xJTUlUIHx8ICcxMDAwJywgMTApO1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbGltaXQ6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoTUFYX1BBR0VfTElNSVQpLm9wdGlvbmFsKCksXG4gIG9mZnNldDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDApLm9wdGlvbmFsKCksXG4gIHNvcnRCeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzb3J0T3JkZXI6IFNvcnRPcmRlclNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogQm9vbGVhbiBxdWVyeSBwYXJhbWV0ZXIgc2NoZW1hXG4gKiBIYW5kbGVzIHN0cmluZyBcInRydWVcIi9cImZhbHNlXCIgYW5kIGJvb2xlYW4gdmFsdWVzXG4gKi9cbmV4cG9ydCBjb25zdCBCb29sZWFuUXVlcnlTY2hlbWEgPSB6LnVuaW9uKFtcbiAgei5ib29sZWFuKCksXG4gIHouZW51bShbJ3RydWUnLCAnZmFsc2UnXSkudHJhbnNmb3JtKHZhbCA9PiB2YWwgPT09ICd0cnVlJyksXG4gIHouc3RyaW5nKCkudHJhbnNmb3JtKHZhbCA9PiB2YWwgPT09ICd0cnVlJyksXG5dKTtcblxuLyoqXG4gKiBVVUlEIHNjaGVtYSB3aXRoIHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IFVVSURTY2hlbWEgPSB6LnN0cmluZygpLnV1aWQoe1xuICBtZXNzYWdlOiAnSW52YWxpZCBVVUlEIGZvcm1hdCcsXG59KTtcblxuLyoqXG4gKiBPcHRpb25hbCBVVUlEIHNjaGVtYSAoZm9yIHBhcnRpYWwgVVVJRHMgb3IgcHJlZml4ZXMpXG4gKi9cbmV4cG9ydCBjb25zdCBVVUlEUHJlZml4U2NoZW1hID0gei5zdHJpbmcoKS5yZWdleCgvXlswLTlhLWYtXSskL2ksIHtcbiAgbWVzc2FnZTogJ0ludmFsaWQgVVVJRCBwcmVmaXggZm9ybWF0Jyxcbn0pO1xuXG4vKipcbiAqIEJhc2UgZmlsdGVyIHNjaGVtYSBmb3IgZW50aXRpZXMgd2l0aCBjb21tb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBCYXNlRmlsdGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei51bmlvbihbVVVJRFNjaGVtYSwgei5hcnJheShVVUlEU2NoZW1hKSwgVVVJRFByZWZpeFNjaGVtYV0pLm9wdGlvbmFsKCksXG4gIGFjY2Vzc01vZGlmaWVyOiBBY2Nlc3NNb2RpZmllclNjaGVtYS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogQm9vbGVhblF1ZXJ5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzRGVmYXVsdDogQm9vbGVhblF1ZXJ5U2NoZW1hLm9wdGlvbmFsKCksXG4gIC8vIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZyBmaWx0ZXJzIChhcHBsaWVkIG9ubHkgYnkgZW50aXRpZXMgdGhhdCBjYXJyeVxuICAvLyBvd25lci9saWZlY3ljbGUgY29sdW1ucyDigJQgcGlwZWxpbmVzIGFuZCBwbHVnaW5zKS5cbiAgb3duZXJJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgbGlmZWN5Y2xlOiBMaWZlY3ljbGVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuIl19
@@ -1,5 +1,6 @@
1
1
  export * from './common-schemas.js';
2
2
  export * from './pipeline-schemas.js';
3
+ export * from './pipeline-template-schemas.js';
3
4
  export * from './plugin-schemas.js';
4
5
  export * from './message-schemas.js';
5
6
  export * from './ai-schemas.js';
@@ -2,8 +2,9 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  export * from './common-schemas.js';
4
4
  export * from './pipeline-schemas.js';
5
+ export * from './pipeline-template-schemas.js';
5
6
  export * from './plugin-schemas.js';
6
7
  export * from './message-schemas.js';
7
8
  export * from './ai-schemas.js';
8
9
  export * from './middleware.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS1zY2hlbWFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9haS1zY2hlbWFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWlkZGxld2FyZS5qcyc7XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9jb21tb24tc2NoZW1hcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS10ZW1wbGF0ZS1zY2hlbWFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlLXNjaGVtYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9haS1zY2hlbWFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWlkZGxld2FyZS5qcyc7XG4iXX0=
@@ -48,6 +48,12 @@ export declare const MessageFilterSchema: z.ZodObject<{
48
48
  false: "false";
49
49
  true: "true";
50
50
  }>, z.ZodTransform<boolean, "false" | "true">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
51
+ ownerId: z.ZodOptional<z.ZodString>;
52
+ lifecycle: z.ZodOptional<z.ZodEnum<{
53
+ deprecated: "deprecated";
54
+ experimental: "experimental";
55
+ production: "production";
56
+ }>>;
51
57
  threadId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"root">, z.ZodNull]>>;
52
58
  recipientOrgId: z.ZodOptional<z.ZodString>;
53
59
  messageType: z.ZodOptional<z.ZodEnum<{
@@ -1,7 +1,23 @@
1
1
  import type { Request } from 'express';
2
2
  import { ZodError, type ZodSchema } from 'zod';
3
3
  /**
4
- * Result type for validation operations
4
+ * Result type for validation operations.
5
+ *
6
+ * CANONICAL validation-result shape for the api-core public surface: a boolean-
7
+ * discriminated union (`if (!result.ok) …`). Use THIS for anything that parses
8
+ * against a Zod schema — `validate` / `validateBody` / `validateQuery`. The
9
+ * `ok` discriminant also carries the optional `zodError` for callers that want
10
+ * field-level detail.
11
+ *
12
+ * Note the deliberately-lighter sibling shape in `utils/params.ts`
13
+ * (`{ value } | { error }`, narrowed with `'error' in result`). That one is for
14
+ * simple inline request-parsing guards (`validateBulkArray`, `parseDateRange`,
15
+ * `parseReportInterval`) — NOT schema validation. The two are kept distinct on
16
+ * purpose: unifying `utils/params.ts` onto `{ ok }` would touch every
17
+ * `'error' in result` call site across the downstream services (pipeline,
18
+ * plugin, reporting, compliance, …) for no behavioural gain, so the convention
19
+ * is documented rather than force-migrated. Rule of thumb: Zod schema →
20
+ * `ValidationResult` (`ok`); ad-hoc parse guard → params.ts (`'error' in`).
5
21
  */
6
22
  export type ValidationResult<T> = {
7
23
  ok: true;
@@ -62,4 +62,4 @@ export function validateQuery(req, schema) {
62
62
  export function validateBody(req, schema) {
63
63
  return validate(req.body, schema);
64
64
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsUUFBUSxFQUFrQixNQUFNLEtBQUssQ0FBQztBQVMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLElBQWEsRUFDYixNQUFvQjtJQUVwQixJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFLENBQUM7WUFDOUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLE9BQU8sR0FBRyxVQUFVO2dCQUN4QixDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN2RCxDQUFDLENBQUMsbUJBQW1CLENBQUM7WUFDeEIsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUFZLEVBQUUsTUFBb0I7SUFDakUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBSSxHQUFZLEVBQUUsTUFBb0I7SUFDaEUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgWm9kRXJyb3IsIHR5cGUgWm9kU2NoZW1hIH0gZnJvbSAnem9kJztcblxuLyoqXG4gKiBSZXN1bHQgdHlwZSBmb3IgdmFsaWRhdGlvbiBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25SZXN1bHQ8VD4gPVxuICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZzsgem9kRXJyb3I/OiBab2RFcnJvciB9O1xuXG4vKipcbiAqIFZhbGlkYXRlIGFyYml0cmFyeSBkYXRhIGFnYWluc3QgYSBab2Qgc2NoZW1hLlxuICpcbiAqIFRoaXMgaXMgdGhlIGNvcmUgdmFsaWRhdGlvbiBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBFeHByZXNzLXNwZWNpZmljIGhlbHBlcnNcbiAqIChgdmFsaWRhdGVCb2R5YCwgYHZhbGlkYXRlUXVlcnlgKS4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGRpcmVjdGx5IHdoZW5cbiAqIHZhbGlkYXRpbmcgZGF0YSB0aGF0IGRvZXNuJ3QgY29tZSBmcm9tIGEgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBEYXRhIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2NoZW1hIC0gWm9kIHNjaGVtYSBmb3IgdmFsaWRhdGlvblxuICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHQgd2l0aCBwYXJzZWQgZGF0YSBvciBlcnJvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZShzb21lRGF0YSwgTXlTY2hlbWEpO1xuICogaWYgKCFyZXN1bHQub2spIHtcbiAqICAgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yKTtcbiAqIH1cbiAqIGNvbnN0IHBhcnNlZCA9IHJlc3VsdC52YWx1ZTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGU8VD4oXG4gIGRhdGE6IHVua25vd24sXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuKTogVmFsaWRhdGlvblJlc3VsdDxUPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBzY2hlbWEucGFyc2UoZGF0YSkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBab2RFcnJvcikge1xuICAgICAgY29uc3QgZmlyc3RJc3N1ZSA9IGVycm9yLmlzc3Vlc1swXTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmaXJzdElzc3VlXG4gICAgICAgID8gYCR7Zmlyc3RJc3N1ZS5wYXRoLmpvaW4oJy4nKX06ICR7Zmlyc3RJc3N1ZS5tZXNzYWdlfWBcbiAgICAgICAgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogbWVzc2FnZSwgem9kRXJyb3I6IGVycm9yIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdWYWxpZGF0aW9uIGZhaWxlZCcgfTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIHJlcXVlc3QgcXVlcnkgcGFyYW1ldGVycyB3aXRoIGEgWm9kIHNjaGVtYS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVyeShyZXEsIFBpcGVsaW5lRmlsdGVyU2NoZW1hKTtcbiAqIGlmICghcmVzdWx0Lm9rKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IpO1xuICogY29uc3QgZmlsdGVyID0gcmVzdWx0LnZhbHVlO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVF1ZXJ5PFQ+KHJlcTogUmVxdWVzdCwgc2NoZW1hOiBab2RTY2hlbWE8VD4pOiBWYWxpZGF0aW9uUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIHZhbGlkYXRlKHJlcS5xdWVyeSwgc2NoZW1hKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBhIFpvZCBzY2hlbWEuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQm9keShyZXEsIFBpcGVsaW5lQ3JlYXRlU2NoZW1hKTtcbiAqIGlmICghcmVzdWx0Lm9rKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IpO1xuICogY29uc3QgZGF0YSA9IHJlc3VsdC52YWx1ZTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCb2R5PFQ+KHJlcTogUmVxdWVzdCwgc2NoZW1hOiBab2RTY2hlbWE8VD4pOiBWYWxpZGF0aW9uUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIHZhbGlkYXRlKHJlcS5ib2R5LCBzY2hlbWEpO1xufVxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsUUFBUSxFQUFrQixNQUFNLEtBQUssQ0FBQztBQXlCL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixJQUFhLEVBQ2IsTUFBb0I7SUFFcEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVTtnQkFDeEIsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDdkQsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQ3hCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksR0FBWSxFQUFFLE1BQW9CO0lBQ2pFLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUksR0FBWSxFQUFFLE1BQW9CO0lBQ2hFLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFpvZEVycm9yLCB0eXBlIFpvZFNjaGVtYSB9IGZyb20gJ3pvZCc7XG5cbi8qKlxuICogUmVzdWx0IHR5cGUgZm9yIHZhbGlkYXRpb24gb3BlcmF0aW9ucy5cbiAqXG4gKiBDQU5PTklDQUwgdmFsaWRhdGlvbi1yZXN1bHQgc2hhcGUgZm9yIHRoZSBhcGktY29yZSBwdWJsaWMgc3VyZmFjZTogYSBib29sZWFuLVxuICogZGlzY3JpbWluYXRlZCB1bmlvbiAoYGlmICghcmVzdWx0Lm9rKSDigKZgKS4gVXNlIFRISVMgZm9yIGFueXRoaW5nIHRoYXQgcGFyc2VzXG4gKiBhZ2FpbnN0IGEgWm9kIHNjaGVtYSDigJQgYHZhbGlkYXRlYCAvIGB2YWxpZGF0ZUJvZHlgIC8gYHZhbGlkYXRlUXVlcnlgLiBUaGVcbiAqIGBva2AgZGlzY3JpbWluYW50IGFsc28gY2FycmllcyB0aGUgb3B0aW9uYWwgYHpvZEVycm9yYCBmb3IgY2FsbGVycyB0aGF0IHdhbnRcbiAqIGZpZWxkLWxldmVsIGRldGFpbC5cbiAqXG4gKiBOb3RlIHRoZSBkZWxpYmVyYXRlbHktbGlnaHRlciBzaWJsaW5nIHNoYXBlIGluIGB1dGlscy9wYXJhbXMudHNgXG4gKiAoYHsgdmFsdWUgfSB8IHsgZXJyb3IgfWAsIG5hcnJvd2VkIHdpdGggYCdlcnJvcicgaW4gcmVzdWx0YCkuIFRoYXQgb25lIGlzIGZvclxuICogc2ltcGxlIGlubGluZSByZXF1ZXN0LXBhcnNpbmcgZ3VhcmRzIChgdmFsaWRhdGVCdWxrQXJyYXlgLCBgcGFyc2VEYXRlUmFuZ2VgLFxuICogYHBhcnNlUmVwb3J0SW50ZXJ2YWxgKSDigJQgTk9UIHNjaGVtYSB2YWxpZGF0aW9uLiBUaGUgdHdvIGFyZSBrZXB0IGRpc3RpbmN0IG9uXG4gKiBwdXJwb3NlOiB1bmlmeWluZyBgdXRpbHMvcGFyYW1zLnRzYCBvbnRvIGB7IG9rIH1gIHdvdWxkIHRvdWNoIGV2ZXJ5XG4gKiBgJ2Vycm9yJyBpbiByZXN1bHRgIGNhbGwgc2l0ZSBhY3Jvc3MgdGhlIGRvd25zdHJlYW0gc2VydmljZXMgKHBpcGVsaW5lLFxuICogcGx1Z2luLCByZXBvcnRpbmcsIGNvbXBsaWFuY2UsIOKApikgZm9yIG5vIGJlaGF2aW91cmFsIGdhaW4sIHNvIHRoZSBjb252ZW50aW9uXG4gKiBpcyBkb2N1bWVudGVkIHJhdGhlciB0aGFuIGZvcmNlLW1pZ3JhdGVkLiBSdWxlIG9mIHRodW1iOiBab2Qgc2NoZW1hIOKGklxuICogYFZhbGlkYXRpb25SZXN1bHRgIChgb2tgKTsgYWQtaG9jIHBhcnNlIGd1YXJkIOKGkiBwYXJhbXMudHMgKGAnZXJyb3InIGluYCkuXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25SZXN1bHQ8VD4gPVxuICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZzsgem9kRXJyb3I/OiBab2RFcnJvciB9O1xuXG4vKipcbiAqIFZhbGlkYXRlIGFyYml0cmFyeSBkYXRhIGFnYWluc3QgYSBab2Qgc2NoZW1hLlxuICpcbiAqIFRoaXMgaXMgdGhlIGNvcmUgdmFsaWRhdGlvbiBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBFeHByZXNzLXNwZWNpZmljIGhlbHBlcnNcbiAqIChgdmFsaWRhdGVCb2R5YCwgYHZhbGlkYXRlUXVlcnlgKS4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGRpcmVjdGx5IHdoZW5cbiAqIHZhbGlkYXRpbmcgZGF0YSB0aGF0IGRvZXNuJ3QgY29tZSBmcm9tIGEgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBEYXRhIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2NoZW1hIC0gWm9kIHNjaGVtYSBmb3IgdmFsaWRhdGlvblxuICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHQgd2l0aCBwYXJzZWQgZGF0YSBvciBlcnJvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZShzb21lRGF0YSwgTXlTY2hlbWEpO1xuICogaWYgKCFyZXN1bHQub2spIHtcbiAqICAgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yKTtcbiAqIH1cbiAqIGNvbnN0IHBhcnNlZCA9IHJlc3VsdC52YWx1ZTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGU8VD4oXG4gIGRhdGE6IHVua25vd24sXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuKTogVmFsaWRhdGlvblJlc3VsdDxUPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBzY2hlbWEucGFyc2UoZGF0YSkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBab2RFcnJvcikge1xuICAgICAgY29uc3QgZmlyc3RJc3N1ZSA9IGVycm9yLmlzc3Vlc1swXTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmaXJzdElzc3VlXG4gICAgICAgID8gYCR7Zmlyc3RJc3N1ZS5wYXRoLmpvaW4oJy4nKX06ICR7Zmlyc3RJc3N1ZS5tZXNzYWdlfWBcbiAgICAgICAgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogbWVzc2FnZSwgem9kRXJyb3I6IGVycm9yIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdWYWxpZGF0aW9uIGZhaWxlZCcgfTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIHJlcXVlc3QgcXVlcnkgcGFyYW1ldGVycyB3aXRoIGEgWm9kIHNjaGVtYS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVyeShyZXEsIFBpcGVsaW5lRmlsdGVyU2NoZW1hKTtcbiAqIGlmICghcmVzdWx0Lm9rKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IpO1xuICogY29uc3QgZmlsdGVyID0gcmVzdWx0LnZhbHVlO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVF1ZXJ5PFQ+KHJlcTogUmVxdWVzdCwgc2NoZW1hOiBab2RTY2hlbWE8VD4pOiBWYWxpZGF0aW9uUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIHZhbGlkYXRlKHJlcS5xdWVyeSwgc2NoZW1hKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBhIFpvZCBzY2hlbWEuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQm9keShyZXEsIFBpcGVsaW5lQ3JlYXRlU2NoZW1hKTtcbiAqIGlmICghcmVzdWx0Lm9rKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IpO1xuICogY29uc3QgZGF0YSA9IHJlc3VsdC52YWx1ZTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCb2R5PFQ+KHJlcTogUmVxdWVzdCwgc2NoZW1hOiBab2RTY2hlbWE8VD4pOiBWYWxpZGF0aW9uUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIHZhbGlkYXRlKHJlcS5ib2R5LCBzY2hlbWEpO1xufVxuIl19