@pipeline-builder/api-core 5.2.5 → 5.2.7

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 (181) hide show
  1. package/lib/constants/ai-providers.js +1 -1
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/constants/index.js +1 -1
  4. package/lib/constants/time.js +1 -1
  5. package/lib/errors/app-errors.js +1 -1
  6. package/lib/errors/index.js +1 -1
  7. package/lib/helpers/access-helpers.d.ts +19 -0
  8. package/lib/helpers/access-helpers.js +24 -4
  9. package/lib/helpers/content-disposition.js +1 -1
  10. package/lib/helpers/crud-helpers.js +1 -1
  11. package/lib/helpers/index.d.ts +1 -1
  12. package/lib/helpers/index.js +2 -2
  13. package/lib/helpers/org-hierarchy-http.js +1 -1
  14. package/lib/helpers/org-hierarchy.js +1 -1
  15. package/lib/helpers/restore-helpers.js +1 -1
  16. package/lib/helpers/sse-helpers.js +13 -2
  17. package/lib/helpers/support-calendar.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/middleware/ask-provenance.js +1 -1
  20. package/lib/middleware/assurance.js +1 -1
  21. package/lib/middleware/auth.js +1 -1
  22. package/lib/middleware/deferred-quota-check.js +1 -1
  23. package/lib/middleware/ecosystem-guard.js +1 -1
  24. package/lib/middleware/index.js +1 -1
  25. package/lib/middleware/jwt-verify.js +1 -1
  26. package/lib/middleware/mongo-sanitize.js +1 -1
  27. package/lib/middleware/on-behalf.js +1 -1
  28. package/lib/middleware/permission-gates.js +1 -1
  29. package/lib/middleware/quota-exempt-routes.js +1 -1
  30. package/lib/middleware/revocation.js +1 -1
  31. package/lib/middleware/route-table.js +16 -1
  32. package/lib/middleware/service-tokens.js +1 -1
  33. package/lib/middleware/step-up.js +1 -1
  34. package/lib/middleware/system-org.d.ts +18 -5
  35. package/lib/middleware/system-org.js +19 -6
  36. package/lib/openapi/extend-zod.js +1 -1
  37. package/lib/openapi/index.js +1 -1
  38. package/lib/openapi/registry.js +1 -1
  39. package/lib/openapi/routes/ask-routes.js +1 -1
  40. package/lib/openapi/routes/billing-routes.js +1 -1
  41. package/lib/openapi/routes/image-registry-routes.js +1 -1
  42. package/lib/openapi/routes/index.js +1 -1
  43. package/lib/openapi/routes/message-routes.js +1 -1
  44. package/lib/openapi/routes/pipeline-routes.js +1 -1
  45. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  46. package/lib/openapi/routes/plugin-routes.js +1 -1
  47. package/lib/openapi/routes/quota-routes.js +1 -1
  48. package/lib/openapi/schema-registry.js +1 -1
  49. package/lib/routes/health.js +1 -1
  50. package/lib/routes/index.js +1 -1
  51. package/lib/services/ai-call-weight.js +1 -1
  52. package/lib/services/alert-delivery.js +1 -1
  53. package/lib/services/api-key-exchange.js +1 -1
  54. package/lib/services/audit-context.js +1 -1
  55. package/lib/services/audit-spool.js +1 -1
  56. package/lib/services/cache-service.js +1 -1
  57. package/lib/services/circuit-breaker.js +1 -1
  58. package/lib/services/compliance-client.js +1 -1
  59. package/lib/services/compliance-event-subscriber.js +1 -1
  60. package/lib/services/durable-event-bus.js +1 -1
  61. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  62. package/lib/services/ecosystem-notify-client.js +9 -3
  63. package/lib/services/entity-events.js +1 -1
  64. package/lib/services/env-redis.js +1 -1
  65. package/lib/services/http-client.js +19 -3
  66. package/lib/services/index.d.ts +1 -1
  67. package/lib/services/index.js +2 -2
  68. package/lib/services/jwks-cache.js +1 -1
  69. package/lib/services/leader-lock.js +1 -1
  70. package/lib/services/notification-channels.js +1 -1
  71. package/lib/services/org-ai-client.js +1 -1
  72. package/lib/services/pagerduty-inbound.js +1 -1
  73. package/lib/services/pagerduty.js +1 -1
  74. package/lib/services/quota-increment-batcher.js +1 -1
  75. package/lib/services/quota.js +1 -1
  76. package/lib/services/remote-audit-client.js +1 -1
  77. package/lib/services/retry-forever.js +1 -1
  78. package/lib/services/retry-strategy.js +1 -1
  79. package/lib/services/s3-client.js +1 -1
  80. package/lib/services/scheduler.js +1 -1
  81. package/lib/services/service-boot.js +1 -1
  82. package/lib/services/service-keys.js +2 -2
  83. package/lib/services/sse-ticket-store.js +1 -1
  84. package/lib/services/system-notification.js +1 -1
  85. package/lib/services/token-revocation.js +1 -1
  86. package/lib/services/version-vuln-policy.d.ts +11 -0
  87. package/lib/services/version-vuln-policy.js +33 -7
  88. package/lib/types/ai-catalog.js +1 -1
  89. package/lib/types/ask-proposals.d.ts +23 -0
  90. package/lib/types/ask-proposals.js +29 -1
  91. package/lib/types/audit-events.js +1 -1
  92. package/lib/types/build-catalog.d.ts +65 -0
  93. package/lib/types/build-catalog.js +95 -1
  94. package/lib/types/catalog-metadata.js +1 -1
  95. package/lib/types/common.js +1 -1
  96. package/lib/types/compliance-exemption.js +1 -1
  97. package/lib/types/ecosystem-notifications.d.ts +9 -0
  98. package/lib/types/ecosystem-notifications.js +15 -6
  99. package/lib/types/ecosystem.d.ts +1 -6
  100. package/lib/types/ecosystem.js +18 -5
  101. package/lib/types/error-codes.js +1 -1
  102. package/lib/types/feature-flags.d.ts +17 -1
  103. package/lib/types/feature-flags.js +1 -1
  104. package/lib/types/http.js +1 -1
  105. package/lib/types/index.d.ts +3 -3
  106. package/lib/types/index.js +4 -4
  107. package/lib/types/metadata-keys.js +1 -1
  108. package/lib/types/permissions.d.ts +60 -13
  109. package/lib/types/permissions.js +63 -14
  110. package/lib/types/pipeline-template.js +1 -1
  111. package/lib/types/pipeline.js +1 -1
  112. package/lib/types/plugin-catalog.js +1 -1
  113. package/lib/types/plugin-health.js +1 -1
  114. package/lib/types/plugin-scan.d.ts +69 -0
  115. package/lib/types/plugin-scan.js +77 -1
  116. package/lib/types/quota-catalog.js +15 -2
  117. package/lib/types/quota-tiers.d.ts +27 -160
  118. package/lib/types/quota-tiers.js +47 -255
  119. package/lib/types/remote-audit-actions.d.ts +1 -1
  120. package/lib/types/remote-audit-actions.js +9 -1
  121. package/lib/types/reserved-tags.js +1 -1
  122. package/lib/types/tier-limits.d.ts +210 -0
  123. package/lib/types/tier-limits.js +254 -0
  124. package/lib/types/usage-projection.js +1 -1
  125. package/lib/types/visibility.js +1 -1
  126. package/lib/types/wire-vocabulary.d.ts +7 -0
  127. package/lib/types/wire-vocabulary.js +7 -1
  128. package/lib/utils/alias-resolver.js +1 -1
  129. package/lib/utils/api-key.js +1 -1
  130. package/lib/utils/audit.js +1 -1
  131. package/lib/utils/aws-scrub.js +3 -3
  132. package/lib/utils/compliance-attributes.js +1 -1
  133. package/lib/utils/concurrency-gate.d.ts +98 -0
  134. package/lib/utils/concurrency-gate.js +110 -0
  135. package/lib/utils/concurrency.js +1 -1
  136. package/lib/utils/crash-handlers.js +1 -1
  137. package/lib/utils/date.js +1 -1
  138. package/lib/utils/dsse.js +1 -1
  139. package/lib/utils/env.d.ts +11 -0
  140. package/lib/utils/env.js +14 -1
  141. package/lib/utils/headers.js +1 -1
  142. package/lib/utils/identity.js +1 -1
  143. package/lib/utils/index.d.ts +1 -0
  144. package/lib/utils/index.js +2 -1
  145. package/lib/utils/jwk.js +2 -2
  146. package/lib/utils/logger.js +1 -1
  147. package/lib/utils/metric-emitter.js +1 -1
  148. package/lib/utils/object.js +1 -1
  149. package/lib/utils/params.js +1 -1
  150. package/lib/utils/plugin-compliance.d.ts +9 -1
  151. package/lib/utils/plugin-compliance.js +1 -1
  152. package/lib/utils/proof-of-work.js +1 -1
  153. package/lib/utils/response.js +1 -1
  154. package/lib/utils/retention.js +1 -1
  155. package/lib/utils/safe-require.js +1 -1
  156. package/lib/utils/secret-encryption.js +1 -1
  157. package/lib/utils/secret-rotation.js +1 -1
  158. package/lib/utils/secure-compare.js +1 -1
  159. package/lib/utils/sensitive-patterns.js +1 -1
  160. package/lib/utils/service-registry.js +1 -1
  161. package/lib/utils/ssrf.js +1 -1
  162. package/lib/validation/ai-schemas.js +1 -1
  163. package/lib/validation/common-schemas.js +1 -1
  164. package/lib/validation/dockerfile-static.js +1 -1
  165. package/lib/validation/index.d.ts +1 -1
  166. package/lib/validation/index.js +2 -2
  167. package/lib/validation/message-schemas.d.ts +73 -0
  168. package/lib/validation/message-schemas.js +63 -2
  169. package/lib/validation/middleware.js +1 -1
  170. package/lib/validation/pipeline-schemas.js +1 -1
  171. package/lib/validation/pipeline-template-schemas.js +1 -1
  172. package/lib/validation/plugin-base-images.js +1 -1
  173. package/lib/validation/plugin-catalog-detect.js +1 -1
  174. package/lib/validation/plugin-catalog-metadata.js +1 -1
  175. package/lib/validation/plugin-heuristics.js +1 -1
  176. package/lib/validation/plugin-lint.js +1 -1
  177. package/lib/validation/plugin-name-confusable.js +1 -1
  178. package/lib/validation/plugin-schemas.js +1 -1
  179. package/lib/validation/plugin-spec-schema.js +1 -1
  180. package/lib/validation/plugin-template-contract.js +1 -1
  181. package/package.json +11 -4
@@ -5,8 +5,8 @@
5
5
  * outbound payload (audit `details`, ingested event `detail`, error messages).
6
6
  *
7
7
  * HARD CONSTRAINT: an AWS account id must NEVER be persisted anywhere in this
8
- * system — `orgId` is the marketplace `customerIdentifier`, never an AWS account
9
- * id. AWS surfaces (CodePipeline/CodeBuild failure messages, KMS/role ARNs) leak
8
+ * system — `orgId` is the platform org id (a Marketplace customer is keyed on its
9
+ * license ARN, in subscription metadata), never an AWS account id. AWS surfaces (CodePipeline/CodeBuild failure messages, KMS/role ARNs) leak
10
10
  * the account id as the 5th ARN segment or as a bare 12-digit token, so scrub at
11
11
  * every boundary that writes untrusted AWS-derived text. Defense-in-depth: apply
12
12
  * this even when an upstream (e.g. the events Lambda) is expected to have
@@ -64,4 +64,4 @@ export function scrubAwsIdentifiers(value) {
64
64
  }
65
65
  return value;
66
66
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNjcnViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2F3cy1zY3J1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRTlCOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBRWpELG9GQUFvRjtBQUNwRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFFbEMsbUdBQW1HO0FBQ25HLE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxLQUFhO0lBQ3pELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxLQUFRO0lBQzdDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyw2QkFBNkIsQ0FBQyxLQUFLLENBQWlCLENBQUM7SUFDOUQsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQWlCLENBQUM7SUFDbEUsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsNkVBQTZFO1FBQzdFLCtFQUErRTtRQUMvRSw4RUFBOEU7UUFDOUUsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvRCxNQUFNLEdBQUcsR0FBNEIsRUFBRSxDQUFDO1FBQ3hDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWdDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUmVkYWN0IEFXUyBhY2NvdW50IGlkZW50aWZpZXJzIGZyb20gdmFsdWVzIGhlYWRlZCBmb3IgYSBEVVJBQkxFIHN0b3JlIG9yIGFuXG4gKiBvdXRib3VuZCBwYXlsb2FkIChhdWRpdCBgZGV0YWlsc2AsIGluZ2VzdGVkIGV2ZW50IGBkZXRhaWxgLCBlcnJvciBtZXNzYWdlcykuXG4gKlxuICogSEFSRCBDT05TVFJBSU5UOiBhbiBBV1MgYWNjb3VudCBpZCBtdXN0IE5FVkVSIGJlIHBlcnNpc3RlZCBhbnl3aGVyZSBpbiB0aGlzXG4gKiBzeXN0ZW0g4oCUIGBvcmdJZGAgaXMgdGhlIG1hcmtldHBsYWNlIGBjdXN0b21lcklkZW50aWZpZXJgLCBuZXZlciBhbiBBV1MgYWNjb3VudFxuICogaWQuIEFXUyBzdXJmYWNlcyAoQ29kZVBpcGVsaW5lL0NvZGVCdWlsZCBmYWlsdXJlIG1lc3NhZ2VzLCBLTVMvcm9sZSBBUk5zKSBsZWFrXG4gKiB0aGUgYWNjb3VudCBpZCBhcyB0aGUgNXRoIEFSTiBzZWdtZW50IG9yIGFzIGEgYmFyZSAxMi1kaWdpdCB0b2tlbiwgc28gc2NydWIgYXRcbiAqIGV2ZXJ5IGJvdW5kYXJ5IHRoYXQgd3JpdGVzIHVudHJ1c3RlZCBBV1MtZGVyaXZlZCB0ZXh0LiBEZWZlbnNlLWluLWRlcHRoOiBhcHBseVxuICogdGhpcyBldmVuIHdoZW4gYW4gdXBzdHJlYW0gKGUuZy4gdGhlIGV2ZW50cyBMYW1iZGEpIGlzIGV4cGVjdGVkIHRvIGhhdmVcbiAqIHN0cmlwcGVkIGl0IOKAlCB0aGUgcGVyc2lzdGVuY2UgYm91bmRhcnkgbXVzdCBub3QgdHJ1c3QgdXBzdHJlYW0uXG4gKi9cblxuY29uc3QgUkVEQUNURUQgPSAnW1JFREFDVEVEXSc7XG5cbi8qKlxuICogQSAxMi1kaWdpdCBydW4gaXMgdGhlIEFXUyBhY2NvdW50LWlkIHNoYXBlIChhbmQgdGhlIGFjY291bnQgc2VnbWVudCBvZiBldmVyeVxuICogQVJOKS4gQm91bmRlZCBieSBub24tZGlnaXRzIHNvIHdlIG5ldmVyIGNsaXAgaW5zaWRlIGEgbG9uZ2VyIG51bWJlciAoZS5nLiBhXG4gKiAxMy1kaWdpdCBtaWxsaXNlY29uZCB0aW1lc3RhbXAgaXMgbGVmdCBpbnRhY3QpLlxuICovXG5jb25zdCBBV1NfQUNDT1VOVF9JRF9SRSA9IC8oPzwhXFxkKVxcZHsxMn0oPyFcXGQpL2c7XG5cbi8qKiBLZXlzIHRoYXQgbmFtZSBhbiBBV1MgYWNjb3VudCBpZCBvdXRyaWdodCDigJQgdGhlaXIgdmFsdWUgaXMgZHJvcHBlZCB3aG9sZXNhbGUuICovXG5jb25zdCBBQ0NPVU5UX0tFWV9SRSA9IC9hY2NvdW50L2k7XG5cbi8qKiBSZWRhY3QgZXZlcnkgQVdTLWFjY291bnQtaWQtc2hhcGVkIHRva2VuIChpbmNsLiB0aGUgYWNjb3VudCBmaWVsZCBvZiBhbnkgQVJOKSBmcm9tIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcnViQXdzSWRlbnRpZmllcnNGcm9tU3RyaW5nKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShBV1NfQUNDT1VOVF9JRF9SRSwgUkVEQUNURUQpO1xufVxuXG4vKipcbiAqIERlZXAtc2NydWIgYSB2YWx1ZSAoc3RyaW5nIC8gYXJyYXkgLyBwbGFpbiBvYmplY3QpIG9mIEFXUyBhY2NvdW50IGlkZW50aWZpZXJzLFxuICogcmV0dXJuaW5nIGEgc2NydWJiZWQgY29weSDigJQgdGhlIGlucHV0IGlzIG5ldmVyIG11dGF0ZWQuIFN0cmluZyB2YWx1ZXMgaGF2ZVxuICogYWNjb3VudC1pZCB0b2tlbnMgcmVkYWN0ZWQ7IGFueSBrZXkgbWF0Y2hpbmcge0BsaW5rIEFDQ09VTlRfS0VZX1JFfSB3aXRoIGFcbiAqIHN0cmluZy9udW1iZXIgdmFsdWUgaXMgcmVkYWN0ZWQgd2hvbGVzYWxlLiBOb24tc3RyaW5nIHByaW1pdGl2ZXMgcGFzcyB0aHJvdWdoXG4gKiB1bmNoYW5nZWQgKGEgYmFyZSBudW1iZXIgaXMgb25seSByZWRhY3RlZCB3aGVuIGl0IHNpdHMgdW5kZXIgYW4gYWNjb3VudC1uYW1lZFxuICoga2V5LCB0byBhdm9pZCBjbG9iYmVyaW5nIGxlZ2l0aW1hdGUgbnVtZXJpYyBmaWVsZHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NydWJBd3NJZGVudGlmaWVyczxUPih2YWx1ZTogVCk6IFQge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzY3J1YkF3c0lkZW50aWZpZXJzRnJvbVN0cmluZyh2YWx1ZSkgYXMgdW5rbm93biBhcyBUO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKHYpID0+IHNjcnViQXdzSWRlbnRpZmllcnModikpIGFzIHVua25vd24gYXMgVDtcbiAgfVxuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFJlY3Vyc2UgcGxhaW4gQU5EIG51bGwtcHJvdG90eXBlIG9iamVjdHMgKGRhdGEgYmFncykuIEEgRGF0ZS9CdWZmZXIvTWFwL1xuICAgIC8vIGNsYXNzIGluc3RhbmNlIGlzIE5PVCBhIHBsYWluIG9iamVjdCwgYW5kIHdhbGtpbmcgaXQgdmlhIE9iamVjdC5lbnRyaWVzXG4gICAgLy8gd291bGQgY2xvYmJlciBpdCB0byBge31gIChvciBhIGJ5dGUgbWFwKSDigJQgc2lsZW50bHkgZGVzdHJveWluZyBlLmcuIGEgRGF0ZVxuICAgIC8vIGhlbGQgaW4gYXVkaXQgYGRldGFpbHNgLiBCdXQgYSBudWxsLXByb3RvdHlwZSBvYmplY3QgKGBPYmplY3QuY3JlYXRlKG51bGwpYCxcbiAgICAvLyBzb21lIEpTT04ucGFyc2UgcmV2aXZlcnMsIEJTT04gZG9jcykgaXMgYSBwbGFpbiBkYXRhIGJhZyB0aGF0IG11c3Qgc3RpbGwgYmVcbiAgICAvLyBzY3J1YmJlZCDigJQgc2tpcHBpbmcgaXQgd2FzIGEgaG9sZSBhdCB0aGUgdmVyeSBwZXJzaXN0ZW5jZSBib3VuZGFyeSB0aGlzXG4gICAgLy8gbW9kdWxlIGd1YXJkcy4gTGVhdmUgb25seSBwcm90b3R5cGVkIG5vbi1wbGFpbiBvYmplY3RzIHVudG91Y2hlZC5cbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlICYmIHByb3RvICE9PSBudWxsKSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgaWYgKEFDQ09VTlRfS0VZX1JFLnRlc3QoaykgJiYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIG91dFtrXSA9IFJFREFDVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2tdID0gc2NydWJBd3NJZGVudGlmaWVycyh2KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dCBhcyBUO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNjcnViLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXdzLXNjcnViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUM7QUFFOUI7Ozs7R0FJRztBQUNILE1BQU0saUJBQWlCLEdBQUcsc0JBQXNCLENBQUM7QUFFakQsb0ZBQW9GO0FBQ3BGLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUVsQyxtR0FBbUc7QUFDbkcsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQWE7SUFDekQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFJLEtBQVE7SUFDN0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLDZCQUE2QixDQUFDLEtBQUssQ0FBaUIsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBaUIsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkMsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSw2RUFBNkU7UUFDN0UsK0VBQStFO1FBQy9FLDhFQUE4RTtRQUM5RSwwRUFBMEU7UUFDMUUsb0VBQW9FO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9ELE1BQU0sR0FBRyxHQUE0QixFQUFFLENBQUM7UUFDeEMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBZ0MsQ0FBQyxFQUFFLENBQUM7WUFDdEUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9FLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBSZWRhY3QgQVdTIGFjY291bnQgaWRlbnRpZmllcnMgZnJvbSB2YWx1ZXMgaGVhZGVkIGZvciBhIERVUkFCTEUgc3RvcmUgb3IgYW5cbiAqIG91dGJvdW5kIHBheWxvYWQgKGF1ZGl0IGBkZXRhaWxzYCwgaW5nZXN0ZWQgZXZlbnQgYGRldGFpbGAsIGVycm9yIG1lc3NhZ2VzKS5cbiAqXG4gKiBIQVJEIENPTlNUUkFJTlQ6IGFuIEFXUyBhY2NvdW50IGlkIG11c3QgTkVWRVIgYmUgcGVyc2lzdGVkIGFueXdoZXJlIGluIHRoaXNcbiAqIHN5c3RlbSDigJQgYG9yZ0lkYCBpcyB0aGUgcGxhdGZvcm0gb3JnIGlkIChhIE1hcmtldHBsYWNlIGN1c3RvbWVyIGlzIGtleWVkIG9uIGl0c1xuICogbGljZW5zZSBBUk4sIGluIHN1YnNjcmlwdGlvbiBtZXRhZGF0YSksIG5ldmVyIGFuIEFXUyBhY2NvdW50IGlkLiBBV1Mgc3VyZmFjZXMgKENvZGVQaXBlbGluZS9Db2RlQnVpbGQgZmFpbHVyZSBtZXNzYWdlcywgS01TL3JvbGUgQVJOcykgbGVha1xuICogdGhlIGFjY291bnQgaWQgYXMgdGhlIDV0aCBBUk4gc2VnbWVudCBvciBhcyBhIGJhcmUgMTItZGlnaXQgdG9rZW4sIHNvIHNjcnViIGF0XG4gKiBldmVyeSBib3VuZGFyeSB0aGF0IHdyaXRlcyB1bnRydXN0ZWQgQVdTLWRlcml2ZWQgdGV4dC4gRGVmZW5zZS1pbi1kZXB0aDogYXBwbHlcbiAqIHRoaXMgZXZlbiB3aGVuIGFuIHVwc3RyZWFtIChlLmcuIHRoZSBldmVudHMgTGFtYmRhKSBpcyBleHBlY3RlZCB0byBoYXZlXG4gKiBzdHJpcHBlZCBpdCDigJQgdGhlIHBlcnNpc3RlbmNlIGJvdW5kYXJ5IG11c3Qgbm90IHRydXN0IHVwc3RyZWFtLlxuICovXG5cbmNvbnN0IFJFREFDVEVEID0gJ1tSRURBQ1RFRF0nO1xuXG4vKipcbiAqIEEgMTItZGlnaXQgcnVuIGlzIHRoZSBBV1MgYWNjb3VudC1pZCBzaGFwZSAoYW5kIHRoZSBhY2NvdW50IHNlZ21lbnQgb2YgZXZlcnlcbiAqIEFSTikuIEJvdW5kZWQgYnkgbm9uLWRpZ2l0cyBzbyB3ZSBuZXZlciBjbGlwIGluc2lkZSBhIGxvbmdlciBudW1iZXIgKGUuZy4gYVxuICogMTMtZGlnaXQgbWlsbGlzZWNvbmQgdGltZXN0YW1wIGlzIGxlZnQgaW50YWN0KS5cbiAqL1xuY29uc3QgQVdTX0FDQ09VTlRfSURfUkUgPSAvKD88IVxcZClcXGR7MTJ9KD8hXFxkKS9nO1xuXG4vKiogS2V5cyB0aGF0IG5hbWUgYW4gQVdTIGFjY291bnQgaWQgb3V0cmlnaHQg4oCUIHRoZWlyIHZhbHVlIGlzIGRyb3BwZWQgd2hvbGVzYWxlLiAqL1xuY29uc3QgQUNDT1VOVF9LRVlfUkUgPSAvYWNjb3VudC9pO1xuXG4vKiogUmVkYWN0IGV2ZXJ5IEFXUy1hY2NvdW50LWlkLXNoYXBlZCB0b2tlbiAoaW5jbC4gdGhlIGFjY291bnQgZmllbGQgb2YgYW55IEFSTikgZnJvbSBhIHN0cmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3J1YkF3c0lkZW50aWZpZXJzRnJvbVN0cmluZyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoQVdTX0FDQ09VTlRfSURfUkUsIFJFREFDVEVEKTtcbn1cblxuLyoqXG4gKiBEZWVwLXNjcnViIGEgdmFsdWUgKHN0cmluZyAvIGFycmF5IC8gcGxhaW4gb2JqZWN0KSBvZiBBV1MgYWNjb3VudCBpZGVudGlmaWVycyxcbiAqIHJldHVybmluZyBhIHNjcnViYmVkIGNvcHkg4oCUIHRoZSBpbnB1dCBpcyBuZXZlciBtdXRhdGVkLiBTdHJpbmcgdmFsdWVzIGhhdmVcbiAqIGFjY291bnQtaWQgdG9rZW5zIHJlZGFjdGVkOyBhbnkga2V5IG1hdGNoaW5nIHtAbGluayBBQ0NPVU5UX0tFWV9SRX0gd2l0aCBhXG4gKiBzdHJpbmcvbnVtYmVyIHZhbHVlIGlzIHJlZGFjdGVkIHdob2xlc2FsZS4gTm9uLXN0cmluZyBwcmltaXRpdmVzIHBhc3MgdGhyb3VnaFxuICogdW5jaGFuZ2VkIChhIGJhcmUgbnVtYmVyIGlzIG9ubHkgcmVkYWN0ZWQgd2hlbiBpdCBzaXRzIHVuZGVyIGFuIGFjY291bnQtbmFtZWRcbiAqIGtleSwgdG8gYXZvaWQgY2xvYmJlcmluZyBsZWdpdGltYXRlIG51bWVyaWMgZmllbGRzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcnViQXdzSWRlbnRpZmllcnM8VD4odmFsdWU6IFQpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc2NydWJBd3NJZGVudGlmaWVyc0Zyb21TdHJpbmcodmFsdWUpIGFzIHVua25vd24gYXMgVDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKCh2KSA9PiBzY3J1YkF3c0lkZW50aWZpZXJzKHYpKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBSZWN1cnNlIHBsYWluIEFORCBudWxsLXByb3RvdHlwZSBvYmplY3RzIChkYXRhIGJhZ3MpLiBBIERhdGUvQnVmZmVyL01hcC9cbiAgICAvLyBjbGFzcyBpbnN0YW5jZSBpcyBOT1QgYSBwbGFpbiBvYmplY3QsIGFuZCB3YWxraW5nIGl0IHZpYSBPYmplY3QuZW50cmllc1xuICAgIC8vIHdvdWxkIGNsb2JiZXIgaXQgdG8gYHt9YCAob3IgYSBieXRlIG1hcCkg4oCUIHNpbGVudGx5IGRlc3Ryb3lpbmcgZS5nLiBhIERhdGVcbiAgICAvLyBoZWxkIGluIGF1ZGl0IGBkZXRhaWxzYC4gQnV0IGEgbnVsbC1wcm90b3R5cGUgb2JqZWN0IChgT2JqZWN0LmNyZWF0ZShudWxsKWAsXG4gICAgLy8gc29tZSBKU09OLnBhcnNlIHJldml2ZXJzLCBCU09OIGRvY3MpIGlzIGEgcGxhaW4gZGF0YSBiYWcgdGhhdCBtdXN0IHN0aWxsIGJlXG4gICAgLy8gc2NydWJiZWQg4oCUIHNraXBwaW5nIGl0IHdhcyBhIGhvbGUgYXQgdGhlIHZlcnkgcGVyc2lzdGVuY2UgYm91bmRhcnkgdGhpc1xuICAgIC8vIG1vZHVsZSBndWFyZHMuIExlYXZlIG9ubHkgcHJvdG90eXBlZCBub24tcGxhaW4gb2JqZWN0cyB1bnRvdWNoZWQuXG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIGlmIChwcm90byAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBwcm90byAhPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICAgIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgIGlmIChBQ0NPVU5UX0tFWV9SRS50ZXN0KGspICYmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgICBvdXRba10gPSBSRURBQ1RFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dFtrXSA9IHNjcnViQXdzSWRlbnRpZmllcnModik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgVDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
@@ -65,4 +65,4 @@ export function toComplianceAttributes(value) {
65
65
  }
