@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,11 +1,13 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { SimpleError } from '@simonbackx/simple-errors';
4
5
  import { Organization } from '@stamhoofd/models';
5
6
  import { SQL, applySQLSorter, compileToSQLFilter } from '@stamhoofd/sql';
6
- import { CountFilteredRequest, LimitedFilteredRequest, Organization as OrganizationStruct, PaginatedResponse, PermissionLevel, StamhoofdFilter, assertSort, getSortFilter } from '@stamhoofd/structures';
7
+ import type { CountFilteredRequest, Organization as OrganizationStruct, StamhoofdFilter} from '@stamhoofd/structures';
8
+ import { LimitedFilteredRequest, PaginatedResponse, PermissionLevel, assertSort, getSortFilter } from '@stamhoofd/structures';
7
9
 
8
- import { SQLResultNamespacedRow } from '@simonbackx/simple-database';
10
+ import type { SQLResultNamespacedRow } from '@simonbackx/simple-database';
9
11
  import { AuthenticatedStructures } from '../../../helpers/AuthenticatedStructures.js';
10
12
  import { Context } from '../../../helpers/Context.js';
11
13
  import { organizationFilterCompilers } from '../../../sql-filters/organizations.js';
@@ -129,7 +131,7 @@ export class GetOrganizationsEndpoint extends Endpoint<Params, Query, Body, Resp
129
131
  throw new SimpleError({
130
132
  code: 'timeout',
131
133
  message: 'Query took too long',
132
- human: $t(`dce51638-6129-448b-8a15-e6d778f3a76a`),
134
+ human: $t(`%Cv`),
133
135
  });
134
136
  }
135
137
  throw error;
@@ -1,5 +1,7 @@
1
- import { AutoEncoderPatchType, Decoder, PatchableArrayAutoEncoder, PatchableArrayDecoder, StringDecoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { AutoEncoderPatchType, Decoder, PatchableArrayAutoEncoder} from '@simonbackx/simple-encoding';
2
+ import { PatchableArrayDecoder, StringDecoder } from '@simonbackx/simple-encoding';
3
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
4
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
5
  import { SimpleError } from '@simonbackx/simple-errors';
4
6
  import { Organization, OrganizationRegistrationPeriod, Platform, RegistrationPeriod } from '@stamhoofd/models';
5
7
  import { Organization as OrganizationStruct } from '@stamhoofd/structures';
@@ -43,7 +45,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
43
45
 
44
46
  for (const id of request.body.getDeletes()) {
45
47
  if (!Context.auth.hasPlatformFullAccess()) {
46
- throw Context.auth.error($t(`d01932d9-e958-4b29-98f2-cc5ff6be29d3`));
48
+ throw Context.auth.error($t(`%Cw`));
47
49
  }
48
50
 
49
51
  const organization = await Organization.getByID(id);
@@ -55,7 +57,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
55
57
  throw new SimpleError({
56
58
  code: 'cannot_delete_membership_organization',
57
59
  message: 'Cannot delete membership organization',
58
- human: $t(`a1f57ce7-a96a-4c8d-b43f-79a07a78114f`),
60
+ human: $t(`%Cx`),
59
61
  });
60
62
  }
61
63
 
@@ -65,7 +67,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
65
67
  // Organization creation
66
68
  for (const { put } of request.body.getPuts()) {
67
69
  if (!Context.auth.hasPlatformFullAccess()) {
68
- throw Context.auth.error($t(`83826ae8-fd89-46c2-ad3f-8f77aadd65b2`));
70
+ throw Context.auth.error($t(`%Cy`));
69
71
  }
70
72
 
71
73
  if (put.name.length < 4) {
@@ -73,7 +75,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
73
75
  throw new SimpleError({
74
76
  code: 'invalid_field',
75
77
  message: 'Should not be empty',
76
- human: $t(`3f37782a-c07f-457d-994f-f1cc075cff44`),
78
+ human: $t(`%Cz`),
77
79
  field: 'organization.name',
78
80
  });
79
81
  }
@@ -81,7 +83,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
81
83
  throw new SimpleError({
82
84
  code: 'invalid_field',
83
85
  message: 'Field is too short',
84
- human: $t(`0e82abec-5467-45d8-ba89-9b9fd10c085d`),
86
+ human: $t(`%D0`),
85
87
  field: 'organization.name',
86
88
  });
87
89
  }
@@ -92,7 +94,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
92
94
  throw new SimpleError({
93
95
  code: 'invalid_field',
94
96
  message: 'Field is too long',
95
- human: $t(`c4d225ea-8e41-4829-bf0c-bc04755492de`),
97
+ human: $t(`%D1`),
96
98
  field: 'organization.name',
97
99
  });
98
100
  }
