@stamhoofd/backend 2.121.0 → 2.122.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 (429) hide show
  1. package/output-2.txt +1 -0
  2. package/output.txt +1 -0
  3. package/package.json +69 -52
  4. package/src/audit-logs/EventNotificationLogger.ts +40 -0
  5. package/src/audit-logs/ModelLogger.ts +19 -15
  6. package/src/audit-logs/OrganizationLogger.ts +1 -1
  7. package/src/audit-logs/RegistrationInvitationLogger.ts +24 -24
  8. package/src/audit-logs/init.ts +8 -2
  9. package/src/boot.ts +19 -18
  10. package/src/crons/amazon-ses.ts +13 -26
  11. package/src/crons/balance-emails.ts +3 -5
  12. package/src/crons/clearExcelCache.test.ts +1 -1
  13. package/src/crons/clearExcelCache.ts +1 -2
  14. package/src/crons/drip-emails.ts +42 -0
  15. package/src/crons/endFunctionsOfUsersWithoutRegistration.ts +4 -0
  16. package/src/crons/helpers/isOutside.ts +11 -0
  17. package/src/crons/helpers/useSavedIterator.ts +32 -0
  18. package/src/crons/index.ts +5 -0
  19. package/src/crons/invoices.ts +32 -38
  20. package/src/crons/members-fees.ts +50 -0
  21. package/src/crons/mollie-chargebacks.ts +14 -15
  22. package/src/crons/service-fees.ts +152 -0
  23. package/src/crons/stripe-invoices.ts +48 -0
  24. package/src/crons/transfer-fees.ts +176 -0
  25. package/src/crons/update-cached-balances.ts +4 -4
  26. package/src/crons.ts +7 -64
  27. package/src/debug.ts +4 -2
  28. package/src/email-recipient-loaders/documents.ts +1 -1
  29. package/src/email-recipient-loaders/members.ts +1 -1
  30. package/src/email-recipient-loaders/payments.ts +4 -6
  31. package/src/email-recipient-loaders/registrations.ts +1 -1
  32. package/src/email-replacements/getEmailReplacementsForPayment.ts +5 -9
  33. package/src/endpoints/admin/members/ChargeMembersEndpoint.ts +1 -1
  34. package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +1 -1
  35. package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +3 -5
  36. package/src/endpoints/admin/organizations/ChargeOrganizationsEndpoint.ts +1 -1
  37. package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +1 -1
  38. package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +13 -7
  39. package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +4 -6
  40. package/src/endpoints/admin/organizations/PatchPackagesEndpoint.test.ts +10 -6
  41. package/src/endpoints/admin/organizations/PatchPackagesEndpoint.ts +39 -21
  42. package/src/endpoints/admin/registrations/ChargeRegistrationsEndpoint.ts +1 -1
  43. package/src/endpoints/auth/CreateAdminEndpoint.ts +23 -5
  44. package/src/endpoints/auth/CreateTokenEndpoint.ts +2 -2
  45. package/src/endpoints/auth/DeleteTokenEndpoint.ts +1 -1
  46. package/src/endpoints/auth/DeleteUserEndpoint.ts +3 -3
  47. package/src/endpoints/auth/ForgotPasswordEndpoint.ts +1 -1
  48. package/src/endpoints/auth/GetOtherUserEndpoint.ts +1 -1
  49. package/src/endpoints/auth/GetUserEndpoint.ts +1 -1
  50. package/src/endpoints/auth/OpenIDConnectAuthTokenEndpoint.ts +1 -1
  51. package/src/endpoints/auth/OpenIDConnectStartEndpoint.ts +1 -1
  52. package/src/endpoints/auth/PatchUserEndpoint.ts +5 -8
  53. package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +1 -1
  54. package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +1 -1
  55. package/src/endpoints/auth/SignupEndpoint.ts +2 -3
  56. package/src/endpoints/auth/VerifyEmailEndpoint.ts +20 -3
  57. package/src/endpoints/frontend/FrontendEnvironmentEndpoint.ts +2 -1
  58. package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +2 -4
  59. package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +1 -1
  60. package/src/endpoints/global/audit-logs/GetAuditLogsEndpoint.ts +5 -7
  61. package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +2 -2
  62. package/src/endpoints/global/email/CreateEmailEndpoint.ts +3 -4
  63. package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +1 -1
  64. package/src/endpoints/global/email/GetAdminEmailsEndpoint.ts +1 -2
  65. package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +4 -6
  66. package/src/endpoints/global/email/GetEmailEndpoint.ts +1 -1
  67. package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +1 -1
  68. package/src/endpoints/global/email/GetUserEmailsEndpoint.ts +1 -1
  69. package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +6 -10
  70. package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +4 -7
  71. package/src/endpoints/global/email/PatchEmailEndpoint.ts +6 -9
  72. package/src/endpoints/global/email-recipients/GetEmailRecipientsCountEndpoint.ts +1 -1
  73. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +1 -1
  74. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.ts +1 -1
  75. package/src/endpoints/global/email-recipients/RetryEmailRecipientEndpoint.ts +2 -2
  76. package/src/endpoints/global/events/GetEventNotificationsCountEndpoint.ts +1 -1
  77. package/src/endpoints/global/events/GetEventNotificationsEndpoint.ts +3 -3
  78. package/src/endpoints/global/events/GetEventsEndpoint.ts +3 -3
  79. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +49 -4
  80. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.ts +5 -8
  81. package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +12 -44
  82. package/src/endpoints/global/events/PatchEventsEndpoint.ts +128 -127
  83. package/src/endpoints/global/files/ExportToExcelEndpoint.ts +9 -9
  84. package/src/endpoints/global/files/GetFileCache.ts +3 -4
  85. package/src/endpoints/global/files/UploadFile.ts +3 -4
  86. package/src/endpoints/global/files/UploadImage.ts +3 -4
  87. package/src/endpoints/global/groups/GetGroupsCountEndpoint.ts +1 -1
  88. package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +1 -1
  89. package/src/endpoints/global/groups/GetGroupsEndpoint.ts +4 -2
  90. package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +2 -3
  91. package/src/endpoints/global/members/GetMembersCountEndpoint.ts +1 -1
  92. package/src/endpoints/global/members/GetMembersEndpoint.test.ts +2 -2
  93. package/src/endpoints/global/members/GetMembersEndpoint.ts +10 -12
  94. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +195 -12
  95. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +16 -22
  96. package/src/endpoints/global/members/helpers/validateGroupFilter.ts +6 -30
  97. package/src/endpoints/global/members/shouldCheckIfMemberIsDuplicate.ts +1 -1
  98. package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +1 -1
  99. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +40 -8
  100. package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +2 -2
  101. package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +2 -2
  102. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.test.ts +4 -1
  103. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +4 -5
  104. package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +9 -16
  105. package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +1 -1
  106. package/src/endpoints/global/platform/GetPlatformEndpoint.ts +1 -1
  107. package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +1 -1
  108. package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +11 -11
  109. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsCountEndpoint.ts +31 -31
  110. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +18 -20
  111. package/src/endpoints/global/registration/GetRegistrationsCountEndpoint.ts +1 -1
  112. package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +1 -1
  113. package/src/endpoints/global/registration/GetRegistrationsEndpoint.ts +6 -10
  114. package/src/endpoints/global/registration/GetUserDetailedPayableBalanceEndpoint.ts +35 -6
  115. package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +2 -2
  116. package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +1 -1
  117. package/src/endpoints/global/registration/GetUserPayableBalanceEndpoint.ts +1 -1
  118. package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +2 -2
  119. package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +3 -3
  120. package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +90 -6
  121. package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +35 -34
  122. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsCountEndpoint.ts +1 -1
  123. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.test.ts +62 -63
  124. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.ts +6 -9
  125. package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.test.ts +51 -52
  126. package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.ts +6 -7
  127. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsCountEndpoint.ts +43 -0
  128. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +1 -1
  129. package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +13 -5
  130. package/src/endpoints/global/sso/GetSSOEndpoint.ts +2 -3
  131. package/src/endpoints/global/sso/SetSSOEndpoint.ts +1 -1
  132. package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +2 -2
  133. package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +1 -2
  134. package/src/endpoints/global/webshops/GetWebshopsEndpoint.ts +2 -4
  135. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemEndpoint.ts +2 -2
  136. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsCountEndpoint.ts +1 -1
  137. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.ts +3 -4
  138. package/src/endpoints/organization/dashboard/balance-items/PatchBalanceItemsEndpoint.ts +7 -9
  139. package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.test.ts +73 -0
  140. package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.ts +89 -0
  141. package/src/endpoints/organization/dashboard/billing/DeactivatePackageEndpoint.ts +1 -5
  142. package/src/endpoints/organization/dashboard/billing/DeleteOrganizationMandateEndpoint.ts +11 -11
  143. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceCollectionEndpoint.ts +2 -2
  144. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceEndpoint.ts +8 -8
  145. package/src/endpoints/organization/dashboard/billing/GetOrganizationMandatesEndpoint.ts +9 -9
  146. package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableBalanceEndpoint.ts +2 -2
  147. package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableInvoicesEndpoint.ts +68 -0
  148. package/src/endpoints/organization/dashboard/billing/GetPackagesEndpoint.ts +4 -4
  149. package/src/endpoints/organization/dashboard/billing/GetRegisterCodeEndpoint.ts +66 -0
  150. package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.test.ts +949 -0
  151. package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.ts +60 -57
  152. package/src/endpoints/organization/dashboard/billing/PatchOrganizationMandatesEndpoint.ts +20 -20
  153. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +1 -1
  154. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesCountEndpoint.ts +1 -1
  155. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +1 -1
  156. package/src/endpoints/organization/dashboard/documents/GetDocumentsCountEndpoint.ts +1 -1
  157. package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +1 -1
  158. package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +10 -2
  159. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +2 -2
  160. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.ts +2 -2
  161. package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +1 -1
  162. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +1 -1
  163. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +10 -8
  164. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +1 -1
  165. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +5 -6
  166. package/src/endpoints/organization/dashboard/invoices/GetInvoicesCountEndpoint.ts +1 -1
  167. package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.ts +10 -6
  168. package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +11 -2
  169. package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +4 -5
  170. package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +5 -5
  171. package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +2 -2
  172. package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +7 -7
  173. package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +1 -1
  174. package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +2 -2
  175. package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +1 -1
  176. package/src/endpoints/organization/dashboard/organization/GetUitpasClientIdEndpoint.ts +1 -1
  177. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +2 -2
  178. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +50 -12
  179. package/src/endpoints/organization/dashboard/organization/SearchUitpasOrganizersEndpoint.ts +2 -2
  180. package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +5 -10
  181. package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +1 -1
  182. package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +1 -1
  183. package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +3 -4
  184. package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +21 -14
  185. package/src/endpoints/organization/dashboard/receivable-balances/ChargeReceivableBalancesEndpoint.ts +35 -28
  186. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.ts +2 -3
  187. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesCountEndpoint.ts +1 -1
  188. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesEndpoint.ts +1 -1
  189. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
  190. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +2 -3
  191. package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +1 -1
  192. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
  193. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +19 -18
  194. package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +4 -5
  195. package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +1 -1
  196. package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +2 -3
  197. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +2 -2
  198. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +1 -1
  199. package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +2 -2
  200. package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +1 -1
  201. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +1 -1
  202. package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +1 -1
  203. package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +1 -1
  204. package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +1 -1
  205. package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.ts +4 -6
  206. package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +10 -15
  207. package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +1 -1
  208. package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +2 -2
  209. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersCountEndpoint.ts +1 -1
  210. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +1 -1
  211. package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +1 -1
  212. package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +11 -2
  213. package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +4 -6
  214. package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +22 -7
  215. package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +20 -27
  216. package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +1 -1
  217. package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +2 -2
  218. package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +2 -3
  219. package/src/endpoints/organization/dashboard/webshops/WebshopReservedPathSegments.test.ts +95 -0
  220. package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +2 -2
  221. package/src/endpoints/organization/shared/GetDocumentHtml.ts +1 -1
  222. package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +1 -1
  223. package/src/endpoints/organization/shared/GetUitpasNumberDetailsEndpoint.ts +3 -5
  224. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +1 -1
  225. package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +4 -1
  226. package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +14 -3
  227. package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +14 -2
  228. package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +37 -16
  229. package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +34 -2
  230. package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +4 -2
  231. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +74 -3
  232. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +16 -33
  233. package/src/endpoints/organization/webshops/RetrieveUitpasSocialTariffPriceEndpoint.ts +3 -5
  234. package/src/endpoints/organization/webshops/WebshopAuthHelper.ts +36 -0
  235. package/src/endpoints/system/HealthEndpoint.ts +1 -1
  236. package/src/excel-loaders/balance-items.ts +1 -1
  237. package/src/excel-loaders/event-notifications.ts +1 -1
  238. package/src/excel-loaders/members.ts +1 -1
  239. package/src/excel-loaders/organizations.ts +3 -3
  240. package/src/excel-loaders/payments.ts +31 -1
  241. package/src/excel-loaders/platform-memberships.ts +13 -14
  242. package/src/excel-loaders/receivable-balances.ts +2 -2
  243. package/src/excel-loaders/registrations.ts +2 -3
  244. package/src/helpers/AddressValidator.ts +7 -14
  245. package/src/helpers/AdminPermissionChecker.ts +50 -63
  246. package/src/helpers/AuthenticatedStructures.ts +69 -55
  247. package/src/helpers/BalanceItemRelationsBackfiller.test.ts +174 -0
  248. package/src/helpers/BalanceItemRelationsBackfiller.ts +163 -0
  249. package/src/helpers/BuckarooHelper.ts +2 -4
  250. package/src/helpers/CheckSettlements.ts +12 -24
  251. package/src/helpers/Context.ts +15 -10
  252. package/src/helpers/CookieHelper.ts +1 -2
  253. package/src/helpers/EmailResumer.ts +1 -2
  254. package/src/helpers/FileCache.ts +2 -3
  255. package/src/helpers/FinancialSupportHelper.ts +2 -2
  256. package/src/helpers/FlagMomentCleanup.ts +1 -2
  257. package/src/helpers/ForwardHandler.ts +5 -10
  258. package/src/helpers/GlobalHelper.ts +3 -3
  259. package/src/helpers/LegacyBillingConverter.ts +787 -0
  260. package/src/helpers/MemberMerger.test.ts +782 -0
  261. package/src/helpers/MemberMerger.ts +600 -0
  262. package/src/helpers/MemberUserSyncer.ts +6 -12
  263. package/src/helpers/MembershipCharger.ts +2 -4
  264. package/src/helpers/PaymentCustomerResolver.test.ts +203 -0
  265. package/src/helpers/PaymentCustomerResolver.ts +144 -0
  266. package/src/helpers/PeriodHelper.ts +2 -3
  267. package/src/helpers/RecordAnswerHelper.test.ts +105 -110
  268. package/src/helpers/RecordAnswerHelper.ts +7 -7
  269. package/src/helpers/SeedTools.ts +106 -0
  270. package/src/helpers/ServiceFeeHelper.ts +125 -15
  271. package/src/helpers/SetupStepUpdater.ts +38 -32
  272. package/src/helpers/StamhoofdFilterAccessHelper.ts +52 -0
  273. package/src/helpers/StripeHelper.ts +14 -36
  274. package/src/helpers/StripeInvoicer.ts +419 -0
  275. package/src/helpers/StripePayoutChecker.ts +5 -10
  276. package/src/helpers/TagHelper.ts +7 -8
  277. package/src/helpers/TemporaryMemberAccess.ts +1 -2
  278. package/src/helpers/ThrottledQueue.ts +1 -2
  279. package/src/helpers/UitpasTokenRepository.ts +1 -2
  280. package/src/helpers/ViesHelper.ts +7 -11
  281. package/src/helpers/XlsxTransformerColumnHelper.ts +1 -1
  282. package/src/helpers/outstandingBalanceJoin.ts +2 -2
  283. package/src/helpers/updateMemberDetailsUitpasNumber.ts +3 -5
  284. package/src/migrate.ts +12 -5
  285. package/src/{seeds → migrations}/0000000004-single-organization.ts +10 -1
  286. package/src/migrations/0000000006-default-organization.ts +139 -0
  287. package/src/{seeds → migrations}/1715028563-user-permissions.ts +17 -27
  288. package/src/{seeds/1765896674-document-update-year.test.ts → migrations/1750090029-document-update-year.test.ts} +27 -26
  289. package/src/migrations/1750090029-document-update-year.ts +103 -0
  290. package/src/{seeds → migrations}/1750090030-records-configuration.ts +33 -32
  291. package/src/migrations/1750090031-records-configuration-webshops.ts +36 -0
  292. package/src/migrations/1752848540-national-numbers.ts +585 -0
  293. package/src/migrations/1752848550-records-configuration-group-filter.ts +1064 -0
  294. package/src/{seeds → migrations}/1752848561-groups-registration-periods.ts +70 -26
  295. package/src/{seeds → migrations}/1754560914-groups-prices.test.ts +1 -1
  296. package/src/{seeds → migrations}/1754560914-groups-prices.ts +9 -15
  297. package/src/{seeds → migrations}/1756293699-fill-previous-next-period-id.ts +1 -2
  298. package/src/migrations/1761665607-sync-member-users.ts +40 -0
  299. package/src/migrations/1779121240-invoice-email-template.sql +6 -0
  300. package/src/migrations/1779986893-default-payment-failed-email-templates.sql +4 -0
  301. package/src/migrations/1780578166-convert-legacy-billing.ts +13 -0
  302. package/src/{seeds/1755876819-remove-duplicate-members.ts → migrations/1780665426-remove-duplicate-members.ts} +23 -4
  303. package/src/migrations/1780933598-document-groups.ts +88 -0
  304. package/src/migrations/1781692342-balance-item-relations.ts +13 -0
  305. package/src/migrations/1781857866-platform-admins.ts +103 -0
  306. package/src/migrations/1781857867-rm-old-platform-admins.ts +25 -0
  307. package/src/seeds/0000000001-throw.ts +5 -0
  308. package/src/seeds/1760702452-update-balance-price-paid.ts +19 -0
  309. package/src/seeds/1760702453-update-balance-invoiced.ts +19 -0
  310. package/src/seeds/1760702454-update-cached-outstanding-balance-from-items.ts +51 -14
  311. package/src/seeds/1773754928-force-save-members.ts +41 -8
  312. package/src/seeds/1780665427-schedule-stock-updates.ts +45 -0
  313. package/src/seeds/1780665428-group-update-occupancy.ts +31 -0
  314. package/src/seeds/1780915001-fill-payment-customer.ts +70 -0
  315. package/src/seeds/1780915002-update-orders.ts +39 -0
  316. package/src/seeds/1782047708-organization-company-address.ts +44 -0
  317. package/src/seeds-temporary/1769088653-uitpas-status.ts +1 -2
  318. package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.test.ts +69 -0
  319. package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.ts +85 -0
  320. package/src/services/AuditLogService.test.ts +51 -0
  321. package/src/services/AuditLogService.ts +45 -0
  322. package/src/services/BalanceItemService.ts +141 -44
  323. package/src/services/CpuService.ts +3 -6
  324. package/src/services/DatabaseCollationService.test.ts +1 -2
  325. package/src/services/DocumentService.ts +1 -2
  326. package/src/services/EventNotificationService.ts +1 -1
  327. package/src/services/FileSignService.ts +2 -4
  328. package/src/services/InvoicePdfService.ts +286 -0
  329. package/src/services/InvoiceService.ts +204 -251
  330. package/src/services/InvoiceXMLService.ts +424 -0
  331. package/src/services/MemberNumberService.ts +6 -11
  332. package/src/services/MemberRecordStore.ts +8 -10
  333. package/src/services/MollieService.ts +114 -121
  334. package/src/services/PaymentMandateService.ts +45 -45
  335. package/src/services/PaymentReallocationService.test.ts +1 -1
  336. package/src/services/PaymentReallocationService.ts +7 -9
  337. package/src/services/PaymentService.ts +444 -308
  338. package/src/services/PlatformMembershipService.ts +4 -8
  339. package/src/services/ReferralService.ts +223 -0
  340. package/src/services/RegistrationService.ts +63 -53
  341. package/src/services/SSOService.test.ts +119 -0
  342. package/src/services/SSOService.ts +56 -49
  343. package/src/services/STPackageService.ts +97 -61
  344. package/src/services/UniqueMemberNumberService.ts +69 -0
  345. package/src/services/UniqueUserService.ts +3 -6
  346. package/src/services/VATService.ts +85 -0
  347. package/src/services/uitpas/PassholderEndpoints.ts +3 -6
  348. package/src/services/uitpas/UitpasService.ts +6 -10
  349. package/src/services/uitpas/checkUitpasNumbers.ts +2 -4
  350. package/src/services/uitpas/getSocialTariffForUitpasNumbers.ts +3 -6
  351. package/src/services/uitpas/searchUitpasEvents.ts +1 -2
  352. package/src/sql-filters/audit-logs.ts +1 -1
  353. package/src/sql-filters/balance-item-payments.ts +1 -1
  354. package/src/sql-filters/balance-items.ts +1 -1
  355. package/src/sql-filters/base-registration-filter-compilers.ts +5 -33
  356. package/src/sql-filters/document-templates.ts +1 -1
  357. package/src/sql-filters/documents.ts +1 -1
  358. package/src/sql-filters/email-recipients.ts +1 -1
  359. package/src/sql-filters/emails.ts +1 -1
  360. package/src/sql-filters/event-notifications.ts +1 -1
  361. package/src/sql-filters/events.ts +6 -1
  362. package/src/sql-filters/groups.ts +5 -0
  363. package/src/sql-filters/invoiced-balance-items.ts +1 -1
  364. package/src/sql-filters/invoices.ts +1 -1
  365. package/src/sql-filters/member-responsibility-records.ts +1 -1
  366. package/src/sql-filters/members.ts +1 -1
  367. package/src/sql-filters/orders.ts +4 -4
  368. package/src/sql-filters/organization-registration-periods.ts +1 -1
  369. package/src/sql-filters/organizations.ts +1 -1
  370. package/src/sql-filters/platform-memberships.ts +3 -3
  371. package/src/sql-filters/receivable-balances.ts +1 -1
  372. package/src/sql-filters/registration-periods.ts +1 -1
  373. package/src/sql-filters/registrations.ts +1 -1
  374. package/src/sql-filters/tickets.ts +1 -1
  375. package/src/sql-filters/users.ts +1 -1
  376. package/src/sql-sorters/groups.ts +23 -0
  377. package/src/sql-sorters/platform-memberships.ts +16 -16
  378. package/src/sql-sorters/registration-invitations.ts +2 -2
  379. package/tests/actions/patchOrganizationMember.ts +1 -1
  380. package/tests/actions/patchUserMember.ts +1 -1
  381. package/tests/assertions/assertBalances.ts +6 -12
  382. package/tests/e2e/api-rate-limits.test.ts +12 -24
  383. package/tests/e2e/bundle-discounts.test.ts +4 -1
  384. package/tests/e2e/charge-members.test.ts +13 -11
  385. package/tests/e2e/documents.test.ts +4 -1
  386. package/tests/e2e/register.test.ts +7 -9
  387. package/tests/e2e/stock.test.ts +4 -3
  388. package/tests/e2e/tickets.test.ts +1 -1
  389. package/tests/helpers/MollieMocker.ts +462 -0
  390. package/tests/helpers/PayconiqMocker.ts +138 -45
  391. package/tests/helpers/StripeMocker.ts +9 -6
  392. package/tests/helpers/index.ts +4 -0
  393. package/tests/init/initAdmin.ts +2 -2
  394. package/tests/init/initBundleDiscount.ts +1 -1
  395. package/tests/init/initMembershipOrganization.ts +13 -0
  396. package/tests/init/initPermissionRole.ts +3 -4
  397. package/tests/vitest.global.setup.ts +1 -1
  398. package/vitest.config.js +6 -0
  399. package/.nvmrc +0 -1
  400. package/src/helpers/GroupBuilder.ts +0 -418
  401. package/src/seeds/0000000000-example.ts +0 -11
  402. package/src/seeds/1722256498-group-update-occupancy.ts +0 -52
  403. package/src/seeds/1726572303-schedule-stock-updates.ts +0 -52
  404. package/src/seeds/1726847064-setup-steps.ts +0 -16
  405. package/src/seeds/1728928974-update-cached-outstanding-balance-from-items.ts +0 -31
  406. package/src/seeds/1729253172-update-orders.ts +0 -21
  407. package/src/seeds/1733319079-fill-paying-organization-ids.ts +0 -68
  408. package/src/seeds/1733748412-update-deleted-order-numbers.ts +0 -109
  409. package/src/seeds/1733994455-balance-item-status-open.ts +0 -30
  410. package/src/seeds/1740046783-update-membership.ts +0 -17
  411. package/src/seeds/1741008870-fix-auditlog-description.ts +0 -50
  412. package/src/seeds/1741011468-fix-auditlog-description-uft16.ts +0 -88
  413. package/src/seeds/1741268179-fix-group-dates-of-events.ts +0 -32
  414. package/src/seeds/1751445358-upload-email-attachments.ts +0 -106
  415. package/src/seeds/1755532883-update-email-sender-ids.ts +0 -47
  416. package/src/seeds/1755790070-fill-email-recipient-errors.ts +0 -96
  417. package/src/seeds/1756115432-remove-old-drafts.ts +0 -16
  418. package/src/seeds/1756115433-fill-email-recipient-organization-id.ts +0 -30
  419. package/src/seeds/1756303697-update-email-counts.ts +0 -76
  420. package/src/seeds/1761665607-sync-member-users.ts +0 -59
  421. package/src/seeds/1765896674-document-update-year.ts +0 -66
  422. /package/src/{seeds → migrations}/0000000001-development-user.ts +0 -0
  423. /package/src/{seeds → migrations}/0000000002-clear-stamhoofd-email-templates.ts +0 -0
  424. /package/src/{seeds → migrations}/0000000003-default-email-templates.ts +0 -0
  425. /package/src/{seeds → migrations}/1752848561-groups-registration-periods.test.ts +0 -0
  426. /package/src/{seeds → migrations}/1766150402-document-published-at.test.ts +0 -0
  427. /package/src/{seeds → migrations}/1766150402-document-published-at.ts +0 -0
  428. /package/src/{seeds → migrations}/1779121239-default-invoice-email-template.sql +0 -0
  429. /package/src/{seeds → migrations}/data/default-email-templates.sql +0 -0