66
66
  return value; // primitives, Date, null — untouched
67
67
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxpYW5jZS1hdHRyaWJ1dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NvbXBsaWFuY2UtYXR0cmlidXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsMERBQTBEO0FBQzFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQztBQUU5Qiw0RUFBNEU7QUFDNUUsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUV0RDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXO0lBQ3BDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QixPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztXQUN2RSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7V0FDNUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCx1R0FBdUc7QUFDdkcsU0FBUyxhQUFhLENBQUMsQ0FBVTtJQUMvQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsT0FBTyxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQWM7SUFDbkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ25FLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQTRCLEVBQUUsQ0FBQztRQUN4QyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MseUVBQXlFO2dCQUN6RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUM7aUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDekQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxxQ0FBcUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNlY3JldC1yZWRhY3Rpb24gZm9yIGNvbXBsaWFuY2UtZXZlbnQgYGF0dHJpYnV0ZXNgLlxuICpcbiAqIFNoYXJlZCBieSB0aGUgcGx1Z2luIEFORCBwaXBlbGluZSBzZXJ2aWNlcyDigJQgYSBzZWN1cml0eS1jcml0aWNhbCBmdW5jdGlvblxuICogdGhhdCBtdXN0IG5vdCBkcmlmdDogYW4gXCJhbHNvIHJlZGFjdCBgY3JlZGVudGlhbHNgXCIgZml4IGhhcyB0byBwcm90ZWN0IEJPVEguIEJvdGggZmVlZCBlbnRpdHlcbiAqIGF0dHJpYnV0ZXMgdG8gdGhlIGNvbXBsaWFuY2UgZW5naW5lIG92ZXIgUmVkaXMsIGFuZCBuZWl0aGVyIG1heSBsZWFrIHBsYWludGV4dFxuICogc2VjcmV0cyB0aGVyZS5cbiAqXG4gKiBUaGUgY29tcGxpYW5jZSBydWxlIGVuZ2luZSByZWFkcyBzZWNyZXQgbWFwcyAoYGVudmAvYGJ1aWxkQXJnc2AsIGluY2wuIG5lc3RlZFxuICogYHByb3BzLnN5bnRoLmVudmAsIGBwcm9wcy5zdGFnZXNbXS5zdGVwc1tdLmVudmAsIOKApikgT05MWSBieSBLRVkg4oCUIGAka2V5cyhlbnYpYCxcbiAqIGAkY291bnQoZW52KWAsIGRvdC1wYXRoIGV4aXN0ZW5jZSwga2V5LWBjb250YWluc2Ag4oCUIG5ldmVyIGJ5IHZhbHVlIChzZWVcbiAqIGFwaS9jb21wbGlhbmNlL3NyYy9lbmdpbmUvcnVsZS1vcGVyYXRvcnMudHMgKyBpdHMgdGVzdHMpLiBTbyB3ZSBwcmVzZXJ2ZSBlYWNoXG4gKiBzZWNyZXQgbWFwJ3Mgc2hhcGUgKyBLRVlTIHdoaWxlIG92ZXJ3cml0aW5nIGV2ZXJ5IHZhbHVlIHdpdGggYSBtYXJrZXI7IHNjYWxhclxuICogc2VjcmV0IGZpZWxkcyAoc291cmNlIGB0b2tlbmAsIHBhc3N3b3Jkcywg4oCmKSBhcmUgcmVwbGFjZWQgb3V0cmlnaHQuIFN0cnVjdHVyZVxuICogYW5kIG5vbi1zZWNyZXQgbWV0YWRhdGEgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZCwgc28gcnVsZSBldmFsdWF0aW9uIGlzXG4gKiBpZGVudGljYWwgd2hpbGUgcGxhaW50ZXh0IHNlY3JldHMgbmV2ZXIgcmVhY2ggUmVkaXMgb3IgdGhlIGNvbXBsaWFuY2Ugc2VydmljZS5cbiAqL1xuXG4vKiogTWFya2VyIHdyaXR0ZW4gaW4gcGxhY2Ugb2YgYSByZWRhY3RlZCBzZWNyZXQgVkFMVUUuICovXG5jb25zdCBSRURBQ1RFRCA9ICdbUkVEQUNURURdJztcblxuLyoqIE1hcCBrZXlzIHdob3NlIChzdHJpbmfihpJzdHJpbmcpIFZBTFVFUyBhcmUgc2VjcmV0IGJ1aWxkLXRpbWUgbWF0ZXJpYWwuICovXG5jb25zdCBTRUNSRVRfTUFQX0tFWVMgPSBuZXcgU2V0KFsnZW52JywgJ2J1aWxkQXJncyddKTtcblxuLyoqXG4gKiBTY2FsYXIga2V5cyB0aGF0IHRoZW1zZWx2ZXMgY2FycnkgYSBzZWNyZXQgc3RyaW5nICh0b2tlbnMvcGFzc3dvcmRzL2V0Yy4pLlxuICogQXBwbGllZCBvbmx5IHRvIHN0cmluZyB2YWx1ZXMgc28gYm9vbGVhbiBmbGFncyBhbmQgZGVjbGFyYXRpb24gYXJyYXlzIChlLmcuXG4gKiBgc2VjcmV0czogUGx1Z2luU2VjcmV0W11gKSBhcmUgbGVmdCBpbnRhY3QuXG4gKi9cbmZ1bmN0aW9uIGlzU2VjcmV0U2NhbGFyS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGsgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGsuaW5jbHVkZXMoJ3Rva2VuJykgfHwgay5pbmNsdWRlcygnc2VjcmV0JykgfHwgay5pbmNsdWRlcygncGFzc3dvcmQnKVxuICAgIHx8IGsuaW5jbHVkZXMoJ3Bhc3NwaHJhc2UnKSB8fCBrLmluY2x1ZGVzKCdjcmVkZW50aWFsJykgfHwgay5pbmNsdWRlcygnYXBpa2V5JylcbiAgICB8fCBrLmluY2x1ZGVzKCdhY2Nlc3NrZXknKSB8fCBrLmluY2x1ZGVzKCdwcml2YXRla2V5Jyk7XG59XG5cbi8qKiBPbmx5IHBsYWluIChPYmplY3QtcHJvdG90eXBlKSBvYmplY3RzIGFyZSB0cmF2ZXJzZWQg4oCUIERhdGVzL2NsYXNzIGluc3RhbmNlcyBwYXNzIHRocm91Z2ggaW50YWN0LiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2OiB1bmtub3duKTogdiBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICh2ID09PSBudWxsIHx8IHR5cGVvZiB2ICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2KTtcbiAgcmV0dXJuIHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsO1xufVxuXG4vKipcbiAqIFByb2plY3QgYW4gZW50aXR5IGludG8gdGhlIGNvbXBsaWFuY2UtZXZlbnQgYGF0dHJpYnV0ZXNgLCByZWRhY3Rpbmcgc2VjcmV0XG4gKiBWQUxVRVMgd2hpbGUgcHJlc2VydmluZyBldmVyeXRoaW5nIHRoZSBjb21wbGlhbmNlIGVuZ2luZSBhY3R1YWxseSBldmFsdWF0ZXMuXG4gKiBSZWN1cnNlcyBzbyBuZXN0ZWQgc2VjcmV0cyAoZGVlcCBpbnNpZGUgYSBwaXBlbGluZSdzIGBwcm9wc2ApIGFyZSBjb3ZlcmVkIHRvby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tcGxpYW5jZUF0dHJpYnV0ZXModmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKHRvQ29tcGxpYW5jZUF0dHJpYnV0ZXMpO1xuICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICBpZiAoU0VDUkVUX01BUF9LRVlTLmhhcyhrKSAmJiBpc1BsYWluT2JqZWN0KHYpKSB7XG4gICAgICAgIC8vIFByZXNlcnZlIGtleXMgKGNvbXBsaWFuY2UgcmVhZHMgJGtleXMvJGNvdW50L3ByZXNlbmNlKSwgcmVkYWN0IHZhbHVlcy5cbiAgICAgICAgb3V0W2tdID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKHYpLm1hcCgobWspID0+IFttaywgUkVEQUNURURdKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzU2VjcmV0U2NhbGFyS2V5KGspICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdXRba10gPSBSRURBQ1RFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dFtrXSA9IHRvQ29tcGxpYW5jZUF0dHJpYnV0ZXModik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgcmV0dXJuIHZhbHVlOyAvLyBwcmltaXRpdmVzLCBEYXRlLCBudWxsIOKAlCB1bnRvdWNoZWRcbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxpYW5jZS1hdHRyaWJ1dGVzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY29tcGxpYW5jZS1hdHRyaWJ1dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCwwREFBMEQ7QUFDMUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRTlCLDRFQUE0RTtBQUM1RSxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRXREOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEdBQVc7SUFDcEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1dBQ3ZFLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztXQUM1RSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELHVHQUF1RztBQUN2RyxTQUFTLGFBQWEsQ0FBQyxDQUFVO0lBQy9CLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYztJQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkUsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBNEIsRUFBRSxDQUFDO1FBQ3hDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvQyx5RUFBeUU7Z0JBQ3pFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQztpQkFBTSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN6RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLHFDQUFxQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2VjcmV0LXJlZGFjdGlvbiBmb3IgY29tcGxpYW5jZS1ldmVudCBgYXR0cmlidXRlc2AuXG4gKlxuICogU2hhcmVkIGJ5IHRoZSBwbHVnaW4gQU5EIHBpcGVsaW5lIHNlcnZpY2VzIOKAlCBhIHNlY3VyaXR5LWNyaXRpY2FsIGZ1bmN0aW9uXG4gKiB0aGF0IG11c3Qgbm90IGRyaWZ0OiBhbiBcImFsc28gcmVkYWN0IGBjcmVkZW50aWFsc2BcIiBmaXggaGFzIHRvIHByb3RlY3QgQk9USC4gQm90aCBmZWVkIGVudGl0eVxuICogYXR0cmlidXRlcyB0byB0aGUgY29tcGxpYW5jZSBlbmdpbmUgb3ZlciBSZWRpcywgYW5kIG5laXRoZXIgbWF5IGxlYWsgcGxhaW50ZXh0XG4gKiBzZWNyZXRzIHRoZXJlLlxuICpcbiAqIFRoZSBjb21wbGlhbmNlIHJ1bGUgZW5naW5lIHJlYWRzIHNlY3JldCBtYXBzIChgZW52YC9gYnVpbGRBcmdzYCwgaW5jbC4gbmVzdGVkXG4gKiBgcHJvcHMuc3ludGguZW52YCwgYHByb3BzLnN0YWdlc1tdLnN0ZXBzW10uZW52YCwg4oCmKSBPTkxZIGJ5IEtFWSDigJQgYCRrZXlzKGVudilgLFxuICogYCRjb3VudChlbnYpYCwgZG90LXBhdGggZXhpc3RlbmNlLCBrZXktYGNvbnRhaW5zYCDigJQgbmV2ZXIgYnkgdmFsdWUgKHNlZVxuICogYXBpL2NvbXBsaWFuY2Uvc3JjL2VuZ2luZS9ydWxlLW9wZXJhdG9ycy50cyArIGl0cyB0ZXN0cykuIFNvIHdlIHByZXNlcnZlIGVhY2hcbiAqIHNlY3JldCBtYXAncyBzaGFwZSArIEtFWVMgd2hpbGUgb3ZlcndyaXRpbmcgZXZlcnkgdmFsdWUgd2l0aCBhIG1hcmtlcjsgc2NhbGFyXG4gKiBzZWNyZXQgZmllbGRzIChzb3VyY2UgYHRva2VuYCwgcGFzc3dvcmRzLCDigKYpIGFyZSByZXBsYWNlZCBvdXRyaWdodC4gU3RydWN0dXJlXG4gKiBhbmQgbm9uLXNlY3JldCBtZXRhZGF0YSBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkLCBzbyBydWxlIGV2YWx1YXRpb24gaXNcbiAqIGlkZW50aWNhbCB3aGlsZSBwbGFpbnRleHQgc2VjcmV0cyBuZXZlciByZWFjaCBSZWRpcyBvciB0aGUgY29tcGxpYW5jZSBzZXJ2aWNlLlxuICovXG5cbi8qKiBNYXJrZXIgd3JpdHRlbiBpbiBwbGFjZSBvZiBhIHJlZGFjdGVkIHNlY3JldCBWQUxVRS4gKi9cbmNvbnN0IFJFREFDVEVEID0gJ1tSRURBQ1RFRF0nO1xuXG4vKiogTWFwIGtleXMgd2hvc2UgKHN0cmluZ+KGknN0cmluZykgVkFMVUVTIGFyZSBzZWNyZXQgYnVpbGQtdGltZSBtYXRlcmlhbC4gKi9cbmNvbnN0IFNFQ1JFVF9NQVBfS0VZUyA9IG5ldyBTZXQoWydlbnYnLCAnYnVpbGRBcmdzJ10pO1xuXG4vKipcbiAqIFNjYWxhciBrZXlzIHRoYXQgdGhlbXNlbHZlcyBjYXJyeSBhIHNlY3JldCBzdHJpbmcgKHRva2Vucy9wYXNzd29yZHMvZXRjLikuXG4gKiBBcHBsaWVkIG9ubHkgdG8gc3RyaW5nIHZhbHVlcyBzbyBib29sZWFuIGZsYWdzIGFuZCBkZWNsYXJhdGlvbiBhcnJheXMgKGUuZy5cbiAqIGBzZWNyZXRzOiBQbHVnaW5TZWNyZXRbXWApIGFyZSBsZWZ0IGludGFjdC5cbiAqL1xuZnVuY3Rpb24gaXNTZWNyZXRTY2FsYXJLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgayA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gay5pbmNsdWRlcygndG9rZW4nKSB8fCBrLmluY2x1ZGVzKCdzZWNyZXQnKSB8fCBrLmluY2x1ZGVzKCdwYXNzd29yZCcpXG4gICAgfHwgay5pbmNsdWRlcygncGFzc3BocmFzZScpIHx8IGsuaW5jbHVkZXMoJ2NyZWRlbnRpYWwnKSB8fCBrLmluY2x1ZGVzKCdhcGlrZXknKVxuICAgIHx8IGsuaW5jbHVkZXMoJ2FjY2Vzc2tleScpIHx8IGsuaW5jbHVkZXMoJ3ByaXZhdGVrZXknKTtcbn1cblxuLyoqIE9ubHkgcGxhaW4gKE9iamVjdC1wcm90b3R5cGUpIG9iamVjdHMgYXJlIHRyYXZlcnNlZCDigJQgRGF0ZXMvY2xhc3MgaW5zdGFuY2VzIHBhc3MgdGhyb3VnaCBpbnRhY3QuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHY6IHVua25vd24pOiB2IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKHYgPT09IG51bGwgfHwgdHlwZW9mIHYgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHYpO1xuICByZXR1cm4gcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGw7XG59XG5cbi8qKlxuICogUHJvamVjdCBhbiBlbnRpdHkgaW50byB0aGUgY29tcGxpYW5jZS1ldmVudCBgYXR0cmlidXRlc2AsIHJlZGFjdGluZyBzZWNyZXRcbiAqIFZBTFVFUyB3aGlsZSBwcmVzZXJ2aW5nIGV2ZXJ5dGhpbmcgdGhlIGNvbXBsaWFuY2UgZW5naW5lIGFjdHVhbGx5IGV2YWx1YXRlcy5cbiAqIFJlY3Vyc2VzIHNvIG5lc3RlZCBzZWNyZXRzIChkZWVwIGluc2lkZSBhIHBpcGVsaW5lJ3MgYHByb3BzYCkgYXJlIGNvdmVyZWQgdG9vLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db21wbGlhbmNlQXR0cmlidXRlcyh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAodG9Db21wbGlhbmNlQXR0cmlidXRlcyk7XG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGlmIChTRUNSRVRfTUFQX0tFWVMuaGFzKGspICYmIGlzUGxhaW5PYmplY3QodikpIHtcbiAgICAgICAgLy8gUHJlc2VydmUga2V5cyAoY29tcGxpYW5jZSByZWFkcyAka2V5cy8kY291bnQvcHJlc2VuY2UpLCByZWRhY3QgdmFsdWVzLlxuICAgICAgICBvdXRba10gPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmtleXModikubWFwKChtaykgPT4gW21rLCBSRURBQ1RFRF0pKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNTZWNyZXRTY2FsYXJLZXkoaykgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG91dFtrXSA9IFJFREFDVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2tdID0gdG9Db21wbGlhbmNlQXR0cmlidXRlcyh2KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICByZXR1cm4gdmFsdWU7IC8vIHByaW1pdGl2ZXMsIERhdGUsIG51bGwg4oCUIHVudG91Y2hlZFxufVxuIl19
@@ -0,0 +1,98 @@
1
+ /**
2
+ * A FIFO bound on how many things run at once in ONE process.
3
+ *
4
+ * WHY IT IS SHARED. Two services need the same bound for the same reason: a
5
+ * resource they own is consumed by work several producers queue, and the
6
+ * producers' count is set elsewhere. The image registry signs images (each
7
+ * attest hands cosign a 7-17 MiB SBOM against a 1 GiB container), and a plugin
8
+ * replica runs builds (its six per-tier workers share ONE buildkitd sidecar).
9
+ * Both learned it the same way: 32 concurrent signs OOMKilled the registry and
10
+ * took every push with it, because `/token` is the registry login.
11
+ *
12
+ * The queue hand-off below has one subtlety worth having a single copy of:
13
+ * `release` passes the slot straight to the next waiter instead of decrementing
14
+ * first, because a dip to `limit - 1` would admit an extra caller past the
15
+ * ceiling. That is the kind of off-by-one that a second implementation gets
16
+ * wrong silently.
17
+ *
18
+ * WAITING, NOT REFUSING. Over the limit a caller queues; nothing here refuses or
19
+ * times out. Refusing turns a capacity limit into a failure of the work, which
20
+ * is a mistake this codebase has already paid for once (a per-org build slot
21
+ * that failed terminally after a 30-minute wait lost 80 of 119 plugins). The
22
+ * caller's own deadline is what bounds the wait.
23
+ */
24
+ export interface ConcurrencyGateOptions {
25
+ /** Read per call, so an env- or config-driven limit can change without a restart. */
26
+ limit: () => number;
27
+ /** Called when a caller has to wait, before it does. */
28
+ onQueued?: (waiting: number, limit: number) => void;
29
+ /** Called whenever occupancy changes, for a gauge. */
30
+ onOccupancy?: (inFlight: number) => void;
31
+ }
32
+ export interface ConcurrencyGate {
33
+ /** Run `fn` holding a slot. */
34
+ run<T>(fn: () => Promise<T>): Promise<T>;
35
+ /** Current occupancy — for metrics and tests. */
36
+ state(): {
37
+ inFlight: number;
38
+ waiting: number;
39
+ };
40
+ /** Test seam: drop a queue left behind by a failed assertion. */
41
+ reset(): void;
42
+ }
43
+ export declare function createConcurrencyGate(opts: ConcurrencyGateOptions): ConcurrencyGate;
44
+ /** Occupancy a {@link KeyedConcurrencyGateOptions.admits} predicate decides on. */
45
+ export interface KeyedOccupancy<K> {
46
+ /** Slots in use across every key. */
47
+ total: number;
48
+ /** Slots in use per key. Keys at zero may be absent. */
49
+ perKey: ReadonlyMap<K, number>;
50
+ }
51
+ export interface KeyedConcurrencyGateOptions<K> {
52
+ /** The TOTAL ceiling, read per call. No key may push occupancy past it. */
53
+ limit: () => number;
54
+ /**
55
+ * May a caller for `key` start right now?
56
+ *
57
+ * Called only when the total ceiling has room, so this expresses the per-key
58
+ * policy alone — a guaranteed floor, a cap, a borrowing allowance. It must be
59
+ * a pure function of the occupancy it is handed: it is re-evaluated on every
60
+ * release, and a predicate that consults anything else (a clock, a counter it
61
+ * mutates) makes admission order unreproducible.
62
+ */
63
+ admits: (key: K, occupancy: KeyedOccupancy<K>) => boolean;
64
+ onQueued?: (key: K, waiting: number, limit: number) => void;
65
+ onOccupancy?: (occupancy: KeyedOccupancy<K>) => void;
66
+ }
67
+ export interface KeyedConcurrencyGate<K> {
68
+ run<T>(key: K, fn: () => Promise<T>): Promise<T>;
69
+ state(): {
70
+ inFlight: number;
71
+ waiting: number;
72
+ perKey: ReadonlyMap<K, number>;
73
+ };
74
+ reset(): void;
75
+ }
76
+ /**
77
+ * A FIFO bound with a TOTAL ceiling plus a per-key admission policy.
78
+ *
79
+ * WHY A SECOND SHAPE instead of nesting two of the gates above. Stacking a
80
+ * per-key gate inside the total gate DEADLOCKS: a caller holding a total slot
81
+ * while it waits for a key slot can hold every total slot, and nothing will
82
+ * ever release one. Admission has to be ONE decision, which is what this is.
83
+ *
84
+ * THE HAND-OFF DIFFERS FROM THE COUNT GATE ABOVE, deliberately. There, release
85
+ * passes the slot straight to the head of the queue, because for a pure count
86
+ * any waiter is admissible. Here the head may NOT be — it could be a caller
87
+ * whose key is over its floor while the borrowing allowance is full. So release
88
+ * decrements first and then scans the queue for the first waiter the predicate
89
+ * now admits. Occupancy may therefore dip below the ceiling while callers wait,
90
+ * which is correct: those callers are not admissible, and admitting them anyway
91
+ * is exactly the bound this exists to enforce.
92
+ *
93
+ * ORDER. Relative order is preserved among waiters the predicate admits, so
94
+ * callers sharing a key are strictly FIFO. Across keys it is not: a waiter that
95
+ * cannot start is skipped rather than blocking the queue behind it, which is the
96
+ * point — a blocked borrower must not stall a caller that is within its floor.
97
+ */
98
+ export declare function createKeyedConcurrencyGate<K>(opts: KeyedConcurrencyGateOptions<K>): KeyedConcurrencyGate<K>;
@@ -0,0 +1,110 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export function createConcurrencyGate(opts) {
4
+ let inFlight = 0;
5
+ const waiting = [];
6
+ const occupancy = () => opts.onOccupancy?.(inFlight);
7
+ function release() {
8
+ const next = waiting.shift();
9
+ if (next) {
10
+ // Straight hand-off: see the note above about never dipping below the
11
+ // ceiling between a release and the next admission.
12
+ next();
13
+ return;
14
+ }
15
+ inFlight -= 1;
16
+ occupancy();
17
+ }
18
+ return {
19
+ async run(fn) {
20
+ const limit = opts.limit();
21
+ if (inFlight >= limit) {
22
+ opts.onQueued?.(waiting.length + 1, limit);
23
+ await new Promise((resolve) => { waiting.push(resolve); });
24
+ }
25
+ else {
26
+ inFlight += 1;
27
+ }
28
+ occupancy();
29
+ try {
30
+ return await fn();
31
+ }
32
+ finally {
33
+ release();
34
+ }
35
+ },
36
+ state: () => ({ inFlight, waiting: waiting.length }),
37
+ reset: () => { inFlight = 0; waiting.length = 0; },
38
+ };
39
+ }
40
+ /**
41
+ * A FIFO bound with a TOTAL ceiling plus a per-key admission policy.
42
+ *
43
+ * WHY A SECOND SHAPE instead of nesting two of the gates above. Stacking a
44
+ * per-key gate inside the total gate DEADLOCKS: a caller holding a total slot
45
+ * while it waits for a key slot can hold every total slot, and nothing will
46
+ * ever release one. Admission has to be ONE decision, which is what this is.
47
+ *
48
+ * THE HAND-OFF DIFFERS FROM THE COUNT GATE ABOVE, deliberately. There, release
49
+ * passes the slot straight to the head of the queue, because for a pure count
50
+ * any waiter is admissible. Here the head may NOT be — it could be a caller
51
+ * whose key is over its floor while the borrowing allowance is full. So release
52
+ * decrements first and then scans the queue for the first waiter the predicate
53
+ * now admits. Occupancy may therefore dip below the ceiling while callers wait,
54
+ * which is correct: those callers are not admissible, and admitting them anyway
55
+ * is exactly the bound this exists to enforce.
56
+ *
57
+ * ORDER. Relative order is preserved among waiters the predicate admits, so
58
+ * callers sharing a key are strictly FIFO. Across keys it is not: a waiter that
59
+ * cannot start is skipped rather than blocking the queue behind it, which is the
60
+ * point — a blocked borrower must not stall a caller that is within its floor.
61
+ */
62
+ export function createKeyedConcurrencyGate(opts) {
63
+ let total = 0;
64
+ const perKey = new Map();
65
+ const waiting = [];
66
+ const snapshot = () => ({ total, perKey });
67
+ const occupancy = () => opts.onOccupancy?.(snapshot());
68
+ const bump = (key, by) => {
69
+ const next = (perKey.get(key) ?? 0) + by;
70
+ if (next <= 0)
71
+ perKey.delete(key);
72
+ else
73
+ perKey.set(key, next);
74
+ total += by;
75
+ };
76
+ const admissible = (key) => total < opts.limit() && opts.admits(key, snapshot());
77
+ function release(key) {
78
+ bump(key, -1);
79
+ // Scan in arrival order for the first waiter that may now start. Not the
80
+ // blind hand-off of the count gate — see the note above.
81
+ const index = waiting.findIndex((w) => admissible(w.key));
82
+ if (index !== -1) {
83
+ const [next] = waiting.splice(index, 1);
84
+ bump(next.key, 1);
85
+ next.admit();
86
+ }
87
+ occupancy();
88
+ }
89
+ return {
90
+ async run(key, fn) {
91
+ if (admissible(key)) {
92
+ bump(key, 1);
93
+ }
94
+ else {
95
+ opts.onQueued?.(key, waiting.length + 1, opts.limit());
96
+ await new Promise((resolve) => { waiting.push({ key, admit: resolve }); });
97
+ }
98
+ occupancy();
99
+ try {
100
+ return await fn();
101
+ }
102
+ finally {
103
+ release(key);
104
+ }
105
+ },
106
+ state: () => ({ inFlight: total, waiting: waiting.length, perKey }),
107
+ reset: () => { total = 0; perKey.clear(); waiting.length = 0; },
108
+ };
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY3VycmVuY3ktZ2F0ZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NvbmN1cnJlbmN5LWdhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTRDdEMsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQTRCO0lBQ2hFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNqQixNQUFNLE9BQU8sR0FBc0IsRUFBRSxDQUFDO0lBRXRDLE1BQU0sU0FBUyxHQUFHLEdBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUzRCxTQUFTLE9BQU87UUFDZCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULHNFQUFzRTtZQUN0RSxvREFBb0Q7WUFDcEQsSUFBSSxFQUFFLENBQUM7WUFDUCxPQUFPO1FBQ1QsQ0FBQztRQUNELFFBQVEsSUFBSSxDQUFDLENBQUM7UUFDZCxTQUFTLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxDQUFDLEdBQUcsQ0FBSSxFQUFvQjtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUM7WUFDRCxTQUFTLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDcEIsQ0FBQztvQkFBUyxDQUFDO2dCQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BELEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25ELENBQUM7QUFDSixDQUFDO0FBcUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUksSUFBb0M7SUFDaEYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWEsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBeUMsRUFBRSxDQUFDO0lBRXpELE1BQU0sUUFBUSxHQUFHLEdBQXNCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQUcsR0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFN0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFNLEVBQUUsRUFBVSxFQUFRLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDO1lBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7WUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFNLEVBQVcsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUU3RixTQUFTLE9BQU8sQ0FBQyxHQUFNO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLHlFQUF5RTtRQUN6RSx5REFBeUQ7UUFDekQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxDQUFDLEdBQUcsQ0FBSSxHQUFNLEVBQUUsRUFBb0I7WUFDdkMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNwQixDQUFDO29CQUFTLENBQUM7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBBIEZJRk8gYm91bmQgb24gaG93IG1hbnkgdGhpbmdzIHJ1biBhdCBvbmNlIGluIE9ORSBwcm9jZXNzLlxuICpcbiAqIFdIWSBJVCBJUyBTSEFSRUQuIFR3byBzZXJ2aWNlcyBuZWVkIHRoZSBzYW1lIGJvdW5kIGZvciB0aGUgc2FtZSByZWFzb246IGFcbiAqIHJlc291cmNlIHRoZXkgb3duIGlzIGNvbnN1bWVkIGJ5IHdvcmsgc2V2ZXJhbCBwcm9kdWNlcnMgcXVldWUsIGFuZCB0aGVcbiAqIHByb2R1Y2VycycgY291bnQgaXMgc2V0IGVsc2V3aGVyZS4gVGhlIGltYWdlIHJlZ2lzdHJ5IHNpZ25zIGltYWdlcyAoZWFjaFxuICogYXR0ZXN0IGhhbmRzIGNvc2lnbiBhIDctMTcgTWlCIFNCT00gYWdhaW5zdCBhIDEgR2lCIGNvbnRhaW5lciksIGFuZCBhIHBsdWdpblxuICogcmVwbGljYSBydW5zIGJ1aWxkcyAoaXRzIHNpeCBwZXItdGllciB3b3JrZXJzIHNoYXJlIE9ORSBidWlsZGtpdGQgc2lkZWNhcikuXG4gKiBCb3RoIGxlYXJuZWQgaXQgdGhlIHNhbWUgd2F5OiAzMiBjb25jdXJyZW50IHNpZ25zIE9PTUtpbGxlZCB0aGUgcmVnaXN0cnkgYW5kXG4gKiB0b29rIGV2ZXJ5IHB1c2ggd2l0aCBpdCwgYmVjYXVzZSBgL3Rva2VuYCBpcyB0aGUgcmVnaXN0cnkgbG9naW4uXG4gKlxuICogVGhlIHF1ZXVlIGhhbmQtb2ZmIGJlbG93IGhhcyBvbmUgc3VidGxldHkgd29ydGggaGF2aW5nIGEgc2luZ2xlIGNvcHkgb2Y6XG4gKiBgcmVsZWFzZWAgcGFzc2VzIHRoZSBzbG90IHN0cmFpZ2h0IHRvIHRoZSBuZXh0IHdhaXRlciBpbnN0ZWFkIG9mIGRlY3JlbWVudGluZ1xuICogZmlyc3QsIGJlY2F1c2UgYSBkaXAgdG8gYGxpbWl0IC0gMWAgd291bGQgYWRtaXQgYW4gZXh0cmEgY2FsbGVyIHBhc3QgdGhlXG4gKiBjZWlsaW5nLiBUaGF0IGlzIHRoZSBraW5kIG9mIG9mZi1ieS1vbmUgdGhhdCBhIHNlY29uZCBpbXBsZW1lbnRhdGlvbiBnZXRzXG4gKiB3cm9uZyBzaWxlbnRseS5cbiAqXG4gKiBXQUlUSU5HLCBOT1QgUkVGVVNJTkcuIE92ZXIgdGhlIGxpbWl0IGEgY2FsbGVyIHF1ZXVlczsgbm90aGluZyBoZXJlIHJlZnVzZXMgb3JcbiAqIHRpbWVzIG91dC4gUmVmdXNpbmcgdHVybnMgYSBjYXBhY2l0eSBsaW1pdCBpbnRvIGEgZmFpbHVyZSBvZiB0aGUgd29yaywgd2hpY2hcbiAqIGlzIGEgbWlzdGFrZSB0aGlzIGNvZGViYXNlIGhhcyBhbHJlYWR5IHBhaWQgZm9yIG9uY2UgKGEgcGVyLW9yZyBidWlsZCBzbG90XG4gKiB0aGF0IGZhaWxlZCB0ZXJtaW5hbGx5IGFmdGVyIGEgMzAtbWludXRlIHdhaXQgbG9zdCA4MCBvZiAxMTkgcGx1Z2lucykuIFRoZVxuICogY2FsbGVyJ3Mgb3duIGRlYWRsaW5lIGlzIHdoYXQgYm91bmRzIHRoZSB3YWl0LlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uY3VycmVuY3lHYXRlT3B0aW9ucyB7XG4gIC8qKiBSZWFkIHBlciBjYWxsLCBzbyBhbiBlbnYtIG9yIGNvbmZpZy1kcml2ZW4gbGltaXQgY2FuIGNoYW5nZSB3aXRob3V0IGEgcmVzdGFydC4gKi9cbiAgbGltaXQ6ICgpID0+IG51bWJlcjtcbiAgLyoqIENhbGxlZCB3aGVuIGEgY2FsbGVyIGhhcyB0byB3YWl0LCBiZWZvcmUgaXQgZG9lcy4gKi9cbiAgb25RdWV1ZWQ/OiAod2FpdGluZzogbnVtYmVyLCBsaW1pdDogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW5ldmVyIG9jY3VwYW5jeSBjaGFuZ2VzLCBmb3IgYSBnYXVnZS4gKi9cbiAgb25PY2N1cGFuY3k/OiAoaW5GbGlnaHQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25jdXJyZW5jeUdhdGUge1xuICAvKiogUnVuIGBmbmAgaG9sZGluZyBhIHNsb3QuICovXG4gIHJ1bjxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD47XG4gIC8qKiBDdXJyZW50IG9jY3VwYW5jeSDigJQgZm9yIG1ldHJpY3MgYW5kIHRlc3RzLiAqL1xuICBzdGF0ZSgpOiB7IGluRmxpZ2h0OiBudW1iZXI7IHdhaXRpbmc6IG51bWJlciB9O1xuICAvKiogVGVzdCBzZWFtOiBkcm9wIGEgcXVldWUgbGVmdCBiZWhpbmQgYnkgYSBmYWlsZWQgYXNzZXJ0aW9uLiAqL1xuICByZXNldCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uY3VycmVuY3lHYXRlKG9wdHM6IENvbmN1cnJlbmN5R2F0ZU9wdGlvbnMpOiBDb25jdXJyZW5jeUdhdGUge1xuICBsZXQgaW5GbGlnaHQgPSAwO1xuICBjb25zdCB3YWl0aW5nOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0IG9jY3VwYW5jeSA9ICgpOiB2b2lkID0+IG9wdHMub25PY2N1cGFuY3k/LihpbkZsaWdodCk7XG5cbiAgZnVuY3Rpb24gcmVsZWFzZSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gd2FpdGluZy5zaGlmdCgpO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICAvLyBTdHJhaWdodCBoYW5kLW9mZjogc2VlIHRoZSBub3RlIGFib3ZlIGFib3V0IG5ldmVyIGRpcHBpbmcgYmVsb3cgdGhlXG4gICAgICAvLyBjZWlsaW5nIGJldHdlZW4gYSByZWxlYXNlIGFuZCB0aGUgbmV4dCBhZG1pc3Npb24uXG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluRmxpZ2h0IC09IDE7XG4gICAgb2NjdXBhbmN5KCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHJ1bjxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgY29uc3QgbGltaXQgPSBvcHRzLmxpbWl0KCk7XG4gICAgICBpZiAoaW5GbGlnaHQgPj0gbGltaXQpIHtcbiAgICAgICAgb3B0cy5vblF1ZXVlZD8uKHdhaXRpbmcubGVuZ3RoICsgMSwgbGltaXQpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4geyB3YWl0aW5nLnB1c2gocmVzb2x2ZSk7IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5GbGlnaHQgKz0gMTtcbiAgICAgIH1cbiAgICAgIG9jY3VwYW5jeSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdGF0ZTogKCkgPT4gKHsgaW5GbGlnaHQsIHdhaXRpbmc6IHdhaXRpbmcubGVuZ3RoIH0pLFxuICAgIHJlc2V0OiAoKSA9PiB7IGluRmxpZ2h0ID0gMDsgd2FpdGluZy5sZW5ndGggPSAwOyB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEtleWVkIHZhcmlhbnQ6IG9uZSBjZWlsaW5nLCBwZXIta2V5IGZsb29ycywgYW5kIGJvcnJvd2luZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBPY2N1cGFuY3kgYSB7QGxpbmsgS2V5ZWRDb25jdXJyZW5jeUdhdGVPcHRpb25zLmFkbWl0c30gcHJlZGljYXRlIGRlY2lkZXMgb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEtleWVkT2NjdXBhbmN5PEs+IHtcbiAgLyoqIFNsb3RzIGluIHVzZSBhY3Jvc3MgZXZlcnkga2V5LiAqL1xuICB0b3RhbDogbnVtYmVyO1xuICAvKiogU2xvdHMgaW4gdXNlIHBlciBrZXkuIEtleXMgYXQgemVybyBtYXkgYmUgYWJzZW50LiAqL1xuICBwZXJLZXk6IFJlYWRvbmx5TWFwPEssIG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5ZWRDb25jdXJyZW5jeUdhdGVPcHRpb25zPEs+IHtcbiAgLyoqIFRoZSBUT1RBTCBjZWlsaW5nLCByZWFkIHBlciBjYWxsLiBObyBrZXkgbWF5IHB1c2ggb2NjdXBhbmN5IHBhc3QgaXQuICovXG4gIGxpbWl0OiAoKSA9PiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXkgYSBjYWxsZXIgZm9yIGBrZXlgIHN0YXJ0IHJpZ2h0IG5vdz9cbiAgICpcbiAgICogQ2FsbGVkIG9ubHkgd2hlbiB0aGUgdG90YWwgY2VpbGluZyBoYXMgcm9vbSwgc28gdGhpcyBleHByZXNzZXMgdGhlIHBlci1rZXlcbiAgICogcG9saWN5IGFsb25lIOKAlCBhIGd1YXJhbnRlZWQgZmxvb3IsIGEgY2FwLCBhIGJvcnJvd2luZyBhbGxvd2FuY2UuIEl0IG11c3QgYmVcbiAgICogYSBwdXJlIGZ1bmN0aW9uIG9mIHRoZSBvY2N1cGFuY3kgaXQgaXMgaGFuZGVkOiBpdCBpcyByZS1ldmFsdWF0ZWQgb24gZXZlcnlcbiAgICogcmVsZWFzZSwgYW5kIGEgcHJlZGljYXRlIHRoYXQgY29uc3VsdHMgYW55dGhpbmcgZWxzZSAoYSBjbG9jaywgYSBjb3VudGVyIGl0XG4gICAqIG11dGF0ZXMpIG1ha2VzIGFkbWlzc2lvbiBvcmRlciB1bnJlcHJvZHVjaWJsZS5cbiAgICovXG4gIGFkbWl0czogKGtleTogSywgb2NjdXBhbmN5OiBLZXllZE9jY3VwYW5jeTxLPikgPT4gYm9vbGVhbjtcbiAgb25RdWV1ZWQ/OiAoa2V5OiBLLCB3YWl0aW5nOiBudW1iZXIsIGxpbWl0OiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uT2NjdXBhbmN5PzogKG9jY3VwYW5jeTogS2V5ZWRPY2N1cGFuY3k8Sz4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5ZWRDb25jdXJyZW5jeUdhdGU8Sz4ge1xuICBydW48VD4oa2V5OiBLLCBmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD47XG4gIHN0YXRlKCk6IHsgaW5GbGlnaHQ6IG51bWJlcjsgd2FpdGluZzogbnVtYmVyOyBwZXJLZXk6IFJlYWRvbmx5TWFwPEssIG51bWJlcj4gfTtcbiAgcmVzZXQoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIEZJRk8gYm91bmQgd2l0aCBhIFRPVEFMIGNlaWxpbmcgcGx1cyBhIHBlci1rZXkgYWRtaXNzaW9uIHBvbGljeS5cbiAqXG4gKiBXSFkgQSBTRUNPTkQgU0hBUEUgaW5zdGVhZCBvZiBuZXN0aW5nIHR3byBvZiB0aGUgZ2F0ZXMgYWJvdmUuIFN0YWNraW5nIGFcbiAqIHBlci1rZXkgZ2F0ZSBpbnNpZGUgdGhlIHRvdGFsIGdhdGUgREVBRExPQ0tTOiBhIGNhbGxlciBob2xkaW5nIGEgdG90YWwgc2xvdFxuICogd2hpbGUgaXQgd2FpdHMgZm9yIGEga2V5IHNsb3QgY2FuIGhvbGQgZXZlcnkgdG90YWwgc2xvdCwgYW5kIG5vdGhpbmcgd2lsbFxuICogZXZlciByZWxlYXNlIG9uZS4gQWRtaXNzaW9uIGhhcyB0byBiZSBPTkUgZGVjaXNpb24sIHdoaWNoIGlzIHdoYXQgdGhpcyBpcy5cbiAqXG4gKiBUSEUgSEFORC1PRkYgRElGRkVSUyBGUk9NIFRIRSBDT1VOVCBHQVRFIEFCT1ZFLCBkZWxpYmVyYXRlbHkuIFRoZXJlLCByZWxlYXNlXG4gKiBwYXNzZXMgdGhlIHNsb3Qgc3RyYWlnaHQgdG8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBiZWNhdXNlIGZvciBhIHB1cmUgY291bnRcbiAqIGFueSB3YWl0ZXIgaXMgYWRtaXNzaWJsZS4gSGVyZSB0aGUgaGVhZCBtYXkgTk9UIGJlIOKAlCBpdCBjb3VsZCBiZSBhIGNhbGxlclxuICogd2hvc2Uga2V5IGlzIG92ZXIgaXRzIGZsb29yIHdoaWxlIHRoZSBib3Jyb3dpbmcgYWxsb3dhbmNlIGlzIGZ1bGwuIFNvIHJlbGVhc2VcbiAqIGRlY3JlbWVudHMgZmlyc3QgYW5kIHRoZW4gc2NhbnMgdGhlIHF1ZXVlIGZvciB0aGUgZmlyc3Qgd2FpdGVyIHRoZSBwcmVkaWNhdGVcbiAqIG5vdyBhZG1pdHMuIE9jY3VwYW5jeSBtYXkgdGhlcmVmb3JlIGRpcCBiZWxvdyB0aGUgY2VpbGluZyB3aGlsZSBjYWxsZXJzIHdhaXQsXG4gKiB3aGljaCBpcyBjb3JyZWN0OiB0aG9zZSBjYWxsZXJzIGFyZSBub3QgYWRtaXNzaWJsZSwgYW5kIGFkbWl0dGluZyB0aGVtIGFueXdheVxuICogaXMgZXhhY3RseSB0aGUgYm91bmQgdGhpcyBleGlzdHMgdG8gZW5mb3JjZS5cbiAqXG4gKiBPUkRFUi4gUmVsYXRpdmUgb3JkZXIgaXMgcHJlc2VydmVkIGFtb25nIHdhaXRlcnMgdGhlIHByZWRpY2F0ZSBhZG1pdHMsIHNvXG4gKiBjYWxsZXJzIHNoYXJpbmcgYSBrZXkgYXJlIHN0cmljdGx5IEZJRk8uIEFjcm9zcyBrZXlzIGl0IGlzIG5vdDogYSB3YWl0ZXIgdGhhdFxuICogY2Fubm90IHN0YXJ0IGlzIHNraXBwZWQgcmF0aGVyIHRoYW4gYmxvY2tpbmcgdGhlIHF1ZXVlIGJlaGluZCBpdCwgd2hpY2ggaXMgdGhlXG4gKiBwb2ludCDigJQgYSBibG9ja2VkIGJvcnJvd2VyIG11c3Qgbm90IHN0YWxsIGEgY2FsbGVyIHRoYXQgaXMgd2l0aGluIGl0cyBmbG9vci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleWVkQ29uY3VycmVuY3lHYXRlPEs+KG9wdHM6IEtleWVkQ29uY3VycmVuY3lHYXRlT3B0aW9uczxLPik6IEtleWVkQ29uY3VycmVuY3lHYXRlPEs+IHtcbiAgbGV0IHRvdGFsID0gMDtcbiAgY29uc3QgcGVyS2V5ID0gbmV3IE1hcDxLLCBudW1iZXI+KCk7XG4gIGNvbnN0IHdhaXRpbmc6IEFycmF5PHsga2V5OiBLOyBhZG1pdDogKCkgPT4gdm9pZCB9PiA9IFtdO1xuXG4gIGNvbnN0IHNuYXBzaG90ID0gKCk6IEtleWVkT2NjdXBhbmN5PEs+ID0+ICh7IHRvdGFsLCBwZXJLZXkgfSk7XG4gIGNvbnN0IG9jY3VwYW5jeSA9ICgpOiB2b2lkID0+IG9wdHMub25PY2N1cGFuY3k/LihzbmFwc2hvdCgpKTtcblxuICBjb25zdCBidW1wID0gKGtleTogSywgYnk6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG5leHQgPSAocGVyS2V5LmdldChrZXkpID8/IDApICsgYnk7XG4gICAgaWYgKG5leHQgPD0gMCkgcGVyS2V5LmRlbGV0ZShrZXkpOyBlbHNlIHBlcktleS5zZXQoa2V5LCBuZXh0KTtcbiAgICB0b3RhbCArPSBieTtcbiAgfTtcblxuICBjb25zdCBhZG1pc3NpYmxlID0gKGtleTogSyk6IGJvb2xlYW4gPT4gdG90YWwgPCBvcHRzLmxpbWl0KCkgJiYgb3B0cy5hZG1pdHMoa2V5LCBzbmFwc2hvdCgpKTtcblxuICBmdW5jdGlvbiByZWxlYXNlKGtleTogSyk6IHZvaWQge1xuICAgIGJ1bXAoa2V5LCAtMSk7XG4gICAgLy8gU2NhbiBpbiBhcnJpdmFsIG9yZGVyIGZvciB0aGUgZmlyc3Qgd2FpdGVyIHRoYXQgbWF5IG5vdyBzdGFydC4gTm90IHRoZVxuICAgIC8vIGJsaW5kIGhhbmQtb2ZmIG9mIHRoZSBjb3VudCBnYXRlIOKAlCBzZWUgdGhlIG5vdGUgYWJvdmUuXG4gICAgY29uc3QgaW5kZXggPSB3YWl0aW5nLmZpbmRJbmRleCgodykgPT4gYWRtaXNzaWJsZSh3LmtleSkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IFtuZXh0XSA9IHdhaXRpbmcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGJ1bXAobmV4dC5rZXksIDEpO1xuICAgICAgbmV4dC5hZG1pdCgpO1xuICAgIH1cbiAgICBvY2N1cGFuY3koKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgcnVuPFQ+KGtleTogSywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIGlmIChhZG1pc3NpYmxlKGtleSkpIHtcbiAgICAgICAgYnVtcChrZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0cy5vblF1ZXVlZD8uKGtleSwgd2FpdGluZy5sZW5ndGggKyAxLCBvcHRzLmxpbWl0KCkpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4geyB3YWl0aW5nLnB1c2goeyBrZXksIGFkbWl0OiByZXNvbHZlIH0pOyB9KTtcbiAgICAgIH1cbiAgICAgIG9jY3VwYW5jeSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWxlYXNlKGtleSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdGF0ZTogKCkgPT4gKHsgaW5GbGlnaHQ6IHRvdGFsLCB3YWl0aW5nOiB3YWl0aW5nLmxlbmd0aCwgcGVyS2V5IH0pLFxuICAgIHJlc2V0OiAoKSA9PiB7IHRvdGFsID0gMDsgcGVyS2V5LmNsZWFyKCk7IHdhaXRpbmcubGVuZ3RoID0gMDsgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -38,4 +38,4 @@ export function sleep(ms, opts = {}) {
38
38
  timer.unref?.();
39
39
  });
