@carlonicora/nestjs-neo4jsonapi 7.1.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
  2. package/dist/bootstrap/app.module.factory.js +1 -0
  3. package/dist/bootstrap/app.module.factory.js.map +1 -1
  4. package/dist/bootstrap/bootstrap.options.d.ts +20 -0
  5. package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
  6. package/dist/core/email/templates/en/cardExpiring.hbs +28 -0
  7. package/dist/core/email/templates/en/paymentFailure.hbs +4 -0
  8. package/dist/foundations/billing/billing.module.d.ts +26 -0
  9. package/dist/foundations/billing/billing.module.d.ts.map +1 -0
  10. package/dist/foundations/billing/billing.module.js +74 -0
  11. package/dist/foundations/billing/billing.module.js.map +1 -0
  12. package/dist/foundations/billing/cron/billing-lifecycle.cron.d.ts +16 -0
  13. package/dist/foundations/billing/cron/billing-lifecycle.cron.d.ts.map +1 -0
  14. package/dist/foundations/billing/cron/billing-lifecycle.cron.js +52 -0
  15. package/dist/foundations/billing/cron/billing-lifecycle.cron.js.map +1 -0
  16. package/dist/foundations/billing/index.d.ts +7 -0
  17. package/dist/foundations/billing/index.d.ts.map +1 -0
  18. package/dist/foundations/billing/index.js +28 -0
  19. package/dist/foundations/billing/index.js.map +1 -0
  20. package/dist/foundations/billing/interfaces/billing.config.interface.d.ts +71 -0
  21. package/dist/foundations/billing/interfaces/billing.config.interface.d.ts.map +1 -0
  22. package/dist/foundations/billing/interfaces/billing.config.interface.js +41 -0
  23. package/dist/foundations/billing/interfaces/billing.config.interface.js.map +1 -0
  24. package/dist/foundations/billing/processors/billing-email.jobs.d.ts +127 -0
  25. package/dist/foundations/billing/processors/billing-email.jobs.d.ts.map +1 -0
  26. package/dist/foundations/billing/processors/billing-email.jobs.js +196 -0
  27. package/dist/foundations/billing/processors/billing-email.jobs.js.map +1 -0
  28. package/dist/foundations/billing/processors/billing-email.processor.d.ts +33 -0
  29. package/dist/foundations/billing/processors/billing-email.processor.d.ts.map +1 -0
  30. package/dist/foundations/billing/processors/billing-email.processor.js +95 -0
  31. package/dist/foundations/billing/processors/billing-email.processor.js.map +1 -0
  32. package/dist/foundations/billing/services/card-expiry-warning.service.d.ts +58 -0
  33. package/dist/foundations/billing/services/card-expiry-warning.service.d.ts.map +1 -0
  34. package/dist/foundations/billing/services/card-expiry-warning.service.js +90 -0
  35. package/dist/foundations/billing/services/card-expiry-warning.service.js.map +1 -0
  36. package/dist/foundations/company/repositories/company.repository.d.ts +2 -0
  37. package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
  38. package/dist/foundations/company/repositories/company.repository.js +2 -2
  39. package/dist/foundations/company/repositories/company.repository.js.map +1 -1
  40. package/dist/foundations/foundations.modules.d.ts +3 -0
  41. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  42. package/dist/foundations/foundations.modules.js +3 -1
  43. package/dist/foundations/foundations.modules.js.map +1 -1
  44. package/dist/foundations/index.d.ts +1 -0
  45. package/dist/foundations/index.d.ts.map +1 -1
  46. package/dist/foundations/index.js +1 -0
  47. package/dist/foundations/index.js.map +1 -1
  48. package/dist/foundations/stripe-customer/services/stripe-customer-api.service.d.ts +17 -0
  49. package/dist/foundations/stripe-customer/services/stripe-customer-api.service.d.ts.map +1 -1
  50. package/dist/foundations/stripe-customer/services/stripe-customer-api.service.js +40 -0
  51. package/dist/foundations/stripe-customer/services/stripe-customer-api.service.js.map +1 -1
  52. package/dist/foundations/stripe-invoice/entities/stripe-invoice.entity.d.ts +1 -1
  53. package/dist/foundations/stripe-invoice/entities/stripe-invoice.entity.d.ts.map +1 -1
  54. package/dist/foundations/stripe-invoice/serialisers/stripe-invoice.serialiser.js +2 -2
  55. package/dist/foundations/stripe-invoice/serialisers/stripe-invoice.serialiser.js.map +1 -1
  56. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.d.ts +13 -0
  57. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.d.ts.map +1 -1
  58. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.js +21 -0
  59. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.js.map +1 -1
  60. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts +1 -3
  61. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts.map +1 -1
  62. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js +5 -38
  63. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js.map +1 -1
  64. package/dist/foundations/stripe-subscription/entities/stripe-subscription.d.ts +60 -0
  65. package/dist/foundations/stripe-subscription/entities/stripe-subscription.d.ts.map +1 -0
  66. package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.d.ts +1 -1
  67. package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.d.ts.map +1 -1
  68. package/dist/foundations/stripe-subscription/entities/stripe-subscription.js +61 -0
  69. package/dist/foundations/stripe-subscription/entities/stripe-subscription.js.map +1 -0
  70. package/dist/foundations/stripe-subscription/index.d.ts +1 -4
  71. package/dist/foundations/stripe-subscription/index.d.ts.map +1 -1
  72. package/dist/foundations/stripe-subscription/index.js +4 -8
  73. package/dist/foundations/stripe-subscription/index.js.map +1 -1
  74. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts +93 -165
  75. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
  76. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +206 -274
  77. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
  78. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts +34 -36
  79. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map +1 -1
  80. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js +20 -72
  81. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js.map +1 -1
  82. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts +1 -29
  83. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts.map +1 -1
  84. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js +1 -53
  85. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js.map +1 -1
  86. package/dist/foundations/stripe-subscription/stripe-subscription.module.d.ts +3 -3
  87. package/dist/foundations/stripe-subscription/stripe-subscription.module.d.ts.map +1 -1
  88. package/dist/foundations/stripe-subscription/stripe-subscription.module.js +8 -7
  89. package/dist/foundations/stripe-subscription/stripe-subscription.module.js.map +1 -1
  90. package/dist/foundations/stripe-usage/entities/stripe-usage-record.entity.d.ts +1 -1
  91. package/dist/foundations/stripe-usage/entities/stripe-usage-record.entity.d.ts.map +1 -1
  92. package/dist/foundations/stripe-usage/serialisers/stripe-usage-record.serialiser.js +2 -2
  93. package/dist/foundations/stripe-usage/serialisers/stripe-usage-record.serialiser.js.map +1 -1
  94. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts +6 -1
  95. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts.map +1 -1
  96. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +73 -15
  97. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
  98. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts +24 -2
  99. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts.map +1 -1
  100. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js +88 -20
  101. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js.map +1 -1
  102. package/package.json +1 -1
  103. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts +0 -27
  104. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts.map +0 -1
  105. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.js +0 -3
  106. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.js.map +0 -1
  107. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.d.ts +0 -8
  108. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.d.ts.map +0 -1
  109. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.js +0 -30
  110. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.js.map +0 -1
  111. package/dist/foundations/stripe-subscription/entities/stripe-subscription.model.d.ts +0 -4
  112. package/dist/foundations/stripe-subscription/entities/stripe-subscription.model.d.ts.map +0 -1
  113. package/dist/foundations/stripe-subscription/entities/stripe-subscription.model.js +0 -17
  114. package/dist/foundations/stripe-subscription/entities/stripe-subscription.model.js.map +0 -1
  115. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.d.ts +0 -9
  116. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.d.ts.map +0 -1
  117. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.js +0 -59
  118. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.factory.d.ts","sourceRoot":"","sources":["../../src/bootstrap/app.module.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAwB7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAiKpE"}
