sonamu 0.9.20 → 0.10.0

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 (279) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +36 -0
  2. package/dist/ai/agents/agent.js +5 -7
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/agents/types.js +1 -1
  5. package/dist/ai/index.js +1 -2
  6. package/dist/ai/providers/rtzr/api.js +2 -3
  7. package/dist/ai/providers/rtzr/error.js +14 -29
  8. package/dist/ai/providers/rtzr/index.js +1 -2
  9. package/dist/ai/providers/rtzr/model.js +13 -20
  10. package/dist/ai/providers/rtzr/options.js +2 -3
  11. package/dist/ai/providers/rtzr/provider.js +2 -3
  12. package/dist/ai/providers/rtzr/utils.js +12 -21
  13. package/dist/api/base-frame.js +4 -4
  14. package/dist/api/caster.js +21 -38
  15. package/dist/api/code-converters.js +41 -98
  16. package/dist/api/config.d.ts +1 -10
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +9 -8
  19. package/dist/api/context.js +2 -3
  20. package/dist/api/decorators.js +80 -116
  21. package/dist/api/index.js +2 -3
  22. package/dist/api/secret.js +6 -10
  23. package/dist/api/sonamu.d.ts.map +1 -1
  24. package/dist/api/sonamu.js +200 -387
  25. package/dist/api/validator.js +5 -8
  26. package/dist/api/websocket-helpers.js +21 -32
  27. package/dist/auth/audit-log/builders.js +2 -3
  28. package/dist/auth/audit-log/events.js +2 -2
  29. package/dist/auth/audit-log/plugin.js +30 -61
  30. package/dist/auth/audit-log-ingestor.js +19 -41
  31. package/dist/auth/auth-generator.js +16 -41
  32. package/dist/auth/better-auth-entities.js +3 -4
  33. package/dist/auth/index.js +2 -3
  34. package/dist/auth/knex-adapter.js +18 -45
  35. package/dist/auth/plugins/entity-definitions/admin.js +2 -2
  36. package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
  37. package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
  38. package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
  39. package/dist/auth/plugins/entity-definitions/index.js +2 -3
  40. package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
  41. package/dist/auth/plugins/entity-definitions/organization.js +2 -2
  42. package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
  43. package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
  44. package/dist/auth/plugins/entity-definitions/sso.js +2 -2
  45. package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
  46. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  47. package/dist/auth/plugins/entity-definitions/username.js +2 -2
  48. package/dist/auth/plugins/index.js +1 -2
  49. package/dist/auth/plugins/wrappers/admin.js +2 -3
  50. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  51. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  52. package/dist/auth/plugins/wrappers/index.js +1 -2
  53. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  54. package/dist/auth/plugins/wrappers/organization.js +2 -3
  55. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  56. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  57. package/dist/auth/plugins/wrappers/sso.js +2 -3
  58. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  59. package/dist/auth/plugins/wrappers/username.js +2 -3
  60. package/dist/bin/build-config.js +2 -2
  61. package/dist/bin/cli.js +151 -258
  62. package/dist/bin/fixture.d.ts.map +1 -1
  63. package/dist/bin/fixture.js +55 -97
  64. package/dist/bin/hmr-hook-register.js +3 -3
  65. package/dist/bin/migrate-targets.d.ts +3 -0
  66. package/dist/bin/migrate-targets.d.ts.map +1 -0
  67. package/dist/bin/migrate-targets.js +11 -0
  68. package/dist/bin/test-command.js +25 -55
  69. package/dist/bin/ts-loader-register.js +5 -6
  70. package/dist/bin/ts-loader-registration.js +6 -13
  71. package/dist/cache/cache-manager.js +3 -4
  72. package/dist/cache/decorator.js +11 -21
  73. package/dist/cache/drivers.js +2 -3
  74. package/dist/cache/index.js +2 -3
  75. package/dist/cache/types.js +1 -1
  76. package/dist/cache-control/cache-control.js +21 -34
  77. package/dist/cache-control/types.js +1 -1
  78. package/dist/compress/compress.js +10 -10
  79. package/dist/compress/index.js +1 -2
  80. package/dist/compress/types.js +1 -1
  81. package/dist/cone/cone-generator.js +25 -63
  82. package/dist/database/_batch_update.js +26 -46
  83. package/dist/database/base-model.js +44 -97
  84. package/dist/database/base-model.types.js +1 -1
  85. package/dist/database/db.d.ts +8 -14
  86. package/dist/database/db.d.ts.map +1 -1
  87. package/dist/database/db.js +127 -72
  88. package/dist/database/knex.js +5 -8
  89. package/dist/database/puri-subset.types.js +1 -1
  90. package/dist/database/puri-wrapper.js +11 -15
  91. package/dist/database/puri.js +117 -234
  92. package/dist/database/puri.types.js +3 -4
  93. package/dist/database/transaction-context.js +4 -5
  94. package/dist/database/upsert-builder.js +109 -176
  95. package/dist/dict/en.d.ts +1 -0
  96. package/dist/dict/en.d.ts.map +1 -1
  97. package/dist/dict/en.js +4 -4
  98. package/dist/dict/index.js +2 -3
  99. package/dist/dict/ko.d.ts +1 -0
  100. package/dist/dict/ko.d.ts.map +1 -1
  101. package/dist/dict/ko.js +4 -4
  102. package/dist/dict/rc-keys.js +3 -4
  103. package/dist/dict/sd.js +8 -19
  104. package/dist/dict/sonamu-dictionary.js +141 -284
  105. package/dist/dict/types.js +1 -1
  106. package/dist/dict/utils.js +4 -5
  107. package/dist/entity/entity-manager.d.ts +2 -2
  108. package/dist/entity/entity-manager.js +34 -82
  109. package/dist/entity/entity-template-cone.js +33 -66
  110. package/dist/entity/entity.js +156 -310
  111. package/dist/env.d.ts +14 -0
  112. package/dist/env.d.ts.map +1 -0
  113. package/dist/env.js +75 -0
  114. package/dist/exceptions/error-handler.js +2 -3
  115. package/dist/exceptions/so-exceptions.js +7 -5
  116. package/dist/filter/index.js +1 -2
  117. package/dist/filter/types.js +3 -4
  118. package/dist/filter/utils.js +21 -54
  119. package/dist/index.js +8 -7
  120. package/dist/logger/category.js +6 -12
  121. package/dist/logger/configure.js +23 -34
  122. package/dist/migration/code-generation.js +146 -314
  123. package/dist/migration/index-where-predicate.js +52 -144
  124. package/dist/migration/migration-set.js +19 -33
  125. package/dist/migration/migrator.d.ts +2 -0
  126. package/dist/migration/migrator.d.ts.map +1 -1
  127. package/dist/migration/migrator.js +69 -53
  128. package/dist/migration/postgresql-schema-reader.js +126 -225
  129. package/dist/migration/slack-confirm.d.ts +1 -0
  130. package/dist/migration/slack-confirm.d.ts.map +1 -1
  131. package/dist/migration/slack-confirm.js +28 -38
  132. package/dist/migration/types.js +1 -1
  133. package/dist/naite/messaging-types.js +1 -1
  134. package/dist/naite/naite-reporter.js +15 -32
  135. package/dist/naite/naite.js +43 -76
  136. package/dist/ssr/index.js +6 -9
  137. package/dist/ssr/registry.js +10 -18
  138. package/dist/ssr/renderer.js +10 -21
  139. package/dist/ssr/types.js +1 -1
  140. package/dist/storage/base-file.js +5 -10
  141. package/dist/storage/buffered-file.js +3 -4
  142. package/dist/storage/drivers.js +2 -3
  143. package/dist/storage/index.js +2 -3
  144. package/dist/storage/s3-driver.js +5 -9
  145. package/dist/storage/storage-manager.js +5 -5
  146. package/dist/storage/types.js +1 -1
  147. package/dist/storage/uploaded-file.js +4 -6
  148. package/dist/stream/index.js +1 -2
  149. package/dist/stream/sse.js +8 -13
  150. package/dist/stream/ws-audience-resolver.js +5 -5
  151. package/dist/stream/ws-audience.js +3 -4
  152. package/dist/stream/ws-cluster-bus.js +3 -4
  153. package/dist/stream/ws-core.js +1 -1
  154. package/dist/stream/ws-delivery.js +11 -25
  155. package/dist/stream/ws-local-connection-store.js +9 -18
  156. package/dist/stream/ws-presence-store.js +43 -97
  157. package/dist/stream/ws-registry.js +17 -22
  158. package/dist/stream/ws-telemetry-memory.js +38 -45
  159. package/dist/stream/ws-telemetry-trace.js +4 -6
  160. package/dist/stream/ws-telemetry.js +82 -135
  161. package/dist/stream/ws.js +47 -91
  162. package/dist/syncer/api-parser.js +81 -147
  163. package/dist/syncer/checksum.js +9 -20
  164. package/dist/syncer/code-generator.js +29 -47
  165. package/dist/syncer/entity-operations.js +17 -27
  166. package/dist/syncer/event-batcher.js +8 -15
  167. package/dist/syncer/file-patterns.js +3 -4
  168. package/dist/syncer/file-tracking.js +6 -10
  169. package/dist/syncer/index.js +1 -2
  170. package/dist/syncer/module-loader.js +10 -26
  171. package/dist/syncer/syncer-actions.js +19 -37
  172. package/dist/syncer/syncer.js +46 -98
  173. package/dist/syncer/watcher.js +12 -26
  174. package/dist/tasks/decorator.js +7 -11
  175. package/dist/tasks/step-wrapper.js +7 -8
  176. package/dist/tasks/workflow-manager.js +18 -25
  177. package/dist/template/entity-converter.js +40 -64
  178. package/dist/template/helpers.js +32 -63
  179. package/dist/template/implementations/entity.template.js +7 -11
  180. package/dist/template/implementations/entry-server.template.js +2 -3
  181. package/dist/template/implementations/generated.template.js +25 -51
  182. package/dist/template/implementations/generated_http.template.js +31 -58
  183. package/dist/template/implementations/generated_sso.template.js +45 -85
  184. package/dist/template/implementations/init_types.template.js +4 -7
  185. package/dist/template/implementations/model.template.js +5 -10
  186. package/dist/template/implementations/model_test.template.js +2 -3
  187. package/dist/template/implementations/queries.template.js +4 -7
  188. package/dist/template/implementations/sd.template.js +17 -35
  189. package/dist/template/implementations/services.template.js +18 -30
  190. package/dist/template/implementations/view_form.template.js +72 -125
  191. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  192. package/dist/template/implementations/view_list.template.js +86 -143
  193. package/dist/template/implementations/view_search_input.template.js +2 -3
  194. package/dist/template/index.js +5 -8
  195. package/dist/template/template-manager.js +13 -26
  196. package/dist/template/template-types.js +2 -3
  197. package/dist/template/template.js +7 -11
  198. package/dist/template/zod-converter.js +173 -348
  199. package/dist/testing/_relation-graph.js +18 -37
  200. package/dist/testing/bootstrap.js +5 -8
  201. package/dist/testing/data-explorer.js +34 -78
  202. package/dist/testing/dev-test-routes.js +54 -60
  203. package/dist/testing/dev-vitest-manager.js +33 -84
  204. package/dist/testing/faker-mappings.js +3 -4
  205. package/dist/testing/fixture-generator.d.ts +2 -1
  206. package/dist/testing/fixture-generator.d.ts.map +1 -1
  207. package/dist/testing/fixture-generator.js +159 -321
  208. package/dist/testing/fixture-loader.js +2 -2
  209. package/dist/testing/fixture-manager.d.ts.map +1 -1
  210. package/dist/testing/fixture-manager.js +124 -227
  211. package/dist/testing/global-setup.d.ts.map +1 -1
  212. package/dist/testing/global-setup.js +29 -17
  213. package/dist/testing/index.js +1 -2
  214. package/dist/testing/naite-vitest-reporter.js +2 -3
  215. package/dist/testing/parallel-db-manager.js +5 -3
  216. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  217. package/dist/testing/vitest-helpers.js +15 -12
  218. package/dist/types/types.d.ts +14 -14
  219. package/dist/types/types.js +27 -50
  220. package/dist/ui/ai-api.js +6 -11
  221. package/dist/ui/ai-client.js +86 -134
  222. package/dist/ui/api.js +99 -195
  223. package/dist/ui/cdd-service.js +78 -130
  224. package/dist/ui/cdd-types.js +1 -1
  225. package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
  226. package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
  227. package/dist/ui-web/index.html +2 -2
  228. package/dist/utils/async-utils.js +13 -25
  229. package/dist/utils/class-name.js +3 -4
  230. package/dist/utils/console-util.js +11 -26
  231. package/dist/utils/controller.d.ts.map +1 -1
  232. package/dist/utils/controller.js +14 -12
  233. package/dist/utils/esm-utils.js +5 -8
  234. package/dist/utils/formatter.js +10 -22
  235. package/dist/utils/fs-utils.js +14 -25
  236. package/dist/utils/lodash-able.js +3 -4
  237. package/dist/utils/model.js +7 -14
  238. package/dist/utils/object-utils.js +41 -73
  239. package/dist/utils/path-utils.js +5 -9
  240. package/dist/utils/process-utils.js +4 -7
  241. package/dist/utils/sql-parser.js +6 -13
  242. package/dist/utils/type-utils.js +16 -26
  243. package/dist/utils/utils.js +18 -40
  244. package/dist/utils/zod-error.js +9 -16
  245. package/dist/vector/chunking.js +24 -37
  246. package/dist/vector/config.js +2 -2
  247. package/dist/vector/embedding.js +8 -19
  248. package/dist/vector/index.js +1 -2
  249. package/dist/vector/types.js +1 -1
  250. package/package.json +6 -6
  251. package/src/__tests__/env.test.ts +127 -0
  252. package/src/api/__tests__/config.test.ts +10 -1
  253. package/src/api/config.ts +4 -12
  254. package/src/api/sonamu.ts +14 -4
  255. package/src/bin/__tests__/migrate-targets.test.ts +28 -0
  256. package/src/bin/__tests__/test-command.test.ts +82 -1
  257. package/src/bin/cli.ts +9 -18
  258. package/src/bin/fixture.ts +5 -4
  259. package/src/bin/migrate-targets.ts +7 -0
  260. package/src/bin/test-command.ts +2 -2
  261. package/src/database/__tests__/db.test.ts +175 -0
  262. package/src/database/db.ts +193 -71
  263. package/src/dict/en.ts +2 -0
  264. package/src/dict/ko.ts +2 -0
  265. package/src/env.ts +123 -0
  266. package/src/migration/__tests__/migrator.test.ts +149 -0
  267. package/src/migration/migrator.ts +74 -17
  268. package/src/migration/slack-confirm.ts +21 -0
  269. package/src/skills/sonamu/database.md +1 -1
  270. package/src/skills/sonamu/testing-devrunner.md +1 -1
  271. package/src/stream/ws-telemetry-memory.ts +2 -2
  272. package/src/testing/fixture-generator.ts +2 -1
  273. package/src/testing/fixture-manager.ts +3 -4
  274. package/src/testing/global-setup.ts +42 -18
  275. package/src/testing/vitest-helpers.ts +14 -0
  276. package/src/utils/controller.ts +14 -7
  277. package/tsdown.api.config.ts +6 -0
  278. package/dist/_virtual/rolldown_runtime.js +0 -39
  279. package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