40
40
  }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY3VycmVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY29uY3VycmVuY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLEtBQVUsRUFDVixLQUFhLEVBQ2IsTUFBOEM7SUFFOUMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNwRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRWxDLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFbEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvRSxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxFQUFVLEVBQUUsSUFBSSxHQUF3QixFQUFFO0lBQzlELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLHNFQUFzRTtRQUN0RSxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUnVuIGB3b3JrZXJgIG92ZXIgYGl0ZW1zYCB3aXRoIGF0IG1vc3QgYGxpbWl0YCBpbnZvY2F0aW9ucyBpbiBmbGlnaHQuXG4gKiBQcmVzZXJ2ZXMgb3JkZXIgaW4gdGhlIHJldHVybmVkIGFycmF5LiBSZWplY3RzIG9uIHRoZSBmaXJzdCBlcnJvci5cbiAqXG4gKiBVc2UgdGhpcyBhbnl3aGVyZSB3ZSBmYW4gb3V0IE4gSFRUUCBjYWxscyBhbmQgd2FudCB0byBjYXAgY29uY3VycmVuY3lcbiAqIChlLmcuIHJlZ2lzdHJ5IGJsb2IgbW91bnRzLCBwYXJhbGxlbCBtYW5pZmVzdCBmZXRjaGVzKS4gSGFuZC1yb2xsZWQgdG9cbiAqIGF2b2lkIGFkZGluZyBhIGRlcCDigJQga2VlcHMgdGhlIGJ1bmRsZS9mb290cHJpbnQgdGlueS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbmN1cnJlbnQ8VCwgUj4oXG4gIGl0ZW1zOiBUW10sXG4gIGxpbWl0OiBudW1iZXIsXG4gIHdvcmtlcjogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IFByb21pc2U8Uj4sXG4pOiBQcm9taXNlPFJbXT4ge1xuICBpZiAobGltaXQgPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ3J1bkNvbmN1cnJlbnQ6IGxpbWl0IG11c3QgYmUgPj0gMScpO1xuICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgcmVzdWx0cyA9IG5ldyBBcnJheTxSPihpdGVtcy5sZW5ndGgpO1xuICBsZXQgbmV4dEluZGV4ID0gMDtcblxuICBjb25zdCBydW5uZXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogTWF0aC5taW4obGltaXQsIGl0ZW1zLmxlbmd0aCkgfSwgYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpID0gbmV4dEluZGV4Kys7XG4gICAgICBpZiAoaSA+PSBpdGVtcy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHJlc3VsdHNbaV0gPSBhd2FpdCB3b3JrZXIoaXRlbXNbaV0sIGkpO1xuICAgIH1cbiAgfSk7XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocnVubmVycyk7XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYWZ0ZXIgYG1zYC4gV2l0aCBgdW5yZWZgLCB0aGUgcGVuZGluZyB0aW1lciBuZXZlciBrZWVwcyBhIGRyYWluaW5nXG4gKiBwcm9jZXNzIGFsaXZlIChhIGJhY2tvZmYgd2FpdCBtdXN0IG5vdCBibG9jayBzaHV0ZG93bikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyLCBvcHRzOiB7IHVucmVmPzogYm9vbGVhbiB9ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgICAvLyBgdW5yZWZgIGlzIGFic2VudCBvbiB0aGUgdGltZXIgc2hpbSBzb21lIHRlc3QgZW52aXJvbm1lbnRzIGluc3RhbGwuXG4gICAgaWYgKG9wdHMudW5yZWYpIHRpbWVyLnVucmVmPy4oKTtcbiAgfSk7XG59XG4iXX0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY3VycmVuY3kuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25jdXJyZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBVSxFQUNWLEtBQWEsRUFDYixNQUE4QztJQUU5QyxJQUFJLEtBQUssR0FBRyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3BFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVsQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9FLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEVBQVUsRUFBRSxJQUFJLEdBQXdCLEVBQUU7SUFDOUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBSdW4gYHdvcmtlcmAgb3ZlciBgaXRlbXNgIHdpdGggYXQgbW9zdCBgbGltaXRgIGludm9jYXRpb25zIGluIGZsaWdodC5cbiAqIFByZXNlcnZlcyBvcmRlciBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuIFJlamVjdHMgb24gdGhlIGZpcnN0IGVycm9yLlxuICpcbiAqIFVzZSB0aGlzIGFueXdoZXJlIHdlIGZhbiBvdXQgTiBIVFRQIGNhbGxzIGFuZCB3YW50IHRvIGNhcCBjb25jdXJyZW5jeVxuICogKGUuZy4gcmVnaXN0cnkgYmxvYiBtb3VudHMsIHBhcmFsbGVsIG1hbmlmZXN0IGZldGNoZXMpLiBIYW5kLXJvbGxlZCB0b1xuICogYXZvaWQgYWRkaW5nIGEgZGVwIOKAlCBrZWVwcyB0aGUgYnVuZGxlL2Zvb3RwcmludCB0aW55LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29uY3VycmVudDxULCBSPihcbiAgaXRlbXM6IFRbXSxcbiAgbGltaXQ6IG51bWJlcixcbiAgd29ya2VyOiAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gUHJvbWlzZTxSPixcbik6IFByb21pc2U8UltdPiB7XG4gIGlmIChsaW1pdCA8IDEpIHRocm93IG5ldyBFcnJvcigncnVuQ29uY3VycmVudDogbGltaXQgbXVzdCBiZSA+PSAxJyk7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCByZXN1bHRzID0gbmV3IEFycmF5PFI+KGl0ZW1zLmxlbmd0aCk7XG4gIGxldCBuZXh0SW5kZXggPSAwO1xuXG4gIGNvbnN0IHJ1bm5lcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLm1pbihsaW1pdCwgaXRlbXMubGVuZ3RoKSB9LCBhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGkgPSBuZXh0SW5kZXgrKztcbiAgICAgIGlmIChpID49IGl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgcmVzdWx0c1tpXSA9IGF3YWl0IHdvcmtlcihpdGVtc1tpXSwgaSk7XG4gICAgfVxuICB9KTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChydW5uZXJzKTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhZnRlciBgbXNgLiBXaXRoIGB1bnJlZmAsIHRoZSBwZW5kaW5nIHRpbWVyIG5ldmVyIGtlZXBzIGEgZHJhaW5pbmdcbiAqIHByb2Nlc3MgYWxpdmUgKGEgYmFja29mZiB3YWl0IG11c3Qgbm90IGJsb2NrIHNodXRkb3duKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIsIG9wdHM6IHsgdW5yZWY/OiBib29sZWFuIH0gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICAgIC8vIGB1bnJlZmAgaXMgYWJzZW50IG9uIHRoZSB0aW1lciBzaGltIHNvbWUgdGVzdCBlbnZpcm9ubWVudHMgaW5zdGFsbC5cbiAgICBpZiAob3B0cy51bnJlZikgdGltZXIudW5yZWY/LigpO1xuICB9KTtcbn1cbiJdfQ==
