velocious 1.0.634 → 1.0.635
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -1
- package/build/background-jobs/lifecycle-client.js +1 -1
- package/build/background-jobs/lifecycle-control-server.js +1 -1
- package/build/background-jobs/main.js +9 -3
- package/build/cli/commands/db/migrate.js +3 -1
- package/build/cli/commands/db/tenants/migrate.js +4 -1
- package/build/cli/commands/db/tenants/migrations/pending.js +4 -1
- package/build/cli/index.js +1 -1
- package/build/cli/migration-execution-phase-argument.js +20 -0
- package/build/database/migration/index.js +21 -0
- package/build/database/migration-execution-phase.js +34 -0
- package/build/database/migrator.js +6 -1
- package/build/src/background-jobs/lifecycle-client.d.ts +1 -1
- package/build/src/background-jobs/lifecycle-client.d.ts.map +1 -1
- package/build/src/background-jobs/lifecycle-client.js +2 -2
- package/build/src/background-jobs/lifecycle-control-server.js +2 -2
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +11 -4
- package/build/src/cli/commands/db/migrate.d.ts.map +1 -1
- package/build/src/cli/commands/db/migrate.js +4 -2
- package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/migrate.js +5 -2
- package/build/src/cli/commands/db/tenants/migrations/pending.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/migrations/pending.js +5 -2
- package/build/src/cli/index.js +2 -2
- package/build/src/cli/migration-execution-phase-argument.d.ts +7 -0
- package/build/src/cli/migration-execution-phase-argument.d.ts.map +1 -0
- package/build/src/cli/migration-execution-phase-argument.js +17 -0
- package/build/src/database/migration/index.d.ts +13 -0
- package/build/src/database/migration/index.d.ts.map +1 -1
- package/build/src/database/migration/index.js +19 -1
- package/build/src/database/migration-execution-phase.d.ts +18 -0
- package/build/src/database/migration-execution-phase.d.ts.map +1 -0
- package/build/src/database/migration-execution-phase.js +30 -0
- package/build/src/database/migrator.d.ts +4 -1
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/migrator.js +9 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/background-jobs/lifecycle-client.js +1 -1
- package/src/background-jobs/lifecycle-control-server.js +1 -1
- package/src/background-jobs/main.js +9 -3
- package/src/cli/commands/db/migrate.js +3 -1
- package/src/cli/commands/db/tenants/migrate.js +4 -1
- package/src/cli/commands/db/tenants/migrations/pending.js +4 -1
- package/src/cli/index.js +1 -1
- package/src/cli/migration-execution-phase-argument.js +20 -0
- package/src/database/migration/index.js +21 -0
- package/src/database/migration-execution-phase.js +34 -0
- package/src/database/migrator.js +6 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Connection-scoped advisory locks with automatic cleanup before pooled connections are reused or closed (see [docs/advisory-locks.md](docs/advisory-locks.md))
|
|
8
8
|
* Built-in record auditing for model lifecycle changes (see [docs/auditing.md](docs/auditing.md))
|
|
9
9
|
* Declarative state machines for models, with typed event methods generated into the base model (see [docs/state-machine.md](docs/state-machine.md))
|
|
10
|
-
* Migrations for schema changes and UTC datetime storage, including recorded `changeTable` batches that combine operations into one `ALTER` on bulk-capable drivers (see [docs/database-migrations.md](docs/database-migrations.md) and [docs/change-table.md](docs/change-table.md))
|
|
10
|
+
* Migrations for schema changes and UTC datetime storage, including caller-selected `pre-runtime` and `post-publication` execution sets and recorded `changeTable` batches that combine operations into one `ALTER` on bulk-capable drivers (see [docs/database-migrations.md](docs/database-migrations.md), [docs/migration-execution-phases.md](docs/migration-execution-phases.md), and [docs/change-table.md](docs/change-table.md))
|
|
11
11
|
* Tenant-selected base-model and structure generation with one immutable, fail-closed physical database context; tenant-only model metadata initializes only after that context is active (see [docs/tenant-selected-database-generation.md](docs/tenant-selected-database-generation.md))
|
|
12
12
|
* Read-only tenant migration deploy preflight with stable JSON output and fail-closed ledger reads (see [docs/tenant-migration-deploy-preflight.md](docs/tenant-migration-deploy-preflight.md))
|
|
13
13
|
* External packages (engines) that contribute data models, frontend-model resources and migrations to a consuming app (see [docs/packages.md](docs/packages.md))
|
|
@@ -59,6 +59,10 @@ npm install velocious
|
|
|
59
59
|
npx velocious init
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
+
Pinned Git commits can be installed without lifecycle scripts by using a GitHub
|
|
63
|
+
commit archive. Velocious checks in generated `build/` output for this purpose;
|
|
64
|
+
see [Git dependency installation](docs/git-installation.md).
|
|
65
|
+
|
|
62
66
|
By default, Velocious looks for your configuration in `src/config/configuration.js`. If you keep the configuration elsewhere, make sure your app imports it early and calls `configuration.setCurrent()`.
|
|
63
67
|
|
|
64
68
|
Application initializers may implement `teardown()` and inspect their frozen
|
|
@@ -1429,6 +1433,22 @@ Migrations that must be rerunnable can guard changes with `tableExists(...)`, `c
|
|
|
1429
1433
|
npx velocious db:migrate
|
|
1430
1434
|
```
|
|
1431
1435
|
|
|
1436
|
+
Migrations default to the `pre-runtime` phase. A migration can declare
|
|
1437
|
+
`Migration.runInPhase("post-publication")`, and callers can run exactly one
|
|
1438
|
+
declared set while preserving timestamp order, package migrations, database
|
|
1439
|
+
targets, and ledger behavior:
|
|
1440
|
+
|
|
1441
|
+
```bash
|
|
1442
|
+
npx velocious db:migrate --phase pre-runtime
|
|
1443
|
+
npx velocious db:migrate --phase post-publication
|
|
1444
|
+
```
|
|
1445
|
+
|
|
1446
|
+
Omitting `--phase` remains backward-compatible and runs all pending migrations.
|
|
1447
|
+
Velocious does not choose when either set runs; the application or deployment
|
|
1448
|
+
caller owns invocation timing. See [migration execution phases](docs/migration-execution-phases.md)
|
|
1449
|
+
for the class API, programmatic selector, require-context behavior, and tenant
|
|
1450
|
+
commands.
|
|
1451
|
+
|
|
1432
1452
|
Run project seeds from `src/db/seed.js` (default export should be an async function):
|
|
1433
1453
|
|
|
1434
1454
|
```bash
|
|
@@ -6,7 +6,7 @@ import timeout from "awaitery/build/timeout.js"
|
|
|
6
6
|
import JsonSocket from "./json-socket.js"
|
|
7
7
|
|
|
8
8
|
const DEFAULT_REQUEST_TIMEOUT_MS = 10000
|
|
9
|
-
export const MAX_LIFECYCLE_REQUEST_TIMEOUT_MS =
|
|
9
|
+
export const MAX_LIFECYCLE_REQUEST_TIMEOUT_MS = 120000
|
|
10
10
|
|
|
11
11
|
/** One-request acknowledged lifecycle client. */
|
|
12
12
|
export default class BackgroundJobsLifecycleClient {
|
|
@@ -244,7 +244,7 @@ export default class BackgroundJobsLifecycleControlServer {
|
|
|
244
244
|
try {
|
|
245
245
|
this._validateRequest(message)
|
|
246
246
|
if (action === "activate") await this.main.activate()
|
|
247
|
-
else
|
|
247
|
+
else void this.main.retire()
|
|
248
248
|
|
|
249
249
|
this._writeResponse(socket, {
|
|
250
250
|
type: "background-jobs-lifecycle-ack",
|
|
@@ -602,10 +602,14 @@ export default class BackgroundJobsMain {
|
|
|
602
602
|
* @returns {Promise<void>} - Activation completion.
|
|
603
603
|
*/
|
|
604
604
|
async _activate() {
|
|
605
|
+
this.logger.info(() => ["Background jobs generation activation starting", {generationId: this.generationId}])
|
|
605
606
|
await this._startActiveOwnership()
|
|
606
607
|
this.lifecycleState = "active"
|
|
607
608
|
this._creditReadyWorkers()
|
|
608
|
-
|
|
609
|
+
this.logger.info(() => ["Background jobs generation activation acknowledged", {generationId: this.generationId}])
|
|
610
|
+
void this._drain().catch((error) => {
|
|
611
|
+
this.logger.error(() => ["Background jobs generation post-activation drain failed", {error, generationId: this.generationId}])
|
|
612
|
+
})
|
|
609
613
|
}
|
|
610
614
|
|
|
611
615
|
/**
|
|
@@ -614,7 +618,7 @@ export default class BackgroundJobsMain {
|
|
|
614
618
|
*/
|
|
615
619
|
retire() {
|
|
616
620
|
if (!this.generationId) throw new Error("Background jobs generation retirement requires generation mode")
|
|
617
|
-
if (this.lifecycleState === "retiring" || this.lifecycleState === "retired") return
|
|
621
|
+
if (this.lifecycleState === "retiring" || this.lifecycleState === "retired") return Promise.resolve()
|
|
618
622
|
if (this.lifecycleState !== "active") throw new Error(`Cannot retire background jobs generation from ${this.lifecycleState}`)
|
|
619
623
|
|
|
620
624
|
this.lifecycleState = "retiring"
|
|
@@ -624,8 +628,9 @@ export default class BackgroundJobsMain {
|
|
|
624
628
|
this._clearDispatchTimers()
|
|
625
629
|
this._disconnectBeaconHandlers()
|
|
626
630
|
this._retirementPromise = this._retire()
|
|
631
|
+
void this._retirementPromise.catch((error) => this._reportConnectionHandlerError(error))
|
|
627
632
|
|
|
628
|
-
return
|
|
633
|
+
return Promise.resolve()
|
|
629
634
|
}
|
|
630
635
|
|
|
631
636
|
/**
|
|
@@ -636,6 +641,7 @@ export default class BackgroundJobsMain {
|
|
|
636
641
|
await this.scheduler?.stop()
|
|
637
642
|
this.scheduler = undefined
|
|
638
643
|
if (this._drainPromise) await this._drainPromise
|
|
644
|
+
if (this._stopped) return
|
|
639
645
|
|
|
640
646
|
for (const worker of this.workers) {
|
|
641
647
|
worker.isDraining = true
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import BaseCommand from "../../base-command.js"
|
|
2
2
|
import {digg} from "diggerize"
|
|
3
3
|
import Migrator from "../../../database/migrator.js"
|
|
4
|
+
import migrationExecutionPhaseArgument from "../../migration-execution-phase-argument.js"
|
|
4
5
|
|
|
5
6
|
export default class DbMigrate extends BaseCommand {
|
|
6
7
|
async execute() {
|
|
8
|
+
const executionPhase = migrationExecutionPhaseArgument(this.processArgs || [])
|
|
7
9
|
const migrations = await this.getEnvironmentHandler().findMigrations()
|
|
8
|
-
const migrator = new Migrator({configuration: this.getConfiguration()})
|
|
10
|
+
const migrator = new Migrator({configuration: this.getConfiguration(), executionPhase})
|
|
9
11
|
|
|
10
12
|
console.log(`Running ${migrations.length} migrations`)
|
|
11
13
|
|
|
@@ -4,6 +4,7 @@ import {digg} from "diggerize"
|
|
|
4
4
|
import BaseCommand from "../../../base-command.js"
|
|
5
5
|
import Migrator from "../../../../database/migrator.js"
|
|
6
6
|
import TenantDatabaseCommandHelper from "../../../tenant-database-command-helper.js"
|
|
7
|
+
import migrationExecutionPhaseArgument from "../../../migration-execution-phase-argument.js"
|
|
7
8
|
|
|
8
9
|
export default class DbTenantsMigrate extends BaseCommand {
|
|
9
10
|
/**
|
|
@@ -11,6 +12,7 @@ export default class DbTenantsMigrate extends BaseCommand {
|
|
|
11
12
|
* @returns {Promise<{identifier: string, migrationCount: number, tenantCount: number} | void>} - Result in test mode.
|
|
12
13
|
*/
|
|
13
14
|
async execute() {
|
|
15
|
+
const executionPhase = migrationExecutionPhaseArgument(this.processArgs || [])
|
|
14
16
|
const helper = new TenantDatabaseCommandHelper({
|
|
15
17
|
command: this,
|
|
16
18
|
identifier: this.processArgs?.[1]
|
|
@@ -19,7 +21,8 @@ export default class DbTenantsMigrate extends BaseCommand {
|
|
|
19
21
|
const tenantCount = await helper.eachTenant(async ({databaseConfiguration, tenant}) => {
|
|
20
22
|
const migrator = new Migrator({
|
|
21
23
|
configuration: this.getConfiguration(),
|
|
22
|
-
databaseIdentifiers: [helper.identifier]
|
|
24
|
+
databaseIdentifiers: [helper.identifier],
|
|
25
|
+
executionPhase
|
|
23
26
|
})
|
|
24
27
|
|
|
25
28
|
let migrationsApplied = 0
|
|
@@ -4,6 +4,8 @@ import {digg} from "diggerize"
|
|
|
4
4
|
import BaseCommand from "../../../../base-command.js"
|
|
5
5
|
import TenantDatabaseCommandHelper from "../../../../tenant-database-command-helper.js"
|
|
6
6
|
import TenantMigrationPendingInspector from "../../../../../database/tenants/migration-pending-inspector.js"
|
|
7
|
+
import { migrationRunsInExecutionPhase } from "../../../../../database/migration-execution-phase.js"
|
|
8
|
+
import migrationExecutionPhaseArgument from "../../../../migration-execution-phase-argument.js"
|
|
7
9
|
|
|
8
10
|
export default class DbTenantsMigrationsPending extends BaseCommand {
|
|
9
11
|
/**
|
|
@@ -11,6 +13,7 @@ export default class DbTenantsMigrationsPending extends BaseCommand {
|
|
|
11
13
|
* @returns {Promise<{hasPendingMigrations: boolean, identifier: string, migrationCount: number, pendingTenantCount: number, tenantCount: number}>} - Deploy preflight result.
|
|
12
14
|
*/
|
|
13
15
|
async execute() {
|
|
16
|
+
const executionPhase = migrationExecutionPhaseArgument(this.processArgs || [])
|
|
14
17
|
const helper = new TenantDatabaseCommandHelper({
|
|
15
18
|
command: this,
|
|
16
19
|
identifier: this.processArgs?.[1]
|
|
@@ -24,7 +27,7 @@ export default class DbTenantsMigrationsPending extends BaseCommand {
|
|
|
24
27
|
|
|
25
28
|
const MigrationClass = await requireMigration(migration.fullPath)
|
|
26
29
|
|
|
27
|
-
if ((MigrationClass.getDatabaseIdentifiers() || ["default"]).includes(helper.identifier)) {
|
|
30
|
+
if (migrationRunsInExecutionPhase(MigrationClass, executionPhase) && (MigrationClass.getDatabaseIdentifiers() || ["default"]).includes(helper.identifier)) {
|
|
28
31
|
applicableMigrationVersions.push(migration.date)
|
|
29
32
|
}
|
|
30
33
|
}
|
package/build/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
const COMMAND_VALUE_OPTIONS = new Set(["--generation", "--initial-generation-state", "--lifecycle-socket", "--socket", "--tenant"])
|
|
3
|
+
const COMMAND_VALUE_OPTIONS = new Set(["--generation", "--initial-generation-state", "--lifecycle-socket", "--phase", "--socket", "--tenant"])
|
|
4
4
|
|
|
5
5
|
export default class VelociousCli {
|
|
6
6
|
/**
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import { migrationExecutionPhase } from "../database/migration-execution-phase.js"
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Reads an optional `--phase` value from one command's raw arguments.
|
|
7
|
+
* @param {string[]} processArgs - Raw command arguments including the command name.
|
|
8
|
+
* @returns {import("../database/migration-execution-phase.js").MigrationExecutionPhase | undefined} - Selected phase.
|
|
9
|
+
*/
|
|
10
|
+
export default function migrationExecutionPhaseArgument(processArgs) {
|
|
11
|
+
const phaseArgumentIndex = processArgs.indexOf("--phase")
|
|
12
|
+
|
|
13
|
+
if (phaseArgumentIndex < 0) return undefined
|
|
14
|
+
|
|
15
|
+
const phase = processArgs[phaseArgumentIndex + 1]
|
|
16
|
+
|
|
17
|
+
if (!phase || phase.startsWith("-")) throw new Error("Missing value for --phase")
|
|
18
|
+
|
|
19
|
+
return migrationExecutionPhase(phase)
|
|
20
|
+
}
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
import { convertLegacyDateValueToUtcStorage } from "../datetime-storage.js"
|
|
29
29
|
import * as inflection from "inflection"
|
|
30
30
|
import restArgsError from "../../utils/rest-args-error.js"
|
|
31
|
+
import { DEFAULT_MIGRATION_EXECUTION_PHASE, migrationExecutionPhase } from "../migration-execution-phase.js"
|
|
31
32
|
import ChangeTable from "./change-table.js"
|
|
32
33
|
import CreateIndexBase from "../query/create-index-base.js"
|
|
33
34
|
import TableColumn from "../table-data/table-column.js"
|
|
@@ -38,6 +39,26 @@ class NotImplementedError extends Error {}
|
|
|
38
39
|
export {NotImplementedError}
|
|
39
40
|
|
|
40
41
|
export default class VelociousDatabaseMigration {
|
|
42
|
+
/** @type {import("../migration-execution-phase.js").MigrationExecutionPhase | undefined} */
|
|
43
|
+
static _executionPhase
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Declares when this migration is eligible to run.
|
|
47
|
+
* @param {import("../migration-execution-phase.js").MigrationExecutionPhase} phase - Execution phase.
|
|
48
|
+
* @returns {void} - No return value.
|
|
49
|
+
*/
|
|
50
|
+
static runInPhase(phase) {
|
|
51
|
+
this._executionPhase = migrationExecutionPhase(phase)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Gets the declared execution phase.
|
|
56
|
+
* @returns {import("../migration-execution-phase.js").MigrationExecutionPhase} - Declared execution phase.
|
|
57
|
+
*/
|
|
58
|
+
static getExecutionPhase() {
|
|
59
|
+
return this._executionPhase || DEFAULT_MIGRATION_EXECUTION_PHASE
|
|
60
|
+
}
|
|
61
|
+
|
|
41
62
|
/**
|
|
42
63
|
* Runs on databases.
|
|
43
64
|
* @param {string[]} databaseIdentifiers - Database identifiers.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
/** @typedef {"post-publication" | "pre-runtime"} MigrationExecutionPhase */
|
|
4
|
+
|
|
5
|
+
/** @type {MigrationExecutionPhase} */
|
|
6
|
+
export const DEFAULT_MIGRATION_EXECUTION_PHASE = "pre-runtime"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Validates and returns one supported migration execution phase.
|
|
10
|
+
* @param {string | undefined} phase - Migration execution phase.
|
|
11
|
+
* @returns {MigrationExecutionPhase} - Validated execution phase.
|
|
12
|
+
*/
|
|
13
|
+
export function migrationExecutionPhase(phase) {
|
|
14
|
+
if (phase === undefined) {
|
|
15
|
+
throw new Error("Missing migration execution phase. Expected one of: pre-runtime, post-publication")
|
|
16
|
+
}
|
|
17
|
+
if (phase !== "pre-runtime" && phase !== "post-publication") {
|
|
18
|
+
throw new Error(`Unknown migration execution phase ${JSON.stringify(phase)}. Expected one of: pre-runtime, post-publication`)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return phase
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Tests whether a migration class belongs to an optional selected phase.
|
|
26
|
+
* @param {typeof import("./migration/index.js").default} MigrationClass - Migration class.
|
|
27
|
+
* @param {MigrationExecutionPhase | undefined} executionPhase - Optional selected phase.
|
|
28
|
+
* @returns {boolean} - Whether the migration belongs to the selection.
|
|
29
|
+
*/
|
|
30
|
+
export function migrationRunsInExecutionPhase(MigrationClass, executionPhase) {
|
|
31
|
+
if (executionPhase === undefined) return true
|
|
32
|
+
|
|
33
|
+
return MigrationClass.getExecutionPhase() === executionPhase
|
|
34
|
+
}
|
|
@@ -5,6 +5,7 @@ import * as inflection from "inflection"
|
|
|
5
5
|
import Logger from "../logger.js"
|
|
6
6
|
import MigrationsLedger from "./migrations-ledger.js"
|
|
7
7
|
import {NotImplementedError} from "./migration/index.js"
|
|
8
|
+
import { migrationExecutionPhase, migrationRunsInExecutionPhase } from "./migration-execution-phase.js"
|
|
8
9
|
import restArgsError from "../utils/rest-args-error.js"
|
|
9
10
|
|
|
10
11
|
export default class VelociousDatabaseMigrator {
|
|
@@ -18,14 +19,16 @@ export default class VelociousDatabaseMigrator {
|
|
|
18
19
|
* @param {object} args - Options object.
|
|
19
20
|
* @param {import("../configuration.js").default} args.configuration - Configuration instance.
|
|
20
21
|
* @param {string[]} [args.databaseIdentifiers] - Optional database identifiers to migrate.
|
|
22
|
+
* @param {import("./migration-execution-phase.js").MigrationExecutionPhase} [args.executionPhase] - Optional migration execution phase to select.
|
|
21
23
|
*/
|
|
22
|
-
constructor({configuration, databaseIdentifiers, ...restArgs}) {
|
|
24
|
+
constructor({configuration, databaseIdentifiers, executionPhase, ...restArgs}) {
|
|
23
25
|
restArgsError(restArgs)
|
|
24
26
|
|
|
25
27
|
if (!configuration) throw new Error("configuration argument is required")
|
|
26
28
|
|
|
27
29
|
this.configuration = configuration
|
|
28
30
|
this.databaseIdentifiers = databaseIdentifiers
|
|
31
|
+
this.executionPhase = executionPhase === undefined ? undefined : migrationExecutionPhase(executionPhase)
|
|
29
32
|
this.logger = new Logger(this)
|
|
30
33
|
}
|
|
31
34
|
|
|
@@ -188,6 +191,7 @@ export default class VelociousDatabaseMigrator {
|
|
|
188
191
|
if (!MigrationClass || typeof MigrationClass !== "function") {
|
|
189
192
|
throw new Error(`Migration ${migration.file} must export a default migration class. Type: ${typeof MigrationClass}`)
|
|
190
193
|
}
|
|
194
|
+
if (!migrationRunsInExecutionPhase(MigrationClass, this.executionPhase)) continue
|
|
191
195
|
if (!(MigrationClass.getDatabaseIdentifiers() || ["default"]).includes(databaseIdentifier)) continue
|
|
192
196
|
|
|
193
197
|
const migrationInstance = new MigrationClass({configuration: this.configuration, databaseIdentifier, db})
|
|
@@ -519,6 +523,7 @@ export default class VelociousDatabaseMigrator {
|
|
|
519
523
|
if (!migrationClass || typeof migrationClass !== "function") {
|
|
520
524
|
throw new Error(`Migration ${migration.file} must export a default migration class. Type: ${typeof migrationClass}`)
|
|
521
525
|
}
|
|
526
|
+
if (direction == "up" && !migrationRunsInExecutionPhase(migrationClass, this.executionPhase)) return false
|
|
522
527
|
|
|
523
528
|
const migrationDatabaseIdentifiers = migrationClass.getDatabaseIdentifiers() || ["default"]
|
|
524
529
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-client.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/lifecycle-client.js"],"names":[],"mappings":"AAQA,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"lifecycle-client.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/lifecycle-client.js"],"names":[],"mappings":"AAQA,eAAO,MAAM,gCAAgC,SAAS,CAAA;AAEtD,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAezC,YAAY;IACZ,UAAU;IAIV,gBAAgB;IAnBvB;;;;;;;OAOG;IACH,YAAY,EAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,gBAA6C,EAAC,EALjG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAAsB,YAAY,AAAlC,CACA,EADQ,MAAM,CACd;QAAsB,UAAU,AAAhC,CACA,EADQ,MAAM,CACd;QAAsB,gBAAgB,AAAtC,CACF,EADU,MAAM,CAChB;KACmG,EAcnG;IAED;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAEtB;IAE3D;;;OAGG;IACG,MAAM,IAFC,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAE1B;IAEvD;;;;OAIG;IACG,QAAQ,CAAC,MAAM,EAHV,UAAU,GAAG,QAGH,GAFR,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAOhF;IAED;;;;;;OAMG;IACG,WAAW,CAAC,EAAC,MAAM,EAAE,MAAM,EAAC,EAJ/B;QAAoC,MAAM,EAAlC,UAAU,GAAG,QAAQ,CAC7B;QAA0B,MAAM,EAAxB,WAAW,CACnB;KAE+B,GAFrB,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CA4DhF;CACF"}
|
|
@@ -4,7 +4,7 @@ import net from "node:net";
|
|
|
4
4
|
import timeout from "awaitery/build/timeout.js";
|
|
5
5
|
import JsonSocket from "./json-socket.js";
|
|
6
6
|
const DEFAULT_REQUEST_TIMEOUT_MS = 10000;
|
|
7
|
-
export const MAX_LIFECYCLE_REQUEST_TIMEOUT_MS =
|
|
7
|
+
export const MAX_LIFECYCLE_REQUEST_TIMEOUT_MS = 120000;
|
|
8
8
|
/** One-request acknowledged lifecycle client. */
|
|
9
9
|
export default class BackgroundJobsLifecycleClient {
|
|
10
10
|
/**
|
|
@@ -123,4 +123,4 @@ export default class BackgroundJobsLifecycleClient {
|
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvbGlmZWN5Y2xlLWNsaWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFDMUIsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUE7QUFDeEMsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsS0FBSyxDQUFBO0FBRXJELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsT0FBTyxPQUFPLDZCQUE2QjtJQUNoRDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixHQUFHLDBCQUEwQixFQUFDO1FBQ2xHLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLHFDQUFxQyxDQUFDO1lBQzNFLFlBQVk7WUFDWixtQkFBbUIsRUFBRSxVQUFVO1lBQy9CLFVBQVUsRUFBRSwrQkFBK0I7U0FDNUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUE7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQTtRQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3ZILE1BQU0sSUFBSSxTQUFTLENBQUMscURBQXFELGdDQUFnQyxFQUFFLENBQUMsQ0FBQTtRQUM5RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdC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Q0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUE7b0JBQy9FLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7b0JBQy9CLE9BQU07Z0JBQ1IsQ0FBQztnQkFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssK0JBQStCLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ25HLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUN4RixPQUFNO2dCQUNSLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7WUFDbkQsQ0FBQyxDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUNqQyxJQUFJLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IG5ldCBmcm9tIFwibm9kZTpuZXRcIlxuaW1wb3J0IHRpbWVvdXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3RpbWVvdXQuanNcIlxuaW1wb3J0IEpzb25Tb2NrZXQgZnJvbSBcIi4vanNvbi1zb2NrZXQuanNcIlxuXG5jb25zdCBERUZBVUxUX1JFUVVFU1RfVElNRU9VVF9NUyA9IDEwMDAwXG5leHBvcnQgY29uc3QgTUFYX0xJRkVDWUNMRV9SRVFVRVNUX1RJTUVPVVRfTVMgPSA2MDAwMFxuXG4vKiogT25lLXJlcXVlc3QgYWNrbm93bGVkZ2VkIGxpZmVjeWNsZSBjbGllbnQuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrZ3JvdW5kSm9ic0xpZmVjeWNsZUNsaWVudCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGlmZWN5Y2xlIGNsaWVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBDbGllbnQgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5nZW5lcmF0aW9uSWRdIC0gRXhwbGljaXQgZ2VuZXJhdGlvbiBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNvY2tldFBhdGhdIC0gRXhwbGljaXQgY29udHJvbCBzb2NrZXQgcGF0aC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnJlcXVlc3RUaW1lb3V0TXNdIC0gUmVxdWVzdCBkZWFkbGluZSBiZWxvdyB0aGUgc3VwZXJ2aXNvciBob29rIHRpbWVvdXQgKGRlZmF1bHQ6IDEwMDAwKS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBnZW5lcmF0aW9uSWQsIHNvY2tldFBhdGgsIHJlcXVlc3RUaW1lb3V0TXMgPSBERUZBVUxUX1JFUVVFU1RfVElNRU9VVF9NU30pIHtcbiAgICBjb25zdCBnZW5lcmF0aW9uQ29uZmlnID0gY29uZmlndXJhdGlvbi5yZXNvbHZlQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uQ29uZmlnKHtcbiAgICAgIGdlbmVyYXRpb25JZCxcbiAgICAgIGxpZmVjeWNsZVNvY2tldFBhdGg6IHNvY2tldFBhdGgsXG4gICAgICBzb3VyY2VOYW1lOiBcIkJhY2tncm91bmRKb2JzTGlmZWN5Y2xlQ2xpZW50XCJcbiAgICB9KVxuICAgIHRoaXMuZ2VuZXJhdGlvbklkID0gZ2VuZXJhdGlvbkNvbmZpZy5nZW5lcmF0aW9uSWRcbiAgICB0aGlzLnNvY2tldFBhdGggPSBnZW5lcmF0aW9uQ29uZmlnLmxpZmVjeWNsZVNvY2tldFBhdGhcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocmVxdWVzdFRpbWVvdXRNcykgfHwgcmVxdWVzdFRpbWVvdXRNcyA8IDEgfHwgcmVxdWVzdFRpbWVvdXRNcyA+IE1BWF9MSUZFQ1lDTEVfUkVRVUVTVF9USU1FT1VUX01TKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGByZXF1ZXN0VGltZW91dE1zIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kICR7TUFYX0xJRkVDWUNMRV9SRVFVRVNUX1RJTUVPVVRfTVN9YClcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0VGltZW91dE1zID0gcmVxdWVzdFRpbWVvdXRNc1xuICAgIGlmICghdGhpcy5nZW5lcmF0aW9uSWQpIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgY2xpZW50IHJlcXVpcmVzIGdlbmVyYXRpb25JZFwiKVxuICAgIGlmICghdGhpcy5zb2NrZXRQYXRoKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGNsaWVudCByZXF1aXJlcyBsaWZlY3ljbGVTb2NrZXRQYXRoXCIpXG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGVzIHRoZSBnZW5lcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkxpZmVjeWNsZVN0YXRlPn0gLSBSZXN1bHRpbmcgc3RhdGUuXG4gICAqL1xuICBhc3luYyBhY3RpdmF0ZSgpIHsgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoXCJhY3RpdmF0ZVwiKSB9XG5cbiAgLyoqXG4gICAqIFJldGlyZXMgdGhlIGdlbmVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uTGlmZWN5Y2xlU3RhdGU+fSAtIFJlc3VsdGluZyBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIHJldGlyZSgpIHsgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoXCJyZXRpcmVcIikgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBleGFjdGx5IG9uZSBsaWZlY3ljbGUgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtcImFjdGl2YXRlXCIgfCBcInJldGlyZVwifSBhY3Rpb24gLSBMaWZlY3ljbGUgYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkxpZmVjeWNsZVN0YXRlPn0gLSBSZXN1bHRpbmcgc3RhdGUuXG4gICAqL1xuICBhc3luYyBfcmVxdWVzdChhY3Rpb24pIHtcbiAgICByZXR1cm4gYXdhaXQgdGltZW91dCh7XG4gICAgICBlcnJvck1lc3NhZ2U6IGBCYWNrZ3JvdW5kIGpvYnMgJHthY3Rpb259IHJlcXVlc3QgZm9yICR7dGhpcy5nZW5lcmF0aW9uSWR9IHRpbWVkIG91dCBhZnRlciAke3RoaXMucmVxdWVzdFRpbWVvdXRNc31tcyBhdCAke3RoaXMuc29ja2V0UGF0aH1gLFxuICAgICAgdGltZW91dDogdGhpcy5yZXF1ZXN0VGltZW91dE1zXG4gICAgfSwgYXN5bmMgKHtjb250cm9sfSkgPT4gYXdhaXQgdGhpcy5fcnVuUmVxdWVzdCh7YWN0aW9uLCBzaWduYWw6IGNvbnRyb2wuc2lnbmFsfSkpXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgdGhlIGxpZmVjeWNsZSByZXF1ZXN0IHVuZGVyIGl0cyBjYWxsZXItb3duZWQgZGVhZGxpbmUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVxdWVzdCBkZXRhaWxzLlxuICAgKiBAcGFyYW0ge1wiYWN0aXZhdGVcIiB8IFwicmV0aXJlXCJ9IGFyZ3MuYWN0aW9uIC0gTGlmZWN5Y2xlIGFjdGlvbi5cbiAgICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gYXJncy5zaWduYWwgLSBSZXF1ZXN0IGRlYWRsaW5lIHNpZ25hbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgX3J1blJlcXVlc3Qoe2FjdGlvbiwgc2lnbmFsfSkge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJhbmRvbVVVSUQoKVxuICAgIGNvbnN0IHNvY2tldCA9IG5ldC5jcmVhdGVDb25uZWN0aW9uKHRoaXMuc29ja2V0UGF0aClcbiAgICBjb25zdCBqc29uU29ja2V0ID0gbmV3IEpzb25Tb2NrZXQoc29ja2V0KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICAvKipcbiAgICAgICAqIFNldHRsZXMgdGhlIHJlcXVlc3Qgb25jZS5cbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGVhcmRvd24gb3B0aW9ucy5cbiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGVzdHJveV0gLSBEZXN0cm95IGluc3RlYWQgb2YgY2xvc2luZy5cbiAgICAgICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBTZXR0bGVtZW50IGNhbGxiYWNrLlxuICAgICAgICovXG4gICAgICBjb25zdCBmaW5pc2ggPSAoe2Rlc3Ryb3kgPSBmYWxzZX0sIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuXG4gICAgICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpXG4gICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihcImNvbm5lY3RcIiwgb25Db25uZWN0KVxuICAgICAgICBqc29uU29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgICAgIGlmIChkZXN0cm95KSBqc29uU29ja2V0LmRlc3Ryb3koKVxuICAgICAgICBlbHNlIGpzb25Tb2NrZXQuY2xvc2UoKVxuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiBmaW5pc2goe2Rlc3Ryb3k6IHRydWV9LCAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gc2lnbmFsLnJlYXNvbiA6IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgcmVxdWVzdCBhYm9ydGVkXCIpKSlcbiAgICAgIGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAganNvblNvY2tldC5zZW5kKHtcbiAgICAgICAgICB0eXBlOiBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGVcIixcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgZ2VuZXJhdGlvbklkOiB0aGlzLmdlbmVyYXRpb25JZCxcbiAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KVxuICAgICAganNvblNvY2tldC5vbihcImVycm9yXCIsIChlcnJvcikgPT4gZmluaXNoKHt9LCAoKSA9PiByZWplY3QoZXJyb3IpKSlcbiAgICAgIGpzb25Tb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiBmaW5pc2goe2Rlc3Ryb3k6IHRydWV9LCAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBzb2NrZXQgY2xvc2VkIGJlZm9yZSBhY2tub3dsZWRnZW1lbnRcIikpKSlcbiAgICAgIGpzb25Tb2NrZXQub24oXCJtZXNzYWdlXCIsIChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlPy5yZXF1ZXN0SWQgIT09IHJlcXVlc3RJZCB8fCBtZXNzYWdlLmFjdGlvbiAhPT0gYWN0aW9uKSB7XG4gICAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSByZXNwb25zZSBkaWQgbm90IG1hdGNoIGl0cyByZXF1ZXN0XCIpKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGUtZXJyb3JcIikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UuZXJyb3I/Lm1lc3NhZ2UgfHwgXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHJlcXVlc3QgZmFpbGVkXCIpXG4gICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmVycm9yPy5uYW1lID09PSBcInN0cmluZ1wiKSBlcnJvci5uYW1lID0gbWVzc2FnZS5lcnJvci5uYW1lXG4gICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmVycm9yPy5zdGFjayA9PT0gXCJzdHJpbmdcIikgZXJyb3Iuc3RhY2sgPSBtZXNzYWdlLmVycm9yLnN0YWNrXG4gICAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZWplY3QoZXJyb3IpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFwiYmFja2dyb3VuZC1qb2JzLWxpZmVjeWNsZS1hY2tcIiB8fCBtZXNzYWdlLmdlbmVyYXRpb25JZCAhPT0gdGhpcy5nZW5lcmF0aW9uSWQpIHtcbiAgICAgICAgICBmaW5pc2goe30sICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIGJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgYWNrbm93bGVkZ2VtZW50XCIpKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBmaW5pc2goe30sICgpID0+IHJlc29sdmUobWVzc2FnZS5saWZlY3ljbGVTdGF0ZSkpXG4gICAgICB9KVxuICAgICAgc29ja2V0Lm9uY2UoXCJjb25uZWN0XCIsIG9uQ29ubmVjdClcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgb25BYm9ydCgpXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvbGlmZWN5Y2xlLWNsaWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFDMUIsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUE7QUFDeEMsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsTUFBTSxDQUFBO0FBRXRELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsT0FBTyxPQUFPLDZCQUE2QjtJQUNoRDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixHQUFHLDBCQUEwQixFQUFDO1FBQ2xHLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLHFDQUFxQyxDQUFDO1lBQzNFLFlBQVk7WUFDWixtQkFBbUIsRUFBRSxVQUFVO1lBQy9CLFVBQVUsRUFBRSwrQkFBK0I7U0FDNUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUE7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQTtRQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3ZILE1BQU0sSUFBSSxTQUFTLENBQUMscURBQXFELGdDQUFnQyxFQUFFLENBQUMsQ0FBQTtRQUM5RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdC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Q0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUE7b0JBQy9FLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7b0JBQy9CLE9BQU07Z0JBQ1IsQ0FBQztnQkFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssK0JBQStCLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ25HLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUN4RixPQUFNO2dCQUNSLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7WUFDbkQsQ0FBQyxDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUNqQyxJQUFJLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IG5ldCBmcm9tIFwibm9kZTpuZXRcIlxuaW1wb3J0IHRpbWVvdXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3RpbWVvdXQuanNcIlxuaW1wb3J0IEpzb25Tb2NrZXQgZnJvbSBcIi4vanNvbi1zb2NrZXQuanNcIlxuXG5jb25zdCBERUZBVUxUX1JFUVVFU1RfVElNRU9VVF9NUyA9IDEwMDAwXG5leHBvcnQgY29uc3QgTUFYX0xJRkVDWUNMRV9SRVFVRVNUX1RJTUVPVVRfTVMgPSAxMjAwMDBcblxuLyoqIE9uZS1yZXF1ZXN0IGFja25vd2xlZGdlZCBsaWZlY3ljbGUgY2xpZW50LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFja2dyb3VuZEpvYnNMaWZlY3ljbGVDbGllbnQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZmVjeWNsZSBjbGllbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQ2xpZW50IG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZ2VuZXJhdGlvbklkXSAtIEV4cGxpY2l0IGdlbmVyYXRpb24gaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zb2NrZXRQYXRoXSAtIEV4cGxpY2l0IGNvbnRyb2wgc29ja2V0IHBhdGguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5yZXF1ZXN0VGltZW91dE1zXSAtIFJlcXVlc3QgZGVhZGxpbmUgYmVsb3cgdGhlIHN1cGVydmlzb3IgaG9vayB0aW1lb3V0IChkZWZhdWx0OiAxMDAwMCkuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZ2VuZXJhdGlvbklkLCBzb2NrZXRQYXRoLCByZXF1ZXN0VGltZW91dE1zID0gREVGQVVMVF9SRVFVRVNUX1RJTUVPVVRfTVN9KSB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbkNvbmZpZyA9IGNvbmZpZ3VyYXRpb24ucmVzb2x2ZUJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkNvbmZpZyh7XG4gICAgICBnZW5lcmF0aW9uSWQsXG4gICAgICBsaWZlY3ljbGVTb2NrZXRQYXRoOiBzb2NrZXRQYXRoLFxuICAgICAgc291cmNlTmFtZTogXCJCYWNrZ3JvdW5kSm9ic0xpZmVjeWNsZUNsaWVudFwiXG4gICAgfSlcbiAgICB0aGlzLmdlbmVyYXRpb25JZCA9IGdlbmVyYXRpb25Db25maWcuZ2VuZXJhdGlvbklkXG4gICAgdGhpcy5zb2NrZXRQYXRoID0gZ2VuZXJhdGlvbkNvbmZpZy5saWZlY3ljbGVTb2NrZXRQYXRoXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHJlcXVlc3RUaW1lb3V0TXMpIHx8IHJlcXVlc3RUaW1lb3V0TXMgPCAxIHx8IHJlcXVlc3RUaW1lb3V0TXMgPiBNQVhfTElGRUNZQ0xFX1JFUVVFU1RfVElNRU9VVF9NUykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgcmVxdWVzdFRpbWVvdXRNcyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAke01BWF9MSUZFQ1lDTEVfUkVRVUVTVF9USU1FT1VUX01TfWApXG4gICAgfVxuICAgIHRoaXMucmVxdWVzdFRpbWVvdXRNcyA9IHJlcXVlc3RUaW1lb3V0TXNcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGlvbklkKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGNsaWVudCByZXF1aXJlcyBnZW5lcmF0aW9uSWRcIilcbiAgICBpZiAoIXRoaXMuc29ja2V0UGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBjbGllbnQgcmVxdWlyZXMgbGlmZWN5Y2xlU29ja2V0UGF0aFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgZ2VuZXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGUoKSB7IHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KFwiYWN0aXZhdGVcIikgfVxuXG4gIC8qKlxuICAgKiBSZXRpcmVzIHRoZSBnZW5lcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkxpZmVjeWNsZVN0YXRlPn0gLSBSZXN1bHRpbmcgc3RhdGUuXG4gICAqL1xuICBhc3luYyByZXRpcmUoKSB7IHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KFwicmV0aXJlXCIpIH1cblxuICAvKipcbiAgICogU2VuZHMgZXhhY3RseSBvbmUgbGlmZWN5Y2xlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7XCJhY3RpdmF0ZVwiIHwgXCJyZXRpcmVcIn0gYWN0aW9uIC0gTGlmZWN5Y2xlIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgX3JlcXVlc3QoYWN0aW9uKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRpbWVvdXQoe1xuICAgICAgZXJyb3JNZXNzYWdlOiBgQmFja2dyb3VuZCBqb2JzICR7YWN0aW9ufSByZXF1ZXN0IGZvciAke3RoaXMuZ2VuZXJhdGlvbklkfSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aGlzLnJlcXVlc3RUaW1lb3V0TXN9bXMgYXQgJHt0aGlzLnNvY2tldFBhdGh9YCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMucmVxdWVzdFRpbWVvdXRNc1xuICAgIH0sIGFzeW5jICh7Y29udHJvbH0pID0+IGF3YWl0IHRoaXMuX3J1blJlcXVlc3Qoe2FjdGlvbiwgc2lnbmFsOiBjb250cm9sLnNpZ25hbH0pKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHRoZSBsaWZlY3ljbGUgcmVxdWVzdCB1bmRlciBpdHMgY2FsbGVyLW93bmVkIGRlYWRsaW5lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFJlcXVlc3QgZGV0YWlscy5cbiAgICogQHBhcmFtIHtcImFjdGl2YXRlXCIgfCBcInJldGlyZVwifSBhcmdzLmFjdGlvbiAtIExpZmVjeWNsZSBhY3Rpb24uXG4gICAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IGFyZ3Muc2lnbmFsIC0gUmVxdWVzdCBkZWFkbGluZSBzaWduYWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uTGlmZWN5Y2xlU3RhdGU+fSAtIFJlc3VsdGluZyBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIF9ydW5SZXF1ZXN0KHthY3Rpb24sIHNpZ25hbH0pIHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSByYW5kb21VVUlEKClcbiAgICBjb25zdCBzb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbih0aGlzLnNvY2tldFBhdGgpXG4gICAgY29uc3QganNvblNvY2tldCA9IG5ldyBKc29uU29ja2V0KHNvY2tldClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgICAgLyoqXG4gICAgICAgKiBTZXR0bGVzIHRoZSByZXF1ZXN0IG9uY2UuXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRlYXJkb3duIG9wdGlvbnMuXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRlc3Ryb3ldIC0gRGVzdHJveSBpbnN0ZWFkIG9mIGNsb3NpbmcuXG4gICAgICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrIC0gU2V0dGxlbWVudCBjYWxsYmFjay5cbiAgICAgICAqL1xuICAgICAgY29uc3QgZmluaXNoID0gKHtkZXN0cm95ID0gZmFsc2V9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoZmluaXNoZWQpIHJldHVyblxuICAgICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KVxuICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJjb25uZWN0XCIsIG9uQ29ubmVjdClcbiAgICAgICAganNvblNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgICAgICBpZiAoZGVzdHJveSkganNvblNvY2tldC5kZXN0cm95KClcbiAgICAgICAgZWxzZSBqc29uU29ja2V0LmNsb3NlKClcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gZmluaXNoKHtkZXN0cm95OiB0cnVlfSwgKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHNpZ25hbC5yZWFzb24gOiBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHJlcXVlc3QgYWJvcnRlZFwiKSkpXG4gICAgICBjb25zdCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIGpzb25Tb2NrZXQuc2VuZCh7XG4gICAgICAgICAgdHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlXCIsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGdlbmVyYXRpb25JZDogdGhpcy5nZW5lcmF0aW9uSWQsXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydClcbiAgICAgIGpzb25Tb2NrZXQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KGVycm9yKSkpXG4gICAgICBqc29uU29ja2V0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gZmluaXNoKHtkZXN0cm95OiB0cnVlfSwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IGNsb3NlZCBiZWZvcmUgYWNrbm93bGVkZ2VtZW50XCIpKSkpXG4gICAgICBqc29uU29ja2V0Lm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZT8ucmVxdWVzdElkICE9PSByZXF1ZXN0SWQgfHwgbWVzc2FnZS5hY3Rpb24gIT09IGFjdGlvbikge1xuICAgICAgICAgIGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgcmVzcG9uc2UgZGlkIG5vdCBtYXRjaCBpdHMgcmVxdWVzdFwiKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlLWVycm9yXCIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlLmVycm9yPy5tZXNzYWdlIHx8IFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSByZXF1ZXN0IGZhaWxlZFwiKVxuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lcnJvcj8ubmFtZSA9PT0gXCJzdHJpbmdcIikgZXJyb3IubmFtZSA9IG1lc3NhZ2UuZXJyb3IubmFtZVxuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lcnJvcj8uc3RhY2sgPT09IFwic3RyaW5nXCIpIGVycm9yLnN0YWNrID0gbWVzc2FnZS5lcnJvci5zdGFja1xuICAgICAgICAgIGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KGVycm9yKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9PSBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGUtYWNrXCIgfHwgbWVzc2FnZS5nZW5lcmF0aW9uSWQgIT09IHRoaXMuZ2VuZXJhdGlvbklkKSB7XG4gICAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBiYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGFja25vd2xlZGdlbWVudFwiKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZXNvbHZlKG1lc3NhZ2UubGlmZWN5Y2xlU3RhdGUpKVxuICAgICAgfSlcbiAgICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIG9uQWJvcnQoKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
|
@@ -240,7 +240,7 @@ export default class BackgroundJobsLifecycleControlServer {
|
|
|
240
240
|
if (action === "activate")
|
|
241
241
|
await this.main.activate();
|
|
242
242
|
else
|
|
243
|
-
|
|
243
|
+
void this.main.retire();
|
|
244
244
|
this._writeResponse(socket, {
|
|
245
245
|
type: "background-jobs-lifecycle-ack",
|
|
246
246
|
action,
|
|
@@ -304,4 +304,4 @@ export default class BackgroundJobsLifecycleControlServer {
|
|
|
304
304
|
errorEvents.emit("all-error", { ...payload, errorType: "framework-error" });
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWNvbnRyb2wtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9saWZlY3ljbGUtY29udHJvbC1zZXJ2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDeEMsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUUvRCxNQUFNLGtCQUFrQixHQUFHLDRFQUE0RSxDQUFBO0FBRXZHLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFvQztJQUN2RDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3RELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQTtRQUN2QixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQTtRQUNwQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBSztR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LFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUE7WUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ2QsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscUJBQXFCLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQztRQUM5QyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLG1DQUFtQyxFQUFDO1lBQ3pHLEtBQUs7U0FDTixDQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2RCxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzVDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUMsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IG5ldCBmcm9tIFwibm9kZTpuZXRcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgSnNvblNvY2tldCBmcm9tIFwiLi9qc29uLXNvY2tldC5qc1wiXG5pbXBvcnQgeyB2YWxpZGF0ZUdlbmVyYXRpb25JZCB9IGZyb20gXCIuL2dlbmVyYXRpb24taWRlbnRpdHkuanNcIlxuXG5jb25zdCBSRVFVRVNUX0lEX1BBVFRFUk4gPSAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLThdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pXG5cbi8qKiBQYWNrYWdlLW93bmVkIGFja25vd2xlZGdlZCBsaWZlY3ljbGUgY29udHJvbCBzZXJ2ZXIuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrZ3JvdW5kSm9ic0xpZmVjeWNsZUNvbnRyb2xTZXJ2ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZmVjeWNsZSBjb250cm9sIHNlcnZlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTZXJ2ZXIgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmdlbmVyYXRpb25JZCAtIEV4YWN0IGdlbmVyYXRpb24gaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9tYWluLmpzXCIpLmRlZmF1bHR9IGFyZ3MubWFpbiAtIE93bmVkIGpvYnMgbWFpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muc29ja2V0UGF0aCAtIFJlbGVhc2UtbG9jYWwgVW5peCBzb2NrZXQgcGF0aC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBnZW5lcmF0aW9uSWQsIG1haW4sIHNvY2tldFBhdGh9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZ2VuZXJhdGlvbklkID0gdmFsaWRhdGVHZW5lcmF0aW9uSWQoZ2VuZXJhdGlvbklkKVxuICAgIHRoaXMubWFpbiA9IG1haW5cbiAgICB0aGlzLnNvY2tldFBhdGggPSBzb2NrZXRQYXRoXG4gICAgLyoqIEB0eXBlIHtuZXQuU2VydmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuc2VydmVyID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHt7ZGV2OiBudW1iZXIsIGlubzogbnVtYmVyfSB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLm93bmVkU29ja2V0SWRlbnRpdHkgPSB1bmRlZmluZWRcbiAgICAvKiogQHR5cGUge1NldDxuZXQuU29ja2V0Pn0gKi9cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IFNldCgpXG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBzZWN1cmUgbG9jYWwgbGlzdGVuZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHNlY3VyZSBsaXN0ZW4uXG4gICAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBhd2FpdCB0aGlzLl92YWxpZGF0ZVBhcmVudERpcmVjdG9yeSgpXG4gICAgYXdhaXQgdGhpcy5fcmVtb3ZlU3RhbGVPd25lZFNvY2tldCgpXG4gICAgY29uc3Qgc2VydmVyID0gbmV0LmNyZWF0ZVNlcnZlcigoc29ja2V0KSA9PiB0aGlzLl9oYW5kbGVDb25uZWN0aW9uKHNvY2tldCkpXG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXJcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KVxuICAgICAgICBzZXJ2ZXIubGlzdGVuKHRoaXMuc29ja2V0UGF0aCwgKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKVxuICAgICAgfSlcbiAgICAgIGF3YWl0IGZzLmNobW9kKHRoaXMuc29ja2V0UGF0aCwgMG82MDApXG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgICAgdGhpcy5vd25lZFNvY2tldElkZW50aXR5ID0ge2Rldjogc3RhdC5kZXYsIGlubzogc3RhdC5pbm99XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoKVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvd25lZCBsaXN0ZW5lci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gQ2xvc2VzIGNvbm5lY3Rpb25zLCBsaXN0ZW5lciwgYW5kIG9ubHkgaXRzIG93bmVkIHBhdGguXG4gICAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IHNvY2tldCBvZiB0aGlzLmNvbm5lY3Rpb25zKSBzb2NrZXQuZGVzdHJveSgpXG4gICAgdGhpcy5jb25uZWN0aW9ucy5jbGVhcigpXG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLnNlcnZlclxuICAgIHRoaXMuc2VydmVyID0gdW5kZWZpbmVkXG4gICAgY29uc3QgcHJvdGVjdGVkUmVwbGFjZW1lbnQgPSBhd2FpdCB0aGlzLl9wcm90ZWN0UmVwbGFjZW1lbnREdXJpbmdTZXJ2ZXJDbG9zZSgpXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZXJ2ZXI/Lmxpc3RlbmluZykgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNlcnZlci5jbG9zZSgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZXN0b3JlUHJvdGVjdGVkUmVwbGFjZW1lbnQocHJvdGVjdGVkUmVwbGFjZW1lbnQpXG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX3VubGlua093bmVkU29ja2V0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIHJlcGxhY2VtZW50IGlub2RlIGFzaWRlIGJlY2F1c2UgTm9kZSB1bmxpbmtzIGl0cyBvcmlnaW5hbCBVbml4XG4gICAqIHNvY2tldCBwYXRobmFtZSBkdXJpbmcgYHNlcnZlci5jbG9zZSgpYCB3aXRob3V0IGNoZWNraW5nIHRoZSBpbm9kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPn0gLSBQcm90ZWN0ZWQgc2libGluZyBwYXRoLlxuICAgKi9cbiAgYXN5bmMgX3Byb3RlY3RSZXBsYWNlbWVudER1cmluZ1NlcnZlckNsb3NlKCkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gdGhpcy5vd25lZFNvY2tldElkZW50aXR5XG4gICAgaWYgKCFpZGVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHN0YXRcbiAgICB0cnkge1xuICAgICAgc3RhdCA9IGF3YWl0IGZzLmxzdGF0KHRoaXMuc29ja2V0UGF0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJjb2RlXCIgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gXCJFTk9FTlRcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgaWYgKHN0YXQuZGV2ID09PSBpZGVudGl0eS5kZXYgJiYgc3RhdC5pbm8gPT09IGlkZW50aXR5LmlubykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgcHJvdGVjdGVkUGF0aCA9IGAke3RoaXMuc29ja2V0UGF0aH0udmVsb2Npb3VzLXByb3RlY3RlZC0ke3JhbmRvbVVVSUQoKX1gXG4gICAgYXdhaXQgZnMucmVuYW1lKHRoaXMuc29ja2V0UGF0aCwgcHJvdGVjdGVkUGF0aClcblxuICAgIHJldHVybiBwcm90ZWN0ZWRQYXRoXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgYW4gaW5vZGUgcHJvdGVjdGVkIGFjcm9zcyBOb2RlJ3MgYXV0b21hdGljIFVuaXgtc29ja2V0IHVubGluay5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHByb3RlY3RlZFBhdGggLSBQcm90ZWN0ZWQgc2libGluZyBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZXN0b3JhdGlvbi5cbiAgICovXG4gIGFzeW5jIF9yZXN0b3JlUHJvdGVjdGVkUmVwbGFjZW1lbnQocHJvdGVjdGVkUGF0aCkge1xuICAgIGlmICghcHJvdGVjdGVkUGF0aCkgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgIGF3YWl0IGZzLnJlbmFtZShwcm90ZWN0ZWRQYXRoLCB0aGlzLnNvY2tldFBhdGgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYExpZmVjeWNsZSBzb2NrZXQgcmVwbGFjZW1lbnQgcHJlc2VydmVkIGF0ICR7cHJvdGVjdGVkUGF0aH0gYmVjYXVzZSBpdHMgb3JpZ2luYWwgcGF0aCB3YXMgb2NjdXBpZWQgZHVyaW5nIGNsb3NlYClcbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFyZW50IGlzIGEgcHJvY2Vzcy1vd25lZCByZWFsIGRpcmVjdG9yeSBpbnNpZGUgdGhlIHJlbGVhc2UuICovXG4gIGFzeW5jIF92YWxpZGF0ZVBhcmVudERpcmVjdG9yeSgpIHtcbiAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZSh0aGlzLnNvY2tldFBhdGgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBzb2NrZXQgcGF0aCBtdXN0IGJlIGFic29sdXRlXCIpXG5cbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5kaXJuYW1lKHRoaXMuc29ja2V0UGF0aClcbiAgICBjb25zdCBwYXJlbnRTdGF0ID0gYXdhaXQgZnMubHN0YXQocGFyZW50UGF0aClcbiAgICBpZiAoIXBhcmVudFN0YXQuaXNEaXJlY3RvcnkoKSB8fCBwYXJlbnRTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IHBhcmVudCBtdXN0IGJlIGEgcmVhbCBkaXJlY3RvcnlcIilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzLmdldHVpZCA9PT0gXCJmdW5jdGlvblwiICYmIHBhcmVudFN0YXQudWlkICE9PSBwcm9jZXNzLmdldHVpZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHNvY2tldCBwYXJlbnQgbXVzdCBiZSBvd25lZCBieSB0aGUgcHJvY2VzcyB1c2VyXCIpXG4gICAgfVxuXG4gICAgY29uc3QgW3JlbGVhc2VQYXRoLCByZWFsUGFyZW50UGF0aF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmcy5yZWFscGF0aCh0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlyZWN0b3J5KCkpLFxuICAgICAgZnMucmVhbHBhdGgocGFyZW50UGF0aClcbiAgICBdKVxuICAgIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShyZWxlYXNlUGF0aCwgcmVhbFBhcmVudFBhdGgpXG4gICAgaWYgKHJlbGF0aXZlLnN0YXJ0c1dpdGgoXCIuLlwiKSB8fCBwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHNvY2tldCBwYXJlbnQgbXVzdCBiZSBpbnNpZGUgdGhlIHJlbGVhc2UgZGlyZWN0b3J5XCIpXG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbW92ZXMgb25seSBhIHNhbWUtb3duZXIsIHVuY2hhbmdlZCwgc3RhbGUgc29ja2V0IGlub2RlLiAqL1xuICBhc3luYyBfcmVtb3ZlU3RhbGVPd25lZFNvY2tldCgpIHtcbiAgICBsZXQgc3RhdFxuICAgIHRyeSB7XG4gICAgICBzdGF0ID0gYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkgdGhyb3cgbmV3IEVycm9yKFwiUmVmdXNpbmcgbGlmZWN5Y2xlIHNvY2tldCBzeW1saW5rIGNvbGxpc2lvblwiKVxuICAgIGlmICghc3RhdC5pc1NvY2tldCgpKSB0aHJvdyBuZXcgRXJyb3IoXCJSZWZ1c2luZyBsaWZlY3ljbGUgc29ja2V0IG5vbi1zb2NrZXQgY29sbGlzaW9uXCIpXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzLmdldHVpZCA9PT0gXCJmdW5jdGlvblwiICYmIHN0YXQudWlkICE9PSBwcm9jZXNzLmdldHVpZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWZ1c2luZyBsaWZlY3ljbGUgc29ja2V0IG93bmVkIGJ5IGFub3RoZXIgdXNlclwiKVxuICAgIH1cbiAgICBpZiAoYXdhaXQgdGhpcy5fc29ja2V0QWNjZXB0c0Nvbm5lY3Rpb25zKCkpIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IGlzIGFscmVhZHkgYWN0aXZlXCIpXG5cbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgIGlmICghY3VycmVudC5pc1NvY2tldCgpIHx8IGN1cnJlbnQuZGV2ICE9PSBzdGF0LmRldiB8fCBjdXJyZW50LmlubyAhPT0gc3RhdC5pbm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxpZmVjeWNsZSBzb2NrZXQgY29sbGlzaW9uIGNoYW5nZWQgZHVyaW5nIHN0YWxlIGNsZWFudXBcIilcbiAgICB9XG4gICAgYXdhaXQgZnMudW5saW5rKHRoaXMuc29ja2V0UGF0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9iZXMgYSBzb2NrZXQgY29sbGlzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBleGlzdGluZyBzb2NrZXQgYWNjZXB0cyBhIGNvbm5lY3Rpb24uXG4gICAqL1xuICBhc3luYyBfc29ja2V0QWNjZXB0c0Nvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbih0aGlzLnNvY2tldFBhdGgpXG4gICAgICBzb2NrZXQub25jZShcImNvbm5lY3RcIiwgKCkgPT4ge1xuICAgICAgICBzb2NrZXQuZW5kKClcbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgfSlcbiAgICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChcImNvZGVcIiBpbiBlcnJvciAmJiAoZXJyb3IuY29kZSA9PT0gXCJFQ09OTlJFRlVTRURcIiB8fCBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSkge1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogVW5saW5rcyB0aGUgcGF0aCBvbmx5IHdoaWxlIGl0IGlzIHN0aWxsIHRoZSBpbm9kZSBjcmVhdGVkIGJ5IHRoaXMgc2VydmVyLiAqL1xuICBhc3luYyBfdW5saW5rT3duZWRTb2NrZXQoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSB0aGlzLm93bmVkU29ja2V0SWRlbnRpdHlcbiAgICB0aGlzLm93bmVkU29ja2V0SWRlbnRpdHkgPSB1bmRlZmluZWRcbiAgICBpZiAoIWlkZW50aXR5KSByZXR1cm5cblxuICAgIGxldCBzdGF0XG4gICAgdHJ5IHtcbiAgICAgIHN0YXQgPSBhd2FpdCBmcy5sc3RhdCh0aGlzLnNvY2tldFBhdGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCIpIHJldHVyblxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgaWYgKCFzdGF0LmlzU29ja2V0KCkgfHwgc3RhdC5kZXYgIT09IGlkZW50aXR5LmRldiB8fCBzdGF0LmlubyAhPT0gaWRlbnRpdHkuaW5vKSByZXR1cm5cbiAgICBhd2FpdCBmcy51bmxpbmsodGhpcy5zb2NrZXRQYXRoKVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBsb2NhbCBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge25ldC5Tb2NrZXR9IHNvY2tldCAtIEFjY2VwdGVkIGxvY2FsIGNvbm5lY3Rpb24uXG4gICAqL1xuICBfaGFuZGxlQ29ubmVjdGlvbihzb2NrZXQpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmFkZChzb2NrZXQpXG4gICAgc29ja2V0Lm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmNvbm5lY3Rpb25zLmRlbGV0ZShzb2NrZXQpKVxuICAgIGNvbnN0IGpzb25Tb2NrZXQgPSBuZXcgSnNvblNvY2tldChzb2NrZXQpXG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZVxuXG4gICAganNvblNvY2tldC5vbihcIm1lc3NhZ2VcIiwgKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgIHNvY2tldC5kZXN0cm95KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVkID0gdHJ1ZVxuICAgICAgdm9pZCB0aGlzLl9oYW5kbGVSZXF1ZXN0KHttZXNzYWdlLCBzb2NrZXR9KVxuICAgIH0pXG4gICAganNvblNvY2tldC5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5fZW1pdExpZmVjeWNsZUZhaWx1cmUoe2FjdGlvbjogXCJpbnZhbGlkXCIsIGVycm9yLCByZXF1ZXN0SWQ6IFwiaW52YWxpZFwifSlcbiAgICAgIHNvY2tldC5kZXN0cm95KClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZXhhY3RseSBvbmUgcmVxdWVzdCBhbmQgaG9sZHMgcmV0aXJlbWVudCBvcGVuIHRocm91Z2ggcmVzcG9uc2UgZmx1c2guXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVxdWVzdCBjb250ZXh0LlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBhcmdzLm1lc3NhZ2UgLSBQYXJzZWQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtuZXQuU29ja2V0fSBhcmdzLnNvY2tldCAtIENvbnRyb2wgc29ja2V0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgcmVzcG9uc2UgaXMgcXVldWVkLlxuICAgKi9cbiAgYXN5bmMgX2hhbmRsZVJlcXVlc3Qoe21lc3NhZ2UsIHNvY2tldH0pIHtcbiAgICBjb25zdCBhY3Rpb24gPSBtZXNzYWdlPy5hY3Rpb25cbiAgICBjb25zdCByZXF1ZXN0SWQgPSBtZXNzYWdlPy5yZXF1ZXN0SWRcbiAgICB0aGlzLm1haW4uYWNxdWlyZUxpZmVjeWNsZVJlcXVlc3RMZWFzZSgpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fdmFsaWRhdGVSZXF1ZXN0KG1lc3NhZ2UpXG4gICAgICBpZiAoYWN0aW9uID09PSBcImFjdGl2YXRlXCIpIGF3YWl0IHRoaXMubWFpbi5hY3RpdmF0ZSgpXG4gICAgICBlbHNlIGF3YWl0IHRoaXMubWFpbi5yZXRpcmUoKVxuXG4gICAgICB0aGlzLl93cml0ZVJlc3BvbnNlKHNvY2tldCwge1xuICAgICAgICB0eXBlOiBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGUtYWNrXCIsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgZ2VuZXJhdGlvbklkOiB0aGlzLmdlbmVyYXRpb25JZCxcbiAgICAgICAgbGlmZWN5Y2xlU3RhdGU6IHRoaXMubWFpbi5nZXRMaWZlY3ljbGVTdGF0ZSgpLFxuICAgICAgICByZXF1ZXN0SWRcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKVxuICAgICAgdGhpcy5fZW1pdExpZmVjeWNsZUZhaWx1cmUoe2FjdGlvbjogdHlwZW9mIGFjdGlvbiA9PT0gXCJzdHJpbmdcIiA/IGFjdGlvbiA6IFwiaW52YWxpZFwiLCBlcnJvcjogbm9ybWFsaXplZEVycm9yLCByZXF1ZXN0SWQ6IHR5cGVvZiByZXF1ZXN0SWQgPT09IFwic3RyaW5nXCIgPyByZXF1ZXN0SWQgOiBcImludmFsaWRcIn0pXG4gICAgICB0aGlzLl93cml0ZVJlc3BvbnNlKHNvY2tldCwge1xuICAgICAgICB0eXBlOiBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGUtZXJyb3JcIixcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBnZW5lcmF0aW9uSWQ6IHR5cGVvZiBtZXNzYWdlPy5nZW5lcmF0aW9uSWQgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlLmdlbmVyYXRpb25JZCA6IFwiaW52YWxpZFwiLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGVycm9yOiB7bmFtZTogbm9ybWFsaXplZEVycm9yLm5hbWUsIG1lc3NhZ2U6IG5vcm1hbGl6ZWRFcnJvci5tZXNzYWdlLCBzdGFjazogbm9ybWFsaXplZEVycm9yLnN0YWNrfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIG9uZSBsaWZlY3ljbGUgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbWVzc2FnZSAtIFJlcXVlc3QuXG4gICAqL1xuICBfdmFsaWRhdGVSZXF1ZXN0KG1lc3NhZ2UpIHtcbiAgICBpZiAobWVzc2FnZT8udHlwZSAhPT0gXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlXCIpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSByZXF1ZXN0IHR5cGVcIilcbiAgICBpZiAobWVzc2FnZS5hY3Rpb24gIT09IFwiYWN0aXZhdGVcIiAmJiBtZXNzYWdlLmFjdGlvbiAhPT0gXCJyZXRpcmVcIikgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGFjdGlvblwiKVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRpb25JZCAhPT0gdGhpcy5nZW5lcmF0aW9uSWQpIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgZ2VuZXJhdGlvbiBtaXNtYXRjaFwiKVxuICAgIGlmICh0eXBlb2YgbWVzc2FnZS5yZXF1ZXN0SWQgIT09IFwic3RyaW5nXCIgfHwgIVJFUVVFU1RfSURfUEFUVEVSTi50ZXN0KG1lc3NhZ2UucmVxdWVzdElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHJlcXVlc3RJZFwiKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgb25lIGxpZmVjeWNsZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtuZXQuU29ja2V0fSBzb2NrZXQgLSBSZXNwb25zZSBzb2NrZXQuXG4gICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IHJlc3BvbnNlIC0gUmVzcG9uc2UuXG4gICAqL1xuICBfd3JpdGVSZXNwb25zZShzb2NrZXQsIHJlc3BvbnNlKSB7XG4gICAgc29ja2V0LndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1cXG5gLCAoKSA9PiB7XG4gICAgICB0aGlzLm1haW4ucmVsZWFzZUxpZmVjeWNsZVJlcXVlc3RMZWFzZSgpXG4gICAgICBzb2NrZXQuZW5kKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgbGlmZWN5Y2xlIGZhaWx1cmUgd2hlcmUgaWdub3JlZCBob29rIHN0ZGlvIGNhbm5vdCBoaWRlIGl0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEZhaWx1cmUgY29udGV4dC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYWN0aW9uIC0gUmVxdWVzdGVkIGFjdGlvbi5cbiAgICogQHBhcmFtIHtFcnJvcn0gYXJncy5lcnJvciAtIE9yaWdpbmFsIGVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5yZXF1ZXN0SWQgLSBSZXF1ZXN0IGlkLlxuICAgKi9cbiAgX2VtaXRMaWZlY3ljbGVGYWlsdXJlKHthY3Rpb24sIGVycm9yLCByZXF1ZXN0SWR9KSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGNvbnRleHQ6IHthY3Rpb24sIGdlbmVyYXRpb25JZDogdGhpcy5nZW5lcmF0aW9uSWQsIHJlcXVlc3RJZCwgc3RhZ2U6IFwiYmFja2dyb3VuZC1qb2JzLWxpZmVjeWNsZS1jb250cm9sXCJ9LFxuICAgICAgZXJyb3JcbiAgICB9XG4gICAgY29uc3QgZXJyb3JFdmVudHMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RXJyb3JFdmVudHMoKVxuICAgIGVycm9yRXZlbnRzLmVtaXQoXCJmcmFtZXdvcmstZXJyb3JcIiwgcGF5bG9hZClcbiAgICBlcnJvckV2ZW50cy5lbWl0KFwiYWxsLWVycm9yXCIsIHsuLi5wYXlsb2FkLCBlcnJvclR5cGU6IFwiZnJhbWV3b3JrLWVycm9yXCJ9KVxuICB9XG59XG4iXX0=
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWNvbnRyb2wtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9saWZlY3ljbGUtY29udHJvbC1zZXJ2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDeEMsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUUvRCxNQUFNLGtCQUFrQixHQUFHLDRFQUE0RSxDQUFBO0FBRXZHLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFvQztJQUN2RDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3RELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQTtRQUN2QixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQTtRQUNwQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBSztR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LFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUE7WUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ2QsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscUJBQXFCLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQztRQUM5QyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLG1DQUFtQyxFQUFDO1lBQ3pHLEtBQUs7U0FDTixDQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2RCxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzVDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUMsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IG5ldCBmcm9tIFwibm9kZTpuZXRcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgSnNvblNvY2tldCBmcm9tIFwiLi9qc29uLXNvY2tldC5qc1wiXG5pbXBvcnQgeyB2YWxpZGF0ZUdlbmVyYXRpb25JZCB9IGZyb20gXCIuL2dlbmVyYXRpb24taWRlbnRpdHkuanNcIlxuXG5jb25zdCBSRVFVRVNUX0lEX1BBVFRFUk4gPSAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLThdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pXG5cbi8qKiBQYWNrYWdlLW93bmVkIGFja25vd2xlZGdlZCBsaWZlY3ljbGUgY29udHJvbCBzZXJ2ZXIuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrZ3JvdW5kSm9ic0xpZmVjeWNsZUNvbnRyb2xTZXJ2ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZmVjeWNsZSBjb250cm9sIHNlcnZlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTZXJ2ZXIgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmdlbmVyYXRpb25JZCAtIEV4YWN0IGdlbmVyYXRpb24gaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9tYWluLmpzXCIpLmRlZmF1bHR9IGFyZ3MubWFpbiAtIE93bmVkIGpvYnMgbWFpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muc29ja2V0UGF0aCAtIFJlbGVhc2UtbG9jYWwgVW5peCBzb2NrZXQgcGF0aC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBnZW5lcmF0aW9uSWQsIG1haW4sIHNvY2tldFBhdGh9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZ2VuZXJhdGlvbklkID0gdmFsaWRhdGVHZW5lcmF0aW9uSWQoZ2VuZXJhdGlvbklkKVxuICAgIHRoaXMubWFpbiA9IG1haW5cbiAgICB0aGlzLnNvY2tldFBhdGggPSBzb2NrZXRQYXRoXG4gICAgLyoqIEB0eXBlIHtuZXQuU2VydmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuc2VydmVyID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHt7ZGV2OiBudW1iZXIsIGlubzogbnVtYmVyfSB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLm93bmVkU29ja2V0SWRlbnRpdHkgPSB1bmRlZmluZWRcbiAgICAvKiogQHR5cGUge1NldDxuZXQuU29ja2V0Pn0gKi9cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IFNldCgpXG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBzZWN1cmUgbG9jYWwgbGlzdGVuZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHNlY3VyZSBsaXN0ZW4uXG4gICAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBhd2FpdCB0aGlzLl92YWxpZGF0ZVBhcmVudERpcmVjdG9yeSgpXG4gICAgYXdhaXQgdGhpcy5fcmVtb3ZlU3RhbGVPd25lZFNvY2tldCgpXG4gICAgY29uc3Qgc2VydmVyID0gbmV0LmNyZWF0ZVNlcnZlcigoc29ja2V0KSA9PiB0aGlzLl9oYW5kbGVDb25uZWN0aW9uKHNvY2tldCkpXG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXJcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KVxuICAgICAgICBzZXJ2ZXIubGlzdGVuKHRoaXMuc29ja2V0UGF0aCwgKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKVxuICAgICAgfSlcbiAgICAgIGF3YWl0IGZzLmNobW9kKHRoaXMuc29ja2V0UGF0aCwgMG82MDApXG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgICAgdGhpcy5vd25lZFNvY2tldElkZW50aXR5ID0ge2Rldjogc3RhdC5kZXYsIGlubzogc3RhdC5pbm99XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoKVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvd25lZCBsaXN0ZW5lci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gQ2xvc2VzIGNvbm5lY3Rpb25zLCBsaXN0ZW5lciwgYW5kIG9ubHkgaXRzIG93bmVkIHBhdGguXG4gICAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IHNvY2tldCBvZiB0aGlzLmNvbm5lY3Rpb25zKSBzb2NrZXQuZGVzdHJveSgpXG4gICAgdGhpcy5jb25uZWN0aW9ucy5jbGVhcigpXG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLnNlcnZlclxuICAgIHRoaXMuc2VydmVyID0gdW5kZWZpbmVkXG4gICAgY29uc3QgcHJvdGVjdGVkUmVwbGFjZW1lbnQgPSBhd2FpdCB0aGlzLl9wcm90ZWN0UmVwbGFjZW1lbnREdXJpbmdTZXJ2ZXJDbG9zZSgpXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZXJ2ZXI/Lmxpc3RlbmluZykgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNlcnZlci5jbG9zZSgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZXN0b3JlUHJvdGVjdGVkUmVwbGFjZW1lbnQocHJvdGVjdGVkUmVwbGFjZW1lbnQpXG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX3VubGlua093bmVkU29ja2V0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIHJlcGxhY2VtZW50IGlub2RlIGFzaWRlIGJlY2F1c2UgTm9kZSB1bmxpbmtzIGl0cyBvcmlnaW5hbCBVbml4XG4gICAqIHNvY2tldCBwYXRobmFtZSBkdXJpbmcgYHNlcnZlci5jbG9zZSgpYCB3aXRob3V0IGNoZWNraW5nIHRoZSBpbm9kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPn0gLSBQcm90ZWN0ZWQgc2libGluZyBwYXRoLlxuICAgKi9cbiAgYXN5bmMgX3Byb3RlY3RSZXBsYWNlbWVudER1cmluZ1NlcnZlckNsb3NlKCkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gdGhpcy5vd25lZFNvY2tldElkZW50aXR5XG4gICAgaWYgKCFpZGVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHN0YXRcbiAgICB0cnkge1xuICAgICAgc3RhdCA9IGF3YWl0IGZzLmxzdGF0KHRoaXMuc29ja2V0UGF0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJjb2RlXCIgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gXCJFTk9FTlRcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgaWYgKHN0YXQuZGV2ID09PSBpZGVudGl0eS5kZXYgJiYgc3RhdC5pbm8gPT09IGlkZW50aXR5LmlubykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgcHJvdGVjdGVkUGF0aCA9IGAke3RoaXMuc29ja2V0UGF0aH0udmVsb2Npb3VzLXByb3RlY3RlZC0ke3JhbmRvbVVVSUQoKX1gXG4gICAgYXdhaXQgZnMucmVuYW1lKHRoaXMuc29ja2V0UGF0aCwgcHJvdGVjdGVkUGF0aClcblxuICAgIHJldHVybiBwcm90ZWN0ZWRQYXRoXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgYW4gaW5vZGUgcHJvdGVjdGVkIGFjcm9zcyBOb2RlJ3MgYXV0b21hdGljIFVuaXgtc29ja2V0IHVubGluay5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHByb3RlY3RlZFBhdGggLSBQcm90ZWN0ZWQgc2libGluZyBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZXN0b3JhdGlvbi5cbiAgICovXG4gIGFzeW5jIF9yZXN0b3JlUHJvdGVjdGVkUmVwbGFjZW1lbnQocHJvdGVjdGVkUGF0aCkge1xuICAgIGlmICghcHJvdGVjdGVkUGF0aCkgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgIGF3YWl0IGZzLnJlbmFtZShwcm90ZWN0ZWRQYXRoLCB0aGlzLnNvY2tldFBhdGgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYExpZmVjeWNsZSBzb2NrZXQgcmVwbGFjZW1lbnQgcHJlc2VydmVkIGF0ICR7cHJvdGVjdGVkUGF0aH0gYmVjYXVzZSBpdHMgb3JpZ2luYWwgcGF0aCB3YXMgb2NjdXBpZWQgZHVyaW5nIGNsb3NlYClcbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFyZW50IGlzIGEgcHJvY2Vzcy1vd25lZCByZWFsIGRpcmVjdG9yeSBpbnNpZGUgdGhlIHJlbGVhc2UuICovXG4gIGFzeW5jIF92YWxpZGF0ZVBhcmVudERpcmVjdG9yeSgpIHtcbiAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZSh0aGlzLnNvY2tldFBhdGgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBzb2NrZXQgcGF0aCBtdXN0IGJlIGFic29sdXRlXCIpXG5cbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5kaXJuYW1lKHRoaXMuc29ja2V0UGF0aClcbiAgICBjb25zdCBwYXJlbnRTdGF0ID0gYXdhaXQgZnMubHN0YXQocGFyZW50UGF0aClcbiAgICBpZiAoIXBhcmVudFN0YXQuaXNEaXJlY3RvcnkoKSB8fCBwYXJlbnRTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IHBhcmVudCBtdXN0IGJlIGEgcmVhbCBkaXJlY3RvcnlcIilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzLmdldHVpZCA9PT0gXCJmdW5jdGlvblwiICYmIHBhcmVudFN0YXQudWlkICE9PSBwcm9jZXNzLmdldHVpZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHNvY2tldCBwYXJlbnQgbXVzdCBiZSBvd25lZCBieSB0aGUgcHJvY2VzcyB1c2VyXCIpXG4gICAgfVxuXG4gICAgY29uc3QgW3JlbGVhc2VQYXRoLCByZWFsUGFyZW50UGF0aF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmcy5yZWFscGF0aCh0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlyZWN0b3J5KCkpLFxuICAgICAgZnMucmVhbHBhdGgocGFyZW50UGF0aClcbiAgICBdKVxuICAgIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShyZWxlYXNlUGF0aCwgcmVhbFBhcmVudFBhdGgpXG4gICAgaWYgKHJlbGF0aXZlLnN0YXJ0c1dpdGgoXCIuLlwiKSB8fCBwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHNvY2tldCBwYXJlbnQgbXVzdCBiZSBpbnNpZGUgdGhlIHJlbGVhc2UgZGlyZWN0b3J5XCIpXG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbW92ZXMgb25seSBhIHNhbWUtb3duZXIsIHVuY2hhbmdlZCwgc3RhbGUgc29ja2V0IGlub2RlLiAqL1xuICBhc3luYyBfcmVtb3ZlU3RhbGVPd25lZFNvY2tldCgpIHtcbiAgICBsZXQgc3RhdFxuICAgIHRyeSB7XG4gICAgICBzdGF0ID0gYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkgdGhyb3cgbmV3IEVycm9yKFwiUmVmdXNpbmcgbGlmZWN5Y2xlIHNvY2tldCBzeW1saW5rIGNvbGxpc2lvblwiKVxuICAgIGlmICghc3RhdC5pc1NvY2tldCgpKSB0aHJvdyBuZXcgRXJyb3IoXCJSZWZ1c2luZyBsaWZlY3ljbGUgc29ja2V0IG5vbi1zb2NrZXQgY29sbGlzaW9uXCIpXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzLmdldHVpZCA9PT0gXCJmdW5jdGlvblwiICYmIHN0YXQudWlkICE9PSBwcm9jZXNzLmdldHVpZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWZ1c2luZyBsaWZlY3ljbGUgc29ja2V0IG93bmVkIGJ5IGFub3RoZXIgdXNlclwiKVxuICAgIH1cbiAgICBpZiAoYXdhaXQgdGhpcy5fc29ja2V0QWNjZXB0c0Nvbm5lY3Rpb25zKCkpIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IGlzIGFscmVhZHkgYWN0aXZlXCIpXG5cbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZnMubHN0YXQodGhpcy5zb2NrZXRQYXRoKVxuICAgIGlmICghY3VycmVudC5pc1NvY2tldCgpIHx8IGN1cnJlbnQuZGV2ICE9PSBzdGF0LmRldiB8fCBjdXJyZW50LmlubyAhPT0gc3RhdC5pbm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxpZmVjeWNsZSBzb2NrZXQgY29sbGlzaW9uIGNoYW5nZWQgZHVyaW5nIHN0YWxlIGNsZWFudXBcIilcbiAgICB9XG4gICAgYXdhaXQgZnMudW5saW5rKHRoaXMuc29ja2V0UGF0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9iZXMgYSBzb2NrZXQgY29sbGlzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBleGlzdGluZyBzb2NrZXQgYWNjZXB0cyBhIGNvbm5lY3Rpb24uXG4gICAqL1xuICBhc3luYyBfc29ja2V0QWNjZXB0c0Nvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbih0aGlzLnNvY2tldFBhdGgpXG4gICAgICBzb2NrZXQub25jZShcImNvbm5lY3RcIiwgKCkgPT4ge1xuICAgICAgICBzb2NrZXQuZW5kKClcbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgfSlcbiAgICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChcImNvZGVcIiBpbiBlcnJvciAmJiAoZXJyb3IuY29kZSA9PT0gXCJFQ09OTlJFRlVTRURcIiB8fCBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSkge1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogVW5saW5rcyB0aGUgcGF0aCBvbmx5IHdoaWxlIGl0IGlzIHN0aWxsIHRoZSBpbm9kZSBjcmVhdGVkIGJ5IHRoaXMgc2VydmVyLiAqL1xuICBhc3luYyBfdW5saW5rT3duZWRTb2NrZXQoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSB0aGlzLm93bmVkU29ja2V0SWRlbnRpdHlcbiAgICB0aGlzLm93bmVkU29ja2V0SWRlbnRpdHkgPSB1bmRlZmluZWRcbiAgICBpZiAoIWlkZW50aXR5KSByZXR1cm5cblxuICAgIGxldCBzdGF0XG4gICAgdHJ5IHtcbiAgICAgIHN0YXQgPSBhd2FpdCBmcy5sc3RhdCh0aGlzLnNvY2tldFBhdGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCIpIHJldHVyblxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgaWYgKCFzdGF0LmlzU29ja2V0KCkgfHwgc3RhdC5kZXYgIT09IGlkZW50aXR5LmRldiB8fCBzdGF0LmlubyAhPT0gaWRlbnRpdHkuaW5vKSByZXR1cm5cbiAgICBhd2FpdCBmcy51bmxpbmsodGhpcy5zb2NrZXRQYXRoKVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBsb2NhbCBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge25ldC5Tb2NrZXR9IHNvY2tldCAtIEFjY2VwdGVkIGxvY2FsIGNvbm5lY3Rpb24uXG4gICAqL1xuICBfaGFuZGxlQ29ubmVjdGlvbihzb2NrZXQpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmFkZChzb2NrZXQpXG4gICAgc29ja2V0Lm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmNvbm5lY3Rpb25zLmRlbGV0ZShzb2NrZXQpKVxuICAgIGNvbnN0IGpzb25Tb2NrZXQgPSBuZXcgSnNvblNvY2tldChzb2NrZXQpXG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZVxuXG4gICAganNvblNvY2tldC5vbihcIm1lc3NhZ2VcIiwgKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgIHNvY2tldC5kZXN0cm95KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVkID0gdHJ1ZVxuICAgICAgdm9pZCB0aGlzLl9oYW5kbGVSZXF1ZXN0KHttZXNzYWdlLCBzb2NrZXR9KVxuICAgIH0pXG4gICAganNvblNvY2tldC5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5fZW1pdExpZmVjeWNsZUZhaWx1cmUoe2FjdGlvbjogXCJpbnZhbGlkXCIsIGVycm9yLCByZXF1ZXN0SWQ6IFwiaW52YWxpZFwifSlcbiAgICAgIHNvY2tldC5kZXN0cm95KClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZXhhY3RseSBvbmUgcmVxdWVzdCBhbmQgaG9sZHMgcmV0aXJlbWVudCBvcGVuIHRocm91Z2ggcmVzcG9uc2UgZmx1c2guXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVxdWVzdCBjb250ZXh0LlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBhcmdzLm1lc3NhZ2UgLSBQYXJzZWQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtuZXQuU29ja2V0fSBhcmdzLnNvY2tldCAtIENvbnRyb2wgc29ja2V0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgcmVzcG9uc2UgaXMgcXVldWVkLlxuICAgKi9cbiAgYXN5bmMgX2hhbmRsZVJlcXVlc3Qoe21lc3NhZ2UsIHNvY2tldH0pIHtcbiAgICBjb25zdCBhY3Rpb24gPSBtZXNzYWdlPy5hY3Rpb25cbiAgICBjb25zdCByZXF1ZXN0SWQgPSBtZXNzYWdlPy5yZXF1ZXN0SWRcbiAgICB0aGlzLm1haW4uYWNxdWlyZUxpZmVjeWNsZVJlcXVlc3RMZWFzZSgpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fdmFsaWRhdGVSZXF1ZXN0KG1lc3NhZ2UpXG4gICAgICBpZiAoYWN0aW9uID09PSBcImFjdGl2YXRlXCIpIGF3YWl0IHRoaXMubWFpbi5hY3RpdmF0ZSgpXG4gICAgICBlbHNlIHZvaWQgdGhpcy5tYWluLnJldGlyZSgpXG5cbiAgICAgIHRoaXMuX3dyaXRlUmVzcG9uc2Uoc29ja2V0LCB7XG4gICAgICAgIHR5cGU6IFwiYmFja2dyb3VuZC1qb2JzLWxpZmVjeWNsZS1hY2tcIixcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBnZW5lcmF0aW9uSWQ6IHRoaXMuZ2VuZXJhdGlvbklkLFxuICAgICAgICBsaWZlY3ljbGVTdGF0ZTogdGhpcy5tYWluLmdldExpZmVjeWNsZVN0YXRlKCksXG4gICAgICAgIHJlcXVlc3RJZFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpXG4gICAgICB0aGlzLl9lbWl0TGlmZWN5Y2xlRmFpbHVyZSh7YWN0aW9uOiB0eXBlb2YgYWN0aW9uID09PSBcInN0cmluZ1wiID8gYWN0aW9uIDogXCJpbnZhbGlkXCIsIGVycm9yOiBub3JtYWxpemVkRXJyb3IsIHJlcXVlc3RJZDogdHlwZW9mIHJlcXVlc3RJZCA9PT0gXCJzdHJpbmdcIiA/IHJlcXVlc3RJZCA6IFwiaW52YWxpZFwifSlcbiAgICAgIHRoaXMuX3dyaXRlUmVzcG9uc2Uoc29ja2V0LCB7XG4gICAgICAgIHR5cGU6IFwiYmFja2dyb3VuZC1qb2JzLWxpZmVjeWNsZS1lcnJvclwiLFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGdlbmVyYXRpb25JZDogdHlwZW9mIG1lc3NhZ2U/LmdlbmVyYXRpb25JZCA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UuZ2VuZXJhdGlvbklkIDogXCJpbnZhbGlkXCIsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgZXJyb3I6IHtuYW1lOiBub3JtYWxpemVkRXJyb3IubmFtZSwgbWVzc2FnZTogbm9ybWFsaXplZEVycm9yLm1lc3NhZ2UsIHN0YWNrOiBub3JtYWxpemVkRXJyb3Iuc3RhY2t9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgb25lIGxpZmVjeWNsZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBtZXNzYWdlIC0gUmVxdWVzdC5cbiAgICovXG4gIF92YWxpZGF0ZVJlcXVlc3QobWVzc2FnZSkge1xuICAgIGlmIChtZXNzYWdlPy50eXBlICE9PSBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGVcIikgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHJlcXVlc3QgdHlwZVwiKVxuICAgIGlmIChtZXNzYWdlLmFjdGlvbiAhPT0gXCJhY3RpdmF0ZVwiICYmIG1lc3NhZ2UuYWN0aW9uICE9PSBcInJldGlyZVwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgYWN0aW9uXCIpXG4gICAgaWYgKG1lc3NhZ2UuZ2VuZXJhdGlvbklkICE9PSB0aGlzLmdlbmVyYXRpb25JZCkgdGhyb3cgbmV3IEVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBnZW5lcmF0aW9uIG1pc21hdGNoXCIpXG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlLnJlcXVlc3RJZCAhPT0gXCJzdHJpbmdcIiB8fCAhUkVRVUVTVF9JRF9QQVRURVJOLnRlc3QobWVzc2FnZS5yZXF1ZXN0SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgcmVxdWVzdElkXCIpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBvbmUgbGlmZWN5Y2xlIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge25ldC5Tb2NrZXR9IHNvY2tldCAtIFJlc3BvbnNlIHNvY2tldC5cbiAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gcmVzcG9uc2UgLSBSZXNwb25zZS5cbiAgICovXG4gIF93cml0ZVJlc3BvbnNlKHNvY2tldCwgcmVzcG9uc2UpIHtcbiAgICBzb2NrZXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfVxcbmAsICgpID0+IHtcbiAgICAgIHRoaXMubWFpbi5yZWxlYXNlTGlmZWN5Y2xlUmVxdWVzdExlYXNlKClcbiAgICAgIHNvY2tldC5lbmQoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBsaWZlY3ljbGUgZmFpbHVyZSB3aGVyZSBpZ25vcmVkIGhvb2sgc3RkaW8gY2Fubm90IGhpZGUgaXQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRmFpbHVyZSBjb250ZXh0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hY3Rpb24gLSBSZXF1ZXN0ZWQgYWN0aW9uLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBhcmdzLmVycm9yIC0gT3JpZ2luYWwgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnJlcXVlc3RJZCAtIFJlcXVlc3QgaWQuXG4gICAqL1xuICBfZW1pdExpZmVjeWNsZUZhaWx1cmUoe2FjdGlvbiwgZXJyb3IsIHJlcXVlc3RJZH0pIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY29udGV4dDoge2FjdGlvbiwgZ2VuZXJhdGlvbklkOiB0aGlzLmdlbmVyYXRpb25JZCwgcmVxdWVzdElkLCBzdGFnZTogXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlLWNvbnRyb2xcIn0sXG4gICAgICBlcnJvclxuICAgIH1cbiAgICBjb25zdCBlcnJvckV2ZW50cyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRFcnJvckV2ZW50cygpXG4gICAgZXJyb3JFdmVudHMuZW1pdChcImZyYW1ld29yay1lcnJvclwiLCBwYXlsb2FkKVxuICAgIGVycm9yRXZlbnRzLmVtaXQoXCJhbGwtZXJyb3JcIiwgey4uLnBheWxvYWQsIGVycm9yVHlwZTogXCJmcmFtZXdvcmstZXJyb3JcIn0pXG4gIH1cbn1cbiJdfQ==
|