@stamhoofd/backend 2.118.1 → 2.120.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 (362) hide show
  1. package/package.json +32 -22
  2. package/src/audit-logs/ModelLogger.ts +4 -2
  3. package/src/audit-logs/OrderLogger.ts +1 -1
  4. package/src/boot.ts +32 -14
  5. package/src/crons/balance-emails.ts +4 -2
  6. package/src/crons/clearExcelCache.test.ts +8 -8
  7. package/src/crons/update-cached-balances.ts +40 -14
  8. package/src/debug.ts +3 -2
  9. package/src/decoders/StringArrayDecoder.ts +1 -1
  10. package/src/decoders/StringNullableDecoder.ts +1 -1
  11. package/src/email-recipient-loaders/documents.ts +2 -1
  12. package/src/email-recipient-loaders/members.ts +2 -1
  13. package/src/email-recipient-loaders/orders.ts +2 -1
  14. package/src/email-recipient-loaders/payments.ts +6 -3
  15. package/src/email-recipient-loaders/receivable-balances.ts +2 -1
  16. package/src/email-recipient-loaders/registrations.ts +2 -1
  17. package/src/email-replacements/getEmailReplacementsForPayment.ts +8 -7
  18. package/src/endpoints/admin/members/ChargeMembersEndpoint.ts +7 -6
  19. package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +3 -2
  20. package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +2 -1
  21. package/src/endpoints/admin/organizations/ChargeOrganizationsEndpoint.ts +4 -3
  22. package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +3 -2
  23. package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +7 -5
  24. package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +12 -10
  25. package/src/endpoints/admin/registrations/ChargeRegistrationsEndpoint.ts +4 -3
  26. package/src/endpoints/auth/CreateAdminEndpoint.ts +8 -6
  27. package/src/endpoints/auth/CreateTokenEndpoint.ts +14 -12
  28. package/src/endpoints/auth/DeleteTokenEndpoint.ts +2 -1
  29. package/src/endpoints/auth/DeleteUserEndpoint.ts +2 -1
  30. package/src/endpoints/auth/ForgotPasswordEndpoint.ts +5 -4
  31. package/src/endpoints/auth/GetOtherUserEndpoint.ts +3 -2
  32. package/src/endpoints/auth/GetUserEndpoint.ts +3 -2
  33. package/src/endpoints/auth/OpenIDConnectAuthTokenEndpoint.ts +2 -1
  34. package/src/endpoints/auth/OpenIDConnectCallbackEndpoint.ts +4 -2
  35. package/src/endpoints/auth/OpenIDConnectStartEndpoint.ts +3 -2
  36. package/src/endpoints/auth/PatchUserEndpoint.ts +15 -12
  37. package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +3 -2
  38. package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +3 -2
  39. package/src/endpoints/auth/SignupEndpoint.ts +5 -4
  40. package/src/endpoints/auth/VerifyEmailEndpoint.ts +6 -5
  41. package/src/endpoints/frontend/FrontendEnvironmentEndpoint.ts +3 -2
  42. package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +8 -5
  43. package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +5 -3
  44. package/src/endpoints/global/audit-logs/GetAuditLogsEndpoint.ts +8 -5
  45. package/src/endpoints/global/billing/ActivatePackagesEndpoint.ts +9 -7
  46. package/src/endpoints/global/billing/DeactivatePackageEndpoint.ts +4 -3
  47. package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +4 -2
  48. package/src/endpoints/global/email/CreateEmailEndpoint.ts +9 -7
  49. package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +2 -1
  50. package/src/endpoints/global/email/GetAdminEmailsEndpoint.ts +22 -19
  51. package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +6 -4
  52. package/src/endpoints/global/email/GetEmailEndpoint.ts +4 -3
  53. package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +3 -2
  54. package/src/endpoints/global/email/GetUserEmailsEndpoint.ts +7 -4
  55. package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +7 -5
  56. package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +11 -11
  57. package/src/endpoints/global/email/PatchEmailEndpoint.ts +14 -11
  58. package/src/endpoints/global/email-recipients/GetEmailRecipientsCountEndpoint.ts +3 -2
  59. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +2 -1
  60. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.ts +8 -5
  61. package/src/endpoints/global/email-recipients/RetryEmailRecipientEndpoint.ts +7 -5
  62. package/src/endpoints/global/email-recipients/helpers/validateEmailRecipientFilter.ts +4 -3
  63. package/src/endpoints/global/events/GetEventNotificationsCountEndpoint.ts +3 -2
  64. package/src/endpoints/global/events/GetEventNotificationsEndpoint.ts +9 -6
  65. package/src/endpoints/global/events/GetEventsEndpoint.ts +7 -4
  66. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +4 -2
  67. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.ts +17 -15
  68. package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +4 -2
  69. package/src/endpoints/global/events/PatchEventsEndpoint.ts +28 -26
  70. package/src/endpoints/global/files/ExportToExcelEndpoint.ts +8 -5
  71. package/src/endpoints/global/files/GetFileCache.ts +5 -3
  72. package/src/endpoints/global/files/UploadFile.ts +10 -4
  73. package/src/endpoints/global/files/UploadImage.ts +4 -2
  74. package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +4 -2
  75. package/src/endpoints/global/groups/GetGroupsEndpoint.ts +8 -5
  76. package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +7 -5
  77. package/src/endpoints/global/members/GetMembersCountEndpoint.ts +3 -2
  78. package/src/endpoints/global/members/GetMembersEndpoint.test.ts +4 -2
  79. package/src/endpoints/global/members/GetMembersEndpoint.ts +10 -8
  80. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +257 -6
  81. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +162 -107
  82. package/src/endpoints/global/members/helpers/validateGroupFilter.ts +4 -3
  83. package/src/endpoints/global/members/shouldCheckIfMemberIsDuplicate.ts +3 -2
  84. package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +3 -2
  85. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.test.ts +3 -2
  86. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +8 -7
  87. package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +5 -3
  88. package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +5 -3
  89. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +8 -5
  90. package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +4 -2
  91. package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +2 -1
  92. package/src/endpoints/global/platform/GetPlatformEndpoint.ts +3 -2
  93. package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +3 -2
  94. package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +7 -4
  95. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsCountEndpoint.ts +47 -0
  96. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +206 -0
  97. package/src/endpoints/global/registration/GetRegistrationsCountEndpoint.ts +3 -2
  98. package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +2 -1
  99. package/src/endpoints/global/registration/GetRegistrationsEndpoint.ts +10 -7
  100. package/src/endpoints/global/registration/GetUserDetailedPayableBalanceEndpoint.ts +4 -2
  101. package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +4 -2
  102. package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +3 -2
  103. package/src/endpoints/global/registration/GetUserPayableBalanceEndpoint.ts +2 -1
  104. package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +5 -3
  105. package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +13 -9
  106. package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +50 -49
  107. package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +25 -22
  108. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +8 -5
  109. package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +9 -7
  110. package/src/endpoints/global/sso/GetSSOEndpoint.ts +4 -2
  111. package/src/endpoints/global/sso/SetSSOEndpoint.ts +3 -2
  112. package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +4 -2
  113. package/src/endpoints/global/webshops/GetWebshopsCountEndpoint.ts +43 -0
  114. package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +808 -0
  115. package/src/endpoints/global/webshops/GetWebshopsEndpoint.ts +221 -0
  116. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemEndpoint.ts +4 -3
  117. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsCountEndpoint.ts +3 -2
  118. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.ts +6 -4
  119. package/src/endpoints/organization/dashboard/balance-items/PatchBalanceItemsEndpoint.ts +15 -13
  120. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceEndpoint.ts +4 -2
  121. package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableBalanceEndpoint.ts +4 -2
  122. package/src/endpoints/organization/dashboard/billing/GetPackagesEndpoint.ts +2 -1
  123. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +3 -2
  124. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesCountEndpoint.ts +3 -2
  125. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +7 -4
  126. package/src/endpoints/organization/dashboard/documents/GetDocumentsCountEndpoint.ts +3 -2
  127. package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +7 -4
  128. package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +9 -7
  129. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +4 -2
  130. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.ts +7 -5
  131. package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +3 -2
  132. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +36 -1
  133. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +13 -4
  134. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +4 -2
  135. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +7 -5
  136. package/src/endpoints/organization/dashboard/invoices/GetInvoicesCountEndpoint.ts +3 -2
  137. package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.ts +6 -4
  138. package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +5 -3
  139. package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +4 -2
  140. package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +6 -3
  141. package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +4 -2
  142. package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +2 -1
  143. package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +2 -1
  144. package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +4 -2
  145. package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +3 -2
  146. package/src/endpoints/organization/dashboard/organization/GetUitpasClientIdEndpoint.ts +2 -1
  147. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +5 -3
  148. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +22 -19
  149. package/src/endpoints/organization/dashboard/organization/SearchUitpasOrganizersEndpoint.ts +5 -3
  150. package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +11 -9
  151. package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +8 -7
  152. package/src/endpoints/organization/dashboard/payments/GetMemberBalanceEndpoint.ts +2 -1
  153. package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +3 -2
  154. package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +7 -5
  155. package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +18 -16
  156. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.ts +2 -1
  157. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesCountEndpoint.ts +3 -2
  158. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesEndpoint.ts +5 -3
  159. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +2 -1
  160. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +8 -5
  161. package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +4 -2
  162. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +4 -2
  163. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +32 -29
  164. package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +6 -3
  165. package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +3 -2
  166. package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +3 -2
  167. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +5 -3
  168. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +2 -1
  169. package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +5 -3
  170. package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +3 -2
  171. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +4 -3
  172. package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +4 -3
  173. package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +3 -2
  174. package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +2 -1
  175. package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.ts +6 -4
  176. package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +7 -6
  177. package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +3 -2
  178. package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +4 -2
  179. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersCountEndpoint.ts +3 -2
  180. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +7 -4
  181. package/src/endpoints/organization/dashboard/webshops/{GetWebshopTicketsCountEndpoint → GetWebshopTicketsCountEndpoint.ts} +7 -7
  182. package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +9 -6
  183. package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +4 -2
  184. package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +6 -4
  185. package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +13 -12
  186. package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +4 -2
  187. package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +5 -3
  188. package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +6 -4
  189. package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +2 -1
  190. package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +6 -4
  191. package/src/endpoints/organization/shared/GetDocumentHtml.ts +4 -3
  192. package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +4 -3
  193. package/src/endpoints/organization/shared/GetUitpasNumberDetailsEndpoint.ts +3 -2
  194. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +3 -2
  195. package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +4 -3
  196. package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +5 -4
  197. package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +4 -3
  198. package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +7 -5
  199. package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +4 -3
  200. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +7 -3
  201. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +11 -10
  202. package/src/endpoints/organization/webshops/RetrieveUitpasSocialTariffPriceEndpoint.ts +5 -4
  203. package/src/endpoints/system/HealthEndpoint.test.ts +44 -0
  204. package/src/endpoints/system/HealthEndpoint.ts +14 -6
  205. package/src/excel-loaders/balance-items.ts +19 -17
  206. package/src/excel-loaders/event-notifications.ts +15 -13
  207. package/src/excel-loaders/index.ts +1 -0
  208. package/src/excel-loaders/members.ts +45 -43
  209. package/src/excel-loaders/organizations.ts +26 -25
  210. package/src/excel-loaders/payments.ts +44 -42
  211. package/src/excel-loaders/platform-memberships.ts +202 -0
  212. package/src/excel-loaders/receivable-balances.ts +25 -23
  213. package/src/excel-loaders/registrations.ts +30 -28
  214. package/src/helpers/AddressValidator.test.ts +2 -1
  215. package/src/helpers/AddressValidator.ts +13 -10
  216. package/src/helpers/AdminPermissionChecker.ts +193 -95
  217. package/src/helpers/AuthenticatedStructures.ts +13 -11
  218. package/src/helpers/BuckarooHelper.ts +3 -2
  219. package/src/helpers/Context.ts +8 -6
  220. package/src/helpers/CookieHelper.ts +2 -2
  221. package/src/helpers/FileCache.ts +9 -9
  222. package/src/helpers/ForwardHandler.ts +3 -2
  223. package/src/helpers/GlobalHelper.ts +2 -0
  224. package/src/helpers/GroupBuilder.ts +2 -1
  225. package/src/helpers/GroupedThrottledQueue.test.ts +19 -19
  226. package/src/helpers/LimitedFilteredRequestHelper.ts +1 -1
  227. package/src/helpers/MemberCharger.ts +2 -1
  228. package/src/helpers/MemberUserSyncer.ts +6 -3
  229. package/src/helpers/MembershipCharger.ts +2 -2
  230. package/src/helpers/OrganizationCharger.ts +2 -1
  231. package/src/helpers/PeriodHelper.ts +2 -1
  232. package/src/helpers/SQLTranslatedString.ts +3 -2
  233. package/src/helpers/ServiceFeeHelper.ts +1 -1
  234. package/src/helpers/SetupStepUpdater.ts +6 -5
  235. package/src/helpers/StripeHelper.ts +9 -8
  236. package/src/helpers/TagHelper.test.ts +5 -5
  237. package/src/helpers/TagHelper.ts +2 -1
  238. package/src/helpers/TemporaryMemberAccess.ts +2 -1
  239. package/src/helpers/ThrottledQueue.test.ts +20 -20
  240. package/src/helpers/UitpasTokenRepository.ts +7 -7
  241. package/src/helpers/ViesHelper.ts +5 -4
  242. package/src/helpers/XlsxTransformerColumnHelper.ts +21 -19
  243. package/src/helpers/email-html-helpers.ts +13 -12
  244. package/src/helpers/fetchToAsyncIterator.ts +1 -1
  245. package/src/helpers/outstandingBalanceJoin.ts +2 -1
  246. package/src/helpers/updateMemberDetailsUitpasNumber.ts +5 -4
  247. package/src/middleware/ContextMiddleware.ts +1 -1
  248. package/src/migrate.ts +21 -4
  249. package/src/seeds/0000000003-default-email-templates.ts +1 -1
  250. package/src/seeds/0000000004-single-organization.ts +2 -1
  251. package/src/seeds/1752848561-groups-registration-periods.ts +3 -2
  252. package/src/seeds/1754560914-groups-prices.test.ts +2 -1
  253. package/src/seeds/1754560914-groups-prices.ts +2 -1
  254. package/src/seeds/1755790070-fill-email-recipient-errors.ts +6 -6
  255. package/src/seeds/1755876819-remove-duplicate-members.ts +2 -1
  256. package/src/seeds/1765896674-document-update-year.test.ts +2 -1
  257. package/src/seeds/1773754928-force-save-members.ts +15 -0
  258. package/src/services/AuditLogService.ts +3 -2
  259. package/src/services/BalanceItemPaymentService.ts +2 -2
  260. package/src/services/BalanceItemService.ts +2 -1
  261. package/src/services/BootChecksService.test.ts +33 -0
  262. package/src/services/BootChecksService.ts +21 -0
  263. package/src/services/DatabaseCollationService.test.ts +18 -0
  264. package/src/services/DatabaseCollationService.ts +81 -0
  265. package/src/services/DocumentService.ts +1 -1
  266. package/src/services/EventNotificationService.ts +5 -4
  267. package/src/services/FileSignService.ts +2 -2
  268. package/src/services/InvoiceService.ts +3 -3
  269. package/src/services/MemberNumberService.ts +6 -4
  270. package/src/services/MemberRecordStore.ts +28 -19
  271. package/src/services/PaymentReallocationService.test.ts +2 -1
  272. package/src/services/PaymentReallocationService.ts +2 -1
  273. package/src/services/PaymentService.ts +28 -26
  274. package/src/services/RegistrationService.ts +65 -3
  275. package/src/services/SSOService.ts +13 -9
  276. package/src/services/STPackageService.ts +7 -5
  277. package/src/services/StartupHealthService.ts +15 -0
  278. package/src/services/uitpas/PassholderEndpoints.ts +2 -2
  279. package/src/services/uitpas/UitpasService.ts +11 -8
  280. package/src/services/uitpas/cancelTicketSales.ts +1 -1
  281. package/src/services/uitpas/checkPermissionsFor.ts +9 -9
  282. package/src/services/uitpas/getSocialTariffForEvent.ts +4 -4
  283. package/src/services/uitpas/getSocialTariffForUitpasNumbers.ts +5 -5
  284. package/src/services/uitpas/handleUitpasResponse.ts +1 -1
  285. package/src/services/uitpas/registerTicketSales.ts +4 -4
  286. package/src/services/uitpas/searchUitpasEvents.ts +3 -3
  287. package/src/services/uitpas/searchUitpasOrganizers.ts +3 -3
  288. package/src/sql-filters/audit-logs.ts +2 -1
  289. package/src/sql-filters/balance-item-payments.ts +2 -1
  290. package/src/sql-filters/balance-items.ts +2 -1
  291. package/src/sql-filters/base-registration-filter-compilers.ts +6 -4
  292. package/src/sql-filters/document-templates.ts +2 -1
  293. package/src/sql-filters/documents.ts +2 -1
  294. package/src/sql-filters/email-recipients.ts +2 -1
  295. package/src/sql-filters/emails.ts +2 -1
  296. package/src/sql-filters/event-notifications.ts +2 -1
  297. package/src/sql-filters/events.ts +2 -1
  298. package/src/sql-filters/groups.ts +2 -1
  299. package/src/sql-filters/invoiced-balance-items.ts +2 -1
  300. package/src/sql-filters/invoices.ts +2 -1
  301. package/src/sql-filters/member-responsibility-records.ts +2 -1
  302. package/src/sql-filters/members.ts +8 -7
  303. package/src/sql-filters/orders.ts +3 -2
  304. package/src/sql-filters/organization-registration-periods.ts +2 -1
  305. package/src/sql-filters/organizations.ts +2 -1
  306. package/src/sql-filters/payments.ts +2 -1
  307. package/src/sql-filters/platform-memberships.ts +67 -0
  308. package/src/sql-filters/receivable-balances.ts +2 -1
  309. package/src/sql-filters/registration-periods.ts +2 -1
  310. package/src/sql-filters/registrations.ts +2 -1
  311. package/src/sql-filters/tickets.ts +2 -1
  312. package/src/sql-filters/users.ts +2 -1
  313. package/src/sql-filters/webshops.ts +38 -0
  314. package/src/sql-sorters/audit-logs.ts +3 -2
  315. package/src/sql-sorters/balance-items.ts +3 -2
  316. package/src/sql-sorters/document-templates.ts +3 -2
  317. package/src/sql-sorters/documents.ts +3 -2
  318. package/src/sql-sorters/email-recipients.ts +3 -2
  319. package/src/sql-sorters/emails.ts +3 -2
  320. package/src/sql-sorters/event-notifications.ts +3 -2
  321. package/src/sql-sorters/events.ts +3 -2
  322. package/src/sql-sorters/groups.ts +3 -2
  323. package/src/sql-sorters/invoices.ts +3 -2
  324. package/src/sql-sorters/members.ts +3 -2
  325. package/src/sql-sorters/orders.ts +3 -2
  326. package/src/sql-sorters/organization-registration-periods.ts +3 -2
  327. package/src/sql-sorters/organizations.ts +3 -2
  328. package/src/sql-sorters/payments.ts +3 -2
  329. package/src/sql-sorters/platform-memberships.ts +40 -0
  330. package/src/sql-sorters/receivable-balances.ts +3 -2
  331. package/src/sql-sorters/registration-periods.ts +3 -2
  332. package/src/sql-sorters/registrations.ts +3 -2
  333. package/src/sql-sorters/tickets.ts +3 -2
  334. package/src/sql-sorters/webshops.ts +40 -0
  335. package/tests/actions/patchOrganizationMember.ts +5 -4
  336. package/tests/actions/patchPaymentStatus.ts +2 -2
  337. package/tests/actions/patchUserMember.ts +6 -4
  338. package/tests/e2e/api-rate-limits.test.ts +4 -5
  339. package/tests/e2e/bundle-discounts.test.ts +3 -2
  340. package/tests/e2e/charge-members.test.ts +7 -5
  341. package/tests/e2e/documents.test.ts +3 -2
  342. package/tests/e2e/private-files.test.ts +11 -13
  343. package/tests/e2e/register.test.ts +6 -5
  344. package/tests/e2e/stock.test.ts +6 -8
  345. package/tests/e2e/tickets.test.ts +4 -2
  346. package/tests/helpers/StripeMocker.ts +3 -3
  347. package/tests/init/initAdmin.ts +4 -2
  348. package/tests/init/initBundleDiscount.ts +3 -2
  349. package/tests/init/initPayconiq.ts +1 -1
  350. package/tests/init/initPermissionRole.ts +4 -2
  351. package/tests/init/initPlatformRecordCategory.ts +1 -1
  352. package/tests/init/initStripe.ts +1 -1
  353. package/tests/vitest.global.setup.ts +26 -0
  354. package/tests/{jest.setup.ts → vitest.setup.ts} +4 -3
  355. package/tsconfig.build.json +17 -0
  356. package/tsconfig.json +10 -41
  357. package/tsconfig.test.json +17 -0
  358. package/vitest.config.js +13 -0
  359. package/eslint.config.mjs +0 -5
  360. package/jest.config.cjs +0 -27
  361. package/tests/jest.global.setup.ts +0 -33
  362. package/tests/toMatchMap.ts +0 -68