@@ -102,7 +104,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
102
104
  throw new SimpleError({
103
105
  code: 'name_taken',
104
106
  message: 'An organization with the same name already exists',
105
- human: $t(`6e675a7d-b124-4507-bf0c-9b70013e98ca`),
107
+ human: $t(`%D2`),
106
108
  field: 'name',
107
109
  });
108
110
  }
@@ -113,7 +115,7 @@ export class PatchOrganizationsEndpoint extends Endpoint<Params, Query, Body, Re
113
115
  throw new SimpleError({
114
116
  code: 'name_taken',
115
117
  message: 'An organization with the same name already exists',
116
- human: $t(`19e5262f-9dc1-40d9-b905-bda8462b6046`),
118
+ human: $t(`%D3`),
117
119
  field: 'name',
118
120
  });
119
121
  }
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { SimpleError } from '@simonbackx/simple-errors';
4
5
  import { ChargeRequest, LimitedFilteredRequest, PermissionLevel } from '@stamhoofd/structures';
5
6
 
@@ -49,7 +50,7 @@ export class ChargeRegistrationsEndpoint extends Endpoint<Params, Query, Body, R
49
50
  throw new SimpleError({
50
51
  code: 'charge_pending',
51
52
  message: 'Charge registrations already pending',
52
- human: $t(`d2b84fdd-035b-4307-a897-000081aa814f`),
53
+ human: $t(`%Cu`),
53
54
  });
54
55
  }
55
56
 
@@ -1,8 +1,10 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { SimpleError } from '@simonbackx/simple-errors';
4
5
  import { PasswordToken, Platform, sendEmailTemplate, User } from '@stamhoofd/models';
5
- import { EmailTemplateType, Recipient, Replacement, UserPermissions, User as UserStruct, UserWithMembers } from '@stamhoofd/structures';
6
+ import type { UserWithMembers } from '@stamhoofd/structures';
7
+ import { EmailTemplateType, Recipient, Replacement, UserPermissions, User as UserStruct } from '@stamhoofd/structures';
6
8
  import { Formatter } from '@stamhoofd/utility';
7
9
 
8
10
  import { AuthenticatedStructures } from '../../helpers/AuthenticatedStructures.js';
@@ -59,7 +61,7 @@ export class CreateAdminEndpoint extends Endpoint<Params, Query, Body, ResponseB
59
61
  throw new SimpleError({
60
62
  code: 'internal_error',
61
63
  message: 'Something went wrong while creating the admin',
62
- human: $t(`f298a54a-ee0f-462c-a80a-8d8c967dfda3`),
64
+ human: $t(`%D4`),
63
65
  statusCode: 500,
64
66
  });
65
67
  }
@@ -101,7 +103,7 @@ export class CreateAdminEndpoint extends Endpoint<Params, Query, Body, ResponseB
101
103
  const platformName = ((await Platform.getSharedStruct()).config.name);
102
104
 
103
105
  const name = organization?.name ?? platformName;
104
- const what = organization ? $t('a5c0dce2-01df-4a57-8d02-0b79cec9b89d', { name, platform: platformName }) : platformName;
106
+ const what = organization ? $t('%C4', { name, platform: platformName }) : platformName;
105
107
 
106
108
  const emailTo = admin.getEmailTo();
107
109
  const email: string = typeof emailTo === 'string' ? emailTo : emailTo[0]?.email;
@@ -123,7 +125,7 @@ export class CreateAdminEndpoint extends Endpoint<Params, Query, Body, ResponseB
123
125
  }),
124
126
  Replacement.create({
125
127
  token: 'inviterName',
126
- value: user.firstName ?? $t(`afc47996-7028-43ad-b7d0-8b5bb2979883`),
128
+ value: user.firstName ?? $t(`%D5`),
127
129
  }),