@@ -1,4 +1,4 @@
1
- import type { Mandate , Payment as MolliePaymentType} from '@mollie/api-client';
1
+ import type { Mandate, Payment as MolliePaymentType } from '@mollie/api-client';
2
2
  import { ApiMode, createMollieClient, MandateMethod, MandateStatus, PaymentMethod as molliePaymentMethod, PaymentStatus as molliePaymentStatus, OnboardingStatus, ProfileStatus, SequenceType } from '@mollie/api-client';
3
3
  import { SimpleError } from '@simonbackx/simple-errors';
4
4
  import type { Payment, User } from '@stamhoofd/models';
@@ -14,24 +14,24 @@ import { Context } from '../helpers/Context.js';
14
14
  export class MollieService {
15
15
  client: ReturnType<typeof createMollieClient>;
16
16
  sellingOrganization: Organization;
17
- createdAt: Date
17
+ createdAt: Date;
18
18
 
19
- private constructor({sellingOrganization, accessToken}: {sellingOrganization: Organization, accessToken: string}) {
20
- this.sellingOrganization = sellingOrganization
19
+ private constructor({ sellingOrganization, accessToken }: { sellingOrganization: Organization; accessToken: string }) {
20
+ this.sellingOrganization = sellingOrganization;
21
21
  this.client = createMollieClient({ accessToken });
22
- this.createdAt = new Date()
22
+ this.createdAt = new Date();
23
23
  }
24
24
 
25
- static #cachedServices: Map<string, MollieService> = new Map()
25
+ static #cachedServices: Map<string, MollieService> = new Map();
26
26
 
27
27
  /**
28
28
  * Cached instances can be used for maximum 30 seconds
29
29
  */
30
30
  isOutdated() {
31
- return this.createdAt.getTime() < Date.now() - 30_000
31
+ return this.createdAt.getTime() < Date.now() - 30_000;
32
32
  }
33
33
 
34
- static async create({sellingOrganization}: {sellingOrganization: Organization}) {
34
+ static async create({ sellingOrganization }: { sellingOrganization: Organization }) {
35
35
  const cached = this.#cachedServices.get(sellingOrganization.id);
36
36
  if (cached && !cached.isOutdated()) {
37
37
  return cached;
@@ -39,7 +39,7 @@ export class MollieService {
39
39
  const token = await MollieToken.getTokenFor(sellingOrganization.id);
40
40
  if (!token) {
41
41
  if (cached) {
42
- this.#cachedServices.delete(sellingOrganization.id)
42
+ this.#cachedServices.delete(sellingOrganization.id);
43
43
  }
44
44
  return null;
45
45
  }
@@ -47,7 +47,7 @@ export class MollieService {
47
47
  this.#cachedServices.set(sellingOrganization.id, service);
48
48
  return service;
49
49
  }
50
-
50
+
51
51
  /**
52
52
  * Set initial onboarding values + enable bancontact
53
53
  */
@@ -74,27 +74,27 @@ export class MollieService {
74
74
  description: $t(`%x1`),
75
75
  categoryCode: 8398,
76
76
  },
77
- })
77
+ });
78
78
  } catch (e) {
79
79
  console.error('Failed to submit onboarding data', e);
80
80
  }
81
81
  }
