@pipeline-builder/pipeline-data 3.4.64 → 3.4.65

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.
@@ -1,5 +1,5 @@
1
- export * from './drizzle-schema';
2
- export * from './postgres-connection';
3
- export * from './retry-strategy';
4
- export * from './tenancy';
5
- export { runMigrations, type MigrateOptions } from './migrator';
1
+ export * from './drizzle-schema.js';
2
+ export * from './postgres-connection.js';
3
+ export * from './retry-strategy.js';
4
+ export * from './tenancy.js';
5
+ export { runMigrations, type MigrateOptions } from './migrator.js';
@@ -1,26 +1,8 @@
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
- exports.runMigrations = void 0;
20
- __exportStar(require("./drizzle-schema"), exports);
21
- __exportStar(require("./postgres-connection"), exports);
22
- __exportStar(require("./retry-strategy"), exports);
23
- __exportStar(require("./tenancy"), exports);
24
- var migrator_1 = require("./migrator");
25
- Object.defineProperty(exports, "runMigrations", { enumerable: true, get: function () { return migrator_1.runMigrations; } });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLG1EQUFpQztBQUNqQyx3REFBc0M7QUFDdEMsbURBQWlDO0FBQ2pDLDRDQUEwQjtBQUMxQix1Q0FBZ0U7QUFBdkQseUdBQUEsYUFBYSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vZHJpenpsZS1zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3N0Z3Jlcy1jb25uZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcmV0cnktc3RyYXRlZ3knO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbmN5JztcbmV4cG9ydCB7IHJ1bk1pZ3JhdGlvbnMsIHR5cGUgTWlncmF0ZU9wdGlvbnMgfSBmcm9tICcuL21pZ3JhdG9yJztcbiJdfQ==
3
+ export * from './drizzle-schema.js';
4
+ export * from './postgres-connection.js';
5
+ export * from './retry-strategy.js';
6
+ export * from './tenancy.js';
7
+ export { runMigrations } from './migrator.js';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2RyaXp6bGUtc2NoZW1hLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zdGdyZXMtY29ubmVjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW5jeS5qcyc7XG5leHBvcnQgeyBydW5NaWdyYXRpb25zLCB0eXBlIE1pZ3JhdGVPcHRpb25zIH0gZnJvbSAnLi9taWdyYXRvci5qcyc7XG4iXX0=
@@ -1,41 +1,5 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
- Object.defineProperty(o, "default", { enumerable: true, value: v });
17
- }) : function(o, v) {
18
- o["default"] = v;
19
- });
20
- var __importStar = (this && this.__importStar) || (function () {
21
- var ownKeys = function(o) {
22
- ownKeys = Object.getOwnPropertyNames || function (o) {
23
- var ar = [];
24
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
- return ar;
26
- };
27
- return ownKeys(o);
28
- };
29
- return function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
- })();
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.runMigrations = runMigrations;
39
3
  /**
40
4
  * Drizzle migration runner.
41
5
  *
@@ -52,12 +16,12 @@ exports.runMigrations = runMigrations;
52
16
  * by default for the snapshot-based generator). Future schema changes ship
53
17
  * as additive migrations.
54
18
  */
55
- const fs = __importStar(require("fs"));
56
- const path = __importStar(require("path"));
57
- const api_core_1 = require("@pipeline-builder/api-core");
58
- const migrator_1 = require("drizzle-orm/node-postgres/migrator");
59
- const postgres_connection_1 = require("./postgres-connection");
60
- const logger = (0, api_core_1.createLogger)('migrator');
19
+ import * as fs from 'fs';
20
+ import * as path from 'path';
21
+ import { createLogger } from '@pipeline-builder/api-core';
22
+ import { migrate } from 'drizzle-orm/node-postgres/migrator';
23
+ import { getConnection } from './postgres-connection.js';
24
+ const logger = createLogger('migrator');
61
25
  /** Resolve the default migrations folder relative to this package. */