@@ -1,12 +1,16 @@
1
- import { DecodedRequest, Response } from '@simonbackx/simple-endpoints';
1
+ import type { DecodedRequest} from '@simonbackx/simple-endpoints';
2
+ import { Response } from '@simonbackx/simple-endpoints';
2
3
  import { isSimpleError, isSimpleErrors, SimpleError } from '@simonbackx/simple-errors';
3
- import { Organization, Platform, Token, User, Webshop } from '@stamhoofd/models';
4
- import { LoginMethod, LoginProviderType, OpenIDClientConfiguration, StartOpenIDFlowStruct, Token as TokenStruct } from '@stamhoofd/structures';
4
+ import type { Organization} from '@stamhoofd/models';
5
+ import { Platform, Token, User, Webshop } from '@stamhoofd/models';
6
+ import type { LoginMethod, StartOpenIDFlowStruct} from '@stamhoofd/structures';
7
+ import { LoginProviderType, OpenIDClientConfiguration, Token as TokenStruct } from '@stamhoofd/structures';
5
8
  import crypto from 'crypto';
6
9
  import { generators, Issuer } from 'openid-client';
7
10
  import { Context } from '../helpers/Context.js';
8
11
 
9
- import { CookieHelper, ObjectWithHeaders } from '../helpers/CookieHelper.js';
12
+ import type { ObjectWithHeaders } from '../helpers/CookieHelper.js';
13
+ import { CookieHelper } from '../helpers/CookieHelper.js';
10
14
 
