@rudderstack/integrations-lib 0.2.4 → 0.2.6

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.
@@ -0,0 +1,2 @@
1
+ export declare function getDestType(ctx: any): any;
2
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,GAAG,KAAA,OAgB9B"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDestType = void 0;
4
+ function getDestType(ctx) {
5
+ // This is for routerTransform and batch endpoints
6
+ if (ctx.request.body?.destType) {
7
+ return ctx.request.body?.destType;
8
+ }
9
+ // This is for regulation endpoints
10
+ if (Array.isArray(ctx.request.body) && ctx.request.body[0]?.destType) {
11
+ return ctx.request.body[0]?.destType;
12
+ }
13
+ // This is for sourceTransform and processTransform endpoints
14
+ if (ctx.request.url.includes('destinations') || ctx.request.url.includes('sources')) {
15
+ return ctx.request.url.split('/')[3].split('?')[0];
16
+ }
17
+ return null;
18
+ }
19
+ exports.getDestType = getDestType;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLFdBQVcsQ0FBQyxHQUFHO0lBQzdCLGtEQUFrRDtJQUNsRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUM5QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztLQUNuQztJQUVELG1DQUFtQztJQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUU7UUFDcEUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7S0FDdEM7SUFFRCw2REFBNkQ7SUFDN0QsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ25GLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwRDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQWhCRCxrQ0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0RGVzdFR5cGUoY3R4KSB7XG4gIC8vIFRoaXMgaXMgZm9yIHJvdXRlclRyYW5zZm9ybSBhbmQgYmF0Y2ggZW5kcG9pbnRzXG4gIGlmIChjdHgucmVxdWVzdC5ib2R5Py5kZXN0VHlwZSkge1xuICAgIHJldHVybiBjdHgucmVxdWVzdC5ib2R5Py5kZXN0VHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaXMgZm9yIHJlZ3VsYXRpb24gZW5kcG9pbnRzXG4gIGlmIChBcnJheS5pc0FycmF5KGN0eC5yZXF1ZXN0LmJvZHkpICYmIGN0eC5yZXF1ZXN0LmJvZHlbMF0/LmRlc3RUeXBlKSB7XG4gICAgcmV0dXJuIGN0eC5yZXF1ZXN0LmJvZHlbMF0/LmRlc3RUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBpcyBmb3Igc291cmNlVHJhbnNmb3JtIGFuZCBwcm9jZXNzVHJhbnNmb3JtIGVuZHBvaW50c1xuICBpZiAoY3R4LnJlcXVlc3QudXJsLmluY2x1ZGVzKCdkZXN0aW5hdGlvbnMnKSB8fCBjdHgucmVxdWVzdC51cmwuaW5jbHVkZXMoJ3NvdXJjZXMnKSkge1xuICAgIHJldHVybiBjdHgucmVxdWVzdC51cmwuc3BsaXQoJy8nKVszXS5zcGxpdCgnPycpWzBdO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=request.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.test.d.ts","sourceRoot":"","sources":["../../src/utils/request.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const request_1 = require("./request");
4
+ describe('getDestType function', () => {
5
+ it('should extract destType for routerTransform endpoints', () => {
6
+ const ctx = {
7
+ request: {
8
+ body: {
9
+ destType: 'af',
10
+ },
11
+ url: '/routerTransform',
12
+ },
13
+ };
14
+ expect((0, request_1.getDestType)(ctx)).toBe('af');
15
+ });
16
+ it('should extract destType for sourceTransform', () => {
17
+ const ctx = {
18
+ request: {
19
+ body: {
20
+ foo: 'bar',
21
+ },
22
+ url: '/v0/sources/af',
23
+ },
24
+ };
25
+ expect((0, request_1.getDestType)(ctx)).toBe('af');
26
+ });
27
+ it('should extract destType for processTransformer without query params', () => {
28
+ const ctx = {
29
+ request: {
30
+ body: {
31
+ foo: 'bar',
32
+ },
33
+ url: '/v0/destinations/af',
34
+ },
35
+ };
36
+ expect((0, request_1.getDestType)(ctx)).toBe('af');
37
+ });
38
+ it('should extract destType for processTransformer with query params', () => {
39
+ const ctx = {
40
+ request: {
41
+ body: {
42
+ foo: 'bar',
43
+ },
44
+ url: '/v0/destinations/af?foo=bar',
45
+ },
46
+ };
47
+ expect((0, request_1.getDestType)(ctx)).toBe('af');
48
+ });
49
+ it('should extract destType for regulation endpoints', () => {
50
+ const ctx = {
51
+ request: {
52
+ body: [
53
+ {
54
+ destType: 'af',
55
+ userAttributes: { email: 'sample@example.com' },
56
+ },
57
+ ],
58
+ url: '/deleteUsers',
59
+ },
60
+ };
61
+ expect((0, request_1.getDestType)(ctx)).toBe('af');
62
+ });
63
+ it('should not extract destType for other endpoints', () => {
64
+ const ctx = {
65
+ request: {
66
+ url: '/features',
67
+ },
68
+ };
69
+ expect((0, request_1.getDestType)(ctx)).toBeNull();
70
+ });
71
+ });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JlcXVlc3QudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUF3QztBQUV4QyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFO29CQUNKLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2dCQUNELEdBQUcsRUFBRSxrQkFBa0I7YUFDeEI7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDckQsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFO29CQUNKLEdBQUcsRUFBRSxLQUFLO2lCQUNYO2dCQUNELEdBQUcsRUFBRSxnQkFBZ0I7YUFDdEI7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7UUFDN0UsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFO29CQUNKLEdBQUcsRUFBRSxLQUFLO2lCQUNYO2dCQUNELEdBQUcsRUFBRSxxQkFBcUI7YUFDM0I7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7UUFDMUUsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFO29CQUNKLEdBQUcsRUFBRSxLQUFLO2lCQUNYO2dCQUNELEdBQUcsRUFBRSw2QkFBNkI7YUFDbkM7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFO29CQUNKO3dCQUNFLFFBQVEsRUFBRSxJQUFJO3dCQUNkLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtxQkFDaEQ7aUJBQ0Y7Z0JBQ0QsR0FBRyxFQUFFLGNBQWM7YUFDcEI7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7UUFDekQsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLFdBQVc7YUFDakI7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREZXN0VHlwZSB9IGZyb20gJy4vcmVxdWVzdCc7XG5cbmRlc2NyaWJlKCdnZXREZXN0VHlwZSBmdW5jdGlvbicsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCBleHRyYWN0IGRlc3RUeXBlIGZvciByb3V0ZXJUcmFuc2Zvcm0gZW5kcG9pbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIGRlc3RUeXBlOiAnYWYnLFxuICAgICAgICB9LFxuICAgICAgICB1cmw6ICcvcm91dGVyVHJhbnNmb3JtJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBleHBlY3QoZ2V0RGVzdFR5cGUoY3R4KSkudG9CZSgnYWYnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHRyYWN0IGRlc3RUeXBlIGZvciBzb3VyY2VUcmFuc2Zvcm0nLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgZm9vOiAnYmFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgdXJsOiAnL3YwL3NvdXJjZXMvYWYnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGV4cGVjdChnZXREZXN0VHlwZShjdHgpKS50b0JlKCdhZicpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4dHJhY3QgZGVzdFR5cGUgZm9yIHByb2Nlc3NUcmFuc2Zvcm1lciB3aXRob3V0IHF1ZXJ5IHBhcmFtcycsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBmb286ICdiYXInLFxuICAgICAgICB9LFxuICAgICAgICB1cmw6ICcvdjAvZGVzdGluYXRpb25zL2FmJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBleHBlY3QoZ2V0RGVzdFR5cGUoY3R4KSkudG9CZSgnYWYnKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZXh0cmFjdCBkZXN0VHlwZSBmb3IgcHJvY2Vzc1RyYW5zZm9ybWVyIHdpdGggcXVlcnkgcGFyYW1zJywgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIGZvbzogJ2JhcicsXG4gICAgICAgIH0sXG4gICAgICAgIHVybDogJy92MC9kZXN0aW5hdGlvbnMvYWY/Zm9vPWJhcicsXG4gICAgICB9LFxuICAgIH07XG4gICAgZXhwZWN0KGdldERlc3RUeXBlKGN0eCkpLnRvQmUoJ2FmJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXh0cmFjdCBkZXN0VHlwZSBmb3IgcmVndWxhdGlvbiBlbmRwb2ludHMnLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBib2R5OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzdFR5cGU6ICdhZicsXG4gICAgICAgICAgICB1c2VyQXR0cmlidXRlczogeyBlbWFpbDogJ3NhbXBsZUBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB1cmw6ICcvZGVsZXRlVXNlcnMnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGV4cGVjdChnZXREZXN0VHlwZShjdHgpKS50b0JlKCdhZicpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBub3QgZXh0cmFjdCBkZXN0VHlwZSBmb3Igb3RoZXIgZW5kcG9pbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdXJsOiAnL2ZlYXR1cmVzJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBleHBlY3QoZ2V0RGVzdFR5cGUoY3R4KSkudG9CZU51bGwoKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -233,5 +233,85 @@ describe('SemanticUtil', () => {
233
233
  expect(result).toBeNull();
234
234
  });
