@pipeline-builder/api-server 3.4.70 → 3.4.72

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 (41) hide show
  1. package/README.md +66 -22
  2. package/lib/api/app-factory.d.ts +2 -2
  3. package/lib/api/app-factory.js +45 -84
  4. package/lib/api/check-quota.d.ts +1 -1
  5. package/lib/api/check-quota.js +8 -11
  6. package/lib/api/context-middleware.d.ts +2 -2
  7. package/lib/api/context-middleware.js +4 -7
  8. package/lib/api/etag-middleware.d.ts +1 -1
  9. package/lib/api/etag-middleware.js +4 -7
  10. package/lib/api/get-context.d.ts +1 -1
  11. package/lib/api/get-context.js +2 -5
  12. package/lib/api/health-checks.js +5 -9
  13. package/lib/api/idempotency-middleware.d.ts +1 -1
  14. package/lib/api/idempotency-middleware.js +11 -16
  15. package/lib/api/index.d.ts +16 -16
  16. package/lib/api/index.js +17 -33
  17. package/lib/api/metrics.d.ts +1 -1
  18. package/lib/api/metrics.js +17 -24
  19. package/lib/api/middleware-factory.d.ts +1 -1
  20. package/lib/api/middleware-factory.js +11 -15
  21. package/lib/api/middleware.js +2 -6
  22. package/lib/api/mongo-connect.js +4 -7
  23. package/lib/api/quota-helpers.d.ts +1 -1
  24. package/lib/api/quota-helpers.js +4 -7
  25. package/lib/api/request-types.d.ts +3 -3
  26. package/lib/api/request-types.js +8 -10
  27. package/lib/api/require-org-id.d.ts +1 -1
  28. package/lib/api/require-org-id.js +6 -9
  29. package/lib/api/route-wrapper.d.ts +1 -1
  30. package/lib/api/route-wrapper.js +12 -15
  31. package/lib/api/server.d.ts +2 -2
  32. package/lib/api/server.js +15 -17
  33. package/lib/api/tracing.js +18 -23
  34. package/lib/http/index.d.ts +1 -1
  35. package/lib/http/index.js +2 -18
  36. package/lib/http/sse-connection-manager.d.ts +1 -1
  37. package/lib/http/sse-connection-manager.js +8 -12
  38. package/lib/index.d.ts +2 -2
  39. package/lib/index.js +3 -19
  40. package/lib/otel-bootstrap.js +32 -19
  41. package/package.json +28 -20
@@ -1,15 +1,12 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.etagMiddleware = etagMiddleware;
6
- const crypto_1 = require("crypto");
3
+ import { createHash } from 'crypto';
7
4
  /**
8
5
  * Middleware that adds ETag support for conditional GET requests.
9
6
  * Generates a weak ETag from the response body hash.
10
7
  * Returns 304 Not Modified when the client's If-None-Match header matches.
11
8
  */