82
82
  }
83
83
 
84
- #verifiedCustomerIds: Set<string> = new Set()
84
+ #verifiedCustomerIds: Set<string> = new Set();
85
85
 
86
86
  /**
87
87
  * Gets the customer id for a given payingOrganization or user.
88
88
  * If no customer exists, it will create a new mollie customer if customer (payment customer) is set as parameter
89
89
  */
90
- async getCustomerId({ payingOrganization, user, customer }: {
91
- payingOrganization: Organization | null,
92
- user: User | null,
90
+ async getCustomerId({ payingOrganization, user, customer }: {
91
+ payingOrganization: Organization | null;
92
+ user: User | null;
93
93
 
94
94
  /**
95
95
  * Required to be able to create a new customer
96
96
  */
97
- customer?: PaymentCustomer
97
+ customer?: PaymentCustomer;
98
98
  }): Promise<string | null> {
99
99
  if (!payingOrganization) {
100
100
  // Not yet supported for users
@@ -106,23 +106,22 @@ export class MollieService {
106
106
  return null;
107
107
  }
108
108
 
109
-
110
109
  if (payingOrganization.serverMeta.mollieCustomerId) {
111
- const customerId = payingOrganization.serverMeta.mollieCustomerId
110
+ const customerId = payingOrganization.serverMeta.mollieCustomerId;
112
111
  if (this.#verifiedCustomerIds.has(customerId)) {
113
112
  return customerId;
114
113
  }
115
114
 
116
115
  // check still valid
117
116
  try {
118
- const c = await this.client.customers.get(customerId, {testmode: this.testMode});
117
+ const c = await this.client.customers.get(customerId, { testmode: this.testMode });
119
118
 
120
119
  if ((c.mode === ApiMode.test) === this.testMode) {
121
120
  this.#verifiedCustomerIds.add(customerId);
122
121
  return customerId;
123
122
  }
124
123
  } catch (e) {
125
- console.error('Error getting customer', e)
124
+ console.error('Error getting customer', e);
126
125
  // Customer is not valid anymore, we need to create a new one
127
126
  }
128
127
  }
@@ -140,93 +139,93 @@ export class MollieService {
140
139
  organizationId: payingOrganization.id,
141
140
  userId: user?.id,
142
141
  },
143
- testmode: this.testMode
144
- })
142
+ testmode: this.testMode,
143
+ });
145
144
 