1
+ {"version":3,"file":"app.module.factory.d.ts","sourceRoot":"","sources":["../../src/bootstrap/app.module.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAwB7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAkKpE"}
@@ -168,6 +168,7 @@ function createAppModule(options) {
168
168
  blog: options.blog,
169
169
  emailAutomation: options.emailAutomation,
170
170
  analytics: options.analytics,
171
+ billing: options.billing,
171
172
  exclude: options.foundations?.exclude ?? [],
172
173
  }),
173
174
  ]),
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.factory.js","sourceRoot":"","sources":["../../src/bootstrap/app.module.factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.module.factory.js","sourceRoot":"","sources":["../../src/bootstrap/app.module.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0CAkKC;AA7MD,2CAA6D;AAC7D,2CAA6D;AAC7D,uCAAyC;AACzC,yDAA2D;AAC3D,+CAAkD;AAClD,iDAAoD;AACpD,2CAA+C;AAC/C,mCAAsC;AACtC,2CAAuC;AACvC,6CAAgG;AAChG,2CAA6B;AAE7B,6DAAwD;AACxD,oFAA+E;AAC/E,sCAA8G;AAC9G,0EAAsE;AACtE,qEAAgE;AAEhE,qDAAiD;AACjD,4EAAuE;AACvE,kDAA8C;AAC9C,uFAAkF;AAClF,iEAAsE;AACtE,qEAAiE;AAGjE;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,eAAe,CAAC,OAAyB;;IAEvD,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;QACtB,MAAM,CAAC,OAAO,CAAC,UAAyB;YACtC,6EAA6E;YAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;YAEvD,8EAA8E;YAC9E,8EAA8E;YAC9E,yEAAyE;YACzE,MAAM,gBAAgB,GAAI,EAAE,GAAG,mBAAU,EAAE,GAAG,SAAS,EAA0B,CAAC,SAAS,EAAE,OAAO,IAAI,KAAK,CAAC;YAE9G,+CAA+C;YAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,mBAAU,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,mBAAU,CAAC;YAEjG,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI;gBACjC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBAClC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;oBACnB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE1C,OAAO;gBACL,MAAM,EAAE,oBAAkB;gBAC1B,OAAO,EAAE;oBACP,iCAAiC;oBACjC,kCAAkB,CAAC,OAAO,EAAE;oBAE5B,yCAAyC;oBACzC,+BAAa,CAAC,OAAO,CAAC,UAAU,CAAC;oBAEjC,8BAA8B;oBAC9B,qBAAY,CAAC,OAAO,CAAC;wBACnB,IAAI,EAAE,CAAC,YAAY,CAAC;wBACpB,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,IAAI;qBACZ,CAAC;oBAEF,kDAAkD;oBAClD,2BAAe,CAAC,YAAY,CAAC;wBAC3B,OAAO,EAAE,CAAC,qBAAY,CAAC;wBACvB,MAAM,EAAE,CAAC,sBAAa,CAAC;wBACvB,UAAU,EAAE,CAAC,MAA0C,EAAE,EAAE;4BACzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAA2B,WAAW,CAAC,CAAC;4BACpE,OAAO;gCACL,UAAU,EAAE;oCACV,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE;oCAC/D,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE;iCAC7D;6BACF,CAAC;wBACJ,CAAC;qBACF,CAAC;oBAEF,0BAA0B;oBAC1B,sBAAS,CAAC,OAAO,CAAC;wBAChB,MAAM,EAAE,IAAI;wBACZ,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,EAAE;qBACpD,CAAC;oBAEF,gCAAgC;oBAChC,wBAAU,CAAC,OAAO,CAAC;wBACjB,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAAE,gBAAgB,IAAI,IAAI;wBACxD,OAAO,EAAE,KAAK;wBACd,aAAa,EAAE;4BACb,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,IAAI;yBACZ;wBACD,SAAS,EAAE;4BACT,EAAE,GAAG,EAAE,2BAAa,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;4BACxD,IAAI,4BAAc,CAAC,CAAC,YAAY,CAAC,CAAC;4BAClC,oCAAsB;yBACvB;qBACF,CAAC;oBAEF,sDAAsD;oBACtD,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAEhE,wCAAwC;oBACxC,wBAAU,CAAC,OAAO,CAAC;wBACjB,QAAQ;wBACR,eAAe,EAAE,OAAO,CAAC,eAAe;wBACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;qBACrC,CAAC;oBAEF,qFAAqF;oBACrF,mFAAmF;oBACnF,4FAA4F;oBAC5F,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ;wBAC/B,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC;4BACE,uCAAiB,CAAC,OAAO,CAAC;gCACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gCAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;gCAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;gCAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gCAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gCAClB,eAAe,EAAE,OAAO,CAAC,eAAe;gCACxC,SAAS,EAAE,OAAO,CAAC,SAAS;gCAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gCACxB,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE;6BAC5C,CAAC;yBACH,CAAC;oBAEN,yEAAyE;oBACzE,qEAAqE;oBACrE,6CAAoB;oBAEpB,kEAAkE;oBAClE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,6BAAY,CAAC,CAAC;oBAEnD,4DAA4D;oBAC5D,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,sBAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAE5C,iDAAiD;oBACjD,8BAAa;oBAEb,4FAA4F;oBAC5F,GAAG,OAAO,CAAC,UAAU;oBAErB,6DAA6D;oBAC7D,gFAAgF;oBAChF,GAAG,CAAC,UAAU,CAAC,cAAc,IAAI,mBAAU,CAAC,OAAO,CAAC,KAAK;wBACvD,CAAC,CAAC;4BACE,qBAAY,CAAC,YAAY,CAAC;gCACxB,OAAO,EAAE,CAAC,qBAAY,CAAC;gCACvB,MAAM,EAAE,CAAC,sBAAa,CAAC;gCACvB,UAAU,EAAE,CAAC,MAA0C,EAAE,EAAE;oCACzD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAyB,SAAS,CAAC,CAAC;oCAC9D,OAAO;wCACL,KAAK,EAAE,OAAO,CAAC,KAAK;wCACpB,OAAO,EAAE;4CACP,8BAAiB,CAAC,MAAM;4CACxB,8BAAiB,CAAC,aAAa;4CAC/B,8BAAiB,CAAC,gBAAgB;yCACnC;wCACD,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;qCAC/D,CAAC;gCACJ,CAAC;6BACF,CAAC;4BACF,8BAAa;yBACd;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR;gBACD,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE;oBACT,mEAAmE;oBACnE,2EAA2E;oBAC3E,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAS,EAAE,QAAQ,EAAE,6CAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrF,qEAAqE;oBACrE,0DAA0D;oBAC1D,EAAE,OAAO,EAAE,iCAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,EAAE;iBAClF;gBACD,OAAO,EAAE,CAAC,iCAAmB,CAAC;aAC/B,CAAC;QACJ,CAAC;KACF,CAAA;IA7JK,kBAAkB;QADvB,IAAA,eAAM,EAAC,EAAE,CAAC;OACL,kBAAkB,CA6JvB;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
@@ -8,6 +8,7 @@ import { ReferralModuleConfig } from "../foundations/referral/interfaces/referra
8
8
  import { HandbookModuleConfig } from "../foundations/handbook/interfaces/handbook.config.interface";
