@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":"subscription.mutations.custom-impl.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiBH,OAAO,EAEL,KAAK,0CAA0C,EAChD,MAAM,4GAA4G,CAAC;AAuBpH,wBAAgB,iCAAiC,IAAI,0CAA0C,EAAE,CAqChG;AAMD;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,IAAI,0CAA0C,EAAE,CAwChG;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qCAAqC,IAAI,0CAA0C,EAAE,CAiHpG;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,IAAI,0CAA0C,EAAE,CAuFlG;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sCAAsC,IAAI,0CAA0C,EAAE,CA8CrG"}
1
+ {"version":3,"file":"subscription.mutations.custom-impl.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiBH,OAAO,EAEL,KAAK,0CAA0C,EAChD,MAAM,4GAA4G,CAAC;AA8CpH,wBAAgB,iCAAiC,IAAI,0CAA0C,EAAE,CA0FhG;AAMD;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,IAAI,0CAA0C,EAAE,CAwChG;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qCAAqC,IAAI,0CAA0C,EAAE,CA0HpG;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,IAAI,0CAA0C,EAAE,CAoFlG;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sCAAsC,IAAI,0CAA0C,EAAE,CAmDrG"}
@@ -17,12 +17,29 @@
17
17
  import { CoreResourceType, ResourceOperationVariantType, SubscriptionStatus, ErrorType, ErrorCustomMessageReference, ProductType, ProrationBehavior, BillingTiming, BillingSubscription_Operations, BillingSubscription_CancelRequestDto, BillingSubscription_ChangePlanRequestDto, BillingSubscription_AddAddonRequestDto, BillingSubscription_RemoveAddonRequestDto, } from '@wildo-ai/saas-models';
18
18
  import { createResourceCustomServiceImplementation, } from '../../../base-classes/services/services/resource-operation-custom-implementation.factory.backend.js';
19
19
  import { getBillingProvider, getBillingConfig } from '../../../billing/services/custom-impl/billing-custom-implementations.backend.js';
20
- import { readProductByKey, readProductById, readPriceById, readPriceForProduct, validateProviderSubscription, resolveProviderItems, } from '../../../billing/services/custom-impl/billing-custom-impl-utils.backend.js';
20
+ import { BillingCatalogReadIntent, readProductByKey, readProductById, readPriceById, readPriceForProduct, validateProviderSubscription, resolveProviderItems, } from '../../../billing/services/custom-impl/billing-custom-impl-utils.backend.js';
21
21
  // ── Subscription polymorphic variant types ───────────────────────────
22
22
  const SUBSCRIPTION_VARIANT_TYPES = [
23
23
  CoreResourceType.ORGANIZATION_SUBSCRIPTIONS,
24
24
  CoreResourceType.USER_SUBSCRIPTIONS,
25
25
  ];
26
+ /**
27
+ * The subscription item carrying the PLAN, or `null` when a subscription holds only addons.
28
+ *
29
+ * A subscription's items are a plan plus any addons, and three places in this file needed to find
30
+ * the plan among them — the change-plan path, the addon plan-tier gate, and now the cancellation
31
+ * policy (#408). Each had its own inline loop. One helper because "which item is the plan" is a
32
+ * single question with a single answer, and three copies is how the fourth one comes to differ.
33
+ */
34
+ async function resolvePlanItem(subscription, executionContext, utils) {
35
+ for (const item of subscription.items) {
36
+ const itemProduct = await readProductById(item.productId, executionContext, utils);
37
+ if (itemProduct.type === ProductType.PLAN) {
38
+ return item;
39
+ }
40
+ }
41
+ return null;
42
+ }
26
43
  // ════════════════════════════════════════════════════════════════════
27
44
  // CANCEL
28
45
  // ════════════════════════════════════════════════════════════════════