128
130
  Replacement.create({
129
131
  token: 'validUntil',
@@ -1,7 +1,9 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
2
3
  import { SimpleError } from '@simonbackx/simple-errors';
3
4
  import { EmailVerificationCode, PasswordToken, Platform, Token, User } from '@stamhoofd/models';
4
- import { ChallengeGrantStruct, CreateTokenStruct, LoginMethod, PasswordGrantStruct, PasswordTokenGrantStruct, RefreshTokenGrantStruct, RequestChallengeGrantStruct, SignupResponse, Token as TokenStruct } from '@stamhoofd/structures';
5
+ import type { ChallengeGrantStruct, PasswordGrantStruct, PasswordTokenGrantStruct, RefreshTokenGrantStruct, RequestChallengeGrantStruct} from '@stamhoofd/structures';
6
+ import { CreateTokenStruct, LoginMethod, SignupResponse, Token as TokenStruct } from '@stamhoofd/structures';
5
7
 
6
8
  import { Context } from '../../helpers/Context.js';
7
9
 
@@ -74,7 +76,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
74
76
  throw new SimpleError({
75
77
  code: 'error',
76
78
  message: 'Could not generate token',
77
- human: $t(`f40ddd3d-a986-4ec1-9db8-32ec1376c4e8`),
79
+ human: $t(`%D6`),
78
80
  statusCode: 500,
79
81
  });
80
82
  }
@@ -91,7 +93,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
91
93
  throw new SimpleError({
92
94
  code: 'not_supported',
93
95
  message: 'This platform does not support password login',
94
- human: $t(`4af15b54-0bbb-4112-adf2-26dd14e8675a`),
96
+ human: $t(`%D7`),
95
97
  statusCode: 400,
96
98
  });
97
99
  }
@@ -100,7 +102,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
100
102
  throw new SimpleError({
101
103
  code: 'not_supported',
102
104
  message: 'Login method not supported',
103
- human: $t(`ca4ca221-2ce9-4472-b8c7-1a5b2e2fdfa9`),
105
+ human: $t(`%D8`),
104
106
  statusCode: 400,
105
107
  });
106
108
  }
@@ -111,7 +113,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
111
113
  const errBody = {
112
114
  code: 'invalid_username_or_password',
113
115
  message: 'Invalid username or password',
114
- human: $t(`ef53eb8d-b0ba-4e84-b0e3-1865729aeaa8`),
116
+ human: $t(`%D9`),
115
117
  statusCode: 400,
116
118
  };
117
119
 
@@ -130,7 +132,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
130
132
  throw new SimpleError({
131
133
  code: 'verify_email',
132
134
  message: 'Your email address needs verification',
133
- human: $t(`0da8cd34-d33e-4b54-94f2-531919f3cae1`),
135
+ human: $t(`%DA`),
134
136
  meta: SignupResponse.create({
135
137
  token: code.token,
136
138
  }).encode({ version: request.request.getVersion() }),
@@ -144,7 +146,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
144
146
  throw new SimpleError({
145
147
  code: 'error',
146
148
  message: 'Could not generate token',
147
- human: $t(`f40ddd3d-a986-4ec1-9db8-32ec1376c4e8`),
149
+ human: $t(`%D6`),
148
150
  statusCode: 500,
149
151
  });
150
152
  }
@@ -159,7 +161,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
159
161
  throw new SimpleError({
160
162
  code: 'invalid_token',
161
163
  message: 'Invalid token',
162
- human: $t(`dc03dd54-96e9-42b8-811b-3f8cf2b8534f`),
164
+ human: $t(`%DB`),
163
165
  statusCode: 400,
164
166
  });
165
167
  }
@@ -170,7 +172,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
170
172
  throw new SimpleError({
171
173
  code: 'invalid_token',
172
174
  message: 'Invalid token',
173
- human: $t(`dc03dd54-96e9-42b8-811b-3f8cf2b8534f`),
175
+ human: $t(`%DB`),
174
176
  statusCode: 400,
175
177
  });
176
178
  }
@@ -180,7 +182,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
180
182
  throw new SimpleError({
181
183
  code: 'invalid_token',
182
184
  message: 'Invalid token',
183
- human: $t(`dc03dd54-96e9-42b8-811b-3f8cf2b8534f`),
185
+ human: $t(`%DB`),
184
186
  statusCode: 400,
185
187
  });