146
- const customerId = mollieCustomer.id
145
+ const customerId = mollieCustomer.id;
147
146
  this.#verifiedCustomerIds.add(customerId);
148
147
 
149
- payingOrganization.serverMeta.mollieCustomerId = mollieCustomer.id
150
- console.log('Saving new mollie customer', mollieCustomer, 'for organization', payingOrganization.id)
151
- await payingOrganization.save()
152
-
153
- return customerId
148
+ payingOrganization.serverMeta.mollieCustomerId = mollieCustomer.id;
149
+ console.log('Saving new mollie customer', mollieCustomer, 'for organization', payingOrganization.id);
150
+ await payingOrganization.save();
151
+
152
+ return customerId;
154
153
  }
155
154
 
156
- #cachedMandates: Map<string, PaymentMandate[]> = new Map()
155
+ #cachedMandates: Map<string, PaymentMandate[]> = new Map();
157
156
 
158
- async getMandates({ payingOrganization, user }: {
159
- payingOrganization: Organization | null,
160
- user: User | null,
157
+ async getMandates({ payingOrganization, user }: {
158
+ payingOrganization: Organization | null;
159
+ user: User | null;
161
160
  }): Promise<PaymentMandate[]> {
162
- const customerId = await this.getCustomerId({payingOrganization, user});
161
+ const customerId = await this.getCustomerId({ payingOrganization, user });
163
162
  if (!customerId) {
164
163
  return [];
165
164
  }
166
165
 
167
166
  const cached = this.#cachedMandates.get(customerId);
168
167
  if (cached) {
169
- //return cached;
168
+ // return cached;
170
169
  }
171
170
 
172
171
  // Poll mollie status
173
172
  // Mollie payment is required
174
- const mandates: PaymentMandate[] = []
173
+ const mandates: PaymentMandate[] = [];
175
174
 
176
175
  try {
177
- const m = await this.client.customerMandates.page({
178
- customerId,
176
+ const m = await this.client.customerMandates.page({
177
+ customerId,
179
178
  limit: 250,
180
- testmode: this.testMode
181
- })
179
+ testmode: this.testMode,
180
+ });
182
181
 
183
182
  for (const mandate of m) {
184
- const paymentMandate = MollieService.mollieManateToStamhoofd({mandate, payingOrganization, user});
183
+ const paymentMandate = MollieService.mollieManateToStamhoofd({ mandate, payingOrganization, user });
185
184
  if (paymentMandate) {
186
- mandates.push(paymentMandate)
185
+ mandates.push(paymentMandate);
187
186
  }
188
187
  }
189
188
  } catch (e) {
190
- console.error(e)
189
+ console.error(e);
191
190
  }
192
191
 
193
192
  // todo: remove duplicate mandates?
194
193
  return mandates;
195
194
  }
196
195
 
197
- async deleteMandate({ mandateId, payingOrganization, user }: {
198
- mandateId: string,
199
- payingOrganization: Organization | null,
200
- user: User | null,
196
+ async deleteMandate({ mandateId, payingOrganization, user }: {
197
+ mandateId: string;
198
+ payingOrganization: Organization | null;
199
+ user: User | null;
201
200
  }) {
202
- const customerId = await this.getCustomerId({payingOrganization, user});
201
+ const customerId = await this.getCustomerId({ payingOrganization, user });
203
202
  if (!customerId) {
204
- return
203
+ return;
205
204
  }
206
205
 
207
206
  await this.client.customerMandates.revoke(
208
207
  mandateId,
209
208
  {
210
209
  customerId,
211
- testmode: this.testMode
212
- }
213
- )
210
+ testmode: this.testMode,
211
+ },
212
+ );
214
213
  }
215
214
 
216
- private static mollieManateToStamhoofd({ mandate, payingOrganization, user }: {
217
- mandate: Mandate,
218
- payingOrganization: Organization | null,
219
- user: User | null,
215
+ private static mollieManateToStamhoofd({ mandate, payingOrganization, user }: {
216
+ mandate: Mandate;
217
+ payingOrganization: Organization | null;
218
+ user: User | null;
220
219
  }): PaymentMandate | null {
221
220
  let type: PaymentMandateType;
222
221
  switch (mandate.method) {
223
222
  case MandateMethod.creditcard: {
224
- type = PaymentMandateType.CreditCard
223
+ type = PaymentMandateType.CreditCard;
225
224
  break;
226
225
  }
227
226
 
228
227
  case MandateMethod.directdebit: {
229
- type = PaymentMandateType.DirectDebit
228
+ type = PaymentMandateType.DirectDebit;
230
229
  break;
231
230
  }
232
231
 
@@ -254,22 +253,22 @@ export class MollieService {
254
253
  cardNumber: 'cardNumber' in details ? details.cardNumber : null,
255
254
  iban: 'consumerAccount' in details ? details.consumerAccount : null,
256
255
  bic: ('consumerBic' in details ? details.consumerBic : undefined),
257
- expiryDate: ('cardExpiryDate' in details ? DateTime.fromISO(details.cardExpiryDate, {zone: Formatter.timezone}).toJSDate() : null), // todo: parse date correctly in Brussels timezone!
256
+ expiryDate: ('cardExpiryDate' in details ? DateTime.fromISO(details.cardExpiryDate, { zone: Formatter.timezone }).toJSDate() : null), // todo: parse date correctly in Brussels timezone!
258
257
  brand: ('cardLabel' in details ? details.cardLabel : null),
259
- })
260
- })
258
+ }),
259
+ });
261
260
  }