11
15
  async function randomBytes(size: number): Promise<Buffer> {
12
16
  return new Promise((resolve, reject) => {
@@ -204,7 +208,7 @@ export class SSOService {
204
208
  throw new SimpleError({
205
209
  code: 'invalid_user',
206
210
  message: 'User not allowed to use this login method',
207
- human: $t(`6180b5ee-b9c1-401d-89c1-c18d8ab77d74`),
211
+ human: $t(`%Fz`),
208
212
  statusCode: 400,
209
213
  });
210
214
  }
@@ -463,7 +467,7 @@ export class SSOService {
463
467
  return response;
464
468
  }
465
469
  catch (e) {
466
- const message = (isSimpleError(e) || isSimpleErrors(e) ? e.getHuman() : $t(`bcfb1217-01fa-4116-b0bc-54c8c6dae284`));
470
+ const message = (isSimpleError(e) || isSimpleErrors(e) ? e.getHuman() : $t(`%G0`));
467
471
  console.error('Error in openID callback', e);
468
472
  return SSOServiceWithSession.getErrorRedirectResponse(session, message);
469
473
  }
@@ -574,7 +578,7 @@ export class SSOServiceWithSession {
574
578
  throw new SimpleError({
575
579
  code: 'invalid_user',
576
580
  message: 'User not found: please log in with the same email address as the user you are trying to link',
577
- human: $t(`3321ecb9-7600-498f-8ab9-b1625197804a`),
581
+ human: $t(`%G1`),
578
582
  statusCode: 404,
579
583
  });
580
584
  }
@@ -628,7 +632,7 @@ export class SSOServiceWithSession {
628
632
  throw new SimpleError({
629
633
  code: 'error',
630
634
  message: 'Could not generate token',
631
- human: $t(`f40ddd3d-a986-4ec1-9db8-32ec1376c4e8`),
635
+ human: $t(`%D6`),
632
636
  statusCode: 500,
633
637
  });
634
638
  }
@@ -648,7 +652,7 @@ export class SSOServiceWithSession {
648
652
  return response;
649
653
  }
650
654
  catch (e) {
651
- const message = (isSimpleError(e) || isSimpleErrors(e) ? e.getHuman() : $t(`bcfb1217-01fa-4116-b0bc-54c8c6dae284`));
655
+ const message = (isSimpleError(e) || isSimpleErrors(e) ? e.getHuman() : $t(`%G0`));
652
656
  console.error('Error in openID callback', e);
653
657
  return SSOServiceWithSession.getErrorRedirectResponse(session, message);
654
658
  }
@@ -1,7 +1,9 @@
1
1
  import { SimpleError } from '@simonbackx/simple-errors';
2
- import { BalanceItem, Organization, Platform, Registration, STPackage } from '@stamhoofd/models';
2
+ import { BalanceItem, Organization, Platform, STPackage } from '@stamhoofd/models';
3
3
  import { SQL } from '@stamhoofd/sql';
4
- import { BalanceItemRelation, BalanceItemRelationType, BalanceItemStatus, BalanceItemType, Country, PaymentCustomer, STPackageStatus, STPackageType, STPricingType, TranslatedString, VATExcemptReason } from '@stamhoofd/structures';
4
+ import type { PaymentCustomer, STPackageStatus, STPackageType } from '@stamhoofd/structures';
5
+ import { BalanceItemRelation, BalanceItemRelationType, BalanceItemStatus, BalanceItemType, STPricingType, TranslatedString, VATExcemptReason } from '@stamhoofd/structures';
6
+ import { Country } from '@stamhoofd/types/Country';
5
7
  import { Formatter } from '@stamhoofd/utility';
6
8
  import { GroupBuilder } from '../helpers/GroupBuilder.js';
7
9
 
@@ -27,7 +29,7 @@ export class STPackageService {
27
29
  let membersCount: number | null = null;
28
30
 
29
31
  if (membersCount === null && pack.meta.pricingType === STPricingType.PerMember) {
30
- membersCount = await Registration.getActiveMembers(pack.organizationId);
32
+ membersCount = await Organization.getActiveMembers(pack.organizationId);
31
33
  }
32
34
 
33
35
  if (pack.meta.pricingType === STPricingType.PerMember) {
@@ -149,8 +151,8 @@ export class STPackageService {
149
151
  item.type = BalanceItemType.STPackage;
150
152
  item.description = pack.meta.name + ' ' + (
151
153
  pack.validUntil
152
- ? $t('58b2c936-9025-4613-a9be-9d9bab212ea6', { startDate: Formatter.date(now, true), endDate: Formatter.date(pack.validUntil, true) })
153
- : $t('33b8f500-248a-4020-b775-4dd437ca0173', { startDate: Formatter.date(pack.meta.startDate, true) })
154
+ ? $t('%1LM', { startDate: Formatter.date(now, true), endDate: Formatter.date(pack.validUntil, true) })
155
+ : $t('%1LN', { startDate: Formatter.date(pack.meta.startDate, true) })
154
156
  );
155
157
  item.relations.set(BalanceItemRelationType.STPackage, BalanceItemRelation.create({
156
158
  id: pack.id,
@@ -0,0 +1,15 @@
1
+ export class StartupHealthService {
2
+ private static readonly errors = new Set<string>();
3
+
4
+ static markUnhealthy(error: string) {
5
+ this.errors.add(error);
6
+ }
7
+
8
+ static getErrors() {
9
+ return [...this.errors];
10
+ }
11
+
12
+ static clearForTesting() {
13
+ this.errors.clear();
14
+ }
15
+ }
@@ -67,7 +67,7 @@ export class PassholderEndpoints {
67
67
  throw new SimpleError({
68
68
  code: 'https://api.publiq.be/probs/uitpas/pass-not-found',
69
69
  message: 'Pass not found',
70
- human: $t('02f758f9-a1b1-428b-9575-69c4963c2419'),
70
+ human: $t('%1Iy'),
71
71
  statusCode: 404,
72
72
  });
73
73
  }
@@ -174,7 +174,7 @@ function assertValidGetPassResponse(json: unknown): asserts json is GetPassRespo
174
174
  throw new SimpleError({
175
175
  code: 'invalid_response_retrieving_pass_by_uitpas_number',
176
176
  message: `Invalid response when retrieving pass by UiTPAS number: ${error.message}`,
177
- human: $t(`4c6482ff-e6d9-4ea1-b11d-e12d697b4b7b`),
177
+ human: $t(`%1BQ`),
178
178
  });
179
179
  }
180
180
  }
@@ -2,7 +2,8 @@ import { Model } from '@simonbackx/simple-database';
2
2
  import { isSimpleError, SimpleError } from '@simonbackx/simple-errors';
3
3
  import { Order, WebshopUitpasNumber } from '@stamhoofd/models';
4
4
  import { QueueHandler } from '@stamhoofd/queues';
5
- import { Cart, OrderStatus, Product, ProductPrice, UitpasClientCredentialsStatus, UitpasOrganizersResponse } from '@stamhoofd/structures';
5
+ import type { Cart, Product, ProductPrice, UitpasClientCredentialsStatus, UitpasOrganizersResponse } from '@stamhoofd/structures';
6
+ import { OrderStatus } from '@stamhoofd/structures';
6
7
  import { Formatter } from '@stamhoofd/utility';
7
8
  import { v4 as uuidv4 } from 'uuid';
8
9
  import { UitpasTokenRepository } from '../../helpers/UitpasTokenRepository.js';
@@ -11,8 +12,10 @@ import { checkPermissionsFor } from './checkPermissionsFor.js';
11
12
  import { checkUitpasNumbers } from './checkUitpasNumbers.js';
12
13
  import { getSocialTariffForEvent } from './getSocialTariffForEvent.js';
13
14
  import { getSocialTariffForUitpasNumbers } from './getSocialTariffForUitpasNumbers.js';
14
- import { GetPassResponse, PassholderEndpoints } from './PassholderEndpoints.js';
15
- import { RegisterTicketSaleRequest, RegisterTicketSaleResponse, registerTicketSales } from './registerTicketSales.js';
15
+ import type { GetPassResponse} from './PassholderEndpoints.js';
16
+ import { PassholderEndpoints } from './PassholderEndpoints.js';
17
+ import type { RegisterTicketSaleRequest, RegisterTicketSaleResponse} from './registerTicketSales.js';
18
+ import { registerTicketSales } from './registerTicketSales.js';
16
19
  import { searchUitpasEvents } from './searchUitpasEvents.js';
17
20
  import { searchUitpasOrganizers } from './searchUitpasOrganizers.js';
18
21
 
@@ -79,7 +82,7 @@ function getUitpasTicketSales(order: Order): UitpasTicketSale[] {
79
82
  throw new SimpleError({
80
83
  code: 'missing_uitpas_base_product_price',
81
84
  message: `Missing UiTPAS base product price`,
82
- human: $t(`f7eea411-fb92-458f-bf3e-e36ed870591b`),
85
+ human: $t(`%1DP`),
83
86
  });
84
87
  }
85
88
  const label = makeBaseProductPriceLabel(item.product, baseProductPrice);
@@ -401,7 +404,7 @@ export class UitpasService {
401
404
  throw new SimpleError({
402
405
  code: 'uitpas_number_already_used',
403
406
  message: 'One or more uitpas numbers are already used',
404
- human: $t('f3daff19-a227-4e45-b19a-c770bd7a6687'),
407
+ human: $t('%1DM'),
405
408
  field: 'uitpasNumbers',
406
409
  });
407
410
  }
@@ -413,7 +416,7 @@ export class UitpasService {
413
416
  throw new SimpleError({
414
417
  code: 'missing_uitpas_base_product_price',
415
418
  message: `Missing UiTPAS base product price`,
416
- human: $t(`3d08a166-11a7-4429-8ff7-84458bbe3e9a`),
419
+ human: $t(`%1DP`),
417
420
  });
418
421
  }
419
422
 
@@ -423,7 +426,7 @@ export class UitpasService {
423
426
  throw new SimpleError({
424
427
  code: 'uitpas_social_tariff_price_mismatch',
425
428
  message: 'UiTPAS wrong number of prices returned',
426
- human: $t('83c472b8-4bc5-4282-bbc9-1c6a2d382171'),
429
+ human: $t('%1DN'),
427
430
  field: 'uitpasNumbers',
428
431
  });
429
432
  }
@@ -436,7 +439,7 @@ export class UitpasService {
436
439
  throw new SimpleError({
437
440
  code: 'uitpas_social_tariff_price_mismatch',
438
441
  message: 'UiTPAS social tariff have a different price',
439
- human: $t('9a0ad099-99e3-4341-beac-f14feb3fb9d1', { correctPrice: Formatter.price(verified[i].price), orderPrice: Formatter.price(item.uitpasNumbers[i].price) }),
442
+ human: $t('%1DO', { correctPrice: Formatter.price(verified[i].price), orderPrice: Formatter.price(item.uitpasNumbers[i].price) }),
440
443
  field: 'uitpasNumbers.' + i.toString(),
441
444
  });
442
445
  }
@@ -24,7 +24,7 @@ async function cancelTicketSale(access_token: string, ticketSaleId: string) {
24
24
  throw new SimpleError({
25
25
  code: 'unsuccessful_response_registering_ticket_sales',
26
26
  message: `Unsuccessful response when registering UiTPAS ticket sales`,
27
- human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
27
+ human: $t(`%18C`),
28
28
  });
29
29
  }
30
30
  return ticketSaleId;
@@ -16,7 +16,7 @@ function assertIsPermissionsResponse(json: unknown): asserts json is Permissions
16
16
  throw new SimpleError({
17
17
  code: 'invalid_permissions_response',
18
18
  message: 'Invalid response format for permissions',
19
- human: $t('7d3a6b57-f81a-4d58-bc2b-babb2261c40b'),
19
+ human: $t('%1BL'),
20
20
  });
21
21
  }
22
22
 
@@ -35,7 +35,7 @@ function assertIsPermissionsResponse(json: unknown): asserts json is Permissions
35
35
  throw new SimpleError({
36
36
  code: 'invalid_permissions_response',
37
37
  message: 'Invalid response format for permissions',
38
- human: $t('7d3a6b57-f81a-4d58-bc2b-babb2261c40b'),
38
+ human: $t('%1BL'),
39
39
  });
40
40
  }
41
41
  }
@@ -54,7 +54,7 @@ export async function checkPermissionsFor(access_token: string, organizationId:
54
54
  throw new SimpleError({
55
55
  code: 'uitpas_unreachable_checking_permissions',
56
56
  message: `Network issue when checking UiTPAS permissions`,
57
- human: $t(`542b793c-3edf-4505-b33d-199ea409bbda`),
57
+ human: $t(`%1BP`),
58
58
  });
59
59
  });
60
60
  if (!response.ok) {
@@ -62,7 +62,7 @@ export async function checkPermissionsFor(access_token: string, organizationId:
62
62
  throw new SimpleError({
63
63
  code: 'unsuccessful_response_checking_permissions',
64
64
  message: `Unsuccesful response when checking UiTPAS permissions`,
65
- human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
65
+ human: $t(`%18C`),
66
66
  });
67
67
  }
68
68
  const json = await response.json().catch(() => {
@@ -70,7 +70,7 @@ export async function checkPermissionsFor(access_token: string, organizationId:
70
70
  throw new SimpleError({
71
71
  code: 'invalid_json_checking_permissions',
72
72
  message: `Invalid json when checking UiTPAS permissions`,
73
- human: $t(`93004d03-955a-4a9a-937d-2f30841dc5cc`),
73
+ human: $t(`%18A`),
74
74
  });
75
75
  });
76
76
  assertIsPermissionsResponse(json);
@@ -91,18 +91,18 @@ export async function checkPermissionsFor(access_token: string, organizationId:
91
91
  }];
92
92
  const item = json.find(item => item.organizer.id === uitpasOrganizerId);
93
93
  if (!item) {
94
- const organizers = Formatter.joinLast(json.map(i => i.organizer.name), ', ', ' ' + $t('6d35156d-e452-4b0f-80f4-b1e9024d08ee') + ' ');
94
+ const organizers = Formatter.joinLast(json.map(i => i.organizer.name), ', ', ' ' + $t('%1BM') + ' ');
95
95
  return {
96
96
  status: UitpasClientCredentialsStatus.NoPermissions,
97
- human: $t('96c8a719-dba5-47ce-bb61-ee0754a5f776') + organizers,
97
+ human: $t('%1BN') + organizers,
98
98
  };
99
99
  }
100
100
  const missingPermissions = neededPermissions.filter(needed => !item.permissions.includes(needed.permission));
101
101
  if (missingPermissions.length > 0) {
102
- const missingPermissionsHuman = Formatter.joinLast(missingPermissions.map(p => p.human), ', ', ' ' + $t('6d35156d-e452-4b0f-80f4-b1e9024d08ee') + ' ');
102
+ const missingPermissionsHuman = Formatter.joinLast(missingPermissions.map(p => p.human), ', ', ' ' + $t('%1BM') + ' ');
103
103
  return {
104
104
  status: UitpasClientCredentialsStatus.MissingPermissions,
105
- human: $t('040fa935-5cbc-4a85-b578-354bf9d7fc04') + missingPermissionsHuman,
105
+ human: $t('%1BO') + missingPermissionsHuman,
106
106
  };
107
107
  }
108
108
  return {
@@ -21,7 +21,7 @@ function assertsIsStaticSocialTariffResponse(json: unknown): asserts json is Sta
21
21
  throw new SimpleError({
22
22
  code: 'invalid_response_getting_static_uitpas_social_tariff',
23
23
  message: `Invalid response when getting static UiTPAS social tariff`,
24
- human: $t(`a56854af-464a-45a4-8c39-10a9264b6ce4`),
24
+ human: $t(`%1BR`),
25
25
  });
26
26
  }
27
27
  }
@@ -35,7 +35,7 @@ export async function getSocialTariffForEvent(access_token: string, basePrice: n
35
35
  throw new SimpleError({
36
36
  code: 'invalid_uitpas_event_url',
37
37
  message: `Invalid UiTPAS event URL: ${uitpasEventUrl}`,
38
- human: $t(`85fb6e02-9b69-43cc-acf7-96a576461560`),
38
+ human: $t(`%1BS`),
39
39
  });
40
40
  }
41
41
  params.append('eventId', eventId);
@@ -61,7 +61,7 @@ export async function getSocialTariffForEvent(access_token: string, basePrice: n
61
61
  throw new SimpleError({
62
62
  code: 'unsuccessful_response_getting_static_uitpas_social_tariff',
63
63
  message: `Unsuccessful response when getting static UiTPAS social tariff`,
64
- human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
64
+ human: $t(`%18C`),
65
65
  });
66
66
  }
67
67
  const json = await response.json().catch(() => {
@@ -80,7 +80,7 @@ export async function getSocialTariffForEvent(access_token: string, basePrice: n
80
80
  throw new SimpleError({
81
81
  code: 'no_social_tariff_available',
82
82
  message: `No social tariff available for event ${eventId}`,
83
- human: $t(`ccd8e8b4-01a7-4e7c-8ae0-92d2a4c659eb`),
83
+ human: $t(`%1BT`),
84
84
  });
85
85
  }
86
86
  if (json.available.length > 1) {
@@ -34,7 +34,7 @@ function assertsIsSocialTariffResponse(json: unknown): asserts json is SocialTar
34
34
  throw new SimpleError({
35
35
  code: 'invalid_response_getting_uitpas_social_tariff',
36
36
  message: `Invalid response when getting UiTPAS social tariff`,
37
- human: $t(`466844b9-c042-4bc7-b77d-3f87376086b5`),
37
+ human: $t(`%1BU`),
38
38
  });
39
39
  }
40
40
  }
@@ -60,7 +60,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
60
60
  throw new SimpleError({
61
61
  code: 'invalid_uitpas_event_url',
62
62
  message: `Invalid UiTPAS event URL: ${uitpasEventUrl}`,
63
- human: $t(`85fb6e02-9b69-43cc-acf7-96a576461560`),
63
+ human: $t(`%1BS`),
64
64
  });
65
65
  }
66
66
  params.append('eventId', eventId);
@@ -110,7 +110,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
110
110
  throw new SimpleError({
111
111
  code: 'unsuccessful_and_unexpected_response_retrieving_social_tariff_by_uitpas_number',
112
112
  message: `Unsuccesful response without message when retrieving social tariff by UiTPAS number`,
113
- human: $t(`1572d069-abda-4b31-a373-f0c3760c79b1`),
113
+ human: $t(`%1BV`),
114
114
  });
115
115
  }
116
116
  const json = await response.json().catch(() => {
@@ -136,7 +136,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
136
136
  throw new SimpleError({
137
137
  code: 'no_social_tariff_available',
138
138
  message: `No social tariff available for event ${uitpasEventUrl}`,
139
- human: $t(`ccd8e8b4-01a7-4e7c-8ae0-92d2a4c659eb`),
139
+ human: $t(`%1BT`),
140
140
  });
141
141
  }
142
142
  if (json.available.length > 1) {
@@ -150,7 +150,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
150
150
  throw new SimpleError({
151
151
  code: 'no_remaining_social_tariff',
152
152
  message: `No remaining social tariff for event ${uitpasEventUrl} and UiTPAS number ${uitpasNumber}`,
153
- human: $t(`f9d6bc51-e7c9-4d3f-a13f-27871a018d83`),
153
+ human: $t(`%1BW`),
154
154
  });
155
155
  }
156
156
  console.log('Social tariff for UiTPAS number', uitpasNumber, 'with event id', uitpasEventUrl, 'is', json.available[0].price, 'euros');
@@ -45,7 +45,7 @@ async function uitpasErrorToSimpleError(response: Response) {
45
45
  statusCode,
46
46
  code: code ?? 'get-uitpas-error',
47
47
  message: message ?? `Error when retrieving pass by UiTPAS number`,
48
- human: human ?? $t('2fcd8eb2-603e-44bb-8b8d-faa131936888'),
48
+ human: human ?? $t('%1Iz'),
49
49
  });
50
50
  }
51
51
 
@@ -46,7 +46,7 @@ function assertisSuccessResponse(json: unknown): asserts json is SuccessResponse
46
46
  throw new SimpleError({
47
47
  code: 'invalid_register_ticket_sale_response',
48
48
  message: `Invalid register ticket sale response`,
49
- human: $t(`f5cac12d-ced6-43e6-bbd9-81b381807154`),
49
+ human: $t(`%1BX`),
50
50
  });
51
51
  }
