@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.
Files changed (481) hide show
  1. package/dist/src/assets/Metropolis-Black.woff2 +0 -0
  2. package/dist/src/assets/Metropolis-BlackItalic.woff2 +0 -0
  3. package/dist/src/assets/Metropolis-Bold.woff2 +0 -0
  4. package/dist/src/assets/Metropolis-BoldItalic.woff2 +0 -0
  5. package/dist/src/assets/Metropolis-ExtraBold.woff2 +0 -0
  6. package/dist/src/assets/Metropolis-ExtraBoldItalic.woff2 +0 -0
  7. package/dist/src/assets/Metropolis-ExtraLight.woff2 +0 -0
  8. package/dist/src/assets/Metropolis-ExtraLightItalic.woff2 +0 -0
  9. package/dist/src/assets/Metropolis-Light.woff2 +0 -0
  10. package/dist/src/assets/Metropolis-LightItalic.woff2 +0 -0
  11. package/dist/src/assets/Metropolis-Medium.woff2 +0 -0
  12. package/dist/src/assets/Metropolis-MediumItalic.woff2 +0 -0
  13. package/dist/src/assets/Metropolis-Regular.woff2 +0 -0
  14. package/dist/src/assets/Metropolis-RegularItalic.woff2 +0 -0
  15. package/dist/src/assets/Metropolis-SemiBold.woff2 +0 -0
  16. package/dist/src/assets/Metropolis-SemiBoldItalic.woff2 +0 -0
  17. package/dist/src/assets/Metropolis-Thin.woff2 +0 -0
  18. package/dist/src/assets/Metropolis-ThinItalic.woff2 +0 -0
  19. package/dist/src/assets/assets/Metropolis-Black.woff2 +0 -0
  20. package/dist/src/assets/assets/Metropolis-BlackItalic.woff2 +0 -0
  21. package/dist/src/assets/assets/Metropolis-Bold.woff2 +0 -0
  22. package/dist/src/assets/assets/Metropolis-BoldItalic.woff2 +0 -0
  23. package/dist/src/assets/assets/Metropolis-ExtraBold.woff2 +0 -0
  24. package/dist/src/assets/assets/Metropolis-ExtraBoldItalic.woff2 +0 -0
  25. package/dist/src/assets/assets/Metropolis-ExtraLight.woff2 +0 -0
  26. package/dist/src/assets/assets/Metropolis-ExtraLightItalic.woff2 +0 -0
  27. package/dist/src/assets/assets/Metropolis-Light.woff2 +0 -0
  28. package/dist/src/assets/assets/Metropolis-LightItalic.woff2 +0 -0
  29. package/dist/src/assets/assets/Metropolis-Medium.woff2 +0 -0
  30. package/dist/src/assets/assets/Metropolis-MediumItalic.woff2 +0 -0
  31. package/dist/src/assets/assets/Metropolis-Regular.woff2 +0 -0
  32. package/dist/src/assets/assets/Metropolis-RegularItalic.woff2 +0 -0
  33. package/dist/src/assets/assets/Metropolis-SemiBold.woff2 +0 -0
  34. package/dist/src/assets/assets/Metropolis-SemiBoldItalic.woff2 +0 -0
  35. package/dist/src/assets/assets/Metropolis-Thin.woff2 +0 -0
  36. package/dist/src/assets/assets/Metropolis-ThinItalic.woff2 +0 -0
  37. package/dist/src/assets/assets/logo.png +0 -0
  38. package/dist/src/assets/logo.png +0 -0
  39. package/dist/src/factories/AddressFactory.d.ts +10 -0
  40. package/dist/src/factories/AddressFactory.d.ts.map +1 -0
  41. package/dist/src/factories/AddressFactory.js +42 -0
  42. package/dist/src/factories/AddressFactory.js.map +1 -0
  43. package/dist/src/factories/EmergencyContactFactory.d.ts +9 -0
  44. package/dist/src/factories/EmergencyContactFactory.d.ts.map +1 -0
  45. package/dist/src/factories/EmergencyContactFactory.js +42 -0
  46. package/dist/src/factories/EmergencyContactFactory.js.map +1 -0
  47. package/dist/src/factories/GroupFactory.d.ts +19 -0
  48. package/dist/src/factories/GroupFactory.d.ts.map +1 -0
  49. package/dist/src/factories/GroupFactory.js +52 -0
  50. package/dist/src/factories/GroupFactory.js.map +1 -0
  51. package/dist/src/factories/MemberFactory.d.ts +16 -0
  52. package/dist/src/factories/MemberFactory.d.ts.map +1 -0
  53. package/dist/src/factories/MemberFactory.js +98 -0
  54. package/dist/src/factories/MemberFactory.js.map +1 -0
  55. package/dist/src/factories/OrganizationFactory.d.ts +16 -0
  56. package/dist/src/factories/OrganizationFactory.d.ts.map +1 -0
  57. package/dist/src/factories/OrganizationFactory.js +40 -0
  58. package/dist/src/factories/OrganizationFactory.js.map +1 -0
  59. package/dist/src/factories/ParentFactory.d.ts +10 -0
  60. package/dist/src/factories/ParentFactory.d.ts.map +1 -0
  61. package/dist/src/factories/ParentFactory.js +44 -0
  62. package/dist/src/factories/ParentFactory.js.map +1 -0
  63. package/dist/src/factories/RecordFactory.d.ts +10 -0
  64. package/dist/src/factories/RecordFactory.d.ts.map +1 -0
  65. package/dist/src/factories/RecordFactory.js +14 -0
  66. package/dist/src/factories/RecordFactory.js.map +1 -0
  67. package/dist/src/factories/RegisterCodeFactory.d.ts +18 -0
  68. package/dist/src/factories/RegisterCodeFactory.d.ts.map +1 -0
  69. package/dist/src/factories/RegisterCodeFactory.js +19 -0
  70. package/dist/src/factories/RegisterCodeFactory.js.map +1 -0
  71. package/dist/src/factories/RegistrationFactory.d.ts +14 -0
  72. package/dist/src/factories/RegistrationFactory.d.ts.map +1 -0
  73. package/dist/src/factories/RegistrationFactory.js +26 -0
  74. package/dist/src/factories/RegistrationFactory.js.map +1 -0
  75. package/dist/src/factories/UserFactory.d.ts +21 -0
  76. package/dist/src/factories/UserFactory.d.ts.map +1 -0
  77. package/dist/src/factories/UserFactory.js +41 -0
  78. package/dist/src/factories/UserFactory.js.map +1 -0
  79. package/dist/src/factories/WebshopFactory.d.ts +16 -0
  80. package/dist/src/factories/WebshopFactory.d.ts.map +1 -0
  81. package/dist/src/factories/WebshopFactory.js +35 -0
  82. package/dist/src/factories/WebshopFactory.js.map +1 -0
  83. package/dist/src/helpers/DNSValidator.d.ts +6 -0
  84. package/dist/src/helpers/DNSValidator.d.ts.map +1 -0
  85. package/dist/src/helpers/DNSValidator.js +144 -0
  86. package/dist/src/helpers/DNSValidator.js.map +1 -0
  87. package/dist/src/helpers/EmailBuilder.d.ts +22 -0
  88. package/dist/src/helpers/EmailBuilder.d.ts.map +1 -0
  89. package/dist/src/helpers/EmailBuilder.js +100 -0
  90. package/dist/src/helpers/EmailBuilder.js.map +1 -0
  91. package/dist/src/helpers/GroupBuilder.d.ts +9 -0
  92. package/dist/src/helpers/GroupBuilder.d.ts.map +1 -0
  93. package/dist/src/helpers/GroupBuilder.js +382 -0
  94. package/dist/src/helpers/GroupBuilder.js.map +1 -0
  95. package/dist/src/helpers/Handlebars.d.ts +2 -0
  96. package/dist/src/helpers/Handlebars.d.ts.map +1 -0
  97. package/dist/src/helpers/Handlebars.js +192 -0
  98. package/dist/src/helpers/Handlebars.js.map +1 -0
  99. package/dist/src/helpers/InvoiceBuilder.d.ts +29 -0
  100. package/dist/src/helpers/InvoiceBuilder.d.ts.map +1 -0
  101. package/dist/src/helpers/InvoiceBuilder.js +406 -0
  102. package/dist/src/helpers/InvoiceBuilder.js.map +1 -0
  103. package/dist/src/helpers/InvoiceBuilder.test.d.ts +2 -0
  104. package/dist/src/helpers/InvoiceBuilder.test.d.ts.map +1 -0
  105. package/dist/src/helpers/InvoiceBuilder.test.js +52 -0
  106. package/dist/src/helpers/InvoiceBuilder.test.js.map +1 -0
  107. package/dist/src/helpers/RateLimiter.d.ts +27 -0
  108. package/dist/src/helpers/RateLimiter.d.ts.map +1 -0
  109. package/dist/src/helpers/RateLimiter.js +57 -0
  110. package/dist/src/helpers/RateLimiter.js.map +1 -0
  111. package/dist/src/helpers/WebshopCounter.d.ts +6 -0
  112. package/dist/src/helpers/WebshopCounter.d.ts.map +1 -0
  113. package/dist/src/helpers/WebshopCounter.js +36 -0
  114. package/dist/src/helpers/WebshopCounter.js.map +1 -0
  115. package/dist/src/helpers/WebshopCounter.test.d.ts +2 -0
  116. package/dist/src/helpers/WebshopCounter.test.d.ts.map +1 -0
  117. package/dist/src/helpers/WebshopCounter.test.js +17 -0
  118. package/dist/src/helpers/WebshopCounter.test.js.map +1 -0
  119. package/dist/src/index.d.ts +18 -0
  120. package/dist/src/index.d.ts.map +1 -0
  121. package/dist/src/index.js +23 -0
  122. package/dist/src/index.js.map +1 -0
  123. package/dist/src/migrations/1593773929-create-initial-tables.sql +634 -0
  124. package/dist/src/migrations/1605261999-gemeenten-tmp.sql +2820 -0
  125. package/dist/src/migrations/1605262045-import-postcodes.d.ts +16 -0
  126. package/dist/src/migrations/1605262045-import-postcodes.d.ts.map +1 -0
  127. package/dist/src/migrations/1605262045-import-postcodes.js +116 -0
  128. package/dist/src/migrations/1605262045-import-postcodes.js.map +1 -0
  129. package/dist/src/migrations/1605262046-import-postcodes-nl.d.ts +4 -0
  130. package/dist/src/migrations/1605262046-import-postcodes-nl.d.ts.map +1 -0
  131. package/dist/src/migrations/1605262046-import-postcodes-nl.js +83 -0
  132. package/dist/src/migrations/1605262046-import-postcodes-nl.js.map +1 -0
  133. package/dist/src/migrations/1605279038-drop-gemeenten-tmp.sql +1 -0
  134. package/dist/src/migrations/1648392491-default-templates.sql +9 -0
  135. package/dist/src/migrations/1651245707-default-templates-reminders.sql +6 -0
  136. package/dist/src/migrations/1708607340-tickets-deleted-at.sql +1 -0
  137. package/dist/src/migrations/1710459176-register-code-invoices.sql +3 -0
  138. package/dist/src/migrations/1712158247-discount-codes.sql +17 -0
  139. package/dist/src/migrations/1713178665-drop-invites.sql +1 -0
  140. package/dist/src/migrations/1713178666-drop-keychain.sql +1 -0
  141. package/dist/src/migrations/1713178667-drop-challenges.sql +1 -0
  142. package/dist/src/migrations/1713178668-drop-user-keys.sql +7 -0
  143. package/dist/src/migrations/1713178669-drop-organization-key.sql +2 -0
  144. package/dist/src/migrations/data/postcodes/nl/Drenthe +291 -0
  145. package/dist/src/migrations/data/postcodes/nl/Flevoland +107 -0
  146. package/dist/src/migrations/data/postcodes/nl/Friesland +518 -0
  147. package/dist/src/migrations/data/postcodes/nl/Gelderland +601 -0
  148. package/dist/src/migrations/data/postcodes/nl/Groningen +279 -0
  149. package/dist/src/migrations/data/postcodes/nl/Limburg +324 -0
  150. package/dist/src/migrations/data/postcodes/nl/Noord-Brabant +620 -0
  151. package/dist/src/migrations/data/postcodes/nl/Noord-Holland +566 -0
  152. package/dist/src/migrations/data/postcodes/nl/Overrijsel +344 -0
  153. package/dist/src/migrations/data/postcodes/nl/Utrecht +278 -0
  154. package/dist/src/migrations/data/postcodes/nl/Zeeland +179 -0
  155. package/dist/src/migrations/data/postcodes/nl/Zuid-Holland +662 -0
  156. package/dist/src/models/BalanceItem.d.ts +57 -0
  157. package/dist/src/models/BalanceItem.d.ts.map +1 -0
  158. package/dist/src/models/BalanceItem.js +346 -0
  159. package/dist/src/models/BalanceItem.js.map +1 -0
  160. package/dist/src/models/BalanceItemPayment.d.ts +31 -0
  161. package/dist/src/models/BalanceItemPayment.d.ts.map +1 -0
  162. package/dist/src/models/BalanceItemPayment.js +101 -0
  163. package/dist/src/models/BalanceItemPayment.js.map +1 -0
  164. package/dist/src/models/BuckarooPayment.d.ts +8 -0
  165. package/dist/src/models/BuckarooPayment.d.ts.map +1 -0
  166. package/dist/src/models/BuckarooPayment.js +24 -0
  167. package/dist/src/models/BuckarooPayment.js.map +1 -0
  168. package/dist/src/models/Document.d.ts +44 -0
  169. package/dist/src/models/Document.d.ts.map +1 -0
  170. package/dist/src/models/Document.js +194 -0
  171. package/dist/src/models/Document.js.map +1 -0
  172. package/dist/src/models/DocumentTemplate.d.ts +45 -0
  173. package/dist/src/models/DocumentTemplate.d.ts.map +1 -0
  174. package/dist/src/models/DocumentTemplate.js +533 -0
  175. package/dist/src/models/DocumentTemplate.js.map +1 -0
  176. package/dist/src/models/EmailTemplate.d.ts +22 -0
  177. package/dist/src/models/EmailTemplate.d.ts.map +1 -0
  178. package/dist/src/models/EmailTemplate.js +70 -0
  179. package/dist/src/models/EmailTemplate.js.map +1 -0
  180. package/dist/src/models/EmailVerificationCode.d.ts +60 -0
  181. package/dist/src/models/EmailVerificationCode.d.ts.map +1 -0
  182. package/dist/src/models/EmailVerificationCode.js +307 -0
  183. package/dist/src/models/EmailVerificationCode.js.map +1 -0
  184. package/dist/src/models/Group.d.ts +36 -0
  185. package/dist/src/models/Group.d.ts.map +1 -0
  186. package/dist/src/models/Group.js +231 -0
  187. package/dist/src/models/Group.js.map +1 -0
  188. package/dist/src/models/Image.d.ts +12 -0
  189. package/dist/src/models/Image.d.ts.map +1 -0
  190. package/dist/src/models/Image.js +137 -0
  191. package/dist/src/models/Image.js.map +1 -0
  192. package/dist/src/models/Member.d.ts +66 -0
  193. package/dist/src/models/Member.d.ts.map +1 -0
  194. package/dist/src/models/Member.js +309 -0
  195. package/dist/src/models/Member.js.map +1 -0
  196. package/dist/src/models/MemberResponsibilityRecord.d.ts +11 -0
  197. package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -0
  198. package/dist/src/models/MemberResponsibilityRecord.js +47 -0
  199. package/dist/src/models/MemberResponsibilityRecord.js.map +1 -0
  200. package/dist/src/models/MolliePayment.d.ts +8 -0
  201. package/dist/src/models/MolliePayment.d.ts.map +1 -0
  202. package/dist/src/models/MolliePayment.js +24 -0
  203. package/dist/src/models/MolliePayment.js.map +1 -0
  204. package/dist/src/models/MollieToken.d.ts +45 -0
  205. package/dist/src/models/MollieToken.d.ts.map +1 -0
  206. package/dist/src/models/MollieToken.js +333 -0
  207. package/dist/src/models/MollieToken.js.map +1 -0
  208. package/dist/src/models/OneTimeToken.d.ts +38 -0
  209. package/dist/src/models/OneTimeToken.d.ts.map +1 -0
  210. package/dist/src/models/OneTimeToken.js +126 -0
  211. package/dist/src/models/OneTimeToken.js.map +1 -0
  212. package/dist/src/models/Order.d.ts +99 -0
  213. package/dist/src/models/Order.d.ts.map +1 -0
  214. package/dist/src/models/Order.js +912 -0
  215. package/dist/src/models/Order.js.map +1 -0
  216. package/dist/src/models/Organization.d.ts +119 -0
  217. package/dist/src/models/Organization.d.ts.map +1 -0
  218. package/dist/src/models/Organization.js +900 -0
  219. package/dist/src/models/Organization.js.map +1 -0
  220. package/dist/src/models/OrganizationRegistrationPeriod.d.ts +14 -0
  221. package/dist/src/models/OrganizationRegistrationPeriod.d.ts.map +1 -0
  222. package/dist/src/models/OrganizationRegistrationPeriod.js +62 -0
  223. package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -0
  224. package/dist/src/models/PasswordToken.d.ts +29 -0
  225. package/dist/src/models/PasswordToken.d.ts.map +1 -0
  226. package/dist/src/models/PasswordToken.js +118 -0
  227. package/dist/src/models/PasswordToken.js.map +1 -0
  228. package/dist/src/models/PayconiqPayment.d.ts +18 -0
  229. package/dist/src/models/PayconiqPayment.d.ts.map +1 -0
  230. package/dist/src/models/PayconiqPayment.js +216 -0
  231. package/dist/src/models/PayconiqPayment.js.map +1 -0
  232. package/dist/src/models/Payment.d.ts +62 -0
  233. package/dist/src/models/Payment.d.ts.map +1 -0
  234. package/dist/src/models/Payment.js +199 -0
  235. package/dist/src/models/Payment.js.map +1 -0
  236. package/dist/src/models/Platform.d.ts +15 -0
  237. package/dist/src/models/Platform.d.ts.map +1 -0
  238. package/dist/src/models/Platform.js +77 -0
  239. package/dist/src/models/Platform.js.map +1 -0
  240. package/dist/src/models/RegisterCode.d.ts +27 -0
  241. package/dist/src/models/RegisterCode.d.ts.map +1 -0
  242. package/dist/src/models/RegisterCode.js +162 -0
  243. package/dist/src/models/RegisterCode.js.map +1 -0
  244. package/dist/src/models/Registration.d.ts +47 -0
  245. package/dist/src/models/Registration.d.ts.map +1 -0
  246. package/dist/src/models/Registration.js +369 -0
  247. package/dist/src/models/Registration.js.map +1 -0
  248. package/dist/src/models/RegistrationPeriod.d.ts +15 -0
  249. package/dist/src/models/RegistrationPeriod.d.ts.map +1 -0
  250. package/dist/src/models/RegistrationPeriod.js +64 -0
  251. package/dist/src/models/RegistrationPeriod.js.map +1 -0
  252. package/dist/src/models/STCredit.d.ts +20 -0
  253. package/dist/src/models/STCredit.d.ts.map +1 -0
  254. package/dist/src/models/STCredit.js +129 -0
  255. package/dist/src/models/STCredit.js.map +1 -0
  256. package/dist/src/models/STInvoice.d.ts +51 -0
  257. package/dist/src/models/STInvoice.d.ts.map +1 -0
  258. package/dist/src/models/STInvoice.js +453 -0
  259. package/dist/src/models/STInvoice.js.map +1 -0
  260. package/dist/src/models/STPackage.d.ts +36 -0
  261. package/dist/src/models/STPackage.d.ts.map +1 -0
  262. package/dist/src/models/STPackage.js +300 -0
  263. package/dist/src/models/STPackage.js.map +1 -0
  264. package/dist/src/models/STPendingInvoice.d.ts +45 -0
  265. package/dist/src/models/STPendingInvoice.d.ts.map +1 -0
  266. package/dist/src/models/STPendingInvoice.js +284 -0
  267. package/dist/src/models/STPendingInvoice.js.map +1 -0
  268. package/dist/src/models/StripeAccount.d.ts +17 -0
  269. package/dist/src/models/StripeAccount.d.ts.map +1 -0
  270. package/dist/src/models/StripeAccount.js +81 -0
  271. package/dist/src/models/StripeAccount.js.map +1 -0
  272. package/dist/src/models/StripeCheckoutSession.d.ts +9 -0
  273. package/dist/src/models/StripeCheckoutSession.d.ts.map +1 -0
  274. package/dist/src/models/StripeCheckoutSession.js +31 -0
  275. package/dist/src/models/StripeCheckoutSession.js.map +1 -0
  276. package/dist/src/models/StripePaymentIntent.d.ts +9 -0
  277. package/dist/src/models/StripePaymentIntent.d.ts.map +1 -0
  278. package/dist/src/models/StripePaymentIntent.js +31 -0
  279. package/dist/src/models/StripePaymentIntent.js.map +1 -0
  280. package/dist/src/models/Ticket.d.ts +61 -0
  281. package/dist/src/models/Ticket.d.ts.map +1 -0
  282. package/dist/src/models/Ticket.js +143 -0
  283. package/dist/src/models/Ticket.js.map +1 -0
  284. package/dist/src/models/Token.d.ts +49 -0
  285. package/dist/src/models/Token.d.ts.map +1 -0
  286. package/dist/src/models/Token.js +218 -0
  287. package/dist/src/models/Token.js.map +1 -0
  288. package/dist/src/models/Token.test.d.ts +2 -0
  289. package/dist/src/models/Token.test.d.ts.map +1 -0
  290. package/dist/src/models/Token.test.js +60 -0
  291. package/dist/src/models/Token.test.js.map +1 -0
  292. package/dist/src/models/UsedRegisterCode.d.ts +22 -0
  293. package/dist/src/models/UsedRegisterCode.d.ts.map +1 -0
  294. package/dist/src/models/UsedRegisterCode.js +158 -0
  295. package/dist/src/models/UsedRegisterCode.js.map +1 -0
  296. package/dist/src/models/User.d.ts +55 -0
  297. package/dist/src/models/User.d.ts.map +1 -0
  298. package/dist/src/models/User.js +314 -0
  299. package/dist/src/models/User.js.map +1 -0
  300. package/dist/src/models/UserPermissions.d.ts +15 -0
  301. package/dist/src/models/UserPermissions.d.ts.map +1 -0
  302. package/dist/src/models/UserPermissions.js +57 -0
  303. package/dist/src/models/UserPermissions.js.map +1 -0
  304. package/dist/src/models/Webshop.d.ts +44 -0
  305. package/dist/src/models/Webshop.d.ts.map +1 -0
  306. package/dist/src/models/Webshop.js +184 -0
  307. package/dist/src/models/Webshop.js.map +1 -0
  308. package/dist/src/models/WebshopDiscountCode.d.ts +18 -0
  309. package/dist/src/models/WebshopDiscountCode.d.ts.map +1 -0
  310. package/dist/src/models/WebshopDiscountCode.js +88 -0
  311. package/dist/src/models/WebshopDiscountCode.js.map +1 -0
  312. package/dist/src/models/addresses/City.d.ts +14 -0
  313. package/dist/src/models/addresses/City.d.ts.map +1 -0
  314. package/dist/src/models/addresses/City.js +37 -0
  315. package/dist/src/models/addresses/City.js.map +1 -0
  316. package/dist/src/models/addresses/PostalCode.d.ts +20 -0
  317. package/dist/src/models/addresses/PostalCode.d.ts.map +1 -0
  318. package/dist/src/models/addresses/PostalCode.js +138 -0
  319. package/dist/src/models/addresses/PostalCode.js.map +1 -0
  320. package/dist/src/models/addresses/PostalCode.test.d.ts +2 -0
  321. package/dist/src/models/addresses/PostalCode.test.d.ts.map +1 -0
  322. package/dist/src/models/addresses/PostalCode.test.js +98 -0
  323. package/dist/src/models/addresses/PostalCode.test.js.map +1 -0
  324. package/dist/src/models/addresses/Province.d.ts +9 -0
  325. package/dist/src/models/addresses/Province.d.ts.map +1 -0
  326. package/dist/src/models/addresses/Province.js +24 -0
  327. package/dist/src/models/addresses/Province.js.map +1 -0
  328. package/dist/src/models/addresses/Street.d.ts +10 -0
  329. package/dist/src/models/addresses/Street.d.ts.map +1 -0
  330. package/dist/src/models/addresses/Street.js +26 -0
  331. package/dist/src/models/addresses/Street.js.map +1 -0
  332. package/dist/src/models/index.d.ts +37 -0
  333. package/dist/src/models/index.d.ts.map +1 -0
  334. package/dist/src/models/index.js +53 -0
  335. package/dist/src/models/index.js.map +1 -0
  336. package/dist/src/structures/OrganizationServerMetaData.d.ts +43 -0
  337. package/dist/src/structures/OrganizationServerMetaData.d.ts.map +1 -0
  338. package/dist/src/structures/OrganizationServerMetaData.js +128 -0
  339. package/dist/src/structures/OrganizationServerMetaData.js.map +1 -0
  340. package/dist/tests/jest.global.setup.d.ts +3 -0
  341. package/dist/tests/jest.global.setup.d.ts.map +1 -0
  342. package/dist/tests/jest.global.setup.js +20 -0
  343. package/dist/tests/jest.global.setup.js.map +1 -0
  344. package/dist/tests/jest.setup.d.ts +2 -0
  345. package/dist/tests/jest.setup.d.ts.map +1 -0
  346. package/dist/tests/jest.setup.js +15 -0
  347. package/dist/tests/jest.setup.js.map +1 -0
  348. package/package.json +30 -0
  349. package/src/assets/Metropolis-Black.woff2 +0 -0
  350. package/src/assets/Metropolis-BlackItalic.woff2 +0 -0
  351. package/src/assets/Metropolis-Bold.woff2 +0 -0
  352. package/src/assets/Metropolis-BoldItalic.woff2 +0 -0
  353. package/src/assets/Metropolis-ExtraBold.woff2 +0 -0
  354. package/src/assets/Metropolis-ExtraBoldItalic.woff2 +0 -0
  355. package/src/assets/Metropolis-ExtraLight.woff2 +0 -0
  356. package/src/assets/Metropolis-ExtraLightItalic.woff2 +0 -0
  357. package/src/assets/Metropolis-Light.woff2 +0 -0
  358. package/src/assets/Metropolis-LightItalic.woff2 +0 -0
  359. package/src/assets/Metropolis-Medium.woff2 +0 -0
  360. package/src/assets/Metropolis-MediumItalic.woff2 +0 -0
  361. package/src/assets/Metropolis-Regular.woff2 +0 -0
  362. package/src/assets/Metropolis-RegularItalic.woff2 +0 -0
  363. package/src/assets/Metropolis-SemiBold.woff2 +0 -0
  364. package/src/assets/Metropolis-SemiBoldItalic.woff2 +0 -0
  365. package/src/assets/Metropolis-Thin.woff2 +0 -0
  366. package/src/assets/Metropolis-ThinItalic.woff2 +0 -0
  367. package/src/assets/logo.png +0 -0
  368. package/src/factories/AddressFactory.ts +42 -0
  369. package/src/factories/EmergencyContactFactory.ts +43 -0
  370. package/src/factories/GroupFactory.ts +66 -0
  371. package/src/factories/MemberFactory.ts +122 -0
  372. package/src/factories/OrganizationFactory.ts +45 -0
  373. package/src/factories/ParentFactory.ts +49 -0
  374. package/src/factories/RecordFactory.ts +12 -0
  375. package/src/factories/RegisterCodeFactory.ts +25 -0
  376. package/src/factories/RegistrationFactory.ts +32 -0
  377. package/src/factories/UserFactory.ts +66 -0
  378. package/src/factories/WebshopFactory.ts +43 -0
  379. package/src/helpers/DNSValidator.ts +153 -0
  380. package/src/helpers/EmailBuilder.ts +127 -0
  381. package/src/helpers/GroupBuilder.ts +438 -0
  382. package/src/helpers/Handlebars.ts +203 -0
  383. package/src/helpers/InvoiceBuilder.test.ts +57 -0
  384. package/src/helpers/InvoiceBuilder.ts +501 -0
  385. package/src/helpers/RateLimiter.ts +75 -0
  386. package/src/helpers/WebshopCounter.test.ts +16 -0
  387. package/src/helpers/WebshopCounter.ts +36 -0
  388. package/src/index.ts +21 -0
  389. package/src/migrations/1593773929-create-initial-tables.sql +634 -0
  390. package/src/migrations/1605261999-gemeenten-tmp.sql +2820 -0
  391. package/src/migrations/1605262045-import-postcodes.ts +132 -0
  392. package/src/migrations/1605262046-import-postcodes-nl.ts +97 -0
  393. package/src/migrations/1605279038-drop-gemeenten-tmp.sql +1 -0
  394. package/src/migrations/1648392491-default-templates.sql +9 -0
  395. package/src/migrations/1651245707-default-templates-reminders.sql +6 -0
  396. package/src/migrations/1708607340-tickets-deleted-at.sql +1 -0
  397. package/src/migrations/1710459176-register-code-invoices.sql +3 -0
  398. package/src/migrations/1712158247-discount-codes.sql +17 -0
  399. package/src/migrations/1713178665-drop-invites.sql +1 -0
  400. package/src/migrations/1713178666-drop-keychain.sql +1 -0
  401. package/src/migrations/1713178667-drop-challenges.sql +1 -0
  402. package/src/migrations/1713178668-drop-user-keys.sql +7 -0
  403. package/src/migrations/1713178669-drop-organization-key.sql +2 -0
  404. package/src/migrations/1714985451-user-nullable-organization-id.sql +2 -0
  405. package/src/migrations/1714985452-email-verification-code-nullable-organization-id.sql +2 -0
  406. package/src/migrations/1714985453-user-organization-permissions.sql +2 -0
  407. package/src/migrations/1714985454-user-organization-permissions.sql +2 -0
  408. package/src/migrations/1715079362-platform.sql +6 -0
  409. package/src/migrations/1715181649-registrations-organization-id.sql +2 -0
  410. package/src/migrations/1715181650-registrations-organization-id-fill.sql +1 -0
  411. package/src/migrations/1715181651-registrations-organization-id-drop-null.sql +2 -0
  412. package/src/migrations/1716117067-members-nullable-organization-id.sql +2 -0
  413. package/src/migrations/1719567581-registration-periods.sql +13 -0
  414. package/src/migrations/1719567582-organization-registration-periods.sql +13 -0
  415. package/src/migrations/1719567881-organization-periodId.sql +2 -0
  416. package/src/migrations/1719567882-groups-periodId.sql +2 -0
  417. package/src/migrations/1719567883-platform-periodId.sql +2 -0
  418. package/src/migrations/1719568079-default-period.sql +2 -0
  419. package/src/migrations/1719568080-set-default-period-platform.sql +1 -0
  420. package/src/migrations/1719568081-set-default-period-organizations.sql +1 -0
  421. package/src/migrations/1719568082-set-default-period-groups.sql +1 -0
  422. package/src/migrations/1719580828-registrations-periodId.sql +2 -0
  423. package/src/migrations/1719580829-set-default-period-registrations.sql +1 -0
  424. package/src/migrations/data/postcodes/nl/Drenthe +291 -0
  425. package/src/migrations/data/postcodes/nl/Flevoland +107 -0
  426. package/src/migrations/data/postcodes/nl/Friesland +518 -0
  427. package/src/migrations/data/postcodes/nl/Gelderland +601 -0
  428. package/src/migrations/data/postcodes/nl/Groningen +279 -0
  429. package/src/migrations/data/postcodes/nl/Limburg +324 -0
  430. package/src/migrations/data/postcodes/nl/Noord-Brabant +620 -0
  431. package/src/migrations/data/postcodes/nl/Noord-Holland +566 -0
  432. package/src/migrations/data/postcodes/nl/Overrijsel +344 -0
  433. package/src/migrations/data/postcodes/nl/Utrecht +278 -0
  434. package/src/migrations/data/postcodes/nl/Zeeland +179 -0
  435. package/src/migrations/data/postcodes/nl/Zuid-Holland +662 -0
  436. package/src/models/BalanceItem.ts +392 -0
  437. package/src/models/BalanceItemPayment.ts +106 -0
  438. package/src/models/BuckarooPayment.ts +19 -0
  439. package/src/models/Document.ts +203 -0
  440. package/src/models/DocumentTemplate.ts +583 -0
  441. package/src/models/EmailTemplate.ts +64 -0
  442. package/src/models/EmailVerificationCode.ts +352 -0
  443. package/src/models/Group.ts +293 -0
  444. package/src/models/Image.ts +147 -0
  445. package/src/models/Member.ts +386 -0
  446. package/src/models/MemberResponsibilityRecord.ts +39 -0
  447. package/src/models/MolliePayment.ts +19 -0
  448. package/src/models/MollieToken.ts +369 -0
  449. package/src/models/OneTimeToken.ts +131 -0
  450. package/src/models/Order.ts +1030 -0
  451. package/src/models/Organization.ts +1085 -0
  452. package/src/models/OrganizationRegistrationPeriod.ts +54 -0
  453. package/src/models/PasswordToken.ts +139 -0
  454. package/src/models/PayconiqPayment.ts +241 -0
  455. package/src/models/Payment.ts +216 -0
  456. package/src/models/Platform.ts +76 -0
  457. package/src/models/RegisterCode.ts +164 -0
  458. package/src/models/Registration.ts +405 -0
  459. package/src/models/RegistrationPeriod.ts +55 -0
  460. package/src/models/STCredit.ts +134 -0
  461. package/src/models/STInvoice.ts +507 -0
  462. package/src/models/STPackage.ts +324 -0
  463. package/src/models/STPendingInvoice.ts +308 -0
  464. package/src/models/StripeAccount.ts +71 -0
  465. package/src/models/StripeCheckoutSession.ts +22 -0
  466. package/src/models/StripePaymentIntent.ts +22 -0
  467. package/src/models/Ticket.ts +145 -0
  468. package/src/models/Token.test.ts +69 -0
  469. package/src/models/Token.ts +269 -0
  470. package/src/models/UsedRegisterCode.ts +166 -0
  471. package/src/models/User.ts +445 -0
  472. package/src/models/UserPermissions.ts +54 -0
  473. package/src/models/Webshop.ts +206 -0
  474. package/src/models/WebshopDiscountCode.ts +81 -0
  475. package/src/models/addresses/City.ts +31 -0
  476. package/src/models/addresses/PostalCode.test.ts +117 -0
  477. package/src/models/addresses/PostalCode.ts +164 -0
  478. package/src/models/addresses/Province.ts +20 -0
  479. package/src/models/addresses/Street.ts +25 -0
  480. package/src/models/index.ts +49 -0
  481. 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"}