@stamhoofd/backend 2.120.6 → 2.122.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/output-2.txt +1 -0
- package/output.txt +1 -0
- package/package.json +70 -53
- package/src/audit-logs/EventNotificationLogger.ts +40 -0
- package/src/audit-logs/ModelLogger.ts +19 -15
- package/src/audit-logs/OrganizationLogger.ts +1 -1
- package/src/audit-logs/RegistrationInvitationLogger.ts +46 -0
- package/src/audit-logs/init.ts +9 -1
- package/src/boot.ts +19 -18
- package/src/crons/amazon-ses.ts +13 -26
- package/src/crons/balance-emails.ts +3 -5
- package/src/crons/clearExcelCache.test.ts +1 -1
- package/src/crons/clearExcelCache.ts +1 -2
- package/src/crons/drip-emails.ts +42 -0
- package/src/crons/endFunctionsOfUsersWithoutRegistration.ts +4 -0
- package/src/crons/helpers/isOutside.ts +11 -0
- package/src/crons/helpers/useSavedIterator.ts +32 -0
- package/src/crons/index.ts +7 -0
- package/src/crons/invoices.ts +160 -0
- package/src/crons/members-fees.ts +50 -0
- package/src/crons/mollie-chargebacks.ts +86 -0
- package/src/crons/service-fees.ts +152 -0
- package/src/crons/stripe-invoices.ts +48 -0
- package/src/crons/transfer-fees.ts +176 -0
- package/src/crons/update-cached-balances.ts +4 -4
- package/src/crons.ts +54 -74
- package/src/debug.ts +4 -2
- package/src/email-recipient-loaders/documents.ts +1 -1
- package/src/email-recipient-loaders/members.ts +1 -1
- package/src/email-recipient-loaders/payments.ts +87 -46
- package/src/email-recipient-loaders/registrations.ts +1 -1
- package/src/email-replacements/getEmailReplacementsForPayment.ts +5 -9
- package/src/endpoints/admin/members/ChargeMembersEndpoint.ts +1 -1
- package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +1 -1
- package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +3 -5
- package/src/endpoints/admin/organizations/ChargeOrganizationsEndpoint.ts +1 -1
- package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +1 -1
- package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +13 -7
- package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +4 -6
- package/src/endpoints/admin/organizations/PatchPackagesEndpoint.test.ts +10 -6
- package/src/endpoints/admin/organizations/PatchPackagesEndpoint.ts +39 -21
- package/src/endpoints/admin/registrations/ChargeRegistrationsEndpoint.ts +1 -1
- package/src/endpoints/auth/CreateAdminEndpoint.ts +23 -5
- package/src/endpoints/auth/CreateTokenEndpoint.ts +2 -2
- package/src/endpoints/auth/DeleteTokenEndpoint.ts +1 -1
- package/src/endpoints/auth/DeleteUserEndpoint.ts +3 -3
- package/src/endpoints/auth/ForgotPasswordEndpoint.ts +1 -1
- package/src/endpoints/auth/GetOtherUserEndpoint.ts +1 -1
- package/src/endpoints/auth/GetUserEndpoint.ts +1 -1
- package/src/endpoints/auth/OpenIDConnectAuthTokenEndpoint.ts +1 -1
- package/src/endpoints/auth/OpenIDConnectStartEndpoint.ts +1 -1
- package/src/endpoints/auth/PatchUserEndpoint.ts +5 -8
- package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +1 -1
- package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +1 -1
- package/src/endpoints/auth/SignupEndpoint.ts +2 -3
- package/src/endpoints/auth/VerifyEmailEndpoint.ts +20 -3
- package/src/endpoints/frontend/FrontendEnvironmentEndpoint.ts +2 -1
- package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +2 -4
- package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +1 -1
- package/src/endpoints/global/audit-logs/GetAuditLogsEndpoint.ts +5 -7
- package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +2 -2
- package/src/endpoints/global/email/CreateEmailEndpoint.ts +3 -4
- package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +1 -1
- package/src/endpoints/global/email/GetAdminEmailsEndpoint.ts +1 -2
- package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +4 -6
- package/src/endpoints/global/email/GetEmailEndpoint.ts +1 -1
- package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +1 -1
- package/src/endpoints/global/email/GetUserEmailsEndpoint.ts +1 -1
- package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +6 -10
- package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +4 -7
- package/src/endpoints/global/email/PatchEmailEndpoint.ts +6 -9
- package/src/endpoints/global/email-recipients/GetEmailRecipientsCountEndpoint.ts +1 -1
- package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +1 -1
- package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.ts +1 -1
- package/src/endpoints/global/email-recipients/RetryEmailRecipientEndpoint.ts +2 -2
- package/src/endpoints/global/events/GetEventNotificationsCountEndpoint.ts +1 -1
- package/src/endpoints/global/events/GetEventNotificationsEndpoint.ts +3 -3
- package/src/endpoints/global/events/GetEventsEndpoint.ts +3 -3
- package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +49 -4
- package/src/endpoints/global/events/PatchEventNotificationsEndpoint.ts +5 -8
- package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +12 -44
- package/src/endpoints/global/events/PatchEventsEndpoint.ts +128 -127
- package/src/endpoints/global/files/ExportToExcelEndpoint.ts +9 -9
- package/src/endpoints/global/files/GetFileCache.ts +3 -4
- package/src/endpoints/global/files/UploadFile.ts +3 -4
- package/src/endpoints/global/files/UploadImage.ts +3 -4
- package/src/endpoints/global/groups/GetGroupsCountEndpoint.ts +51 -0
- package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +1 -1
- package/src/endpoints/global/groups/GetGroupsEndpoint.ts +4 -2
- package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +2 -3
- package/src/endpoints/global/members/GetMembersCountEndpoint.ts +1 -1
- package/src/endpoints/global/members/GetMembersEndpoint.test.ts +2 -2
- package/src/endpoints/global/members/GetMembersEndpoint.ts +10 -12
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +195 -12
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +16 -22
- package/src/endpoints/global/members/helpers/validateGroupFilter.ts +6 -30
- package/src/endpoints/global/members/shouldCheckIfMemberIsDuplicate.ts +1 -1
- package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +1 -1
- package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +40 -8
- package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +2 -2
- package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +2 -2
- package/src/endpoints/global/organizations/SearchOrganizationEndpoint.test.ts +4 -1
- package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +4 -5
- package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +9 -16
- package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +1 -1
- package/src/endpoints/global/platform/GetPlatformEndpoint.ts +1 -1
- package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +1 -1
- package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +32 -13
- package/src/endpoints/global/platform-memberships/GetPlatformMembershipsCountEndpoint.ts +31 -31
- package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +18 -20
- package/src/endpoints/global/registration/GetRegistrationsCountEndpoint.ts +1 -1
- package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +1 -1
- package/src/endpoints/global/registration/GetRegistrationsEndpoint.ts +6 -10
- package/src/endpoints/global/registration/GetUserDetailedPayableBalanceEndpoint.ts +35 -6
- package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +2 -2
- package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +1 -1
- package/src/endpoints/global/registration/GetUserPayableBalanceEndpoint.ts +1 -1
- package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +2 -2
- package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +3 -3
- package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +90 -6
- package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +38 -33
- package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsCountEndpoint.ts +45 -0
- package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.test.ts +494 -0
- package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.ts +213 -0
- package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.test.ts +404 -0
- package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.ts +167 -0
- package/src/endpoints/global/registration-periods/GetRegistrationPeriodsCountEndpoint.ts +43 -0
- package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +1 -1
- package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +13 -5
- package/src/endpoints/global/sso/GetSSOEndpoint.ts +2 -3
- package/src/endpoints/global/sso/SetSSOEndpoint.ts +1 -1
- package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +2 -2
- package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +1 -2
- package/src/endpoints/global/webshops/GetWebshopsEndpoint.ts +2 -4
- package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.ts +3 -4
- package/src/endpoints/organization/dashboard/balance-items/PatchBalanceItemsEndpoint.ts +19 -6
- package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.test.ts +73 -0
- package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.ts +89 -0
- package/src/endpoints/{global → organization/dashboard}/billing/DeactivatePackageEndpoint.ts +4 -9
- package/src/endpoints/organization/dashboard/billing/DeleteOrganizationMandateEndpoint.ts +62 -0
- package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceCollectionEndpoint.ts +56 -0
- package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceEndpoint.ts +41 -18
- package/src/endpoints/organization/dashboard/billing/GetOrganizationMandatesEndpoint.ts +64 -0
- package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableBalanceEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableInvoicesEndpoint.ts +68 -0
- package/src/endpoints/organization/dashboard/billing/GetPackagesEndpoint.ts +12 -4
- package/src/endpoints/organization/dashboard/billing/GetRegisterCodeEndpoint.ts +66 -0
- package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.test.ts +949 -0
- package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.ts +311 -0
- package/src/endpoints/organization/dashboard/billing/PatchOrganizationMandatesEndpoint.ts +94 -0
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentsCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +10 -2
- package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +2 -2
- package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +10 -8
- package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +5 -6
- package/src/endpoints/organization/dashboard/invoices/GetInvoicesCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.ts +15 -4
- package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +11 -2
- package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +8 -8
- package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +10 -5
- package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +7 -7
- package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +2 -2
- package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/GetUitpasClientIdEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +2 -2
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +67 -20
- package/src/endpoints/organization/dashboard/organization/SearchUitpasOrganizersEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +5 -10
- package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +3 -4
- package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +24 -17
- package/src/endpoints/organization/dashboard/receivable-balances/ChargeReceivableBalancesEndpoint.ts +134 -0
- package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +32 -22
- package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +4 -5
- package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.ts +4 -6
- package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +10 -15
- package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +11 -2
- package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +4 -6
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +29 -8
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +21 -28
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/webshops/WebshopReservedPathSegments.test.ts +95 -0
- package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +15 -13
- package/src/endpoints/organization/shared/GetDocumentHtml.ts +1 -1
- package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +1 -1
- package/src/endpoints/organization/shared/GetUitpasNumberDetailsEndpoint.ts +3 -5
- package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +1 -1
- package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +4 -1
- package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +14 -3
- package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +14 -2
- package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +37 -16
- package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +34 -2
- package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +4 -2
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +74 -3
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +28 -50
- package/src/endpoints/organization/webshops/RetrieveUitpasSocialTariffPriceEndpoint.ts +3 -5
- package/src/endpoints/organization/webshops/WebshopAuthHelper.ts +36 -0
- package/src/endpoints/system/HealthEndpoint.ts +1 -1
- package/src/excel-loaders/balance-items.ts +1 -1
- package/src/excel-loaders/event-notifications.ts +1 -1
- package/src/excel-loaders/members.ts +1 -1
- package/src/excel-loaders/organizations.ts +3 -3
- package/src/excel-loaders/payments.ts +31 -1
- package/src/excel-loaders/platform-memberships.ts +13 -14
- package/src/excel-loaders/receivable-balances.ts +2 -2
- package/src/excel-loaders/registrations.ts +2 -3
- package/src/helpers/AddressValidator.ts +7 -14
- package/src/helpers/AdminPermissionChecker.ts +60 -65
- package/src/helpers/AuthenticatedStructures.ts +153 -51
- package/src/helpers/BalanceItemRelationsBackfiller.test.ts +174 -0
- package/src/helpers/BalanceItemRelationsBackfiller.ts +163 -0
- package/src/helpers/BuckarooHelper.ts +2 -4
- package/src/helpers/CheckSettlements.ts +12 -24
- package/src/helpers/Context.ts +15 -10
- package/src/helpers/CookieHelper.ts +1 -2
- package/src/helpers/EmailResumer.ts +1 -2
- package/src/helpers/FileCache.ts +2 -3
- package/src/helpers/FinancialSupportHelper.ts +21 -0
- package/src/helpers/FlagMomentCleanup.ts +1 -2
- package/src/helpers/ForwardHandler.ts +5 -10
- package/src/helpers/GlobalHelper.ts +3 -3
- package/src/helpers/LegacyBillingConverter.ts +787 -0
- package/src/helpers/MemberMerger.test.ts +782 -0
- package/src/helpers/MemberMerger.ts +600 -0
- package/src/helpers/MemberUserSyncer.ts +6 -12
- package/src/helpers/MembershipCharger.ts +2 -4
- package/src/helpers/PaymentCustomerResolver.test.ts +203 -0
- package/src/helpers/PaymentCustomerResolver.ts +144 -0
- package/src/helpers/PeriodHelper.ts +2 -3
- package/src/helpers/RecordAnswerHelper.test.ts +741 -0
- package/src/helpers/RecordAnswerHelper.ts +116 -0
- package/src/helpers/SeedTools.ts +106 -0
- package/src/helpers/ServiceFeeHelper.ts +125 -15
- package/src/helpers/SetupStepUpdater.ts +38 -32
- package/src/helpers/StamhoofdFilterAccessHelper.ts +52 -0
- package/src/helpers/StripeHelper.ts +15 -38
- package/src/helpers/StripeInvoicer.ts +419 -0
- package/src/helpers/StripePayoutChecker.ts +5 -10
- package/src/helpers/TagHelper.ts +7 -8
- package/src/helpers/TemporaryMemberAccess.ts +1 -2
- package/src/helpers/ThrottledQueue.ts +1 -2
- package/src/helpers/UitpasTokenRepository.ts +1 -2
- package/src/helpers/ViesHelper.ts +11 -11
- package/src/helpers/XlsxTransformerColumnHelper.ts +1 -1
- package/src/helpers/outstandingBalanceJoin.ts +2 -2
- package/src/helpers/updateMemberDetailsUitpasNumber.ts +3 -5
- package/src/migrate.ts +12 -5
- package/src/{seeds → migrations}/0000000004-single-organization.ts +10 -1
- package/src/migrations/0000000006-default-organization.ts +139 -0
- package/src/{seeds → migrations}/1715028563-user-permissions.ts +17 -27
- package/src/{seeds/1765896674-document-update-year.test.ts → migrations/1750090029-document-update-year.test.ts} +27 -26
- package/src/migrations/1750090029-document-update-year.ts +103 -0
- package/src/migrations/1750090030-records-configuration.ts +92 -0
- package/src/migrations/1750090031-records-configuration-webshops.ts +36 -0
- package/src/migrations/1752848540-national-numbers.ts +585 -0
- package/src/migrations/1752848550-records-configuration-group-filter.ts +1064 -0
- package/src/{seeds → migrations}/1752848561-groups-registration-periods.ts +95 -27
- package/src/{seeds → migrations}/1754560914-groups-prices.test.ts +1 -1
- package/src/{seeds → migrations}/1754560914-groups-prices.ts +9 -15
- package/src/{seeds → migrations}/1756293699-fill-previous-next-period-id.ts +1 -2
- package/src/migrations/1761665607-sync-member-users.ts +40 -0
- package/src/migrations/1779121239-default-invoice-email-template.sql +3 -0
- package/src/migrations/1779121240-invoice-email-template.sql +6 -0
- package/src/migrations/1779986893-default-payment-failed-email-templates.sql +4 -0
- package/src/migrations/1780578166-convert-legacy-billing.ts +13 -0
- package/src/{seeds/1755876819-remove-duplicate-members.ts → migrations/1780665426-remove-duplicate-members.ts} +23 -4
- package/src/migrations/1780933598-document-groups.ts +88 -0
- package/src/migrations/1781692342-balance-item-relations.ts +13 -0
- package/src/migrations/1781857866-platform-admins.ts +103 -0
- package/src/migrations/1781857867-rm-old-platform-admins.ts +25 -0
- package/src/seeds/0000000001-throw.ts +5 -0
- package/src/seeds/1760702452-update-balance-price-paid.ts +19 -0
- package/src/seeds/1760702453-update-balance-invoiced.ts +19 -0
- package/src/seeds/1760702454-update-cached-outstanding-balance-from-items.ts +51 -14
- package/src/seeds/1773754928-force-save-members.ts +41 -8
- package/src/seeds/1780665427-schedule-stock-updates.ts +45 -0
- package/src/seeds/1780665428-group-update-occupancy.ts +31 -0
- package/src/seeds/1780915001-fill-payment-customer.ts +70 -0
- package/src/seeds/1780915002-update-orders.ts +39 -0
- package/src/seeds/1782047708-organization-company-address.ts +44 -0
- package/src/seeds-temporary/1769088653-uitpas-status.ts +1 -2
- package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.test.ts +69 -0
- package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.ts +85 -0
- package/src/services/AuditLogService.test.ts +51 -0
- package/src/services/AuditLogService.ts +45 -0
- package/src/services/BalanceItemService.ts +148 -55
- package/src/services/CpuService.ts +3 -6
- package/src/services/DatabaseCollationService.test.ts +1 -2
- package/src/services/DocumentService.ts +1 -2
- package/src/services/EventNotificationService.ts +1 -1
- package/src/services/FileSignService.ts +2 -4
- package/src/services/InvoicePdfService.ts +286 -0
- package/src/services/InvoiceService.ts +330 -77
- package/src/services/InvoiceXMLService.ts +424 -0
- package/src/services/MemberNumberService.ts +6 -11
- package/src/services/MemberRecordStore.ts +8 -10
- package/src/services/MollieService.ts +530 -0
- package/src/services/PaymentMandateService.ts +214 -0
- package/src/services/PaymentReallocationService.test.ts +1 -1
- package/src/services/PaymentReallocationService.ts +7 -9
- package/src/services/PaymentService.ts +820 -328
- package/src/services/PlatformMembershipService.ts +5 -9
- package/src/services/ReferralService.ts +223 -0
- package/src/services/RegistrationService.ts +125 -54
- package/src/services/SSOService.test.ts +119 -0
- package/src/services/SSOService.ts +56 -49
- package/src/services/STPackageService.ts +97 -68
- package/src/services/UniqueMemberNumberService.ts +69 -0
- package/src/services/UniqueUserService.ts +3 -6
- package/src/services/VATService.ts +85 -0
- package/src/services/data/invoice.hbs.html +686 -0
- package/src/services/uitpas/PassholderEndpoints.ts +3 -6
- package/src/services/uitpas/UitpasService.ts +6 -10
- package/src/services/uitpas/checkUitpasNumbers.ts +2 -4
- package/src/services/uitpas/getSocialTariffForUitpasNumbers.ts +3 -6
- package/src/services/uitpas/searchUitpasEvents.ts +1 -2
- package/src/sql-filters/audit-logs.ts +1 -1
- package/src/sql-filters/balance-item-payments.ts +1 -1
- package/src/sql-filters/balance-items.ts +1 -1
- package/src/sql-filters/base-registration-filter-compilers.ts +5 -33
- package/src/sql-filters/document-templates.ts +1 -1
- package/src/sql-filters/documents.ts +1 -1
- package/src/sql-filters/email-recipients.ts +1 -1
- package/src/sql-filters/emails.ts +1 -1
- package/src/sql-filters/event-notifications.ts +1 -1
- package/src/sql-filters/events.ts +6 -1
- package/src/sql-filters/groups.ts +16 -1
- package/src/sql-filters/invoiced-balance-items.ts +1 -1
- package/src/sql-filters/invoices.ts +1 -1
- package/src/sql-filters/member-responsibility-records.ts +1 -1
- package/src/sql-filters/members.ts +1 -1
- package/src/sql-filters/orders.ts +4 -4
- package/src/sql-filters/organization-registration-periods.ts +1 -1
- package/src/sql-filters/organizations.ts +1 -1
- package/src/sql-filters/payments.ts +5 -0
- package/src/sql-filters/platform-memberships.ts +3 -3
- package/src/sql-filters/receivable-balances.ts +1 -1
- package/src/sql-filters/registration-invitations.ts +90 -0
- package/src/sql-filters/registration-periods.ts +1 -1
- package/src/sql-filters/registrations.ts +1 -1
- package/src/sql-filters/tickets.ts +1 -1
- package/src/sql-filters/users.ts +1 -1
- package/src/sql-sorters/groups.ts +23 -0
- package/src/sql-sorters/platform-memberships.ts +16 -16
- package/src/sql-sorters/registration-invitations.ts +36 -0
- package/tests/actions/patchOrganizationMember.ts +1 -1
- package/tests/actions/patchUserMember.ts +1 -1
- package/tests/assertions/assertBalances.ts +6 -12
- package/tests/e2e/api-rate-limits.test.ts +12 -24
- package/tests/e2e/bundle-discounts.test.ts +4 -1
- package/tests/e2e/charge-members.test.ts +13 -11
- package/tests/e2e/documents.test.ts +4 -1
- package/tests/e2e/register.test.ts +7 -9
- package/tests/e2e/stock.test.ts +4 -3
- package/tests/e2e/tickets.test.ts +1 -1
- package/tests/helpers/MollieMocker.ts +462 -0
- package/tests/helpers/PayconiqMocker.ts +138 -45
- package/tests/helpers/StripeMocker.ts +9 -6
- package/tests/helpers/index.ts +4 -0
- package/tests/init/initAdmin.ts +2 -2
- package/tests/init/initBundleDiscount.ts +1 -1
- package/tests/init/initMembershipOrganization.ts +13 -0
- package/tests/init/initPermissionRole.ts +3 -4
- package/tests/vitest.global.setup.ts +1 -1
- package/vitest.config.js +7 -0
- package/.nvmrc +0 -1
- package/src/endpoints/global/billing/ActivatePackagesEndpoint.ts +0 -216
- package/src/helpers/GroupBuilder.ts +0 -418
- package/src/seeds/0000000000-example.ts +0 -11
- package/src/seeds/1722256498-group-update-occupancy.ts +0 -52
- package/src/seeds/1726572303-schedule-stock-updates.ts +0 -52
- package/src/seeds/1726847064-setup-steps.ts +0 -16
- package/src/seeds/1728928974-update-cached-outstanding-balance-from-items.ts +0 -31
- package/src/seeds/1729253172-update-orders.ts +0 -21
- package/src/seeds/1733319079-fill-paying-organization-ids.ts +0 -68
- package/src/seeds/1733748412-update-deleted-order-numbers.ts +0 -109
- package/src/seeds/1733994455-balance-item-status-open.ts +0 -30
- package/src/seeds/1740046783-update-membership.ts +0 -17
- package/src/seeds/1741008870-fix-auditlog-description.ts +0 -50
- package/src/seeds/1741011468-fix-auditlog-description-uft16.ts +0 -88
- package/src/seeds/1741268179-fix-group-dates-of-events.ts +0 -32
- package/src/seeds/1750090030-records-configuration.ts +0 -26
- package/src/seeds/1751445358-upload-email-attachments.ts +0 -106
- package/src/seeds/1755532883-update-email-sender-ids.ts +0 -47
- package/src/seeds/1755790070-fill-email-recipient-errors.ts +0 -96
- package/src/seeds/1756115432-remove-old-drafts.ts +0 -16
- package/src/seeds/1756115433-fill-email-recipient-organization-id.ts +0 -30
- package/src/seeds/1756303697-update-email-counts.ts +0 -76
- package/src/seeds/1761665607-sync-member-users.ts +0 -59
- package/src/seeds/1765896674-document-update-year.ts +0 -66
- /package/src/{seeds → migrations}/0000000001-development-user.ts +0 -0
- /package/src/{seeds → migrations}/0000000002-clear-stamhoofd-email-templates.ts +0 -0
- /package/src/{seeds → migrations}/0000000003-default-email-templates.ts +0 -0
- /package/src/{seeds → migrations}/1752848561-groups-registration-periods.test.ts +0 -0
- /package/src/{seeds → migrations}/1766150402-document-published-at.test.ts +0 -0
- /package/src/{seeds → migrations}/1766150402-document-published-at.ts +0 -0
- /package/src/{seeds → migrations}/data/default-email-templates.sql +0 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { BalanceItem, Group, Member, Order, Registration, Webshop } from '@stamhoofd/models';
|
|
2
|
+
import { SQL } from '@stamhoofd/sql';
|
|
3
|
+
import { BalanceItemRelation, BalanceItemRelationType, BalanceItemType, TranslatedString } from '@stamhoofd/structures';
|
|
4
|
+
import { Formatter } from '@stamhoofd/utility';
|
|
5
|
+
import { SeedTools } from './SeedTools.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Backfills the `relations` (and registration `startDate`/`endDate`) of legacy v1 balance items.
|
|
9
|
+
*
|
|
10
|
+
* V1 balance items were created without relations, so the frontend cannot show the member name, the
|
|
11
|
+
* registration group, the working year or the webshop name (it falls back to "Onbekende
|
|
12
|
+
* inschrijvingsgroep" / "Onbekende webshop"). We reconstruct that data from the linked registration or
|
|
13
|
+
* order.
|
|
14
|
+
*
|
|
15
|
+
* Only balance items that still have empty relations are touched, so the migration is idempotent and
|
|
16
|
+
* never overwrites relations that were already set by the current flows.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Build the relations for a registration balance item, mirroring RegisterMembersEndpoint.
|
|
21
|
+
* Returns null when the linked registration/group/member can no longer be resolved.
|
|
22
|
+
*/
|
|
23
|
+
function buildRegistrationRelations(registration: Registration, group: Group, member: Member | undefined): Map<BalanceItemRelationType, BalanceItemRelation> {
|
|
24
|
+
const relations = new Map<BalanceItemRelationType, BalanceItemRelation>();
|
|
25
|
+
|
|
26
|
+
if (member) {
|
|
27
|
+
relations.set(BalanceItemRelationType.Member, BalanceItemRelation.create({
|
|
28
|
+
id: member.id,
|
|
29
|
+
name: new TranslatedString(member.details.name),
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
relations.set(BalanceItemRelationType.Group, BalanceItemRelation.create({
|
|
34
|
+
id: group.id,
|
|
35
|
+
name: group.settings.name,
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
// Mirror RegisterMembersEndpoint: only add the group price relation when there are multiple prices.
|
|
39
|
+
if (group.settings.prices.length > 1 && registration.groupPrice) {
|
|
40
|
+
relations.set(BalanceItemRelationType.GroupPrice, BalanceItemRelation.create({
|
|
41
|
+
id: registration.groupPrice.id,
|
|
42
|
+
name: registration.groupPrice.name,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return relations;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function backfillRegistrationBalanceItems(): Promise<number> {
|
|
50
|
+
let updated = 0;
|
|
51
|
+
|
|
52
|
+
await SeedTools.loopBatched({
|
|
53
|
+
batchSize: 100,
|
|
54
|
+
query: BalanceItem.select()
|
|
55
|
+
.whereNot('registrationId', null)
|
|
56
|
+
.where(SQL.jsonLength(SQL.column('relations'), '$.value'), 0),
|
|
57
|
+
batchAction: async (items: BalanceItem[]) => {
|
|
58
|
+
const registrationIds = Formatter.uniqueArray(items.map(i => i.registrationId!).filter(id => !!id));
|
|
59
|
+
const registrations = await Registration.getByIDs(...registrationIds);
|
|
60
|
+
const registrationMap = new Map(registrations.map(r => [r.id, r]));
|
|
61
|
+
|
|
62
|
+
const groups = await Group.getByIDs(...Formatter.uniqueArray(registrations.map(r => r.groupId)));
|
|
63
|
+
const groupMap = new Map(groups.map(g => [g.id, g]));
|
|
64
|
+
|
|
65
|
+
const members = await Member.getByIDs(...Formatter.uniqueArray(registrations.map(r => r.memberId)));
|
|
66
|
+
const memberMap = new Map(members.map(m => [m.id, m]));
|
|
67
|
+
|
|
68
|
+
for (const item of items) {
|
|
69
|
+
// A second safety check: never overwrite existing relations.
|
|
70
|
+
if (item.relations.size > 0) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const registration = registrationMap.get(item.registrationId!);
|
|
75
|
+
if (!registration) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const group = groupMap.get(registration.groupId);
|
|
80
|
+
if (!group) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const member = memberMap.get(registration.memberId);
|
|
85
|
+
|
|
86
|
+
item.relations = buildRegistrationRelations(registration, group, member);
|
|
87
|
+
|
|
88
|
+
// Reconstruct the period (working year) so the frontend can show it.
|
|
89
|
+
if (item.startDate === null && registration.startDate) {
|
|
90
|
+
item.startDate = registration.startDate;
|
|
91
|
+
}
|
|
92
|
+
if (item.endDate === null && registration.endDate) {
|
|
93
|
+
item.endDate = registration.endDate;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
await item.save();
|
|
97
|
+
updated += 1;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
return updated;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async function backfillOrderBalanceItems(): Promise<number> {
|
|
106
|
+
let updated = 0;
|
|
107
|
+
|
|
108
|
+
await SeedTools.loopBatched({
|
|
109
|
+
batchSize: 100,
|
|
110
|
+
query: BalanceItem.select()
|
|
111
|
+
.where('type', BalanceItemType.Order)
|
|
112
|
+
.whereNot('orderId', null)
|
|
113
|
+
.where(SQL.jsonLength(SQL.column('relations'), '$.value'), 0),
|
|
114
|
+
batchAction: async (items: BalanceItem[]) => {
|
|
115
|
+
const orderIds = Formatter.uniqueArray(items.map(i => i.orderId!).filter(id => !!id));
|
|
116
|
+
const orders = await Order.getByIDs(...orderIds);
|
|
117
|
+
const orderMap = new Map(orders.map(o => [o.id, o]));
|
|
118
|
+
|
|
119
|
+
const webshops = await Webshop.getByIDs(...Formatter.uniqueArray(orders.map(o => o.webshopId)));
|
|
120
|
+
const webshopMap = new Map(webshops.map(w => [w.id, w]));
|
|
121
|
+
|
|
122
|
+
for (const item of items) {
|
|
123
|
+
if (item.relations.size > 0) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const order = orderMap.get(item.orderId!);
|
|
128
|
+
if (!order) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const webshop = webshopMap.get(order.webshopId);
|
|
133
|
+
if (!webshop) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
item.relations = new Map([
|
|
138
|
+
[
|
|
139
|
+
BalanceItemRelationType.Webshop,
|
|
140
|
+
BalanceItemRelation.create({
|
|
141
|
+
id: webshop.id,
|
|
142
|
+
name: new TranslatedString(webshop.meta.name),
|
|
143
|
+
}),
|
|
144
|
+
],
|
|
145
|
+
]);
|
|
146
|
+
|
|
147
|
+
await item.save();
|
|
148
|
+
updated += 1;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
return updated;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export async function backfillBalanceItemRelations(): Promise<{ registrations: number; orders: number }> {
|
|
157
|
+
const registrations = await backfillRegistrationBalanceItems();
|
|
158
|
+
const orders = await backfillOrderBalanceItems();
|
|
159
|
+
|
|
160
|
+
console.log(`[BalanceItemRelationsBackfiller] Updated ${registrations} registration balance items and ${orders} order balance items`);
|
|
161
|
+
|
|
162
|
+
return { registrations, orders };
|
|
163
|
+
}
|
|
@@ -115,8 +115,7 @@ export class BuckarooHelper {
|
|
|
115
115
|
const status = this.getStatusFromResponse(response);
|
|
116
116
|
|
|
117
117
|
return status === PaymentStatus.Pending || status === PaymentStatus.Created || status === PaymentStatus.Succeeded;
|
|
118
|
-
}
|
|
119
|
-
catch (e) {
|
|
118
|
+
} catch (e) {
|
|
120
119
|
console.error(e);
|
|
121
120
|
}
|
|
122
121
|
return false;
|
|
@@ -205,8 +204,7 @@ export class BuckarooHelper {
|
|
|
205
204
|
await dbPayment.save();
|
|
206
205
|
|
|
207
206
|
return response['RequiredAction']?.['RedirectURL'] ?? null;
|
|
208
|
-
}
|
|
209
|
-
catch (e) {
|
|
207
|
+
} catch (e) {
|
|
210
208
|
console.error(e);
|
|
211
209
|
throw new SimpleError({
|
|
212
210
|
code: 'buckaroo_error',
|
|
@@ -39,8 +39,7 @@ export async function checkAllStripePayouts(checkAll = false) {
|
|
|
39
39
|
stripeAccount: account.accountId,
|
|
40
40
|
});
|
|
41
41
|
await checker.checkSettlements(checkAll);
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
42
|
+
} catch (e) {
|
|
44
43
|
console.error(e);
|
|
45
44
|
}
|
|
46
45
|
}
|
|
@@ -63,8 +62,7 @@ export async function checkSettlements(checkAll = false) {
|
|
|
63
62
|
const token = STAMHOOFD.MOLLIE_ORGANIZATION_TOKEN;
|
|
64
63
|
if (!token) {
|
|
65
64
|
console.error('Missing mollie organization token');
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
65
|
+
} else {
|
|
68
66
|
await checkMollieSettlementsFor(token, checkAll);
|
|
69
67
|
}
|
|
70
68
|
|
|
@@ -77,19 +75,16 @@ export async function checkSettlements(checkAll = false) {
|
|
|
77
75
|
for (const token of mollieTokens) {
|
|
78
76
|
if (token.createdAt < new Date(2021, 8 /* september! */, 8)) {
|
|
79
77
|
console.log('Skipped mollie token that is too old');
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
78
|
+
} else {
|
|
82
79
|
try {
|
|
83
80
|
await token.refreshIfNeeded();
|
|
84
81
|
await checkMollieSettlementsFor(token.accessToken, checkAll);
|
|
85
|
-
}
|
|
86
|
-
catch (e) {
|
|
82
|
+
} catch (e) {
|
|
87
83
|
console.error(e);
|
|
88
84
|
}
|
|
89
85
|
}
|
|
90
86
|
}
|
|
91
|
-
}
|
|
92
|
-
catch (e) {
|
|
87
|
+
} catch (e) {
|
|
93
88
|
console.error(e);
|
|
94
89
|
}
|
|
95
90
|
}
|
|
@@ -135,22 +130,18 @@ export async function checkMollieSettlementsFor(token: string, checkAll = false)
|
|
|
135
130
|
await updateSettlement(token, settlement);
|
|
136
131
|
}
|
|
137
132
|
}
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
133
|
+
} else {
|
|
140
134
|
console.error('Unreadable settlements');
|
|
141
135
|
}
|
|
142
|
-
}
|
|
143
|
-
catch (e) {
|
|
136
|
+
} catch (e) {
|
|
144
137
|
console.error(request.data);
|
|
145
138
|
throw e;
|
|
146
139
|
}
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
140
|
+
} else {
|
|
149
141
|
console.error('Failed to fetch settlements');
|
|
150
142
|
console.error(request.data);
|
|
151
143
|
}
|
|
152
|
-
}
|
|
153
|
-
catch (e) {
|
|
144
|
+
} catch (e) {
|
|
154
145
|
console.error(e);
|
|
155
146
|
}
|
|
156
147
|
}
|
|
@@ -199,12 +190,10 @@ async function updateSettlement(token: string, settlement: MollieSettlement, fro
|
|
|
199
190
|
console.log('Updated settlement of payment ' + payment.id);
|
|
200
191
|
console.log(payment.settlement);
|
|
201
192
|
}
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
193
|
+
} else {
|
|
204
194
|
console.log('Missing payment ' + mp.paymentId);
|
|
205
195
|
}
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
196
|
+
} else {
|
|
208
197
|
// Probably a payment in a different system/platform
|
|
209
198
|
// console.log("No mollie payment found for id "+mollie.id)
|
|
210
199
|
}
|
|
@@ -214,8 +203,7 @@ async function updateSettlement(token: string, settlement: MollieSettlement, fro
|
|
|
214
203
|
if (request.data._links.next) {
|
|
215
204
|
await updateSettlement(token, settlement, molliePayments[molliePayments.length - 1].id);
|
|
216
205
|
}
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
206
|
+
} else {
|
|
219
207
|
console.error(request.data);
|
|
220
208
|
}
|
|
221
209
|
}
|
package/src/helpers/Context.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { User } from '@stamhoofd/models';
|
|
|
5
5
|
import { Organization, Platform, RateLimiter, Token } from '@stamhoofd/models';
|
|
6
6
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
7
7
|
|
|
8
|
-
import type { Decoder} from '@simonbackx/simple-encoding';
|
|
8
|
+
import type { Decoder } from '@simonbackx/simple-encoding';
|
|
9
9
|
import { AutoEncoder, field, StringDecoder } from '@simonbackx/simple-encoding';
|
|
10
10
|
import { ApiUserRateLimits } from '@stamhoofd/structures';
|
|
11
11
|
import { AdminPermissionChecker } from './AdminPermissionChecker.js';
|
|
@@ -156,8 +156,7 @@ export class ContextInstance {
|
|
|
156
156
|
async setOptionalOrganizationScope(options?: { willAuthenticate?: boolean }) {
|
|
157
157
|
try {
|
|
158
158
|
return await this.setOrganizationScope(options);
|
|
159
|
-
}
|
|
160
|
-
catch (e) {
|
|
159
|
+
} catch (e) {
|
|
161
160
|
if (isSimpleError(e) && e.hasCode('invalid_host')) {
|
|
162
161
|
return null;
|
|
163
162
|
}
|
|
@@ -199,11 +198,16 @@ export class ContextInstance {
|
|
|
199
198
|
return organization;
|
|
200
199
|
}
|
|
201
200
|
|
|
201
|
+
async setManualOrganizationScope(organization: Organization) {
|
|
202
|
+
this.organization = organization;
|
|
203
|
+
this.i18n.switchToLocale({ country: organization.address.country });
|
|
204
|
+
return organization;
|
|
205
|
+
}
|
|
206
|
+
|
|
202
207
|
async optionalAuthenticate({ allowWithoutAccount = false }: { allowWithoutAccount?: boolean } = {}): Promise<{ user?: User }> {
|
|
203
208
|
try {
|
|
204
209
|
return await this.authenticate({ allowWithoutAccount });
|
|
205
|
-
}
|
|
206
|
-
catch (e) {
|
|
210
|
+
} catch (e) {
|
|
207
211
|
if (e.code === 'not_authenticated') {
|
|
208
212
|
// Do not allow to optional authenticate to inactive organizations
|
|
209
213
|
if (this.organization && !this.organization.active) {
|
|
@@ -226,8 +230,7 @@ export class ContextInstance {
|
|
|
226
230
|
try {
|
|
227
231
|
const decoded = await DecodedRequest.fromRequest(this.request, undefined, undefined, AuthorizationPostBody as Decoder<AuthorizationPostBody>);
|
|
228
232
|
header = decoded.body.header_authorization;
|
|
229
|
-
}
|
|
230
|
-
catch (e) {
|
|
233
|
+
} catch (e) {
|
|
231
234
|
// Ignore: failed to read from body
|
|
232
235
|
}
|
|
233
236
|
}
|
|
@@ -307,8 +310,12 @@ export class ContextInstance {
|
|
|
307
310
|
);
|
|
308
311
|
|
|
309
312
|
// Load member of user
|
|
310
|
-
|
|
313
|
+
await this.insecurelyAuthenticateAs(user);
|
|
314
|
+
|
|
315
|
+
return { user, token };
|
|
316
|
+
}
|
|
311
317
|
|
|
318
|
+
async insecurelyAuthenticateAs(user: User) {
|
|
312
319
|
this.#auth = new AdminPermissionChecker(user, await Platform.getSharedPrivateStruct(), this.organization);
|
|
313
320
|
|
|
314
321
|
if (this.organization && !this.organization.active) {
|
|
@@ -322,8 +329,6 @@ export class ContextInstance {
|
|
|
322
329
|
});
|
|
323
330
|
}
|
|
324
331
|
}
|
|
325
|
-
|
|
326
|
-
return { user, token };
|
|
327
332
|
}
|
|
328
333
|
}
|
|
329
334
|
|
package/src/helpers/FileCache.ts
CHANGED
|
@@ -111,7 +111,7 @@ export class FileCache {
|
|
|
111
111
|
throw new SimpleError({
|
|
112
112
|
code: 'invalid_file',
|
|
113
113
|
message: 'Invalid file',
|
|
114
|
-
human: $t(`%
|
|
114
|
+
human: $t(`%Fm`),
|
|
115
115
|
statusCode: 400,
|
|
116
116
|
});
|
|
117
117
|
}
|
|
@@ -136,8 +136,7 @@ export class FileCache {
|
|
|
136
136
|
let stat: fs.Stats;
|
|
137
137
|
try {
|
|
138
138
|
stat = await fs.promises.stat(filePath);
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
139
|
+
} catch (e) {
|
|
141
140
|
if (e.code == 'ENOENT') {
|
|
142
141
|
throw new SimpleError({
|
|
143
142
|
code: 'file_expired',
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Organization, Platform } from '@stamhoofd/models';
|
|
2
|
+
import type { FinancialSupportSettings, Organization as OrganizationStruct, Platform as PlatformStruct } from '@stamhoofd/structures';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Get the financial support settings from the platform if userMode is platform, or from the organization otherwise.
|
|
6
|
+
* @param platform
|
|
7
|
+
* @param getOrganization callback to prevent fetching the organization if not needed
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export async function getFinancialSupportSettingsAsync(platform: Platform | PlatformStruct, getOrganization: () => Promise<Organization | OrganizationStruct | null>): Promise<FinancialSupportSettings | null> {
|
|
11
|
+
if (STAMHOOFD.userMode === 'platform') {
|
|
12
|
+
return platform.config.financialSupport;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const organization = await getOrganization();
|
|
16
|
+
if (organization) {
|
|
17
|
+
return organization.meta.financialSupport;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
@@ -43,8 +43,7 @@ export class ForwardHandler {
|
|
|
43
43
|
}
|
|
44
44
|
model.unsubscribedAll = true;
|
|
45
45
|
await model.save();
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
46
|
+
} else {
|
|
48
47
|
console.error('[Unsubscribe] Received an unsubscribe request for unknown ID ' + id + ' from ' + from);
|
|
49
48
|
|
|
50
49
|
// Forward
|
|
@@ -98,17 +97,14 @@ export class ForwardHandler {
|
|
|
98
97
|
if (!organizationEmails) {
|
|
99
98
|
if (STAMHOOFD.environment === 'test') {
|
|
100
99
|
// ignore
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
100
|
+
} else {
|
|
103
101
|
console.error('Missing reply emails for organization ' + organization.id);
|
|
104
102
|
}
|
|
105
103
|
return doBounce();
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
104
|
+
} else {
|
|
108
105
|
defaultEmail = organizationEmails;
|
|
109
106
|
}
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
107
|
+
} else {
|
|
112
108
|
return doBounce();
|
|
113
109
|
}
|
|
114
110
|
|
|
@@ -123,8 +119,7 @@ export class ForwardHandler {
|
|
|
123
119
|
if (body !== -1) {
|
|
124
120
|
const endTag = parsed.html.indexOf('>', body);
|
|
125
121
|
html = parsed.html.substring(0, endTag + 1) + '<p><i>' + Formatter.escapeHtml(extraDescription) + '<br><br></i></p>' + parsed.html.substring(endTag + 1);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
122
|
+
} else {
|
|
128
123
|
html = '<p><i>' + Formatter.escapeHtml(extraDescription) + '<br><br></i></p>' + parsed.html;
|
|
129
124
|
}
|
|
130
125
|
}
|
|
@@ -9,13 +9,13 @@ export class GlobalHelper {
|
|
|
9
9
|
await I18n.load();
|
|
10
10
|
this.loadGlobalTranslateFunction();
|
|
11
11
|
await FileSignService.load();
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
MemberRecordStore.init();
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
BalanceItemService.listen();
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
static loadGlobalTranslateFunction() {
|
|
19
19
|
function getI18n() {
|
|
20
20
|
return ContextInstance.optional?.i18n ?? new I18n(I18n.defaultLanguage, STAMHOOFD.fixedCountry ?? I18n.defaultCountry);
|
|
21
21
|
}
|