186
188
  }
@@ -194,7 +196,7 @@ export class CreateTokenEndpoint extends Endpoint<Params, Query, Body, ResponseB
194
196
  throw new SimpleError({
195
197
  code: 'error',
196
198
  message: 'Could not generate token',
197
- human: $t(`b75bc5af-7711-4905-a324-3dca313bbfc2`),
199
+ human: $t(`%DC`),
198
200
  statusCode: 500,
199
201
  });
200
202
  }
@@ -1,4 +1,5 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
2
3
 
3
4
  import { Context } from '../../helpers/Context.js';
4
5
 
@@ -1,4 +1,5 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
2
3
 
3
4
  import { getDefaultEmailFrom, sendEmailTemplate } from '@stamhoofd/models';
4
5
  import { EmailTemplateType, Recipient } from '@stamhoofd/structures';
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { PasswordToken, Platform, sendEmailTemplate, User } from '@stamhoofd/models';
4
5
  import { EmailTemplateType, ForgotPasswordRequest, LoginMethod, Recipient, Replacement } from '@stamhoofd/structures';
5
6
 
@@ -37,7 +38,7 @@ export class ForgotPasswordEndpoint extends Endpoint<Params, Query, Body, Respon
37
38
  throw new SimpleError({
38
39
  code: 'not_supported',
39
40
  message: 'This platform does not support password login',
40
- human: $t(`4af15b54-0bbb-4112-adf2-26dd14e8675a`),
41
+ human: $t(`%D7`),
41
42
  statusCode: 400,
42
43
  });
43
44
  }
@@ -46,7 +47,7 @@ export class ForgotPasswordEndpoint extends Endpoint<Params, Query, Body, Respon
46
47
  throw new SimpleError({
47
48
  code: 'not_supported',
48
49
  message: 'Login method not supported',
49
- human: $t(`52bddf7d-e494-4bdf-9b75-b5e9f9bcb427`),
50
+ human: $t(`%DD`),
50
51
  statusCode: 400,
51
52
  });
52
53
  }
@@ -1,5 +1,6 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
2
- import { UserWithMembers } from '@stamhoofd/structures';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
+ import type { UserWithMembers } from '@stamhoofd/structures';
3
4
 
4
5
  import { AuthenticatedStructures } from '../../helpers/AuthenticatedStructures.js';
5
6
  import { Context } from '../../helpers/Context.js';
@@ -1,5 +1,6 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
2
- import { UserWithMembers } from '@stamhoofd/structures';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
+ import type { UserWithMembers } from '@stamhoofd/structures';
3
4
 
4
5
  import { AuthenticatedStructures } from '../../helpers/AuthenticatedStructures.js';
5
6
  import { Context } from '../../helpers/Context.js';
