velocious 1.0.557 → 1.0.559

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 (75) hide show
  1. package/README.md +17 -3
  2. package/build/background-jobs/main.js +35 -12
  3. package/build/background-jobs/store.js +262 -16
  4. package/build/background-jobs/web/authorization.js +5 -4
  5. package/build/background-jobs/web/controller.js +13 -16
  6. package/build/background-jobs/web/counts-channel.js +79 -0
  7. package/build/background-jobs/web/index.js +2 -0
  8. package/build/background-jobs/web/registry.js +1 -1
  9. package/build/background-jobs/worker.js +53 -28
  10. package/build/database/record/index.js +12 -0
  11. package/build/frontend-models/base.js +192 -41
  12. package/build/http-client/websocket-client.js +48 -0
  13. package/build/src/background-jobs/main.d.ts +14 -1
  14. package/build/src/background-jobs/main.d.ts.map +1 -1
  15. package/build/src/background-jobs/main.js +37 -14
  16. package/build/src/background-jobs/store.d.ts +79 -0
  17. package/build/src/background-jobs/store.d.ts.map +1 -1
  18. package/build/src/background-jobs/store.js +235 -17
  19. package/build/src/background-jobs/web/authorization.d.ts +5 -3
  20. package/build/src/background-jobs/web/authorization.d.ts.map +1 -1
  21. package/build/src/background-jobs/web/authorization.js +6 -5
  22. package/build/src/background-jobs/web/controller.d.ts.map +1 -1
  23. package/build/src/background-jobs/web/controller.js +14 -15
  24. package/build/src/background-jobs/web/counts-channel.d.ts +31 -0
  25. package/build/src/background-jobs/web/counts-channel.d.ts.map +1 -0
  26. package/build/src/background-jobs/web/counts-channel.js +71 -0
  27. package/build/src/background-jobs/web/index.d.ts.map +1 -1
  28. package/build/src/background-jobs/web/index.js +3 -1
  29. package/build/src/background-jobs/web/registry.d.ts +1 -1
  30. package/build/src/background-jobs/web/registry.d.ts.map +1 -1
  31. package/build/src/background-jobs/web/registry.js +2 -2
  32. package/build/src/background-jobs/worker.d.ts +18 -1
  33. package/build/src/background-jobs/worker.d.ts.map +1 -1
  34. package/build/src/background-jobs/worker.js +55 -31
  35. package/build/src/database/record/index.d.ts.map +1 -1
  36. package/build/src/database/record/index.js +9 -1
  37. package/build/src/frontend-models/base.d.ts +13 -4
  38. package/build/src/frontend-models/base.d.ts.map +1 -1
  39. package/build/src/frontend-models/base.js +173 -44
  40. package/build/src/http-client/websocket-client.d.ts +3 -0
  41. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  42. package/build/src/http-client/websocket-client.js +42 -1
  43. package/build/src/tenants/tenant.d.ts +20 -9
  44. package/build/src/tenants/tenant.d.ts.map +1 -1
  45. package/build/src/tenants/tenant.js +47 -12
  46. package/build/src/testing/factory/factory-registry.d.ts +22 -3
  47. package/build/src/testing/factory/factory-registry.d.ts.map +1 -1
  48. package/build/src/testing/factory/factory-registry.js +32 -9
  49. package/build/src/testing/factory/factory-runner.d.ts +16 -4
  50. package/build/src/testing/factory/factory-runner.d.ts.map +1 -1
  51. package/build/src/testing/factory/factory-runner.js +33 -10
  52. package/build/src/utils/shutdown-lifecycle.d.ts +12 -0
  53. package/build/src/utils/shutdown-lifecycle.d.ts.map +1 -0
  54. package/build/src/utils/shutdown-lifecycle.js +36 -0
  55. package/build/tenants/tenant.js +51 -11
  56. package/build/testing/factory/factory-registry.js +33 -8
  57. package/build/testing/factory/factory-runner.js +38 -12
  58. package/build/tsconfig.tsbuildinfo +1 -1
  59. package/build/utils/shutdown-lifecycle.js +41 -0
  60. package/package.json +3 -2
  61. package/src/background-jobs/main.js +35 -12
  62. package/src/background-jobs/store.js +262 -16
  63. package/src/background-jobs/web/authorization.js +5 -4
  64. package/src/background-jobs/web/controller.js +13 -16
  65. package/src/background-jobs/web/counts-channel.js +79 -0
  66. package/src/background-jobs/web/index.js +2 -0
  67. package/src/background-jobs/web/registry.js +1 -1
  68. package/src/background-jobs/worker.js +53 -28
  69. package/src/database/record/index.js +12 -0
  70. package/src/frontend-models/base.js +192 -41
  71. package/src/http-client/websocket-client.js +48 -0
  72. package/src/tenants/tenant.js +51 -11
  73. package/src/testing/factory/factory-registry.js +33 -8
  74. package/src/testing/factory/factory-runner.js +38 -12
  75. package/src/utils/shutdown-lifecycle.js +41 -0
@@ -6,15 +6,17 @@
6
6
  * during development without being exposed to the network.
7
7
  * @param {object} args - Options.
8
8
  * @param {import("./registry.js").JobsMountOptions} args.options - Mount options.
9
- * @param {import("../../http-server/client/request.js").default} args.request - Request object.
9
+ * @param {import("../../http-server/client/request.js").default | import("../../http-server/client/websocket-request.js").default} args.request - Request object.
10
10
  * @param {import("../../configuration.js").default} args.configuration - Configuration instance.
11
11
  * @param {import("../../authorization/ability.js").default | undefined} args.ability - Current ability.
12
+ * @param {string | null} [args.token] - Explicit websocket subscription token.
12
13
  * @returns {Promise<boolean>} - Whether the request is authorized.
13
14
  */
