serverless-spy 0.0.35 → 0.0.36

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.
@@ -2,4 +2,5 @@ import { Credentials } from '@aws-sdk/types';
2
2
  export declare type ServerlessSpyListenerParams = {
3
3
  serverlessSpyWsUrl: string;
4
4
  credentials?: Credentials;
5
+ debugMode?: boolean;
5
6
  };
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGlzdGVuZXIvU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcmVkZW50aWFscyB9IGZyb20gJ0Bhd3Mtc2RrL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zID0ge1xuICBzZXJ2ZXJsZXNzU3B5V3NVcmw6IHN0cmluZztcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscztcbn07XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGlzdGVuZXIvU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcmVkZW50aWFscyB9IGZyb20gJ0Bhd3Mtc2RrL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zID0ge1xuICBzZXJ2ZXJsZXNzU3B5V3NVcmw6IHN0cmluZztcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscztcbiAgZGVidWdNb2RlPzogYm9vbGVhbjtcbn07XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGlzdGVuZXIvU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcmVkZW50aWFscyB9IGZyb20gJ0Bhd3Mtc2RrL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zID0ge1xuICBzZXJ2ZXJsZXNzU3B5V3NVcmw6IHN0cmluZztcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscztcbn07XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGlzdGVuZXIvU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcmVkZW50aWFscyB9IGZyb20gJ0Bhd3Mtc2RrL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zID0ge1xuICBzZXJ2ZXJsZXNzU3B5V3NVcmw6IHN0cmluZztcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscztcbiAgZGVidWdNb2RlPzogYm9vbGVhbjtcbn07XG4iXX0=
@@ -1,8 +1,5 @@
1
- import { SpyEvent } from '../common/spyEvents/SpyEvent';
2
- import { SpyMessage } from '../common/spyEvents/SpyMessage';
3
1
  import { ServerlessSpyListener } from './ServerlessSpyListener';
4
2
  import { ServerlessSpyListenerParams } from './ServerlessSpyListenerParams';