@@ -1,5 +1,6 @@
1
1
  import { AutoEncoder, field, StringDecoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
 
4
5
  import { Context } from '../../helpers/Context.js';
5
6
  import { SSOService } from '../../services/SSOService.js';
@@ -1,5 +1,7 @@
1
- import { AnyDecoder, Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import { AnyDecoder } from '@simonbackx/simple-encoding';
3
+ import type { DecodedRequest, Request } from '@simonbackx/simple-endpoints';
4
+ import { Endpoint } from '@simonbackx/simple-endpoints';
3
5
 
4
6
  import { Context } from '../../helpers/Context.js';
5
7
  import { SSOServiceWithSession } from '../../services/SSOService.js';
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request } from '@simonbackx/simple-endpoints';
3
+ import { Endpoint } from '@simonbackx/simple-endpoints';
3
4
  import { StartOpenIDFlowStruct } from '@stamhoofd/structures';
4
5
 
5
6
  import { Context } from '../../helpers/Context.js';
@@ -1,8 +1,11 @@
1
- import { AutoEncoderPatchType, Decoder, isPatch } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { AutoEncoderPatchType, Decoder} from '@simonbackx/simple-encoding';
2
+ import { isPatch } from '@simonbackx/simple-encoding';
3
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
4
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
5
  import { SimpleError } from '@simonbackx/simple-errors';
4
6
  import { EmailVerificationCode, Member, PasswordToken, Platform, Token, User } from '@stamhoofd/models';
5
- import { LoginMethod, NewUser, PermissionLevel, SignupResponse, UserPermissions, UserWithMembers } from '@stamhoofd/structures';
7
+ import type { UserWithMembers } from '@stamhoofd/structures';
8
+ import { LoginMethod, NewUser, PermissionLevel, SignupResponse, UserPermissions } from '@stamhoofd/structures';
6
9
 
7
10
  import { Context } from '../../helpers/Context.js';
8
11
  import { MemberUserSyncer } from '../../helpers/MemberUserSyncer.js';
@@ -44,7 +47,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
44
47
  const editUser = request.body.id === user.id ? user : await User.getByID(request.body.id);
45
48
 
46
49
  if (!editUser || !await Context.auth.canAccessUser(editUser, PermissionLevel.Write) || editUser.isApiUser) {
47
- throw Context.auth.notFoundOrNoAccess($t(`75c10aef-cdce-4171-b1a1-59dfdec5087c`));
50
+ throw Context.auth.notFoundOrNoAccess($t(`%DE`));
48
51
  }
49
52
 
50
53
  if (await Context.auth.canEditUserName(editUser)) {
@@ -72,7 +75,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
72
75
  if (!await Context.auth.canAccessUser(editUser, PermissionLevel.Full)) {
73
76
  throw new SimpleError({
74
77
  code: 'permission_denied',
75
- message: $t(`75bf8ddd-48f3-44b6-bd57-0b9838c322d9`),
78
+ message: $t(`%DF`),
76
79
  });
77
80
  }
78
81
 
@@ -83,7 +86,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
83
86
  if (editUser.id === user.id && (!editUser.permissions || !editUser.permissions.forOrganization(organization)?.hasFullAccess()) && STAMHOOFD.environment !== 'development') {
84
87
  throw new SimpleError({
85
88
  code: 'permission_denied',
86
- message: $t(`e0dcbc2f-0881-409b-bb1e-6a19d0a2081c`),
89
+ message: $t(`%DG`),
87
90
  });
88
91
  }
89
92
  }
@@ -102,7 +105,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
102
105
  if (editUser.id === user.id && !editUser.permissions?.platform?.hasFullAccess() && STAMHOOFD.environment !== 'development') {
103
106
  throw new SimpleError({
104
107
  code: 'permission_denied',
105
- message: $t(`e0dcbc2f-0881-409b-bb1e-6a19d0a2081c`),
108
+ message: $t(`%DG`),
106
109
  });
107
110
  }
108
111
  }
@@ -124,7 +127,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
124
127
  throw new SimpleError({
125
128
  code: 'invalid_request',
126
129
  message: 'You cannot remove the last login provider',
127
- human: $t(`15e37a03-07ec-4299-8b9e-d54b7142a045`),
130
+ human: $t(`%DH`),
128
131
  statusCode: 400,
129
132
  });
130
133
  }
@@ -142,7 +145,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
142
145
  throw new SimpleError({
143
146
  code: 'not_supported',
144
147
  message: 'This platform does not support password login',
145
- human: $t(`4af15b54-0bbb-4112-adf2-26dd14e8675a`),
148
+ human: $t(`%D7`),
146
149
  statusCode: 400,
147
150
  });
148
151
  }
@@ -151,7 +154,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
151
154
  throw new SimpleError({
152
155
  code: 'not_supported',
153
156
  message: 'Login method not supported',
154
- human: $t(`52bddf7d-e494-4bdf-9b75-b5e9f9bcb427`),
157
+ human: $t(`%DD`),
155
158
  statusCode: 400,
156
159
  });
157
160
  }
@@ -170,7 +173,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
170
173
  throw new SimpleError({
171
174
  code: 'invalid_request',
172
175
  message: 'You cannot remove the last login provider',
173
- human: $t(`e4b9b541-a029-47e7-97ca-4aa1bfa2137e`),
176
+ human: $t(`%DI`),
174
177
  statusCode: 400,
175
178
  });
176
179
  }