52
52
  }
@@ -69,7 +69,7 @@ export async function registerTicketSales(access_token: string, registerTicketSa
69
69
  throw new SimpleError({
70
70
  code: 'invalid_uitpas_event_url',
71
71
  message: `Invalid UiTPAS event URL: ${ticketSale.uitpasEventUrl}`,
72
- human: $t(`85fb6e02-9b69-43cc-acf7-96a576461560`),
72
+ human: $t(`%1BS`),
73
73
  });
74
74
  }
75
75
 
@@ -108,7 +108,7 @@ export async function registerTicketSales(access_token: string, registerTicketSa
108
108
  throw new SimpleError({
109
109
  code: 'unsuccessful_response_registering_ticket_sales',
110
110
  message: `Unsuccessful response when registering UiTPAS ticket sales`,
111
- human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
111
+ human: $t(`%18C`),
112
112
  });
113
113
  }
114
114
  const json = await response.json().catch(() => {});
@@ -117,7 +117,7 @@ export async function registerTicketSales(access_token: string, registerTicketSa
117
117
  throw new SimpleError({
118
118
  code: 'invalid_response_registering_ticket_sales',
119
119
  message: `Invalid response when registering ticket sales`,
120
- human: $t(`f5cac12d-ced6-43e6-bbd9-81b381807154`),
120
+ human: $t(`%1BX`),
121
121
  });
122
122
  }
