@effect-app/infra 1.3.1 → 1.3.2
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/CHANGELOG.md +6 -0
- package/_cjs/services/QueueMaker/sbqueue.cjs +10 -3
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +12 -7
- package/package.json +2 -2
- package/src/services/QueueMaker/sbqueue.ts +12 -11
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
package/CHANGELOG.md
CHANGED
|
@@ -41,7 +41,7 @@ function makeServiceBusQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
|
41
41
|
const rcc = yield* $(_RequestContextContainer.RequestContextContainer);
|
|
42
42
|
// TODO: or do async?
|
|
43
43
|
// This will make sure that the host receives the error (MainFiberSet.join), who will then interrupt everything and commence a shutdown and restart of app
|
|
44
|
-
const deferred = yield* $(
|
|
44
|
+
// const deferred = yield* $(Deferred.make<never, ServiceBusError | Error>())
|
|
45
45
|
return {
|
|
46
46
|
drain: (handleEvent, sessionId) => _effectApp.Effect.gen(function* ($) {
|
|
47
47
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -80,9 +80,16 @@ function makeServiceBusQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
|
80
80
|
}
|
|
81
81
|
return yield* $((0, _ServiceBus.subscribe)({
|
|
82
82
|
processMessage: x => processMessage(x.body).pipe(_effectApp.Effect.uninterruptible),
|
|
83
|
-
processError: err =>
|
|
83
|
+
processError: err => (0, _errors.reportQueueError)(_effectApp.Cause.fail(err.error))
|
|
84
|
+
// Deferred.completeWith(
|
|
85
|
+
// deferred,
|
|
86
|
+
// reportFatalQueueError(Cause.fail(err.error))
|
|
87
|
+
// .pipe(Effect.andThen(Effect.fail(err.error)))
|
|
88
|
+
// )
|
|
84
89
|
}, sessionId).pipe(_effectApp.Effect.provideService(_ServiceBus.ServiceBusReceiverFactory, receiver)));
|
|
85
|
-
})
|
|
90
|
+
})
|
|
91
|
+
// .pipe(Effect.andThen(Deferred.await(deferred).pipe(Effect.orDie))),
|
|
92
|
+
.pipe(_effectApp.Effect.andThen(_effectApp.Effect.never)),
|
|
86
93
|
publish: (...messages) => _effectApp.Effect.gen(function* ($) {
|
|
87
94
|
const requestContext = yield* $(rcc.requestContext);
|
|
88
95
|
const span = yield* $(_effectApp.Effect.serviceOption(_effect.Tracer.ParentSpan));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbqueue.cjs","names":["_ServiceBus","require","_RequestContext","_effect","_effectApp","_ids","_schema","_utils","_setupRequest","_RequestContextContainer","_errors","_service","makeServiceBusQueue","queueName","queueDrainName","schema","drainSchema","wireSchema","S","Struct","body","meta","QueueMeta","drainW","parseDrain","flow","decodeUnknown","Effect","orDie","gen","$","s","Sender","receiver","ServiceBusReceiverFactory","silenceAndReportError","reportNonInterruptedFailure","name","reportError","reportNonInterruptedFailureCause","rcc","RequestContextContainer","
|
|
1
|
+
{"version":3,"file":"sbqueue.cjs","names":["_ServiceBus","require","_RequestContext","_effect","_effectApp","_ids","_schema","_utils","_setupRequest","_RequestContextContainer","_errors","_service","makeServiceBusQueue","queueName","queueDrainName","schema","drainSchema","wireSchema","S","Struct","body","meta","QueueMeta","drainW","parseDrain","flow","decodeUnknown","Effect","orDie","gen","$","s","Sender","receiver","ServiceBusReceiverFactory","silenceAndReportError","reportNonInterruptedFailure","name","reportError","reportNonInterruptedFailureCause","rcc","RequestContextContainer","drain","handleEvent","sessionId","processMessage","messageBody","sync","JSON","parse","pipe","flatMap","x","effect","logDebug","annotateLogs","pretty","zipRight","_","setupRequestContext","RequestContext","inherit","requestContext","id","RequestId","locale","NonEmptyString255","_tag","withSpan","kind","attributes","Object","entries","reduce","prev","key","value","length","substring","Array","isArray","undefined","keys","span","withParentSpan","Tracer","externalSpan","tapErrorCause","subscribe","uninterruptible","processError","err","reportQueueError","Cause","fail","error","provideService","andThen","never","publish","messages","serviceOption","ParentSpan","promise","abortSignal","sendMessages","map","m","stringify","encodeSync","Option","getOrUndefined","messageId","contentType","makeServiceBusLayers","url","Layer","merge","Live","LiveSender","provide","LiveServiceBusClient"],"sources":["../../../src/services/QueueMaker/sbqueue.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,yBAAyB,EAE1B,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,yBAAyB,EAE1B,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAS,MAAM,EAAQ,KAAK,EAAU,CAAC,EAAE,MAAM,YAAY,CAAA;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAIjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAIvE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EACJ,SAAS,EAET,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;yCAsBvB,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,cAC/C,MAAM;;+GA8HzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wGAI1F"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { LiveSender, LiveServiceBusClient, Sender, ServiceBusReceiverFactory, subscribe } from "@effect-app/infra-adapters/ServiceBus";
|
|
2
2
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
3
3
|
import { Tracer } from "effect";
|
|
4
|
-
import { Cause,
|
|
4
|
+
import { Cause, Effect, flow, Layer, Option, S } from "effect-app";
|
|
5
5
|
import { RequestId } from "effect-app/ids";
|
|
6
6
|
import { NonEmptyString255 } from "effect-app/schema";
|
|
7
7
|
import { pretty } from "effect-app/utils";
|
|
8
8
|
import { setupRequestContext } from "../../api/setupRequest.js";
|
|
9
9
|
import { RequestContextContainer } from "../RequestContextContainer.js";
|
|
10
|
-
import {
|
|
10
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause, reportQueueError } from "./errors.js";
|
|
11
11
|
import { QueueMeta } from "./service.js";
|
|
12
12
|
/**
|
|
13
13
|
* @tsplus static QueueMaker.Ops makeServiceBus
|
|
@@ -27,7 +27,7 @@ export function makeServiceBusQueue(queueName, queueDrainName, schema, drainSche
|
|
|
27
27
|
const rcc = yield* $(RequestContextContainer);
|
|
28
28
|
// TODO: or do async?
|
|
29
29
|
// This will make sure that the host receives the error (MainFiberSet.join), who will then interrupt everything and commence a shutdown and restart of app
|
|
30
|
-
const deferred = yield* $(Deferred.make())
|
|
30
|
+
// const deferred = yield* $(Deferred.make<never, ServiceBusError | Error>())
|
|
31
31
|
return {
|
|
32
32
|
drain: (handleEvent, sessionId) => Effect
|
|
33
33
|
.gen(function* ($) {
|
|
@@ -84,12 +84,17 @@ export function makeServiceBusQueue(queueName, queueDrainName, schema, drainSche
|
|
|
84
84
|
}
|
|
85
85
|
return yield* $(subscribe({
|
|
86
86
|
processMessage: (x) => processMessage(x.body).pipe(Effect.uninterruptible),
|
|
87
|
-
processError: (err) =>
|
|
88
|
-
|
|
87
|
+
processError: (err) => reportQueueError(Cause.fail(err.error))
|
|
88
|
+
// Deferred.completeWith(
|
|
89
|
+
// deferred,
|
|
90
|
+
// reportFatalQueueError(Cause.fail(err.error))
|
|
91
|
+
// .pipe(Effect.andThen(Effect.fail(err.error)))
|
|
92
|
+
// )
|
|
89
93
|
}, sessionId)
|
|
90
94
|
.pipe(Effect.provideService(ServiceBusReceiverFactory, receiver)));
|
|
91
95
|
})
|
|
92
|
-
.pipe(Effect.andThen(Deferred.await(deferred).pipe(Effect.orDie))),
|
|
96
|
+
// .pipe(Effect.andThen(Deferred.await(deferred).pipe(Effect.orDie))),
|
|
97
|
+
.pipe(Effect.andThen(Effect.never)),
|
|
93
98
|
publish: (...messages) => Effect
|
|
94
99
|
.gen(function* ($) {
|
|
95
100
|
const requestContext = yield* $(rcc.requestContext);
|
|
@@ -118,4 +123,4 @@ export function makeServiceBusQueue(queueName, queueDrainName, schema, drainSche
|
|
|
118
123
|
export function makeServiceBusLayers(url, queueName, queueDrainName) {
|
|
119
124
|
return Layer.merge(ServiceBusReceiverFactory.Live(queueDrainName), LiveSender(queueName)).pipe(Layer.provide(LiveServiceBusClient(url)));
|
|
120
125
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9RdWV1ZU1ha2VyL3NicXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLHlCQUF5QixFQUN6QixTQUFTLEVBQ1YsTUFBTSx1Q0FBdUMsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZ0NBQWdDLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBTWpDLFNBQWlCLEVBQ2pCLGNBQXNCLEVBQ3RCLE1BQTJCLEVBQzNCLFdBQTBDO0lBRTFDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDLENB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"proper-lockfile": "^4.1.2",
|
|
19
19
|
"pure-rand": "6.1.0",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
|
-
"@effect-app/infra-adapters": "1.1.0",
|
|
22
21
|
"@effect-app/core": "1.1.0",
|
|
22
|
+
"@effect-app/infra-adapters": "1.1.0",
|
|
23
23
|
"effect-app": "1.2.0",
|
|
24
24
|
"@effect-app/schema": "1.1.0"
|
|
25
25
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {} from "@azure/service-bus"
|
|
2
2
|
import {
|
|
3
3
|
LiveSender,
|
|
4
4
|
LiveServiceBusClient,
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
} from "@effect-app/infra-adapters/ServiceBus"
|
|
9
9
|
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
10
10
|
import { Tracer } from "effect"
|
|
11
|
-
import { Cause,
|
|
11
|
+
import { Cause, Effect, flow, Layer, Option, S } from "effect-app"
|
|
12
12
|
import { RequestId } from "effect-app/ids"
|
|
13
13
|
import type { StringId } from "effect-app/schema"
|
|
14
14
|
import { NonEmptyString255 } from "effect-app/schema"
|
|
15
15
|
import { pretty } from "effect-app/utils"
|
|
16
16
|
import { setupRequestContext } from "../../api/setupRequest.js"
|
|
17
17
|
import { RequestContextContainer } from "../RequestContextContainer.js"
|
|
18
|
-
import {
|
|
18
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause, reportQueueError } from "./errors.js"
|
|
19
19
|
import { type QueueBase, QueueMeta } from "./service.js"
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -48,7 +48,7 @@ export function makeServiceBusQueue<
|
|
|
48
48
|
|
|
49
49
|
// TODO: or do async?
|
|
50
50
|
// This will make sure that the host receives the error (MainFiberSet.join), who will then interrupt everything and commence a shutdown and restart of app
|
|
51
|
-
const deferred = yield* $(Deferred.make<never, ServiceBusError | Error>())
|
|
51
|
+
// const deferred = yield* $(Deferred.make<never, ServiceBusError | Error>())
|
|
52
52
|
|
|
53
53
|
return {
|
|
54
54
|
drain: <DrainE, DrainR>(
|
|
@@ -135,17 +135,18 @@ export function makeServiceBusQueue<
|
|
|
135
135
|
return yield* $(
|
|
136
136
|
subscribe({
|
|
137
137
|
processMessage: (x) => processMessage(x.body).pipe(Effect.uninterruptible),
|
|
138
|
-
processError: (err) =>
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
processError: (err) => reportQueueError(Cause.fail(err.error))
|
|
139
|
+
// Deferred.completeWith(
|
|
140
|
+
// deferred,
|
|
141
|
+
// reportFatalQueueError(Cause.fail(err.error))
|
|
142
|
+
// .pipe(Effect.andThen(Effect.fail(err.error)))
|
|
143
|
+
// )
|
|
144
144
|
}, sessionId)
|
|
145
145
|
.pipe(Effect.provideService(ServiceBusReceiverFactory, receiver))
|
|
146
146
|
)
|
|
147
147
|
})
|
|
148
|
-
.pipe(Effect.andThen(Deferred.await(deferred).pipe(Effect.orDie))),
|
|
148
|
+
// .pipe(Effect.andThen(Deferred.await(deferred).pipe(Effect.orDie))),
|
|
149
|
+
.pipe(Effect.andThen(Effect.never)),
|
|
149
150
|
|
|
150
151
|
publish: (...messages) =>
|
|
151
152
|
Effect
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// packages/infra/vitest.config.ts
|
|
2
|
-
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
-
|
|
4
|
-
// vite.config.base.ts
|
|
5
|
-
import path from "path";
|
|
6
|
-
import fs from "fs";
|
|
7
|
-
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
-
function makeConfig(dirName) {
|
|
9
|
-
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
-
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
-
const cfg = {
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
-
//plugins: [autoImport],
|
|
14
|
-
test: {
|
|
15
|
-
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
-
reporters: "verbose",
|
|
17
|
-
globals: true
|
|
18
|
-
},
|
|
19
|
-
resolve: {
|
|
20
|
-
alias: packages.reduce((acc, cur) => {
|
|
21
|
-
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
-
return acc;
|
|
23
|
-
}, {})
|
|
24
|
-
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
console.log(cfg);
|
|
28
|
-
return cfg;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// packages/infra/vitest.config.ts
|
|
32
|
-
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
|
|
33
|
-
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
-
export {
|
|
35
|
-
vitest_config_default as default
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogcGFja2FnZXMucmVkdWNlKChhY2MsIGN1cikgPT4geyAvLyB3b3JrYXJvdW5kIGZvciAvUHJlbHVkZSBpc3N1ZVxuICAgICAgYWNjW0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGN1ciArIFwiL3BhY2thZ2UuanNvblwiLCBcInV0Zi04XCIpKS5uYW1lXSA9IHBhdGgucmVzb2x2ZShjdXIsIGN1ci5lbmRzV2l0aChcImNvcmVcIikgPyBcImRpc3RcIiA6IFwic3JjXCIpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgeyB9KSAvLyBcIkBlZmZlY3QtYXBwL2NvcmUvUHJlbHVkZVwiOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2VzL2NvcmUvc3JjL1ByZWx1ZGUuY29kZS50c1wiKVxuICB9XG4gIH1cbiAgY29uc29sZS5sb2coY2ZnKVxuICByZXR1cm4gY2ZnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxvQkFBb0I7OztBQ0E3QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBRmYsSUFBTSxtQ0FBbUM7QUFnQjFCLFNBQVIsV0FBNEIsU0FBa0I7QUFDbkQsUUFBTSxTQUFTLEtBQUssUUFBUSxrQ0FBVyxVQUFVO0FBQ2pELFFBQU0sV0FBVyxHQUFHLFlBQVksTUFBTSxFQUFFLElBQUksT0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBRTtBQUM3RyxRQUFNLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHVixNQUFNO0FBQUEsTUFDSixTQUFVLENBQUMsa0RBQWtEO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ3JDLFlBQUksS0FBSyxNQUFNLEdBQUcsYUFBYSxNQUFNLGlCQUFpQixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxTQUFTLE1BQU0sSUFBSSxTQUFTLEtBQUs7QUFDL0gsZUFBTztBQUFBLE1BQ1QsR0FBRyxDQUFFLENBQUM7QUFBQTtBQUFBLElBQ1I7QUFBQSxFQUNBO0FBQ0EsVUFBUSxJQUFJLEdBQUc7QUFDZixTQUFPO0FBQ1Q7OztBRHBDQSxJQUFNQSxvQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxhQUFhLFdBQVdDLGlDQUFTLENBQUM7IiwKICAibmFtZXMiOiBbIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIl0KfQo=
|