@pipeline-builder/api-server 3.3.11 → 3.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Express server infrastructure for [Pipeline Builder](https://mwashburn160.github
7
7
  ## Key Exports
8
8
 
9
9
  ### App Factory
10
- - `createApp` — Creates a configured Express app with CORS, Helmet, rate limiting, health checks, metrics, and OpenAPI/Swagger UI
10
+ - `createApp({ checkDependencies?, warmupHooks?, ... })` — Creates a configured Express app with CORS, Helmet, rate limiting, `/health` (liveness), `/ready` (readiness), `/warmup`, `/metrics`, and OpenAPI/Swagger UI. Pass `warmupHooks: [() => mongoose.connection.db?.admin().ping()]` for services that need to pre-warm Mongo/Redis on cold start.
11
11
  - `runServer`, `startServer` — Server lifecycle with graceful shutdown
12
12
 
13
13
  ### Middleware
@@ -23,9 +23,9 @@ Express server infrastructure for [Pipeline Builder](https://mwashburn160.github
23
23
  - `createProtectedRoute`, `createAuthenticatedWithOrgRoute` — Composable middleware chains
24
24
 
25
25
  ### Health & Quota Helpers
26
- - `postgresHealthCheck` — `checkDependencies` callback for Postgres-backed services
27
- - `mongoHealthCheck(connection)` — `checkDependencies` factory for MongoDB services
28
- - `incrementQuotaFromCtx(service, { req, ctx, orgId }, type)` — Increments a quota counter using values pulled from the route context
26
+ - `postgresHealthCheck` — Returns `{ postgres: 'connected' | 'disconnected' }` (the `'unknown'` fallback was removed — a real probe failure now correctly fails `/ready`)
27
+ - `mongoHealthCheck(connection)` — Returns `{ mongodb: 'connected' | 'unknown' | 'disconnected' }` based on mongoose's `readyState` (1 = connected, 2 = connecting/unknown, anything else = disconnected)
28
+ - `incrementQuotaFromCtx(service, { req, ctx, orgId }, type)` — Increments a quota counter using values pulled from the route context. `type` is `'plugins' | 'pipelines' | 'apiCalls' | 'aiCalls'`.
29
29
 
30
30
  ### Server-Sent Events
31
31
  - `SSEManager` — Connection manager for streaming logs to clients
@@ -31,6 +31,14 @@ export interface CreateAppOptions {
31
31
  openApiOptions?: OpenApiSpecOptions;
32
32
  /** Enable gzip/deflate response compression (default: true) */
33
33
  enableCompression?: boolean;
34
+ /**
35
+ * Extra warmup callbacks invoked by `GET /warmup` in addition to the
36
+ * default Postgres ping. Use for services that depend on Mongo, Redis,
37
+ * SQS, etc. — pre-warming opens connection pools before real traffic
38
+ * arrives. Each callback should resolve when its dependency is ready;
39
+ * any rejection causes /warmup to return 503.
40
+ */
41
+ warmupHooks?: Array<() => Promise<void>>;
34
42
  }
35
43
  /**
36
44
  * Result of creating an Express application
@@ -47,7 +47,7 @@ const sse_connection_manager_1 = require("../http/sse-connection-manager");
47
47
  * ```
48
48
  */
49
49
  function createApp(options = {}) {
50
- const { enableCors = true, enableHelmet = true, enableRateLimit = true, enableJsonBody = true, jsonLimit = '1mb', enableUrlEncoded = true, urlEncodedLimit = '1mb', sseManager = new sse_connection_manager_1.SSEManager(), checkDependencies, enableOpenApi = true, openApiOptions, enableCompression = true, } = options;
50
+ const { enableCors = true, enableHelmet = true, enableRateLimit = true, enableJsonBody = true, jsonLimit = '1mb', enableUrlEncoded = true, urlEncodedLimit = '1mb', sseManager = new sse_connection_manager_1.SSEManager(), checkDependencies, enableOpenApi = true, openApiOptions, enableCompression = true, warmupHooks = [], } = options;
51
51
  // Fail fast if JWT_SECRET is not configured — prevents silent auth failures at runtime
52
52
  if (!process.env.JWT_SECRET) {
53
53
  throw new Error('JWT_SECRET environment variable is required. Set it before starting the server.');
@@ -120,12 +120,16 @@ function createApp(options = {}) {
120
120
  serviceName: process.env.SERVICE_NAME || 'api',
121
121
  checkDependencies,
122
122
  }));
123
- // Warm-up endpoint — initializes connection pool without a real API call (for Lambda pre-warming)
123
+ // Warm-up endpoint — pre-opens connection pools so the first real request
124
+ // doesn't pay cold-start latency. Always pings Postgres; services using
125
+ // Mongo / Redis / SQS pass `warmupHooks` so those are warmed in parallel.
124
126
  app.get('/warmup', async (_req, res) => {
125
127
  try {
126
- const connection = (0, pipeline_core_1.getConnection)();
127
- await connection.testConnection();
128
- (0, api_core_1.sendSuccess)(res, 200, { warmed: true });
128
+ await Promise.all([
129
+ (0, pipeline_core_1.getConnection)().testConnection(),
130
+ ...warmupHooks.map((hook) => hook()),
131
+ ]);
132
+ (0, api_core_1.sendSuccess)(res, 200, { warmed: true, hooks: warmupHooks.length });
129
133
  }
130
134
  catch {
131
135
  (0, api_core_1.sendError)(res, 503, 'Warmup failed');
@@ -214,4 +218,4 @@ function createApp(options = {}) {
214
218
  app.get('/logs/:requestId', sseManager.middleware());
215
219
  return { app, sseManager };
216
220
  }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2FwcC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7OztBQXNGdEMsOEJBME1DO0FBOVJELHlEQUFnSjtBQUVoSixtRUFBdUY7QUFDdkYsOERBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixzREFBNEU7QUFDNUUsNEVBQTJDO0FBQzNDLG9EQUE0QjtBQUM1Qiw0RUFBMkM7QUFDM0MsK0JBQWtDO0FBQ2xDLHVEQUFtRDtBQUNuRCxxRUFBaUU7QUFDakUsdUNBQThEO0FBQzlELDJFQUE0RDtBQTRDNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLFVBQTRCLEVBQUU7SUFDdEQsTUFBTSxFQUNKLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFlBQVksR0FBRyxJQUFJLEVBQ25CLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFNBQVMsR0FBRyxLQUFLLEVBQ2pCLGdCQUFnQixHQUFHLElBQUksRUFDdkIsZUFBZSxHQUFHLEtBQUssRUFDdkIsVUFBVSxHQUFHLElBQUksbUNBQVUsRUFBRSxFQUM3QixpQkFBaUIsRUFDakIsYUFBYSxHQUFHLElBQUksRUFDcEIsY0FBYyxFQUNkLGlCQUFpQixHQUFHLElBQUksR0FDekIsR0FBRyxPQUFPLENBQUM7SUFFWix1RkFBdUY7SUFDdkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsNkRBQTZEO0lBQzdELGlFQUFpRTtJQUNqRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLFdB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LEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBzZW5kU3VjY2Vzcywgc2VuZEVycm9yLCBnZW5lcmF0ZU9wZW5BcGlTcGVjLCBFcnJvckNvZGUsIGNyZWF0ZUxvZ2dlciwgZ2V0T3JnSWQsIGNyZWF0ZUhlYWx0aFJvdXRlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgT3BlbkFwaVNwZWNPcHRpb25zIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzLCBnZXRDb25uZWN0aW9uIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgY29tcHJlc3Npb24gZnJvbSAnY29tcHJlc3Npb24nO1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycyc7XG5pbXBvcnQgZXhwcmVzcywgeyBFeHByZXNzLCBOZXh0RnVuY3Rpb24sIFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgcmF0ZUxpbWl0IGZyb20gJ2V4cHJlc3MtcmF0ZS1saW1pdCc7XG5pbXBvcnQgaGVsbWV0IGZyb20gJ2hlbG1ldCc7XG5pbXBvcnQgc3dhZ2dlclVpIGZyb20gJ3N3YWdnZXItdWktZXhwcmVzcyc7XG5pbXBvcnQgeyB2NyBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBldGFnTWlkZGxld2FyZSB9IGZyb20gJy4vZXRhZy1taWRkbGV3YXJlJztcbmltcG9ydCB7IGlkZW1wb3RlbmN5TWlkZGxld2FyZSB9IGZyb20gJy4vaWRlbXBvdGVuY3ktbWlkZGxld2FyZSc7XG5pbXBvcnQgeyBtZXRyaWNzTWlkZGxld2FyZSwgbWV0cmljc0hhbmRsZXIgfSBmcm9tICcuL21ldHJpY3MnO1xuaW1wb3J0IHsgU1NFTWFuYWdlciB9IGZyb20gJy4uL2h0dHAvc3NlLWNvbm5lY3Rpb24tbWFuYWdlcic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYW4gRXhwcmVzcyBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUFwcE9wdGlvbnMge1xuICAvKiogRW5hYmxlIENPUlMgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUNvcnM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIEhlbG1ldCBzZWN1cml0eSBoZWFkZXJzIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVIZWxtZXQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHJhdGUgbGltaXRpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZVJhdGVMaW1pdD86IGJvb2xlYW47XG4gIC8qKiBSZWRpcyBVUkwgZm9yIHNoYXJlZCByYXRlLWxpbWl0IHN0YXRlIChlLmcuICdyZWRpczovL2hvc3Q6NjM3OScpLiBJbi1tZW1vcnkgd2hlbiBvbWl0dGVkLiAqL1xuICByZWRpc1VybD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSBKU09OIGJvZHkgcGFyc2luZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlSnNvbkJvZHk/OiBib29sZWFuO1xuICAvKiogSlNPTiBib2R5IHNpemUgbGltaXQgKGRlZmF1bHQ6ICcxbWInKSAqL1xuICBqc29uTGltaXQ/OiBzdHJpbmc7XG4gIC8qKiBFbmFibGUgVVJMLWVuY29kZWQgYm9keSBwYXJzaW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVVcmxFbmNvZGVkPzogYm9vbGVhbjtcbiAgLyoqIFVSTC1lbmNvZGVkIGJvZHkgc2l6ZSBsaW1pdCAoZGVmYXVsdDogJzFtYicpICovXG4gIHVybEVuY29kZWRMaW1pdD86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBTU0UgbWFuYWdlciBpbnN0YW5jZSAqL1xuICBzc2VNYW5hZ2VyPzogU1NFTWFuYWdlcjtcbiAgLyoqIEhlYWx0aCBjaGVjayBkZXBlbmRlbmN5IGNoZWNrZXIg4oCUIGlmIHByb3ZpZGVkLCAvaGVhbHRoIHJlcG9ydHMgZGVwZW5kZW5jeSBzdGF0dXMgKi9cbiAgY2hlY2tEZXBlbmRlbmNpZXM/OiAoKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic+PjtcbiAgLyoqIEVuYWJsZSBPcGVuQVBJIHNwZWMgYXQgL2RvY3Mvb3BlbmFwaS5qc29uIGFuZCBTd2FnZ2VyIFVJIGF0IC9kb2NzIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVPcGVuQXBpPzogYm9vbGVhbjtcbiAgLyoqIE9wZW5BUEkgc3BlYyBjdXN0b21pemF0aW9uIG9wdGlvbnMgKi9cbiAgb3BlbkFwaU9wdGlvbnM/OiBPcGVuQXBpU3BlY09wdGlvbnM7XG4gIC8qKiBFbmFibGUgZ3ppcC9kZWZsYXRlIHJlc3BvbnNlIGNvbXByZXNzaW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVDb21wcmVzc2lvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBcHBSZXN1bHQge1xuICAvKiogQ29uZmlndXJlZCBFeHByZXNzIGFwcGxpY2F0aW9uICovXG4gIGFwcDogRXhwcmVzcztcbiAgLyoqIFNTRSBtYW5hZ2VyIGluc3RhbmNlICovXG4gIHNzZU1hbmFnZXI6IFNTRU1hbmFnZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCBjb25maWd1cmUgYW4gRXhwcmVzcyBhcHBsaWNhdGlvbiB3aXRoIGNvbW1vbiBtaWRkbGV3YXJlXG4gKlxuICogU2V0cyB1cDpcbiAqIC0gQ09SUyB3aXRoIGNvbmZpZ3VyZWQgb3JpZ2luc1xuICogLSBIZWxtZXQgc2VjdXJpdHkgaGVhZGVyc1xuICogLSBSYXRlIGxpbWl0aW5nXG4gKiAtIEpTT04gYW5kIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZ1xuICogLSBUcnVzdCBwcm94eSBzZXR0aW5nc1xuICogLSBIZWFsdGggY2hlY2sgZW5kcG9pbnQgKC9oZWFsdGgpXG4gKiAtIE1ldHJpY3MgZW5kcG9pbnQgKC9tZXRyaWNzKVxuICogLSBTU0UgbG9ncyBlbmRwb2ludCAoL2xvZ3MvOnJlcXVlc3RJZClcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgQ29uZmlndXJlZCBFeHByZXNzIGFwcCBhbmQgU1NFIG1hbmFnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgeyBhcHAsIHNzZU1hbmFnZXIgfSA9IGNyZWF0ZUFwcCgpO1xuICpcbiAqIGFwcC5wb3N0KCcvYXBpL3Jlc291cmNlJywgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICogICAvLyBZb3VyIHJvdXRlIGhhbmRsZXJcbiAqIH0pO1xuICpcbiAqIHN0YXJ0U2VydmVyKGFwcCwgeyBuYW1lOiAnTXkgU2VydmljZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwcChvcHRpb25zOiBDcmVhdGVBcHBPcHRpb25zID0ge30pOiBDcmVhdGVBcHBSZXN1bHQge1xuICBjb25zdCB7XG4gICAgZW5hYmxlQ29ycyA9IHRydWUsXG4gICAgZW5hYmxlSGVsbWV0ID0gdHJ1ZSxcbiAgICBlbmFibGVSYXRlTGltaXQgPSB0cnVlLFxuICAgIGVuYWJsZUpzb25Cb2R5ID0gdHJ1ZSxcbiAgICBqc29uTGltaXQgPSAnMW1iJyxcbiAgICBlbmFibGVVcmxFbmNvZGVkID0gdHJ1ZSxcbiAgICB1cmxFbmNvZGVkTGltaXQgPSAnMW1iJyxcbiAgICBzc2VNYW5hZ2VyID0gbmV3IFNTRU1hbmFnZXIoKSxcbiAgICBjaGVja0RlcGVuZGVuY2llcyxcbiAgICBlbmFibGVPcGVuQXBpID0gdHJ1ZSxcbiAgICBvcGVuQXBpT3B0aW9ucyxcbiAgICBlbmFibGVDb21wcmVzc2lvbiA9IHRydWUsXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIEZhaWwgZmFzdCBpZiBKV1RfU0VDUkVUIGlzIG5vdCBjb25maWd1cmVkIOKAlCBwcmV2ZW50cyBzaWxlbnQgYXV0aCBmYWlsdXJlcyBhdCBydW50aW1lXG4gIGlmICghcHJvY2Vzcy5lbnYuSldUX1NFQ1JFVCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSldUX1NFQ1JFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZC4gU2V0IGl0IGJlZm9yZSBzdGFydGluZyB0aGUgc2VydmVyLicpO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZSBPcGVuVGVsZW1ldHJ5IHRyYWNpbmcgb25jZSBwZXIgcHJvY2VzcyBpZiBPVEVMX1RSQUNJTkdfRU5BQkxFRD10cnVlLlxuICAvLyBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMg4oCUIGluaXRUcmFjaW5nKCkgaXMgaWRlbXBvdGVudC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgY29uc3QgeyBpbml0VHJhY2luZyB9ID0gcmVxdWlyZSgnLi90cmFjaW5nJyk7XG4gIGluaXRUcmFjaW5nKHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJyk7XG5cbiAgY29uc3Qgc2VydmVyQ29uZmlnID0gQ29uZmlnLmdldCgnc2VydmVyJyk7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBTZWN1cml0eSBtaWRkbGV3YXJlXG4gIGlmIChlbmFibGVIZWxtZXQpIHtcbiAgICBhcHAudXNlKGhlbG1ldCh7XG4gICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IHtcbiAgICAgICAgZGlyZWN0aXZlczoge1xuICAgICAgICAgIGRlZmF1bHRTcmM6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICAvLyBTd2FnZ2VyIFVJIHJlcXVpcmVzIHVuc2FmZS1pbmxpbmUgKyB1bnNhZmUtZXZhbCBmb3IgaXRzIHNjcmlwdHNcbiAgICAgICAgICBzY3JpcHRTcmM6IGVuYWJsZU9wZW5BcGlcbiAgICAgICAgICAgID8gW1wiJ3NlbGYnXCIsIFwiJ3Vuc2FmZS1pbmxpbmUnXCIsIFwiJ3Vuc2FmZS1ldmFsJ1wiXVxuICAgICAgICAgICAgOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgc3R5bGVTcmM6IFtcIidzZWxmJ1wiLCBcIid1bnNhZmUtaW5saW5lJ1wiXSxcbiAgICAgICAgICBpbWdTcmM6IFtcIidzZWxmJ1wiLCAnZGF0YTonLCAnYmxvYjonXSxcbiAgICAgICAgICBjb25uZWN0U3JjOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgZm9udFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIG9iamVjdFNyYzogW1wiJ25vbmUnXCJdLFxuICAgICAgICAgIGZyYW1lQW5jZXN0b3JzOiBbXCInbm9uZSdcIl0sXG4gICAgICAgICAgYmFzZVVyaTogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIGZvcm1BY3Rpb246IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGVuYWJsZUNvcnMpIHtcbiAgICBhcHAudXNlKGNvcnMoc2VydmVyQ29uZmlnLmNvcnMpKTtcbiAgfVxuXG4gIC8vIFJlc3BvbnNlIGNvbXByZXNzaW9uIChnemlwL2RlZmxhdGUpIOKAlCBza2lwIFNTRSBzdHJlYW1zXG4gIGlmIChlbmFibGVDb21wcmVzc2lvbikge1xuICAgIGFwcC51c2UoY29tcHJlc3Npb24oe1xuICAgICAgZmlsdGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIERvbid0IGNvbXByZXNzIFNTRSBzdHJlYW1zXG4gICAgICAgIGlmIChyZXEuaGVhZGVycy5hY2NlcHQgPT09ICd0ZXh0L2V2ZW50LXN0cmVhbScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbXByZXNzaW9uLmZpbHRlcihyZXEsIHJlcyk7XG4gICAgICB9LFxuICAgICAgdGhyZXNob2xkOiBDb3JlQ29uc3RhbnRzLkNPTVBSRVNTSU9OX1RIUkVTSE9MRF9CWVRFUyxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBFVGFnIHN1cHBvcnQgZm9yIGNvbmRpdGlvbmFsIEdFVCByZXF1ZXN0cyAoMzA0IE5vdCBNb2RpZmllZClcbiAgYXBwLnVzZShldGFnTWlkZGxld2FyZSgpKTtcblxuICAvLyBCb2R5IHBhcnNpbmdcbiAgaWYgKGVuYWJsZUpzb25Cb2R5KSB7XG4gICAgYXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDoganNvbkxpbWl0IH0pKTtcbiAgfVxuXG4gIGlmIChlbmFibGVVcmxFbmNvZGVkKSB7XG4gICAgYXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBleHRlbmRlZDogdHJ1ZSwgbGltaXQ6IHVybEVuY29kZWRMaW1pdCB9KSk7XG4gIH1cblxuICAvLyBUcnVzdCBwcm94eSAobXVzdCBiZSBzZXQgYmVmb3JlIHJhdGUgbGltaXRlciBzbyByZXEuaXAgcmVzb2x2ZXMgY29ycmVjdGx5KVxuICBhcHAuc2V0KCd0cnVzdCBwcm94eScsIHNlcnZlckNvbmZpZy50cnVzdFByb3h5KTtcblxuICAvLyBSZXF1ZXN0IElEIOKAlCBwcmVmZXIgZXhpc3RpbmcgaGVhZGVyIGZyb20gbmdpbngsIG90aGVyd2lzZSBnZW5lcmF0ZSBvbmVcbiAgYXBwLnVzZSgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBoZHIgPSByZXEuaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ107XG4gICAgY29uc3QgcmVxdWVzdElkID0gKEFycmF5LmlzQXJyYXkoaGRyKSA/IGhkclswXSA6IGhkcikgfHwgdXVpZCgpO1xuICAgIHJlcS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgcmVzLnNldEhlYWRlcignWC1SZXF1ZXN0LUlkJywgcmVxdWVzdElkKTtcbiAgICBuZXh0KCk7XG4gIH0pO1xuXG4gIC8vIEhlYWx0aCBjaGVjayByZWdpc3RlcmVkIGJlZm9yZSByYXRlIGxpbWl0ZXIgc28gaXQgaXMgbmV2ZXIgdGhyb3R0bGVkXG4gIGFwcC51c2UoY3JlYXRlSGVhbHRoUm91dGVyKHtcbiAgICBzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknLFxuICAgIGNoZWNrRGVwZW5kZW5jaWVzLFxuICB9KSk7XG5cbiAgLy8gV2FybS11cCBlbmRwb2ludCDigJQgaW5pdGlhbGl6ZXMgY29ubmVjdGlvbiBwb29sIHdpdGhvdXQgYSByZWFsIEFQSSBjYWxsIChmb3IgTGFtYmRhIHByZS13YXJtaW5nKVxuICBhcHAuZ2V0KCcvd2FybXVwJywgYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb24oKTtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24udGVzdENvbm5lY3Rpb24oKTtcbiAgICAgIHNlbmRTdWNjZXNzKHJlcywgMjAwLCB7IHdhcm1lZDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ1dhcm11cCBmYWlsZWQnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFByb21ldGhldXMgbWV0cmljcyBlbmRwb2ludCDigJQgYWx3YXlzIHJlZ2lzdGVyZWQgKG5ldmVyIHRocm90dGxlZClcbiAgYXBwLmdldCgnL21ldHJpY3MnLCBtZXRyaWNzSGFuZGxlcigpKTtcblxuICAvLyBPcGVuQVBJIHNwZWMgYW5kIFN3YWdnZXIgVUkgKHJlZ2lzdGVyZWQgYmVmb3JlIHJhdGUgbGltaXRlcilcbiAgaWYgKGVuYWJsZU9wZW5BcGkpIHtcbiAgICBjb25zdCBzcGVjID0gZ2VuZXJhdGVPcGVuQXBpU3BlYyhvcGVuQXBpT3B0aW9ucyk7XG4gICAgYXBwLmdldCgnL2RvY3Mvb3BlbmFwaS5qc29uJywgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIHJlcy5qc29uKHNwZWMpO1xuICAgIH0pO1xuICAgIGFwcC51c2UoJy9kb2NzJywgc3dhZ2dlclVpLnNlcnZlLCBzd2FnZ2VyVWkuc2V0dXAoc3BlYywge1xuICAgICAgY3VzdG9tU2l0ZVRpdGxlOiBvcGVuQXBpT3B0aW9ucz8udGl0bGUgPz8gJ1BpcGVsaW5lIEJ1aWxkZXIgQVBJIERvY3MnLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIFJhdGUgbGltaXRpbmcg4oCUIHVzZXMgUmVkaXMgd2hlbiByZWRpc1VybCBpcyBwcm92aWRlZCBmb3Igc2hhcmVkIHN0YXRlIGFjcm9zcyBpbnN0YW5jZXNcbiAgaWYgKGVuYWJsZVJhdGVMaW1pdCkge1xuICAgIGNvbnN0IHJhdGVMaW1pdENvbmZpZyA9IENvbmZpZy5nZXQoJ3JhdGVMaW1pdCcpO1xuXG4gICAgY29uc3QgcmF0ZUxpbWl0T3B0aW9uczogUGFyYW1ldGVyczx0eXBlb2YgcmF0ZUxpbWl0PlswXSA9IHtcbiAgICAgIG1heDogcmF0ZUxpbWl0Q29uZmlnLm1heCxcbiAgICAgIHdpbmRvd01zOiByYXRlTGltaXRDb25maWcud2luZG93TXMsXG4gICAgICBzdGFuZGFyZEhlYWRlcnM6IHRydWUsXG4gICAgICBsZWdhY3lIZWFkZXJzOiBmYWxzZSxcbiAgICAgIHZhbGlkYXRlOiB7IGtleUdlbmVyYXRvcklwRmFsbGJhY2s6IGZhbHNlIH0sXG4gICAgICAvLyBTa2lwIHJhdGUgbGltaXRpbmcgZm9yIGludGVybmFsIHNlcnZpY2UgY2FsbHMgKGluaXQgc2NyaXB0cywgaW50ZXItc2VydmljZSlcbiAgICAgIHNraXA6IChyZXE6IFJlcXVlc3QpID0+IHJlcS5oZWFkZXJzWyd4LWludGVybmFsLXNlcnZpY2UnXSA9PT0gJ3RydWUnLFxuICAgICAgLy8gUGVyLW9yZyBrZXk6IHVzZSBvcmdJZCBmcm9tIEpXVCB3aGVuIGF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIElQXG4gICAgICBrZXlHZW5lcmF0b3I6IChyZXE6IFJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldE9yZ0lkKHJlcSkgfHwgcmVxLmlwIHx8ICdhbm9uJztcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICBzZW5kRXJyb3IocmVzLCA0MjksICdUb28gbWFueSByZXF1ZXN0cywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLCBFcnJvckNvZGUuUkFURV9MSU1JVF9FWENFRURFRCk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBVc2UgUmVkaXMgc3RvcmUgd2hlbiBhdmFpbGFibGUgZm9yIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgaW5zdGFuY2VzXG4gICAgaWYgKG9wdGlvbnMucmVkaXNVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgIGNvbnN0IHsgUmVkaXNTdG9yZSB9ID0gcmVxdWlyZSgncmF0ZS1saW1pdC1yZWRpcycpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICBjb25zdCBSZWRpcyA9IHJlcXVpcmUoJ2lvcmVkaXMnKTtcbiAgICAgICAgY29uc3QgcmVkaXNDbGllbnQgPSBuZXcgUmVkaXMob3B0aW9ucy5yZWRpc1VybCk7XG4gICAgICAgIHJhdGVMaW1pdE9wdGlvbnMuc3RvcmUgPSBuZXcgUmVkaXNTdG9yZSh7XG4gICAgICAgICAgc2VuZENvbW1hbmQ6ICguLi5hcmdzOiBzdHJpbmdbXSkgPT4gcmVkaXNDbGllbnQuY2FsbCguLi5hcmdzKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdSYXRlTGltaXQnKS53YXJuKCdSZWRpcyBzdG9yZSB1bmF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIGluLW1lbW9yeSByYXRlIGxpbWl0aW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXBwLnVzZShyYXRlTGltaXQocmF0ZUxpbWl0T3B0aW9ucykpO1xuICB9XG5cbiAgLy8gRXhwcmVzcyByZXF1ZXN0IHRpbWVvdXQg4oCUIHVzZXMgQ29yZUNvbnN0YW50cyB0byBzaGFyZSB0aGUgc2FtZSBkZWZhdWx0IGFzIExhbWJkYSBoYW5kbGVyc1xuICBjb25zdCB0aW1lb3V0TXMgPSBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUztcbiAgYXBwLnVzZSgoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgcmVzLnNldFRpbWVvdXQodGltZW91dE1zLCAoKSA9PiB7XG4gICAgICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdSZXF1ZXN0IHRpbWVvdXQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gIH0pO1xuXG4gIC8vIFJlcXVlc3QgZHVyYXRpb24gbG9nZ2luZ1xuICBjb25zdCBkdXJhdGlvbkxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVxdWVzdC1kdXJhdGlvbicpO1xuICBhcHAudXNlKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICByZXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgZHVyYXRpb25Mb2dnZXIuaW5mbyhgJHtyZXEubWV0aG9kfSAke3JlcS5vcmlnaW5hbFVybH0gJHtyZXMuc3RhdHVzQ29kZX0gJHtkdXJhdGlvbn1tc2AsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBwYXRoOiByZXEub3JpZ2luYWxVcmwsXG4gICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBkdXJhdGlvbk1zOiBkdXJhdGlvbixcbiAgICAgICAgcmVxdWVzdElkOiByZXEucmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgbWlkZGxld2FyZSDigJQgcmVjb3JkcyByZXF1ZXN0IGR1cmF0aW9uIGFuZCBjb3VudFxuICBhcHAudXNlKG1ldHJpY3NNaWRkbGV3YXJlKCkpO1xuXG4gIC8vIElkZW1wb3RlbmN5IGtleSBzdXBwb3J0IGZvciBtdXRhdGlvbiBlbmRwb2ludHNcbiAgYXBwLnVzZShpZGVtcG90ZW5jeU1pZGRsZXdhcmUoKSk7XG5cbiAgLy8gU1NFIGxvZ3MgZW5kcG9pbnRcbiAgYXBwLmdldCgnL2xvZ3MvOnJlcXVlc3RJZCcsIHNzZU1hbmFnZXIubWlkZGxld2FyZSgpKTtcblxuICByZXR1cm4geyBhcHAsIHNzZU1hbmFnZXIgfTtcbn1cbiJdfQ==
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2FwcC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7OztBQThGdEMsOEJBK01DO0FBM1NELHlEQUFnSjtBQUVoSixtRUFBdUY7QUFDdkYsOERBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixzREFBNEU7QUFDNUUsNEVBQTJDO0FBQzNDLG9EQUE0QjtBQUM1Qiw0RUFBMkM7QUFDM0MsK0JBQWtDO0FBQ2xDLHVEQUFtRDtBQUNuRCxxRUFBaUU7QUFDakUsdUNBQThEO0FBQzlELDJFQUE0RDtBQW9ENUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLFVBQTRCLEVBQUU7SUFDdEQsTUFBTSxFQUNKLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFlBQVksR0FBRyxJQUFJLEVBQ25CLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFNBQVMsR0FBRyxLQUFLLEVBQ2pCLGdCQUFnQixHQUFHLElBQUksRUFDdkIsZUFBZSxHQUFHLEtBQUssRUFDdkIsVUFBVSxHQUFHLElBQUksbUNBQVUsRUFBRSxFQUM3QixpQkFBaUIsRUFDakIsYUFBYSxHQUFHLElBQUksRUFDcEIsY0FBYyxFQUNkLGlCQUFpQixHQUFHLElBQUksRUFDeEIsV0FBVyxHQUFHLEVBQUUsR0FDakIsR0FBRyxPQUFPLENBQUM7SUFFWix1RkFBdUY7SUFDdkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsNkRBQTZEO0lBQzdELGlFQUFpRTtJQUNqRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLFlBQVksR0FBRyxzQkFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFBLGlCQUFPLEdBQUUsQ0FBQztJQUV0QixzQkFBc0I7SUFDdEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUEsZ0JBQU0sRUFBQztZQUNiLHFCQUFxQixFQUFFO2dCQUNyQixVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUN0QixrRUFBa0U7b0JBQ2xFLFNBQVMsRUFBRSxhQUFhO3dCQUN0QixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO3dCQUNoRCxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ2QsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO29CQUN2QyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztvQkFDcEMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ25CLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztvQkFDckIsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ25CLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDdkI7YUFDRjtTQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUEsY0FBSSxFQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBQSxxQkFBVyxFQUFDO1lBQ2xCLE1BQU0sRUFBRSxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsRUFBRTtnQkFDdEMsNkJBQTZCO2dCQUM3QixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLG1CQUFtQjtvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDN0QsT0FBTyxxQkFBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELFNBQVMsRUFBRSw2QkFBYSxDQUFDLDJCQUEyQjtTQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFBLGdDQUFjLEdBQUUsQ0FBQyxDQUFDO0lBRTFCLGVBQWU7SUFDZixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVoRCx5RUFBeUU7SUFDekUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQzFELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUEsU0FBSSxHQUFFLENBQUM7UUFDaEUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUVILHVFQUF1RTtJQUN2RSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUEsNkJBQWtCLEVBQUM7UUFDekIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEtBQUs7UUFDOUMsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUosMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQWEsRUFBRSxHQUFhLEVBQUUsRUFBRTtRQUN4RCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ2hCLElBQUEsNkJBQWEsR0FBRSxDQUFDLGNBQWMsRUFBRTtnQkFDaEMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNyQyxDQUFDLENBQUM7WUFDSCxJQUFBLHNCQUFXLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxJQUFBLG9CQUFTLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxvRUFBb0U7SUFDcEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBQSx3QkFBYyxHQUFFLENBQUMsQ0FBQztJQUV0QywrREFBK0Q7SUFDL0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksR0FBRyxJQUFBLDhCQUFtQixFQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFhLEVBQUUsR0FBYSxFQUFFLEVBQUU7WUFDN0QsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDRCQUFTLENBQUMsS0FBSyxFQUFFLDRCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUN0RCxlQUFlLEVBQUUsY0FBYyxFQUFFLEtBQUssSUFBSSwyQkFBMkI7U0FDdEUsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQseUZBQXlGO0lBQ3pGLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsTUFBTSxlQUFlLEdBQUcsc0JBQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFaEQsTUFBTSxnQkFBZ0IsR0FBb0M7WUFDeEQsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO1lBQ3hCLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUTtZQUNsQyxlQUFlLEVBQUUsSUFBSTtZQUNyQixhQUFhLEVBQUUsS0FBSztZQUNwQixRQUFRLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUU7WUFDM0MsOEVBQThFO1lBQzlFLElBQUksRUFBRSxDQUFDLEdBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU07WUFDcEUsa0VBQWtFO1lBQ2xFLFlBQVksRUFBRSxDQUFDLEdBQVksRUFBRSxFQUFFO2dCQUM3QixPQUFPLElBQUEsbUJBQVEsRUFBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQztZQUMzQyxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBYSxFQUFFLEdBQWEsRUFBRSxFQUFFO2dCQUN4QyxJQUFBLG9CQUFTLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSw0Q0FBNEMsRUFBRSxvQkFBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkcsQ0FBQztTQUNGLENBQUM7UUFFRixtRUFBbUU7UUFDbkUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDO2dCQUNILGlFQUFpRTtnQkFDakUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNuRCxpRUFBaUU7Z0JBQ2pFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUM7b0JBQ3RDLFdBQVcsRUFBRSxDQUFDLEdBQUcsSUFBYyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUM5RCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLElBQUEsdUJBQVksRUFBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztZQUNyRyxDQUFDO1FBQ0gsQ0FBQztRQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBQSw0QkFBUyxFQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLE1BQU0sU0FBUyxHQUFHLDZCQUFhLENBQUMsa0JBQWtCLENBQUM7SUFDbkQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWEsRUFBRSxHQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQzNELEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixJQUFBLG9CQUFTLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCwyQkFBMkI7SUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBQSx1QkFBWSxFQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUNwQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksUUFBUSxJQUFJLEVBQUU7Z0JBQ3RGLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtnQkFDbEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxXQUFXO2dCQUNyQixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7Z0JBQzFCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7YUFDekIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgscUVBQXFFO0lBQ3JFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBQSwyQkFBaUIsR0FBRSxDQUFDLENBQUM7SUFFN0IsaURBQWlEO0lBQ2pELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBQSw4Q0FBcUIsR0FBRSxDQUFDLENBQUM7SUFFakMsb0JBQW9CO0lBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHNlbmRTdWNjZXNzLCBzZW5kRXJyb3IsIGdlbmVyYXRlT3BlbkFwaVNwZWMsIEVycm9yQ29kZSwgY3JlYXRlTG9nZ2VyLCBnZXRPcmdJZCwgY3JlYXRlSGVhbHRoUm91dGVyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBPcGVuQXBpU3BlY09wdGlvbnMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMsIGdldENvbm5lY3Rpb24gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCBjb21wcmVzc2lvbiBmcm9tICdjb21wcmVzc2lvbic7XG5pbXBvcnQgY29ycyBmcm9tICdjb3JzJztcbmltcG9ydCBleHByZXNzLCB7IEV4cHJlc3MsIE5leHRGdW5jdGlvbiwgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCByYXRlTGltaXQgZnJvbSAnZXhwcmVzcy1yYXRlLWxpbWl0JztcbmltcG9ydCBoZWxtZXQgZnJvbSAnaGVsbWV0JztcbmltcG9ydCBzd2FnZ2VyVWkgZnJvbSAnc3dhZ2dlci11aS1leHByZXNzJztcbmltcG9ydCB7IHY3IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGV0YWdNaWRkbGV3YXJlIH0gZnJvbSAnLi9ldGFnLW1pZGRsZXdhcmUnO1xuaW1wb3J0IHsgaWRlbXBvdGVuY3lNaWRkbGV3YXJlIH0gZnJvbSAnLi9pZGVtcG90ZW5jeS1taWRkbGV3YXJlJztcbmltcG9ydCB7IG1ldHJpY3NNaWRkbGV3YXJlLCBtZXRyaWNzSGFuZGxlciB9IGZyb20gJy4vbWV0cmljcyc7XG5pbXBvcnQgeyBTU0VNYW5hZ2VyIH0gZnJvbSAnLi4vaHR0cC9zc2UtY29ubmVjdGlvbi1tYW5hZ2VyJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBFeHByZXNzIGFwcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQXBwT3B0aW9ucyB7XG4gIC8qKiBFbmFibGUgQ09SUyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlQ29ycz86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgSGVsbWV0IHNlY3VyaXR5IGhlYWRlcnMgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUhlbG1ldD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgcmF0ZSBsaW1pdGluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlUmF0ZUxpbWl0PzogYm9vbGVhbjtcbiAgLyoqIFJlZGlzIFVSTCBmb3Igc2hhcmVkIHJhdGUtbGltaXQgc3RhdGUgKGUuZy4gJ3JlZGlzOi8vaG9zdDo2Mzc5JykuIEluLW1lbW9yeSB3aGVuIG9taXR0ZWQuICovXG4gIHJlZGlzVXJsPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIEpTT04gYm9keSBwYXJzaW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVKc29uQm9keT86IGJvb2xlYW47XG4gIC8qKiBKU09OIGJvZHkgc2l6ZSBsaW1pdCAoZGVmYXVsdDogJzFtYicpICovXG4gIGpzb25MaW1pdD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSBVUkwtZW5jb2RlZCBib2R5IHBhcnNpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZVVybEVuY29kZWQ/OiBib29sZWFuO1xuICAvKiogVVJMLWVuY29kZWQgYm9keSBzaXplIGxpbWl0IChkZWZhdWx0OiAnMW1iJykgKi9cbiAgdXJsRW5jb2RlZExpbWl0Pzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIFNTRSBtYW5hZ2VyIGluc3RhbmNlICovXG4gIHNzZU1hbmFnZXI/OiBTU0VNYW5hZ2VyO1xuICAvKiogSGVhbHRoIGNoZWNrIGRlcGVuZGVuY3kgY2hlY2tlciDigJQgaWYgcHJvdmlkZWQsIC9oZWFsdGggcmVwb3J0cyBkZXBlbmRlbmN5IHN0YXR1cyAqL1xuICBjaGVja0RlcGVuZGVuY2llcz86ICgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgJ2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJyB8ICd1bmtub3duJz4+O1xuICAvKiogRW5hYmxlIE9wZW5BUEkgc3BlYyBhdCAvZG9jcy9vcGVuYXBpLmpzb24gYW5kIFN3YWdnZXIgVUkgYXQgL2RvY3MgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZU9wZW5BcGk/OiBib29sZWFuO1xuICAvKiogT3BlbkFQSSBzcGVjIGN1c3RvbWl6YXRpb24gb3B0aW9ucyAqL1xuICBvcGVuQXBpT3B0aW9ucz86IE9wZW5BcGlTcGVjT3B0aW9ucztcbiAgLyoqIEVuYWJsZSBnemlwL2RlZmxhdGUgcmVzcG9uc2UgY29tcHJlc3Npb24gKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUNvbXByZXNzaW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dHJhIHdhcm11cCBjYWxsYmFja3MgaW52b2tlZCBieSBgR0VUIC93YXJtdXBgIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgKiBkZWZhdWx0IFBvc3RncmVzIHBpbmcuIFVzZSBmb3Igc2VydmljZXMgdGhhdCBkZXBlbmQgb24gTW9uZ28sIFJlZGlzLFxuICAgKiBTUVMsIGV0Yy4g4oCUIHByZS13YXJtaW5nIG9wZW5zIGNvbm5lY3Rpb24gcG9vbHMgYmVmb3JlIHJlYWwgdHJhZmZpY1xuICAgKiBhcnJpdmVzLiBFYWNoIGNhbGxiYWNrIHNob3VsZCByZXNvbHZlIHdoZW4gaXRzIGRlcGVuZGVuY3kgaXMgcmVhZHk7XG4gICAqIGFueSByZWplY3Rpb24gY2F1c2VzIC93YXJtdXAgdG8gcmV0dXJuIDUwMy5cbiAgICovXG4gIHdhcm11cEhvb2tzPzogQXJyYXk8KCkgPT4gUHJvbWlzZTx2b2lkPj47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBcHBSZXN1bHQge1xuICAvKiogQ29uZmlndXJlZCBFeHByZXNzIGFwcGxpY2F0aW9uICovXG4gIGFwcDogRXhwcmVzcztcbiAgLyoqIFNTRSBtYW5hZ2VyIGluc3RhbmNlICovXG4gIHNzZU1hbmFnZXI6IFNTRU1hbmFnZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCBjb25maWd1cmUgYW4gRXhwcmVzcyBhcHBsaWNhdGlvbiB3aXRoIGNvbW1vbiBtaWRkbGV3YXJlXG4gKlxuICogU2V0cyB1cDpcbiAqIC0gQ09SUyB3aXRoIGNvbmZpZ3VyZWQgb3JpZ2luc1xuICogLSBIZWxtZXQgc2VjdXJpdHkgaGVhZGVyc1xuICogLSBSYXRlIGxpbWl0aW5nXG4gKiAtIEpTT04gYW5kIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZ1xuICogLSBUcnVzdCBwcm94eSBzZXR0aW5nc1xuICogLSBIZWFsdGggY2hlY2sgZW5kcG9pbnQgKC9oZWFsdGgpXG4gKiAtIE1ldHJpY3MgZW5kcG9pbnQgKC9tZXRyaWNzKVxuICogLSBTU0UgbG9ncyBlbmRwb2ludCAoL2xvZ3MvOnJlcXVlc3RJZClcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgQ29uZmlndXJlZCBFeHByZXNzIGFwcCBhbmQgU1NFIG1hbmFnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgeyBhcHAsIHNzZU1hbmFnZXIgfSA9IGNyZWF0ZUFwcCgpO1xuICpcbiAqIGFwcC5wb3N0KCcvYXBpL3Jlc291cmNlJywgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICogICAvLyBZb3VyIHJvdXRlIGhhbmRsZXJcbiAqIH0pO1xuICpcbiAqIHN0YXJ0U2VydmVyKGFwcCwgeyBuYW1lOiAnTXkgU2VydmljZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwcChvcHRpb25zOiBDcmVhdGVBcHBPcHRpb25zID0ge30pOiBDcmVhdGVBcHBSZXN1bHQge1xuICBjb25zdCB7XG4gICAgZW5hYmxlQ29ycyA9IHRydWUsXG4gICAgZW5hYmxlSGVsbWV0ID0gdHJ1ZSxcbiAgICBlbmFibGVSYXRlTGltaXQgPSB0cnVlLFxuICAgIGVuYWJsZUpzb25Cb2R5ID0gdHJ1ZSxcbiAgICBqc29uTGltaXQgPSAnMW1iJyxcbiAgICBlbmFibGVVcmxFbmNvZGVkID0gdHJ1ZSxcbiAgICB1cmxFbmNvZGVkTGltaXQgPSAnMW1iJyxcbiAgICBzc2VNYW5hZ2VyID0gbmV3IFNTRU1hbmFnZXIoKSxcbiAgICBjaGVja0RlcGVuZGVuY2llcyxcbiAgICBlbmFibGVPcGVuQXBpID0gdHJ1ZSxcbiAgICBvcGVuQXBpT3B0aW9ucyxcbiAgICBlbmFibGVDb21wcmVzc2lvbiA9IHRydWUsXG4gICAgd2FybXVwSG9va3MgPSBbXSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRmFpbCBmYXN0IGlmIEpXVF9TRUNSRVQgaXMgbm90IGNvbmZpZ3VyZWQg4oCUIHByZXZlbnRzIHNpbGVudCBhdXRoIGZhaWx1cmVzIGF0IHJ1bnRpbWVcbiAgaWYgKCFwcm9jZXNzLmVudi5KV1RfU0VDUkVUKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdKV1RfU0VDUkVUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkLiBTZXQgaXQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzZXJ2ZXIuJyk7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIE9wZW5UZWxlbWV0cnkgdHJhY2luZyBvbmNlIHBlciBwcm9jZXNzIGlmIE9URUxfVFJBQ0lOR19FTkFCTEVEPXRydWUuXG4gIC8vIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcyDigJQgaW5pdFRyYWNpbmcoKSBpcyBpZGVtcG90ZW50LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICBjb25zdCB7IGluaXRUcmFjaW5nIH0gPSByZXF1aXJlKCcuL3RyYWNpbmcnKTtcbiAgaW5pdFRyYWNpbmcocHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknKTtcblxuICBjb25zdCBzZXJ2ZXJDb25maWcgPSBDb25maWcuZ2V0KCdzZXJ2ZXInKTtcbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuXG4gIC8vIFNlY3VyaXR5IG1pZGRsZXdhcmVcbiAgaWYgKGVuYWJsZUhlbG1ldCkge1xuICAgIGFwcC51c2UoaGVsbWV0KHtcbiAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeToge1xuICAgICAgICBkaXJlY3RpdmVzOiB7XG4gICAgICAgICAgZGVmYXVsdFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIC8vIFN3YWdnZXIgVUkgcmVxdWlyZXMgdW5zYWZlLWlubGluZSArIHVuc2FmZS1ldmFsIGZvciBpdHMgc2NyaXB0c1xuICAgICAgICAgIHNjcmlwdFNyYzogZW5hYmxlT3BlbkFwaVxuICAgICAgICAgICAgPyBbXCInc2VsZidcIiwgXCIndW5zYWZlLWlubGluZSdcIiwgXCIndW5zYWZlLWV2YWwnXCJdXG4gICAgICAgICAgICA6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICBzdHlsZVNyYzogW1wiJ3NlbGYnXCIsIFwiJ3Vuc2FmZS1pbmxpbmUnXCJdLFxuICAgICAgICAgIGltZ1NyYzogW1wiJ3NlbGYnXCIsICdkYXRhOicsICdibG9iOiddLFxuICAgICAgICAgIGNvbm5lY3RTcmM6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICBmb250U3JjOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgb2JqZWN0U3JjOiBbXCInbm9uZSdcIl0sXG4gICAgICAgICAgZnJhbWVBbmNlc3RvcnM6IFtcIidub25lJ1wiXSxcbiAgICAgICAgICBiYXNlVXJpOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgZm9ybUFjdGlvbjogW1wiJ3NlbGYnXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBpZiAoZW5hYmxlQ29ycykge1xuICAgIGFwcC51c2UoY29ycyhzZXJ2ZXJDb25maWcuY29ycykpO1xuICB9XG5cbiAgLy8gUmVzcG9uc2UgY29tcHJlc3Npb24gKGd6aXAvZGVmbGF0ZSkg4oCUIHNraXAgU1NFIHN0cmVhbXNcbiAgaWYgKGVuYWJsZUNvbXByZXNzaW9uKSB7XG4gICAgYXBwLnVzZShjb21wcmVzc2lvbih7XG4gICAgICBmaWx0ZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gRG9uJ3QgY29tcHJlc3MgU1NFIHN0cmVhbXNcbiAgICAgICAgaWYgKHJlcS5oZWFkZXJzLmFjY2VwdCA9PT0gJ3RleHQvZXZlbnQtc3RyZWFtJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gY29tcHJlc3Npb24uZmlsdGVyKHJlcSwgcmVzKTtcbiAgICAgIH0sXG4gICAgICB0aHJlc2hvbGQ6IENvcmVDb25zdGFudHMuQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEVUYWcgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgR0VUIHJlcXVlc3RzICgzMDQgTm90IE1vZGlmaWVkKVxuICBhcHAudXNlKGV0YWdNaWRkbGV3YXJlKCkpO1xuXG4gIC8vIEJvZHkgcGFyc2luZ1xuICBpZiAoZW5hYmxlSnNvbkJvZHkpIHtcbiAgICBhcHAudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiBqc29uTGltaXQgfSkpO1xuICB9XG5cbiAgaWYgKGVuYWJsZVVybEVuY29kZWQpIHtcbiAgICBhcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiB0cnVlLCBsaW1pdDogdXJsRW5jb2RlZExpbWl0IH0pKTtcbiAgfVxuXG4gIC8vIFRydXN0IHByb3h5IChtdXN0IGJlIHNldCBiZWZvcmUgcmF0ZSBsaW1pdGVyIHNvIHJlcS5pcCByZXNvbHZlcyBjb3JyZWN0bHkpXG4gIGFwcC5zZXQoJ3RydXN0IHByb3h5Jywgc2VydmVyQ29uZmlnLnRydXN0UHJveHkpO1xuXG4gIC8vIFJlcXVlc3QgSUQg4oCUIHByZWZlciBleGlzdGluZyBoZWFkZXIgZnJvbSBuZ2lueCwgb3RoZXJ3aXNlIGdlbmVyYXRlIG9uZVxuICBhcHAudXNlKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IGhkciA9IHJlcS5oZWFkZXJzWyd4LXJlcXVlc3QtaWQnXTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSAoQXJyYXkuaXNBcnJheShoZHIpID8gaGRyWzBdIDogaGRyKSB8fCB1dWlkKCk7XG4gICAgcmVxLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVJlcXVlc3QtSWQnLCByZXF1ZXN0SWQpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gSGVhbHRoIGNoZWNrIHJlZ2lzdGVyZWQgYmVmb3JlIHJhdGUgbGltaXRlciBzbyBpdCBpcyBuZXZlciB0aHJvdHRsZWRcbiAgYXBwLnVzZShjcmVhdGVIZWFsdGhSb3V0ZXIoe1xuICAgIHNlcnZpY2VOYW1lOiBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ2FwaScsXG4gICAgY2hlY2tEZXBlbmRlbmNpZXMsXG4gIH0pKTtcblxuICAvLyBXYXJtLXVwIGVuZHBvaW50IOKAlCBwcmUtb3BlbnMgY29ubmVjdGlvbiBwb29scyBzbyB0aGUgZmlyc3QgcmVhbCByZXF1ZXN0XG4gIC8vIGRvZXNuJ3QgcGF5IGNvbGQtc3RhcnQgbGF0ZW5jeS4gQWx3YXlzIHBpbmdzIFBvc3RncmVzOyBzZXJ2aWNlcyB1c2luZ1xuICAvLyBNb25nbyAvIFJlZGlzIC8gU1FTIHBhc3MgYHdhcm11cEhvb2tzYCBzbyB0aG9zZSBhcmUgd2FybWVkIGluIHBhcmFsbGVsLlxuICBhcHAuZ2V0KCcvd2FybXVwJywgYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRDb25uZWN0aW9uKCkudGVzdENvbm5lY3Rpb24oKSxcbiAgICAgICAgLi4ud2FybXVwSG9va3MubWFwKChob29rKSA9PiBob29rKCkpLFxuICAgICAgXSk7XG4gICAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB3YXJtZWQ6IHRydWUsIGhvb2tzOiB3YXJtdXBIb29rcy5sZW5ndGggfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdXYXJtdXAgZmFpbGVkJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgZW5kcG9pbnQg4oCUIGFsd2F5cyByZWdpc3RlcmVkIChuZXZlciB0aHJvdHRsZWQpXG4gIGFwcC5nZXQoJy9tZXRyaWNzJywgbWV0cmljc0hhbmRsZXIoKSk7XG5cbiAgLy8gT3BlbkFQSSBzcGVjIGFuZCBTd2FnZ2VyIFVJIChyZWdpc3RlcmVkIGJlZm9yZSByYXRlIGxpbWl0ZXIpXG4gIGlmIChlbmFibGVPcGVuQXBpKSB7XG4gICAgY29uc3Qgc3BlYyA9IGdlbmVyYXRlT3BlbkFwaVNwZWMob3BlbkFwaU9wdGlvbnMpO1xuICAgIGFwcC5nZXQoJy9kb2NzL29wZW5hcGkuanNvbicsIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICByZXMuanNvbihzcGVjKTtcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvZG9jcycsIHN3YWdnZXJVaS5zZXJ2ZSwgc3dhZ2dlclVpLnNldHVwKHNwZWMsIHtcbiAgICAgIGN1c3RvbVNpdGVUaXRsZTogb3BlbkFwaU9wdGlvbnM/LnRpdGxlID8/ICdQaXBlbGluZSBCdWlsZGVyIEFQSSBEb2NzJyxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBSYXRlIGxpbWl0aW5nIOKAlCB1c2VzIFJlZGlzIHdoZW4gcmVkaXNVcmwgaXMgcHJvdmlkZWQgZm9yIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgaW5zdGFuY2VzXG4gIGlmIChlbmFibGVSYXRlTGltaXQpIHtcbiAgICBjb25zdCByYXRlTGltaXRDb25maWcgPSBDb25maWcuZ2V0KCdyYXRlTGltaXQnKTtcblxuICAgIGNvbnN0IHJhdGVMaW1pdE9wdGlvbnM6IFBhcmFtZXRlcnM8dHlwZW9mIHJhdGVMaW1pdD5bMF0gPSB7XG4gICAgICBtYXg6IHJhdGVMaW1pdENvbmZpZy5tYXgsXG4gICAgICB3aW5kb3dNczogcmF0ZUxpbWl0Q29uZmlnLndpbmRvd01zLFxuICAgICAgc3RhbmRhcmRIZWFkZXJzOiB0cnVlLFxuICAgICAgbGVnYWN5SGVhZGVyczogZmFsc2UsXG4gICAgICB2YWxpZGF0ZTogeyBrZXlHZW5lcmF0b3JJcEZhbGxiYWNrOiBmYWxzZSB9LFxuICAgICAgLy8gU2tpcCByYXRlIGxpbWl0aW5nIGZvciBpbnRlcm5hbCBzZXJ2aWNlIGNhbGxzIChpbml0IHNjcmlwdHMsIGludGVyLXNlcnZpY2UpXG4gICAgICBza2lwOiAocmVxOiBSZXF1ZXN0KSA9PiByZXEuaGVhZGVyc1sneC1pbnRlcm5hbC1zZXJ2aWNlJ10gPT09ICd0cnVlJyxcbiAgICAgIC8vIFBlci1vcmcga2V5OiB1c2Ugb3JnSWQgZnJvbSBKV1Qgd2hlbiBhdmFpbGFibGUsIGZhbGwgYmFjayB0byBJUFxuICAgICAga2V5R2VuZXJhdG9yOiAocmVxOiBSZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRPcmdJZChyZXEpIHx8IHJlcS5pcCB8fCAnYW5vbic7XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNDI5LCAnVG9vIG1hbnkgcmVxdWVzdHMsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJywgRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERUQpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gVXNlIFJlZGlzIHN0b3JlIHdoZW4gYXZhaWxhYmxlIGZvciBzaGFyZWQgc3RhdGUgYWNyb3NzIGluc3RhbmNlc1xuICAgIGlmIChvcHRpb25zLnJlZGlzVXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICBjb25zdCB7IFJlZGlzU3RvcmUgfSA9IHJlcXVpcmUoJ3JhdGUtbGltaXQtcmVkaXMnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgY29uc3QgUmVkaXMgPSByZXF1aXJlKCdpb3JlZGlzJyk7XG4gICAgICAgIGNvbnN0IHJlZGlzQ2xpZW50ID0gbmV3IFJlZGlzKG9wdGlvbnMucmVkaXNVcmwpO1xuICAgICAgICByYXRlTGltaXRPcHRpb25zLnN0b3JlID0gbmV3IFJlZGlzU3RvcmUoe1xuICAgICAgICAgIHNlbmRDb21tYW5kOiAoLi4uYXJnczogc3RyaW5nW10pID0+IHJlZGlzQ2xpZW50LmNhbGwoLi4uYXJncyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNyZWF0ZUxvZ2dlcignUmF0ZUxpbWl0Jykud2FybignUmVkaXMgc3RvcmUgdW5hdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBpbi1tZW1vcnkgcmF0ZSBsaW1pdGluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFwcC51c2UocmF0ZUxpbWl0KHJhdGVMaW1pdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8vIEV4cHJlc3MgcmVxdWVzdCB0aW1lb3V0IOKAlCB1c2VzIENvcmVDb25zdGFudHMgdG8gc2hhcmUgdGhlIHNhbWUgZGVmYXVsdCBhcyBMYW1iZGEgaGFuZGxlcnNcbiAgY29uc3QgdGltZW91dE1zID0gQ29yZUNvbnN0YW50cy5IQU5ETEVSX1RJTUVPVVRfTVM7XG4gIGFwcC51c2UoKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIHJlcy5zZXRUaW1lb3V0KHRpbWVvdXRNcywgKCkgPT4ge1xuICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNTAzLCAnUmVxdWVzdCB0aW1lb3V0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBSZXF1ZXN0IGR1cmF0aW9uIGxvZ2dpbmdcbiAgY29uc3QgZHVyYXRpb25Mb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3JlcXVlc3QtZHVyYXRpb24nKTtcbiAgYXBwLnVzZSgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgcmVzLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgICAgIGR1cmF0aW9uTG9nZ2VyLmluZm8oYCR7cmVxLm1ldGhvZH0gJHtyZXEub3JpZ2luYWxVcmx9ICR7cmVzLnN0YXR1c0NvZGV9ICR7ZHVyYXRpb259bXNgLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgcGF0aDogcmVxLm9yaWdpbmFsVXJsLFxuICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgZHVyYXRpb25NczogZHVyYXRpb24sXG4gICAgICAgIHJlcXVlc3RJZDogcmVxLnJlcXVlc3RJZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gUHJvbWV0aGV1cyBtZXRyaWNzIG1pZGRsZXdhcmUg4oCUIHJlY29yZHMgcmVxdWVzdCBkdXJhdGlvbiBhbmQgY291bnRcbiAgYXBwLnVzZShtZXRyaWNzTWlkZGxld2FyZSgpKTtcblxuICAvLyBJZGVtcG90ZW5jeSBrZXkgc3VwcG9ydCBmb3IgbXV0YXRpb24gZW5kcG9pbnRzXG4gIGFwcC51c2UoaWRlbXBvdGVuY3lNaWRkbGV3YXJlKCkpO1xuXG4gIC8vIFNTRSBsb2dzIGVuZHBvaW50XG4gIGFwcC5nZXQoJy9sb2dzLzpyZXF1ZXN0SWQnLCBzc2VNYW5hZ2VyLm1pZGRsZXdhcmUoKSk7XG5cbiAgcmV0dXJuIHsgYXBwLCBzc2VNYW5hZ2VyIH07XG59XG4iXX0=
@@ -9,6 +9,7 @@ const logger = (0, api_core_1.createLogger)('check-quota');
9
9
  /** Human-readable labels for quota exceeded messages. */
10
10
  const QUOTA_LABELS = {
11
11
  apiCalls: 'API call',
12
+ aiCalls: 'AI call',
12
13
  pipelines: 'Pipeline',
13
14
  plugins: 'Plugin',
14
15
  };
@@ -64,4 +65,4 @@ function checkQuota(quotaService, quotaType) {
64
65
  }
65
66
  };
66
67
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2NoZWNrLXF1b3RhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOztBQTBCdEMsZ0NBc0RDO0FBOUVELHlEQUFnRjtBQUdoRiwrQ0FBMkM7QUFFM0MsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRTNDLHlEQUF5RDtBQUN6RCxNQUFNLFlBQVksR0FBOEI7SUFDOUMsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFLFVBQVU7SUFDckIsT0FBTyxFQUFFLFFBQVE7Q0FDbEIsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsWUFBMEIsRUFDMUIsU0FBb0I7SUFFcEIsT0FBTyxLQUFLLEVBQUUsR0FBWSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFpQixFQUFFO1FBQzlFLElBQUksS0FBeUIsQ0FBQztRQUM5QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBQSx3QkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMzQixVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQy9DLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUEsb0JBQVMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLDZDQUE2QyxFQUFFLG9CQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMvRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRTNFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLGlCQUFpQixFQUFFO29CQUN6QyxLQUFLO29CQUNMLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztvQkFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2lCQUN2QixDQUFDLENBQUM7Z0JBRUgsSUFBQSxvQkFBUyxFQUNQLEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLDRFQUE0RSxFQUN0RyxvQkFBUyxDQUFDLGNBQWMsRUFDeEIsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDbkgsQ0FBQztnQkFDRixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQywwREFBMEQsRUFBRTtnQkFDdEUsS0FBSztnQkFDTCxTQUFTO2dCQUNULEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzlELENBQUMsQ0FBQztZQUNILElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRXJyb3JDb2RlLCBjcmVhdGVMb2dnZXIsIHNlbmRFcnJvciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUeXBlLCBRdW90YVNlcnZpY2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRDb250ZXh0IH0gZnJvbSAnLi9nZXQtY29udGV4dCc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignY2hlY2stcXVvdGEnKTtcblxuLyoqIEh1bWFuLXJlYWRhYmxlIGxhYmVscyBmb3IgcXVvdGEgZXhjZWVkZWQgbWVzc2FnZXMuICovXG5jb25zdCBRVU9UQV9MQUJFTFM6IFJlY29yZDxRdW90YVR5cGUsIHN0cmluZz4gPSB7XG4gIGFwaUNhbGxzOiAnQVBJIGNhbGwnLFxuICBwaXBlbGluZXM6ICdQaXBlbGluZScsXG4gIHBsdWdpbnM6ICdQbHVnaW4nLFxufTtcblxuLyoqXG4gKiBDcmVhdGUgbWlkZGxld2FyZSB0aGF0IGNoZWNrcyBhIHNwZWNpZmljIHF1b3RhIHR5cGUgYmVmb3JlIHByb2NlZWRpbmcuXG4gKlxuICogT24gcXVvdGEgZXhjZWVkZWQsIHJldHVybnMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBxdW90YSBkZXRhaWxzLlxuICogT24gcXVvdGEgc2VydmljZSBmYWlsdXJlLCBmYWlscyBvcGVuIChhbGxvd3MgdGhlIHJlcXVlc3QpLlxuICpcbiAqIEBwYXJhbSBxdW90YVNlcnZpY2UgLSBRdW90YSBzZXJ2aWNlIGNsaWVudFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFdoaWNoIHF1b3RhIHRvIGNoZWNrIChlLmcuICdhcGlDYWxscycsICdwaXBlbGluZXMnLCAncGx1Z2lucycpXG4gKiBAcmV0dXJucyBFeHByZXNzIG1pZGRsZXdhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUXVvdGEoXG4gIHF1b3RhU2VydmljZTogUXVvdGFTZXJ2aWNlLFxuICBxdW90YVR5cGU6IFF1b3RhVHlwZSxcbikge1xuICByZXR1cm4gYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgbGV0IG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGF1dGhIZWFkZXIgPSAnJztcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdHggPSBnZXRDb250ZXh0KHJlcSk7XG4gICAgICBvcmdJZCA9IGN0eC5pZGVudGl0eS5vcmdJZDtcbiAgICAgIGF1dGhIZWFkZXIgPSByZXEuaGVhZGVycy5hdXRob3JpemF0aW9uIHx8ICcnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ29udGV4dCBtaWRkbGV3YXJlIG5vdCBhcHBsaWVkIOKAlCBmYWlsIG9wZW4gKGxvZyBhbmQgY29udGludWUpXG4gICAgICBsb2dnZXIud2FybignUXVvdGEgY2hlY2sgc2tpcHBlZDogcmVxdWVzdCBjb250ZXh0IG5vdCBpbml0aWFsaXplZCcpO1xuICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG5cbiAgICBpZiAoIW9yZ0lkKSB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDAsICdPcmdhbml6YXRpb24gSUQgaXMgcmVxdWlyZWQgZm9yIHF1b3RhIGNoZWNrJywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdW90YVN0YXR1cyA9IGF3YWl0IHF1b3RhU2VydmljZS5jaGVjayhvcmdJZCwgcXVvdGFUeXBlLCBhdXRoSGVhZGVyKTtcblxuICAgICAgaWYgKCFxdW90YVN0YXR1cy5hbGxvd2VkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGAke3F1b3RhVHlwZX0gcXVvdGEgZXhjZWVkZWRgLCB7XG4gICAgICAgICAgb3JnSWQsXG4gICAgICAgICAgbGltaXQ6IHF1b3RhU3RhdHVzLmxpbWl0LFxuICAgICAgICAgIHVzZWQ6IHF1b3RhU3RhdHVzLnVzZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlbmRFcnJvcihcbiAgICAgICAgICByZXMsXG4gICAgICAgICAgNDI5LFxuICAgICAgICAgIGAke1FVT1RBX0xBQkVMU1txdW90YVR5cGVdfSBxdW90YSBleGNlZWRlZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yIHRvIGluY3JlYXNlIHlvdXIgcXVvdGEuYCxcbiAgICAgICAgICBFcnJvckNvZGUuUVVPVEFfRVhDRUVERUQsXG4gICAgICAgICAgeyBxdW90YTogeyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiBxdW90YVN0YXR1cy5saW1pdCwgdXNlZDogcXVvdGFTdGF0dXMudXNlZCwgcmVtYWluaW5nOiBxdW90YVN0YXR1cy5yZW1haW5pbmcgfSB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRmFpbCBvcGVuIOKAlCBhbGxvdyB0aGUgcmVxdWVzdCBpZiBxdW90YSBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlXG4gICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiBRdW90YSBjaGVjayBleGNlcHRpb24sIGFsbG93aW5nIHJlcXVlc3QnLCB7XG4gICAgICAgIG9yZ0lkLFxuICAgICAgICBxdW90YVR5cGUsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2NoZWNrLXF1b3RhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOztBQTJCdEMsZ0NBc0RDO0FBL0VELHlEQUFnRjtBQUdoRiwrQ0FBMkM7QUFFM0MsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRTNDLHlEQUF5RDtBQUN6RCxNQUFNLFlBQVksR0FBOEI7SUFDOUMsUUFBUSxFQUFFLFVBQVU7SUFDcEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsU0FBUyxFQUFFLFVBQVU7SUFDckIsT0FBTyxFQUFFLFFBQVE7Q0FDbEIsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsWUFBMEIsRUFDMUIsU0FBb0I7SUFFcEIsT0FBTyxLQUFLLEVBQUUsR0FBWSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFpQixFQUFFO1FBQzlFLElBQUksS0FBeUIsQ0FBQztRQUM5QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBQSx3QkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMzQixVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQy9DLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUEsb0JBQVMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLDZDQUE2QyxFQUFFLG9CQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMvRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRTNFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLGlCQUFpQixFQUFFO29CQUN6QyxLQUFLO29CQUNMLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztvQkFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2lCQUN2QixDQUFDLENBQUM7Z0JBRUgsSUFBQSxvQkFBUyxFQUNQLEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLDRFQUE0RSxFQUN0RyxvQkFBUyxDQUFDLGNBQWMsRUFDeEIsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDbkgsQ0FBQztnQkFDRixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQywwREFBMEQsRUFBRTtnQkFDdEUsS0FBSztnQkFDTCxTQUFTO2dCQUNULEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzlELENBQUMsQ0FBQztZQUNILElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRXJyb3JDb2RlLCBjcmVhdGVMb2dnZXIsIHNlbmRFcnJvciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUeXBlLCBRdW90YVNlcnZpY2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRDb250ZXh0IH0gZnJvbSAnLi9nZXQtY29udGV4dCc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignY2hlY2stcXVvdGEnKTtcblxuLyoqIEh1bWFuLXJlYWRhYmxlIGxhYmVscyBmb3IgcXVvdGEgZXhjZWVkZWQgbWVzc2FnZXMuICovXG5jb25zdCBRVU9UQV9MQUJFTFM6IFJlY29yZDxRdW90YVR5cGUsIHN0cmluZz4gPSB7XG4gIGFwaUNhbGxzOiAnQVBJIGNhbGwnLFxuICBhaUNhbGxzOiAnQUkgY2FsbCcsXG4gIHBpcGVsaW5lczogJ1BpcGVsaW5lJyxcbiAgcGx1Z2luczogJ1BsdWdpbicsXG59O1xuXG4vKipcbiAqIENyZWF0ZSBtaWRkbGV3YXJlIHRoYXQgY2hlY2tzIGEgc3BlY2lmaWMgcXVvdGEgdHlwZSBiZWZvcmUgcHJvY2VlZGluZy5cbiAqXG4gKiBPbiBxdW90YSBleGNlZWRlZCwgcmV0dXJucyBhIDQyOSByZXNwb25zZSB3aXRoIHF1b3RhIGRldGFpbHMuXG4gKiBPbiBxdW90YSBzZXJ2aWNlIGZhaWx1cmUsIGZhaWxzIG9wZW4gKGFsbG93cyB0aGUgcmVxdWVzdCkuXG4gKlxuICogQHBhcmFtIHF1b3RhU2VydmljZSAtIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKiBAcGFyYW0gcXVvdGFUeXBlIC0gV2hpY2ggcXVvdGEgdG8gY2hlY2sgKGUuZy4gJ2FwaUNhbGxzJywgJ3BpcGVsaW5lcycsICdwbHVnaW5zJylcbiAqIEByZXR1cm5zIEV4cHJlc3MgbWlkZGxld2FyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tRdW90YShcbiAgcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuKSB7XG4gIHJldHVybiBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBsZXQgb3JnSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYXV0aEhlYWRlciA9ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN0eCA9IGdldENvbnRleHQocmVxKTtcbiAgICAgIG9yZ0lkID0gY3R4LmlkZW50aXR5Lm9yZ0lkO1xuICAgICAgYXV0aEhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb24gfHwgJyc7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb250ZXh0IG1pZGRsZXdhcmUgbm90IGFwcGxpZWQg4oCUIGZhaWwgb3BlbiAobG9nIGFuZCBjb250aW51ZSlcbiAgICAgIGxvZ2dlci53YXJuKCdRdW90YSBjaGVjayBza2lwcGVkOiByZXF1ZXN0IGNvbnRleHQgbm90IGluaXRpYWxpemVkJyk7XG4gICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cblxuICAgIGlmICghb3JnSWQpIHtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwMCwgJ09yZ2FuaXphdGlvbiBJRCBpcyByZXF1aXJlZCBmb3IgcXVvdGEgY2hlY2snLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1b3RhU3RhdHVzID0gYXdhaXQgcXVvdGFTZXJ2aWNlLmNoZWNrKG9yZ0lkLCBxdW90YVR5cGUsIGF1dGhIZWFkZXIpO1xuXG4gICAgICBpZiAoIXF1b3RhU3RhdHVzLmFsbG93ZWQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYCR7cXVvdGFUeXBlfSBxdW90YSBleGNlZWRlZGAsIHtcbiAgICAgICAgICBvcmdJZCxcbiAgICAgICAgICBsaW1pdDogcXVvdGFTdGF0dXMubGltaXQsXG4gICAgICAgICAgdXNlZDogcXVvdGFTdGF0dXMudXNlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VuZEVycm9yKFxuICAgICAgICAgIHJlcyxcbiAgICAgICAgICA0MjksXG4gICAgICAgICAgYCR7UVVPVEFfTEFCRUxTW3F1b3RhVHlwZV19IHF1b3RhIGV4Y2VlZGVkLiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IgdG8gaW5jcmVhc2UgeW91ciBxdW90YS5gLFxuICAgICAgICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICAgICAgICB7IHF1b3RhOiB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IHF1b3RhU3RhdHVzLmxpbWl0LCB1c2VkOiBxdW90YVN0YXR1cy51c2VkLCByZW1haW5pbmc6IHF1b3RhU3RhdHVzLnJlbWFpbmluZyB9IH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBGYWlsIG9wZW4g4oCUIGFsbG93IHRoZSByZXF1ZXN0IGlmIHF1b3RhIHNlcnZpY2UgaXMgdW5hdmFpbGFibGVcbiAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIGNoZWNrIGV4Y2VwdGlvbiwgYWxsb3dpbmcgcmVxdWVzdCcsIHtcbiAgICAgICAgb3JnSWQsXG4gICAgICAgIHF1b3RhVHlwZSxcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -2,9 +2,10 @@ type HealthStatus = 'connected' | 'disconnected' | 'unknown';
2
2
  type HealthResult = Record<string, HealthStatus>;
3
3
  /**
4
4
  * Postgres health probe: returns `{ postgres: 'connected' }` when the pool's
5
- * connection test succeeds, `{ postgres: 'unknown' }` otherwise. Use as the
6
- * `checkDependencies` option of `createApp()` for any service backed by the
7
- * shared pipeline-data Drizzle connection.
5
+ * connection test succeeds, `{ postgres: 'disconnected' }` on any error
6
+ * (so `/health` correctly reports 503). Use as the `checkDependencies`
7
+ * option of `createApp()` for any service backed by the shared pipeline-data
8
+ * Drizzle connection.
8
9
  */
9
10
  export declare function postgresHealthCheck(): Promise<HealthResult>;
10
11
  /**
@@ -17,9 +18,11 @@ interface MongooseConnectionLike {
17
18
  }
18
19
  /**
19
20
  * MongoDB health probe factory: pass `mongoose.connection` and get back a
20
- * `checkDependencies` callback that reports `{ mongodb: 'connected' |
21
- * 'disconnected' | 'unknown' }` based on mongoose's readyState. Use for
22
- * services backed by mongoose.
21
+ * `checkDependencies` callback that reports based on mongoose's readyState.
22
+ *
23
+ * Mapping (per mongoose docs): 1=connected, 2=connecting, 3=disconnecting,
24
+ * any other value (0=disconnected, 99=uninitialized) is treated as
25
+ * 'disconnected' so `/health` returns 503.
23
26
  */
24
27
  export declare function mongoHealthCheck(connection: MongooseConnectionLike): () => Promise<HealthResult>;
25
28
  export {};
@@ -7,9 +7,10 @@ exports.mongoHealthCheck = mongoHealthCheck;
7
7
  const pipeline_core_1 = require("@pipeline-builder/pipeline-core");
8
8
  /**
9
9
  * Postgres health probe: returns `{ postgres: 'connected' }` when the pool's
10
- * connection test succeeds, `{ postgres: 'unknown' }` otherwise. Use as the
11
- * `checkDependencies` option of `createApp()` for any service backed by the
12
- * shared pipeline-data Drizzle connection.
10
+ * connection test succeeds, `{ postgres: 'disconnected' }` on any error
11
+ * (so `/health` correctly reports 503). Use as the `checkDependencies`
12
+ * option of `createApp()` for any service backed by the shared pipeline-data
13
+ * Drizzle connection.
13
14
  */
14
15
  async function postgresHealthCheck() {
15
16
  try {
@@ -17,20 +18,22 @@ async function postgresHealthCheck() {
17
18
  return { postgres: 'connected' };
18
19
  }
19
20
  catch {
20
- return { postgres: 'unknown' };
21
+ return { postgres: 'disconnected' };
21
22
  }
22
23
  }
23
24
  /**
24
25
  * MongoDB health probe factory: pass `mongoose.connection` and get back a
25
- * `checkDependencies` callback that reports `{ mongodb: 'connected' |
26
- * 'disconnected' | 'unknown' }` based on mongoose's readyState. Use for
27
- * services backed by mongoose.
26
+ * `checkDependencies` callback that reports based on mongoose's readyState.
27
+ *
28
+ * Mapping (per mongoose docs): 1=connected, 2=connecting, 3=disconnecting,
29
+ * any other value (0=disconnected, 99=uninitialized) is treated as
30
+ * 'disconnected' so `/health` returns 503.
28
31
  */
29
32
  function mongoHealthCheck(connection) {
30
33
  return async () => ({
31
34
  mongodb: connection.readyState === 1 ? 'connected'
32
- : connection.readyState === 0 ? 'unknown' // starting up
35
+ : connection.readyState === 2 ? 'unknown' // connecting; treat as transient
33
36
  : 'disconnected',
34
37
  });
35
38
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaGVhbHRoLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFhdEMsa0RBT0M7QUFpQkQsNENBTUM7QUF6Q0QsbUVBQWdFO0FBS2hFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUEsNkJBQWEsR0FBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDakMsQ0FBQztBQUNILENBQUM7QUFXRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFVBQWtDO0lBQ2pFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxVQUFVLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNoRCxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjO2dCQUN0RCxDQUFDLENBQUMsY0FBYztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGdldENvbm5lY3Rpb24gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcblxudHlwZSBIZWFsdGhTdGF0dXMgPSAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nO1xudHlwZSBIZWFsdGhSZXN1bHQgPSBSZWNvcmQ8c3RyaW5nLCBIZWFsdGhTdGF0dXM+O1xuXG4vKipcbiAqIFBvc3RncmVzIGhlYWx0aCBwcm9iZTogcmV0dXJucyBgeyBwb3N0Z3JlczogJ2Nvbm5lY3RlZCcgfWAgd2hlbiB0aGUgcG9vbCdzXG4gKiBjb25uZWN0aW9uIHRlc3Qgc3VjY2VlZHMsIGB7IHBvc3RncmVzOiAndW5rbm93bicgfWAgb3RoZXJ3aXNlLiBVc2UgYXMgdGhlXG4gKiBgY2hlY2tEZXBlbmRlbmNpZXNgIG9wdGlvbiBvZiBgY3JlYXRlQXBwKClgIGZvciBhbnkgc2VydmljZSBiYWNrZWQgYnkgdGhlXG4gKiBzaGFyZWQgcGlwZWxpbmUtZGF0YSBEcml6emxlIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Z3Jlc0hlYWx0aENoZWNrKCk6IFByb21pc2U8SGVhbHRoUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZ2V0Q29ubmVjdGlvbigpLnRlc3RDb25uZWN0aW9uKCk7XG4gICAgcmV0dXJuIHsgcG9zdGdyZXM6ICdjb25uZWN0ZWQnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IHBvc3RncmVzOiAndW5rbm93bicgfTtcbiAgfVxufVxuXG4vKipcbiAqIE1pbmltYWwgc2hhcGUgZXhwZWN0ZWQgb2YgYSBtb25nb29zZSBjb25uZWN0aW9uIGZvciB0aGUgaGVhbHRoIHByb2JlLlxuICogQWNjZXB0cyBgbW9uZ29vc2UuY29ubmVjdGlvbmAgZGlyZWN0bHkgd2l0aG91dCByZXF1aXJpbmcgbW9uZ29vc2UgYXMgYVxuICogZGVwZW5kZW5jeSBvZiBhcGktc2VydmVyLlxuICovXG5pbnRlcmZhY2UgTW9uZ29vc2VDb25uZWN0aW9uTGlrZSB7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb25nb0RCIGhlYWx0aCBwcm9iZSBmYWN0b3J5OiBwYXNzIGBtb25nb29zZS5jb25uZWN0aW9uYCBhbmQgZ2V0IGJhY2sgYVxuICogYGNoZWNrRGVwZW5kZW5jaWVzYCBjYWxsYmFjayB0aGF0IHJlcG9ydHMgYHsgbW9uZ29kYjogJ2Nvbm5lY3RlZCcgfFxuICogJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bicgfWAgYmFzZWQgb24gbW9uZ29vc2UncyByZWFkeVN0YXRlLiBVc2UgZm9yXG4gKiBzZXJ2aWNlcyBiYWNrZWQgYnkgbW9uZ29vc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb25nb0hlYWx0aENoZWNrKGNvbm5lY3Rpb246IE1vbmdvb3NlQ29ubmVjdGlvbkxpa2UpOiAoKSA9PiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKCkgPT4gKHtcbiAgICBtb25nb2RiOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDEgPyAnY29ubmVjdGVkJ1xuICAgICAgOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDAgPyAndW5rbm93bicgLy8gc3RhcnRpbmcgdXBcbiAgICAgICAgOiAnZGlzY29ubmVjdGVkJyxcbiAgfSk7XG59XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaGVhbHRoLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFjdEMsa0RBT0M7QUFtQkQsNENBTUM7QUE1Q0QsbUVBQWdFO0FBS2hFOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxtQkFBbUI7SUFDdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLDZCQUFhLEdBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBV0Q7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFVBQWtDO0lBQ2pFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxVQUFVLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNoRCxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUM7Z0JBQ3pFLENBQUMsQ0FBQyxjQUFjO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuXG50eXBlIEhlYWx0aFN0YXR1cyA9ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic7XG50eXBlIEhlYWx0aFJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIEhlYWx0aFN0YXR1cz47XG5cbi8qKlxuICogUG9zdGdyZXMgaGVhbHRoIHByb2JlOiByZXR1cm5zIGB7IHBvc3RncmVzOiAnY29ubmVjdGVkJyB9YCB3aGVuIHRoZSBwb29sJ3NcbiAqIGNvbm5lY3Rpb24gdGVzdCBzdWNjZWVkcywgYHsgcG9zdGdyZXM6ICdkaXNjb25uZWN0ZWQnIH1gIG9uIGFueSBlcnJvclxuICogKHNvIGAvaGVhbHRoYCBjb3JyZWN0bHkgcmVwb3J0cyA1MDMpLiBVc2UgYXMgdGhlIGBjaGVja0RlcGVuZGVuY2llc2BcbiAqIG9wdGlvbiBvZiBgY3JlYXRlQXBwKClgIGZvciBhbnkgc2VydmljZSBiYWNrZWQgYnkgdGhlIHNoYXJlZCBwaXBlbGluZS1kYXRhXG4gKiBEcml6emxlIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Z3Jlc0hlYWx0aENoZWNrKCk6IFByb21pc2U8SGVhbHRoUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZ2V0Q29ubmVjdGlvbigpLnRlc3RDb25uZWN0aW9uKCk7XG4gICAgcmV0dXJuIHsgcG9zdGdyZXM6ICdjb25uZWN0ZWQnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IHBvc3RncmVzOiAnZGlzY29ubmVjdGVkJyB9O1xuICB9XG59XG5cbi8qKlxuICogTWluaW1hbCBzaGFwZSBleHBlY3RlZCBvZiBhIG1vbmdvb3NlIGNvbm5lY3Rpb24gZm9yIHRoZSBoZWFsdGggcHJvYmUuXG4gKiBBY2NlcHRzIGBtb25nb29zZS5jb25uZWN0aW9uYCBkaXJlY3RseSB3aXRob3V0IHJlcXVpcmluZyBtb25nb29zZSBhcyBhXG4gKiBkZXBlbmRlbmN5IG9mIGFwaS1zZXJ2ZXIuXG4gKi9cbmludGVyZmFjZSBNb25nb29zZUNvbm5lY3Rpb25MaWtlIHtcbiAgcmVhZHlTdGF0ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vbmdvREIgaGVhbHRoIHByb2JlIGZhY3Rvcnk6IHBhc3MgYG1vbmdvb3NlLmNvbm5lY3Rpb25gIGFuZCBnZXQgYmFjayBhXG4gKiBgY2hlY2tEZXBlbmRlbmNpZXNgIGNhbGxiYWNrIHRoYXQgcmVwb3J0cyBiYXNlZCBvbiBtb25nb29zZSdzIHJlYWR5U3RhdGUuXG4gKlxuICogTWFwcGluZyAocGVyIG1vbmdvb3NlIGRvY3MpOiAxPWNvbm5lY3RlZCwgMj1jb25uZWN0aW5nLCAzPWRpc2Nvbm5lY3RpbmcsXG4gKiBhbnkgb3RoZXIgdmFsdWUgKDA9ZGlzY29ubmVjdGVkLCA5OT11bmluaXRpYWxpemVkKSBpcyB0cmVhdGVkIGFzXG4gKiAnZGlzY29ubmVjdGVkJyBzbyBgL2hlYWx0aGAgcmV0dXJucyA1MDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb25nb0hlYWx0aENoZWNrKGNvbm5lY3Rpb246IE1vbmdvb3NlQ29ubmVjdGlvbkxpa2UpOiAoKSA9PiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKCkgPT4gKHtcbiAgICBtb25nb2RiOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDEgPyAnY29ubmVjdGVkJ1xuICAgICAgOiBjb25uZWN0aW9uLnJlYWR5U3RhdGUgPT09IDIgPyAndW5rbm93bicgLy8gY29ubmVjdGluZzsgdHJlYXQgYXMgdHJhbnNpZW50XG4gICAgICAgIDogJ2Rpc2Nvbm5lY3RlZCcsXG4gIH0pO1xufVxuIl19
@@ -1 +1 @@
1
- export { requireAuth, requireOrganization, requireAdmin, requireFeature, isSystemOrg, isSystemAdmin, type RequireAuthOptions, } from '@pipeline-builder/api-core';
1
+ export { requireAuth, requireAdmin, requireFeature, isSystemOrg, isSystemAdmin, type RequireAuthOptions, } from '@pipeline-builder/api-core';
@@ -2,13 +2,12 @@
2
2
  // Copyright 2026 Pipeline Builder Contributors
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.isSystemAdmin = exports.isSystemOrg = exports.requireFeature = exports.requireAdmin = exports.requireOrganization = exports.requireAuth = void 0;
5
+ exports.isSystemAdmin = exports.isSystemOrg = exports.requireFeature = exports.requireAdmin = exports.requireAuth = void 0;
6
6
  // Re-export all authentication middleware from api-core
7
7
  var api_core_1 = require("@pipeline-builder/api-core");
8
8
  Object.defineProperty(exports, "requireAuth", { enumerable: true, get: function () { return api_core_1.requireAuth; } });
9
- Object.defineProperty(exports, "requireOrganization", { enumerable: true, get: function () { return api_core_1.requireOrganization; } });
10
9
  Object.defineProperty(exports, "requireAdmin", { enumerable: true, get: function () { return api_core_1.requireAdmin; } });
11
10
  Object.defineProperty(exports, "requireFeature", { enumerable: true, get: function () { return api_core_1.requireFeature; } });
12
11
  Object.defineProperty(exports, "isSystemOrg", { enumerable: true, get: function () { return api_core_1.isSystemOrg; } });
13
12
  Object.defineProperty(exports, "isSystemAdmin", { enumerable: true, get: function () { return api_core_1.isSystemAdmin; } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDLHdEQUF3RDtBQUN4RCx1REFRb0M7QUFQbEMsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsK0dBQUEsbUJBQW1CLE9BQUE7QUFDbkIsd0dBQUEsWUFBWSxPQUFBO0FBQ1osMEdBQUEsY0FBYyxPQUFBO0FBQ2QsdUdBQUEsV0FBVyxPQUFBO0FBQ1gseUdBQUEsYUFBYSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8vIFJlLWV4cG9ydCBhbGwgYXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBmcm9tIGFwaS1jb3JlXG5leHBvcnQge1xuICByZXF1aXJlQXV0aCxcbiAgcmVxdWlyZU9yZ2FuaXphdGlvbixcbiAgcmVxdWlyZUFkbWluLFxuICByZXF1aXJlRmVhdHVyZSxcbiAgaXNTeXN0ZW1PcmcsXG4gIGlzU3lzdGVtQWRtaW4sXG4gIHR5cGUgUmVxdWlyZUF1dGhPcHRpb25zLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDLHdEQUF3RDtBQUN4RCx1REFPb0M7QUFObEMsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsd0dBQUEsWUFBWSxPQUFBO0FBQ1osMEdBQUEsY0FBYyxPQUFBO0FBQ2QsdUdBQUEsV0FBVyxPQUFBO0FBQ1gseUdBQUEsYUFBYSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8vIFJlLWV4cG9ydCBhbGwgYXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBmcm9tIGFwaS1jb3JlXG5leHBvcnQge1xuICByZXF1aXJlQXV0aCxcbiAgcmVxdWlyZUFkbWluLFxuICByZXF1aXJlRmVhdHVyZSxcbiAgaXNTeXN0ZW1PcmcsXG4gIGlzU3lzdGVtQWRtaW4sXG4gIHR5cGUgUmVxdWlyZUF1dGhPcHRpb25zLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG4iXX0=
@@ -1,2 +1 @@
1
1
  export * from './sse-connection-manager';
2
- export * from './ws-manager';
package/lib/http/index.js CHANGED
@@ -17,5 +17,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  };
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  __exportStar(require("./sse-connection-manager"), exports);
20
- __exportStar(require("./ws-manager"), exports);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QywyREFBeUM7QUFDekMsK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vc3NlLWNvbm5lY3Rpb24tbWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuL3dzLW1hbmFnZXInO1xuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QywyREFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9zc2UtY29ubmVjdGlvbi1tYW5hZ2VyJztcbiJdfQ==
package/package.json CHANGED
@@ -31,8 +31,6 @@
31
31
  "@opentelemetry/exporter-trace-otlp-http": "0.213.0",
32
32
  "@opentelemetry/resources": "2.6.0",
33
33
  "@opentelemetry/sdk-node": "0.213.0",
34
- "@pipeline-builder/api-core": "3.3.10",
35
- "@pipeline-builder/pipeline-core": "3.3.10",
36
34
  "compression": "1.8.0",
37
35
  "cors": "2.8.6",
38
36
  "express": "5.2.1",
@@ -43,7 +41,9 @@
43
41
  "prom-client": "15.1.3",
44
42
  "rate-limit-redis": "4.2.0",
45
43
  "swagger-ui-express": "5.0.1",
46
- "uuid": "13.0.0"
44
+ "uuid": "13.0.0",
45
+ "@pipeline-builder/api-core": "3.3.12",
46
+ "@pipeline-builder/pipeline-core": "3.3.12"
47
47
  },
48
48
  "keywords": [
49
49
  "aws",
@@ -83,7 +83,7 @@
83
83
  "main": "lib/index.js",
84
84
  "license": "Apache-2.0",
85
85
  "homepage": "https://mwashburn160.github.io/pipeline-builder/",
86
- "version": "3.3.11",
86
+ "version": "3.3.12",
87
87
  "bugs": {
88
88
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
89
89
  },
@@ -1,37 +0,0 @@
1
- export interface WSClient {
2
- id: string;
3
- orgId: string;
4
- send(data: string): void;
5
- close(): void;
6
- }
7
- type MessageHandler = (client: WSClient, message: Record<string, unknown>) => void;
8
- /**
9
- * WebSocket connection manager.
10
- * Manages authenticated WebSocket connections per org.
11
- * Works alongside SSE for backward compatibility.
12
- *
13
- * Requires a WebSocket library (ws) to be wired in at server startup.
14
- * This module provides the management layer only.
15
- */
16
- export declare class WSManager {
17
- private clients;
18
- private handlers;
19
- private maxClientsPerOrg;
20
- constructor(options?: {
21
- maxClientsPerOrg?: number;
22
- });
23
- addClient(client: WSClient): boolean;
24
- removeClient(client: WSClient): void;
25
- onMessage(type: string, handler: MessageHandler): void;
26
- handleMessage(client: WSClient, raw: string): void;
27
- sendToOrg(orgId: string, type: string, data: unknown): number;
28
- broadcast(type: string, data: unknown): number;
29
- getStats(): {
30
- orgs: number;
31
- clients: number;
32
- };
33
- }
34
- export declare function createWSManager(options?: {
35
- maxClientsPerOrg?: number;
36
- }): WSManager;
37
- export {};
@@ -1,105 +0,0 @@
1
- "use strict";
2
- // Copyright 2026 Pipeline Builder Contributors
3
- // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.WSManager = void 0;
6
- exports.createWSManager = createWSManager;
7
- const api_core_1 = require("@pipeline-builder/api-core");
8
- const logger = (0, api_core_1.createLogger)('ws-manager');
9
- /**
10
- * WebSocket connection manager.
11
- * Manages authenticated WebSocket connections per org.
12
- * Works alongside SSE for backward compatibility.
13
- *
14
- * Requires a WebSocket library (ws) to be wired in at server startup.
15
- * This module provides the management layer only.
16
- */
17
- class WSManager {
18
- clients = new Map();
19
- handlers = new Map();
20
- maxClientsPerOrg;
21
- constructor(options = {}) {
22
- this.maxClientsPerOrg = options.maxClientsPerOrg ?? 50;
23
- }
24
- addClient(client) {
25
- if (!this.clients.has(client.orgId)) {
26
- this.clients.set(client.orgId, new Set());
27
- }
28
- const orgClients = this.clients.get(client.orgId);
29
- if (orgClients.size >= this.maxClientsPerOrg) {
30
- logger.warn('Max WebSocket clients reached for org', { orgId: client.orgId });
31
- return false;
32
- }
33
- orgClients.add(client);
34
- logger.debug('WebSocket client connected', { orgId: client.orgId, clientId: client.id, total: orgClients.size });
35
- return true;
36
- }
37
- removeClient(client) {
38
- const orgClients = this.clients.get(client.orgId);
39
- if (orgClients) {
40
- orgClients.delete(client);
41
- if (orgClients.size === 0)
42
- this.clients.delete(client.orgId);
43
- }
44
- }
45
- onMessage(type, handler) {
46
- this.handlers.set(type, handler);
47
- }
48
- handleMessage(client, raw) {
49
- try {
50
- const msg = JSON.parse(raw);
51
- if (!msg.type)
52
- return;
53
- const handler = this.handlers.get(msg.type);
54
- if (handler)
55
- handler(client, msg);
56
- }
57
- catch {
58
- logger.debug('Invalid WebSocket message', { clientId: client.id });
59
- }
60
- }
61
- sendToOrg(orgId, type, data) {
62
- const orgClients = this.clients.get(orgId);
63
- if (!orgClients)
64
- return 0;
65
- const payload = JSON.stringify({ type, data, ts: new Date().toISOString() });
66
- let sent = 0;
67
- for (const client of orgClients) {
68
- try {
69
- client.send(payload);
70
- sent++;
71
- }
72
- catch {
73
- this.removeClient(client);
74
- }
75
- }
76
- return sent;
77
- }
78
- broadcast(type, data) {
79
- const payload = JSON.stringify({ type, data, ts: new Date().toISOString() });
80
- let sent = 0;
81
- for (const [, orgClients] of this.clients) {
82
- for (const client of orgClients) {
83
- try {
84
- client.send(payload);
85
- sent++;
86
- }
87
- catch {
88
- this.removeClient(client);
89
- }
90
- }
91
- }
92
- return sent;
93
- }
94
- getStats() {
95
- let clients = 0;
96
- for (const [, orgClients] of this.clients)
97
- clients += orgClients.size;
98
- return { orgs: this.clients.size, clients };
99
- }
100
- }
101
- exports.WSManager = WSManager;
102
- function createWSManager(options) {
103
- return new WSManager(options);
104
- }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL3dzLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQWtHdEMsMENBRUM7QUFsR0QseURBQTBEO0FBRTFELE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQVksRUFBQyxZQUFZLENBQUMsQ0FBQztBQVcxQzs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxTQUFTO0lBQ1osT0FBTyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQzNDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUM3QyxnQkFBZ0IsQ0FBUztJQUVqQyxZQUFZLFVBQXlDLEVBQUU7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFnQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUUsQ0FBQztRQUNuRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM5RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxVQUFVLENBQUMsR0FBRyxDQUFD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QUM7Z0JBQ2hDLElBQUksQ0FBQztvQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUFDLElBQUksRUFBRSxDQUFDO2dCQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsS0FBSyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBekVELDhCQXlFQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxPQUF1QztJQUNyRSxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3dzLW1hbmFnZXInKTtcblxuZXhwb3J0IGludGVyZmFjZSBXU0NsaWVudCB7XG4gIGlkOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHNlbmQoZGF0YTogc3RyaW5nKTogdm9pZDtcbiAgY2xvc2UoKTogdm9pZDtcbn1cblxudHlwZSBNZXNzYWdlSGFuZGxlciA9IChjbGllbnQ6IFdTQ2xpZW50LCBtZXNzYWdlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcblxuLyoqXG4gKiBXZWJTb2NrZXQgY29ubmVjdGlvbiBtYW5hZ2VyLlxuICogTWFuYWdlcyBhdXRoZW50aWNhdGVkIFdlYlNvY2tldCBjb25uZWN0aW9ucyBwZXIgb3JnLlxuICogV29ya3MgYWxvbmdzaWRlIFNTRSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBSZXF1aXJlcyBhIFdlYlNvY2tldCBsaWJyYXJ5ICh3cykgdG8gYmUgd2lyZWQgaW4gYXQgc2VydmVyIHN0YXJ0dXAuXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgbWFuYWdlbWVudCBsYXllciBvbmx5LlxuICovXG5leHBvcnQgY2xhc3MgV1NNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBjbGllbnRzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxXU0NsaWVudD4+KCk7XG4gIHByaXZhdGUgaGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgTWVzc2FnZUhhbmRsZXI+KCk7XG4gIHByaXZhdGUgbWF4Q2xpZW50c1Blck9yZzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgbWF4Q2xpZW50c1Blck9yZz86IG51bWJlciB9ID0ge30pIHtcbiAgICB0aGlzLm1heENsaWVudHNQZXJPcmcgPSBvcHRpb25zLm1heENsaWVudHNQZXJPcmcgPz8gNTA7XG4gIH1cblxuICBhZGRDbGllbnQoY2xpZW50OiBXU0NsaWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jbGllbnRzLmhhcyhjbGllbnQub3JnSWQpKSB7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KGNsaWVudC5vcmdJZCwgbmV3IFNldCgpKTtcbiAgICB9XG4gICAgY29uc3Qgb3JnQ2xpZW50cyA9IHRoaXMuY2xpZW50cy5nZXQoY2xpZW50Lm9yZ0lkKSE7XG4gICAgaWYgKG9yZ0NsaWVudHMuc2l6ZSA+PSB0aGlzLm1heENsaWVudHNQZXJPcmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdNYXggV2ViU29ja2V0IGNsaWVudHMgcmVhY2hlZCBmb3Igb3JnJywgeyBvcmdJZDogY2xpZW50Lm9yZ0lkIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvcmdDbGllbnRzLmFkZChjbGllbnQpO1xuICAgIGxvZ2dlci5kZWJ1ZygnV2ViU29ja2V0IGNsaWVudCBjb25uZWN0ZWQnLCB7IG9yZ0lkOiBjbGllbnQub3JnSWQsIGNsaWVudElkOiBjbGllbnQuaWQsIHRvdGFsOiBvcmdDbGllbnRzLnNpemUgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZW1vdmVDbGllbnQoY2xpZW50OiBXU0NsaWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9yZ0NsaWVudHMgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudC5vcmdJZCk7XG4gICAgaWYgKG9yZ0NsaWVudHMpIHtcbiAgICAgIG9yZ0NsaWVudHMuZGVsZXRlKGNsaWVudCk7XG4gICAgICBpZiAob3JnQ2xpZW50cy5zaXplID09PSAwKSB0aGlzLmNsaWVudHMuZGVsZXRlKGNsaWVudC5vcmdJZCk7XG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlKHR5cGU6IHN0cmluZywgaGFuZGxlcjogTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZXJzLnNldCh0eXBlLCBoYW5kbGVyKTtcbiAgfVxuXG4gIGhhbmRsZU1lc3NhZ2UoY2xpZW50OiBXU0NsaWVudCwgcmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbXNnID0gSlNPTi5wYXJzZShyYXcpIGFzIHsgdHlwZT86IHN0cmluZzsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuICAgICAgaWYgKCFtc2cudHlwZSkgcmV0dXJuO1xuICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlcnMuZ2V0KG1zZy50eXBlKTtcbiAgICAgIGlmIChoYW5kbGVyKSBoYW5kbGVyKGNsaWVudCwgbXNnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnSW52YWxpZCBXZWJTb2NrZXQgbWVzc2FnZScsIHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9KTtcbiAgICB9XG4gIH1cblxuICBzZW5kVG9Pcmcob3JnSWQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogbnVtYmVyIHtcbiAgICBjb25zdCBvcmdDbGllbnRzID0gdGhpcy5jbGllbnRzLmdldChvcmdJZCk7XG4gICAgaWYgKCFvcmdDbGllbnRzKSByZXR1cm4gMDtcbiAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyB0eXBlLCBkYXRhLCB0czogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICAgIGxldCBzZW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBvcmdDbGllbnRzKSB7XG4gICAgICB0cnkgeyBjbGllbnQuc2VuZChwYXlsb2FkKTsgc2VudCsrOyB9IGNhdGNoIHsgdGhpcy5yZW1vdmVDbGllbnQoY2xpZW50KTsgfVxuICAgIH1cbiAgICByZXR1cm4gc2VudDtcbiAgfVxuXG4gIGJyb2FkY2FzdCh0eXBlOiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiBudW1iZXIge1xuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7IHR5cGUsIGRhdGEsIHRzOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSk7XG4gICAgbGV0IHNlbnQgPSAwO1xuICAgIGZvciAoY29uc3QgWywgb3JnQ2xpZW50c10gb2YgdGhpcy5jbGllbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBvcmdDbGllbnRzKSB7XG4gICAgICAgIHRyeSB7IGNsaWVudC5zZW5kKHBheWxvYWQpOyBzZW50Kys7IH0gY2F0Y2ggeyB0aGlzLnJlbW92ZUNsaWVudChjbGllbnQpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZW50O1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogeyBvcmdzOiBudW1iZXI7IGNsaWVudHM6IG51bWJlciB9IHtcbiAgICBsZXQgY2xpZW50cyA9IDA7XG4gICAgZm9yIChjb25zdCBbLCBvcmdDbGllbnRzXSBvZiB0aGlzLmNsaWVudHMpIGNsaWVudHMgKz0gb3JnQ2xpZW50cy5zaXplO1xuICAgIHJldHVybiB7IG9yZ3M6IHRoaXMuY2xpZW50cy5zaXplLCBjbGllbnRzIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdTTWFuYWdlcihvcHRpb25zPzogeyBtYXhDbGllbnRzUGVyT3JnPzogbnVtYmVyIH0pOiBXU01hbmFnZXIge1xuICByZXR1cm4gbmV3IFdTTWFuYWdlcihvcHRpb25zKTtcbn1cbiJdfQ==