@wildo-ai/saas-backend-lib 1.1.2 → 1.1.3

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 (853) hide show
  1. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
  2. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
  3. package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
  4. package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
  5. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
  6. package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
  7. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
  8. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
  9. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
  10. package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
  11. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
  12. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
  13. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +199 -0
  14. package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
  15. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
  16. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
  17. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
  18. package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
  19. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
  20. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +27 -6
  21. package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
  22. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
  23. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
  24. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +207 -21
  25. package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
  26. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
  27. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
  28. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +174 -26
  29. package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
  30. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +47 -4
  31. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
  32. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +96 -29
  33. package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
  34. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
  35. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
  36. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
  37. package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
  38. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
  39. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
  40. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
  41. package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
  42. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
  43. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +9 -1
  44. package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
  45. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +49 -0
  46. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
  47. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +171 -18
  48. package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
  49. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
  50. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +23 -3
  51. package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
  52. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
  53. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +20 -0
  54. package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
  55. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
  56. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
  57. package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
  58. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
  59. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
  60. package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
  61. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
  62. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
  63. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
  64. package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
  65. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
  66. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
  67. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +529 -41
  68. package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
  69. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
  70. package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
  71. package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
  72. package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
  73. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
  74. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
  75. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
  76. package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
  77. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
  78. package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
  79. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
  80. package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
  81. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
  82. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
  83. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
  84. package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
  85. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
  86. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
  87. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +474 -0
  88. package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
  89. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
  90. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
  91. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
  92. package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
  93. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
  94. package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
  95. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
  96. package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
  97. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
  98. package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
  99. package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
  100. package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
  101. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
  102. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
  103. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
  104. package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
  105. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
  106. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +48 -7
  107. package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
  108. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +38 -1
  109. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
  110. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +67 -2
  111. package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
  112. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
  113. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
  114. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
  115. package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
  116. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
  117. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
  118. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
  119. package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
  120. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
  121. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
  122. package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
  123. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +18 -1
  124. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
  125. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +106 -2
  126. package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
  127. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
  128. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
  129. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
  130. package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
  131. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
  132. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
  133. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +260 -26
  134. package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
  135. package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
  136. package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
  137. package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
  138. package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
  139. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
  140. package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
  141. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +225 -13
  142. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
  143. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +340 -62
  144. package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
  145. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +244 -7
  146. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
  147. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +386 -5
  148. package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
  149. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
  150. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
  151. package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
  152. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +6 -2
  153. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
  154. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +31 -9
  155. package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
  156. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
  157. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
  158. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +57 -1
  159. package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
  160. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
  161. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
  162. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
  163. package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
  164. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
  165. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +31 -0
  166. package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
  167. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
  168. package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
  169. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
  170. package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
  171. package/dist/esm/config/models/app-config.backend.schemas.d.ts +142 -46
  172. package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
  173. package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
  174. package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
  175. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
  176. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
  177. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
  178. package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
  179. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
  180. package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
  181. package/dist/esm/config/services/app-configuration-loader.backend.service.js +68 -76
  182. package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
  183. package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
  184. package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
  185. package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
  186. package/dist/esm/config/services/app-configuration.backend.utils.d.ts +33 -0
  187. package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
  188. package/dist/esm/config/services/app-configuration.backend.utils.js +39 -1
  189. package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
  190. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +25 -0
  191. package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
  192. package/dist/esm/config/services/application-startup-config-validator.backend.service.js +41 -1
  193. package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
  194. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
  195. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
  196. package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
  197. package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
  198. package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
  199. package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
  200. package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
  201. package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
  202. package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
  203. package/dist/esm/errors/services/error-handler.backend.service.js +129 -8
  204. package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
  205. package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
  206. package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
  207. package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
  208. package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
  209. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
  210. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
  211. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
  212. package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
  213. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
  214. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
  215. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
  216. package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
  217. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +59 -2
  218. package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
  219. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +52 -17
  220. package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
  221. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
  222. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
  223. package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
  224. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +256 -0
  225. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
  226. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +333 -0
  227. package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
  228. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
  229. package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
  230. package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
  231. package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
  232. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
  233. package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
  234. package/dist/esm/external-providers/operations/provider-request-signing.backend.js +216 -0
  235. package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
  236. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
  237. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
  238. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
  239. package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
  240. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
  241. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
  242. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
  243. package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
  244. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
  245. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
  246. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
  247. package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
  248. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
  249. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
  250. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
  251. package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
  252. package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
  253. package/dist/esm/external-providers/services/document-extraction.backend.service.js +3 -3
  254. package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
  255. package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
  256. package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
  257. package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
  258. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +292 -7
  259. package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
  260. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +533 -45
  261. package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
  262. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
  263. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +25 -2
  264. package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
  265. package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
  266. package/dist/esm/files/controllers/file.controller.js +21 -13
  267. package/dist/esm/files/controllers/file.controller.js.map +1 -1
  268. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
  269. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +39 -15
  270. package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
  271. package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
  272. package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
  273. package/dist/esm/files/services/file-scanning.backend.service.js +197 -17
  274. package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
  275. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
  276. package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
  277. package/dist/esm/files/services/file-text-extraction.backend.service.js +167 -8
  278. package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
  279. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +53 -2
  280. package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
  281. package/dist/esm/files/services/file-upload-grant.backend.service.js +127 -3
  282. package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
  283. package/dist/esm/files/services/files.backend.service.d.ts +68 -0
  284. package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
  285. package/dist/esm/files/services/files.backend.service.js +175 -5
  286. package/dist/esm/files/services/files.backend.service.js.map +1 -1
  287. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
  288. package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
  289. package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
  290. package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
  291. package/dist/esm/files/storage/file-storage-provider.types.d.ts +16 -10
  292. package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
  293. package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
  294. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
  295. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
  296. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
  297. package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
  298. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
  299. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
  300. package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
  301. package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
  302. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
  303. package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
  304. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
  305. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
  306. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
  307. package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
  308. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
  309. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
  310. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
  311. package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
  312. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
  313. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
  314. package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
  315. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
  316. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
  317. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
  318. package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
  319. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
  320. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
  321. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +196 -40
  322. package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
  323. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
  324. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
  325. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
  326. package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
  327. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
  328. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
  329. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
  330. package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
  331. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
  332. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
  333. package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
  334. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
  335. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
  336. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
  337. package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
  338. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
  339. package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
  340. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
  341. package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
  342. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
  343. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
  344. package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
  345. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +88 -8
  346. package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
  347. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +333 -31
  348. package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
  349. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
  350. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
  351. package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
  352. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
  353. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
  354. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
  355. package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
  356. package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
  357. package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
  358. package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
  359. package/dist/esm/flows-actors/services/agents.backend.service.d.ts +28 -1
  360. package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
  361. package/dist/esm/flows-actors/services/agents.backend.service.js +204 -18
  362. package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
  363. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +5 -1
  364. package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
  365. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +79 -16
  366. package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
  367. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
  368. package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
  369. package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
  370. package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
  371. package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
  372. package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
  373. package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
  374. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
  375. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
  376. package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
  377. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
  378. package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
  379. package/dist/esm/flows-actors/services/mcp-client.backend.service.js +368 -0
  380. package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
  381. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
  382. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
  383. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
  384. package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
  385. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
  386. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +8 -4
  387. package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
  388. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
  389. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
  390. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
  391. package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
  392. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
  393. package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
  394. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
  395. package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
  396. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
  397. package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
  398. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
  399. package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
  400. package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
  401. package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
  402. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
  403. package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
  404. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
  405. package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
  406. package/dist/esm/index.d.ts +11 -4
  407. package/dist/esm/index.d.ts.map +1 -1
  408. package/dist/esm/index.js +31 -4
  409. package/dist/esm/index.js.map +1 -1
  410. package/dist/esm/inject/models/container.d.ts.map +1 -1
  411. package/dist/esm/inject/models/container.js +78 -10
  412. package/dist/esm/inject/models/container.js.map +1 -1
  413. package/dist/esm/inject/models/service-types.d.ts +17 -3
  414. package/dist/esm/inject/models/service-types.d.ts.map +1 -1
  415. package/dist/esm/inject/models/service-types.js +19 -3
  416. package/dist/esm/inject/models/service-types.js.map +1 -1
  417. package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
  418. package/dist/esm/mcp/controllers/mcp.controller.js +20 -0
  419. package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
  420. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +56 -1
  421. package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
  422. package/dist/esm/mcp/services/mcp-server.backend.service.js +107 -11
  423. package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
  424. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
  425. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +22 -0
  426. package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
  427. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
  428. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
  429. package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
  430. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
  431. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
  432. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
  433. package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
  434. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
  435. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
  436. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
  437. package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
  438. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
  439. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
  440. package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
  441. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
  442. package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
  443. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
  444. package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
  445. package/dist/esm/monitoring/logger/services/logger.service.d.ts +12 -0
  446. package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
  447. package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
  448. package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
  449. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
  450. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
  451. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
  452. package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
  453. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +309 -0
  454. package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
  455. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +385 -0
  456. package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
  457. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
  458. package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
  459. package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
  460. package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
  461. package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
  462. package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
  463. package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
  464. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
  465. package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
  466. package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
  467. package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
  468. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
  469. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
  470. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
  471. package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
  472. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
  473. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
  474. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
  475. package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
  476. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
  477. package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
  478. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
  479. package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
  480. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
  481. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
  482. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
  483. package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
  484. package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
  485. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
  486. package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
  487. package/dist/esm/notifications/email/services/email.backend.service.d.ts +60 -4
  488. package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
  489. package/dist/esm/notifications/email/services/email.backend.service.js +145 -43
  490. package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
  491. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
  492. package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
  493. package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
  494. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
  495. package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
  496. package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
  497. package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
  498. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +99 -13
  499. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
  500. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +422 -66
  501. package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
  502. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +2 -2
  503. package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
  504. package/dist/esm/notifications/sms/services/sms.backend.service.js +5 -5
  505. package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
  506. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
  507. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
  508. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
  509. package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
  510. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
  511. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
  512. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +46 -1
  513. package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
  514. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
  515. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +16 -6
  516. package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
  517. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
  518. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +12 -12
  519. package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
  520. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
  521. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
  522. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
  523. package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
  524. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
  525. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
  526. package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
  527. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
  528. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
  529. package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
  530. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
  531. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
  532. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
  533. package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
  534. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
  535. package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
  536. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
  537. package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
  538. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
  539. package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
  540. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
  541. package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
  542. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
  543. package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
  544. package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
  545. package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
  546. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
  547. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
  548. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
  549. package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
  550. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
  551. package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
  552. package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
  553. package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
  554. package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
  555. package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
  556. package/dist/esm/queue/job-consumer.backend.service.js +1 -4
  557. package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
  558. package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
  559. package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
  560. package/dist/esm/queue/job-executor.backend.service.js +1 -4
  561. package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
  562. package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
  563. package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
  564. package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
  565. package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
  566. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
  567. package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
  568. package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
  569. package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
  570. package/dist/esm/queue/queue.backend.service.d.ts +3 -3
  571. package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
  572. package/dist/esm/queue/queue.backend.service.js +26 -4
  573. package/dist/esm/queue/queue.backend.service.js.map +1 -1
  574. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
  575. package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
  576. package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
  577. package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
  578. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
  579. package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
  580. package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
  581. package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
  582. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
  583. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
  584. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
  585. package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
  586. package/dist/esm/requests/service/websocket.service.d.ts +9 -0
  587. package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
  588. package/dist/esm/requests/service/websocket.service.js +32 -8
  589. package/dist/esm/requests/service/websocket.service.js.map +1 -1
  590. package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
  591. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +14 -2
  592. package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
  593. package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
  594. package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
  595. package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
  596. package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
  597. package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
  598. package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
  599. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
  600. package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
  601. package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
  602. package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
  603. package/dist/esm/resources/services/resources-registry.backend.service.d.ts +60 -5
  604. package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
  605. package/dist/esm/resources/services/resources-registry.backend.service.js +90 -6
  606. package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
  607. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
  608. package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
  609. package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
  610. package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
  611. package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
  612. package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
  613. package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
  614. package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
  615. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
  616. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
  617. package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
  618. package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
  619. package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
  620. package/dist/esm/runtime/services/http-server.backend.service.js +181 -1
  621. package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
  622. package/dist/esm/runtime/services/start-application.backend.service.d.ts +19 -1
  623. package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
  624. package/dist/esm/runtime/services/start-application.backend.service.js +261 -77
  625. package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
  626. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
  627. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
  628. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
  629. package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
  630. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
  631. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
  632. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
  633. package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
  634. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
  635. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +29 -4
  636. package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
  637. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
  638. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
  639. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
  640. package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
  641. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
  642. package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
  643. package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
  644. package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
  645. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +15 -0
  646. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
  647. package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
  648. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
  649. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
  650. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
  651. package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
  652. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
  653. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
  654. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
  655. package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
  656. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
  657. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
  658. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
  659. package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
  660. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
  661. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
  662. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
  663. package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
  664. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +190 -0
  665. package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
  666. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +377 -53
  667. package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
  668. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
  669. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +68 -1
  670. package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
  671. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
  672. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
  673. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
  674. package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
  675. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
  676. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +42 -1
  677. package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
  678. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
  679. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +34 -4
  680. package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
  681. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
  682. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
  683. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
  684. package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
  685. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +17 -1
  686. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
  687. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +49 -17
  688. package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
  689. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
  690. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
  691. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
  692. package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
  693. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
  694. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
  695. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
  696. package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
  697. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
  698. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
  699. package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
  700. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
  701. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
  702. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +283 -0
  703. package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
  704. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
  705. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
  706. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
  707. package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
  708. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
  709. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
  710. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
  711. package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
  712. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
  713. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
  714. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
  715. package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
  716. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
  717. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
  718. package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
  719. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
  720. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
  721. package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
  722. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
  723. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
  724. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
  725. package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
  726. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
  727. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
  728. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
  729. package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
  730. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
  731. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
  732. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
  733. package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
  734. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
  735. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
  736. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
  737. package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
  738. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
  739. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +77 -3
  740. package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
  741. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
  742. package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
  743. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
  744. package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
  745. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +93 -0
  746. package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
  747. package/dist/esm/security/authorizations/role-conferral.backend.utils.js +95 -0
  748. package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
  749. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +124 -1
  750. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
  751. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +142 -5
  752. package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
  753. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +74 -8
  754. package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
  755. package/dist/esm/security/authorizations/services/authorizations.backend.service.js +175 -19
  756. package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
  757. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
  758. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
  759. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
  760. package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
  761. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
  762. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
  763. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
  764. package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
  765. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +161 -0
  766. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
  767. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +512 -0
  768. package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
  769. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +59 -0
  770. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
  771. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
  772. package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
  773. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
  774. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
  775. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
  776. package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
  777. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +191 -0
  778. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
  779. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +385 -0
  780. package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
  781. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
  782. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  783. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
  784. package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
  785. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
  786. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
  787. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +266 -0
  788. package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
  789. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +111 -0
  790. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
  791. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +107 -0
  792. package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
  793. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
  794. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
  795. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
  796. package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
  797. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +195 -0
  798. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
  799. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +387 -0
  800. package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
  801. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
  802. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
  803. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
  804. package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
  805. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +62 -0
  806. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
  807. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
  808. package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
  809. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
  810. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
  811. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
  812. package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
  813. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
  814. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
  815. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
  816. package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
  817. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +21 -3
  818. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
  819. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +26 -16
  820. package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
  821. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
  822. package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
  823. package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
  824. package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
  825. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
  826. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
  827. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
  828. package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
  829. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
  830. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
  831. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
  832. package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
  833. package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
  834. package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
  835. package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
  836. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
  837. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
  838. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
  839. package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
  840. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
  841. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
  842. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
  843. package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
  844. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
  845. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
  846. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
  847. package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
  848. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
  849. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
  850. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
  851. package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
  852. package/dist/tsconfig.build.tsbuildinfo +1 -1
  853. package/package.json +11 -9