@@ -1,5 +1,4 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
-
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
3
2
  //#region src/stream/ws-local-connection-store.ts
4
3
  function isTelemetryInspectableConnection(connection) {
5
4
  return "getTelemetrySnapshot" in connection && typeof connection.getTelemetrySnapshot === "function";
@@ -7,7 +6,7 @@ function isTelemetryInspectableConnection(connection) {
7
6
  var WebSocketLocalConnectionStore;
8
7
  var init_ws_local_connection_store = __esmMin((() => {
9
8
  WebSocketLocalConnectionStore = class {
10
- connections = new Map();
9
+ connections = /* @__PURE__ */ new Map();
11
10
  register(connection) {
12
11
  this.connections.set(connection.id, connection);
13
12
  }
@@ -19,16 +18,12 @@ var init_ws_local_connection_store = __esmMin((() => {
19
18
  }
20
19
  getConnections(connectionIds) {
21
20
  const targets = [];
22
- const seen = new Set();
21
+ const seen = /* @__PURE__ */ new Set();
23
22
  for (const connectionId of connectionIds) {
24
- if (seen.has(connectionId)) {
25
- continue;
26
- }
23
+ if (seen.has(connectionId)) continue;
27
24
  seen.add(connectionId);
28
25
  const connection = this.connections.get(connectionId);
29
- if (!connection || connection.closed) {
30
- continue;
31
- }
26
+ if (!connection || connection.closed) continue;
32
27
  targets.push(connection);
33
28
  }
34
29
  return targets;
@@ -40,9 +35,7 @@ var init_ws_local_connection_store = __esmMin((() => {
40
35
  socketBufferedBytes: 0
41
36
  };
42
37
  for (const connection of this.connections.values()) {
43
- if (!isTelemetryInspectableConnection(connection)) {
44
- continue;
45
- }
38
+ if (!isTelemetryInspectableConnection(connection)) continue;
46
39
  const connectionSnapshot = connection.getTelemetrySnapshot();
47
40
  snapshot.pendingInboundMessages += connectionSnapshot.pendingInboundMessages;
48
41
  snapshot.pendingOutboundMessages += connectionSnapshot.pendingOutboundMessages;
@@ -51,14 +44,12 @@ var init_ws_local_connection_store = __esmMin((() => {
51
44
  return snapshot;
52
45
  }
53
46
  closeAll(code, reason) {
54
- for (const connection of this.connections.values()) {
55
- connection.close(code, reason);
56
- }
47
+ for (const connection of this.connections.values()) connection.close(code, reason);
57
48
  }
58
49
  };
59
50
  }));
60
-
61
51
  //#endregion
62
52
  init_ws_local_connection_store();
63
53
  export { WebSocketLocalConnectionStore, init_ws_local_connection_store };
64
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtbG9jYWwtY29ubmVjdGlvbi1zdG9yZS5qcyIsIm5hbWVzIjpbInRhcmdldHM6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW10iLCJzbmFwc2hvdDogV2ViU29ja2V0VGVsZW1ldHJ5Q29ubmVjdGlvblNuYXBzaG90Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1sb2NhbC1jb25uZWN0aW9uLXN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24gfSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25TbmFwc2hvdCxcbiAgdHlwZSBUZWxlbWV0cnlJbnNwZWN0YWJsZUNvbm5lY3Rpb24sXG59IGZyb20gXCIuL3dzLXRlbGVtZXRyeVwiO1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0TG9jYWxDb25uZWN0aW9uU3RvcmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uPigpO1xuXG4gIHJlZ2lzdGVyKGNvbm5lY3Rpb246IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoY29ubmVjdGlvbi5pZCwgY29ubmVjdGlvbik7XG4gIH1cblxuICB1bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5kZWxldGUoY29ubmVjdGlvbklkKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkOiBzdHJpbmcpOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnMuZ2V0KGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9ucyhjb25uZWN0aW9uSWRzOiBzdHJpbmdbXSk6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW10ge1xuICAgIGNvbnN0IHRhcmdldHM6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb25JZCBvZiBjb25uZWN0aW9uSWRzKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoY29ubmVjdGlvbklkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGNvbm5lY3Rpb25JZCk7XG5cbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLmdldChjb25uZWN0aW9uSWQpO1xuICAgICAgaWYgKCFjb25uZWN0aW9uIHx8IGNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRzLnB1c2goY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldHM7XG4gIH1cblxuICBnZXRUZWxlbWV0cnlTbmFwc2hvdCgpOiBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uU25hcHNob3Qge1xuICAgIGNvbnN0IHNuYXBzaG90OiBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uU25hcHNob3QgPSB7XG4gICAgICBwZW5kaW5nSW5ib3VuZE1lc3NhZ2VzOiAwLFxuICAgICAgcGVuZGluZ091dGJvdW5kTWVzc2FnZXM6IDAsXG4gICAgICBzb2NrZXRCdWZmZXJlZEJ5dGVzOiAwLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFpc1RlbGVtZXRyeUluc3BlY3RhYmxlQ29ubmVjdGlvbihjb25uZWN0aW9uKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29ubmVjdGlvblNuYXBzaG90ID0gY29ubmVjdGlvbi5nZXRUZWxlbWV0cnlTbmFwc2hvdCgpO1xuICAgICAgc25hcHNob3QucGVuZGluZ0luYm91bmRNZXNzYWdlcyArPSBjb25uZWN0aW9uU25hcHNob3QucGVuZGluZ0luYm91bmRNZXNzYWdlcztcbiAgICAgIHNuYXBzaG90LnBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzICs9IGNvbm5lY3Rpb25TbmFwc2hvdC5wZW5kaW5nT3V0Ym91bmRNZXNzYWdlcztcbiAgICAgIHNuYXBzaG90LnNvY2tldEJ1ZmZlcmVkQnl0ZXMgKz0gY29ubmVjdGlvblNuYXBzaG90LnNvY2tldEJ1ZmZlcmVkQnl0ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9XG5cbiAgY2xvc2VBbGwoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2UoY29kZSwgcmVhc29uKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZWxlbWV0cnlJbnNwZWN0YWJsZUNvbm5lY3Rpb24oXG4gIGNvbm5lY3Rpb246IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uLFxuKTogY29ubmVjdGlvbiBpcyBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiAmIFRlbGVtZXRyeUluc3BlY3RhYmxlQ29ubmVjdGlvbiB7XG4gIHJldHVybiAoXG4gICAgXCJnZXRUZWxlbWV0cnlTbmFwc2hvdFwiIGluIGNvbm5lY3Rpb24gJiYgdHlwZW9mIGNvbm5lY3Rpb24uZ2V0VGVsZW1ldHJ5U25hcHNob3QgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFzRUEsU0FBUyxpQ0FDUCxZQUMyRTtBQUMzRSxRQUNFLDBCQUEwQixjQUFjLE9BQU8sV0FBVyx5QkFBeUI7Ozs7Q0FwRTFFLGdDQUFiLE1BQTJDO0VBQ3pDLEFBQWlCLGNBQWMsSUFBSSxLQUF5QztFQUU1RSxTQUFTLFlBQThDO0FBQ3JELFFBQUssWUFBWSxJQUFJLFdBQVcsSUFBSSxXQUFXOztFQUdqRCxXQUFXLGNBQTRCO0FBQ3JDLFFBQUssWUFBWSxPQUFPLGFBQWE7O0VBR3ZDLGNBQWMsY0FBOEQ7QUFDMUUsVUFBTyxLQUFLLFlBQVksSUFBSSxhQUFhOztFQUczQyxlQUFlLGVBQXVEO0dBQ3BFLE1BQU1BLFVBQXdDLEVBQUU7R0FDaEQsTUFBTSxPQUFPLElBQUksS0FBYTtBQUU5QixRQUFLLE1BQU0sZ0JBQWdCLGVBQWU7QUFDeEMsUUFBSSxLQUFLLElBQUksYUFBYSxFQUFFO0FBQzFCOztBQUVGLFNBQUssSUFBSSxhQUFhO0lBRXRCLE1BQU0sYUFBYSxLQUFLLFlBQVksSUFBSSxhQUFhO0FBQ3JELFFBQUksQ0FBQyxjQUFjLFdBQVcsUUFBUTtBQUNwQzs7QUFHRixZQUFRLEtBQUssV0FBVzs7QUFHMUIsVUFBTzs7RUFHVCx1QkFBNkQ7R0FDM0QsTUFBTUMsV0FBaUQ7SUFDckQsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6QixxQkFBcUI7SUFDdEI7QUFFRCxRQUFLLE1BQU0sY0FBYyxLQUFLLFlBQVksUUFBUSxFQUFFO0FBQ2xELFFBQUksQ0FBQyxpQ0FBaUMsV0FBVyxFQUFFO0FBQ2pEOztJQUdGLE1BQU0scUJBQXFCLFdBQVcsc0JBQXNCO0FBQzVELGFBQVMsMEJBQTBCLG1CQUFtQjtBQUN0RCxhQUFTLDJCQUEyQixtQkFBbUI7QUFDdkQsYUFBUyx1QkFBdUIsbUJBQW1COztBQUdyRCxVQUFPOztFQUdULFNBQVMsTUFBZSxRQUF1QjtBQUM3QyxRQUFLLE1BQU0sY0FBYyxLQUFLLFlBQVksUUFBUSxFQUFFO0FBQ2xELGVBQVcsTUFBTSxNQUFNLE9BQU8ifQ==
54
+
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtbG9jYWwtY29ubmVjdGlvbi1zdG9yZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWFtL3dzLWxvY2FsLWNvbm5lY3Rpb24tc3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiB9IGZyb20gXCIuL3dzLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5Q29ubmVjdGlvblNuYXBzaG90LFxuICB0eXBlIFRlbGVtZXRyeUluc3BlY3RhYmxlQ29ubmVjdGlvbixcbn0gZnJvbSBcIi4vd3MtdGVsZW1ldHJ5XCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24+KCk7XG5cbiAgcmVnaXN0ZXIoY29ubmVjdGlvbjogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChjb25uZWN0aW9uLmlkLCBjb25uZWN0aW9uKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXIoY29ubmVjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmRlbGV0ZShjb25uZWN0aW9uSWQpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQ6IHN0cmluZyk6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucy5nZXQoY29ubmVjdGlvbklkKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25zKGNvbm5lY3Rpb25JZHM6IHN0cmluZ1tdKTogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb25bXSB7XG4gICAgY29uc3QgdGFyZ2V0czogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb25bXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgY29ubmVjdGlvbklkIG9mIGNvbm5lY3Rpb25JZHMpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhjb25uZWN0aW9uSWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoY29ubmVjdGlvbklkKTtcblxuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KGNvbm5lY3Rpb25JZCk7XG4gICAgICBpZiAoIWNvbm5lY3Rpb24gfHwgY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldHMucHVzaChjb25uZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0cztcbiAgfVxuXG4gIGdldFRlbGVtZXRyeVNuYXBzaG90KCk6IFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25TbmFwc2hvdCB7XG4gICAgY29uc3Qgc25hcHNob3Q6IFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25TbmFwc2hvdCA9IHtcbiAgICAgIHBlbmRpbmdJbmJvdW5kTWVzc2FnZXM6IDAsXG4gICAgICBwZW5kaW5nT3V0Ym91bmRNZXNzYWdlczogMCxcbiAgICAgIHNvY2tldEJ1ZmZlcmVkQnl0ZXM6IDAsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIWlzVGVsZW1ldHJ5SW5zcGVjdGFibGVDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb25uZWN0aW9uU25hcHNob3QgPSBjb25uZWN0aW9uLmdldFRlbGVtZXRyeVNuYXBzaG90KCk7XG4gICAgICBzbmFwc2hvdC5wZW5kaW5nSW5ib3VuZE1lc3NhZ2VzICs9IGNvbm5lY3Rpb25TbmFwc2hvdC5wZW5kaW5nSW5ib3VuZE1lc3NhZ2VzO1xuICAgICAgc25hcHNob3QucGVuZGluZ091dGJvdW5kTWVzc2FnZXMgKz0gY29ubmVjdGlvblNuYXBzaG90LnBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzO1xuICAgICAgc25hcHNob3Quc29ja2V0QnVmZmVyZWRCeXRlcyArPSBjb25uZWN0aW9uU25hcHNob3Quc29ja2V0QnVmZmVyZWRCeXRlcztcbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH1cblxuICBjbG9zZUFsbChjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgY29ubmVjdGlvbi5jbG9zZShjb2RlLCByZWFzb24pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RlbGVtZXRyeUluc3BlY3RhYmxlQ29ubmVjdGlvbihcbiAgY29ubmVjdGlvbjogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4pOiBjb25uZWN0aW9uIGlzIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uICYgVGVsZW1ldHJ5SW5zcGVjdGFibGVDb25uZWN0aW9uIHtcbiAgcmV0dXJuIChcbiAgICBcImdldFRlbGVtZXRyeVNuYXBzaG90XCIgaW4gY29ubmVjdGlvbiAmJiB0eXBlb2YgY29ubmVjdGlvbi5nZXRUZWxlbWV0cnlTbmFwc2hvdCA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBc0VBLFNBQVMsaUNBQ1AsWUFDMkU7Q0FDM0UsT0FDRSwwQkFBMEIsY0FBYyxPQUFPLFdBQVcseUJBQXlCO0FBRXZGOzs7Q0F0RWEsZ0NBQWIsTUFBMkM7RUFDekMsOEJBQStCLElBQUksSUFBd0M7RUFFM0UsU0FBUyxZQUE4QztHQUNyRCxLQUFLLFlBQVksSUFBSSxXQUFXLElBQUksVUFBVTtFQUNoRDtFQUVBLFdBQVcsY0FBNEI7R0FDckMsS0FBSyxZQUFZLE9BQU8sWUFBWTtFQUN0QztFQUVBLGNBQWMsY0FBOEQ7R0FDMUUsT0FBTyxLQUFLLFlBQVksSUFBSSxZQUFZO0VBQzFDO0VBRUEsZUFBZSxlQUF1RDtHQUNwRSxNQUFNLFVBQXdDLENBQUM7R0FDL0MsTUFBTSx1QkFBTyxJQUFJLElBQVk7R0FFN0IsS0FBSyxNQUFNLGdCQUFnQixlQUFlO0lBQ3hDLElBQUksS0FBSyxJQUFJLFlBQVksR0FDdkI7SUFFRixLQUFLLElBQUksWUFBWTtJQUVyQixNQUFNLGFBQWEsS0FBSyxZQUFZLElBQUksWUFBWTtJQUNwRCxJQUFJLENBQUMsY0FBYyxXQUFXLFFBQzVCO0lBR0YsUUFBUSxLQUFLLFVBQVU7R0FDekI7R0FFQSxPQUFPO0VBQ1Q7RUFFQSx1QkFBNkQ7R0FDM0QsTUFBTSxXQUFpRDtJQUNyRCx3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLHFCQUFxQjtHQUN2QjtHQUVBLEtBQUssTUFBTSxjQUFjLEtBQUssWUFBWSxPQUFPLEdBQUc7SUFDbEQsSUFBSSxDQUFDLGlDQUFpQyxVQUFVLEdBQzlDO0lBR0YsTUFBTSxxQkFBcUIsV0FBVyxxQkFBcUI7SUFDM0QsU0FBUywwQkFBMEIsbUJBQW1CO0lBQ3RELFNBQVMsMkJBQTJCLG1CQUFtQjtJQUN2RCxTQUFTLHVCQUF1QixtQkFBbUI7R0FDckQ7R0FFQSxPQUFPO0VBQ1Q7RUFFQSxTQUFTLE1BQWUsUUFBdUI7R0FDN0MsS0FBSyxNQUFNLGNBQWMsS0FBSyxZQUFZLE9BQU8sR0FDL0MsV0FBVyxNQUFNLE1BQU0sTUFBTTtFQUVqQztDQUNGIn0=
@@ -1,5 +1,4 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
-
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
3
2
  //#region src/stream/ws-presence-store.ts
4
3
  function getBindingKey(namespace, id) {
5
4
  return `${namespace}::${id}`;
@@ -14,88 +13,68 @@ function parseBindingKey(key) {
14
13
  var InMemoryWebSocketPresenceStore;
15
14
  var init_ws_presence_store = __esmMin((() => {
16
15
  InMemoryWebSocketPresenceStore = class {
17
- connections = new Map();
18
- rooms = new Map();
19
- users = new Map();
16
+ connections = /* @__PURE__ */ new Map();
17
+ rooms = /* @__PURE__ */ new Map();
18
+ users = /* @__PURE__ */ new Map();
20
19
  register(input) {
21
20
  const meta = {
22
21
  sessionId: input.sessionId,
23
22
  nodeId: input.nodeId,
24
23
  namespace: input.namespace,
25
24
  active: input.active ?? true,
26
- rooms: new Set(),
27
- connectedAt: new Date(),
28
- lastSeenAt: new Date()
25
+ rooms: /* @__PURE__ */ new Set(),
26
+ connectedAt: /* @__PURE__ */ new Date(),
27
+ lastSeenAt: /* @__PURE__ */ new Date()
29
28
  };
30
29
  this.connections.set(input.sessionId, meta);
31
30
  return meta;
32
31
  }
33
32
  activate(sessionId) {
34
33
  const meta = this.connections.get(sessionId);
35
- if (!meta) {
36
- return;
37
- }
34
+ if (!meta) return;
38
35
  meta.active = true;
39
36
  }
40
37
  unregister(sessionId) {
41
38
  const meta = this.connections.get(sessionId);
42
- if (!meta) {
43
- return undefined;
44
- }
45
- if (meta.userId !== undefined) {
46
- this.removeUserBinding(meta.namespace, meta.userId, sessionId);
47
- }
48
- for (const roomId of meta.rooms) {
49
- this.removeRoomBinding(meta.namespace, roomId, sessionId);
50
- }
39
+ if (!meta) return;
40
+ if (meta.userId !== void 0) this.removeUserBinding(meta.namespace, meta.userId, sessionId);
41
+ for (const roomId of meta.rooms) this.removeRoomBinding(meta.namespace, roomId, sessionId);
51
42
  this.connections.delete(sessionId);
52
43
  return meta;
53
44
  }
54
45
  touch(sessionId) {
55
46
  const meta = this.connections.get(sessionId);
56
- if (!meta) {
57
- return;
58
- }
59
- meta.lastSeenAt = new Date();
47
+ if (!meta) return;
48
+ meta.lastSeenAt = /* @__PURE__ */ new Date();
60
49
  }
61
50
  setUserId(sessionId, userId) {
62
51
  const meta = this.connections.get(sessionId);
63
- if (!meta) {
64
- return;
65
- }
66
- if (meta.userId !== undefined) {
67
- this.removeUserBinding(meta.namespace, meta.userId, sessionId);
68
- }
52
+ if (!meta) return;
53
+ if (meta.userId !== void 0) this.removeUserBinding(meta.namespace, meta.userId, sessionId);
69
54
  meta.userId = userId;
70
55
  const key = getBindingKey(meta.namespace, String(userId));
71
- const bound = this.users.get(key) ?? new Set();
56
+ const bound = this.users.get(key) ?? /* @__PURE__ */ new Set();
72
57
  bound.add(sessionId);
73
58
  this.users.set(key, bound);
74
59
  }
75
60
  clearUserId(sessionId) {
76
61
  const meta = this.connections.get(sessionId);
77
- if (!meta || meta.userId === undefined) {
78
- return;
79
- }
62
+ if (!meta || meta.userId === void 0) return;
80
63
  this.removeUserBinding(meta.namespace, meta.userId, sessionId);
81
64
  delete meta.userId;
82
65
  }
83
66
  join(sessionId, roomId) {
84
67
  const meta = this.connections.get(sessionId);
85
- if (!meta) {
86
- return;
87
- }
68
+ if (!meta) return;
88
69
  meta.rooms.add(roomId);
89
70
  const key = getBindingKey(meta.namespace, roomId);
90
- const members = this.rooms.get(key) ?? new Set();
71
+ const members = this.rooms.get(key) ?? /* @__PURE__ */ new Set();
91
72
  members.add(sessionId);
92
73
  this.rooms.set(key, members);
93
74
  }
94
75
  leave(sessionId, roomId) {
95
76
  const meta = this.connections.get(sessionId);
96
- if (!meta) {
97
- return;
98
- }
77
+ if (!meta) return;
99
78
  meta.rooms.delete(roomId);
100
79
  this.removeRoomBinding(meta.namespace, roomId, sessionId);
101
80
  }
@@ -105,9 +84,7 @@ var init_ws_presence_store = __esmMin((() => {
105
84
  getConnectionCount(namespace) {
106
85
  let count = 0;
107
86
  for (const meta of this.connections.values()) {
108
- if (!meta.active || namespace && meta.namespace !== namespace) {
109
- continue;
110
- }
87
+ if (!meta.active || namespace && meta.namespace !== namespace) continue;
111
88
  count += 1;
112
89
  }
113
90
  return count;
@@ -118,9 +95,7 @@ var init_ws_presence_store = __esmMin((() => {
118
95
  getStats() {
119
96
  const byNamespace = {};
120
97
  for (const meta of this.connections.values()) {
121
- if (!meta.active) {
122
- continue;
123
- }
98
+ if (!meta.active) continue;
124
99
  byNamespace[meta.namespace] = (byNamespace[meta.namespace] ?? 0) + 1;
125
100
  }
126
101
  return {
@@ -138,27 +113,19 @@ var init_ws_presence_store = __esmMin((() => {
138
113
  const metas = [];
139
114
  for (const connectionId of audience.connectionIds) {
140
115
  const meta = this.connections.get(connectionId);
141
- if (!meta?.active) {
142
- continue;
143
- }
144
- if (audience.namespace && meta.namespace !== audience.namespace) {
145
- continue;
146
- }
116
+ if (!meta?.active) continue;
117
+ if (audience.namespace && meta.namespace !== audience.namespace) continue;
147
118
  metas.push(meta);
148
119
  }
149
120
  return metas;
150
121
  }
151
122
  case "union": {
152
- const seen = new Set();
123
+ const seen = /* @__PURE__ */ new Set();
153
124
  const metas = [];
154
- for (const item of audience.audiences) {
155
- for (const meta of this.queryAudience(item)) {
156
- if (seen.has(meta.sessionId)) {
157
- continue;
158
- }
159
- seen.add(meta.sessionId);
160
- metas.push(meta);
161
- }
125
+ for (const item of audience.audiences) for (const meta of this.queryAudience(item)) {
126
+ if (seen.has(meta.sessionId)) continue;
127
+ seen.add(meta.sessionId);
128
+ metas.push(meta);
162
129
  }
163
130
  return metas;
164
131
  }
@@ -167,27 +134,19 @@ var init_ws_presence_store = __esmMin((() => {
167
134
  getActiveConnections(namespace) {
168
135
  const metas = [];
169
136
  for (const meta of this.connections.values()) {
170
- if (!meta.active || namespace && meta.namespace !== namespace) {
171
- continue;
172
- }
137
+ if (!meta.active || namespace && meta.namespace !== namespace) continue;
173
138
  metas.push(meta);
174
139
  }
175
140
  return metas;
176
141
  }
177
142
  getBoundConnections(bindings, id, namespace) {
178
143
  const metas = [];
179
- const seen = new Set();
180
- for (const members of this.getScopedBindings(bindings, id, namespace)) {
181
- for (const connectionId of members) {
182
- if (seen.has(connectionId)) {
183
- continue;
184
- }
185
- seen.add(connectionId);
186
- const meta = this.connections.get(connectionId);
187
- if (meta?.active) {
188
- metas.push(meta);
189
- }
190
- }
144
+ const seen = /* @__PURE__ */ new Set();
145
+ for (const members of this.getScopedBindings(bindings, id, namespace)) for (const connectionId of members) {
146
+ if (seen.has(connectionId)) continue;
147
+ seen.add(connectionId);
148
+ const meta = this.connections.get(connectionId);
149
+ if (meta?.active) metas.push(meta);
191
150
  }
192
151
  return metas;
193
152
  }
@@ -197,40 +156,27 @@ var init_ws_presence_store = __esmMin((() => {
197
156
  return exact ? [exact] : [];
198
157
  }
199
158
  const matches = [];
200
- for (const [key, members] of bindings) {
201
- const parsed = parseBindingKey(key);
202
- if (parsed.id === id) {
203
- matches.push(members);
204
- }
205
- }
159
+ for (const [key, members] of bindings) if (parseBindingKey(key).id === id) matches.push(members);
206
160
  return matches;
207
161
  }
208
162
  removeRoomBinding(namespace, roomId, sessionId) {
209
163
  const key = getBindingKey(namespace, roomId);
210
164
  const members = this.rooms.get(key);
211
- if (!members) {
212
- return;
213
- }
165
+ if (!members) return;
214
166
  members.delete(sessionId);
215
- if (members.size === 0) {
216
- this.rooms.delete(key);
217
- }
167
+ if (members.size === 0) this.rooms.delete(key);
218
168
  }
219
169
  removeUserBinding(namespace, userId, sessionId) {
220
170
  const key = getBindingKey(namespace, String(userId));
221
171
  const members = this.users.get(key);
222
- if (!members) {
223
- return;
224
- }
172
+ if (!members) return;
225
173
  members.delete(sessionId);
226
- if (members.size === 0) {
227
- this.users.delete(key);
228
- }
174
+ if (members.size === 0) this.users.delete(key);
229
175
  }
230
176
  };
231
177
  }));
232
-
233
178
  //#endregion
234
179
  init_ws_presence_store();
235
180
  export { InMemoryWebSocketPresenceStore, init_ws_presence_store };
236
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtcHJlc2VuY2Utc3RvcmUuanMiLCJuYW1lcyI6WyJtZXRhOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UiLCJieU5hbWVzcGFjZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiIsIm1ldGFzOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSIsIm1hdGNoZXM6IFNldDxzdHJpbmc+W10iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWFtL3dzLXByZXNlbmNlLXN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgV2ViU29ja2V0QXVkaWVuY2UgfSBmcm9tIFwiLi93cy1hdWRpZW5jZVwiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRSZWdpc3RyeVN0YXRzLCB0eXBlIFdlYlNvY2tldFJvb21JZCwgdHlwZSBXZWJTb2NrZXRVc2VySWQgfSBmcm9tIFwiLi93cy1jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG5vZGVJZDogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgYWN0aXZlOiBib29sZWFuO1xuICByb29tczogU2V0PFdlYlNvY2tldFJvb21JZD47XG4gIGNvbm5lY3RlZEF0OiBEYXRlO1xuICBsYXN0U2VlbkF0OiBEYXRlO1xuICB1c2VySWQ/OiBXZWJTb2NrZXRVc2VySWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNvY2tldFByZXNlbmNlU3RvcmUge1xuICByZWdpc3RlcihpbnB1dDoge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH0pOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2U7XG4gIGFjdGl2YXRlKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZDtcbiAgdW5yZWdpc3RlcihzZXNzaW9uSWQ6IHN0cmluZyk6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSB8IHVuZGVmaW5lZDtcbiAgdG91Y2goc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkO1xuICBzZXRVc2VySWQoc2Vzc2lvbklkOiBzdHJpbmcsIHVzZXJJZDogV2ViU29ja2V0VXNlcklkKTogdm9pZDtcbiAgY2xlYXJVc2VySWQoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkO1xuICBqb2luKHNlc3Npb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQ7XG4gIGxlYXZlKHNlc3Npb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQ7XG4gIGdldENvbm5lY3Rpb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UgfCB1bmRlZmluZWQ7XG4gIGdldENvbm5lY3Rpb25Db3VudChuYW1lc3BhY2U/OiBzdHJpbmcpOiBudW1iZXI7XG4gIGdldFJvb21NZW1iZXJzKHJvb21JZDogV2ViU29ja2V0Um9vbUlkLCBuYW1lc3BhY2U/OiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXTtcbiAgZ2V0U3RhdHMoKTogV2ViU29ja2V0UmVnaXN0cnlTdGF0cztcbiAgcXVlcnlBdWRpZW5jZShhdWRpZW5jZTogV2ViU29ja2V0QXVkaWVuY2UpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSBpbXBsZW1lbnRzIFdlYlNvY2tldFByZXNlbmNlU3RvcmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb29tcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VycyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZWdpc3RlcihpbnB1dDoge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH0pOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2Uge1xuICAgIGNvbnN0IG1ldGE6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSA9IHtcbiAgICAgIHNlc3Npb25JZDogaW5wdXQuc2Vzc2lvbklkLFxuICAgICAgbm9kZUlkOiBpbnB1dC5ub2RlSWQsXG4gICAgICBuYW1lc3BhY2U6IGlucHV0Lm5hbWVzcGFjZSxcbiAgICAgIGFjdGl2ZTogaW5wdXQuYWN0aXZlID8/IHRydWUsXG4gICAgICByb29tczogbmV3IFNldCgpLFxuICAgICAgY29ubmVjdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBsYXN0U2VlbkF0OiBuZXcgRGF0ZSgpLFxuICAgIH07XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaW5wdXQuc2Vzc2lvbklkLCBtZXRhKTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIGFjdGl2YXRlKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWV0YS5hY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgdW5yZWdpc3RlcihzZXNzaW9uSWQ6IHN0cmluZyk6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChtZXRhLnVzZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlbW92ZVVzZXJCaW5kaW5nKG1ldGEubmFtZXNwYWNlLCBtZXRhLnVzZXJJZCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvb21JZCBvZiBtZXRhLnJvb21zKSB7XG4gICAgICB0aGlzLnJlbW92ZVJvb21CaW5kaW5nKG1ldGEubmFtZXNwYWNlLCByb29tSWQsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHRvdWNoKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWV0YS5sYXN0U2VlbkF0ID0gbmV3IERhdGUoKTtcbiAgfVxuXG4gIHNldFVzZXJJZChzZXNzaW9uSWQ6IHN0cmluZywgdXNlcklkOiBXZWJTb2NrZXRVc2VySWQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5jb25uZWN0aW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWV0YS51c2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZW1vdmVVc2VyQmluZGluZyhtZXRhLm5hbWVzcGFjZSwgbWV0YS51c2VySWQsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgbWV0YS51c2VySWQgPSB1c2VySWQ7XG4gICAgY29uc3Qga2V5ID0gZ2V0QmluZGluZ0tleShtZXRhLm5hbWVzcGFjZSwgU3RyaW5nKHVzZXJJZCkpO1xuICAgIGNvbnN0IGJvdW5kID0gdGhpcy51c2Vycy5nZXQoa2V5KSA/PyBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBib3VuZC5hZGQoc2Vzc2lvbklkKTtcbiAgICB0aGlzLnVzZXJzLnNldChrZXksIGJvdW5kKTtcbiAgfVxuXG4gIGNsZWFyVXNlcklkKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFtZXRhIHx8IG1ldGEudXNlcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZVVzZXJCaW5kaW5nKG1ldGEubmFtZXNwYWNlLCBtZXRhLnVzZXJJZCwgc2Vzc2lvbklkKTtcbiAgICBkZWxldGUgbWV0YS51c2VySWQ7XG4gIH1cblxuICBqb2luKHNlc3Npb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbm5lY3Rpb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1ldGEucm9vbXMuYWRkKHJvb21JZCk7XG4gICAgY29uc3Qga2V5ID0gZ2V0QmluZGluZ0tleShtZXRhLm5hbWVzcGFjZSwgcm9vbUlkKTtcbiAgICBjb25zdCBtZW1iZXJzID0gdGhpcy5yb29tcy5nZXQoa2V5KSA/PyBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBtZW1iZXJzLmFkZChzZXNzaW9uSWQpO1xuICAgIHRoaXMucm9vbXMuc2V0KGtleSwgbWVtYmVycyk7XG4gIH1cblxuICBsZWF2ZShzZXNzaW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5jb25uZWN0aW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtZXRhLnJvb21zLmRlbGV0ZShyb29tSWQpO1xuICAgIHRoaXMucmVtb3ZlUm9vbUJpbmRpbmcobWV0YS5uYW1lc3BhY2UsIHJvb21JZCwgc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zLmdldChzZXNzaW9uSWQpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbkNvdW50KG5hbWVzcGFjZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgbWV0YSBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIW1ldGEuYWN0aXZlIHx8IChuYW1lc3BhY2UgJiYgbWV0YS5uYW1lc3BhY2UgIT09IG5hbWVzcGFjZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgZ2V0Um9vbU1lbWJlcnMocm9vbUlkOiBXZWJTb2NrZXRSb29tSWQsIG5hbWVzcGFjZT86IHN0cmluZyk6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZENvbm5lY3Rpb25zKHRoaXMucm9vbXMsIHJvb21JZCwgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IFdlYlNvY2tldFJlZ2lzdHJ5U3RhdHMge1xuICAgIGNvbnN0IGJ5TmFtZXNwYWNlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFtZXRhLmFjdGl2ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJ5TmFtZXNwYWNlW21ldGEubmFtZXNwYWNlXSA9IChieU5hbWVzcGFjZVttZXRhLm5hbWVzcGFjZV0gPz8gMCkgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbENvbm5lY3Rpb25zOiBPYmplY3QudmFsdWVzKGJ5TmFtZXNwYWNlKS5yZWR1Y2UoKHN1bSwgY291bnQpID0+IHN1bSArIGNvdW50LCAwKSxcbiAgICAgIHRvdGFsUm9vbXM6IHRoaXMucm9vbXMuc2l6ZSxcbiAgICAgIGJ5TmFtZXNwYWNlLFxuICAgIH07XG4gIH1cblxuICBxdWVyeUF1ZGllbmNlKGF1ZGllbmNlOiBXZWJTb2NrZXRBdWRpZW5jZSk6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZVtdIHtcbiAgICBzd2l0Y2ggKGF1ZGllbmNlLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJhbGxcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQ29ubmVjdGlvbnMoYXVkaWVuY2UubmFtZXNwYWNlKTtcbiAgICAgIGNhc2UgXCJyb29tXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJvdW5kQ29ubmVjdGlvbnModGhpcy5yb29tcywgYXVkaWVuY2Uucm9vbUlkLCBhdWRpZW5jZS5uYW1lc3BhY2UpO1xuICAgICAgY2FzZSBcInVzZXJcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRDb25uZWN0aW9ucyh0aGlzLnVzZXJzLCBTdHJpbmcoYXVkaWVuY2UudXNlcklkKSwgYXVkaWVuY2UubmFtZXNwYWNlKTtcbiAgICAgIGNhc2UgXCJjb25uZWN0aW9uc1wiOiB7XG4gICAgICAgIGNvbnN0IG1ldGFzOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGlvbklkIG9mIGF1ZGllbmNlLmNvbm5lY3Rpb25JZHMpIHtcbiAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5jb25uZWN0aW9ucy5nZXQoY29ubmVjdGlvbklkKTtcbiAgICAgICAgICBpZiAoIW1ldGE/LmFjdGl2ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhdWRpZW5jZS5uYW1lc3BhY2UgJiYgbWV0YS5uYW1lc3BhY2UgIT09IGF1ZGllbmNlLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1ldGFzLnB1c2gobWV0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWV0YXM7XG4gICAgICB9XG4gICAgICBjYXNlIFwidW5pb25cIjoge1xuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IG1ldGFzOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhdWRpZW5jZS5hdWRpZW5jZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdGhpcy5xdWVyeUF1ZGllbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMobWV0YS5zZXNzaW9uSWQpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuLmFkZChtZXRhLnNlc3Npb25JZCk7XG4gICAgICAgICAgICBtZXRhcy5wdXNoKG1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXRhcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZUNvbm5lY3Rpb25zKG5hbWVzcGFjZT86IHN0cmluZyk6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZVtdIHtcbiAgICBjb25zdCBtZXRhczogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgbWV0YSBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIW1ldGEuYWN0aXZlIHx8IChuYW1lc3BhY2UgJiYgbWV0YS5uYW1lc3BhY2UgIT09IG5hbWVzcGFjZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG1ldGFzLnB1c2gobWV0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGFzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCb3VuZENvbm5lY3Rpb25zKFxuICAgIGJpbmRpbmdzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICk6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZVtdIHtcbiAgICBjb25zdCBtZXRhczogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlW10gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG1lbWJlcnMgb2YgdGhpcy5nZXRTY29wZWRCaW5kaW5ncyhiaW5kaW5ncywgaWQsIG5hbWVzcGFjZSkpIHtcbiAgICAgIGZvciAoY29uc3QgY29ubmVjdGlvbklkIG9mIG1lbWJlcnMpIHtcbiAgICAgICAgaWYgKHNlZW4uaGFzKGNvbm5lY3Rpb25JZCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZChjb25uZWN0aW9uSWQpO1xuXG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbm5lY3Rpb25zLmdldChjb25uZWN0aW9uSWQpO1xuICAgICAgICBpZiAobWV0YT8uYWN0aXZlKSB7XG4gICAgICAgICAgbWV0YXMucHVzaChtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXRhcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NvcGVkQmluZGluZ3MoXG4gICAgYmluZGluZ3M6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PixcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWVzcGFjZT86IHN0cmluZyxcbiAgKTogU2V0PHN0cmluZz5bXSB7XG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgY29uc3QgZXhhY3QgPSBiaW5kaW5ncy5nZXQoZ2V0QmluZGluZ0tleShuYW1lc3BhY2UsIGlkKSk7XG4gICAgICByZXR1cm4gZXhhY3QgPyBbZXhhY3RdIDogW107XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlczogU2V0PHN0cmluZz5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgbWVtYmVyc10gb2YgYmluZGluZ3MpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQmluZGluZ0tleShrZXkpO1xuICAgICAgaWYgKHBhcnNlZC5pZCA9PT0gaWQpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKG1lbWJlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSb29tQmluZGluZyhuYW1lc3BhY2U6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQsIHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gZ2V0QmluZGluZ0tleShuYW1lc3BhY2UsIHJvb21JZCk7XG4gICAgY29uc3QgbWVtYmVycyA9IHRoaXMucm9vbXMuZ2V0KGtleSk7XG4gICAgaWYgKCFtZW1iZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWVtYmVycy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICBpZiAobWVtYmVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnJvb21zLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVXNlckJpbmRpbmcobmFtZXNwYWNlOiBzdHJpbmcsIHVzZXJJZDogV2ViU29ja2V0VXNlcklkLCBzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGdldEJpbmRpbmdLZXkobmFtZXNwYWNlLCBTdHJpbmcodXNlcklkKSk7XG4gICAgY29uc3QgbWVtYmVycyA9IHRoaXMudXNlcnMuZ2V0KGtleSk7XG4gICAgaWYgKCFtZW1iZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWVtYmVycy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICBpZiAobWVtYmVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnVzZXJzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaW5kaW5nS2V5KG5hbWVzcGFjZTogc3RyaW5nLCBpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke25hbWVzcGFjZX06OiR7aWR9YDtcbn1cblxuZnVuY3Rpb24gcGFyc2VCaW5kaW5nS2V5KGtleTogc3RyaW5nKTogeyBuYW1lc3BhY2U6IHN0cmluZzsgaWQ6IHN0cmluZyB9IHtcbiAgY29uc3QgW25hbWVzcGFjZSwgLi4ucmVzdF0gPSBrZXkuc3BsaXQoXCI6OlwiKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lc3BhY2UsXG4gICAgaWQ6IHJlc3Quam9pbihcIjo6XCIpLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUEyVEEsU0FBUyxjQUFjLFdBQW1CLElBQW9CO0FBQzVELFFBQU8sR0FBRyxVQUFVLElBQUk7O0FBRzFCLFNBQVMsZ0JBQWdCLEtBQWdEO0NBQ3ZFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsUUFBUSxJQUFJLE1BQU0sS0FBSztBQUM1QyxRQUFPO0VBQ0w7RUFDQSxJQUFJLEtBQUssS0FBSyxLQUFLO0VBQ3BCOzs7O0NBalNVLGlDQUFiLE1BQThFO0VBQzVFLEFBQWlCLGNBQWMsSUFBSSxLQUF1QztFQUMxRSxBQUFpQixRQUFRLElBQUksS0FBMEI7RUFDdkQsQUFBaUIsUUFBUSxJQUFJLEtBQTBCO0VBRXZELFNBQVMsT0FLb0I7R0FDM0IsTUFBTUEsT0FBaUM7SUFDckMsV0FBVyxNQUFNO0lBQ2pCLFFBQVEsTUFBTTtJQUNkLFdBQVcsTUFBTTtJQUNqQixRQUFRLE1BQU0sVUFBVTtJQUN4QixPQUFPLElBQUksS0FBSztJQUNoQixhQUFhLElBQUksTUFBTTtJQUN2QixZQUFZLElBQUksTUFBTTtJQUN2QjtBQUNELFFB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
181
+
182
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtcHJlc2VuY2Utc3RvcmUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1wcmVzZW5jZS1zdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFdlYlNvY2tldEF1ZGllbmNlIH0gZnJvbSBcIi4vd3MtYXVkaWVuY2VcIjtcbmltcG9ydCB7IHR5cGUgV2ViU29ja2V0UmVnaXN0cnlTdGF0cywgdHlwZSBXZWJTb2NrZXRSb29tSWQsIHR5cGUgV2ViU29ja2V0VXNlcklkIH0gZnJvbSBcIi4vd3MtY29yZVwiO1xuXG5leHBvcnQgdHlwZSBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBub2RlSWQ6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgcm9vbXM6IFNldDxXZWJTb2NrZXRSb29tSWQ+O1xuICBjb25uZWN0ZWRBdDogRGF0ZTtcbiAgbGFzdFNlZW5BdDogRGF0ZTtcbiAgdXNlcklkPzogV2ViU29ja2V0VXNlcklkO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlIHtcbiAgcmVnaXN0ZXIoaW5wdXQ6IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICB9KTogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlO1xuICBhY3RpdmF0ZShzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQ7XG4gIHVucmVnaXN0ZXIoc2Vzc2lvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UgfCB1bmRlZmluZWQ7XG4gIHRvdWNoKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZDtcbiAgc2V0VXNlcklkKHNlc3Npb25JZDogc3RyaW5nLCB1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCk6IHZvaWQ7XG4gIGNsZWFyVXNlcklkKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZDtcbiAgam9pbihzZXNzaW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkO1xuICBsZWF2ZShzZXNzaW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkO1xuICBnZXRDb25uZWN0aW9uKHNlc3Npb25JZDogc3RyaW5nKTogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlIHwgdW5kZWZpbmVkO1xuICBnZXRDb25uZWN0aW9uQ291bnQobmFtZXNwYWNlPzogc3RyaW5nKTogbnVtYmVyO1xuICBnZXRSb29tTWVtYmVycyhyb29tSWQ6IFdlYlNvY2tldFJvb21JZCwgbmFtZXNwYWNlPzogc3RyaW5nKTogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlW107XG4gIGdldFN0YXRzKCk6IFdlYlNvY2tldFJlZ2lzdHJ5U3RhdHM7XG4gIHF1ZXJ5QXVkaWVuY2UoYXVkaWVuY2U6IFdlYlNvY2tldEF1ZGllbmNlKTogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlW107XG59XG5cbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlNvY2tldFByZXNlbmNlU3RvcmUgaW1wbGVtZW50cyBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2U+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vbXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlcnMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgcmVnaXN0ZXIoaW5wdXQ6IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICB9KTogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlIHtcbiAgICBjb25zdCBtZXRhOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UgPSB7XG4gICAgICBzZXNzaW9uSWQ6IGlucHV0LnNlc3Npb25JZCxcbiAgICAgIG5vZGVJZDogaW5wdXQubm9kZUlkLFxuICAgICAgbmFtZXNwYWNlOiBpbnB1dC5uYW1lc3BhY2UsXG4gICAgICBhY3RpdmU6IGlucHV0LmFjdGl2ZSA/PyB0cnVlLFxuICAgICAgcm9vbXM6IG5ldyBTZXQoKSxcbiAgICAgIGNvbm5lY3RlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgbGFzdFNlZW5BdDogbmV3IERhdGUoKSxcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlucHV0LnNlc3Npb25JZCwgbWV0YSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBhY3RpdmF0ZShzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbm5lY3Rpb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1ldGEuYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHVucmVnaXN0ZXIoc2Vzc2lvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbm5lY3Rpb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAobWV0YS51c2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZW1vdmVVc2VyQmluZGluZyhtZXRhLm5hbWVzcGFjZSwgbWV0YS51c2VySWQsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb29tSWQgb2YgbWV0YS5yb29tcykge1xuICAgICAgdGhpcy5yZW1vdmVSb29tQmluZGluZyhtZXRhLm5hbWVzcGFjZSwgcm9vbUlkLCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICB0b3VjaChzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbm5lY3Rpb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1ldGEubGFzdFNlZW5BdCA9IG5ldyBEYXRlKCk7XG4gIH1cblxuICBzZXRVc2VySWQoc2Vzc2lvbklkOiBzdHJpbmcsIHVzZXJJZDogV2ViU29ja2V0VXNlcklkKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1ldGEudXNlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVtb3ZlVXNlckJpbmRpbmcobWV0YS5uYW1lc3BhY2UsIG1ldGEudXNlcklkLCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIG1ldGEudXNlcklkID0gdXNlcklkO1xuICAgIGNvbnN0IGtleSA9IGdldEJpbmRpbmdLZXkobWV0YS5uYW1lc3BhY2UsIFN0cmluZyh1c2VySWQpKTtcbiAgICBjb25zdCBib3VuZCA9IHRoaXMudXNlcnMuZ2V0KGtleSkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgYm91bmQuYWRkKHNlc3Npb25JZCk7XG4gICAgdGhpcy51c2Vycy5zZXQoa2V5LCBib3VuZCk7XG4gIH1cblxuICBjbGVhclVzZXJJZChzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbm5lY3Rpb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghbWV0YSB8fCBtZXRhLnVzZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVVc2VyQmluZGluZyhtZXRhLm5hbWVzcGFjZSwgbWV0YS51c2VySWQsIHNlc3Npb25JZCk7XG4gICAgZGVsZXRlIG1ldGEudXNlcklkO1xuICB9XG5cbiAgam9pbihzZXNzaW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5jb25uZWN0aW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtZXRhLnJvb21zLmFkZChyb29tSWQpO1xuICAgIGNvbnN0IGtleSA9IGdldEJpbmRpbmdLZXkobWV0YS5uYW1lc3BhY2UsIHJvb21JZCk7XG4gICAgY29uc3QgbWVtYmVycyA9IHRoaXMucm9vbXMuZ2V0KGtleSkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgbWVtYmVycy5hZGQoc2Vzc2lvbklkKTtcbiAgICB0aGlzLnJvb21zLnNldChrZXksIG1lbWJlcnMpO1xuICB9XG5cbiAgbGVhdmUoc2Vzc2lvbklkOiBzdHJpbmcsIHJvb21JZDogV2ViU29ja2V0Um9vbUlkKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWV0YS5yb29tcy5kZWxldGUocm9vbUlkKTtcbiAgICB0aGlzLnJlbW92ZVJvb21CaW5kaW5nKG1ldGEubmFtZXNwYWNlLCByb29tSWQsIHNlc3Npb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKHNlc3Npb25JZDogc3RyaW5nKTogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25Db3VudChuYW1lc3BhY2U/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFtZXRhLmFjdGl2ZSB8fCAobmFtZXNwYWNlICYmIG1ldGEubmFtZXNwYWNlICE9PSBuYW1lc3BhY2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGdldFJvb21NZW1iZXJzKHJvb21JZDogV2ViU29ja2V0Um9vbUlkLCBuYW1lc3BhY2U/OiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRDb25uZWN0aW9ucyh0aGlzLnJvb21zLCByb29tSWQsIG5hbWVzcGFjZSk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBXZWJTb2NrZXRSZWdpc3RyeVN0YXRzIHtcbiAgICBjb25zdCBieU5hbWVzcGFjZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBtZXRhIG9mIHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGlmICghbWV0YS5hY3RpdmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBieU5hbWVzcGFjZVttZXRhLm5hbWVzcGFjZV0gPSAoYnlOYW1lc3BhY2VbbWV0YS5uYW1lc3BhY2VdID8/IDApICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxDb25uZWN0aW9uczogT2JqZWN0LnZhbHVlcyhieU5hbWVzcGFjZSkucmVkdWNlKChzdW0sIGNvdW50KSA9PiBzdW0gKyBjb3VudCwgMCksXG4gICAgICB0b3RhbFJvb21zOiB0aGlzLnJvb21zLnNpemUsXG4gICAgICBieU5hbWVzcGFjZSxcbiAgICB9O1xuICB9XG5cbiAgcXVlcnlBdWRpZW5jZShhdWRpZW5jZTogV2ViU29ja2V0QXVkaWVuY2UpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSB7XG4gICAgc3dpdGNoIChhdWRpZW5jZS50eXBlKSB7XG4gICAgICBjYXNlIFwiYWxsXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUNvbm5lY3Rpb25zKGF1ZGllbmNlLm5hbWVzcGFjZSk7XG4gICAgICBjYXNlIFwicm9vbVwiOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRCb3VuZENvbm5lY3Rpb25zKHRoaXMucm9vbXMsIGF1ZGllbmNlLnJvb21JZCwgYXVkaWVuY2UubmFtZXNwYWNlKTtcbiAgICAgIGNhc2UgXCJ1c2VyXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJvdW5kQ29ubmVjdGlvbnModGhpcy51c2VycywgU3RyaW5nKGF1ZGllbmNlLnVzZXJJZCksIGF1ZGllbmNlLm5hbWVzcGFjZSk7XG4gICAgICBjYXNlIFwiY29ubmVjdGlvbnNcIjoge1xuICAgICAgICBjb25zdCBtZXRhczogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb25JZCBvZiBhdWRpZW5jZS5jb25uZWN0aW9uSWRzKSB7XG4gICAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KGNvbm5lY3Rpb25JZCk7XG4gICAgICAgICAgaWYgKCFtZXRhPy5hY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXVkaWVuY2UubmFtZXNwYWNlICYmIG1ldGEubmFtZXNwYWNlICE9PSBhdWRpZW5jZS5uYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZXRhcy5wdXNoKG1ldGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1ldGFzO1xuICAgICAgfVxuICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBtZXRhczogV2ViU29ja2V0U2Vzc2lvblByZXNlbmNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXVkaWVuY2UuYXVkaWVuY2VzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtZXRhIG9mIHRoaXMucXVlcnlBdWRpZW5jZShpdGVtKSkge1xuICAgICAgICAgICAgaWYgKHNlZW4uaGFzKG1ldGEuc2Vzc2lvbklkKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2Vlbi5hZGQobWV0YS5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgbWV0YXMucHVzaChtZXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWV0YXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVDb25uZWN0aW9ucyhuYW1lc3BhY2U/OiBzdHJpbmcpOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSB7XG4gICAgY29uc3QgbWV0YXM6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFtZXRhLmFjdGl2ZSB8fCAobmFtZXNwYWNlICYmIG1ldGEubmFtZXNwYWNlICE9PSBuYW1lc3BhY2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtZXRhcy5wdXNoKG1ldGEpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Qm91bmRDb25uZWN0aW9ucyhcbiAgICBiaW5kaW5nczogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nLFxuICApOiBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2VbXSB7XG4gICAgY29uc3QgbWV0YXM6IFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZVtdID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBtZW1iZXJzIG9mIHRoaXMuZ2V0U2NvcGVkQmluZGluZ3MoYmluZGluZ3MsIGlkLCBuYW1lc3BhY2UpKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb25JZCBvZiBtZW1iZXJzKSB7XG4gICAgICAgIGlmIChzZWVuLmhhcyhjb25uZWN0aW9uSWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQoY29ubmVjdGlvbklkKTtcblxuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5jb25uZWN0aW9ucy5nZXQoY29ubmVjdGlvbklkKTtcbiAgICAgICAgaWYgKG1ldGE/LmFjdGl2ZSkge1xuICAgICAgICAgIG1ldGFzLnB1c2gobWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXM7XG4gIH1cblxuICBwcml2YXRlIGdldFNjb3BlZEJpbmRpbmdzKFxuICAgIGJpbmRpbmdzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICk6IFNldDxzdHJpbmc+W10ge1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIGNvbnN0IGV4YWN0ID0gYmluZGluZ3MuZ2V0KGdldEJpbmRpbmdLZXkobmFtZXNwYWNlLCBpZCkpO1xuICAgICAgcmV0dXJuIGV4YWN0ID8gW2V4YWN0XSA6IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZXM6IFNldDxzdHJpbmc+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIG1lbWJlcnNdIG9mIGJpbmRpbmdzKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUJpbmRpbmdLZXkoa2V5KTtcbiAgICAgIGlmIChwYXJzZWQuaWQgPT09IGlkKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaChtZW1iZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUm9vbUJpbmRpbmcobmFtZXNwYWNlOiBzdHJpbmcsIHJvb21JZDogV2ViU29ja2V0Um9vbUlkLCBzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGdldEJpbmRpbmdLZXkobmFtZXNwYWNlLCByb29tSWQpO1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLnJvb21zLmdldChrZXkpO1xuICAgIGlmICghbWVtYmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1lbWJlcnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgaWYgKG1lbWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yb29tcy5kZWxldGUoa2V5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVVzZXJCaW5kaW5nKG5hbWVzcGFjZTogc3RyaW5nLCB1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCwgc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBnZXRCaW5kaW5nS2V5KG5hbWVzcGFjZSwgU3RyaW5nKHVzZXJJZCkpO1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLnVzZXJzLmdldChrZXkpO1xuICAgIGlmICghbWVtYmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1lbWJlcnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgaWYgKG1lbWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy51c2Vycy5kZWxldGUoa2V5KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmluZGluZ0tleShuYW1lc3BhY2U6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtuYW1lc3BhY2V9Ojoke2lkfWA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQmluZGluZ0tleShrZXk6IHN0cmluZyk6IHsgbmFtZXNwYWNlOiBzdHJpbmc7IGlkOiBzdHJpbmcgfSB7XG4gIGNvbnN0IFtuYW1lc3BhY2UsIC4uLnJlc3RdID0ga2V5LnNwbGl0KFwiOjpcIik7XG4gIHJldHVybiB7XG4gICAgbmFtZXNwYWNlLFxuICAgIGlkOiByZXN0LmpvaW4oXCI6OlwiKSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUEyVEEsU0FBUyxjQUFjLFdBQW1CLElBQW9CO0NBQzVELE9BQU8sR0FBRyxVQUFVLElBQUk7QUFDMUI7QUFFQSxTQUFTLGdCQUFnQixLQUFnRDtDQUN2RSxNQUFNLENBQUMsV0FBVyxHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUk7Q0FDM0MsT0FBTztFQUNMO0VBQ0EsSUFBSSxLQUFLLEtBQUssSUFBSTtDQUNwQjtBQUNGOzs7Q0FsU2EsaUNBQWIsTUFBOEU7RUFDNUUsOEJBQStCLElBQUksSUFBc0M7RUFDekUsd0JBQXlCLElBQUksSUFBeUI7RUFDdEQsd0JBQXlCLElBQUksSUFBeUI7RUFFdEQsU0FBUyxPQUtvQjtHQUMzQixNQUFNLE9BQWlDO0lBQ3JDLFdBQVcsTUFBTTtJQUNqQixRQUFRLE1BQU07SUFDZCxXQUFXLE1BQU07SUFDakIsUUFBUSxNQUFNLFVBQVU7SUFDeEIsdUJBQU8sSUFBSSxJQUFJO0lBQ2YsNkJBQWEsSUFBSSxLQUFLO0lBQ3RCLDRCQUFZLElBQUksS0FBSztHQUN2QjtHQUNBLEtBQUssWUFBWSxJQUFJLE1BQU0sV0FBVyxJQUFJO0dBQzFDLE9BQU87RUFDVDtFQUVBLFNBQVMsV0FBeUI7R0FDaEMsTUFBTSxPQUFPLEtBQUssWUFBWSxJQUFJLFNBQVM7R0FDM0MsSUFBSSxDQUFDLE1BQ0g7R0FHRixLQUFLLFNBQVM7RUFD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
@@ -1,4 +1,4 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { WebSocketAudience, init_ws_audience } from "./ws-audience.js";
3
3
  import { WebSocketAudienceResolver, init_ws_audience_resolver } from "./ws-audience-resolver.js";
4
4
  import { NoopWebSocketClusterBus, init_ws_cluster_bus } from "./ws-cluster-bus.js";
@@ -6,16 +6,13 @@ import { NoopWebSocketTelemetryController, init_ws_telemetry } from "./ws-teleme
6
6
  import { WebSocketDeliveryEngine, init_ws_delivery } from "./ws-delivery.js";
7
7
  import { WebSocketLocalConnectionStore, init_ws_local_connection_store } from "./ws-local-connection-store.js";
8
8
  import { InMemoryWebSocketPresenceStore, init_ws_presence_store } from "./ws-presence-store.js";
9
-
10
9
  //#region src/stream/ws-registry.ts
11
10
  function getConnectionTelemetryContext(connection) {
12
- if (!connection || !isTelemetryContextProvider(connection)) {
13
- return {};
14
- }
11
+ if (!connection || !isTelemetryContextProvider(connection)) return {};
15
12
  return connection.getTelemetryContext();
16
13
  }
17
14
  function formatUserId(userId) {
18
- return userId === undefined ? undefined : String(userId);
15
+ return userId === void 0 ? void 0 : String(userId);
19
16
  }
20
17
  function isTelemetryContextProvider(connection) {
21
18
  return "getTelemetryContext" in connection && typeof connection.getTelemetryContext === "function";
@@ -124,19 +121,17 @@ var init_ws_registry = __esmMin((() => {
124
121
  userId,
125
122
  ...telemetryContext
126
123
  });
127
- if (meta) {
128
- this.telemetryController.recordMetric({
129
- name: "sonamu.ws.connections",
130
- kind: "counter",
131
- value: 1,
132
- unit: "1",
133
- tags: {
134
- outcome: "unregistered",
135
- namespace: meta.namespace
136
- },
137
- userId
138
- });
139
- }
124
+ if (meta) this.telemetryController.recordMetric({
125
+ name: "sonamu.ws.connections",
126
+ kind: "counter",
127
+ value: 1,
128
+ unit: "1",
129
+ tags: {
130
+ outcome: "unregistered",
131
+ namespace: meta.namespace
132
+ },
133
+ userId
134
+ });
140
135
  }
141
136
  touch(connectionId) {
142
137
  this.presenceStore.touch(connectionId);
@@ -175,7 +170,7 @@ var init_ws_registry = __esmMin((() => {
175
170
  connectionId,
176
171
  namespace: meta.namespace,
177
172
  userId: formatUserId(userId),
178
- detail: userId !== undefined ? { userId } : undefined,
173
+ detail: userId !== void 0 ? { userId } : void 0,
179
174
  ...getConnectionTelemetryContext(this.localConnections.getConnection(connectionId))
180
175
  });
181
176
  }
@@ -265,8 +260,8 @@ var init_ws_registry = __esmMin((() => {
265
260
  }
266
261
  };
267
262
  }));
268
-
269
263
  //#endregion
270
264
  init_ws_registry();
271
265
  export { WebSocketRegistry, init_ws_registry };
272
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtcmVnaXN0cnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1yZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJTb2NrZXRBdWRpZW5jZSwgdHlwZSBXZWJTb2NrZXRBdWRpZW5jZSBhcyBXZWJTb2NrZXRBdWRpZW5jZVNwZWMgfSBmcm9tIFwiLi93cy1hdWRpZW5jZVwiO1xuaW1wb3J0IHsgV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlciB9IGZyb20gXCIuL3dzLWF1ZGllbmNlLXJlc29sdmVyXCI7XG5pbXBvcnQgeyBOb29wV2ViU29ja2V0Q2x1c3RlckJ1cywgdHlwZSBXZWJTb2NrZXRDbHVzdGVyQnVzIH0gZnJvbSBcIi4vd3MtY2x1c3Rlci1idXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIHR5cGUgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgdHlwZSBXZWJTb2NrZXRSb29tSWQsXG4gIHR5cGUgV2ViU29ja2V0VXNlcklkLFxufSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSB9IGZyb20gXCIuL3dzLWRlbGl2ZXJ5XCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSB9IGZyb20gXCIuL3dzLWxvY2FsLWNvbm5lY3Rpb24tc3RvcmVcIjtcbmltcG9ydCB7XG4gIEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSxcbiAgdHlwZSBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlLFxuICB0eXBlIFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSxcbn0gZnJvbSBcIi4vd3MtcHJlc2VuY2Utc3RvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgVGVsZW1ldHJ5Q29udGV4dFByb3ZpZGVyLFxuICBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcixcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uQ29udGV4dCxcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlDb250cm9sbGVyLFxufSBmcm9tIFwiLi93cy10ZWxlbWV0cnlcIjtcblxuZXhwb3J0IHR5cGUge1xuICBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgV2ViU29ja2V0Um9vbUlkLFxuICBXZWJTb2NrZXRVc2VySWQsXG59O1xuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q29ubmVjdGlvbk1ldGEgPSBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2U7XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldFJlZ2lzdHJ5T3B0aW9ucyA9IHtcbiAgLy8g67aE7IKwIO2ZmOqyveyXkOyEnCDrhbjrk5wg6rCEIOudvOyasO2MhSDsi53rs4TsnpDroZwg7JOw7J2066+A66GcIOuwmOuTnOyLnCDtmLjstpwg7LihKFdlYlNvY2tldFJ1bnRpbWUp7JeQ7IScIOqysOygle2VtCDrhJjquLTri6RcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIHByZXNlbmNlU3RvcmU/OiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICBjbHVzdGVyQnVzPzogV2ViU29ja2V0Q2x1c3RlckJ1cztcbiAgdGVsZW1ldHJ5Q29udHJvbGxlcj86IFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0UmVnaXN0cnkge1xuICByZWFkb25seSBub2RlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxDb25uZWN0aW9ucyA9IG5ldyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSgpO1xuICByZWFkb25seSBwcmVzZW5jZVN0b3JlOiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICByZWFkb25seSBjbHVzdGVyQnVzOiBXZWJTb2NrZXRDbHVzdGVyQnVzO1xuICByZWFkb25seSBhdWRpZW5jZVJlc29sdmVyOiBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyO1xuICByZWFkb25seSBkZWxpdmVyeUVuZ2luZTogV2ViU29ja2V0RGVsaXZlcnlFbmdpbmU7XG4gIHJlYWRvbmx5IHRlbGVtZXRyeUNvbnRyb2xsZXI6IFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogV2ViU29ja2V0UmVnaXN0cnlPcHRpb25zKSB7XG4gICAgdGhpcy5ub2RlSWQgPSBvcHRpb25zLm5vZGVJZDtcbiAgICB0aGlzLnByZXNlbmNlU3RvcmUgPSBvcHRpb25zLnByZXNlbmNlU3RvcmUgPz8gbmV3IEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSgpO1xuICAgIHRoaXMuY2x1c3RlckJ1cyA9IG9wdGlvbnMuY2x1c3RlckJ1cyA/PyBuZXcgTm9vcFdlYlNvY2tldENsdXN0ZXJCdXMoKTtcbiAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIgPVxuICAgICAgb3B0aW9ucy50ZWxlbWV0cnlDb250cm9sbGVyID8/IG5ldyBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcigpO1xuICAgIHRoaXMuYXVkaWVuY2VSZXNvbHZlciA9IG5ldyBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyKHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICBwcmVzZW5jZVN0b3JlOiB0aGlzLnByZXNlbmNlU3RvcmUsXG4gICAgfSk7XG4gICAgdGhpcy5kZWxpdmVyeUVuZ2luZSA9IG5ldyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgbG9jYWxDb25uZWN0aW9uczogdGhpcy5sb2NhbENvbm5lY3Rpb25zLFxuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogdGhpcy5hdWRpZW5jZVJlc29sdmVyLFxuICAgICAgY2x1c3RlckJ1czogdGhpcy5jbHVzdGVyQnVzLFxuICAgICAgdGVsZW1ldHJ5Q29udHJvbGxlcjogdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLnJlZ2lzdGVyTWV0cmljU291cmNlKHtcbiAgICAgIGNvbGxlY3Q6IChfbm93KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldFN0YXRzKCk7XG4gICAgICAgIGNvbnN0IGxvY2FsU25hcHNob3QgPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0VGVsZW1ldHJ5U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uczogc3RhdHMudG90YWxDb25uZWN0aW9ucyxcbiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uc0J5TmFtZXNwYWNlOiBzdGF0cy5ieU5hbWVzcGFjZSxcbiAgICAgICAgICByb29tQ291bnQ6IHN0YXRzLnRvdGFsUm9vbXMsXG4gICAgICAgICAgcGVuZGluZ0luYm91bmRNZXNzYWdlczogbG9jYWxTbmFwc2hvdC5wZW5kaW5nSW5ib3VuZE1lc3NhZ2VzLFxuICAgICAgICAgIHBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzOiBsb2NhbFNuYXBzaG90LnBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzLFxuICAgICAgICAgIHNvY2tldEJ1ZmZlcmVkQnl0ZXM6IGxvY2FsU25hcHNob3Quc29ja2V0QnVmZmVyZWRCeXRlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZWdpc3RlcihcbiAgICBjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgICBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLnJlZ2lzdGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUucmVnaXN0ZXIoe1xuICAgICAgc2Vzc2lvbklkOiBjb25uZWN0aW9uLmlkLFxuICAgICAgbm9kZUlkOiB0aGlzLm5vZGVJZCxcbiAgICAgIG5hbWVzcGFjZTogY29ubmVjdGlvbi5uYW1lc3BhY2UsXG4gICAgICBhY3RpdmUsXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy5jb25uZWN0aW9uLnJlZ2lzdGVyZWRcIixcbiAgICAgIGxldmVsOiBcImluZm9cIixcbiAgICAgIGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcbiAgICAgIG5hbWVzcGFjZTogY29ubmVjdGlvbi5uYW1lc3BhY2UsXG4gICAgICB1c2VySWQ6IGNvbm5lY3Rpb24udXNlcklkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLnJlY29yZE1ldHJpYyh7XG4gICAgICBuYW1lOiBcInNvbmFtdS53cy5jb25uZWN0aW9uc1wiLFxuICAgICAga2luZDogXCJjb3VudGVyXCIsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIHVuaXQ6IFwiMVwiLFxuICAgICAgdGFnczogeyBvdXRjb21lOiBcInJlZ2lzdGVyZWRcIiwgbmFtZXNwYWNlOiBjb25uZWN0aW9uLm5hbWVzcGFjZSB9LFxuICAgICAgdXNlcklkOiBjb25uZWN0aW9uLnVzZXJJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIGFjdGl2YXRlKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpKSB7XG4gICAgICB0aGlzLmVtaXRNdXRhdGlvblNraXBwZWQoY29ubmVjdGlvbklkLCB7IG9wZXJhdGlvbjogXCJhY3RpdmF0ZVwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5hY3RpdmF0ZShjb25uZWN0aW9uSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MuY29ubmVjdGlvbi5hY3RpdmF0ZWRcIixcbiAgICAgIGxldmVsOiBcImluZm9cIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICB1bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29udGV4dCA9IGdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHVzZXJJZCA9XG4gICAgICBjb25uZWN0aW9uPy51c2VySWQgPz8gZm9ybWF0VXNlcklkKHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk/LnVzZXJJZCk7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMucHJlc2VuY2VTdG9yZS51bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZCk7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLnVucmVnaXN0ZXIoY29ubmVjdGlvbklkKTtcbiAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIuZW1pdCh7XG4gICAgICBuYW1lOiBcIndzLmNvbm5lY3Rpb24udW5yZWdpc3RlcmVkXCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgY29ubmVjdGlvbklkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRhPy5uYW1lc3BhY2UsXG4gICAgICB1c2VySWQsXG4gICAgICAuLi50ZWxlbWV0cnlDb250ZXh0LFxuICAgIH0pO1xuICAgIGlmIChtZXRhKSB7XG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIucmVjb3JkTWV0cmljKHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUud3MuY29ubmVjdGlvbnNcIixcbiAgICAgICAga2luZDogXCJjb3VudGVyXCIsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICB1bml0OiBcIjFcIixcbiAgICAgICAgdGFnczogeyBvdXRjb21lOiBcInVucmVnaXN0ZXJlZFwiLCBuYW1lc3BhY2U6IG1ldGEubmFtZXNwYWNlIH0sXG4gICAgICAgIHVzZXJJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvdWNoKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLnRvdWNoKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBzZXRVc2VySWQoY29ubmVjdGlvbklkOiBzdHJpbmcsIHVzZXJJZDogV2ViU29ja2V0VXNlcklkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpKSB7XG4gICAgICB0aGlzLmVtaXRNdXRhdGlvblNraXBwZWQoY29ubmVjdGlvbklkLCB7IG9wZXJhdGlvbjogXCJzZXRVc2VySWRcIiwgdXNlcklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5zZXRVc2VySWQoY29ubmVjdGlvbklkLCB1c2VySWQpO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MudXNlci5ib3VuZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIG5hbWVzcGFjZTogbWV0YT8ubmFtZXNwYWNlLFxuICAgICAgdXNlcklkOiBTdHJpbmcodXNlcklkKSxcbiAgICAgIGRldGFpbDogeyB1c2VySWQgfSxcbiAgICAgIC4uLmdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KHRoaXMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCkpLFxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJVc2VySWQoY29ubmVjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHRoaXMuZW1pdE11dGF0aW9uU2tpcHBlZChjb25uZWN0aW9uSWQsIHsgb3BlcmF0aW9uOiBcImNsZWFyVXNlcklkXCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklkID0gbWV0YS51c2VySWQ7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmNsZWFyVXNlcklkKGNvbm5lY3Rpb25JZCk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy51c2VyLmNsZWFyZWRcIixcbiAgICAgIGxldmVsOiBcImRlYnVnXCIsXG4gICAgICBjb25uZWN0aW9uSWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldGEubmFtZXNwYWNlLFxuICAgICAgdXNlcklkOiBmb3JtYXRVc2VySWQodXNlcklkKSxcbiAgICAgIGRldGFpbDogdXNlcklkICE9PSB1bmRlZmluZWQgPyB7IHVzZXJJZCB9IDogdW5kZWZpbmVkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQodGhpcy5sb2NhbENvbm5lY3Rpb25zLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKSksXG4gICAgfSk7XG4gIH1cblxuICBqb2luKGNvbm5lY3Rpb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKSkge1xuICAgICAgdGhpcy5lbWl0TXV0YXRpb25Ta2lwcGVkKGNvbm5lY3Rpb25JZCwgeyBvcGVyYXRpb246IFwiam9pblwiLCByb29tSWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmpvaW4oY29ubmVjdGlvbklkLCByb29tSWQpO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3Mucm9vbS5qb2luZWRcIixcbiAgICAgIGxldmVsOiBcImRlYnVnXCIsXG4gICAgICBjb25uZWN0aW9uSWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldGE/Lm5hbWVzcGFjZSxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkID8/IGZvcm1hdFVzZXJJZChtZXRhPy51c2VySWQpLFxuICAgICAgZGV0YWlsOiB7IHJvb21JZCB9LFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICBsZWF2ZShjb25uZWN0aW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHRoaXMuZW1pdE11dGF0aW9uU2tpcHBlZChjb25uZWN0aW9uSWQsIHsgb3BlcmF0aW9uOiBcImxlYXZlXCIsIHJvb21JZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNlbmNlU3RvcmUubGVhdmUoY29ubmVjdGlvbklkLCByb29tSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3Mucm9vbS5sZWZ0XCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgY29ubmVjdGlvbklkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRhLm5hbWVzcGFjZSxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkID8/IGZvcm1hdFVzZXJJZChtZXRhLnVzZXJJZCksXG4gICAgICBkZXRhaWw6IHsgcm9vbUlkIH0sXG4gICAgICAuLi5nZXRDb25uZWN0aW9uVGVsZW1ldHJ5Q29udGV4dChjb25uZWN0aW9uKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE11dGF0aW9uU2tpcHBlZChcbiAgICBjb25uZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBkZXRhaWw6IHtcbiAgICAgIG9wZXJhdGlvbjogXCJhY3RpdmF0ZVwiIHwgXCJzZXRVc2VySWRcIiB8IFwiY2xlYXJVc2VySWRcIiB8IFwiam9pblwiIHwgXCJsZWF2ZVwiO1xuICAgICAgcm9vbUlkPzogV2ViU29ja2V0Um9vbUlkO1xuICAgICAgdXNlcklkPzogV2ViU29ja2V0VXNlcklkO1xuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MucmVnaXN0cnkubXV0YXRpb24uc2tpcHBlZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIGRldGFpbDogeyAuLi5kZXRhaWwsIHJlYXNvbjogXCJjb25uZWN0aW9uTWlzc2luZ1wiIH0sXG4gICAgfSk7XG4gIH1cblxuICBicm9hZGNhc3QoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5hbGwobmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvUm9vbShyb29tSWQ6IFdlYlNvY2tldFJvb21JZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5yb29tKHJvb21JZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvVXNlcih1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS51c2VyKHVzZXJJZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2U6IFdlYlNvY2tldEF1ZGllbmNlU3BlYywgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGVsaXZlcnlFbmdpbmUucHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2UsIGV2ZW50LCBkYXRhKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uQ291bnQobmFtZXNwYWNlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb25Db3VudChuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0Um9vbU1lbWJlcnMocm9vbUlkOiBXZWJTb2NrZXRSb29tSWQsIG5hbWVzcGFjZT86IHN0cmluZyk6IFdlYlNvY2tldENvbm5lY3Rpb25NZXRhW10ge1xuICAgIHJldHVybiB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Um9vbU1lbWJlcnMocm9vbUlkLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogV2ViU29ja2V0UmVnaXN0cnlTdGF0cyB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRTdGF0cygpO1xuICB9XG5cbiAgY2xvc2VBbGwoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bihjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gICAgYXdhaXQgdGhpcy5kZWxpdmVyeUVuZ2luZS5zaHV0ZG93bigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KFxuICBjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiB8IHVuZGVmaW5lZCxcbik6IFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25Db250ZXh0IHtcbiAgaWYgKCFjb25uZWN0aW9uIHx8ICFpc1RlbGVtZXRyeUNvbnRleHRQcm92aWRlcihjb25uZWN0aW9uKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uLmdldFRlbGVtZXRyeUNvbnRleHQoKTtcbn1cblxuLy8gdGVsZW1ldHJ5IHJlY29yZOydmCB1c2VySWTripQgc3RyaW5nIOygleq3nO2ZlCDigJQgcHJlc2VuY2Ugc3RvcmXripQgbnVtYmVyIHwgc3RyaW5nIOq3uOuMgOuhnCDrs7TqtIDtlahcbmZ1bmN0aW9uIGZvcm1hdFVzZXJJZCh1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1c2VySWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0cmluZyh1c2VySWQpO1xufVxuXG5mdW5jdGlvbiBpc1RlbGVtZXRyeUNvbnRleHRQcm92aWRlcihcbiAgY29ubmVjdGlvbjogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4pOiBjb25uZWN0aW9uIGlzIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uICYgVGVsZW1ldHJ5Q29udGV4dFByb3ZpZGVyIHtcbiAgcmV0dXJuIChcbiAgICBcImdldFRlbGVtZXRyeUNvbnRleHRcIiBpbiBjb25uZWN0aW9uICYmIHR5cGVvZiBjb25uZWN0aW9uLmdldFRlbGVtZXRyeUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBeVNBLFNBQVMsOEJBQ1AsWUFDcUM7QUFDckMsS0FBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsV0FBVyxFQUFFO0FBQzFELFNBQU8sRUFBRTs7QUFHWCxRQUFPLFdBQVcscUJBQXFCOztBQUl6QyxTQUFTLGFBQWEsUUFBeUQ7QUFDN0UsUUFBTyxXQUFXLFlBQVksWUFBWSxPQUFPLE9BQU87O0FBRzFELFNBQVMsMkJBQ1AsWUFDcUU7QUFDckUsUUFDRSx5QkFBeUIsY0FBYyxPQUFPLFdBQVcsd0JBQXdCOzs7O21CQTVUYzs0QkFDaEM7c0JBQ2tCO21CQU83QjtpQ0FDb0I7eUJBSy9DO29CQU1MO0NBa0JYLG9CQUFiLE1BQStCO0VBQzdCLEFBQVM7RUFDVCxB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
266
+
267
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtcmVnaXN0cnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1yZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJTb2NrZXRBdWRpZW5jZSwgdHlwZSBXZWJTb2NrZXRBdWRpZW5jZSBhcyBXZWJTb2NrZXRBdWRpZW5jZVNwZWMgfSBmcm9tIFwiLi93cy1hdWRpZW5jZVwiO1xuaW1wb3J0IHsgV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlciB9IGZyb20gXCIuL3dzLWF1ZGllbmNlLXJlc29sdmVyXCI7XG5pbXBvcnQgeyBOb29wV2ViU29ja2V0Q2x1c3RlckJ1cywgdHlwZSBXZWJTb2NrZXRDbHVzdGVyQnVzIH0gZnJvbSBcIi4vd3MtY2x1c3Rlci1idXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIHR5cGUgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgdHlwZSBXZWJTb2NrZXRSb29tSWQsXG4gIHR5cGUgV2ViU29ja2V0VXNlcklkLFxufSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSB9IGZyb20gXCIuL3dzLWRlbGl2ZXJ5XCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSB9IGZyb20gXCIuL3dzLWxvY2FsLWNvbm5lY3Rpb24tc3RvcmVcIjtcbmltcG9ydCB7XG4gIEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSxcbiAgdHlwZSBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlLFxuICB0eXBlIFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSxcbn0gZnJvbSBcIi4vd3MtcHJlc2VuY2Utc3RvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgVGVsZW1ldHJ5Q29udGV4dFByb3ZpZGVyLFxuICBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcixcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uQ29udGV4dCxcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlDb250cm9sbGVyLFxufSBmcm9tIFwiLi93cy10ZWxlbWV0cnlcIjtcblxuZXhwb3J0IHR5cGUge1xuICBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgV2ViU29ja2V0Um9vbUlkLFxuICBXZWJTb2NrZXRVc2VySWQsXG59O1xuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q29ubmVjdGlvbk1ldGEgPSBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2U7XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldFJlZ2lzdHJ5T3B0aW9ucyA9IHtcbiAgLy8g67aE7IKwIO2ZmOqyveyXkOyEnCDrhbjrk5wg6rCEIOudvOyasO2MhSDsi53rs4TsnpDroZwg7JOw7J2066+A66GcIOuwmOuTnOyLnCDtmLjstpwg7LihKFdlYlNvY2tldFJ1bnRpbWUp7JeQ7IScIOqysOygle2VtCDrhJjquLTri6RcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIHByZXNlbmNlU3RvcmU/OiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICBjbHVzdGVyQnVzPzogV2ViU29ja2V0Q2x1c3RlckJ1cztcbiAgdGVsZW1ldHJ5Q29udHJvbGxlcj86IFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0UmVnaXN0cnkge1xuICByZWFkb25seSBub2RlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxDb25uZWN0aW9ucyA9IG5ldyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSgpO1xuICByZWFkb25seSBwcmVzZW5jZVN0b3JlOiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICByZWFkb25seSBjbHVzdGVyQnVzOiBXZWJTb2NrZXRDbHVzdGVyQnVzO1xuICByZWFkb25seSBhdWRpZW5jZVJlc29sdmVyOiBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyO1xuICByZWFkb25seSBkZWxpdmVyeUVuZ2luZTogV2ViU29ja2V0RGVsaXZlcnlFbmdpbmU7XG4gIHJlYWRvbmx5IHRlbGVtZXRyeUNvbnRyb2xsZXI6IFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogV2ViU29ja2V0UmVnaXN0cnlPcHRpb25zKSB7XG4gICAgdGhpcy5ub2RlSWQgPSBvcHRpb25zLm5vZGVJZDtcbiAgICB0aGlzLnByZXNlbmNlU3RvcmUgPSBvcHRpb25zLnByZXNlbmNlU3RvcmUgPz8gbmV3IEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSgpO1xuICAgIHRoaXMuY2x1c3RlckJ1cyA9IG9wdGlvbnMuY2x1c3RlckJ1cyA/PyBuZXcgTm9vcFdlYlNvY2tldENsdXN0ZXJCdXMoKTtcbiAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIgPVxuICAgICAgb3B0aW9ucy50ZWxlbWV0cnlDb250cm9sbGVyID8/IG5ldyBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcigpO1xuICAgIHRoaXMuYXVkaWVuY2VSZXNvbHZlciA9IG5ldyBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyKHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICBwcmVzZW5jZVN0b3JlOiB0aGlzLnByZXNlbmNlU3RvcmUsXG4gICAgfSk7XG4gICAgdGhpcy5kZWxpdmVyeUVuZ2luZSA9IG5ldyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgbG9jYWxDb25uZWN0aW9uczogdGhpcy5sb2NhbENvbm5lY3Rpb25zLFxuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogdGhpcy5hdWRpZW5jZVJlc29sdmVyLFxuICAgICAgY2x1c3RlckJ1czogdGhpcy5jbHVzdGVyQnVzLFxuICAgICAgdGVsZW1ldHJ5Q29udHJvbGxlcjogdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLnJlZ2lzdGVyTWV0cmljU291cmNlKHtcbiAgICAgIGNvbGxlY3Q6IChfbm93KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldFN0YXRzKCk7XG4gICAgICAgIGNvbnN0IGxvY2FsU25hcHNob3QgPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0VGVsZW1ldHJ5U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uczogc3RhdHMudG90YWxDb25uZWN0aW9ucyxcbiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uc0J5TmFtZXNwYWNlOiBzdGF0cy5ieU5hbWVzcGFjZSxcbiAgICAgICAgICByb29tQ291bnQ6IHN0YXRzLnRvdGFsUm9vbXMsXG4gICAgICAgICAgcGVuZGluZ0luYm91bmRNZXNzYWdlczogbG9jYWxTbmFwc2hvdC5wZW5kaW5nSW5ib3VuZE1lc3NhZ2VzLFxuICAgICAgICAgIHBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzOiBsb2NhbFNuYXBzaG90LnBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzLFxuICAgICAgICAgIHNvY2tldEJ1ZmZlcmVkQnl0ZXM6IGxvY2FsU25hcHNob3Quc29ja2V0QnVmZmVyZWRCeXRlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZWdpc3RlcihcbiAgICBjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgICBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLnJlZ2lzdGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUucmVnaXN0ZXIoe1xuICAgICAgc2Vzc2lvbklkOiBjb25uZWN0aW9uLmlkLFxuICAgICAgbm9kZUlkOiB0aGlzLm5vZGVJZCxcbiAgICAgIG5hbWVzcGFjZTogY29ubmVjdGlvbi5uYW1lc3BhY2UsXG4gICAgICBhY3RpdmUsXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy5jb25uZWN0aW9uLnJlZ2lzdGVyZWRcIixcbiAgICAgIGxldmVsOiBcImluZm9cIixcbiAgICAgIGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcbiAgICAgIG5hbWVzcGFjZTogY29ubmVjdGlvbi5uYW1lc3BhY2UsXG4gICAgICB1c2VySWQ6IGNvbm5lY3Rpb24udXNlcklkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLnJlY29yZE1ldHJpYyh7XG4gICAgICBuYW1lOiBcInNvbmFtdS53cy5jb25uZWN0aW9uc1wiLFxuICAgICAga2luZDogXCJjb3VudGVyXCIsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIHVuaXQ6IFwiMVwiLFxuICAgICAgdGFnczogeyBvdXRjb21lOiBcInJlZ2lzdGVyZWRcIiwgbmFtZXNwYWNlOiBjb25uZWN0aW9uLm5hbWVzcGFjZSB9LFxuICAgICAgdXNlcklkOiBjb25uZWN0aW9uLnVzZXJJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIGFjdGl2YXRlKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpKSB7XG4gICAgICB0aGlzLmVtaXRNdXRhdGlvblNraXBwZWQoY29ubmVjdGlvbklkLCB7IG9wZXJhdGlvbjogXCJhY3RpdmF0ZVwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5hY3RpdmF0ZShjb25uZWN0aW9uSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MuY29ubmVjdGlvbi5hY3RpdmF0ZWRcIixcbiAgICAgIGxldmVsOiBcImluZm9cIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICB1bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29udGV4dCA9IGdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHVzZXJJZCA9XG4gICAgICBjb25uZWN0aW9uPy51c2VySWQgPz8gZm9ybWF0VXNlcklkKHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk/LnVzZXJJZCk7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMucHJlc2VuY2VTdG9yZS51bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZCk7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLnVucmVnaXN0ZXIoY29ubmVjdGlvbklkKTtcbiAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIuZW1pdCh7XG4gICAgICBuYW1lOiBcIndzLmNvbm5lY3Rpb24udW5yZWdpc3RlcmVkXCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgY29ubmVjdGlvbklkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRhPy5uYW1lc3BhY2UsXG4gICAgICB1c2VySWQsXG4gICAgICAuLi50ZWxlbWV0cnlDb250ZXh0LFxuICAgIH0pO1xuICAgIGlmIChtZXRhKSB7XG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIucmVjb3JkTWV0cmljKHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUud3MuY29ubmVjdGlvbnNcIixcbiAgICAgICAga2luZDogXCJjb3VudGVyXCIsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICB1bml0OiBcIjFcIixcbiAgICAgICAgdGFnczogeyBvdXRjb21lOiBcInVucmVnaXN0ZXJlZFwiLCBuYW1lc3BhY2U6IG1ldGEubmFtZXNwYWNlIH0sXG4gICAgICAgIHVzZXJJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvdWNoKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLnRvdWNoKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBzZXRVc2VySWQoY29ubmVjdGlvbklkOiBzdHJpbmcsIHVzZXJJZDogV2ViU29ja2V0VXNlcklkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpKSB7XG4gICAgICB0aGlzLmVtaXRNdXRhdGlvblNraXBwZWQoY29ubmVjdGlvbklkLCB7IG9wZXJhdGlvbjogXCJzZXRVc2VySWRcIiwgdXNlcklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5zZXRVc2VySWQoY29ubmVjdGlvbklkLCB1c2VySWQpO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MudXNlci5ib3VuZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIG5hbWVzcGFjZTogbWV0YT8ubmFtZXNwYWNlLFxuICAgICAgdXNlcklkOiBTdHJpbmcodXNlcklkKSxcbiAgICAgIGRldGFpbDogeyB1c2VySWQgfSxcbiAgICAgIC4uLmdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KHRoaXMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCkpLFxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJVc2VySWQoY29ubmVjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHRoaXMuZW1pdE11dGF0aW9uU2tpcHBlZChjb25uZWN0aW9uSWQsIHsgb3BlcmF0aW9uOiBcImNsZWFyVXNlcklkXCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklkID0gbWV0YS51c2VySWQ7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmNsZWFyVXNlcklkKGNvbm5lY3Rpb25JZCk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy51c2VyLmNsZWFyZWRcIixcbiAgICAgIGxldmVsOiBcImRlYnVnXCIsXG4gICAgICBjb25uZWN0aW9uSWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldGEubmFtZXNwYWNlLFxuICAgICAgdXNlcklkOiBmb3JtYXRVc2VySWQodXNlcklkKSxcbiAgICAgIGRldGFpbDogdXNlcklkICE9PSB1bmRlZmluZWQgPyB7IHVzZXJJZCB9IDogdW5kZWZpbmVkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQodGhpcy5sb2NhbENvbm5lY3Rpb25zLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKSksXG4gICAgfSk7XG4gIH1cblxuICBqb2luKGNvbm5lY3Rpb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKSkge1xuICAgICAgdGhpcy5lbWl0TXV0YXRpb25Ta2lwcGVkKGNvbm5lY3Rpb25JZCwgeyBvcGVyYXRpb246IFwiam9pblwiLCByb29tSWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmpvaW4oY29ubmVjdGlvbklkLCByb29tSWQpO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3Mucm9vbS5qb2luZWRcIixcbiAgICAgIGxldmVsOiBcImRlYnVnXCIsXG4gICAgICBjb25uZWN0aW9uSWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldGE/Lm5hbWVzcGFjZSxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkID8/IGZvcm1hdFVzZXJJZChtZXRhPy51c2VySWQpLFxuICAgICAgZGV0YWlsOiB7IHJvb21JZCB9LFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICBsZWF2ZShjb25uZWN0aW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHRoaXMuZW1pdE11dGF0aW9uU2tpcHBlZChjb25uZWN0aW9uSWQsIHsgb3BlcmF0aW9uOiBcImxlYXZlXCIsIHJvb21JZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNlbmNlU3RvcmUubGVhdmUoY29ubmVjdGlvbklkLCByb29tSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3Mucm9vbS5sZWZ0XCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgY29ubmVjdGlvbklkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRhLm5hbWVzcGFjZSxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkID8/IGZvcm1hdFVzZXJJZChtZXRhLnVzZXJJZCksXG4gICAgICBkZXRhaWw6IHsgcm9vbUlkIH0sXG4gICAgICAuLi5nZXRDb25uZWN0aW9uVGVsZW1ldHJ5Q29udGV4dChjb25uZWN0aW9uKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE11dGF0aW9uU2tpcHBlZChcbiAgICBjb25uZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBkZXRhaWw6IHtcbiAgICAgIG9wZXJhdGlvbjogXCJhY3RpdmF0ZVwiIHwgXCJzZXRVc2VySWRcIiB8IFwiY2xlYXJVc2VySWRcIiB8IFwiam9pblwiIHwgXCJsZWF2ZVwiO1xuICAgICAgcm9vbUlkPzogV2ViU29ja2V0Um9vbUlkO1xuICAgICAgdXNlcklkPzogV2ViU29ja2V0VXNlcklkO1xuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MucmVnaXN0cnkubXV0YXRpb24uc2tpcHBlZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIGRldGFpbDogeyAuLi5kZXRhaWwsIHJlYXNvbjogXCJjb25uZWN0aW9uTWlzc2luZ1wiIH0sXG4gICAgfSk7XG4gIH1cblxuICBicm9hZGNhc3QoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5hbGwobmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvUm9vbShyb29tSWQ6IFdlYlNvY2tldFJvb21JZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5yb29tKHJvb21JZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvVXNlcih1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS51c2VyKHVzZXJJZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2U6IFdlYlNvY2tldEF1ZGllbmNlU3BlYywgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGVsaXZlcnlFbmdpbmUucHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2UsIGV2ZW50LCBkYXRhKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uQ291bnQobmFtZXNwYWNlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb25Db3VudChuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0Um9vbU1lbWJlcnMocm9vbUlkOiBXZWJTb2NrZXRSb29tSWQsIG5hbWVzcGFjZT86IHN0cmluZyk6IFdlYlNvY2tldENvbm5lY3Rpb25NZXRhW10ge1xuICAgIHJldHVybiB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Um9vbU1lbWJlcnMocm9vbUlkLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogV2ViU29ja2V0UmVnaXN0cnlTdGF0cyB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRTdGF0cygpO1xuICB9XG5cbiAgY2xvc2VBbGwoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bihjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gICAgYXdhaXQgdGhpcy5kZWxpdmVyeUVuZ2luZS5zaHV0ZG93bigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KFxuICBjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiB8IHVuZGVmaW5lZCxcbik6IFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25Db250ZXh0IHtcbiAgaWYgKCFjb25uZWN0aW9uIHx8ICFpc1RlbGVtZXRyeUNvbnRleHRQcm92aWRlcihjb25uZWN0aW9uKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uLmdldFRlbGVtZXRyeUNvbnRleHQoKTtcbn1cblxuLy8gdGVsZW1ldHJ5IHJlY29yZOydmCB1c2VySWTripQgc3RyaW5nIOygleq3nO2ZlCDigJQgcHJlc2VuY2Ugc3RvcmXripQgbnVtYmVyIHwgc3RyaW5nIOq3uOuMgOuhnCDrs7TqtIDtlahcbmZ1bmN0aW9uIGZvcm1hdFVzZXJJZCh1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1c2VySWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0cmluZyh1c2VySWQpO1xufVxuXG5mdW5jdGlvbiBpc1RlbGVtZXRyeUNvbnRleHRQcm92aWRlcihcbiAgY29ubmVjdGlvbjogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4pOiBjb25uZWN0aW9uIGlzIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uICYgVGVsZW1ldHJ5Q29udGV4dFByb3ZpZGVyIHtcbiAgcmV0dXJuIChcbiAgICBcImdldFRlbGVtZXRyeUNvbnRleHRcIiBpbiBjb25uZWN0aW9uICYmIHR5cGVvZiBjb25uZWN0aW9uLmdldFRlbGVtZXRyeUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF5U0EsU0FBUyw4QkFDUCxZQUNxQztDQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixVQUFVLEdBQ3ZELE9BQU8sQ0FBQztDQUdWLE9BQU8sV0FBVyxvQkFBb0I7QUFDeEM7QUFHQSxTQUFTLGFBQWEsUUFBeUQ7Q0FDN0UsT0FBTyxXQUFXLFNBQVksU0FBWSxPQUFPLE1BQU07QUFDekQ7QUFFQSxTQUFTLDJCQUNQLFlBQ3FFO0NBQ3JFLE9BQ0UseUJBQXlCLGNBQWMsT0FBTyxXQUFXLHdCQUF3QjtBQUVyRjs7O2tCQTlUa0c7MkJBQ2hDO3FCQUNrQjtrQkFPN0I7Z0NBQ29CO3dCQUsvQzttQkFNTDtDQWtCVixvQkFBYixNQUErQjtFQUM3QjtFQUNB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