123
123
  const now = new Date();
@@ -49,7 +49,7 @@ function assertIsEventsResponse(json: unknown): asserts json is EventsResponse {
49
49
  throw new SimpleError({
50
50
  code: 'invalid_events_response',
51
51
  message: `Invalid events response`,
52
- human: $t(`0b610eb8-551f-4ef6-acdc-fb3267dfc2a8`),
52
+ human: $t(`%1BY`),
53
53
  });
54
54
  }
55
55
  }
@@ -61,7 +61,7 @@ export async function searchUitpasEvents(clientId: string, uitpasOrganizerId: st
61
61
  throw new SimpleError({
62
62
  code: 'no_client_id_for_uitpas_events',
63
63
  message: `No client ID configured for Uitpas events`,
64
- human: $t(`0009cce2-9d13-4f03-9258-345d8f8e396e`),
64
+ human: $t(`%1BZ`),
65
65
  });
66
66
  }
67
67
  const baseUrl = 'https://search-test.uitdatabank.be/events';
@@ -97,7 +97,7 @@ export async function searchUitpasEvents(clientId: string, uitpasOrganizerId: st
97
97
  throw new SimpleError({
98
98
  code: 'unsuccessful_response_searching_uitpas_events',
99
99
  message: `Unsuccessful response when searching for UiTPAS events`,
100
- human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
100
+ human: $t(`%18C`),
101
101
  });
102
102
  }