235
235
  });
236
+ describe('getDestinationExternalIDInfoForRetl', () => {
237
+ test('should parse everything successfully', () => {
238
+ const msg = {
239
+ context: {
240
+ externalId: [
241
+ {
242
+ type: 'destination-user',
243
+ id: 1245,
244
+ identifierType: 'some',
245
+ },
246
+ ],
247
+ },
248
+ };
249
+ const actual = sem_1.SemanticUtil.getDestinationExternalIDInfoForRetl(msg, 'destination');
250
+ expect(actual.destinationExternalId).toEqual(1245);
251
+ expect(actual.objectType).toEqual('user');
252
+ expect(actual.identifierType).toEqual('some');
253
+ });
254
+ test('should parse everything but return all as null', () => {
255
+ const msg = {
256
+ context: {
257
+ externalId: [
258
+ {
259
+ type: 'destination-',
260
+ },
261
+ ],
262
+ },
263
+ };
264
+ const actual = sem_1.SemanticUtil.getDestinationExternalIDInfoForRetl(msg, 'destination');
265
+ expect(actual.destinationExternalId).toEqual(null);
266
+ expect(actual.objectType).toEqual('');
267
+ expect(actual.identifierType).toEqual(null);
268
+ });
269
+ });
270
+ describe('getDestinationExternalIDObjectForRetl', () => {
271
+ test('should parse everything successfully', () => {
272
+ const msg = {
273
+ context: {
274
+ externalId: [
275
+ {
276
+ type: 'destination-user',
277
+ id: 1245,
278
+ identifierType: 'some',
279
+ },
280
+ ],
281
+ },
282
+ };
283
+ const actual = sem_1.SemanticUtil.getDestinationExternalIDObjectForRetl(msg, 'destination');
284
+ expect(actual?.id).toEqual(1245);
285
+ // TODO: Is this expected ? Confirm with team
286
+ expect(actual?.type).toEqual('destination-user');
287
+ expect(actual?.identifierType).toEqual('some');
288
+ });
289
+ test('should be undefined when externalId does not have type', () => {
290
+ const msg = {
291
+ context: {
292
+ externalId: [
293
+ {
294
+ id: 1245,
295
+ identifierType: 'some',
296
+ },
297
+ ],
298
+ },
299
+ };
300
+ const actual = sem_1.SemanticUtil.getDestinationExternalIDObjectForRetl(msg, 'destination');
301
+ expect(actual).toEqual(undefined);
302
+ });
303
+ test('should be undefined when externalId is not present', () => {
304
+ const msg = {
305
+ context: {},
306
+ };
307
+ const actual = sem_1.SemanticUtil.getDestinationExternalIDObjectForRetl(msg, 'destination');
308
+ expect(actual).toEqual(undefined);
309
+ });
310
+ test('should be undefined when context is not present', () => {
311
+ const msg = {};
312
+ const actual = sem_1.SemanticUtil.getDestinationExternalIDObjectForRetl(msg, 'destination');
313
+ expect(actual).toEqual(undefined);
314
+ });
315
+ });
236
316
  });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VtLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUF3Qjs7QUFFeEIsK0JBQXFDO0FBRXJDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsK0ZBQStGO1FBQy9GLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsa0JBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkVBQTZFO1FBQzdFLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsTUFBTSxNQUFNLEdBQUcsa0JBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLEVBQUUsQ0FBQyxv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QUErRjtRQUMvRixFQUFFLENBQUMsbUdBQW1HLEVBQUUsR0FBRyxFQUFFO1lBQzNHLE1BQU0sT0FBTyxHQUFHO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsRUFBRSxFQUFFLFVBQVU7eUJBQ2Y7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLGtCQUFZLENBQUMsd0JBQXdCLENBQUMsT0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgQ29kaXVtQUlcblxuaW1wb3J0IHsgU2VtYW50aWNVdGlsIH0gZnJvbSAnLi9zZW0nO1xuXG5kZXNjcmliZSgnU2VtYW50aWNVdGlsJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0SW50ZWdyYXRpb25zT2JqJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgJ2dldEludGVncmF0aW9uc09iaicgcmV0dXJucyB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBmb3IgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGludGVncmF0aW9ucyBvYmplY3QgZm9yIGEgdmFsaWQgaW50ZWdyYXRpb24gbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIGZiX3BpeGVsOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIG51bGwgZm9yIGFuIGVtcHR5IGludGVncmF0aW9uIG5hbWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIGZvciBhbiBlbXB0eSBpbnRlZ3JhdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIG51bGwgZm9yIGFuIGludmFsaWQgaW50ZWdyYXRpb24gbmFtZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgZm9yIGFuIGludmFsaWQgaW50ZWdyYXRpb24gbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIGZiX3BpeGVsOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdpbnZhbGlkX2ludGVncmF0aW9uJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGhhcyBtdWx0aXBsZSBjYW5vbmljYWwgbmFtZXMgYnV0IG5vbmUgb2YgdGhlbSBleGlzdCBpbiB0aGUgbWVzc2FnZS5pbnRlZ3JhdGlvbnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGhhcyBtdWx0aXBsZSBjYW5vbmljYWwgbmFtZXMgYnV0IG5vbmUgb2YgdGhlbSBleGlzdCBpbiB0aGUgbWVzc2FnZS5pbnRlZ3JhdGlvbnMgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ludmFsaWRfaW50ZWdyYXRpb24nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldEludGVncmF0aW9uc09iaihtZXNzYWdlIGFzIGFueSwgaW50Z05hbWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgJ2dldEludGVncmF0aW9uc09iaicgcmV0dXJucyBudWxsIHdoZW4gdGhlIG1lc3NhZ2Ugb2JqZWN0IGhhcyBubyBpbnRlZ3JhdGlvbnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBtZXNzYWdlIG9iamVjdCBoYXMgbm8gaW50ZWdyYXRpb25zIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ZiX3BpeGVsJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIG5vbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBmb3IgdGhlIGludGVncmF0aW9uIG5hbWUgZXhpc3QgaW4gdGhlIGludGVncmF0aW9ucyBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gbm9uZSBvZiB0aGUgY2Fub25pY2FsIG5hbWVzIGZvciB0aGUgaW50ZWdyYXRpb24gbmFtZSBleGlzdCBpbiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIHNvbWVfaW50ZWdyYXRpb246IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ZiX3BpeGVsJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGludGVncmF0aW9uIG5hbWUgZXhpc3RzIGluIHRoZSBpbnRlZ3JhdGlvbnMgb2JqZWN0IGJ1dCBpdHMgdmFsdWUgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGV4aXN0cyBpbiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBidXQgaXRzIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbnM6IHtcbiAgICAgICAgICBmYl9waXhlbDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIHRoZSBpbnRlZ3JhdGlvbnMgb2JqZWN0IGZvciBhIHZhbGlkIGludGVncmF0aW9uIG5hbWUgd2hlbiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBmb3IgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lIHdoZW4gdGhlIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IDEyMyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDEyMyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXREZXN0aW5hdGlvbkV4dGVybmFsSUQnLCAoKSA9PiB7XG4gICAgLy8gUmV0dXJucyB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgd2hlbiBpdCBleGlzdHMgaW4gdGhlIG1lc3NhZ2UgY29udGV4dC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgd2hlbiBpdCBleGlzdHMgaW4gdGhlIG1lc3NhZ2UgY29udGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdrdXN0b21lcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMTIzNDU2NzgnKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBkZXN0aW5hdGlvbi1zcGVjaWZpYyBleHRlcm5hbCBJRCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWVzc2FnZSBjb250ZXh0LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1lc3NhZ2UgY29udGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdvdGhlcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBtZXNzYWdlIGNvbnRleHQgaXMgdW5kZWZpbmVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWVzc2FnZSBjb250ZXh0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBpcyBub3QgYW4gYXJyYXkuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBleHRlcm5hbElkIGFycmF5IGlzIG5vdCBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiAnMTIzNDU2NzgnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBpcyBhbiBlbXB0eSBhcnJheS5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGV4dGVybmFsSWQgYXJyYXkgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdrdXN0b21lcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBleHRlcm5hbElkIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBkb2VzIG5vdCBjb250YWluIGFuIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdub25FeGlzdGVudFR5cGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRChtZXNzYWdlIGFzIGFueSwgdHlwZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB0eXBlIHdoZW4gbXVsdGlwbGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHR5cGUgZXhpc3QgaW4gdGhlIGV4dGVybmFsSWQgYXJyYXkuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIHdoZW4gbXVsdGlwbGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHR5cGUgZXhpc3QgaW4gdGhlIGV4dGVybmFsSWQgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAna3VzdG9tZXJJZCcsXG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2t1c3RvbWVySWQnLFxuICAgICAgICAgICAgICBpZDogJzg3NjU0MzIxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlID0gJ2t1c3RvbWVySWQnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRChtZXNzYWdlIGFzIGFueSwgdHlwZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcxMjM0NTY3OCcpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgb2JqZWN0IGRvZXMgbm90IGhhdmUgYW4gaWQgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAna3VzdG9tZXJJZCcsXG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ290aGVySWQnLFxuICAgICAgICAgICAgICAvLyBpZCBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdvdGhlcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eS5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VtLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUF3Qjs7QUFFeEIsK0JBQXFDO0FBRXJDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsK0ZBQStGO1FBQy9GLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsa0JBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkVBQTZFO1FBQzdFLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsTUFBTSxNQUFNLEdBQUcsa0JBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLEVBQUUsQ0FBQyxv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YW50aWNVdGlsIH0gZnJvbSAnLi9zZW0nO1xuXG5kZXNjcmliZSgnU2VtYW50aWNVdGlsJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0SW50ZWdyYXRpb25zT2JqJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgJ2dldEludGVncmF0aW9uc09iaicgcmV0dXJucyB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBmb3IgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGludGVncmF0aW9ucyBvYmplY3QgZm9yIGEgdmFsaWQgaW50ZWdyYXRpb24gbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIGZiX3BpeGVsOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIG51bGwgZm9yIGFuIGVtcHR5IGludGVncmF0aW9uIG5hbWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIGZvciBhbiBlbXB0eSBpbnRlZ3JhdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIG51bGwgZm9yIGFuIGludmFsaWQgaW50ZWdyYXRpb24gbmFtZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgZm9yIGFuIGludmFsaWQgaW50ZWdyYXRpb24gbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIGZiX3BpeGVsOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdpbnZhbGlkX2ludGVncmF0aW9uJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGhhcyBtdWx0aXBsZSBjYW5vbmljYWwgbmFtZXMgYnV0IG5vbmUgb2YgdGhlbSBleGlzdCBpbiB0aGUgbWVzc2FnZS5pbnRlZ3JhdGlvbnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGhhcyBtdWx0aXBsZSBjYW5vbmljYWwgbmFtZXMgYnV0IG5vbmUgb2YgdGhlbSBleGlzdCBpbiB0aGUgbWVzc2FnZS5pbnRlZ3JhdGlvbnMgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ludmFsaWRfaW50ZWdyYXRpb24nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldEludGVncmF0aW9uc09iaihtZXNzYWdlIGFzIGFueSwgaW50Z05hbWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgJ2dldEludGVncmF0aW9uc09iaicgcmV0dXJucyBudWxsIHdoZW4gdGhlIG1lc3NhZ2Ugb2JqZWN0IGhhcyBubyBpbnRlZ3JhdGlvbnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBtZXNzYWdlIG9iamVjdCBoYXMgbm8gaW50ZWdyYXRpb25zIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ZiX3BpeGVsJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIG5vbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBmb3IgdGhlIGludGVncmF0aW9uIG5hbWUgZXhpc3QgaW4gdGhlIGludGVncmF0aW9ucyBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gbm9uZSBvZiB0aGUgY2Fub25pY2FsIG5hbWVzIGZvciB0aGUgaW50ZWdyYXRpb24gbmFtZSBleGlzdCBpbiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIHNvbWVfaW50ZWdyYXRpb246IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ZiX3BpeGVsJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGludGVncmF0aW9uIG5hbWUgZXhpc3RzIGluIHRoZSBpbnRlZ3JhdGlvbnMgb2JqZWN0IGJ1dCBpdHMgdmFsdWUgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGV4aXN0cyBpbiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBidXQgaXRzIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbnM6IHtcbiAgICAgICAgICBmYl9waXhlbDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIHRoZSBpbnRlZ3JhdGlvbnMgb2JqZWN0IGZvciBhIHZhbGlkIGludGVncmF0aW9uIG5hbWUgd2hlbiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBmb3IgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lIHdoZW4gdGhlIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IDEyMyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDEyMyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXREZXN0aW5hdGlvbkV4dGVybmFsSUQnLCAoKSA9PiB7XG4gICAgLy8gUmV0dXJucyB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgd2hlbiBpdCBleGlzdHMgaW4gdGhlIG1lc3NhZ2UgY29udGV4dC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgd2hlbiBpdCBleGlzdHMgaW4gdGhlIG1lc3NhZ2UgY29udGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdrdXN0b21lcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMTIzNDU2NzgnKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBkZXN0aW5hdGlvbi1zcGVjaWZpYyBleHRlcm5hbCBJRCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWVzc2FnZSBjb250ZXh0LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1lc3NhZ2UgY29udGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdvdGhlcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBtZXNzYWdlIGNvbnRleHQgaXMgdW5kZWZpbmVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWVzc2FnZSBjb250ZXh0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBpcyBub3QgYW4gYXJyYXkuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBleHRlcm5hbElkIGFycmF5IGlzIG5vdCBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiAnMTIzNDU2NzgnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBpcyBhbiBlbXB0eSBhcnJheS5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGV4dGVybmFsSWQgYXJyYXkgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdrdXN0b21lcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBleHRlcm5hbElkIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBkb2VzIG5vdCBjb250YWluIGFuIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdub25FeGlzdGVudFR5cGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRChtZXNzYWdlIGFzIGFueSwgdHlwZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB0eXBlIHdoZW4gbXVsdGlwbGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHR5cGUgZXhpc3QgaW4gdGhlIGV4dGVybmFsSWQgYXJyYXkuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIHdoZW4gbXVsdGlwbGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHR5cGUgZXhpc3QgaW4gdGhlIGV4dGVybmFsSWQgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAna3VzdG9tZXJJZCcsXG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2t1c3RvbWVySWQnLFxuICAgICAgICAgICAgICBpZDogJzg3NjU0MzIxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlID0gJ2t1c3RvbWVySWQnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRChtZXNzYWdlIGFzIGFueSwgdHlwZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcxMjM0NTY3OCcpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgb2JqZWN0IGRvZXMgbm90IGhhdmUgYW4gaWQgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAna3VzdG9tZXJJZCcsXG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ290aGVySWQnLFxuICAgICAgICAgICAgICAvLyBpZCBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdvdGhlcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eS5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXREZXN0aW5hdGlvbkV4dGVybmFsSURJbmZvRm9yUmV0bCcsICgpID0+IHtcbiAgICB0ZXN0KCdzaG91bGQgcGFyc2UgZXZlcnl0aGluZyBzdWNjZXNzZnVsbHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdkZXN0aW5hdGlvbi11c2VyJyxcbiAgICAgICAgICAgICAgaWQ6IDEyNDUsXG4gICAgICAgICAgICAgIGlkZW50aWZpZXJUeXBlOiAnc29tZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0dWFsID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJREluZm9Gb3JSZXRsKG1zZyBhcyBhbnksICdkZXN0aW5hdGlvbicpO1xuICAgICAgZXhwZWN0KGFjdHVhbC5kZXN0aW5hdGlvbkV4dGVybmFsSWQpLnRvRXF1YWwoMTI0NSk7XG4gICAgICBleHBlY3QoYWN0dWFsLm9iamVjdFR5cGUpLnRvRXF1YWwoJ3VzZXInKTtcbiAgICAgIGV4cGVjdChhY3R1YWwuaWRlbnRpZmllclR5cGUpLnRvRXF1YWwoJ3NvbWUnKTtcbiAgICB9KTtcbiAgICB0ZXN0KCdzaG91bGQgcGFyc2UgZXZlcnl0aGluZyBidXQgcmV0dXJuIGFsbCBhcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnZGVzdGluYXRpb24tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBhY3R1YWwgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElESW5mb0ZvclJldGwobXNnIGFzIGFueSwgJ2Rlc3RpbmF0aW9uJyk7XG4gICAgICBleHBlY3QoYWN0dWFsLmRlc3RpbmF0aW9uRXh0ZXJuYWxJZCkudG9FcXVhbChudWxsKTtcbiAgICAgIGV4cGVjdChhY3R1YWwub2JqZWN0VHlwZSkudG9FcXVhbCgnJyk7XG4gICAgICBleHBlY3QoYWN0dWFsLmlkZW50aWZpZXJUeXBlKS50b0VxdWFsKG51bGwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RGVzdGluYXRpb25FeHRlcm5hbElET2JqZWN0Rm9yUmV0bCcsICgpID0+IHtcbiAgICB0ZXN0KCdzaG91bGQgcGFyc2UgZXZlcnl0aGluZyBzdWNjZXNzZnVsbHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdkZXN0aW5hdGlvbi11c2VyJyxcbiAgICAgICAgICAgICAgaWQ6IDEyNDUsXG4gICAgICAgICAgICAgIGlkZW50aWZpZXJUeXBlOiAnc29tZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0dWFsID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRE9iamVjdEZvclJldGwobXNnIGFzIGFueSwgJ2Rlc3RpbmF0aW9uJyk7XG4gICAgICBleHBlY3QoYWN0dWFsPy5pZCkudG9FcXVhbCgxMjQ1KTtcbiAgICAgIC8vIFRPRE86IElzIHRoaXMgZXhwZWN0ZWQgPyBDb25maXJtIHdpdGggdGVhbVxuICAgICAgZXhwZWN0KGFjdHVhbD8udHlwZSkudG9FcXVhbCgnZGVzdGluYXRpb24tdXNlcicpO1xuICAgICAgZXhwZWN0KGFjdHVhbD8uaWRlbnRpZmllclR5cGUpLnRvRXF1YWwoJ3NvbWUnKTtcbiAgICB9KTtcbiAgICB0ZXN0KCdzaG91bGQgYmUgdW5kZWZpbmVkIHdoZW4gZXh0ZXJuYWxJZCBkb2VzIG5vdCBoYXZlIHR5cGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAxMjQ1LFxuICAgICAgICAgICAgICBpZGVudGlmaWVyVHlwZTogJ3NvbWUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSURPYmplY3RGb3JSZXRsKG1zZyBhcyBhbnksICdkZXN0aW5hdGlvbicpO1xuICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICAgIHRlc3QoJ3Nob3VsZCBiZSB1bmRlZmluZWQgd2hlbiBleHRlcm5hbElkIGlzIG5vdCBwcmVzZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0ge1xuICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCBhY3R1YWwgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElET2JqZWN0Rm9yUmV0bChtc2cgYXMgYW55LCAnZGVzdGluYXRpb24nKTtcbiAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgICB0ZXN0KCdzaG91bGQgYmUgdW5kZWZpbmVkIHdoZW4gY29udGV4dCBpcyBub3QgcHJlc2VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHt9O1xuICAgICAgY29uc3QgYWN0dWFsID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRE9iamVjdEZvclJldGwobXNnIGFzIGFueSwgJ2Rlc3RpbmF0aW9uJyk7XG4gICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderstack/integrations-lib",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "module": "build/index.js",