62
26
  function defaultMigrationsFolder() {
63
27
  // src/database/migrator.ts → up two levels → package root, then ./drizzle
@@ -74,7 +38,7 @@ function defaultMigrationsFolder() {
74
38
  * Throws on any actual migration failure so the service refuses to start
75
39
  * with a half-applied schema.
76
40
  */
77
- async function runMigrations(options = {}) {
41
+ export async function runMigrations(options = {}) {
78
42
  if (options.skip) {
79
43
  logger.info('Migration runner skipped via options.skip');
80
44
  return;
@@ -94,11 +58,11 @@ async function runMigrations(options = {}) {
94
58
  logger.info('No drizzle journal found, nothing to run', { journalPath });
95
59
  return;
96
60
  }
97
- const conn = (0, postgres_connection_1.getConnection)();
61
+ const conn = getConnection();
98
62
  const migrationsTable = options.migrationsTable ?? '__drizzle_migrations';
99
63
  logger.info('Running pending Drizzle migrations', { migrationsFolder, migrationsTable });
100
64
  try {
101
- await (0, migrator_1.migrate)(conn.db, { migrationsFolder, migrationsTable });
65
+ await migrate(conn.db, { migrationsFolder, migrationsTable });
102
66
  logger.info('Drizzle migrations complete');
103
67
  }
104
68
  catch (err) {
@@ -108,4 +72,4 @@ async function runMigrations(options = {}) {
108
72
  throw err;
109
73
  }
110
74
  }
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUR0QyxzQ0FxQ0M7QUF4RkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix5REFBMEQ7QUFDMUQsaUVBQTZEO0FBQzdELCtEQUFzRDtBQUV0RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFZLEVBQUMsVUFBVSxDQUFDLENBQUM7QUFXeEMsc0VBQXNFO0FBQ3RFLFNBQVMsdUJBQXVCO0lBQzlCLDBFQUEwRTtJQUMxRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUFDLFVBQTBCLEVBQUU7SUFDOUQsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3pELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztJQUM5QyxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNsRSxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLHVCQUF1QixFQUFFLENBQUM7SUFDL0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN6RSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQ0FBYSxHQUFFLENBQUM7SUFDN0IsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxzQkFBc0IsQ0FBQztJQUUxRSxNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUN6RixJQUFJLENBQUM7UUFDSCxNQUFNLElBQUEsa0JBQU8sRUFBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxFQUFFO1lBQzNELEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ3hELENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEcml6emxlIG1pZ3JhdGlvbiBydW5uZXIuXG4gKlxuICogSWRlbXBvdGVudDogc2FmZSB0byBjYWxsIG9uIGV2ZXJ5IHNlcnZpY2Ugc3RhcnQuIGRyaXp6bGUgdHJhY2tzIGFwcGxpZWRcbiAqIG1pZ3JhdGlvbnMgaW4gdGhlIGBfX2RyaXp6bGVfbWlncmF0aW9uc2AgdGFibGUgYW5kIHNraXBzIG9uZXMgYWxyZWFkeSBydW4uXG4gKlxuICogVGhlIG1pZ3JhdGlvbiBmaWxlcyBsaXZlIGF0IGBwYWNrYWdlcy9waXBlbGluZS1kYXRhL2RyaXp6bGUvYCBhbmQgYXJlXG4gKiBnZW5lcmF0ZWQgZnJvbSB0aGUgYGRyaXp6bGUtc2NoZW1hLnRzYCBzb3VyY2UgdmlhIGBwbnBtIGRiOmdlbmVyYXRlYFxuICogKHdoaWNoIGludm9rZXMgYGRyaXp6bGUta2l0IGdlbmVyYXRlYCkuXG4gKlxuICogRm9yIGJyYW5kLW5ldyBkZXBsb3lzLCBgcG9zdGdyZXMtaW5pdC5zcWxgIHN0aWxsIGNyZWF0ZXMgdGhlIGJhc2VsaW5lXG4gKiB0YWJsZXMg4oCUIHRoZSBtaWdyYXRpb24gcnVubmVyIHdpbGwgc2tpcCBpdHMgaW5pdGlhbCBiYXNlbGluZSBtaWdyYXRpb25cbiAqIGJlY2F1c2UgdGhlIHRhYmxlcyBhbHJlYWR5IGV4aXN0IChkcml6emxlIHVzZXMgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFNcbiAqIGJ5IGRlZmF1bHQgZm9yIHRoZSBzbmFwc2hvdC1iYXNlZCBnZW5lcmF0b3IpLiBGdXR1cmUgc2NoZW1hIGNoYW5nZXMgc2hpcFxuICogYXMgYWRkaXRpdmUgbWlncmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgbWlncmF0ZSB9IGZyb20gJ2RyaXp6bGUtb3JtL25vZGUtcG9zdGdyZXMvbWlncmF0b3InO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJy4vcG9zdGdyZXMtY29ubmVjdGlvbic7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignbWlncmF0b3InKTtcblxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRlT3B0aW9ucyB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBtaWdyYXRpb25zIGZvbGRlci4gRGVmYXVsdHMgdG8gYDxwYWNrYWdlPi9kcml6emxlYC4gKi9cbiAgbWlncmF0aW9uc0ZvbGRlcj86IHN0cmluZztcbiAgLyoqIFNjaGVtYS1xdWFsaWZpZWQgbWlncmF0aW9ucyB0YWJsZSBuYW1lLiBEZWZhdWx0cyB0byBgX19kcml6emxlX21pZ3JhdGlvbnNgLiAqL1xuICBtaWdyYXRpb25zVGFibGU/OiBzdHJpbmc7XG4gIC8qKiBTa2lwIHRoZSBydW5uZXIgZW50aXJlbHkgKGZvciB0ZXN0cyBvciB3aGVuIGEgZGVwbG95IHVzZXMgYW4gZXh0ZXJuYWwgbWlncmF0aW9uIHRvb2wpLiAqL1xuICBza2lwPzogYm9vbGVhbjtcbn1cblxuLyoqIFJlc29sdmUgdGhlIGRlZmF1bHQgbWlncmF0aW9ucyBmb2xkZXIgcmVsYXRpdmUgdG8gdGhpcyBwYWNrYWdlLiAqL1xuZnVuY3Rpb24gZGVmYXVsdE1pZ3JhdGlvbnNGb2xkZXIoKTogc3RyaW5nIHtcbiAgLy8gc3JjL2RhdGFiYXNlL21pZ3JhdG9yLnRzIOKGkiB1cCB0d28gbGV2ZWxzIOKGkiBwYWNrYWdlIHJvb3QsIHRoZW4gLi9kcml6emxlXG4gIHJldHVybiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnZHJpenpsZScpO1xufVxuXG4vKipcbiAqIFJ1biBhbnkgcGVuZGluZyBEcml6emxlIG1pZ3JhdGlvbnMgYWdhaW5zdCB0aGUgY29uZmlndXJlZCBQb3N0Z3Jlcy5cbiAqXG4gKiBOby1vcHMgZ3JhY2VmdWxseSB3aGVuOlxuICogICAtIGBvcHRpb25zLnNraXBgIGlzIHRydWVcbiAqICAgLSBgUlVOX0RCX01JR1JBVElPTlNgIGVudiB2YXIgaXMgc2V0IHRvIGEgZmFsc3kgdmFsdWUgKGAwYC9gZmFsc2VgKVxuICogICAtIHRoZSBtaWdyYXRpb25zIGZvbGRlciBkb2Vzbid0IGV4aXN0IChmcmVzaCByZXBvLCBub3RoaW5nIGdlbmVyYXRlZCB5ZXQpXG4gKlxuICogVGhyb3dzIG9uIGFueSBhY3R1YWwgbWlncmF0aW9uIGZhaWx1cmUgc28gdGhlIHNlcnZpY2UgcmVmdXNlcyB0byBzdGFydFxuICogd2l0aCBhIGhhbGYtYXBwbGllZCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5NaWdyYXRpb25zKG9wdGlvbnM6IE1pZ3JhdGVPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG9wdGlvbnMuc2tpcCkge1xuICAgIGxvZ2dlci5pbmZvKCdNaWdyYXRpb24gcnVubmVyIHNraXBwZWQgdmlhIG9wdGlvbnMuc2tpcCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVudkZsYWcgPSBwcm9jZXNzLmVudi5SVU5fREJfTUlHUkFUSU9OUztcbiAgaWYgKGVudkZsYWcgIT09IHVuZGVmaW5lZCAmJiAoZW52RmxhZyA9PT0gJzAnIHx8IGVudkZsYWcudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJykpIHtcbiAgICBsb2dnZXIuaW5mbygnTWlncmF0aW9uIHJ1bm5lciBza2lwcGVkIHZpYSBSVU5fREJfTUlHUkFUSU9OUyBlbnYnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtaWdyYXRpb25zRm9sZGVyID0gb3B0aW9ucy5taWdyYXRpb25zRm9sZGVyID8/IGRlZmF1bHRNaWdyYXRpb25zRm9sZGVyKCk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhtaWdyYXRpb25zRm9sZGVyKSkge1xuICAgIGxvZ2dlci5pbmZvKCdObyBtaWdyYXRpb25zIGZvbGRlciBmb3VuZCwgbm90aGluZyB0byBydW4nLCB7IG1pZ3JhdGlvbnNGb2xkZXIgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgam91cm5hbFBhdGggPSBwYXRoLmpvaW4obWlncmF0aW9uc0ZvbGRlciwgJ21ldGEnLCAnX2pvdXJuYWwuanNvbicpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoam91cm5hbFBhdGgpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ05vIGRyaXp6bGUgam91cm5hbCBmb3VuZCwgbm90aGluZyB0byBydW4nLCB7IGpvdXJuYWxQYXRoIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbm4gPSBnZXRDb25uZWN0aW9uKCk7XG4gIGNvbnN0IG1pZ3JhdGlvbnNUYWJsZSA9IG9wdGlvbnMubWlncmF0aW9uc1RhYmxlID8/ICdfX2RyaXp6bGVfbWlncmF0aW9ucyc7XG5cbiAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgcGVuZGluZyBEcml6emxlIG1pZ3JhdGlvbnMnLCB7IG1pZ3JhdGlvbnNGb2xkZXIsIG1pZ3JhdGlvbnNUYWJsZSB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBtaWdyYXRlKGNvbm4uZGIsIHsgbWlncmF0aW9uc0ZvbGRlciwgbWlncmF0aW9uc1RhYmxlIH0pO1xuICAgIGxvZ2dlci5pbmZvKCdEcml6emxlIG1pZ3JhdGlvbnMgY29tcGxldGUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdEcml6emxlIG1pZ3JhdGlvbiBmYWlsZWQg4oCUIHJlZnVzaW5nIHRvIHN0YXJ0Jywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFXeEMsc0VBQXNFO0FBQ3RFLFNBQVMsdUJBQXVCO0lBQzlCLDBFQUEwRTtJQUMxRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxVQUEwQixFQUFFO0lBQzlELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUN6RCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7SUFDOUMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwRixNQUFNLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDbEUsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQy9FLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksc0JBQXNCLENBQUM7SUFFMUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDekYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsRUFBRTtZQUMzRCxLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUN4RCxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRHJpenpsZSBtaWdyYXRpb24gcnVubmVyLlxuICpcbiAqIElkZW1wb3RlbnQ6IHNhZmUgdG8gY2FsbCBvbiBldmVyeSBzZXJ2aWNlIHN0YXJ0LiBkcml6emxlIHRyYWNrcyBhcHBsaWVkXG4gKiBtaWdyYXRpb25zIGluIHRoZSBgX19kcml6emxlX21pZ3JhdGlvbnNgIHRhYmxlIGFuZCBza2lwcyBvbmVzIGFscmVhZHkgcnVuLlxuICpcbiAqIFRoZSBtaWdyYXRpb24gZmlsZXMgbGl2ZSBhdCBgcGFja2FnZXMvcGlwZWxpbmUtZGF0YS9kcml6emxlL2AgYW5kIGFyZVxuICogZ2VuZXJhdGVkIGZyb20gdGhlIGBkcml6emxlLXNjaGVtYS50c2Agc291cmNlIHZpYSBgcG5wbSBkYjpnZW5lcmF0ZWBcbiAqICh3aGljaCBpbnZva2VzIGBkcml6emxlLWtpdCBnZW5lcmF0ZWApLlxuICpcbiAqIEZvciBicmFuZC1uZXcgZGVwbG95cywgYHBvc3RncmVzLWluaXQuc3FsYCBzdGlsbCBjcmVhdGVzIHRoZSBiYXNlbGluZVxuICogdGFibGVzIOKAlCB0aGUgbWlncmF0aW9uIHJ1bm5lciB3aWxsIHNraXAgaXRzIGluaXRpYWwgYmFzZWxpbmUgbWlncmF0aW9uXG4gKiBiZWNhdXNlIHRoZSB0YWJsZXMgYWxyZWFkeSBleGlzdCAoZHJpenpsZSB1c2VzIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTXG4gKiBieSBkZWZhdWx0IGZvciB0aGUgc25hcHNob3QtYmFzZWQgZ2VuZXJhdG9yKS4gRnV0dXJlIHNjaGVtYSBjaGFuZ2VzIHNoaXBcbiAqIGFzIGFkZGl0aXZlIG1pZ3JhdGlvbnMuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IG1pZ3JhdGUgfSBmcm9tICdkcml6emxlLW9ybS9ub2RlLXBvc3RncmVzL21pZ3JhdG9yJztcbmltcG9ydCB7IGdldENvbm5lY3Rpb24gfSBmcm9tICcuL3Bvc3RncmVzLWNvbm5lY3Rpb24uanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ21pZ3JhdG9yJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0ZU9wdGlvbnMge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgbWlncmF0aW9ucyBmb2xkZXIuIERlZmF1bHRzIHRvIGA8cGFja2FnZT4vZHJpenpsZWAuICovXG4gIG1pZ3JhdGlvbnNGb2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBTY2hlbWEtcXVhbGlmaWVkIG1pZ3JhdGlvbnMgdGFibGUgbmFtZS4gRGVmYXVsdHMgdG8gYF9fZHJpenpsZV9taWdyYXRpb25zYC4gKi9cbiAgbWlncmF0aW9uc1RhYmxlPzogc3RyaW5nO1xuICAvKiogU2tpcCB0aGUgcnVubmVyIGVudGlyZWx5IChmb3IgdGVzdHMgb3Igd2hlbiBhIGRlcGxveSB1c2VzIGFuIGV4dGVybmFsIG1pZ3JhdGlvbiB0b29sKS4gKi9cbiAgc2tpcD86IGJvb2xlYW47XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBkZWZhdWx0IG1pZ3JhdGlvbnMgZm9sZGVyIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZS4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRNaWdyYXRpb25zRm9sZGVyKCk6IHN0cmluZyB7XG4gIC8vIHNyYy9kYXRhYmFzZS9taWdyYXRvci50cyDihpIgdXAgdHdvIGxldmVscyDihpIgcGFja2FnZSByb290LCB0aGVuIC4vZHJpenpsZVxuICByZXR1cm4gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2RyaXp6bGUnKTtcbn1cblxuLyoqXG4gKiBSdW4gYW55IHBlbmRpbmcgRHJpenpsZSBtaWdyYXRpb25zIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgUG9zdGdyZXMuXG4gKlxuICogTm8tb3BzIGdyYWNlZnVsbHkgd2hlbjpcbiAqICAgLSBgb3B0aW9ucy5za2lwYCBpcyB0cnVlXG4gKiAgIC0gYFJVTl9EQl9NSUdSQVRJT05TYCBlbnYgdmFyIGlzIHNldCB0byBhIGZhbHN5IHZhbHVlIChgMGAvYGZhbHNlYClcbiAqICAgLSB0aGUgbWlncmF0aW9ucyBmb2xkZXIgZG9lc24ndCBleGlzdCAoZnJlc2ggcmVwbywgbm90aGluZyBnZW5lcmF0ZWQgeWV0KVxuICpcbiAqIFRocm93cyBvbiBhbnkgYWN0dWFsIG1pZ3JhdGlvbiBmYWlsdXJlIHNvIHRoZSBzZXJ2aWNlIHJlZnVzZXMgdG8gc3RhcnRcbiAqIHdpdGggYSBoYWxmLWFwcGxpZWQgc2NoZW1hLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuTWlncmF0aW9ucyhvcHRpb25zOiBNaWdyYXRlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvcHRpb25zLnNraXApIHtcbiAgICBsb2dnZXIuaW5mbygnTWlncmF0aW9uIHJ1bm5lciBza2lwcGVkIHZpYSBvcHRpb25zLnNraXAnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbnZGbGFnID0gcHJvY2Vzcy5lbnYuUlVOX0RCX01JR1JBVElPTlM7XG4gIGlmIChlbnZGbGFnICE9PSB1bmRlZmluZWQgJiYgKGVudkZsYWcgPT09ICcwJyB8fCBlbnZGbGFnLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ01pZ3JhdGlvbiBydW5uZXIgc2tpcHBlZCB2aWEgUlVOX0RCX01JR1JBVElPTlMgZW52Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWlncmF0aW9uc0ZvbGRlciA9IG9wdGlvbnMubWlncmF0aW9uc0ZvbGRlciA/PyBkZWZhdWx0TWlncmF0aW9uc0ZvbGRlcigpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMobWlncmF0aW9uc0ZvbGRlcikpIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gbWlncmF0aW9ucyBmb2xkZXIgZm91bmQsIG5vdGhpbmcgdG8gcnVuJywgeyBtaWdyYXRpb25zRm9sZGVyIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGpvdXJuYWxQYXRoID0gcGF0aC5qb2luKG1pZ3JhdGlvbnNGb2xkZXIsICdtZXRhJywgJ19qb3VybmFsLmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGpvdXJuYWxQYXRoKSkge1xuICAgIGxvZ2dlci5pbmZvKCdObyBkcml6emxlIGpvdXJuYWwgZm91bmQsIG5vdGhpbmcgdG8gcnVuJywgeyBqb3VybmFsUGF0aCB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25uID0gZ2V0Q29ubmVjdGlvbigpO1xuICBjb25zdCBtaWdyYXRpb25zVGFibGUgPSBvcHRpb25zLm1pZ3JhdGlvbnNUYWJsZSA/PyAnX19kcml6emxlX21pZ3JhdGlvbnMnO1xuXG4gIGxvZ2dlci5pbmZvKCdSdW5uaW5nIHBlbmRpbmcgRHJpenpsZSBtaWdyYXRpb25zJywgeyBtaWdyYXRpb25zRm9sZGVyLCBtaWdyYXRpb25zVGFibGUgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWlncmF0ZShjb25uLmRiLCB7IG1pZ3JhdGlvbnNGb2xkZXIsIG1pZ3JhdGlvbnNUYWJsZSB9KTtcbiAgICBsb2dnZXIuaW5mbygnRHJpenpsZSBtaWdyYXRpb25zIGNvbXBsZXRlJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignRHJpenpsZSBtaWdyYXRpb24gZmFpbGVkIOKAlCByZWZ1c2luZyB0byBzdGFydCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { drizzle } from 'drizzle-orm/node-postgres';
2
- import { Pool, PoolClient } from 'pg';
2
+ import { Pool, type PoolClient } from 'pg';
3
3
  /**
4
4
  * Database connection statistics for monitoring
5
5
  */
@@ -1,20 +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.dbReplica = exports.db = exports.Connection = void 0;
6
- exports.getConnection = getConnection;
7
- exports.closeConnection = closeConnection;
8
- exports.testConnection = testConnection;
9
- exports.initializeDatabase = initializeDatabase;
10
- exports.closeAllConnections = closeAllConnections;
11
- const api_core_1 = require("@pipeline-builder/api-core");
12
- const drizzle_orm_1 = require("drizzle-orm");
13
- const node_postgres_1 = require("drizzle-orm/node-postgres");
14
- const pg_1 = require("pg");
15
- const drizzle_schema_1 = require("./drizzle-schema");
16
- const retry_strategy_1 = require("./retry-strategy");
17
- const logger = (0, api_core_1.createLogger)('database');
3
+ import { createLogger } from '@pipeline-builder/api-core';
4
+ import { sql } from 'drizzle-orm';
5
+ import { drizzle } from 'drizzle-orm/node-postgres';
6
+ import { Pool } from 'pg';
7
+ import { schema } from './drizzle-schema.js';
8
+ import { ConnectionRetryStrategy } from './retry-strategy.js';
9
+ const logger = createLogger('database');
18
10
  /**
19
11
  * Get database configuration from environment variables
20
12
  * Note: Uses environment variables directly to avoid circular dependency with pipeline-core
@@ -66,7 +58,7 @@ function getDatabaseConfig() {
66
58
  * await connection.close();
67
59
  * ```
68
60
  */
69
- class Connection {
61
+ export class Connection {
70
62
  static instance = null;
71
63
  /**
72
64
  * Drizzle ORM database instance with schema
@@ -92,7 +84,7 @@ class Connection {
92
84
  ssl: options.ssl ?? false,
93
85
  };
94
86
  // Initialize retry strategy
95
- this.retryStrategy = new retry_strategy_1.ConnectionRetryStrategy({
87
+ this.retryStrategy = new ConnectionRetryStrategy({
96
88
  maxRetries: this.options.maxRetries,
97
89
  baseDelay: this.options.retryDelay,
98
90
  });
@@ -110,9 +102,9 @@ class Connection {
110
102
  ssl: this.options.ssl,
111
103
  allowExitOnIdle: true,
112
104
  };
113
- this.pool = new pg_1.Pool(poolConfig);
105
+ this.pool = new Pool(poolConfig);
114
106
  this.setupEventHandlers();
115
- this.db = (0, node_postgres_1.drizzle)(this.pool, { schema: drizzle_schema_1.schema });
107
+ this.db = drizzle(this.pool, { schema });
116
108
  if (this.options.enableLogging) {
117
109
  logger.info('Database connection initialized successfully');
118
110
  this.logConnectionConfig(poolConfig);
@@ -202,7 +194,7 @@ class Connection {
202
194
  // ensures the DB itself cancels long-running queries if the JS timeout fires
203
195
  // but the connection isn't cleaned up.
204
196
  const wrappedCallback = async (tx) => {
205
- await tx.execute((0, drizzle_orm_1.sql) `SET LOCAL statement_timeout = ${String(timeoutMs)}`);
197
+ await tx.execute(sql `SET LOCAL statement_timeout = ${String(timeoutMs)}`);
206
198
  return callback(tx);
207
199
  };
208
200
  const txPromise = this.db.transaction(wrappedCallback);
@@ -319,7 +311,6 @@ class Connection {
319
311
  });
320
312
  }
321
313
  }
322
- exports.Connection = Connection;
323
314
  /**
324
315
  * Singleton database instance for use throughout the application.
325
316
  *
@@ -364,7 +355,7 @@ function getDbInstance() {
364
355
  * const plugins = await db.select().from(schema.plugin);
365
356
  * ```
366
357
  */
367
- exports.db = new Proxy({}, {
358
+ export const db = new Proxy({}, {
368
359
  get(_, prop) {
369
360
  const instance = getDbInstance();
370
361
  const value = instance[prop];
@@ -387,7 +378,7 @@ exports.db = new Proxy({}, {
387
378
  * console.log(`Active connections: ${stats.totalCount}`);
388
379
  * ```
389
380
  */
390
- function getConnection() {
381
+ export function getConnection() {
391
382
  return Connection.getInstance();
392
383
  }
393
384
  /**
@@ -404,7 +395,7 @@ function getConnection() {
404
395
  * });
405
396
  * ```
406
397
  */
407
- async function closeConnection() {
398
+ export async function closeConnection() {
408
399
  const connection = Connection.getInstance();
409
400
  await connection.close();
410
401
  _dbInstance = null; // Reset lazy instance
@@ -426,7 +417,7 @@ async function closeConnection() {
426
417
  * }
427
418
  * ```
428
419
  */
429
- async function testConnection() {
420
+ export async function testConnection() {
430
421
  const connection = Connection.getInstance();
431
422
  return connection.testConnection();
432
423
  }
@@ -447,7 +438,7 @@ async function testConnection() {
447
438
  * }
448
439
  * ```
449
440
  */
450
- async function initializeDatabase() {
441
+ export async function initializeDatabase() {
451
442
  const connection = Connection.getInstance();
452
443
  const healthy = await connection.testConnection();
453
444
  if (!healthy) {
@@ -478,9 +469,9 @@ function getReplicaPool() {
478
469
  const cfg = getReplicaConfig();
479
470
  if (!cfg)
480
471
  return null;
481
- const pool = new pg_1.Pool(cfg);
472
+ const pool = new Pool(cfg);
482
473
  pool.on('error', (err) => logger.error('Replica pool error', { error: err.message }));
483
- _replica = { pool, db: (0, node_postgres_1.drizzle)(pool, { schema: drizzle_schema_1.schema }) };
474
+ _replica = { pool, db: drizzle(pool, { schema }) };
484
475
  logger.info('Read replica pool initialized', { host: cfg.host, port: cfg.port });
485
476
  return _replica;
486
477
  }
@@ -493,7 +484,7 @@ function getReplicaPool() {
493
484
  * Same lazy-initialization pattern as `db` — the replica pool is built on
494
485
  * first use, not on module import.
495
486
  */
496
- exports.dbReplica = new Proxy({}, {
487
+ export const dbReplica = new Proxy({}, {
497
488
  get(_, prop) {
498
489
  const replica = getReplicaPool();
499
490
  const target = replica ? replica.db : getDbInstance();
@@ -522,8 +513,8 @@ async function closeReplicaPool() {
522
513
  // Extend closeConnection to also tear down the replica pool. Monkey-patch
523
514
  // preserves the existing export signature without breaking callers.
524
515
  const _originalCloseConnection = closeConnection;
525
- async function closeAllConnections() {
516
+ export async function closeAllConnections() {
526
517
  await _originalCloseConnection();
527
518
  await closeReplicaPool();
528
519
  }
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wb3N0Z3Jlcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFpY3RDLHNDQUVDO0FBZ0JELDBDQUlDO0FBbUJELHdDQUdDO0FBbUJELGdEQU1DO0FBMkZELGtEQUdDO0FBbG1CRCx5REFBMEQ7QUFDMUQsNkNBQWtDO0FBQ2xDLDZEQUFvRDtBQUNwRCwyQkFBa0Q7QUFDbEQscURBQTBDO0FBQzFDLHFEQUEyRDtBQUUzRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFZLEVBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBeUIsRUFBRSxRQUFnQjtJQUM5RCxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBRXhELFNBQVMsaUJBQWlCO0lBQ3hCLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxQyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFFcEQsT0FBTztRQUNMLElBQUksRUFBRSxPQUFPLENB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VUFBVSxtQkFBbUI7SUFDdkMsTUFBTSx3QkFBd0IsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGRyaXp6bGUgfSBmcm9tICdkcml6emxlLW9ybS9ub2RlLXBvc3RncmVzJztcbmltcG9ydCB7IFBvb2wsIFBvb2xDb25maWcsIFBvb2xDbGllbnQgfSBmcm9tICdwZyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuL2RyaXp6bGUtc2NoZW1hJztcbmltcG9ydCB7IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5IH0gZnJvbSAnLi9yZXRyeS1zdHJhdGVneSc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZGF0YWJhc2UnKTtcblxuLyoqXG4gKiBHZXQgZGF0YWJhc2UgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogTm90ZTogVXNlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSB3aXRoIHBpcGVsaW5lLWNvcmVcbiAqL1xuZnVuY3Rpb24gcGFyc2VJbnRFbnYodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxsYmFjaztcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWQpID8gZmFsbGJhY2sgOiBwYXJzZWQ7XG59XG5cbi8qKiBEZXRlY3QgTGFtYmRhIGVudmlyb25tZW50IGZvciBwb29sLXNpemUgdHVuaW5nICovXG5jb25zdCBpc0xhbWJkYSA9ICEhcHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FO1xuXG5mdW5jdGlvbiBnZXREYXRhYmFzZUNvbmZpZygpIHtcbiAgLy8gTGFtYmRhOiBzbWFsbCBwb29sIChlYWNoIGludm9jYXRpb24gaXMgc2hvcnQtbGl2ZWQsIG1hbnkgY29uY3VycmVudCBpbnN0YW5jZXMpXG4gIC8vIEVDUy9sb25nLXJ1bm5pbmc6IGxhcmdlciBwb29sIGZvciBzdXN0YWluZWQgY29uY3VycmVuY3lcbiAgY29uc3QgZGVmYXVsdFBvb2xTaXplID0gaXNMYW1iZGEgPyAyIDogMjA7XG4gIGNvbnN0IGRlZmF1bHRJZGxlVGltZW91dCA9IGlzTGFtYmRhID8gMTAwMDAgOiAzMDAwMDtcblxuICByZXR1cm4ge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LkRCX0hPU1QgfHwgJ3Bvc3RncmVzJyxcbiAgICBwb3J0OiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EQl9QT1JULCA1NDMyKSxcbiAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuREFUQUJBU0UgfHwgJ3BpcGVsaW5lX2J1aWxkZXInLFxuICAgIHVzZXI6IHByb2Nlc3MuZW52LkRCX1VTRVIgfHwgJ3Bvc3RncmVzJyxcbiAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuREJfUEFTU1dPUkQgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgPyAoKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ0RCX1BBU1NXT1JEIGlzIHJlcXVpcmVkIGluIHByb2R1Y3Rpb24nKTsgfSkoKSBhcyBzdHJpbmcgOiAnJyksXG4gICAgbWF4UG9vbFNpemU6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRSSVpaTEVfTUFYX1BPT0xfU0laRSwgZGVmYXVsdFBvb2xTaXplKSxcbiAgICBpZGxlVGltZW91dE1pbGxpczogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuRFJJWlpMRV9JRExFX1RJTUVPVVRfTUlMTElTLCBkZWZhdWx0SWRsZVRpbWVvdXQpLFxuICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMsIDUwMDApLFxuICB9O1xufVxuXG4vKipcbiAqIERhdGFiYXNlIGNvbm5lY3Rpb24gc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25TdGF0cyB7XG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgaWRsZUNvdW50OiBudW1iZXI7XG4gIHdhaXRpbmdDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKiogV2hldGhlciB0byBlbmFibGUgY29ubmVjdGlvbiBsb2dnaW5nICovXG4gIGVuYWJsZUxvZ2dpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgcmV0cnkgZmFpbGVkIGNvbm5lY3Rpb25zICovXG4gIGVuYWJsZUF1dG9SZXRyeT86IGJvb2xlYW47XG5cbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb24gcmV0cnkgYXR0ZW1wdHMgKi9cbiAgbWF4UmV0cmllcz86IG51bWJlcjtcblxuICAvKiogRGVsYXkgYmV0d2VlbiByZXRyeSBhdHRlbXB0cyBpbiBtaWxsaXNlY29uZHMgKi9cbiAgcmV0cnlEZWxheT86IG51bWJlcjtcblxuICAvKiogU1NMIGNvbmZpZ3VyYXRpb24gKi9cbiAgc3NsPzogYm9vbGVhbiB8IHsgcmVqZWN0VW5hdXRob3JpemVkOiBib29sZWFuIH07XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGRhdGFiYXNlIGNvbm5lY3Rpb24gY2xhc3MuXG4gKiBNYW5hZ2VzIFBvc3RncmVTUUwgY29ubmVjdGlvbiBwb29saW5nIGFuZCBEcml6emxlIE9STSBpbnN0YW5jZS5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gU2luZ2xldG9uIHBhdHRlcm4gZm9yIHNpbmdsZSBjb25uZWN0aW9uIHBvb2xcbiAqIC0gQXV0b21hdGljIGNvbm5lY3Rpb24gcmV0cnkgd2l0aCBiYWNrb2ZmXG4gKiAtIENvbm5lY3Rpb24gaGVhbHRoIG1vbml0b3JpbmdcbiAqIC0gR3JhY2VmdWwgc2h1dGRvd24gaGFuZGxpbmdcbiAqIC0gQ29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZ1xuICogLSBDb25uZWN0aW9uIHN0YXRpc3RpY3MgdHJhY2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogY29uc3QgY29ubmVjdGlvbiA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbiAqIGNvbnN0IHBsdWdpbnMgPSBhd2FpdCBjb25uZWN0aW9uLmRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKlxuICogLy8gRHVyaW5nIHNodXRkb3duXG4gKiBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb24ge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQ29ubmVjdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBEcml6emxlIE9STSBkYXRhYmFzZSBpbnN0YW5jZSB3aXRoIHNjaGVtYVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRiOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBvb2w6IFBvb2w7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8Q29ubmVjdGlvbk9wdGlvbnM+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJldHJ5U3RyYXRlZ3k6IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5O1xuICBwcml2YXRlIGlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgY29uc3RydWN0b3IgdG8gZW5mb3JjZSBzaW5nbGV0b24gcGF0dGVybi5cbiAgICogSW5pdGlhbGl6ZXMgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHBvb2wgYW5kIERyaXp6bGUgT1JNIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb25uZWN0aW9uXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBkYXRhYmFzZSBpbml0aWFsaXphdGlvbiBmYWlscyBhZnRlciBhbGwgcmV0cmllc1xuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb25uZWN0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgZW5hYmxlTG9nZ2luZzogb3B0aW9ucy5lbmFibGVMb2dnaW5nID8/IHRydWUsXG4gICAgICBlbmFibGVBdXRvUmV0cnk6IG9wdGlvbnMuZW5hYmxlQXV0b1JldHJ5ID8/IHRydWUsXG4gICAgICBtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfTUFYX1JFVFJJRVMgfHwgJzMnLCAxMCksXG4gICAgICByZXRyeURlbGF5OiBvcHRpb25zLnJldHJ5RGVsYXkgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfUkVUUllfREVMQVlfTVMgfHwgJzEwMDAnLCAxMCksXG4gICAgICBzc2w6IG9wdGlvbnMuc3NsID8/IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIHJldHJ5IHN0cmF0ZWd5XG4gICAgdGhpcy5yZXRyeVN0cmF0ZWd5ID0gbmV3IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5KHtcbiAgICAgIG1heFJldHJpZXM6IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzLFxuICAgICAgYmFzZURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBnZXREYXRhYmFzZUNvbmZpZygpO1xuXG4gICAgICBjb25zdCBwb29sQ29uZmlnOiBQb29sQ29uZmlnID0ge1xuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgIHVzZXI6IGNvbmZpZy51c2VyLFxuICAgICAgICBwYXNzd29yZDogY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICBtYXg6IGNvbmZpZy5tYXhQb29sU2l6ZSxcbiAgICAgICAgaWRsZVRpbWVvdXRNaWxsaXM6IGNvbmZpZy5pZGxlVGltZW91dE1pbGxpcyxcbiAgICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IGNvbmZpZy5jb25uZWN0aW9uVGltZW91dE1pbGxpcyxcbiAgICAgICAgc3NsOiB0aGlzLm9wdGlvbnMuc3NsLFxuICAgICAgICBhbGxvd0V4aXRPbklkbGU6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvb2wgPSBuZXcgUG9vbChwb29sQ29uZmlnKTtcbiAgICAgIHRoaXMuc2V0dXBFdmVudEhhbmRsZXJzKCk7XG5cbiAgICAgIHRoaXMuZGIgPSBkcml6emxlKHRoaXMucG9vbCwgeyBzY2hlbWEgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgdGhpcy5sb2dDb25uZWN0aW9uQ29uZmlnKHBvb2xDb25maWcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGRhdGFiYXNlIGNvbm5lY3Rpb246JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhYmFzZSBpbml0aWFsaXphdGlvbiBmYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBDb25uZWN0aW9uIGNsYXNzLlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIGlmIG9uZSBkb2Vzbid0IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKG9ubHkgdXNlZCBvbiBmaXJzdCBjYWxsKVxuICAgKiBAcmV0dXJucyBUaGUgc2luZ2xldG9uIENvbm5lY3Rpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2Uob3B0aW9ucz86IENvbm5lY3Rpb25PcHRpb25zKTogQ29ubmVjdGlvbiB7XG4gICAgaWYgKCFDb25uZWN0aW9uLmluc3RhbmNlKSB7XG4gICAgICBDb25uZWN0aW9uLmluc3RhbmNlID0gbmV3IENvbm5lY3Rpb24ob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBDb25uZWN0aW9uLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc2luZ2xldG9uIGluc3RhbmNlLlxuICAgKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgcmVjb25maWd1cmluZyB0aGUgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNsb3NlRXhpc3RpbmcgLSBXaGV0aGVyIHRvIGNsb3NlIGV4aXN0aW5nIGNvbm5lY3Rpb24gYmVmb3JlIHJlc2V0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIHJlc2V0KGNsb3NlRXhpc3Rpbmc6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKENvbm5lY3Rpb24uaW5zdGFuY2UgJiYgY2xvc2VFeGlzdGluZykge1xuICAgICAgYXdhaXQgQ29ubmVjdGlvbi5pbnN0YW5jZS5jbG9zZSgpO1xuICAgIH1cbiAgICBDb25uZWN0aW9uLmluc3RhbmNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBjb25uZWN0aW9uIGlzIGhlYWx0aHlcbiAgICovXG4gIHB1YmxpYyBhc3luYyB0ZXN0Q29ubmVjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5wb29sLmNvbm5lY3QoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeSgnU0VMRUNUIDEnKTtcbiAgICAgIGNsaWVudC5yZWxlYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiB0ZXN0IHN1Y2Nlc3NmdWwnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzLmxlbmd0aCA+IDA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRGF0YWJhc2UgY29ubmVjdGlvbiB0ZXN0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29ubmVjdGlvbiBwb29sIHN0YXRpc3RpY3NcbiAgICpcbiAgICogQHJldHVybnMgQ3VycmVudCBjb25uZWN0aW9uIHBvb2wgc3RhdGlzdGljc1xuICAgKi9cbiAgcHVibGljIGdldFN0YXRzKCk6IENvbm5lY3Rpb25TdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsQ291bnQ6IHRoaXMucG9vbC50b3RhbENvdW50LFxuICAgICAgaWRsZUNvdW50OiB0aGlzLnBvb2wuaWRsZUNvdW50LFxuICAgICAgd2FpdGluZ0NvdW50OiB0aGlzLnBvb2wud2FpdGluZ0NvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBkYXRhYmFzZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24udHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gICAqICAgYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5wbHVnaW4pLnZhbHVlcyh7IC4uLiB9KTtcbiAgICogICBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLm1ldGFkYXRhKS52YWx1ZXMoeyAuLi4gfSk7XG4gICAqICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdHJhbnNhY3Rpb248VD4oXG4gICAgY2FsbGJhY2s6IFBhcmFtZXRlcnM8dHlwZW9mIHRoaXMuZGIudHJhbnNhY3Rpb24+WzBdLFxuICAgIHRpbWVvdXRNczogbnVtYmVyID0gcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfVFJBTlNBQ1RJT05fVElNRU9VVF9NUywgMzAwMDApLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICAgIC8vIFdyYXAgY2FsbGJhY2sgdG8gc2V0IFBvc3RncmVTUUwgc3RhdGVtZW50X3RpbWVvdXQgYXMgYSBzZXJ2ZXItc2lkZSBndWFyZC5cbiAgICAvLyBUaGUgUHJvbWlzZS5yYWNlIHRpbWVvdXQgYmVsb3cgaGFuZGxlcyB0aGUgSlMgc2lkZSwgYnV0IHN0YXRlbWVudF90aW1lb3V0XG4gICAgLy8gZW5zdXJlcyB0aGUgREIgaXRzZWxmIGNhbmNlbHMgbG9uZy1ydW5uaW5nIHF1ZXJpZXMgaWYgdGhlIEpTIHRpbWVvdXQgZmlyZXNcbiAgICAvLyBidXQgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgY2xlYW5lZCB1cC5cbiAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9IGFzeW5jICh0eCkgPT4ge1xuICAgICAgYXdhaXQgdHguZXhlY3V0ZShzcWxgU0VUIExPQ0FMIHN0YXRlbWVudF90aW1lb3V0ID0gJHtTdHJpbmcodGltZW91dE1zKX1gKTtcbiAgICAgIHJldHVybiBjYWxsYmFjayh0eCk7XG4gICAgfTtcbiAgICBjb25zdCB0eFByb21pc2UgPSB0aGlzLmRiLnRyYW5zYWN0aW9uKHdyYXBwZWRDYWxsYmFjaykgYXMgUHJvbWlzZTxUPjtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gdGltZW91dCBhZnRlciAke3RpbWVvdXRNc31tc2ApKSwgdGltZW91dE1zKTtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShbdHhQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWNxdWlyZXMgYSBjbGllbnQgZnJvbSB0aGUgcG9vbCBmb3IgbWFudWFsIHF1ZXJ5IGV4ZWN1dGlvblxuICAgKiBSZW1lbWJlciB0byByZWxlYXNlIHRoZSBjbGllbnQgd2hlbiBkb25lXG4gICAqXG4gICAqIEByZXR1cm5zIFBvc3RncmVTUUwgY2xpZW50IGZyb20gdGhlIHBvb2xcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjbGllbnQgPSBhd2FpdCBjb25uZWN0aW9uLmdldENsaWVudCgpO1xuICAgKiB0cnkge1xuICAgKiAgIGF3YWl0IGNsaWVudC5xdWVyeSgnQkVHSU4nKTtcbiAgICogICBhd2FpdCBjbGllbnQucXVlcnkoJ0lOU0VSVCBJTlRPIC4uLicpO1xuICAgKiAgIGF3YWl0IGNsaWVudC5xdWVyeSgnQ09NTUlUJyk7XG4gICAqIH0gZmluYWxseSB7XG4gICAqICAgY2xpZW50LnJlbGVhc2UoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDbGllbnQoKTogUHJvbWlzZTxQb29sQ2xpZW50PiB7XG4gICAgcmV0dXJuIHRoaXMucG9vbC5jb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIHBvb2wgZ3JhY2VmdWxseS5cbiAgICogU2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgYXBwbGljYXRpb24gc2h1dGRvd24uXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IC0gTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGNvbm5lY3Rpb25zIHRvIGNsb3NlIChtcylcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gcG9vbCBpcyBjbG9zZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbG9zZSh0aW1lb3V0OiBudW1iZXIgPSBwYXJzZUludEVudihwcm9jZXNzLmVudi5EQl9DTE9TRV9USU1FT1VUX01TLCA1MDAwKSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzU2h1dHRpbmdEb3duKSB7XG4gICAgICBsb2dnZXIud2FybignQ29ubmVjdGlvbiBpcyBhbHJlYWR5IHNodXR0aW5nIGRvd24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzU2h1dHRpbmdEb3duID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0Nsb3NpbmcgZGF0YWJhc2UgY29ubmVjdGlvbiBwb29sLi4uJyk7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gdGhpcy5nZXRTdGF0cygpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgUG9vbCBzdGF0cyAtIFRvdGFsOiAke3N0YXRzLnRvdGFsQ291bnR9LCBJZGxlOiAke3N0YXRzLmlkbGVDb3VudH0sIFdhaXRpbmc6ICR7c3RhdHMud2FpdGluZ0NvdW50fWApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgYSB0aW1lb3V0IGZvciBncmFjZWZ1bCBzaHV0ZG93blxuICAgICAgY29uc3QgY2xvc2VQcm9taXNlID0gdGhpcy5wb29sLmVuZCgpO1xuICAgICAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gY2xvc2UgdGltZW91dCcpKSwgdGltZW91dCksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW2Nsb3NlUHJvbWlzZSwgdGltZW91dFByb21pc2VdKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdEYXRhYmFzZSBjb25uZWN0aW9uIGNsb3NlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjbG9zaW5nIGRhdGFiYXNlIGNvbm5lY3Rpb246JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTaHV0dGluZ0Rvd24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb25uZWN0aW9uIGlzIHNodXR0aW5nIGRvd25cbiAgICpcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBjb25uZWN0aW9uIGlzIGluIHNodXRkb3duIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgaXNDbG9zaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU2h1dHRpbmdEb3duO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjb25uZWN0aW9uIHBvb2xcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMucG9vbC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3Igb24gaWRsZSBjbGllbnQ6JywgZXJyKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVBdXRvUmV0cnkgJiYgdGhpcy5yZXRyeVN0cmF0ZWd5LmdldEF0dGVtcHRzKCkgPCB0aGlzLm9wdGlvbnMubWF4UmV0cmllcykge1xuICAgICAgICB2b2lkIHRoaXMucmV0cnlTdHJhdGVneS5oYW5kbGVDb25uZWN0aW9uRXJyb3IoZXJyLCAoKSA9PiB0aGlzLnRlc3RDb25uZWN0aW9uKCkpLmNhdGNoKChyZXRyeUVycikgPT4ge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignQ29ubmVjdGlvbiByZXRyeSBlcnJvcjonLCByZXRyeUVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wb29sLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgdGhpcy5yZXRyeVN0cmF0ZWd5LnJlc2V0KCk7IC8vIFJlc2V0IG9uIHN1Y2Nlc3NmdWwgY29ubmVjdGlvblxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdOZXcgZGF0YWJhc2UgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wb29sLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDbGllbnQgcmVtb3ZlZCBmcm9tIHBvb2wnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiAoc2FuaXRpemVkKVxuICAgKi9cbiAgcHJpdmF0ZSBsb2dDb25uZWN0aW9uQ29uZmlnKGNvbmZpZzogUG9vbENvbmZpZyk6IHZvaWQge1xuICAgIGxvZ2dlci5pbmZvKCdEYXRhYmFzZSBDb25maWd1cmF0aW9uOicsIHtcbiAgICAgIGhvc3Q6IGAke2NvbmZpZy5ob3N0fToke2NvbmZpZy5wb3J0fWAsXG4gICAgICBkYXRhYmFzZTogY29uZmlnLmRhdGFiYXNlLFxuICAgICAgdXNlcjogY29uZmlnLnVzZXIsXG4gICAgICBtYXhQb29sU2l6ZTogY29uZmlnLm1heCxcbiAgICAgIGlkbGVUaW1lb3V0TXM6IGNvbmZpZy5pZGxlVGltZW91dE1pbGxpcyxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TXM6IGNvbmZpZy5jb25uZWN0aW9uVGltZW91dE1pbGxpcyxcbiAgICAgIHNzbDogY29uZmlnLnNzbCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCcsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaW5nbGV0b24gZGF0YWJhc2UgaW5zdGFuY2UgZm9yIHVzZSB0aHJvdWdob3V0IHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZGIgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIC8vIFNlbGVjdCBxdWVyaWVzXG4gKiBjb25zdCBwbHVnaW5zID0gYXdhaXQgZGIuc2VsZWN0KCkuZnJvbShzY2hlbWEucGx1Z2luKTtcbiAqXG4gKiAvLyBJbnNlcnQgcXVlcmllc1xuICogYXdhaXQgZGIuaW5zZXJ0KHNjaGVtYS5wbHVnaW4pLnZhbHVlcyh7IG5hbWU6ICdteS1wbHVnaW4nIH0pO1xuICpcbiAqIC8vIFRyYW5zYWN0aW9uc1xuICogYXdhaXQgZGIudHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gKiAgIGF3YWl0IHR4Lmluc2VydChzY2hlbWEucGx1Z2luKS52YWx1ZXMoeyAuLi4gfSk7XG4gKiAgIGF3YWl0IHR4LnVwZGF0ZShzY2hlbWEucGx1Z2luKS5zZXQoeyAuLi4gfSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5cbi8vIExhenkgaW5pdGlhbGl6YXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gb24gbW9kdWxlIGxvYWRcbmxldCBfZGJJbnN0YW5jZTogUmV0dXJuVHlwZTx0eXBlb2YgZHJpenpsZT4gfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBHZXQgdGhlIGRhdGFiYXNlIGluc3RhbmNlIHdpdGggbGF6eSBpbml0aWFsaXphdGlvblxuICogVGhpcyBhdm9pZHMgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBtb2R1bGUgaXMgbG9hZGVkIGJlZm9yZSBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkXG4gKi9cbmZ1bmN0aW9uIGdldERiSW5zdGFuY2UoKTogUmV0dXJuVHlwZTx0eXBlb2YgZHJpenpsZT4ge1xuICBpZiAoIV9kYkluc3RhbmNlKSB7XG4gICAgX2RiSW5zdGFuY2UgPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCkuZGI7XG4gIH1cbiAgcmV0dXJuIF9kYkluc3RhbmNlO1xufVxuXG4vKipcbiAqIFByb3h5LWJhc2VkIGxhenkgZGF0YWJhc2UgaW5zdGFuY2VcbiAqIFRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBvbmx5IGNyZWF0ZWQgd2hlbiBmaXJzdCBhY2Nlc3NlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBkYiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogLy8gQ29ubmVjdGlvbiBpcyBjcmVhdGVkIGhlcmUgb24gZmlyc3QgdXNlLCBub3Qgb24gaW1wb3J0XG4gKiBjb25zdCBwbHVnaW5zID0gYXdhaXQgZGIuc2VsZWN0KCkuZnJvbShzY2hlbWEucGx1Z2luKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZGIgPSBuZXcgUHJveHkoe30gYXMgUmV0dXJuVHlwZTx0eXBlb2YgZHJpenpsZT4sIHtcbiAgZ2V0KF8sIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0RGJJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2VbcHJvcCBhcyBrZXlvZiB0eXBlb2YgaW5zdGFuY2VdO1xuICAgIC8vIEJpbmQgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UgdG8gcHJlc2VydmUgJ3RoaXMnIGNvbnRleHRcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuYmluZChpbnN0YW5jZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbn0pO1xuXG4vKipcbiAqIEdldHMgdGhlIENvbm5lY3Rpb24gaW5zdGFuY2UgZm9yIGFkdmFuY2VkIG9wZXJhdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogY29uc3QgY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb24oKTtcbiAqIGNvbnN0IHN0YXRzID0gY29ubmVjdGlvbi5nZXRTdGF0cygpO1xuICogY29uc29sZS5sb2coYEFjdGl2ZSBjb25uZWN0aW9uczogJHtzdGF0cy50b3RhbENvdW50fWApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKCk6IENvbm5lY3Rpb24ge1xuICByZXR1cm4gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xufVxuXG4vKipcbiAqIENsb3NlcyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvblxuICogU2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgYXBwbGljYXRpb24gc2h1dGRvd25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY2xvc2VDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBwcm9jZXNzLm9uKCdTSUdURVJNJywgYXN5bmMgKCkgPT4ge1xuICogICBhd2FpdCBjbG9zZUNvbm5lY3Rpb24oKTtcbiAqICAgcHJvY2Vzcy5leGl0KDApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQ29ubmVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbiAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpO1xuICBfZGJJbnN0YW5jZSA9IG51bGw7IC8vIFJlc2V0IGxhenkgaW5zdGFuY2Vcbn1cblxuLyoqXG4gKiBUZXN0cyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIGNvbm5lY3Rpb24gaXMgaGVhbHRoeVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyB0ZXN0Q29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogaWYgKGF3YWl0IHRlc3RDb25uZWN0aW9uKCkpIHtcbiAqICAgY29uc29sZS5sb2coJ0RhdGFiYXNlIGlzIHJlYWR5Jyk7XG4gKiB9IGVsc2Uge1xuICogICBjb25zb2xlLmVycm9yKCdEYXRhYmFzZSBjb25uZWN0aW9uIGZhaWxlZCcpO1xuICogICBwcm9jZXNzLmV4aXQoMSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICByZXR1cm4gY29ubmVjdGlvbi50ZXN0Q29ubmVjdGlvbigpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gZXhwbGljaXRseVxuICogQ2FsbCB0aGlzIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwIGFmdGVyIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgaW5pdGlhbGl6ZURhdGFiYXNlIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gKiAgIC8vIExvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0XG4gKiAgIGRvdGVudi5jb25maWcoKTtcbiAqXG4gKiAgIC8vIFRoZW4gaW5pdGlhbGl6ZSBkYXRhYmFzZVxuICogICBhd2FpdCBpbml0aWFsaXplRGF0YWJhc2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZURhdGFiYXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICBjb25zdCBoZWFsdGh5ID0gYXdhaXQgY29ubmVjdGlvbi50ZXN0Q29ubmVjdGlvbigpO1xuICBpZiAoIWhlYWx0aHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gZmFpbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbicpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVhZC1yZXBsaWNhIHByaW1pdGl2ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gT3B0LWluIHJlYWQtb25seSBjbGllbnQuIFBvaW50ZWQgYXQgYSBQb3N0Z3JlcyByZXBsaWNhIHZpYSBgREJfUkVQTElDQV9IT1NUYFxuLy8gLyBgREJfUkVQTElDQV9QT1JUYCAob3RoZXIgREJfKiB2YXJzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgcHJpbWFyeSkuIFdoZW5cbi8vIGBEQl9SRVBMSUNBX0hPU1RgIGlzIHVuc2V0LCBgZGJSZXBsaWNhYCByZXNvbHZlcyB0byB0aGUgcHJpbWFyeSBgZGJgIHNvXG4vLyBleGlzdGluZyBjYWxsZXJzIHN0YXkgY29ycmVjdCBvbiBzaW5nbGUtaW5zdGFuY2UgZGVwbG95cy5cbi8vXG4vLyBVc2FnZSBwYXR0ZXJuOiByb3V0ZSByZWFkLW9ubHkgcXVlcmllcyAobGlzdCBlbmRwb2ludHMsIGRhc2hib2FyZHMsXG4vLyBhbmFseXRpY3MpIHRocm91Z2ggYGRiUmVwbGljYWAgdG8gb2ZmbG9hZCB0aGUgcHJpbWFyeS4gV3JpdGVzIGFuZFxuLy8gdHJhbnNhY3Rpb25zIE1VU1Qgc3RheSBvbiBgZGJgIOKAlCByZXBsaWNhIGxhZyB3b3VsZCBvdGhlcndpc2UgcHJvZHVjZVxuLy8gcmVhZC1hZnRlci13cml0ZSBzdXJwcmlzZXMuXG4vL1xuLy8gVGhpcyBpcyBhIHByaW1pdGl2ZSBvbmx5IOKAlCBubyBzZXJ2aWNlIGNvZGUgaGFzIGJlZW4gbWlncmF0ZWQgdG8gdXNlIGl0LlxuLy8gQ2FsbGVycyBvcHQgaW4gZXhwbGljaXRseTsgdGhlIG1pZ3JhdGlvbiBpcyBhIHBlci1xdWVyeSBkZWNpc2lvbiwgbm90IGFcbi8vIGJsYW5rZXQgc3dpdGNoIChyZXBsaWNhIGxhZyByaXNrcyB2YXJ5IGJ5IGNhbGwgc2l0ZSkuXG5cbmludGVyZmFjZSBSZXBsaWNhUG9vbCB7XG4gIHBvb2w6IFBvb2w7XG4gIGRiOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPjtcbn1cblxubGV0IF9yZXBsaWNhOiBSZXBsaWNhUG9vbCB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXBsaWNhQ29uZmlnKCk6IFBvb2xDb25maWcgfCBudWxsIHtcbiAgY29uc3QgcmVwbGljYUhvc3QgPSBwcm9jZXNzLmVudi5EQl9SRVBMSUNBX0hPU1Q7XG4gIGlmICghcmVwbGljYUhvc3QpIHJldHVybiBudWxsO1xuICBjb25zdCBjZmcgPSBnZXREYXRhYmFzZUNvbmZpZygpO1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IHJlcGxpY2FIb3N0LFxuICAgIHBvcnQ6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1JFUExJQ0FfUE9SVCwgY2ZnLnBvcnQpLFxuICAgIGRhdGFiYXNlOiBjZmcuZGF0YWJhc2UsXG4gICAgdXNlcjogY2ZnLnVzZXIsXG4gICAgcGFzc3dvcmQ6IGNmZy5wYXNzd29yZCxcbiAgICBtYXg6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1JFUExJQ0FfTUFYX1BPT0wsIGNmZy5tYXhQb29sU2l6ZSksXG4gICAgaWRsZVRpbWVvdXRNaWxsaXM6IGNmZy5pZGxlVGltZW91dE1pbGxpcyxcbiAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogY2ZnLmNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzLFxuICAgIGFsbG93RXhpdE9uSWRsZTogdHJ1ZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVwbGljYVBvb2woKTogUmVwbGljYVBvb2wgfCBudWxsIHtcbiAgaWYgKF9yZXBsaWNhKSByZXR1cm4gX3JlcGxpY2E7XG4gIGNvbnN0IGNmZyA9IGdldFJlcGxpY2FDb25maWcoKTtcbiAgaWYgKCFjZmcpIHJldHVybiBudWxsO1xuICBjb25zdCBwb29sID0gbmV3IFBvb2woY2ZnKTtcbiAgcG9vbC5vbignZXJyb3InLCAoZXJyKSA9PiBsb2dnZXIuZXJyb3IoJ1JlcGxpY2EgcG9vbCBlcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pKTtcbiAgX3JlcGxpY2EgPSB7IHBvb2wsIGRiOiBkcml6emxlKHBvb2wsIHsgc2NoZW1hIH0pIH07XG4gIGxvZ2dlci5pbmZvKCdSZWFkIHJlcGxpY2EgcG9vbCBpbml0aWFsaXplZCcsIHsgaG9zdDogY2ZnLmhvc3QsIHBvcnQ6IGNmZy5wb3J0IH0pO1xuICByZXR1cm4gX3JlcGxpY2E7XG59XG5cbi8qKlxuICogUHJveHkgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVhZC1yZXBsaWNhIGBkYmAgd2hlbiBgREJfUkVQTElDQV9IT1NUYCBpc1xuICogc2V0LCBhbmQgdG8gdGhlIHByaW1hcnkgYGRiYCBvdGhlcndpc2UuIFVzZSBmb3IgcmVhZC1vbmx5IHF1ZXJpZXMgdGhhdFxuICogdG9sZXJhdGUgcmVwbGljYSBsYWcgKHR5cGljYWxseSB0ZW5zIG9mIG1zKS4gV3JpdGVzIGFuZCB0cmFuc2FjdGlvbnNcbiAqIE1VU1Qgc3RheSBvbiB0aGUgcHJpbWFyeSBgZGJgLlxuICpcbiAqIFNhbWUgbGF6eS1pbml0aWFsaXphdGlvbiBwYXR0ZXJuIGFzIGBkYmAg4oCUIHRoZSByZXBsaWNhIHBvb2wgaXMgYnVpbHQgb25cbiAqIGZpcnN0IHVzZSwgbm90IG9uIG1vZHVsZSBpbXBvcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBkYlJlcGxpY2EgPSBuZXcgUHJveHkoe30gYXMgUmV0dXJuVHlwZTx0eXBlb2YgZHJpenpsZT4sIHtcbiAgZ2V0KF8sIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGNvbnN0IHJlcGxpY2EgPSBnZXRSZXBsaWNhUG9vbCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlcGxpY2EgPyByZXBsaWNhLmRiIDogZ2V0RGJJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3AgYXMga2V5b2YgdHlwZW9mIHRhcmdldF07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlLmJpbmQodGFyZ2V0KTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG59KTtcblxuLyoqIENsb3NlIHRoZSByZXBsaWNhIHBvb2wuIENhbGxlZCBmcm9tIGBjbG9zZUNvbm5lY3Rpb24oKWAgc28gc2VydmljZVxuICogIHNodXRkb3duIGhhbmRsZXJzIGRvbid0IGhhdmUgdG8ga25vdyBhYm91dCBib3RoIHBvb2xzIHNlcGFyYXRlbHkuICovXG5hc3luYyBmdW5jdGlvbiBjbG9zZVJlcGxpY2FQb29sKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIV9yZXBsaWNhKSByZXR1cm47XG4gIHRyeSB7XG4gICAgYXdhaXQgX3JlcGxpY2EucG9vbC5lbmQoKTtcbiAgICBsb2dnZXIuaW5mbygnUmVhZCByZXBsaWNhIHBvb2wgY2xvc2VkJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY2xvc2luZyByZXBsaWNhIHBvb2wnLCB7IGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgX3JlcGxpY2EgPSBudWxsO1xuICB9XG59XG5cbi8vIEV4dGVuZCBjbG9zZUNvbm5lY3Rpb24gdG8gYWxzbyB0ZWFyIGRvd24gdGhlIHJlcGxpY2EgcG9vbC4gTW9ua2V5LXBhdGNoXG4vLyBwcmVzZXJ2ZXMgdGhlIGV4aXN0aW5nIGV4cG9ydCBzaWduYXR1cmUgd2l0aG91dCBicmVha2luZyBjYWxsZXJzLlxuY29uc3QgX29yaWdpbmFsQ2xvc2VDb25uZWN0aW9uID0gY2xvc2VDb25uZWN0aW9uO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQWxsQ29ubmVjdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IF9vcmlnaW5hbENsb3NlQ29ubmVjdGlvbigpO1xuICBhd2FpdCBjbG9zZVJlcGxpY2FQb29sKCk7XG59Il19
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wb3N0Z3Jlcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBeUIsRUFBRSxRQUFnQjtJQUM5RCxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBRXhELFNBQVMsaUJBQWlCO0lBQ3hCLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QUNULFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsb0VBQW9FO0FBQ3BFLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBQ2pELE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CO0lBQ3ZDLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQztJQUNqQyxNQUFNLGdCQUFnQixFQUFFLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBkcml6emxlIH0gZnJvbSAnZHJpenpsZS1vcm0vbm9kZS1wb3N0Z3Jlcyc7XG5pbXBvcnQgeyBQb29sLCB0eXBlIFBvb2xDb25maWcsIHR5cGUgUG9vbENsaWVudCB9IGZyb20gJ3BnJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4vZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3kgfSBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkYXRhYmFzZScpO1xuXG4vKipcbiAqIEdldCBkYXRhYmFzZSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBOb3RlOiBVc2VzIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggcGlwZWxpbmUtY29yZVxuICovXG5mdW5jdGlvbiBwYXJzZUludEVudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKHBhcnNlZCkgPyBmYWxsYmFjayA6IHBhcnNlZDtcbn1cblxuLyoqIERldGVjdCBMYW1iZGEgZW52aXJvbm1lbnQgZm9yIHBvb2wtc2l6ZSB0dW5pbmcgKi9cbmNvbnN0IGlzTGFtYmRhID0gISFwcm9jZXNzLmVudi5BV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUU7XG5cbmZ1bmN0aW9uIGdldERhdGFiYXNlQ29uZmlnKCkge1xuICAvLyBMYW1iZGE6IHNtYWxsIHBvb2wgKGVhY2ggaW52b2NhdGlvbiBpcyBzaG9ydC1saXZlZCwgbWFueSBjb25jdXJyZW50IGluc3RhbmNlcylcbiAgLy8gRUNTL2xvbmctcnVubmluZzogbGFyZ2VyIHBvb2wgZm9yIHN1c3RhaW5lZCBjb25jdXJyZW5jeVxuICBjb25zdCBkZWZhdWx0UG9vbFNpemUgPSBpc0xhbWJkYSA/IDIgOiAyMDtcbiAgY29uc3QgZGVmYXVsdElkbGVUaW1lb3V0ID0gaXNMYW1iZGEgPyAxMDAwMCA6IDMwMDAwO1xuXG4gIHJldHVybiB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuREJfSE9TVCB8fCAncG9zdGdyZXMnLFxuICAgIHBvcnQ6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1BPUlQsIDU0MzIpLFxuICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudi5EQVRBQkFTRSB8fCAncGlwZWxpbmVfYnVpbGRlcicsXG4gICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAncG9zdGdyZXMnLFxuICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5EQl9QQVNTV09SRCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/ICgoKSA9PiB7IHRocm93IG5ldyBFcnJvcignREJfUEFTU1dPUkQgaXMgcmVxdWlyZWQgaW4gcHJvZHVjdGlvbicpOyB9KSgpIGFzIHN0cmluZyA6ICcnKSxcbiAgICBtYXhQb29sU2l6ZTogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuRFJJWlpMRV9NQVhfUE9PTF9TSVpFLCBkZWZhdWx0UG9vbFNpemUpLFxuICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVMsIGRlZmF1bHRJZGxlVGltZW91dCksXG4gICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRSSVpaTEVfQ09OTkVDVElPTl9USU1FT1VUX01JTExJUywgNTAwMCksXG4gIH07XG59XG5cbi8qKlxuICogRGF0YWJhc2UgY29ubmVjdGlvbiBzdGF0aXN0aWNzIGZvciBtb25pdG9yaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblN0YXRzIHtcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICBpZGxlQ291bnQ6IG51bWJlcjtcbiAgd2FpdGluZ0NvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBjb25uZWN0aW9uIGxvZ2dpbmcgKi9cbiAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSByZXRyeSBmYWlsZWQgY29ubmVjdGlvbnMgKi9cbiAgZW5hYmxlQXV0b1JldHJ5PzogYm9vbGVhbjtcblxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbiByZXRyeSBhdHRlbXB0cyAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKiBEZWxheSBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZXRyeURlbGF5PzogbnVtYmVyO1xuXG4gIC8qKiBTU0wgY29uZmlndXJhdGlvbiAqL1xuICBzc2w/OiBib29sZWFuIHwgeyByZWplY3RVbmF1dGhvcml6ZWQ6IGJvb2xlYW4gfTtcbn1cblxuLyoqXG4gKiBTaW5nbGV0b24gZGF0YWJhc2UgY29ubmVjdGlvbiBjbGFzcy5cbiAqIE1hbmFnZXMgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHBvb2xpbmcgYW5kIERyaXp6bGUgT1JNIGluc3RhbmNlLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBTaW5nbGV0b24gcGF0dGVybiBmb3Igc2luZ2xlIGNvbm5lY3Rpb24gcG9vbFxuICogLSBBdXRvbWF0aWMgY29ubmVjdGlvbiByZXRyeSB3aXRoIGJhY2tvZmZcbiAqIC0gQ29ubmVjdGlvbiBoZWFsdGggbW9uaXRvcmluZ1xuICogLSBHcmFjZWZ1bCBzaHV0ZG93biBoYW5kbGluZ1xuICogLSBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nXG4gKiAtIENvbm5lY3Rpb24gc3RhdGlzdGljcyB0cmFja2luZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGNvbm5lY3Rpb24uZGIuc2VsZWN0KCkuZnJvbShzY2hlbWEucGx1Z2luKTtcbiAqXG4gKiAvLyBEdXJpbmcgc2h1dGRvd25cbiAqIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb25uZWN0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIERyaXp6bGUgT1JNIGRhdGFiYXNlIGluc3RhbmNlIHdpdGggc2NoZW1hXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGI6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcG9vbDogUG9vbDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxDb25uZWN0aW9uT3B0aW9ucz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlTdHJhdGVneTogQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3k7XG4gIHByaXZhdGUgaXNTaHV0dGluZ0Rvd24gPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBlbmZvcmNlIHNpbmdsZXRvbiBwYXR0ZXJuLlxuICAgKiBJbml0aWFsaXplcyBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gcG9vbCBhbmQgRHJpenpsZSBPUk0gaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb25cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGRhdGFiYXNlIGluaXRpYWxpemF0aW9uIGZhaWxzIGFmdGVyIGFsbCByZXRyaWVzXG4gICAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbm5lY3Rpb25PcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVMb2dnaW5nOiBvcHRpb25zLmVuYWJsZUxvZ2dpbmcgPz8gdHJ1ZSxcbiAgICAgIGVuYWJsZUF1dG9SZXRyeTogb3B0aW9ucy5lbmFibGVBdXRvUmV0cnkgPz8gdHJ1ZSxcbiAgICAgIG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5EQl9NQVhfUkVUUklFUyB8fCAnMycsIDEwKSxcbiAgICAgIHJldHJ5RGVsYXk6IG9wdGlvbnMucmV0cnlEZWxheSA/PyBwYXJzZUludChwcm9jZXNzLmVudi5EQl9SRVRSWV9ERUxBWV9NUyB8fCAnMTAwMCcsIDEwKSxcbiAgICAgIHNzbDogb3B0aW9ucy5zc2wgPz8gZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgcmV0cnkgc3RyYXRlZ3lcbiAgICB0aGlzLnJldHJ5U3RyYXRlZ3kgPSBuZXcgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3koe1xuICAgICAgbWF4UmV0cmllczogdGhpcy5vcHRpb25zLm1heFJldHJpZXMsXG4gICAgICBiYXNlRGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldERhdGFiYXNlQ29uZmlnKCk7XG5cbiAgICAgIGNvbnN0IHBvb2xDb25maWc6IFBvb2xDb25maWcgPSB7XG4gICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgICAgZGF0YWJhc2U6IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgdXNlcjogY29uZmlnLnVzZXIsXG4gICAgICAgIHBhc3N3b3JkOiBjb25maWcucGFzc3dvcmQsXG4gICAgICAgIG1heDogY29uZmlnLm1heFBvb2xTaXplLFxuICAgICAgICBpZGxlVGltZW91dE1pbGxpczogY29uZmlnLmlkbGVUaW1lb3V0TWlsbGlzLFxuICAgICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzLFxuICAgICAgICBzc2w6IHRoaXMub3B0aW9ucy5zc2wsXG4gICAgICAgIGFsbG93RXhpdE9uSWRsZTogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9vbCA9IG5ldyBQb29sKHBvb2xDb25maWcpO1xuICAgICAgdGhpcy5zZXR1cEV2ZW50SGFuZGxlcnMoKTtcblxuICAgICAgdGhpcy5kYiA9IGRyaXp6bGUodGhpcy5wb29sLCB7IHNjaGVtYSB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdEYXRhYmFzZSBjb25uZWN0aW9uIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICB0aGlzLmxvZ0Nvbm5lY3Rpb25Db25maWcocG9vbENvbmZpZyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgZGF0YWJhc2UgY29ubmVjdGlvbjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFiYXNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIENvbm5lY3Rpb24gY2xhc3MuXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgaWYgb25lIGRvZXNuJ3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAob25seSB1c2VkIG9uIGZpcnN0IGNhbGwpXG4gICAqIEByZXR1cm5zIFRoZSBzaW5nbGV0b24gQ29ubmVjdGlvbiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZShvcHRpb25zPzogQ29ubmVjdGlvbk9wdGlvbnMpOiBDb25uZWN0aW9uIHtcbiAgICBpZiAoIUNvbm5lY3Rpb24uaW5zdGFuY2UpIHtcbiAgICAgIENvbm5lY3Rpb24uaW5zdGFuY2UgPSBuZXcgQ29ubmVjdGlvbihvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIENvbm5lY3Rpb24uaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gICAqIFVzZWZ1bCBmb3IgdGVzdGluZyBvciByZWNvbmZpZ3VyaW5nIHRoZSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY2xvc2VFeGlzdGluZyAtIFdoZXRoZXIgdG8gY2xvc2UgZXhpc3RpbmcgY29ubmVjdGlvbiBiZWZvcmUgcmVzZXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgcmVzZXQoY2xvc2VFeGlzdGluZzogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoQ29ubmVjdGlvbi5pbnN0YW5jZSAmJiBjbG9zZUV4aXN0aW5nKSB7XG4gICAgICBhd2FpdCBDb25uZWN0aW9uLmluc3RhbmNlLmNsb3NlKCk7XG4gICAgfVxuICAgIENvbm5lY3Rpb24uaW5zdGFuY2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIGNvbm5lY3Rpb24gaXMgaGVhbHRoeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLnBvb2wuY29ubmVjdCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KCdTRUxFQ1QgMScpO1xuICAgICAgY2xpZW50LnJlbGVhc2UoKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdEYXRhYmFzZSBjb25uZWN0aW9uIHRlc3Qgc3VjY2Vzc2Z1bCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0LnJvd3MubGVuZ3RoID4gMDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdEYXRhYmFzZSBjb25uZWN0aW9uIHRlc3QgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb25uZWN0aW9uIHBvb2wgc3RhdGlzdGljc1xuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IGNvbm5lY3Rpb24gcG9vbCBzdGF0aXN0aWNzXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhdHMoKTogQ29ubmVjdGlvblN0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxDb3VudDogdGhpcy5wb29sLnRvdGFsQ291bnQsXG4gICAgICBpZGxlQ291bnQ6IHRoaXMucG9vbC5pZGxlQ291bnQsXG4gICAgICB3YWl0aW5nQ291bnQ6IHRoaXMucG9vbC53YWl0aW5nQ291bnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGRhdGFiYXNlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2l0aGluIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyBSZXN1bHQgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi50cmFuc2FjdGlvbihhc3luYyAodHgpID0+IHtcbiAgICogICBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLnBsdWdpbikudmFsdWVzKHsgLi4uIH0pO1xuICAgKiAgIGF3YWl0IHR4Lmluc2VydChzY2hlbWEubWV0YWRhdGEpLnZhbHVlcyh7IC4uLiB9KTtcbiAgICogICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFuc2FjdGlvbjxUPihcbiAgICBjYWxsYmFjazogUGFyYW1ldGVyczx0eXBlb2YgdGhpcy5kYi50cmFuc2FjdGlvbj5bMF0sXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSBwYXJzZUludEVudihwcm9jZXNzLmVudi5EQl9UUkFOU0FDVElPTl9USU1FT1VUX01TLCAzMDAwMCksXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gICAgLy8gV3JhcCBjYWxsYmFjayB0byBzZXQgUG9zdGdyZVNRTCBzdGF0ZW1lbnRfdGltZW91dCBhcyBhIHNlcnZlci1zaWRlIGd1YXJkLlxuICAgIC8vIFRoZSBQcm9taXNlLnJhY2UgdGltZW91dCBiZWxvdyBoYW5kbGVzIHRoZSBKUyBzaWRlLCBidXQgc3RhdGVtZW50X3RpbWVvdXRcbiAgICAvLyBlbnN1cmVzIHRoZSBEQiBpdHNlbGYgY2FuY2VscyBsb25nLXJ1bm5pbmcgcXVlcmllcyBpZiB0aGUgSlMgdGltZW91dCBmaXJlc1xuICAgIC8vIGJ1dCB0aGUgY29ubmVjdGlvbiBpc24ndCBjbGVhbmVkIHVwLlxuICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID0gYXN5bmMgKHR4KSA9PiB7XG4gICAgICBhd2FpdCB0eC5leGVjdXRlKHNxbGBTRVQgTE9DQUwgc3RhdGVtZW50X3RpbWVvdXQgPSAke1N0cmluZyh0aW1lb3V0TXMpfWApO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHR4KTtcbiAgICB9O1xuICAgIGNvbnN0IHR4UHJvbWlzZSA9IHRoaXMuZGIudHJhbnNhY3Rpb24od3JhcHBlZENhbGxiYWNrKSBhcyBQcm9taXNlPFQ+O1xuICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBUcmFuc2FjdGlvbiB0aW1lb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpLCB0aW1lb3V0TXMpO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFt0eFByb21pc2UsIHRpbWVvdXRQcm9taXNlXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lciEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlcyBhIGNsaWVudCBmcm9tIHRoZSBwb29sIGZvciBtYW51YWwgcXVlcnkgZXhlY3V0aW9uXG4gICAqIFJlbWVtYmVyIHRvIHJlbGVhc2UgdGhlIGNsaWVudCB3aGVuIGRvbmVcbiAgICpcbiAgICogQHJldHVybnMgUG9zdGdyZVNRTCBjbGllbnQgZnJvbSB0aGUgcG9vbFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0Q2xpZW50KCk7XG4gICAqIHRyeSB7XG4gICAqICAgYXdhaXQgY2xpZW50LnF1ZXJ5KCdCRUdJTicpO1xuICAgKiAgIGF3YWl0IGNsaWVudC5xdWVyeSgnSU5TRVJUIElOVE8gLi4uJyk7XG4gICAqICAgYXdhaXQgY2xpZW50LnF1ZXJ5KCdDT01NSVQnKTtcbiAgICogfSBmaW5hbGx5IHtcbiAgICogICBjbGllbnQucmVsZWFzZSgpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENsaWVudCgpOiBQcm9taXNlPFBvb2xDbGllbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5wb29sLmNvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gcG9vbCBncmFjZWZ1bGx5LlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGR1cmluZyBhcHBsaWNhdGlvbiBzaHV0ZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgLSBNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgY29ubmVjdGlvbnMgdG8gY2xvc2UgKG1zKVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBwb29sIGlzIGNsb3NlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsb3NlKHRpbWVvdXQ6IG51bWJlciA9IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX0NMT1NFX1RJTUVPVVRfTVMsIDUwMDApKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNTaHV0dGluZ0Rvd24pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb25uZWN0aW9uIGlzIGFscmVhZHkgc2h1dHRpbmcgZG93bicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNTaHV0dGluZ0Rvd24gPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnQ2xvc2luZyBkYXRhYmFzZSBjb25uZWN0aW9uIHBvb2wuLi4nKTtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB0aGlzLmdldFN0YXRzKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb29sIHN0YXRzIC0gVG90YWw6ICR7c3RhdHMudG90YWxDb3VudH0sIElkbGU6ICR7c3RhdHMuaWRsZUNvdW50fSwgV2FpdGluZzogJHtzdGF0cy53YWl0aW5nQ291bnR9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBhIHRpbWVvdXQgZm9yIGdyYWNlZnVsIHNodXRkb3duXG4gICAgICBjb25zdCBjbG9zZVByb21pc2UgPSB0aGlzLnBvb2wuZW5kKCk7XG4gICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignQ29ubmVjdGlvbiBjbG9zZSB0aW1lb3V0JykpLCB0aW1lb3V0KSxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbY2xvc2VQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gY2xvc2VkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgZGF0YWJhc2UgY29ubmVjdGlvbjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1NodXR0aW5nRG93biA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNvbm5lY3Rpb24gaXMgc2h1dHRpbmcgZG93blxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGNvbm5lY3Rpb24gaXMgaW4gc2h1dGRvd24gc3RhdGVcbiAgICovXG4gIHB1YmxpYyBpc0Nsb3NpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTaHV0dGluZ0Rvd247XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNvbm5lY3Rpb24gcG9vbFxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5wb29sLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcignVW5leHBlY3RlZCBlcnJvciBvbiBpZGxlIGNsaWVudDonLCBlcnIpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUF1dG9SZXRyeSAmJiB0aGlzLnJldHJ5U3RyYXRlZ3kuZ2V0QXR0ZW1wdHMoKSA8IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzKSB7XG4gICAgICAgIHZvaWQgdGhpcy5yZXRyeVN0cmF0ZWd5LmhhbmRsZUNvbm5lY3Rpb25FcnJvcihlcnIsICgpID0+IHRoaXMudGVzdENvbm5lY3Rpb24oKSkuY2F0Y2goKHJldHJ5RXJyKSA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0aW9uIHJldHJ5IGVycm9yOicsIHJldHJ5RXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICB0aGlzLnJldHJ5U3RyYXRlZ3kucmVzZXQoKTsgLy8gUmVzZXQgb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uXG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ05ldyBkYXRhYmFzZSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnBvb2wub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NsaWVudCByZW1vdmVkIGZyb20gcG9vbCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIChzYW5pdGl6ZWQpXG4gICAqL1xuICBwcml2YXRlIGxvZ0Nvbm5lY3Rpb25Db25maWcoY29uZmlnOiBQb29sQ29uZmlnKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIENvbmZpZ3VyYXRpb246Jywge1xuICAgICAgaG9zdDogYCR7Y29uZmlnLmhvc3R9OiR7Y29uZmlnLnBvcnR9YCxcbiAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UsXG4gICAgICB1c2VyOiBjb25maWcudXNlcixcbiAgICAgIG1heFBvb2xTaXplOiBjb25maWcubWF4LFxuICAgICAgaWRsZVRpbWVvdXRNczogY29uZmlnLmlkbGVUaW1lb3V0TWlsbGlzLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNczogY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzLFxuICAgICAgc3NsOiBjb25maWcuc3NsID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFNpbmdsZXRvbiBkYXRhYmFzZSBpbnN0YW5jZSBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBkYiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogLy8gU2VsZWN0IHF1ZXJpZXNcbiAqIGNvbnN0IHBsdWdpbnMgPSBhd2FpdCBkYi5zZWxlY3QoKS5mcm9tKHNjaGVtYS5wbHVnaW4pO1xuICpcbiAqIC8vIEluc2VydCBxdWVyaWVzXG4gKiBhd2FpdCBkYi5pbnNlcnQoc2NoZW1hLnBsdWdpbikudmFsdWVzKHsgbmFtZTogJ215LXBsdWdpbicgfSk7XG4gKlxuICogLy8gVHJhbnNhY3Rpb25zXG4gKiBhd2FpdCBkYi50cmFuc2FjdGlvbihhc3luYyAodHgpID0+IHtcbiAqICAgYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5wbHVnaW4pLnZhbHVlcyh7IC4uLiB9KTtcbiAqICAgYXdhaXQgdHgudXBkYXRlKHNjaGVtYS5wbHVnaW4pLnNldCh7IC4uLiB9KTtcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuLy8gTGF6eSBpbml0aWFsaXphdGlvbiB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiBvbiBtb2R1bGUgbG9hZFxubGV0IF9kYkluc3RhbmNlOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIEdldCB0aGUgZGF0YWJhc2UgaW5zdGFuY2Ugd2l0aCBsYXp5IGluaXRpYWxpemF0aW9uXG4gKiBUaGlzIGF2b2lkcyB0aGUgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIG1vZHVsZSBpcyBsb2FkZWQgYmVmb3JlIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWRcbiAqL1xuZnVuY3Rpb24gZ2V0RGJJbnN0YW5jZSgpOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiB7XG4gIGlmICghX2RiSW5zdGFuY2UpIHtcbiAgICBfZGJJbnN0YW5jZSA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKS5kYjtcbiAgfVxuICByZXR1cm4gX2RiSW5zdGFuY2U7XG59XG5cbi8qKlxuICogUHJveHktYmFzZWQgbGF6eSBkYXRhYmFzZSBpbnN0YW5jZVxuICogVGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIG9ubHkgY3JlYXRlZCB3aGVuIGZpcnN0IGFjY2Vzc2VkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRiIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiAvLyBDb25uZWN0aW9uIGlzIGNyZWF0ZWQgaGVyZSBvbiBmaXJzdCB1c2UsIG5vdCBvbiBpbXBvcnRcbiAqIGNvbnN0IHBsdWdpbnMgPSBhd2FpdCBkYi5zZWxlY3QoKS5mcm9tKHNjaGVtYS5wbHVnaW4pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBkYiA9IG5ldyBQcm94eSh7fSBhcyBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiwge1xuICBnZXQoXywgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXREYkluc3RhbmNlKCk7XG4gICAgY29uc3QgdmFsdWUgPSBpbnN0YW5jZVtwcm9wIGFzIGtleW9mIHR5cGVvZiBpbnN0YW5jZV07XG4gICAgLy8gQmluZCBtZXRob2RzIHRvIHRoZSBpbnN0YW5jZSB0byBwcmVzZXJ2ZSAndGhpcycgY29udGV4dFxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5iaW5kKGluc3RhbmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxufSk7XG5cbi8qKlxuICogR2V0cyB0aGUgQ29ubmVjdGlvbiBpbnN0YW5jZSBmb3IgYWR2YW5jZWQgb3BlcmF0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBnZXRDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBjb25zdCBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbigpO1xuICogY29uc3Qgc3RhdHMgPSBjb25uZWN0aW9uLmdldFN0YXRzKCk7XG4gKiBjb25zb2xlLmxvZyhgQWN0aXZlIGNvbm5lY3Rpb25zOiAke3N0YXRzLnRvdGFsQ291bnR9YCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKTogQ29ubmVjdGlvbiB7XG4gIHJldHVybiBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gKiBTaG91bGQgYmUgY2FsbGVkIGR1cmluZyBhcHBsaWNhdGlvbiBzaHV0ZG93blxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjbG9zZUNvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGNsb3NlQ29ubmVjdGlvbigpO1xuICogICBwcm9jZXNzLmV4aXQoMCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gIF9kYkluc3RhbmNlID0gbnVsbDsgLy8gUmVzZXQgbGF6eSBpbnN0YW5jZVxufVxuXG4vKipcbiAqIFRlc3RzIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gKlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgY29ubmVjdGlvbiBpcyBoZWFsdGh5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRlc3RDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBpZiAoYXdhaXQgdGVzdENvbm5lY3Rpb24oKSkge1xuICogICBjb25zb2xlLmxvZygnRGF0YWJhc2UgaXMgcmVhZHknKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUuZXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gZmFpbGVkJyk7XG4gKiAgIHByb2Nlc3MuZXhpdCgxKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIHJldHVybiBjb25uZWN0aW9uLnRlc3RDb25uZWN0aW9uKCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBleHBsaWNpdGx5XG4gKiBDYWxsIHRoaXMgZHVyaW5nIGFwcGxpY2F0aW9uIHN0YXJ0dXAgYWZ0ZXIgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbml0aWFsaXplRGF0YWJhc2UgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAqICAgLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3RcbiAqICAgZG90ZW52LmNvbmZpZygpO1xuICpcbiAqICAgLy8gVGhlbiBpbml0aWFsaXplIGRhdGFiYXNlXG4gKiAgIGF3YWl0IGluaXRpYWxpemVEYXRhYmFzZSgpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplRGF0YWJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIGNvbnN0IGhlYWx0aHkgPSBhd2FpdCBjb25uZWN0aW9uLnRlc3RDb25uZWN0aW9uKCk7XG4gIGlmICghaGVhbHRoeSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YWJhc2UgY29ubmVjdGlvbiBmYWlsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uJyk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWFkLXJlcGxpY2EgcHJpbWl0aXZlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBPcHQtaW4gcmVhZC1vbmx5IGNsaWVudC4gUG9pbnRlZCBhdCBhIFBvc3RncmVzIHJlcGxpY2EgdmlhIGBEQl9SRVBMSUNBX0hPU1RgXG4vLyAvIGBEQl9SRVBMSUNBX1BPUlRgIChvdGhlciBEQl8qIHZhcnMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBwcmltYXJ5KS4gV2hlblxuLy8gYERCX1JFUExJQ0FfSE9TVGAgaXMgdW5zZXQsIGBkYlJlcGxpY2FgIHJlc29sdmVzIHRvIHRoZSBwcmltYXJ5IGBkYmAgc29cbi8vIGV4aXN0aW5nIGNhbGxlcnMgc3RheSBjb3JyZWN0IG9uIHNpbmdsZS1pbnN0YW5jZSBkZXBsb3lzLlxuLy9cbi8vIFVzYWdlIHBhdHRlcm46IHJvdXRlIHJlYWQtb25seSBxdWVyaWVzIChsaXN0IGVuZHBvaW50cywgZGFzaGJvYXJkcyxcbi8vIGFuYWx5dGljcykgdGhyb3VnaCBgZGJSZXBsaWNhYCB0byBvZmZsb2FkIHRoZSBwcmltYXJ5LiBXcml0ZXMgYW5kXG4vLyB0cmFuc2FjdGlvbnMgTVVTVCBzdGF5IG9uIGBkYmAg4oCUIHJlcGxpY2EgbGFnIHdvdWxkIG90aGVyd2lzZSBwcm9kdWNlXG4vLyByZWFkLWFmdGVyLXdyaXRlIHN1cnByaXNlcy5cbi8vXG4vLyBUaGlzIGlzIGEgcHJpbWl0aXZlIG9ubHkg4oCUIG5vIHNlcnZpY2UgY29kZSBoYXMgYmVlbiBtaWdyYXRlZCB0byB1c2UgaXQuXG4vLyBDYWxsZXJzIG9wdCBpbiBleHBsaWNpdGx5OyB0aGUgbWlncmF0aW9uIGlzIGEgcGVyLXF1ZXJ5IGRlY2lzaW9uLCBub3QgYVxuLy8gYmxhbmtldCBzd2l0Y2ggKHJlcGxpY2EgbGFnIHJpc2tzIHZhcnkgYnkgY2FsbCBzaXRlKS5cblxuaW50ZXJmYWNlIFJlcGxpY2FQb29sIHtcbiAgcG9vbDogUG9vbDtcbiAgZGI6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+O1xufVxuXG5sZXQgX3JlcGxpY2E6IFJlcGxpY2FQb29sIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldFJlcGxpY2FDb25maWcoKTogUG9vbENvbmZpZyB8IG51bGwge1xuICBjb25zdCByZXBsaWNhSG9zdCA9IHByb2Nlc3MuZW52LkRCX1JFUExJQ0FfSE9TVDtcbiAgaWYgKCFyZXBsaWNhSG9zdCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGNmZyA9IGdldERhdGFiYXNlQ29uZmlnKCk7XG4gIHJldHVybiB7XG4gICAgaG9zdDogcmVwbGljYUhvc3QsXG4gICAgcG9ydDogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfUkVQTElDQV9QT1JULCBjZmcucG9ydCksXG4gICAgZGF0YWJhc2U6IGNmZy5kYXRhYmFzZSxcbiAgICB1c2VyOiBjZmcudXNlcixcbiAgICBwYXNzd29yZDogY2ZnLnBhc3N3b3JkLFxuICAgIG1heDogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfUkVQTElDQV9NQVhfUE9PTCwgY2ZnLm1heFBvb2xTaXplKSxcbiAgICBpZGxlVGltZW91dE1pbGxpczogY2ZnLmlkbGVUaW1lb3V0TWlsbGlzLFxuICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBjZmcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgYWxsb3dFeGl0T25JZGxlOiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZXBsaWNhUG9vbCgpOiBSZXBsaWNhUG9vbCB8IG51bGwge1xuICBpZiAoX3JlcGxpY2EpIHJldHVybiBfcmVwbGljYTtcbiAgY29uc3QgY2ZnID0gZ2V0UmVwbGljYUNvbmZpZygpO1xuICBpZiAoIWNmZykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBvb2wgPSBuZXcgUG9vbChjZmcpO1xuICBwb29sLm9uKCdlcnJvcicsIChlcnIpID0+IGxvZ2dlci5lcnJvcignUmVwbGljYSBwb29sIGVycm9yJywgeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSkpO1xuICBfcmVwbGljYSA9IHsgcG9vbCwgZGI6IGRyaXp6bGUocG9vbCwgeyBzY2hlbWEgfSkgfTtcbiAgbG9nZ2VyLmluZm8oJ1JlYWQgcmVwbGljYSBwb29sIGluaXRpYWxpemVkJywgeyBob3N0OiBjZmcuaG9zdCwgcG9ydDogY2ZnLnBvcnQgfSk7XG4gIHJldHVybiBfcmVwbGljYTtcbn1cblxuLyoqXG4gKiBQcm94eSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZWFkLXJlcGxpY2EgYGRiYCB3aGVuIGBEQl9SRVBMSUNBX0hPU1RgIGlzXG4gKiBzZXQsIGFuZCB0byB0aGUgcHJpbWFyeSBgZGJgIG90aGVyd2lzZS4gVXNlIGZvciByZWFkLW9ubHkgcXVlcmllcyB0aGF0XG4gKiB0b2xlcmF0ZSByZXBsaWNhIGxhZyAodHlwaWNhbGx5IHRlbnMgb2YgbXMpLiBXcml0ZXMgYW5kIHRyYW5zYWN0aW9uc1xuICogTVVTVCBzdGF5IG9uIHRoZSBwcmltYXJ5IGBkYmAuXG4gKlxuICogU2FtZSBsYXp5LWluaXRpYWxpemF0aW9uIHBhdHRlcm4gYXMgYGRiYCDigJQgdGhlIHJlcGxpY2EgcG9vbCBpcyBidWlsdCBvblxuICogZmlyc3QgdXNlLCBub3Qgb24gbW9kdWxlIGltcG9ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRiUmVwbGljYSA9IG5ldyBQcm94eSh7fSBhcyBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiwge1xuICBnZXQoXywgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgY29uc3QgcmVwbGljYSA9IGdldFJlcGxpY2FQb29sKCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVwbGljYSA/IHJlcGxpY2EuZGIgOiBnZXREYkluc3RhbmNlKCk7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2YgdGFyZ2V0XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbn0pO1xuXG4vKiogQ2xvc2UgdGhlIHJlcGxpY2EgcG9vbC4gQ2FsbGVkIGZyb20gYGNsb3NlQ29ubmVjdGlvbigpYCBzbyBzZXJ2aWNlXG4gKiAgc2h1dGRvd24gaGFuZGxlcnMgZG9uJ3QgaGF2ZSB0byBrbm93IGFib3V0IGJvdGggcG9vbHMgc2VwYXJhdGVseS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsb3NlUmVwbGljYVBvb2woKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghX3JlcGxpY2EpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCBfcmVwbGljYS5wb29sLmVuZCgpO1xuICAgIGxvZ2dlci5pbmZvKCdSZWFkIHJlcGxpY2EgcG9vbCBjbG9zZWQnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjbG9zaW5nIHJlcGxpY2EgcG9vbCcsIHsgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfcmVwbGljYSA9IG51bGw7XG4gIH1cbn1cblxuLy8gRXh0ZW5kIGNsb3NlQ29ubmVjdGlvbiB0byBhbHNvIHRlYXIgZG93biB0aGUgcmVwbGljYSBwb29sLiBNb25rZXktcGF0Y2hcbi8vIHByZXNlcnZlcyB0aGUgZXhpc3RpbmcgZXhwb3J0IHNpZ25hdHVyZSB3aXRob3V0IGJyZWFraW5nIGNhbGxlcnMuXG5jb25zdCBfb3JpZ2luYWxDbG9zZUNvbm5lY3Rpb24gPSBjbG9zZUNvbm5lY3Rpb247XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VBbGxDb25uZWN0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgX29yaWdpbmFsQ2xvc2VDb25uZWN0aW9uKCk7XG4gIGF3YWl0IGNsb3NlUmVwbGljYVBvb2woKTtcbn0iXX0=
@@ -1,10 +1,7 @@
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.ConnectionRetryStrategy = void 0;
6
- const api_core_1 = require("@pipeline-builder/api-core");
7
- const logger = (0, api_core_1.createLogger)('retry-strategy');
3
+ import { createLogger } from '@pipeline-builder/api-core';
4
+ const logger = createLogger('retry-strategy');
8
5
  /**
9
6
  * Implements exponential backoff retry strategy for database connections.
10
7
  *
@@ -22,7 +19,7 @@ const logger = (0, api_core_1.createLogger)('retry-strategy');
22
19
  * });
23
20
  * ```
24
21
  */
25
- class ConnectionRetryStrategy {
22
+ export class ConnectionRetryStrategy {
26
23
  config;
27
24
  attempts = 0;
28
25
  constructor(config) {
@@ -122,5 +119,4 @@ class ConnectionRetryStrategy {
122
119
  return new Promise(resolve => setTimeout(resolve, ms));
123
120
  }
124
121
  }
125
- exports.ConnectionRetryStrategy = ConnectionRetryStrategy;
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcmV0cnktc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQUV0Qyx5REFBMEQ7QUFFMUQsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBWSxFQUFDLGdCQUFnQixDQUFDLENBQUM7QUFZOUM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFhLHVCQUF1QjtJQUdMO0lBRnJCLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFckIsWUFBNkIsTUFBbUI7UUFBbkIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtJQUFHLENBQUM7SUFFcEQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBSSxTQUEyQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVsQixPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUVoQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLFdBQVcsQ0FBQyxDQUFDO29CQUN2RSxN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Q0FBQztDQUNGO0FBbEhELDBEQWtIQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmV0cnktc3RyYXRlZ3knKTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW9uIHJldHJ5IHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlDb25maWcge1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgKi9cbiAgbWF4UmV0cmllczogbnVtYmVyO1xuICAvKiogQmFzZSBkZWxheSBiZXR3ZWVuIHJldHJpZXMgaW4gbWlsbGlzZWNvbmRzICovXG4gIGJhc2VEZWxheTogbnVtYmVyO1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgZXhwb25lbnRpYWwgYmFja29mZiByZXRyeSBzdHJhdGVneSBmb3IgZGF0YWJhc2UgY29ubmVjdGlvbnMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEV4cG9uZW50aWFsIGJhY2tvZmYgd2l0aCBjb25maWd1cmFibGUgYmFzZSBkZWxheVxuICogLSBBdHRlbXB0IHRyYWNraW5nIGFuZCBsb2dnaW5nXG4gKiAtIEdyYWNlZnVsIGZhaWx1cmUgYWZ0ZXIgbWF4IHJldHJpZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3RyYXRlZ3kgPSBuZXcgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3koeyBtYXhSZXRyaWVzOiAzLCBiYXNlRGVsYXk6IDEwMDAgfSk7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyYXRlZ3kuZXhlY3V0ZShhc3luYyAoKSA9PiB7XG4gKiAgIHJldHVybiBhd2FpdCBkYi5xdWVyeSgnU0VMRUNUIDEnKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uUmV0cnlTdHJhdGVneSB7XG4gIHByaXZhdGUgYXR0ZW1wdHMgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBSZXRyeUNvbmZpZykge31cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYW4gb3BlcmF0aW9uIHdpdGggcmV0cnkgbG9naWNcbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIEFzeW5jIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2l0aCByZXRyaWVzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIG9wZXJhdGlvbiByZXN1bHRcbiAgICogQHRocm93cyBFcnJvciBpZiBhbGwgcmV0cnkgYXR0ZW1wdHMgZmFpbFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZTxUPihvcGVyYXRpb246ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICB0aGlzLmF0dGVtcHRzID0gMDtcblxuICAgIHdoaWxlICh0aGlzLmF0dGVtcHRzIDwgdGhpcy5jb25maWcubWF4UmV0cmllcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmF0dGVtcHRzID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKCdPcGVyYXRpb24gc3VjY2VlZGVkIGFmdGVyIHJldHJ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYXR0ZW1wdHMrKztcblxuICAgICAgICBpZiAodGhpcy5hdHRlbXB0cyA+PSB0aGlzLmNvbmZpZy5tYXhSZXRyaWVzKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBNYXggcmV0cnkgYXR0ZW1wdHMgKCR7dGhpcy5jb25maWcubWF4UmV0cmllc30pIHJlYWNoZWRgKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5jYWxjdWxhdGVCYWNrb2ZmKHRoaXMuYXR0ZW1wdHMpO1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgT3BlcmF0aW9uIGZhaWxlZCAoYXR0ZW1wdCAke3RoaXMuYXR0ZW1wdHN9LyR7dGhpcy5jb25maWcubWF4UmV0cmllc30pLCByZXRyeWluZyBpbiAke2RlbGF5fW1zLi4uYCxcbiAgICAgICAgICB7IGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGRlbGF5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHJ5IGxvZ2ljIGZhaWxlZCB1bmV4cGVjdGVkbHknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbm5lY3Rpb24gZXJyb3JzIHdpdGggcmV0cnkgdHJhY2tpbmdcbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gRXJyb3IgdGhhdCBvY2N1cnJlZFxuICAgKiBAcGFyYW0gdGVzdENvbm5lY3Rpb24gLSBGdW5jdGlvbiB0byB0ZXN0IGlmIGNvbm5lY3Rpb24gaXMgcmVzdG9yZWRcbiAgICovXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3Rpb25FcnJvcihlcnJvcjogRXJyb3IsIHRlc3RDb25uZWN0aW9uOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hdHRlbXB0cysrO1xuXG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgYENvbm5lY3Rpb24gZXJyb3IgKGF0dGVtcHQgJHt0aGlzLmF0dGVtcHRzfS8ke3RoaXMuY29uZmlnLm1heFJldHJpZXN9KTpgLFxuICAgICAgZXJyb3IubWVzc2FnZSxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuYXR0ZW1wdHMgPCB0aGlzLmNvbmZpZy5tYXhSZXRyaWVzKSB7XG4gICAgICBjb25zdCBkZWxheSA9IHRoaXMuY2FsY3VsYXRlQmFja29mZih0aGlzLmF0dGVtcHRzKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeWluZyBjb25uZWN0aW9uIGluICR7ZGVsYXl9bXMuLi5gKTtcblxuICAgICAgYXdhaXQgdGhpcy5zbGVlcChkZWxheSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzSGVhbHRoeSA9IGF3YWl0IHRlc3RDb25uZWN0aW9uKCk7XG4gICAgICAgIGlmIChpc0hlYWx0aHkpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnQ29ubmVjdGlvbiByZXN0b3JlZCcpO1xuICAgICAgICAgIHRoaXMuYXR0ZW1wdHMgPSAwOyAvLyBSZXNldCBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb25cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nvbm5lY3Rpb24gdGVzdCBmYWlsZWQgYWZ0ZXIgcmV0cnknKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocmV0cnlFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1JldHJ5IGZhaWxlZDonLCByZXRyeUVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmVycm9yKCdNYXggY29ubmVjdGlvbiByZXRyeSBhdHRlbXB0cyByZWFjaGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgYXR0ZW1wdCBjb3VudGVyXG4gICAqIENhbGwgdGhpcyBhZnRlciBhIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGF0dGVtcHQgY291bnRcbiAgICovXG4gIGdldEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXR0ZW1wdHM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBleHBvbmVudGlhbCBiYWNrb2ZmIGRlbGF5XG4gICAqXG4gICAqIEBwYXJhbSBhdHRlbXB0IC0gQ3VycmVudCBhdHRlbXB0IG51bWJlciAoMS1pbmRleGVkKVxuICAgKiBAcmV0dXJucyBEZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlQmFja29mZihhdHRlbXB0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmNvbmZpZy5iYXNlRGVsYXkgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7XG4gICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMSAqIGJhc2U7XG4gICAgcmV0dXJuIGJhc2UgKyBqaXR0ZXI7XG4gIH1cblxuICAvKipcbiAgICogU2xlZXBzIGZvciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBtcyAtIE1pbGxpc2Vjb25kcyB0byBzbGVlcFxuICAgKi9cbiAgcHJpdmF0ZSBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG59XG4iXX0=
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcmV0cnktc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFZOUM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLE9BQU8sdUJBQXVCO0lBR0w7SUFGckIsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVyQixZQUE2QixNQUFtQjtRQUFuQixXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztJQUVwRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFJLFNBQTJCO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztnQkFDakQsQ0FBQztnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWhCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVB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RUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3JldHJ5LXN0cmF0ZWd5Jyk7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGlvbiByZXRyeSBzdHJhdGVneVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5Q29uZmlnIHtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzICovXG4gIG1heFJldHJpZXM6IG51bWJlcjtcbiAgLyoqIEJhc2UgZGVsYXkgYmV0d2VlbiByZXRyaWVzIGluIG1pbGxpc2Vjb25kcyAqL1xuICBiYXNlRGVsYXk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGV4cG9uZW50aWFsIGJhY2tvZmYgcmV0cnkgc3RyYXRlZ3kgZm9yIGRhdGFiYXNlIGNvbm5lY3Rpb25zLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBFeHBvbmVudGlhbCBiYWNrb2ZmIHdpdGggY29uZmlndXJhYmxlIGJhc2UgZGVsYXlcbiAqIC0gQXR0ZW1wdCB0cmFja2luZyBhbmQgbG9nZ2luZ1xuICogLSBHcmFjZWZ1bCBmYWlsdXJlIGFmdGVyIG1heCByZXRyaWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0cmF0ZWd5ID0gbmV3IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5KHsgbWF4UmV0cmllczogMywgYmFzZURlbGF5OiAxMDAwIH0pO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmF0ZWd5LmV4ZWN1dGUoYXN5bmMgKCkgPT4ge1xuICogICByZXR1cm4gYXdhaXQgZGIucXVlcnkoJ1NFTEVDVCAxJyk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3kge1xuICBwcml2YXRlIGF0dGVtcHRzID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogUmV0cnlDb25maWcpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGFuIG9wZXJhdGlvbiB3aXRoIHJldHJ5IGxvZ2ljXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBBc3luYyBmdW5jdGlvbiB0byBleGVjdXRlIHdpdGggcmV0cmllc1xuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBvcGVyYXRpb24gcmVzdWx0XG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgYWxsIHJldHJ5IGF0dGVtcHRzIGZhaWxcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGU8VD4ob3BlcmF0aW9uOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgdGhpcy5hdHRlbXB0cyA9IDA7XG5cbiAgICB3aGlsZSAodGhpcy5hdHRlbXB0cyA8IHRoaXMuY29uZmlnLm1heFJldHJpZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5hdHRlbXB0cyA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnT3BlcmF0aW9uIHN1Y2NlZWRlZCBhZnRlciByZXRyeScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmF0dGVtcHRzKys7XG5cbiAgICAgICAgaWYgKHRoaXMuYXR0ZW1wdHMgPj0gdGhpcy5jb25maWcubWF4UmV0cmllcykge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgTWF4IHJldHJ5IGF0dGVtcHRzICgke3RoaXMuY29uZmlnLm1heFJldHJpZXN9KSByZWFjaGVkYCk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuY2FsY3VsYXRlQmFja29mZih0aGlzLmF0dGVtcHRzKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgYE9wZXJhdGlvbiBmYWlsZWQgKGF0dGVtcHQgJHt0aGlzLmF0dGVtcHRzfS8ke3RoaXMuY29uZmlnLm1heFJldHJpZXN9KSwgcmV0cnlpbmcgaW4gJHtkZWxheX1tcy4uLmAsXG4gICAgICAgICAgeyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChkZWxheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXRyeSBsb2dpYyBmYWlsZWQgdW5leHBlY3RlZGx5Jyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb25uZWN0aW9uIGVycm9ycyB3aXRoIHJldHJ5IHRyYWNraW5nXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIEVycm9yIHRoYXQgb2NjdXJyZWRcbiAgICogQHBhcmFtIHRlc3RDb25uZWN0aW9uIC0gRnVuY3Rpb24gdG8gdGVzdCBpZiBjb25uZWN0aW9uIGlzIHJlc3RvcmVkXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb25uZWN0aW9uRXJyb3IoZXJyb3I6IEVycm9yLCB0ZXN0Q29ubmVjdGlvbjogKCkgPT4gUHJvbWlzZTxib29sZWFuPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXR0ZW1wdHMrKztcblxuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIGBDb25uZWN0aW9uIGVycm9yIChhdHRlbXB0ICR7dGhpcy5hdHRlbXB0c30vJHt0aGlzLmNvbmZpZy5tYXhSZXRyaWVzfSk6YCxcbiAgICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmF0dGVtcHRzIDwgdGhpcy5jb25maWcubWF4UmV0cmllcykge1xuICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmNhbGN1bGF0ZUJhY2tvZmYodGhpcy5hdHRlbXB0cyk7XG4gICAgICBsb2dnZXIuaW5mbyhgUmV0cnlpbmcgY29ubmVjdGlvbiBpbiAke2RlbGF5fW1zLi4uYCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAoZGVsYXkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0hlYWx0aHkgPSBhd2FpdCB0ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgICBpZiAoaXNIZWFsdGh5KSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ0Nvbm5lY3Rpb24gcmVzdG9yZWQnKTtcbiAgICAgICAgICB0aGlzLmF0dGVtcHRzID0gMDsgLy8gUmVzZXQgb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0aW9uIHRlc3QgZmFpbGVkIGFmdGVyIHJldHJ5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHJldHJ5RXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdSZXRyeSBmYWlsZWQ6JywgcmV0cnlFcnJvcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcignTWF4IGNvbm5lY3Rpb24gcmV0cnkgYXR0ZW1wdHMgcmVhY2hlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGF0dGVtcHQgY291bnRlclxuICAgKiBDYWxsIHRoaXMgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9wZXJhdGlvblxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdHRlbXB0cyA9IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBhdHRlbXB0IGNvdW50XG4gICAqL1xuICBnZXRBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmF0dGVtcHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgZXhwb25lbnRpYWwgYmFja29mZiBkZWxheVxuICAgKlxuICAgKiBAcGFyYW0gYXR0ZW1wdCAtIEN1cnJlbnQgYXR0ZW1wdCBudW1iZXIgKDEtaW5kZXhlZClcbiAgICogQHJldHVybnMgRGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5jb25maWcuYmFzZURlbGF5ICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpO1xuICAgIGNvbnN0IGppdHRlciA9IE1hdGgucmFuZG9tKCkgKiAwLjEgKiBiYXNlO1xuICAgIHJldHVybiBiYXNlICsgaml0dGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNsZWVwcyBmb3IgdGhlIHNwZWNpZmllZCBkdXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbXMgLSBNaWxsaXNlY29uZHMgdG8gc2xlZXBcbiAgICovXG4gIHByaXZhdGUgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxufVxuIl19
@@ -32,7 +32,7 @@
32
32
  * also set `app.is_sysadmin = 'true'` or they'll lose access to it.
33
33
  */
34
34
  import { AsyncLocalStorage } from 'node:async_hooks';
35
- import { db } from './postgres-connection';
35
+ import { db } from './postgres-connection.js';
36
36
  export interface TenantContext {
37
37
  /** Caller's org. Undefined for un-authenticated / system jobs. */
38
38
  orgId?: string;