@@ -192,7 +195,7 @@ export class PatchUserEndpoint extends Endpoint<Params, Query, Body, ResponseBod
192
195
  throw new SimpleError({
193
196
  code: 'verify_email',
194
197
  message: 'Your email address needs verification',
195
- human: editUser.id === user.id ? $t(`2a53e6f7-a6eb-4adf-a218-f28de686d188`) : $t(`919a83c6-c128-4d1c-bd5d-edb8c0106454`) + ' ' + request.body.email + ' ' + $t(`779c7d08-6db2-400c-95f8-af0f327109f8`),
198
+ human: editUser.id === user.id ? $t(`%DJ`) : $t(`%DK`) + ' ' + request.body.email + ' ' + $t(`%DL`),
196
199
  meta: SignupResponse.create({
197
200
  token: code.token,
198
201
  }).encode({ version: request.request.getVersion() }),
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { EmailVerificationCode } from '@stamhoofd/models';
4
5
  import { PollEmailVerificationRequest, PollEmailVerificationResponse } from '@stamhoofd/structures';
5
6
 
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { EmailVerificationCode } from '@stamhoofd/models';
4
5
  import { PollEmailVerificationRequest, PollEmailVerificationResponse } from '@stamhoofd/structures';
5
6
 
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { SimpleError } from '@simonbackx/simple-errors';
4
5
  import { EmailVerificationCode, PasswordToken, Platform, sendEmailTemplate, User } from '@stamhoofd/models';
5
6
  import { EmailTemplateType, LoginMethod, NewUser, Recipient, Replacement, SignupResponse } from '@stamhoofd/structures';
@@ -36,7 +37,7 @@ export class SignupEndpoint extends Endpoint<Params, Query, Body, ResponseBody>
36
37
  throw new SimpleError({
37
38
  code: 'not_supported',
38
39
  message: 'This platform does not support password login',
39
- human: $t(`4af15b54-0bbb-4112-adf2-26dd14e8675a`),
40
+ human: $t(`%D7`),
40
41
  statusCode: 400,
41
42
  });
42
43
  }
@@ -62,7 +63,7 @@ export class SignupEndpoint extends Endpoint<Params, Query, Body, ResponseBody>
62
63
  throw new SimpleError({
63
64
  code: 'unexpected_error',
64
65
  message: 'Something went wrong',
65
- human: $t(`44e0c667-07c5-4ff9-8bf2-623d9aa91219`),
66
+ human: $t(`%DM`),
66
67
  statusCode: 500,
67
68
  });
68
69
  }
@@ -1,5 +1,6 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { SimpleError } from '@simonbackx/simple-errors';
4
5
  import { EmailVerificationCode, Token, User } from '@stamhoofd/models';
5
6
  import { Token as TokenStruct, VerifyEmailRequest } from '@stamhoofd/structures';
@@ -36,7 +37,7 @@ export class VerifyEmailEndpoint extends Endpoint<Params, Query, Body, ResponseB
36
37
  throw new SimpleError({
37
38
  code: 'invalid_code',
38
39
  message: 'This code is invalid',
39
- human: $t(`6dfd3a88-1de2-4462-b2a4-625026f9a62f`),
40
+ human: $t(`%DN`),
40
41
  statusCode: 400,
41
42
  });
42
43
  }
@@ -47,7 +48,7 @@ export class VerifyEmailEndpoint extends Endpoint<Params, Query, Body, ResponseB
47
48
  throw new SimpleError({
48
49
  code: 'invalid_code',
49
50
  message: 'This code is invalid',
50
- human: $t(`6dfd3a88-1de2-4462-b2a4-625026f9a62f`),
51
+ human: $t(`%DN`),
51
52
  statusCode: 400,
52
53
  });
53
54
  }
@@ -77,7 +78,7 @@ export class VerifyEmailEndpoint extends Endpoint<Params, Query, Body, ResponseB
77
78
  throw new SimpleError({
78
79
  code: 'email_in_use',
79
80
  message: 'This e-mail is already in use, we cannot set it',
80
- human: $t(`3073cc35-f434-4c2c-8347-34db10fc9940`, { email: code.email, contactEmail: request.$t('59b85264-c4c3-4cf6-8923-9b43282b2787') }),
81
+ human: $t(`%DO`, { email: code.email, contactEmail: request.$t('%2a') }),
81
82
  });
82
83
  }
83
84
  throw e;
