velocious 1.0.299 → 1.0.301

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.
Files changed (59) hide show
  1. package/build/src/configuration-types.d.ts +1 -1
  2. package/build/src/configuration.d.ts +1 -1
  3. package/build/src/database/drivers/base.d.ts +29 -0
  4. package/build/src/database/drivers/base.d.ts.map +1 -1
  5. package/build/src/database/drivers/base.js +25 -1
  6. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  7. package/build/src/database/drivers/mssql/index.js +10 -1
  8. package/build/src/database/drivers/mssql/sql/upsert.d.ts +5 -0
  9. package/build/src/database/drivers/mssql/sql/upsert.d.ts.map +1 -0
  10. package/build/src/database/drivers/mssql/sql/upsert.js +19 -0
  11. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  12. package/build/src/database/drivers/mysql/index.js +10 -1
  13. package/build/src/database/drivers/mysql/sql/upsert.d.ts +5 -0
  14. package/build/src/database/drivers/mysql/sql/upsert.d.ts.map +1 -0
  15. package/build/src/database/drivers/mysql/sql/upsert.js +11 -0
  16. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  17. package/build/src/database/drivers/pgsql/index.js +10 -1
  18. package/build/src/database/drivers/pgsql/sql/upsert.d.ts +5 -0
  19. package/build/src/database/drivers/pgsql/sql/upsert.d.ts.map +1 -0
  20. package/build/src/database/drivers/pgsql/sql/upsert.js +12 -0
  21. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  22. package/build/src/database/drivers/sqlite/base.js +7 -1
  23. package/build/src/database/drivers/sqlite/sql/upsert.d.ts +5 -0
  24. package/build/src/database/drivers/sqlite/sql/upsert.d.ts.map +1 -0
  25. package/build/src/database/drivers/sqlite/sql/upsert.js +12 -0
  26. package/build/src/database/query/upsert-base.d.ts +59 -0
  27. package/build/src/database/query/upsert-base.d.ts.map +1 -0
  28. package/build/src/database/query/upsert-base.js +87 -0
  29. package/build/src/frontend-model-controller.d.ts.map +1 -1
  30. package/build/src/frontend-model-controller.js +8 -3
  31. package/build/src/frontend-models/websocket-channel.d.ts +9 -1
  32. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  33. package/build/src/frontend-models/websocket-channel.js +17 -3
  34. package/build/src/http-client/websocket-client.d.ts +8 -6
  35. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  36. package/build/src/http-client/websocket-client.js +17 -8
  37. package/build/src/http-server/client/websocket-session.d.ts +62 -5
  38. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  39. package/build/src/http-server/client/websocket-session.js +129 -14
  40. package/build/src/http-server/websocket-channel.d.ts +18 -3
  41. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  42. package/build/src/http-server/websocket-channel.js +18 -6
  43. package/build/src/http-server/websocket-event-log-store.d.ts +198 -0
  44. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -0
  45. package/build/src/http-server/websocket-event-log-store.js +308 -0
  46. package/build/src/http-server/websocket-events-host.d.ts +14 -0
  47. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  48. package/build/src/http-server/websocket-events-host.js +38 -4
  49. package/build/src/http-server/worker-handler/in-process.d.ts +5 -1
  50. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  51. package/build/src/http-server/worker-handler/in-process.js +10 -3
  52. package/build/src/http-server/worker-handler/index.d.ts +5 -1
  53. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  54. package/build/src/http-server/worker-handler/index.js +5 -3
  55. package/build/src/http-server/worker-handler/worker-thread.d.ts +9 -1
  56. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  57. package/build/src/http-server/worker-handler/worker-thread.js +16 -6
  58. package/build/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  export class VelociousHttpServerWebsocketEventsHost {
2
2
  /** @type {Set<import("./worker-handler/index.js").default>} */
3
3
  handlers: Set<import("./worker-handler/index.js").default>;
4
+ publishQueue: Promise<void>;
4
5
  /**
5
6
  * @param {import("./worker-handler/index.js").default} handler - Handler instance.
6
7
  * @returns {() => void} - The register.
@@ -12,6 +13,19 @@ export class VelociousHttpServerWebsocketEventsHost {
12
13
  * @returns {void} - No return value.
13
14
  */
14
15
  publish(channelOrArgs: object | string, payloadArg?: any): void;
16
+ /**
17
+ * @param {object} args - Options object.
18
+ * @param {string} args.channel - Channel name.
19
+ * @param {any} args.payload - Payload data.
20
+ * @returns {Promise<{createdAt: string, id: string} | null>} - Persisted event metadata.
21
+ */
22
+ _persistEventIfNeeded({ channel, payload }: {
23
+ channel: string;
24
+ payload: any;
25
+ }): Promise<{
26
+ createdAt: string;
27
+ id: string;
28
+ } | null>;
15
29
  }
16
30
  export default websocketEventsHost;
17
31
  declare const websocketEventsHost: VelociousHttpServerWebsocketEventsHost;
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-events-host.d.ts","sourceRoot":"","sources":["../../../src/http-server/websocket-events-host.js"],"names":[],"mappings":"AAEA;IAEI,+DAA+D;IAC/D,UADW,GAAG,CAAC,OAAO,2BAA2B,EAAE,OAAO,CAAC,CAClC;IAG3B;;;OAGG;IACH,kBAHW,OAAO,2BAA2B,EAAE,OAAO,GACzC,MAAM,IAAI,CAMtB;IAED;;;;OAIG;IACH,uBAJW,MAAM,GAAG,MAAM,eACf,GAAG,GACD,IAAI,CAYhB;CACF;;AAED,0EAAwE"}
1
+ {"version":3,"file":"websocket-events-host.d.ts","sourceRoot":"","sources":["../../../src/http-server/websocket-events-host.js"],"names":[],"mappings":"AAIA;IAEI,+DAA+D;IAC/D,UADW,GAAG,CAAC,OAAO,2BAA2B,EAAE,OAAO,CAAC,CAClC;IACzB,4BAAqC;IAGvC;;;OAGG;IACH,kBAHW,OAAO,2BAA2B,EAAE,OAAO,GACzC,MAAM,IAAI,CAMtB;IAED;;;;OAIG;IACH,uBAJW,MAAM,GAAG,MAAM,eACf,GAAG,GACD,IAAI,CAyBhB;IAED;;;;;OAKG;IACH,4CAJG;QAAqB,OAAO,EAApB,MAAM;QACI,OAAO,EAAjB,GAAG;KACX,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAkB3D;CACF;;AAED,0EAAwE"}
@@ -1,8 +1,10 @@
1
1
  // @ts-check
2
+ import { websocketEventLogStoreForConfiguration } from "./websocket-event-log-store.js";
2
3
  export class VelociousHttpServerWebsocketEventsHost {
3
4
  constructor() {
4
5
  /** @type {Set<import("./worker-handler/index.js").default>} */
5
6
  this.handlers = new Set();
7
+ this.publishQueue = Promise.resolve();
6
8
  }
7
9
  /**
8
10
  * @param {import("./worker-handler/index.js").default} handler - Handler instance.
@@ -23,11 +25,43 @@ export class VelociousHttpServerWebsocketEventsHost {
23
25
  : /** @type {{channel: string, payload: any}} */ (channelOrArgs);
24
26
  const channel = publishArgs.channel;
25
27
  const payload = publishArgs.payload;
26
- for (const handler of this.handlers) {
27
- handler.dispatchWebsocketEvent({ channel, payload });
28
- }
28
+ this.publishQueue = this.publishQueue
29
+ .then(async () => {
30
+ const persistedEvent = await this._persistEventIfNeeded({ channel, payload });
31
+ for (const handler of this.handlers) {
32
+ handler.dispatchWebsocketEvent({
33
+ channel,
34
+ createdAt: persistedEvent?.createdAt,
35
+ eventId: persistedEvent?.id,
36
+ payload
37
+ });
38
+ }
39
+ })
40
+ .catch((error) => {
41
+ console.error("Failed to publish websocket event", error);
42
+ });
43
+ }
44
+ /**
45
+ * @param {object} args - Options object.
46
+ * @param {string} args.channel - Channel name.
47
+ * @param {any} args.payload - Payload data.
48
+ * @returns {Promise<{createdAt: string, id: string} | null>} - Persisted event metadata.
49
+ */
50
+ async _persistEventIfNeeded({ channel, payload }) {
51
+ const handler = this.handlers.values().next().value;
52
+ if (!handler?.configuration)
53
+ return null;
54
+ const websocketEventLogStore = websocketEventLogStoreForConfiguration(handler.configuration);
55
+ const shouldPersist = await websocketEventLogStore.shouldPersistChannel(channel);
56
+ if (!shouldPersist)
57
+ return null;
58
+ const persistedEvent = await websocketEventLogStore.appendEvent({ channel, payload });
59
+ return {
60
+ createdAt: persistedEvent.createdAt,
61
+ id: persistedEvent.id
62
+ };
29
63
  }
30
64
  }
31
65
  const websocketEventsHost = new VelociousHttpServerWebsocketEventsHost();