@@ -41,7 +58,58 @@ export function createSubscriptionCancelFactories() {
41
58
  prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {
42
59
  const subscription = utils.currentObject;
43
60
  validateProviderSubscription(subscription, _id, executionContext, utils);
44
- const cancelImmediately = input.cancelImmediately;
61
+ /*
62
+ * `ProductBehaviorPolicy.cancellation` now governs this operation (#408, decided
63
+ * 2026-09-08). Until then it was read by NOTHING: timing came solely from the caller's
64
+ * `cancelImmediately` flag, so a product declaring that immediate cancellation is not
65
+ * allowed could not refuse one — and Wonder Todos authors `allowImmediate: false` on
66
+ * BOTH plans, unenforced.
67
+ *
68
+ * Two distinct things come from the policy, and conflating them was the trap:
69
+ * - `allowImmediate` is a REFUSAL. A caller who asks for immediate cancellation
70
+ * against a product that forbids it gets a 409, not a silent downgrade to
71
+ * period-end. Silently honouring the safer timing would tell the caller their
72
+ * subscription had ended when it has not, which is worse than refusing.
73
+ * - `defaultBehavior` decides the timing when the caller expresses NO preference.
74
+ * `cancelImmediately` is optional on the request DTO, so "absent" is a real state
75
+ * and is where an authored default belongs.
76
+ *
77
+ * The policy is read from the subscription's PLAN product, resolved the same way the
78
+ * change-plan path above resolves it. An addon does not carry the cancellation policy
79
+ * of the subscription it rides on.
80
+ */
81
+ const planItem = await resolvePlanItem(subscription, executionContext, utils);
82
+ const planProduct = planItem
83
+ ? await readProductById(planItem.productId, executionContext, utils)
84
+ : null;
85
+ const cancellationPolicy = planProduct?.behaviorPolicy?.cancellation;
86
+ const requestedImmediate = input.cancelImmediately;
87
+ if (requestedImmediate === true && cancellationPolicy?.allowImmediate === false) {
88
+ throw utils.errorBuilder.buildError(ErrorType.CONFLICT, executionContext, {
89
+ customMessageReference: ErrorCustomMessageReference.CONFLICT,
90
+ context: {
91
+ reason: 'billing_product_forbids_immediate_cancellation',
92
+ message: 'This plan does not allow immediate cancellation; it can only be cancelled at the end of the current period.',
93
+ productKey: planProduct?.key,
94
+ },
95
+ });
96
+ }
97
+ /*
98
+ * Absent preference resolves down a chain, most specific first: the caller, the plan
99
+ * product's own default, the application's `defaultCancellation`, then period-end.
100
+ *
101
+ * The application-level step is what makes `billing.defaultBehaviorPolicy.defaultCancellation`
102
+ * mean something. It was dead alongside its neighbours, and it is BOUND rather than
103
+ * relabelled because — unlike grace periods and retry counts, which are dunning settings
104
+ * living at the provider — cancellation timing is resolved locally. The only thing
105
+ * standing between that key and an effect was a reader.
106
+ *
107
+ * Period-end is the floor because it never ends access a customer has already paid for.
108
+ */
109
+ const resolvedTiming = cancellationPolicy?.defaultBehavior
110
+ ?? getBillingConfig().defaultBehaviorPolicy?.defaultCancellation;
111
+ const cancelImmediately = requestedImmediate
112
+ ?? (resolvedTiming === BillingTiming.IMMEDIATE);
45
113
  const atPeriodEnd = !cancelImmediately;
46
114
  const provider = getBillingProvider();
47
115
  await provider.cancelSubscription(subscription.providerSubscriptionId, { atPeriodEnd });
@@ -133,7 +201,8 @@ export function createSubscriptionChangePlanFactories() {
133
201
  prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {
134
202
  const subscription = utils.currentObject;
135
203
  validateProviderSubscription(subscription, _id, executionContext, utils);
136
- const newProduct = await readProductByKey(input.newProductKey, executionContext, utils);
204
+ // ACQUIRE: the subscription is being moved ONTO this product.
205
+ const newProduct = await readProductByKey(input.newProductKey, BillingCatalogReadIntent.ACQUIRE, executionContext, utils);
137
206
  // The price MUST belong to the product being switched to. These were resolved
138
207
  // independently, so pairing a premium `newProductKey` with a cheap `newPriceId` billed the
139
208
  // provider the cheap price while the local item — and every entitlement derived from
@@ -146,14 +215,8 @@ export function createSubscriptionChangePlanFactories() {
146
215
  });
147
216
  }
148
217
  // Find the current plan item (type === PLAN) and determine upgrade/downgrade
149
- let planItemIndex = -1;
150
- for (let i = 0; i < subscription.items.length; i++) {
151
- const itemProduct = await readProductById(subscription.items[i].productId, executionContext, utils);
152
- if (itemProduct.type === ProductType.PLAN) {
153
- planItemIndex = i;
154
- break;
155
- }
156
- }
218
+ const currentPlanItem = await resolvePlanItem(subscription, executionContext, utils);
219
+ const planItemIndex = currentPlanItem ? subscription.items.indexOf(currentPlanItem) : -1;
157
220
  // Build provider items: replace plan item, preserve addons
158
221
  const providerItems = [];
159
222
  const localItems = [];
@@ -205,11 +268,25 @@ export function createSubscriptionChangePlanFactories() {
205
268
  const provider = getBillingProvider();
206
269
  await provider.updateSubscription(subscription.providerSubscriptionId, {
207
270
  items: providerItems,
271
+ /*
272
+ * The resolved proration, as a REQUEST FIELD (#516).
273
+ *
274
+ * It was `metadata.prorationBehavior` until 2026-09-08 — a free-form key/value bag the
275
+ * provider stores and never reads — so this policy was correctly resolved from the target
276
+ * product's `upgrade`/`downgrade` block and then discarded at the boundary. A product
277
+ * declaring `ProrationBehavior.NONE` for a downgrade was prorated anyway, by the
278
+ * provider's account default. Wonder Todos authors exactly that.
279
+ */
280
+ prorationBehavior: policy.proration,
208
281
  metadata: {
209
- prorationBehavior: policy.proration,
210
- // Timing is captured for provider connectors that support deferred changes
211
- // (e.g., Stripe subscription schedules). Connectors that don't support it
212
- // will ignore the field and apply the change immediately.
282
+ /*
283
+ * TIMING remains metadata, and that is honest rather than an oversight: a provider's
284
+ * proration parameter says HOW a change settles, not WHEN it applies. Deferring a
285
+ * change to the period end needs a subscription schedule, which is a different call and
286
+ * a different mechanism — so `prorationTiming` is still carried for a connector that
287
+ * grows one, and still changes nothing today. Do not read this field's presence as the
288
+ * timing being honoured.
289
+ */
213
290
  prorationTiming: policy.timing,
214
291
  },
215
292
  });
@@ -250,7 +327,8 @@ export function createSubscriptionAddAddonFactories() {
250
327
  const subscription = utils.currentObject;
251
328
  validateProviderSubscription(subscription, _id, executionContext, utils);
252
329
  // Resolve addon product and validate
253
- const addonProduct = await readProductByKey(input.addonProductKey, executionContext, utils);
330
+ // ACQUIRE: an add-on is being bought.
331
+ const addonProduct = await readProductByKey(input.addonProductKey, BillingCatalogReadIntent.ACQUIRE, executionContext, utils);
254
332
  if (addonProduct.type !== ProductType.ADDON) {
255
333
  throw utils.errorBuilder.buildError(ErrorType.VALIDATION, executionContext, {
256
334
  customMessageReference: ErrorCustomMessageReference.BILLING_INVALID_PRODUCT_TYPE,
@@ -259,14 +337,10 @@ export function createSubscriptionAddAddonFactories() {
259
337
  }
260
338
  // Validate requiredPlanTiers
261
339
  if (addonProduct.requiredPlanTiers && addonProduct.requiredPlanTiers.length > 0) {
262
- let currentPlanTier;
263
- for (const item of subscription.items) {
264
- const itemProduct = await readProductById(item.productId, executionContext, utils);
265
- if (itemProduct.type === ProductType.PLAN) {
266
- currentPlanTier = itemProduct.planTier;
267
- break;
268
- }
269
- }
340
+ const planItemForTier = await resolvePlanItem(subscription, executionContext, utils);
341
+ const currentPlanTier = planItemForTier
342
+ ? (await readProductById(planItemForTier.productId, executionContext, utils)).planTier
343
+ : undefined;
270
344
  if (!currentPlanTier || !addonProduct.requiredPlanTiers.includes(currentPlanTier)) {
271
345
  throw utils.errorBuilder.buildError(ErrorType.BUSINESS_RULE, executionContext, {
272
346
  customMessageReference: ErrorCustomMessageReference.BILLING_PLAN_TIER_REQUIRED,
@@ -341,7 +415,12 @@ export function createSubscriptionRemoveAddonFactories() {
341
415
  const subscription = utils.currentObject;
342
416
  validateProviderSubscription(subscription, _id, executionContext, utils);
343
417
  // Resolve addon product
344
- const addonProduct = await readProductByKey(input.addonProductKey, executionContext, utils);
418
+ /*
419
+ * REFERENCE, deliberately — the ONE site of the four that must not refuse a retired
420
+ * product. This resolves the add-on the subscription ALREADY carries in order to drop
421
+ * it, so gating it would trap a customer on the very add-on the catalogue withdrew.
422
+ */
423
+ const addonProduct = await readProductByKey(input.addonProductKey, BillingCatalogReadIntent.REFERENCE, executionContext, utils);
345
424
  // Find and remove the addon item
346
425
  const remainingItems = subscription.items.filter((item) => item.productId !== addonProduct._id);
347
426
  if (remainingItems.length === subscription.items.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.mutations.custom-impl.backend.service.js","sourceRoot":"","sources":["../../../../../../src/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subscription Mutations Custom Implementations\n *\n * Implements CANCEL, RESUME, CHANGE_PLAN, ADD_ADDON, REMOVE_ADDON operations\n * on subscription polymorphic variants.\n *\n * Pattern: PREFIX_CORE_OPERATIONS\n * PREFIX → validate, call billing provider (Stripe), return update payload\n * CORE → standard UPDATE (engine handles DB write)\n * Feature sync is handled automatically by the post-operation hook infrastructure.\n *\n * One factory per polymorphic variant (org, user) per operation.\n * All variants share the same handler logic.\n *\n * @see billing-polymorphic-full-implementation.md §4.2 + §4.3\n */\n\nimport {\n CoreResourceType,\n ResourceOperationVariantType,\n SubscriptionStatus,\n ErrorType,\n ErrorCustomMessageReference,\n ProductType,\n ProrationBehavior,\n BillingTiming,\n BillingSubscription_Operations,\n BillingSubscription_CancelRequestDto,\n BillingSubscription_ChangePlanRequestDto,\n BillingSubscription_AddAddonRequestDto,\n BillingSubscription_RemoveAddonRequestDto,\n} from '@wildo-ai/saas-models';\nimport {\n createResourceCustomServiceImplementation,\n type ResourceCustomServiceImplementationFactory,\n} from '~wildo-backend-lib/base-classes/services/services/resource-operation-custom-implementation.factory.backend';\nimport type { ResourcesRegistryBackendService } from '~wildo-backend-lib/resources/services/resources-registry.backend.service';\nimport { getBillingProvider, getBillingConfig } from '~wildo-backend-lib/billing/services/custom-impl/billing-custom-implementations.backend';\nimport {\n readProductByKey,\n readProductById,\n readPriceById,\n readPriceForProduct,\n validateProviderSubscription,\n resolveProviderItems,\n} from '~wildo-backend-lib/billing/services/custom-impl/billing-custom-impl-utils.backend';\n\n// ── Subscription polymorphic variant types ───────────────────────────\n\nconst SUBSCRIPTION_VARIANT_TYPES = [\n CoreResourceType.ORGANIZATION_SUBSCRIPTIONS,\n CoreResourceType.USER_SUBSCRIPTIONS,\n] as const;\n\n// ════════════════════════════════════════════════════════════════════\n// CANCEL\n// ════════════════════════════════════════════════════════════════════\n\nexport function createSubscriptionCancelFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.CANCEL,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_CancelRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n const cancelImmediately = input.cancelImmediately;\n const atPeriodEnd = !cancelImmediately;\n\n const provider = getBillingProvider();\n await provider.cancelSubscription(subscription.providerSubscriptionId, { atPeriodEnd });\n\n return {\n cancelAtPeriodEnd: atPeriodEnd,\n cancelledAt: new Date(),\n ...(!atPeriodEnd && { status: SubscriptionStatus.CANCELLED }),\n ...(input.reason && { cancellationReason: input.reason }),\n };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// RESUME\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create RESUME custom impl factories for all subscription variants.\n *\n * RESUME un-cancels a subscription that has cancelAtPeriodEnd = true.\n * PREFIX: validates subscription is pending cancellation, calls provider resumeSubscription()\n * CORE: standard UPDATE clears cancellation fields\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionResumeFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.RESUME,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n handlers: {\n prefixCoreOperations: async (_id, _input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n if (!subscription.cancelAtPeriodEnd) {\n throw utils.errorBuilder.buildError(ErrorType.BUSINESS_RULE, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_NO_ACTIVE_SUBSCRIPTION,\n context: { subscriptionId: _id, reason: 'Subscription is not pending cancellation' },\n });\n }\n\n const provider = getBillingProvider();\n await provider.resumeSubscription(subscription.providerSubscriptionId);\n\n return {\n cancelAtPeriodEnd: false,\n cancelledAt: null,\n cancellationReason: null,\n status: SubscriptionStatus.ACTIVE,\n };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// CHANGE_PLAN\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create CHANGE_PLAN custom impl factories for all subscription variants.\n *\n * CHANGE_PLAN upgrades or downgrades the subscription plan.\n * PREFIX: resolves new product/price, determines proration, builds provider items,\n * calls provider updateSubscription(), returns update payload with new items\n * CORE: standard UPDATE writes new items to DB\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionChangePlanFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.CHANGE_PLAN,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_ChangePlanRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n const newProduct = await readProductByKey(input.newProductKey, executionContext, utils);\n // The price MUST belong to the product being switched to. These were resolved\n // independently, so pairing a premium `newProductKey` with a cheap `newPriceId` billed the\n // provider the cheap price while the local item — and every entitlement derived from\n // `item.productId` — recorded the premium product.\n const newPrice = await readPriceForProduct(input.newPriceId, newProduct, executionContext, utils);\n\n if (!newPrice.providerPriceId) {\n throw utils.errorBuilder.buildError(ErrorType.CONFIGURATION, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_NO_PROVIDER_PRICE,\n context: { priceId: input.newPriceId, productKey: input.newProductKey },\n });\n }\n\n // Find the current plan item (type === PLAN) and determine upgrade/downgrade\n let planItemIndex = -1;\n for (let i = 0; i < subscription.items.length; i++) {\n const itemProduct = await readProductById(subscription.items[i].productId, executionContext, utils);\n if (itemProduct.type === ProductType.PLAN) {\n planItemIndex = i;\n break;\n }\n }\n\n // Build provider items: replace plan item, preserve addons\n const providerItems: Array<{ providerSubscriptionItemId?: string; providerPriceId: string; quantity: number }> = [];\n const localItems: Array<any> = [];\n\n for (let i = 0; i < subscription.items.length; i++) {\n if (i === planItemIndex) {\n providerItems.push({\n providerSubscriptionItemId: subscription.items[i].providerSubscriptionItemId,\n providerPriceId: newPrice.providerPriceId,\n quantity: 1,\n });\n localItems.push({\n _id: subscription.items[i]._id,\n productId: newProduct._id,\n priceId: newPrice._id,\n quantity: 1,\n });\n } else {\n const price = await readPriceById(subscription.items[i].priceId, executionContext, utils);\n providerItems.push({\n providerSubscriptionItemId: subscription.items[i].providerSubscriptionItemId,\n providerPriceId: price.providerPriceId || subscription.items[i].priceId,\n quantity: subscription.items[i].quantity,\n });\n localItems.push(subscription.items[i]);\n }\n }\n\n // If no plan item found, prepend the new plan\n if (planItemIndex === -1) {\n providerItems.unshift({ providerPriceId: newPrice.providerPriceId, quantity: 1 });\n localItems.unshift({\n _id: `${subscription.providerSubscriptionId}_item_plan`,\n productId: newProduct._id,\n priceId: newPrice._id,\n quantity: 1,\n });\n }\n\n // Determine proration from product behavior policy\n const currentProduct = planItemIndex >= 0\n ? await readProductById(subscription.items[planItemIndex].productId, executionContext, utils)\n : null;\n const isUpgrade = currentProduct\n ? (newProduct.planTierOrder ?? 0) > (currentProduct.planTierOrder ?? 0)\n : true;\n const config = getBillingConfig();\n const policy = isUpgrade\n ? (newProduct.behaviorPolicy?.upgrade ?? { proration: config.defaultBehaviorPolicy.defaultProration, timing: BillingTiming.IMMEDIATE })\n : (newProduct.behaviorPolicy?.downgrade ?? { proration: ProrationBehavior.NONE, timing: BillingTiming.AT_PERIOD_END });\n\n const provider = getBillingProvider();\n await provider.updateSubscription(subscription.providerSubscriptionId, {\n items: providerItems,\n metadata: {\n prorationBehavior: policy.proration,\n // Timing is captured for provider connectors that support deferred changes\n // (e.g., Stripe subscription schedules). Connectors that don't support it\n // will ignore the field and apply the change immediately.\n prorationTiming: policy.timing,\n },\n });\n\n return { items: localItems };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// ADD_ADDON\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create ADD_ADDON custom impl factories for all subscription variants.\n *\n * ADD_ADDON adds an addon product to the existing subscription.\n * PREFIX: validates addon product (type, requiredPlanTiers), builds provider items,\n * calls provider updateSubscription(), returns update payload with expanded items\n * CORE: standard UPDATE writes new items to DB\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionAddAddonFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.ADD_ADDON,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_AddAddonRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n // Resolve addon product and validate\n const addonProduct = await readProductByKey(input.addonProductKey, executionContext, utils);\n if (addonProduct.type !== ProductType.ADDON) {\n throw utils.errorBuilder.buildError(ErrorType.VALIDATION, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_INVALID_PRODUCT_TYPE,\n context: { productKey: input.addonProductKey, expectedType: ProductType.ADDON, actualType: addonProduct.type },\n });\n }\n\n // Validate requiredPlanTiers\n if (addonProduct.requiredPlanTiers && addonProduct.requiredPlanTiers.length > 0) {\n let currentPlanTier: string | undefined;\n for (const item of subscription.items) {\n const itemProduct = await readProductById(item.productId, executionContext, utils);\n if (itemProduct.type === ProductType.PLAN) {\n currentPlanTier = itemProduct.planTier;\n break;\n }\n }\n if (!currentPlanTier || !addonProduct.requiredPlanTiers.includes(currentPlanTier)) {\n throw utils.errorBuilder.buildError(ErrorType.BUSINESS_RULE, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_PLAN_TIER_REQUIRED,\n context: { addonProductKey: input.addonProductKey, requiredTiers: addonProduct.requiredPlanTiers, currentTier: currentPlanTier ?? null },\n });\n }\n }\n\n // Resolve addon price — and prove it belongs to the addon product. Same defect shape as\n // CHANGE_PLAN: the addon's entitlements come from `addonProduct._id` on the local item\n // while the provider is billed `addonPrice.providerPriceId`.\n const addonPrice = await readPriceForProduct(input.priceId, addonProduct, executionContext, utils);\n if (!addonPrice.providerPriceId) {\n throw utils.errorBuilder.buildError(ErrorType.CONFIGURATION, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_NO_PROVIDER_PRICE,\n context: { priceId: input.priceId, productKey: input.addonProductKey },\n });\n }\n\n // Build provider items: existing items + new addon\n const existingProviderItems = await resolveProviderItems(subscription.items, executionContext, utils);\n existingProviderItems.push({\n providerPriceId: addonPrice.providerPriceId,\n quantity: 1,\n });\n\n const provider = getBillingProvider();\n await provider.updateSubscription(subscription.providerSubscriptionId, {\n items: existingProviderItems,\n });\n\n // Build local items with the new addon appended\n const newItems = [\n ...subscription.items,\n {\n _id: `${subscription.providerSubscriptionId}_item_${subscription.items.length}`,\n productId: addonProduct._id,\n priceId: addonPrice._id,\n quantity: 1,\n },\n ];\n\n return { items: newItems };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// REMOVE_ADDON\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create REMOVE_ADDON custom impl factories for all subscription variants.\n *\n * REMOVE_ADDON removes an addon product from the subscription.\n * PREFIX: finds addon item, builds remaining items, calls provider updateSubscription(),\n * returns update payload with remaining items\n * CORE: standard UPDATE writes remaining items to DB\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionRemoveAddonFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.REMOVE_ADDON,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_RemoveAddonRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n // Resolve addon product\n const addonProduct = await readProductByKey(input.addonProductKey, executionContext, utils);\n\n // Find and remove the addon item\n const remainingItems = subscription.items.filter((item: any) => item.productId !== addonProduct._id);\n if (remainingItems.length === subscription.items.length) {\n throw utils.errorBuilder.buildError(ErrorType.NOT_FOUND, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_ADDON_NOT_ON_SUBSCRIPTION,\n context: { addonProductKey: input.addonProductKey, subscriptionId: _id },\n });\n }\n\n // Build provider items from remaining items\n const providerItems = await resolveProviderItems(remainingItems, executionContext, utils);\n\n const provider = getBillingProvider();\n await provider.updateSubscription(subscription.providerSubscriptionId, {\n items: providerItems,\n });\n\n return { items: remainingItems };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n"]}
1
+ {"version":3,"file":"subscription.mutations.custom-impl.backend.service.js","sourceRoot":"","sources":["../../../../../../src/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subscription Mutations Custom Implementations\n *\n * Implements CANCEL, RESUME, CHANGE_PLAN, ADD_ADDON, REMOVE_ADDON operations\n * on subscription polymorphic variants.\n *\n * Pattern: PREFIX_CORE_OPERATIONS\n * PREFIX → validate, call billing provider (Stripe), return update payload\n * CORE → standard UPDATE (engine handles DB write)\n * Feature sync is handled automatically by the post-operation hook infrastructure.\n *\n * One factory per polymorphic variant (org, user) per operation.\n * All variants share the same handler logic.\n *\n * @see billing-polymorphic-full-implementation.md §4.2 + §4.3\n */\n\nimport {\n CoreResourceType,\n ResourceOperationVariantType,\n SubscriptionStatus,\n ErrorType,\n ErrorCustomMessageReference,\n ProductType,\n ProrationBehavior,\n BillingTiming,\n BillingSubscription_Operations,\n BillingSubscription_CancelRequestDto,\n BillingSubscription_ChangePlanRequestDto,\n BillingSubscription_AddAddonRequestDto,\n BillingSubscription_RemoveAddonRequestDto,\n} from '@wildo-ai/saas-models';\nimport {\n createResourceCustomServiceImplementation,\n type ResourceCustomServiceImplementationFactory,\n} from '~wildo-backend-lib/base-classes/services/services/resource-operation-custom-implementation.factory.backend';\nimport type { ResourcesRegistryBackendService } from '~wildo-backend-lib/resources/services/resources-registry.backend.service';\nimport { getBillingProvider, getBillingConfig } from '~wildo-backend-lib/billing/services/custom-impl/billing-custom-implementations.backend';\nimport {\n BillingCatalogReadIntent,\n readProductByKey,\n readProductById,\n readPriceById,\n readPriceForProduct,\n validateProviderSubscription,\n resolveProviderItems,\n} from '~wildo-backend-lib/billing/services/custom-impl/billing-custom-impl-utils.backend';\n\n// ── Subscription polymorphic variant types ───────────────────────────\n\nconst SUBSCRIPTION_VARIANT_TYPES = [\n CoreResourceType.ORGANIZATION_SUBSCRIPTIONS,\n CoreResourceType.USER_SUBSCRIPTIONS,\n] as const;\n\n/**\n * The subscription item carrying the PLAN, or `null` when a subscription holds only addons.\n *\n * A subscription's items are a plan plus any addons, and three places in this file needed to find\n * the plan among them — the change-plan path, the addon plan-tier gate, and now the cancellation\n * policy (#408). Each had its own inline loop. One helper because \"which item is the plan\" is a\n * single question with a single answer, and three copies is how the fourth one comes to differ.\n */\nasync function resolvePlanItem(\n subscription: { items: Array<{ productId: string }> },\n executionContext: Parameters<typeof readProductById>[1],\n utils: Parameters<typeof readProductById>[2],\n): Promise<{ productId: string } | null> {\n for (const item of subscription.items) {\n const itemProduct = await readProductById(item.productId, executionContext, utils);\n if (itemProduct.type === ProductType.PLAN) {\n return item;\n }\n }\n return null;\n}\n\n// ════════════════════════════════════════════════════════════════════\n// CANCEL\n// ════════════════════════════════════════════════════════════════════\n\nexport function createSubscriptionCancelFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.CANCEL,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_CancelRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n /*\n * `ProductBehaviorPolicy.cancellation` now governs this operation (#408, decided\n * 2026-09-08). Until then it was read by NOTHING: timing came solely from the caller's\n * `cancelImmediately` flag, so a product declaring that immediate cancellation is not\n * allowed could not refuse one — and Wonder Todos authors `allowImmediate: false` on\n * BOTH plans, unenforced.\n *\n * Two distinct things come from the policy, and conflating them was the trap:\n * - `allowImmediate` is a REFUSAL. A caller who asks for immediate cancellation\n * against a product that forbids it gets a 409, not a silent downgrade to\n * period-end. Silently honouring the safer timing would tell the caller their\n * subscription had ended when it has not, which is worse than refusing.\n * - `defaultBehavior` decides the timing when the caller expresses NO preference.\n * `cancelImmediately` is optional on the request DTO, so \"absent\" is a real state\n * and is where an authored default belongs.\n *\n * The policy is read from the subscription's PLAN product, resolved the same way the\n * change-plan path above resolves it. An addon does not carry the cancellation policy\n * of the subscription it rides on.\n */\n const planItem = await resolvePlanItem(subscription, executionContext, utils);\n const planProduct = planItem\n ? await readProductById(planItem.productId, executionContext, utils)\n : null;\n const cancellationPolicy = planProduct?.behaviorPolicy?.cancellation;\n\n const requestedImmediate = input.cancelImmediately;\n if (requestedImmediate === true && cancellationPolicy?.allowImmediate === false) {\n throw utils.errorBuilder.buildError(ErrorType.CONFLICT, executionContext, {\n customMessageReference: ErrorCustomMessageReference.CONFLICT,\n context: {\n reason: 'billing_product_forbids_immediate_cancellation',\n message: 'This plan does not allow immediate cancellation; it can only be cancelled at the end of the current period.',\n productKey: planProduct?.key,\n },\n });\n }\n\n /*\n * Absent preference resolves down a chain, most specific first: the caller, the plan\n * product's own default, the application's `defaultCancellation`, then period-end.\n *\n * The application-level step is what makes `billing.defaultBehaviorPolicy.defaultCancellation`\n * mean something. It was dead alongside its neighbours, and it is BOUND rather than\n * relabelled because — unlike grace periods and retry counts, which are dunning settings\n * living at the provider — cancellation timing is resolved locally. The only thing\n * standing between that key and an effect was a reader.\n *\n * Period-end is the floor because it never ends access a customer has already paid for.\n */\n const resolvedTiming = cancellationPolicy?.defaultBehavior\n ?? getBillingConfig().defaultBehaviorPolicy?.defaultCancellation;\n const cancelImmediately = requestedImmediate\n ?? (resolvedTiming === BillingTiming.IMMEDIATE);\n const atPeriodEnd = !cancelImmediately;\n\n const provider = getBillingProvider();\n await provider.cancelSubscription(subscription.providerSubscriptionId, { atPeriodEnd });\n\n return {\n cancelAtPeriodEnd: atPeriodEnd,\n cancelledAt: new Date(),\n ...(!atPeriodEnd && { status: SubscriptionStatus.CANCELLED }),\n ...(input.reason && { cancellationReason: input.reason }),\n };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// RESUME\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create RESUME custom impl factories for all subscription variants.\n *\n * RESUME un-cancels a subscription that has cancelAtPeriodEnd = true.\n * PREFIX: validates subscription is pending cancellation, calls provider resumeSubscription()\n * CORE: standard UPDATE clears cancellation fields\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionResumeFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.RESUME,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n handlers: {\n prefixCoreOperations: async (_id, _input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n if (!subscription.cancelAtPeriodEnd) {\n throw utils.errorBuilder.buildError(ErrorType.BUSINESS_RULE, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_NO_ACTIVE_SUBSCRIPTION,\n context: { subscriptionId: _id, reason: 'Subscription is not pending cancellation' },\n });\n }\n\n const provider = getBillingProvider();\n await provider.resumeSubscription(subscription.providerSubscriptionId);\n\n return {\n cancelAtPeriodEnd: false,\n cancelledAt: null,\n cancellationReason: null,\n status: SubscriptionStatus.ACTIVE,\n };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// CHANGE_PLAN\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create CHANGE_PLAN custom impl factories for all subscription variants.\n *\n * CHANGE_PLAN upgrades or downgrades the subscription plan.\n * PREFIX: resolves new product/price, determines proration, builds provider items,\n * calls provider updateSubscription(), returns update payload with new items\n * CORE: standard UPDATE writes new items to DB\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionChangePlanFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.CHANGE_PLAN,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_ChangePlanRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n // ACQUIRE: the subscription is being moved ONTO this product.\n const newProduct = await readProductByKey(input.newProductKey, BillingCatalogReadIntent.ACQUIRE, executionContext, utils);\n // The price MUST belong to the product being switched to. These were resolved\n // independently, so pairing a premium `newProductKey` with a cheap `newPriceId` billed the\n // provider the cheap price while the local item — and every entitlement derived from\n // `item.productId` — recorded the premium product.\n const newPrice = await readPriceForProduct(input.newPriceId, newProduct, executionContext, utils);\n\n if (!newPrice.providerPriceId) {\n throw utils.errorBuilder.buildError(ErrorType.CONFIGURATION, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_NO_PROVIDER_PRICE,\n context: { priceId: input.newPriceId, productKey: input.newProductKey },\n });\n }\n\n // Find the current plan item (type === PLAN) and determine upgrade/downgrade\n const currentPlanItem = await resolvePlanItem(subscription, executionContext, utils);\n const planItemIndex = currentPlanItem ? subscription.items.indexOf(currentPlanItem as typeof subscription.items[number]) : -1;\n\n // Build provider items: replace plan item, preserve addons\n const providerItems: Array<{ providerSubscriptionItemId?: string; providerPriceId: string; quantity: number }> = [];\n const localItems: Array<any> = [];\n\n for (let i = 0; i < subscription.items.length; i++) {\n if (i === planItemIndex) {\n providerItems.push({\n providerSubscriptionItemId: subscription.items[i].providerSubscriptionItemId,\n providerPriceId: newPrice.providerPriceId,\n quantity: 1,\n });\n localItems.push({\n _id: subscription.items[i]._id,\n productId: newProduct._id,\n priceId: newPrice._id,\n quantity: 1,\n });\n } else {\n const price = await readPriceById(subscription.items[i].priceId, executionContext, utils);\n providerItems.push({\n providerSubscriptionItemId: subscription.items[i].providerSubscriptionItemId,\n providerPriceId: price.providerPriceId || subscription.items[i].priceId,\n quantity: subscription.items[i].quantity,\n });\n localItems.push(subscription.items[i]);\n }\n }\n\n // If no plan item found, prepend the new plan\n if (planItemIndex === -1) {\n providerItems.unshift({ providerPriceId: newPrice.providerPriceId, quantity: 1 });\n localItems.unshift({\n _id: `${subscription.providerSubscriptionId}_item_plan`,\n productId: newProduct._id,\n priceId: newPrice._id,\n quantity: 1,\n });\n }\n\n // Determine proration from product behavior policy\n const currentProduct = planItemIndex >= 0\n ? await readProductById(subscription.items[planItemIndex].productId, executionContext, utils)\n : null;\n const isUpgrade = currentProduct\n ? (newProduct.planTierOrder ?? 0) > (currentProduct.planTierOrder ?? 0)\n : true;\n const config = getBillingConfig();\n const policy = isUpgrade\n ? (newProduct.behaviorPolicy?.upgrade ?? { proration: config.defaultBehaviorPolicy.defaultProration, timing: BillingTiming.IMMEDIATE })\n : (newProduct.behaviorPolicy?.downgrade ?? { proration: ProrationBehavior.NONE, timing: BillingTiming.AT_PERIOD_END });\n\n const provider = getBillingProvider();\n await provider.updateSubscription(subscription.providerSubscriptionId, {\n items: providerItems,\n /*\n * The resolved proration, as a REQUEST FIELD (#516).\n *\n * It was `metadata.prorationBehavior` until 2026-09-08 — a free-form key/value bag the\n * provider stores and never reads — so this policy was correctly resolved from the target\n * product's `upgrade`/`downgrade` block and then discarded at the boundary. A product\n * declaring `ProrationBehavior.NONE` for a downgrade was prorated anyway, by the\n * provider's account default. Wonder Todos authors exactly that.\n */\n prorationBehavior: policy.proration,\n metadata: {\n /*\n * TIMING remains metadata, and that is honest rather than an oversight: a provider's\n * proration parameter says HOW a change settles, not WHEN it applies. Deferring a\n * change to the period end needs a subscription schedule, which is a different call and\n * a different mechanism — so `prorationTiming` is still carried for a connector that\n * grows one, and still changes nothing today. Do not read this field's presence as the\n * timing being honoured.\n */\n prorationTiming: policy.timing,\n },\n });\n\n return { items: localItems };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// ADD_ADDON\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create ADD_ADDON custom impl factories for all subscription variants.\n *\n * ADD_ADDON adds an addon product to the existing subscription.\n * PREFIX: validates addon product (type, requiredPlanTiers), builds provider items,\n * calls provider updateSubscription(), returns update payload with expanded items\n * CORE: standard UPDATE writes new items to DB\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionAddAddonFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.ADD_ADDON,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_AddAddonRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n // Resolve addon product and validate\n // ACQUIRE: an add-on is being bought.\n const addonProduct = await readProductByKey(input.addonProductKey, BillingCatalogReadIntent.ACQUIRE, executionContext, utils);\n if (addonProduct.type !== ProductType.ADDON) {\n throw utils.errorBuilder.buildError(ErrorType.VALIDATION, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_INVALID_PRODUCT_TYPE,\n context: { productKey: input.addonProductKey, expectedType: ProductType.ADDON, actualType: addonProduct.type },\n });\n }\n\n // Validate requiredPlanTiers\n if (addonProduct.requiredPlanTiers && addonProduct.requiredPlanTiers.length > 0) {\n const planItemForTier = await resolvePlanItem(subscription, executionContext, utils);\n const currentPlanTier = planItemForTier\n ? (await readProductById(planItemForTier.productId, executionContext, utils)).planTier\n : undefined;\n if (!currentPlanTier || !addonProduct.requiredPlanTiers.includes(currentPlanTier)) {\n throw utils.errorBuilder.buildError(ErrorType.BUSINESS_RULE, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_PLAN_TIER_REQUIRED,\n context: { addonProductKey: input.addonProductKey, requiredTiers: addonProduct.requiredPlanTiers, currentTier: currentPlanTier ?? null },\n });\n }\n }\n\n // Resolve addon price — and prove it belongs to the addon product. Same defect shape as\n // CHANGE_PLAN: the addon's entitlements come from `addonProduct._id` on the local item\n // while the provider is billed `addonPrice.providerPriceId`.\n const addonPrice = await readPriceForProduct(input.priceId, addonProduct, executionContext, utils);\n if (!addonPrice.providerPriceId) {\n throw utils.errorBuilder.buildError(ErrorType.CONFIGURATION, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_NO_PROVIDER_PRICE,\n context: { priceId: input.priceId, productKey: input.addonProductKey },\n });\n }\n\n // Build provider items: existing items + new addon\n const existingProviderItems = await resolveProviderItems(subscription.items, executionContext, utils);\n existingProviderItems.push({\n providerPriceId: addonPrice.providerPriceId,\n quantity: 1,\n });\n\n const provider = getBillingProvider();\n await provider.updateSubscription(subscription.providerSubscriptionId, {\n items: existingProviderItems,\n });\n\n // Build local items with the new addon appended\n const newItems = [\n ...subscription.items,\n {\n _id: `${subscription.providerSubscriptionId}_item_${subscription.items.length}`,\n productId: addonProduct._id,\n priceId: addonPrice._id,\n quantity: 1,\n },\n ];\n\n return { items: newItems };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n\n// ════════════════════════════════════════════════════════════════════\n// REMOVE_ADDON\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Create REMOVE_ADDON custom impl factories for all subscription variants.\n *\n * REMOVE_ADDON removes an addon product from the subscription.\n * PREFIX: finds addon item, builds remaining items, calls provider updateSubscription(),\n * returns update payload with remaining items\n * CORE: standard UPDATE writes remaining items to DB\n * (Feature sync handled by post-operation hook)\n */\nexport function createSubscriptionRemoveAddonFactories(): ResourceCustomServiceImplementationFactory[] {\n return SUBSCRIPTION_VARIANT_TYPES.map((variantResourceType) => {\n const factory = (_resourcesRegistryService: ResourcesRegistryBackendService) => {\n return createResourceCustomServiceImplementation({\n operationPath: {\n resourceIdentifier: variantResourceType,\n operationIdentifier: BillingSubscription_Operations.REMOVE_ADDON,\n variantType: ResourceOperationVariantType.API_CALL,\n isOperationDefault: true,\n },\n requestDtoSchema: BillingSubscription_RemoveAddonRequestDto,\n handlers: {\n prefixCoreOperations: async (_id, input, executionContext, _operationPath, utils) => {\n const subscription = utils.currentObject;\n validateProviderSubscription(subscription, _id!, executionContext, utils);\n\n // Resolve addon product\n /*\n * REFERENCE, deliberately — the ONE site of the four that must not refuse a retired\n * product. This resolves the add-on the subscription ALREADY carries in order to drop\n * it, so gating it would trap a customer on the very add-on the catalogue withdrew.\n */\n const addonProduct = await readProductByKey(input.addonProductKey, BillingCatalogReadIntent.REFERENCE, executionContext, utils);\n\n // Find and remove the addon item\n const remainingItems = subscription.items.filter((item: any) => item.productId !== addonProduct._id);\n if (remainingItems.length === subscription.items.length) {\n throw utils.errorBuilder.buildError(ErrorType.NOT_FOUND, executionContext, {\n customMessageReference: ErrorCustomMessageReference.BILLING_ADDON_NOT_ON_SUBSCRIPTION,\n context: { addonProductKey: input.addonProductKey, subscriptionId: _id },\n });\n }\n\n // Build provider items from remaining items\n const providerItems = await resolveProviderItems(remainingItems, executionContext, utils);\n\n const provider = getBillingProvider();\n await provider.updateSubscription(subscription.providerSubscriptionId, {\n items: providerItems,\n });\n\n return { items: remainingItems };\n },\n\n // Feature sync is handled automatically by the post-operation hook infrastructure\n },\n });\n };\n\n return factory as unknown as ResourceCustomServiceImplementationFactory;\n });\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type StandardBilling_Interface, type StandardBilling_CreateCustomerRequest, type StandardBilling_CreateCustomerResponse, type StandardBilling_UpdateCustomerRequest, type StandardBilling_PaymentMethodSummary, type StandardBilling_SyncProductRequest, type StandardBilling_SyncProductResponse, type StandardBilling_SyncPriceRequest, type StandardBilling_SyncPriceResponse, type StandardBilling_CreateSubscriptionRequest, type StandardBilling_CreateSubscriptionResponse, type StandardBilling_UpdateSubscriptionRequest, type StandardBilling_CancelSubscriptionOptions, type StandardBilling_SubscriptionData, type StandardBilling_InvoicePreview, type StandardBilling_CreateCheckoutSessionRequest, type StandardBilling_CreateCheckoutSessionResponse, type StandardBilling_CreateCustomerPortalSessionResponse, type StandardBilling_ReportUsageRequest, type StandardBilling_WebhookEvent, type StandardBilling_CreateCouponRequest, type StandardBilling_CreateCouponResponse, type StandardBilling_CreatePromotionCodeResponse } from '@wildo-ai/external-connectors-models';
1
+ import { type StandardBilling_Interface, type StandardBilling_CreateCustomerRequest, type StandardBilling_CreateCustomerResponse, type StandardBilling_UpdateCustomerRequest, type StandardBilling_PaymentMethodSummary, type StandardBilling_SyncProductRequest, type StandardBilling_SyncProductResponse, type StandardBilling_SyncPriceRequest, type StandardBilling_SyncPriceResponse, type StandardBilling_CreateSubscriptionRequest, type StandardBilling_CreateSubscriptionResponse, type StandardBilling_UpdateSubscriptionRequest, type StandardBilling_CancelSubscriptionOptions, type StandardBilling_SubscriptionData, type StandardBilling_InvoicePreview, type StandardBilling_InvoiceData, type StandardBilling_CreateCheckoutSessionRequest, type StandardBilling_CreateCheckoutSessionResponse, type StandardBilling_CreateCustomerPortalSessionResponse, type StandardBilling_ReportUsageRequest, type StandardBilling_WebhookEvent, type StandardBilling_CreateCouponRequest, type StandardBilling_CreateCouponResponse, type StandardBilling_CreatePromotionCodeResponse } from '@wildo-ai/external-connectors-models';
2
2
  export declare class StripeStandardBillingProvider implements StandardBilling_Interface {
3
3
  private readonly secretKey;
4
4
  private readonly apiVersion;
@@ -37,6 +37,23 @@ export declare class StripeStandardBillingProvider implements StandardBilling_In
37
37
  resumeSubscription(providerSubscriptionId: string): Promise<void>;
38
38
  retrieveSubscription(providerSubscriptionId: string): Promise<StandardBilling_SubscriptionData>;
39
39
  retrieveUpcomingInvoice(providerSubscriptionId: string, newPriceId?: string): Promise<StandardBilling_InvoicePreview>;
40
+ /**
41
+ * One page of the customer's invoices, newest first.
42
+ *
43
+ * `total` rather than `amount_paid`, deliberately, and it disagrees with what the webhook router
44
+ * records for the same invoice. The router reads `amount_paid ?? total`, which is `0` for every
45
+ * invoice that is finalized-but-unpaid — so an OPEN invoice lands locally at zero. That reading is
46
+ * not corrected here (it is a separate finding on a separate write path); what this file
47
+ * guarantees is that the two never fight, because the reconciliation sweep only ever INSERTS a
48
+ * total and never updates one.
49
+ *
50
+ * An invoice whose Stripe status is not in {@link STRIPE_INVOICE_STATUS_MAP} is SKIPPED rather
51
+ * than defaulted. A defaulted status is a wrong fact about money written into a durable row; an
52
+ * omitted invoice stays missing and is found again on the next tick, once the mapping is fixed.
53
+ */
54
+ listInvoices(providerCustomerId: string, options?: {
55
+ limit?: number;
56
+ }): Promise<StandardBilling_InvoiceData[]>;
40
57
  createCheckoutSession(request: StandardBilling_CreateCheckoutSessionRequest): Promise<StandardBilling_CreateCheckoutSessionResponse>;
41
58
  createCustomerPortalSession(providerCustomerId: string, returnUrl: string): Promise<StandardBilling_CreateCustomerPortalSessionResponse>;
42
59
  reportUsage(request: StandardBilling_ReportUsageRequest): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"stripe-standard-billing-provider.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/billing/services/stripe-standard-billing-provider.backend.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stripe-standard-billing-provider.backend.service.d.ts","sourceRoot":"","sources":["../../../../../src/billing/services/stripe-standard-billing-provider.backend.service.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EACzC,KAAK,kCAAkC,EACvC,KAAK,mCAAmC,EACxC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EACtC,KAAK,yCAAyC,EAC9C,KAAK,0CAA0C,EAC/C,KAAK,yCAAyC,EAC9C,KAAK,yCAAyC,EAC9C,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,4CAA4C,EACjD,KAAK,6CAA6C,EAClD,KAAK,mDAAmD,EACxD,KAAK,kCAAkC,EACvC,KAAK,4BAA4B,EACjC,KAAK,mCAAmC,EACxC,KAAK,oCAAoC,EACzC,KAAK,2CAA2C,EAIjD,MAAM,sCAAsC,CAAC;AAwD9C,qBAAa,6BAA8B,YAAW,yBAAyB;IAK3E,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,QAAQ,CAAC,0BAA0B,sBAAsB;IACzD,OAAO,CAAC,MAAM,CAAoB;gBAGf,SAAS,EAAE,MAAM,EACjB,UAAU,SAAsB;IAGnD,OAAO,CAAC,SAAS;IAYX,cAAc,CAAC,OAAO,EAAE,qCAAqC,GAAG,OAAO,CAAC,sCAAsC,CAAC;IAS/G,cAAc,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzG,cAAc,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,oCAAoC,EAAE,CAAC;IAc/F,mBAAmB,CAAC,uBAAuB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,WAAW,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,mCAAmC,CAAC;IA4B5G;;;;;;;OAOG;YACW,6BAA6B;IAiBrC,SAAS,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,iCAAiC,CAAC;IA8CtG;;;;;;OAMG;YACW,uBAAuB;IAmB/B,kBAAkB,CAAC,OAAO,EAAE,yCAAyC,GAAG,OAAO,CAAC,0CAA0C,CAAC;IAyB3H,kBAAkB,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,EAAE,yCAAyC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BrH,kBAAkB,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yCAAyC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtH,iBAAiB,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,kBAAkB,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,oBAAoB,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAoB/F,uBAAuB,CAAC,sBAAsB,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAwB3H;;;;;;;;;;;;;OAaG;IACG,YAAY,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAwB9G,qBAAqB,CAAC,OAAO,EAAE,4CAA4C,GAAG,OAAO,CAAC,6CAA6C,CAAC;IAqCpI,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mDAAmD,CAAC;IAKxI,WAAW,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7E,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAUhG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,4BAA4B,GAAG,IAAI;IAY9E,YAAY,CAAC,OAAO,EAAE,mCAAmC,GAAG,OAAO,CAAC,oCAAoC,CAAC;IAYzG,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC;CAOxH"}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'node:module';
2
- import { PricingModel, TaxDisplayMode, StandardBilling_EventType, } from '@wildo-ai/external-connectors-models';
2
+ import { PricingModel, TaxDisplayMode, InvoiceStatus, StandardBilling_EventType, } from '@wildo-ai/external-connectors-models';
3
3
  const require = createRequire(import.meta.url);
4
4
  const STRIPE_STATUS_MAP = {
5
5
  active: 'active',
@@ -11,6 +11,24 @@ const STRIPE_STATUS_MAP = {
11
11
  trialing: 'trialing',
12
12
  paused: 'paused',
13
13
  };
14
+ /**
15
+ * Stripe invoice status → the canonical vocabulary.
16
+ *
17
+ * Every member of both enums is spelled identically today, so this map looks redundant. It is not:
18
+ * without it an unrecognised Stripe status would be cast through as a canonical one, and the sweep
19
+ * that compares statuses would then WRITE a value the local schema's `z.enum` refuses — a repair
20
+ * that fails validation on a row it was trying to correct. An unknown status is a mapping gap, and
21
+ * `listInvoices` treats it as one rather than guessing.
22
+ */
23
+ const STRIPE_INVOICE_STATUS_MAP = {
24
+ draft: InvoiceStatus.DRAFT,
25
+ open: InvoiceStatus.OPEN,
26
+ paid: InvoiceStatus.PAID,
27
+ void: InvoiceStatus.VOID,
28
+ uncollectible: InvoiceStatus.UNCOLLECTIBLE,
29
+ };
30
+ /** Upper bound Stripe itself enforces on `invoices.list`. Asking for more is an API error, not a bigger page. */
31
+ const STRIPE_INVOICE_LIST_MAX_LIMIT = 100;
14
32
  const STRIPE_EVENT_TYPE_MAP = {
15
33
  'customer.updated': StandardBilling_EventType.CUSTOMER_UPDATED,
16
34
  'customer.deleted': StandardBilling_EventType.CUSTOMER_DELETED,
@@ -230,12 +248,39 @@ export class StripeStandardBillingProvider {
230
248
  metadata: request.metadata,
231
249
  ...(request.trialPeriodDays && { trial_period_days: request.trialPeriodDays }),
232
250
  ...(request.providerPromotionCodeId && { promotion_code: request.providerPromotionCodeId }),
251
+ // #408: tax is COMPUTED only when the application asks for it. Until 2026-09-08 nothing here
252
+ // enabled it, so `calculationMode: PROVIDER_MANAGED` changed nothing and the Stripe account's
253
+ // own configuration silently decided.
254
+ ...(request.automaticTax && { automatic_tax: { enabled: true } }),
255
+ /*
256
+ * #408: a trial that REQUIRES a payment method says so to Stripe in the only place it can —
257
+ * what happens when the trial ends and none was collected. `cancel` is the reading that
258
+ * matches the declaration: a trial declared as requiring a card must not roll into an unpaid
259
+ * subscription. `createSubscription` has no production caller today (checkout is the live
260
+ * purchase route), so this is the contract kept coherent rather than a live path.
261
+ */
262
+ ...(request.requirePaymentMethodForTrial && request.trialPeriodDays
263
+ ? { trial_settings: { end_behavior: { missing_payment_method: 'cancel' } } }
264
+ : {}),
233
265
  });
234
266
  return { providerSubscriptionId: subscription.id, status: subscription.status };
235
267
  }
236
268
  async updateSubscription(providerSubscriptionId, request) {
237
269
  await this.getStripe().subscriptions.update(providerSubscriptionId, {
238
270
  metadata: request.metadata,
271
+ /*
272
+ * The authored proration finally reaches the provider (#516).
273
+ *
274
+ * No mapping table, deliberately: `ProrationBehavior`'s three values ARE Stripe's
275
+ * `proration_behavior` values — `create_prorations`, `none`, `always_invoice` — which is why the
276
+ * vocabulary moved to the protocol module rather than being translated here. If a second provider
277
+ * ever spells them differently, THAT adapter maps; this one has nothing to map.
278
+ *
279
+ * Omitted when the caller sends none, so Stripe applies its account default — exactly what every
280
+ * update did before this field existed. Sending an explicit value unconditionally would change
281
+ * behaviour for callers that never authored a policy.
282
+ */
283
+ ...(request.prorationBehavior && { proration_behavior: request.prorationBehavior }),
239
284
  ...(request.providerPromotionCodeId && { promotion_code: request.providerPromotionCodeId }),
240
285
  ...(request.items && {
241
286
  items: request.items.map((item) => ({
@@ -303,6 +348,43 @@ export class StripeStandardBillingProvider {
303
348
  periodEnd: new Date(invoice.period_end * 1000),
304
349
  };
305
350
  }
351
+ /**
352
+ * One page of the customer's invoices, newest first.
353
+ *
354
+ * `total` rather than `amount_paid`, deliberately, and it disagrees with what the webhook router
355
+ * records for the same invoice. The router reads `amount_paid ?? total`, which is `0` for every
356
+ * invoice that is finalized-but-unpaid — so an OPEN invoice lands locally at zero. That reading is
357
+ * not corrected here (it is a separate finding on a separate write path); what this file
358
+ * guarantees is that the two never fight, because the reconciliation sweep only ever INSERTS a
359
+ * total and never updates one.
360
+ *
361
+ * An invoice whose Stripe status is not in {@link STRIPE_INVOICE_STATUS_MAP} is SKIPPED rather
362
+ * than defaulted. A defaulted status is a wrong fact about money written into a durable row; an
363
+ * omitted invoice stays missing and is found again on the next tick, once the mapping is fixed.
364
+ */
365
+ async listInvoices(providerCustomerId, options) {
366
+ const page = await this.getStripe().invoices.list({
367
+ customer: providerCustomerId,
368
+ limit: Math.min(options?.limit ?? 20, STRIPE_INVOICE_LIST_MAX_LIMIT),
369
+ });
370
+ const invoices = [];
371
+ for (const invoice of (page.data ?? [])) {
372
+ const status = STRIPE_INVOICE_STATUS_MAP[invoice.status];
373
+ if (!status || !invoice.id)
374
+ continue;
375
+ invoices.push({
376
+ providerInvoiceId: invoice.id,
377
+ providerCustomerId,
378
+ status,
379
+ total: invoice.total ?? 0,
380
+ currency: invoice.currency,
381
+ hostedInvoiceUrl: invoice.hosted_invoice_url ?? undefined,
382
+ invoicePdfUrl: invoice.invoice_pdf ?? undefined,
383
+ createdAt: new Date(invoice.created * 1000),
384
+ });
385
+ }
386
+ return invoices;
387
+ }
306
388
  async createCheckoutSession(request) {
307
389
  const session = await this.getStripe().checkout.sessions.create({
308
390
  customer: request.providerCustomerId,
@@ -313,7 +395,29 @@ export class StripeStandardBillingProvider {
313
395
  metadata: request.metadata,
314
396
  ...(request.allowPromotionCodes && { allow_promotion_codes: true }),
315
397
  ...(request.providerPromotionCodeId && { discounts: [{ promotion_code: request.providerPromotionCodeId }] }),
316
- ...(request.trialPeriodDays && { subscription_data: { trial_period_days: request.trialPeriodDays } }),
398
+ // #408 — see `createSubscription` above for why each of these exists.
399
+ ...(request.automaticTax && { automatic_tax: { enabled: true } }),
400
+ /*
401
+ * `payment_method_collection` is the checkout-side half of the trial declaration: `always`
402
+ * collects a card even when the session's immediate amount is zero, which is exactly the
403
+ * free-trial case. Stripe's default is `if_required`, so without this a "requires a payment
404
+ * method" trial collected nothing.
405
+ *
406
+ * Built as ONE `subscription_data` object rather than two spreads: a second spread of the same
407
+ * key REPLACES the first, so composing trial days and trial settings separately would silently
408
+ * drop whichever came first. That is the shape this file already had for trial days alone.
409
+ */
410
+ ...(request.requirePaymentMethodForTrial && { payment_method_collection: 'always' }),
411
+ ...(request.trialPeriodDays
412
+ ? {
413
+ subscription_data: {
414
+ trial_period_days: request.trialPeriodDays,
415
+ ...(request.requirePaymentMethodForTrial
416
+ ? { trial_settings: { end_behavior: { missing_payment_method: 'cancel' } } }
417
+ : {}),
418
+ },
419
+ }
420
+ : {}),
317
421
  });
318
422
  return { url: session.url, sessionId: session.id };
319
423
  }