9
9
  import { HowToModuleConfig } from "../foundations/how-to/interfaces/how-to.config.interface";
10
10
  import { BlogModuleConfig } from "../foundations/blog/interfaces/blog.config.interface";
11
+ import { BillingModuleConfig } from "../foundations/billing/interfaces/billing.config.interface";
11
12
  import { EmailAutomationModuleConfig } from "../foundations/email-automation/interfaces/email-automation.config.interface";
12
13
  import { UserActivityModuleConfig } from "../foundations/user-activity/interfaces/user-activity.config.interface";
13
14
  import { AnalyticsModuleConfig } from "../foundations/analytics/interfaces/analytics.config.interface";
@@ -159,6 +160,25 @@ export interface BootstrapOptions {
159
160
  * ```
160
161
  */
161
162
  emailAutomation?: EmailAutomationModuleConfig;
163
+ /**
164
+ * Configuration for the billing module.
165
+ * Forwarded to `FoundationsModule.forRoot({ billing })`, exactly like
166
+ * `emailAutomation` above. The module is always mounted; every key is optional.
167
+ *
168
+ * Omitted keeps the defaults: failed-card grace on, the library
169
+ * billing email sender off (apps that consume `QueueId.EMAIL` with their own
170
+ * processor keep it), every billing email on, deletion 30 days after a
171
+ * subscription ends.
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * billing: {
176
+ * emailSender: { enabled: true },
177
+ * deletion: { afterSubscriptionEndedDays: 365 },
178
+ * }
179
+ * ```
180
+ */
181
+ billing?: BillingModuleConfig;
162
182
  /**
163
183
  * Configuration for the first-party web analytics feature module.
164
184
  * Forwarded to `FoundationsModule.forRoot({ analytics })`, exactly like
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.options.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.options.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Your card expires before your next payment</title>
7
+ </head>
8
+ <body style="margin: 0; padding: 0; background-color: #ffffff; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
9
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="max-width: 600px; margin: 0 auto;">
10
+ <tr><td>{{> header}}</td></tr>
11
+ <tr>
12
+ <td style="padding: 32px;">
13
+ <h1 style="color: #1a1a1a; font-size: 24px; font-weight: 600; margin: 0 0 24px 0; line-height: 1.3;">Your card expires before your next payment</h1>
14
+ <p style="color: #333333; font-size: 16px; line-height: 1.6; margin: 0 0 16px 0;">Hi {{customerName}},</p>
15
+ <p style="color: #333333; font-size: 16px; line-height: 1.6; margin: 0 0 24px 0;">Your subscription renews on <strong>{{renewalDate}}</strong>, but the {{cardBrand}} card ending in <strong>{{cardLast4}}</strong> expires before then.</p>
16
+ <p style="color: #333333; font-size: 16px; line-height: 1.6; margin: 0 0 24px 0;">Add a new card before that date and the renewal goes through as usual.</p>
17
+ {{#if updatePaymentUrl}}
18
+ <div style="text-align: center; margin: 32px 0 16px 0;">
19
+ <a href="{{updatePaymentUrl}}" style="display: inline-block; background: #1a1a1a; color: #ffffff; padding: 14px 28px; text-decoration: none; border-radius: 4px; font-weight: 600; font-size: 16px;">Update your card</a>
20
+ </div>
21
+ {{/if}}
22
+ <p style="color: #999999; font-size: 14px; line-height: 1.5; margin: 24px 0 0 0;">Already updated it? Then you can ignore this email.</p>
23
+ </td>
24
+ </tr>
25
+ <tr><td>{{> footer}}</td></tr>
26
+ </table>
27
+ </body>
28
+ </html>
@@ -20,12 +20,16 @@
20
20
  {{#if errorMessage}}<p style="margin: 0; font-size: 14px; color: #ef4444;"><strong>Error:</strong> {{errorMessage}}</p>{{/if}}
21
21
  </div>
22
22
  {{/if}}
23
+ {{#if keepsAccess}}
24
+ <p style="color: #333333; font-size: 16px; line-height: 1.6; margin: 0 0 24px 0;">Nothing has stopped: everything keeps working while we retry. Update your card so it doesn't run out.</p>
25
+ {{else}}
23
26
  <p style="color: #333333; font-size: 16px; line-height: 1.6; margin: 0 0 16px 0;"><strong>What you need to do:</strong></p>
24
27
  <ul style="color: #333333; font-size: 16px; line-height: 1.8; margin: 0 0 24px 0; padding-left: 24px;">
25
28
  <li>Verify your payment method is up to date</li>
26
29
  <li>Ensure sufficient funds are available</li>
27
30
  <li>Update your payment information if needed</li>
28
31
  </ul>
32
+ {{/if}}
29
33
  {{#if invoiceUrl}}
30
34
  <div style="text-align: center; margin: 32px 0 16px 0;">
31
35
  <a href="{{invoiceUrl}}" style="display: inline-block; background: #1a1a1a; color: #ffffff; padding: 14px 28px; text-decoration: none; border-radius: 4px; font-weight: 600; font-size: 16px;">View Invoice</a>
@@ -0,0 +1,26 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ import { BillingModuleConfig } from "./interfaces/billing.config.interface";
3
+ /**
4
+ * BillingModule — per-app billing settings and billing housekeeping.
5
+ *
6
+ * - `BILLING_CONFIG` (global): the resolved settings every billing service reads
7
+ * - `BillingLifecycleCron` (worker only): hourly card-expiry check
8
+ * - `BillingEmailProcessor` (worker only, opt-in): the library billing email sender on `QueueId.EMAIL`
9
+ *
10
+ * Always mounted by `FoundationsModule`.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Through bootstrap, which forwards it to FoundationsModule
15
+ * bootstrap({ billing: { emailSender: { enabled: true } } })
16
+ * ```
17
+ */
18
+ export declare class BillingModule {
19
+ /**
20
+ * Configure the BillingModule.
21
+ *
22
+ * @param config - Optional configuration merged key by key over DEFAULT_BILLING_CONFIG
23
+ */
24
+ static forRoot(config?: BillingModuleConfig): DynamicModule;
25
+ }
26
+ //# sourceMappingURL=billing.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/billing/billing.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AAQjE,OAAO,EAAkB,mBAAmB,EAAwB,MAAM,uCAAuC,CAAC;AAIlH;;;;;;;;;;;;;;GAcG;AACH,qBACa,aAAa;IACxB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,aAAa;CA2B5D"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var BillingModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.BillingModule = void 0;
11
+ const bullmq_1 = require("@nestjs/bullmq");
12
+ const common_1 = require("@nestjs/common");
13
+ const conditional_service_decorator_1 = require("../../common/decorators/conditional-service.decorator");
14
+ const queue_id_1 = require("../../config/enums/queue.id");
15
+ const email_module_1 = require("../../core/email/email.module");
16
+ const stripe_customer_module_1 = require("../stripe-customer/stripe-customer.module");
17
+ const stripe_subscription_module_1 = require("../stripe-subscription/stripe-subscription.module");
18
+ const stripe_webhook_module_1 = require("../stripe-webhook/stripe-webhook.module");
19
+ const billing_lifecycle_cron_1 = require("./cron/billing-lifecycle.cron");
20
+ const billing_config_interface_1 = require("./interfaces/billing.config.interface");
21
+ const billing_email_processor_1 = require("./processors/billing-email.processor");
22
+ const card_expiry_warning_service_1 = require("./services/card-expiry-warning.service");
23
+ /**
24
+ * BillingModule — per-app billing settings and billing housekeeping.
25
+ *
26
+ * - `BILLING_CONFIG` (global): the resolved settings every billing service reads
27
+ * - `BillingLifecycleCron` (worker only): hourly card-expiry check
28
+ * - `BillingEmailProcessor` (worker only, opt-in): the library billing email sender on `QueueId.EMAIL`
29
+ *
30
+ * Always mounted by `FoundationsModule`.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Through bootstrap, which forwards it to FoundationsModule
35
+ * bootstrap({ billing: { emailSender: { enabled: true } } })
36
+ * ```
37
+ */
38
+ let BillingModule = BillingModule_1 = class BillingModule {
39
+ /**
40
+ * Configure the BillingModule.
41
+ *
42
+ * @param config - Optional configuration merged key by key over DEFAULT_BILLING_CONFIG
43
+ */
44
+ static forRoot(config) {
45
+ const resolved = (0, billing_config_interface_1.resolveBillingConfig)(config);
46
+ const configProvider = {
47
+ provide: billing_config_interface_1.BILLING_CONFIG,
48
+ useValue: resolved,
49
+ };
50
+ return {
51
+ module: BillingModule_1,
52
+ global: true,
53
+ imports: [
54
+ bullmq_1.BullModule.registerQueue({ name: queue_id_1.QueueId.EMAIL }),
55
+ email_module_1.EmailModule,
56
+ stripe_subscription_module_1.StripeSubscriptionModule,
57
+ stripe_customer_module_1.StripeCustomerModule,
58
+ stripe_webhook_module_1.StripeWebhookModule,
59
+ ],
60
+ providers: [
61
+ configProvider,
62
+ card_expiry_warning_service_1.CardExpiryWarningService,
63
+ (0, conditional_service_decorator_1.createWorkerProvider)(billing_lifecycle_cron_1.BillingLifecycleCron),
64
+ ...(resolved.emailSender.enabled ? [(0, conditional_service_decorator_1.createWorkerProvider)(billing_email_processor_1.BillingEmailProcessor)] : []),
65
+ ],
66
+ exports: [billing_config_interface_1.BILLING_CONFIG],
67
+ };
68
+ }
69
+ };
70
+ exports.BillingModule = BillingModule;
71
+ exports.BillingModule = BillingModule = BillingModule_1 = __decorate([
72
+ (0, common_1.Module)({})
73
+ ], BillingModule);
74
+ //# sourceMappingURL=billing.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.module.js","sourceRoot":"","sources":["../../../src/foundations/billing/billing.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAiE;AACjE,yGAA6F;AAC7F,0DAAsD;AACtD,gEAA4D;AAC5D,sFAAiF;AACjF,kGAA6F;AAC7F,mFAA8E;AAC9E,0EAAqE;AACrE,oFAAkH;AAClH,kFAA6E;AAC7E,wFAAkF;AAElF;;;;;;;;;;;;;;GAcG;AAEI,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACxB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,MAA4B;QACzC,MAAM,QAAQ,GAAG,IAAA,+CAAoB,EAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,cAAc,GAAa;YAC/B,OAAO,EAAE,yCAAc;YACvB,QAAQ,EAAE,QAAQ;SACnB,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE;gBACP,mBAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,kBAAO,CAAC,KAAK,EAAE,CAAC;gBACjD,0BAAW;gBACX,qDAAwB;gBACxB,6CAAoB;gBACpB,2CAAmB;aACpB;YACD,SAAS,EAAE;gBACT,cAAc;gBACd,sDAAwB;gBACxB,IAAA,oDAAoB,EAAC,6CAAoB,CAAC;gBAC1C,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,oDAAoB,EAAC,+CAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACvF;YACD,OAAO,EAAE,CAAC,yCAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;CACF,CAAA;AAjCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAiCzB"}
@@ -0,0 +1,16 @@
1
+ import { AppLoggingService } from "../../../core/logging/services/logging.service";
2
+ import { CardExpiryWarningService } from "../services/card-expiry-warning.service";
3
+ /**
4
+ * BillingLifecycleCron — hourly billing housekeeping, registered on worker
5
+ * instances only (`createWorkerProvider`).
6
+ *
7
+ * Checks the cards that expire before their renewal. A failure is logged, never
8
+ * thrown, so the next hourly run tries again.
9
+ */
10
+ export declare class BillingLifecycleCron {
11
+ private readonly cardExpiryWarningService;
12
+ private readonly logger;
13
+ constructor(cardExpiryWarningService: CardExpiryWarningService, logger: AppLoggingService);
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=billing-lifecycle.cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-lifecycle.cron.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/cron/billing-lifecycle.cron.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;;;;;GAMG;AACH,qBACa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,wBAAwB,EAAE,wBAAwB,EAClD,MAAM,EAAE,iBAAiB;IAItC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAU3B"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BillingLifecycleCron = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const schedule_1 = require("@nestjs/schedule");
15
+ const logging_service_1 = require("../../../core/logging/services/logging.service");
16
+ const card_expiry_warning_service_1 = require("../services/card-expiry-warning.service");
17
+ /**
18
+ * BillingLifecycleCron — hourly billing housekeeping, registered on worker
19
+ * instances only (`createWorkerProvider`).
20
+ *
21
+ * Checks the cards that expire before their renewal. A failure is logged, never
22
+ * thrown, so the next hourly run tries again.
23
+ */
24
+ let BillingLifecycleCron = class BillingLifecycleCron {
25
+ constructor(cardExpiryWarningService, logger) {
26
+ this.cardExpiryWarningService = cardExpiryWarningService;
27
+ this.logger = logger;
28
+ }
29
+ async run() {
30
+ const now = new Date();
31
+ try {
32
+ const { checked, warned } = await this.cardExpiryWarningService.processDue({ now });
33
+ this.logger.log(`Billing lifecycle: ${checked} card(s) checked, ${warned} warned`, "BillingLifecycleCron");
34
+ }
35
+ catch (error) {
36
+ this.logger.error(`Failed to check expiring cards: ${error.message}`, "BillingLifecycleCron");
37
+ }
38
+ }
39
+ };
40
+ exports.BillingLifecycleCron = BillingLifecycleCron;
41
+ __decorate([
42
+ (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_HOUR),
43
+ __metadata("design:type", Function),
44
+ __metadata("design:paramtypes", []),
45
+ __metadata("design:returntype", Promise)
46
+ ], BillingLifecycleCron.prototype, "run", null);
47
+ exports.BillingLifecycleCron = BillingLifecycleCron = __decorate([
48
+ (0, common_1.Injectable)(),
49
+ __metadata("design:paramtypes", [card_expiry_warning_service_1.CardExpiryWarningService,
50
+ logging_service_1.AppLoggingService])
51
+ ], BillingLifecycleCron);
52
+ //# sourceMappingURL=billing-lifecycle.cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-lifecycle.cron.js","sourceRoot":"","sources":["../../../../src/foundations/billing/cron/billing-lifecycle.cron.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+CAAwD;AACxD,oFAAmF;AACnF,yFAAmF;AAEnF;;;;;;GAMG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACmB,wBAAkD,EAClD,MAAyB;QADzB,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,WAAM,GAAN,MAAM,CAAmB;IACzC,CAAC;IAGE,AAAN,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,OAAO,qBAAqB,MAAM,SAAS,EAAE,sBAAsB,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;CACF,CAAA;AAjBY,oDAAoB;AAOzB;IADL,IAAA,eAAI,EAAC,yBAAc,CAAC,UAAU,CAAC;;;;+CAU/B;+BAhBU,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAGkC,sDAAwB;QAC1C,mCAAiB;GAHjC,oBAAoB,CAiBhC"}
@@ -0,0 +1,7 @@
1
+ export * from "./billing.module";
2
+ export * from "./interfaces/billing.config.interface";
3
+ export * from "./processors/billing-email.jobs";
4
+ export * from "./processors/billing-email.processor";
5
+ export * from "./cron/billing-lifecycle.cron";
6
+ export * from "./services/card-expiry-warning.service";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/billing/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uCAAuC,CAAC;AAGtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,wCAAwC,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Module
18
+ __exportStar(require("./billing.module"), exports);
19
+ // Config
20
+ __exportStar(require("./interfaces/billing.config.interface"), exports);
21
+ // Sender
22
+ __exportStar(require("./processors/billing-email.jobs"), exports);
23
+ __exportStar(require("./processors/billing-email.processor"), exports);
24
+ // Cron
25
+ __exportStar(require("./cron/billing-lifecycle.cron"), exports);
26
+ // Services
27
+ __exportStar(require("./services/card-expiry-warning.service"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/billing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS;AACT,mDAAiC;AAEjC,SAAS;AACT,wEAAsD;AAEtD,SAAS;AACT,kEAAgD;AAChD,uEAAqD;AAErD,OAAO;AACP,gEAA8C;AAE9C,WAAW;AACX,yEAAuD"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The three billing emails an app can switch off one by one.
3
+ */
4
+ export type BillingEmailKey = "paymentFailed" | "cardExpiring" | "subscriptionEnded";
5
+ /**
6
+ * App-relative paths the billing emails link to. The sender prefixes each with
7
+ * the app URL (`app.url`, trailing slash removed).
8
+ */
9
+ export type BillingLinks = {
10
+ billing: string;
11
+ paymentMethod: string;
12
+ subscribe: string;
13
+ resubscribe: string;
14
+ };
15
+ /**
16
+ * One email job the library sender handles: the template id and the mapping from
17
+ * the queued payload to the template data.
18
+ */
19
+ export interface BillingEmailJobDefinition {
20
+ template: string;
21
+ toTemplateData: (payload: Record<string, unknown>, ctx: {
22
+ appUrl: string;
23
+ locale: string;
24
+ links: BillingLinks;
25
+ }) => Record<string, unknown>;
26
+ }
27
+ /**
28
+ * Configuration for the BillingModule. Every key is optional; omitted keys keep
29
+ * the value in `DEFAULT_BILLING_CONFIG`.
30
+ */
31
+ export interface BillingModuleConfig {
32
+ /**
33
+ * The library billing email sender (a BullMQ worker on `QueueId.EMAIL`).
34
+ * OFF by default: apps that consume the email queue with their own processor
35
+ * keep doing so. `extraJobs` adds or overrides job types for the app.
36
+ */
37
+ emailSender?: {
38
+ enabled?: boolean;
39
+ extraJobs?: Record<string, BillingEmailJobDefinition>;
40
+ };
41
+ /** Per-email switches. Default: every email on. */
42
+ emails?: Partial<Record<BillingEmailKey, boolean>>;
43
+ /** Keep full access while Stripe retries a failed renewal, for GMs who have paid before. Default on. */
44
+ failedCardGrace?: boolean;
45
+ /** Days between a subscription ending and the company's deletion date. Default 30. */
46
+ deletion?: {
47
+ afterSubscriptionEndedDays?: number;
48
+ };
49
+ /** App-relative paths used in billing emails. */
50
+ links?: Partial<BillingLinks>;
51
+ }
52
+ export type ResolvedBillingConfig = {
53
+ emailSender: {
54
+ enabled: boolean;
55
+ extraJobs: Record<string, BillingEmailJobDefinition>;
56
+ };
57
+ emails: Record<BillingEmailKey, boolean>;
58
+ failedCardGrace: boolean;
59
+ deletion: {
60
+ afterSubscriptionEndedDays: number;
61
+ };
62
+ links: BillingLinks;
63
+ };
64
+ export declare const DEFAULT_BILLING_CONFIG: ResolvedBillingConfig;
65
+ export declare const BILLING_CONFIG: unique symbol;
66
+ /**
67
+ * Merges an app's billing config over the defaults, key by key: a partial
68
+ * `emails` or `links` object keeps every key it does not name.
69
+ */
70
+ export declare function resolveBillingConfig(config?: BillingModuleConfig): ResolvedBillingConfig;
71
+ //# sourceMappingURL=billing.config.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.config.interface.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/billing.config.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAErF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9G;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,KACzD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KAAE,CAAC;IAC3F,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,wGAAwG;IACxG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,EAAE;QAAE,0BAA0B,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KAAE,CAAC;IACxF,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE;QAAE,0BAA0B,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,qBAWpC,CAAC;AAEF,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,CAcxF"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BILLING_CONFIG = exports.DEFAULT_BILLING_CONFIG = void 0;
4
+ exports.resolveBillingConfig = resolveBillingConfig;
5
+ exports.DEFAULT_BILLING_CONFIG = {
6
+ emailSender: { enabled: false, extraJobs: {} },
7
+ emails: { paymentFailed: true, cardExpiring: true, subscriptionEnded: true },
8
+ failedCardGrace: true,
9
+ deletion: { afterSubscriptionEndedDays: 30 },
10
+ links: {
11
+ billing: "/settings/billing",
12
+ paymentMethod: "/settings/billing",
13
+ subscribe: "/settings/billing?action=subscribe",
14
+ resubscribe: "/settings/billing",
15
+ },
16
+ };
17
+ exports.BILLING_CONFIG = Symbol("BILLING_CONFIG");
18
+ /**
19
+ * Merges an app's billing config over the defaults, key by key: a partial
20
+ * `emails` or `links` object keeps every key it does not name.
21
+ */
22
+ function resolveBillingConfig(config) {
23
+ return {
24
+ emailSender: {
25
+ enabled: config?.emailSender?.enabled ?? exports.DEFAULT_BILLING_CONFIG.emailSender.enabled,
26
+ extraJobs: { ...exports.DEFAULT_BILLING_CONFIG.emailSender.extraJobs, ...(config?.emailSender?.extraJobs ?? {}) },
27
+ },
28
+ emails: { ...exports.DEFAULT_BILLING_CONFIG.emails, ...stripUndefined(config?.emails) },
29
+ failedCardGrace: config?.failedCardGrace ?? exports.DEFAULT_BILLING_CONFIG.failedCardGrace,
30
+ deletion: {
31
+ afterSubscriptionEndedDays: config?.deletion?.afterSubscriptionEndedDays ?? exports.DEFAULT_BILLING_CONFIG.deletion.afterSubscriptionEndedDays,
32
+ },
33
+ links: { ...exports.DEFAULT_BILLING_CONFIG.links, ...stripUndefined(config?.links) },
34
+ };
35
+ }
36
+ function stripUndefined(value) {
37
+ if (!value)
38
+ return {};
39
+ return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined));
40
+ }
41
+ //# sourceMappingURL=billing.config.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.config.interface.js","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/billing.config.interface.ts"],"names":[],"mappings":";;;AAuEA,oDAcC;AAjCY,QAAA,sBAAsB,GAA0B;IAC3D,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9C,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAC5E,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE;IAC5C,KAAK,EAAE;QACL,OAAO,EAAE,mBAAmB;QAC5B,aAAa,EAAE,mBAAmB;QAClC,SAAS,EAAE,oCAAoC;QAC/C,WAAW,EAAE,mBAAmB;KACjC;CACF,CAAC;AAEW,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEvD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,MAA4B;IAC/D,OAAO;QACL,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,IAAI,8BAAsB,CAAC,WAAW,CAAC,OAAO;YACnF,SAAS,EAAE,EAAE,GAAG,8BAAsB,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE;SAC1G;QACD,MAAM,EAAE,EAAE,GAAG,8BAAsB,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QAC/E,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,8BAAsB,CAAC,eAAe;QAClF,QAAQ,EAAE;YACR,0BAA0B,EACxB,MAAM,EAAE,QAAQ,EAAE,0BAA0B,IAAI,8BAAsB,CAAC,QAAQ,CAAC,0BAA0B;SAC7G;QACD,KAAK,EAAE,EAAE,GAAG,8BAAsB,CAAC,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAmB,KAAS;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAe,CAAC;AACpG,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { BillingEmailJobDefinition } from "../interfaces/billing.config.interface";
2
+ /**
3
+ * Job types the library billing email sender handles out of the box.
4
+ *
5
+ * The mapping below is copied from only35's `apps/api/src/processors/email.processor.ts`
6
+ * (every job type except the app-specific `cull-completed`), with the hard-coded
7
+ * paths turned into the configurable `links`. `card-expiring` is new.
8
+ */
9
+ export type LibraryBillingJobType = "payment-failure" | "subscription-status-change" | "payment-success-customer" | "payment-success-admin" | "trial-ending-reminder" | "trial-ended" | "deletion-warning" | "subscription-cancelled" | "company-deleted" | "referral-invite" | "referral-reward" | "card-expiring";
10
+ export interface BillingEmailJobData {
11
+ jobType: string;
12
+ payload: Record<string, unknown> & {
13
+ to: string;
14
+ locale?: string;
15
+ };
16
+ }
17
+ export interface PaymentFailureEmailParams {
18
+ to: string;
19
+ customerName: string;
20
+ stripeCustomerId: string;
21
+ stripeInvoiceId?: string;
22
+ stripePaymentIntentId?: string;
23
+ amount?: number;
24
+ currency?: string;
25
+ errorMessage?: string;
26
+ invoiceUrl?: string;
27
+ invoiceNumber?: string;
28
+ keepsAccess?: boolean;
29
+ locale?: string;
30
+ }
31
+ export interface SubscriptionStatusEmailParams {
32
+ to: string;
33
+ customerName: string;
34
+ stripeCustomerId: string;
35
+ subscriptionId: string;
36
+ status: string;
37
+ locale?: string;
38
+ }
39
+ export interface PaymentSuccessCustomerEmailParams {
40
+ to: string;
41
+ customerName: string;
42
+ stripeCustomerId: string;
43
+ stripeInvoiceId?: string;
44
+ stripePaymentIntentId?: string;
45
+ amount: number;
46
+ currency: string;
47
+ invoiceUrl?: string;
48
+ invoiceNumber?: string;
49
+ isOneTimePurchase: boolean;
50
+ locale?: string;
51
+ }
52
+ export interface PaymentSuccessAdminEmailParams {
53
+ to: string;
54
+ adminName: string;
55
+ companyName: string;
56
+ amount: number;
57
+ currency: string;
58
+ isOneTimePurchase: boolean;
59
+ locale?: string;
60
+ }
61
+ export interface TrialEndingReminderEmailParams {
62
+ to: string;
63
+ customerName: string;
64
+ stripeCustomerId: string;
65
+ stripeSubscriptionId: string;
66
+ trialEndDate: string;
67
+ locale?: string;
68
+ }
69
+ export interface TrialEndedEmailParams {
70
+ to: string;
71
+ customerName: string;
72
+ companyName: string;
73
+ stripeCustomerId: string;
74
+ stripeSubscriptionId: string;
75
+ trialEndDate: string;
76
+ dataRemovalDate: string;
77
+ locale?: string;
78
+ }
79
+ export interface DeletionWarningEmailParams {
80
+ to: string;
81
+ companyName: string;
82
+ daysRemaining: number;
83
+ deletionDate: string;
84
+ reason: "trial_expired" | "subscription_cancelled";
85
+ isTrialExpired: boolean;
86
+ isSubscriptionCancelled: boolean;
87
+ locale?: string;
88
+ }
89
+ export interface SubscriptionCancelledEmailParams {
90
+ to: string;
91
+ companyName: string;
92
+ dataRemovalDate: string;
93
+ locale?: string;
94
+ }
95
+ export interface CompanyDeletedEmailParams {
96
+ to: string;
97
+ companyName: string;
98
+ reason: "trial_expired" | "subscription_cancelled" | "immediate_deletion";
99
+ deletionDate: string;
100
+ locale?: string;
101
+ }
102
+ export interface ReferralInviteEmailParams {
103
+ to: string;
104
+ referralCode: string;
105
+ companyName: string;
106
+ inviterName: string;
107
+ inviterEmail: string;
108
+ referralUrl: string;
109
+ locale?: string;
110
+ }
111
+ export interface ReferralRewardEmailParams {
112
+ to: string;
113
+ userName: string;
114
+ tokensAwarded: number;
115
+ locale?: string;
116
+ }
117
+ export interface CardExpiringEmailParams {
118
+ to: string;
119
+ customerName: string;
120
+ stripeCustomerId: string;
121
+ renewalDate: string;
122
+ cardBrand: string;
123
+ cardLast4: string;
124
+ locale?: string;
125
+ }
126
+ export declare const LIBRARY_BILLING_EMAIL_JOBS: Record<LibraryBillingJobType, BillingEmailJobDefinition>;
127
+ //# sourceMappingURL=billing-email.jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-email.jobs.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/processors/billing-email.jobs.ts"],"names":[],"mappings":"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"}