@stamhoofd/models 2.1.1
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/dist/src/assets/Metropolis-Black.woff2 +0 -0
- package/dist/src/assets/Metropolis-BlackItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-Bold.woff2 +0 -0
- package/dist/src/assets/Metropolis-BoldItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-ExtraBold.woff2 +0 -0
- package/dist/src/assets/Metropolis-ExtraBoldItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-ExtraLight.woff2 +0 -0
- package/dist/src/assets/Metropolis-ExtraLightItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-Light.woff2 +0 -0
- package/dist/src/assets/Metropolis-LightItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-Medium.woff2 +0 -0
- package/dist/src/assets/Metropolis-MediumItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-Regular.woff2 +0 -0
- package/dist/src/assets/Metropolis-RegularItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-SemiBold.woff2 +0 -0
- package/dist/src/assets/Metropolis-SemiBoldItalic.woff2 +0 -0
- package/dist/src/assets/Metropolis-Thin.woff2 +0 -0
- package/dist/src/assets/Metropolis-ThinItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-Black.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-BlackItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-Bold.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-BoldItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-ExtraBold.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-ExtraBoldItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-ExtraLight.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-ExtraLightItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-Light.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-LightItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-Medium.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-MediumItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-Regular.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-RegularItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-SemiBold.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-SemiBoldItalic.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-Thin.woff2 +0 -0
- package/dist/src/assets/assets/Metropolis-ThinItalic.woff2 +0 -0
- package/dist/src/assets/assets/logo.png +0 -0
- package/dist/src/assets/logo.png +0 -0
- package/dist/src/factories/AddressFactory.d.ts +10 -0
- package/dist/src/factories/AddressFactory.d.ts.map +1 -0
- package/dist/src/factories/AddressFactory.js +42 -0
- package/dist/src/factories/AddressFactory.js.map +1 -0
- package/dist/src/factories/EmergencyContactFactory.d.ts +9 -0
- package/dist/src/factories/EmergencyContactFactory.d.ts.map +1 -0
- package/dist/src/factories/EmergencyContactFactory.js +42 -0
- package/dist/src/factories/EmergencyContactFactory.js.map +1 -0
- package/dist/src/factories/GroupFactory.d.ts +19 -0
- package/dist/src/factories/GroupFactory.d.ts.map +1 -0
- package/dist/src/factories/GroupFactory.js +52 -0
- package/dist/src/factories/GroupFactory.js.map +1 -0
- package/dist/src/factories/MemberFactory.d.ts +16 -0
- package/dist/src/factories/MemberFactory.d.ts.map +1 -0
- package/dist/src/factories/MemberFactory.js +98 -0
- package/dist/src/factories/MemberFactory.js.map +1 -0
- package/dist/src/factories/OrganizationFactory.d.ts +16 -0
- package/dist/src/factories/OrganizationFactory.d.ts.map +1 -0
- package/dist/src/factories/OrganizationFactory.js +40 -0
- package/dist/src/factories/OrganizationFactory.js.map +1 -0
- package/dist/src/factories/ParentFactory.d.ts +10 -0
- package/dist/src/factories/ParentFactory.d.ts.map +1 -0
- package/dist/src/factories/ParentFactory.js +44 -0
- package/dist/src/factories/ParentFactory.js.map +1 -0
- package/dist/src/factories/RecordFactory.d.ts +10 -0
- package/dist/src/factories/RecordFactory.d.ts.map +1 -0
- package/dist/src/factories/RecordFactory.js +14 -0
- package/dist/src/factories/RecordFactory.js.map +1 -0
- package/dist/src/factories/RegisterCodeFactory.d.ts +18 -0
- package/dist/src/factories/RegisterCodeFactory.d.ts.map +1 -0
- package/dist/src/factories/RegisterCodeFactory.js +19 -0
- package/dist/src/factories/RegisterCodeFactory.js.map +1 -0
- package/dist/src/factories/RegistrationFactory.d.ts +14 -0
- package/dist/src/factories/RegistrationFactory.d.ts.map +1 -0
- package/dist/src/factories/RegistrationFactory.js +26 -0
- package/dist/src/factories/RegistrationFactory.js.map +1 -0
- package/dist/src/factories/UserFactory.d.ts +21 -0
- package/dist/src/factories/UserFactory.d.ts.map +1 -0
- package/dist/src/factories/UserFactory.js +41 -0
- package/dist/src/factories/UserFactory.js.map +1 -0
- package/dist/src/factories/WebshopFactory.d.ts +16 -0
- package/dist/src/factories/WebshopFactory.d.ts.map +1 -0
- package/dist/src/factories/WebshopFactory.js +35 -0
- package/dist/src/factories/WebshopFactory.js.map +1 -0
- package/dist/src/helpers/DNSValidator.d.ts +6 -0
- package/dist/src/helpers/DNSValidator.d.ts.map +1 -0
- package/dist/src/helpers/DNSValidator.js +144 -0
- package/dist/src/helpers/DNSValidator.js.map +1 -0
- package/dist/src/helpers/EmailBuilder.d.ts +22 -0
- package/dist/src/helpers/EmailBuilder.d.ts.map +1 -0
- package/dist/src/helpers/EmailBuilder.js +100 -0
- package/dist/src/helpers/EmailBuilder.js.map +1 -0
- package/dist/src/helpers/GroupBuilder.d.ts +9 -0
- package/dist/src/helpers/GroupBuilder.d.ts.map +1 -0
- package/dist/src/helpers/GroupBuilder.js +382 -0
- package/dist/src/helpers/GroupBuilder.js.map +1 -0
- package/dist/src/helpers/Handlebars.d.ts +2 -0
- package/dist/src/helpers/Handlebars.d.ts.map +1 -0
- package/dist/src/helpers/Handlebars.js +192 -0
- package/dist/src/helpers/Handlebars.js.map +1 -0
- package/dist/src/helpers/InvoiceBuilder.d.ts +29 -0
- package/dist/src/helpers/InvoiceBuilder.d.ts.map +1 -0
- package/dist/src/helpers/InvoiceBuilder.js +406 -0
- package/dist/src/helpers/InvoiceBuilder.js.map +1 -0
- package/dist/src/helpers/InvoiceBuilder.test.d.ts +2 -0
- package/dist/src/helpers/InvoiceBuilder.test.d.ts.map +1 -0
- package/dist/src/helpers/InvoiceBuilder.test.js +52 -0
- package/dist/src/helpers/InvoiceBuilder.test.js.map +1 -0
- package/dist/src/helpers/RateLimiter.d.ts +27 -0
- package/dist/src/helpers/RateLimiter.d.ts.map +1 -0
- package/dist/src/helpers/RateLimiter.js +57 -0
- package/dist/src/helpers/RateLimiter.js.map +1 -0
- package/dist/src/helpers/WebshopCounter.d.ts +6 -0
- package/dist/src/helpers/WebshopCounter.d.ts.map +1 -0
- package/dist/src/helpers/WebshopCounter.js +36 -0
- package/dist/src/helpers/WebshopCounter.js.map +1 -0
- package/dist/src/helpers/WebshopCounter.test.d.ts +2 -0
- package/dist/src/helpers/WebshopCounter.test.d.ts.map +1 -0
- package/dist/src/helpers/WebshopCounter.test.js +17 -0
- package/dist/src/helpers/WebshopCounter.test.js.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +23 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/migrations/1593773929-create-initial-tables.sql +634 -0
- package/dist/src/migrations/1605261999-gemeenten-tmp.sql +2820 -0
- package/dist/src/migrations/1605262045-import-postcodes.d.ts +16 -0
- package/dist/src/migrations/1605262045-import-postcodes.d.ts.map +1 -0
- package/dist/src/migrations/1605262045-import-postcodes.js +116 -0
- package/dist/src/migrations/1605262045-import-postcodes.js.map +1 -0
- package/dist/src/migrations/1605262046-import-postcodes-nl.d.ts +4 -0
- package/dist/src/migrations/1605262046-import-postcodes-nl.d.ts.map +1 -0
- package/dist/src/migrations/1605262046-import-postcodes-nl.js +83 -0
- package/dist/src/migrations/1605262046-import-postcodes-nl.js.map +1 -0
- package/dist/src/migrations/1605279038-drop-gemeenten-tmp.sql +1 -0
- package/dist/src/migrations/1648392491-default-templates.sql +9 -0
- package/dist/src/migrations/1651245707-default-templates-reminders.sql +6 -0
- package/dist/src/migrations/1708607340-tickets-deleted-at.sql +1 -0
- package/dist/src/migrations/1710459176-register-code-invoices.sql +3 -0
- package/dist/src/migrations/1712158247-discount-codes.sql +17 -0
- package/dist/src/migrations/1713178665-drop-invites.sql +1 -0
- package/dist/src/migrations/1713178666-drop-keychain.sql +1 -0
- package/dist/src/migrations/1713178667-drop-challenges.sql +1 -0
- package/dist/src/migrations/1713178668-drop-user-keys.sql +7 -0
- package/dist/src/migrations/1713178669-drop-organization-key.sql +2 -0
- package/dist/src/migrations/data/postcodes/nl/Drenthe +291 -0
- package/dist/src/migrations/data/postcodes/nl/Flevoland +107 -0
- package/dist/src/migrations/data/postcodes/nl/Friesland +518 -0
- package/dist/src/migrations/data/postcodes/nl/Gelderland +601 -0
- package/dist/src/migrations/data/postcodes/nl/Groningen +279 -0
- package/dist/src/migrations/data/postcodes/nl/Limburg +324 -0
- package/dist/src/migrations/data/postcodes/nl/Noord-Brabant +620 -0
- package/dist/src/migrations/data/postcodes/nl/Noord-Holland +566 -0
- package/dist/src/migrations/data/postcodes/nl/Overrijsel +344 -0
- package/dist/src/migrations/data/postcodes/nl/Utrecht +278 -0
- package/dist/src/migrations/data/postcodes/nl/Zeeland +179 -0
- package/dist/src/migrations/data/postcodes/nl/Zuid-Holland +662 -0
- package/dist/src/models/BalanceItem.d.ts +57 -0
- package/dist/src/models/BalanceItem.d.ts.map +1 -0
- package/dist/src/models/BalanceItem.js +346 -0
- package/dist/src/models/BalanceItem.js.map +1 -0
- package/dist/src/models/BalanceItemPayment.d.ts +31 -0
- package/dist/src/models/BalanceItemPayment.d.ts.map +1 -0
- package/dist/src/models/BalanceItemPayment.js +101 -0
- package/dist/src/models/BalanceItemPayment.js.map +1 -0
- package/dist/src/models/BuckarooPayment.d.ts +8 -0
- package/dist/src/models/BuckarooPayment.d.ts.map +1 -0
- package/dist/src/models/BuckarooPayment.js +24 -0
- package/dist/src/models/BuckarooPayment.js.map +1 -0
- package/dist/src/models/Document.d.ts +44 -0
- package/dist/src/models/Document.d.ts.map +1 -0
- package/dist/src/models/Document.js +194 -0
- package/dist/src/models/Document.js.map +1 -0
- package/dist/src/models/DocumentTemplate.d.ts +45 -0
- package/dist/src/models/DocumentTemplate.d.ts.map +1 -0
- package/dist/src/models/DocumentTemplate.js +533 -0
- package/dist/src/models/DocumentTemplate.js.map +1 -0
- package/dist/src/models/EmailTemplate.d.ts +22 -0
- package/dist/src/models/EmailTemplate.d.ts.map +1 -0
- package/dist/src/models/EmailTemplate.js +70 -0
- package/dist/src/models/EmailTemplate.js.map +1 -0
- package/dist/src/models/EmailVerificationCode.d.ts +60 -0
- package/dist/src/models/EmailVerificationCode.d.ts.map +1 -0
- package/dist/src/models/EmailVerificationCode.js +307 -0
- package/dist/src/models/EmailVerificationCode.js.map +1 -0
- package/dist/src/models/Group.d.ts +36 -0
- package/dist/src/models/Group.d.ts.map +1 -0
- package/dist/src/models/Group.js +231 -0
- package/dist/src/models/Group.js.map +1 -0
- package/dist/src/models/Image.d.ts +12 -0
- package/dist/src/models/Image.d.ts.map +1 -0
- package/dist/src/models/Image.js +137 -0
- package/dist/src/models/Image.js.map +1 -0
- package/dist/src/models/Member.d.ts +66 -0
- package/dist/src/models/Member.d.ts.map +1 -0
- package/dist/src/models/Member.js +309 -0
- package/dist/src/models/Member.js.map +1 -0
- package/dist/src/models/MemberResponsibilityRecord.d.ts +11 -0
- package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -0
- package/dist/src/models/MemberResponsibilityRecord.js +47 -0
- package/dist/src/models/MemberResponsibilityRecord.js.map +1 -0
- package/dist/src/models/MolliePayment.d.ts +8 -0
- package/dist/src/models/MolliePayment.d.ts.map +1 -0
- package/dist/src/models/MolliePayment.js +24 -0
- package/dist/src/models/MolliePayment.js.map +1 -0
- package/dist/src/models/MollieToken.d.ts +45 -0
- package/dist/src/models/MollieToken.d.ts.map +1 -0
- package/dist/src/models/MollieToken.js +333 -0
- package/dist/src/models/MollieToken.js.map +1 -0
- package/dist/src/models/OneTimeToken.d.ts +38 -0
- package/dist/src/models/OneTimeToken.d.ts.map +1 -0
- package/dist/src/models/OneTimeToken.js +126 -0
- package/dist/src/models/OneTimeToken.js.map +1 -0
- package/dist/src/models/Order.d.ts +99 -0
- package/dist/src/models/Order.d.ts.map +1 -0
- package/dist/src/models/Order.js +912 -0
- package/dist/src/models/Order.js.map +1 -0
- package/dist/src/models/Organization.d.ts +119 -0
- package/dist/src/models/Organization.d.ts.map +1 -0
- package/dist/src/models/Organization.js +900 -0
- package/dist/src/models/Organization.js.map +1 -0
- package/dist/src/models/OrganizationRegistrationPeriod.d.ts +14 -0
- package/dist/src/models/OrganizationRegistrationPeriod.d.ts.map +1 -0
- package/dist/src/models/OrganizationRegistrationPeriod.js +62 -0
- package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -0
- package/dist/src/models/PasswordToken.d.ts +29 -0
- package/dist/src/models/PasswordToken.d.ts.map +1 -0
- package/dist/src/models/PasswordToken.js +118 -0
- package/dist/src/models/PasswordToken.js.map +1 -0
- package/dist/src/models/PayconiqPayment.d.ts +18 -0
- package/dist/src/models/PayconiqPayment.d.ts.map +1 -0
- package/dist/src/models/PayconiqPayment.js +216 -0
- package/dist/src/models/PayconiqPayment.js.map +1 -0
- package/dist/src/models/Payment.d.ts +62 -0
- package/dist/src/models/Payment.d.ts.map +1 -0
- package/dist/src/models/Payment.js +199 -0
- package/dist/src/models/Payment.js.map +1 -0
- package/dist/src/models/Platform.d.ts +15 -0
- package/dist/src/models/Platform.d.ts.map +1 -0
- package/dist/src/models/Platform.js +77 -0
- package/dist/src/models/Platform.js.map +1 -0
- package/dist/src/models/RegisterCode.d.ts +27 -0
- package/dist/src/models/RegisterCode.d.ts.map +1 -0
- package/dist/src/models/RegisterCode.js +162 -0
- package/dist/src/models/RegisterCode.js.map +1 -0
- package/dist/src/models/Registration.d.ts +47 -0
- package/dist/src/models/Registration.d.ts.map +1 -0
- package/dist/src/models/Registration.js +369 -0
- package/dist/src/models/Registration.js.map +1 -0
- package/dist/src/models/RegistrationPeriod.d.ts +15 -0
- package/dist/src/models/RegistrationPeriod.d.ts.map +1 -0
- package/dist/src/models/RegistrationPeriod.js +64 -0
- package/dist/src/models/RegistrationPeriod.js.map +1 -0
- package/dist/src/models/STCredit.d.ts +20 -0
- package/dist/src/models/STCredit.d.ts.map +1 -0
- package/dist/src/models/STCredit.js +129 -0
- package/dist/src/models/STCredit.js.map +1 -0
- package/dist/src/models/STInvoice.d.ts +51 -0
- package/dist/src/models/STInvoice.d.ts.map +1 -0
- package/dist/src/models/STInvoice.js +453 -0
- package/dist/src/models/STInvoice.js.map +1 -0
- package/dist/src/models/STPackage.d.ts +36 -0
- package/dist/src/models/STPackage.d.ts.map +1 -0
- package/dist/src/models/STPackage.js +300 -0
- package/dist/src/models/STPackage.js.map +1 -0
- package/dist/src/models/STPendingInvoice.d.ts +45 -0
- package/dist/src/models/STPendingInvoice.d.ts.map +1 -0
- package/dist/src/models/STPendingInvoice.js +284 -0
- package/dist/src/models/STPendingInvoice.js.map +1 -0
- package/dist/src/models/StripeAccount.d.ts +17 -0
- package/dist/src/models/StripeAccount.d.ts.map +1 -0
- package/dist/src/models/StripeAccount.js +81 -0
- package/dist/src/models/StripeAccount.js.map +1 -0
- package/dist/src/models/StripeCheckoutSession.d.ts +9 -0
- package/dist/src/models/StripeCheckoutSession.d.ts.map +1 -0
- package/dist/src/models/StripeCheckoutSession.js +31 -0
- package/dist/src/models/StripeCheckoutSession.js.map +1 -0
- package/dist/src/models/StripePaymentIntent.d.ts +9 -0
- package/dist/src/models/StripePaymentIntent.d.ts.map +1 -0
- package/dist/src/models/StripePaymentIntent.js +31 -0
- package/dist/src/models/StripePaymentIntent.js.map +1 -0
- package/dist/src/models/Ticket.d.ts +61 -0
- package/dist/src/models/Ticket.d.ts.map +1 -0
- package/dist/src/models/Ticket.js +143 -0
- package/dist/src/models/Ticket.js.map +1 -0
- package/dist/src/models/Token.d.ts +49 -0
- package/dist/src/models/Token.d.ts.map +1 -0
- package/dist/src/models/Token.js +218 -0
- package/dist/src/models/Token.js.map +1 -0
- package/dist/src/models/Token.test.d.ts +2 -0
- package/dist/src/models/Token.test.d.ts.map +1 -0
- package/dist/src/models/Token.test.js +60 -0
- package/dist/src/models/Token.test.js.map +1 -0
- package/dist/src/models/UsedRegisterCode.d.ts +22 -0
- package/dist/src/models/UsedRegisterCode.d.ts.map +1 -0
- package/dist/src/models/UsedRegisterCode.js +158 -0
- package/dist/src/models/UsedRegisterCode.js.map +1 -0
- package/dist/src/models/User.d.ts +55 -0
- package/dist/src/models/User.d.ts.map +1 -0
- package/dist/src/models/User.js +314 -0
- package/dist/src/models/User.js.map +1 -0
- package/dist/src/models/UserPermissions.d.ts +15 -0
- package/dist/src/models/UserPermissions.d.ts.map +1 -0
- package/dist/src/models/UserPermissions.js +57 -0
- package/dist/src/models/UserPermissions.js.map +1 -0
- package/dist/src/models/Webshop.d.ts +44 -0
- package/dist/src/models/Webshop.d.ts.map +1 -0
- package/dist/src/models/Webshop.js +184 -0
- package/dist/src/models/Webshop.js.map +1 -0
- package/dist/src/models/WebshopDiscountCode.d.ts +18 -0
- package/dist/src/models/WebshopDiscountCode.d.ts.map +1 -0
- package/dist/src/models/WebshopDiscountCode.js +88 -0
- package/dist/src/models/WebshopDiscountCode.js.map +1 -0
- package/dist/src/models/addresses/City.d.ts +14 -0
- package/dist/src/models/addresses/City.d.ts.map +1 -0
- package/dist/src/models/addresses/City.js +37 -0
- package/dist/src/models/addresses/City.js.map +1 -0
- package/dist/src/models/addresses/PostalCode.d.ts +20 -0
- package/dist/src/models/addresses/PostalCode.d.ts.map +1 -0
- package/dist/src/models/addresses/PostalCode.js +138 -0
- package/dist/src/models/addresses/PostalCode.js.map +1 -0
- package/dist/src/models/addresses/PostalCode.test.d.ts +2 -0
- package/dist/src/models/addresses/PostalCode.test.d.ts.map +1 -0
- package/dist/src/models/addresses/PostalCode.test.js +98 -0
- package/dist/src/models/addresses/PostalCode.test.js.map +1 -0
- package/dist/src/models/addresses/Province.d.ts +9 -0
- package/dist/src/models/addresses/Province.d.ts.map +1 -0
- package/dist/src/models/addresses/Province.js +24 -0
- package/dist/src/models/addresses/Province.js.map +1 -0
- package/dist/src/models/addresses/Street.d.ts +10 -0
- package/dist/src/models/addresses/Street.d.ts.map +1 -0
- package/dist/src/models/addresses/Street.js +26 -0
- package/dist/src/models/addresses/Street.js.map +1 -0
- package/dist/src/models/index.d.ts +37 -0
- package/dist/src/models/index.d.ts.map +1 -0
- package/dist/src/models/index.js +53 -0
- package/dist/src/models/index.js.map +1 -0
- package/dist/src/structures/OrganizationServerMetaData.d.ts +43 -0
- package/dist/src/structures/OrganizationServerMetaData.d.ts.map +1 -0
- package/dist/src/structures/OrganizationServerMetaData.js +128 -0
- package/dist/src/structures/OrganizationServerMetaData.js.map +1 -0
- package/dist/tests/jest.global.setup.d.ts +3 -0
- package/dist/tests/jest.global.setup.d.ts.map +1 -0
- package/dist/tests/jest.global.setup.js +20 -0
- package/dist/tests/jest.global.setup.js.map +1 -0
- package/dist/tests/jest.setup.d.ts +2 -0
- package/dist/tests/jest.setup.d.ts.map +1 -0
- package/dist/tests/jest.setup.js +15 -0
- package/dist/tests/jest.setup.js.map +1 -0
- package/package.json +30 -0
- package/src/assets/Metropolis-Black.woff2 +0 -0
- package/src/assets/Metropolis-BlackItalic.woff2 +0 -0
- package/src/assets/Metropolis-Bold.woff2 +0 -0
- package/src/assets/Metropolis-BoldItalic.woff2 +0 -0
- package/src/assets/Metropolis-ExtraBold.woff2 +0 -0
- package/src/assets/Metropolis-ExtraBoldItalic.woff2 +0 -0
- package/src/assets/Metropolis-ExtraLight.woff2 +0 -0
- package/src/assets/Metropolis-ExtraLightItalic.woff2 +0 -0
- package/src/assets/Metropolis-Light.woff2 +0 -0
- package/src/assets/Metropolis-LightItalic.woff2 +0 -0
- package/src/assets/Metropolis-Medium.woff2 +0 -0
- package/src/assets/Metropolis-MediumItalic.woff2 +0 -0
- package/src/assets/Metropolis-Regular.woff2 +0 -0
- package/src/assets/Metropolis-RegularItalic.woff2 +0 -0
- package/src/assets/Metropolis-SemiBold.woff2 +0 -0
- package/src/assets/Metropolis-SemiBoldItalic.woff2 +0 -0
- package/src/assets/Metropolis-Thin.woff2 +0 -0
- package/src/assets/Metropolis-ThinItalic.woff2 +0 -0
- package/src/assets/logo.png +0 -0
- package/src/factories/AddressFactory.ts +42 -0
- package/src/factories/EmergencyContactFactory.ts +43 -0
- package/src/factories/GroupFactory.ts +66 -0
- package/src/factories/MemberFactory.ts +122 -0
- package/src/factories/OrganizationFactory.ts +45 -0
- package/src/factories/ParentFactory.ts +49 -0
- package/src/factories/RecordFactory.ts +12 -0
- package/src/factories/RegisterCodeFactory.ts +25 -0
- package/src/factories/RegistrationFactory.ts +32 -0
- package/src/factories/UserFactory.ts +66 -0
- package/src/factories/WebshopFactory.ts +43 -0
- package/src/helpers/DNSValidator.ts +153 -0
- package/src/helpers/EmailBuilder.ts +127 -0
- package/src/helpers/GroupBuilder.ts +438 -0
- package/src/helpers/Handlebars.ts +203 -0
- package/src/helpers/InvoiceBuilder.test.ts +57 -0
- package/src/helpers/InvoiceBuilder.ts +501 -0
- package/src/helpers/RateLimiter.ts +75 -0
- package/src/helpers/WebshopCounter.test.ts +16 -0
- package/src/helpers/WebshopCounter.ts +36 -0
- package/src/index.ts +21 -0
- package/src/migrations/1593773929-create-initial-tables.sql +634 -0
- package/src/migrations/1605261999-gemeenten-tmp.sql +2820 -0
- package/src/migrations/1605262045-import-postcodes.ts +132 -0
- package/src/migrations/1605262046-import-postcodes-nl.ts +97 -0
- package/src/migrations/1605279038-drop-gemeenten-tmp.sql +1 -0
- package/src/migrations/1648392491-default-templates.sql +9 -0
- package/src/migrations/1651245707-default-templates-reminders.sql +6 -0
- package/src/migrations/1708607340-tickets-deleted-at.sql +1 -0
- package/src/migrations/1710459176-register-code-invoices.sql +3 -0
- package/src/migrations/1712158247-discount-codes.sql +17 -0
- package/src/migrations/1713178665-drop-invites.sql +1 -0
- package/src/migrations/1713178666-drop-keychain.sql +1 -0
- package/src/migrations/1713178667-drop-challenges.sql +1 -0
- package/src/migrations/1713178668-drop-user-keys.sql +7 -0
- package/src/migrations/1713178669-drop-organization-key.sql +2 -0
- package/src/migrations/1714985451-user-nullable-organization-id.sql +2 -0
- package/src/migrations/1714985452-email-verification-code-nullable-organization-id.sql +2 -0
- package/src/migrations/1714985453-user-organization-permissions.sql +2 -0
- package/src/migrations/1714985454-user-organization-permissions.sql +2 -0
- package/src/migrations/1715079362-platform.sql +6 -0
- package/src/migrations/1715181649-registrations-organization-id.sql +2 -0
- package/src/migrations/1715181650-registrations-organization-id-fill.sql +1 -0
- package/src/migrations/1715181651-registrations-organization-id-drop-null.sql +2 -0
- package/src/migrations/1716117067-members-nullable-organization-id.sql +2 -0
- package/src/migrations/1719567581-registration-periods.sql +13 -0
- package/src/migrations/1719567582-organization-registration-periods.sql +13 -0
- package/src/migrations/1719567881-organization-periodId.sql +2 -0
- package/src/migrations/1719567882-groups-periodId.sql +2 -0
- package/src/migrations/1719567883-platform-periodId.sql +2 -0
- package/src/migrations/1719568079-default-period.sql +2 -0
- package/src/migrations/1719568080-set-default-period-platform.sql +1 -0
- package/src/migrations/1719568081-set-default-period-organizations.sql +1 -0
- package/src/migrations/1719568082-set-default-period-groups.sql +1 -0
- package/src/migrations/1719580828-registrations-periodId.sql +2 -0
- package/src/migrations/1719580829-set-default-period-registrations.sql +1 -0
- package/src/migrations/data/postcodes/nl/Drenthe +291 -0
- package/src/migrations/data/postcodes/nl/Flevoland +107 -0
- package/src/migrations/data/postcodes/nl/Friesland +518 -0
- package/src/migrations/data/postcodes/nl/Gelderland +601 -0
- package/src/migrations/data/postcodes/nl/Groningen +279 -0
- package/src/migrations/data/postcodes/nl/Limburg +324 -0
- package/src/migrations/data/postcodes/nl/Noord-Brabant +620 -0
- package/src/migrations/data/postcodes/nl/Noord-Holland +566 -0
- package/src/migrations/data/postcodes/nl/Overrijsel +344 -0
- package/src/migrations/data/postcodes/nl/Utrecht +278 -0
- package/src/migrations/data/postcodes/nl/Zeeland +179 -0
- package/src/migrations/data/postcodes/nl/Zuid-Holland +662 -0
- package/src/models/BalanceItem.ts +392 -0
- package/src/models/BalanceItemPayment.ts +106 -0
- package/src/models/BuckarooPayment.ts +19 -0
- package/src/models/Document.ts +203 -0
- package/src/models/DocumentTemplate.ts +583 -0
- package/src/models/EmailTemplate.ts +64 -0
- package/src/models/EmailVerificationCode.ts +352 -0
- package/src/models/Group.ts +293 -0
- package/src/models/Image.ts +147 -0
- package/src/models/Member.ts +386 -0
- package/src/models/MemberResponsibilityRecord.ts +39 -0
- package/src/models/MolliePayment.ts +19 -0
- package/src/models/MollieToken.ts +369 -0
- package/src/models/OneTimeToken.ts +131 -0
- package/src/models/Order.ts +1030 -0
- package/src/models/Organization.ts +1085 -0
- package/src/models/OrganizationRegistrationPeriod.ts +54 -0
- package/src/models/PasswordToken.ts +139 -0
- package/src/models/PayconiqPayment.ts +241 -0
- package/src/models/Payment.ts +216 -0
- package/src/models/Platform.ts +76 -0
- package/src/models/RegisterCode.ts +164 -0
- package/src/models/Registration.ts +405 -0
- package/src/models/RegistrationPeriod.ts +55 -0
- package/src/models/STCredit.ts +134 -0
- package/src/models/STInvoice.ts +507 -0
- package/src/models/STPackage.ts +324 -0
- package/src/models/STPendingInvoice.ts +308 -0
- package/src/models/StripeAccount.ts +71 -0
- package/src/models/StripeCheckoutSession.ts +22 -0
- package/src/models/StripePaymentIntent.ts +22 -0
- package/src/models/Ticket.ts +145 -0
- package/src/models/Token.test.ts +69 -0
- package/src/models/Token.ts +269 -0
- package/src/models/UsedRegisterCode.ts +166 -0
- package/src/models/User.ts +445 -0
- package/src/models/UserPermissions.ts +54 -0
- package/src/models/Webshop.ts +206 -0
- package/src/models/WebshopDiscountCode.ts +81 -0
- package/src/models/addresses/City.ts +31 -0
- package/src/models/addresses/PostalCode.test.ts +117 -0
- package/src/models/addresses/PostalCode.ts +164 -0
- package/src/models/addresses/Province.ts +20 -0
- package/src/models/addresses/Street.ts +25 -0
- package/src/models/index.ts +49 -0
- package/src/structures/OrganizationServerMetaData.ts +117 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailTemplate = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const simple_database_1 = require("@simonbackx/simple-database");
|
|
6
|
+
const simple_encoding_1 = require("@simonbackx/simple-encoding");
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
/**
|
|
9
|
+
* Holds the challenges for a given email. User should not exist, since that would allow user enumeration attacks
|
|
10
|
+
*/
|
|
11
|
+
class EmailTemplate extends simple_database_1.Model {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.groupId = null;
|
|
15
|
+
this.webshopId = null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.EmailTemplate = EmailTemplate;
|
|
19
|
+
EmailTemplate.table = "email_templates";
|
|
20
|
+
tslib_1.__decorate([
|
|
21
|
+
(0, simple_database_1.column)({
|
|
22
|
+
primary: true, type: "string", beforeSave(value) {
|
|
23
|
+
return value !== null && value !== void 0 ? value : (0, uuid_1.v4)();
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
], EmailTemplate.prototype, "id", void 0);
|
|
27
|
+
tslib_1.__decorate([
|
|
28
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
29
|
+
], EmailTemplate.prototype, "subject", void 0);
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
(0, simple_database_1.column)({ type: "string", nullable: true })
|
|
32
|
+
], EmailTemplate.prototype, "organizationId", void 0);
|
|
33
|
+
tslib_1.__decorate([
|
|
34
|
+
(0, simple_database_1.column)({ type: "string", nullable: true })
|
|
35
|
+
], EmailTemplate.prototype, "groupId", void 0);
|
|
36
|
+
tslib_1.__decorate([
|
|
37
|
+
(0, simple_database_1.column)({ type: "string", nullable: true })
|
|
38
|
+
], EmailTemplate.prototype, "webshopId", void 0);
|
|
39
|
+
tslib_1.__decorate([
|
|
40
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
41
|
+
], EmailTemplate.prototype, "type", void 0);
|
|
42
|
+
tslib_1.__decorate([
|
|
43
|
+
(0, simple_database_1.column)({ type: "json", decoder: simple_encoding_1.AnyDecoder })
|
|
44
|
+
], EmailTemplate.prototype, "json", void 0);
|
|
45
|
+
tslib_1.__decorate([
|
|
46
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
47
|
+
], EmailTemplate.prototype, "html", void 0);
|
|
48
|
+
tslib_1.__decorate([
|
|
49
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
50
|
+
], EmailTemplate.prototype, "text", void 0);
|
|
51
|
+
tslib_1.__decorate([
|
|
52
|
+
(0, simple_database_1.column)({
|
|
53
|
+
type: "datetime", beforeSave() {
|
|
54
|
+
const date = new Date();
|
|
55
|
+
date.setMilliseconds(0);
|
|
56
|
+
return date;
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
], EmailTemplate.prototype, "createdAt", void 0);
|
|
60
|
+
tslib_1.__decorate([
|
|
61
|
+
(0, simple_database_1.column)({
|
|
62
|
+
type: "datetime", beforeSave() {
|
|
63
|
+
const date = new Date();
|
|
64
|
+
date.setMilliseconds(0);
|
|
65
|
+
return date;
|
|
66
|
+
},
|
|
67
|
+
skipUpdate: true
|
|
68
|
+
})
|
|
69
|
+
], EmailTemplate.prototype, "updatedAt", void 0);
|
|
70
|
+
//# sourceMappingURL=EmailTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailTemplate.js","sourceRoot":"","sources":["../../../src/models/EmailTemplate.ts"],"names":[],"mappings":";;;;AAAA,iEAA4D;AAC5D,iEAAyD;AAEzD,+BAAoC;AAGpC;;GAEG;AACH,MAAa,aAAc,SAAQ,uBAAK;IAAxC;;QAiBI,YAAO,GAAkB,IAAI,CAAC;QAG9B,cAAS,GAAkB,IAAI,CAAC;IAkCpC,CAAC;;AAtDD,sCAsDC;AArDU,mBAAK,GAAG,iBAAiB,AAApB,CAAqB;AAOjC;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;yCACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC;8CACV;AAGhB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;qDACb;AAG9B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8CACb;AAG9B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gDACX;AAGhC;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;2CACH;AAIxB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,4BAAU,EAAE,CAAC;2CACpC;AAIV;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;2CACd;AAGb;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;2CACd;AASb;IAPC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU;YACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;KACJ,CAAC;gDACa;AAUf;IARC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU;YACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;QACD,UAAU,EAAE,IAAI;KACnB,CAAC;gDACa"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Model } from "@simonbackx/simple-database";
|
|
2
|
+
import { I18n } from "@stamhoofd/backend-i18n";
|
|
3
|
+
/**
|
|
4
|
+
* Holds the verificationCodes for a given email (not a user, since a user can switch email addresses and might avoid verification that way)
|
|
5
|
+
*/
|
|
6
|
+
export declare class EmailVerificationCode extends Model {
|
|
7
|
+
static table: string;
|
|
8
|
+
id: string;
|
|
9
|
+
organizationId: string;
|
|
10
|
+
userId: string;
|
|
11
|
+
/**
|
|
12
|
+
* The e-mail that will get verified. If on verification, the user e-mail differs from this one,
|
|
13
|
+
* we'll set the user email to this email address
|
|
14
|
+
*/
|
|
15
|
+
email: string;
|
|
16
|
+
/**
|
|
17
|
+
* This one is send to the sender. Allows for polling + extra length + sender authentication
|
|
18
|
+
*/
|
|
19
|
+
token: string;
|
|
20
|
+
code: string;
|
|
21
|
+
/**
|
|
22
|
+
* The amount of times this code has been generated for the same e-mail address
|
|
23
|
+
*/
|
|
24
|
+
generatedCount: number;
|
|
25
|
+
/**
|
|
26
|
+
* The amount of times this unique code has been tried.
|
|
27
|
+
*/
|
|
28
|
+
tries: number;
|
|
29
|
+
expiresAt: Date;
|
|
30
|
+
/**
|
|
31
|
+
* createdAt behaves more like createdAt for verificationCode. Since every save is considered to have a new verificationCode
|
|
32
|
+
*/
|
|
33
|
+
createdAt: Date;
|
|
34
|
+
static CODE_LENGTH: number;
|
|
35
|
+
static MAX_TRIES: number;
|
|
36
|
+
static getFor(organizationId: string, email: string): Promise<EmailVerificationCode | undefined>;
|
|
37
|
+
generateCode(): Promise<void>;
|
|
38
|
+
getEmailVerificationUrl(user: import('./User').User, organization: import('./Organization').Organization, i18n: I18n): string;
|
|
39
|
+
/**
|
|
40
|
+
* Return true if this token is still valid (used for automatic polling in code view)
|
|
41
|
+
*/
|
|
42
|
+
static poll(organizationId: string, token: string): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* We don't throw errors here, because we don't want to expose any information about the existance of the code.
|
|
45
|
+
* We just expose if it is valid or not, nothing else
|
|
46
|
+
* False = expired or invalid
|
|
47
|
+
* Error => token okay, but too many attempts checking the code
|
|
48
|
+
*
|
|
49
|
+
*/
|
|
50
|
+
static verify(organizationId: string, token: string, code: string): Promise<EmailVerificationCode | undefined>;
|
|
51
|
+
send(user: import('./User').User, organization: import('./Organization').Organization, i18n: I18n, withCode?: boolean): void;
|
|
52
|
+
static resend(organization: import('./Organization').Organization, token: string, i18n: I18n): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Create or reuse a verification code for a given email address
|
|
55
|
+
* If needed, it will update the code.
|
|
56
|
+
* Use this method for sending only, not for verification!
|
|
57
|
+
*/
|
|
58
|
+
static createFor(user: import('./User').User, email: string): Promise<EmailVerificationCode>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=EmailVerificationCode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailVerificationCode.d.ts","sourceRoot":"","sources":["../../../src/models/EmailVerificationCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAkC/C;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC5C,MAAM,CAAC,KAAK,SAA8B;IAO1C,EAAE,EAAG,MAAM,CAAC;IAGZ,cAAc,EAAE,MAAM,CAAC;IAGvB,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IAEH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IAEH,KAAK,SAAM;IAGX,IAAI,SAAM;IAEV;;OAEG;IAEH,cAAc,SAAK;IAEnB;;OAEG;IAEH,KAAK,SAAK;IAGV,SAAS,EAAE,IAAI,CAAC;IAEhB;;OAEG;IAQH,SAAS,EAAE,IAAI,CAAA;IAEf,MAAM,CAAC,WAAW,SAAI;IACtB,MAAM,CAAC,SAAS,SAAI;WAIP,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAgBhG,YAAY;IAiBlB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI;IAgBpH;;OAEG;WACU,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1E;;;;;;OAMG;WACU,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IA0DpH,IAAI,CAAC,IAAI,EAAE,OAAO,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,UAAO;WAkCrG,MAAM,CAAC,YAAY,EAAE,OAAO,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAyBlG;;;;OAIG;WACU,SAAS,CAAC,IAAI,EAAE,OAAO,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAuCrG"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailVerificationCode = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const simple_database_1 = require("@simonbackx/simple-database");
|
|
6
|
+
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
7
|
+
const email_1 = require("@stamhoofd/email");
|
|
8
|
+
const base_x_1 = tslib_1.__importDefault(require("base-x"));
|
|
9
|
+
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
10
|
+
const uuid_1 = require("uuid");
|
|
11
|
+
const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
12
|
+
const bs58 = (0, base_x_1.default)(ALPHABET);
|
|
13
|
+
async function randomBytes(size) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
crypto_1.default.randomBytes(size, (err, buf) => {
|
|
16
|
+
if (err) {
|
|
17
|
+
reject(err);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
resolve(buf);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async function randomInt(max) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
crypto_1.default.randomInt(max, (err, n) => {
|
|
27
|
+
if (err) {
|
|
28
|
+
reject(err);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
resolve(n);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Holds the verificationCodes for a given email (not a user, since a user can switch email addresses and might avoid verification that way)
|
|
37
|
+
*/
|
|
38
|
+
class EmailVerificationCode extends simple_database_1.Model {
|
|
39
|
+
constructor() {
|
|
40
|
+
super(...arguments);
|
|
41
|
+
/**
|
|
42
|
+
* This one is send to the sender. Allows for polling + extra length + sender authentication
|
|
43
|
+
*/
|
|
44
|
+
this.token = "";
|
|
45
|
+
this.code = "";
|
|
46
|
+
/**
|
|
47
|
+
* The amount of times this code has been generated for the same e-mail address
|
|
48
|
+
*/
|
|
49
|
+
this.generatedCount = 0;
|
|
50
|
+
/**
|
|
51
|
+
* The amount of times this unique code has been tried.
|
|
52
|
+
*/
|
|
53
|
+
this.tries = 0;
|
|
54
|
+
}
|
|
55
|
+
// static user = new ManyToOneRelation(require('./User').default, "user");
|
|
56
|
+
static async getFor(organizationId, email) {
|
|
57
|
+
// TODO: make this constant time to avoid complex timing attacks (especially when under load)
|
|
58
|
+
// Do we already have a verificationCode for this email?
|
|
59
|
+
const verificationCodes = await this.where({ email, organizationId }, { limit: 1 });
|
|
60
|
+
if (verificationCodes.length == 1) {
|
|
61
|
+
const verificationCode = verificationCodes[0];
|
|
62
|
+
if (verificationCode.expiresAt < new Date()) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
return verificationCode;
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
async generateCode() {
|
|
70
|
+
this.code = ((await randomInt(Math.pow(10, EmailVerificationCode.CODE_LENGTH))) + "").padStart(EmailVerificationCode.CODE_LENGTH, "0");
|
|
71
|
+
this.token = bs58.encode(await randomBytes(100)).toLowerCase();
|
|
72
|
+
// Increase generatedCount if we changed the code
|
|
73
|
+
if (this.tries > 0) {
|
|
74
|
+
// For statistics (how many did they try and had to resend the email)
|
|
75
|
+
this.generatedCount++;
|
|
76
|
+
}
|
|
77
|
+
// Reset the real tries
|
|
78
|
+
this.tries = 0;
|
|
79
|
+
// Expire in 3 hours
|
|
80
|
+
this.expiresAt = new Date(new Date().getTime() + 1000 * 60 * 60 * 3);
|
|
81
|
+
}
|
|
82
|
+
getEmailVerificationUrl(user, organization, i18n) {
|
|
83
|
+
var _a;
|
|
84
|
+
let host;
|
|
85
|
+
if (user.permissions) {
|
|
86
|
+
host = "https://" + ((_a = STAMHOOFD.domains.dashboard) !== null && _a !== void 0 ? _a : "stamhoofd.app") + "/" + i18n.locale;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Add language if different than default
|
|
90
|
+
host = "https://" + organization.getHost();
|
|
91
|
+
if (i18n.language != organization.i18n.language) {
|
|
92
|
+
host += "/" + i18n.language;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return host + "/verify-email" + (user.permissions ? "/" + encodeURIComponent(organization.id) : "") + "?code=" + encodeURIComponent(this.code) + "&token=" + encodeURIComponent(this.token);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Return true if this token is still valid (used for automatic polling in code view)
|
|
99
|
+
*/
|
|
100
|
+
static async poll(organizationId, token) {
|
|
101
|
+
const verificationCodes = await this.where({ token, organizationId }, { limit: 1 });
|
|
102
|
+
if (verificationCodes.length == 0) {
|
|
103
|
+
return false; // = expired or invalid
|
|
104
|
+
}
|
|
105
|
+
const verificationCode = verificationCodes[0];
|
|
106
|
+
if (verificationCode.token !== token) {
|
|
107
|
+
// Safety check, is not possible
|
|
108
|
+
console.error("Security check failed for verify: check MySQL optimization");
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
if (verificationCode.expiresAt < new Date()) {
|
|
112
|
+
// Expired.
|
|
113
|
+
// Can't expose this because that would expose a user enumeration attack
|
|
114
|
+
// -> we'll include this expiry date in e-mails
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if (verificationCode.tries >= EmailVerificationCode.MAX_TRIES) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* We don't throw errors here, because we don't want to expose any information about the existance of the code.
|
|
124
|
+
* We just expose if it is valid or not, nothing else
|
|
125
|
+
* False = expired or invalid
|
|
126
|
+
* Error => token okay, but too many attempts checking the code
|
|
127
|
+
*
|
|
128
|
+
*/
|
|
129
|
+
static async verify(organizationId, token, code) {
|
|
130
|
+
if (code.length != EmailVerificationCode.CODE_LENGTH) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const verificationCodes = await this.where({ token, organizationId }, { limit: 1 });
|
|
134
|
+
if (verificationCodes.length == 0) {
|
|
135
|
+
return; // = expired or invalid
|
|
136
|
+
}
|
|
137
|
+
const verificationCode = verificationCodes[0];
|
|
138
|
+
if (verificationCode.token !== token) {
|
|
139
|
+
// Safety check, is not possible
|
|
140
|
+
console.error("Security check failed for verify: check MySQL optimization");
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (verificationCode.expiresAt < new Date()) {
|
|
144
|
+
// Expired.
|
|
145
|
+
// Can't expose this because that would expose a user enumeration attack
|
|
146
|
+
// -> we'll include this expiry date in e-mails
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (verificationCode.tries >= EmailVerificationCode.MAX_TRIES) {
|
|
150
|
+
// We can saferly inform the user, because he is authenticated with the token
|
|
151
|
+
throw new simple_errors_1.SimpleError({
|
|
152
|
+
code: "too_many_attempts",
|
|
153
|
+
message: "Too many attempts",
|
|
154
|
+
human: "Je hebt de code te veel foutief ingegeven. Verstuur eerst een nieuwe code voor je opnieuw probeert.",
|
|
155
|
+
statusCode: 429
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (verificationCode.code === code || (code === "111111" && STAMHOOFD.environment === "development")) {
|
|
159
|
+
// Delete all remaining information!
|
|
160
|
+
// To avoid leaving information about the existince of this user (tries)
|
|
161
|
+
await verificationCode.delete();
|
|
162
|
+
return verificationCode;
|
|
163
|
+
}
|
|
164
|
+
verificationCode.tries++;
|
|
165
|
+
await verificationCode.save();
|
|
166
|
+
if (verificationCode.tries >= EmailVerificationCode.MAX_TRIES) {
|
|
167
|
+
// We can saferly inform the user, because he is authenticated with the token
|
|
168
|
+
throw new simple_errors_1.SimpleError({
|
|
169
|
+
code: "too_many_attempts",
|
|
170
|
+
message: "Too many attempts",
|
|
171
|
+
human: "Je hebt de code te veel foutief ingegeven. Verstuur eerst een nieuwe code voor je opnieuw probeert.",
|
|
172
|
+
statusCode: 429
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
send(user, organization, i18n, withCode = true) {
|
|
177
|
+
const { from, replyTo } = {
|
|
178
|
+
from: (user.permissions ? email_1.Email.getInternalEmailFor(i18n) : organization.getStrongEmail(i18n)),
|
|
179
|
+
replyTo: undefined // Don't use replyTo because it affects deliverability rates due to spam filters
|
|
180
|
+
};
|
|
181
|
+
const url = this.getEmailVerificationUrl(user, organization, i18n);
|
|
182
|
+
const footer = (!user.permissions ? "\n\n—\n\nOnze ledenadministratie werkt via het Stamhoofd platform, op maat van verenigingen. Probeer het ook via https://" + i18n.$t("shared.domains.marketing") + "/ledenadministratie\n\n" : '');
|
|
183
|
+
const footerHTML = (!user.permissions ? "<br><br>—<br><br>Onze ledenadministratie werkt via het Stamhoofd platform, op maat van verenigingen. Probeer het ook via <a href=\"https://" + i18n.$t("shared.domains.marketing") + "/ledenadministratie\">Stamhoofd</a><br><br>" : '');
|
|
184
|
+
if (withCode) {
|
|
185
|
+
const formattedCode = this.code.substr(0, 3) + " " + this.code.substr(3);
|
|
186
|
+
email_1.Email.send({
|
|
187
|
+
from,
|
|
188
|
+
replyTo,
|
|
189
|
+
to: this.email,
|
|
190
|
+
subject: `[${user.permissions ? "Stamhoofd" : organization.name}] Verifieer jouw e-mailadres`,
|
|
191
|
+
type: "transactional",
|
|
192
|
+
text: `Hallo${user.firstName ? (" " + user.firstName) : ""}!\n\nVerifieer jouw e-mailadres om te kunnen inloggen bij ${organization.name}. Vul de code "${formattedCode}" in op de website of klik op de onderstaande link om jouw e-mailadres te bevestigen.\n${url}\n\nDit is een automatische e-mail. Gelieve niet op dit e-mailadres te reageren.\n\n${user.permissions ? "Stamhoofd" : organization.name}` + footer,
|
|
193
|
+
html: `Hallo${user.firstName ? (" " + user.firstName) : ""}!<br><br>Verifieer jouw e-mailadres om te kunnen inloggen bij ${organization.name}. Vul de onderstaande code in op de website<br><br><strong style="font-size: 30px; font-weight: bold;">${formattedCode}</strong><br><br>Of klik op de onderstaande link om jouw e-mailadres te bevestigen:<br>${url}<br><br>Dit is een automatische e-mail. Gelieve niet op dit e-mailadres te reageren.<br><br>${user.permissions ? "Stamhoofd" : organization.name}` + footerHTML
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
email_1.Email.send({
|
|
198
|
+
from,
|
|
199
|
+
replyTo,
|
|
200
|
+
to: this.email,
|
|
201
|
+
type: "transactional",
|
|
202
|
+
subject: `[${user.permissions ? "Stamhoofd" : organization.name}] Verifieer jouw e-mailadres`,
|
|
203
|
+
text: `Hallo${user.firstName ? (" " + user.firstName) : ""}!\n\nVerifieer jouw e-mailadres om te kunnen inloggen bij ${organization.name}. Klik op de onderstaande link om jouw e-mailadres te bevestigen.\n${url}\n\nDit is een automatische e-mail. Gelieve niet op dit e-mailadres te reageren.\n\n${user.permissions ? "Stamhoofd" : organization.name}` + footer
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
static async resend(organization, token, i18n) {
|
|
208
|
+
const verificationCodes = await this.where({ token, organizationId: organization.id }, { limit: 1 });
|
|
209
|
+
if (verificationCodes.length == 0) {
|
|
210
|
+
console.log("Can't resend code, no coded found for token", token);
|
|
211
|
+
// TODO: maybe send a note via email
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const verificationCode = verificationCodes[0];
|
|
215
|
+
if (verificationCode.expiresAt < new Date()) {
|
|
216
|
+
// Don't report error, could be brute forced
|
|
217
|
+
console.log("Can't resend code, token is expired", token);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const { User } = await Promise.resolve().then(() => tslib_1.__importStar(require('./User')));
|
|
221
|
+
const user = await User.getByID(verificationCode.userId);
|
|
222
|
+
if (!user) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
verificationCode.send(user, organization, i18n);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Create or reuse a verification code for a given email address
|
|
229
|
+
* If needed, it will update the code.
|
|
230
|
+
* Use this method for sending only, not for verification!
|
|
231
|
+
*/
|
|
232
|
+
static async createFor(user, email) {
|
|
233
|
+
// TODO: make this constant time to avoid complex timing attacks (especially when under load)
|
|
234
|
+
// Do we already have a verificationCode for this email?
|
|
235
|
+
// Only user <-> organization binding is unique
|
|
236
|
+
// Since, when changing email, we don't throw an error if it is use (user enumeration)
|
|
237
|
+
// So multiple users should be able to request changing to a password, but only on validation should they fail
|
|
238
|
+
// (or this should be noted in the verification email and accounts could be merged)
|
|
239
|
+
const verificationCodes = await this.where({ userId: user.id }, { limit: 1 });
|
|
240
|
+
let verificationCode;
|
|
241
|
+
if (verificationCodes.length == 0) {
|
|
242
|
+
verificationCode = new EmailVerificationCode();
|
|
243
|
+
verificationCode.organizationId = user.organizationId;
|
|
244
|
+
await verificationCode.generateCode();
|
|
245
|
+
// Reset the real tries
|
|
246
|
+
verificationCode.tries = 0;
|
|
247
|
+
// Expire in 3 hours
|
|
248
|
+
verificationCode.expiresAt = new Date(new Date().getTime() + 1000 * 60 * 60 * 3);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
verificationCode = verificationCodes[0];
|
|
252
|
+
if (verificationCode.expiresAt < new Date(new Date().getTime() - 15 * 60 * 1000) || verificationCode.tries >= EmailVerificationCode.MAX_TRIES) {
|
|
253
|
+
// Expired: also update the token
|
|
254
|
+
await verificationCode.generateCode();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
verificationCode.email = email;
|
|
258
|
+
verificationCode.userId = user.id;
|
|
259
|
+
await verificationCode.save();
|
|
260
|
+
return verificationCode;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.EmailVerificationCode = EmailVerificationCode;
|
|
264
|
+
EmailVerificationCode.table = "email_verification_codes";
|
|
265
|
+
EmailVerificationCode.CODE_LENGTH = 6;
|
|
266
|
+
EmailVerificationCode.MAX_TRIES = 9; // minus 0..MAX_TRIES_VARY
|
|
267
|
+
tslib_1.__decorate([
|
|
268
|
+
(0, simple_database_1.column)({
|
|
269
|
+
primary: true, type: "string", beforeSave(value) {
|
|
270
|
+
return value !== null && value !== void 0 ? value : (0, uuid_1.v4)();
|
|
271
|
+
}
|
|
272
|
+
})
|
|
273
|
+
], EmailVerificationCode.prototype, "id", void 0);
|
|
274
|
+
tslib_1.__decorate([
|
|
275
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
276
|
+
], EmailVerificationCode.prototype, "organizationId", void 0);
|
|
277
|
+
tslib_1.__decorate([
|
|
278
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
279
|
+
], EmailVerificationCode.prototype, "userId", void 0);
|
|
280
|
+
tslib_1.__decorate([
|
|
281
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
282
|
+
], EmailVerificationCode.prototype, "email", void 0);
|
|
283
|
+
tslib_1.__decorate([
|
|
284
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
285
|
+
], EmailVerificationCode.prototype, "token", void 0);
|
|
286
|
+
tslib_1.__decorate([
|
|
287
|
+
(0, simple_database_1.column)({ type: "string" })
|
|
288
|
+
], EmailVerificationCode.prototype, "code", void 0);
|
|
289
|
+
tslib_1.__decorate([
|
|
290
|
+
(0, simple_database_1.column)({ type: "integer" })
|
|
291
|
+
], EmailVerificationCode.prototype, "generatedCount", void 0);
|
|
292
|
+
tslib_1.__decorate([
|
|
293
|
+
(0, simple_database_1.column)({ type: "integer" })
|
|
294
|
+
], EmailVerificationCode.prototype, "tries", void 0);
|
|
295
|
+
tslib_1.__decorate([
|
|
296
|
+
(0, simple_database_1.column)({ type: "datetime" })
|
|
297
|
+
], EmailVerificationCode.prototype, "expiresAt", void 0);
|
|
298
|
+
tslib_1.__decorate([
|
|
299
|
+
(0, simple_database_1.column)({
|
|
300
|
+
type: "datetime", beforeSave() {
|
|
301
|
+
const date = new Date();
|
|
302
|
+
date.setMilliseconds(0);
|
|
303
|
+
return date;
|
|
304
|
+
}
|
|
305
|
+
})
|
|
306
|
+
], EmailVerificationCode.prototype, "createdAt", void 0);
|
|
307
|
+
//# sourceMappingURL=EmailVerificationCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailVerificationCode.js","sourceRoot":"","sources":["../../../src/models/EmailVerificationCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Model } from '@simonbackx/simple-database';
|
|
2
|
+
import { Group as GroupStruct, GroupCategory, GroupPrivateSettings, GroupSettings, GroupStatus, OrganizationMetaData } from '@stamhoofd/structures';
|
|
3
|
+
import { MemberWithRegistrations } from './';
|
|
4
|
+
export declare class Group extends Model {
|
|
5
|
+
static table: string;
|
|
6
|
+
id: string;
|
|
7
|
+
settings: GroupSettings;
|
|
8
|
+
privateSettings: GroupPrivateSettings;
|
|
9
|
+
organizationId: string;
|
|
10
|
+
/**
|
|
11
|
+
* Every time a new registration period starts, this number increases. This is used to mark all older registrations as 'out of date' automatically
|
|
12
|
+
*/
|
|
13
|
+
cycle: number;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
updatedAt: Date;
|
|
16
|
+
deletedAt: Date | null;
|
|
17
|
+
/**
|
|
18
|
+
* Every time a new registration period starts, this number increases. This is used to mark all older registrations as 'out of date' automatically
|
|
19
|
+
*/
|
|
20
|
+
status: GroupStatus;
|
|
21
|
+
static getAll(organizationId: string, active?: boolean): Promise<Group[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Returns all parent and grandparents of this group
|
|
24
|
+
*/
|
|
25
|
+
getParentCategories(all: GroupCategory[], recursive?: boolean): GroupCategory[];
|
|
26
|
+
/**
|
|
27
|
+
* Fetch all members with their corresponding (valid) registrations, users
|
|
28
|
+
*/
|
|
29
|
+
getMembersWithRegistration(waitingList?: boolean, cycleOffset?: number): Promise<MemberWithRegistrations[]>;
|
|
30
|
+
getStructure(): GroupStruct;
|
|
31
|
+
getPrivateStructure(): GroupStruct;
|
|
32
|
+
private static getCount;
|
|
33
|
+
updateOccupancy(): Promise<void>;
|
|
34
|
+
static deleteUnreachable(organizationId: string, organizationMetaData: OrganizationMetaData, allGroups: Group[]): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=Group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Group.d.ts","sourceRoot":"","sources":["../../../src/models/Group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAAqB,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAoB,KAAK,IAAI,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGtK,OAAO,EAAU,uBAAuB,EAA+B,MAAM,IAAI,CAAC;AAclF,qBAAa,KAAM,SAAQ,KAAK;IAC5B,MAAM,CAAC,KAAK,SAAY;IAOxB,EAAE,EAAG,MAAM,CAAC;IAGZ,QAAQ,EAAE,aAAa,CAAC;IAKxB,eAAe,uBAAkC;IAGjD,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IAEH,KAAK,SAAK;IAYV,SAAS,EAAE,IAAI,CAAA;IAUf,SAAS,EAAE,IAAI,CAAA;IAMf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAO;IAE7B;;OAEG;IAEH,MAAM,cAAoB;WAEb,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,UAAO;IAOzD;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,SAAS,UAAO,GAAG,aAAa,EAAE;IAkB5E;;OAEG;IACG,0BAA0B,CAAC,WAAW,UAAQ,EAAE,WAAW,SAAI,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAyD1G,YAAY;IAIZ,mBAAmB;mBAIE,QAAQ;IAWvB,eAAe;WAiDR,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE;CAuCxH"}
|