103
103
  const json = await response.json().catch(() => {
@@ -25,7 +25,7 @@ function assertIsOrganizersResponse(json: unknown): asserts json is OrganizersRe
25
25
  throw new SimpleError({
26
26
  code: 'invalid_response_searching_uitpas_organizers',
27
27
  message: `Invalid response when searching for UiTPAS organizers`,
28
- human: $t(`e1aab1a7-fded-4e5e-b994-6607684764ac`),
28
+ human: $t(`%1Ba`),
29
29
  });
30
30
  }
31
31
  }
@@ -37,7 +37,7 @@ export async function searchUitpasOrganizers(access_token: string, name: string)
37
37
  throw new SimpleError({
38
38
  code: 'empty_uitpas_organizer_name',
39
39
  message: `Empty name when searching for UiTPAS organizers`,
40
- human: $t(`963105d8-a70a-4ba4-9ddc-b7f908d44664`),
40
+ human: $t(`%1Bb`),
41
41
  });
42
42
  }
43
43
  const baseUrl = 'https://api-test.uitpas.be/organizers';
@@ -66,7 +66,7 @@ export async function searchUitpasOrganizers(access_token: string, name: string)
66
66
  throw new SimpleError({
67
67
  code: 'unsuccessful_response_searching_uitpas_organizers',
68
68
  message: `Unsuccessful response when searching for UiTPAS organizers`,
69
- human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
69
+ human: $t(`%18C`),
70
70
  });