32
66
  export default websocketEventsHost;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL3dlYnNvY2tldC1ldmVudHMtaG9zdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosTUFBTSxPQUFPLHNDQUFzQztJQUNqRDtRQUNFLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxPQUFPO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFMUIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVTtRQUMvQixNQUFNLFdBQVcsR0FBRyxPQUFPLGFBQWEsS0FBSyxRQUFRO1lBQ25ELENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztZQUMvQyxDQUFDLENBQUMsOENBQThDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1FBQ25DLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUE7UUFFbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDcEQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRSxDQUFBO0FBRXhFLGVBQWUsbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJXZWJzb2NrZXRFdmVudHNIb3N0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqIEB0eXBlIHtTZXQ8aW1wb3J0KFwiLi93b3JrZXItaGFuZGxlci9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gKi9cbiAgICB0aGlzLmhhbmRsZXJzID0gbmV3IFNldCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3dvcmtlci1oYW5kbGVyL2luZGV4LmpzXCIpLmRlZmF1bHR9IGhhbmRsZXIgLSBIYW5kbGVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7KCkgPT4gdm9pZH0gLSBUaGUgcmVnaXN0ZXIuXG4gICAqL1xuICByZWdpc3RlcihoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVycy5hZGQoaGFuZGxlcilcblxuICAgIHJldHVybiAoKSA9PiB0aGlzLmhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0IHwgc3RyaW5nfSBjaGFubmVsT3JBcmdzIC0gQ2hhbm5lbCBuYW1lIG9yIG9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2FueX0gW3BheWxvYWRBcmddIC0gUGF5bG9hZCBkYXRhIHdoZW4gY2hhbm5lbCBpcyBwYXNzZWQgc2VwYXJhdGVseS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcHVibGlzaChjaGFubmVsT3JBcmdzLCBwYXlsb2FkQXJnKSB7XG4gICAgY29uc3QgcHVibGlzaEFyZ3MgPSB0eXBlb2YgY2hhbm5lbE9yQXJncyA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyB7Y2hhbm5lbDogY2hhbm5lbE9yQXJncywgcGF5bG9hZDogcGF5bG9hZEFyZ31cbiAgICAgIDogLyoqIEB0eXBlIHt7Y2hhbm5lbDogc3RyaW5nLCBwYXlsb2FkOiBhbnl9fSAqLyAoY2hhbm5lbE9yQXJncylcbiAgICBjb25zdCBjaGFubmVsID0gcHVibGlzaEFyZ3MuY2hhbm5lbFxuICAgIGNvbnN0IHBheWxvYWQgPSBwdWJsaXNoQXJncy5wYXlsb2FkXG5cbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgaGFuZGxlci5kaXNwYXRjaFdlYnNvY2tldEV2ZW50KHtjaGFubmVsLCBwYXlsb2FkfSlcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgd2Vic29ja2V0RXZlbnRzSG9zdCA9IG5ldyBWZWxvY2lvdXNIdHRwU2VydmVyV2Vic29ja2V0RXZlbnRzSG9zdCgpXG5cbmV4cG9ydCBkZWZhdWx0IHdlYnNvY2tldEV2ZW50c0hvc3RcbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL3dlYnNvY2tldC1ldmVudHMtaG9zdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFFckYsTUFBTSxPQUFPLHNDQUFzQztJQUNqRDtRQUNFLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxPQUFPO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFMUIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVTtRQUMvQixNQUFNLFdBQVcsR0FBRyxPQUFPLGFBQWEsS0FBSyxRQUFRO1lBQ25ELENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztZQUMvQyxDQUFDLENBQUMsOENBQThDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1FBQ25DLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUE7UUFFbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWTthQUNsQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1lBRTNFLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7b0JBQzdCLE9BQU87b0JBQ1AsU0FBUyxFQUFFLGNBQWMsRUFBRSxTQUFTO29CQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUU7b0JBQzNCLE9BQU87aUJBQ1IsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUMzRCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUM7UUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUE7UUFFbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFeEMsTUFBTSxzQkFBc0IsR0FBRyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDNUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVoRixJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRS9CLE1BQU0sY0FBYyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFFbkYsT0FBTztZQUNMLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxFQUFFLEVBQUUsY0FBYyxDQUFDLEVBQUU7U0FDdEIsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRSxDQUFBO0FBRXhFLGVBQWUsbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt3ZWJzb2NrZXRFdmVudExvZ1N0b3JlRm9yQ29uZmlndXJhdGlvbn0gZnJvbSBcIi4vd2Vic29ja2V0LWV2ZW50LWxvZy1zdG9yZS5qc1wiXG5cbmV4cG9ydCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyV2Vic29ja2V0RXZlbnRzSG9zdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKiBAdHlwZSB7U2V0PGltcG9ydChcIi4vd29ya2VyLWhhbmRsZXIvaW5kZXguanNcIikuZGVmYXVsdD59ICovXG4gICAgdGhpcy5oYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgIHRoaXMucHVibGlzaFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vd29ya2VyLWhhbmRsZXIvaW5kZXguanNcIikuZGVmYXVsdH0gaGFuZGxlciAtIEhhbmRsZXIgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfSAtIFRoZSByZWdpc3Rlci5cbiAgICovXG4gIHJlZ2lzdGVyKGhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXJzLmFkZChoYW5kbGVyKVxuXG4gICAgcmV0dXJuICgpID0+IHRoaXMuaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmd9IGNoYW5uZWxPckFyZ3MgLSBDaGFubmVsIG5hbWUgb3Igb3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7YW55fSBbcGF5bG9hZEFyZ10gLSBQYXlsb2FkIGRhdGEgd2hlbiBjaGFubmVsIGlzIHBhc3NlZCBzZXBhcmF0ZWx5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwdWJsaXNoKGNoYW5uZWxPckFyZ3MsIHBheWxvYWRBcmcpIHtcbiAgICBjb25zdCBwdWJsaXNoQXJncyA9IHR5cGVvZiBjaGFubmVsT3JBcmdzID09PSBcInN0cmluZ1wiXG4gICAgICA/IHtjaGFubmVsOiBjaGFubmVsT3JBcmdzLCBwYXlsb2FkOiBwYXlsb2FkQXJnfVxuICAgICAgOiAvKiogQHR5cGUge3tjaGFubmVsOiBzdHJpbmcsIHBheWxvYWQ6IGFueX19ICovIChjaGFubmVsT3JBcmdzKVxuICAgIGNvbnN0IGNoYW5uZWwgPSBwdWJsaXNoQXJncy5jaGFubmVsXG4gICAgY29uc3QgcGF5bG9hZCA9IHB1Ymxpc2hBcmdzLnBheWxvYWRcblxuICAgIHRoaXMucHVibGlzaFF1ZXVlID0gdGhpcy5wdWJsaXNoUXVldWVcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkRXZlbnQgPSBhd2FpdCB0aGlzLl9wZXJzaXN0RXZlbnRJZk5lZWRlZCh7Y2hhbm5lbCwgcGF5bG9hZH0pXG5cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyLmRpc3BhdGNoV2Vic29ja2V0RXZlbnQoe1xuICAgICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogcGVyc2lzdGVkRXZlbnQ/LmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIGV2ZW50SWQ6IHBlcnNpc3RlZEV2ZW50Py5pZCxcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHB1Ymxpc2ggd2Vic29ja2V0IGV2ZW50XCIsIGVycm9yKVxuICAgICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge2FueX0gYXJncy5wYXlsb2FkIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7Y3JlYXRlZEF0OiBzdHJpbmcsIGlkOiBzdHJpbmd9IHwgbnVsbD59IC0gUGVyc2lzdGVkIGV2ZW50IG1ldGFkYXRhLlxuICAgKi9cbiAgYXN5bmMgX3BlcnNpc3RFdmVudElmTmVlZGVkKHtjaGFubmVsLCBwYXlsb2FkfSkge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXJzLnZhbHVlcygpLm5leHQoKS52YWx1ZVxuXG4gICAgaWYgKCFoYW5kbGVyPy5jb25maWd1cmF0aW9uKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3Qgd2Vic29ja2V0RXZlbnRMb2dTdG9yZSA9IHdlYnNvY2tldEV2ZW50TG9nU3RvcmVGb3JDb25maWd1cmF0aW9uKGhhbmRsZXIuY29uZmlndXJhdGlvbilcbiAgICBjb25zdCBzaG91bGRQZXJzaXN0ID0gYXdhaXQgd2Vic29ja2V0RXZlbnRMb2dTdG9yZS5zaG91bGRQZXJzaXN0Q2hhbm5lbChjaGFubmVsKVxuXG4gICAgaWYgKCFzaG91bGRQZXJzaXN0KSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcGVyc2lzdGVkRXZlbnQgPSBhd2FpdCB3ZWJzb2NrZXRFdmVudExvZ1N0b3JlLmFwcGVuZEV2ZW50KHtjaGFubmVsLCBwYXlsb2FkfSlcblxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkQXQ6IHBlcnNpc3RlZEV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgIGlkOiBwZXJzaXN0ZWRFdmVudC5pZFxuICAgIH1cbiAgfVxufVxuXG5jb25zdCB3ZWJzb2NrZXRFdmVudHNIb3N0ID0gbmV3IFZlbG9jaW91c0h0dHBTZXJ2ZXJXZWJzb2NrZXRFdmVudHNIb3N0KClcblxuZXhwb3J0IGRlZmF1bHQgd2Vic29ja2V0RXZlbnRzSG9zdFxuIl19