@@ -33,4 +33,4 @@ export function installCrashHandlers(log = createLogger('process')) {
33
33
  fatal('Unhandled promise rejection', reason instanceof Error ? reason : new Error(String(reason)));
34
34
  });
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jhc2gtaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY3Jhc2gtaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUV0Qjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBRyxHQUFXLFlBQVksQ0FBQyxTQUFTLENBQUM7SUFDeEUsSUFBSSxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTTtRQUFFLE9BQU87SUFDekQsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVqQixNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxLQUFZLEVBQUUsS0FBSyxHQUE0QixFQUFFLEVBQVEsRUFBRTtRQUN0RixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRyw0RUFBNEU7UUFDNUUscURBQXFEO1FBQ3JELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFZLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xILE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxNQUFlLEVBQUUsRUFBRTtRQUNuRCxLQUFLLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ3dpbnN0b24nO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5sZXQgaW5zdGFsbGVkID0gZmFsc2U7XG5cbi8qKlxuICogSW5zdGFsbCBsYXN0LXJlc29ydCBwcm9jZXNzLWxldmVsIGZhdWx0IGhhbmRsZXJzLlxuICpcbiAqIFdpdGhvdXQgdGhlc2UsIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvciBhbiB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gaW4gYVxuICogZmlyZS1hbmQtZm9yZ2V0IGFzeW5jIHBhdGggY3Jhc2hlcyB0aGUgY29udGFpbmVyIHdpdGggTk8gc3RydWN0dXJlZCBsb2cgbGluZVxuICogKGFuZCBvbiBtb2Rlcm4gTm9kZSB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzIGJ5IGRlZmF1bHQpLiBUaGF0IG1ha2VzIGluY2lkZW50c1xuICogdW5kZWJ1Z2dhYmxlIGZyb20gbG9ncy4gVGhpcyBsb2dzIHRoZSBmYXVsdCB0aHJvdWdoIHRoZSBzZXJ2aWNlIGxvZ2dlciwgdGhlblxuICogZXhpdHMgbm9uLXplcm8gc28gdGhlIG9yY2hlc3RyYXRvciByZXN0YXJ0cyBhIENMRUFOIHByb2Nlc3Mg4oCUIGEgZmF1bHRlZFxuICogcHJvY2VzcyBpcyBpbiBhbiB1bmRlZmluZWQgc3RhdGUgYW5kIG11c3Qgbm90IGtlZXAgc2VydmluZy5cbiAqXG4gKiBUaGlzIGlzIG9ydGhvZ29uYWwgdG8gZ3JhY2VmdWwgU0lHVEVSTSBzaHV0ZG93biAoaGFuZGxlZCBpbiBhcGktc2VydmVyIC9cbiAqIHBsYXRmb3JtKTogdGhhdCBkcmFpbnMgb24gYSBub3JtYWwgc3RvcDsgdGhpcyBpcyB0aGUgYWJub3JtYWwtZmF1bHQgcGF0aC5cbiAqXG4gKiBJZGVtcG90ZW50IOKAlCBjYWxsIG9uY2UgYXQgcHJvY2VzcyBzdGFydDsgcmVwZWF0IGNhbGxzIGFyZSBuby1vcHMuIFNraXBwZWRcbiAqIHVuZGVyIE5PREVfRU5WPXRlc3Qgc28gaXQgbmV2ZXIgY29tcGV0ZXMgd2l0aCB0aGUgdGVzdCBydW5uZXIncyBvd24gaGFuZGxlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQ3Jhc2hIYW5kbGVycyhsb2c6IExvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncHJvY2VzcycpKTogdm9pZCB7XG4gIGlmIChpbnN0YWxsZWQgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykgcmV0dXJuO1xuICBpbnN0YWxsZWQgPSB0cnVlO1xuXG4gIGNvbnN0IGZhdGFsID0gKGtpbmQ6IHN0cmluZywgZXJyb3I6IEVycm9yLCBleHRyYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IHZvaWQgPT4ge1xuICAgIGxvZy5lcnJvcihgJHtraW5kfSDigJQgZXhpdGluZyBmb3IgcmVzdGFydGAsIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjaywgLi4uZXh0cmEgfSk7XG4gICAgLy8gR2l2ZSB3aW5zdG9uIGEgdGljayB0byBmbHVzaCBhc3luYyB0cmFuc3BvcnRzLCB0aGVuIGV4aXQuIGB1bnJlZmAgc28gdGhpc1xuICAgIC8vIHRpbWVyIG5ldmVyIGtlZXBzIGFuIG90aGVyd2lzZS1pZGxlIHByb2Nlc3MgYWxpdmUuXG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoMSksIDEwMCkudW5yZWYoKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnJvcjogRXJyb3IsIG9yaWdpbjogc3RyaW5nKSA9PiBmYXRhbCgnVW5jYXVnaHQgZXhjZXB0aW9uJywgZXJyb3IsIHsgb3JpZ2luIH0pKTtcbiAgcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbjogdW5rbm93bikgPT4ge1xuICAgIGZhdGFsKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVhc29uKSkpO1xuICB9KTtcbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jhc2gtaGFuZGxlcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jcmFzaC1oYW5kbGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0MsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBRXRCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFHLEdBQVcsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUN4RSxJQUFJLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNO1FBQUUsT0FBTztJQUN6RCxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBRWpCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBWSxFQUFFLEtBQVksRUFBRSxLQUFLLEdBQTRCLEVBQUUsRUFBUSxFQUFFO1FBQ3RGLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLDRFQUE0RTtRQUM1RSxxREFBcUQ7UUFDckQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakQsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQVksRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEgsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE1BQWUsRUFBRSxFQUFFO1FBQ25ELEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmxldCBpbnN0YWxsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBJbnN0YWxsIGxhc3QtcmVzb3J0IHByb2Nlc3MtbGV2ZWwgZmF1bHQgaGFuZGxlcnMuXG4gKlxuICogV2l0aG91dCB0aGVzZSwgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIG9yIGFuIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiBpbiBhXG4gKiBmaXJlLWFuZC1mb3JnZXQgYXN5bmMgcGF0aCBjcmFzaGVzIHRoZSBjb250YWluZXIgd2l0aCBOTyBzdHJ1Y3R1cmVkIGxvZyBsaW5lXG4gKiAoYW5kIG9uIG1vZGVybiBOb2RlIHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MgYnkgZGVmYXVsdCkuIFRoYXQgbWFrZXMgaW5jaWRlbnRzXG4gKiB1bmRlYnVnZ2FibGUgZnJvbSBsb2dzLiBUaGlzIGxvZ3MgdGhlIGZhdWx0IHRocm91Z2ggdGhlIHNlcnZpY2UgbG9nZ2VyLCB0aGVuXG4gKiBleGl0cyBub24temVybyBzbyB0aGUgb3JjaGVzdHJhdG9yIHJlc3RhcnRzIGEgQ0xFQU4gcHJvY2VzcyDigJQgYSBmYXVsdGVkXG4gKiBwcm9jZXNzIGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZSBhbmQgbXVzdCBub3Qga2VlcCBzZXJ2aW5nLlxuICpcbiAqIFRoaXMgaXMgb3J0aG9nb25hbCB0byBncmFjZWZ1bCBTSUdURVJNIHNodXRkb3duIChoYW5kbGVkIGluIGFwaS1zZXJ2ZXIgL1xuICogcGxhdGZvcm0pOiB0aGF0IGRyYWlucyBvbiBhIG5vcm1hbCBzdG9wOyB0aGlzIGlzIHRoZSBhYm5vcm1hbC1mYXVsdCBwYXRoLlxuICpcbiAqIElkZW1wb3RlbnQg4oCUIGNhbGwgb25jZSBhdCBwcm9jZXNzIHN0YXJ0OyByZXBlYXQgY2FsbHMgYXJlIG5vLW9wcy4gU2tpcHBlZFxuICogdW5kZXIgTk9ERV9FTlY9dGVzdCBzbyBpdCBuZXZlciBjb21wZXRlcyB3aXRoIHRoZSB0ZXN0IHJ1bm5lcidzIG93biBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxDcmFzaEhhbmRsZXJzKGxvZzogTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdwcm9jZXNzJykpOiB2b2lkIHtcbiAgaWYgKGluc3RhbGxlZCB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSByZXR1cm47XG4gIGluc3RhbGxlZCA9IHRydWU7XG5cbiAgY29uc3QgZmF0YWwgPSAoa2luZDogc3RyaW5nLCBlcnJvcjogRXJyb3IsIGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogdm9pZCA9PiB7XG4gICAgbG9nLmVycm9yKGAke2tpbmR9IOKAlCBleGl0aW5nIGZvciByZXN0YXJ0YCwgeyBlcnJvcjogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrLCAuLi5leHRyYSB9KTtcbiAgICAvLyBHaXZlIHdpbnN0b24gYSB0aWNrIHRvIGZsdXNoIGFzeW5jIHRyYW5zcG9ydHMsIHRoZW4gZXhpdC4gYHVucmVmYCBzbyB0aGlzXG4gICAgLy8gdGltZXIgbmV2ZXIga2VlcHMgYW4gb3RoZXJ3aXNlLWlkbGUgcHJvY2VzcyBhbGl2ZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHByb2Nlc3MuZXhpdCgxKSwgMTAwKS51bnJlZigpO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yOiBFcnJvciwgb3JpZ2luOiBzdHJpbmcpID0+IGZhdGFsKCdVbmNhdWdodCBleGNlcHRpb24nLCBlcnJvciwgeyBvcmlnaW4gfSkpO1xuICBwcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uOiB1bmtub3duKSA9PiB7XG4gICAgZmF0YWwoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZWFzb24pKSk7XG4gIH0pO1xufVxuIl19
package/lib/utils/date.js CHANGED
@@ -19,4 +19,4 @@
19
19
  * would hide a corrupt row behind a plausible-looking response.