262
261
 
263
262
  private static mollieMandateStatusToStamhoofd(mandate: Mandate): PaymentMandateStatus {
264
263
  switch (mandate.status) {
265
264
  case MandateStatus.valid: {
266
- return PaymentMandateStatus.Valid
265
+ return PaymentMandateStatus.Valid;
267
266
  }
268
267
  case MandateStatus.invalid: {
269
- return PaymentMandateStatus.Invalid
268
+ return PaymentMandateStatus.Invalid;
270
269
  }
271
270
  case MandateStatus.pending: {
272
- return PaymentMandateStatus.Pending
271
+ return PaymentMandateStatus.Pending;
273
272
  }
274
273
  }
275
274
  }
@@ -277,15 +276,15 @@ export class MollieService {
277
276
  private static paymentMethodToMollie(method: PaymentMethod) {
278
277
  switch (method) {
279
278
  case PaymentMethod.Bancontact:
280
- return molliePaymentMethod.bancontact
279
+ return molliePaymentMethod.bancontact;
281
280
  case PaymentMethod.CreditCard:
282
- return molliePaymentMethod.creditcard
281
+ return molliePaymentMethod.creditcard;
283
282
  case PaymentMethod.DirectDebit:
284
- return molliePaymentMethod.directdebit
283
+ return molliePaymentMethod.directdebit;
285
284
  case PaymentMethod.iDEAL:
286
- return molliePaymentMethod.ideal
285
+ return molliePaymentMethod.ideal;
287
286
  case PaymentMethod.Transfer:
288
- return molliePaymentMethod.banktransfer
287
+ return molliePaymentMethod.banktransfer;
289
288
  }
290
289
 
291
290
  return null;
@@ -294,15 +293,14 @@ export class MollieService {
294
293
  async getProfiles(): Promise<MollieProfile[]> {
295
294
  try {
296
295
  const response = await this.client.profiles.page({
297
- limit: 250
298
- })
296
+ limit: 250,
297
+ });
299
298
  return response.map(p => MollieProfile.create({
300
299
  ...p,
301
300
  mode: p.mode === ApiMode.live ? MollieProfileMode.Live : MollieProfileMode.Test,
302
- status: p.status === ProfileStatus.unverified ? MollieProfileStatus.Unverified : (p.status === ProfileStatus.blocked ? MollieProfileStatus.Blocked : MollieProfileStatus.Verified)
301
+ status: p.status === ProfileStatus.unverified ? MollieProfileStatus.Unverified : (p.status === ProfileStatus.blocked ? MollieProfileStatus.Blocked : MollieProfileStatus.Verified),
303
302
  }));
304
- }
305
- catch (e) {
303
+ } catch (e) {
306
304
  console.error('Failed to parse mollie profiles', e);
307
305
  return [];
308
306
  }
@@ -316,8 +314,7 @@ export class MollieService {
316
314
  canReceiveSettlements: !!response.canReceiveSettlements,
317
315
  status: response.status === OnboardingStatus.needsData ? MollieStatus.NeedsData : (response.status === OnboardingStatus.inReview ? MollieStatus.InReview : (MollieStatus.Completed)),
318
316
  });
319
- }
320
- catch (e) {
317
+ } catch (e) {
321
318
  console.error('Error when requesting Mollie onboarding status:');
322
319
  console.error(e);
323
320
  return null;
@@ -326,13 +323,13 @@ export class MollieService {
326
323
 
327
324
  async getProfileId(website?: string): Promise<string | undefined> {
328
325
  if (this.sellingOrganization.privateMeta.mollieProfile?.id) {
329
- return this.sellingOrganization.privateMeta.mollieProfile.id
326
+ return this.sellingOrganization.privateMeta.mollieProfile.id;
330
327
  }
331
328
 
332
329
  try {
333
330
  const profiles = await this.client.profiles.page({
334
331
  limit: 250,
335
- })
332
+ });
336
333
 
337
334
  // Search profile with Stamhoofd as name
338
335
  if (website) {
@@ -351,8 +348,7 @@ export class MollieService {
351
348
  }
352
349
 
353
350
  return profiles[0]?.id ?? undefined;
354
- }
355
- catch (e) {
351
+ } catch (e) {
356
352
  console.error('Error when requesting Mollie profile id:');
357
353
  console.error(e);
358
354
  return undefined;
@@ -369,7 +365,7 @@ export class MollieService {
369
365
  }
370
366
 
371
367
  static async createPayment(
372
- { sellingOrganization, payment, mandate, redirectUrl, webhookUrl, cancelUrl, description, metadata, payingOrganization, user, customer}: {
368
+ { sellingOrganization, payment, mandate, redirectUrl, webhookUrl, cancelUrl, description, metadata, payingOrganization, user, customer }: {
373
369
  payment: Payment;
374
370
  mandate: PaymentMandate | null;
375
371
  redirectUrl: string;
@@ -377,14 +373,14 @@ export class MollieService {
377
373
  webhookUrl: string;
378
374
  description: string;
379
375
  metadata: { [key: string]: string | undefined };
380
- sellingOrganization: Organization,
381
- payingOrganization: Organization | null,
382
- user: User | null,
383
- customer: PaymentCustomer,
376
+ sellingOrganization: Organization;
377
+ payingOrganization: Organization | null;
378
+ user: User | null;
379
+ customer: PaymentCustomer;
384
380
  },
385
381
  ): Promise<{ paymentUrl: string | null }> {
386
- const mollieService = await MollieService.create({sellingOrganization});
387
- const profileId = await mollieService?.getProfileId();
382
+ const mollieService = await MollieService.create({ sellingOrganization });
383
+ const profileId = await mollieService?.getProfileId();
388
384
  const method = MollieService.paymentMethodToMollie(payment.method);
389
385
 
390
386
  if (!mollieService || !profileId || !method) {
@@ -398,8 +394,7 @@ export class MollieService {
398
394
  payingOrganization: payingOrganization ?? null,
399
395
  user,
400
396
  customer,
401
- }) ?? undefined
402
-
397
+ }) ?? undefined;
403
398
 
404
399
  const data: Parameters<typeof mollieService.client.payments.create>[0] = {
405
400
  amount: {
@@ -418,13 +413,13 @@ export class MollieService {
418
413
  webhookUrl,
419
414
  metadata: {
420
415
  paymentId: payment.id,
421
- ...metadata
416
+ ...metadata,
422
417
  },
423
418
  locale: mollieService.locale,
424
419
  };
425
- console.log('Creating payment', data)
420
+ console.log('Creating payment', data);
426
421
  const molliePayment = await mollieService.client.payments.create(data);
427
- console.log('Payment response', molliePayment)
422
+ console.log('Payment response', molliePayment);
428
423
 
429
424
  const paymentUrl = molliePayment.getCheckoutUrl();
430
425
 
@@ -434,12 +429,12 @@ export class MollieService {
434
429
  dbPayment.mollieId = molliePayment.id;
435
430
  await dbPayment.save();
436
431
 
437
- const {status} = await mollieService.getStatusFor(molliePayment, payment, false)
432
+ const { status } = await mollieService.getStatusFor(molliePayment, payment, false);
438
433
  payment.status = status;
439
-
434
+
440
435
  return {
441
436
  paymentUrl: paymentUrl,
442
- }
437
+ };
443
438
  }
444
439
 
445
440
  static async saveChargeInfo(mollieData: MolliePaymentType, payment: Payment) {
@@ -459,34 +454,33 @@ export class MollieService {
459
454
  payment.iban = '•••• ' + details.cardNumber;
460
455
  }
461
456
 
462
- payment.mandateId = mollieData.mandateId ?? null
457
+ payment.mandateId = mollieData.mandateId ?? null;
463
458
  await payment.save();
464
459
  }
465
- }
466
- catch (e) {
460
+ } catch (e) {
467
461
  console.error('Failed processing charge', e);
468
462
  }
469
463
  }
470
464
 
471
- async getStatusFor(mollieData: MolliePaymentType, payment: Payment, cancel = false): Promise<{status: PaymentStatus}> {
472
- await MollieService.saveChargeInfo(mollieData, payment)
465
+ async getStatusFor(mollieData: MolliePaymentType, payment: Payment, cancel = false): Promise<{ status: PaymentStatus }> {
466
+ await MollieService.saveChargeInfo(mollieData, payment);
473
467
 
474
468
  if (mollieData.status === molliePaymentStatus.paid) {
475
469
  return {
476
- status: PaymentStatus.Succeeded,
477
- }
470
+ status: PaymentStatus.Succeeded,
471
+ };
478
472
  } else if (mollieData.status === molliePaymentStatus.failed) {
479
473
  return {
480
- status: PaymentStatus.Failed,
481
- }
474
+ status: PaymentStatus.Failed,
475
+ };
482
476
  } else if (mollieData.status === molliePaymentStatus.expired) {
483
477
  return {
484
- status: PaymentStatus.Failed,
485
- }
478
+ status: PaymentStatus.Failed,
479
+ };
486
480
  } else if (mollieData.status === molliePaymentStatus.canceled) {
487
481
  return {
488
- status: PaymentStatus.Failed,
489
- }
482
+ status: PaymentStatus.Failed,
483
+ };
490
484
  }
491
485
 
492
486
  // Pending payments should be cancellable
@@ -496,42 +490,41 @@ export class MollieService {
496
490
  // Try to cancel
497
491
  try {
498
492
  const newData = await this.client.payments.cancel(mollieData.id, {
499
- testmode: this.testMode
493
+ testmode: this.testMode,
500
494
  });
501
495
  console.log('Cancelled Mollie Payment ' + payment.id);
502
- return await this.getStatusFor(newData, payment, false)
496
+ return await this.getStatusFor(newData, payment, false);
503
497
  } catch (e) {
504
- console.error('Failed to cancel Mollie Payment ' + payment.id, {cause: e})
498
+ console.error('Failed to cancel Mollie Payment ' + payment.id, { cause: e });
505
499
  }
506
-
507
500
  } else if (cancel) {
508
- console.log('Cannot cancel Mollie Payment ' + payment.id);
501
+ console.log('Cannot cancel Mollie Payment ' + payment.id);
509
502
  }
510
503
 
511
- if (mollieData.status === molliePaymentStatus.open ) {
504
+ if (mollieData.status === molliePaymentStatus.open) {
512
505
  // Nothink happend yet
513
506
  return {
514
- status: PaymentStatus.Created,
515
- }
507
+ status: PaymentStatus.Created,
508
+ };
516
509
  }
517
510
 
518
511
  return {
519
- status: PaymentStatus.Pending,
520
- }
512
+ status: PaymentStatus.Pending,
513
+ };
521
514
  }
522
515
 
523
516
  async getStatus(payment: Payment, cancel = false) {
524
517
  const molliePayment = await MolliePayment.select().where('paymentId', payment.id).first(false);
525
518
  if (!molliePayment) {
526
- throw new Error('Mollie Payment not found for payment ' + payment.id)
519
+ throw new Error('Mollie Payment not found for payment ' + payment.id);
527
520
  }
528
521
 
529
522
  const mollieData = await this.client.payments.get(molliePayment.mollieId, {
530
- testmode: this.testMode
523
+ testmode: this.testMode,
531
524
  });
532
525
 
533
- console.log(mollieData)
526
+ console.log(mollieData);
534
527
 
535
- return this.getStatusFor(mollieData, payment, cancel)
528
+ return this.getStatusFor(mollieData, payment, cancel);
536
529
  }
537
530
  }