@@ -36,11 +36,15 @@ export default class VelociousHttpServerInProcessHandler {
36
36
  /**
37
37
  * @param {object} args - Options object.
38
38
  * @param {string} args.channel - Channel name.
39
+ * @param {string} [args.createdAt] - Event creation time.
40
+ * @param {string} [args.eventId] - Event identifier.
39
41
  * @param {any} args.payload - Payload data.
40
42
  * @returns {void}
41
43
  */
42
- dispatchWebsocketEvent({ channel, payload }: {
44
+ dispatchWebsocketEvent({ channel, createdAt, eventId, payload }: {
43
45
  channel: string;
46
+ createdAt?: string | undefined;
47
+ eventId?: string | undefined;
44
48
  payload: any;
45
49
  }): void;
46
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"in-process.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/in-process.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH;IACE;;;;OAIG;IACH,4CAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,WAAW,EAAxB,MAAM;KAChB,EAWA;IATC,wDAAkC;IAElC,wGAAwG;IACxG,SADW,MAAM,CAAC,MAAM,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAA;KAAC,CAAC,CACnF;IAEjB,eAA8B;IAC9B,oBAA8B;IAC9B,qCAAuF;IACvF,mBAAsB;IAGxB,+BAA+B;IAC/B,SADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED;;;OAGG;IACH,kCAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CAwChB;IAED,+BAA+B;IAC/B,QADc,OAAO,CAAC,IAAI,CAAC,CAc1B;IAED;;;;;OAKG;IACH,6CAJG;QAAqB,OAAO,EAApB,MAAM;QACI,OAAO,EAAjB,GAAG;KACX,GAAU,IAAI,CAIhB;CACF;mBAtGkB,oBAAoB;mBACpB,iBAAiB"}
1
+ {"version":3,"file":"in-process.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/in-process.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH;IACE;;;;OAIG;IACH,4CAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,WAAW,EAAxB,MAAM;KAChB,EAWA;IATC,wDAAkC;IAElC,wGAAwG;IACxG,SADW,MAAM,CAAC,MAAM,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAA;KAAC,CAAC,CACnF;IAEjB,eAA8B;IAC9B,oBAA8B;IAC9B,qCAAuF;IACvF,mBAAsB;IAGxB,+BAA+B;IAC/B,SADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED;;;OAGG;IACH,kCAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CAwChB;IAED,+BAA+B;IAC/B,QADc,OAAO,CAAC,IAAI,CAAC,CAc1B;IAED;;;;;;;OAOG;IACH,iEANG;QAAqB,OAAO,EAApB,MAAM;QACQ,SAAS;QACT,OAAO;QACX,OAAO,EAAjB,GAAG;KACX,GAAU,IAAI,CAUhB;CACF;mBA9GkB,oBAAoB;mBACpB,iBAAiB"}
@@ -80,11 +80,18 @@ export default class VelociousHttpServerInProcessHandler {
80
80
  /**
81
81
  * @param {object} args - Options object.
82
82
  * @param {string} args.channel - Channel name.
83
+ * @param {string} [args.createdAt] - Event creation time.
84
+ * @param {string} [args.eventId] - Event identifier.
83
85
  * @param {any} args.payload - Payload data.
84
86
  * @returns {void}
85
87
  */
86
- dispatchWebsocketEvent({ channel, payload }) {
87
- websocketEventsHost.publish({ channel, payload });
88
+ dispatchWebsocketEvent({ channel, createdAt, eventId, payload }) {
89
+ for (const { httpClient } of Object.values(this.clients)) {
90
+ const session = httpClient.websocketSession;
91
+ if (!session)
92
+ continue;
93
+ void session.sendEvent(channel, payload, { createdAt, eventId });
94
+ }
88
95
  }
89
96
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tcHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci9pbi1wcm9jZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBRTdEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQ0FBbUM7SUFDdEQ7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsV0FBVyxFQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLHdHQUF3RztRQUN4RyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZGLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO0lBQ3hCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsWUFBWTtRQUM5QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFBO1FBRTVDLE1BQU0sVUFBVSxHQUFHLElBQUks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ZW50IGZyb20gXCIuLi9jbGllbnQvaW5kZXguanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCB3ZWJzb2NrZXRFdmVudHNIb3N0IGZyb20gXCIuLi93ZWJzb2NrZXQtZXZlbnRzLWhvc3QuanNcIlxuXG4vKipcbiAqIEluLXByb2Nlc3Mgd29ya2VyIGhhbmRsZXIgdGhhdCBwcm9jZXNzZXMgSFRUUCByZXF1ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWRcbiAqIGluc3RlYWQgb2Ygc3Bhd25pbmcgYSBXb3JrZXIgdGhyZWFkLiBUaGlzIGFsbG93cyB0aGUgdGVzdCBydW5uZXIncyBkYXRhYmFzZVxuICogY29ubmVjdGlvbiBjb250ZXh0IHRvIGJlIHNoYXJlZCB3aXRoIEhUVFAgcmVxdWVzdCBoYW5kbGVycywgc28gbW9kZWwtY3JlYXRlZFxuICogcmVjb3JkcyBpbiB0ZXN0cyBhcmUgdmlzaWJsZSB0byBIVFRQIGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlckluUHJvY2Vzc0hhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLndvcmtlckNvdW50IC0gV29ya2VyIGNvdW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIHdvcmtlckNvdW50fSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwge2h0dHBDbGllbnQ6IENsaWVudCwgc2VydmVyQ2xpZW50OiBpbXBvcnQoXCIuLi9zZXJ2ZXItY2xpZW50LmpzXCIpLmRlZmF1bHR9Pn0gKi9cbiAgICB0aGlzLmNsaWVudHMgPSB7fVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy53b3JrZXJDb3VudCA9IHdvcmtlckNvdW50XG4gICAgdGhpcy51bnJlZ2lzdGVyRnJvbUV2ZW50c0hvc3QgPSB3ZWJzb2NrZXRFdmVudHNIb3N0LnJlZ2lzdGVyKC8qKiBAdHlwZSB7YW55fSAqLyAodGhpcykpXG4gICAgdGhpcy5fc3RvcHBpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBgSW4tcHJvY2VzcyBoYW5kbGVyICR7dGhpcy53b3JrZXJDb3VudH0gc3RhcnRlZGApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZXJ2ZXItY2xpZW50LmpzXCIpLmRlZmF1bHR9IHNlcnZlckNsaWVudCAtIFNlcnZlciBjbGllbnQgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYWRkU29ja2V0Q29ubmVjdGlvbihzZXJ2ZXJDbGllbnQpIHtcbiAgICBjb25zdCBjbGllbnRDb3VudCA9IHNlcnZlckNsaWVudC5jbGllbnRDb3VudFxuXG4gICAgY29uc3QgaHR0cENsaWVudCA9IG5ldyBDbGllbnQoe1xuICAgICAgY2xpZW50Q291bnQsXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICByZW1vdGVBZGRyZXNzOiBzZXJ2ZXJDbGllbnQucmVtb3RlQWRkcmVzc1xuICAgIH0pXG5cbiAgICBodHRwQ2xpZW50LmV2ZW50cy5vbihcIm91dHB1dFwiLCAob3V0cHV0KSA9PiB7XG4gICAgICBpZiAob3V0cHV0ICE9PSBudWxsICYmIG91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZvaWQgc2VydmVyQ2xpZW50LnNlbmQob3V0cHV0KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZGVsaXZlciBjbGllbnQgb3V0cHV0XCIsIHtjbGllbnRDb3VudH0sIGVycm9yXSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaHR0cENsaWVudC5ldmVudHMub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICB2b2lkIHNlcnZlckNsaWVudC5lbmQoKVxuICAgICAgZGVsZXRlIHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF1cbiAgICB9KVxuXG4gICAgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XSA9IHtodHRwQ2xpZW50LCBzZXJ2ZXJDbGllbnR9XG5cbiAgICAvLyBDcmVhdGUgYSBtZXNzYWdlLXBvcnQgc2hpbSBzbyBTZXJ2ZXJDbGllbnQub25Tb2NrZXREYXRhIGNhbiByb3V0ZSBkYXRhXG4gICAgLy8gdG8gdGhlIGluLXByb2Nlc3MgSFRUUCBDbGllbnQgd2l0aG91dCBuZWVkaW5nIGEgcmVhbCB3b3JrZXIgdGhyZWFkLlxuICAgIGNvbnN0IG1lc3NhZ2VQb3J0U2hpbSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwid29ya2VyX3RocmVhZHNcIikuV29ya2VyfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoe1xuICAgICAgcG9zdE1lc3NhZ2U6ICgvKiogQHR5cGUge3tjb21tYW5kOiBzdHJpbmcsIGNodW5rPzogQnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZywgY2xpZW50Q291bnQ/OiBudW1iZXJ9fSAqLyBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLmNvbW1hbmQgPT09IFwiY2xpZW50V3JpdGVcIiAmJiBkYXRhLmNodW5rKSB7XG4gICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jaHVuayA9PT0gXCJzdHJpbmdcIiA/IEJ1ZmZlci5mcm9tKGRhdGEuY2h1bmspIDogQnVmZmVyLmZyb20oZGF0YS5jaHVuaylcblxuICAgICAgICAgIGh0dHBDbGllbnQub25Xcml0ZShjaHVuaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKVxuXG4gICAgc2VydmVyQ2xpZW50LnNldFdvcmtlcihtZXNzYWdlUG9ydFNoaW0pXG4gICAgc2VydmVyQ2xpZW50Lmxpc3RlbigpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5fc3RvcHBpbmcgPSB0cnVlXG5cbiAgICBmb3IgKGNvbnN0IHtzZXJ2ZXJDbGllbnR9IG9mIE9iamVjdC52YWx1ZXModGhpcy5jbGllbnRzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdm9pZCBzZXJ2ZXJDbGllbnQuZW5kKClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgdG8gY2xvc2UgY2xpZW50IGR1cmluZyBzaHV0ZG93blwiLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudHMgPSB7fVxuICAgIHRoaXMudW5yZWdpc3RlckZyb21FdmVudHNIb3N0Py4oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnBheWxvYWQgLSBQYXlsb2FkIGRhdGEuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZGlzcGF0Y2hXZWJzb2NrZXRFdmVudCh7Y2hhbm5lbCwgcGF5bG9hZH0pIHtcbiAgICB3ZWJzb2NrZXRFdmVudHNIb3N0LnB1Ymxpc2goe2NoYW5uZWwsIHBheWxvYWR9KVxuICB9XG59XG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tcHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci9pbi1wcm9jZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBRTdEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQ0FBbUM7SUFDdEQ7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsV0FBVyxFQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLHdHQUF3RztRQUN4RyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZGLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO0lBQ3hCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsWUFBWTtRQUM5QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFBO1FBRTVDLE1BQU0sVUFBVSxHQUFHLElBQUks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QUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQTtZQUUzQyxJQUFJLENBQUMsT0FBTztnQkFBRSxTQUFRO1lBRXRCLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDaEUsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ2xpZW50IGZyb20gXCIuLi9jbGllbnQvaW5kZXguanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCB3ZWJzb2NrZXRFdmVudHNIb3N0IGZyb20gXCIuLi93ZWJzb2NrZXQtZXZlbnRzLWhvc3QuanNcIlxuXG4vKipcbiAqIEluLXByb2Nlc3Mgd29ya2VyIGhhbmRsZXIgdGhhdCBwcm9jZXNzZXMgSFRUUCByZXF1ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWRcbiAqIGluc3RlYWQgb2Ygc3Bhd25pbmcgYSBXb3JrZXIgdGhyZWFkLiBUaGlzIGFsbG93cyB0aGUgdGVzdCBydW5uZXIncyBkYXRhYmFzZVxuICogY29ubmVjdGlvbiBjb250ZXh0IHRvIGJlIHNoYXJlZCB3aXRoIEhUVFAgcmVxdWVzdCBoYW5kbGVycywgc28gbW9kZWwtY3JlYXRlZFxuICogcmVjb3JkcyBpbiB0ZXN0cyBhcmUgdmlzaWJsZSB0byBIVFRQIGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlckluUHJvY2Vzc0hhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLndvcmtlckNvdW50IC0gV29ya2VyIGNvdW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIHdvcmtlckNvdW50fSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwge2h0dHBDbGllbnQ6IENsaWVudCwgc2VydmVyQ2xpZW50OiBpbXBvcnQoXCIuLi9zZXJ2ZXItY2xpZW50LmpzXCIpLmRlZmF1bHR9Pn0gKi9cbiAgICB0aGlzLmNsaWVudHMgPSB7fVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy53b3JrZXJDb3VudCA9IHdvcmtlckNvdW50XG4gICAgdGhpcy51bnJlZ2lzdGVyRnJvbUV2ZW50c0hvc3QgPSB3ZWJzb2NrZXRFdmVudHNIb3N0LnJlZ2lzdGVyKC8qKiBAdHlwZSB7YW55fSAqLyAodGhpcykpXG4gICAgdGhpcy5fc3RvcHBpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBgSW4tcHJvY2VzcyBoYW5kbGVyICR7dGhpcy53b3JrZXJDb3VudH0gc3RhcnRlZGApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZXJ2ZXItY2xpZW50LmpzXCIpLmRlZmF1bHR9IHNlcnZlckNsaWVudCAtIFNlcnZlciBjbGllbnQgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYWRkU29ja2V0Q29ubmVjdGlvbihzZXJ2ZXJDbGllbnQpIHtcbiAgICBjb25zdCBjbGllbnRDb3VudCA9IHNlcnZlckNsaWVudC5jbGllbnRDb3VudFxuXG4gICAgY29uc3QgaHR0cENsaWVudCA9IG5ldyBDbGllbnQoe1xuICAgICAgY2xpZW50Q291bnQsXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICByZW1vdGVBZGRyZXNzOiBzZXJ2ZXJDbGllbnQucmVtb3RlQWRkcmVzc1xuICAgIH0pXG5cbiAgICBodHRwQ2xpZW50LmV2ZW50cy5vbihcIm91dHB1dFwiLCAob3V0cHV0KSA9PiB7XG4gICAgICBpZiAob3V0cHV0ICE9PSBudWxsICYmIG91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZvaWQgc2VydmVyQ2xpZW50LnNlbmQob3V0cHV0KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZGVsaXZlciBjbGllbnQgb3V0cHV0XCIsIHtjbGllbnRDb3VudH0sIGVycm9yXSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaHR0cENsaWVudC5ldmVudHMub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICB2b2lkIHNlcnZlckNsaWVudC5lbmQoKVxuICAgICAgZGVsZXRlIHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF1cbiAgICB9KVxuXG4gICAgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XSA9IHtodHRwQ2xpZW50LCBzZXJ2ZXJDbGllbnR9XG5cbiAgICAvLyBDcmVhdGUgYSBtZXNzYWdlLXBvcnQgc2hpbSBzbyBTZXJ2ZXJDbGllbnQub25Tb2NrZXREYXRhIGNhbiByb3V0ZSBkYXRhXG4gICAgLy8gdG8gdGhlIGluLXByb2Nlc3MgSFRUUCBDbGllbnQgd2l0aG91dCBuZWVkaW5nIGEgcmVhbCB3b3JrZXIgdGhyZWFkLlxuICAgIGNvbnN0IG1lc3NhZ2VQb3J0U2hpbSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwid29ya2VyX3RocmVhZHNcIikuV29ya2VyfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoe1xuICAgICAgcG9zdE1lc3NhZ2U6ICgvKiogQHR5cGUge3tjb21tYW5kOiBzdHJpbmcsIGNodW5rPzogQnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZywgY2xpZW50Q291bnQ/OiBudW1iZXJ9fSAqLyBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLmNvbW1hbmQgPT09IFwiY2xpZW50V3JpdGVcIiAmJiBkYXRhLmNodW5rKSB7XG4gICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jaHVuayA9PT0gXCJzdHJpbmdcIiA/IEJ1ZmZlci5mcm9tKGRhdGEuY2h1bmspIDogQnVmZmVyLmZyb20oZGF0YS5jaHVuaylcblxuICAgICAgICAgIGh0dHBDbGllbnQub25Xcml0ZShjaHVuaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKVxuXG4gICAgc2VydmVyQ2xpZW50LnNldFdvcmtlcihtZXNzYWdlUG9ydFNoaW0pXG4gICAgc2VydmVyQ2xpZW50Lmxpc3RlbigpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5fc3RvcHBpbmcgPSB0cnVlXG5cbiAgICBmb3IgKGNvbnN0IHtzZXJ2ZXJDbGllbnR9IG9mIE9iamVjdC52YWx1ZXModGhpcy5jbGllbnRzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdm9pZCBzZXJ2ZXJDbGllbnQuZW5kKClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgdG8gY2xvc2UgY2xpZW50IGR1cmluZyBzaHV0ZG93blwiLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudHMgPSB7fVxuICAgIHRoaXMudW5yZWdpc3RlckZyb21FdmVudHNIb3N0Py4oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5jcmVhdGVkQXRdIC0gRXZlbnQgY3JlYXRpb24gdGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmV2ZW50SWRdIC0gRXZlbnQgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHthbnl9IGFyZ3MucGF5bG9hZCAtIFBheWxvYWQgZGF0YS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBkaXNwYXRjaFdlYnNvY2tldEV2ZW50KHtjaGFubmVsLCBjcmVhdGVkQXQsIGV2ZW50SWQsIHBheWxvYWR9KSB7XG4gICAgZm9yIChjb25zdCB7aHR0cENsaWVudH0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNsaWVudHMpKSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gaHR0cENsaWVudC53ZWJzb2NrZXRTZXNzaW9uXG5cbiAgICAgIGlmICghc2Vzc2lvbikgY29udGludWVcblxuICAgICAgdm9pZCBzZXNzaW9uLnNlbmRFdmVudChjaGFubmVsLCBwYXlsb2FkLCB7Y3JlYXRlZEF0LCBldmVudElkfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -62,11 +62,15 @@ export default class VelociousHttpServerWorker {
62
62
  /**
63
63
  * @param {object} args - Options object.
64
64
  * @param {string} args.channel - Channel name.
65
+ * @param {string} [args.createdAt] - Event creation time.
66
+ * @param {string} [args.eventId] - Event identifier.
65
67
  * @param {any} args.payload - Payload data.
66
68
  * @returns {void} - No return value.
67
69
  */
68
- dispatchWebsocketEvent({ channel, payload }: {
70
+ dispatchWebsocketEvent({ channel, createdAt, eventId, payload }: {
69
71
  channel: string;
72
+ createdAt?: string | undefined;
73
+ eventId?: string | undefined;
70
74
  payload: any;
71
75
  }): void;
72
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/index.js"],"names":[],"mappings":"AAmCA;IACE;;;;OAIG;IACH,4CAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,WAAW,EAAxB,MAAM;KAChB,EAWA;IATC,wDAAkC;IAElC,oEAAoE;IACpE,SADW,MAAM,CAAC,MAAM,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAC/C;IAEjB,eAA8B;IAC9B,oBAA8B;IAC9B,qCAAkE;IAClE,mBAAsB;IAGxB,sBAKC;IAHG,2DAA8B;IAKlC,8BAgBC;IAXC,2BAOE;IAMJ;;;OAGG;IACH,4BAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CAYhB;IAED;;OAEG;IACH,gBAAiB,OAFN,GAEW,WAIrB;IAED;;;OAGG;IACH,eAAgB,MAHL,MAGS,KAFP,IAAI,CAgBhB;IAbC,gCAAsB;IAYtB,6EAAwB;IAG1B;;OAEG;IACH,oBAFa,IAAI,CAahB;IAED;;;;;;;;OAQG;IACH,kBAAmB,MAPhB;QAAqB,OAAO,EAApB,MAAM;QACQ,WAAW;QACE,MAAM;QACnB,OAAO;QACV,OAAO,GAAlB,GAAG;KAGS,KAFV,IAAI,CAqEhB;IAED;;OAEG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;;OAKG;IACH,6CAJG;QAAqB,OAAO,EAApB,MAAM;QACI,OAAO,EAAjB,GAAG;KACX,GAAU,IAAI,CAOhB;CACF;mBArPkB,iBAAiB;uBACf,gBAAgB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/index.js"],"names":[],"mappings":"AAmCA;IACE;;;;OAIG;IACH,4CAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,WAAW,EAAxB,MAAM;KAChB,EAWA;IATC,wDAAkC;IAElC,oEAAoE;IACpE,SADW,MAAM,CAAC,MAAM,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAC/C;IAEjB,eAA8B;IAC9B,oBAA8B;IAC9B,qCAAkE;IAClE,mBAAsB;IAGxB,sBAKC;IAHG,2DAA8B;IAKlC,8BAgBC;IAXC,2BAOE;IAMJ;;;OAGG;IACH,4BAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CAYhB;IAED;;OAEG;IACH,gBAAiB,OAFN,GAEW,WAIrB;IAED;;;OAGG;IACH,eAAgB,MAHL,MAGS,KAFP,IAAI,CAgBhB;IAbC,gCAAsB;IAYtB,6EAAwB;IAG1B;;OAEG;IACH,oBAFa,IAAI,CAahB;IAED;;;;;;;;OAQG;IACH,kBAAmB,MAPhB;QAAqB,OAAO,EAApB,MAAM;QACQ,WAAW;QACE,MAAM;QACnB,OAAO;QACV,OAAO,GAAlB,GAAG;KAGS,KAFV,IAAI,CAqEhB;IAED;;OAEG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;;;;OAOG;IACH,iEANG;QAAqB,OAAO,EAApB,MAAM;QACQ,SAAS;QACT,OAAO;QACX,OAAO,EAAjB,GAAG;KACX,GAAU,IAAI,CAOhB;CACF;mBAvPkB,iBAAiB;uBACf,gBAAgB"}
@@ -207,14 +207,16 @@ export default class VelociousHttpServerWorker {
207
207
  /**
208
208
  * @param {object} args - Options object.
209
209
  * @param {string} args.channel - Channel name.
210
+ * @param {string} [args.createdAt] - Event creation time.
211
+ * @param {string} [args.eventId] - Event identifier.
210
212
  * @param {any} args.payload - Payload data.
211
213
  * @returns {void} - No return value.
212
214
  */
213
- dispatchWebsocketEvent({ channel, payload }) {
215
+ dispatchWebsocketEvent({ channel, createdAt, eventId, payload }) {
214
216
  // Test and shutdown paths can leave a registered handler without a live worker-thread transport.
215
217
  if (!this.worker || typeof this.worker.postMessage !== "function")
216
218
  return;
217
- this.worker.postMessage({ channel, command: "websocketEvent", payload });
219
+ this.worker.postMessage({ channel, command: "websocketEvent", createdAt, eventId, payload });
218
220
  }
219
221
  }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvd29ya2VyLWhhbmRsZXIvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQTtBQUNyRCxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBRTdEOzs7Ozs7R0FNRztBQUNILFNBQVMsc0JBQXNCLENBQUMsSUFBSTtJQUNsQyxNQUFNLEVBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFDLEdBQUcsSUFBSSxDQUFBO0lBRTlCLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sTUFBTSxDQUFBO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFDN0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1FBQ2YsQ0FBQyxDQUFDLENBQUMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFbEUsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLElBQUksRUFBRSxVQUFVO1NBQ2pCO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHlCQUF5QjtJQUM1Qzs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEMsb0VBQW9FO1FBQ3BF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c0IsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUM7UUFDdkMsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssVUFBVTtZQUFFLE9BQU07UUFFekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDeEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQge1dvcmtlcn0gZnJvbSBcIndvcmtlcl90aHJlYWRzXCJcbmltcG9ydCBlbnN1cmVFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvZW5zdXJlLWVycm9yLmpzXCJcbmltcG9ydCB3ZWJzb2NrZXRFdmVudHNIb3N0IGZyb20gXCIuLi93ZWJzb2NrZXQtZXZlbnRzLWhvc3QuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gV29ya2VyIG1lc3NhZ2UgcGF5bG9hZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLmNvbW1hbmQgLSBDb21tYW5kIG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2RhdGEuY2xpZW50Q291bnRdIC0gQ2xpZW50IGNvdW50LlxuICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBbZGF0YS5vdXRwdXRdIC0gT3V0cHV0IGNodW5rLlxuICogQHJldHVybnMge29iamVjdH0gLSBMb2ctc2FmZSBtZXNzYWdlIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZVdvcmtlck1lc3NhZ2UoZGF0YSkge1xuICBjb25zdCB7b3V0cHV0LCAuLi5yZXN0fSA9IGRhdGFcblxuICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdFxuICB9XG5cbiAgY29uc3Qgb3V0cHV0VHlwZSA9IHR5cGVvZiBvdXRwdXRcbiAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gdHlwZW9mIG91dHB1dCA9PT0gXCJzdHJpbmdcIlxuICAgID8gb3V0cHV0Lmxlbmd0aFxuICAgIDogKG91dHB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBvdXRwdXQuYnl0ZUxlbmd0aCA6IHVuZGVmaW5lZClcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc3QsXG4gICAgb3V0cHV0OiB7XG4gICAgICBsZW5ndGg6IG91dHB1dExlbmd0aCxcbiAgICAgIHR5cGU6IG91dHB1dFR5cGVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlcldvcmtlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3Mud29ya2VyQ291bnQgLSBXb3JrZXIgY291bnQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgd29ya2VyQ291bnR9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyLCBpbXBvcnQoXCIuLi9zZXJ2ZXItY2xpZW50LmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIHRoaXMuY2xpZW50cyA9IHt9XG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLndvcmtlckNvdW50ID0gd29ya2VyQ291bnRcbiAgICB0aGlzLnVucmVnaXN0ZXJGcm9tRXZlbnRzSG9zdCA9IHdlYnNvY2tldEV2ZW50c0hvc3QucmVnaXN0ZXIodGhpcylcbiAgICB0aGlzLl9zdG9wcGluZyA9IGZhbHNlXG4gIH1cblxuICBzdGFydCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMub25TdGFydENhbGxiYWNrID0gcmVzb2x2ZVxuICAgICAgdGhpcy5fc3Bhd25Xb3JrZXIoKVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBfc3Bhd25Xb3JrZXIoKSB7XG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZGVidWdcbiAgICBjb25zdCBkaXJlY3RvcnkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlyZWN0b3J5KClcbiAgICBjb25zdCB2ZWxvY2lvdXNQYXRoID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50SGFuZGxlcigpLmdldFZlbG9jaW91c1BhdGgoKVxuXG4gICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKGAke3ZlbG9jaW91c1BhdGh9L3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci93b3JrZXItc2NyaXB0LmpzYCwge1xuICAgICAgd29ya2VyRGF0YToge1xuICAgICAgICBkZWJ1ZyxcbiAgICAgICAgZGlyZWN0b3J5LFxuICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50KCksXG4gICAgICAgIHdvcmtlckNvdW50OiB0aGlzLndvcmtlckNvdW50XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLndvcmtlci5vbihcImVycm9yXCIsIHRoaXMub25Xb3JrZXJFcnJvcilcbiAgICB0aGlzLndvcmtlci5vbihcImV4aXRcIiwgdGhpcy5vbldvcmtlckV4aXQpXG4gICAgdGhpcy53b3JrZXIub24oXCJtZXNzYWdlXCIsIHRoaXMub25Xb3JrZXJNZXNzYWdlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VydmVyLWNsaWVudC5qc1wiKS5kZWZhdWx0fSBjbGllbnQgLSBDbGllbnQgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGFkZFNvY2tldENvbm5lY3Rpb24oY2xpZW50KSB7XG4gICAgY29uc3QgY2xpZW50Q291bnQgPSBjbGllbnQuY2xpZW50Q291bnRcblxuICAgIGlmICghdGhpcy53b3JrZXIpIHRocm93IG5ldyBFcnJvcihcIldvcmtlciBub3QgaW5pdGlhbGl6ZWRcIilcblxuICAgIGNsaWVudC5zZXRXb3JrZXIodGhpcy53b3JrZXIpXG4gICAgY2xpZW50Lmxpc3RlbigpXG5cbiAgICB0aGlzLmNsaWVudHNbY2xpZW50Q291bnRdID0gY2xpZW50XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IFwibmV3Q2xpZW50XCIsIGNsaWVudENvdW50LCByZW1vdGVBZGRyZXNzOiBjbGllbnQucmVtb3RlQWRkcmVzc30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IGVycm9yIC0gRXJyb3IgaW5zdGFuY2UuXG4gICAqL1xuICBvbldvcmtlckVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoYFZlbG9jaW91cyB3b3JrZXIgJHt0aGlzLndvcmtlckNvdW50fSBlcnJvcmAsIGVycm9yKVxuICAgIHZvaWQgdGhpcy5fY2xvc2VBbGxDbGllbnRzKClcbiAgICB0aHJvdyBlbnN1cmVFcnJvcihlcnJvcikgLy8gVGhyb3dzIG9yaWdpbmFsIGVycm9yIHdpdGggYmFja3RyYWNlIGFuZCBldmVyeXRoaW5nIGludG8gdGhlIGNvbnNvbGVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZSAtIENvZGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uV29ya2VyRXhpdCA9IChjb2RlKSA9PiB7XG4gICAgdGhpcy5faGFzRXhpdGVkID0gdHJ1ZVxuXG4gICAgaWYgKGNvZGUgIT09IDAgJiYgIXRoaXMuX3N0b3BwaW5nKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgVmVsb2Npb3VzIHdvcmtlciAke3RoaXMud29ya2VyQ291bnR9IGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX1gKVxuICAgICAgdm9pZCB0aGlzLl9jbG9zZUFsbENsaWVudHMoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGllbnQgd29ya2VyIHN0b3BwZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IGBDbGllbnQgd29ya2VyIHN0b3BwZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApXG4gICAgfVxuXG4gICAgdGhpcy51bnJlZ2lzdGVyRnJvbUV2ZW50c0hvc3Q/LigpXG4gICAgdGhpcy5fc3RvcFJlc29sdmU/LigpXG4gICAgdGhpcy5fc3RvcFJlc29sdmUgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX2Nsb3NlQWxsQ2xpZW50cygpIHtcbiAgICBjb25zdCBjbGllbnRzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmNsaWVudHMpXG4gICAgdGhpcy5jbGllbnRzID0ge31cblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIGNsaWVudHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZvaWQgY2xpZW50LmVuZCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGNsb3NlIGNsaWVudCBhZnRlciB3b3JrZXIgZXhpdFwiLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLmNvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RhdGEuY2xpZW50Q291bnRdIC0gQ2xpZW50IGNvdW50LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IFtkYXRhLm91dHB1dF0gLSBPdXRwdXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5jaGFubmVsXSAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHthbnl9IFtkYXRhLnBheWxvYWRdIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvbldvcmtlck1lc3NhZ2UgPSAoZGF0YSkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiV29ya2VyIG1lc3NhZ2VcIiwgc3VtbWFyaXplV29ya2VyTWVzc2FnZShkYXRhKSlcblxuICAgIGNvbnN0IHtjb21tYW5kfSA9IGRhdGFcblxuXG4gICAgaWYgKGNvbW1hbmQgPT0gXCJzdGFydGVkXCIpIHtcbiAgICAgIGlmICh0aGlzLm9uU3RhcnRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uU3RhcnRDYWxsYmFjayhudWxsKVxuICAgICAgfVxuXG4gICAgICB0aGlzLm9uU3RhcnRDYWxsYmFjayA9IG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJjbGllbnRPdXRwdXRcIikge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJDTElFTlQgT1VUUFVUXCIsIHN1bW1hcml6ZVdvcmtlck1lc3NhZ2UoZGF0YSkpXG5cbiAgICAgIGNvbnN0IHtjbGllbnRDb3VudCwgb3V0cHV0fSA9IGRhdGFcbiAgICAgIGNvbnN0IGNsaWVudCA9IHR5cGVvZiBjbGllbnRDb3VudCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0gOiB1bmRlZmluZWRcblxuICAgICAgaWYgKCFjbGllbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybigoKSA9PiBbYFZlbG9jaW91cyB3b3JrZXIgJHt0aGlzLndvcmtlckNvdW50fSBwcm9kdWNlZCBvdXRwdXQgZm9yIG1pc3NpbmcgY2xpZW50ICR7Y2xpZW50Q291bnR9YCwgZGF0YV0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob3V0cHV0ICE9PSBudWxsICYmIG91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIgPyBvdXRwdXQubGVuZ3RoIDogb3V0cHV0LmJ5dGVMZW5ndGhcblxuICAgICAgICB2b2lkIGNsaWVudC5zZW5kKG91dHB1dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiQ2xpZW50IG91dHB1dCBkZWxpdmVyZWRcIiwge1xuICAgICAgICAgICAgY2xpZW50Q291bnQsXG4gICAgICAgICAgICBvdXRwdXRMZW5ndGgsXG4gICAgICAgICAgICB3b3JrZXJDb3VudDogdGhpcy53b3JrZXJDb3VudFxuICAgICAgICAgIH1dKVxuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZGVsaXZlciBjbGllbnQgb3V0cHV0XCIsIHtcbiAgICAgICAgICAgIGNsaWVudENvdW50LFxuICAgICAgICAgICAgd29ya2VyQ291bnQ6IHRoaXMud29ya2VyQ291bnRcbiAgICAgICAgICB9LCBlcnJvcl0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwiY2xpZW50Q2xvc2VcIikge1xuICAgICAgY29uc3Qge2NsaWVudENvdW50fSA9IGRhdGFcbiAgICAgIGNvbnN0IGNsaWVudCA9IHR5cGVvZiBjbGllbnRDb3VudCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0gOiB1bmRlZmluZWRcblxuICAgICAgaWYgKCFjbGllbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BWZWxvY2lvdXMgd29ya2VyICR7dGhpcy53b3JrZXJDb3VudH0gcmVxdWVzdGVkIGNsb3NlIGZvciBtaXNzaW5nIGNsaWVudCAke2NsaWVudENvdW50fWAsIGRhdGFdKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdm9pZCBjbGllbnQuZW5kKClcblxuICAgICAgaWYgKHR5cGVvZiBjbGllbnRDb3VudCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBkZWxldGUgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcInNodXRkb3duQ29tcGxldGVcIikge1xuICAgICAgdGhpcy5fc3RvcFJlc29sdmU/LigpXG4gICAgICB0aGlzLl9zdG9wUmVzb2x2ZSA9IG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJ3ZWJzb2NrZXRQdWJsaXNoXCIpIHtcbiAgICAgIGNvbnN0IHtjaGFubmVsLCBwYXlsb2FkfSA9IGRhdGFcblxuICAgICAgaWYgKHR5cGVvZiBjaGFubmVsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB3ZWJzb2NrZXQgcHVibGlzaCBjaGFubmVsIG11c3QgYmUgYSBzdHJpbmdcIilcbiAgICAgIH1cblxuICAgICAgd2Vic29ja2V0RXZlbnRzSG9zdC5wdWJsaXNoKHtjaGFubmVsLCBwYXlsb2FkfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHN0b3BwZWQuXG4gICAqL1xuICBzdG9wKCkge1xuICAgIGlmICghdGhpcy53b3JrZXIpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIGlmICh0aGlzLl9oYXNFeGl0ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgdGhpcy5fc3RvcHBpbmcgPSB0cnVlXG4gICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJcblxuICAgIGlmICghd29ya2VyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fc3RvcFJlc29sdmUgPSByZXNvbHZlXG4gICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IFwic2h1dGRvd25cIn0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge2FueX0gYXJncy5wYXlsb2FkIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBkaXNwYXRjaFdlYnNvY2tldEV2ZW50KHtjaGFubmVsLCBwYXlsb2FkfSkge1xuICAgIC8vIFRlc3QgYW5kIHNodXRkb3duIHBhdGhzIGNhbiBsZWF2ZSBhIHJlZ2lzdGVyZWQgaGFuZGxlciB3aXRob3V0IGEgbGl2ZSB3b3JrZXItdGhyZWFkIHRyYW5zcG9ydC5cbiAgICBpZiAoIXRoaXMud29ya2VyIHx8IHR5cGVvZiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm5cblxuICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjaGFubmVsLCBjb21tYW5kOiBcIndlYnNvY2tldEV2ZW50XCIsIHBheWxvYWR9KVxuICB9XG59XG4iXX0=
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvd29ya2VyLWhhbmRsZXIvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQTtBQUNyRCxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBRTdEOzs7Ozs7R0FNRztBQUNILFNBQVMsc0JBQXNCLENBQUMsSUFBSTtJQUNsQyxNQUFNLEVBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFDLEdBQUcsSUFBSSxDQUFBO0lBRTlCLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sTUFBTSxDQUFBO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFDN0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1FBQ2YsQ0FBQyxDQUFDLENBQUMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFbEUsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLElBQUksRUFBRSxVQUFVO1NBQ2pCO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHlCQUF5QjtJQUM1Qzs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEMsb0VBQW9FO1FBQ3BF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QUFzQixDQUFDLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDO1FBQzNELGlHQUFpRztRQUNqRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLFVBQVU7WUFBRSxPQUFNO1FBRXpFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDNUYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQge1dvcmtlcn0gZnJvbSBcIndvcmtlcl90aHJlYWRzXCJcbmltcG9ydCBlbnN1cmVFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvZW5zdXJlLWVycm9yLmpzXCJcbmltcG9ydCB3ZWJzb2NrZXRFdmVudHNIb3N0IGZyb20gXCIuLi93ZWJzb2NrZXQtZXZlbnRzLWhvc3QuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gV29ya2VyIG1lc3NhZ2UgcGF5bG9hZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLmNvbW1hbmQgLSBDb21tYW5kIG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2RhdGEuY2xpZW50Q291bnRdIC0gQ2xpZW50IGNvdW50LlxuICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBbZGF0YS5vdXRwdXRdIC0gT3V0cHV0IGNodW5rLlxuICogQHJldHVybnMge29iamVjdH0gLSBMb2ctc2FmZSBtZXNzYWdlIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZVdvcmtlck1lc3NhZ2UoZGF0YSkge1xuICBjb25zdCB7b3V0cHV0LCAuLi5yZXN0fSA9IGRhdGFcblxuICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdFxuICB9XG5cbiAgY29uc3Qgb3V0cHV0VHlwZSA9IHR5cGVvZiBvdXRwdXRcbiAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gdHlwZW9mIG91dHB1dCA9PT0gXCJzdHJpbmdcIlxuICAgID8gb3V0cHV0Lmxlbmd0aFxuICAgIDogKG91dHB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBvdXRwdXQuYnl0ZUxlbmd0aCA6IHVuZGVmaW5lZClcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc3QsXG4gICAgb3V0cHV0OiB7XG4gICAgICBsZW5ndGg6IG91dHB1dExlbmd0aCxcbiAgICAgIHR5cGU6IG91dHB1dFR5cGVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlcldvcmtlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3Mud29ya2VyQ291bnQgLSBXb3JrZXIgY291bnQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgd29ya2VyQ291bnR9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyLCBpbXBvcnQoXCIuLi9zZXJ2ZXItY2xpZW50LmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIHRoaXMuY2xpZW50cyA9IHt9XG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLndvcmtlckNvdW50ID0gd29ya2VyQ291bnRcbiAgICB0aGlzLnVucmVnaXN0ZXJGcm9tRXZlbnRzSG9zdCA9IHdlYnNvY2tldEV2ZW50c0hvc3QucmVnaXN0ZXIodGhpcylcbiAgICB0aGlzLl9zdG9wcGluZyA9IGZhbHNlXG4gIH1cblxuICBzdGFydCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMub25TdGFydENhbGxiYWNrID0gcmVzb2x2ZVxuICAgICAgdGhpcy5fc3Bhd25Xb3JrZXIoKVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBfc3Bhd25Xb3JrZXIoKSB7XG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZGVidWdcbiAgICBjb25zdCBkaXJlY3RvcnkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlyZWN0b3J5KClcbiAgICBjb25zdCB2ZWxvY2lvdXNQYXRoID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50SGFuZGxlcigpLmdldFZlbG9jaW91c1BhdGgoKVxuXG4gICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKGAke3ZlbG9jaW91c1BhdGh9L3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci93b3JrZXItc2NyaXB0LmpzYCwge1xuICAgICAgd29ya2VyRGF0YToge1xuICAgICAgICBkZWJ1ZyxcbiAgICAgICAgZGlyZWN0b3J5LFxuICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50KCksXG4gICAgICAgIHdvcmtlckNvdW50OiB0aGlzLndvcmtlckNvdW50XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLndvcmtlci5vbihcImVycm9yXCIsIHRoaXMub25Xb3JrZXJFcnJvcilcbiAgICB0aGlzLndvcmtlci5vbihcImV4aXRcIiwgdGhpcy5vbldvcmtlckV4aXQpXG4gICAgdGhpcy53b3JrZXIub24oXCJtZXNzYWdlXCIsIHRoaXMub25Xb3JrZXJNZXNzYWdlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VydmVyLWNsaWVudC5qc1wiKS5kZWZhdWx0fSBjbGllbnQgLSBDbGllbnQgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGFkZFNvY2tldENvbm5lY3Rpb24oY2xpZW50KSB7XG4gICAgY29uc3QgY2xpZW50Q291bnQgPSBjbGllbnQuY2xpZW50Q291bnRcblxuICAgIGlmICghdGhpcy53b3JrZXIpIHRocm93IG5ldyBFcnJvcihcIldvcmtlciBub3QgaW5pdGlhbGl6ZWRcIilcblxuICAgIGNsaWVudC5zZXRXb3JrZXIodGhpcy53b3JrZXIpXG4gICAgY2xpZW50Lmxpc3RlbigpXG5cbiAgICB0aGlzLmNsaWVudHNbY2xpZW50Q291bnRdID0gY2xpZW50XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IFwibmV3Q2xpZW50XCIsIGNsaWVudENvdW50LCByZW1vdGVBZGRyZXNzOiBjbGllbnQucmVtb3RlQWRkcmVzc30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IGVycm9yIC0gRXJyb3IgaW5zdGFuY2UuXG4gICAqL1xuICBvbldvcmtlckVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoYFZlbG9jaW91cyB3b3JrZXIgJHt0aGlzLndvcmtlckNvdW50fSBlcnJvcmAsIGVycm9yKVxuICAgIHZvaWQgdGhpcy5fY2xvc2VBbGxDbGllbnRzKClcbiAgICB0aHJvdyBlbnN1cmVFcnJvcihlcnJvcikgLy8gVGhyb3dzIG9yaWdpbmFsIGVycm9yIHdpdGggYmFja3RyYWNlIGFuZCBldmVyeXRoaW5nIGludG8gdGhlIGNvbnNvbGVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZSAtIENvZGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uV29ya2VyRXhpdCA9IChjb2RlKSA9PiB7XG4gICAgdGhpcy5faGFzRXhpdGVkID0gdHJ1ZVxuXG4gICAgaWYgKGNvZGUgIT09IDAgJiYgIXRoaXMuX3N0b3BwaW5nKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgVmVsb2Npb3VzIHdvcmtlciAke3RoaXMud29ya2VyQ291bnR9IGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX1gKVxuICAgICAgdm9pZCB0aGlzLl9jbG9zZUFsbENsaWVudHMoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGllbnQgd29ya2VyIHN0b3BwZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IGBDbGllbnQgd29ya2VyIHN0b3BwZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApXG4gICAgfVxuXG4gICAgdGhpcy51bnJlZ2lzdGVyRnJvbUV2ZW50c0hvc3Q/LigpXG4gICAgdGhpcy5fc3RvcFJlc29sdmU/LigpXG4gICAgdGhpcy5fc3RvcFJlc29sdmUgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX2Nsb3NlQWxsQ2xpZW50cygpIHtcbiAgICBjb25zdCBjbGllbnRzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmNsaWVudHMpXG4gICAgdGhpcy5jbGllbnRzID0ge31cblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIGNsaWVudHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZvaWQgY2xpZW50LmVuZCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGNsb3NlIGNsaWVudCBhZnRlciB3b3JrZXIgZXhpdFwiLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLmNvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RhdGEuY2xpZW50Q291bnRdIC0gQ2xpZW50IGNvdW50LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IFtkYXRhLm91dHB1dF0gLSBPdXRwdXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5jaGFubmVsXSAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHthbnl9IFtkYXRhLnBheWxvYWRdIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvbldvcmtlck1lc3NhZ2UgPSAoZGF0YSkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiV29ya2VyIG1lc3NhZ2VcIiwgc3VtbWFyaXplV29ya2VyTWVzc2FnZShkYXRhKSlcblxuICAgIGNvbnN0IHtjb21tYW5kfSA9IGRhdGFcblxuXG4gICAgaWYgKGNvbW1hbmQgPT0gXCJzdGFydGVkXCIpIHtcbiAgICAgIGlmICh0aGlzLm9uU3RhcnRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uU3RhcnRDYWxsYmFjayhudWxsKVxuICAgICAgfVxuXG4gICAgICB0aGlzLm9uU3RhcnRDYWxsYmFjayA9IG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJjbGllbnRPdXRwdXRcIikge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJDTElFTlQgT1VUUFVUXCIsIHN1bW1hcml6ZVdvcmtlck1lc3NhZ2UoZGF0YSkpXG5cbiAgICAgIGNvbnN0IHtjbGllbnRDb3VudCwgb3V0cHV0fSA9IGRhdGFcbiAgICAgIGNvbnN0IGNsaWVudCA9IHR5cGVvZiBjbGllbnRDb3VudCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0gOiB1bmRlZmluZWRcblxuICAgICAgaWYgKCFjbGllbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybigoKSA9PiBbYFZlbG9jaW91cyB3b3JrZXIgJHt0aGlzLndvcmtlckNvdW50fSBwcm9kdWNlZCBvdXRwdXQgZm9yIG1pc3NpbmcgY2xpZW50ICR7Y2xpZW50Q291bnR9YCwgZGF0YV0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob3V0cHV0ICE9PSBudWxsICYmIG91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIgPyBvdXRwdXQubGVuZ3RoIDogb3V0cHV0LmJ5dGVMZW5ndGhcblxuICAgICAgICB2b2lkIGNsaWVudC5zZW5kKG91dHB1dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiQ2xpZW50IG91dHB1dCBkZWxpdmVyZWRcIiwge1xuICAgICAgICAgICAgY2xpZW50Q291bnQsXG4gICAgICAgICAgICBvdXRwdXRMZW5ndGgsXG4gICAgICAgICAgICB3b3JrZXJDb3VudDogdGhpcy53b3JrZXJDb3VudFxuICAgICAgICAgIH1dKVxuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZGVsaXZlciBjbGllbnQgb3V0cHV0XCIsIHtcbiAgICAgICAgICAgIGNsaWVudENvdW50LFxuICAgICAgICAgICAgd29ya2VyQ291bnQ6IHRoaXMud29ya2VyQ291bnRcbiAgICAgICAgICB9LCBlcnJvcl0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwiY2xpZW50Q2xvc2VcIikge1xuICAgICAgY29uc3Qge2NsaWVudENvdW50fSA9IGRhdGFcbiAgICAgIGNvbnN0IGNsaWVudCA9IHR5cGVvZiBjbGllbnRDb3VudCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0gOiB1bmRlZmluZWRcblxuICAgICAgaWYgKCFjbGllbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BWZWxvY2lvdXMgd29ya2VyICR7dGhpcy53b3JrZXJDb3VudH0gcmVxdWVzdGVkIGNsb3NlIGZvciBtaXNzaW5nIGNsaWVudCAke2NsaWVudENvdW50fWAsIGRhdGFdKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdm9pZCBjbGllbnQuZW5kKClcblxuICAgICAgaWYgKHR5cGVvZiBjbGllbnRDb3VudCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBkZWxldGUgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcInNodXRkb3duQ29tcGxldGVcIikge1xuICAgICAgdGhpcy5fc3RvcFJlc29sdmU/LigpXG4gICAgICB0aGlzLl9zdG9wUmVzb2x2ZSA9IG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJ3ZWJzb2NrZXRQdWJsaXNoXCIpIHtcbiAgICAgIGNvbnN0IHtjaGFubmVsLCBwYXlsb2FkfSA9IGRhdGFcblxuICAgICAgaWYgKHR5cGVvZiBjaGFubmVsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB3ZWJzb2NrZXQgcHVibGlzaCBjaGFubmVsIG11c3QgYmUgYSBzdHJpbmdcIilcbiAgICAgIH1cblxuICAgICAgd2Vic29ja2V0RXZlbnRzSG9zdC5wdWJsaXNoKHtjaGFubmVsLCBwYXlsb2FkfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHN0b3BwZWQuXG4gICAqL1xuICBzdG9wKCkge1xuICAgIGlmICghdGhpcy53b3JrZXIpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIGlmICh0aGlzLl9oYXNFeGl0ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgdGhpcy5fc3RvcHBpbmcgPSB0cnVlXG4gICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJcblxuICAgIGlmICghd29ya2VyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fc3RvcFJlc29sdmUgPSByZXNvbHZlXG4gICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IFwic2h1dGRvd25cIn0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuY3JlYXRlZEF0XSAtIEV2ZW50IGNyZWF0aW9uIHRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5ldmVudElkXSAtIEV2ZW50IGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnBheWxvYWQgLSBQYXlsb2FkIGRhdGEuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGRpc3BhdGNoV2Vic29ja2V0RXZlbnQoe2NoYW5uZWwsIGNyZWF0ZWRBdCwgZXZlbnRJZCwgcGF5bG9hZH0pIHtcbiAgICAvLyBUZXN0IGFuZCBzaHV0ZG93biBwYXRocyBjYW4gbGVhdmUgYSByZWdpc3RlcmVkIGhhbmRsZXIgd2l0aG91dCBhIGxpdmUgd29ya2VyLXRocmVhZCB0cmFuc3BvcnQuXG4gICAgaWYgKCF0aGlzLndvcmtlciB8fCB0eXBlb2YgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuXG5cbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y2hhbm5lbCwgY29tbWFuZDogXCJ3ZWJzb2NrZXRFdmVudFwiLCBjcmVhdGVkQXQsIGV2ZW50SWQsIHBheWxvYWR9KVxuICB9XG59XG4iXX0=
@@ -39,6 +39,8 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
39
39
  * @param {string} [data.remoteAddress] - Remote address.
40
40
  * @param {number} [data.clientCount] - Client count.
41
41
  * @param {string} [data.channel] - Channel name.
42
+ * @param {string} [data.createdAt] - Event creation time.
43
+ * @param {string} [data.eventId] - Event identifier.
42
44
  * @param {any} [data.payload] - Payload data.
43
45
  */
44
46
  onCommand: (data: {
@@ -47,16 +49,22 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
47
49
  remoteAddress?: string | undefined;
48
50
  clientCount?: number | undefined;
49
51
  channel?: string | undefined;
52
+ createdAt?: string | undefined;
53
+ eventId?: string | undefined;
50
54
  payload?: any;
51
55
  }) => Promise<void>;
52
56
  /**
53
57
  * @param {object} args - Options object.
54
58
  * @param {string} args.channel - Channel name.
59
+ * @param {string | undefined} args.createdAt - Event creation time.
60
+ * @param {string | undefined} args.eventId - Event identifier.
55
61
  * @param {any} args.payload - Payload data.
56
62
  * @returns {Promise<void>} - Resolves when complete.
57
63
  */
58
- broadcastWebsocketEvent({ channel, payload }: {
64
+ broadcastWebsocketEvent({ channel, createdAt, eventId, payload }: {
59
65
  channel: string;
66
+ createdAt: string | undefined;
67
+ eventId: string | undefined;
60
68
  payload: any;
61
69
  }): Promise<void>;
62
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/worker-thread.js"],"names":[],"mappings":"AAqBA;IACE;;;;OAIG;IACH,wCAHG;QAAkD,UAAU,EAApD,gDAAmC;QACiD,UAAU,EAA9F;YAAC,KAAK,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAC;KACvF,EAwBA;IAlBC,qCAAqC;IACrC,SADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAChB;IAEjB,eAA8B;IAC9B,sDAA4B;IAC5B;eAZiB,OAAO;mBAAa,MAAM;qBAAe,MAAM;qBAAe,MAAM;MAYzD;IAC5B,oBAA8B;IAchC;;OAEG;IACH,cAFa,OAAO,CAAC,IAAI,CAAC,CA0BzB;IAnBC,uDAAuD;IACvD,oEAAgD;IAUhD,6CAAwG;IAGxG,qCAA2E;IAO7E;;;;;;;;OAQG;IACH,YAAmB,MAPhB;QAAqB,OAAO,EAApB,MAAM;QAC8B,KAAK;QAC3B,aAAa;QACb,WAAW;QACX,OAAO;QACV,OAAO,GAAlB,GAAG;KAES,mBA0DtB;IAED;;;;;OAKG;IACH,8CAJG;QAAqB,OAAO,EAApB,MAAM;QACI,OAAO,EAAjB,GAAG;KACX,GAAU,OAAO,CAAC,IAAI,CAAC,CAiCzB;CACF;mBAzLkB,oBAAoB;mBAGpB,iBAAiB;4BAER,wBAAwB;wBAN5B,sBAAsB"}
1
+ {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/worker-thread.js"],"names":[],"mappings":"AAqBA;IACE;;;;OAIG;IACH,wCAHG;QAAkD,UAAU,EAApD,gDAAmC;QACiD,UAAU,EAA9F;YAAC,KAAK,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAC;KACvF,EAwBA;IAlBC,qCAAqC;IACrC,SADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAChB;IAEjB,eAA8B;IAC9B,sDAA4B;IAC5B;eAZiB,OAAO;mBAAa,MAAM;qBAAe,MAAM;qBAAe,MAAM;MAYzD;IAC5B,oBAA8B;IAchC;;OAEG;IACH,cAFa,OAAO,CAAC,IAAI,CAAC,CA0BzB;IAnBC,uDAAuD;IACvD,oEAAgD;IAUhD,6CAAwG;IAGxG,qCAA2E;IAO7E;;;;;;;;;;OAUG;IACH,YAAmB,MAThB;QAAqB,OAAO,EAApB,MAAM;QAC8B,KAAK;QAC3B,aAAa;QACb,WAAW;QACX,OAAO;QACP,SAAS;QACT,OAAO;QACV,OAAO,GAAlB,GAAG;KAES,mBA0DtB;IAED;;;;;;;OAOG;IACH,kEANG;QAAqB,OAAO,EAApB,MAAM;QACmB,SAAS,EAAlC,MAAM,GAAG,SAAS;QACO,OAAO,EAAhC,MAAM,GAAG,SAAS;QACR,OAAO,EAAjB,GAAG;KACX,GAAU,OAAO,CAAC,IAAI,CAAC,CAwCzB;CACF;mBApMkB,oBAAoB;mBAGpB,iBAAiB;4BAER,wBAAwB;wBAN5B,sBAAsB"}
@@ -71,6 +71,8 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
71
71
  * @param {string} [data.remoteAddress] - Remote address.
72
72
  * @param {number} [data.clientCount] - Client count.
73
73
  * @param {string} [data.channel] - Channel name.
74
+ * @param {string} [data.createdAt] - Event creation time.
75
+ * @param {string} [data.eventId] - Event identifier.
74
76
  * @param {any} [data.payload] - Payload data.
75
77
  */
76
78
  onCommand = async (data) => {
@@ -109,10 +111,10 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
109
111
  client.onWrite(clientChunk);
110
112
  }
111
113
  else if (command == "websocketEvent") {
112
- const { channel, payload } = data;
114
+ const { channel, createdAt, eventId, payload } = data;
113
115
  if (typeof channel !== "string")
114
116
  throw new Error("No channel given");
115
- await this.broadcastWebsocketEvent({ channel, payload });
117
+ await this.broadcastWebsocketEvent({ channel, createdAt, eventId, payload });
116
118
  }
117
119
  else if (command == "shutdown") {
118
120
  if (this.configuration?.closeDatabaseConnections) {
@@ -128,12 +130,17 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
128
130
  /**
129
131
  * @param {object} args - Options object.
130
132
  * @param {string} args.channel - Channel name.
133
+ * @param {string | undefined} args.createdAt - Event creation time.
134
+ * @param {string | undefined} args.eventId - Event identifier.
131
135
  * @param {any} args.payload - Payload data.
132
136
  * @returns {Promise<void>} - Resolves when complete.
133
137
  */
134
- async broadcastWebsocketEvent({ channel, payload }) {
138
+ async broadcastWebsocketEvent({ channel, createdAt, eventId, payload }) {
139
+ const configuration = this.configuration;
140
+ if (!configuration)
141
+ throw new Error("Configuration not initialized");
135
142
  const sendTasks = [];
136
- const isDebug = this.configuration?.getEnvironment?.() === "test" && channel.startsWith("frontend-models:");
143
+ const isDebug = configuration.getEnvironment?.() === "test" && channel.startsWith("frontend-models:");
137
144
  let clientCount = 0;
138
145
  let sessionCount = 0;
139
146
  let matchCount = 0;
@@ -154,7 +161,10 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
154
161
  if (hasSubscription || hasHandlers)
155
162
  matchCount++;
156
163
  }
157
- sendTasks.push(session.sendEvent(channel, payload));
164
+ sendTasks.push(session.sendEvent(channel, payload, {
165
+ createdAt,
166
+ eventId
167
+ }));
158
168
  }
159
169
  if (isDebug) {
160
170
  console.log(`[ws-debug] broadcastWebsocketEvent channel=${channel} clients=${clientCount} sessions=${sessionCount} matches=${matchCount}`);
@@ -162,4 +172,4 @@ export default class VelociousHttpServerWorkerHandlerWorkerThread {
162
172
  await Promise.all(sendTasks);
163
173
  }
164
174
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLXRocmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci93b3JrZXItdGhyZWFkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8saUJBQWlCLE1BQU0sb0NBQW9DLENBQUE7QUFDbEUsT0FBTyxlQUFlLE1BQU0sd0JBQXdCLENBQUE7QUFFcEQ7OztHQUdHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxLQUFLO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzRixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRTVJLE9BQU8sRUFBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQTtBQUNsRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBTyw0Q0FBNEM7SUFDL0Q7Ozs7T0FJRztJQUNILFlBQVksRUFB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U0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtZQUM5QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxTQUFRO1lBQ3JCLElBQUksT0FBTztnQkFBRSxXQUFXLEVBQUUsQ0FBQTtZQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUE7WUFFdkMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsU0FBUTtZQUN0QixJQUFJLE9BQU87Z0JBQUUsWUFBWSxFQUFFLENBQUE7WUFFM0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN4RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUU5RCxJQUFJLGVBQWUsSUFBSSxXQUFXO29CQUFFLFVBQVUsRUFBRSxDQUFBO1lBQ2xELENBQUM7WUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxPQUFPLFlBQVksV0FBVyxhQUFhLFlBQVksWUFBWSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQzVJLENBQUM7UUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vYXBwbGljYXRpb24uanNcIlxuaW1wb3J0IENsaWVudCBmcm9tIFwiLi4vY2xpZW50L2luZGV4LmpzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgZXJyb3JMb2dnZXIgZnJvbSBcIi4uLy4uL2Vycm9yLWxvZ2dlci5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IHRvSW1wb3J0U3BlY2lmaWVyIGZyb20gXCIuLi8uLi91dGlscy90by1pbXBvcnQtc3BlY2lmaWVyLmpzXCJcbmltcG9ydCBXZWJzb2NrZXRFdmVudHMgZnJvbSBcIi4uL3dlYnNvY2tldC1ldmVudHMuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZ30gY2h1bmsgLSBDbGllbnQgaW5wdXQgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHt7bGVuZ3RoOiBudW1iZXIsIHByZXZpZXc6IHN0cmluZ319IC0gQ2h1bmsgc3VtbWFyeSBmb3IgbG9nZ2luZy5cbiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplQ2xpZW50V3JpdGVDaHVuayhjaHVuaykge1xuICBjb25zdCBub3JtYWxpemVkQ2h1bmsgPSB0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIgPyBCdWZmZXIuZnJvbShjaHVuaykgOiBCdWZmZXIuZnJvbShjaHVuaylcbiAgY29uc3QgcHJldmlldyA9IG5vcm1hbGl6ZWRDaHVuay50b1N0cmluZyhcImxhdGluMVwiLCAwLCBNYXRoLm1pbihub3JtYWxpemVkQ2h1bmsubGVuZ3RoLCAxNjApKS5yZXBsYWNlQWxsKFwiXFxyXCIsIFwiXFxcXHJcIikucmVwbGFjZUFsbChcIlxcblwiLCBcIlxcXFxuXCIpXG5cbiAgcmV0dXJuIHtsZW5ndGg6IG5vcm1hbGl6ZWRDaHVuay5sZW5ndGgsIHByZXZpZXd9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJXb3JrZXJIYW5kbGVyV29ya2VyVGhyZWFkIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwid29ya2VyX3RocmVhZHNcIikucGFyZW50UG9ydH0gYXJncy5wYXJlbnRQb3J0IC0gUGFyZW50IHBvcnQuXG4gICAqIEBwYXJhbSB7e2RlYnVnOiBib29sZWFuLCBkaXJlY3Rvcnk6IHN0cmluZywgZW52aXJvbm1lbnQ6IHN0cmluZywgd29ya2VyQ291bnQ6IG51bWJlcn19IGFyZ3Mud29ya2VyRGF0YSAtIFdvcmtlciBjb25maWd1cmF0aW9uIGRldGFpbHMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7cGFyZW50UG9ydCwgd29ya2VyRGF0YX0pIHtcbiAgICBpZiAoIXBhcmVudFBvcnQpIHRocm93IG5ldyBFcnJvcihcInBhcmVudFBvcnQgaXMgcmVxdWlyZWRcIilcblxuICAgIGNvbnN0IHt3b3JrZXJDb3VudH0gPSB3b3JrZXJEYXRhXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIsIENsaWVudD59ICovXG4gICAgdGhpcy5jbGllbnRzID0ge31cblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMucGFyZW50UG9ydCA9IHBhcmVudFBvcnRcbiAgICB0aGlzLndvcmtlckRhdGEgPSB3b3JrZXJEYXRhXG4gICAgdGhpcy53b3JrZXJDb3VudCA9IHdvcmtlckNvdW50XG5cbiAgICBwYXJlbnRQb3J0Lm9uKFwibWVzc2FnZVwiLCBlcnJvckxvZ2dlcih0aGlzLm9uQ29tbWFuZCkpXG5cbiAgICB0aGlzLmluaXRpYWxpemUoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcHBsaWNhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQXBwbGljYXRpb24gbm90IGluaXRpYWxpemVkXCIpXG5cbiAgICAgIHRoaXMuYXBwbGljYXRpb24uaW5pdGlhbGl6ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1Z0xvd0xldmVsKCgpID0+IGBXb3JrZXIgJHt3b3JrZXJDb3VudH0gc3RhcnRlZGApXG4gICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IFwic3RhcnRlZFwifSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCB7ZGVidWcsIGRpcmVjdG9yeSwgZW52aXJvbm1lbnR9ID0gdGhpcy53b3JrZXJEYXRhXG4gICAgY29uc3QgY29uZmlndXJhdGlvblBhdGggPSBgJHtkaXJlY3Rvcnl9L3NyYy9jb25maWcvY29uZmlndXJhdGlvbi5qc2BcbiAgICBjb25zdCBjb25maWd1cmF0aW9uSW1wb3J0ID0gYXdhaXQgaW1wb3J0KHRvSW1wb3J0U3BlY2lmaWVyKGNvbmZpZ3VyYXRpb25QYXRoKSlcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSAqL1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25JbXBvcnQuZGVmYXVsdFxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihgQ29uZmlndXJhdGlvbiBjb3VsZG4ndCBiZSBsb2FkZWQgZnJvbTogJHtjb25maWd1cmF0aW9uUGF0aH1gKVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvblxuXG4gICAgY29uZmlndXJhdGlvbi5kZWJ1ZyA9IGRlYnVnID09PSB0cnVlXG4gICAgY29uZmlndXJhdGlvbi5zZXRFbnZpcm9ubWVudChlbnZpcm9ubWVudClcbiAgICBjb25maWd1cmF0aW9uLnNldEN1cnJlbnQoKVxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIldvcmtlciB0aHJlYWQgY29uZmlndXJhdGlvbiBsb2FkZWRcIiwge2RlYnVnOiBjb25maWd1cmF0aW9uLmRlYnVnLCB3b3JrZXJDb3VudDogdGhpcy53b3JrZXJDb3VudH1dKVxuICAgIHRoaXMud2Vic29ja2V0RXZlbnRzID0gbmV3IFdlYnNvY2tldEV2ZW50cyh7cGFyZW50UG9ydDogdGhpcy5wYXJlbnRQb3J0LCB3b3JrZXJDb3VudDogdGhpcy53b3JrZXJDb3VudH0pXG4gICAgY29uZmlndXJhdGlvbi5zZXRXZWJzb2NrZXRFdmVudHModGhpcy53ZWJzb2NrZXRFdmVudHMpXG5cbiAgICB0aGlzLmFwcGxpY2F0aW9uID0gbmV3IEFwcGxpY2F0aW9uKHtjb25maWd1cmF0aW9uLCB0eXBlOiBcIndvcmtlci1oYW5kbGVyXCJ9KVxuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uLmlzSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgYXdhaXQgY29uZmlndXJhdGlvbi5pbml0aWFsaXplKHt0eXBlOiBcIndvcmtlci1oYW5kbGVyXCJ9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEuY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZ30gW2RhdGEuY2h1bmtdIC0gQ2h1bmsuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5yZW1vdGVBZGRyZXNzXSAtIFJlbW90ZSBhZGRyZXNzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RhdGEuY2xpZW50Q291bnRdIC0gQ2xpZW50IGNvdW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEuY2hhbm5lbF0gLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7YW55fSBbZGF0YS5wYXlsb2FkXSAtIFBheWxvYWQgZGF0YS5cbiAgICovXG4gIG9uQ29tbWFuZCA9IGFzeW5jIChkYXRhKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBbYFdvcmtlciAke3RoaXMud29ya2VyQ291bnR9IHJlY2VpdmVkIGNvbW1hbmRgLCBkYXRhXSlcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBkYXRhLmNvbW1hbmRcblxuICAgIGlmIChjb21tYW5kID09IFwibmV3Q2xpZW50XCIpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIG5vdCBpbml0aWFsaXplZFwiKVxuXG4gICAgICBjb25zdCB7Y2xpZW50Q291bnQsIHJlbW90ZUFkZHJlc3N9ID0gZGF0YVxuXG4gICAgICBpZiAodHlwZW9mIGNsaWVudENvdW50ICE9PSBcIm51bWJlclwiKSB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRDb3VudCBtdXN0IGJlIGEgbnVtYmVyXCIpXG5cbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoe1xuICAgICAgICBjbGllbnRDb3VudCxcbiAgICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgICByZW1vdGVBZGRyZXNzXG4gICAgICB9KVxuXG4gICAgICBjbGllbnQuZXZlbnRzLm9uKFwib3V0cHV0XCIsIChvdXRwdXQpID0+IHtcbiAgICAgICAgdGhpcy5wYXJlbnRQb3J0LnBvc3RNZXNzYWdlKHtjb21tYW5kOiBcImNsaWVudE91dHB1dFwiLCBjbGllbnRDb3VudCwgb3V0cHV0fSlcbiAgICAgIH0pXG5cbiAgICAgIGNsaWVudC5ldmVudHMub24oXCJjbG9zZVwiLCAob3V0cHV0KSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gXCJDbG9zZSByZWNlaXZlZCBmcm9tIGNsaWVudCBpbiB3b3JrZXIgLSBmb3J3YXJkaW5nIHRvIHdvcmtlciBwYXJlbnRcIilcbiAgICAgICAgdGhpcy5wYXJlbnRQb3J0LnBvc3RNZXNzYWdlKHtjb21tYW5kOiBcImNsaWVudENsb3NlXCIsIGNsaWVudENvdW50LCBvdXRwdXR9KVxuICAgICAgfSlcblxuICAgICAgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XSA9IGNsaWVudFxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImNsaWVudFdyaXRlXCIpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoXCJMb29raW5nIHVwIGNsaWVudFwiKVxuXG4gICAgICBjb25zdCB7Y2h1bmssIGNsaWVudENvdW50fSA9IGRhdGFcbiAgICAgIGlmICghY2h1bmspIHRocm93IG5ldyBFcnJvcihcIk5vIGNodW5rIGdpdmVuXCIpXG4gICAgICBjb25zdCBjbGllbnQgPSAvKiogQHR5cGUge0NsaWVudCB8IHVuZGVmaW5lZH0gKi8gKGRpZ2codGhpcy5jbGllbnRzLCBjbGllbnRDb3VudCkpXG5cbiAgICAgIGlmICghY2xpZW50KSB0aHJvdyBuZXcgRXJyb3IoYENsaWVudCBub3QgZm91bmQgZm9yIGNsaWVudFdyaXRlOiAke2NsaWVudENvdW50fWApXG5cbiAgICAgIGNvbnN0IGNsaWVudENodW5rID0gdHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspXG5cbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlNlbmRpbmcgY2xpZW50V3JpdGUgdG8gcGFyc2VyXCIsIHtjbGllbnRDb3VudCwgLi4uc3VtbWFyaXplQ2xpZW50V3JpdGVDaHVuayhjbGllbnRDaHVuayl9XSlcblxuICAgICAgY2xpZW50Lm9uV3JpdGUoY2xpZW50Q2h1bmspXG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwid2Vic29ja2V0RXZlbnRcIikge1xuICAgICAgY29uc3Qge2NoYW5uZWwsIHBheWxvYWR9ID0gZGF0YVxuXG4gICAgICBpZiAodHlwZW9mIGNoYW5uZWwgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihcIk5vIGNoYW5uZWwgZ2l2ZW5cIilcblxuICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3RXZWJzb2NrZXRFdmVudCh7Y2hhbm5lbCwgcGF5bG9hZH0pXG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwic2h1dGRvd25cIikge1xuICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbj8uY2xvc2VEYXRhYmFzZUNvbm5lY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5jbG9zZURhdGFiYXNlQ29ubmVjdGlvbnMoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnBhcmVudFBvcnQucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IFwic2h1dGRvd25Db21wbGV0ZVwifSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29tbWFuZDogJHtjb21tYW5kfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnBheWxvYWQgLSBQYXlsb2FkIGRhdGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBicm9hZGNhc3RXZWJzb2NrZXRFdmVudCh7Y2hhbm5lbCwgcGF5bG9hZH0pIHtcbiAgICBjb25zdCBzZW5kVGFza3MgPSBbXVxuICAgIGNvbnN0IGlzRGVidWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24/LmdldEVudmlyb25tZW50Py4oKSA9PT0gXCJ0ZXN0XCIgJiYgY2hhbm5lbC5zdGFydHNXaXRoKFwiZnJvbnRlbmQtbW9kZWxzOlwiKVxuICAgIGxldCBjbGllbnRDb3VudCA9IDBcbiAgICBsZXQgc2Vzc2lvbkNvdW50ID0gMFxuICAgIGxldCBtYXRjaENvdW50ID0gMFxuXG4gICAgZm9yIChjb25zdCBjbGllbnRLZXkgb2YgT2JqZWN0LmtleXModGhpcy5jbGllbnRzKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzW051bWJlcihjbGllbnRLZXkpXVxuICAgICAgaWYgKCFjbGllbnQpIGNvbnRpbnVlXG4gICAgICBpZiAoaXNEZWJ1ZykgY2xpZW50Q291bnQrK1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGNsaWVudC53ZWJzb2NrZXRTZXNzaW9uXG5cbiAgICAgIGlmICghc2Vzc2lvbikgY29udGludWVcbiAgICAgIGlmIChpc0RlYnVnKSBzZXNzaW9uQ291bnQrK1xuXG4gICAgICBpZiAoaXNEZWJ1Zykge1xuICAgICAgICBjb25zdCBoYXNTdWJzY3JpcHRpb24gPSBzZXNzaW9uLmhhc1N1YnNjcmlwdGlvbihjaGFubmVsKVxuICAgICAgICBjb25zdCBoYXNIYW5kbGVycyA9IHNlc3Npb24uc3Vic2NyaXB0aW9uSGFuZGxlcnM/LmhhcyhjaGFubmVsKVxuXG4gICAgICAgIGlmIChoYXNTdWJzY3JpcHRpb24gfHwgaGFzSGFuZGxlcnMpIG1hdGNoQ291bnQrK1xuICAgICAgfVxuXG4gICAgICBzZW5kVGFza3MucHVzaChzZXNzaW9uLnNlbmRFdmVudChjaGFubmVsLCBwYXlsb2FkKSlcbiAgICB9XG5cbiAgICBpZiAoaXNEZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coYFt3cy1kZWJ1Z10gYnJvYWRjYXN0V2Vic29ja2V0RXZlbnQgY2hhbm5lbD0ke2NoYW5uZWx9IGNsaWVudHM9JHtjbGllbnRDb3VudH0gc2Vzc2lvbnM9JHtzZXNzaW9uQ291bnR9IG1hdGNoZXM9JHttYXRjaENvdW50fWApXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoc2VuZFRhc2tzKVxuICB9XG59XG4iXX0=
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLXRocmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci93b3JrZXItdGhyZWFkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8saUJBQWlCLE1BQU0sb0NBQW9DLENBQUE7QUFDbEUsT0FBTyxlQUFlLE1BQU0sd0JBQXdCLENBQUE7QUFFcEQ7OztHQUdHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxLQUFLO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzRixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRTVJLE9BQU8sRUFBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQTtBQUNsRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBTyw0Q0FBNEM7SUFDL0Q7Ozs7T0FJRztJQUNILFlBQVksRUFB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Q0FBQTtRQUM1SSxDQUFDO1FBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uLy4uL2FwcGxpY2F0aW9uLmpzXCJcbmltcG9ydCBDbGllbnQgZnJvbSBcIi4uL2NsaWVudC9pbmRleC5qc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IGVycm9yTG9nZ2VyIGZyb20gXCIuLi8uLi9lcnJvci1sb2dnZXIuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCB0b0ltcG9ydFNwZWNpZmllciBmcm9tIFwiLi4vLi4vdXRpbHMvdG8taW1wb3J0LXNwZWNpZmllci5qc1wiXG5pbXBvcnQgV2Vic29ja2V0RXZlbnRzIGZyb20gXCIuLi93ZWJzb2NrZXQtZXZlbnRzLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmd9IGNodW5rIC0gQ2xpZW50IGlucHV0IHBheWxvYWQuXG4gKiBAcmV0dXJucyB7e2xlbmd0aDogbnVtYmVyLCBwcmV2aWV3OiBzdHJpbmd9fSAtIENodW5rIHN1bW1hcnkgZm9yIGxvZ2dpbmcuXG4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZUNsaWVudFdyaXRlQ2h1bmsoY2h1bmspIHtcbiAgY29uc3Qgbm9ybWFsaXplZENodW5rID0gdHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspXG4gIGNvbnN0IHByZXZpZXcgPSBub3JtYWxpemVkQ2h1bmsudG9TdHJpbmcoXCJsYXRpbjFcIiwgMCwgTWF0aC5taW4obm9ybWFsaXplZENodW5rLmxlbmd0aCwgMTYwKSkucmVwbGFjZUFsbChcIlxcclwiLCBcIlxcXFxyXCIpLnJlcGxhY2VBbGwoXCJcXG5cIiwgXCJcXFxcblwiKVxuXG4gIHJldHVybiB7bGVuZ3RoOiBub3JtYWxpemVkQ2h1bmsubGVuZ3RoLCBwcmV2aWV3fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyV29ya2VySGFuZGxlcldvcmtlclRocmVhZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIndvcmtlcl90aHJlYWRzXCIpLnBhcmVudFBvcnR9IGFyZ3MucGFyZW50UG9ydCAtIFBhcmVudCBwb3J0LlxuICAgKiBAcGFyYW0ge3tkZWJ1ZzogYm9vbGVhbiwgZGlyZWN0b3J5OiBzdHJpbmcsIGVudmlyb25tZW50OiBzdHJpbmcsIHdvcmtlckNvdW50OiBudW1iZXJ9fSBhcmdzLndvcmtlckRhdGEgLSBXb3JrZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe3BhcmVudFBvcnQsIHdvcmtlckRhdGF9KSB7XG4gICAgaWYgKCFwYXJlbnRQb3J0KSB0aHJvdyBuZXcgRXJyb3IoXCJwYXJlbnRQb3J0IGlzIHJlcXVpcmVkXCIpXG5cbiAgICBjb25zdCB7d29ya2VyQ291bnR9ID0gd29ya2VyRGF0YVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyLCBDbGllbnQ+fSAqL1xuICAgIHRoaXMuY2xpZW50cyA9IHt9XG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLnBhcmVudFBvcnQgPSBwYXJlbnRQb3J0XG4gICAgdGhpcy53b3JrZXJEYXRhID0gd29ya2VyRGF0YVxuICAgIHRoaXMud29ya2VyQ291bnQgPSB3b3JrZXJDb3VudFxuXG4gICAgcGFyZW50UG9ydC5vbihcIm1lc3NhZ2VcIiwgZXJyb3JMb2dnZXIodGhpcy5vbkNvbW1hbmQpKVxuXG4gICAgdGhpcy5pbml0aWFsaXplKCkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXBwbGljYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkFwcGxpY2F0aW9uIG5vdCBpbml0aWFsaXplZFwiKVxuXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uLmluaXRpYWxpemUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBgV29ya2VyICR7d29ya2VyQ291bnR9IHN0YXJ0ZWRgKVxuICAgICAgICBwYXJlbnRQb3J0LnBvc3RNZXNzYWdlKHtjb21tYW5kOiBcInN0YXJ0ZWRcIn0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKSB7XG4gICAgY29uc3Qge2RlYnVnLCBkaXJlY3RvcnksIGVudmlyb25tZW50fSA9IHRoaXMud29ya2VyRGF0YVxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25QYXRoID0gYCR7ZGlyZWN0b3J5fS9zcmMvY29uZmlnL2NvbmZpZ3VyYXRpb24uanNgXG4gICAgY29uc3QgY29uZmlndXJhdGlvbkltcG9ydCA9IGF3YWl0IGltcG9ydCh0b0ltcG9ydFNwZWNpZmllcihjb25maWd1cmF0aW9uUGF0aCkpXG5cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gKi9cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uSW1wb3J0LmRlZmF1bHRcblxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZ3VyYXRpb24gY291bGRuJ3QgYmUgbG9hZGVkIGZyb206ICR7Y29uZmlndXJhdGlvblBhdGh9YClcblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb25cblxuICAgIGNvbmZpZ3VyYXRpb24uZGVidWcgPSBkZWJ1ZyA9PT0gdHJ1ZVxuICAgIGNvbmZpZ3VyYXRpb24uc2V0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpXG4gICAgY29uZmlndXJhdGlvbi5zZXRDdXJyZW50KClcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJXb3JrZXIgdGhyZWFkIGNvbmZpZ3VyYXRpb24gbG9hZGVkXCIsIHtkZWJ1ZzogY29uZmlndXJhdGlvbi5kZWJ1Zywgd29ya2VyQ291bnQ6IHRoaXMud29ya2VyQ291bnR9XSlcbiAgICB0aGlzLndlYnNvY2tldEV2ZW50cyA9IG5ldyBXZWJzb2NrZXRFdmVudHMoe3BhcmVudFBvcnQ6IHRoaXMucGFyZW50UG9ydCwgd29ya2VyQ291bnQ6IHRoaXMud29ya2VyQ291bnR9KVxuICAgIGNvbmZpZ3VyYXRpb24uc2V0V2Vic29ja2V0RXZlbnRzKHRoaXMud2Vic29ja2V0RXZlbnRzKVxuXG4gICAgdGhpcy5hcHBsaWNhdGlvbiA9IG5ldyBBcHBsaWNhdGlvbih7Y29uZmlndXJhdGlvbiwgdHlwZTogXCJ3b3JrZXItaGFuZGxlclwifSlcblxuICAgIGlmICghY29uZmlndXJhdGlvbi5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgIGF3YWl0IGNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSh7dHlwZTogXCJ3b3JrZXItaGFuZGxlclwifSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLmNvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcGFyYW0ge0J1ZmZlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmd9IFtkYXRhLmNodW5rXSAtIENodW5rLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEucmVtb3RlQWRkcmVzc10gLSBSZW1vdGUgYWRkcmVzcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXRhLmNsaWVudENvdW50XSAtIENsaWVudCBjb3VudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhLmNoYW5uZWxdIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEuY3JlYXRlZEF0XSAtIEV2ZW50IGNyZWF0aW9uIHRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5ldmVudElkXSAtIEV2ZW50IGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7YW55fSBbZGF0YS5wYXlsb2FkXSAtIFBheWxvYWQgZGF0YS5cbiAgICovXG4gIG9uQ29tbWFuZCA9IGFzeW5jIChkYXRhKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBbYFdvcmtlciAke3RoaXMud29ya2VyQ291bnR9IHJlY2VpdmVkIGNvbW1hbmRgLCBkYXRhXSlcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBkYXRhLmNvbW1hbmRcblxuICAgIGlmIChjb21tYW5kID09IFwibmV3Q2xpZW50XCIpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIG5vdCBpbml0aWFsaXplZFwiKVxuXG4gICAgICBjb25zdCB7Y2xpZW50Q291bnQsIHJlbW90ZUFkZHJlc3N9ID0gZGF0YVxuXG4gICAgICBpZiAodHlwZW9mIGNsaWVudENvdW50ICE9PSBcIm51bWJlclwiKSB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRDb3VudCBtdXN0IGJlIGEgbnVtYmVyXCIpXG5cbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoe1xuICAgICAgICBjbGllbnRDb3VudCxcbiAgICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgICByZW1vdGVBZGRyZXNzXG4gICAgICB9KVxuXG4gICAgICBjbGllbnQuZXZlbnRzLm9uKFwib3V0cHV0XCIsIChvdXRwdXQpID0+IHtcbiAgICAgICAgdGhpcy5wYXJlbnRQb3J0LnBvc3RNZXNzYWdlKHtjb21tYW5kOiBcImNsaWVudE91dHB1dFwiLCBjbGllbnRDb3VudCwgb3V0cHV0fSlcbiAgICAgIH0pXG5cbiAgICAgIGNsaWVudC5ldmVudHMub24oXCJjbG9zZVwiLCAob3V0cHV0KSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gXCJDbG9zZSByZWNlaXZlZCBmcm9tIGNsaWVudCBpbiB3b3JrZXIgLSBmb3J3YXJkaW5nIHRvIHdvcmtlciBwYXJlbnRcIilcbiAgICAgICAgdGhpcy5wYXJlbnRQb3J0LnBvc3RNZXNzYWdlKHtjb21tYW5kOiBcImNsaWVudENsb3NlXCIsIGNsaWVudENvdW50LCBvdXRwdXR9KVxuICAgICAgfSlcblxuICAgICAgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XSA9IGNsaWVudFxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImNsaWVudFdyaXRlXCIpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoXCJMb29raW5nIHVwIGNsaWVudFwiKVxuXG4gICAgICBjb25zdCB7Y2h1bmssIGNsaWVudENvdW50fSA9IGRhdGFcbiAgICAgIGlmICghY2h1bmspIHRocm93IG5ldyBFcnJvcihcIk5vIGNodW5rIGdpdmVuXCIpXG4gICAgICBjb25zdCBjbGllbnQgPSAvKiogQHR5cGUge0NsaWVudCB8IHVuZGVmaW5lZH0gKi8gKGRpZ2codGhpcy5jbGllbnRzLCBjbGllbnRDb3VudCkpXG5cbiAgICAgIGlmICghY2xpZW50KSB0aHJvdyBuZXcgRXJyb3IoYENsaWVudCBub3QgZm91bmQgZm9yIGNsaWVudFdyaXRlOiAke2NsaWVudENvdW50fWApXG5cbiAgICAgIGNvbnN0IGNsaWVudENodW5rID0gdHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspXG5cbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlNlbmRpbmcgY2xpZW50V3JpdGUgdG8gcGFyc2VyXCIsIHtjbGllbnRDb3VudCwgLi4uc3VtbWFyaXplQ2xpZW50V3JpdGVDaHVuayhjbGllbnRDaHVuayl9XSlcblxuICAgICAgY2xpZW50Lm9uV3JpdGUoY2xpZW50Q2h1bmspXG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwid2Vic29ja2V0RXZlbnRcIikge1xuICAgICAgY29uc3Qge2NoYW5uZWwsIGNyZWF0ZWRBdCwgZXZlbnRJZCwgcGF5bG9hZH0gPSBkYXRhXG5cbiAgICAgIGlmICh0eXBlb2YgY2hhbm5lbCAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2hhbm5lbCBnaXZlblwiKVxuXG4gICAgICBhd2FpdCB0aGlzLmJyb2FkY2FzdFdlYnNvY2tldEV2ZW50KHtjaGFubmVsLCBjcmVhdGVkQXQsIGV2ZW50SWQsIHBheWxvYWR9KVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcInNodXRkb3duXCIpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24/LmNsb3NlRGF0YWJhc2VDb25uZWN0aW9ucykge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvc2VEYXRhYmFzZUNvbm5lY3Rpb25zKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYXJlbnRQb3J0LnBvc3RNZXNzYWdlKHtjb21tYW5kOiBcInNodXRkb3duQ29tcGxldGVcIn0pXG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gYXJncy5jcmVhdGVkQXQgLSBFdmVudCBjcmVhdGlvbiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gYXJncy5ldmVudElkIC0gRXZlbnQgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHthbnl9IGFyZ3MucGF5bG9hZCAtIFBheWxvYWQgZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGJyb2FkY2FzdFdlYnNvY2tldEV2ZW50KHtjaGFubmVsLCBjcmVhdGVkQXQsIGV2ZW50SWQsIHBheWxvYWR9KSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvblxuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIG5vdCBpbml0aWFsaXplZFwiKVxuXG4gICAgY29uc3Qgc2VuZFRhc2tzID0gW11cbiAgICBjb25zdCBpc0RlYnVnID0gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudD8uKCkgPT09IFwidGVzdFwiICYmIGNoYW5uZWwuc3RhcnRzV2l0aChcImZyb250ZW5kLW1vZGVsczpcIilcbiAgICBsZXQgY2xpZW50Q291bnQgPSAwXG4gICAgbGV0IHNlc3Npb25Db3VudCA9IDBcbiAgICBsZXQgbWF0Y2hDb3VudCA9IDBcblxuICAgIGZvciAoY29uc3QgY2xpZW50S2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuY2xpZW50cykpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50c1tOdW1iZXIoY2xpZW50S2V5KV1cbiAgICAgIGlmICghY2xpZW50KSBjb250aW51ZVxuICAgICAgaWYgKGlzRGVidWcpIGNsaWVudENvdW50KytcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBjbGllbnQud2Vic29ja2V0U2Vzc2lvblxuXG4gICAgICBpZiAoIXNlc3Npb24pIGNvbnRpbnVlXG4gICAgICBpZiAoaXNEZWJ1Zykgc2Vzc2lvbkNvdW50KytcblxuICAgICAgaWYgKGlzRGVidWcpIHtcbiAgICAgICAgY29uc3QgaGFzU3Vic2NyaXB0aW9uID0gc2Vzc2lvbi5oYXNTdWJzY3JpcHRpb24oY2hhbm5lbClcbiAgICAgICAgY29uc3QgaGFzSGFuZGxlcnMgPSBzZXNzaW9uLnN1YnNjcmlwdGlvbkhhbmRsZXJzPy5oYXMoY2hhbm5lbClcblxuICAgICAgICBpZiAoaGFzU3Vic2NyaXB0aW9uIHx8IGhhc0hhbmRsZXJzKSBtYXRjaENvdW50KytcbiAgICAgIH1cblxuICAgICAgc2VuZFRhc2tzLnB1c2goc2Vzc2lvbi5zZW5kRXZlbnQoY2hhbm5lbCwgcGF5bG9hZCwge1xuICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgIGV2ZW50SWRcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIGlmIChpc0RlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW3dzLWRlYnVnXSBicm9hZGNhc3RXZWJzb2NrZXRFdmVudCBjaGFubmVsPSR7Y2hhbm5lbH0gY2xpZW50cz0ke2NsaWVudENvdW50fSBzZXNzaW9ucz0ke3Nlc3Npb25Db3VudH0gbWF0Y2hlcz0ke21hdGNoQ291bnR9YClcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChzZW5kVGFza3MpXG4gIH1cbn1cbiJdfQ==