14
- export function authorizeJobsRequest({ ability, configuration, options, request }: {
15
+ export function authorizeJobsRequest({ ability, configuration, options, request, token: explicitToken }: {
15
16
  options: import("./registry.js").JobsMountOptions;
16
- request: import("../../http-server/client/request.js").default;
17
+ request: import("../../http-server/client/request.js").default | import("../../http-server/client/websocket-request.js").default;
17
18
  configuration: import("../../configuration.js").default;
18
19
  ability: import("../../authorization/ability.js").default | undefined;
20
+ token?: string | null | undefined;
19
21
  }): Promise<boolean>;
20
22
  //# sourceMappingURL=authorization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/authorization.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;GAYG;AACH,mFANG;IAAuD,OAAO,EAAtD,OAAO,eAAe,EAAE,gBAAgB;IACoB,OAAO,EAAnE,OAAO,qCAAqC,EAAE,OAAO;IACN,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;IAC2B,OAAO,EAA1E,OAAO,gCAAgC,EAAE,OAAO,GAAG,SAAS;CACpE,GAAU,OAAO,CAAC,OAAO,CAAC,CA0B5B"}
1
+ {"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/authorization.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;GAaG;AACH,yGAPG;IAAuD,OAAO,EAAtD,OAAO,eAAe,EAAE,gBAAgB;IACsF,OAAO,EAArI,OAAO,qCAAqC,EAAE,OAAO,GAAG,OAAO,+CAA+C,EAAE,OAAO;IACxE,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;IAC2B,OAAO,EAA1E,OAAO,gCAAgC,EAAE,OAAO,GAAG,SAAS;IACvC,KAAK;CAClC,GAAU,OAAO,CAAC,OAAO,CAAC,CA0B5B"}
@@ -16,7 +16,7 @@ function safeEqual(a, b) {
16
16
  }
17
17
  /**
18
18
  * Runs bearer token.
19
- * @param {import("../../http-server/client/request.js").default} request - Request object.
19
+ * @param {import("../../http-server/client/request.js").default | import("../../http-server/client/websocket-request.js").default} request - Request object.
20
20
  * @returns {string | null} - Bearer token from the Authorization header, if any.
21
21
  */
22
22
  function bearerToken(request) {
@@ -47,17 +47,18 @@ function isLoopback(remoteAddress) {
47
47
  * during development without being exposed to the network.
48
48
  * @param {object} args - Options.
49
49
  * @param {import("./registry.js").JobsMountOptions} args.options - Mount options.
50
- * @param {import("../../http-server/client/request.js").default} args.request - Request object.
50
+ * @param {import("../../http-server/client/request.js").default | import("../../http-server/client/websocket-request.js").default} args.request - Request object.
51
51
  * @param {import("../../configuration.js").default} args.configuration - Configuration instance.
52
52
  * @param {import("../../authorization/ability.js").default | undefined} args.ability - Current ability.
53
+ * @param {string | null} [args.token] - Explicit websocket subscription token.
53
54
  * @returns {Promise<boolean>} - Whether the request is authorized.
54
55
  */
55
- export async function authorizeJobsRequest({ ability, configuration, options, request }) {
56
+ export async function authorizeJobsRequest({ ability, configuration, options, request, token: explicitToken }) {
56
57
  const accessTokens = Array.isArray(options.accessTokens)
57
58
  ? options.accessTokens.filter((token) => typeof token === "string" && token.length > 0)
58
59
  : [];
59
60
  const authorize = typeof options.authorize === "function" ? options.authorize : null;
60
- const token = bearerToken(request);
61
+ const token = explicitToken ?? bearerToken(request);
61
62
  if (accessTokens.length > 0 && token) {
62
63
  for (const accessToken of accessTokens) {
63
64
  if (safeEqual(token, accessToken))
@@ -74,4 +75,4 @@ export async function authorizeJobsRequest({ ability, configuration, options, re
74
75
  }
75
76
  return false;
76
77
  }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvd2ViL2F1dGhvcml6YXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUVoQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFdEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFbkQsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNqRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsV0FBVyxDQUFDLE9BQU87SUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUU5QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUUzQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFOUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsYUFBYTtJQUMvQixJQUFJLENBQUMsYUFBYTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRWhDLE9BQU8sQ0FDTCxhQUFhLEtBQUssV0FBVztRQUM3QixhQUFhLEtBQUssS0FBSztRQUN2QixhQUFhLEtBQUssa0JBQWtCO1FBQ3BDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQ2pDLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQztJQUNuRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDdEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUNwRixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFbEMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUE7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBRXhFLElBQUksTUFBTSxLQUFLLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIlxuXG4vKipcbiAqIENvbnN0YW50LXRpbWUgY29tcGFyaXNvbiBzbyB0b2tlbiBjaGVja3MgZG9uJ3QgbGVhayBsZW5ndGgvY29udGVudHMgdGhyb3VnaFxuICogdGltaW5nLiBSZXR1cm5zIGZhbHNlIGZvciBkaWZmZXJpbmcgbGVuZ3RocyBiZWZvcmUgdGhlIHRpbWluZy1zYWZlIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYSAtIEZpcnN0IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGIgLSBTZWNvbmQgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLlxuICovXG5mdW5jdGlvbiBzYWZlRXF1YWwoYSwgYikge1xuICBjb25zdCBidWZmZXJBID0gQnVmZmVyLmZyb20oU3RyaW5nKGEpKVxuICBjb25zdCBidWZmZXJCID0gQnVmZmVyLmZyb20oU3RyaW5nKGIpKVxuXG4gIGlmIChidWZmZXJBLmxlbmd0aCAhPT0gYnVmZmVyQi5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBjcnlwdG8udGltaW5nU2FmZUVxdWFsKGJ1ZmZlckEsIGJ1ZmZlckIpXG59XG5cbi8qKlxuICogUnVucyBiZWFyZXIgdG9rZW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IHJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIEJlYXJlciB0b2tlbiBmcm9tIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciwgaWYgYW55LlxuICovXG5mdW5jdGlvbiBiZWFyZXJUb2tlbihyZXF1ZXN0KSB7XG4gIGNvbnN0IGhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiYXV0aG9yaXphdGlvblwiKVxuXG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG1hdGNoID0gaGVhZGVyLm1hdGNoKC9eQmVhcmVyXFxzKyguKykkL2kpXG5cbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogbnVsbFxufVxuXG4vKipcbiAqIFJ1bnMgaXMgbG9vcGJhY2suXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcmVtb3RlQWRkcmVzcyAtIFJlbW90ZSBhZGRyZXNzLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgYWRkcmVzcyBpcyBsb29wYmFjay5cbiAqL1xuZnVuY3Rpb24gaXNMb29wYmFjayhyZW1vdGVBZGRyZXNzKSB7XG4gIGlmICghcmVtb3RlQWRkcmVzcykgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIChcbiAgICByZW1vdGVBZGRyZXNzID09PSBcIjEyNy4wLjAuMVwiIHx8XG4gICAgcmVtb3RlQWRkcmVzcyA9PT0gXCI6OjFcIiB8fFxuICAgIHJlbW90ZUFkZHJlc3MgPT09IFwiOjpmZmZmOjEyNy4wLjAuMVwiIHx8XG4gICAgcmVtb3RlQWRkcmVzcy5zdGFydHNXaXRoKFwiMTI3LlwiKVxuICApXG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgam9icy1kYXNoYm9hcmQgcmVxdWVzdCBpcyBhdXRob3JpemVkLiBPcmRlciBvZiBwcmVjZWRlbmNlOlxuICogYSBtYXRjaGluZyBiZWFyZXIgdG9rZW4sIHRoZW4gdGhlIGhvc3Qtc3VwcGxpZWQgYGF1dGhvcml6ZWAgY2FsbGJhY2suIFdoZW5cbiAqIG5laXRoZXIgdG9rZW5zIG5vciBhbiBhdXRob3JpemUgY2FsbGJhY2sgYXJlIGNvbmZpZ3VyZWQsIGFjY2VzcyBmYWxscyBiYWNrIHRvXG4gKiBsb29wYmFjay1vbmx5IHNvIGEgZnJlc2hseSBtb3VudGVkIGRhc2hib2FyZCBpcyByZWFjaGFibGUgb24gdGhlIHNhbWUgaG9zdFxuICogZHVyaW5nIGRldmVsb3BtZW50IHdpdGhvdXQgYmVpbmcgZXhwb3NlZCB0byB0aGUgbmV0d29yay5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZWdpc3RyeS5qc1wiKS5Kb2JzTW91bnRPcHRpb25zfSBhcmdzLm9wdGlvbnMgLSBNb3VudCBvcHRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gYXJncy5hYmlsaXR5IC0gQ3VycmVudCBhYmlsaXR5LlxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXV0aG9yaXplSm9ic1JlcXVlc3Qoe2FiaWxpdHksIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMsIHJlcXVlc3R9KSB7XG4gIGNvbnN0IGFjY2Vzc1Rva2VucyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5hY2Nlc3NUb2tlbnMpXG4gICAgPyBvcHRpb25zLmFjY2Vzc1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0eXBlb2YgdG9rZW4gPT09IFwic3RyaW5nXCIgJiYgdG9rZW4ubGVuZ3RoID4gMClcbiAgICA6IFtdXG4gIGNvbnN0IGF1dGhvcml6ZSA9IHR5cGVvZiBvcHRpb25zLmF1dGhvcml6ZSA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5hdXRob3JpemUgOiBudWxsXG4gIGNvbnN0IHRva2VuID0gYmVhcmVyVG9rZW4ocmVxdWVzdClcblxuICBpZiAoYWNjZXNzVG9rZW5zLmxlbmd0aCA+IDAgJiYgdG9rZW4pIHtcbiAgICBmb3IgKGNvbnN0IGFjY2Vzc1Rva2VuIG9mIGFjY2Vzc1Rva2Vucykge1xuICAgICAgaWYgKHNhZmVFcXVhbCh0b2tlbiwgYWNjZXNzVG9rZW4pKSByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlmIChhdXRob3JpemUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRob3JpemUoe2FiaWxpdHksIGNvbmZpZ3VyYXRpb24sIHJlcXVlc3QsIHRva2VufSlcblxuICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoYWNjZXNzVG9rZW5zLmxlbmd0aCA9PT0gMCAmJiAhYXV0aG9yaXplKSB7XG4gICAgcmV0dXJuIGlzTG9vcGJhY2socmVxdWVzdC5yZW1vdGVBZGRyZXNzKCkpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cbiJdfQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvd2ViL2F1dGhvcml6YXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUVoQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFdEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFbkQsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNqRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsV0FBVyxDQUFDLE9BQU87SUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUU5QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUUzQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFOUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsYUFBYTtJQUMvQixJQUFJLENBQUMsYUFBYTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRWhDLE9BQU8sQ0FDTCxhQUFhLEtBQUssV0FBVztRQUM3QixhQUFhLEtBQUssS0FBSztRQUN2QixhQUFhLEtBQUssa0JBQWtCO1FBQ3BDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQ2pDLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBQztJQUN6RyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDdEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUNwRixNQUFNLEtBQUssR0FBRyxhQUFhLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRW5ELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDckMsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFBO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUV4RSxJQUFJLE1BQU0sS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcblxuLyoqXG4gKiBDb25zdGFudC10aW1lIGNvbXBhcmlzb24gc28gdG9rZW4gY2hlY2tzIGRvbid0IGxlYWsgbGVuZ3RoL2NvbnRlbnRzIHRocm91Z2hcbiAqIHRpbWluZy4gUmV0dXJucyBmYWxzZSBmb3IgZGlmZmVyaW5nIGxlbmd0aHMgYmVmb3JlIHRoZSB0aW1pbmctc2FmZSBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IGEgLSBGaXJzdCB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBiIC0gU2Vjb25kIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgdmFsdWVzIGFyZSBlcXVhbC5cbiAqL1xuZnVuY3Rpb24gc2FmZUVxdWFsKGEsIGIpIHtcbiAgY29uc3QgYnVmZmVyQSA9IEJ1ZmZlci5mcm9tKFN0cmluZyhhKSlcbiAgY29uc3QgYnVmZmVyQiA9IEJ1ZmZlci5mcm9tKFN0cmluZyhiKSlcblxuICBpZiAoYnVmZmVyQS5sZW5ndGggIT09IGJ1ZmZlckIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gY3J5cHRvLnRpbWluZ1NhZmVFcXVhbChidWZmZXJBLCBidWZmZXJCKVxufVxuXG4vKipcbiAqIFJ1bnMgYmVhcmVyIHRva2VuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IHJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIEJlYXJlciB0b2tlbiBmcm9tIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciwgaWYgYW55LlxuICovXG5mdW5jdGlvbiBiZWFyZXJUb2tlbihyZXF1ZXN0KSB7XG4gIGNvbnN0IGhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiYXV0aG9yaXphdGlvblwiKVxuXG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG1hdGNoID0gaGVhZGVyLm1hdGNoKC9eQmVhcmVyXFxzKyguKykkL2kpXG5cbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogbnVsbFxufVxuXG4vKipcbiAqIFJ1bnMgaXMgbG9vcGJhY2suXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcmVtb3RlQWRkcmVzcyAtIFJlbW90ZSBhZGRyZXNzLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgYWRkcmVzcyBpcyBsb29wYmFjay5cbiAqL1xuZnVuY3Rpb24gaXNMb29wYmFjayhyZW1vdGVBZGRyZXNzKSB7XG4gIGlmICghcmVtb3RlQWRkcmVzcykgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIChcbiAgICByZW1vdGVBZGRyZXNzID09PSBcIjEyNy4wLjAuMVwiIHx8XG4gICAgcmVtb3RlQWRkcmVzcyA9PT0gXCI6OjFcIiB8fFxuICAgIHJlbW90ZUFkZHJlc3MgPT09IFwiOjpmZmZmOjEyNy4wLjAuMVwiIHx8XG4gICAgcmVtb3RlQWRkcmVzcy5zdGFydHNXaXRoKFwiMTI3LlwiKVxuICApXG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgam9icy1kYXNoYm9hcmQgcmVxdWVzdCBpcyBhdXRob3JpemVkLiBPcmRlciBvZiBwcmVjZWRlbmNlOlxuICogYSBtYXRjaGluZyBiZWFyZXIgdG9rZW4sIHRoZW4gdGhlIGhvc3Qtc3VwcGxpZWQgYGF1dGhvcml6ZWAgY2FsbGJhY2suIFdoZW5cbiAqIG5laXRoZXIgdG9rZW5zIG5vciBhbiBhdXRob3JpemUgY2FsbGJhY2sgYXJlIGNvbmZpZ3VyZWQsIGFjY2VzcyBmYWxscyBiYWNrIHRvXG4gKiBsb29wYmFjay1vbmx5IHNvIGEgZnJlc2hseSBtb3VudGVkIGRhc2hib2FyZCBpcyByZWFjaGFibGUgb24gdGhlIHNhbWUgaG9zdFxuICogZHVyaW5nIGRldmVsb3BtZW50IHdpdGhvdXQgYmVpbmcgZXhwb3NlZCB0byB0aGUgbmV0d29yay5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZWdpc3RyeS5qc1wiKS5Kb2JzTW91bnRPcHRpb25zfSBhcmdzLm9wdGlvbnMgLSBNb3VudCBvcHRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBhcmdzLmFiaWxpdHkgLSBDdXJyZW50IGFiaWxpdHkuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IFthcmdzLnRva2VuXSAtIEV4cGxpY2l0IHdlYnNvY2tldCBzdWJzY3JpcHRpb24gdG9rZW4uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSByZXF1ZXN0IGlzIGF1dGhvcml6ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhdXRob3JpemVKb2JzUmVxdWVzdCh7YWJpbGl0eSwgY29uZmlndXJhdGlvbiwgb3B0aW9ucywgcmVxdWVzdCwgdG9rZW46IGV4cGxpY2l0VG9rZW59KSB7XG4gIGNvbnN0IGFjY2Vzc1Rva2VucyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5hY2Nlc3NUb2tlbnMpXG4gICAgPyBvcHRpb25zLmFjY2Vzc1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0eXBlb2YgdG9rZW4gPT09IFwic3RyaW5nXCIgJiYgdG9rZW4ubGVuZ3RoID4gMClcbiAgICA6IFtdXG4gIGNvbnN0IGF1dGhvcml6ZSA9IHR5cGVvZiBvcHRpb25zLmF1dGhvcml6ZSA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5hdXRob3JpemUgOiBudWxsXG4gIGNvbnN0IHRva2VuID0gZXhwbGljaXRUb2tlbiA/PyBiZWFyZXJUb2tlbihyZXF1ZXN0KVxuXG4gIGlmIChhY2Nlc3NUb2tlbnMubGVuZ3RoID4gMCAmJiB0b2tlbikge1xuICAgIGZvciAoY29uc3QgYWNjZXNzVG9rZW4gb2YgYWNjZXNzVG9rZW5zKSB7XG4gICAgICBpZiAoc2FmZUVxdWFsKHRva2VuLCBhY2Nlc3NUb2tlbikpIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKGF1dGhvcml6ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF1dGhvcml6ZSh7YWJpbGl0eSwgY29uZmlndXJhdGlvbiwgcmVxdWVzdCwgdG9rZW59KVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChhY2Nlc3NUb2tlbnMubGVuZ3RoID09PSAwICYmICFhdXRob3JpemUpIHtcbiAgICByZXR1cm4gaXNMb29wYmFjayhyZXF1ZXN0LnJlbW90ZUFkZHJlc3MoKSlcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/controller.js"],"names":[],"mappings":"AAYA;;;;GAIG;AACH;IACE;;;OAGG;IACH,iBAFa,OAAO,eAAe,EAAE,gBAAgB,CAMpD;IAED;;;OAGG;IACH,UAFa,mBAAmB,CAW/B;IAPG,4CAGE;IAMN;;;;;OAKG;IACH,2BAHW,OAAO,eAAe,EAAE,gBAAgB,GACtC,IAAI,CAmBhB;IAED;;;;;;OAMG;IACH,mBAHW,MAAM,OAAO,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,IAAI,CAAC,CAoBzB;IAED;;;OAGG;IACH,UAFa,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,SAFa,OAAO,CAAC,IAAI,CAAC,CAqBzB;IAED;;;OAGG;IACH,SAFa,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;OAGG;IACH,YAFa,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;;OAIG;IACH,mBAHW,OAAO,aAAa,EAAE,gBAAgB,GACpC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAuB7B;IAED;;;;OAIG;IACH,8BAHW,OAAO,8BAA8B,EAAE,oCAAoC,GAAG,SAAS,GACrF,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAsBpC;IAED;;;;OAIG;IACH,uBAHW,OAAC,GACC,MAAM,GAAG,SAAS,CAI9B;IAED;;;;OAIG;IACH,qBAHW,OAAC,GACC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,KAAK,GAAG,MAAM,CAAA;KAAC,CAY/D;IAED;;;;;OAKG;IACH,oBAJW,OAAC,YACD,MAAM,GACJ,MAAM,CAQlB;CACF;uBAlRsB,qBAAqB;gCACZ,aAAa"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/controller.js"],"names":[],"mappings":"AAYA;;;;GAIG;AACH;IACE;;;OAGG;IACH,iBAFa,OAAO,eAAe,EAAE,gBAAgB,CAMpD;IAED;;;OAGG;IACH,UAFa,mBAAmB,CAW/B;IAPG,4CAGE;IAMN;;;;;OAKG;IACH,2BAHW,OAAO,eAAe,EAAE,gBAAgB,GACtC,IAAI,CAmBhB;IAED;;;;;;OAMG;IACH,mBAHW,MAAM,OAAO,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,IAAI,CAAC,CAoBzB;IAED;;;OAGG;IACH,UAFa,OAAO,CAAC,IAAI,CAAC,CAUzB;IAED;;;OAGG;IACH,SAFa,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;OAGG;IACH,SAFa,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;OAGG;IACH,YAFa,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;;OAIG;IACH,mBAHW,OAAO,aAAa,EAAE,gBAAgB,GACpC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAuB7B;IAED;;;;OAIG;IACH,8BAHW,OAAO,8BAA8B,EAAE,oCAAoC,GAAG,SAAS,GACrF,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAsBpC;IAED;;;;OAIG;IACH,uBAHW,OAAC,GACC,MAAM,GAAG,SAAS,CAI9B;IAED;;;;OAIG;IACH,qBAHW,OAAC,GACC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,KAAK,GAAG,MAAM,CAAA;KAAC,CAY/D;IAED;;;;;OAKG;IACH,oBAJW,OAAC,YACD,MAAM,GACJ,MAAM,CAQlB;CACF;uBA/QsB,qBAAqB;gCACZ,aAAa"}
@@ -84,7 +84,11 @@ export default class VelociousBackgroundJobsWebController extends Controller {
84
84
  */
85
85
  async health() {
86
86
  await this._respond(async () => {
87
- await this.render({ json: { ok: true, service: "velocious-background-jobs" } });
87
+ await this.render({ json: {
88
+ capabilities: { backgroundJobCountDeltas: 1 },
89
+ ok: true,
90
+ service: "velocious-background-jobs"
91
+ } });
88
92
  });
89
93
  }
90
94
  /**
@@ -93,19 +97,14 @@ export default class VelociousBackgroundJobsWebController extends Controller {
93
97
  */
94
98
  async stats() {
95
99
  await this._respond(async () => {
96
- const counts = await this._store().countsByStatus();
97
- /**
98
- * By status.
99
- * @type {Record<string, number>} */
100
- const byStatus = {};
101
- let total = 0;
102
- for (const status of DASHBOARD_STATUSES) {
103
- byStatus[status] = counts[status] || 0;
104
- }
105
- for (const value of Object.values(counts)) {
106
- total += value;
107
- }
108
- await this.render({ json: { counts: byStatus, generatedAtMs: Date.now(), total } });
100
+ const snapshot = await this._store().countSnapshot();
101
+ await this.render({ json: {
102
+ capabilities: { backgroundJobCountDeltas: 1 },
103
+ counts: snapshot.counts,
104
+ generatedAtMs: Date.now(),
105
+ revision: snapshot.revision,
106
+ total: snapshot.total
107
+ } });
109
108
  });
110
109
  }
111
110
  /**
@@ -237,4 +236,4 @@ export default class VelociousBackgroundJobsWebController extends Controller {
237
236
  return Math.floor(numeric);
238
237
  }
239
238
  }
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvd2ViL2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sVUFBVSxNQUFNLHFCQUFxQixDQUFBO0FBQzVDLE9BQU8sbUJBQW1CLE1BQU0sYUFBYSxDQUFBO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFFMUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN0RixNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUE7QUFDbEgsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7QUFDM0IsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFBO0FBRXhCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFxQyxTQUFRLFVBQVU7SUFDMUU7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQTtRQUU3QyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztnQkFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFB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QUE7SUFDakUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQzFCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRS9ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUE7UUFFN0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vY29udHJvbGxlci5qc1wiXG5pbXBvcnQgQmFja2dyb3VuZEpvYnNTdG9yZSBmcm9tIFwiLi4vc3RvcmUuanNcIlxuaW1wb3J0IHthdXRob3JpemVKb2JzUmVxdWVzdH0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi5qc1wiXG5pbXBvcnQge2dldEpvYnNNb3VudH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIlxuXG5jb25zdCBEQVNIQk9BUkRfU1RBVFVTRVMgPSBbXCJxdWV1ZWRcIiwgXCJoYW5kZWRfb2ZmXCIsIFwiY29tcGxldGVkXCIsIFwiZmFpbGVkXCIsIFwib3JwaGFuZWRcIl1cbmNvbnN0IFNPUlRBQkxFX0tFWVMgPSBbXCJhdHRlbXB0c1wiLCBcImNvbXBsZXRlZEF0TXNcIiwgXCJjcmVhdGVkQXRNc1wiLCBcImZhaWxlZEF0TXNcIiwgXCJoYW5kZWRPZmZBdE1zXCIsIFwic2NoZWR1bGVkQXRNc1wiXVxuY29uc3QgREVGQVVMVF9QRVJfUEFHRSA9IDI1XG5jb25zdCBNQVhfUEVSX1BBR0UgPSAxMDBcblxuLyoqXG4gKiBSZWFkLW9ubHkgSFRUUCBBUEkgYmFja2luZyB0aGUgYmFja2dyb3VuZC1qb2JzIGRhc2hib2FyZC4gTW91bnRlZCBieVxuICoge0BsaW5rIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXMgYSByb3V0ZS1yZXNvbHZlciBob29rIHNvIGl0IGNhbiBzaGlwXG4gKiBpbnNpZGUgdGhlIHZlbG9jaW91cyBwYWNrYWdlLiBFdmVyeSBhY3Rpb24gaXMgZ2F0ZWQgYnkge0BsaW5rIGF1dGhvcml6ZUpvYnNSZXF1ZXN0fS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzQmFja2dyb3VuZEpvYnNXZWJDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlciB7XG4gIC8qKlxuICAgKiBSdW5zIG1vdW50IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3JlZ2lzdHJ5LmpzXCIpLkpvYnNNb3VudE9wdGlvbnN9IC0gT3B0aW9ucyBmb3IgdGhlIG1vdW50IHRoYXQgbWF0Y2hlZCB0aGlzIHJlcXVlc3QuXG4gICAqL1xuICBfbW91bnRPcHRpb25zKCkge1xuICAgIGNvbnN0IGF0ID0gdGhpcy5wYXJhbXMoKS52ZWxvY2lvdXNKb2JzTW91bnRBdFxuXG4gICAgcmV0dXJuIGdldEpvYnNNb3VudCh0aGlzLmdldENvbmZpZ3VyYXRpb24oKSwgYXQpIHx8IHt9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBzdG9yZS5cbiAgICogQHJldHVybnMge0JhY2tncm91bmRKb2JzU3RvcmV9IC0gSm9icyBzdG9yZSBzY29wZWQgdG8gdGhlIG1vdW50J3MgZGF0YWJhc2UuXG4gICAqL1xuICBfc3RvcmUoKSB7XG4gICAgaWYgKCF0aGlzLl9qb2JzU3RvcmUpIHtcbiAgICAgIHRoaXMuX2pvYnNTdG9yZSA9IG5ldyBCYWNrZ3JvdW5kSm9ic1N0b3JlKHtcbiAgICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAgIGRhdGFiYXNlSWRlbnRpZmllcjogdGhpcy5fbW91bnRPcHRpb25zKCkuZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9qb2JzU3RvcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIENPUlMgaGVhZGVycyB3aGVuIHRoZSByZXF1ZXN0IG9yaWdpbiBpcyBhbGxvd2VkLCBzbyB0aGUgc3RhbmRhbG9uZVxuICAgKiBicm93c2VyIGRhc2hib2FyZCBjYW4gcmVhZCB0aGUgQVBJIGNyb3NzLW9yaWdpbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlZ2lzdHJ5LmpzXCIpLkpvYnNNb3VudE9wdGlvbnN9IG9wdGlvbnMgLSBNb3VudCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBfYXBwbHlDb3JzSGVhZGVycyhvcHRpb25zKSB7XG4gICAgY29uc3QgYWxsb3dlZE9yaWdpbnMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuYWxsb3dlZE9yaWdpbnMpID8gb3B0aW9ucy5hbGxvd2VkT3JpZ2lucyA6IFtdXG5cbiAgICBpZiAoYWxsb3dlZE9yaWdpbnMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMucmVxdWVzdCgpLm9yaWdpbigpXG4gICAgY29uc3QgYWxsb3dBbGwgPSBhbGxvd2VkT3JpZ2lucy5pbmNsdWRlcyhcIipcIilcblxuICAgIGlmICghb3JpZ2luKSByZXR1cm5cbiAgICBpZiAoIWFsbG93QWxsICYmICFhbGxvd2VkT3JpZ2lucy5pbmNsdWRlcyhvcmlnaW4pKSByZXR1cm5cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZSgpXG5cbiAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIiwgYWxsb3dBbGwgPyBcIipcIiA6IG9yaWdpbilcbiAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJWYXJ5XCIsIFwiT3JpZ2luXCIpXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiLCBcImF1dGhvcml6YXRpb24sIGNvbnRlbnQtdHlwZVwiKVxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIiwgXCJHRVQsIFBPU1QsIERFTEVURSwgT1BUSU9OU1wiKVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgQ09SUyBoZWFkZXJzLCBhdXRob3JpemVzIHRoZSByZXF1ZXN0LCBhbmQgcnVucyB0aGUgYWN0aW9uIGJvZHkgb25seVxuICAgKiB3aGVuIGF1dGhvcml6ZWQuIFJlbmRlcnMgYSA0MDEgb3RoZXJ3aXNlLiBUaGUgYmFzZSBjb250cm9sbGVyIGhhcyBub1xuICAgKiBiZWZvcmUtYWN0aW9uIGhhbHRpbmcsIHNvIGF1dGhvcml6YXRpb24gaXMgZW5mb3JjZWQgaGVyZSBwZXIgYWN0aW9uLlxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGFjdGlvbkZuIC0gQWN0aW9uIGJvZHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBfcmVzcG9uZChhY3Rpb25Gbikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9tb3VudE9wdGlvbnMoKVxuXG4gICAgdGhpcy5fYXBwbHlDb3JzSGVhZGVycyhvcHRpb25zKVxuXG4gICAgY29uc3QgYXV0aG9yaXplZCA9IGF3YWl0IGF1dGhvcml6ZUpvYnNSZXF1ZXN0KHtcbiAgICAgIGFiaWxpdHk6IHRoaXMuY3VycmVudEFiaWxpdHkoKSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCgpXG4gICAgfSlcblxuICAgIGlmICghYXV0aG9yaXplZCkge1xuICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoe2pzb246IHtlcnJvcjogXCJ1bmF1dGhvcml6ZWRcIn0sIHN0YXR1czogNDAxfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGF3YWl0IGFjdGlvbkZuKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGhlYWx0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGhlYWx0aCgpIHtcbiAgICBhd2FpdCB0aGlzLl9yZXNwb25kKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMucmVuZGVyKHtqc29uOiB7b2s6IHRydWUsIHNlcnZpY2U6IFwidmVsb2Npb3VzLWJhY2tncm91bmQtam9ic1wifX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHN0YXRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgc3RhdHMoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVzcG9uZChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb3VudHMgPSBhd2FpdCB0aGlzLl9zdG9yZSgpLmNvdW50c0J5U3RhdHVzKClcbiAgICAgIC8qKlxuICAgICAgICogQnkgc3RhdHVzLlxuICAgICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIG51bWJlcj59ICovXG4gICAgICBjb25zdCBieVN0YXR1cyA9IHt9XG4gICAgICBsZXQgdG90YWwgPSAwXG5cbiAgICAgIGZvciAoY29uc3Qgc3RhdHVzIG9mIERBU0hCT0FSRF9TVEFUVVNFUykge1xuICAgICAgICBieVN0YXR1c1tzdGF0dXNdID0gY291bnRzW3N0YXR1c10gfHwgMFxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoY291bnRzKSkge1xuICAgICAgICB0b3RhbCArPSB2YWx1ZVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlbmRlcih7anNvbjoge2NvdW50czogYnlTdGF0dXMsIGdlbmVyYXRlZEF0TXM6IERhdGUubm93KCksIHRvdGFsfX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGluZGV4LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgaW5kZXgoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVzcG9uZChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnBhcmFtcygpXG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zYW5pdGl6ZVN0YXR1cyhwYXJhbXMuc3RhdHVzKVxuICAgICAgY29uc3Qgam9iTmFtZSA9IHR5cGVvZiBwYXJhbXMuam9iTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwYXJhbXMuam9iTmFtZS5sZW5ndGggPiAwID8gcGFyYW1zLmpvYk5hbWUgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLl9wb3NpdGl2ZUludChwYXJhbXMucGFnZSwgMSlcbiAgICAgIGNvbnN0IHBlclBhZ2UgPSBNYXRoLm1pbih0aGlzLl9wb3NpdGl2ZUludChwYXJhbXMucGVyUGFnZSwgREVGQVVMVF9QRVJfUEFHRSksIE1BWF9QRVJfUEFHRSlcbiAgICAgIGNvbnN0IHtzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9ufSA9IHRoaXMuX3Nhbml0aXplU29ydChwYXJhbXMuc29ydClcbiAgICAgIGNvbnN0IHN0b3JlID0gdGhpcy5fc3RvcmUoKVxuICAgICAgY29uc3Qgam9icyA9IGF3YWl0IHN0b3JlLmxpc3RKb2JzKHtqb2JOYW1lLCBsaW1pdDogcGVyUGFnZSwgb2Zmc2V0OiAocGFnZSAtIDEpICogcGVyUGFnZSwgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgc3RhdHVzfSlcbiAgICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgc3RvcmUuY291bnRKb2JzKHtqb2JOYW1lLCBzdGF0dXN9KVxuXG4gICAgICBhd2FpdCB0aGlzLnJlbmRlcih7anNvbjoge1xuICAgICAgICBqb2JzOiBqb2JzLm1hcCgoam9iKSA9PiB0aGlzLl9zZXJpYWxpemVKb2Ioam9iKSksXG4gICAgICAgIHBhZ2luYXRpb246IHtwYWdlLCBwZXJQYWdlLCB0b3RhbCwgdG90YWxQYWdlczogcGVyUGFnZSA+IDAgPyBNYXRoLmNlaWwodG90YWwgLyBwZXJQYWdlKSA6IDB9XG4gICAgICB9fSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2hvdy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHNob3coKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVzcG9uZChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBqb2IgPSBhd2FpdCB0aGlzLl9zdG9yZSgpLmdldEpvYih0aGlzLnBhcmFtcygpLmlkKVxuXG4gICAgICBpZiAoIWpvYikge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcih7anNvbjoge2Vycm9yOiBcIm5vdF9mb3VuZFwifSwgc3RhdHVzOiA0MDR9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoe2pzb246IHtqb2I6IHRoaXMuX3NlcmlhbGl6ZUpvYihqb2IpfX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjaGVkdWxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgc2NoZWR1bGUoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVzcG9uZChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzY2hlZHVsZWQgPSBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZygpXG5cbiAgICAgIGF3YWl0IHRoaXMucmVuZGVyKHtqc29uOiB7c2NoZWR1bGU6IHRoaXMuX3NlcmlhbGl6ZVNjaGVkdWxlKHNjaGVkdWxlZCl9fSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2VyaWFsaXplIGpvYi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUm93fSBqb2IgLSBKb2Igcm93LlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgPz59IC0gU2VyaWFsaXplZCBqb2IgZm9yIHRoZSBBUEkuXG4gICAqL1xuICBfc2VyaWFsaXplSm9iKGpvYikge1xuICAgIGNvbnN0IHJlZGFjdEFyZ3MgPSBCb29sZWFuKHRoaXMuX21vdW50T3B0aW9ucygpLnJlZGFjdEFyZ3MpXG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogcmVkYWN0QXJncyA/IHVuZGVmaW5lZCA6IGpvYi5hcmdzLFxuICAgICAgYXJnc1JlZGFjdGVkOiByZWRhY3RBcmdzLFxuICAgICAgYXR0ZW1wdHM6IGpvYi5hdHRlbXB0cyxcbiAgICAgIGNvbXBsZXRlZEF0TXM6IGpvYi5jb21wbGV0ZWRBdE1zLFxuICAgICAgY3JlYXRlZEF0TXM6IGpvYi5jcmVhdGVkQXRNcyxcbiAgICAgIGV4ZWN1dGlvbk1vZGU6IGpvYi5leGVjdXRpb25Nb2RlLFxuICAgICAgZmFpbGVkQXRNczogam9iLmZhaWxlZEF0TXMsXG4gICAgICBoYW5kZWRPZmZBdE1zOiBqb2IuaGFuZGVkT2ZmQXRNcyxcbiAgICAgIGlkOiBqb2IuaWQsXG4gICAgICBqb2JOYW1lOiBqb2Iuam9iTmFtZSxcbiAgICAgIGxhc3RFcnJvcjogam9iLmxhc3RFcnJvcixcbiAgICAgIG1heFJldHJpZXM6IGpvYi5tYXhSZXRyaWVzLFxuICAgICAgb3JwaGFuZWRBdE1zOiBqb2Iub3JwaGFuZWRBdE1zLFxuICAgICAgc2NoZWR1bGVkQXRNczogam9iLnNjaGVkdWxlZEF0TXMsXG4gICAgICBzdGF0dXM6IGpvYi5zdGF0dXMsXG4gICAgICB3b3JrZXJJZDogam9iLndvcmtlcklkXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2VyaWFsaXplIHNjaGVkdWxlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkfSBzY2hlZHVsZWQgLSBTY2hlZHVsZWQgam9icyBjb25maWcuXG4gICAqIEByZXR1cm5zIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCA/Pj59IC0gU2VyaWFsaXplZCByZWN1cnJpbmcgam9icy5cbiAgICovXG4gIF9zZXJpYWxpemVTY2hlZHVsZShzY2hlZHVsZWQpIHtcbiAgICBjb25zdCBqb2JzID0gc2NoZWR1bGVkPy5qb2JzXG5cbiAgICBpZiAoIWpvYnMgfHwgdHlwZW9mIGpvYnMgIT09IFwib2JqZWN0XCIpIHJldHVybiBbXVxuXG4gICAgY29uc3QgcmVkYWN0QXJncyA9IEJvb2xlYW4odGhpcy5fbW91bnRPcHRpb25zKCkucmVkYWN0QXJncylcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhqb2JzKS5tYXAoKG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gam9ic1tuYW1lXSB8fCAvKiogQHR5cGUgez99ICovICh7fSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogcmVkYWN0QXJncyA/IHVuZGVmaW5lZCA6IChlbnRyeS5hcmdzIHx8IFtdKSxcbiAgICAgICAgY3JvbjogZW50cnkuY3JvbixcbiAgICAgICAgZW5hYmxlZDogZW50cnkuZW5hYmxlZCAhPT0gZmFsc2UsXG4gICAgICAgIGV2ZXJ5OiBlbnRyeS5ldmVyeSxcbiAgICAgICAgam9iTmFtZTogdHlwZW9mIGVudHJ5LmNsYXNzID09PSBcImZ1bmN0aW9uXCIgPyBlbnRyeS5jbGFzcy5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBvcHRpb25zOiBlbnRyeS5vcHRpb25zIHx8IHt9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNhbml0aXplIHN0YXR1cy5cbiAgICogQHBhcmFtIHs/fSB2YWx1ZSAtIFJhdyBzdGF0dXMgcGFyYW0uXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVmFsaWQgc3RhdHVzIG9yIHVuZGVmaW5lZC5cbiAgICovXG4gIF9zYW5pdGl6ZVN0YXR1cyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgREFTSEJPQVJEX1NUQVRVU0VTLmluY2x1ZGVzKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzYW5pdGl6ZSBzb3J0LlxuICAgKiBAcGFyYW0gez99IHZhbHVlIC0gUmF3IHNvcnQgcGFyYW0gKGUuZy4gXCJjcmVhdGVkQXRNc1wiIG9yIFwiLWZhaWxlZEF0TXNcIikuXG4gICAqIEByZXR1cm5zIHt7c29ydENvbHVtbjogc3RyaW5nLCBzb3J0RGlyZWN0aW9uOiBcIkFTQ1wiIHwgXCJERVNDXCJ9fSAtIE5vcm1hbGl6ZWQgc29ydC5cbiAgICovXG4gIF9zYW5pdGl6ZVNvcnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtzb3J0Q29sdW1uOiBcImNyZWF0ZWRBdE1zXCIsIHNvcnREaXJlY3Rpb246IFwiREVTQ1wifVxuICAgIH1cblxuICAgIGNvbnN0IGRlc2NlbmRpbmcgPSB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKVxuICAgIGNvbnN0IGtleSA9IGRlc2NlbmRpbmcgPyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlXG4gICAgY29uc3Qgc29ydENvbHVtbiA9IFNPUlRBQkxFX0tFWVMuaW5jbHVkZXMoa2V5KSA/IGtleSA6IFwiY3JlYXRlZEF0TXNcIlxuXG4gICAgcmV0dXJuIHtzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uOiBkZXNjZW5kaW5nID8gXCJERVNDXCIgOiBcIkFTQ1wifVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcG9zaXRpdmUgaW50LlxuICAgKiBAcGFyYW0gez99IHZhbHVlIC0gUmF3IG51bWVyaWMgcGFyYW0uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWxsYmFjayAtIEZhbGxiYWNrIHdoZW4gaW52YWxpZC5cbiAgICogQHJldHVybnMge251bWJlcn0gLSBQb3NpdGl2ZSBpbnRlZ2VyLlxuICAgKi9cbiAgX3Bvc2l0aXZlSW50KHZhbHVlLCBmYWxsYmFjaykge1xuICAgIGNvbnN0IG51bWVyaWMgPSBOdW1iZXIoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobnVtZXJpYykgfHwgbnVtZXJpYyA8IDEpIHJldHVybiBmYWxsYmFja1xuXG4gICAgcmV0dXJuIE1hdGguZmxvb3IobnVtZXJpYylcbiAgfVxufVxuIl19
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvd2ViL2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sVUFBVSxNQUFNLHFCQUFxQixDQUFBO0FBQzVDLE9BQU8sbUJBQW1CLE1BQU0sYUFBYSxDQUFBO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFFMUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN0RixNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUE7QUFDbEgsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7QUFDM0IsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFBO0FBRXhCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFxQyxTQUFRLFVBQVU7SUFDMUU7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQTtRQUU3QyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztnQkFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFB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SyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFBO1FBRTdELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL2NvbnRyb2xsZXIuanNcIlxuaW1wb3J0IEJhY2tncm91bmRKb2JzU3RvcmUgZnJvbSBcIi4uL3N0b3JlLmpzXCJcbmltcG9ydCB7YXV0aG9yaXplSm9ic1JlcXVlc3R9IGZyb20gXCIuL2F1dGhvcml6YXRpb24uanNcIlxuaW1wb3J0IHtnZXRKb2JzTW91bnR9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCJcblxuY29uc3QgREFTSEJPQVJEX1NUQVRVU0VTID0gW1wicXVldWVkXCIsIFwiaGFuZGVkX29mZlwiLCBcImNvbXBsZXRlZFwiLCBcImZhaWxlZFwiLCBcIm9ycGhhbmVkXCJdXG5jb25zdCBTT1JUQUJMRV9LRVlTID0gW1wiYXR0ZW1wdHNcIiwgXCJjb21wbGV0ZWRBdE1zXCIsIFwiY3JlYXRlZEF0TXNcIiwgXCJmYWlsZWRBdE1zXCIsIFwiaGFuZGVkT2ZmQXRNc1wiLCBcInNjaGVkdWxlZEF0TXNcIl1cbmNvbnN0IERFRkFVTFRfUEVSX1BBR0UgPSAyNVxuY29uc3QgTUFYX1BFUl9QQUdFID0gMTAwXG5cbi8qKlxuICogUmVhZC1vbmx5IEhUVFAgQVBJIGJhY2tpbmcgdGhlIGJhY2tncm91bmQtam9icyBkYXNoYm9hcmQuIE1vdW50ZWQgYnlcbiAqIHtAbGluayBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFzIGEgcm91dGUtcmVzb2x2ZXIgaG9vayBzbyBpdCBjYW4gc2hpcFxuICogaW5zaWRlIHRoZSB2ZWxvY2lvdXMgcGFja2FnZS4gRXZlcnkgYWN0aW9uIGlzIGdhdGVkIGJ5IHtAbGluayBhdXRob3JpemVKb2JzUmVxdWVzdH0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0JhY2tncm91bmRKb2JzV2ViQ29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIge1xuICAvKipcbiAgICogUnVucyBtb3VudCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9yZWdpc3RyeS5qc1wiKS5Kb2JzTW91bnRPcHRpb25zfSAtIE9wdGlvbnMgZm9yIHRoZSBtb3VudCB0aGF0IG1hdGNoZWQgdGhpcyByZXF1ZXN0LlxuICAgKi9cbiAgX21vdW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBhdCA9IHRoaXMucGFyYW1zKCkudmVsb2Npb3VzSm9ic01vdW50QXRcblxuICAgIHJldHVybiBnZXRKb2JzTW91bnQodGhpcy5nZXRDb25maWd1cmF0aW9uKCksIGF0KSB8fCB7fVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RvcmUuXG4gICAqIEByZXR1cm5zIHtCYWNrZ3JvdW5kSm9ic1N0b3JlfSAtIEpvYnMgc3RvcmUgc2NvcGVkIHRvIHRoZSBtb3VudCdzIGRhdGFiYXNlLlxuICAgKi9cbiAgX3N0b3JlKCkge1xuICAgIGlmICghdGhpcy5fam9ic1N0b3JlKSB7XG4gICAgICB0aGlzLl9qb2JzU3RvcmUgPSBuZXcgQmFja2dyb3VuZEpvYnNTdG9yZSh7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgICBkYXRhYmFzZUlkZW50aWZpZXI6IHRoaXMuX21vdW50T3B0aW9ucygpLmRhdGFiYXNlSWRlbnRpZmllclxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fam9ic1N0b3JlXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBDT1JTIGhlYWRlcnMgd2hlbiB0aGUgcmVxdWVzdCBvcmlnaW4gaXMgYWxsb3dlZCwgc28gdGhlIHN0YW5kYWxvbmVcbiAgICogYnJvd3NlciBkYXNoYm9hcmQgY2FuIHJlYWQgdGhlIEFQSSBjcm9zcy1vcmlnaW4uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZWdpc3RyeS5qc1wiKS5Kb2JzTW91bnRPcHRpb25zfSBvcHRpb25zIC0gTW91bnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX2FwcGx5Q29yc0hlYWRlcnMob3B0aW9ucykge1xuICAgIGNvbnN0IGFsbG93ZWRPcmlnaW5zID0gQXJyYXkuaXNBcnJheShvcHRpb25zLmFsbG93ZWRPcmlnaW5zKSA/IG9wdGlvbnMuYWxsb3dlZE9yaWdpbnMgOiBbXVxuXG4gICAgaWYgKGFsbG93ZWRPcmlnaW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICBjb25zdCBvcmlnaW4gPSB0aGlzLnJlcXVlc3QoKS5vcmlnaW4oKVxuICAgIGNvbnN0IGFsbG93QWxsID0gYWxsb3dlZE9yaWdpbnMuaW5jbHVkZXMoXCIqXCIpXG5cbiAgICBpZiAoIW9yaWdpbikgcmV0dXJuXG4gICAgaWYgKCFhbGxvd0FsbCAmJiAhYWxsb3dlZE9yaWdpbnMuaW5jbHVkZXMob3JpZ2luKSkgcmV0dXJuXG5cbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2UoKVxuXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsIGFsbG93QWxsID8gXCIqXCIgOiBvcmlnaW4pXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiVmFyeVwiLCBcIk9yaWdpblwiKVxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIiwgXCJhdXRob3JpemF0aW9uLCBjb250ZW50LXR5cGVcIilcbiAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCIsIFwiR0VULCBQT1NULCBERUxFVEUsIE9QVElPTlNcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIENPUlMgaGVhZGVycywgYXV0aG9yaXplcyB0aGUgcmVxdWVzdCwgYW5kIHJ1bnMgdGhlIGFjdGlvbiBib2R5IG9ubHlcbiAgICogd2hlbiBhdXRob3JpemVkLiBSZW5kZXJzIGEgNDAxIG90aGVyd2lzZS4gVGhlIGJhc2UgY29udHJvbGxlciBoYXMgbm9cbiAgICogYmVmb3JlLWFjdGlvbiBoYWx0aW5nLCBzbyBhdXRob3JpemF0aW9uIGlzIGVuZm9yY2VkIGhlcmUgcGVyIGFjdGlvbi5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25GbiAtIEFjdGlvbiBib2R5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX3Jlc3BvbmQoYWN0aW9uRm4pIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fbW91bnRPcHRpb25zKClcblxuICAgIHRoaXMuX2FwcGx5Q29yc0hlYWRlcnMob3B0aW9ucylcblxuICAgIGNvbnN0IGF1dGhvcml6ZWQgPSBhd2FpdCBhdXRob3JpemVKb2JzUmVxdWVzdCh7XG4gICAgICBhYmlsaXR5OiB0aGlzLmN1cnJlbnRBYmlsaXR5KCksXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QoKVxuICAgIH0pXG5cbiAgICBpZiAoIWF1dGhvcml6ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVuZGVyKHtqc29uOiB7ZXJyb3I6IFwidW5hdXRob3JpemVkXCJ9LCBzdGF0dXM6IDQwMX0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCBhY3Rpb25GbigpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBoZWFsdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBoZWFsdGgoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVzcG9uZChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnJlbmRlcih7anNvbjoge1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtiYWNrZ3JvdW5kSm9iQ291bnREZWx0YXM6IDF9LFxuICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgc2VydmljZTogXCJ2ZWxvY2lvdXMtYmFja2dyb3VuZC1qb2JzXCJcbiAgICAgIH19KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzdGF0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHN0YXRzKCkge1xuICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0aGlzLl9zdG9yZSgpLmNvdW50U25hcHNob3QoKVxuXG4gICAgICBhd2FpdCB0aGlzLnJlbmRlcih7anNvbjoge1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtiYWNrZ3JvdW5kSm9iQ291bnREZWx0YXM6IDF9LFxuICAgICAgICBjb3VudHM6IHNuYXBzaG90LmNvdW50cyxcbiAgICAgICAgZ2VuZXJhdGVkQXRNczogRGF0ZS5ub3coKSxcbiAgICAgICAgcmV2aXNpb246IHNuYXBzaG90LnJldmlzaW9uLFxuICAgICAgICB0b3RhbDogc25hcHNob3QudG90YWxcbiAgICAgIH19KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBpbmRleC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGluZGV4KCkge1xuICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5wYXJhbXMoKVxuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc2FuaXRpemVTdGF0dXMocGFyYW1zLnN0YXR1cylcbiAgICAgIGNvbnN0IGpvYk5hbWUgPSB0eXBlb2YgcGFyYW1zLmpvYk5hbWUgPT09IFwic3RyaW5nXCIgJiYgcGFyYW1zLmpvYk5hbWUubGVuZ3RoID4gMCA/IHBhcmFtcy5qb2JOYW1lIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5fcG9zaXRpdmVJbnQocGFyYW1zLnBhZ2UsIDEpXG4gICAgICBjb25zdCBwZXJQYWdlID0gTWF0aC5taW4odGhpcy5fcG9zaXRpdmVJbnQocGFyYW1zLnBlclBhZ2UsIERFRkFVTFRfUEVSX1BBR0UpLCBNQVhfUEVSX1BBR0UpXG4gICAgICBjb25zdCB7c29ydENvbHVtbiwgc29ydERpcmVjdGlvbn0gPSB0aGlzLl9zYW5pdGl6ZVNvcnQocGFyYW1zLnNvcnQpXG4gICAgICBjb25zdCBzdG9yZSA9IHRoaXMuX3N0b3JlKClcbiAgICAgIGNvbnN0IGpvYnMgPSBhd2FpdCBzdG9yZS5saXN0Sm9icyh7am9iTmFtZSwgbGltaXQ6IHBlclBhZ2UsIG9mZnNldDogKHBhZ2UgLSAxKSAqIHBlclBhZ2UsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHN0YXR1c30pXG4gICAgICBjb25zdCB0b3RhbCA9IGF3YWl0IHN0b3JlLmNvdW50Sm9icyh7am9iTmFtZSwgc3RhdHVzfSlcblxuICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoe2pzb246IHtcbiAgICAgICAgam9iczogam9icy5tYXAoKGpvYikgPT4gdGhpcy5fc2VyaWFsaXplSm9iKGpvYikpLFxuICAgICAgICBwYWdpbmF0aW9uOiB7cGFnZSwgcGVyUGFnZSwgdG90YWwsIHRvdGFsUGFnZXM6IHBlclBhZ2UgPiAwID8gTWF0aC5jZWlsKHRvdGFsIC8gcGVyUGFnZSkgOiAwfVxuICAgICAgfX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNob3cuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBzaG93KCkge1xuICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgam9iID0gYXdhaXQgdGhpcy5fc3RvcmUoKS5nZXRKb2IodGhpcy5wYXJhbXMoKS5pZClcblxuICAgICAgaWYgKCFqb2IpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoe2pzb246IHtlcnJvcjogXCJub3RfZm91bmRcIn0sIHN0YXR1czogNDA0fSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVuZGVyKHtqc29uOiB7am9iOiB0aGlzLl9zZXJpYWxpemVKb2Ioam9iKX19KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzY2hlZHVsZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHNjaGVkdWxlKCkge1xuICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2NoZWR1bGVkID0gYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWcoKVxuXG4gICAgICBhd2FpdCB0aGlzLnJlbmRlcih7anNvbjoge3NjaGVkdWxlOiB0aGlzLl9zZXJpYWxpemVTY2hlZHVsZShzY2hlZHVsZWQpfX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNlcmlhbGl6ZSBqb2IuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJvd30gam9iIC0gSm9iIHJvdy5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSAtIFNlcmlhbGl6ZWQgam9iIGZvciB0aGUgQVBJLlxuICAgKi9cbiAgX3NlcmlhbGl6ZUpvYihqb2IpIHtcbiAgICBjb25zdCByZWRhY3RBcmdzID0gQm9vbGVhbih0aGlzLl9tb3VudE9wdGlvbnMoKS5yZWRhY3RBcmdzKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3M6IHJlZGFjdEFyZ3MgPyB1bmRlZmluZWQgOiBqb2IuYXJncyxcbiAgICAgIGFyZ3NSZWRhY3RlZDogcmVkYWN0QXJncyxcbiAgICAgIGF0dGVtcHRzOiBqb2IuYXR0ZW1wdHMsXG4gICAgICBjb21wbGV0ZWRBdE1zOiBqb2IuY29tcGxldGVkQXRNcyxcbiAgICAgIGNyZWF0ZWRBdE1zOiBqb2IuY3JlYXRlZEF0TXMsXG4gICAgICBleGVjdXRpb25Nb2RlOiBqb2IuZXhlY3V0aW9uTW9kZSxcbiAgICAgIGZhaWxlZEF0TXM6IGpvYi5mYWlsZWRBdE1zLFxuICAgICAgaGFuZGVkT2ZmQXRNczogam9iLmhhbmRlZE9mZkF0TXMsXG4gICAgICBpZDogam9iLmlkLFxuICAgICAgam9iTmFtZTogam9iLmpvYk5hbWUsXG4gICAgICBsYXN0RXJyb3I6IGpvYi5sYXN0RXJyb3IsXG4gICAgICBtYXhSZXRyaWVzOiBqb2IubWF4UmV0cmllcyxcbiAgICAgIG9ycGhhbmVkQXRNczogam9iLm9ycGhhbmVkQXRNcyxcbiAgICAgIHNjaGVkdWxlZEF0TXM6IGpvYi5zY2hlZHVsZWRBdE1zLFxuICAgICAgc3RhdHVzOiBqb2Iuc3RhdHVzLFxuICAgICAgd29ya2VySWQ6IGpvYi53b3JrZXJJZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNlcmlhbGl6ZSBzY2hlZHVsZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZH0gc2NoZWR1bGVkIC0gU2NoZWR1bGVkIGpvYnMgY29uZmlnLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSAtIFNlcmlhbGl6ZWQgcmVjdXJyaW5nIGpvYnMuXG4gICAqL1xuICBfc2VyaWFsaXplU2NoZWR1bGUoc2NoZWR1bGVkKSB7XG4gICAgY29uc3Qgam9icyA9IHNjaGVkdWxlZD8uam9ic1xuXG4gICAgaWYgKCFqb2JzIHx8IHR5cGVvZiBqb2JzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gW11cblxuICAgIGNvbnN0IHJlZGFjdEFyZ3MgPSBCb29sZWFuKHRoaXMuX21vdW50T3B0aW9ucygpLnJlZGFjdEFyZ3MpXG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoam9icykubWFwKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbnRyeSA9IGpvYnNbbmFtZV0gfHwgLyoqIEB0eXBlIHs/fSAqLyAoe30pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFyZ3M6IHJlZGFjdEFyZ3MgPyB1bmRlZmluZWQgOiAoZW50cnkuYXJncyB8fCBbXSksXG4gICAgICAgIGNyb246IGVudHJ5LmNyb24sXG4gICAgICAgIGVuYWJsZWQ6IGVudHJ5LmVuYWJsZWQgIT09IGZhbHNlLFxuICAgICAgICBldmVyeTogZW50cnkuZXZlcnksXG4gICAgICAgIGpvYk5hbWU6IHR5cGVvZiBlbnRyeS5jbGFzcyA9PT0gXCJmdW5jdGlvblwiID8gZW50cnkuY2xhc3MubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb3B0aW9uczogZW50cnkub3B0aW9ucyB8fCB7fVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzYW5pdGl6ZSBzdGF0dXMuXG4gICAqIEBwYXJhbSB7P30gdmFsdWUgLSBSYXcgc3RhdHVzIHBhcmFtLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFZhbGlkIHN0YXR1cyBvciB1bmRlZmluZWQuXG4gICAqL1xuICBfc2FuaXRpemVTdGF0dXModmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIERBU0hCT0FSRF9TVEFUVVNFUy5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2FuaXRpemUgc29ydC5cbiAgICogQHBhcmFtIHs/fSB2YWx1ZSAtIFJhdyBzb3J0IHBhcmFtIChlLmcuIFwiY3JlYXRlZEF0TXNcIiBvciBcIi1mYWlsZWRBdE1zXCIpLlxuICAgKiBAcmV0dXJucyB7e3NvcnRDb2x1bW46IHN0cmluZywgc29ydERpcmVjdGlvbjogXCJBU0NcIiB8IFwiREVTQ1wifX0gLSBOb3JtYWxpemVkIHNvcnQuXG4gICAqL1xuICBfc2FuaXRpemVTb3J0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7c29ydENvbHVtbjogXCJjcmVhdGVkQXRNc1wiLCBzb3J0RGlyZWN0aW9uOiBcIkRFU0NcIn1cbiAgICB9XG5cbiAgICBjb25zdCBkZXNjZW5kaW5nID0gdmFsdWUuc3RhcnRzV2l0aChcIi1cIilcbiAgICBjb25zdCBrZXkgPSBkZXNjZW5kaW5nID8gdmFsdWUuc2xpY2UoMSkgOiB2YWx1ZVxuICAgIGNvbnN0IHNvcnRDb2x1bW4gPSBTT1JUQUJMRV9LRVlTLmluY2x1ZGVzKGtleSkgPyBrZXkgOiBcImNyZWF0ZWRBdE1zXCJcblxuICAgIHJldHVybiB7c29ydENvbHVtbiwgc29ydERpcmVjdGlvbjogZGVzY2VuZGluZyA/IFwiREVTQ1wiIDogXCJBU0NcIn1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBvc2l0aXZlIGludC5cbiAgICogQHBhcmFtIHs/fSB2YWx1ZSAtIFJhdyBudW1lcmljIHBhcmFtLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFsbGJhY2sgLSBGYWxsYmFjayB3aGVuIGludmFsaWQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gUG9zaXRpdmUgaW50ZWdlci5cbiAgICovXG4gIF9wb3NpdGl2ZUludCh2YWx1ZSwgZmFsbGJhY2spIHtcbiAgICBjb25zdCBudW1lcmljID0gTnVtYmVyKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZSlcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG51bWVyaWMpIHx8IG51bWVyaWMgPCAxKSByZXR1cm4gZmFsbGJhY2tcblxuICAgIHJldHVybiBNYXRoLmZsb29yKG51bWVyaWMpXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Authorized dashboard count-delta channel. Clients subscribe with the mount
3
+ * path and their normal bearer token as `authenticationToken`.
4
+ */
5
+ export default class BackgroundJobCountsChannel extends VelociousWebsocketChannel {
6
+ /**
7
+ * Registers the framework channel used by mounted jobs dashboards.
8
+ * @param {import("../../configuration.js").default} configuration - Configuration.
9
+ */
10
+ static register(configuration: import("../../configuration.js").default): void;
11
+ /**
12
+ * Authorizes the subscription.
13
+ * @returns {Promise<boolean>} Whether the mount's normal dashboard authorization allows the subscription.
14
+ */
15
+ canSubscribe(): Promise<boolean>;
16
+ /** @type {string} */
17
+ databaseIdentifier: string;
18
+ /**
19
+ * Matches only events from the database selected by the authorized mount.
20
+ * @param {import("../../http-server/websocket-channel.js").WebsocketJsonValue} broadcastParams - Publisher scope.
21
+ * @returns {boolean} Whether this subscription should receive the event.
22
+ */
23
+ matches(broadcastParams: import("../../http-server/websocket-channel.js").WebsocketJsonValue): boolean;
24
+ /**
25
+ * Builds diagnostics.
26
+ * @returns {Record<string, string>} Non-sensitive diagnostics.
27
+ */
28
+ debugSnapshot(): Record<string, string>;
29
+ }
30
+ import VelociousWebsocketChannel from "../../http-server/websocket-channel.js";
31
+ //# sourceMappingURL=counts-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counts-channel.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/counts-channel.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IA2DE;;;OAGG;IACH,+BAFW,OAAO,wBAAwB,EAAE,OAAO,QAIlD;IAhED;;;OAGG;IACH,gBAFa,OAAO,CAAC,OAAO,CAAC,CAgC5B;IAqBD,qBAAqB;IACrB,oBADW,MAAM,CACM;IApBvB;;;;OAIG;IACH,yBAHW,OAAO,wCAAwC,EAAE,kBAAkB,GACjE,OAAO,CAMnB;IAED;;;OAGG;IACH,iBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIlC;CAYF;sCA3EqC,wCAAwC"}
@@ -0,0 +1,71 @@
1
+ // @ts-check
2
+ import { BACKGROUND_JOB_COUNTS_CHANNEL } from "../store.js";
3
+ import VelociousWebsocketChannel from "../../http-server/websocket-channel.js";
4
+ import { authorizeJobsRequest } from "./authorization.js";
5
+ import { getJobsMount } from "./registry.js";
6
+ import { normalizeMountPrefix } from "./path-matcher.js";
7
+ /**
8
+ * Authorized dashboard count-delta channel. Clients subscribe with the mount
9
+ * path and their normal bearer token as `authenticationToken`.
10
+ */
11
+ export default class BackgroundJobCountsChannel extends VelociousWebsocketChannel {
12
+ /**
13
+ * Authorizes the subscription.
14
+ * @returns {Promise<boolean>} Whether the mount's normal dashboard authorization allows the subscription.
15
+ */
16
+ async canSubscribe() {
17
+ if (typeof this.params.mountAt !== "string")
18
+ return false;
19
+ const mountAt = normalizeMountPrefix(this.params.mountAt);
20
+ const options = getJobsMount(this.session.configuration, mountAt);
21
+ if (!options || !this.session.upgradeRequest)
22
+ return false;
23
+ const token = typeof this.params.authenticationToken === "string"
24
+ ? this.params.authenticationToken
25
+ : null;
26
+ const ability = await this.session.configuration.resolveAbility({
27
+ params: this.params,
28
+ request: this.session.upgradeRequest
29
+ });
30
+ const authorized = await authorizeJobsRequest({
31
+ ability,
32
+ configuration: this.session.configuration,
33
+ options,
34
+ request: this.session.upgradeRequest,
35
+ token
36
+ });
37
+ if (!authorized)
38
+ return false;
39
+ this.databaseIdentifier = options.databaseIdentifier
40
+ || this.session.configuration.getBackgroundJobsConfig().databaseIdentifier
41
+ || "default";
42
+ return true;
43
+ }
44
+ /**
45
+ * Matches only events from the database selected by the authorized mount.
46
+ * @param {import("../../http-server/websocket-channel.js").WebsocketJsonValue} broadcastParams - Publisher scope.
47
+ * @returns {boolean} Whether this subscription should receive the event.
48
+ */
49
+ matches(broadcastParams) {
50
+ if (!broadcastParams || typeof broadcastParams !== "object" || Array.isArray(broadcastParams))
51
+ return false;
52
+ return String(/** @type {Record<string, ?>} */ (broadcastParams).databaseIdentifier) === this.databaseIdentifier;
53
+ }
54
+ /**
55
+ * Builds diagnostics.
56
+ * @returns {Record<string, string>} Non-sensitive diagnostics.
57
+ */
58
+ debugSnapshot() {
59
+ return { databaseIdentifier: this.databaseIdentifier };
60
+ }
61
+ /** @type {string} */
62
+ databaseIdentifier = "";
63
+ /**
64
+ * Registers the framework channel used by mounted jobs dashboards.
65
+ * @param {import("../../configuration.js").default} configuration - Configuration.
66
+ */
67
+ static register(configuration) {
68
+ configuration.registerWebsocketChannel(BACKGROUND_JOB_COUNTS_CHANNEL, this);
69
+ }
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRzLWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3dlYi9jb3VudHMtY2hhbm5lbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3pELE9BQU8seUJBQXlCLE1BQU0sd0NBQXdDLENBQUE7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUV0RDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEyQixTQUFRLHlCQUF5QjtJQUMvRTs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXpELE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDekQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRWpFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUUxRCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEtBQUssUUFBUTtZQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7WUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1lBQzlELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjO1NBQ3JDLENBQUMsQ0FBQTtRQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sb0JBQW9CLENBQUM7WUFDNUMsT0FBTztZQUNQLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDekMsT0FBTztZQUNQLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7WUFDcEMsS0FBSztTQUNOLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0I7ZUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxrQkFBa0I7ZUFDdkUsU0FBUyxDQUFBO1FBRWQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxlQUFlLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFM0csT0FBTyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQTtJQUNsSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtJQUV2Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWE7UUFDM0IsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzdFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge0JBQ0tHUk9VTkRfSk9CX0NPVU5UU19DSEFOTkVMfSBmcm9tIFwiLi4vc3RvcmUuanNcIlxuaW1wb3J0IFZlbG9jaW91c1dlYnNvY2tldENoYW5uZWwgZnJvbSBcIi4uLy4uL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCJcbmltcG9ydCB7YXV0aG9yaXplSm9ic1JlcXVlc3R9IGZyb20gXCIuL2F1dGhvcml6YXRpb24uanNcIlxuaW1wb3J0IHtnZXRKb2JzTW91bnR9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7bm9ybWFsaXplTW91bnRQcmVmaXh9IGZyb20gXCIuL3BhdGgtbWF0Y2hlci5qc1wiXG5cbi8qKlxuICogQXV0aG9yaXplZCBkYXNoYm9hcmQgY291bnQtZGVsdGEgY2hhbm5lbC4gQ2xpZW50cyBzdWJzY3JpYmUgd2l0aCB0aGUgbW91bnRcbiAqIHBhdGggYW5kIHRoZWlyIG5vcm1hbCBiZWFyZXIgdG9rZW4gYXMgYGF1dGhlbnRpY2F0aW9uVG9rZW5gLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrZ3JvdW5kSm9iQ291bnRzQ2hhbm5lbCBleHRlbmRzIFZlbG9jaW91c1dlYnNvY2tldENoYW5uZWwge1xuICAvKipcbiAgICogQXV0aG9yaXplcyB0aGUgc3Vic2NyaXB0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gV2hldGhlciB0aGUgbW91bnQncyBub3JtYWwgZGFzaGJvYXJkIGF1dGhvcml6YXRpb24gYWxsb3dzIHRoZSBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBhc3luYyBjYW5TdWJzY3JpYmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBhcmFtcy5tb3VudEF0ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IG1vdW50QXQgPSBub3JtYWxpemVNb3VudFByZWZpeCh0aGlzLnBhcmFtcy5tb3VudEF0KVxuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRKb2JzTW91bnQodGhpcy5zZXNzaW9uLmNvbmZpZ3VyYXRpb24sIG1vdW50QXQpXG5cbiAgICBpZiAoIW9wdGlvbnMgfHwgIXRoaXMuc2Vzc2lvbi51cGdyYWRlUmVxdWVzdCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCB0b2tlbiA9IHR5cGVvZiB0aGlzLnBhcmFtcy5hdXRoZW50aWNhdGlvblRva2VuID09PSBcInN0cmluZ1wiXG4gICAgICA/IHRoaXMucGFyYW1zLmF1dGhlbnRpY2F0aW9uVG9rZW5cbiAgICAgIDogbnVsbFxuICAgIGNvbnN0IGFiaWxpdHkgPSBhd2FpdCB0aGlzLnNlc3Npb24uY29uZmlndXJhdGlvbi5yZXNvbHZlQWJpbGl0eSh7XG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zLFxuICAgICAgcmVxdWVzdDogdGhpcy5zZXNzaW9uLnVwZ3JhZGVSZXF1ZXN0XG4gICAgfSlcbiAgICBjb25zdCBhdXRob3JpemVkID0gYXdhaXQgYXV0aG9yaXplSm9ic1JlcXVlc3Qoe1xuICAgICAgYWJpbGl0eSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuc2Vzc2lvbi5jb25maWd1cmF0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlcXVlc3Q6IHRoaXMuc2Vzc2lvbi51cGdyYWRlUmVxdWVzdCxcbiAgICAgIHRva2VuXG4gICAgfSlcblxuICAgIGlmICghYXV0aG9yaXplZCkgcmV0dXJuIGZhbHNlXG5cbiAgICB0aGlzLmRhdGFiYXNlSWRlbnRpZmllciA9IG9wdGlvbnMuZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgICB8fCB0aGlzLnNlc3Npb24uY29uZmlndXJhdGlvbi5nZXRCYWNrZ3JvdW5kSm9ic0NvbmZpZygpLmRhdGFiYXNlSWRlbnRpZmllclxuICAgICAgfHwgXCJkZWZhdWx0XCJcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogTWF0Y2hlcyBvbmx5IGV2ZW50cyBmcm9tIHRoZSBkYXRhYmFzZSBzZWxlY3RlZCBieSB0aGUgYXV0aG9yaXplZCBtb3VudC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5XZWJzb2NrZXRKc29uVmFsdWV9IGJyb2FkY2FzdFBhcmFtcyAtIFB1Ymxpc2hlciBzY29wZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBzdWJzY3JpcHRpb24gc2hvdWxkIHJlY2VpdmUgdGhlIGV2ZW50LlxuICAgKi9cbiAgbWF0Y2hlcyhicm9hZGNhc3RQYXJhbXMpIHtcbiAgICBpZiAoIWJyb2FkY2FzdFBhcmFtcyB8fCB0eXBlb2YgYnJvYWRjYXN0UGFyYW1zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYnJvYWRjYXN0UGFyYW1zKSkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gU3RyaW5nKC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChicm9hZGNhc3RQYXJhbXMpLmRhdGFiYXNlSWRlbnRpZmllcikgPT09IHRoaXMuZGF0YWJhc2VJZGVudGlmaWVyXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGRpYWdub3N0aWNzLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gTm9uLXNlbnNpdGl2ZSBkaWFnbm9zdGljcy5cbiAgICovXG4gIGRlYnVnU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtkYXRhYmFzZUlkZW50aWZpZXI6IHRoaXMuZGF0YWJhc2VJZGVudGlmaWVyfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGRhdGFiYXNlSWRlbnRpZmllciA9IFwiXCJcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBmcmFtZXdvcmsgY2hhbm5lbCB1c2VkIGJ5IG1vdW50ZWQgam9icyBkYXNoYm9hcmRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlndXJhdGlvbikge1xuICAgIGNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJXZWJzb2NrZXRDaGFubmVsKEJBQ0tHUk9VTkRfSk9CX0NPVU5UU19DSEFOTkVMLCB0aGlzKVxuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/index.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AACH;IACE;;;;;;;;;;;;;;OAcG;IACH,iHATG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,EAAE,EAAf,MAAM;QACuD,SAAS,GAAtE,OAAO,eAAe,EAAE,gBAAgB,CAAC,WAAW,CAAC;QACrC,YAAY;QACZ,cAAc;QACf,UAAU;QACX,kBAAkB;KACxC,GAAU,IAAI,CAqBhB;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/index.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH;IACE;;;;;;;;;;;;;;OAcG;IACH,iHATG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,EAAE,EAAf,MAAM;QACuD,SAAS,GAAtE,OAAO,eAAe,EAAE,gBAAgB,CAAC,WAAW,CAAC;QACrC,YAAY;QACZ,cAAc;QACf,UAAU;QACX,kBAAkB;KACxC,GAAU,IAAI,CAsBhB;CACF"}
@@ -1,5 +1,6 @@
1
1
  // @ts-check
2
2
  import VelociousBackgroundJobsWebController from "./controller.js";
3
+ import BackgroundJobCountsChannel from "./counts-channel.js";
3
4
  import { matchJobsApiPath, normalizeMountPrefix } from "./path-matcher.js";
4
5
  import { registerJobsMount } from "./registry.js";
5
6
  /**
@@ -37,6 +38,7 @@ export default class VelociousBackgroundJobsApi {
37
38
  throw new Error("No configuration given");
38
39
  const prefix = normalizeMountPrefix(at);
39
40
  registerJobsMount(configuration, prefix, { accessTokens, allowedOrigins, authorize, databaseIdentifier, redactArgs });
41
+ BackgroundJobCountsChannel.register(configuration);
40
42
  configuration.addRouteResolverHook(({ currentPath, request }) => {
41
43
  const match = matchJobsApiPath({ method: request.httpMethod(), path: currentPath, prefix });
42
44
  if (!match)
@@ -50,4 +52,4 @@ export default class VelociousBackgroundJobsApi {
50
52
  });
51
53
  }
52
54
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3dlYi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxvQ0FBb0MsTUFBTSxpQkFBaUIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFFL0M7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFDO1FBQzNHLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRTdELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXZDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBRW5ILGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtZQUV6RixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQTtZQUV2QixPQUFPO2dCQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsVUFBVSxFQUFFLDRCQUE0QjtnQkFDeEMsZUFBZSxFQUFFLG9DQUFvQztnQkFDckQsTUFBTSxFQUFFLEVBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBQzthQUN4RCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFZlbG9jaW91c0JhY2tncm91bmRKb2JzV2ViQ29udHJvbGxlciBmcm9tIFwiLi9jb250cm9sbGVyLmpzXCJcbmltcG9ydCB7bWF0Y2hKb2JzQXBpUGF0aCwgbm9ybWFsaXplTW91bnRQcmVmaXh9IGZyb20gXCIuL3BhdGgtbWF0Y2hlci5qc1wiXG5pbXBvcnQge3JlZ2lzdGVySm9ic01vdW50fSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiXG5cbi8qKlxuICogTW91bnRhYmxlIHJlYWQtb25seSBiYWNrZ3JvdW5kLWpvYnMgZGFzaGJvYXJkIEFQSS4gSW5jbHVkZSBpdCBpbiBhIHJvdXRlcyBmaWxlXG4gKiB0aGUgd2F5IFNpZGVraXE6OldlYiBpcyBtb3VudGVkIGluIFJhaWxzOlxuICpcbiAqIGBgYGpzXG4gKiByb3V0ZXMuZHJhdygocm91dGUpID0+IHtcbiAqICAgcm91dGUubW91bnQoVmVsb2Npb3VzQmFja2dyb3VuZEpvYnNBcGksIHtcbiAqICAgICBhdDogXCIvdmVsb2Npb3VzL2pvYnNcIixcbiAqICAgICBhdXRob3JpemU6IGFzeW5jICh7cmVxdWVzdCwgYWJpbGl0eX0pID0+IHsgLi4uIH0sXG4gKiAgICAgYWNjZXNzVG9rZW5zOiBbcHJvY2Vzcy5lbnYuVkVMT0NJT1VTX0pPQlNfVE9LRU5dXG4gKiAgIH0pXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0JhY2tncm91bmRKb2JzQXBpIHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgam9icyBBUEkgdW5kZXIgYGF0YC4gSW1wbGVtZW50ZWQgYXMgYSByb3V0ZS1yZXNvbHZlciBob29rIHNvXG4gICAqIHRoZSBjb250cm9sbGVyIGNhbiBsaXZlIGluc2lkZSB0aGUgdmVsb2Npb3VzIHBhY2thZ2UgcmF0aGVyIHRoYW4gdGhlIGhvc3RcbiAgICogYXBwJ3MgYHNyYy9yb3V0ZXNgIGRpcmVjdG9yeS4gSW52b2tlZCBieSB0aGUgcm91dGluZyBsYXllciBmb3IgZWFjaFxuICAgKiBgcm91dGUubW91bnQoLi4uKWAgcmVnaXN0cmF0aW9uLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hdCAtIE1vdW50IHBhdGggcHJlZml4IChlLmcuIFwiL3ZlbG9jaW91cy9qb2JzXCIpLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVnaXN0cnkuanNcIikuSm9ic01vdW50T3B0aW9uc1tcImF1dGhvcml6ZVwiXX0gW2FyZ3MuYXV0aG9yaXplXSAtIEF1dGhvcml6YXRpb24gY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLmFjY2Vzc1Rva2Vuc10gLSBBY2NlcHRlZCBiZWFyZXIgdG9rZW5zIGZvciBjcm9zcy1vcmlnaW4vbmF0aXZlIGFjY2Vzcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3MuYWxsb3dlZE9yaWdpbnNdIC0gQWxsb3dlZCBDT1JTIG9yaWdpbnMgZm9yIGJyb3dzZXIgYWNjZXNzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnJlZGFjdEFyZ3NdIC0gV2hlbiB0cnVlLCBqb2IgYXJndW1lbnRzIGFyZSBvbWl0dGVkIGZyb20gcmVzcG9uc2VzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGF0YWJhc2VJZGVudGlmaWVyXSAtIERhdGFiYXNlIGlkZW50aWZpZXIgdGhlIGpvYnMgc3RvcmUgcmVhZHMgZnJvbS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIG1vdW50SW50byh7YWNjZXNzVG9rZW5zLCBhbGxvd2VkT3JpZ2lucywgYXQsIGF1dGhvcml6ZSwgY29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyLCByZWRhY3RBcmdzfSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuXG4gICAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplTW91bnRQcmVmaXgoYXQpXG5cbiAgICByZWdpc3RlckpvYnNNb3VudChjb25maWd1cmF0aW9uLCBwcmVmaXgsIHthY2Nlc3NUb2tlbnMsIGFsbG93ZWRPcmlnaW5zLCBhdXRob3JpemUsIGRhdGFiYXNlSWRlbnRpZmllciwgcmVkYWN0QXJnc30pXG5cbiAgICBjb25maWd1cmF0aW9uLmFkZFJvdXRlUmVzb2x2ZXJIb29rKCh7Y3VycmVudFBhdGgsIHJlcXVlc3R9KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaCA9IG1hdGNoSm9ic0FwaVBhdGgoe21ldGhvZDogcmVxdWVzdC5odHRwTWV0aG9kKCksIHBhdGg6IGN1cnJlbnRQYXRoLCBwcmVmaXh9KVxuXG4gICAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY3Rpb246IG1hdGNoLmFjdGlvbixcbiAgICAgICAgY29udHJvbGxlcjogXCJ2ZWxvY2lvdXNCYWNrZ3JvdW5kSm9ic1dlYlwiLFxuICAgICAgICBjb250cm9sbGVyQ2xhc3M6IFZlbG9jaW91c0JhY2tncm91bmRKb2JzV2ViQ29udHJvbGxlcixcbiAgICAgICAgcGFyYW1zOiB7Li4ubWF0Y2gucGFyYW1zLCB2ZWxvY2lvdXNKb2JzTW91bnRBdDogcHJlZml4fVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3dlYi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxvQ0FBb0MsTUFBTSxpQkFBaUIsQ0FBQTtBQUNsRSxPQUFPLDBCQUEwQixNQUFNLHFCQUFxQixDQUFBO0FBQzVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3hFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUUvQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTywwQkFBMEI7SUFDN0M7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUM7UUFDM0csSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFN0QsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFdkMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDbkgsMEJBQTBCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRWxELGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtZQUV6RixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQTtZQUV2QixPQUFPO2dCQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsVUFBVSxFQUFFLDRCQUE0QjtnQkFDeEMsZUFBZSxFQUFFLG9DQUFvQztnQkFDckQsTUFBTSxFQUFFLEVBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBQzthQUN4RCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFZlbG9jaW91c0JhY2tncm91bmRKb2JzV2ViQ29udHJvbGxlciBmcm9tIFwiLi9jb250cm9sbGVyLmpzXCJcbmltcG9ydCBCYWNrZ3JvdW5kSm9iQ291bnRzQ2hhbm5lbCBmcm9tIFwiLi9jb3VudHMtY2hhbm5lbC5qc1wiXG5pbXBvcnQge21hdGNoSm9ic0FwaVBhdGgsIG5vcm1hbGl6ZU1vdW50UHJlZml4fSBmcm9tIFwiLi9wYXRoLW1hdGNoZXIuanNcIlxuaW1wb3J0IHtyZWdpc3RlckpvYnNNb3VudH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIlxuXG4vKipcbiAqIE1vdW50YWJsZSByZWFkLW9ubHkgYmFja2dyb3VuZC1qb2JzIGRhc2hib2FyZCBBUEkuIEluY2x1ZGUgaXQgaW4gYSByb3V0ZXMgZmlsZVxuICogdGhlIHdheSBTaWRla2lxOjpXZWIgaXMgbW91bnRlZCBpbiBSYWlsczpcbiAqXG4gKiBgYGBqc1xuICogcm91dGVzLmRyYXcoKHJvdXRlKSA9PiB7XG4gKiAgIHJvdXRlLm1vdW50KFZlbG9jaW91c0JhY2tncm91bmRKb2JzQXBpLCB7XG4gKiAgICAgYXQ6IFwiL3ZlbG9jaW91cy9qb2JzXCIsXG4gKiAgICAgYXV0aG9yaXplOiBhc3luYyAoe3JlcXVlc3QsIGFiaWxpdHl9KSA9PiB7IC4uLiB9LFxuICogICAgIGFjY2Vzc1Rva2VuczogW3Byb2Nlc3MuZW52LlZFTE9DSU9VU19KT0JTX1RPS0VOXVxuICogICB9KVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNCYWNrZ3JvdW5kSm9ic0FwaSB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGpvYnMgQVBJIHVuZGVyIGBhdGAuIEltcGxlbWVudGVkIGFzIGEgcm91dGUtcmVzb2x2ZXIgaG9vayBzb1xuICAgKiB0aGUgY29udHJvbGxlciBjYW4gbGl2ZSBpbnNpZGUgdGhlIHZlbG9jaW91cyBwYWNrYWdlIHJhdGhlciB0aGFuIHRoZSBob3N0XG4gICAqIGFwcCdzIGBzcmMvcm91dGVzYCBkaXJlY3RvcnkuIEludm9rZWQgYnkgdGhlIHJvdXRpbmcgbGF5ZXIgZm9yIGVhY2hcbiAgICogYHJvdXRlLm1vdW50KC4uLilgIHJlZ2lzdHJhdGlvbi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYXQgLSBNb3VudCBwYXRoIHByZWZpeCAoZS5nLiBcIi92ZWxvY2lvdXMvam9ic1wiKS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlZ2lzdHJ5LmpzXCIpLkpvYnNNb3VudE9wdGlvbnNbXCJhdXRob3JpemVcIl19IFthcmdzLmF1dGhvcml6ZV0gLSBBdXRob3JpemF0aW9uIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJncy5hY2Nlc3NUb2tlbnNdIC0gQWNjZXB0ZWQgYmVhcmVyIHRva2VucyBmb3IgY3Jvc3Mtb3JpZ2luL25hdGl2ZSBhY2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLmFsbG93ZWRPcmlnaW5zXSAtIEFsbG93ZWQgQ09SUyBvcmlnaW5zIGZvciBicm93c2VyIGFjY2Vzcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5yZWRhY3RBcmdzXSAtIFdoZW4gdHJ1ZSwgam9iIGFyZ3VtZW50cyBhcmUgb21pdHRlZCBmcm9tIHJlc3BvbnNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmRhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyIHRoZSBqb2JzIHN0b3JlIHJlYWRzIGZyb20uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBtb3VudEludG8oe2FjY2Vzc1Rva2VucywgYWxsb3dlZE9yaWdpbnMsIGF0LCBhdXRob3JpemUsIGNvbmZpZ3VyYXRpb24sIGRhdGFiYXNlSWRlbnRpZmllciwgcmVkYWN0QXJnc30pIHtcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcblxuICAgIGNvbnN0IHByZWZpeCA9IG5vcm1hbGl6ZU1vdW50UHJlZml4KGF0KVxuXG4gICAgcmVnaXN0ZXJKb2JzTW91bnQoY29uZmlndXJhdGlvbiwgcHJlZml4LCB7YWNjZXNzVG9rZW5zLCBhbGxvd2VkT3JpZ2lucywgYXV0aG9yaXplLCBkYXRhYmFzZUlkZW50aWZpZXIsIHJlZGFjdEFyZ3N9KVxuICAgIEJhY2tncm91bmRKb2JDb3VudHNDaGFubmVsLnJlZ2lzdGVyKGNvbmZpZ3VyYXRpb24pXG5cbiAgICBjb25maWd1cmF0aW9uLmFkZFJvdXRlUmVzb2x2ZXJIb29rKCh7Y3VycmVudFBhdGgsIHJlcXVlc3R9KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaCA9IG1hdGNoSm9ic0FwaVBhdGgoe21ldGhvZDogcmVxdWVzdC5odHRwTWV0aG9kKCksIHBhdGg6IGN1cnJlbnRQYXRoLCBwcmVmaXh9KVxuXG4gICAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY3Rpb246IG1hdGNoLmFjdGlvbixcbiAgICAgICAgY29udHJvbGxlcjogXCJ2ZWxvY2lvdXNCYWNrZ3JvdW5kSm9ic1dlYlwiLFxuICAgICAgICBjb250cm9sbGVyQ2xhc3M6IFZlbG9jaW91c0JhY2tncm91bmRKb2JzV2ViQ29udHJvbGxlcixcbiAgICAgICAgcGFyYW1zOiB7Li4ubWF0Y2gucGFyYW1zLCB2ZWxvY2lvdXNKb2JzTW91bnRBdDogcHJlZml4fVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -21,7 +21,7 @@ export type JobsMountOptions = {
21
21
  * - Authorization callback. Return true to allow the request.
22
22
  */
23
23
  authorize?: ((args: {
24
- request: import("../../http-server/client/request.js").default;
24
+ request: import("../../http-server/client/request.js").default | import("../../http-server/client/websocket-request.js").default;
25
25
  ability: (import("../../authorization/ability.js").default | undefined);
26
26
  token: (string | null);
27
27
  configuration: import("../../configuration.js").default;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/registry.js"],"names":[],"mappings":"AAsBA;;;;;;GAMG;AACH,iDALW,OAAO,wBAAwB,EAAE,OAAO,MACxC,MAAM,WACN,gBAAgB,GACd,IAAI,CAWhB;AAED;;;;;GAKG;AACH,4CAJW,OAAO,wBAAwB,EAAE,OAAO,MACxC,MAAM,GACJ,gBAAgB,GAAG,SAAS,CAIxC;;;;;;;;wBA3CoB;QAAC,OAAO,EAAE,OAAO,qCAAqC,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,CAAC,OAAO,gCAAgC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAAC,aAAa,EAAE,OAAO,wBAAwB,EAAE,OAAO,CAAA;KAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/background-jobs/web/registry.js"],"names":[],"mappings":"AAsBA;;;;;;GAMG;AACH,iDALW,OAAO,wBAAwB,EAAE,OAAO,MACxC,MAAM,WACN,gBAAgB,GACd,IAAI,CAWhB;AAED;;;;;GAKG;AACH,4CAJW,OAAO,wBAAwB,EAAE,OAAO,MACxC,MAAM,GACJ,gBAAgB,GAAG,SAAS,CAIxC;;;;;;;;wBA3CoB;QAAC,OAAO,EAAE,OAAO,qCAAqC,EAAE,OAAO,GAAG,OAAO,+CAA+C,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,CAAC,OAAO,gCAAgC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAAC,aAAa,EAAE,OAAO,wBAAwB,EAAE,OAAO,CAAA;KAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC"}
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * JobsMountOptions type.
4
4
  * @typedef {object} JobsMountOptions
5
- * @property {(args: {request: import("../../http-server/client/request.js").default, ability: (import("../../authorization/ability.js").default | undefined), token: (string | null), configuration: import("../../configuration.js").default}) => (boolean | void | Promise<boolean | void>)} [authorize] - Authorization callback. Return true to allow the request.
5
+ * @property {(args: {request: import("../../http-server/client/request.js").default | import("../../http-server/client/websocket-request.js").default, ability: (import("../../authorization/ability.js").default | undefined), token: (string | null), configuration: import("../../configuration.js").default}) => (boolean | void | Promise<boolean | void>)} [authorize] - Authorization callback. Return true to allow the request.
6
6
  * @property {string[]} [accessTokens] - Bearer tokens accepted for cross-origin/native access.
7
7
  * @property {string[]} [allowedOrigins] - Origins allowed for cross-origin browser access.
8
8
  * @property {boolean} [redactArgs] - When true, job arguments are omitted from API responses.
@@ -41,4 +41,4 @@ export function registerJobsMount(configuration, at, options) {
41
41
  export function getJobsMount(configuration, at) {
42
42
  return registry.get(configuration)?.get(at);
43
43
  }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3dlYi9yZWdpc3RyeS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUU5Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxPQUFPO0lBQzFELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFeEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3pCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUU7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogSm9ic01vdW50T3B0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gSm9ic01vdW50T3B0aW9uc1xuICogQHByb3BlcnR5IHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4uLy4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQsIGFiaWxpdHk6IChpbXBvcnQoXCIuLi8uLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCksIHRva2VuOiAoc3RyaW5nIHwgbnVsbCksIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IChib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+KX0gW2F1dGhvcml6ZV0gLSBBdXRob3JpemF0aW9uIGNhbGxiYWNrLiBSZXR1cm4gdHJ1ZSB0byBhbGxvdyB0aGUgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthY2Nlc3NUb2tlbnNdIC0gQmVhcmVyIHRva2VucyBhY2NlcHRlZCBmb3IgY3Jvc3Mtb3JpZ2luL25hdGl2ZSBhY2Nlc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYWxsb3dlZE9yaWdpbnNdIC0gT3JpZ2lucyBhbGxvd2VkIGZvciBjcm9zcy1vcmlnaW4gYnJvd3NlciBhY2Nlc3MuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWRhY3RBcmdzXSAtIFdoZW4gdHJ1ZSwgam9iIGFyZ3VtZW50cyBhcmUgb21pdHRlZCBmcm9tIEFQSSByZXNwb25zZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyIHRoZSBqb2JzIHN0b3JlIHJlYWRzIGZyb20uXG4gKi9cblxuLyoqXG4gKiBNb3VudCBvcHRpb25zIGFyZSBrZXllZCBieSBjb25maWd1cmF0aW9uIHNvIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zIChlLmcuXG4gKiBhY3Jvc3MgdGVzdHMpIG5ldmVyIHNoYXJlIHN0YXRlLCBhbmQgYnkgbW91bnQgcGF0aCBzbyBhIHNpbmdsZSBjb25maWd1cmF0aW9uXG4gKiBjYW4gbW91bnQgdGhlIGRhc2hib2FyZCBhdCBtb3JlIHRoYW4gb25lIHByZWZpeC4gRnVuY3Rpb25zIGluIHRoZSBvcHRpb25zXG4gKiAodGhlIGBhdXRob3JpemVgIGNhbGxiYWNrKSBjYW4ndCB0cmF2ZWwgdGhyb3VnaCByb3V0ZSBwYXJhbXMsIHNvIHRoZVxuICogY29udHJvbGxlciBsb29rcyB0aGVtIHVwIGhlcmUgdXNpbmcgdGhlIHBsYWluIGBhdGAgc3RyaW5nIGl0IHJlY2VpdmVzLlxuICogQHR5cGUge1dlYWtNYXA8aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBNYXA8c3RyaW5nLCBKb2JzTW91bnRPcHRpb25zPj59XG4gKi9cbmNvbnN0IHJlZ2lzdHJ5ID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIFJ1bnMgdGhlIHJlZ2lzdGVySm9ic01vdW50IGhlbHBlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhdCAtIE5vcm1hbGl6ZWQgbW91bnQgcGF0aC5cbiAqIEBwYXJhbSB7Sm9ic01vdW50T3B0aW9uc30gb3B0aW9ucyAtIE1vdW50IG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckpvYnNNb3VudChjb25maWd1cmF0aW9uLCBhdCwgb3B0aW9ucykge1xuICBsZXQgYnlQYXRoID0gcmVnaXN0cnkuZ2V0KGNvbmZpZ3VyYXRpb24pXG5cbiAgaWYgKCFieVBhdGgpIHtcbiAgICBieVBhdGggPSBuZXcgTWFwKClcbiAgICByZWdpc3RyeS5zZXQoY29uZmlndXJhdGlvbiwgYnlQYXRoKVxuICB9XG5cbiAgYnlQYXRoLnNldChhdCwgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBnZXRKb2JzTW91bnQgaGVscGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGF0IC0gTm9ybWFsaXplZCBtb3VudCBwYXRoLlxuICogQHJldHVybnMge0pvYnNNb3VudE9wdGlvbnMgfCB1bmRlZmluZWR9IC0gTW91bnQgb3B0aW9ucyBpZiByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Sm9ic01vdW50KGNvbmZpZ3VyYXRpb24sIGF0KSB7XG4gIHJldHVybiByZWdpc3RyeS5nZXQoY29uZmlndXJhdGlvbik/LmdldChhdClcbn1cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3dlYi9yZWdpc3RyeS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUU5Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxPQUFPO0lBQzFELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFeEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3pCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUU7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogSm9ic01vdW50T3B0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gSm9ic01vdW50T3B0aW9uc1xuICogQHByb3BlcnR5IHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4uLy4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuLi8uLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgYWJpbGl0eTogKGltcG9ydChcIi4uLy4uL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkKSwgdG9rZW46IChzdHJpbmcgfCBudWxsKSwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gKGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuIHwgdm9pZD4pfSBbYXV0aG9yaXplXSAtIEF1dGhvcml6YXRpb24gY2FsbGJhY2suIFJldHVybiB0cnVlIHRvIGFsbG93IHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2FjY2Vzc1Rva2Vuc10gLSBCZWFyZXIgdG9rZW5zIGFjY2VwdGVkIGZvciBjcm9zcy1vcmlnaW4vbmF0aXZlIGFjY2Vzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthbGxvd2VkT3JpZ2luc10gLSBPcmlnaW5zIGFsbG93ZWQgZm9yIGNyb3NzLW9yaWdpbiBicm93c2VyIGFjY2Vzcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlZGFjdEFyZ3NdIC0gV2hlbiB0cnVlLCBqb2IgYXJndW1lbnRzIGFyZSBvbWl0dGVkIGZyb20gQVBJIHJlc3BvbnNlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VJZGVudGlmaWVyXSAtIERhdGFiYXNlIGlkZW50aWZpZXIgdGhlIGpvYnMgc3RvcmUgcmVhZHMgZnJvbS5cbiAqL1xuXG4vKipcbiAqIE1vdW50IG9wdGlvbnMgYXJlIGtleWVkIGJ5IGNvbmZpZ3VyYXRpb24gc28gbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgKGUuZy5cbiAqIGFjcm9zcyB0ZXN0cykgbmV2ZXIgc2hhcmUgc3RhdGUsIGFuZCBieSBtb3VudCBwYXRoIHNvIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb25cbiAqIGNhbiBtb3VudCB0aGUgZGFzaGJvYXJkIGF0IG1vcmUgdGhhbiBvbmUgcHJlZml4LiBGdW5jdGlvbnMgaW4gdGhlIG9wdGlvbnNcbiAqICh0aGUgYGF1dGhvcml6ZWAgY2FsbGJhY2spIGNhbid0IHRyYXZlbCB0aHJvdWdoIHJvdXRlIHBhcmFtcywgc28gdGhlXG4gKiBjb250cm9sbGVyIGxvb2tzIHRoZW0gdXAgaGVyZSB1c2luZyB0aGUgcGxhaW4gYGF0YCBzdHJpbmcgaXQgcmVjZWl2ZXMuXG4gKiBAdHlwZSB7V2Vha01hcDxpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIE1hcDxzdHJpbmcsIEpvYnNNb3VudE9wdGlvbnM+Pn1cbiAqL1xuY29uc3QgcmVnaXN0cnkgPSBuZXcgV2Vha01hcCgpXG5cbi8qKlxuICogUnVucyB0aGUgcmVnaXN0ZXJKb2JzTW91bnQgaGVscGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGF0IC0gTm9ybWFsaXplZCBtb3VudCBwYXRoLlxuICogQHBhcmFtIHtKb2JzTW91bnRPcHRpb25zfSBvcHRpb25zIC0gTW91bnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVySm9ic01vdW50KGNvbmZpZ3VyYXRpb24sIGF0LCBvcHRpb25zKSB7XG4gIGxldCBieVBhdGggPSByZWdpc3RyeS5nZXQoY29uZmlndXJhdGlvbilcblxuICBpZiAoIWJ5UGF0aCkge1xuICAgIGJ5UGF0aCA9IG5ldyBNYXAoKVxuICAgIHJlZ2lzdHJ5LnNldChjb25maWd1cmF0aW9uLCBieVBhdGgpXG4gIH1cblxuICBieVBhdGguc2V0KGF0LCBvcHRpb25zKVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGdldEpvYnNNb3VudCBoZWxwZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXQgLSBOb3JtYWxpemVkIG1vdW50IHBhdGguXG4gKiBAcmV0dXJucyB7Sm9ic01vdW50T3B0aW9ucyB8IHVuZGVmaW5lZH0gLSBNb3VudCBvcHRpb25zIGlmIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2JzTW91bnQoY29uZmlndXJhdGlvbiwgYXQpIHtcbiAgcmV0dXJuIHJlZ2lzdHJ5LmdldChjb25maWd1cmF0aW9uKT8uZ2V0KGF0KVxufVxuIl19
@@ -23,8 +23,10 @@ export default class BackgroundJobsWorker {
23
23
  * @param {number} [args.forkedChildSigkillGraceMs] - Override the grace period between SIGTERM and SIGKILL when reaping lingering process runners on stop.
24
24
  * @param {number} [args.heartbeatIntervalMs] - Override the liveness heartbeat interval (default 15000ms).
25
25
  * @param {number} [args.jobTimeoutMs] - Override the wall-clock timeout for forked and pooled jobs from `configuration.getBackgroundJobsConfig()`. `0` disables it.
26
+ * @param {boolean} [args.closeDatabaseConnectionsOnStop] - Whether stop owns closing the configuration's database pools (default true).
27
+ * @param {() => void | Promise<void>} [args.onStopped] - Lifecycle hook invoked after the worker finishes stopping.
26
28
  */
27
- constructor({ configuration, host, port, maxConcurrentForkedJobs, maxConcurrentInlineJobs, pooledRunnerCount, pooledRunnerConcurrency, pooledRunnerMaxJobs, pooledRunnerMaxRssBytes, pooledRunnerMaxLifetimeMs, forkedChildSigkillGraceMs, heartbeatIntervalMs, jobTimeoutMs }?: {
29
+ constructor({ configuration, host, port, maxConcurrentForkedJobs, maxConcurrentInlineJobs, pooledRunnerCount, pooledRunnerConcurrency, pooledRunnerMaxJobs, pooledRunnerMaxRssBytes, pooledRunnerMaxLifetimeMs, forkedChildSigkillGraceMs, heartbeatIntervalMs, jobTimeoutMs, closeDatabaseConnectionsOnStop, onStopped }?: {
28
30
  configuration?: import("../configuration.js").default | undefined;
29
31
  host?: string | undefined;
30
32
  port?: number | undefined;
@@ -38,6 +40,8 @@ export default class BackgroundJobsWorker {
38
40
  forkedChildSigkillGraceMs?: number | undefined;
39
41
  heartbeatIntervalMs?: number | undefined;
40
42
  jobTimeoutMs?: number | undefined;
43
+ closeDatabaseConnectionsOnStop?: boolean | undefined;
44
+ onStopped?: (() => void | Promise<void>) | undefined;
41
45
  });
42
46
  /**
43
47
  * Narrows the runtime value to the documented type.
@@ -49,6 +53,8 @@ export default class BackgroundJobsWorker {
49
53
  configuration: import("../configuration.js").default | undefined;
50
54
  host: string | undefined;
51
55
  port: number | undefined;
56
+ closeDatabaseConnectionsOnStop: boolean;
57
+ onStopped: (() => void | Promise<void>) | undefined;
52
58
  /**
53
59
  * Constructor override for the inline-job concurrency cap. When unset
54
60
  * the cap is read from `configuration.getBackgroundJobsConfig()` in
@@ -94,6 +100,8 @@ export default class BackgroundJobsWorker {
94
100
  */
95
101
  jobTimeoutMsOverride: number | undefined;
96
102
  shouldStop: boolean;
103
+ /** @type {Promise<void> | undefined} */
104
+ stopPromise: Promise<void> | undefined;
97
105
  workerId: `${string}-${string}-${string}-${string}-${string}`;
98
106
  heartbeatIntervalMs: number;
99
107
  /**
@@ -180,6 +188,15 @@ export default class BackgroundJobsWorker {
180
188
  stop({ timeoutMs }?: {
181
189
  timeoutMs?: number | undefined;
182
190
  }): Promise<void>;
191
+ /**
192
+ * Runs the worker shutdown lifecycle once.
193
+ * @param {object} [args] - Options.
194
+ * @param {number} [args.timeoutMs] - Max wait for in-flight jobs (per phase) in ms.
195
+ * @returns {Promise<void>} - Resolves when stopped.
196
+ */
197
+ _stop({ timeoutMs }?: {
198
+ timeoutMs?: number | undefined;
199
+ }): Promise<void>;
183
200
  /**
184
201
  * Waits for a set of in-flight job promises to settle, optionally bounded by
185
202
  * `timeoutMs`.
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/worker.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/worker.js"],"names":[],"mappings":"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"}