@@ -1 +1 @@
1
- {"version":3,"file":"stripe-standard-billing-provider.backend.service.js","sourceRoot":"","sources":["../../../../../src/billing/services/stripe-standard-billing-provider.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from 'node:module';\nimport {\n PricingModel,\n TaxDisplayMode,\n type StandardBilling_Interface,\n type StandardBilling_CreateCustomerRequest,\n type StandardBilling_CreateCustomerResponse,\n type StandardBilling_UpdateCustomerRequest,\n type StandardBilling_PaymentMethodSummary,\n type StandardBilling_SyncProductRequest,\n type StandardBilling_SyncProductResponse,\n type StandardBilling_SyncPriceRequest,\n type StandardBilling_SyncPriceResponse,\n type StandardBilling_CreateSubscriptionRequest,\n type StandardBilling_CreateSubscriptionResponse,\n type StandardBilling_UpdateSubscriptionRequest,\n type StandardBilling_CancelSubscriptionOptions,\n type StandardBilling_SubscriptionData,\n type StandardBilling_InvoicePreview,\n type StandardBilling_CreateCheckoutSessionRequest,\n type StandardBilling_CreateCheckoutSessionResponse,\n type StandardBilling_CreateCustomerPortalSessionResponse,\n type StandardBilling_ReportUsageRequest,\n type StandardBilling_WebhookEvent,\n type StandardBilling_CreateCouponRequest,\n type StandardBilling_CreateCouponResponse,\n type StandardBilling_CreatePromotionCodeResponse,\n type SubscriptionStatus,\n StandardBilling_EventType,\n} from '@wildo-ai/external-connectors-models';\n\nconst require = createRequire(import.meta.url);\n\nconst STRIPE_STATUS_MAP: Record<string, SubscriptionStatus> = {\n active: 'active' as SubscriptionStatus,\n past_due: 'past_due' as SubscriptionStatus,\n unpaid: 'unpaid' as SubscriptionStatus,\n canceled: 'cancelled' as SubscriptionStatus,\n incomplete: 'incomplete' as SubscriptionStatus,\n incomplete_expired: 'incomplete_expired' as SubscriptionStatus,\n trialing: 'trialing' as SubscriptionStatus,\n paused: 'paused' as SubscriptionStatus,\n};\n\nconst STRIPE_EVENT_TYPE_MAP: Record<string, StandardBilling_WebhookEvent['type']> = {\n 'customer.updated': StandardBilling_EventType.CUSTOMER_UPDATED,\n 'customer.deleted': StandardBilling_EventType.CUSTOMER_DELETED,\n 'checkout.session.completed': StandardBilling_EventType.CHECKOUT_SESSION_COMPLETED,\n 'customer.subscription.created': StandardBilling_EventType.SUBSCRIPTION_CREATED,\n 'customer.subscription.updated': StandardBilling_EventType.SUBSCRIPTION_UPDATED,\n 'customer.subscription.deleted': StandardBilling_EventType.SUBSCRIPTION_DELETED,\n 'customer.subscription.trial_will_end': StandardBilling_EventType.SUBSCRIPTION_TRIAL_WILL_END,\n 'invoice.paid': StandardBilling_EventType.INVOICE_PAID,\n 'invoice.payment_failed': StandardBilling_EventType.INVOICE_PAYMENT_FAILED,\n 'invoice.finalized': StandardBilling_EventType.INVOICE_FINALIZED,\n 'coupon.created': StandardBilling_EventType.COUPON_CREATED,\n 'coupon.updated': StandardBilling_EventType.COUPON_UPDATED,\n 'coupon.deleted': StandardBilling_EventType.COUPON_DELETED,\n 'customer.discount.created': StandardBilling_EventType.CUSTOMER_DISCOUNT_CREATED,\n 'customer.discount.updated': StandardBilling_EventType.CUSTOMER_DISCOUNT_UPDATED,\n 'customer.discount.deleted': StandardBilling_EventType.CUSTOMER_DISCOUNT_DELETED,\n 'payment_method.attached': StandardBilling_EventType.PAYMENT_METHOD_ATTACHED,\n 'payment_method.detached': StandardBilling_EventType.PAYMENT_METHOD_DETACHED,\n};\n\nexport class StripeStandardBillingProvider implements StandardBilling_Interface {\n readonly webhookSignatureHeaderName = 'stripe-signature';\n private stripe: any | null = null;\n\n constructor(\n private readonly secretKey: string,\n private readonly apiVersion = '2026-01-28.clover',\n ) {}\n\n private getStripe(): any {\n if (!this.stripe) {\n const mod = require('stripe');\n const StripeSDK = mod.default ?? mod;\n this.stripe = new StripeSDK(this.secretKey, {\n apiVersion: this.apiVersion,\n typescript: true,\n });\n }\n return this.stripe;\n }\n\n async createCustomer(request: StandardBilling_CreateCustomerRequest): Promise<StandardBilling_CreateCustomerResponse> {\n const customer = await this.getStripe().customers.create({\n name: request.name,\n email: request.email,\n metadata: request.metadata,\n });\n return { providerCustomerId: customer.id };\n }\n\n async updateCustomer(providerCustomerId: string, request: StandardBilling_UpdateCustomerRequest): Promise<void> {\n await this.getStripe().customers.update(providerCustomerId, {\n ...(request.name !== undefined && { name: request.name }),\n ...(request.email !== undefined && { email: request.email }),\n ...(request.metadata !== undefined && { metadata: request.metadata }),\n // `null` is FORWARDED, not dropped: the standard interface uses `undefined` for \"leave it\" and\n // `null` for \"blank it\", and Stripe honours the same distinction. Guarding on `!== undefined`\n // (rather than truthiness) is what keeps a clear from being silently swallowed — the erasure\n // path depends on it.\n ...(request.phone !== undefined && { phone: request.phone === null ? '' : request.phone }),\n ...(request.address !== undefined && {\n address: request.address === null ? null : {\n ...(request.address.line1 !== undefined && { line1: request.address.line1 ?? '' }),\n ...(request.address.line2 !== undefined && { line2: request.address.line2 ?? '' }),\n ...(request.address.city !== undefined && { city: request.address.city ?? '' }),\n ...(request.address.state !== undefined && { state: request.address.state ?? '' }),\n ...(request.address.postalCode !== undefined && { postal_code: request.address.postalCode ?? '' }),\n ...(request.address.country !== undefined && { country: request.address.country ?? '' }),\n },\n }),\n });\n }\n\n async deleteCustomer(providerCustomerId: string): Promise<void> {\n await this.getStripe().customers.del(providerCustomerId);\n }\n\n async listPaymentMethods(providerCustomerId: string): Promise<StandardBilling_PaymentMethodSummary[]> {\n // No `type` filter: Stripe returns every attached instrument kind when it is omitted, and an\n // erasure must enumerate ALL of them — filtering to 'card' would silently leave SEPA/ACH\n // mandates attached. `autoPagingToArray` because a customer may hold more than one page.\n const paymentMethods = await this.getStripe().paymentMethods\n .list({ customer: providerCustomerId })\n .autoPagingToArray({ limit: 100 });\n return paymentMethods.map((paymentMethod) => ({\n providerPaymentMethodId: paymentMethod.id,\n type: paymentMethod.type,\n ...(paymentMethod.card?.last4 ? { last4: paymentMethod.card.last4 } : {}),\n }));\n }\n\n async detachPaymentMethod(providerPaymentMethodId: string): Promise<void> {\n await this.getStripe().paymentMethods.detach(providerPaymentMethodId);\n }\n\n async syncProduct(request: StandardBilling_SyncProductRequest): Promise<StandardBilling_SyncProductResponse> {\n const params = {\n name: request.name,\n description: request.description,\n metadata: { ...request.metadata, wildo_product_key: request.productKey },\n };\n\n // Known provider id → update it directly (the caller already holds the link).\n if (request.providerProductId) {\n const product = await this.getStripe().products.update(request.providerProductId, params);\n return { providerProductId: product.id };\n }\n\n // No local provider id → NEVER blind-create. The catalog sync re-runs `syncProduct` for every\n // product whose LOCAL `providerProductId` is null (fresh DB, a failed link-back write, the first\n // sync after a reset), so a blind `products.create` forks a NEW provider product on every run —\n // which is exactly how the test account accumulated ~10 duplicates per key. Look the product up\n // by its stable `wildo_product_key` and reuse it; only create when it genuinely does not exist.\n const existingId = await this.findProviderProductByWildoKey(request.productKey);\n if (existingId) {\n const product = await this.getStripe().products.update(existingId, params);\n return { providerProductId: product.id };\n }\n\n const product = await this.getStripe().products.create(params);\n return { providerProductId: product.id };\n }\n\n /**\n * Resolve an existing Stripe product id for a `wildo_product_key`, or `null`.\n *\n * `products.search` is the metadata-query API but is eventually consistent (its index lags a\n * create by up to ~1 min), so a bounded active-product list scan is used as an exact fallback.\n * Returns the FIRST active match — enough to converge the catalog onto a single provider product\n * per key going forward; residual pre-idempotency duplicates are archived out of band.\n */\n private async findProviderProductByWildoKey(productKey: string): Promise<string | null> {\n const stripe = this.getStripe();\n try {\n const res = await stripe.products.search({\n query: `active:'true' AND metadata['wildo_product_key']:'${productKey}'`,\n limit: 1,\n });\n if (res.data.length > 0) return res.data[0].id as string;\n } catch {\n // Search index not ready / unavailable — fall through to the exact list scan.\n }\n for await (const product of stripe.products.list({ active: true, limit: 100 })) {\n if (product.metadata?.wildo_product_key === productKey) return product.id as string;\n }\n return null;\n }\n\n async syncPrice(request: StandardBilling_SyncPriceRequest): Promise<StandardBilling_SyncPriceResponse> {\n if (request.providerPriceId) {\n await this.getStripe().prices.update(request.providerPriceId, { active: false });\n }\n\n const params: Record<string, unknown> = {\n product: request.providerProductId,\n currency: request.currency,\n metadata: request.metadata,\n ...(request.taxBehavior && { tax_behavior: request.taxBehavior === TaxDisplayMode.EXCLUSIVE ? 'exclusive' : 'inclusive' }),\n };\n\n if (request.tiers?.length) {\n params.billing_scheme = 'tiered';\n params.tiers_mode = request.model === PricingModel.TIERED ? 'volume' : 'graduated';\n params.tiers = request.tiers.map((tier) => ({\n up_to: tier.upTo === null ? 'inf' : tier.upTo,\n unit_amount: tier.unitAmount,\n flat_amount: tier.flatAmount,\n }));\n } else {\n params.unit_amount = request.amount;\n }\n\n if (request.packageSize && request.packageSize > 1) {\n params.transform_quantity = { divide_by: request.packageSize, round: 'up' };\n }\n if (request.interval) {\n params.recurring = { interval: request.interval === 'year' ? 'year' : 'month' };\n }\n\n // Idempotency: a Stripe price is immutable, so re-running the catalog sync with a null local\n // `providerPriceId` would mint a duplicate active price on the product every run (the same\n // failure mode as products). When there is no local link, reuse an existing active price on the\n // product of the same commercial shape (currency + recurrence + scheme + flat amount) instead of\n // creating another. Any genuine change (amount edit) falls through to create — and when the\n // caller DID hold `providerPriceId`, the old one was already deactivated above.\n if (!request.providerPriceId) {\n const existingPriceId = await this.findMatchingActivePrice(request);\n if (existingPriceId) return { providerPriceId: existingPriceId };\n }\n\n const price = await this.getStripe().prices.create(params);\n return { providerPriceId: price.id };\n }\n\n /**\n * Resolve an existing active Stripe price on the product that matches the requested commercial\n * shape, or `null`. Conservative by design: it only reuses when currency, recurrence, billing\n * scheme AND (for flat prices) unit amount all match — a mismatch (e.g. a repriced plan) returns\n * `null` so the caller creates a fresh price. Tiered prices match on shape only (currency +\n * recurrence + tiered scheme); an exact tier-by-tier compare is deferred as lower value.\n */\n private async findMatchingActivePrice(request: StandardBilling_SyncPriceRequest): Promise<string | null> {\n if (!request.providerProductId) return null;\n const stripe = this.getStripe();\n const wantsRecurring = Boolean(request.interval);\n const wantInterval = request.interval === 'year' ? 'year' : request.interval ? 'month' : null;\n const wantsTiered = Boolean(request.tiers?.length);\n const wantCurrency = request.currency.toLowerCase();\n\n for await (const price of stripe.prices.list({ product: request.providerProductId, active: true, limit: 100 })) {\n if (price.currency !== wantCurrency) continue;\n if (Boolean(price.recurring) !== wantsRecurring) continue;\n if (wantsRecurring && price.recurring?.interval !== wantInterval) continue;\n if ((price.billing_scheme === 'tiered') !== wantsTiered) continue;\n if (!wantsTiered && price.unit_amount !== request.amount) continue;\n return price.id as string;\n }\n return null;\n }\n\n async createSubscription(request: StandardBilling_CreateSubscriptionRequest): Promise<StandardBilling_CreateSubscriptionResponse> {\n const subscription = await this.getStripe().subscriptions.create({\n customer: request.providerCustomerId,\n items: request.items.map((item) => ({ price: item.providerPriceId, quantity: item.quantity })),\n metadata: request.metadata,\n ...(request.trialPeriodDays && { trial_period_days: request.trialPeriodDays }),\n ...(request.providerPromotionCodeId && { promotion_code: request.providerPromotionCodeId }),\n });\n return { providerSubscriptionId: subscription.id, status: subscription.status };\n }\n\n async updateSubscription(providerSubscriptionId: string, request: StandardBilling_UpdateSubscriptionRequest): Promise<void> {\n await this.getStripe().subscriptions.update(providerSubscriptionId, {\n metadata: request.metadata,\n ...(request.providerPromotionCodeId && { promotion_code: request.providerPromotionCodeId }),\n ...(request.items && {\n items: request.items.map((item) => ({\n ...(item.providerSubscriptionItemId ? { id: item.providerSubscriptionItemId } : {}),\n price: item.providerPriceId,\n quantity: item.quantity,\n })),\n }),\n });\n }\n\n async cancelSubscription(providerSubscriptionId: string, options?: StandardBilling_CancelSubscriptionOptions): Promise<void> {\n if (options?.atPeriodEnd) {\n await this.getStripe().subscriptions.update(providerSubscriptionId, { cancel_at_period_end: true });\n return;\n }\n await this.getStripe().subscriptions.cancel(providerSubscriptionId);\n }\n\n async pauseSubscription(providerSubscriptionId: string): Promise<void> {\n await this.getStripe().subscriptions.update(providerSubscriptionId, { pause_collection: { behavior: 'void' } });\n }\n\n async resumeSubscription(providerSubscriptionId: string): Promise<void> {\n await this.getStripe().subscriptions.update(providerSubscriptionId, { pause_collection: '' });\n }\n\n async retrieveSubscription(providerSubscriptionId: string): Promise<StandardBilling_SubscriptionData> {\n const sub = await this.getStripe().subscriptions.retrieve(providerSubscriptionId, { expand: ['items.data.price'] });\n const firstItem = sub.items.data[0];\n if (!firstItem) throw new Error(`Stripe subscription ${providerSubscriptionId} has no items`);\n return {\n providerSubscriptionId: sub.id,\n status: (STRIPE_STATUS_MAP[sub.status] || sub.status) as SubscriptionStatus,\n currentPeriodStart: new Date(firstItem.current_period_start * 1000),\n currentPeriodEnd: new Date(firstItem.current_period_end * 1000),\n cancelAtPeriodEnd: sub.cancel_at_period_end,\n trialEnd: sub.trial_end ? new Date(sub.trial_end * 1000) : undefined,\n items: sub.items.data.map((item: any) => ({\n providerSubscriptionItemId: item.id,\n providerProductId: typeof item.price.product === 'string' ? item.price.product : item.price.product.id,\n providerPriceId: item.price.id,\n quantity: item.quantity ?? 1,\n })),\n };\n }\n\n async retrieveUpcomingInvoice(providerSubscriptionId: string, newPriceId?: string): Promise<StandardBilling_InvoicePreview> {\n const params: Record<string, unknown> = { subscription: providerSubscriptionId };\n if (newPriceId) {\n const sub = await this.getStripe().subscriptions.retrieve(providerSubscriptionId);\n const currentItemId = sub.items.data[0]?.id;\n if (currentItemId) params.subscription_details = { items: [{ id: currentItemId, price: newPriceId }] };\n }\n const invoice = await this.getStripe().invoices.createPreview(params);\n return {\n amount: invoice.amount_due,\n currency: invoice.currency,\n lineItems: (invoice.lines?.data || []).map((line: any) => ({\n description: line.description || '',\n amount: line.amount,\n quantity: line.quantity ?? 1,\n providerPriceId: typeof line.pricing?.price_details?.price === 'string'\n ? line.pricing.price_details.price\n : line.pricing?.price_details?.price?.id,\n })),\n periodStart: new Date(invoice.period_start * 1000),\n periodEnd: new Date(invoice.period_end * 1000),\n };\n }\n\n async createCheckoutSession(request: StandardBilling_CreateCheckoutSessionRequest): Promise<StandardBilling_CreateCheckoutSessionResponse> {\n const session = await this.getStripe().checkout.sessions.create({\n customer: request.providerCustomerId,\n line_items: request.lineItems.map((item) => ({ price: item.providerPriceId, quantity: item.quantity ?? 1 })),\n mode: request.mode,\n success_url: request.successUrl,\n cancel_url: request.cancelUrl,\n metadata: request.metadata,\n ...(request.allowPromotionCodes && { allow_promotion_codes: true }),\n ...(request.providerPromotionCodeId && { discounts: [{ promotion_code: request.providerPromotionCodeId }] }),\n ...(request.trialPeriodDays && { subscription_data: { trial_period_days: request.trialPeriodDays } }),\n });\n return { url: session.url!, sessionId: session.id };\n }\n\n async createCustomerPortalSession(providerCustomerId: string, returnUrl: string): Promise<StandardBilling_CreateCustomerPortalSessionResponse> {\n const session = await this.getStripe().billingPortal.sessions.create({ customer: providerCustomerId, return_url: returnUrl });\n return { url: session.url };\n }\n\n async reportUsage(request: StandardBilling_ReportUsageRequest): Promise<void> {\n await this.getStripe().billing.meterEvents.create({\n event_name: request.meterEventName,\n payload: { stripe_customer_id: request.providerCustomerId, value: String(request.value) },\n ...(request.timestamp && { timestamp: Math.floor(request.timestamp.getTime() / 1000) }),\n ...(request.identifier && { identifier: request.identifier }),\n });\n }\n\n verifyWebhookSignature(payload: string | Uint8Array, signature: string, secret: string): boolean {\n try {\n const body = payload instanceof Uint8Array ? Buffer.from(payload) : payload;\n this.getStripe().webhooks.constructEvent(body, signature, secret);\n return true;\n } catch {\n return false;\n }\n }\n\n parseWebhookEvent(payload: string | Uint8Array): StandardBilling_WebhookEvent | null {\n const raw = typeof payload === 'string' ? JSON.parse(payload) : JSON.parse(new TextDecoder().decode(payload));\n const type = STRIPE_EVENT_TYPE_MAP[raw.type];\n if (!type) return null;\n return {\n type,\n providerEventId: raw.id,\n data: raw.data?.object || {},\n createdAt: new Date(raw.created * 1000),\n };\n }\n\n async createCoupon(request: StandardBilling_CreateCouponRequest): Promise<StandardBilling_CreateCouponResponse> {\n const coupon = await this.getStripe().coupons.create({\n metadata: request.metadata,\n ...(request.amountOff !== undefined && { amount_off: request.amountOff, currency: request.currency }),\n ...(request.percentOff !== undefined && { percent_off: request.percentOff }),\n duration: request.duration,\n ...(request.durationInMonths && { duration_in_months: request.durationInMonths }),\n ...(request.maxRedemptions && { max_redemptions: request.maxRedemptions }),\n });\n return { providerCouponId: coupon.id };\n }\n\n async createPromotionCode(providerCouponId: string, code: string): Promise<StandardBilling_CreatePromotionCodeResponse> {\n const promotionCode = await this.getStripe().promotionCodes.create({\n promotion: { type: 'coupon', coupon: providerCouponId },\n code,\n });\n return { providerPromotionId: promotionCode.id };\n }\n}\n"]}
1
+ {"version":3,"file":"stripe-standard-billing-provider.backend.service.js","sourceRoot":"","sources":["../../../../../src/billing/services/stripe-standard-billing-provider.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from 'node:module';\nimport {\n PricingModel,\n TaxDisplayMode,\n type StandardBilling_Interface,\n type StandardBilling_CreateCustomerRequest,\n type StandardBilling_CreateCustomerResponse,\n type StandardBilling_UpdateCustomerRequest,\n type StandardBilling_PaymentMethodSummary,\n type StandardBilling_SyncProductRequest,\n type StandardBilling_SyncProductResponse,\n type StandardBilling_SyncPriceRequest,\n type StandardBilling_SyncPriceResponse,\n type StandardBilling_CreateSubscriptionRequest,\n type StandardBilling_CreateSubscriptionResponse,\n type StandardBilling_UpdateSubscriptionRequest,\n type StandardBilling_CancelSubscriptionOptions,\n type StandardBilling_SubscriptionData,\n type StandardBilling_InvoicePreview,\n type StandardBilling_InvoiceData,\n type StandardBilling_CreateCheckoutSessionRequest,\n type StandardBilling_CreateCheckoutSessionResponse,\n type StandardBilling_CreateCustomerPortalSessionResponse,\n type StandardBilling_ReportUsageRequest,\n type StandardBilling_WebhookEvent,\n type StandardBilling_CreateCouponRequest,\n type StandardBilling_CreateCouponResponse,\n type StandardBilling_CreatePromotionCodeResponse,\n type SubscriptionStatus,\n InvoiceStatus,\n StandardBilling_EventType,\n} from '@wildo-ai/external-connectors-models';\n\nconst require = createRequire(import.meta.url);\n\nconst STRIPE_STATUS_MAP: Record<string, SubscriptionStatus> = {\n active: 'active' as SubscriptionStatus,\n past_due: 'past_due' as SubscriptionStatus,\n unpaid: 'unpaid' as SubscriptionStatus,\n canceled: 'cancelled' as SubscriptionStatus,\n incomplete: 'incomplete' as SubscriptionStatus,\n incomplete_expired: 'incomplete_expired' as SubscriptionStatus,\n trialing: 'trialing' as SubscriptionStatus,\n paused: 'paused' as SubscriptionStatus,\n};\n\n/**\n * Stripe invoice status → the canonical vocabulary.\n *\n * Every member of both enums is spelled identically today, so this map looks redundant. It is not:\n * without it an unrecognised Stripe status would be cast through as a canonical one, and the sweep\n * that compares statuses would then WRITE a value the local schema's `z.enum` refuses — a repair\n * that fails validation on a row it was trying to correct. An unknown status is a mapping gap, and\n * `listInvoices` treats it as one rather than guessing.\n */\nconst STRIPE_INVOICE_STATUS_MAP: Record<string, InvoiceStatus> = {\n draft: InvoiceStatus.DRAFT,\n open: InvoiceStatus.OPEN,\n paid: InvoiceStatus.PAID,\n void: InvoiceStatus.VOID,\n uncollectible: InvoiceStatus.UNCOLLECTIBLE,\n};\n\n/** Upper bound Stripe itself enforces on `invoices.list`. Asking for more is an API error, not a bigger page. */\nconst STRIPE_INVOICE_LIST_MAX_LIMIT = 100;\n\nconst STRIPE_EVENT_TYPE_MAP: Record<string, StandardBilling_WebhookEvent['type']> = {\n 'customer.updated': StandardBilling_EventType.CUSTOMER_UPDATED,\n 'customer.deleted': StandardBilling_EventType.CUSTOMER_DELETED,\n 'checkout.session.completed': StandardBilling_EventType.CHECKOUT_SESSION_COMPLETED,\n 'customer.subscription.created': StandardBilling_EventType.SUBSCRIPTION_CREATED,\n 'customer.subscription.updated': StandardBilling_EventType.SUBSCRIPTION_UPDATED,\n 'customer.subscription.deleted': StandardBilling_EventType.SUBSCRIPTION_DELETED,\n 'customer.subscription.trial_will_end': StandardBilling_EventType.SUBSCRIPTION_TRIAL_WILL_END,\n 'invoice.paid': StandardBilling_EventType.INVOICE_PAID,\n 'invoice.payment_failed': StandardBilling_EventType.INVOICE_PAYMENT_FAILED,\n 'invoice.finalized': StandardBilling_EventType.INVOICE_FINALIZED,\n 'coupon.created': StandardBilling_EventType.COUPON_CREATED,\n 'coupon.updated': StandardBilling_EventType.COUPON_UPDATED,\n 'coupon.deleted': StandardBilling_EventType.COUPON_DELETED,\n 'customer.discount.created': StandardBilling_EventType.CUSTOMER_DISCOUNT_CREATED,\n 'customer.discount.updated': StandardBilling_EventType.CUSTOMER_DISCOUNT_UPDATED,\n 'customer.discount.deleted': StandardBilling_EventType.CUSTOMER_DISCOUNT_DELETED,\n 'payment_method.attached': StandardBilling_EventType.PAYMENT_METHOD_ATTACHED,\n 'payment_method.detached': StandardBilling_EventType.PAYMENT_METHOD_DETACHED,\n};\n\nexport class StripeStandardBillingProvider implements StandardBilling_Interface {\n readonly webhookSignatureHeaderName = 'stripe-signature';\n private stripe: any | null = null;\n\n constructor(\n private readonly secretKey: string,\n private readonly apiVersion = '2026-01-28.clover',\n ) {}\n\n private getStripe(): any {\n if (!this.stripe) {\n const mod = require('stripe');\n const StripeSDK = mod.default ?? mod;\n this.stripe = new StripeSDK(this.secretKey, {\n apiVersion: this.apiVersion,\n typescript: true,\n });\n }\n return this.stripe;\n }\n\n async createCustomer(request: StandardBilling_CreateCustomerRequest): Promise<StandardBilling_CreateCustomerResponse> {\n const customer = await this.getStripe().customers.create({\n name: request.name,\n email: request.email,\n metadata: request.metadata,\n });\n return { providerCustomerId: customer.id };\n }\n\n async updateCustomer(providerCustomerId: string, request: StandardBilling_UpdateCustomerRequest): Promise<void> {\n await this.getStripe().customers.update(providerCustomerId, {\n ...(request.name !== undefined && { name: request.name }),\n ...(request.email !== undefined && { email: request.email }),\n ...(request.metadata !== undefined && { metadata: request.metadata }),\n // `null` is FORWARDED, not dropped: the standard interface uses `undefined` for \"leave it\" and\n // `null` for \"blank it\", and Stripe honours the same distinction. Guarding on `!== undefined`\n // (rather than truthiness) is what keeps a clear from being silently swallowed — the erasure\n // path depends on it.\n ...(request.phone !== undefined && { phone: request.phone === null ? '' : request.phone }),\n ...(request.address !== undefined && {\n address: request.address === null ? null : {\n ...(request.address.line1 !== undefined && { line1: request.address.line1 ?? '' }),\n ...(request.address.line2 !== undefined && { line2: request.address.line2 ?? '' }),\n ...(request.address.city !== undefined && { city: request.address.city ?? '' }),\n ...(request.address.state !== undefined && { state: request.address.state ?? '' }),\n ...(request.address.postalCode !== undefined && { postal_code: request.address.postalCode ?? '' }),\n ...(request.address.country !== undefined && { country: request.address.country ?? '' }),\n },\n }),\n });\n }\n\n async deleteCustomer(providerCustomerId: string): Promise<void> {\n await this.getStripe().customers.del(providerCustomerId);\n }\n\n async listPaymentMethods(providerCustomerId: string): Promise<StandardBilling_PaymentMethodSummary[]> {\n // No `type` filter: Stripe returns every attached instrument kind when it is omitted, and an\n // erasure must enumerate ALL of them — filtering to 'card' would silently leave SEPA/ACH\n // mandates attached. `autoPagingToArray` because a customer may hold more than one page.\n const paymentMethods = await this.getStripe().paymentMethods\n .list({ customer: providerCustomerId })\n .autoPagingToArray({ limit: 100 });\n return paymentMethods.map((paymentMethod) => ({\n providerPaymentMethodId: paymentMethod.id,\n type: paymentMethod.type,\n ...(paymentMethod.card?.last4 ? { last4: paymentMethod.card.last4 } : {}),\n }));\n }\n\n async detachPaymentMethod(providerPaymentMethodId: string): Promise<void> {\n await this.getStripe().paymentMethods.detach(providerPaymentMethodId);\n }\n\n async syncProduct(request: StandardBilling_SyncProductRequest): Promise<StandardBilling_SyncProductResponse> {\n const params = {\n name: request.name,\n description: request.description,\n metadata: { ...request.metadata, wildo_product_key: request.productKey },\n };\n\n // Known provider id → update it directly (the caller already holds the link).\n if (request.providerProductId) {\n const product = await this.getStripe().products.update(request.providerProductId, params);\n return { providerProductId: product.id };\n }\n\n // No local provider id → NEVER blind-create. The catalog sync re-runs `syncProduct` for every\n // product whose LOCAL `providerProductId` is null (fresh DB, a failed link-back write, the first\n // sync after a reset), so a blind `products.create` forks a NEW provider product on every run —\n // which is exactly how the test account accumulated ~10 duplicates per key. Look the product up\n // by its stable `wildo_product_key` and reuse it; only create when it genuinely does not exist.\n const existingId = await this.findProviderProductByWildoKey(request.productKey);\n if (existingId) {\n const product = await this.getStripe().products.update(existingId, params);\n return { providerProductId: product.id };\n }\n\n const product = await this.getStripe().products.create(params);\n return { providerProductId: product.id };\n }\n\n /**\n * Resolve an existing Stripe product id for a `wildo_product_key`, or `null`.\n *\n * `products.search` is the metadata-query API but is eventually consistent (its index lags a\n * create by up to ~1 min), so a bounded active-product list scan is used as an exact fallback.\n * Returns the FIRST active match — enough to converge the catalog onto a single provider product\n * per key going forward; residual pre-idempotency duplicates are archived out of band.\n */\n private async findProviderProductByWildoKey(productKey: string): Promise<string | null> {\n const stripe = this.getStripe();\n try {\n const res = await stripe.products.search({\n query: `active:'true' AND metadata['wildo_product_key']:'${productKey}'`,\n limit: 1,\n });\n if (res.data.length > 0) return res.data[0].id as string;\n } catch {\n // Search index not ready / unavailable — fall through to the exact list scan.\n }\n for await (const product of stripe.products.list({ active: true, limit: 100 })) {\n if (product.metadata?.wildo_product_key === productKey) return product.id as string;\n }\n return null;\n }\n\n async syncPrice(request: StandardBilling_SyncPriceRequest): Promise<StandardBilling_SyncPriceResponse> {\n if (request.providerPriceId) {\n await this.getStripe().prices.update(request.providerPriceId, { active: false });\n }\n\n const params: Record<string, unknown> = {\n product: request.providerProductId,\n currency: request.currency,\n metadata: request.metadata,\n ...(request.taxBehavior && { tax_behavior: request.taxBehavior === TaxDisplayMode.EXCLUSIVE ? 'exclusive' : 'inclusive' }),\n };\n\n if (request.tiers?.length) {\n params.billing_scheme = 'tiered';\n params.tiers_mode = request.model === PricingModel.TIERED ? 'volume' : 'graduated';\n params.tiers = request.tiers.map((tier) => ({\n up_to: tier.upTo === null ? 'inf' : tier.upTo,\n unit_amount: tier.unitAmount,\n flat_amount: tier.flatAmount,\n }));\n } else {\n params.unit_amount = request.amount;\n }\n\n if (request.packageSize && request.packageSize > 1) {\n params.transform_quantity = { divide_by: request.packageSize, round: 'up' };\n }\n if (request.interval) {\n params.recurring = { interval: request.interval === 'year' ? 'year' : 'month' };\n }\n\n // Idempotency: a Stripe price is immutable, so re-running the catalog sync with a null local\n // `providerPriceId` would mint a duplicate active price on the product every run (the same\n // failure mode as products). When there is no local link, reuse an existing active price on the\n // product of the same commercial shape (currency + recurrence + scheme + flat amount) instead of\n // creating another. Any genuine change (amount edit) falls through to create — and when the\n // caller DID hold `providerPriceId`, the old one was already deactivated above.\n if (!request.providerPriceId) {\n const existingPriceId = await this.findMatchingActivePrice(request);\n if (existingPriceId) return { providerPriceId: existingPriceId };\n }\n\n const price = await this.getStripe().prices.create(params);\n return { providerPriceId: price.id };\n }\n\n /**\n * Resolve an existing active Stripe price on the product that matches the requested commercial\n * shape, or `null`. Conservative by design: it only reuses when currency, recurrence, billing\n * scheme AND (for flat prices) unit amount all match — a mismatch (e.g. a repriced plan) returns\n * `null` so the caller creates a fresh price. Tiered prices match on shape only (currency +\n * recurrence + tiered scheme); an exact tier-by-tier compare is deferred as lower value.\n */\n private async findMatchingActivePrice(request: StandardBilling_SyncPriceRequest): Promise<string | null> {\n if (!request.providerProductId) return null;\n const stripe = this.getStripe();\n const wantsRecurring = Boolean(request.interval);\n const wantInterval = request.interval === 'year' ? 'year' : request.interval ? 'month' : null;\n const wantsTiered = Boolean(request.tiers?.length);\n const wantCurrency = request.currency.toLowerCase();\n\n for await (const price of stripe.prices.list({ product: request.providerProductId, active: true, limit: 100 })) {\n if (price.currency !== wantCurrency) continue;\n if (Boolean(price.recurring) !== wantsRecurring) continue;\n if (wantsRecurring && price.recurring?.interval !== wantInterval) continue;\n if ((price.billing_scheme === 'tiered') !== wantsTiered) continue;\n if (!wantsTiered && price.unit_amount !== request.amount) continue;\n return price.id as string;\n }\n return null;\n }\n\n async createSubscription(request: StandardBilling_CreateSubscriptionRequest): Promise<StandardBilling_CreateSubscriptionResponse> {\n const subscription = await this.getStripe().subscriptions.create({\n customer: request.providerCustomerId,\n items: request.items.map((item) => ({ price: item.providerPriceId, quantity: item.quantity })),\n metadata: request.metadata,\n ...(request.trialPeriodDays && { trial_period_days: request.trialPeriodDays }),\n ...(request.providerPromotionCodeId && { promotion_code: request.providerPromotionCodeId }),\n // #408: tax is COMPUTED only when the application asks for it. Until 2026-09-08 nothing here\n // enabled it, so `calculationMode: PROVIDER_MANAGED` changed nothing and the Stripe account's\n // own configuration silently decided.\n ...(request.automaticTax && { automatic_tax: { enabled: true } }),\n /*\n * #408: a trial that REQUIRES a payment method says so to Stripe in the only place it can —\n * what happens when the trial ends and none was collected. `cancel` is the reading that\n * matches the declaration: a trial declared as requiring a card must not roll into an unpaid\n * subscription. `createSubscription` has no production caller today (checkout is the live\n * purchase route), so this is the contract kept coherent rather than a live path.\n */\n ...(request.requirePaymentMethodForTrial && request.trialPeriodDays\n ? { trial_settings: { end_behavior: { missing_payment_method: 'cancel' as const } } }\n : {}),\n });\n return { providerSubscriptionId: subscription.id, status: subscription.status };\n }\n\n async updateSubscription(providerSubscriptionId: string, request: StandardBilling_UpdateSubscriptionRequest): Promise<void> {\n await this.getStripe().subscriptions.update(providerSubscriptionId, {\n metadata: request.metadata,\n /*\n * The authored proration finally reaches the provider (#516).\n *\n * No mapping table, deliberately: `ProrationBehavior`'s three values ARE Stripe's\n * `proration_behavior` values — `create_prorations`, `none`, `always_invoice` — which is why the\n * vocabulary moved to the protocol module rather than being translated here. If a second provider\n * ever spells them differently, THAT adapter maps; this one has nothing to map.\n *\n * Omitted when the caller sends none, so Stripe applies its account default — exactly what every\n * update did before this field existed. Sending an explicit value unconditionally would change\n * behaviour for callers that never authored a policy.\n */\n ...(request.prorationBehavior && { proration_behavior: request.prorationBehavior }),\n ...(request.providerPromotionCodeId && { promotion_code: request.providerPromotionCodeId }),\n ...(request.items && {\n items: request.items.map((item) => ({\n ...(item.providerSubscriptionItemId ? { id: item.providerSubscriptionItemId } : {}),\n price: item.providerPriceId,\n quantity: item.quantity,\n })),\n }),\n });\n }\n\n async cancelSubscription(providerSubscriptionId: string, options?: StandardBilling_CancelSubscriptionOptions): Promise<void> {\n if (options?.atPeriodEnd) {\n await this.getStripe().subscriptions.update(providerSubscriptionId, { cancel_at_period_end: true });\n return;\n }\n await this.getStripe().subscriptions.cancel(providerSubscriptionId);\n }\n\n async pauseSubscription(providerSubscriptionId: string): Promise<void> {\n await this.getStripe().subscriptions.update(providerSubscriptionId, { pause_collection: { behavior: 'void' } });\n }\n\n async resumeSubscription(providerSubscriptionId: string): Promise<void> {\n await this.getStripe().subscriptions.update(providerSubscriptionId, { pause_collection: '' });\n }\n\n async retrieveSubscription(providerSubscriptionId: string): Promise<StandardBilling_SubscriptionData> {\n const sub = await this.getStripe().subscriptions.retrieve(providerSubscriptionId, { expand: ['items.data.price'] });\n const firstItem = sub.items.data[0];\n if (!firstItem) throw new Error(`Stripe subscription ${providerSubscriptionId} has no items`);\n return {\n providerSubscriptionId: sub.id,\n status: (STRIPE_STATUS_MAP[sub.status] || sub.status) as SubscriptionStatus,\n currentPeriodStart: new Date(firstItem.current_period_start * 1000),\n currentPeriodEnd: new Date(firstItem.current_period_end * 1000),\n cancelAtPeriodEnd: sub.cancel_at_period_end,\n trialEnd: sub.trial_end ? new Date(sub.trial_end * 1000) : undefined,\n items: sub.items.data.map((item: any) => ({\n providerSubscriptionItemId: item.id,\n providerProductId: typeof item.price.product === 'string' ? item.price.product : item.price.product.id,\n providerPriceId: item.price.id,\n quantity: item.quantity ?? 1,\n })),\n };\n }\n\n async retrieveUpcomingInvoice(providerSubscriptionId: string, newPriceId?: string): Promise<StandardBilling_InvoicePreview> {\n const params: Record<string, unknown> = { subscription: providerSubscriptionId };\n if (newPriceId) {\n const sub = await this.getStripe().subscriptions.retrieve(providerSubscriptionId);\n const currentItemId = sub.items.data[0]?.id;\n if (currentItemId) params.subscription_details = { items: [{ id: currentItemId, price: newPriceId }] };\n }\n const invoice = await this.getStripe().invoices.createPreview(params);\n return {\n amount: invoice.amount_due,\n currency: invoice.currency,\n lineItems: (invoice.lines?.data || []).map((line: any) => ({\n description: line.description || '',\n amount: line.amount,\n quantity: line.quantity ?? 1,\n providerPriceId: typeof line.pricing?.price_details?.price === 'string'\n ? line.pricing.price_details.price\n : line.pricing?.price_details?.price?.id,\n })),\n periodStart: new Date(invoice.period_start * 1000),\n periodEnd: new Date(invoice.period_end * 1000),\n };\n }\n\n /**\n * One page of the customer's invoices, newest first.\n *\n * `total` rather than `amount_paid`, deliberately, and it disagrees with what the webhook router\n * records for the same invoice. The router reads `amount_paid ?? total`, which is `0` for every\n * invoice that is finalized-but-unpaid — so an OPEN invoice lands locally at zero. That reading is\n * not corrected here (it is a separate finding on a separate write path); what this file\n * guarantees is that the two never fight, because the reconciliation sweep only ever INSERTS a\n * total and never updates one.\n *\n * An invoice whose Stripe status is not in {@link STRIPE_INVOICE_STATUS_MAP} is SKIPPED rather\n * than defaulted. A defaulted status is a wrong fact about money written into a durable row; an\n * omitted invoice stays missing and is found again on the next tick, once the mapping is fixed.\n */\n async listInvoices(providerCustomerId: string, options?: { limit?: number }): Promise<StandardBilling_InvoiceData[]> {\n const page = await this.getStripe().invoices.list({\n customer: providerCustomerId,\n limit: Math.min(options?.limit ?? 20, STRIPE_INVOICE_LIST_MAX_LIMIT),\n });\n\n const invoices: StandardBilling_InvoiceData[] = [];\n for (const invoice of (page.data ?? []) as any[]) {\n const status = STRIPE_INVOICE_STATUS_MAP[invoice.status];\n if (!status || !invoice.id) continue;\n invoices.push({\n providerInvoiceId: invoice.id,\n providerCustomerId,\n status,\n total: invoice.total ?? 0,\n currency: invoice.currency,\n hostedInvoiceUrl: invoice.hosted_invoice_url ?? undefined,\n invoicePdfUrl: invoice.invoice_pdf ?? undefined,\n createdAt: new Date(invoice.created * 1000),\n });\n }\n return invoices;\n }\n\n async createCheckoutSession(request: StandardBilling_CreateCheckoutSessionRequest): Promise<StandardBilling_CreateCheckoutSessionResponse> {\n const session = await this.getStripe().checkout.sessions.create({\n customer: request.providerCustomerId,\n line_items: request.lineItems.map((item) => ({ price: item.providerPriceId, quantity: item.quantity ?? 1 })),\n mode: request.mode,\n success_url: request.successUrl,\n cancel_url: request.cancelUrl,\n metadata: request.metadata,\n ...(request.allowPromotionCodes && { allow_promotion_codes: true }),\n ...(request.providerPromotionCodeId && { discounts: [{ promotion_code: request.providerPromotionCodeId }] }),\n // #408 — see `createSubscription` above for why each of these exists.\n ...(request.automaticTax && { automatic_tax: { enabled: true } }),\n /*\n * `payment_method_collection` is the checkout-side half of the trial declaration: `always`\n * collects a card even when the session's immediate amount is zero, which is exactly the\n * free-trial case. Stripe's default is `if_required`, so without this a \"requires a payment\n * method\" trial collected nothing.\n *\n * Built as ONE `subscription_data` object rather than two spreads: a second spread of the same\n * key REPLACES the first, so composing trial days and trial settings separately would silently\n * drop whichever came first. That is the shape this file already had for trial days alone.\n */\n ...(request.requirePaymentMethodForTrial && { payment_method_collection: 'always' as const }),\n ...(request.trialPeriodDays\n ? {\n subscription_data: {\n trial_period_days: request.trialPeriodDays,\n ...(request.requirePaymentMethodForTrial\n ? { trial_settings: { end_behavior: { missing_payment_method: 'cancel' as const } } }\n : {}),\n },\n }\n : {}),\n });\n return { url: session.url!, sessionId: session.id };\n }\n\n async createCustomerPortalSession(providerCustomerId: string, returnUrl: string): Promise<StandardBilling_CreateCustomerPortalSessionResponse> {\n const session = await this.getStripe().billingPortal.sessions.create({ customer: providerCustomerId, return_url: returnUrl });\n return { url: session.url };\n }\n\n async reportUsage(request: StandardBilling_ReportUsageRequest): Promise<void> {\n await this.getStripe().billing.meterEvents.create({\n event_name: request.meterEventName,\n payload: { stripe_customer_id: request.providerCustomerId, value: String(request.value) },\n ...(request.timestamp && { timestamp: Math.floor(request.timestamp.getTime() / 1000) }),\n ...(request.identifier && { identifier: request.identifier }),\n });\n }\n\n verifyWebhookSignature(payload: string | Uint8Array, signature: string, secret: string): boolean {\n try {\n const body = payload instanceof Uint8Array ? Buffer.from(payload) : payload;\n this.getStripe().webhooks.constructEvent(body, signature, secret);\n return true;\n } catch {\n return false;\n }\n }\n\n parseWebhookEvent(payload: string | Uint8Array): StandardBilling_WebhookEvent | null {\n const raw = typeof payload === 'string' ? JSON.parse(payload) : JSON.parse(new TextDecoder().decode(payload));\n const type = STRIPE_EVENT_TYPE_MAP[raw.type];\n if (!type) return null;\n return {\n type,\n providerEventId: raw.id,\n data: raw.data?.object || {},\n createdAt: new Date(raw.created * 1000),\n };\n }\n\n async createCoupon(request: StandardBilling_CreateCouponRequest): Promise<StandardBilling_CreateCouponResponse> {\n const coupon = await this.getStripe().coupons.create({\n metadata: request.metadata,\n ...(request.amountOff !== undefined && { amount_off: request.amountOff, currency: request.currency }),\n ...(request.percentOff !== undefined && { percent_off: request.percentOff }),\n duration: request.duration,\n ...(request.durationInMonths && { duration_in_months: request.durationInMonths }),\n ...(request.maxRedemptions && { max_redemptions: request.maxRedemptions }),\n });\n return { providerCouponId: coupon.id };\n }\n\n async createPromotionCode(providerCouponId: string, code: string): Promise<StandardBilling_CreatePromotionCodeResponse> {\n const promotionCode = await this.getStripe().promotionCodes.create({\n promotion: { type: 'coupon', coupon: providerCouponId },\n code,\n });\n return { providerPromotionId: promotionCode.id };\n }\n}\n"]}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * An in-memory stand-in for the DURABLE settlement ledger the webhook router deduplicates against.
3
+ *
4
+ * ## Why a shared double rather than one fake per test file
5
+ *
6
+ * Four test files construct the router, and the ledger is now on the money path of every one of
7
+ * them — a file that fakes it slightly differently is a file whose "the grant happened" assertions
8
+ * are measuring a different mechanism from its neighbours'. The ledger's behaviour under
9
+ * concurrency is the whole subject of the fix, so it gets exactly one definition.
10
+ *
11
+ * ## What it models, and what it deliberately does not
12
+ *
13
+ * It models the ONE property the production store is relied on for: a second INSERT of a row whose
14
+ * `_id` already exists raises the engine's CLASSIFIED conflict — the adapter-neutral shape both
15
+ * `handleMongoDBError` (from `E11000`) and `handlePostgresError` (from SQLSTATE `23505`) produce.
16
+ * It does not model transactions, retention hiding, or scope filtering: none of those participate
17
+ * in the claim, and modelling them would make the double a second implementation to keep true.
18
+ *
19
+ * The map is exposed so a test can inspect the ledger's state — how many claims exist, whether a
20
+ * claim was closed — which is what distinguishes "granted nothing because it was already applied"
21
+ * from "granted nothing because the handler refused earlier".
22
+ */
23
+ export declare const SETTLEMENTS: string;
24
+ /**
25
+ * The classified CONFLICT a unique/primary-key violation becomes before it leaves the repository
26
+ * tier. Shaped for `isWildoBackendError`, which tests for `type`/`statusCode`/`severity`/
27
+ * `customMessageReference` — a plain `Error` would be re-thrown by the router instead of read as
28
+ * "already claimed", which is the distinction this double exists to keep honest.
29
+ */
30
+ export declare const classifiedPrimaryKeyConflict: () => Error;
31
+ export interface SettlementLedgerDouble {
32
+ /** The ledger rows, keyed by `_id`. Read it to assert what the handler claimed and closed. */
33
+ rows: Map<string, Record<string, unknown>>;
34
+ /** Pass as the router's `repositoriesRegistry` argument. */
35
+ registry: Record<string, unknown>;
36
+ /** Every guarded mutation the router aimed at a resource OTHER than the ledger. */
37
+ otherMutations: Array<{
38
+ resourceType: unknown;
39
+ filter: Record<string, any>;
40
+ mutation: Record<string, unknown>;
41
+ }>;
42
+ }
43
+ export declare function createSettlementLedgerDouble(options?: {
44
+ /**
45
+ * Result for a guarded mutation aimed at anything but the ledger — the promotion counter is the
46
+ * only such caller today. `null` models a compare-and-swap that matched nothing.
47
+ */
48
+ otherMutationResult?: () => unknown;
49
+ /** Make the ledger INSERT fail with something that is not a conflict, to pin the fail-closed path. */
50
+ insertFailure?: () => Error;
51
+ }): SettlementLedgerDouble;
52
+ //# sourceMappingURL=settlement-ledger.test-double.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement-ledger.test-double.d.ts","sourceRoot":"","sources":["../../../../../../../src/billing/services/webhooks/__tests__/settlement-ledger.test-double.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,EAAwE,MAAM,CAAC;AAEvG;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,QAAO,KAO5C,CAAC;AAEL,MAAM,WAAW,sBAAsB;IACrC,8FAA8F;IAC9F,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mFAAmF;IACnF,cAAc,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAClH;AAED,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE;IACrD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC;IACpC,sGAAsG;IACtG,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC;CAC7B,GAAG,sBAAsB,CAwCzB"}
@@ -0,0 +1,74 @@
1
+ import { vi } from 'vitest';
2
+ import { ErrorCustomMessageReference, ErrorType } from '@wildo-ai/saas-models';
3
+ import { BackendResourceType } from '../../../../resources/models/resources-types.backend.schemas.js';
4
+ /**
5
+ * An in-memory stand-in for the DURABLE settlement ledger the webhook router deduplicates against.
6
+ *
7
+ * ## Why a shared double rather than one fake per test file
8
+ *
9
+ * Four test files construct the router, and the ledger is now on the money path of every one of
10
+ * them — a file that fakes it slightly differently is a file whose "the grant happened" assertions
11
+ * are measuring a different mechanism from its neighbours'. The ledger's behaviour under
12
+ * concurrency is the whole subject of the fix, so it gets exactly one definition.
13
+ *
14
+ * ## What it models, and what it deliberately does not
15
+ *
16
+ * It models the ONE property the production store is relied on for: a second INSERT of a row whose
17
+ * `_id` already exists raises the engine's CLASSIFIED conflict — the adapter-neutral shape both
18
+ * `handleMongoDBError` (from `E11000`) and `handlePostgresError` (from SQLSTATE `23505`) produce.
19
+ * It does not model transactions, retention hiding, or scope filtering: none of those participate
20
+ * in the claim, and modelling them would make the double a second implementation to keep true.
21
+ *
22
+ * The map is exposed so a test can inspect the ledger's state — how many claims exist, whether a
23
+ * claim was closed — which is what distinguishes "granted nothing because it was already applied"
24
+ * from "granted nothing because the handler refused earlier".
25
+ */
26
+ export const SETTLEMENTS = BackendResourceType.BILLING_PROVIDER_EVENT_SETTLEMENTS;
27
+ /**
28
+ * The classified CONFLICT a unique/primary-key violation becomes before it leaves the repository
29
+ * tier. Shaped for `isWildoBackendError`, which tests for `type`/`statusCode`/`severity`/
30
+ * `customMessageReference` — a plain `Error` would be re-thrown by the router instead of read as
31
+ * "already claimed", which is the distinction this double exists to keep honest.
32
+ */
33
+ export const classifiedPrimaryKeyConflict = () => Object.assign(new Error('Unique constraint violation on _id'), {
34
+ type: ErrorType.CONFLICT,
35
+ statusCode: 409,
36
+ severity: 'low',
37
+ customMessageReference: ErrorCustomMessageReference.UNIQUE_CONSTRAINT_VIOLATION,
38
+ context: { fieldName: '_id', violatedFields: ['_id'] },
39
+ });
40
+ export function createSettlementLedgerDouble(options) {
41
+ const rows = new Map();
42
+ const otherMutations = [];
43
+ const registry = {
44
+ insertDocumentForInfrastructure: vi.fn(async (_resourceType, document) => {
45
+ if (options?.insertFailure)
46
+ throw options.insertFailure();
47
+ const id = String(document._id);
48
+ if (rows.has(id))
49
+ throw classifiedPrimaryKeyConflict();
50
+ rows.set(id, { ...document });
51
+ return document;
52
+ }),
53
+ readUnscopedByKey: vi.fn(async (_resourceType, filter) => rows.get(String(filter._id)) ?? null),
54
+ atomicGuardedMutation: vi.fn(async (resourceType, filter, mutation) => {
55
+ if (String(resourceType) !== SETTLEMENTS) {
56
+ otherMutations.push({ resourceType, filter, mutation });
57
+ return options?.otherMutationResult ? options.otherMutationResult() : { _id: 'mutated' };
58
+ }
59
+ const row = rows.get(String(filter._id));
60
+ if (!row)
61
+ return null;
62
+ // The two guards the router relies on, applied exactly as the store would: a row that has
63
+ // already settled, or whose claim is still fresh, does not match.
64
+ if (filter.appliedAt?.$exists === false && row.appliedAt !== undefined)
65
+ return null;
66
+ if (filter.claimedAt?.$lt && !(row.claimedAt < filter.claimedAt.$lt))
67
+ return null;
68
+ Object.assign(row, mutation.set ?? {});
69
+ return { ...row };
70
+ }),
71
+ };
72
+ return { rows, registry, otherMutations };
73
+ }
74
+ //# sourceMappingURL=settlement-ledger.test-double.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement-ledger.test-double.js","sourceRoot":"","sources":["../../../../../../../src/billing/services/webhooks/__tests__/settlement-ledger.test-double.ts"],"names":[],"mappings":"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","sourcesContent":["import { vi } from 'vitest';\nimport { ErrorCustomMessageReference, ErrorType } from '@wildo-ai/saas-models';\n\nimport { BackendResourceType } from '~wildo-backend-lib/resources/models/resources-types.backend.schemas';\n\n/**\n * An in-memory stand-in for the DURABLE settlement ledger the webhook router deduplicates against.\n *\n * ## Why a shared double rather than one fake per test file\n *\n * Four test files construct the router, and the ledger is now on the money path of every one of\n * them — a file that fakes it slightly differently is a file whose \"the grant happened\" assertions\n * are measuring a different mechanism from its neighbours'. The ledger's behaviour under\n * concurrency is the whole subject of the fix, so it gets exactly one definition.\n *\n * ## What it models, and what it deliberately does not\n *\n * It models the ONE property the production store is relied on for: a second INSERT of a row whose\n * `_id` already exists raises the engine's CLASSIFIED conflict — the adapter-neutral shape both\n * `handleMongoDBError` (from `E11000`) and `handlePostgresError` (from SQLSTATE `23505`) produce.\n * It does not model transactions, retention hiding, or scope filtering: none of those participate\n * in the claim, and modelling them would make the double a second implementation to keep true.\n *\n * The map is exposed so a test can inspect the ledger's state — how many claims exist, whether a\n * claim was closed — which is what distinguishes \"granted nothing because it was already applied\"\n * from \"granted nothing because the handler refused earlier\".\n */\nexport const SETTLEMENTS = BackendResourceType.BILLING_PROVIDER_EVENT_SETTLEMENTS as unknown as string;\n\n/**\n * The classified CONFLICT a unique/primary-key violation becomes before it leaves the repository\n * tier. Shaped for `isWildoBackendError`, which tests for `type`/`statusCode`/`severity`/\n * `customMessageReference` — a plain `Error` would be re-thrown by the router instead of read as\n * \"already claimed\", which is the distinction this double exists to keep honest.\n */\nexport const classifiedPrimaryKeyConflict = (): Error =>\n Object.assign(new Error('Unique constraint violation on _id'), {\n type: ErrorType.CONFLICT,\n statusCode: 409,\n severity: 'low',\n customMessageReference: ErrorCustomMessageReference.UNIQUE_CONSTRAINT_VIOLATION,\n context: { fieldName: '_id', violatedFields: ['_id'] },\n });\n\nexport interface SettlementLedgerDouble {\n /** The ledger rows, keyed by `_id`. Read it to assert what the handler claimed and closed. */\n rows: Map<string, Record<string, unknown>>;\n /** Pass as the router's `repositoriesRegistry` argument. */\n registry: Record<string, unknown>;\n /** Every guarded mutation the router aimed at a resource OTHER than the ledger. */\n otherMutations: Array<{ resourceType: unknown; filter: Record<string, any>; mutation: Record<string, unknown> }>;\n}\n\nexport function createSettlementLedgerDouble(options?: {\n /**\n * Result for a guarded mutation aimed at anything but the ledger — the promotion counter is the\n * only such caller today. `null` models a compare-and-swap that matched nothing.\n */\n otherMutationResult?: () => unknown;\n /** Make the ledger INSERT fail with something that is not a conflict, to pin the fail-closed path. */\n insertFailure?: () => Error;\n}): SettlementLedgerDouble {\n const rows = new Map<string, Record<string, unknown>>();\n const otherMutations: SettlementLedgerDouble['otherMutations'] = [];\n\n const registry = {\n insertDocumentForInfrastructure: vi.fn(async (_resourceType: unknown, document: Record<string, unknown>) => {\n if (options?.insertFailure) throw options.insertFailure();\n const id = String(document._id);\n if (rows.has(id)) throw classifiedPrimaryKeyConflict();\n rows.set(id, { ...document });\n return document;\n }),\n\n readUnscopedByKey: vi.fn(async (_resourceType: unknown, filter: Record<string, any>) =>\n rows.get(String(filter._id)) ?? null),\n\n atomicGuardedMutation: vi.fn(async (\n resourceType: unknown,\n filter: Record<string, any>,\n mutation: Record<string, any>,\n ) => {\n if (String(resourceType) !== SETTLEMENTS) {\n otherMutations.push({ resourceType, filter, mutation });\n return options?.otherMutationResult ? options.otherMutationResult() : { _id: 'mutated' };\n }\n\n const row = rows.get(String(filter._id));\n if (!row) return null;\n\n // The two guards the router relies on, applied exactly as the store would: a row that has\n // already settled, or whose claim is still fresh, does not match.\n if (filter.appliedAt?.$exists === false && row.appliedAt !== undefined) return null;\n if (filter.claimedAt?.$lt && !((row.claimedAt as Date) < filter.claimedAt.$lt)) return null;\n\n Object.assign(row, mutation.set ?? {});\n return { ...row };\n }),\n };\n\n return { rows, registry, otherMutations };\n}\n"]}
@@ -23,25 +23,74 @@ import type { StandardBilling_WebhookEvent } from '@wildo-ai/external-connectors
23
23
  import type { ExecutionContext } from '../../../runtime/models/execution-context.backend.schemas';