5
- import { WaitForParams } from './WaitForParams';
6
3
  export declare class WsListener<TSpyEvents> {
7
4
  private messages;
8
5
  private trackers;
@@ -11,28 +8,14 @@ export declare class WsListener<TSpyEvents> {
11
8
  private ws?;
12
9
  private closed;
13
10
  private functionPrefix;
11
+ private debugMode;
14
12
  start(params: ServerlessSpyListenerParams): Promise<void>;
15
13
  stop(): Promise<void>;
16
- trackerMatchMessage(tracker: Tracker, message: SpyMessageStorage): boolean | undefined;
14
+ private trackerMatchMessage;
17
15
  private resolveTrackerInOldMessages;
18
16
  private resolveOldTrackerWithNewMessage;
19
17
  private trackerMatchCondition;
20
- createWaitForXXXFunc(serviceKeyForFunction: string, functionContextAwsRequestId?: string): (paramsW?: WaitForParams<SpyEvent>) => Promise<unknown>;
18
+ private createWaitForXXXFunc;
21
19
  createProxy(): ServerlessSpyListener<TSpyEvents>;
20
+ private log;
22
21
  }
23
- declare type Tracker = {
24
- promiseResolve: (data: any) => void;
25
- promiseReject: (data: any) => void;
26
- finished: boolean;
27
- serviceKey?: string;
28
- serviceKeyForFunction?: string;
29
- condition?: (data: any) => boolean;
30
- timoutMs?: number;
31
- functionContextAwsRequestId?: string;
32
- possibleSpyMessageDataForDebugging?: any;
33
- };
34
- declare type SpyMessageStorage = SpyMessage & {
35
- serviceKeyForFunction: string;
36
- functionContextAwsRequestId?: string;
37
- };
38
- export {};
@@ -9,8 +9,10 @@ class WsListener {
9
9
  this.trackers = [];
10
10
  this.closed = true;
11
11
  this.functionPrefix = 'waitFor';
12
+ this.debugMode = false;
12
13
  }
13
14
  async start(params) {
15
+ this.debugMode = !!params.debugMode;
14
16
  this.waitForConnection = new Promise((resolve) => {
15
17
  this.connectionOpenResolve = resolve;
16
18
  });
@@ -18,11 +20,13 @@ class WsListener {
18
20
  this.ws = new ws_1.WebSocket(urlSigned);
19
21
  this.closed = false;
20
22
  this.ws.on('open', () => {
23
+ this.log('Connection oppened');
21
24
  this.connectionOpenResolve();
22
25
  });
23
26
  this.ws.on('message', (data) => {
24
27
  if (this.closed)
25
28
  return;
29
+ this.log('Message received', data);
26
30
  const message = JSON.parse(data.toString());
27
31
  message.serviceKeyForFunction = message.serviceKey.replace(/#/g, '');
28
32
  if (message.serviceKey.startsWith('Function')) {
@@ -32,8 +36,8 @@ class WsListener {
32
36
  this.resolveOldTrackerWithNewMessage(message);
33
37
  });
34
38
  this.ws.on('close', () => {
39
+ this.log('Connection closed');
35
40
  this.closed = true;
36
- //console.log('disconnected ' + new Date().toISOString());
37
41
  });
38
42
  await this.waitForConnection;
39
43
  }
@@ -139,7 +143,6 @@ class WsListener {
139
143
  functionContextAwsRequestId,
140
144
  };
141
145
  });
142
- //waitForXXXFunc
143
146
  return (paramsW) => {
144
147
  tracker.condition = paramsW?.condition;
145
148
  const timer = setTimeout(() => {
@@ -180,6 +183,11 @@ class WsListener {
180
183
  });
181
184
  return proxy;
182
185
  }
186
+ log(message, ...optionalParams) {
187
+ if (this.debugMode) {
188
+ console.debug('SSPY', message, ...optionalParams);
189
+ }
190
+ }
183
191
  }
184
192
  exports.WsListener = WsListener;
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQStCO0FBQy9CLCtEQUE0RDtBQVE1RCxNQUFhLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBS3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztJQThPckMsQ0FBQztJQTVPQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQW1DO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsaUNBQWUsRUFDckMsTUFBTSxDQUFDLGtCQUFrQixFQUN6QixNQUFNLENBQUMsV0FBVyxDQUNuQixDQUFDO1FBRUYsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLGNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxxQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFzQixD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QUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ25DLEdBQUcsRUFBRSxDQUFDLE1BQVcsRUFBRSxTQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNLElBQ0wsT0FBTyxTQUFTLEtBQUssUUFBUTtvQkFDN0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3pDO29CQUNBLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQzNCLENBQUM7b0JBRUYsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDekQ7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUEwQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQXRQRCxnQ0FzUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJTb2NrZXQgfSBmcm9tICd3cyc7XG5pbXBvcnQgeyBnZXRXZWJTb2NrZXRVcmwgfSBmcm9tICcuLi9jb21tb24vZ2V0V2ViU29ja2V0VXJsJztcbmltcG9ydCB7IEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50IH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9GdW5jdGlvblJlcXVlc3RTcHlFdmVudCc7XG5pbXBvcnQgeyBTcHlFdmVudCB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvU3B5RXZlbnQnO1xuaW1wb3J0IHsgU3B5TWVzc2FnZSB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvU3B5TWVzc2FnZSc7XG5pbXBvcnQgeyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXIgfSBmcm9tICcuL1NlcnZlcmxlc3NTcHlMaXN0ZW5lcic7XG5pbXBvcnQgeyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXMgfSBmcm9tICcuL1NlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyc7XG5pbXBvcnQgeyBXYWl0Rm9yUGFyYW1zIH0gZnJvbSAnLi9XYWl0Rm9yUGFyYW1zJztcblxuZXhwb3J0IGNsYXNzIFdzTGlzdGVuZXI8VFNweUV2ZW50cz4ge1xuICBwcml2YXRlIG1lc3NhZ2VzOiBTcHlNZXNzYWdlU3RvcmFnZVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlcnM6IFRyYWNrZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgY29ubmVjdGlvbk9wZW5SZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSB3YWl0Rm9yQ29ubmVjdGlvbj86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgd3M/OiBXZWJTb2NrZXQ7XG4gIHByaXZhdGUgY2xvc2VkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmdW5jdGlvblByZWZpeCA9ICd3YWl0Rm9yJztcblxuICBhc3luYyBzdGFydChwYXJhbXM6IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcykge1xuICAgIHRoaXMud2FpdEZvckNvbm5lY3Rpb24gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uT3BlblJlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdXJsU2lnbmVkID0gYXdhaXQgZ2V0V2ViU29ja2V0VXJsKFxuICAgICAgcGFyYW1zLnNlcnZlcmxlc3NTcHlXc1VybCxcbiAgICAgIHBhcmFtcy5jcmVkZW50aWFsc1xuICAgICk7XG5cbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh1cmxTaWduZWQpO1xuICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy53cy5vbignb3BlbicsICgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbk9wZW5SZXNvbHZlISgpO1xuICAgIH0pO1xuICAgIHRoaXMud3Mub24oJ21lc3NhZ2UnLCAoZGF0YSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSkgYXMgU3B5TWVzc2FnZVN0b3JhZ2U7XG5cbiAgICAgIG1lc3NhZ2Uuc2VydmljZUtleUZvckZ1bmN0aW9uID0gbWVzc2FnZS5zZXJ2aWNlS2V5LnJlcGxhY2UoLyMvZywgJycpO1xuXG4gICAgICBpZiAobWVzc2FnZS5zZXJ2aWNlS2V5LnN0YXJ0c1dpdGgoJ0Z1bmN0aW9uJykpIHtcbiAgICAgICAgbWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgPSAoXG4gICAgICAgICAgbWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50XG4gICAgICAgICkuY29udGV4dC5hd3NSZXF1ZXN0SWQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgIHRoaXMucmVzb2x2ZU9sZFRyYWNrZXJXaXRoTmV3TWVzc2FnZShtZXNzYWdlKTtcbiAgICB9KTtcbiAgICB0aGlzLndzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIC8vY29uc29sZS5sb2coJ2Rpc2Nvbm5lY3RlZCAnICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMud2FpdEZvckNvbm5lY3Rpb247XG4gIH1cblxuICBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndzIS5jbG9zZSgpO1xuICB9XG5cbiAgdHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyOiBUcmFja2VyLCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5ICYmIHRyYWNrZXIuc2VydmljZUtleSA9PT0gbWVzc2FnZS5zZXJ2aWNlS2V5KSB8fFxuICAgICAgKHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgIHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uID09PSBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbilcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaENvbmRpdGlvbih0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBzcHlBbmRKZXN0TWF0Y2hlcnM6IGFueSA9IHtcbiAgICAgICAgICBnZXREYXRhOiAoKSA9PiBtZXNzYWdlLmRhdGEsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb247XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSAmJlxuICAgICAgICAgIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ1JlcXVlc3QnKSB8fFxuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLmVuZHNXaXRoKCdDb25zb2xlJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcblxuICAgICAgICAgIGlmIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5lbmRzV2l0aCgnUmVxdWVzdCcpKSB7XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSA9XG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmxlbmd0aCAtICdSZXF1ZXN0Jy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmVuZHNXaXRoKCdDb25zb2xlJykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2Uuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UubGVuZ3RoIC0gJ0NvbnNvbGUnLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlICs9ICdSZXNwb25zZSc7XG5cbiAgICAgICAgICBzcHlBbmRKZXN0TWF0Y2hlcnMuZm9sbG93ZWRCeVJlc3BvbnNlID0gKHBhcmFtc1c6IFdhaXRGb3JQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSxcbiAgICAgICAgICAgICAgKG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCkuY29udGV4dC5hd3NSZXF1ZXN0SWRcbiAgICAgICAgICAgICkocGFyYW1zVyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUFuZEplc3RNYXRjaGVycywge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbb2JqZWN0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0S2V5ICE9PSAndGhlbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqZXN0RnVuY3Rpb25Ub0V4ZWN1dGUgPSAoZXhwZWN0KG1lc3NhZ2UuZGF0YSkgYXMgYW55KVtcbiAgICAgICAgICAgICAgICAgIG9iamVjdEtleVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgamVzdEZ1bmN0aW9uVG9FeGVjdXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJhY2tlci5wcm9taXNlUmVzb2x2ZShwcm94eSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyh0cmFja2VyOiBUcmFja2VyKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHRoaXMubWVzc2FnZXMpIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhY2tlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCB0cmFja2VyID0gdGhpcy50cmFja2Vyc1tpbmRleF07XG4gICAgICBpZiAodGhpcy50cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMgPSB0aGlzLnRyYWNrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tlck1hdGNoQ29uZGl0aW9uKHRyYWNrZXI6IFRyYWNrZXIsIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgY29uc3QgbWF0Y2hDb25kaXRpb24gPVxuICAgICAgKHRyYWNrZXIuY29uZGl0aW9uICYmIHRyYWNrZXIuY29uZGl0aW9uKG1lc3NhZ2UuZGF0YSkpIHx8XG4gICAgICAhdHJhY2tlci5jb25kaXRpb247XG5cbiAgICBjb25zdCBtYXRjaFJlcXVlc3RJZCA9XG4gICAgICAodHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgJiZcbiAgICAgICAgdHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgPT09XG4gICAgICAgICAgbWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQpIHx8XG4gICAgICAhdHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ7XG5cbiAgICBpZiAobWF0Y2hDb25kaXRpb24gJiYgbWF0Y2hSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgICFtYXRjaENvbmRpdGlvbiAmJlxuICAgICAgICBtYXRjaFJlcXVlc3RJZCAmJlxuICAgICAgICAhdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nXG4gICAgICApIHtcbiAgICAgICAgdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nID0gbWVzc2FnZS5kYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZyxcbiAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHRyYWNrZXI6IFRyYWNrZXI7XG5cbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJhY2tlciA9IHtcbiAgICAgICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgICAgICBwcm9taXNlUmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgcHJvbWlzZVJlamVjdDogcmVqZWN0LFxuICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24sXG4gICAgICAgIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvL3dhaXRGb3JYWFhGdW5jXG4gICAgcmV0dXJuIChwYXJhbXNXPzogV2FpdEZvclBhcmFtczxTcHlFdmVudD4pID0+IHtcbiAgICAgIHRyYWNrZXIuY29uZGl0aW9uID0gcGFyYW1zVz8uY29uZGl0aW9uO1xuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodHJhY2tlci5maW5pc2hlZCkgcmV0dXJuO1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgVGltZW91dCB3YWl0aW5nIGZvciBTZXJ2ZXJsZXNzIFNweSBtZXNzYWdlICR7c2VydmljZUtleUZvckZ1bmN0aW9ufS5gO1xuXG4gICAgICAgIGlmICh0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGAgU2ltaWxhciBtYXRjaGluZyBzcHkgZXZlbnQgZGF0YTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhY2tlci5wcm9taXNlUmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICB9LCBwYXJhbXNXPy50aW1vdXRNcyB8fCAxMDAwMCk7XG5cbiAgICAgIHByb21pc2UuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLnJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyh0cmFja2VyKSkge1xuICAgICAgICB0aGlzLnRyYWNrZXJzLnB1c2godHJhY2tlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUHJveHkoKSB7XG4gICAgY29uc3Qgc3B5TGlzdGVuZXIgPSB7fSBhcyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz47XG5cbiAgICBzcHlMaXN0ZW5lci5zdG9wID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUxpc3RlbmVyLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiBvYmplY3RLZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgb2JqZWN0S2V5LnN0YXJ0c1dpdGgodGhpcy5mdW5jdGlvblByZWZpeClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gb2JqZWN0S2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25QcmVmaXgubGVuZ3RoXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKHNlcnZpY2VLZXlGb3JGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJveHkgYXMgU2VydmVybGVzc1NweUxpc3RlbmVyPFRTcHlFdmVudHM+O1xuICB9XG59XG5cbnR5cGUgVHJhY2tlciA9IHtcbiAgcHJvbWlzZVJlc29sdmU6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIHByb21pc2VSZWplY3Q6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGZpbmlzaGVkOiBib29sZWFuO1xuICBzZXJ2aWNlS2V5Pzogc3RyaW5nO1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24/OiBzdHJpbmc7XG4gIGNvbmRpdGlvbj86IChkYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIHRpbW91dE1zPzogbnVtYmVyO1xuICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIHBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmc/OiBhbnk7XG59O1xuXG50eXBlIFNweU1lc3NhZ2VTdG9yYWdlID0gU3B5TWVzc2FnZSAmIHtcbiAgc2VydmljZUtleUZvckZ1bmN0aW9uOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbn07XG4iXX0=
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQStCO0FBQy9CLCtEQUE0RDtBQVE1RCxNQUFhLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBS3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBeVA1QixDQUFDO0lBdlBRLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBbUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUVwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLGlDQUFlLEVBQ3JDLE1BQU0sQ0FBQyxrQkFBa0IsRUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FDbkIsQ0FBQztRQUVGLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxjQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLHFCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUs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TyxDQUFDLENBQUM7YUFDN0I7WUFFRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLFdBQVcsR0FBRyxFQUF1QyxDQUFDO1FBRTVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ25DLEdBQUcsRUFBRSxDQUFDLE1BQVcsRUFBRSxTQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNLElBQ0wsT0FBTyxTQUFTLEtBQUssUUFBUTtvQkFDN0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3pDO29CQUNBLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQzNCLENBQUM7b0JBRUYsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDekQ7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUEwQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxHQUFHLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBcUI7UUFDbkQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztDQUNGO0FBbFFELGdDQWtRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdlYlNvY2tldCB9IGZyb20gJ3dzJztcbmltcG9ydCB7IGdldFdlYlNvY2tldFVybCB9IGZyb20gJy4uL2NvbW1vbi9nZXRXZWJTb2NrZXRVcmwnO1xuaW1wb3J0IHsgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL0Z1bmN0aW9uUmVxdWVzdFNweUV2ZW50JztcbmltcG9ydCB7IFNweUV2ZW50IH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9TcHlFdmVudCc7XG5pbXBvcnQgeyBTcHlNZXNzYWdlIH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9TcHlNZXNzYWdlJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lciB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zJztcbmltcG9ydCB7IFdhaXRGb3JQYXJhbXMgfSBmcm9tICcuL1dhaXRGb3JQYXJhbXMnO1xuXG5leHBvcnQgY2xhc3MgV3NMaXN0ZW5lcjxUU3B5RXZlbnRzPiB7XG4gIHByaXZhdGUgbWVzc2FnZXM6IFNweU1lc3NhZ2VTdG9yYWdlW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmFja2VyczogVHJhY2tlcltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25uZWN0aW9uT3BlblJlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHdhaXRGb3JDb25uZWN0aW9uPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSB3cz86IFdlYlNvY2tldDtcbiAgcHJpdmF0ZSBjbG9zZWQgPSB0cnVlO1xuICBwcml2YXRlIGZ1bmN0aW9uUHJlZml4ID0gJ3dhaXRGb3InO1xuICBwcml2YXRlIGRlYnVnTW9kZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBhc3luYyBzdGFydChwYXJhbXM6IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcykge1xuICAgIHRoaXMuZGVidWdNb2RlID0gISFwYXJhbXMuZGVidWdNb2RlO1xuXG4gICAgdGhpcy53YWl0Rm9yQ29ubmVjdGlvbiA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25PcGVuUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1cmxTaWduZWQgPSBhd2FpdCBnZXRXZWJTb2NrZXRVcmwoXG4gICAgICBwYXJhbXMuc2VydmVybGVzc1NweVdzVXJsLFxuICAgICAgcGFyYW1zLmNyZWRlbnRpYWxzXG4gICAgKTtcblxuICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHVybFNpZ25lZCk7XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLndzLm9uKCdvcGVuJywgKCkgPT4ge1xuICAgICAgdGhpcy5sb2coJ0Nvbm5lY3Rpb24gb3BwZW5lZCcpO1xuICAgICAgdGhpcy5jb25uZWN0aW9uT3BlblJlc29sdmUhKCk7XG4gICAgfSk7XG4gICAgdGhpcy53cy5vbignbWVzc2FnZScsIChkYXRhKSA9PiB7XG4gICAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgICAgdGhpcy5sb2coJ01lc3NhZ2UgcmVjZWl2ZWQnLCBkYXRhKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKSBhcyBTcHlNZXNzYWdlU3RvcmFnZTtcblxuICAgICAgbWVzc2FnZS5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBtZXNzYWdlLnNlcnZpY2VLZXkucmVwbGFjZSgvIy9nLCAnJyk7XG5cbiAgICAgIGlmIChtZXNzYWdlLnNlcnZpY2VLZXkuc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSkge1xuICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9IChcbiAgICAgICAgICBtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnRcbiAgICAgICAgKS5jb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5yZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICAgIHRoaXMud3Mub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgdGhpcy5sb2coJ0Nvbm5lY3Rpb24gY2xvc2VkJyk7XG5cbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMud2FpdEZvckNvbm5lY3Rpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcCgpIHtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy53cyEuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyOiBUcmFja2VyLCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5ICYmIHRyYWNrZXIuc2VydmljZUtleSA9PT0gbWVzc2FnZS5zZXJ2aWNlS2V5KSB8fFxuICAgICAgKHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgIHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uID09PSBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbilcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaENvbmRpdGlvbih0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBzcHlBbmRKZXN0TWF0Y2hlcnM6IGFueSA9IHtcbiAgICAgICAgICBnZXREYXRhOiAoKSA9PiBtZXNzYWdlLmRhdGEsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb247XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSAmJlxuICAgICAgICAgIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ1JlcXVlc3QnKSB8fFxuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLmVuZHNXaXRoKCdDb25zb2xlJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcblxuICAgICAgICAgIGlmIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5lbmRzV2l0aCgnUmVxdWVzdCcpKSB7XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSA9XG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmxlbmd0aCAtICdSZXF1ZXN0Jy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmVuZHNXaXRoKCdDb25zb2xlJykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2Uuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UubGVuZ3RoIC0gJ0NvbnNvbGUnLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlICs9ICdSZXNwb25zZSc7XG5cbiAgICAgICAgICBzcHlBbmRKZXN0TWF0Y2hlcnMuZm9sbG93ZWRCeVJlc3BvbnNlID0gKHBhcmFtc1c6IFdhaXRGb3JQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSxcbiAgICAgICAgICAgICAgKG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCkuY29udGV4dC5hd3NSZXF1ZXN0SWRcbiAgICAgICAgICAgICkocGFyYW1zVyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUFuZEplc3RNYXRjaGVycywge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbb2JqZWN0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0S2V5ICE9PSAndGhlbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqZXN0RnVuY3Rpb25Ub0V4ZWN1dGUgPSAoZXhwZWN0KG1lc3NhZ2UuZGF0YSkgYXMgYW55KVtcbiAgICAgICAgICAgICAgICAgIG9iamVjdEtleVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgamVzdEZ1bmN0aW9uVG9FeGVjdXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJhY2tlci5wcm9taXNlUmVzb2x2ZShwcm94eSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyh0cmFja2VyOiBUcmFja2VyKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHRoaXMubWVzc2FnZXMpIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhY2tlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCB0cmFja2VyID0gdGhpcy50cmFja2Vyc1tpbmRleF07XG4gICAgICBpZiAodGhpcy50cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMgPSB0aGlzLnRyYWNrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tlck1hdGNoQ29uZGl0aW9uKHRyYWNrZXI6IFRyYWNrZXIsIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgY29uc3QgbWF0Y2hDb25kaXRpb24gPVxuICAgICAgKHRyYWNrZXIuY29uZGl0aW9uICYmIHRyYWNrZXIuY29uZGl0aW9uKG1lc3NhZ2UuZGF0YSkpIHx8XG4gICAgICAhdHJhY2tlci5jb25kaXRpb247XG5cbiAgICBjb25zdCBtYXRjaFJlcXVlc3RJZCA9XG4gICAgICAodHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgJiZcbiAgICAgICAgdHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgPT09XG4gICAgICAgICAgbWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQpIHx8XG4gICAgICAhdHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ7XG5cbiAgICBpZiAobWF0Y2hDb25kaXRpb24gJiYgbWF0Y2hSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgICFtYXRjaENvbmRpdGlvbiAmJlxuICAgICAgICBtYXRjaFJlcXVlc3RJZCAmJlxuICAgICAgICAhdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nXG4gICAgICApIHtcbiAgICAgICAgdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nID0gbWVzc2FnZS5kYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgc2VydmljZUtleUZvckZ1bmN0aW9uOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB0cmFja2VyOiBUcmFja2VyO1xuXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyYWNrZXIgPSB7XG4gICAgICAgIGZpbmlzaGVkOiBmYWxzZSxcbiAgICAgICAgcHJvbWlzZVJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgIHByb21pc2VSZWplY3Q6IHJlamVjdCxcbiAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLFxuICAgICAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIChwYXJhbXNXPzogV2FpdEZvclBhcmFtczxTcHlFdmVudD4pID0+IHtcbiAgICAgIHRyYWNrZXIuY29uZGl0aW9uID0gcGFyYW1zVz8uY29uZGl0aW9uO1xuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodHJhY2tlci5maW5pc2hlZCkgcmV0dXJuO1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgVGltZW91dCB3YWl0aW5nIGZvciBTZXJ2ZXJsZXNzIFNweSBtZXNzYWdlICR7c2VydmljZUtleUZvckZ1bmN0aW9ufS5gO1xuXG4gICAgICAgIGlmICh0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGAgU2ltaWxhciBtYXRjaGluZyBzcHkgZXZlbnQgZGF0YTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhY2tlci5wcm9taXNlUmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICB9LCBwYXJhbXNXPy50aW1vdXRNcyB8fCAxMDAwMCk7XG5cbiAgICAgIHByb21pc2UuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLnJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyh0cmFja2VyKSkge1xuICAgICAgICB0aGlzLnRyYWNrZXJzLnB1c2godHJhY2tlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUHJveHkoKSB7XG4gICAgY29uc3Qgc3B5TGlzdGVuZXIgPSB7fSBhcyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz47XG5cbiAgICBzcHlMaXN0ZW5lci5zdG9wID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUxpc3RlbmVyLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiBvYmplY3RLZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgb2JqZWN0S2V5LnN0YXJ0c1dpdGgodGhpcy5mdW5jdGlvblByZWZpeClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gb2JqZWN0S2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25QcmVmaXgubGVuZ3RoXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKHNlcnZpY2VLZXlGb3JGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJveHkgYXMgU2VydmVybGVzc1NweUxpc3RlbmVyPFRTcHlFdmVudHM+O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pIHtcbiAgICBpZiAodGhpcy5kZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1NTUFknLCBtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgVHJhY2tlciA9IHtcbiAgcHJvbWlzZVJlc29sdmU6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIHByb21pc2VSZWplY3Q6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGZpbmlzaGVkOiBib29sZWFuO1xuICBzZXJ2aWNlS2V5Pzogc3RyaW5nO1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24/OiBzdHJpbmc7XG4gIGNvbmRpdGlvbj86IChkYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIHRpbW91dE1zPzogbnVtYmVyO1xuICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIHBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmc/OiBhbnk7XG59O1xuXG50eXBlIFNweU1lc3NhZ2VTdG9yYWdlID0gU3B5TWVzc2FnZSAmIHtcbiAgc2VydmljZUtleUZvckZ1bmN0aW9uOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbn07XG4iXX0=
@@ -6,8 +6,10 @@ export class WsListener {
6
6
  this.trackers = [];
7
7
  this.closed = true;
8
8
  this.functionPrefix = 'waitFor';
9
+ this.debugMode = false;
9
10
  }
10
11
  async start(params) {
12
+ this.debugMode = !!params.debugMode;
11
13
  this.waitForConnection = new Promise((resolve) => {
12
14
  this.connectionOpenResolve = resolve;
13
15
  });
@@ -15,11 +17,13 @@ export class WsListener {
15
17
  this.ws = new WebSocket(urlSigned);
16
18
  this.closed = false;
17
19
  this.ws.on('open', () => {
20
+ this.log('Connection oppened');
18
21
  this.connectionOpenResolve();
19
22
  });
20
23
  this.ws.on('message', (data) => {
21
24
  if (this.closed)
22
25
  return;
26
+ this.log('Message received', data);
23
27
  const message = JSON.parse(data.toString());
24
28
  message.serviceKeyForFunction = message.serviceKey.replace(/#/g, '');
25
29
  if (message.serviceKey.startsWith('Function')) {
@@ -29,8 +33,8 @@ export class WsListener {
29
33
  this.resolveOldTrackerWithNewMessage(message);
30
34
  });
31
35
  this.ws.on('close', () => {
36
+ this.log('Connection closed');
32
37
  this.closed = true;
33
- //console.log('disconnected ' + new Date().toISOString());
34
38
  });
35
39
  await this.waitForConnection;
36
40
  }
@@ -136,7 +140,6 @@ export class WsListener {
136
140
  functionContextAwsRequestId,
137
141
  };
138
142
  });
139
- //waitForXXXFunc
140
143
  return (paramsW) => {
141
144
  tracker.condition = paramsW?.condition;
142
145
  const timer = setTimeout(() => {
@@ -177,5 +180,10 @@ export class WsListener {
177
180
  });
178
181
  return proxy;
179
182
  }
183
+ log(message, ...optionalParams) {
184
+ if (this.debugMode) {
185
+ console.debug('SSPY', message, ...optionalParams);
186
+ }
187
+ }
180
188
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFRNUQsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBS3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztJQThPckMsQ0FBQztJQTVPQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQW1DO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FDckMsTUFBTSxDQUFDLGtCQUFrQixFQUN6QixNQUFNLENBQUMsV0FBVyxDQUNuQixDQUFDO1FBRUYsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxxQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXhCLE1BQU0sT0FB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LEVBQUU7WUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ25DLEdBQUcsRUFBRSxDQUFDLE1BQVcsRUFBRSxTQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNLElBQ0wsT0FBTyxTQUFTLEtBQUssUUFBUTtvQkFDN0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3pDO29CQUNBLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQzNCLENBQUM7b0JBRUYsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDekQ7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUEwQyxDQUFDO0lBQ3BELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdlYlNvY2tldCB9IGZyb20gJ3dzJztcbmltcG9ydCB7IGdldFdlYlNvY2tldFVybCB9IGZyb20gJy4uL2NvbW1vbi9nZXRXZWJTb2NrZXRVcmwnO1xuaW1wb3J0IHsgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL0Z1bmN0aW9uUmVxdWVzdFNweUV2ZW50JztcbmltcG9ydCB7IFNweUV2ZW50IH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9TcHlFdmVudCc7XG5pbXBvcnQgeyBTcHlNZXNzYWdlIH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9TcHlNZXNzYWdlJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lciB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zJztcbmltcG9ydCB7IFdhaXRGb3JQYXJhbXMgfSBmcm9tICcuL1dhaXRGb3JQYXJhbXMnO1xuXG5leHBvcnQgY2xhc3MgV3NMaXN0ZW5lcjxUU3B5RXZlbnRzPiB7XG4gIHByaXZhdGUgbWVzc2FnZXM6IFNweU1lc3NhZ2VTdG9yYWdlW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmFja2VyczogVHJhY2tlcltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25uZWN0aW9uT3BlblJlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHdhaXRGb3JDb25uZWN0aW9uPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSB3cz86IFdlYlNvY2tldDtcbiAgcHJpdmF0ZSBjbG9zZWQgPSB0cnVlO1xuICBwcml2YXRlIGZ1bmN0aW9uUHJlZml4ID0gJ3dhaXRGb3InO1xuXG4gIGFzeW5jIHN0YXJ0KHBhcmFtczogU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zKSB7XG4gICAgdGhpcy53YWl0Rm9yQ29ubmVjdGlvbiA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25PcGVuUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1cmxTaWduZWQgPSBhd2FpdCBnZXRXZWJTb2NrZXRVcmwoXG4gICAgICBwYXJhbXMuc2VydmVybGVzc1NweVdzVXJsLFxuICAgICAgcGFyYW1zLmNyZWRlbnRpYWxzXG4gICAgKTtcblxuICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHVybFNpZ25lZCk7XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLndzLm9uKCdvcGVuJywgKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uT3BlblJlc29sdmUhKCk7XG4gICAgfSk7XG4gICAgdGhpcy53cy5vbignbWVzc2FnZScsIChkYXRhKSA9PiB7XG4gICAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKSBhcyBTcHlNZXNzYWdlU3RvcmFnZTtcblxuICAgICAgbWVzc2FnZS5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBtZXNzYWdlLnNlcnZpY2VLZXkucmVwbGFjZSgvIy9nLCAnJyk7XG5cbiAgICAgIGlmIChtZXNzYWdlLnNlcnZpY2VLZXkuc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSkge1xuICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9IChcbiAgICAgICAgICBtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnRcbiAgICAgICAgKS5jb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5yZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICAgIHRoaXMud3Mub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgLy9jb25zb2xlLmxvZygnZGlzY29ubmVjdGVkICcgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMud3MhLmNsb3NlKCk7XG4gIH1cblxuICB0cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXI6IFRyYWNrZXIsIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgaWYgKHRyYWNrZXIuZmluaXNoZWQpIHJldHVybjtcblxuICAgIGlmIChcbiAgICAgICh0cmFja2VyLnNlcnZpY2VLZXkgJiYgdHJhY2tlci5zZXJ2aWNlS2V5ID09PSBtZXNzYWdlLnNlcnZpY2VLZXkpIHx8XG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPT09IG1lc3NhZ2Uuc2VydmljZUtleUZvckZ1bmN0aW9uKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoQ29uZGl0aW9uKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHRyYWNrZXIuZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHNweUFuZEplc3RNYXRjaGVyczogYW55ID0ge1xuICAgICAgICAgIGdldERhdGE6ICgpID0+IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSB0cmFja2VyLnNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbiAmJlxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5zdGFydHNXaXRoKCdGdW5jdGlvbicpICYmXG4gICAgICAgICAgKHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5lbmRzV2l0aCgnUmVxdWVzdCcpIHx8XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ0NvbnNvbGUnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlID0gc2VydmljZUtleUZvckZ1bmN0aW9uO1xuXG4gICAgICAgICAgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmVuZHNXaXRoKCdSZXF1ZXN0JykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2Uuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UubGVuZ3RoIC0gJ1JlcXVlc3QnLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UuZW5kc1dpdGgoJ0NvbnNvbGUnKSkge1xuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UgPVxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5sZW5ndGggLSAnQ29uc29sZScubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UgKz0gJ1Jlc3BvbnNlJztcblxuICAgICAgICAgIHNweUFuZEplc3RNYXRjaGVycy5mb2xsb3dlZEJ5UmVzcG9uc2UgPSAocGFyYW1zVzogV2FpdEZvclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLFxuICAgICAgICAgICAgICAobWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50KS5jb250ZXh0LmF3c1JlcXVlc3RJZFxuICAgICAgICAgICAgKShwYXJhbXNXKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc3B5QW5kSmVzdE1hdGNoZXJzLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIG9iamVjdEtleTogc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkgIT09ICd0aGVuJykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGplc3RGdW5jdGlvblRvRXhlY3V0ZSA9IChleHBlY3QobWVzc2FnZS5kYXRhKSBhcyBhbnkpW1xuICAgICAgICAgICAgICAgICAgb2JqZWN0S2V5XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBqZXN0RnVuY3Rpb25Ub0V4ZWN1dGUuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0cmFja2VyLnByb21pc2VSZXNvbHZlKHByb3h5KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXI6IFRyYWNrZXIpIHtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgdGhpcy5tZXNzYWdlcykge1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPbGRUcmFja2VyV2l0aE5ld01lc3NhZ2UobWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFja2Vycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRyYWNrZXIgPSB0aGlzLnRyYWNrZXJzW2luZGV4XTtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy50cmFja2VycyA9IHRoaXMudHJhY2tlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja2VyTWF0Y2hDb25kaXRpb24odHJhY2tlcjogVHJhY2tlciwgbWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBjb25zdCBtYXRjaENvbmRpdGlvbiA9XG4gICAgICAodHJhY2tlci5jb25kaXRpb24gJiYgdHJhY2tlci5jb25kaXRpb24obWVzc2FnZS5kYXRhKSkgfHxcbiAgICAgICF0cmFja2VyLmNvbmRpdGlvbjtcblxuICAgIGNvbnN0IG1hdGNoUmVxdWVzdElkID1cbiAgICAgICh0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCAmJlxuICAgICAgICB0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9PT1cbiAgICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCkgfHxcbiAgICAgICF0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZDtcblxuICAgIGlmIChtYXRjaENvbmRpdGlvbiAmJiBtYXRjaFJlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgIW1hdGNoQ29uZGl0aW9uICYmXG4gICAgICAgIG1hdGNoUmVxdWVzdElkICYmXG4gICAgICAgICF0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmdcbiAgICAgICkge1xuICAgICAgICB0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcgPSBtZXNzYWdlLmRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbjogc3RyaW5nLFxuICAgIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZ1xuICApIHtcbiAgICBsZXQgdHJhY2tlcjogVHJhY2tlcjtcblxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cmFja2VyID0ge1xuICAgICAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgICAgIHByb21pc2VSZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICBwcm9taXNlUmVqZWN0OiByZWplY3QsXG4gICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbixcbiAgICAgICAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vd2FpdEZvclhYWEZ1bmNcbiAgICByZXR1cm4gKHBhcmFtc1c/OiBXYWl0Rm9yUGFyYW1zPFNweUV2ZW50PikgPT4ge1xuICAgICAgdHJhY2tlci5jb25kaXRpb24gPSBwYXJhbXNXPy5jb25kaXRpb247XG5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG4gICAgICAgIHRyYWNrZXIuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGBUaW1lb3V0IHdhaXRpbmcgZm9yIFNlcnZlcmxlc3MgU3B5IG1lc3NhZ2UgJHtzZXJ2aWNlS2V5Rm9yRnVuY3Rpb259LmA7XG5cbiAgICAgICAgaWYgKHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZykge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYCBTaW1pbGFyIG1hdGNoaW5nIHNweSBldmVudCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFja2VyLnByb21pc2VSZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgIH0sIHBhcmFtc1c/LnRpbW91dE1zIHx8IDEwMDAwKTtcblxuICAgICAgcHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMucmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXIpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMucHVzaCh0cmFja2VyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVQcm94eSgpIHtcbiAgICBjb25zdCBzcHlMaXN0ZW5lciA9IHt9IGFzIFNlcnZlcmxlc3NTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPjtcblxuICAgIHNweUxpc3RlbmVyLnN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc3B5TGlzdGVuZXIsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIG9iamVjdEtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvYmplY3RLZXkuc3RhcnRzV2l0aCh0aGlzLmZ1bmN0aW9uUHJlZml4KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBvYmplY3RLZXkuc3Vic3RyaW5nKFxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvblByZWZpeC5sZW5ndGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoc2VydmljZUtleUZvckZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm94eSBhcyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz47XG4gIH1cbn1cblxudHlwZSBUcmFja2VyID0ge1xuICBwcm9taXNlUmVzb2x2ZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgcHJvbWlzZVJlamVjdDogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgZmluaXNoZWQ6IGJvb2xlYW47XG4gIHNlcnZpY2VLZXk/OiBzdHJpbmc7XG4gIHNlcnZpY2VLZXlGb3JGdW5jdGlvbj86IHN0cmluZztcbiAgY29uZGl0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgdGltb3V0TXM/OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbiAgcG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZz86IGFueTtcbn07XG5cbnR5cGUgU3B5TWVzc2FnZVN0b3JhZ2UgPSBTcHlNZXNzYWdlICYge1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZztcbiAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nO1xufTtcbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFRNUQsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBS3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBeVA1QixDQUFDO0lBdlBRLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBbUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUVwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsTUFBTSxlQUFlLENBQ3JDLE1BQU0sQ0FBQyxrQkFBa0IsRUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FDbkIsQ0FBQztRQUVGLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLHFCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQyxD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U29ja2V0IH0gZnJvbSAnd3MnO1xuaW1wb3J0IHsgZ2V0V2ViU29ja2V0VXJsIH0gZnJvbSAnLi4vY29tbW9uL2dldFdlYlNvY2tldFVybCc7XG5pbXBvcnQgeyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQnO1xuaW1wb3J0IHsgU3B5RXZlbnQgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweUV2ZW50JztcbmltcG9ydCB7IFNweU1lc3NhZ2UgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweU1lc3NhZ2UnO1xuaW1wb3J0IHsgU2VydmVybGVzc1NweUxpc3RlbmVyIH0gZnJvbSAnLi9TZXJ2ZXJsZXNzU3B5TGlzdGVuZXInO1xuaW1wb3J0IHsgU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zIH0gZnJvbSAnLi9TZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXMnO1xuaW1wb3J0IHsgV2FpdEZvclBhcmFtcyB9IGZyb20gJy4vV2FpdEZvclBhcmFtcyc7XG5cbmV4cG9ydCBjbGFzcyBXc0xpc3RlbmVyPFRTcHlFdmVudHM+IHtcbiAgcHJpdmF0ZSBtZXNzYWdlczogU3B5TWVzc2FnZVN0b3JhZ2VbXSA9IFtdO1xuICBwcml2YXRlIHRyYWNrZXJzOiBUcmFja2VyW10gPSBbXTtcblxuICBwcml2YXRlIGNvbm5lY3Rpb25PcGVuUmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgd2FpdEZvckNvbm5lY3Rpb24/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHdzPzogV2ViU29ja2V0O1xuICBwcml2YXRlIGNsb3NlZCA9IHRydWU7XG4gIHByaXZhdGUgZnVuY3Rpb25QcmVmaXggPSAnd2FpdEZvcic7XG4gIHByaXZhdGUgZGVidWdNb2RlID0gZmFsc2U7XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0KHBhcmFtczogU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zKSB7XG4gICAgdGhpcy5kZWJ1Z01vZGUgPSAhIXBhcmFtcy5kZWJ1Z01vZGU7XG5cbiAgICB0aGlzLndhaXRGb3JDb25uZWN0aW9uID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbk9wZW5SZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVybFNpZ25lZCA9IGF3YWl0IGdldFdlYlNvY2tldFVybChcbiAgICAgIHBhcmFtcy5zZXJ2ZXJsZXNzU3B5V3NVcmwsXG4gICAgICBwYXJhbXMuY3JlZGVudGlhbHNcbiAgICApO1xuXG4gICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodXJsU2lnbmVkKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMud3Mub24oJ29wZW4nLCAoKSA9PiB7XG4gICAgICB0aGlzLmxvZygnQ29ubmVjdGlvbiBvcHBlbmVkJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25PcGVuUmVzb2x2ZSEoKTtcbiAgICB9KTtcbiAgICB0aGlzLndzLm9uKCdtZXNzYWdlJywgKGRhdGEpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICB0aGlzLmxvZygnTWVzc2FnZSByZWNlaXZlZCcsIGRhdGEpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpIGFzIFNweU1lc3NhZ2VTdG9yYWdlO1xuXG4gICAgICBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9IG1lc3NhZ2Uuc2VydmljZUtleS5yZXBsYWNlKC8jL2csICcnKTtcblxuICAgICAgaWYgKG1lc3NhZ2Uuc2VydmljZUtleS5zdGFydHNXaXRoKCdGdW5jdGlvbicpKSB7XG4gICAgICAgIG1lc3NhZ2UuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkID0gKFxuICAgICAgICAgIG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudFxuICAgICAgICApLmNvbnRleHQuYXdzUmVxdWVzdElkO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICB0aGlzLnJlc29sdmVPbGRUcmFja2VyV2l0aE5ld01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSk7XG4gICAgdGhpcy53cy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLmxvZygnQ29ubmVjdGlvbiBjbG9zZWQnKTtcblxuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndzIS5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXI6IFRyYWNrZXIsIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgaWYgKHRyYWNrZXIuZmluaXNoZWQpIHJldHVybjtcblxuICAgIGlmIChcbiAgICAgICh0cmFja2VyLnNlcnZpY2VLZXkgJiYgdHJhY2tlci5zZXJ2aWNlS2V5ID09PSBtZXNzYWdlLnNlcnZpY2VLZXkpIHx8XG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPT09IG1lc3NhZ2Uuc2VydmljZUtleUZvckZ1bmN0aW9uKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoQ29uZGl0aW9uKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHRyYWNrZXIuZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHNweUFuZEplc3RNYXRjaGVyczogYW55ID0ge1xuICAgICAgICAgIGdldERhdGE6ICgpID0+IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSB0cmFja2VyLnNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbiAmJlxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5zdGFydHNXaXRoKCdGdW5jdGlvbicpICYmXG4gICAgICAgICAgKHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5lbmRzV2l0aCgnUmVxdWVzdCcpIHx8XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ0NvbnNvbGUnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlID0gc2VydmljZUtleUZvckZ1bmN0aW9uO1xuXG4gICAgICAgICAgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmVuZHNXaXRoKCdSZXF1ZXN0JykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlID1cbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2Uuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UubGVuZ3RoIC0gJ1JlcXVlc3QnLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UuZW5kc1dpdGgoJ0NvbnNvbGUnKSkge1xuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UgPVxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5sZW5ndGggLSAnQ29uc29sZScubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UgKz0gJ1Jlc3BvbnNlJztcblxuICAgICAgICAgIHNweUFuZEplc3RNYXRjaGVycy5mb2xsb3dlZEJ5UmVzcG9uc2UgPSAocGFyYW1zVzogV2FpdEZvclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLFxuICAgICAgICAgICAgICAobWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50KS5jb250ZXh0LmF3c1JlcXVlc3RJZFxuICAgICAgICAgICAgKShwYXJhbXNXKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc3B5QW5kSmVzdE1hdGNoZXJzLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIG9iamVjdEtleTogc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkgIT09ICd0aGVuJykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGplc3RGdW5jdGlvblRvRXhlY3V0ZSA9IChleHBlY3QobWVzc2FnZS5kYXRhKSBhcyBhbnkpW1xuICAgICAgICAgICAgICAgICAgb2JqZWN0S2V5XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBqZXN0RnVuY3Rpb25Ub0V4ZWN1dGUuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0cmFja2VyLnByb21pc2VSZXNvbHZlKHByb3h5KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXI6IFRyYWNrZXIpIHtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgdGhpcy5tZXNzYWdlcykge1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPbGRUcmFja2VyV2l0aE5ld01lc3NhZ2UobWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFja2Vycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRyYWNrZXIgPSB0aGlzLnRyYWNrZXJzW2luZGV4XTtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy50cmFja2VycyA9IHRoaXMudHJhY2tlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja2VyTWF0Y2hDb25kaXRpb24odHJhY2tlcjogVHJhY2tlciwgbWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBjb25zdCBtYXRjaENvbmRpdGlvbiA9XG4gICAgICAodHJhY2tlci5jb25kaXRpb24gJiYgdHJhY2tlci5jb25kaXRpb24obWVzc2FnZS5kYXRhKSkgfHxcbiAgICAgICF0cmFja2VyLmNvbmRpdGlvbjtcblxuICAgIGNvbnN0IG1hdGNoUmVxdWVzdElkID1cbiAgICAgICh0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCAmJlxuICAgICAgICB0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9PT1cbiAgICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCkgfHxcbiAgICAgICF0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZDtcblxuICAgIGlmIChtYXRjaENvbmRpdGlvbiAmJiBtYXRjaFJlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgIW1hdGNoQ29uZGl0aW9uICYmXG4gICAgICAgIG1hdGNoUmVxdWVzdElkICYmXG4gICAgICAgICF0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmdcbiAgICAgICkge1xuICAgICAgICB0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcgPSBtZXNzYWdlLmRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZyxcbiAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHRyYWNrZXI6IFRyYWNrZXI7XG5cbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJhY2tlciA9IHtcbiAgICAgICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgICAgICBwcm9taXNlUmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgcHJvbWlzZVJlamVjdDogcmVqZWN0LFxuICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24sXG4gICAgICAgIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKHBhcmFtc1c/OiBXYWl0Rm9yUGFyYW1zPFNweUV2ZW50PikgPT4ge1xuICAgICAgdHJhY2tlci5jb25kaXRpb24gPSBwYXJhbXNXPy5jb25kaXRpb247XG5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG4gICAgICAgIHRyYWNrZXIuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGBUaW1lb3V0IHdhaXRpbmcgZm9yIFNlcnZlcmxlc3MgU3B5IG1lc3NhZ2UgJHtzZXJ2aWNlS2V5Rm9yRnVuY3Rpb259LmA7XG5cbiAgICAgICAgaWYgKHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZykge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYCBTaW1pbGFyIG1hdGNoaW5nIHNweSBldmVudCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFja2VyLnByb21pc2VSZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgIH0sIHBhcmFtc1c/LnRpbW91dE1zIHx8IDEwMDAwKTtcblxuICAgICAgcHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMucmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXIpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMucHVzaCh0cmFja2VyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVQcm94eSgpIHtcbiAgICBjb25zdCBzcHlMaXN0ZW5lciA9IHt9IGFzIFNlcnZlcmxlc3NTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPjtcblxuICAgIHNweUxpc3RlbmVyLnN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc3B5TGlzdGVuZXIsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIG9iamVjdEtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvYmplY3RLZXkuc3RhcnRzV2l0aCh0aGlzLmZ1bmN0aW9uUHJlZml4KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBvYmplY3RLZXkuc3Vic3RyaW5nKFxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvblByZWZpeC5sZW5ndGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoc2VydmljZUtleUZvckZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm94eSBhcyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz47XG4gIH1cblxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmRlYnVnTW9kZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnU1NQWScsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBUcmFja2VyID0ge1xuICBwcm9taXNlUmVzb2x2ZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgcHJvbWlzZVJlamVjdDogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgZmluaXNoZWQ6IGJvb2xlYW47XG4gIHNlcnZpY2VLZXk/OiBzdHJpbmc7XG4gIHNlcnZpY2VLZXlGb3JGdW5jdGlvbj86IHN0cmluZztcbiAgY29uZGl0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgdGltb3V0TXM/OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbiAgcG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZz86IGFueTtcbn07XG5cbnR5cGUgU3B5TWVzc2FnZVN0b3JhZ2UgPSBTcHlNZXNzYWdlICYge1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZztcbiAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nO1xufTtcbiJdfQ==
@@ -1,37 +1,67 @@
1
1
  import { Construct, IConstruct } from 'constructs';
2
2
  export interface ServerlessSpyProps {
3
3
  readonly generateSpyEventsFileLocation?: string;
4
+ readonly spySqsWithNoSubscriptionAndDropAllMessages?: boolean;
5
+ readonly debugMode?: boolean;
6
+ }
7
+ export interface SpyFilter {
8
+ readonly spyLambda?: boolean;
9
+ readonly spySqs?: boolean;
10
+ readonly spySnsTopic?: boolean;
11
+ readonly spySnsSubsription?: boolean;
12
+ readonly spyEventBridge?: boolean;
13
+ readonly spyEventBridgeRule?: boolean;
14
+ readonly spyS3?: boolean;
15
+ readonly spyDynamoDB?: boolean;
4
16
  }
5
17
  export declare class ServerlessSpy extends Construct {
18
+ private props?;
6
19
  private extensionLayer;
7
20
  private table;
8
21
  private webSocketApi;
9
- private ownContructs;
10
- private functionSubscriptionPool;
11
- private functionSubscriptionMain;
12
- private functionsSpied;
22
+ private createdResourcesBySSpy;
23
+ private lambdaSubscriptionPool;
24
+ private lambdaSubscriptionMain;
25
+ private lambdasSpied;
13
26
  private webSocketStage;
14
27
  serviceKeys: string[];
28
+ private spiedNodes;
15
29
  wsUrl: string;
16
- constructor(scope: Construct, id: string, props?: ServerlessSpyProps);
30
+ constructor(scope: Construct, id: string, props?: ServerlessSpyProps | undefined);
31
+ private getDafaultLambdaEnvironmentVariables;
32
+ /**
33
+ * Initalize spying on resources given as parameter.
34
+ * @param nodes Which reources and their children to spy on.
35
+ */
36
+ spyNodes(nodes: IConstruct[]): void;
37
+ /**
38
+ * Initalize spying on resources.
39
+ * @param filter Limit which resources to spy on.
40
+ */
41
+ spy(filter?: SpyFilter): void;
42
+ private internalSpyNodes;
43
+ private finializeSpy;
17
44
  private getExtensionAssetLocation;
18
45
  /**
19
46
  * Write SpyEvents class, which helps with writing the code for tests.
20
47
  * @param fileLocation
21
48
  */
22
49
  private writeSpyEventsClass;
23
- private iterateAllElements;
24
- private spySqs;
50
+ private getAllNodes;
51
+ private getAllNodesRecursive;
52
+ private internalSpyNode;
53
+ private internalSpySpySqsWithNoSubscription;
54
+ private internalSpySqs;
25
55
  private createFunctionForSubscription;
26
56
  private getWsEndpoint;
27
- private spyS3;
28
- private spyDynamodb;
29
- private spyEventBusRule;
30
- private spyEventBus;
31
- private spySnsTopic;
32
- private spySnsSubscription;
57
+ private internalSpyS3;
58
+ private internalSpyDynamodb;
59
+ private internalSpyEventBusRule;
60
+ private internalSpyEventBus;
61
+ private internalSpySnsTopic;
62
+ private internalSpySnsSubscription;
33
63
  private provideFunctionForSubscription;
34
- private spyFunction;
64
+ private internalSpyLambda;
35
65
  getConstructName(construct: IConstruct): string;
36
66
  private getTopic;
37
67
  private getEventBridge;