20
20
  */
21
21
  export const isoOrNull = (d) => (d ? new Date(d).toISOString() : null);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsNENBQTRDO0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBNEMsRUFBaUIsRUFBRSxDQUN2RixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKiBEYXRlIGNvZXJjaW9ucyBmb3IgdGhlIEpTT04gYm91bmRhcnkuICovXG5cbi8qKlxuICogQSBudWxsYWJsZSB0aW1lc3RhbXAgYXMgYW4gSVNPLTg2MDEgc3RyaW5nLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBubyBkYXRlLlxuICpcbiAqIFRoZSBzaGFwZSBldmVyeSBBUEkgcmVzcG9uc2UgbmVlZHMgYXQgdGhlIERC4oaSSlNPTiBib3VuZGFyeTogUG9zdGdyZXMgYW5kXG4gKiBNb25nbyBoYW5kIGJhY2sgYERhdGUgfCBudWxsYCwgdGhlIHdpcmUgd2FudHMgYHN0cmluZyB8IG51bGxgLCBhbmQgYSBiYXJlXG4gKiBgcm93Lng/LnRvSVNPU3RyaW5nKCkgPz8gbnVsbGAgYnJlYWtzIHRoZSBtb21lbnQgdGhlIGRyaXZlciByZXR1cm5zIGEgc3RyaW5nXG4gKiBpbnN0ZWFkIChNb25nbyBhZ2dyZWdhdGlvbiBvdXRwdXQsIGEgYDo6dGV4dGAgY2FzdCwgYSBjYWNoZWQgcm93IHJlaHlkcmF0ZWRcbiAqIGZyb20gSlNPTikuIE5vcm1hbGl6aW5nIHRocm91Z2ggYG5ldyBEYXRlKGQpYCBoYW5kbGVzIGJvdGguXG4gKlxuICogRmFsc3kgaW4sIGBudWxsYCBvdXQg4oCUIHdoaWNoIGZvbGRzIHRoZSBlcG9jaCAoYG5ldyBEYXRlKDApYCkgdG8gYG51bGxgIHRvby5cbiAqIFRoYXQgaXMgaW50ZW50aW9uYWwgYW5kIG1hdGNoZXMgZXZlcnkgaGFuZC1yb2xsZWQgY29weSB0aGlzIHJlcGxhY2VzOiBhXG4gKiB6ZXJvIHRpbWVzdGFtcCBpbiB0aGlzIGNvZGViYXNlIG1lYW5zIFwidW5zZXRcIiwgbmV2ZXIgMTk3MC5cbiAqXG4gKiBUaHJvd3MgYFJhbmdlRXJyb3JgIG9uIGFuIHVucGFyc2VhYmxlIHN0cmluZywgZGVsaWJlcmF0ZWx5OiBhIG1hbGZvcm1lZFxuICogdGltZXN0YW1wIGlzIGEgZGF0YS1pbnRlZ3JpdHkgcHJvYmxlbSwgYW5kIHNpbGVudGx5IHNlcnZpbmcgYG51bGxgIGZvciBpdFxuICogd291bGQgaGlkZSBhIGNvcnJ1cHQgcm93IGJlaGluZCBhIHBsYXVzaWJsZS1sb29raW5nIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY29uc3QgaXNvT3JOdWxsID0gKGQ6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCA9PlxuICAoZCA/IG5ldyBEYXRlKGQpLnRvSVNPU3RyaW5nKCkgOiBudWxsKTtcbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qyw0Q0FBNEM7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUE0QyxFQUFpQixFQUFFLENBQ3ZGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqIERhdGUgY29lcmNpb25zIGZvciB0aGUgSlNPTiBib3VuZGFyeS4gKi9cblxuLyoqXG4gKiBBIG51bGxhYmxlIHRpbWVzdGFtcCBhcyBhbiBJU08tODYwMSBzdHJpbmcsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIGRhdGUuXG4gKlxuICogVGhlIHNoYXBlIGV2ZXJ5IEFQSSByZXNwb25zZSBuZWVkcyBhdCB0aGUgRELihpJKU09OIGJvdW5kYXJ5OiBQb3N0Z3JlcyBhbmRcbiAqIE1vbmdvIGhhbmQgYmFjayBgRGF0ZSB8IG51bGxgLCB0aGUgd2lyZSB3YW50cyBgc3RyaW5nIHwgbnVsbGAsIGFuZCBhIGJhcmVcbiAqIGByb3cueD8udG9JU09TdHJpbmcoKSA/PyBudWxsYCBicmVha3MgdGhlIG1vbWVudCB0aGUgZHJpdmVyIHJldHVybnMgYSBzdHJpbmdcbiAqIGluc3RlYWQgKE1vbmdvIGFnZ3JlZ2F0aW9uIG91dHB1dCwgYSBgOjp0ZXh0YCBjYXN0LCBhIGNhY2hlZCByb3cgcmVoeWRyYXRlZFxuICogZnJvbSBKU09OKS4gTm9ybWFsaXppbmcgdGhyb3VnaCBgbmV3IERhdGUoZClgIGhhbmRsZXMgYm90aC5cbiAqXG4gKiBGYWxzeSBpbiwgYG51bGxgIG91dCDigJQgd2hpY2ggZm9sZHMgdGhlIGVwb2NoIChgbmV3IERhdGUoMClgKSB0byBgbnVsbGAgdG9vLlxuICogVGhhdCBpcyBpbnRlbnRpb25hbCBhbmQgbWF0Y2hlcyBldmVyeSBoYW5kLXJvbGxlZCBjb3B5IHRoaXMgcmVwbGFjZXM6IGFcbiAqIHplcm8gdGltZXN0YW1wIGluIHRoaXMgY29kZWJhc2UgbWVhbnMgXCJ1bnNldFwiLCBuZXZlciAxOTcwLlxuICpcbiAqIFRocm93cyBgUmFuZ2VFcnJvcmAgb24gYW4gdW5wYXJzZWFibGUgc3RyaW5nLCBkZWxpYmVyYXRlbHk6IGEgbWFsZm9ybWVkXG4gKiB0aW1lc3RhbXAgaXMgYSBkYXRhLWludGVncml0eSBwcm9ibGVtLCBhbmQgc2lsZW50bHkgc2VydmluZyBgbnVsbGAgZm9yIGl0XG4gKiB3b3VsZCBoaWRlIGEgY29ycnVwdCByb3cgYmVoaW5kIGEgcGxhdXNpYmxlLWxvb2tpbmcgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc29Pck51bGwgPSAoZDogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsID0+XG4gIChkID8gbmV3IERhdGUoZCkudG9JU09TdHJpbmcoKSA6IG51bGwpO1xuIl19
package/lib/utils/dsse.js CHANGED
@@ -52,4 +52,4 @@ export function extractPredicate(stdout, predicateType) {
52
52
  }
53
53
  return predicate;
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kc3NlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsb0ZBQW9GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBRS9EOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLGFBQXFCO0lBQ3BFLElBQUksU0FBUyxHQUFtQyxJQUFJLENBQUM7SUFDckQsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUFFLFNBQVM7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXlCLENBQUM7WUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO2dCQUFFLFNBQVM7WUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUdyRixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUMsYUFBYSxLQUFLLGFBQWEsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDaEgsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFvQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asd0JBQXdCO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIERTU0UtZW52ZWxvcGUgcGFyc2luZyBmb3IgY29zaWduIGF0dGVzdGF0aW9uIG91dHB1dC5cbiAqXG4gKiBgY29zaWduIHZlcmlmeS1hdHRlc3RhdGlvbmAgcHJpbnRzIG9uZSBEU1NFIGVudmVsb3BlIHBlciBWRVJJRklFRCBhdHRlc3RhdGlvbixcbiAqIG9uZSBKU09OIG9iamVjdCBwZXIgbGluZTpcbiAqIGB7IHBheWxvYWRUeXBlLCBwYXlsb2FkOiBiYXNlNjQoaW4tdG90byBzdGF0ZW1lbnQpLCBzaWduYXR1cmVzIH1gLlxuICogU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBoYXMgYWxyZWFkeSBoYXBwZW5lZCBpbiBjb3NpZ24gYnkgdGhlIHRpbWUgd2Ugc2VlIHRoaXNcbiAqIOKAlCB0aGlzIG1vZHVsZSBvbmx5IGRlY29kZXMgd2hhdCBjb3NpZ24gdm91Y2hlZCBmb3IuXG4gKlxuICogVGhpcyBsaXZlcyBpbiBhcGktY29yZSBiZWNhdXNlIEJPVEggdGhlIHBsdWdpbiBzZXJ2aWNlIChidWlsZC10aW1lIFNCT00gcmVhZClcbiAqIGFuZCB0aGUgaW1hZ2UtcmVnaXN0cnkgc2VydmljZSAocmVnaXN0cnktc2lkZSBzaWduZWQtU0JPTSByZWFkKSBwYXJzZSB0aGUgc2FtZVxuICogb3V0cHV0LiBUd28gaGFuZC1jb3BpZWQgcGFyc2UgbG9vcHMgaW4gc3VwcGx5LWNoYWluIHZlcmlmaWNhdGlvbiBjb2RlIGlzIGFcbiAqIHNlY3VyaXR5IHJpc2ssIG5vdCB1bnRpZGluZXNzOiBhIGZpeCBhcHBsaWVkIHRvIG9uZSBjb3B5IHNpbGVudGx5IGxlYXZlcyB0aGVcbiAqIG90aGVyIGFjY2VwdGluZyB3aGF0IGl0IHNob3VsZCBub3QuXG4gKlxuICogQ2FsbGVycyBrZWVwIHRoZWlyIE9XTiBub3QtZm91bmQgcG9saWN5IG9uIHRvcCAodGhyb3cgdnMuIHJldHVybiBudWxsKSDigJRcbiAqIHRoYXQgaXMgYSBwZXItc2VydmljZSBkZWNpc2lvbiwgdGhlIHBhcnNlIGlzIG5vdC5cbiAqL1xuXG4vKiogaW4tdG90byBwcmVkaWNhdGUgdHlwZSBmb3IgYW4gU1BEWCBTQk9NLCBhcyBjb3NpZ24ncyBgLS10eXBlIHNwZHhqc29uYCBlbWl0cy4gKi9cbmV4cG9ydCBjb25zdCBTUERYX1BSRURJQ0FURV9UWVBFID0gJ2h0dHBzOi8vc3BkeC5kZXYvRG9jdW1lbnQnO1xuXG4vKipcbiAqIFJldHVybiB0aGUgcHJlZGljYXRlIG9mIHRoZSBMQVNUIGVudmVsb3BlIGluIGBzdGRvdXRgIHdob3NlIGluLXRvdG8gc3RhdGVtZW50XG4gKiBjYXJyaWVzIGBwcmVkaWNhdGVUeXBlYCwgb3IgbnVsbCB3aGVuIG5vbmUgZG9lcy5cbiAqXG4gKiBMQVNULCBub3QgZmlyc3Q6IGEgcmVidWlsZCByZS1hdHRlc3RzIHRoZSBzYW1lIGRpZ2VzdCBhbmQgY29zaWduIGxpc3RzXG4gKiBhdHRlc3RhdGlvbnMgb2xkZXN0LWZpcnN0LCBzbyB0aGUgbmV3ZXN0IGF0dGVzdGF0aW9uIGlzIHRoZSBmaW5hbCBsaW5lLlxuICpcbiAqIExpbmVzIHRoYXQgYXJlIG5vdCBwYXJzZWFibGUgZW52ZWxvcGVzIGFyZSBza2lwcGVkIHJhdGhlciB0aGFuIGZhdGFsIOKAlCBjb3NpZ25cbiAqIHByaW50cyBub3RoaW5nIGVsc2Ugb24gc3Rkb3V0IHRvZGF5LCBidXQgc3RyYXkgb3V0cHV0IG11c3Qgbm90IHR1cm4gYSB2YWxpZFxuICogYXR0ZXN0YXRpb24gaW50byBhIHZlcmlmaWNhdGlvbiBmYWlsdXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFByZWRpY2F0ZShzdGRvdXQ6IHN0cmluZywgcHJlZGljYXRlVHlwZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgbGV0IHByZWRpY2F0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsID0gbnVsbDtcbiAgZm9yIChjb25zdCBsaW5lIG9mIHN0ZG91dC5zcGxpdCgnXFxuJykpIHtcbiAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSkgY29udGludWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZSh0cmltbWVkKSBhcyB7IHBheWxvYWQ/OiBzdHJpbmcgfTtcbiAgICAgIGlmICghZW52ZWxvcGUucGF5bG9hZCkgY29udGludWU7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGVudmVsb3BlLnBheWxvYWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKSkgYXMge1xuICAgICAgICBwcmVkaWNhdGVUeXBlPzogc3RyaW5nO1xuICAgICAgICBwcmVkaWNhdGU/OiB1bmtub3duO1xuICAgICAgfTtcbiAgICAgIGlmIChzdGF0ZW1lbnQucHJlZGljYXRlVHlwZSA9PT0gcHJlZGljYXRlVHlwZSAmJiBzdGF0ZW1lbnQucHJlZGljYXRlICYmIHR5cGVvZiBzdGF0ZW1lbnQucHJlZGljYXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBwcmVkaWNhdGUgPSBzdGF0ZW1lbnQucHJlZGljYXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTm90IGFuIGVudmVsb3BlIGxpbmUuXG4gICAgfVxuICB9XG4gIHJldHVybiBwcmVkaWNhdGU7XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNzZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Rzc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7QUFFL0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsYUFBcUI7SUFDcEUsSUFBSSxTQUFTLEdBQW1DLElBQUksQ0FBQztJQUNyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUN2QyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBeUIsQ0FBQztZQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Z0JBQUUsU0FBUztZQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBR3JGLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQyxhQUFhLEtBQUssYUFBYSxJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoSCxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQW9DLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx3QkFBd0I7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRFNTRS1lbnZlbG9wZSBwYXJzaW5nIGZvciBjb3NpZ24gYXR0ZXN0YXRpb24gb3V0cHV0LlxuICpcbiAqIGBjb3NpZ24gdmVyaWZ5LWF0dGVzdGF0aW9uYCBwcmludHMgb25lIERTU0UgZW52ZWxvcGUgcGVyIFZFUklGSUVEIGF0dGVzdGF0aW9uLFxuICogb25lIEpTT04gb2JqZWN0IHBlciBsaW5lOlxuICogYHsgcGF5bG9hZFR5cGUsIHBheWxvYWQ6IGJhc2U2NChpbi10b3RvIHN0YXRlbWVudCksIHNpZ25hdHVyZXMgfWAuXG4gKiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIGNvc2lnbiBieSB0aGUgdGltZSB3ZSBzZWUgdGhpc1xuICog4oCUIHRoaXMgbW9kdWxlIG9ubHkgZGVjb2RlcyB3aGF0IGNvc2lnbiB2b3VjaGVkIGZvci5cbiAqXG4gKiBUaGlzIGxpdmVzIGluIGFwaS1jb3JlIGJlY2F1c2UgQk9USCB0aGUgcGx1Z2luIHNlcnZpY2UgKGJ1aWxkLXRpbWUgU0JPTSByZWFkKVxuICogYW5kIHRoZSBpbWFnZS1yZWdpc3RyeSBzZXJ2aWNlIChyZWdpc3RyeS1zaWRlIHNpZ25lZC1TQk9NIHJlYWQpIHBhcnNlIHRoZSBzYW1lXG4gKiBvdXRwdXQuIFR3byBoYW5kLWNvcGllZCBwYXJzZSBsb29wcyBpbiBzdXBwbHktY2hhaW4gdmVyaWZpY2F0aW9uIGNvZGUgaXMgYVxuICogc2VjdXJpdHkgcmlzaywgbm90IHVudGlkaW5lc3M6IGEgZml4IGFwcGxpZWQgdG8gb25lIGNvcHkgc2lsZW50bHkgbGVhdmVzIHRoZVxuICogb3RoZXIgYWNjZXB0aW5nIHdoYXQgaXQgc2hvdWxkIG5vdC5cbiAqXG4gKiBDYWxsZXJzIGtlZXAgdGhlaXIgT1dOIG5vdC1mb3VuZCBwb2xpY3kgb24gdG9wICh0aHJvdyB2cy4gcmV0dXJuIG51bGwpIOKAlFxuICogdGhhdCBpcyBhIHBlci1zZXJ2aWNlIGRlY2lzaW9uLCB0aGUgcGFyc2UgaXMgbm90LlxuICovXG5cbi8qKiBpbi10b3RvIHByZWRpY2F0ZSB0eXBlIGZvciBhbiBTUERYIFNCT00sIGFzIGNvc2lnbidzIGAtLXR5cGUgc3BkeGpzb25gIGVtaXRzLiAqL1xuZXhwb3J0IGNvbnN0IFNQRFhfUFJFRElDQVRFX1RZUEUgPSAnaHR0cHM6Ly9zcGR4LmRldi9Eb2N1bWVudCc7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmVkaWNhdGUgb2YgdGhlIExBU1QgZW52ZWxvcGUgaW4gYHN0ZG91dGAgd2hvc2UgaW4tdG90byBzdGF0ZW1lbnRcbiAqIGNhcnJpZXMgYHByZWRpY2F0ZVR5cGVgLCBvciBudWxsIHdoZW4gbm9uZSBkb2VzLlxuICpcbiAqIExBU1QsIG5vdCBmaXJzdDogYSByZWJ1aWxkIHJlLWF0dGVzdHMgdGhlIHNhbWUgZGlnZXN0IGFuZCBjb3NpZ24gbGlzdHNcbiAqIGF0dGVzdGF0aW9ucyBvbGRlc3QtZmlyc3QsIHNvIHRoZSBuZXdlc3QgYXR0ZXN0YXRpb24gaXMgdGhlIGZpbmFsIGxpbmUuXG4gKlxuICogTGluZXMgdGhhdCBhcmUgbm90IHBhcnNlYWJsZSBlbnZlbG9wZXMgYXJlIHNraXBwZWQgcmF0aGVyIHRoYW4gZmF0YWwg4oCUIGNvc2lnblxuICogcHJpbnRzIG5vdGhpbmcgZWxzZSBvbiBzdGRvdXQgdG9kYXksIGJ1dCBzdHJheSBvdXRwdXQgbXVzdCBub3QgdHVybiBhIHZhbGlkXG4gKiBhdHRlc3RhdGlvbiBpbnRvIGEgdmVyaWZpY2F0aW9uIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UHJlZGljYXRlKHN0ZG91dDogc3RyaW5nLCBwcmVkaWNhdGVUeXBlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwge1xuICBsZXQgcHJlZGljYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aCgneycpKSBjb250aW51ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHRyaW1tZWQpIGFzIHsgcGF5bG9hZD86IHN0cmluZyB9O1xuICAgICAgaWYgKCFlbnZlbG9wZS5wYXlsb2FkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20oZW52ZWxvcGUucGF5bG9hZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpKSBhcyB7XG4gICAgICAgIHByZWRpY2F0ZVR5cGU/OiBzdHJpbmc7XG4gICAgICAgIHByZWRpY2F0ZT86IHVua25vd247XG4gICAgICB9O1xuICAgICAgaWYgKHN0YXRlbWVudC5wcmVkaWNhdGVUeXBlID09PSBwcmVkaWNhdGVUeXBlICYmIHN0YXRlbWVudC5wcmVkaWNhdGUgJiYgdHlwZW9mIHN0YXRlbWVudC5wcmVkaWNhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHN0YXRlbWVudC5wcmVkaWNhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBOb3QgYW4gZW52ZWxvcGUgbGluZS5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWRpY2F0ZTtcbn1cbiJdfQ==
@@ -8,6 +8,17 @@
8
8
  * than re-derived (see `MAX_PAGE_LIMIT` / `DEFAULT_PAGE_LIMIT` in
9
9
  * `validation/common-schemas.ts`).