24
24
  import type { ServicesRegistryHandlerBackendService } from '../../../base-classes/services/services/services-registry-handler.backend.service';
25
25
  import type { ResourcesRegistryBackendService } from '../../../resources/services/resources-registry.backend.service';
26
+ import type { RepositoriesRegistryHandlerBackendService } from '../../../base-classes/services/repositories/repositories-registry-handler.backend.service';
26
27
  import type { LoggerService } from '../../../monitoring/logger/services/logger.service';
27
28
  import type { WebSocketService } from '../../../requests/service/websocket.service';
29
+ /**
30
+ * What a durable settlement claim answered — a closed vocabulary with one named runtime source,
31
+ * because each member routes to a different action on a MONEY path and an inline string union
32
+ * could carry none of the reasoning below.
33
+ */
34
+ export declare enum BillingSettlementClaim {
35
+ /**
36
+ * This handler holds the claim and is the one that must apply the event's effects. Either it
37
+ * inserted the ledger row, or it took over a claim whose holder died more than
38
+ * {@link BILLING_PROVIDER_EVENT_SETTLEMENT_CLAIM_LEASE_MS} ago.
39
+ */
40
+ OWNED = "OWNED",
41
+ /** The effects were already applied by an earlier delivery. Grant nothing. */
42
+ ALREADY_APPLIED = "ALREADY_APPLIED",
43
+ /**
44
+ * Another delivery — very likely on another replica — holds a FRESH claim and is applying the
45
+ * effects right now. Grant nothing, and say nothing alarming: this is the ordinary shape of a
46
+ * duplicate delivery arriving while the first is still in flight.
47
+ */
48
+ HELD_ELSEWHERE = "HELD_ELSEWHERE",
49
+ /**
50
+ * The claim could not be taken at all — the ledger store refused, or the event carried no
51
+ * identity to key one on. Grant nothing: a money write nobody can deduplicate is exactly what
52
+ * this ledger exists to prevent.
53
+ */
54
+ UNAVAILABLE = "UNAVAILABLE"
55
+ }
28
56
  export declare class BillingWebhookEventRouterBackendService {
29
57
  private readonly servicesRegistry;
30
58
  private readonly resourcesRegistry;
31
- private readonly logger?;
32
- private readonly webSocketService?;
59
+ private readonly logger;
60
+ private readonly webSocketService;
33
61
  /**
34
- * In-memory dedup guard for checkout sessions.
35
- * Prevents double top-ups on webhook retries within the same process.
36
- * Capped to prevent unbounded memory growth; oldest entries evicted on overflow.
62
+ * REQUIRED, and it was optional until the duplicate-suppression fix.
63
+ *
64
+ * It arrived for the promotion-redemption compare-and-swap (#518) and was declared optional on
65
+ * a defensible argument: everything else this router does goes through the service tier, and a
66
+ * purchase must not fail because a COUNTER could not be incremented.
67
+ *
68
+ * That argument does not survive this registry also carrying the durable settlement ledger.
69
+ * Without it there is no idempotency for the credit-pool top-up at all, and the two ways of
70
+ * degrading are both unacceptable rather than merely inconvenient: granting anyway double-grants
71
+ * money on the next retry, and skipping loses a purchase the customer has already paid for.
72
+ * Neither is a degradation a deployment should be allowed to reach by omitting a constructor
73
+ * argument, so the argument is now required and every construction site — production and test —
74
+ * has to say what backs the ledger.
75
+ */
76
+ private readonly repositoriesRegistry;
77
+ constructor(servicesRegistry: ServicesRegistryHandlerBackendService, resourcesRegistry: ResourcesRegistryBackendService, logger: LoggerService | undefined, webSocketService: WebSocketService | undefined,
78
+ /**
79
+ * REQUIRED, and it was optional until the duplicate-suppression fix.
80
+ *
81
+ * It arrived for the promotion-redemption compare-and-swap (#518) and was declared optional on
82
+ * a defensible argument: everything else this router does goes through the service tier, and a
83
+ * purchase must not fail because a COUNTER could not be incremented.
37
84
  *
38
- * Limitation: process-local only — does not protect against retries delivered
39
- * to different instances in a multi-instance deployment. For production hardening,
40
- * replace with a shared store (Redis SET with TTL or MongoDB dedup collection).
85
+ * That argument does not survive this registry also carrying the durable settlement ledger.
86
+ * Without it there is no idempotency for the credit-pool top-up at all, and the two ways of
87
+ * degrading are both unacceptable rather than merely inconvenient: granting anyway double-grants
88
+ * money on the next retry, and skipping loses a purchase the customer has already paid for.
89
+ * Neither is a degradation a deployment should be allowed to reach by omitting a constructor
90
+ * argument, so the argument is now required and every construction site — production and test —
91
+ * has to say what backs the ledger.
41
92
  */
42
- private readonly processedCheckoutSessions;
43
- private static readonly MAX_DEDUP_ENTRIES;
44
- constructor(servicesRegistry: ServicesRegistryHandlerBackendService, resourcesRegistry: ResourcesRegistryBackendService, logger?: LoggerService, webSocketService?: WebSocketService);
93
+ repositoriesRegistry: RepositoriesRegistryHandlerBackendService);
45
94
  private log;
46
95
  /**
47
96
  * Write options for a webhook-driven resource write — re-attaches the fields the
@@ -133,6 +182,41 @@ export declare class BillingWebhookEventRouterBackendService {
133
182
  * (the `?? 1` fallback is dead — `NaN` is not nullish), `-5` for `"-5"`, and 1e9 for `"1e9"`.
134
183
  */
135
184
  private handleCheckoutCompleted;
185
+ /**
186
+ * Take the DURABLE claim on one money-affecting provider event, or report who already holds it.
187
+ *
188
+ * ## Why the collision is an INSERT and not a read-then-write
189
+ *
190
+ * Two deliveries arriving together would both read "not settled" before either wrote, so the
191
+ * suppression cannot be a check. It is a row whose PRIMARY KEY is derived from the event's own
192
+ * identity: the second INSERT collides at the store, on the one constraint both adapters enforce
193
+ * natively and identically. `insertDocumentForInfrastructure` translates that collision into a
194
+ * classified `CONFLICT` on either arm — MongoDB from `E11000`, PostgreSQL from SQLSTATE `23505` —
195
+ * so this branch is adapter-neutral rather than adapter-aware.
196
+ *
197
+ * ## Why anything that is NOT a conflict re-throws
198
+ *
199
+ * A store that is unreachable, a table that does not exist, a cast that failed: none of those
200
+ * mean "already settled", and reading them as suppression would silently swallow a purchase. They
201
+ * propagate, the webhook delivery fails, and the provider retries — which is the correct outcome
202
+ * for a transient store failure and a loud one for a permanent misconfiguration.
203
+ */
204
+ private claimSettlement;
205
+ /**
206
+ * Close the claim, so every later delivery of this event is ALREADY_APPLIED rather than a
207
+ * candidate for takeover.
208
+ *
209
+ * Never throws: the grant has already landed, and turning a successful purchase into a failed
210
+ * webhook delivery would make the provider retry an event whose effects are complete.
211
+ *
212
+ * The failure it logs is the residual this design keeps rather than removes, and it is stated
213
+ * plainly because nothing else records it: if this single write is lost, the ledger row keeps an
214
+ * open claim, and a redelivery arriving after the lease expires WILL grant a second time. That
215
+ * window is one statement wide, and the alternative — marking applied BEFORE doing the work —
216
+ * trades it for a strictly worse one, where a handler that dies mid-grant leaves a purchase
217
+ * permanently unsettled and no retry can ever repair it.
218
+ */
219
+ private markSettlementApplied;
136
220
  /**
137
221
  * CUSTOMER_DELETED: Deactivate billing account, trigger feature sync.
138
222
  */
@@ -146,6 +230,15 @@ export declare class BillingWebhookEventRouterBackendService {
146
230
  /**
147
231
  * Find a subscription by providerSubscriptionId in a specific variant collection.
148
232
  */
233
+ /**
234
+ * Increment a promotion's `timesRedeemed`, guarded against its own cap (#518).
235
+ *
236
+ * Never throws. It runs after the customer has paid and the provider has applied the discount, so
237
+ * every failure mode — a missing row, a store error, a cap already reached — must leave the grant
238
+ * alone and become a loud record instead. The cap being passed is a real operational event (a
239
+ * promotion was honoured beyond its limit) and it is logged at ERROR for exactly that reason.
240
+ */
241
+ private countPromotionRedemption;
149
242
  private findSubscriptionByProviderId;
150
243
  /**
151
244
  * Resolve billing account _id by providerCustomerId in the derived variant.
@@ -1 +1 @@
1
- {"version":3,"file":"billing-webhook-event-router.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/billing/services/webhooks/billing-webhook-event-router.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAiBH,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAC5G,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACzJ,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;AAEhI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAClG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uDAAuD,CAAC;AA8B9F,qBAAa,uCAAuC;IAchD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAhBpC;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAqB;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAGhC,gBAAgB,EAAE,qCAAqC,EACvD,iBAAiB,EAAE,+BAA+B,EAClD,MAAM,CAAC,EAAE,aAAa,EACtB,gBAAgB,CAAC,EAAE,gBAAgB;IAGtD,OAAO,CAAC,GAAG;IAKX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACG,UAAU,CACd,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC;IAoEhB;;OAEG;YACW,yBAAyB;IAsFvC;;;;OAIG;YACW,yBAAyB;IAuBvC;;OAEG;YACW,yBAAyB;IAiCvC;;OAEG;YACW,kBAAkB;IA+DhC;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,uBAAuB;IA8GrC;;OAEG;YACW,qBAAqB;IAsCnC;;;;OAIG;YACW,2BAA2B;IAgCzC;;OAEG;YACW,4BAA4B;IAkB1C;;;OAGG;YACW,uBAAuB;IAmBrC;;;;OAIG;YACW,4BAA4B;IAoC1C;;;;OAIG;YACW,wBAAwB;IAyDtC;;;OAGG;YACW,eAAe;IAW7B;;;;OAIG;YACW,gBAAgB;CAyC/B"}
1
+ {"version":3,"file":"billing-webhook-event-router.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/billing/services/webhooks/billing-webhook-event-router.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAoBH,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAC5G,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACzJ,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;AAChI,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,qGAAqG,CAAC;AAErK,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAClG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uDAAuD,CAAC;AAgB9F;;;;GAIG;AACH,oBAAY,sBAAsB;IAChC;;;;OAIG;IACH,KAAK,UAAU;IACf,8EAA8E;IAC9E,eAAe,oBAAoB;IACnC;;;;OAIG;IACH,cAAc,mBAAmB;IACjC;;;;OAIG;IACH,WAAW,gBAAgB;CAC5B;AAsBD,qBAAa,uCAAuC;IAEhD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAnBpB,gBAAgB,EAAE,qCAAqC,EACvD,iBAAiB,EAAE,+BAA+B,EAClD,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS;IAC/D;;;;;;;;;;;;;;OAcG;IACc,oBAAoB,EAAE,yCAAyC;IAGlF,OAAO,CAAC,GAAG;IAKX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACG,UAAU,CACd,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC;IAoEhB;;OAEG;YACW,yBAAyB;IAsFvC;;;;OAIG;YACW,yBAAyB;IAuBvC;;OAEG;YACW,yBAAyB;IAiCvC;;OAEG;YACW,kBAAkB;IAuFhC;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,uBAAuB;IAwJrC;;;;;;;;;;;;;;;;;;OAkBG;YACW,eAAe;IAgF7B;;;;;;;;;;;;;OAaG;YACW,qBAAqB;IAmBnC;;OAEG;YACW,qBAAqB;IAsCnC;;;;OAIG;YACW,2BAA2B;IAgCzC;;OAEG;IACH;;;;;;;OAOG;YACW,wBAAwB;YAoCxB,4BAA4B;IAkB1C;;;OAGG;YACW,uBAAuB;IAmBrC;;;;OAIG;YACW,4BAA4B;IAoC1C;;;;OAIG;YACW,wBAAwB;IAyDtC;;;OAGG;YACW,eAAe;IAW7B;;;;OAIG;YACW,gBAAgB;CAyC/B"}