71
71
  }
72
72
  const json = await response.json().catch(() => {
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const auditLogFilterCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const balanceItemPaymentsCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  /**
4
5
  * Defines how to filter balance items in the database from StamhoofdFilter objects
@@ -1,6 +1,8 @@
1
1
  import { SimpleError } from '@simonbackx/simple-errors';
2
- import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, createJoinedRelationFilter, SQL, SQLFilterDefinitions, SQLIfNull, SQLValueType } from '@stamhoofd/sql';
3
- import { FilterWrapperMarker, PermissionLevel, StamhoofdFilter, unwrapFilter } from '@stamhoofd/structures';
2
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
3
+ import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, createJoinedRelationFilter, SQL, SQLIfNull, SQLValueType } from '@stamhoofd/sql';
4
+ import type { StamhoofdFilter} from '@stamhoofd/structures';
5
+ import { FilterWrapperMarker, PermissionLevel, unwrapFilter } from '@stamhoofd/structures';
4
6
  import { Context } from '../helpers/Context.js';
5
7
  import { memberCachedBalanceForOrganizationJoin, registrationCachedBalanceJoin } from '../helpers/outstandingBalanceJoin.js';
6
8
  import { SQLTranslatedString } from '../helpers/SQLTranslatedString.js';
@@ -18,7 +20,7 @@ async function checkGroupIdFilterAccess(filter: StamhoofdFilter, permissionLevel
18
20
  code: 'invalid_field',
19
21
  field: 'filter',
20
22
  message: 'You must filter on a group of the organization you are trying to access',
21
- human: $t(`d0ef2e12-dfa2-4d2a-9ee7-793e52e6b94f`),
23
+ human: $t(`%1HG`),
22
24
  });
23
25
  }
24
26
 
@@ -48,7 +50,7 @@ async function checkGroupIdFilterAccess(filter: StamhoofdFilter, permissionLevel
48
50
  }
49
51
  throw Context.auth.error({
50
52
  message: 'You do not have access to this group',
51
- human: $t(`45eedf49-0f0a-442c-a0bd-7881c2682698`, { groupName: group.settings.name }),
53
+ human: $t(`%15f`, { groupName: group.settings.name }),
52
54
  });
53
55
  }
54
56
  }
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const documentTemplateFilterCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const documentFilterCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLConcat, SQLFilterDefinitions, SQLScalar, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLConcat, SQLScalar, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const emailRecipientsFilterCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
  import { emailRecipientsFilterCompilers } from './email-recipients.js';
3
4
 
4
5
  export const userEmailFilterCompilers: SQLFilterDefinitions = {
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, createJoinedRelationFilter, createExistsFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, createJoinedRelationFilter, createExistsFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
  import { eventFilterCompilers } from './events.js';
3
4
  import { organizationFilterCompilers } from './organizations.js';
4
5
 
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const eventFilterCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, createWildcardColumnFilter, SQL, SQLFilterDefinitions, SQLJsonExtract, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, createWildcardColumnFilter, SQL, SQLJsonExtract, SQLValueType } from '@stamhoofd/sql';
2
3
  import { SQLTranslatedString } from '../helpers/SQLTranslatedString.js';
3
4
 
4
5
  export const groupFilterCompilers: SQLFilterDefinitions = {
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
2
3
 
3
4
  export const invoicedBalanceItemCompilers: SQLFilterDefinitions = {
4
5
  ...baseSQLFilterCompilers,
@@ -1,4 +1,5 @@
1
- import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, SQL, SQLCast, SQLConcat, SQLFilterDefinitions, SQLJsonUnquote, SQLScalar, SQLValueType } from '@stamhoofd/sql';
1
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
2
+ import { baseSQLFilterCompilers, createColumnFilter, createExistsFilter, SQL, SQLCast, SQLConcat, SQLJsonUnquote, SQLScalar, SQLValueType } from '@stamhoofd/sql';
2
3
  import { invoicedBalanceItemCompilers } from './invoiced-balance-items.js';
3
4
 
4
5
  /**
@@ -1,5 +1,6 @@
1
1
  import { MemberResponsibilityRecord } from '@stamhoofd/models';
2
- import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLFilterDefinitions, SQLValueType } from '@stamhoofd/sql';
2
+ import type { SQLFilterDefinitions} from '@stamhoofd/sql';
3
+ import { baseSQLFilterCompilers, createColumnFilter, SQL, SQLValueType } from '@stamhoofd/sql';
3
4
 
4
5
  const baseTable = SQL.table(MemberResponsibilityRecord.table);
5
6