10
10
  */
11
+ /**
12
+ * A camelCase name as the env-var fragment that configures it:
13
+ * `apiCalls` → `API_CALLS`, `supportPremiumContacts` → `SUPPORT_PREMIUM_CONTACTS`.
14
+ *
15
+ * Here, in the env module, because the two callers are in different PACKAGES —
16
+ * `quota-tiers.ts` builds `QUOTA_TIER_<TIER>_<LIMIT>` and api/quota's config
17
+ * builds `QUOTA_DEFAULT_<TYPE>` — and each had its own copy of the same regex.
18
+ * Two spellings of one transform is a drift waiting to happen: "fixing" either
19
+ * one would silently rename half of an operator's configured knobs.
20
+ */
21
+ export declare function envNameFragment(name: string): string;
11
22
  /**
12
23
  * Parse an integer env var. Unset / blank / not a clean integer string → `def`.
13
24
  * Optional `min`/`max` clamp the result (applied after the default).
package/lib/utils/env.js CHANGED
@@ -10,6 +10,19 @@
10
10
  * than re-derived (see `MAX_PAGE_LIMIT` / `DEFAULT_PAGE_LIMIT` in
11
11
  * `validation/common-schemas.ts`).
12
12
  */
13
+ /**
14
+ * A camelCase name as the env-var fragment that configures it:
15
+ * `apiCalls` → `API_CALLS`, `supportPremiumContacts` → `SUPPORT_PREMIUM_CONTACTS`.
16
+ *
17
+ * Here, in the env module, because the two callers are in different PACKAGES —
18
+ * `quota-tiers.ts` builds `QUOTA_TIER_<TIER>_<LIMIT>` and api/quota's config
19
+ * builds `QUOTA_DEFAULT_<TYPE>` — and each had its own copy of the same regex.
20
+ * Two spellings of one transform is a drift waiting to happen: "fixing" either
21
+ * one would silently rename half of an operator's configured knobs.
22
+ */
23
+ export function envNameFragment(name) {
24
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();
25
+ }
13
26
  /**
14
27
  * Parse an integer env var. Unset / blank / not a clean integer string → `def`.
15
28
  * Optional `min`/`max` clamp the result (applied after the default).
@@ -80,4 +93,4 @@ export function isReadReplicaConfigured() {
80
93
  return false;
81
94
  return envStr('DB_READ_HOST', '').trim().length > 0;
82
95
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsSUFBcUM7SUFDckYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxHQUFHLE9BQU8sS0FBSyxFQUFFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMxRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTO1FBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUztRQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFZLEVBQUUsR0FBWTtJQUNoRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFELElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBWSxFQUFFLEdBQVc7SUFDOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEQsT0FBTyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFR5cGVkIGVudmlyb25tZW50LXZhcmlhYmxlIHJlYWRlcnMgd2l0aCBjb25zaXN0ZW50IHBhcnNpbmcgKyBkZWZhdWx0cy5cbiAqXG4gKiBIYW5kLXJvbGxlZCBgcGFyc2VJbnQocHJvY2Vzcy5lbnYuWCB8fCAn4oCmJywgMTApYCAvIGBwcm9jZXNzLmVudi5YID09PSAndHJ1ZSdgXG4gKiBkcmlmdHMgKHRoZSBzYW1lIHZhciBwYXJzZWQgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdHMgaW4gZGlmZmVyZW50IHBhY2thZ2VzKVxuICogYW5kIHNpbGVudGx5IHJldHVybnMgdGhlIGRlZmF1bHQgb24gYSB0eXBvJ2QgbmFtZS4gVGhlc2UgaGVscGVycyBjZW50cmFsaXplIHRoZSBwYXJzaW5nIHNvIGEgdmFsdWVcbiAqIGlzIHJlYWQgdGhlIHNhbWUgd2F5IGV2ZXJ5d2hlcmUsIGFuZCBtYWtlIHNoYXJlZCBjb25zdGFudHMgaW1wb3J0YWJsZSByYXRoZXJcbiAqIHRoYW4gcmUtZGVyaXZlZCAoc2VlIGBNQVhfUEFHRV9MSU1JVGAgLyBgREVGQVVMVF9QQUdFX0xJTUlUYCBpblxuICogYHZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMudHNgKS5cbiAqL1xuXG4vKipcbiAqIFBhcnNlIGFuIGludGVnZXIgZW52IHZhci4gVW5zZXQgLyBibGFuayAvIG5vdCBhIGNsZWFuIGludGVnZXIgc3RyaW5nIOKGkiBgZGVmYC5cbiAqIE9wdGlvbmFsIGBtaW5gL2BtYXhgIGNsYW1wIHRoZSByZXN1bHQgKGFwcGxpZWQgYWZ0ZXIgdGhlIGRlZmF1bHQpLlxuICpcbiAqIFNUUklDVCBvbiBwdXJwb3NlOiBgcGFyc2VJbnRgIGFjY2VwdHMgYDUwLjVgICjihpIgNTApIGFuZCBgMTJhYmNgICjihpIgMTIpLCB3aGljaFxuICogaXMgaG93IGEgdHlwbydkIHF1b3RhIGxpbWl0IG9yIHRpbWVvdXQgc2lsZW50bHkgc2hpcHMgYSB2YWx1ZSBub2JvZHkgd3JvdGUuXG4gKiBBbnl0aGluZyB0aGF0IGlzbid0IGAtP1xcZCtgIGZhbGxzIGJhY2sgdG8gdGhlIGNvZGUgZGVmYXVsdCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52SW50KG5hbWU6IHN0cmluZywgZGVmOiBudW1iZXIsIG9wdHM/OiB7IG1pbj86IG51bWJlcjsgbWF4PzogbnVtYmVyIH0pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgY29uc3QgdHJpbW1lZCA9IHJhdz8udHJpbSgpID8/ICcnO1xuICBsZXQgbiA9IHRyaW1tZWQgIT09ICcnICYmIC9eWystXT9cXGQrJC8udGVzdCh0cmltbWVkKSA/IE51bWJlci5wYXJzZUludCh0cmltbWVkLCAxMCkgOiBkZWY7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSBuID0gZGVmO1xuICBpZiAob3B0cz8ubWluICE9PSB1bmRlZmluZWQpIG4gPSBNYXRoLm1heChvcHRzLm1pbiwgbik7XG4gIGlmIChvcHRzPy5tYXggIT09IHVuZGVmaW5lZCkgbiA9IE1hdGgubWluKG9wdHMubWF4LCBuKTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogUGFyc2UgYSBib29sZWFuIGVudiB2YXIuIGB0cnVlYC9gMWAvYHllc2Ag4oaSIHRydWUsIGBmYWxzZWAvYDBgL2Bub2Ag4oaSIGZhbHNlXG4gKiAoY2FzZS1pbnNlbnNpdGl2ZSk7IHVuc2V0IC8gYmxhbmsgLyB1bnJlY29nbml6ZWQg4oaSIGBkZWZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52Qm9vbChuYW1lOiBzdHJpbmcsIGRlZjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gZGVmO1xuICBjb25zdCB2ID0gcmF3LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJyB8fCB2ID09PSAneWVzJykgcmV0dXJuIHRydWU7XG4gIGlmICh2ID09PSAnZmFsc2UnIHx8IHYgPT09ICcwJyB8fCB2ID09PSAnbm8nKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkZWY7XG59XG5cbi8qKiBSZWFkIGEgc3RyaW5nIGVudiB2YXI7IHVuc2V0IC8gYmxhbmsg4oaSIGBkZWZgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudlN0cihuYW1lOiBzdHJpbmcsIGRlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIHJldHVybiByYXcgPT09IHVuZGVmaW5lZCB8fCByYXcudHJpbSgpID09PSAnJyA/IGRlZiA6IHJhdztcbn1cblxuLyoqXG4gKiBJcyBhIFBvc3RncmVzIHJlYWQgcmVwbGljYSBjb25maWd1cmVkIEFORCBzd2l0Y2hlZCBvbj9cbiAqXG4gKiBMaXZlcyBpbiBhcGktY29yZSwgbm90IHBpcGVsaW5lLWRhdGEsIGV2ZW4gdGhvdWdoIHRoZSByZWFkIFBPT0wgZG9lcy4gSXQgaXNcbiAqIHB1cmUgZW52IGxvZ2ljIHdpdGggbm8gZGF0YWJhc2UgZGVwZW5kZW5jeSwgYW5kIEJPVEggcGFja2FnZXMgbmVlZCBpdDpcbiAqIHBpcGVsaW5lLWRhdGEgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgdGhlIHBvb2wsIGFuZCBhcGktc2VydmVyJ3NcbiAqIHRlbmFudC1jb250ZXh0IG1pZGRsZXdhcmUgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGNyb3NzLXJlcXVlc3Qgd3JpdGUgcGluIGlzIGluXG4gKiBwbGF5IGF0IGFsbC5cbiAqXG4gKiBXSFkgVEhBVCBQTEFDRU1FTlQgSVMgTE9BRC1CRUFSSU5HLCBub3QgdGFzdGUuIGFwaS1zZXJ2ZXIncyBtaWRkbGV3YXJlIHJ1bnMgaW5cbiAqIEVWRVJZIHNlcnZpY2UsIGFuZCA5MSB0ZXN0IHN1aXRlcyBzdHViIGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhYCB3aXRoXG4gKiBgc3R1Yk1vZHVsZWAsIHdoaWNoIFRIUk9XUyBvbiBhY2Nlc3MgdG8gYW4gZXhwb3J0IHRoZSBzdWl0ZSBkaWQgbm90IG92ZXJyaWRlIOKAlFxuICogZGVsaWJlcmF0ZWx5LCB0byBmb3JjZSBleHBsaWNpdG5lc3MuIFNvIHJlYWNoaW5nIGludG8gcGlwZWxpbmUtZGF0YSBmcm9tIHRoZVxuICogbWlkZGxld2FyZSB0dXJuZWQgZXZlcnkgb25lIG9mIHRob3NlIHN1aXRlcyBpbnRvIGEgNTAwLCBhbmQgcGF0Y2hpbmcgOTEgc3R1YnNcbiAqIHdvdWxkIG9ubHkgZGVmZXIgdGhlIG5leHQgb25lLiBhcGktY29yZSdzIG1vY2tzIHNwcmVhZCBgcmVxdWlyZUFjdHVhbGAsIHNvIGFcbiAqIHN5bWJvbCBoZXJlIGlzIGF2YWlsYWJsZSB0byBhbGwgb2YgdGhlbSB3aXRob3V0IGEgc2luZ2xlIHN0dWIgZWRpdC5cbiAqXG4gKiBgREJfUkVBRF9FTkFCTEVEPWZhbHNlYCBpcyB0aGUgS0lMTCBTV0lUQ0g6IGl0IGZvcmNlcyBldmVyeSByZWFkIGJhY2sgdG8gdGhlXG4gKiBwcmltYXJ5IHdpdGhvdXQgYSByZWRlcGxveSBvciBhIG1hbmlmZXN0IGNoYW5nZSwgd2hpY2ggdGhlIHVuc2V0LWhvc3QgZmFsbGJhY2tcbiAqIGRvZXMgbm90IGNvdmVyLiBVbnNldCBob3N0IGFuc3dlcnMgXCJ0aGVyZSBpcyBubyByZXBsaWNhXCI7IHRoZSBraWxsIHN3aXRjaFxuICogYW5zd2VycyBcInRoZXJlIGlzIG9uZSBhbmQgSSBkbyBub3QgdHJ1c3QgaXRcIi5cbiAqXG4gKiBgLnRyaW0oKWAgbWF0dGVyczogYERCX1JFQURfSE9TVD1cIiBcImAgZnJvbSBhIHN0cmF5IHNwYWNlIG11c3Qgbm90IHJlYWQgYXNcbiAqIFwiYSByZXBsaWNhIGV4aXN0c1wiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkUmVwbGljYUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIGlmICghZW52Qm9vbCgnREJfUkVBRF9FTkFCTEVEJywgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudlN0cignREJfUkVBRF9IT1NUJywgJycpLnRyaW0oKS5sZW5ndGggPiAwO1xufVxuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFZO0lBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBWSxFQUFFLEdBQVcsRUFBRSxJQUFxQztJQUNyRixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEMsSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLEVBQUUsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzFGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakMsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLFNBQVM7UUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTO1FBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVksRUFBRSxHQUFZO0lBQ2hELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDdkQsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUQsSUFBSSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFZLEVBQUUsR0FBVztJQUM5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNwRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVHlwZWQgZW52aXJvbm1lbnQtdmFyaWFibGUgcmVhZGVycyB3aXRoIGNvbnNpc3RlbnQgcGFyc2luZyArIGRlZmF1bHRzLlxuICpcbiAqIEhhbmQtcm9sbGVkIGBwYXJzZUludChwcm9jZXNzLmVudi5YIHx8ICfigKYnLCAxMClgIC8gYHByb2Nlc3MuZW52LlggPT09ICd0cnVlJ2BcbiAqIGRyaWZ0cyAodGhlIHNhbWUgdmFyIHBhcnNlZCB3aXRoIGRpZmZlcmVudCBkZWZhdWx0cyBpbiBkaWZmZXJlbnQgcGFja2FnZXMpXG4gKiBhbmQgc2lsZW50bHkgcmV0dXJucyB0aGUgZGVmYXVsdCBvbiBhIHR5cG8nZCBuYW1lLiBUaGVzZSBoZWxwZXJzIGNlbnRyYWxpemUgdGhlIHBhcnNpbmcgc28gYSB2YWx1ZVxuICogaXMgcmVhZCB0aGUgc2FtZSB3YXkgZXZlcnl3aGVyZSwgYW5kIG1ha2Ugc2hhcmVkIGNvbnN0YW50cyBpbXBvcnRhYmxlIHJhdGhlclxuICogdGhhbiByZS1kZXJpdmVkIChzZWUgYE1BWF9QQUdFX0xJTUlUYCAvIGBERUZBVUxUX1BBR0VfTElNSVRgIGluXG4gKiBgdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50c2ApLlxuICovXG5cbi8qKlxuICogQSBjYW1lbENhc2UgbmFtZSBhcyB0aGUgZW52LXZhciBmcmFnbWVudCB0aGF0IGNvbmZpZ3VyZXMgaXQ6XG4gKiBgYXBpQ2FsbHNgIOKGkiBgQVBJX0NBTExTYCwgYHN1cHBvcnRQcmVtaXVtQ29udGFjdHNgIOKGkiBgU1VQUE9SVF9QUkVNSVVNX0NPTlRBQ1RTYC5cbiAqXG4gKiBIZXJlLCBpbiB0aGUgZW52IG1vZHVsZSwgYmVjYXVzZSB0aGUgdHdvIGNhbGxlcnMgYXJlIGluIGRpZmZlcmVudCBQQUNLQUdFUyDigJRcbiAqIGBxdW90YS10aWVycy50c2AgYnVpbGRzIGBRVU9UQV9USUVSXzxUSUVSPl88TElNSVQ+YCBhbmQgYXBpL3F1b3RhJ3MgY29uZmlnXG4gKiBidWlsZHMgYFFVT1RBX0RFRkFVTFRfPFRZUEU+YCDigJQgYW5kIGVhY2ggaGFkIGl0cyBvd24gY29weSBvZiB0aGUgc2FtZSByZWdleC5cbiAqIFR3byBzcGVsbGluZ3Mgb2Ygb25lIHRyYW5zZm9ybSBpcyBhIGRyaWZ0IHdhaXRpbmcgdG8gaGFwcGVuOiBcImZpeGluZ1wiIGVpdGhlclxuICogb25lIHdvdWxkIHNpbGVudGx5IHJlbmFtZSBoYWxmIG9mIGFuIG9wZXJhdG9yJ3MgY29uZmlndXJlZCBrbm9icy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudk5hbWVGcmFnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDFfJDInKS50b1VwcGVyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIGludGVnZXIgZW52IHZhci4gVW5zZXQgLyBibGFuayAvIG5vdCBhIGNsZWFuIGludGVnZXIgc3RyaW5nIOKGkiBgZGVmYC5cbiAqIE9wdGlvbmFsIGBtaW5gL2BtYXhgIGNsYW1wIHRoZSByZXN1bHQgKGFwcGxpZWQgYWZ0ZXIgdGhlIGRlZmF1bHQpLlxuICpcbiAqIFNUUklDVCBvbiBwdXJwb3NlOiBgcGFyc2VJbnRgIGFjY2VwdHMgYDUwLjVgICjihpIgNTApIGFuZCBgMTJhYmNgICjihpIgMTIpLCB3aGljaFxuICogaXMgaG93IGEgdHlwbydkIHF1b3RhIGxpbWl0IG9yIHRpbWVvdXQgc2lsZW50bHkgc2hpcHMgYSB2YWx1ZSBub2JvZHkgd3JvdGUuXG4gKiBBbnl0aGluZyB0aGF0IGlzbid0IGAtP1xcZCtgIGZhbGxzIGJhY2sgdG8gdGhlIGNvZGUgZGVmYXVsdCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52SW50KG5hbWU6IHN0cmluZywgZGVmOiBudW1iZXIsIG9wdHM/OiB7IG1pbj86IG51bWJlcjsgbWF4PzogbnVtYmVyIH0pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgY29uc3QgdHJpbW1lZCA9IHJhdz8udHJpbSgpID8/ICcnO1xuICBsZXQgbiA9IHRyaW1tZWQgIT09ICcnICYmIC9eWystXT9cXGQrJC8udGVzdCh0cmltbWVkKSA/IE51bWJlci5wYXJzZUludCh0cmltbWVkLCAxMCkgOiBkZWY7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSBuID0gZGVmO1xuICBpZiAob3B0cz8ubWluICE9PSB1bmRlZmluZWQpIG4gPSBNYXRoLm1heChvcHRzLm1pbiwgbik7XG4gIGlmIChvcHRzPy5tYXggIT09IHVuZGVmaW5lZCkgbiA9IE1hdGgubWluKG9wdHMubWF4LCBuKTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogUGFyc2UgYSBib29sZWFuIGVudiB2YXIuIGB0cnVlYC9gMWAvYHllc2Ag4oaSIHRydWUsIGBmYWxzZWAvYDBgL2Bub2Ag4oaSIGZhbHNlXG4gKiAoY2FzZS1pbnNlbnNpdGl2ZSk7IHVuc2V0IC8gYmxhbmsgLyB1bnJlY29nbml6ZWQg4oaSIGBkZWZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52Qm9vbChuYW1lOiBzdHJpbmcsIGRlZjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gZGVmO1xuICBjb25zdCB2ID0gcmF3LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJyB8fCB2ID09PSAneWVzJykgcmV0dXJuIHRydWU7XG4gIGlmICh2ID09PSAnZmFsc2UnIHx8IHYgPT09ICcwJyB8fCB2ID09PSAnbm8nKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkZWY7XG59XG5cbi8qKiBSZWFkIGEgc3RyaW5nIGVudiB2YXI7IHVuc2V0IC8gYmxhbmsg4oaSIGBkZWZgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudlN0cihuYW1lOiBzdHJpbmcsIGRlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIHJldHVybiByYXcgPT09IHVuZGVmaW5lZCB8fCByYXcudHJpbSgpID09PSAnJyA/IGRlZiA6IHJhdztcbn1cblxuLyoqXG4gKiBJcyBhIFBvc3RncmVzIHJlYWQgcmVwbGljYSBjb25maWd1cmVkIEFORCBzd2l0Y2hlZCBvbj9cbiAqXG4gKiBMaXZlcyBpbiBhcGktY29yZSwgbm90IHBpcGVsaW5lLWRhdGEsIGV2ZW4gdGhvdWdoIHRoZSByZWFkIFBPT0wgZG9lcy4gSXQgaXNcbiAqIHB1cmUgZW52IGxvZ2ljIHdpdGggbm8gZGF0YWJhc2UgZGVwZW5kZW5jeSwgYW5kIEJPVEggcGFja2FnZXMgbmVlZCBpdDpcbiAqIHBpcGVsaW5lLWRhdGEgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgdGhlIHBvb2wsIGFuZCBhcGktc2VydmVyJ3NcbiAqIHRlbmFudC1jb250ZXh0IG1pZGRsZXdhcmUgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGNyb3NzLXJlcXVlc3Qgd3JpdGUgcGluIGlzIGluXG4gKiBwbGF5IGF0IGFsbC5cbiAqXG4gKiBXSFkgVEhBVCBQTEFDRU1FTlQgSVMgTE9BRC1CRUFSSU5HLCBub3QgdGFzdGUuIGFwaS1zZXJ2ZXIncyBtaWRkbGV3YXJlIHJ1bnMgaW5cbiAqIEVWRVJZIHNlcnZpY2UsIGFuZCA5MSB0ZXN0IHN1aXRlcyBzdHViIGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhYCB3aXRoXG4gKiBgc3R1Yk1vZHVsZWAsIHdoaWNoIFRIUk9XUyBvbiBhY2Nlc3MgdG8gYW4gZXhwb3J0IHRoZSBzdWl0ZSBkaWQgbm90IG92ZXJyaWRlIOKAlFxuICogZGVsaWJlcmF0ZWx5LCB0byBmb3JjZSBleHBsaWNpdG5lc3MuIFNvIHJlYWNoaW5nIGludG8gcGlwZWxpbmUtZGF0YSBmcm9tIHRoZVxuICogbWlkZGxld2FyZSB0dXJuZWQgZXZlcnkgb25lIG9mIHRob3NlIHN1aXRlcyBpbnRvIGEgNTAwLCBhbmQgcGF0Y2hpbmcgOTEgc3R1YnNcbiAqIHdvdWxkIG9ubHkgZGVmZXIgdGhlIG5leHQgb25lLiBhcGktY29yZSdzIG1vY2tzIHNwcmVhZCBgcmVxdWlyZUFjdHVhbGAsIHNvIGFcbiAqIHN5bWJvbCBoZXJlIGlzIGF2YWlsYWJsZSB0byBhbGwgb2YgdGhlbSB3aXRob3V0IGEgc2luZ2xlIHN0dWIgZWRpdC5cbiAqXG4gKiBgREJfUkVBRF9FTkFCTEVEPWZhbHNlYCBpcyB0aGUgS0lMTCBTV0lUQ0g6IGl0IGZvcmNlcyBldmVyeSByZWFkIGJhY2sgdG8gdGhlXG4gKiBwcmltYXJ5IHdpdGhvdXQgYSByZWRlcGxveSBvciBhIG1hbmlmZXN0IGNoYW5nZSwgd2hpY2ggdGhlIHVuc2V0LWhvc3QgZmFsbGJhY2tcbiAqIGRvZXMgbm90IGNvdmVyLiBVbnNldCBob3N0IGFuc3dlcnMgXCJ0aGVyZSBpcyBubyByZXBsaWNhXCI7IHRoZSBraWxsIHN3aXRjaFxuICogYW5zd2VycyBcInRoZXJlIGlzIG9uZSBhbmQgSSBkbyBub3QgdHJ1c3QgaXRcIi5cbiAqXG4gKiBgLnRyaW0oKWAgbWF0dGVyczogYERCX1JFQURfSE9TVD1cIiBcImAgZnJvbSBhIHN0cmF5IHNwYWNlIG11c3Qgbm90IHJlYWQgYXNcbiAqIFwiYSByZXBsaWNhIGV4aXN0c1wiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkUmVwbGljYUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIGlmICghZW52Qm9vbCgnREJfUkVBRF9FTkFCTEVEJywgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudlN0cignREJfUkVBRF9IT1NUJywgJycpLnRyaW0oKS5sZW5ndGggPiAwO1xufVxuIl19
@@ -18,4 +18,4 @@ export function getHeaderString(value) {
18
18
  }
19
19
  return value;
20
20
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWFkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFPdEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWtCO0lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBFeHByZXNzIDUgaGVhZGVyIHR5cGUuXG4gKi9cbnR5cGUgSGVhZGVyVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHN0cmluZyBmcm9tIGEgaGVhZGVyIHZhbHVlIHRoYXQgbWF5IGJlIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIEhlYWRlciB2YWx1ZSBmcm9tIEV4cHJlc3MgcmVxdWVzdFxuICogQHJldHVybnMgRmlyc3QgdmFsdWUgaWYgYXJyYXksIHRoZSB2YWx1ZSBpZiBzdHJpbmcsIG9yIHVuZGVmaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk7XG4gKiBjb25zdCBhdXRoID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb24pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJTdHJpbmcodmFsdWU6IEhlYWRlclZhbHVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlWzBdO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2hlYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQU90Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBa0I7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEV4cHJlc3MgNSBoZWFkZXIgdHlwZS5cbiAqL1xudHlwZSBIZWFkZXJWYWx1ZSA9IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgc3RyaW5nIGZyb20gYSBoZWFkZXIgdmFsdWUgdGhhdCBtYXkgYmUgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gSGVhZGVyIHZhbHVlIGZyb20gRXhwcmVzcyByZXF1ZXN0XG4gKiBAcmV0dXJucyBGaXJzdCB2YWx1ZSBpZiBhcnJheSwgdGhlIHZhbHVlIGlmIHN0cmluZywgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9yZ0lkID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1pZCddKTtcbiAqIGNvbnN0IGF1dGggPSBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclN0cmluZyh2YWx1ZTogSGVhZGVyVmFsdWUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVbMF07XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuIl19
@@ -128,4 +128,4 @@ export function getIdentity(req) {
128
128
  role: user?.role || getHeaderString(req.headers['x-user-role']),
129
129
  };
130
130
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaWRlbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBaUIvQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFnQztJQUM3RCxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRXhDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBRTlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUM7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsRUFBOEI7SUFDcEQsT0FBTyxFQUFFLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0I7SUFDMUMsb0VBQW9FO0lBQ3BFLHVFQUF1RTtJQUN2RSx1RUFBdUU7SUFDdkUsb0RBQW9EO0lBQ3BELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDdEIsNkVBQTZFO0lBQzdFLHdEQUF3RDtJQUN4RCw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUsc0VBQXNFO0lBQ3RFLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsZ0VBQWdFO0lBQ2hFLE1BQU0sYUFBYSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksSUFBSSxhQUFhLEtBQUssU0FBUyxDQUFDO0lBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxjQUFjLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckYsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsd0RBQXdEO0lBQ3hELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlELFNBQVMsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RCxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNoRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuL2hlYWRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBIdHRwUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzL2h0dHAuanMnO1xuXG4vKipcbiAqIElkZW50aXR5IGluZm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIHJlcXVlc3QgaGVhZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SWRlbnRpdHkge1xuICAvKiogT3JnYW5pemF0aW9uIElEIGZyb20geC1vcmctaWQgaGVhZGVyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICAvKiogVXNlciBJRCBmcm9tIHgtdXNlci1pZCBoZWFkZXIgKi9cbiAgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nO1xuICAvKiogUmVxdWVzdCBJRCBmcm9tIHgtcmVxdWVzdC1pZCBoZWFkZXIgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdElkPzogc3RyaW5nO1xuICAvKiogVXNlciByb2xlIGZyb20geC11c2VyLXJvbGUgaGVhZGVyIChkZWNvZGVkIGZyb20gSldUKSAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBvcmctaWQgbm9ybWFsaXphdGlvbjogdHJpbSArIGxvd2VyY2FzZSwgZW1wdHkg4oeSIHVuZGVmaW5lZC5cbiAqXG4gKiBUaGUgU0lOR0xFIHNwZWxsaW5nIHJ1bGUgZm9yIGEgdGVuYW50IGlkIGFjcm9zcyB0aGUgZmxlZXQuIE9yZyBpZHMgYXJlXG4gKiAyNC1oZXggT2JqZWN0SWQgc3RyaW5ncyAocGx1cyB0aGUgYCdzeXN0ZW0nYCBzZW50aW5lbCksIGFuZCBoZXggaXNcbiAqIGNhc2UtaW5zZW5zaXRpdmUg4oCUIHNvIGBBY21lYC1zdHlsZSBjYXNpbmcgZGlmZmVyZW5jZXMgcmVzb2x2ZSB0byB0aGUgU0FNRVxuICogTW9uZ28gZG9jdW1lbnQgd2hpbGUgc3RyaW5nIGNvbXBhcmlzb25zIChgYWN0aXZlT3JnSWQgPT09IHRhcmdldE9yZ0lkYCwgYW5cbiAqIFJMUyBHVUMgdnMgYSBXSEVSRSBjbGF1c2UsIGEgY2FjaGUga2V5KSBzaWxlbnRseSBkaXNhZ3JlZS4gRXZlcnl0aGluZyB0aGF0XG4gKiBjb21wYXJlcyBvciBrZXlzIG9uIGFuIG9yZyBpZCBub3JtYWxpemVzIHRocm91Z2ggaGVyZSBzbyB0aGUgY29tcGFyaXNvbiBhbmRcbiAqIHRoZSBsb29rdXAgY2FuIG5ldmVyIGRyaWZ0IGFwYXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3JnSWQob3JnSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3JnSWQ/LnRyaW0oKS50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgYWN0b3IgaWQgd3JpdHRlbiB3aGVuIG5vdGhpbmcgaW4gdGhlIHJlcXVlc3QgYXR0cmlidXRlcyB0aGUgYWN0aW9uIHRvIGFcbiAqIHBlcnNvbiDigJQgYW4gaW50ZXJuYWwgc2VydmljZSBob3AsIGEgc2NoZWR1bGVyIHRpY2ssIGEgdG9rZW4gd2hvc2Ugc3ViamVjdFxuICogbmV2ZXIgcmVzb2x2ZWQuIE9uZSBzcGVsbGluZywgYmVjYXVzZSB0aGUgYXVkaXQgdHJhaWwgaXMgcXVlcmllZCBieSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNZU1RFTV9BQ1RPUl9JRCA9ICdzeXN0ZW0nO1xuXG4vKipcbiAqIFRoZSBhY3RvciBpZCB3cml0dGVuIGZvciBhbiBVTkFVVEhFTlRJQ0FURUQgYWN0b3I6IGFuIGFub255bW91cyBwdWJsaWMgcGx1Z2luXG4gKiBzdWJtaXNzaW9uIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIOKAlCB0aGUgZXZlbnQgY2Fycmllc1xuICogYGRldGFpbHMuc3VibWlzc2lvbklkYCBmb3IgY29ycmVsYXRpb24gYW5kIGlzIHJlY29yZGVkIGFnYWluc3QgdGhlIHN5c3RlbVxuICogb3JnOyB0aGUgc3VibWl0dGVyJ3MgZW1haWwsIGhhc2hlZCBvciBvdGhlcndpc2UsIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGF1ZGl0XG4gKiB0cmFpbCkgYW5kIHBsYXRmb3JtJ3MgcHJlLWF1dGggYGRldmljZS5hdXRob3JpemUuc3RhcnRgIChhIGRldmljZS1sb2dpbiBjb2RlXG4gKiByZXF1ZXN0ZWQgYmVmb3JlIGFueW9uZSBoYXMgc2lnbmVkIGluKS4gRGlzdGluY3QgZnJvbSB7QGxpbmsgU1lTVEVNX0FDVE9SX0lEfSwgd2hpY2ggbWVhbnMgXCJubyBwZXJzb25cbiAqIGludm9sdmVkXCIsIG5vdCBcImEgcGVyc29uIHdlIGRvbid0IGtub3dcIi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFOT05ZTU9VU19BQ1RPUl9JRCA9ICdhbm9ueW1vdXMnO1xuXG4vKipcbiAqIFRoZSBhY3RvciBpZCB3cml0dGVuIGZvciB3b3JrIHRoZSBFWFBBTlNJT04tT0ZGRVJTIGFnZW50IGRpZCBvbiBpdHMgb3duXG4gKiAoZG9jcy9wbGFucy9zYWxlcy1hZ2VudC5tZCBEMTQpLlxuICpcbiAqIERpc3RpbmN0IGZyb20ge0BsaW5rIFNZU1RFTV9BQ1RPUl9JRH0gYmVjYXVzZSBcIndoeSBkaWQgdGhpcyBhY2NvdW50IGdldCB0aGlzXG4gKiBvZmZlcj9cIiBpcyB0aGUgb25seSBxdWVzdGlvbiBhbnlib2R5IHdpbGwgYXNrIGFib3V0IHRoYXQgZmVhdHVyZSwgYW5kIHRoZVxuICogZ2VuZXJpYyBzeXN0ZW0gYWN0b3IgbWFrZXMgaXQgdW5hbnN3ZXJhYmxlOiB0aGUgdHJhaWwgc2hvd3Mgc3lzdGVtIHdvcmssIG9mXG4gKiB3aGljaCB0aGlzIGRlcGxveW1lbnQgZG9lcyBhIGdyZWF0IGRlYWwsIGFuZCBub3RoaW5nIHdvdWxkIHNlcGFyYXRlIGFuIG9mZmVyXG4gKiB0aGUgYWdlbnQgZGVjaWRlZCBmcm9tIGEgc2VlZCwgYSBiYWNrZmlsbCBvciBhbiBvcGVyYXRvciBzY3JpcHQuXG4gKlxuICogSXQgYWxzbyBtYWtlcyB0aGUgYWdlbnQncyB3b3JrIHJldm9jYWJsZSBBUyBBIFNFVCDigJQgXCJ3aXRoZHJhdyBldmVyeXRoaW5nIHRoZVxuICogYWdlbnQgZGlkIGluIHRoZSBsYXN0IGhvdXJcIiBpcyBhIHF1ZXJ5IG9uIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW4gYW5cbiAqIGFyY2hhZW9sb2d5IGV4ZXJjaXNlLCB3aGljaCBpcyB0aGUgY29udHJvbCBhbiBvcGVyYXRvciB3YW50cyBvbiB0aGUgbW9ybmluZyBhXG4gKiBydWxlIHR1cm5zIG91dCB0byBiZSB3cm9uZy5cbiAqXG4gKiBBbiBBQ1RPUiwgbm90IGEgbmV0d29yayBpZGVudGl0eTogdGhlIGFnZW50IHJ1bnMgaW5zaWRlIGJpbGxpbmcgdW50aWwgUGhhc2UgNVxuICogZXh0cmFjdHMgaXQsIHNvIGl0cyBzZXJ2aWNlIHByaW5jaXBhbCBpcyBzdGlsbCBgYmlsbGluZ2AuIFRoaXMgbmFtZXMgd2hvXG4gKiBkZWNpZGVkLCB3aGljaCBpcyB3aGF0IHRoZSBhdWRpdCB0cmFpbCBpcyBxdWVyaWVkIGJ5LlxuICovXG5leHBvcnQgY29uc3QgT0ZGRVJTX0FHRU5UX0FDVE9SX0lEID0gJ29mZmVycy1hZ2VudCc7XG5cbi8qKlxuICogVGhlIGFjdG9yIGlkIHRvIHN0YW1wIG9uIGFuIGF1ZGl0IGV2ZW50LCBmcm9tIGEgcm91dGUgY29udGV4dC5cbiAqXG4gKiBPbmUgcmVzb2x2ZXIgc28gZXZlcnkgcm91dGUgYWdyZWVzIG9uIHRoZSBmYWxsYmFjazogcGVyLXJvdXRlXG4gKiBgcmVxLnVzZXIuc3ViID8/IOKApmAgZmFsbGJhY2tzIGRpc2FncmVlLCBhbmQgdGhlIHNhbWUgdW5hdHRyaWJ1dGFibGUgd3JpdGVcbiAqIHdvdWxkIGxhbmQgaW4gdGhlIHRyYWlsIHVuZGVyIGRpZmZlcmVudCBhY3RvcnMgZGVwZW5kaW5nIG9uIHRoZSByb3V0ZS5cbiAqXG4gKiBgcmMudXNlcklkYCBpcyBhbHJlYWR5IHRoZSBub3JtYWxpemVkIGlkZW50aXR5IGB3aXRoUm91dGVgIHJlc29sdmVkIChKV1RcbiAqIGBzdWJgLCBlbHNlIHRoZSBgeC11c2VyLWlkYCBob3AgaGVhZGVyIOKAlCBzZWUge0BsaW5rIGdldElkZW50aXR5fSksIHNvIHRoaXMgaXNcbiAqIHRoZSBzYW1lIHZhbHVlIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0IGlzIHNjb3BlZCBieSwgYW5kIHRoZSBPTkUgcGxhY2UgdGhlXG4gKiBcInVuYXR0cmlidXRhYmxlXCIgc2VudGluZWwgaXMgY2hvc2VuLiBBY2NlcHRzIGFueXRoaW5nIGNhcnJ5aW5nIGEgYHVzZXJJZGAsXG4gKiB3aGljaCB0aGUgcm91dGUgY29udGV4dCBkb2VzIOKAlCBwYXNzIGByY2AsIG9yIGB7IHVzZXJJZCB9YCB3aGVuIHRoZSBoYW5kbGVyXG4gKiBkZXN0cnVjdHVyZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3RvcklkKHJjOiB7IHVzZXJJZD86IHN0cmluZyB8IG51bGwgfSk6IHN0cmluZyB7XG4gIHJldHVybiByYy51c2VySWQgfHwgU1lTVEVNX0FDVE9SX0lEO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgaWRlbnRpdHkgaW5mb3JtYXRpb24gZnJvbSByZXF1ZXN0IGhlYWRlcnMuXG4gKlxuICogRXh0cmFjdHMgY29tbW9uIGlkZW50aXR5IGhlYWRlcnMgdXNlZCBmb3IgbXVsdGktdGVuYW50IGF1dGhlbnRpY2F0aW9uOlxuICogLSB4LW9yZy1pZDogT3JnYW5pemF0aW9uIGlkZW50aWZpZXIgKElOVEVSTkFMIFNFUlZJQ0UgaG9wcyBvbmx5LCBzZWUgYmVsb3cpXG4gKiAtIHgtdXNlci1pZDogVXNlciBpZGVudGlmaWVyXG4gKiAtIHgtcmVxdWVzdC1pZDogUmVxdWVzdCB0cmFjZSBpZGVudGlmaWVyXG4gKiAtIHgtdXNlci1yb2xlOiBVc2VyIHJvbGVcbiAqXG4gKiBAcGFyYW0gcmVxIC0gSFRUUCByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgSWRlbnRpdHkgb2JqZWN0IHdpdGggb3JnSWQsIHVzZXJJZCwgcmVxdWVzdElkLCBhbmQgcm9sZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhcHAucG9zdCgnL2FwaS9yZXNvdXJjZScsIHJlcXVpcmVBdXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAqICAgY29uc3QgaWRlbnRpdHkgPSBnZXRJZGVudGl0eShyZXEpO1xuICpcbiAqICAgaWYgKCFpZGVudGl0eS5vcmdJZCkge1xuICogICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICd4LW9yZy1pZCBoZWFkZXIgcmVxdWlyZWQnKTtcbiAqICAgfVxuICpcbiAqICAgLy8gVXNlIGlkZW50aXR5Lm9yZ0lkLCBpZGVudGl0eS51c2VySWQsIGV0Yy5cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGl0eShyZXE6IEh0dHBSZXF1ZXN0KTogUmVxdWVzdElkZW50aXR5IHtcbiAgLy8gUHJlZmVyIEpXVC12ZXJpZmllZCBjbGFpbXMgKHJlcS51c2VyKSBvdmVyIHJhdyBoZWFkZXJzIHRvIHByZXZlbnRcbiAgLy8gc3Bvb2ZpbmcuIEhlYWRlcnMgYXJlIG9ubHkgdXNlZCBhcyBmYWxsYmFjayBvciBmb3IgZmllbGRzIG5vdCBpbiB0aGVcbiAgLy8gSldUIChlLmcuIHJlcXVlc3RJZCkuIFRoZSBKV1QgcGF5bG9hZCB1c2VzIGBzdWJgIGZvciB0aGUgdXNlciBpZCBwZXJcbiAgLy8gT0lEQyBjb252ZW50aW9uOyB0aGF0J3Mgb3VyIGF1dGhvcml0YXRpdmUgc291cmNlLlxuICBjb25zdCB1c2VyID0gcmVxLnVzZXI7XG4gIC8vIFRoZSBgeC1vcmctaWRgIGhlYWRlciBpcyBDTElFTlQtU0VUVEFCTEUsIHNvIGl0IGlzIG9ubHkgZXZlciBob25vcmVkIGZvciBhXG4gIC8vIHByaW5jaXBhbCB0aGF0IGhhcyBubyB0ZW5hbnQgb2YgaXRzIG93biB0byBzcGVhayBmb3I6XG4gIC8vICAgLSBhbiBJTlRFUk5BTCBTRVJWSUNFIHByaW5jaXBhbCAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2ApLCB3aG9zZSB0b2tlblxuICAvLyAgICAgbmFtZXMgdGhlIHNpZ25pbmcgc2VydmljZSByYXRoZXIgdGhhbiB0aGUgdGVuYW50IGl0IGlzIGFjdGluZyBmb3Ig4oCUXG4gIC8vICAgICB0aGF0IGlzIHRoZSBTMlMgaG9wIGNvbnZlbnRpb24gKHRoZSBjYXNjYWRlLCB0aGUgcXVvdGEgY2xpZW50LCDigKYpOyBhbmRcbiAgLy8gICAtIGEgcmVxdWVzdCB3aXRoIG5vIHZlcmlmaWVkIHByaW5jaXBhbCBhdCBhbGwgKGBhdHRhY2hSZXF1ZXN0Q29udGV4dGBcbiAgLy8gICAgIHJ1bnMgYmVmb3JlIGByZXF1aXJlQXV0aGAsIHdoaWNoIHJlY29tcHV0ZXMgdGhpcyBmcm9tIHRoZSBKV1QpLlxuICAvLyBGb3IgYSBVU0VSIG9yIFNFUlZJQ0UtQUNDT1VOVCBwcmluY2lwYWwgdGhlIEpXVCBpcyB0aGUgT05MWSBhdXRob3JpdHkuXG4gIC8vIFBsYXRmb3JtIGNhbiBtaW50IGEgdXNlciB0b2tlbiB3aXRoIG5vIGBvcmdhbml6YXRpb25JZGAgKGEgcGVyc29uIGJldHdlZW5cbiAgLy8gb3JncywgbWlkLWludml0ZSwgbWlkLW9uYm9hcmRpbmcpOyBhIGB1c2VyPy5vcmdhbml6YXRpb25JZCB8fCBoZWFkZXJgXG4gIC8vIGZhbGxiYWNrIHdvdWxkIGxldCBzdWNoIGEgdG9rZW4gbmFtZSBhbnkgdGVuYW50IGl0IGxpa2VkIOKAlCBhIHZhbHVlIHRoYXRcbiAgLy8gZmxvd3Mgc3RyYWlnaHQgaW50byB0aGUgUkxTIHRlbmFudCBHVUMuIEFic2VudCDih5IgdW5kZWZpbmVkIOKHkiB0aGUgcm91dGUnc1xuICAvLyBgcmVxdWlyZU9yZ0lkYCByZWZ1c2VzIHRoZSBjYWxsLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhbnN3ZXIuXG4gIGNvbnN0IHByaW5jaXBhbFR5cGUgPSB1c2VyPy5wcmluY2lwYWxUeXBlO1xuICBjb25zdCBoZWFkZXJPcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk7XG4gIGNvbnN0IG1heVVzZUhlYWRlck9yZyA9ICF1c2VyIHx8IHByaW5jaXBhbFR5cGUgPT09ICdzZXJ2aWNlJztcbiAgY29uc3QgcmF3T3JnSWQgPSB1c2VyPy5vcmdhbml6YXRpb25JZCB8fCAobWF5VXNlSGVhZGVyT3JnID8gaGVhZGVyT3JnSWQgOiB1bmRlZmluZWQpO1xuICAvLyBOb3JtYWxpemVkIE9OQ0UgaGVyZSAoc2VlIG5vcm1hbGl6ZU9yZ0lkKSBzbyB0aGUgUkxTIEdVQyAoYGlkZW50aXR5U2NvcGVgXG4gIC8vIHJlYWRzIHRoaXMgYGlkZW50aXR5Lm9yZ0lkYCkgYW5kIHRoZSBhcHAtbGF5ZXIgV0hFUkUgY2xhdXNlcyAocm91dGUtd3JhcHBlclxuICAvLyAvIGFwcC1mYWN0b3J5KSBhbHdheXMgYWdyZWUgb24gdGVuYW50LiBBIG1pc21hdGNoIOKAlCBHVUMgc2V0IHRvIGBBY21lYCB3aGlsZVxuICAvLyBXSEVSRSBxdWVyaWVzIGBhY21lYCDigJQgd291bGQgc2lsZW50bHkgcmV0dXJuIG5vIHJvd3MuXG4gIGNvbnN0IG9yZ0lkID0gbm9ybWFsaXplT3JnSWQocmF3T3JnSWQpO1xuICByZXR1cm4ge1xuICAgIG9yZ0lkLFxuICAgIHVzZXJJZDogdXNlcj8uc3ViIHx8IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC11c2VyLWlkJ10pLFxuICAgIHJlcXVlc3RJZDogZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LXJlcXVlc3QtaWQnXSksXG4gICAgcm9sZTogdXNlcj8ucm9sZSB8fCBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtdXNlci1yb2xlJ10pLFxuICB9O1xufVxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pZGVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFpQi9DOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWdDO0lBQzdELE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLFNBQVMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFeEM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxFQUE4QjtJQUNwRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUksZUFBZSxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFnQjtJQUMxQyxvRUFBb0U7SUFDcEUsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUN0Qiw2RUFBNkU7SUFDN0Usd0RBQXdEO0lBQ3hELDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxnRUFBZ0U7SUFDaEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztJQUMxQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxJQUFJLGFBQWEsS0FBSyxTQUFTLENBQUM7SUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLGNBQWMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRiw0RUFBNEU7SUFDNUUsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSx3REFBd0Q7SUFDeEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUQsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2hFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGdldEhlYWRlclN0cmluZyB9IGZyb20gJy4vaGVhZGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMvaHR0cC5qcyc7XG5cbi8qKlxuICogSWRlbnRpdHkgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gcmVxdWVzdCBoZWFkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJZGVudGl0eSB7XG4gIC8qKiBPcmdhbml6YXRpb24gSUQgZnJvbSB4LW9yZy1pZCBoZWFkZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBVc2VyIElEIGZyb20geC11c2VyLWlkIGhlYWRlciAqL1xuICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBSZXF1ZXN0IElEIGZyb20geC1yZXF1ZXN0LWlkIGhlYWRlciAqL1xuICByZWFkb25seSByZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKiBVc2VyIHJvbGUgZnJvbSB4LXVzZXItcm9sZSBoZWFkZXIgKGRlY29kZWQgZnJvbSBKV1QpICovXG4gIHJlYWRvbmx5IHJvbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIG9yZy1pZCBub3JtYWxpemF0aW9uOiB0cmltICsgbG93ZXJjYXNlLCBlbXB0eSDih5IgdW5kZWZpbmVkLlxuICpcbiAqIFRoZSBTSU5HTEUgc3BlbGxpbmcgcnVsZSBmb3IgYSB0ZW5hbnQgaWQgYWNyb3NzIHRoZSBmbGVldC4gT3JnIGlkcyBhcmVcbiAqIDI0LWhleCBPYmplY3RJZCBzdHJpbmdzIChwbHVzIHRoZSBgJ3N5c3RlbSdgIHNlbnRpbmVsKSwgYW5kIGhleCBpc1xuICogY2FzZS1pbnNlbnNpdGl2ZSDigJQgc28gYEFjbWVgLXN0eWxlIGNhc2luZyBkaWZmZXJlbmNlcyByZXNvbHZlIHRvIHRoZSBTQU1FXG4gKiBNb25nbyBkb2N1bWVudCB3aGlsZSBzdHJpbmcgY29tcGFyaXNvbnMgKGBhY3RpdmVPcmdJZCA9PT0gdGFyZ2V0T3JnSWRgLCBhblxuICogUkxTIEdVQyB2cyBhIFdIRVJFIGNsYXVzZSwgYSBjYWNoZSBrZXkpIHNpbGVudGx5IGRpc2FncmVlLiBFdmVyeXRoaW5nIHRoYXRcbiAqIGNvbXBhcmVzIG9yIGtleXMgb24gYW4gb3JnIGlkIG5vcm1hbGl6ZXMgdGhyb3VnaCBoZXJlIHNvIHRoZSBjb21wYXJpc29uIGFuZFxuICogdGhlIGxvb2t1cCBjYW4gbmV2ZXIgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcmdJZChvcmdJZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvcmdJZD8udHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBhY3RvciBpZCB3cml0dGVuIHdoZW4gbm90aGluZyBpbiB0aGUgcmVxdWVzdCBhdHRyaWJ1dGVzIHRoZSBhY3Rpb24gdG8gYVxuICogcGVyc29uIOKAlCBhbiBpbnRlcm5hbCBzZXJ2aWNlIGhvcCwgYSBzY2hlZHVsZXIgdGljaywgYSB0b2tlbiB3aG9zZSBzdWJqZWN0XG4gKiBuZXZlciByZXNvbHZlZC4gT25lIHNwZWxsaW5nLCBiZWNhdXNlIHRoZSBhdWRpdCB0cmFpbCBpcyBxdWVyaWVkIGJ5IGl0LlxuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX0FDVE9SX0lEID0gJ3N5c3RlbSc7XG5cbi8qKlxuICogVGhlIGFjdG9yIGlkIHdyaXR0ZW4gZm9yIGFuIFVOQVVUSEVOVElDQVRFRCBhY3RvcjogYW4gYW5vbnltb3VzIHB1YmxpYyBwbHVnaW5cbiAqIHN1Ym1pc3Npb24gKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQg4oCUIHRoZSBldmVudCBjYXJyaWVzXG4gKiBgZGV0YWlscy5zdWJtaXNzaW9uSWRgIGZvciBjb3JyZWxhdGlvbiBhbmQgaXMgcmVjb3JkZWQgYWdhaW5zdCB0aGUgc3lzdGVtXG4gKiBvcmc7IHRoZSBzdWJtaXR0ZXIncyBlbWFpbCwgaGFzaGVkIG9yIG90aGVyd2lzZSwgbmV2ZXIgYXBwZWFycyBpbiB0aGUgYXVkaXRcbiAqIHRyYWlsKSBhbmQgcGxhdGZvcm0ncyBwcmUtYXV0aCBgZGV2aWNlLmF1dGhvcml6ZS5zdGFydGAgKGEgZGV2aWNlLWxvZ2luIGNvZGVcbiAqIHJlcXVlc3RlZCBiZWZvcmUgYW55b25lIGhhcyBzaWduZWQgaW4pLiBEaXN0aW5jdCBmcm9tIHtAbGluayBTWVNURU1fQUNUT1JfSUR9LCB3aGljaCBtZWFucyBcIm5vIHBlcnNvblxuICogaW52b2x2ZWRcIiwgbm90IFwiYSBwZXJzb24gd2UgZG9uJ3Qga25vd1wiLlxuICovXG5leHBvcnQgY29uc3QgQU5PTllNT1VTX0FDVE9SX0lEID0gJ2Fub255bW91cyc7XG5cbi8qKlxuICogVGhlIGFjdG9yIGlkIHdyaXR0ZW4gZm9yIHdvcmsgdGhlIEVYUEFOU0lPTi1PRkZFUlMgYWdlbnQgZGlkIG9uIGl0cyBvd25cbiAqIChkb2NzL3BsYW5zL3NhbGVzLWFnZW50Lm1kIEQxNCkuXG4gKlxuICogRGlzdGluY3QgZnJvbSB7QGxpbmsgU1lTVEVNX0FDVE9SX0lEfSBiZWNhdXNlIFwid2h5IGRpZCB0aGlzIGFjY291bnQgZ2V0IHRoaXNcbiAqIG9mZmVyP1wiIGlzIHRoZSBvbmx5IHF1ZXN0aW9uIGFueWJvZHkgd2lsbCBhc2sgYWJvdXQgdGhhdCBmZWF0dXJlLCBhbmQgdGhlXG4gKiBnZW5lcmljIHN5c3RlbSBhY3RvciBtYWtlcyBpdCB1bmFuc3dlcmFibGU6IHRoZSB0cmFpbCBzaG93cyBzeXN0ZW0gd29yaywgb2ZcbiAqIHdoaWNoIHRoaXMgZGVwbG95bWVudCBkb2VzIGEgZ3JlYXQgZGVhbCwgYW5kIG5vdGhpbmcgd291bGQgc2VwYXJhdGUgYW4gb2ZmZXJcbiAqIHRoZSBhZ2VudCBkZWNpZGVkIGZyb20gYSBzZWVkLCBhIGJhY2tmaWxsIG9yIGFuIG9wZXJhdG9yIHNjcmlwdC5cbiAqXG4gKiBJdCBhbHNvIG1ha2VzIHRoZSBhZ2VudCdzIHdvcmsgcmV2b2NhYmxlIEFTIEEgU0VUIOKAlCBcIndpdGhkcmF3IGV2ZXJ5dGhpbmcgdGhlXG4gKiBhZ2VudCBkaWQgaW4gdGhlIGxhc3QgaG91clwiIGlzIGEgcXVlcnkgb24gdGhpcyB2YWx1ZSByYXRoZXIgdGhhbiBhblxuICogYXJjaGFlb2xvZ3kgZXhlcmNpc2UsIHdoaWNoIGlzIHRoZSBjb250cm9sIGFuIG9wZXJhdG9yIHdhbnRzIG9uIHRoZSBtb3JuaW5nIGFcbiAqIHJ1bGUgdHVybnMgb3V0IHRvIGJlIHdyb25nLlxuICpcbiAqIEFuIEFDVE9SLCBub3QgYSBuZXR3b3JrIGlkZW50aXR5OiB0aGUgYWdlbnQgcnVucyBpbnNpZGUgYmlsbGluZyB1bnRpbCBQaGFzZSA1XG4gKiBleHRyYWN0cyBpdCwgc28gaXRzIHNlcnZpY2UgcHJpbmNpcGFsIGlzIHN0aWxsIGBiaWxsaW5nYC4gVGhpcyBuYW1lcyB3aG9cbiAqIGRlY2lkZWQsIHdoaWNoIGlzIHdoYXQgdGhlIGF1ZGl0IHRyYWlsIGlzIHF1ZXJpZWQgYnkuXG4gKi9cbmV4cG9ydCBjb25zdCBPRkZFUlNfQUdFTlRfQUNUT1JfSUQgPSAnb2ZmZXJzLWFnZW50JztcblxuLyoqXG4gKiBUaGUgYWN0b3IgaWQgdG8gc3RhbXAgb24gYW4gYXVkaXQgZXZlbnQsIGZyb20gYSByb3V0ZSBjb250ZXh0LlxuICpcbiAqIE9uZSByZXNvbHZlciBzbyBldmVyeSByb3V0ZSBhZ3JlZXMgb24gdGhlIGZhbGxiYWNrOiBwZXItcm91dGVcbiAqIGByZXEudXNlci5zdWIgPz8g4oCmYCBmYWxsYmFja3MgZGlzYWdyZWUsIGFuZCB0aGUgc2FtZSB1bmF0dHJpYnV0YWJsZSB3cml0ZVxuICogd291bGQgbGFuZCBpbiB0aGUgdHJhaWwgdW5kZXIgZGlmZmVyZW50IGFjdG9ycyBkZXBlbmRpbmcgb24gdGhlIHJvdXRlLlxuICpcbiAqIGByYy51c2VySWRgIGlzIGFscmVhZHkgdGhlIG5vcm1hbGl6ZWQgaWRlbnRpdHkgYHdpdGhSb3V0ZWAgcmVzb2x2ZWQgKEpXVFxuICogYHN1YmAsIGVsc2UgdGhlIGB4LXVzZXItaWRgIGhvcCBoZWFkZXIg4oCUIHNlZSB7QGxpbmsgZ2V0SWRlbnRpdHl9KSwgc28gdGhpcyBpc1xuICogdGhlIHNhbWUgdmFsdWUgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgaXMgc2NvcGVkIGJ5LCBhbmQgdGhlIE9ORSBwbGFjZSB0aGVcbiAqIFwidW5hdHRyaWJ1dGFibGVcIiBzZW50aW5lbCBpcyBjaG9zZW4uIEFjY2VwdHMgYW55dGhpbmcgY2FycnlpbmcgYSBgdXNlcklkYCxcbiAqIHdoaWNoIHRoZSByb3V0ZSBjb250ZXh0IGRvZXMg4oCUIHBhc3MgYHJjYCwgb3IgYHsgdXNlcklkIH1gIHdoZW4gdGhlIGhhbmRsZXJcbiAqIGRlc3RydWN0dXJlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdG9ySWQocmM6IHsgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB9KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJjLnVzZXJJZCB8fCBTWVNURU1fQUNUT1JfSUQ7XG59XG5cbi8qKlxuICogRXh0cmFjdCBpZGVudGl0eSBpbmZvcm1hdGlvbiBmcm9tIHJlcXVlc3QgaGVhZGVycy5cbiAqXG4gKiBFeHRyYWN0cyBjb21tb24gaWRlbnRpdHkgaGVhZGVycyB1c2VkIGZvciBtdWx0aS10ZW5hbnQgYXV0aGVudGljYXRpb246XG4gKiAtIHgtb3JnLWlkOiBPcmdhbml6YXRpb24gaWRlbnRpZmllciAoSU5URVJOQUwgU0VSVklDRSBob3BzIG9ubHksIHNlZSBiZWxvdylcbiAqIC0geC11c2VyLWlkOiBVc2VyIGlkZW50aWZpZXJcbiAqIC0geC1yZXF1ZXN0LWlkOiBSZXF1ZXN0IHRyYWNlIGlkZW50aWZpZXJcbiAqIC0geC11c2VyLXJvbGU6IFVzZXIgcm9sZVxuICpcbiAqIEBwYXJhbSByZXEgLSBIVFRQIHJlcXVlc3Qgb2JqZWN0XG4gKiBAcmV0dXJucyBJZGVudGl0eSBvYmplY3Qgd2l0aCBvcmdJZCwgdXNlcklkLCByZXF1ZXN0SWQsIGFuZCByb2xlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGFwcC5wb3N0KCcvYXBpL3Jlc291cmNlJywgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICogICBjb25zdCBpZGVudGl0eSA9IGdldElkZW50aXR5KHJlcSk7XG4gKlxuICogICBpZiAoIWlkZW50aXR5Lm9yZ0lkKSB7XG4gKiAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIDQwMCwgJ3gtb3JnLWlkIGhlYWRlciByZXF1aXJlZCcpO1xuICogICB9XG4gKlxuICogICAvLyBVc2UgaWRlbnRpdHkub3JnSWQsIGlkZW50aXR5LnVzZXJJZCwgZXRjLlxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aXR5KHJlcTogSHR0cFJlcXVlc3QpOiBSZXF1ZXN0SWRlbnRpdHkge1xuICAvLyBQcmVmZXIgSldULXZlcmlmaWVkIGNsYWltcyAocmVxLnVzZXIpIG92ZXIgcmF3IGhlYWRlcnMgdG8gcHJldmVudFxuICAvLyBzcG9vZmluZy4gSGVhZGVycyBhcmUgb25seSB1c2VkIGFzIGZhbGxiYWNrIG9yIGZvciBmaWVsZHMgbm90IGluIHRoZVxuICAvLyBKV1QgKGUuZy4gcmVxdWVzdElkKS4gVGhlIEpXVCBwYXlsb2FkIHVzZXMgYHN1YmAgZm9yIHRoZSB1c2VyIGlkIHBlclxuICAvLyBPSURDIGNvbnZlbnRpb247IHRoYXQncyBvdXIgYXV0aG9yaXRhdGl2ZSBzb3VyY2UuXG4gIGNvbnN0IHVzZXIgPSByZXEudXNlcjtcbiAgLy8gVGhlIGB4LW9yZy1pZGAgaGVhZGVyIGlzIENMSUVOVC1TRVRUQUJMRSwgc28gaXQgaXMgb25seSBldmVyIGhvbm9yZWQgZm9yIGFcbiAgLy8gcHJpbmNpcGFsIHRoYXQgaGFzIG5vIHRlbmFudCBvZiBpdHMgb3duIHRvIHNwZWFrIGZvcjpcbiAgLy8gICAtIGFuIElOVEVSTkFMIFNFUlZJQ0UgcHJpbmNpcGFsIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCksIHdob3NlIHRva2VuXG4gIC8vICAgICBuYW1lcyB0aGUgc2lnbmluZyBzZXJ2aWNlIHJhdGhlciB0aGFuIHRoZSB0ZW5hbnQgaXQgaXMgYWN0aW5nIGZvciDigJRcbiAgLy8gICAgIHRoYXQgaXMgdGhlIFMyUyBob3AgY29udmVudGlvbiAodGhlIGNhc2NhZGUsIHRoZSBxdW90YSBjbGllbnQsIOKApik7IGFuZFxuICAvLyAgIC0gYSByZXF1ZXN0IHdpdGggbm8gdmVyaWZpZWQgcHJpbmNpcGFsIGF0IGFsbCAoYGF0dGFjaFJlcXVlc3RDb250ZXh0YFxuICAvLyAgICAgcnVucyBiZWZvcmUgYHJlcXVpcmVBdXRoYCwgd2hpY2ggcmVjb21wdXRlcyB0aGlzIGZyb20gdGhlIEpXVCkuXG4gIC8vIEZvciBhIFVTRVIgb3IgU0VSVklDRS1BQ0NPVU5UIHByaW5jaXBhbCB0aGUgSldUIGlzIHRoZSBPTkxZIGF1dGhvcml0eS5cbiAgLy8gUGxhdGZvcm0gY2FuIG1pbnQgYSB1c2VyIHRva2VuIHdpdGggbm8gYG9yZ2FuaXphdGlvbklkYCAoYSBwZXJzb24gYmV0d2VlblxuICAvLyBvcmdzLCBtaWQtaW52aXRlLCBtaWQtb25ib2FyZGluZyk7IGEgYHVzZXI/Lm9yZ2FuaXphdGlvbklkIHx8IGhlYWRlcmBcbiAgLy8gZmFsbGJhY2sgd291bGQgbGV0IHN1Y2ggYSB0b2tlbiBuYW1lIGFueSB0ZW5hbnQgaXQgbGlrZWQg4oCUIGEgdmFsdWUgdGhhdFxuICAvLyBmbG93cyBzdHJhaWdodCBpbnRvIHRoZSBSTFMgdGVuYW50IEdVQy4gQWJzZW50IOKHkiB1bmRlZmluZWQg4oeSIHRoZSByb3V0ZSdzXG4gIC8vIGByZXF1aXJlT3JnSWRgIHJlZnVzZXMgdGhlIGNhbGwsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGFuc3dlci5cbiAgY29uc3QgcHJpbmNpcGFsVHlwZSA9IHVzZXI/LnByaW5jaXBhbFR5cGU7XG4gIGNvbnN0IGhlYWRlck9yZ0lkID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1pZCddKTtcbiAgY29uc3QgbWF5VXNlSGVhZGVyT3JnID0gIXVzZXIgfHwgcHJpbmNpcGFsVHlwZSA9PT0gJ3NlcnZpY2UnO1xuICBjb25zdCByYXdPcmdJZCA9IHVzZXI/Lm9yZ2FuaXphdGlvbklkIHx8IChtYXlVc2VIZWFkZXJPcmcgPyBoZWFkZXJPcmdJZCA6IHVuZGVmaW5lZCk7XG4gIC8vIE5vcm1hbGl6ZWQgT05DRSBoZXJlIChzZWUgbm9ybWFsaXplT3JnSWQpIHNvIHRoZSBSTFMgR1VDIChgaWRlbnRpdHlTY29wZWBcbiAgLy8gcmVhZHMgdGhpcyBgaWRlbnRpdHkub3JnSWRgKSBhbmQgdGhlIGFwcC1sYXllciBXSEVSRSBjbGF1c2VzIChyb3V0ZS13cmFwcGVyXG4gIC8vIC8gYXBwLWZhY3RvcnkpIGFsd2F5cyBhZ3JlZSBvbiB0ZW5hbnQuIEEgbWlzbWF0Y2gg4oCUIEdVQyBzZXQgdG8gYEFjbWVgIHdoaWxlXG4gIC8vIFdIRVJFIHF1ZXJpZXMgYGFjbWVgIOKAlCB3b3VsZCBzaWxlbnRseSByZXR1cm4gbm8gcm93cy5cbiAgY29uc3Qgb3JnSWQgPSBub3JtYWxpemVPcmdJZChyYXdPcmdJZCk7XG4gIHJldHVybiB7XG4gICAgb3JnSWQsXG4gICAgdXNlcklkOiB1c2VyPy5zdWIgfHwgZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LXVzZXItaWQnXSksXG4gICAgcmVxdWVzdElkOiBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddKSxcbiAgICByb2xlOiB1c2VyPy5yb2xlIHx8IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC11c2VyLXJvbGUnXSksXG4gIH07XG59XG4iXX0=
@@ -3,6 +3,7 @@ export * from './api-key.js';
3
3
  export * from './safe-require.js';
4
4
  export * from './secure-compare.js';
5
5
  export * from './crash-handlers.js';
6
+ export * from './concurrency-gate.js';
6
7
  export { sendSuccess, sendError, sendQuotaExceeded, quotaExceededMessage, type QuotaExceededDetails, sendPaginatedNested, paginationMeta, type PaginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, type PaginationParams, type SortParams, } from './response.js';
7
8
  export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseReportTimezone, parseWeekStart, isValidTimezone, parseDateRange, type Page, type ReportInterval, type WeekStart, REPORT_INTERVALS, WEEK_STARTS, } from './params.js';
8
9
  export * from './headers.js';