@@ -1,7 +1,8 @@
1
- import {
1
+ import type {
2
2
  DecodedRequest,
3
+ Request} from '@simonbackx/simple-endpoints';
4
+ import {
3
5
  Endpoint,
4
- Request,
5
6
  Response,
6
7
  } from '@simonbackx/simple-endpoints';
7
8
  import { SimpleError } from '@simonbackx/simple-errors';
@@ -1,8 +1,11 @@
1
- import { AutoEncoder, Decoder, field, StringDecoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import { AutoEncoder, field, StringDecoder } from '@simonbackx/simple-encoding';
3
+ import type { DecodedRequest, Request } from '@simonbackx/simple-endpoints';
4
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
5
  import { City, Province } from '@stamhoofd/models';
4
- import { City as CityStruct, Country, Province as ProvinceStruct, SearchRegions } from '@stamhoofd/structures';
6
+ import { City as CityStruct, Province as ProvinceStruct, SearchRegions } from '@stamhoofd/structures';
5
7
  import { StringCompare } from '@stamhoofd/utility';
8
+ import { Country } from '@stamhoofd/types/Country';
6
9
 
7
10
  type Params = Record<string, never>;
8
11
  class Query extends AutoEncoder {
@@ -30,14 +33,14 @@ export class SearchRegionsEndpoint extends Endpoint<Params, Query, Body, Respons
30
33
 
31
34
  async handle(request: DecodedRequest<Params, Query, Body>) {
32
35
  // Escape query
33
- const rawQuery = request.query.query.replace(/([-+><()~*"@\s]+)/g, ' ');
36
+ const rawQuery = request.query.query.replace(/[-+><()~*"@\s]+/g, ' ');
34
37
  const words = rawQuery.split(' ').filter(w => w.length > 0);
35
38
 
36
39
  // Escape words
37
40
  const cleanedWords: string[] = [];
38
41
  for (const [index, word] of words.entries()) {
39
42
  // If contains special char (non a-zA-Z) - escape with " character
40
- if (/^[a-zA-Z0-9]*$/.test(word)) {
43
+ if (/^[a-z0-9]*$/i.test(word)) {
41
44
  if (index === words.length - 1) {
42
45
  cleanedWords.push('+' + word + '*');
43
46
  }
@@ -1,6 +1,8 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
3
- import { Address, ValidatedAddress } from '@stamhoofd/structures';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
4
+ import type { ValidatedAddress } from '@stamhoofd/structures';
5
+ import { Address } from '@stamhoofd/structures';
4
6
 
5
7
  import { AddressValidator } from '../../../helpers/AddressValidator.js';
6
8
 
@@ -1,9 +1,12 @@
1
- import { Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { SimpleError } from '@simonbackx/simple-errors';
4
5
  import { AuditLog } from '@stamhoofd/models';
5
- import { SQL, SQLSortDefinitions, applySQLSorter, compileToSQLFilter } from '@stamhoofd/sql';
6
- import { AuditLog as AuditLogStruct, CountFilteredRequest, LimitedFilteredRequest, PaginatedResponse, StamhoofdFilter, assertSort, getSortFilter } from '@stamhoofd/structures';
6
+ import type { SQLSortDefinitions} from '@stamhoofd/sql';
7
+ import { SQL, applySQLSorter, compileToSQLFilter } from '@stamhoofd/sql';
8
+ import type { AuditLog as AuditLogStruct, CountFilteredRequest, StamhoofdFilter} from '@stamhoofd/structures';
9
+ import { LimitedFilteredRequest, PaginatedResponse, assertSort, getSortFilter } from '@stamhoofd/structures';
7
10
 
8
11
  import { AuthenticatedStructures } from '../../../helpers/AuthenticatedStructures.js';
9
12
  import { Context } from '../../../helpers/Context.js';
@@ -81,7 +84,7 @@ export class GetAuditLogsEndpoint extends Endpoint<Params, Query, Body, Response
81
84
  throw new SimpleError({
82
85
  code: 'not_supported',
83
86
  message: 'Search is not possible in audit logs',
84
- human: $t(`540b9c7e-635f-48b7-a661-cd0700b3c602`),
87
+ human: $t(`%DP`),
85
88
  });
86
89
  }
87
90