12
- function etagMiddleware() {
9
+ export function etagMiddleware() {
13
10
  return (req, res, next) => {
14
11
  // Only apply to GET requests
15
12
  if (req.method !== 'GET')
@@ -17,7 +14,7 @@ function etagMiddleware() {
17
14
  res.json = (body) => {
18
15
  // Serialize once, hash, and send — avoids double JSON.stringify
19
16
  const serialized = JSON.stringify(body);
20
- const hash = (0, crypto_1.createHash)('md5').update(serialized).digest('hex').slice(0, 16);
17
+ const hash = createHash('md5').update(serialized).digest('hex').slice(0, 16);
21
18
  const etag = `W/"${hash}"`;
22
19
  res.setHeader('ETag', etag);
23
20
  // Check If-None-Match header
@@ -34,4 +31,4 @@ function etagMiddleware() {
34
31
  next();
35
32
  };
36
33
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRhZy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9ldGFnLW1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBVXRDLHdDQTRCQztBQXBDRCxtQ0FBb0M7QUFHcEM7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWM7SUFDNUIsT0FBTyxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQ3pELDZCQUE2QjtRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSztZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFeEMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQzNCLGdFQUFnRTtZQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0UsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQztZQUUzQixHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUU1Qiw2QkFBNkI7WUFDN0IsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRCxJQUFJLFdBQVcsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUVELDBEQUEwRDtZQUMxRCxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUFFRixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5cbi8qKlxuICogTWlkZGxld2FyZSB0aGF0IGFkZHMgRVRhZyBzdXBwb3J0IGZvciBjb25kaXRpb25hbCBHRVQgcmVxdWVzdHMuXG4gKiBHZW5lcmF0ZXMgYSB3ZWFrIEVUYWcgZnJvbSB0aGUgcmVzcG9uc2UgYm9keSBoYXNoLlxuICogUmV0dXJucyAzMDQgTm90IE1vZGlmaWVkIHdoZW4gdGhlIGNsaWVudCdzIElmLU5vbmUtTWF0Y2ggaGVhZGVyIG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldGFnTWlkZGxld2FyZSgpIHtcbiAgcmV0dXJuIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIC8vIE9ubHkgYXBwbHkgdG8gR0VUIHJlcXVlc3RzXG4gICAgaWYgKHJlcS5tZXRob2QgIT09ICdHRVQnKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgcmVzLmpzb24gPSAoYm9keTogdW5rbm93bikgPT4ge1xuICAgICAgLy8gU2VyaWFsaXplIG9uY2UsIGhhc2gsIGFuZCBzZW5kIOKAlCBhdm9pZHMgZG91YmxlIEpTT04uc3RyaW5naWZ5XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHNlcmlhbGl6ZWQpLmRpZ2VzdCgnaGV4Jykuc2xpY2UoMCwgMTYpO1xuICAgICAgY29uc3QgZXRhZyA9IGBXL1wiJHtoYXNofVwiYDtcblxuICAgICAgcmVzLnNldEhlYWRlcignRVRhZycsIGV0YWcpO1xuXG4gICAgICAvLyBDaGVjayBJZi1Ob25lLU1hdGNoIGhlYWRlclxuICAgICAgY29uc3QgaWZOb25lTWF0Y2ggPSByZXEuaGVhZGVyc1snaWYtbm9uZS1tYXRjaCddO1xuICAgICAgaWYgKGlmTm9uZU1hdGNoICYmIGlmTm9uZU1hdGNoID09PSBldGFnKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoMzA0KS5lbmQoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cblxuICAgICAgLy8gU2VuZCBwcmUtc2VyaWFsaXplZCBib2R5IHRvIGF2b2lkIGRvdWJsZSBKU09OLnN0cmluZ2lmeVxuICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJlcy5lbmQoc2VyaWFsaXplZCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH07XG5cbiAgICBuZXh0KCk7XG4gIH07XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRhZy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9ldGFnLW1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBR3BDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLENBQUMsR0FBWSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFFLEVBQUU7UUFDekQsNkJBQTZCO1FBQzdCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUV4QyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDM0IsZ0VBQWdFO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDO1lBRTNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTVCLDZCQUE2QjtZQUM3QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2pELElBQUksV0FBVyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1lBRUQsMERBQTBEO1lBQzFELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDbEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztRQUVGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuXG4vKipcbiAqIE1pZGRsZXdhcmUgdGhhdCBhZGRzIEVUYWcgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgR0VUIHJlcXVlc3RzLlxuICogR2VuZXJhdGVzIGEgd2VhayBFVGFnIGZyb20gdGhlIHJlc3BvbnNlIGJvZHkgaGFzaC5cbiAqIFJldHVybnMgMzA0IE5vdCBNb2RpZmllZCB3aGVuIHRoZSBjbGllbnQncyBJZi1Ob25lLU1hdGNoIGhlYWRlciBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXRhZ01pZGRsZXdhcmUoKSB7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICAvLyBPbmx5IGFwcGx5IHRvIEdFVCByZXF1ZXN0c1xuICAgIGlmIChyZXEubWV0aG9kICE9PSAnR0VUJykgcmV0dXJuIG5leHQoKTtcblxuICAgIHJlcy5qc29uID0gKGJvZHk6IHVua25vd24pID0+IHtcbiAgICAgIC8vIFNlcmlhbGl6ZSBvbmNlLCBoYXNoLCBhbmQgc2VuZCDigJQgYXZvaWRzIGRvdWJsZSBKU09OLnN0cmluZ2lmeVxuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShzZXJpYWxpemVkKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDE2KTtcbiAgICAgIGNvbnN0IGV0YWcgPSBgVy9cIiR7aGFzaH1cImA7XG5cbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0VUYWcnLCBldGFnKTtcblxuICAgICAgLy8gQ2hlY2sgSWYtTm9uZS1NYXRjaCBoZWFkZXJcbiAgICAgIGNvbnN0IGlmTm9uZU1hdGNoID0gcmVxLmhlYWRlcnNbJ2lmLW5vbmUtbWF0Y2gnXTtcbiAgICAgIGlmIChpZk5vbmVNYXRjaCAmJiBpZk5vbmVNYXRjaCA9PT0gZXRhZykge1xuICAgICAgICByZXMuc3RhdHVzKDMwNCkuZW5kKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgcHJlLXNlcmlhbGl6ZWQgYm9keSB0byBhdm9pZCBkb3VibGUgSlNPTi5zdHJpbmdpZnlcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXMuZW5kKHNlcmlhbGl6ZWQpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuXG4gICAgbmV4dCgpO1xuICB9O1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import type { Request } from 'express';
2
- import type { RequestContext } from './request-types';
2
+ import type { RequestContext } from './request-types.js';
3
3
  /**
4
4
  * Safely retrieve the RequestContext from an Express request.
5
5
  *
@@ -1,8 +1,5 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.getContext = getContext;
6
3
  /**
7
4
  * Safely retrieve the RequestContext from an Express request.
8
5
  *
@@ -22,10 +19,10 @@ exports.getContext = getContext;
22
19
  * });
23
20
  * ```
24
21
  */
25
- function getContext(req) {
22
+ export function getContext(req) {
26
23
  if (!req.context) {
27
24
  throw new Error('Request context not initialized. Ensure attachRequestContext middleware is applied.');
28
25
  }
29
26
  return req.context;
30
27
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2dldC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOztBQXdCdEMsZ0NBT0M7QUExQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxHQUFZO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYixxRkFBcUYsQ0FDdEYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tICcuL3JlcXVlc3QtdHlwZXMnO1xuXG4vKipcbiAqIFNhZmVseSByZXRyaWV2ZSB0aGUgUmVxdWVzdENvbnRleHQgZnJvbSBhbiBFeHByZXNzIHJlcXVlc3QuXG4gKlxuICogVGhyb3dzIGEgZGVzY3JpcHRpdmUgZXJyb3IgaWYgdGhlIGNvbnRleHQgbWlkZGxld2FyZSBoYXMgbm90IGJlZW4gYXBwbGllZCxcbiAqIGluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIHVuZGVmaW5lZCBvciBjcmFzaGluZyB3aXRoIGEgY3J5cHRpYyBlcnJvci5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gRXhwcmVzcyByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgVGhlIGF0dGFjaGVkIFJlcXVlc3RDb250ZXh0XG4gKiBAdGhyb3dzIEVycm9yIGlmIHJlcS5jb250ZXh0IGlzIG5vdCBpbml0aWFsaXplZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhcHAuZ2V0KCcvcGlwZWxpbmVzJywgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICogICBjb25zdCBjdHggPSBnZXRDb250ZXh0KHJlcSk7XG4gKiAgIGN0eC5sb2coJ0lORk8nLCAnRmV0Y2hpbmcgcGlwZWxpbmVzJyk7XG4gKiAgIC8vIC4uLlxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHQocmVxOiBSZXF1ZXN0KTogUmVxdWVzdENvbnRleHQge1xuICBpZiAoIXJlcS5jb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1JlcXVlc3QgY29udGV4dCBub3QgaW5pdGlhbGl6ZWQuIEVuc3VyZSBhdHRhY2hSZXF1ZXN0Q29udGV4dCBtaWRkbGV3YXJlIGlzIGFwcGxpZWQuJyxcbiAgICApO1xuICB9XG4gIHJldHVybiByZXEuY29udGV4dDtcbn1cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2dldC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFLdEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBWTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IscUZBQXFGLENBQ3RGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSAnLi9yZXF1ZXN0LXR5cGVzLmpzJztcblxuLyoqXG4gKiBTYWZlbHkgcmV0cmlldmUgdGhlIFJlcXVlc3RDb250ZXh0IGZyb20gYW4gRXhwcmVzcyByZXF1ZXN0LlxuICpcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIHRoZSBjb250ZXh0IG1pZGRsZXdhcmUgaGFzIG5vdCBiZWVuIGFwcGxpZWQsXG4gKiBpbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyB1bmRlZmluZWQgb3IgY3Jhc2hpbmcgd2l0aCBhIGNyeXB0aWMgZXJyb3IuXG4gKlxuICogQHBhcmFtIHJlcSAtIEV4cHJlc3MgcmVxdWVzdCBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBhdHRhY2hlZCBSZXF1ZXN0Q29udGV4dFxuICogQHRocm93cyBFcnJvciBpZiByZXEuY29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXBwLmdldCgnL3BpcGVsaW5lcycsIHJlcXVpcmVBdXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAqICAgY29uc3QgY3R4ID0gZ2V0Q29udGV4dChyZXEpO1xuICogICBjdHgubG9nKCdJTkZPJywgJ0ZldGNoaW5nIHBpcGVsaW5lcycpO1xuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZXh0KHJlcTogUmVxdWVzdCk6IFJlcXVlc3RDb250ZXh0IHtcbiAgaWYgKCFyZXEuY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdSZXF1ZXN0IGNvbnRleHQgbm90IGluaXRpYWxpemVkLiBFbnN1cmUgYXR0YWNoUmVxdWVzdENvbnRleHQgbWlkZGxld2FyZSBpcyBhcHBsaWVkLicsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVxLmNvbnRleHQ7XG59XG4iXX0=
@@ -1,10 +1,6 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.postgresHealthCheck = postgresHealthCheck;
6
- exports.mongoHealthCheck = mongoHealthCheck;
7
- const pipeline_core_1 = require("@pipeline-builder/pipeline-core");
3
+ import { getConnection } from '@pipeline-builder/pipeline-core';
8
4
  /**
9
5
  * Postgres health probe: returns `{ postgres: 'connected' }` when the pool's
10
6
  * connection test succeeds, `{ postgres: 'disconnected' }` on any error
@@ -12,9 +8,9 @@ const pipeline_core_1 = require("@pipeline-builder/pipeline-core");
12
8
  * option of `createApp()` for any service backed by the shared pipeline-data
13
9
  * Drizzle connection.
14
10
  */
15
- async function postgresHealthCheck() {
11
+ export async function postgresHealthCheck() {
16
12
  try {
17
- await (0, pipeline_core_1.getConnection)().testConnection();
13
+ await getConnection().testConnection();
18
14
  return { postgres: 'connected' };
19
15
  }
20
16
  catch {
@@ -29,11 +25,11 @@ async function postgresHealthCheck() {
29
25
  * any other value (0=disconnected, 99=uninitialized) is treated as
30
26
  * 'disconnected' so `/health` returns 503.
31
27
  */
32
- function mongoHealthCheck(connection) {
28
+ export function mongoHealthCheck(connection) {
33
29
  return async () => ({
34
30
  mongodb: connection.readyState === 1 ? 'connected'
35
31
  : connection.readyState === 2 ? 'unknown' // connecting; treat as transient
36
32
  : 'disconnected',
37
33
  });
38
34
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaGVhbHRoLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFjdEMsa0RBT0M7QUFtQkQsNENBTUM7QUE1Q0QsbUVBQWdFO0FBS2hFOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxtQkFBbUI7SUFDdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLDZCQUFhLEdBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBV0Q7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFVBQWtDO0lBQ2pFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxVQUFVLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNoRCxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUM7Z0JBQ3pFLENBQUMsQ0FBQyxjQUFjO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuXG50eXBlIEhlYWx0aFN0YXR1cyA9ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic7XG50eXBlIEhlYWx0aFJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIEhlYWx0aFN0YXR1cz47XG5cbi8qKlxuICogUG9zdGdyZXMgaGVhbHRoIHByb2JlOiByZXR1cm5zIGB7IHBvc3RncmVzOiAnY29ubmVjdGVkJyB9YCB3aGVuIHRoZSBwb29sJ3NcbiAqIGNvbm5lY3Rpb24gdGVzdCBzdWNjZWVkcywgYHsgcG9zdGdyZXM6ICdkaXNjb25uZWN0ZWQnIH1gIG9uIGFueSBlcnJvclxuICogKHNvIGAvaGVhbHRoYCBjb3JyZWN0bHkgcmVwb3J0cyA1MDMpLiBVc2UgYXMgdGhlIGBjaGVja0RlcGVuZGVuY2llc2BcbiAqIG9wdGlvbiBvZiBgY3JlYXRlQXBwKClgIGZvciBhbnkgc2VydmljZSBiYWNrZWQgYnkgdGhlIHNoYXJlZCBwaXBlbGluZS1kYXRhXG4gKiBEcml6emxlIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Z3Jlc0hlYWx0aENoZWNrKCk6IFByb21pc2U8SGVhbHRoUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZ2V0Q29ubmVjdGlvbigpLnRlc3RDb25uZWN0aW9uKCk7XG4gICAgcmV0dXJuIHsgcG9zdGdyZXM6ICdjb25uZWN0ZWQnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IHBvc3RncmVzOiAnZGlzY29ubmVjdGVkJyB9O1xuICB9XG59XG5cbi8qKlxuICogTWluaW1hbCBzaGFwZSBleHBlY3RlZCBvZiBhIG1vbmdvb3NlIGNvbm5lY3Rpb24gZm9yIHRoZSBoZWFsdGggcHJvYmUuXG4gKiBBY2NlcHRzIGBtb25nb29zZS5jb25uZWN0aW9uYCBkaXJlY3RseSB3aXRob3V0IHJlcXVpcmluZyBtb25nb29zZSBhcyBhXG4gKiBkZXBlbmRlbmN5IG9mIGFwaS1zZXJ2ZXIuXG4gKi9cbmludGVyZmFjZSBNb25nb29zZUNvbm5lY3Rpb25MaWtlIHtcbiAgcmVhZHlTdGF0ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vbmdvREIgaGVhbHRoIHByb2JlIGZhY3Rvcnk6IHBhc3MgYG1vbmdvb3NlLmNvbm5lY3Rpb25gIGFuZCBnZXQgYmFjayBhXG4gKiBgY2hlY2tEZXBlbmRlbmNpZXNgIGNhbGxiYWNrIHRoYXQgcmVwb3J0cyBiYXNlZCBvbiBtb25nb29zZSdzIHJlYWR5U3RhdGUuXG4gKlxuICogTWFwcGluZyAocGVyIG1vbmdvb3NlIGRvY3MpOiAxPWNvbm5lY3RlZCwgMj1jb25uZWN0aW5nLCAzPWRpc2Nvbm5lY3RpbmcsXG4gKiBhbnkgb3RoZXIgdmFsdWUgKDA9ZGlzY29ubmVjdGVkLCA5OT11bmluaXRpYWxpemVkKSBpcyB0cmVhdGVkIGFzXG4gKiAnZGlzY29ubmVjdGVkJyBzbyBgL2hlYWx0aGAgcmV0dXJucyA1MDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb25nb0hlYWx0aENoZWNrKGNvbm5lY3Rpb246IE1vbmdvb3NlQ29ubmVjdGlvbkxpa2UpOiAoKSA9PiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKCkgPT4gKHtcbiAgICBtb25nb2RiOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDEgPyAnY29ubmVjdGVkJ1xuICAgICAgOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDIgPyAndW5rbm93bicgLy8gY29ubmVjdGluZzsgdHJlYXQgYXMgdHJhbnNpZW50XG4gICAgICAgIDogJ2Rpc2Nvbm5lY3RlZCcsXG4gIH0pO1xufVxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaGVhbHRoLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtoRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxJQUFJLENBQUM7UUFDSCxNQUFNLGFBQWEsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDdEMsQ0FBQztBQUNILENBQUM7QUFXRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFVBQWtDO0lBQ2pFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxVQUFVLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNoRCxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUM7Z0JBQ3pFLENBQUMsQ0FBQyxjQUFjO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuXG50eXBlIEhlYWx0aFN0YXR1cyA9ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic7XG50eXBlIEhlYWx0aFJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIEhlYWx0aFN0YXR1cz47XG5cbi8qKlxuICogUG9zdGdyZXMgaGVhbHRoIHByb2JlOiByZXR1cm5zIGB7IHBvc3RncmVzOiAnY29ubmVjdGVkJyB9YCB3aGVuIHRoZSBwb29sJ3NcbiAqIGNvbm5lY3Rpb24gdGVzdCBzdWNjZWVkcywgYHsgcG9zdGdyZXM6ICdkaXNjb25uZWN0ZWQnIH1gIG9uIGFueSBlcnJvclxuICogKHNvIGAvaGVhbHRoYCBjb3JyZWN0bHkgcmVwb3J0cyA1MDMpLiBVc2UgYXMgdGhlIGBjaGVja0RlcGVuZGVuY2llc2BcbiAqIG9wdGlvbiBvZiBgY3JlYXRlQXBwKClgIGZvciBhbnkgc2VydmljZSBiYWNrZWQgYnkgdGhlIHNoYXJlZCBwaXBlbGluZS1kYXRhXG4gKiBEcml6emxlIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Z3Jlc0hlYWx0aENoZWNrKCk6IFByb21pc2U8SGVhbHRoUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZ2V0Q29ubmVjdGlvbigpLnRlc3RDb25uZWN0aW9uKCk7XG4gICAgcmV0dXJuIHsgcG9zdGdyZXM6ICdjb25uZWN0ZWQnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IHBvc3RncmVzOiAnZGlzY29ubmVjdGVkJyB9O1xuICB9XG59XG5cbi8qKlxuICogTWluaW1hbCBzaGFwZSBleHBlY3RlZCBvZiBhIG1vbmdvb3NlIGNvbm5lY3Rpb24gZm9yIHRoZSBoZWFsdGggcHJvYmUuXG4gKiBBY2NlcHRzIGBtb25nb29zZS5jb25uZWN0aW9uYCBkaXJlY3RseSB3aXRob3V0IHJlcXVpcmluZyBtb25nb29zZSBhcyBhXG4gKiBkZXBlbmRlbmN5IG9mIGFwaS1zZXJ2ZXIuXG4gKi9cbmludGVyZmFjZSBNb25nb29zZUNvbm5lY3Rpb25MaWtlIHtcbiAgcmVhZHlTdGF0ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vbmdvREIgaGVhbHRoIHByb2JlIGZhY3Rvcnk6IHBhc3MgYG1vbmdvb3NlLmNvbm5lY3Rpb25gIGFuZCBnZXQgYmFjayBhXG4gKiBgY2hlY2tEZXBlbmRlbmNpZXNgIGNhbGxiYWNrIHRoYXQgcmVwb3J0cyBiYXNlZCBvbiBtb25nb29zZSdzIHJlYWR5U3RhdGUuXG4gKlxuICogTWFwcGluZyAocGVyIG1vbmdvb3NlIGRvY3MpOiAxPWNvbm5lY3RlZCwgMj1jb25uZWN0aW5nLCAzPWRpc2Nvbm5lY3RpbmcsXG4gKiBhbnkgb3RoZXIgdmFsdWUgKDA9ZGlzY29ubmVjdGVkLCA5OT11bmluaXRpYWxpemVkKSBpcyB0cmVhdGVkIGFzXG4gKiAnZGlzY29ubmVjdGVkJyBzbyBgL2hlYWx0aGAgcmV0dXJucyA1MDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb25nb0hlYWx0aENoZWNrKGNvbm5lY3Rpb246IE1vbmdvb3NlQ29ubmVjdGlvbkxpa2UpOiAoKSA9PiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKCkgPT4gKHtcbiAgICBtb25nb2RiOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDEgPyAnY29ubmVjdGVkJ1xuICAgICAgOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDIgPyAndW5rbm93bicgLy8gY29ubmVjdGluZzsgdHJlYXQgYXMgdHJhbnNpZW50XG4gICAgICAgIDogJ2Rpc2Nvbm5lY3RlZCcsXG4gIH0pO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Request, Response, NextFunction } from 'express';
1
+ import type { Request, Response, NextFunction } from 'express';
2
2
  interface CachedEntry {
3
3
  statusCode: number;
4
4
  body: unknown;
@@ -1,15 +1,10 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.createRedisIdempotencyStore = createRedisIdempotencyStore;
6
- exports.createMemoryStore = createMemoryStore;
7
- exports.idempotencyMiddleware = idempotencyMiddleware;
8
- const api_core_1 = require("@pipeline-builder/api-core");
9
- const pipeline_core_1 = require("@pipeline-builder/pipeline-core");
10
- const logger = (0, api_core_1.createLogger)('idempotency');
3
+ import { createLogger } from '@pipeline-builder/api-core';
4
+ import { CoreConstants } from '@pipeline-builder/pipeline-core';
5
+ const logger = createLogger('idempotency');
11
6
  /** Redis-backed idempotency store — share state across replicas. */
12
- function createRedisIdempotencyStore(client, prefix = 'idemp:') {
7
+ export function createRedisIdempotencyStore(client, prefix = 'idemp:') {
13
8
  return {
14
9
  async get(key) {
15
10
  const raw = await client.get(prefix + key);
@@ -28,7 +23,7 @@ function createRedisIdempotencyStore(client, prefix = 'idemp:') {
28
23
  };
29
24
  }
30
25
  /** Default in-memory store. Single-replica only. Exported for testing. */
31
- function createMemoryStore() {
26
+ export function createMemoryStore() {
32
27
  const map = new Map();
33
28
  const cleanupTimer = setInterval(() => {
34
29
  const now = Date.now();
@@ -36,7 +31,7 @@ function createMemoryStore() {
36
31
  if (now > v.expiresAt)
37
32
  map.delete(k);
38
33
  }
39
- }, pipeline_core_1.CoreConstants.IDEMPOTENCY_CLEANUP_INTERVAL_MS);
34
+ }, CoreConstants.IDEMPOTENCY_CLEANUP_INTERVAL_MS);
40
35
  cleanupTimer.unref();
41
36
  return {
42
37
  async get(key) {
@@ -54,7 +49,7 @@ function createMemoryStore() {
54
49
  // rather than silently dropping the NEW key — otherwise, once full, the
55
50
  // store stops deduplicating fresh requests until the TTL sweep runs.
56
51
  // Stays bounded; favors recent keys (most likely to be retried).
57
- if (!map.has(key) && map.size >= pipeline_core_1.CoreConstants.IDEMPOTENCY_MAX_STORE_SIZE) {
52
+ if (!map.has(key) && map.size >= CoreConstants.IDEMPOTENCY_MAX_STORE_SIZE) {
58
53
  const oldest = map.keys().next().value;
59
54
  if (oldest !== undefined)
60
55
  map.delete(oldest);
@@ -74,7 +69,7 @@ const memoryStore = createMemoryStore();
74
69
  * Pass `{ store: createRedisIdempotencyStore(redisClient) }` to dedupe
75
70
  * across replicas.
76
71
  */
77
- function idempotencyMiddleware(options = {}) {
72
+ export function idempotencyMiddleware(options = {}) {
78
73
  const store = options.store ?? memoryStore;
79
74
  return (req, res, next) => {
80
75
  const key = req.headers['idempotency-key'];
@@ -105,8 +100,8 @@ function idempotencyMiddleware(options = {}) {
105
100
  store.set(fullKey, {
106
101
  statusCode: res.statusCode,
107
102
  body,
108
- expiresAt: Date.now() + pipeline_core_1.CoreConstants.IDEMPOTENCY_TTL_MS,
109
- }, Math.floor(pipeline_core_1.CoreConstants.IDEMPOTENCY_TTL_MS / 1000)).catch((err) => {
103
+ expiresAt: Date.now() + CoreConstants.IDEMPOTENCY_TTL_MS,
104
+ }, Math.floor(CoreConstants.IDEMPOTENCY_TTL_MS / 1000)).catch((err) => {
110
105
  logger.warn('Idempotency store.set failed', { key: fullKey, error: err instanceof Error ? err.message : String(err) });
111
106
  });
112
107
  }
@@ -120,4 +115,4 @@ function idempotencyMiddleware(options = {}) {
120
115
  });
121
116
  };
122
117
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3ktbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaWRlbXBvdGVuY3ktbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFzQ3RDLGtFQWVDO0FBR0QsOENBK0JDO0FBb0JELHNEQStDQztBQXhKRCx5REFBMEQ7QUFDMUQsbUVBQWdFO0FBR2hFLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQVksRUFBQyxhQUFhLENBQUMsQ0FBQztBQStCM0Msb0VBQW9FO0FBQ3BFLFNBQWdCLDJCQUEyQixDQUFDLE1BQWlCLEVBQUUsTUFBTSxHQUFHLFFBQVE7SUFDOUUsT0FBTztRQUNMLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNYLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWdCLENBQUM7WUFDeEMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVU7WUFDOUIsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUUsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLFNBQWdCLGlCQUFpQjtJQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUMz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ekgsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUM7WUFFRixJQUFJLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2YsMEVBQTBFO1lBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0RBQXdELEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pKLElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvcmVDb25zdGFudHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdpZGVtcG90ZW5jeScpO1xuXG5pbnRlcmZhY2UgQ2FjaGVkRW50cnkge1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGJvZHk6IHVua25vd247XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBiYWNrZW5kIGZvciBpZGVtcG90ZW5jeS1rZXkgcmVwbGF5IGNhY2hlLiBUaGUgZGVmYXVsdCBpbi1tZW1vcnlcbiAqIGltcGxlbWVudGF0aW9uIHdvcmtzIGZpbmUgc2luZ2xlLXJlcGxpY2E7IGEgUmVkaXMtYmFja2VkIGltcGxlbWVudGF0aW9uXG4gKiBpcyByZXF1aXJlZCBmb3IgY29ycmVjdCBkZWR1cGxpY2F0aW9uIGFjcm9zcyBob3Jpem9udGFsbHktc2NhbGVkIHJlcGxpY2FzXG4gKiAob3RoZXJ3aXNlIHR3byByZXBsaWNhcyBiZWhpbmQgYSBsb2FkLWJhbGFuY2VyIGNhY2hlIGluZGVwZW5kZW50bHkgYW5kIGFcbiAqIHJldHJ5IGhpdHRpbmcgYSBkaWZmZXJlbnQgcG9kIHdvbid0IHJlcGxheSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbXBvdGVuY3lTdG9yZSB7XG4gIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVkRW50cnkgfCBudWxsPjtcbiAgc2V0KGtleTogc3RyaW5nLCBlbnRyeTogQ2FjaGVkRW50cnksIHR0bFNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogTWluaW1hbCBpbnRlcmZhY2UgYSBSZWRpcyBjbGllbnQgbXVzdCBzYXRpc2Z5LiBDb21wYXRpYmxlIHdpdGhcbiAqIGBpb3JlZGlzYCBhbmQgYHJlZGlzYCB2NCsg4oCUIGJvdGggZXhwb3NlIGBnZXRgL2BzZXRgIGFuZCBhY2NlcHQgYEVYYFxuICogZm9yIGV4cGlyeS4gUGFzcyB5b3VyIHJlYWwgY2xpZW50IGluIHZpYSBgaWRlbXBvdGVuY3lNaWRkbGV3YXJlKHtcbiAqIHN0b3JlOiBjcmVhdGVSZWRpc0lkZW1wb3RlbmN5U3RvcmUoY2xpZW50KSB9KWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNMaWtlIHtcbiAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBtb2RlPzogJ0VYJywgc2Vjb25kcz86IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKiBSZWRpcy1iYWNrZWQgaWRlbXBvdGVuY3kgc3RvcmUg4oCUIHNoYXJlIHN0YXRlIGFjcm9zcyByZXBsaWNhcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0lkZW1wb3RlbmN5U3RvcmUoY2xpZW50OiBSZWRpc0xpa2UsIHByZWZpeCA9ICdpZGVtcDonKTogSWRlbXBvdGVuY3lTdG9yZSB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleSkge1xuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgY2xpZW50LmdldChwcmVmaXggKyBrZXkpO1xuICAgICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBDYWNoZWRFbnRyeTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXksIGVudHJ5LCB0dGxTZWNvbmRzKSB7XG4gICAgICBhd2FpdCBjbGllbnQuc2V0KHByZWZpeCArIGtleSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpLCAnRVgnLCB0dGxTZWNvbmRzKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKiogRGVmYXVsdCBpbi1tZW1vcnkgc3RvcmUuIFNpbmdsZS1yZXBsaWNhIG9ubHkuIEV4cG9ydGVkIGZvciB0ZXN0aW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeVN0b3JlKCk6IElkZW1wb3RlbmN5U3RvcmUge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkRW50cnk+KCk7XG4gIGNvbnN0IGNsZWFudXBUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIG1hcCkge1xuICAgICAgaWYgKG5vdyA+IHYuZXhwaXJlc0F0KSBtYXAuZGVsZXRlKGspO1xuICAgIH1cbiAgfSwgQ29yZUNvbnN0YW50cy5JREVNUE9URU5DWV9DTEVBTlVQX0lOVEVSVkFMX01TKTtcbiAgY2xlYW51cFRpbWVyLnVucmVmKCk7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleSkge1xuICAgICAgY29uc3QgZW50cnkgPSBtYXAuZ2V0KGtleSk7XG4gICAgICBpZiAoIWVudHJ5KSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChEYXRlLm5vdygpID4gZW50cnkuZXhwaXJlc0F0KSB7XG4gICAgICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfSxcbiAgICBhc3luYyBzZXQoa2V5LCBlbnRyeSkge1xuICAgICAgLy8gQXQgY2FwYWNpdHksIGV2aWN0IHRoZSBPTERFU1QgZW50cnkgKE1hcCBwcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyKVxuICAgICAgLy8gcmF0aGVyIHRoYW4gc2lsZW50bHkgZHJvcHBpbmcgdGhlIE5FVyBrZXkg4oCUIG90aGVyd2lzZSwgb25jZSBmdWxsLCB0aGVcbiAgICAgIC8vIHN0b3JlIHN0b3BzIGRlZHVwbGljYXRpbmcgZnJlc2ggcmVxdWVzdHMgdW50aWwgdGhlIFRUTCBzd2VlcCBydW5zLlxuICAgICAgLy8gU3RheXMgYm91bmRlZDsgZmF2b3JzIHJlY2VudCBrZXlzIChtb3N0IGxpa2VseSB0byBiZSByZXRyaWVkKS5cbiAgICAgIGlmICghbWFwLmhhcyhrZXkpICYmIG1hcC5zaXplID49IENvcmVDb25zdGFudHMuSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUpIHtcbiAgICAgICAgY29uc3Qgb2xkZXN0ID0gbWFwLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgIGlmIChvbGRlc3QgIT09IHVuZGVmaW5lZCkgbWFwLmRlbGV0ZShvbGRlc3QpO1xuICAgICAgfVxuICAgICAgbWFwLnNldChrZXksIGVudHJ5KTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBtZW1vcnlTdG9yZSA9IGNyZWF0ZU1lbW9yeVN0b3JlKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbXBvdGVuY3lNaWRkbGV3YXJlT3B0aW9ucyB7XG4gIC8qKiBDdXN0b20gc3RvcmUgYmFja2VuZCAoZGVmYXVsdDogaW4tbWVtb3J5KS4gUGFzcyBhIFJlZGlzLWJhY2tlZCBzdG9yZVxuICAgKiAgZm9yIG11bHRpLXJlcGxpY2EgZGVwbG95bWVudHMuICovXG4gIHN0b3JlPzogSWRlbXBvdGVuY3lTdG9yZTtcbn1cblxuLyoqXG4gKiBNaWRkbGV3YXJlIHRoYXQgc3VwcG9ydHMgaWRlbXBvdGVuY3kga2V5cyBmb3IgUE9TVC9QVVQvREVMRVRFIG11dGF0aW9ucy5cbiAqXG4gKiBXaGVuIGEgcmVxdWVzdCBpbmNsdWRlcyB0aGUgYElkZW1wb3RlbmN5LUtleWAgaGVhZGVyOlxuICogLSBGaXJzdCBjYWxsOiBwcm9jZXNzZXMgbm9ybWFsbHksIGNhY2hlcyB0aGUgcmVzcG9uc2VcbiAqIC0gU3Vic2VxdWVudCBjYWxscyB3aXRoIHNhbWUga2V5OiByZXR1cm5zIGNhY2hlZCByZXNwb25zZSAocHJldmVudHMgZHVwbGljYXRlIG11dGF0aW9ucylcbiAqXG4gKiBQYXNzIGB7IHN0b3JlOiBjcmVhdGVSZWRpc0lkZW1wb3RlbmN5U3RvcmUocmVkaXNDbGllbnQpIH1gIHRvIGRlZHVwZVxuICogYWNyb3NzIHJlcGxpY2FzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbXBvdGVuY3lNaWRkbGV3YXJlKG9wdGlvbnM6IElkZW1wb3RlbmN5TWlkZGxld2FyZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBzdG9yZSA9IG9wdGlvbnMuc3RvcmUgPz8gbWVtb3J5U3RvcmU7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBrZXkgPSByZXEuaGVhZGVyc1snaWRlbXBvdGVuY3kta2V5J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICgha2V5KSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gT25seSBhcHBseSB0byBtdXRhdGlvbiBtZXRob2RzXG4gICAgaWYgKCFbJ1BPU1QnLCAnUFVUJywgJ0RFTEVURSddLmluY2x1ZGVzKHJlcS5tZXRob2QpKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gTmFtZXNwYWNlIGJ5IG9yZ0lkIHRvIHByZXZlbnQgY3Jvc3Mtb3JnIGNhY2hlIGNvbGxpc2lvbnNcbiAgICBjb25zdCBvcmdJZCA9IHJlcS5jb250ZXh0Py5pZGVudGl0eT8ub3JnSWQgfHwgcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkO1xuICAgIGlmICghb3JnSWQpIHJldHVybiBuZXh0KCk7IC8vIHNraXAgaWRlbXBvdGVuY3kgZm9yIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0c1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBgJHtvcmdJZH06JHtrZXl9YDtcblxuICAgIC8vIENoZWNrIGZvciBjYWNoZWQgcmVzcG9uc2VcbiAgICBzdG9yZS5nZXQoZnVsbEtleSkudGhlbigoY2FjaGVkKSA9PiB7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnSWRlbXBvdGVudCByZXF1ZXN0IHJlcGxheWVkJywgeyBrZXk6IGZ1bGxLZXkgfSk7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ1gtSWRlbXBvdGVudC1SZXBsYXllZCcsICd0cnVlJyk7XG4gICAgICAgIHJlcy5zdGF0dXMoY2FjaGVkLnN0YXR1c0NvZGUpLmpzb24oY2FjaGVkLmJvZHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVyY2VwdCByZXMuanNvbiB0byBjYWNoZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbiA9IHJlcy5qc29uLmJpbmQocmVzKTtcbiAgICAgIHJlcy5qc29uID0gKGJvZHk6IHVua25vd24pID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignWC1JZGVtcG90ZW50LVJlcGxheWVkJywgJ2ZhbHNlJyk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgICAvLyBGaXJlLWFuZC1mb3JnZXQg4oCUIGZhaWx1cmUgdG8gY2FjaGUgaXMgbG9nZ2VkIGJ1dCBkb2Vzbid0IGJsb2NrIHRoZSByZXNwb25zZS5cbiAgICAgICAgICBzdG9yZS5zZXQoZnVsbEtleSwge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgQ29yZUNvbnN0YW50cy5JREVNUE9URU5DWV9UVExfTVMsXG4gICAgICAgICAgfSwgTWF0aC5mbG9vcihDb3JlQ29uc3RhbnRzLklERU1QT1RFTkNZX1RUTF9NUyAvIDEwMDApKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIud2FybignSWRlbXBvdGVuY3kgc3RvcmUuc2V0IGZhaWxlZCcsIHsga2V5OiBmdWxsS2V5LCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEpzb24oYm9keSk7XG4gICAgICB9O1xuXG4gICAgICBuZXh0KCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gSWYgdGhlIHN0b3JlIGJhY2tlbmQgaXMgZG93biwgZmFpbCBvcGVuIOKAlCBwcm9jZXNzIHRoZSByZXF1ZXN0IG5vcm1hbGx5LlxuICAgICAgbG9nZ2VyLndhcm4oJ0lkZW1wb3RlbmN5IHN0b3JlLmdldCBmYWlsZWQ7IHByb2NlZWRpbmcgd2l0aG91dCBkZWR1cCcsIHsga2V5OiBmdWxsS2V5LCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9O1xufVxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3ktbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaWRlbXBvdGVuY3ktbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHaEUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBK0IzQyxvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQWlCLEVBQUUsTUFBTSxHQUFHLFFBQVE7SUFDOUUsT0FBTztRQUNMLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNYLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWdCLENBQUM7WUFDeEMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVU7WUFDOUIsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUUsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFB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QUMsRUFBRSxDQUFDLENBQUM7b0JBQ3pILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDO1lBRUYsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNmLDBFQUEwRTtZQUMxRSxNQUFNLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqSixJQUFJLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdpZGVtcG90ZW5jeScpO1xuXG5pbnRlcmZhY2UgQ2FjaGVkRW50cnkge1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGJvZHk6IHVua25vd247XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBiYWNrZW5kIGZvciBpZGVtcG90ZW5jeS1rZXkgcmVwbGF5IGNhY2hlLiBUaGUgZGVmYXVsdCBpbi1tZW1vcnlcbiAqIGltcGxlbWVudGF0aW9uIHdvcmtzIGZpbmUgc2luZ2xlLXJlcGxpY2E7IGEgUmVkaXMtYmFja2VkIGltcGxlbWVudGF0aW9uXG4gKiBpcyByZXF1aXJlZCBmb3IgY29ycmVjdCBkZWR1cGxpY2F0aW9uIGFjcm9zcyBob3Jpem9udGFsbHktc2NhbGVkIHJlcGxpY2FzXG4gKiAob3RoZXJ3aXNlIHR3byByZXBsaWNhcyBiZWhpbmQgYSBsb2FkLWJhbGFuY2VyIGNhY2hlIGluZGVwZW5kZW50bHkgYW5kIGFcbiAqIHJldHJ5IGhpdHRpbmcgYSBkaWZmZXJlbnQgcG9kIHdvbid0IHJlcGxheSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbXBvdGVuY3lTdG9yZSB7XG4gIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVkRW50cnkgfCBudWxsPjtcbiAgc2V0KGtleTogc3RyaW5nLCBlbnRyeTogQ2FjaGVkRW50cnksIHR0bFNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogTWluaW1hbCBpbnRlcmZhY2UgYSBSZWRpcyBjbGllbnQgbXVzdCBzYXRpc2Z5LiBDb21wYXRpYmxlIHdpdGhcbiAqIGBpb3JlZGlzYCBhbmQgYHJlZGlzYCB2NCsg4oCUIGJvdGggZXhwb3NlIGBnZXRgL2BzZXRgIGFuZCBhY2NlcHQgYEVYYFxuICogZm9yIGV4cGlyeS4gUGFzcyB5b3VyIHJlYWwgY2xpZW50IGluIHZpYSBgaWRlbXBvdGVuY3lNaWRkbGV3YXJlKHtcbiAqIHN0b3JlOiBjcmVhdGVSZWRpc0lkZW1wb3RlbmN5U3RvcmUoY2xpZW50KSB9KWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNMaWtlIHtcbiAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBtb2RlPzogJ0VYJywgc2Vjb25kcz86IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKiBSZWRpcy1iYWNrZWQgaWRlbXBvdGVuY3kgc3RvcmUg4oCUIHNoYXJlIHN0YXRlIGFjcm9zcyByZXBsaWNhcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0lkZW1wb3RlbmN5U3RvcmUoY2xpZW50OiBSZWRpc0xpa2UsIHByZWZpeCA9ICdpZGVtcDonKTogSWRlbXBvdGVuY3lTdG9yZSB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleSkge1xuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgY2xpZW50LmdldChwcmVmaXggKyBrZXkpO1xuICAgICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBDYWNoZWRFbnRyeTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXksIGVudHJ5LCB0dGxTZWNvbmRzKSB7XG4gICAgICBhd2FpdCBjbGllbnQuc2V0KHByZWZpeCArIGtleSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpLCAnRVgnLCB0dGxTZWNvbmRzKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKiogRGVmYXVsdCBpbi1tZW1vcnkgc3RvcmUuIFNpbmdsZS1yZXBsaWNhIG9ubHkuIEV4cG9ydGVkIGZvciB0ZXN0aW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeVN0b3JlKCk6IElkZW1wb3RlbmN5U3RvcmUge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkRW50cnk+KCk7XG4gIGNvbnN0IGNsZWFudXBUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIG1hcCkge1xuICAgICAgaWYgKG5vdyA+IHYuZXhwaXJlc0F0KSBtYXAuZGVsZXRlKGspO1xuICAgIH1cbiAgfSwgQ29yZUNvbnN0YW50cy5JREVNUE9URU5DWV9DTEVBTlVQX0lOVEVSVkFMX01TKTtcbiAgY2xlYW51cFRpbWVyLnVucmVmKCk7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleSkge1xuICAgICAgY29uc3QgZW50cnkgPSBtYXAuZ2V0KGtleSk7XG4gICAgICBpZiAoIWVudHJ5KSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChEYXRlLm5vdygpID4gZW50cnkuZXhwaXJlc0F0KSB7XG4gICAgICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfSxcbiAgICBhc3luYyBzZXQoa2V5LCBlbnRyeSkge1xuICAgICAgLy8gQXQgY2FwYWNpdHksIGV2aWN0IHRoZSBPTERFU1QgZW50cnkgKE1hcCBwcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyKVxuICAgICAgLy8gcmF0aGVyIHRoYW4gc2lsZW50bHkgZHJvcHBpbmcgdGhlIE5FVyBrZXkg4oCUIG90aGVyd2lzZSwgb25jZSBmdWxsLCB0aGVcbiAgICAgIC8vIHN0b3JlIHN0b3BzIGRlZHVwbGljYXRpbmcgZnJlc2ggcmVxdWVzdHMgdW50aWwgdGhlIFRUTCBzd2VlcCBydW5zLlxuICAgICAgLy8gU3RheXMgYm91bmRlZDsgZmF2b3JzIHJlY2VudCBrZXlzIChtb3N0IGxpa2VseSB0byBiZSByZXRyaWVkKS5cbiAgICAgIGlmICghbWFwLmhhcyhrZXkpICYmIG1hcC5zaXplID49IENvcmVDb25zdGFudHMuSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUpIHtcbiAgICAgICAgY29uc3Qgb2xkZXN0ID0gbWFwLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgIGlmIChvbGRlc3QgIT09IHVuZGVmaW5lZCkgbWFwLmRlbGV0ZShvbGRlc3QpO1xuICAgICAgfVxuICAgICAgbWFwLnNldChrZXksIGVudHJ5KTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBtZW1vcnlTdG9yZSA9IGNyZWF0ZU1lbW9yeVN0b3JlKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbXBvdGVuY3lNaWRkbGV3YXJlT3B0aW9ucyB7XG4gIC8qKiBDdXN0b20gc3RvcmUgYmFja2VuZCAoZGVmYXVsdDogaW4tbWVtb3J5KS4gUGFzcyBhIFJlZGlzLWJhY2tlZCBzdG9yZVxuICAgKiAgZm9yIG11bHRpLXJlcGxpY2EgZGVwbG95bWVudHMuICovXG4gIHN0b3JlPzogSWRlbXBvdGVuY3lTdG9yZTtcbn1cblxuLyoqXG4gKiBNaWRkbGV3YXJlIHRoYXQgc3VwcG9ydHMgaWRlbXBvdGVuY3kga2V5cyBmb3IgUE9TVC9QVVQvREVMRVRFIG11dGF0aW9ucy5cbiAqXG4gKiBXaGVuIGEgcmVxdWVzdCBpbmNsdWRlcyB0aGUgYElkZW1wb3RlbmN5LUtleWAgaGVhZGVyOlxuICogLSBGaXJzdCBjYWxsOiBwcm9jZXNzZXMgbm9ybWFsbHksIGNhY2hlcyB0aGUgcmVzcG9uc2VcbiAqIC0gU3Vic2VxdWVudCBjYWxscyB3aXRoIHNhbWUga2V5OiByZXR1cm5zIGNhY2hlZCByZXNwb25zZSAocHJldmVudHMgZHVwbGljYXRlIG11dGF0aW9ucylcbiAqXG4gKiBQYXNzIGB7IHN0b3JlOiBjcmVhdGVSZWRpc0lkZW1wb3RlbmN5U3RvcmUocmVkaXNDbGllbnQpIH1gIHRvIGRlZHVwZVxuICogYWNyb3NzIHJlcGxpY2FzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbXBvdGVuY3lNaWRkbGV3YXJlKG9wdGlvbnM6IElkZW1wb3RlbmN5TWlkZGxld2FyZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBzdG9yZSA9IG9wdGlvbnMuc3RvcmUgPz8gbWVtb3J5U3RvcmU7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBrZXkgPSByZXEuaGVhZGVyc1snaWRlbXBvdGVuY3kta2V5J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICgha2V5KSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gT25seSBhcHBseSB0byBtdXRhdGlvbiBtZXRob2RzXG4gICAgaWYgKCFbJ1BPU1QnLCAnUFVUJywgJ0RFTEVURSddLmluY2x1ZGVzKHJlcS5tZXRob2QpKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gTmFtZXNwYWNlIGJ5IG9yZ0lkIHRvIHByZXZlbnQgY3Jvc3Mtb3JnIGNhY2hlIGNvbGxpc2lvbnNcbiAgICBjb25zdCBvcmdJZCA9IHJlcS5jb250ZXh0Py5pZGVudGl0eT8ub3JnSWQgfHwgcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkO1xuICAgIGlmICghb3JnSWQpIHJldHVybiBuZXh0KCk7IC8vIHNraXAgaWRlbXBvdGVuY3kgZm9yIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0c1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBgJHtvcmdJZH06JHtrZXl9YDtcblxuICAgIC8vIENoZWNrIGZvciBjYWNoZWQgcmVzcG9uc2VcbiAgICBzdG9yZS5nZXQoZnVsbEtleSkudGhlbigoY2FjaGVkKSA9PiB7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnSWRlbXBvdGVudCByZXF1ZXN0IHJlcGxheWVkJywgeyBrZXk6IGZ1bGxLZXkgfSk7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ1gtSWRlbXBvdGVudC1SZXBsYXllZCcsICd0cnVlJyk7XG4gICAgICAgIHJlcy5zdGF0dXMoY2FjaGVkLnN0YXR1c0NvZGUpLmpzb24oY2FjaGVkLmJvZHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVyY2VwdCByZXMuanNvbiB0byBjYWNoZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbiA9IHJlcy5qc29uLmJpbmQocmVzKTtcbiAgICAgIHJlcy5qc29uID0gKGJvZHk6IHVua25vd24pID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignWC1JZGVtcG90ZW50LVJlcGxheWVkJywgJ2ZhbHNlJyk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgICAvLyBGaXJlLWFuZC1mb3JnZXQg4oCUIGZhaWx1cmUgdG8gY2FjaGUgaXMgbG9nZ2VkIGJ1dCBkb2Vzbid0IGJsb2NrIHRoZSByZXNwb25zZS5cbiAgICAgICAgICBzdG9yZS5zZXQoZnVsbEtleSwge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgQ29yZUNvbnN0YW50cy5JREVNUE9URU5DWV9UVExfTVMsXG4gICAgICAgICAgfSwgTWF0aC5mbG9vcihDb3JlQ29uc3RhbnRzLklERU1QT1RFTkNZX1RUTF9NUyAvIDEwMDApKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIud2FybignSWRlbXBvdGVuY3kgc3RvcmUuc2V0IGZhaWxlZCcsIHsga2V5OiBmdWxsS2V5LCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEpzb24oYm9keSk7XG4gICAgICB9O1xuXG4gICAgICBuZXh0KCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gSWYgdGhlIHN0b3JlIGJhY2tlbmQgaXMgZG93biwgZmFpbCBvcGVuIOKAlCBwcm9jZXNzIHRoZSByZXF1ZXN0IG5vcm1hbGx5LlxuICAgICAgbG9nZ2VyLndhcm4oJ0lkZW1wb3RlbmN5IHN0b3JlLmdldCBmYWlsZWQ7IHByb2NlZWRpbmcgd2l0aG91dCBkZWR1cCcsIHsga2V5OiBmdWxsS2V5LCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9O1xufVxuIl19
@@ -1,16 +1,16 @@
1
- export * from './middleware';
2
- export * from './middleware-factory';
3
- export * from './context-middleware';
4
- export * from './check-quota';
5
- export * from './require-org-id';
6
- export * from './get-context';
7
- export * from './app-factory';
8
- export * from './health-checks';
9
- export * from './mongo-connect';
10
- export * from './quota-helpers';
11
- export * from './idempotency-middleware';
12
- export * from './tracing';
13
- export * from './metrics';
14
- export * from './server';
15
- export * from './route-wrapper';
16
- export * from './request-types';
1
+ export * from './middleware.js';
2
+ export * from './middleware-factory.js';
3
+ export * from './context-middleware.js';
4
+ export * from './check-quota.js';
5
+ export * from './require-org-id.js';
6
+ export * from './get-context.js';
7
+ export * from './app-factory.js';
8
+ export * from './health-checks.js';
9
+ export * from './mongo-connect.js';
10
+ export * from './quota-helpers.js';
11
+ export * from './idempotency-middleware.js';
12
+ export * from './tracing.js';
13
+ export * from './metrics.js';
14
+ export * from './server.js';
15
+ export * from './route-wrapper.js';
16
+ export * from './request-types.js';
package/lib/api/index.js CHANGED
@@ -1,45 +1,29 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
- if (k2 === undefined) k2 = k;
6
- var desc = Object.getOwnPropertyDescriptor(m, k);
7
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
- desc = { enumerable: true, get: function() { return m[k]; } };
9
- }
10
- Object.defineProperty(o, k2, desc);
11
- }) : (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- o[k2] = m[k];
14
- }));
15
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
3
  // Middleware
20
- __exportStar(require("./middleware"), exports);
21
- __exportStar(require("./middleware-factory"), exports);
22
- __exportStar(require("./context-middleware"), exports);
23
- __exportStar(require("./check-quota"), exports);
24
- __exportStar(require("./require-org-id"), exports);
25
- __exportStar(require("./get-context"), exports);
4
+ export * from './middleware.js';
5
+ export * from './middleware-factory.js';
6
+ export * from './context-middleware.js';
7
+ export * from './check-quota.js';
8
+ export * from './require-org-id.js';
9
+ export * from './get-context.js';
26
10
  // App factory
27
- __exportStar(require("./app-factory"), exports);
11
+ export * from './app-factory.js';
28
12
  // Health-check helpers
29
- __exportStar(require("./health-checks"), exports);
13
+ export * from './health-checks.js';
30
14
  // MongoDB connection helper (dependency-injected mongoose)
31
- __exportStar(require("./mongo-connect"), exports);
15
+ export * from './mongo-connect.js';
32
16
  // Quota helpers
33
- __exportStar(require("./quota-helpers"), exports);
17
+ export * from './quota-helpers.js';
34
18
  // Idempotency
35
- __exportStar(require("./idempotency-middleware"), exports);
19
+ export * from './idempotency-middleware.js';
36
20
  // Observability
37
- __exportStar(require("./tracing"), exports);
38
- __exportStar(require("./metrics"), exports);
21
+ export * from './tracing.js';
22
+ export * from './metrics.js';
39
23
  // Server utilities
40
- __exportStar(require("./server"), exports);
24
+ export * from './server.js';
41
25
  // Route wrapper
42
- __exportStar(require("./route-wrapper"), exports);
26
+ export * from './route-wrapper.js';
43
27
  // Request/Response types
44
- __exportStar(require("./request-types"), exports);
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLGFBQWE7QUFDYiwrQ0FBNkI7QUFDN0IsdURBQXFDO0FBQ3JDLHVEQUFxQztBQUNyQyxnREFBOEI7QUFDOUIsbURBQWlDO0FBQ2pDLGdEQUE4QjtBQUU5QixjQUFjO0FBQ2QsZ0RBQThCO0FBRTlCLHVCQUF1QjtBQUN2QixrREFBZ0M7QUFFaEMsMkRBQTJEO0FBQzNELGtEQUFnQztBQUVoQyxnQkFBZ0I7QUFDaEIsa0RBQWdDO0FBRWhDLGNBQWM7QUFDZCwyREFBeUM7QUFFekMsZ0JBQWdCO0FBQ2hCLDRDQUEwQjtBQUMxQiw0Q0FBMEI7QUFFMUIsbUJBQW1CO0FBQ25CLDJDQUF5QjtBQUV6QixnQkFBZ0I7QUFDaEIsa0RBQWdDO0FBRWhDLHlCQUF5QjtBQUN6QixrREFBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gTWlkZGxld2FyZVxuZXhwb3J0ICogZnJvbSAnLi9taWRkbGV3YXJlJztcbmV4cG9ydCAqIGZyb20gJy4vbWlkZGxld2FyZS1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC1taWRkbGV3YXJlJztcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2stcXVvdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1aXJlLW9yZy1pZCc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1jb250ZXh0JztcblxuLy8gQXBwIGZhY3RvcnlcbmV4cG9ydCAqIGZyb20gJy4vYXBwLWZhY3RvcnknO1xuXG4vLyBIZWFsdGgtY2hlY2sgaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWFsdGgtY2hlY2tzJztcblxuLy8gTW9uZ29EQiBjb25uZWN0aW9uIGhlbHBlciAoZGVwZW5kZW5jeS1pbmplY3RlZCBtb25nb29zZSlcbmV4cG9ydCAqIGZyb20gJy4vbW9uZ28tY29ubmVjdCc7XG5cbi8vIFF1b3RhIGhlbHBlcnNcbmV4cG9ydCAqIGZyb20gJy4vcXVvdGEtaGVscGVycyc7XG5cbi8vIElkZW1wb3RlbmN5XG5leHBvcnQgKiBmcm9tICcuL2lkZW1wb3RlbmN5LW1pZGRsZXdhcmUnO1xuXG4vLyBPYnNlcnZhYmlsaXR5XG5leHBvcnQgKiBmcm9tICcuL3RyYWNpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRyaWNzJztcblxuLy8gU2VydmVyIHV0aWxpdGllc1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2ZXInO1xuXG4vLyBSb3V0ZSB3cmFwcGVyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLXdyYXBwZXInO1xuXG4vLyBSZXF1ZXN0L1Jlc3BvbnNlIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL3JlcXVlc3QtdHlwZXMnO1xuIl19
28
+ export * from './request-types.js';
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsYUFBYTtBQUNiLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLGNBQWM7QUFDZCxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLHVCQUF1QjtBQUN2QixjQUFjLG9CQUFvQixDQUFDO0FBRW5DLDJEQUEyRDtBQUMzRCxjQUFjLG9CQUFvQixDQUFDO0FBRW5DLGdCQUFnQjtBQUNoQixjQUFjLG9CQUFvQixDQUFDO0FBRW5DLGNBQWM7QUFDZCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLGdCQUFnQjtBQUNoQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUU3QixtQkFBbUI7QUFDbkIsY0FBYyxhQUFhLENBQUM7QUFFNUIsZ0JBQWdCO0FBQ2hCLGNBQWMsb0JBQW9CLENBQUM7QUFFbkMseUJBQXlCO0FBQ3pCLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gTWlkZGxld2FyZVxuZXhwb3J0ICogZnJvbSAnLi9taWRkbGV3YXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWlkZGxld2FyZS1mYWN0b3J5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC1taWRkbGV3YXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2stcXVvdGEuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1aXJlLW9yZy1pZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1jb250ZXh0LmpzJztcblxuLy8gQXBwIGZhY3RvcnlcbmV4cG9ydCAqIGZyb20gJy4vYXBwLWZhY3RvcnkuanMnO1xuXG4vLyBIZWFsdGgtY2hlY2sgaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWFsdGgtY2hlY2tzLmpzJztcblxuLy8gTW9uZ29EQiBjb25uZWN0aW9uIGhlbHBlciAoZGVwZW5kZW5jeS1pbmplY3RlZCBtb25nb29zZSlcbmV4cG9ydCAqIGZyb20gJy4vbW9uZ28tY29ubmVjdC5qcyc7XG5cbi8vIFF1b3RhIGhlbHBlcnNcbmV4cG9ydCAqIGZyb20gJy4vcXVvdGEtaGVscGVycy5qcyc7XG5cbi8vIElkZW1wb3RlbmN5XG5leHBvcnQgKiBmcm9tICcuL2lkZW1wb3RlbmN5LW1pZGRsZXdhcmUuanMnO1xuXG4vLyBPYnNlcnZhYmlsaXR5XG5leHBvcnQgKiBmcm9tICcuL3RyYWNpbmcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRyaWNzLmpzJztcblxuLy8gU2VydmVyIHV0aWxpdGllc1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2ZXIuanMnO1xuXG4vLyBSb3V0ZSB3cmFwcGVyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLXdyYXBwZXIuanMnO1xuXG4vLyBSZXF1ZXN0L1Jlc3BvbnNlIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL3JlcXVlc3QtdHlwZXMuanMnO1xuIl19
@@ -1,4 +1,4 @@
1
- import { Request, Response, NextFunction } from 'express';
1
+ import type { Request, Response, NextFunction } from 'express';
2
2
  /**
3
3
  * Express middleware that records request duration and count.
4
4
  *
@@ -1,23 +1,16 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.metricsMiddleware = metricsMiddleware;
6
- exports.metricsHandler = metricsHandler;
7
- exports.incCounter = incCounter;
8
- exports.observe = observe;
9
- exports.setGauge = setGauge;
10
- const pipeline_core_1 = require("@pipeline-builder/pipeline-core");
11
- const prom_client_1 = require("prom-client");
12
- const SERVICE_NAME = pipeline_core_1.Config.getAny('observability').serviceName;
3
+ import { Config } from '@pipeline-builder/pipeline-core';
4
+ import { Registry, collectDefaultMetrics, Counter, Histogram, Gauge } from 'prom-client';
5
+ const SERVICE_NAME = Config.getAny('observability').serviceName;
13
6
  /** Shared Prometheus registry */
14
- const register = new prom_client_1.Registry();
7
+ const register = new Registry();
15
8
  // Set default labels for all metrics
16
9
  register.setDefaultLabels({ service: SERVICE_NAME });
17
10
  // Collect default Node.js process metrics (CPU, memory, heap, event loop lag, GC)
18
- (0, prom_client_1.collectDefaultMetrics)({ register });
11
+ collectDefaultMetrics({ register });
19
12
  /** HTTP request duration histogram (seconds) */
20
- const httpRequestDuration = new prom_client_1.Histogram({
13
+ const httpRequestDuration = new Histogram({
21
14
  name: 'http_request_duration_seconds',
22
15
  help: 'Duration of HTTP requests in seconds',
23
16
  labelNames: ['method', 'route', 'status_code'],
@@ -25,7 +18,7 @@ const httpRequestDuration = new prom_client_1.Histogram({
25
18
  registers: [register],
26
19
  });
27
20
  /** HTTP request counter */
28
- const httpRequestsTotal = new prom_client_1.Counter({
21
+ const httpRequestsTotal = new Counter({
29
22
  name: 'http_requests_total',
30
23
  help: 'Total number of HTTP requests',
31
24
  labelNames: ['method', 'route', 'status_code'],
@@ -49,7 +42,7 @@ const httpRequestsTotal = new prom_client_1.Counter({
49
42
  * needed later, add a separate histogram with a coarser bucket set and
50
43
  * lower sample rate.
51
44
  */
52
- const httpRequestsByOrgTotal = new prom_client_1.Counter({
45
+ const httpRequestsByOrgTotal = new Counter({
53
46
  name: 'http_requests_by_org_total',
54
47
  help: 'Sampled per-org HTTP request count (sample rate via HTTP_METRICS_ORG_SAMPLE_RATE)',
55
48
  labelNames: ['method', 'route', 'status_code', 'org_id'],
@@ -88,7 +81,7 @@ function normalizeRoute(req) {
88
81
  * Must be registered before route handlers so `res.on('finish')` fires
89
82
  * after the response is sent.
90
83
  */
91
- function metricsMiddleware() {
84
+ export function metricsMiddleware() {
92
85
  return (req, res, next) => {
93
86
  // Skip recording the /metrics and /health endpoints themselves
94
87
  if (req.path === '/metrics' || req.path === '/health') {
@@ -123,7 +116,7 @@ function metricsMiddleware() {
123
116
  /**
124
117
  * Express handler that returns Prometheus metrics in text exposition format.
125
118
  */
126
- function metricsHandler() {
119
+ export function metricsHandler() {
127
120
  return async (_req, res) => {
128
121
  res.set('Content-Type', register.contentType);
129
122
  res.end(await register.metrics());
@@ -156,10 +149,10 @@ const businessGauges = new Map();
156
149
  * incCounter('compliance_violations_found_total', { severity: 'critical' });
157
150
  * ```
158
151
  */
159
- function incCounter(name, labels = {}, value = 1) {
152
+ export function incCounter(name, labels = {}, value = 1) {
160
153
  let counter = businessCounters.get(name);
161
154
  if (!counter) {
162
- counter = new prom_client_1.Counter({
155
+ counter = new Counter({
163
156
  name,
164
157
  help: humanizeName(name),
165
158
  labelNames: Object.keys(labels),
@@ -179,10 +172,10 @@ function incCounter(name, labels = {}, value = 1) {
179
172
  * observe('plugin_build_duration_seconds', { buildType: 'docker' }, durationSec);
180
173
  * ```
181
174
  */
182
- function observe(name, labels, value) {
175
+ export function observe(name, labels, value) {
183
176
  let hist = businessHistograms.get(name);
184
177
  if (!hist) {
185
- hist = new prom_client_1.Histogram({
178
+ hist = new Histogram({
186
179
  name,
187
180
  help: humanizeName(name),
188
181
  labelNames: Object.keys(labels),
@@ -207,10 +200,10 @@ function observe(name, labels, value) {
207
200
  * setGauge('plugin_queue_jobs', { queue: 'plugin-build', state: 'active' }, 3);
208
201
  * ```
209
202
  */
210
- function setGauge(name, labels, value) {
203
+ export function setGauge(name, labels, value) {
211
204
  let gauge = businessGauges.get(name);
212
205
  if (!gauge) {
213
- gauge = new prom_client_1.Gauge({
206
+ gauge = new Gauge({
214
207
  name,
215
208
  help: humanizeName(name),
216
209
  labelNames: Object.keys(labels),
@@ -226,4 +219,4 @@ function humanizeName(metricName) {
226
219
  .replace(/_/g, ' ')
227
220
  .replace(/^./, (c) => c.toUpperCase());
228
221
  }
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUE2RnRDLDhDQW9DQztBQUtELHdDQUtDO0FBK0JELGdDQVlDO0FBWUQsMEJBZ0JDO0FBYUQsNEJBWUM7QUF6T0QsbUVBQXlEO0FBRXpELDZDQUF5RjtBQUV6RixNQUFNLFlBQVksR0FBSSxzQkFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQTZCLENBQUMsV0FBVyxDQUFDO0FBRTdGLGlDQUFpQztBQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLHNCQUFRLEVBQUUsQ0FBQztBQUVoQyxxQ0FBcUM7QUFDckMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFckQsa0ZBQWtGO0FBQ2xGLElBQUEsbUNBQXFCLEVBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRXBDLGdEQUFnRDtBQUNoRCxNQUFNLG1CQUFtQixHQUFHLElBQUksdUJBQVMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsK0JBQStCO0lBQ3JDLElBQUksRUFBRSxzQ0FBc0M7SUFDNUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQVU7SUFDdkQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsMkJBQTJCO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxxQkFBTyxDQUFDO0lBQ3BDLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsSUFBSSxFQUFFLCtCQUErQjtJQUNyQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBVTtJQUN2RCxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEIsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHFCQUFPLENBQUM7SUFDekMsSUFBSSxFQUFFLDRCQUE0QjtJQUNsQyxJQUFJLEVBQUUsbUZBQW1GO0lBQ3pGLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBVTtJQUNqRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEIsQ0FBQyxDQUFDO0FBRUg7NkVBQzZFO0FBQzdFLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzVCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7SUFDckQsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxFQUFFO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDaEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDakUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsR0FBWTtJQUNsQyx1Q0FBdUM7SUFDdkMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELE9BQU8sR0FBRyxDQUFDLElBQUk7U0FDWixPQUFPLENBQUMsZ0VBQWdFLEVBQUUsS0FBSyxDQUFDO1NBQ2hGLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixpQkFBaUI7SUFDL0IsT0FBTyxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsSUFBa0IsRUFBUSxFQUFFO1FBQy9ELCtEQUErRDtRQUMvRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEQsSUFBSSxFQUFFLENBQUM7WUFDUCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTdDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2dCQUNsQixLQUFLO2dCQUNMLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQzthQUNwQyxDQUFDO1lBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ1osaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTlCLHNDQUFzQztZQUN0QyxtRUFBbUU7WUFDbkUsa0NBQWtDO1lBQ2xDLHNCQUFzQjtZQUN0QixxRUFBcUU7WUFDckUscUVBQXFFO1lBQ3JFLDJEQUEyRDtZQUMzRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQztZQUN2QyxJQUFJLEtBQUssSUFBSSxlQUFlLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztnQkFDcEUsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjO0lBQzVCLE9BQU8sS0FBSyxFQUFFLElBQWEsRUFBRSxHQUFhLEVBQWlCLEVBQUU7UUFDM0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsOEVBQThFO0FBQzlFLDRCQUE0QjtBQUM1QixFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSxpREFBaUQ7QUFDakQsOEVBQThFO0FBRTlFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7QUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztBQUNoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztBQUV4RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLElBQVksRUFBRSxTQUFpQyxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUM7SUFDckYsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxJQUFJLHFCQUFPLENBQUM7WUFDcEIsSUFBSTtZQUNKLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3hCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMvQixTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxJQUFZLEVBQUUsTUFBOEIsRUFBRSxLQUFhO0lBQ2pGLElBQUksSUFBSSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixJQUFJLEdBQUcsSUFBSSx1QkFBUyxDQUFDO1lBQ25CLElBQUk7WUFDSixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0IseUVBQXlFO1lBQ3pFLHFFQUFxRTtZQUNyRSwrQ0FBK0M7WUFDL0MsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7WUFDaEUsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLElBQVksRUFBRSxNQUE4QixFQUFFLEtBQWE7SUFDbEYsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDO1lBQ2hCLElBQUk7WUFDSixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0IsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsVUFBa0I7SUFDdEMsNERBQTREO0lBQzVELE9BQU8sVUFBVTtTQUNkLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1NBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBSZWdpc3RyeSwgY29sbGVjdERlZmF1bHRNZXRyaWNzLCBDb3VudGVyLCBIaXN0b2dyYW0sIEdhdWdlIH0gZnJvbSAncHJvbS1jbGllbnQnO1xuXG5jb25zdCBTRVJWSUNFX05BTUUgPSAoQ29uZmlnLmdldEFueSgnb2JzZXJ2YWJpbGl0eScpIGFzIHsgc2VydmljZU5hbWU6IHN0cmluZyB9KS5zZXJ2aWNlTmFtZTtcblxuLyoqIFNoYXJlZCBQcm9tZXRoZXVzIHJlZ2lzdHJ5ICovXG5jb25zdCByZWdpc3RlciA9IG5ldyBSZWdpc3RyeSgpO1xuXG4vLyBTZXQgZGVmYXVsdCBsYWJlbHMgZm9yIGFsbCBtZXRyaWNzXG5yZWdpc3Rlci5zZXREZWZhdWx0TGFiZWxzKHsgc2VydmljZTogU0VSVklDRV9OQU1FIH0pO1xuXG4vLyBDb2xsZWN0IGRlZmF1bHQgTm9kZS5qcyBwcm9jZXNzIG1ldHJpY3MgKENQVSwgbWVtb3J5LCBoZWFwLCBldmVudCBsb29wIGxhZywgR0MpXG5jb2xsZWN0RGVmYXVsdE1ldHJpY3MoeyByZWdpc3RlciB9KTtcblxuLyoqIEhUVFAgcmVxdWVzdCBkdXJhdGlvbiBoaXN0b2dyYW0gKHNlY29uZHMpICovXG5jb25zdCBodHRwUmVxdWVzdER1cmF0aW9uID0gbmV3IEhpc3RvZ3JhbSh7XG4gIG5hbWU6ICdodHRwX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kcycsXG4gIGhlbHA6ICdEdXJhdGlvbiBvZiBIVFRQIHJlcXVlc3RzIGluIHNlY29uZHMnLFxuICBsYWJlbE5hbWVzOiBbJ21ldGhvZCcsICdyb3V0ZScsICdzdGF0dXNfY29kZSddIGFzIGNvbnN0LFxuICBidWNrZXRzOiBbMC4wMDUsIDAuMDEsIDAuMDI1LCAwLjA1LCAwLjEsIDAuMjUsIDAuNSwgMSwgMi41LCA1LCAxMF0sXG4gIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbn0pO1xuXG4vKiogSFRUUCByZXF1ZXN0IGNvdW50ZXIgKi9cbmNvbnN0IGh0dHBSZXF1ZXN0c1RvdGFsID0gbmV3IENvdW50ZXIoe1xuICBuYW1lOiAnaHR0cF9yZXF1ZXN0c190b3RhbCcsXG4gIGhlbHA6ICdUb3RhbCBudW1iZXIgb2YgSFRUUCByZXF1ZXN0cycsXG4gIGxhYmVsTmFtZXM6IFsnbWV0aG9kJywgJ3JvdXRlJywgJ3N0YXR1c19jb2RlJ10gYXMgY29uc3QsXG4gIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbn0pO1xuXG4vKipcbiAqIFBlci1vcmcgSFRUUCByZXF1ZXN0IGNvdW50ZXIg4oCUIFNBTVBMRUQgdG8ga2VlcCBQcm9tZXRoZXVzIGNhcmRpbmFsaXR5XG4gKiB1bmRlciBjb250cm9sLiBDYXJkaW5hbGl0eSBvZiBgb3JnX2lkICogbWV0aG9kICogcm91dGUgKiBzdGF0dXNfY29kZWBcbiAqIGdyb3dzIG11bHRpcGxpY2F0aXZlbHk7IHdpdGggTiBvcmdzICogNTAgcm91dGVzICogNSBzdGF0dXNfY29kZXMgdGhhdCdzXG4gKiAyNTDDl04gc2VyaWVzLiBXZSBzYW1wbGUgMS1pbi1OIHJlcXVlc3RzIChjb25maWd1cmFibGUgdmlhXG4gKiBgSFRUUF9NRVRSSUNTX09SR19TQU1QTEVfUkFURWAsIGRlZmF1bHQgMS4wID0gZXZlcnkgcmVxdWVzdCkuXG4gKlxuICogT3BlcmF0b3JzIGFuc3dlciBcIndoYXQncyBvcmcgWCdzIHA5OT9cIiB2aWEgc2VwYXJhdGUgcGVyLW9yZyBoaXN0b2dyYW1zXG4gKiBzY3JhcGVkIGF0IGEgbG93ZXIgcmF0ZSwgT1IgdmlhIExva2kgTG9nUUwgcXVlcmllcyBhZ2FpbnN0IHRoZVxuICogdW5zYW1wbGVkIGFjY2Vzcy1sb2cgc3RyZWFtLiBUaGlzIGNvdW50ZXIgaXMgdGhlIGZhc3QtcGF0aCBcIm5vaXN5XG4gKiBuZWlnaGJvciBkZXRlY3Rpb25cIiDigJQgb3BlcmF0b3JzIGFsZXJ0IHdoZW4gb25lIG9yZydzIHJlcXVlc3QgcmF0ZVxuICogZGV2aWF0ZXMgZnJvbSB0aGUgZmxlZXQgbWVkaWFuLlxuICpcbiAqIE5PVCBhIGhpc3RvZ3JhbTogaGlzdG9ncmFtIGxhYmVsIGNhcmRpbmFsaXR5IGlzIGV2ZW4gbW9yZSBzZW5zaXRpdmVcbiAqIChlYWNoIGJ1Y2tldCBpcyBhIHNlcGFyYXRlIHNlcmllcykuIElmIHBlci1vcmcgbGF0ZW5jeSBwZXJjZW50aWxlcyBhcmVcbiAqIG5lZWRlZCBsYXRlciwgYWRkIGEgc2VwYXJhdGUgaGlzdG9ncmFtIHdpdGggYSBjb2Fyc2VyIGJ1Y2tldCBzZXQgYW5kXG4gKiBsb3dlciBzYW1wbGUgcmF0ZS5cbiAqL1xuY29uc3QgaHR0cFJlcXVlc3RzQnlPcmdUb3RhbCA9IG5ldyBDb3VudGVyKHtcbiAgbmFtZTogJ2h0dHBfcmVxdWVzdHNfYnlfb3JnX3RvdGFsJyxcbiAgaGVscDogJ1NhbXBsZWQgcGVyLW9yZyBIVFRQIHJlcXVlc3QgY291bnQgKHNhbXBsZSByYXRlIHZpYSBIVFRQX01FVFJJQ1NfT1JHX1NBTVBMRV9SQVRFKScsXG4gIGxhYmVsTmFtZXM6IFsnbWV0aG9kJywgJ3JvdXRlJywgJ3N0YXR1c19jb2RlJywgJ29yZ19pZCddIGFzIGNvbnN0LFxuICByZWdpc3RlcnM6IFtyZWdpc3Rlcl0sXG59KTtcblxuLyoqIFNhbXBsZSByYXRlIGZvciB0aGUgcGVyLW9yZyBjb3VudGVyLiAxLjAgPSBldmVyeSByZXF1ZXN0LCAwLjAgPSBkaXNhYmxlZC5cbiAqICBQYXJzZWQgb25jZSBhdCBtb2R1bGUgbG9hZCDigJQgb3BlcmF0b3JzIHR1bmUgYnkgcmVzdGFydGluZyB0aGUgc2VydmljZS4gKi9cbmNvbnN0IE9SR19TQU1QTEVfUkFURSA9ICgoKSA9PiB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LkhUVFBfTUVUUklDU19PUkdfU0FNUExFX1JBVEU7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gMS4wO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHJhdyk7XG4gIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VkKSB8fCBwYXJzZWQgPCAwIHx8IHBhcnNlZCA+IDEpIHJldHVybiAxLjA7XG4gIHJldHVybiBwYXJzZWQ7XG59KSgpO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbiBFeHByZXNzIHJvdXRlIHBhdGggdG8gcHJldmVudCBsYWJlbCBjYXJkaW5hbGl0eSBleHBsb3Npb24uXG4gKlxuICogVXNlcyBFeHByZXNzJ3MgbWF0Y2hlZCByb3V0ZSBwYXR0ZXJuIChlLmcuIGAvcGx1Z2lucy86aWRgKSB3aGVuIGF2YWlsYWJsZSxcbiAqIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHRoZSByYXcgcGF0aCB3aXRoIFVVSUQvbnVtZXJpYyBzZWdtZW50cyByZXBsYWNlZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUm91dGUocmVxOiBSZXF1ZXN0KTogc3RyaW5nIHtcbiAgLy8gUHJlZmVyIEV4cHJlc3MgbWF0Y2hlZCByb3V0ZSBwYXR0ZXJuXG4gIGlmIChyZXEucm91dGU/LnBhdGgpIHtcbiAgICByZXR1cm4gcmVxLmJhc2VVcmwgKyByZXEucm91dGUucGF0aDtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiByZXBsYWNlIFVVSURzIGFuZCBudW1lcmljIElEcyB3aXRoIDppZFxuICByZXR1cm4gcmVxLnBhdGhcbiAgICAucmVwbGFjZSgvWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9L2dpLCAnOmlkJylcbiAgICAucmVwbGFjZSgvXFwvXFxkKyg/PVxcL3wkKS9nLCAnLzppZCcpO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgbWlkZGxld2FyZSB0aGF0IHJlY29yZHMgcmVxdWVzdCBkdXJhdGlvbiBhbmQgY291bnQuXG4gKlxuICogTXVzdCBiZSByZWdpc3RlcmVkIGJlZm9yZSByb3V0ZSBoYW5kbGVycyBzbyBgcmVzLm9uKCdmaW5pc2gnKWAgZmlyZXNcbiAqIGFmdGVyIHRoZSByZXNwb25zZSBpcyBzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0cmljc01pZGRsZXdhcmUoKSB7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICAvLyBTa2lwIHJlY29yZGluZyB0aGUgL21ldHJpY3MgYW5kIC9oZWFsdGggZW5kcG9pbnRzIHRoZW1zZWx2ZXNcbiAgICBpZiAocmVxLnBhdGggPT09ICcvbWV0cmljcycgfHwgcmVxLnBhdGggPT09ICcvaGVhbHRoJykge1xuICAgICAgbmV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZCA9IGh0dHBSZXF1ZXN0RHVyYXRpb24uc3RhcnRUaW1lcigpO1xuXG4gICAgcmVzLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IG5vcm1hbGl6ZVJvdXRlKHJlcSk7XG4gICAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIHN0YXR1c19jb2RlOiBTdHJpbmcocmVzLnN0YXR1c0NvZGUpLFxuICAgICAgfTtcblxuICAgICAgZW5kKGxhYmVscyk7XG4gICAgICBodHRwUmVxdWVzdHNUb3RhbC5pbmMobGFiZWxzKTtcblxuICAgICAgLy8gUGVyLW9yZyBzYW1wbGVkIGNvdW50ZXIuIFNraXAgd2hlbjpcbiAgICAgIC8vICAgLSBubyBvcmcgY29udGV4dCBvbiB0aGUgcmVxdWVzdCAoYW5vbnltb3VzIC8gaGVhbHRoIGVuZHBvaW50cylcbiAgICAgIC8vICAgLSBzYW1wbGUgcmF0ZSBpcyAwIChkaXNhYmxlZClcbiAgICAgIC8vICAgLSBkaWNlIHJvbGwgZmFpbHNcbiAgICAgIC8vIFVzaW5nIE1hdGgucmFuZG9tIGZvciB0aGUgc2FtcGxlciDigJQgZm9yIHVuYmlhc2VkIGxvdy1yYXRlIHNhbXBsaW5nXG4gICAgICAvLyBhIGRldGVybWluaXN0aWMgcGVyLXJlcXVlc3QgaGFzaCB3b3VsZCBiZSBtb3JlIHVuaWZvcm0sIGJ1dCBhdCB0aGVcbiAgICAgIC8vIGRlZmF1bHQgcmF0ZSBvZiAxLjAgZXZlcnkgcmVxdWVzdCBsYW5kcyBzbyB0aGlzIGlzIGZpbmUuXG4gICAgICBjb25zdCBvcmdJZCA9IHJlcS51c2VyPy5vcmdhbml6YXRpb25JZDtcbiAgICAgIGlmIChvcmdJZCAmJiBPUkdfU0FNUExFX1JBVEUgPiAwICYmIE1hdGgucmFuZG9tKCkgPCBPUkdfU0FNUExFX1JBVEUpIHtcbiAgICAgICAgaHR0cFJlcXVlc3RzQnlPcmdUb3RhbC5pbmMoeyAuLi5sYWJlbHMsIG9yZ19pZDogb3JnSWQgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBuZXh0KCk7XG4gIH07XG59XG5cbi8qKlxuICogRXhwcmVzcyBoYW5kbGVyIHRoYXQgcmV0dXJucyBQcm9tZXRoZXVzIG1ldHJpY3MgaW4gdGV4dCBleHBvc2l0aW9uIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldHJpY3NIYW5kbGVyKCkge1xuICByZXR1cm4gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCByZWdpc3Rlci5jb250ZW50VHlwZSk7XG4gICAgcmVzLmVuZChhd2FpdCByZWdpc3Rlci5tZXRyaWNzKCkpO1xuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJ1c2luZXNzIC8gZG9tYWluIG1ldHJpY3Ncbi8vXG4vLyBTZXJ2aWNlcyBzaG91bGQgZW1pdCBjb3VudGVycyBmb3IgdGhlIHRoaW5ncyBvcGVyYXRvcnMgYWN0dWFsbHkgY2FyZSBhYm91dFxuLy8gKHBpcGVsaW5lcyBnZW5lcmF0ZWQsIHBsdWdpbiBidWlsZHMgY29tcGxldGVkLCBjb21wbGlhbmNlIHZpb2xhdGlvbnMsXG4vLyBBSSB0b2tlbnMgY29uc3VtZWQpIOKAlCBub3QganVzdCBIVFRQIHRyYWZmaWMuIFRoZSBoZWxwZXJzIGJlbG93IHJlZ2lzdGVyXG4vLyBjb3VudGVycyBsYXppbHkgb24gdGhlIHNoYXJlZCByZWdpc3RyeSBzbyBtdWx0aXBsZSBzZXJ2aWNlcyBjYW4gY2FsbFxuLy8gYGluY0NvdW50ZXIoJ3BsdWdpbl9idWlsZHNfdG90YWwnLCB7IHN0YXR1czogJ2NvbXBsZXRlZCcgfSlgIHdpdGhvdXRcbi8vIHdvcnJ5aW5nIGFib3V0IGRvdWJsZS1yZWdpc3RyYXRpb24uXG4vL1xuLy8gTmFtaW5nIGNvbnZlbnRpb246IGA8ZG9tYWluPl88bm91bj5fdG90YWxgIGZvciBjb3VudGVycywgYF9zZWNvbmRzYCBmb3Jcbi8vIGhpc3RvZ3JhbXMg4oCUIG1hdGNoZXMgUHJvbWV0aGV1cyBiZXN0LXByYWN0aWNlLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IGJ1c2luZXNzQ291bnRlcnMgPSBuZXcgTWFwPHN0cmluZywgQ291bnRlcjxzdHJpbmc+PigpO1xuY29uc3QgYnVzaW5lc3NIaXN0b2dyYW1zID0gbmV3IE1hcDxzdHJpbmcsIEhpc3RvZ3JhbTxzdHJpbmc+PigpO1xuY29uc3QgYnVzaW5lc3NHYXVnZXMgPSBuZXcgTWFwPHN0cmluZywgR2F1Z2U8c3RyaW5nPj4oKTtcblxuLyoqXG4gKiBJbmNyZW1lbnQgYSBidXNpbmVzcyBjb3VudGVyLCBjcmVhdGluZyBpdCBvbiBmaXJzdCB1c2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGluY0NvdW50ZXIoJ3BpcGVsaW5lc19nZW5lcmF0ZWRfdG90YWwnLCB7IHByb3ZpZGVyOiAnYW50aHJvcGljJyB9KTtcbiAqIGluY0NvdW50ZXIoJ3BsdWdpbl9idWlsZHNfdG90YWwnLCB7IHN0YXR1czogJ2NvbXBsZXRlZCcgfSk7XG4gKiBpbmNDb3VudGVyKCdxdW90YV90aHJlc2hvbGRfY3Jvc3NlZF90b3RhbCcsIHsgdHlwZTogJ2FpQ2FsbHMnLCB0aWVyOiAncHJvJyB9KTtcbiAqIGluY0NvdW50ZXIoJ2NvbXBsaWFuY2VfdmlvbGF0aW9uc19mb3VuZF90b3RhbCcsIHsgc2V2ZXJpdHk6ICdjcml0aWNhbCcgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY0NvdW50ZXIobmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSwgdmFsdWUgPSAxKTogdm9pZCB7XG4gIGxldCBjb3VudGVyID0gYnVzaW5lc3NDb3VudGVycy5nZXQobmFtZSk7XG4gIGlmICghY291bnRlcikge1xuICAgIGNvdW50ZXIgPSBuZXcgQ291bnRlcih7XG4gICAgICBuYW1lLFxuICAgICAgaGVscDogaHVtYW5pemVOYW1lKG5hbWUpLFxuICAgICAgbGFiZWxOYW1lczogT2JqZWN0LmtleXMobGFiZWxzKSxcbiAgICAgIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbiAgICB9KTtcbiAgICBidXNpbmVzc0NvdW50ZXJzLnNldChuYW1lLCBjb3VudGVyKTtcbiAgfVxuICBjb3VudGVyLmluYyhsYWJlbHMsIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYW4gb2JzZXJ2YXRpb24gb24gYSBidXNpbmVzcyBoaXN0b2dyYW0sIGNyZWF0aW5nIGl0IG9uIGZpcnN0IHVzZS5cbiAqIFVzZSBmb3IgZHVyYXRpb25zLCBzaXplcywgYW55dGhpbmcgd2hlcmUgcGVyY2VudGlsZXMgbWF0dGVyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBvYnNlcnZlKCdhaV9nZW5lcmF0aW9uX2R1cmF0aW9uX3NlY29uZHMnLCB7IHByb3ZpZGVyOiAnYW50aHJvcGljJywgbW9kZWw6ICdzb25uZXQnIH0sIGR1cmF0aW9uU2VjKTtcbiAqIG9ic2VydmUoJ3BsdWdpbl9idWlsZF9kdXJhdGlvbl9zZWNvbmRzJywgeyBidWlsZFR5cGU6ICdkb2NrZXInIH0sIGR1cmF0aW9uU2VjKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZShuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICBsZXQgaGlzdCA9IGJ1c2luZXNzSGlzdG9ncmFtcy5nZXQobmFtZSk7XG4gIGlmICghaGlzdCkge1xuICAgIGhpc3QgPSBuZXcgSGlzdG9ncmFtKHtcbiAgICAgIG5hbWUsXG4gICAgICBoZWxwOiBodW1hbml6ZU5hbWUobmFtZSksXG4gICAgICBsYWJlbE5hbWVzOiBPYmplY3Qua2V5cyhsYWJlbHMpLFxuICAgICAgLy8gRGVmYXVsdCBidWNrZXRzIHRhcmdldCBzdWItc2Vjb25kIHRocm91Z2ggc2V2ZXJhbC1taW51dGUgb2JzZXJ2YXRpb25zLlxuICAgICAgLy8gT3ZlcnJpZGUgYnkgcmVnaXN0ZXJpbmcgdGhlIGhpc3RvZ3JhbSBleHBsaWNpdGx5IGJlZm9yZSBmaXJzdCBjYWxsXG4gICAgICAvLyBpZiB5b3UgbmVlZCBhIGRpZmZlcmVudCBidWNrZXQgZGlzdHJpYnV0aW9uLlxuICAgICAgYnVja2V0czogWzAuMDUsIDAuMSwgMC4yNSwgMC41LCAxLCAyLjUsIDUsIDEwLCAzMCwgNjAsIDEyMCwgMzAwXSxcbiAgICAgIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbiAgICB9KTtcbiAgICBidXNpbmVzc0hpc3RvZ3JhbXMuc2V0KG5hbWUsIGhpc3QpO1xuICB9XG4gIGhpc3Qub2JzZXJ2ZShsYWJlbHMsIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHZhbHVlIG9mIGEgYnVzaW5lc3MgZ2F1Z2UsIGNyZWF0aW5nIGl0IG9uIGZpcnN0IHVzZS4gVXNlIGZvclxuICogcG9pbnQtaW4tdGltZSBvYnNlcnZhdGlvbnMgc2FtcGxlZCBieSBhIHNjcmFwZXIg4oCUIHF1ZXVlIGRlcHRoLCBhY3RpdmVcbiAqIGNvbm5lY3Rpb24gY291bnRzLCBpbi1mbGlnaHQgcmVxdWVzdHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNldEdhdWdlKCdwbHVnaW5fcXVldWVfam9icycsIHsgcXVldWU6ICdwbHVnaW4tYnVpbGQnLCBzdGF0ZTogJ3dhaXRpbmcnIH0sIDEyKTtcbiAqIHNldEdhdWdlKCdwbHVnaW5fcXVldWVfam9icycsIHsgcXVldWU6ICdwbHVnaW4tYnVpbGQnLCBzdGF0ZTogJ2FjdGl2ZScgfSwgMyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEdhdWdlKG5hbWU6IHN0cmluZywgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gIGxldCBnYXVnZSA9IGJ1c2luZXNzR2F1Z2VzLmdldChuYW1lKTtcbiAgaWYgKCFnYXVnZSkge1xuICAgIGdhdWdlID0gbmV3IEdhdWdlKHtcbiAgICAgIG5hbWUsXG4gICAgICBoZWxwOiBodW1hbml6ZU5hbWUobmFtZSksXG4gICAgICBsYWJlbE5hbWVzOiBPYmplY3Qua2V5cyhsYWJlbHMpLFxuICAgICAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxuICAgIH0pO1xuICAgIGJ1c2luZXNzR2F1Z2VzLnNldChuYW1lLCBnYXVnZSk7XG4gIH1cbiAgZ2F1Z2Uuc2V0KGxhYmVscywgdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBodW1hbml6ZU5hbWUobWV0cmljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gYHBpcGVsaW5lc19nZW5lcmF0ZWRfdG90YWxgIOKGkiBcIlBpcGVsaW5lcyBnZW5lcmF0ZWQgdG90YWxcIlxuICByZXR1cm4gbWV0cmljTmFtZVxuICAgIC5yZXBsYWNlKC9fL2csICcgJylcbiAgICAucmVwbGFjZSgvXi4vLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKTtcbn1cbiJdfQ==
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpGLE1BQU0sWUFBWSxHQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUE2QixDQUFDLFdBQVcsQ0FBQztBQUU3RixpQ0FBaUM7QUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUVoQyxxQ0FBcUM7QUFDckMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFckQsa0ZBQWtGO0FBQ2xGLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUVwQyxnREFBZ0Q7QUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsK0JBQStCO0lBQ3JDLElBQUksRUFBRSxzQ0FBc0M7SUFDNUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQVU7SUFDdkQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsMkJBQTJCO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUM7SUFDcEMsSUFB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QyxJQUFZLEVBQUUsTUFBOEIsRUFBRSxLQUFhO0lBQ2xGLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDO1lBQ2hCLElBQUk7WUFDSixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0IsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsVUFBa0I7SUFDdEMsNERBQTREO0lBQzVELE9BQU8sVUFBVTtTQUNkLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1NBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFJlZ2lzdHJ5LCBjb2xsZWN0RGVmYXVsdE1ldHJpY3MsIENvdW50ZXIsIEhpc3RvZ3JhbSwgR2F1Z2UgfSBmcm9tICdwcm9tLWNsaWVudCc7XG5cbmNvbnN0IFNFUlZJQ0VfTkFNRSA9IChDb25maWcuZ2V0QW55KCdvYnNlcnZhYmlsaXR5JykgYXMgeyBzZXJ2aWNlTmFtZTogc3RyaW5nIH0pLnNlcnZpY2VOYW1lO1xuXG4vKiogU2hhcmVkIFByb21ldGhldXMgcmVnaXN0cnkgKi9cbmNvbnN0IHJlZ2lzdGVyID0gbmV3IFJlZ2lzdHJ5KCk7XG5cbi8vIFNldCBkZWZhdWx0IGxhYmVscyBmb3IgYWxsIG1ldHJpY3NcbnJlZ2lzdGVyLnNldERlZmF1bHRMYWJlbHMoeyBzZXJ2aWNlOiBTRVJWSUNFX05BTUUgfSk7XG5cbi8vIENvbGxlY3QgZGVmYXVsdCBOb2RlLmpzIHByb2Nlc3MgbWV0cmljcyAoQ1BVLCBtZW1vcnksIGhlYXAsIGV2ZW50IGxvb3AgbGFnLCBHQylcbmNvbGxlY3REZWZhdWx0TWV0cmljcyh7IHJlZ2lzdGVyIH0pO1xuXG4vKiogSFRUUCByZXF1ZXN0IGR1cmF0aW9uIGhpc3RvZ3JhbSAoc2Vjb25kcykgKi9cbmNvbnN0IGh0dHBSZXF1ZXN0RHVyYXRpb24gPSBuZXcgSGlzdG9ncmFtKHtcbiAgbmFtZTogJ2h0dHBfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzJyxcbiAgaGVscDogJ0R1cmF0aW9uIG9mIEhUVFAgcmVxdWVzdHMgaW4gc2Vjb25kcycsXG4gIGxhYmVsTmFtZXM6IFsnbWV0aG9kJywgJ3JvdXRlJywgJ3N0YXR1c19jb2RlJ10gYXMgY29uc3QsXG4gIGJ1Y2tldHM6IFswLjAwNSwgMC4wMSwgMC4wMjUsIDAuMDUsIDAuMSwgMC4yNSwgMC41LCAxLCAyLjUsIDUsIDEwXSxcbiAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxufSk7XG5cbi8qKiBIVFRQIHJlcXVlc3QgY291bnRlciAqL1xuY29uc3QgaHR0cFJlcXVlc3RzVG90YWwgPSBuZXcgQ291bnRlcih7XG4gIG5hbWU6ICdodHRwX3JlcXVlc3RzX3RvdGFsJyxcbiAgaGVscDogJ1RvdGFsIG51bWJlciBvZiBIVFRQIHJlcXVlc3RzJyxcbiAgbGFiZWxOYW1lczogWydtZXRob2QnLCAncm91dGUnLCAnc3RhdHVzX2NvZGUnXSBhcyBjb25zdCxcbiAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxufSk7XG5cbi8qKlxuICogUGVyLW9yZyBIVFRQIHJlcXVlc3QgY291bnRlciDigJQgU0FNUExFRCB0byBrZWVwIFByb21ldGhldXMgY2FyZGluYWxpdHlcbiAqIHVuZGVyIGNvbnRyb2wuIENhcmRpbmFsaXR5IG9mIGBvcmdfaWQgKiBtZXRob2QgKiByb3V0ZSAqIHN0YXR1c19jb2RlYFxuICogZ3Jvd3MgbXVsdGlwbGljYXRpdmVseTsgd2l0aCBOIG9yZ3MgKiA1MCByb3V0ZXMgKiA1IHN0YXR1c19jb2RlcyB0aGF0J3NcbiAqIDI1MMOXTiBzZXJpZXMuIFdlIHNhbXBsZSAxLWluLU4gcmVxdWVzdHMgKGNvbmZpZ3VyYWJsZSB2aWFcbiAqIGBIVFRQX01FVFJJQ1NfT1JHX1NBTVBMRV9SQVRFYCwgZGVmYXVsdCAxLjAgPSBldmVyeSByZXF1ZXN0KS5cbiAqXG4gKiBPcGVyYXRvcnMgYW5zd2VyIFwid2hhdCdzIG9yZyBYJ3MgcDk5P1wiIHZpYSBzZXBhcmF0ZSBwZXItb3JnIGhpc3RvZ3JhbXNcbiAqIHNjcmFwZWQgYXQgYSBsb3dlciByYXRlLCBPUiB2aWEgTG9raSBMb2dRTCBxdWVyaWVzIGFnYWluc3QgdGhlXG4gKiB1bnNhbXBsZWQgYWNjZXNzLWxvZyBzdHJlYW0uIFRoaXMgY291bnRlciBpcyB0aGUgZmFzdC1wYXRoIFwibm9pc3lcbiAqIG5laWdoYm9yIGRldGVjdGlvblwiIOKAlCBvcGVyYXRvcnMgYWxlcnQgd2hlbiBvbmUgb3JnJ3MgcmVxdWVzdCByYXRlXG4gKiBkZXZpYXRlcyBmcm9tIHRoZSBmbGVldCBtZWRpYW4uXG4gKlxuICogTk9UIGEgaGlzdG9ncmFtOiBoaXN0b2dyYW0gbGFiZWwgY2FyZGluYWxpdHkgaXMgZXZlbiBtb3JlIHNlbnNpdGl2ZVxuICogKGVhY2ggYnVja2V0IGlzIGEgc2VwYXJhdGUgc2VyaWVzKS4gSWYgcGVyLW9yZyBsYXRlbmN5IHBlcmNlbnRpbGVzIGFyZVxuICogbmVlZGVkIGxhdGVyLCBhZGQgYSBzZXBhcmF0ZSBoaXN0b2dyYW0gd2l0aCBhIGNvYXJzZXIgYnVja2V0IHNldCBhbmRcbiAqIGxvd2VyIHNhbXBsZSByYXRlLlxuICovXG5jb25zdCBodHRwUmVxdWVzdHNCeU9yZ1RvdGFsID0gbmV3IENvdW50ZXIoe1xuICBuYW1lOiAnaHR0cF9yZXF1ZXN0c19ieV9vcmdfdG90YWwnLFxuICBoZWxwOiAnU2FtcGxlZCBwZXItb3JnIEhUVFAgcmVxdWVzdCBjb3VudCAoc2FtcGxlIHJhdGUgdmlhIEhUVFBfTUVUUklDU19PUkdfU0FNUExFX1JBVEUpJyxcbiAgbGFiZWxOYW1lczogWydtZXRob2QnLCAncm91dGUnLCAnc3RhdHVzX2NvZGUnLCAnb3JnX2lkJ10gYXMgY29uc3QsXG4gIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbn0pO1xuXG4vKiogU2FtcGxlIHJhdGUgZm9yIHRoZSBwZXItb3JnIGNvdW50ZXIuIDEuMCA9IGV2ZXJ5IHJlcXVlc3QsIDAuMCA9IGRpc2FibGVkLlxuICogIFBhcnNlZCBvbmNlIGF0IG1vZHVsZSBsb2FkIOKAlCBvcGVyYXRvcnMgdHVuZSBieSByZXN0YXJ0aW5nIHRoZSBzZXJ2aWNlLiAqL1xuY29uc3QgT1JHX1NBTVBMRV9SQVRFID0gKCgpID0+IHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnYuSFRUUF9NRVRSSUNTX09SR19TQU1QTEVfUkFURTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycpIHJldHVybiAxLjA7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQocmF3KTtcbiAgaWYgKE51bWJlci5pc05hTihwYXJzZWQpIHx8IHBhcnNlZCA8IDAgfHwgcGFyc2VkID4gMSkgcmV0dXJuIDEuMDtcbiAgcmV0dXJuIHBhcnNlZDtcbn0pKCk7XG5cbi8qKlxuICogTm9ybWFsaXplIGFuIEV4cHJlc3Mgcm91dGUgcGF0aCB0byBwcmV2ZW50IGxhYmVsIGNhcmRpbmFsaXR5IGV4cGxvc2lvbi5cbiAqXG4gKiBVc2VzIEV4cHJlc3MncyBtYXRjaGVkIHJvdXRlIHBhdHRlcm4gKGUuZy4gYC9wbHVnaW5zLzppZGApIHdoZW4gYXZhaWxhYmxlLFxuICogb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBwYXRoIHdpdGggVVVJRC9udW1lcmljIHNlZ21lbnRzIHJlcGxhY2VkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSb3V0ZShyZXE6IFJlcXVlc3QpOiBzdHJpbmcge1xuICAvLyBQcmVmZXIgRXhwcmVzcyBtYXRjaGVkIHJvdXRlIHBhdHRlcm5cbiAgaWYgKHJlcS5yb3V0ZT8ucGF0aCkge1xuICAgIHJldHVybiByZXEuYmFzZVVybCArIHJlcS5yb3V0ZS5wYXRoO1xuICB9XG5cbiAgLy8gRmFsbGJhY2s6IHJlcGxhY2UgVVVJRHMgYW5kIG51bWVyaWMgSURzIHdpdGggOmlkXG4gIHJldHVybiByZXEucGF0aFxuICAgIC5yZXBsYWNlKC9bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0vZ2ksICc6aWQnKVxuICAgIC5yZXBsYWNlKC9cXC9cXGQrKD89XFwvfCQpL2csICcvOmlkJyk7XG59XG5cbi8qKlxuICogRXhwcmVzcyBtaWRkbGV3YXJlIHRoYXQgcmVjb3JkcyByZXF1ZXN0IGR1cmF0aW9uIGFuZCBjb3VudC5cbiAqXG4gKiBNdXN0IGJlIHJlZ2lzdGVyZWQgYmVmb3JlIHJvdXRlIGhhbmRsZXJzIHNvIGByZXMub24oJ2ZpbmlzaCcpYCBmaXJlc1xuICogYWZ0ZXIgdGhlIHJlc3BvbnNlIGlzIHNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRyaWNzTWlkZGxld2FyZSgpIHtcbiAgcmV0dXJuIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgIC8vIFNraXAgcmVjb3JkaW5nIHRoZSAvbWV0cmljcyBhbmQgL2hlYWx0aCBlbmRwb2ludHMgdGhlbXNlbHZlc1xuICAgIGlmIChyZXEucGF0aCA9PT0gJy9tZXRyaWNzJyB8fCByZXEucGF0aCA9PT0gJy9oZWFsdGgnKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW5kID0gaHR0cFJlcXVlc3REdXJhdGlvbi5zdGFydFRpbWVyKCk7XG5cbiAgICByZXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvdXRlID0gbm9ybWFsaXplUm91dGUocmVxKTtcbiAgICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgc3RhdHVzX2NvZGU6IFN0cmluZyhyZXMuc3RhdHVzQ29kZSksXG4gICAgICB9O1xuXG4gICAgICBlbmQobGFiZWxzKTtcbiAgICAgIGh0dHBSZXF1ZXN0c1RvdGFsLmluYyhsYWJlbHMpO1xuXG4gICAgICAvLyBQZXItb3JnIHNhbXBsZWQgY291bnRlci4gU2tpcCB3aGVuOlxuICAgICAgLy8gICAtIG5vIG9yZyBjb250ZXh0IG9uIHRoZSByZXF1ZXN0IChhbm9ueW1vdXMgLyBoZWFsdGggZW5kcG9pbnRzKVxuICAgICAgLy8gICAtIHNhbXBsZSByYXRlIGlzIDAgKGRpc2FibGVkKVxuICAgICAgLy8gICAtIGRpY2Ugcm9sbCBmYWlsc1xuICAgICAgLy8gVXNpbmcgTWF0aC5yYW5kb20gZm9yIHRoZSBzYW1wbGVyIOKAlCBmb3IgdW5iaWFzZWQgbG93LXJhdGUgc2FtcGxpbmdcbiAgICAgIC8vIGEgZGV0ZXJtaW5pc3RpYyBwZXItcmVxdWVzdCBoYXNoIHdvdWxkIGJlIG1vcmUgdW5pZm9ybSwgYnV0IGF0IHRoZVxuICAgICAgLy8gZGVmYXVsdCByYXRlIG9mIDEuMCBldmVyeSByZXF1ZXN0IGxhbmRzIHNvIHRoaXMgaXMgZmluZS5cbiAgICAgIGNvbnN0IG9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkO1xuICAgICAgaWYgKG9yZ0lkICYmIE9SR19TQU1QTEVfUkFURSA+IDAgJiYgTWF0aC5yYW5kb20oKSA8IE9SR19TQU1QTEVfUkFURSkge1xuICAgICAgICBodHRwUmVxdWVzdHNCeU9yZ1RvdGFsLmluYyh7IC4uLmxhYmVscywgb3JnX2lkOiBvcmdJZCB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG5leHQoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIGhhbmRsZXIgdGhhdCByZXR1cm5zIFByb21ldGhldXMgbWV0cmljcyBpbiB0ZXh0IGV4cG9zaXRpb24gZm9ybWF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0cmljc0hhbmRsZXIoKSB7XG4gIHJldHVybiBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIHJlZ2lzdGVyLmNvbnRlbnRUeXBlKTtcbiAgICByZXMuZW5kKGF3YWl0IHJlZ2lzdGVyLm1ldHJpY3MoKSk7XG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVzaW5lc3MgLyBkb21haW4gbWV0cmljc1xuLy9cbi8vIFNlcnZpY2VzIHNob3VsZCBlbWl0IGNvdW50ZXJzIGZvciB0aGUgdGhpbmdzIG9wZXJhdG9ycyBhY3R1YWxseSBjYXJlIGFib3V0XG4vLyAocGlwZWxpbmVzIGdlbmVyYXRlZCwgcGx1Z2luIGJ1aWxkcyBjb21wbGV0ZWQsIGNvbXBsaWFuY2UgdmlvbGF0aW9ucyxcbi8vIEFJIHRva2VucyBjb25zdW1lZCkg4oCUIG5vdCBqdXN0IEhUVFAgdHJhZmZpYy4gVGhlIGhlbHBlcnMgYmVsb3cgcmVnaXN0ZXJcbi8vIGNvdW50ZXJzIGxhemlseSBvbiB0aGUgc2hhcmVkIHJlZ2lzdHJ5IHNvIG11bHRpcGxlIHNlcnZpY2VzIGNhbiBjYWxsXG4vLyBgaW5jQ291bnRlcigncGx1Z2luX2J1aWxkc190b3RhbCcsIHsgc3RhdHVzOiAnY29tcGxldGVkJyB9KWAgd2l0aG91dFxuLy8gd29ycnlpbmcgYWJvdXQgZG91YmxlLXJlZ2lzdHJhdGlvbi5cbi8vXG4vLyBOYW1pbmcgY29udmVudGlvbjogYDxkb21haW4+Xzxub3VuPl90b3RhbGAgZm9yIGNvdW50ZXJzLCBgX3NlY29uZHNgIGZvclxuLy8gaGlzdG9ncmFtcyDigJQgbWF0Y2hlcyBQcm9tZXRoZXVzIGJlc3QtcHJhY3RpY2UuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgYnVzaW5lc3NDb3VudGVycyA9IG5ldyBNYXA8c3RyaW5nLCBDb3VudGVyPHN0cmluZz4+KCk7XG5jb25zdCBidXNpbmVzc0hpc3RvZ3JhbXMgPSBuZXcgTWFwPHN0cmluZywgSGlzdG9ncmFtPHN0cmluZz4+KCk7XG5jb25zdCBidXNpbmVzc0dhdWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBHYXVnZTxzdHJpbmc+PigpO1xuXG4vKipcbiAqIEluY3JlbWVudCBhIGJ1c2luZXNzIGNvdW50ZXIsIGNyZWF0aW5nIGl0IG9uIGZpcnN0IHVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW5jQ291bnRlcigncGlwZWxpbmVzX2dlbmVyYXRlZF90b3RhbCcsIHsgcHJvdmlkZXI6ICdhbnRocm9waWMnIH0pO1xuICogaW5jQ291bnRlcigncGx1Z2luX2J1aWxkc190b3RhbCcsIHsgc3RhdHVzOiAnY29tcGxldGVkJyB9KTtcbiAqIGluY0NvdW50ZXIoJ3F1b3RhX3RocmVzaG9sZF9jcm9zc2VkX3RvdGFsJywgeyB0eXBlOiAnYWlDYWxscycsIHRpZXI6ICdwcm8nIH0pO1xuICogaW5jQ291bnRlcignY29tcGxpYW5jZV92aW9sYXRpb25zX2ZvdW5kX3RvdGFsJywgeyBzZXZlcml0eTogJ2NyaXRpY2FsJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5jQ291bnRlcihuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LCB2YWx1ZSA9IDEpOiB2b2lkIHtcbiAgbGV0IGNvdW50ZXIgPSBidXNpbmVzc0NvdW50ZXJzLmdldChuYW1lKTtcbiAgaWYgKCFjb3VudGVyKSB7XG4gICAgY291bnRlciA9IG5ldyBDb3VudGVyKHtcbiAgICAgIG5hbWUsXG4gICAgICBoZWxwOiBodW1hbml6ZU5hbWUobmFtZSksXG4gICAgICBsYWJlbE5hbWVzOiBPYmplY3Qua2V5cyhsYWJlbHMpLFxuICAgICAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxuICAgIH0pO1xuICAgIGJ1c2luZXNzQ291bnRlcnMuc2V0KG5hbWUsIGNvdW50ZXIpO1xuICB9XG4gIGNvdW50ZXIuaW5jKGxhYmVscywgdmFsdWUpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhbiBvYnNlcnZhdGlvbiBvbiBhIGJ1c2luZXNzIGhpc3RvZ3JhbSwgY3JlYXRpbmcgaXQgb24gZmlyc3QgdXNlLlxuICogVXNlIGZvciBkdXJhdGlvbnMsIHNpemVzLCBhbnl0aGluZyB3aGVyZSBwZXJjZW50aWxlcyBtYXR0ZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG9ic2VydmUoJ2FpX2dlbmVyYXRpb25fZHVyYXRpb25fc2Vjb25kcycsIHsgcHJvdmlkZXI6ICdhbnRocm9waWMnLCBtb2RlbDogJ3Nvbm5ldCcgfSwgZHVyYXRpb25TZWMpO1xuICogb2JzZXJ2ZSgncGx1Z2luX2J1aWxkX2R1cmF0aW9uX3NlY29uZHMnLCB7IGJ1aWxkVHlwZTogJ2RvY2tlcicgfSwgZHVyYXRpb25TZWMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlKG5hbWU6IHN0cmluZywgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gIGxldCBoaXN0ID0gYnVzaW5lc3NIaXN0b2dyYW1zLmdldChuYW1lKTtcbiAgaWYgKCFoaXN0KSB7XG4gICAgaGlzdCA9IG5ldyBIaXN0b2dyYW0oe1xuICAgICAgbmFtZSxcbiAgICAgIGhlbHA6IGh1bWFuaXplTmFtZShuYW1lKSxcbiAgICAgIGxhYmVsTmFtZXM6IE9iamVjdC5rZXlzKGxhYmVscyksXG4gICAgICAvLyBEZWZhdWx0IGJ1Y2tldHMgdGFyZ2V0IHN1Yi1zZWNvbmQgdGhyb3VnaCBzZXZlcmFsLW1pbnV0ZSBvYnNlcnZhdGlvbnMuXG4gICAgICAvLyBPdmVycmlkZSBieSByZWdpc3RlcmluZyB0aGUgaGlzdG9ncmFtIGV4cGxpY2l0bHkgYmVmb3JlIGZpcnN0IGNhbGxcbiAgICAgIC8vIGlmIHlvdSBuZWVkIGEgZGlmZmVyZW50IGJ1Y2tldCBkaXN0cmlidXRpb24uXG4gICAgICBidWNrZXRzOiBbMC4wNSwgMC4xLCAwLjI1LCAwLjUsIDEsIDIuNSwgNSwgMTAsIDMwLCA2MCwgMTIwLCAzMDBdLFxuICAgICAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxuICAgIH0pO1xuICAgIGJ1c2luZXNzSGlzdG9ncmFtcy5zZXQobmFtZSwgaGlzdCk7XG4gIH1cbiAgaGlzdC5vYnNlcnZlKGxhYmVscywgdmFsdWUpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgdmFsdWUgb2YgYSBidXNpbmVzcyBnYXVnZSwgY3JlYXRpbmcgaXQgb24gZmlyc3QgdXNlLiBVc2UgZm9yXG4gKiBwb2ludC1pbi10aW1lIG9ic2VydmF0aW9ucyBzYW1wbGVkIGJ5IGEgc2NyYXBlciDigJQgcXVldWUgZGVwdGgsIGFjdGl2ZVxuICogY29ubmVjdGlvbiBjb3VudHMsIGluLWZsaWdodCByZXF1ZXN0cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2V0R2F1Z2UoJ3BsdWdpbl9xdWV1ZV9qb2JzJywgeyBxdWV1ZTogJ3BsdWdpbi1idWlsZCcsIHN0YXRlOiAnd2FpdGluZycgfSwgMTIpO1xuICogc2V0R2F1Z2UoJ3BsdWdpbl9xdWV1ZV9qb2JzJywgeyBxdWV1ZTogJ3BsdWdpbi1idWlsZCcsIHN0YXRlOiAnYWN0aXZlJyB9LCAzKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0R2F1Z2UobmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IGdhdWdlID0gYnVzaW5lc3NHYXVnZXMuZ2V0KG5hbWUpO1xuICBpZiAoIWdhdWdlKSB7XG4gICAgZ2F1Z2UgPSBuZXcgR2F1Z2Uoe1xuICAgICAgbmFtZSxcbiAgICAgIGhlbHA6IGh1bWFuaXplTmFtZShuYW1lKSxcbiAgICAgIGxhYmVsTmFtZXM6IE9iamVjdC5rZXlzKGxhYmVscyksXG4gICAgICByZWdpc3RlcnM6IFtyZWdpc3Rlcl0sXG4gICAgfSk7XG4gICAgYnVzaW5lc3NHYXVnZXMuc2V0KG5hbWUsIGdhdWdlKTtcbiAgfVxuICBnYXVnZS5zZXQobGFiZWxzLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGh1bWFuaXplTmFtZShtZXRyaWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBgcGlwZWxpbmVzX2dlbmVyYXRlZF90b3RhbGAg4oaSIFwiUGlwZWxpbmVzIGdlbmVyYXRlZCB0b3RhbFwiXG4gIHJldHVybiBtZXRyaWNOYW1lXG4gICAgLnJlcGxhY2UoL18vZywgJyAnKVxuICAgIC5yZXBsYWNlKC9eLi8sIChjKSA9PiBjLnRvVXBwZXJDYXNlKCkpO1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import type { QuotaType, QuotaService } from '@pipeline-builder/api-core';
2
- import { RequestHandler } from 'express';
2
+ import type { RequestHandler } from 'express';
3
3
  /**
4
4
  * Creates a middleware chain for protected routes requiring authentication, org ID, and quota check.
5
5
  *