@stamhoofd/models 2.39.0 → 2.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/dist/src/factories/AddressFactory.d.ts +3 -4
  2. package/dist/src/factories/AddressFactory.d.ts.map +1 -1
  3. package/dist/src/factories/AddressFactory.js +13 -13
  4. package/dist/src/factories/EmergencyContactFactory.d.ts +3 -4
  5. package/dist/src/factories/EmergencyContactFactory.d.ts.map +1 -1
  6. package/dist/src/factories/EmergencyContactFactory.js +27 -27
  7. package/dist/src/factories/EmergencyContactFactory.js.map +1 -1
  8. package/dist/src/factories/GroupFactory.d.ts +4 -4
  9. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  10. package/dist/src/factories/GroupFactory.js +8 -8
  11. package/dist/src/factories/GroupFactory.js.map +1 -1
  12. package/dist/src/factories/MemberFactory.d.ts +4 -4
  13. package/dist/src/factories/MemberFactory.d.ts.map +1 -1
  14. package/dist/src/factories/MemberFactory.js +17 -17
  15. package/dist/src/factories/MemberFactory.js.map +1 -1
  16. package/dist/src/factories/OrganizationFactory.d.ts +4 -4
  17. package/dist/src/factories/OrganizationFactory.js +8 -8
  18. package/dist/src/factories/OrganizationFactory.js.map +1 -1
  19. package/dist/src/factories/ParentFactory.d.ts +1 -1
  20. package/dist/src/factories/ParentFactory.js +19 -19
  21. package/dist/src/factories/ParentFactory.js.map +1 -1
  22. package/dist/src/factories/RecordFactory.d.ts +2 -3
  23. package/dist/src/factories/RecordFactory.d.ts.map +1 -1
  24. package/dist/src/factories/RecordFactory.js +1 -1
  25. package/dist/src/factories/RecordFactory.js.map +1 -1
  26. package/dist/src/factories/RegisterCodeFactory.d.ts +2 -2
  27. package/dist/src/factories/RegisterCodeFactory.d.ts.map +1 -1
  28. package/dist/src/factories/RegisterCodeFactory.js +2 -2
  29. package/dist/src/factories/RegistrationFactory.d.ts +3 -3
  30. package/dist/src/factories/RegistrationFactory.d.ts.map +1 -1
  31. package/dist/src/factories/RegistrationFactory.js.map +1 -1
  32. package/dist/src/factories/RegistrationPeriodFactory.d.ts +2 -2
  33. package/dist/src/factories/RegistrationPeriodFactory.js.map +1 -1
  34. package/dist/src/factories/UserFactory.d.ts +3 -3
  35. package/dist/src/factories/UserFactory.d.ts.map +1 -1
  36. package/dist/src/factories/UserFactory.js +3 -3
  37. package/dist/src/factories/UserFactory.js.map +1 -1
  38. package/dist/src/factories/WebshopFactory.d.ts +4 -4
  39. package/dist/src/factories/WebshopFactory.d.ts.map +1 -1
  40. package/dist/src/factories/WebshopFactory.js +1 -1
  41. package/dist/src/factories/WebshopFactory.js.map +1 -1
  42. package/dist/src/helpers/DNSValidator.d.ts +1 -1
  43. package/dist/src/helpers/DNSValidator.d.ts.map +1 -1
  44. package/dist/src/helpers/DNSValidator.js +33 -33
  45. package/dist/src/helpers/DNSValidator.js.map +1 -1
  46. package/dist/src/helpers/EmailBuilder.d.ts +10 -10
  47. package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
  48. package/dist/src/helpers/EmailBuilder.js +34 -34
  49. package/dist/src/helpers/EmailBuilder.js.map +1 -1
  50. package/dist/src/helpers/GroupBuilder.d.ts.map +1 -1
  51. package/dist/src/helpers/GroupBuilder.js +57 -57
  52. package/dist/src/helpers/GroupBuilder.js.map +1 -1
  53. package/dist/src/helpers/Handlebars.d.ts.map +1 -1
  54. package/dist/src/helpers/Handlebars.js +29 -29
  55. package/dist/src/helpers/Handlebars.js.map +1 -1
  56. package/dist/src/helpers/MemberMerger.d.ts +1 -1
  57. package/dist/src/helpers/MemberMerger.d.ts.map +1 -1
  58. package/dist/src/helpers/MemberMerger.js +33 -33
  59. package/dist/src/helpers/MemberMerger.js.map +1 -1
  60. package/dist/src/helpers/MemberMerger.test.js +194 -194
  61. package/dist/src/helpers/MemberMerger.test.js.map +1 -1
  62. package/dist/src/helpers/RateLimiter.d.ts.map +1 -1
  63. package/dist/src/helpers/RateLimiter.js +2 -2
  64. package/dist/src/helpers/RateLimiter.js.map +1 -1
  65. package/dist/src/helpers/SetupStepsUpdater.d.ts +22 -0
  66. package/dist/src/helpers/SetupStepsUpdater.d.ts.map +1 -0
  67. package/dist/src/helpers/SetupStepsUpdater.js +255 -0
  68. package/dist/src/helpers/SetupStepsUpdater.js.map +1 -0
  69. package/dist/src/helpers/WebshopCounter.d.ts +1 -1
  70. package/dist/src/helpers/WebshopCounter.d.ts.map +1 -1
  71. package/dist/src/helpers/WebshopCounter.js +1 -1
  72. package/dist/src/helpers/WebshopCounter.js.map +1 -1
  73. package/dist/src/helpers/WebshopCounter.test.js +6 -6
  74. package/dist/src/helpers/WebshopCounter.test.js.map +1 -1
  75. package/dist/src/index.d.ts +20 -19
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +1 -0
  78. package/dist/src/index.js.map +1 -1
  79. package/dist/src/migrations/1605262045-import-postcodes.js +12 -12
  80. package/dist/src/migrations/1605262046-import-postcodes-nl.js +10 -10
  81. package/dist/src/models/BalanceItem.d.ts.map +1 -1
  82. package/dist/src/models/BalanceItem.js +37 -37
  83. package/dist/src/models/BalanceItem.js.map +1 -1
  84. package/dist/src/models/BalanceItemPayment.d.ts.map +1 -1
  85. package/dist/src/models/BalanceItemPayment.js +13 -13
  86. package/dist/src/models/BalanceItemPayment.js.map +1 -1
  87. package/dist/src/models/BuckarooPayment.d.ts +1 -1
  88. package/dist/src/models/BuckarooPayment.d.ts.map +1 -1
  89. package/dist/src/models/BuckarooPayment.js +5 -5
  90. package/dist/src/models/BuckarooPayment.js.map +1 -1
  91. package/dist/src/models/CachedOutstandingBalance.d.ts.map +1 -1
  92. package/dist/src/models/CachedOutstandingBalance.js +37 -37
  93. package/dist/src/models/CachedOutstandingBalance.js.map +1 -1
  94. package/dist/src/models/Document.d.ts +4 -4
  95. package/dist/src/models/Document.d.ts.map +1 -1
  96. package/dist/src/models/Document.js +27 -27
  97. package/dist/src/models/Document.js.map +1 -1
  98. package/dist/src/models/DocumentTemplate.d.ts +4 -4
  99. package/dist/src/models/DocumentTemplate.d.ts.map +1 -1
  100. package/dist/src/models/DocumentTemplate.js +72 -72
  101. package/dist/src/models/DocumentTemplate.js.map +1 -1
  102. package/dist/src/models/Email.d.ts.map +1 -1
  103. package/dist/src/models/Email.js +63 -64
  104. package/dist/src/models/Email.js.map +1 -1
  105. package/dist/src/models/EmailRecipient.d.ts.map +1 -1
  106. package/dist/src/models/EmailRecipient.js +20 -20
  107. package/dist/src/models/EmailRecipient.js.map +1 -1
  108. package/dist/src/models/EmailTemplate.d.ts +3 -3
  109. package/dist/src/models/EmailTemplate.d.ts.map +1 -1
  110. package/dist/src/models/EmailTemplate.js +16 -16
  111. package/dist/src/models/EmailTemplate.js.map +1 -1
  112. package/dist/src/models/EmailVerificationCode.d.ts +2 -2
  113. package/dist/src/models/EmailVerificationCode.d.ts.map +1 -1
  114. package/dist/src/models/EmailVerificationCode.js +57 -55
  115. package/dist/src/models/EmailVerificationCode.js.map +1 -1
  116. package/dist/src/models/Event.d.ts +2 -2
  117. package/dist/src/models/Event.d.ts.map +1 -1
  118. package/dist/src/models/Event.js +15 -15
  119. package/dist/src/models/Event.js.map +1 -1
  120. package/dist/src/models/Group.d.ts +3 -1
  121. package/dist/src/models/Group.d.ts.map +1 -1
  122. package/dist/src/models/Group.js +46 -35
  123. package/dist/src/models/Group.js.map +1 -1
  124. package/dist/src/models/Image.d.ts +1 -1
  125. package/dist/src/models/Image.d.ts.map +1 -1
  126. package/dist/src/models/Image.js +26 -26
  127. package/dist/src/models/Image.js.map +1 -1
  128. package/dist/src/models/Member.d.ts +8 -8
  129. package/dist/src/models/Member.d.ts.map +1 -1
  130. package/dist/src/models/Member.js +60 -60
  131. package/dist/src/models/Member.js.map +1 -1
  132. package/dist/src/models/MemberPlatformMembership.d.ts +3 -3
  133. package/dist/src/models/MemberPlatformMembership.d.ts.map +1 -1
  134. package/dist/src/models/MemberPlatformMembership.js +26 -26
  135. package/dist/src/models/MemberPlatformMembership.js.map +1 -1
  136. package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -1
  137. package/dist/src/models/MemberResponsibilityRecord.js +13 -13
  138. package/dist/src/models/MemberResponsibilityRecord.js.map +1 -1
  139. package/dist/src/models/MergedMember.d.ts +3 -3
  140. package/dist/src/models/MergedMember.d.ts.map +1 -1
  141. package/dist/src/models/MergedMember.js +19 -19
  142. package/dist/src/models/MergedMember.js.map +1 -1
  143. package/dist/src/models/MolliePayment.d.ts +1 -1
  144. package/dist/src/models/MolliePayment.d.ts.map +1 -1
  145. package/dist/src/models/MolliePayment.js +5 -5
  146. package/dist/src/models/MolliePayment.js.map +1 -1
  147. package/dist/src/models/MollieToken.d.ts.map +1 -1
  148. package/dist/src/models/MollieToken.js +60 -60
  149. package/dist/src/models/MollieToken.js.map +1 -1
  150. package/dist/src/models/OneTimeToken.d.ts +2 -2
  151. package/dist/src/models/OneTimeToken.d.ts.map +1 -1
  152. package/dist/src/models/OneTimeToken.js +13 -13
  153. package/dist/src/models/OneTimeToken.js.map +1 -1
  154. package/dist/src/models/Order.d.ts +1 -1
  155. package/dist/src/models/Order.d.ts.map +1 -1
  156. package/dist/src/models/Order.js +70 -70
  157. package/dist/src/models/Order.js.map +1 -1
  158. package/dist/src/models/Organization.d.ts +5 -5
  159. package/dist/src/models/Organization.d.ts.map +1 -1
  160. package/dist/src/models/Organization.js +127 -127
  161. package/dist/src/models/Organization.js.map +1 -1
  162. package/dist/src/models/OrganizationRegistrationPeriod.d.ts.map +1 -1
  163. package/dist/src/models/OrganizationRegistrationPeriod.js +15 -15
  164. package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -1
  165. package/dist/src/models/PasswordToken.d.ts +3 -3
  166. package/dist/src/models/PasswordToken.d.ts.map +1 -1
  167. package/dist/src/models/PasswordToken.js +17 -17
  168. package/dist/src/models/PasswordToken.js.map +1 -1
  169. package/dist/src/models/PayconiqPayment.d.ts +1 -1
  170. package/dist/src/models/PayconiqPayment.d.ts.map +1 -1
  171. package/dist/src/models/PayconiqPayment.js +49 -49
  172. package/dist/src/models/PayconiqPayment.js.map +1 -1
  173. package/dist/src/models/Payment.d.ts +3 -3
  174. package/dist/src/models/Payment.d.ts.map +1 -1
  175. package/dist/src/models/Payment.js +36 -36
  176. package/dist/src/models/Payment.js.map +1 -1
  177. package/dist/src/models/Platform.d.ts +2 -2
  178. package/dist/src/models/Platform.d.ts.map +1 -1
  179. package/dist/src/models/Platform.js +8 -8
  180. package/dist/src/models/Platform.js.map +1 -1
  181. package/dist/src/models/RegisterCode.d.ts +1 -1
  182. package/dist/src/models/RegisterCode.d.ts.map +1 -1
  183. package/dist/src/models/RegisterCode.js +11 -11
  184. package/dist/src/models/RegisterCode.js.map +1 -1
  185. package/dist/src/models/Registration.d.ts +1 -1
  186. package/dist/src/models/Registration.d.ts.map +1 -1
  187. package/dist/src/models/Registration.js +88 -88
  188. package/dist/src/models/Registration.js.map +1 -1
  189. package/dist/src/models/RegistrationPeriod.d.ts.map +1 -1
  190. package/dist/src/models/RegistrationPeriod.js +12 -12
  191. package/dist/src/models/RegistrationPeriod.js.map +1 -1
  192. package/dist/src/models/STCredit.d.ts +1 -1
  193. package/dist/src/models/STCredit.d.ts.map +1 -1
  194. package/dist/src/models/STCredit.js +12 -12
  195. package/dist/src/models/STCredit.js.map +1 -1
  196. package/dist/src/models/STInvoice.d.ts +1 -1
  197. package/dist/src/models/STInvoice.d.ts.map +1 -1
  198. package/dist/src/models/STInvoice.js +16 -16
  199. package/dist/src/models/STInvoice.js.map +1 -1
  200. package/dist/src/models/STPackage.d.ts +1 -1
  201. package/dist/src/models/STPackage.d.ts.map +1 -1
  202. package/dist/src/models/STPackage.js +39 -39
  203. package/dist/src/models/STPackage.js.map +1 -1
  204. package/dist/src/models/STPendingInvoice.d.ts +1 -1
  205. package/dist/src/models/STPendingInvoice.d.ts.map +1 -1
  206. package/dist/src/models/STPendingInvoice.js +11 -11
  207. package/dist/src/models/STPendingInvoice.js.map +1 -1
  208. package/dist/src/models/StripeAccount.d.ts.map +1 -1
  209. package/dist/src/models/StripeAccount.js +13 -13
  210. package/dist/src/models/StripeAccount.js.map +1 -1
  211. package/dist/src/models/StripeCheckoutSession.d.ts +1 -1
  212. package/dist/src/models/StripeCheckoutSession.d.ts.map +1 -1
  213. package/dist/src/models/StripeCheckoutSession.js +7 -7
  214. package/dist/src/models/StripeCheckoutSession.js.map +1 -1
  215. package/dist/src/models/StripePaymentIntent.d.ts +1 -1
  216. package/dist/src/models/StripePaymentIntent.d.ts.map +1 -1
  217. package/dist/src/models/StripePaymentIntent.js +7 -7
  218. package/dist/src/models/StripePaymentIntent.js.map +1 -1
  219. package/dist/src/models/Ticket.d.ts +2 -2
  220. package/dist/src/models/Ticket.d.ts.map +1 -1
  221. package/dist/src/models/Ticket.js +23 -23
  222. package/dist/src/models/Ticket.js.map +1 -1
  223. package/dist/src/models/Token.d.ts +3 -3
  224. package/dist/src/models/Token.d.ts.map +1 -1
  225. package/dist/src/models/Token.js +27 -27
  226. package/dist/src/models/Token.js.map +1 -1
  227. package/dist/src/models/Token.test.js +11 -11
  228. package/dist/src/models/UsedRegisterCode.d.ts +1 -1
  229. package/dist/src/models/UsedRegisterCode.d.ts.map +1 -1
  230. package/dist/src/models/UsedRegisterCode.js +10 -10
  231. package/dist/src/models/UsedRegisterCode.js.map +1 -1
  232. package/dist/src/models/User.d.ts +4 -4
  233. package/dist/src/models/User.d.ts.map +1 -1
  234. package/dist/src/models/User.js +53 -51
  235. package/dist/src/models/User.js.map +1 -1
  236. package/dist/src/models/UserPermissions.d.ts +3 -3
  237. package/dist/src/models/UserPermissions.d.ts.map +1 -1
  238. package/dist/src/models/UserPermissions.js +12 -12
  239. package/dist/src/models/UserPermissions.js.map +1 -1
  240. package/dist/src/models/Webshop.d.ts +1 -1
  241. package/dist/src/models/Webshop.d.ts.map +1 -1
  242. package/dist/src/models/Webshop.js +23 -23
  243. package/dist/src/models/Webshop.js.map +1 -1
  244. package/dist/src/models/WebshopDiscountCode.d.ts +1 -1
  245. package/dist/src/models/WebshopDiscountCode.d.ts.map +1 -1
  246. package/dist/src/models/WebshopDiscountCode.js +16 -16
  247. package/dist/src/models/WebshopDiscountCode.js.map +1 -1
  248. package/dist/src/models/addresses/City.d.ts.map +1 -1
  249. package/dist/src/models/addresses/City.js +9 -9
  250. package/dist/src/models/addresses/City.js.map +1 -1
  251. package/dist/src/models/addresses/PostalCode.d.ts.map +1 -1
  252. package/dist/src/models/addresses/PostalCode.js +11 -11
  253. package/dist/src/models/addresses/PostalCode.js.map +1 -1
  254. package/dist/src/models/addresses/PostalCode.test.js +22 -22
  255. package/dist/src/models/addresses/PostalCode.test.js.map +1 -1
  256. package/dist/src/models/addresses/Province.d.ts.map +1 -1
  257. package/dist/src/models/addresses/Province.js +5 -5
  258. package/dist/src/models/addresses/Province.js.map +1 -1
  259. package/dist/src/models/addresses/Street.d.ts.map +1 -1
  260. package/dist/src/models/addresses/Street.js +6 -6
  261. package/dist/src/models/addresses/Street.js.map +1 -1
  262. package/dist/src/models/index.d.ts +46 -46
  263. package/dist/src/models/index.d.ts.map +1 -1
  264. package/dist/src/models/index.js +0 -1
  265. package/dist/src/models/index.js.map +1 -1
  266. package/dist/src/structures/OrganizationServerMetaData.d.ts.map +1 -1
  267. package/dist/src/structures/OrganizationServerMetaData.js +4 -4
  268. package/dist/src/structures/OrganizationServerMetaData.js.map +1 -1
  269. package/dist/tests/jest.global.setup.d.ts.map +1 -1
  270. package/dist/tests/jest.global.setup.js +15 -13
  271. package/dist/tests/jest.global.setup.js.map +1 -1
  272. package/dist/tests/jest.setup.js +3 -1
  273. package/dist/tests/jest.setup.js.map +1 -1
  274. package/dist/tsconfig.tsbuildinfo +1 -0
  275. package/package.json +3 -3
  276. package/src/factories/AddressFactory.ts +17 -17
  277. package/src/factories/EmergencyContactFactory.ts +30 -31
  278. package/src/factories/GroupFactory.ts +30 -30
  279. package/src/factories/MemberFactory.ts +41 -38
  280. package/src/factories/OrganizationFactory.ts +15 -15
  281. package/src/factories/ParentFactory.ts +24 -24
  282. package/src/factories/RecordFactory.ts +5 -4
  283. package/src/factories/RegisterCodeFactory.ts +7 -7
  284. package/src/factories/RegistrationFactory.ts +16 -16
  285. package/src/factories/RegistrationPeriodFactory.ts +5 -5
  286. package/src/factories/UserFactory.ts +20 -19
  287. package/src/factories/WebshopFactory.ts +14 -14
  288. package/src/helpers/DNSValidator.ts +89 -84
  289. package/src/helpers/EmailBuilder.ts +141 -135
  290. package/src/helpers/GroupBuilder.ts +181 -181
  291. package/src/helpers/Handlebars.ts +57 -54
  292. package/src/helpers/MemberMerger.test.ts +702 -702
  293. package/src/helpers/MemberMerger.ts +83 -77
  294. package/src/helpers/RateLimiter.ts +25 -27
  295. package/src/helpers/SetupStepsUpdater.ts +402 -0
  296. package/src/helpers/WebshopCounter.test.ts +12 -12
  297. package/src/helpers/WebshopCounter.ts +20 -19
  298. package/src/index.ts +20 -19
  299. package/src/migrations/1605262045-import-postcodes.ts +59 -63
  300. package/src/migrations/1605262046-import-postcodes-nl.ts +41 -43
  301. package/src/models/BalanceItem.ts +173 -172
  302. package/src/models/BalanceItemPayment.ts +32 -33
  303. package/src/models/BuckarooPayment.ts +7 -7
  304. package/src/models/CachedOutstandingBalance.ts +98 -99
  305. package/src/models/Document.ts +90 -87
  306. package/src/models/DocumentTemplate.ts +207 -198
  307. package/src/models/Email.ts +198 -200
  308. package/src/models/EmailRecipient.ts +38 -39
  309. package/src/models/EmailTemplate.ts +36 -37
  310. package/src/models/EmailVerificationCode.ts +146 -142
  311. package/src/models/Event.ts +53 -53
  312. package/src/models/Group.ts +136 -123
  313. package/src/models/Image.ts +48 -48
  314. package/src/models/Member.ts +277 -275
  315. package/src/models/MemberPlatformMembership.ts +71 -71
  316. package/src/models/MemberResponsibilityRecord.ts +32 -32
  317. package/src/models/MergedMember.ts +77 -77
  318. package/src/models/MolliePayment.ts +7 -7
  319. package/src/models/MollieToken.ts +131 -126
  320. package/src/models/OneTimeToken.ts +40 -39
  321. package/src/models/Order.ts +379 -372
  322. package/src/models/Organization.ts +332 -325
  323. package/src/models/OrganizationRegistrationPeriod.ts +50 -50
  324. package/src/models/PasswordToken.ts +42 -42
  325. package/src/models/PayconiqPayment.ts +80 -76
  326. package/src/models/Payment.ts +86 -86
  327. package/src/models/Platform.ts +21 -22
  328. package/src/models/RegisterCode.ts +26 -26
  329. package/src/models/Registration.ts +167 -168
  330. package/src/models/RegistrationPeriod.ts +29 -29
  331. package/src/models/STCredit.ts +24 -25
  332. package/src/models/STInvoice.ts +34 -34
  333. package/src/models/STPackage.ts +143 -136
  334. package/src/models/STPendingInvoice.ts +26 -26
  335. package/src/models/StripeAccount.ts +27 -27
  336. package/src/models/StripeCheckoutSession.ts +10 -10
  337. package/src/models/StripePaymentIntent.ts +10 -10
  338. package/src/models/Ticket.ts +51 -52
  339. package/src/models/Token.test.ts +13 -13
  340. package/src/models/Token.ts +64 -63
  341. package/src/models/UsedRegisterCode.ts +20 -21
  342. package/src/models/User.ts +148 -144
  343. package/src/models/UserPermissions.ts +25 -28
  344. package/src/models/Webshop.ts +53 -53
  345. package/src/models/WebshopDiscountCode.ts +33 -33
  346. package/src/models/addresses/City.ts +12 -12
  347. package/src/models/addresses/PostalCode.test.ts +68 -69
  348. package/src/models/addresses/PostalCode.ts +57 -57
  349. package/src/models/addresses/Province.ts +8 -8
  350. package/src/models/addresses/Street.ts +10 -12
  351. package/src/models/index.ts +54 -55
  352. package/src/structures/OrganizationServerMetaData.ts +36 -36
@@ -1,5 +1,5 @@
1
- import { Model } from "@simonbackx/simple-database";
2
- import { SQL } from "@stamhoofd/sql";
1
+ import { Model } from '@simonbackx/simple-database';
2
+ import { SQL } from '@stamhoofd/sql';
3
3
  import {
4
4
  Address,
5
5
  BooleanStatus,
@@ -8,8 +8,8 @@ import {
8
8
  Parent,
9
9
  ParentType,
10
10
  RecordAnswer,
11
- } from "@stamhoofd/structures";
12
- import { Formatter } from "@stamhoofd/utility";
11
+ } from '@stamhoofd/structures';
12
+ import { Formatter } from '@stamhoofd/utility';
13
13
  import {
14
14
  BalanceItem,
15
15
  Document,
@@ -19,13 +19,13 @@ import {
19
19
  MergedMember,
20
20
  Registration,
21
21
  User,
22
- } from "../models";
22
+ } from '../models';
23
23
 
24
24
  export async function mergeMultipleMembers(members: Member[]) {
25
25
  const { base, others } = selectBaseMember(members);
26
26
 
27
27
  if (!base.existsInDatabase) {
28
- throw Error("Base member does not exist in database")
28
+ throw Error('Base member does not exist in database');
29
29
  }
30
30
 
31
31
  for (const other of others) {
@@ -50,14 +50,14 @@ export async function findEqualMembers({
50
50
  }
51
51
 
52
52
  export async function mergeTwoMembers(base: Member, other: Member): Promise<void> {
53
- console.log('Merging two member', base.id, other.id, base.details.name, other.details.name)
53
+ console.log('Merging two member', base.id, other.id, base.details.name, other.details.name);
54
54
 
55
55
  if (base.id === other.id) {
56
- throw new Error('Cannot merge the same member')
56
+ throw new Error('Cannot merge the same member');
57
57
  }
58
58
 
59
59
  if (!base.existsInDatabase) {
60
- throw new Error('Cannot merge to base member that does not exist in database')
60
+ throw new Error('Cannot merge to base member that does not exist in database');
61
61
  }
62
62
 
63
63
  mergeMemberDetails(base, other);
@@ -75,7 +75,7 @@ export async function mergeTwoMembers(base: Member, other: Member): Promise<void
75
75
  await base.save();
76
76
 
77
77
  if (other.existsInDatabase) {
78
- console.log('Deleting duplicate member', other.id, other.details.name)
78
+ console.log('Deleting duplicate member', other.id, other.details.name);
79
79
 
80
80
  // store other member in merged_member table
81
81
  const mergedMember = MergedMember.fromMember(other, base.id);
@@ -97,12 +97,12 @@ async function mergeResponsibilities(base: Member, other: Member) {
97
97
  async function getResponsibilities(memberId: string) {
98
98
  const rows = await SQL.select()
99
99
  .from(SQL.table(MemberResponsibilityRecord.table))
100
- .where(SQL.column("memberId"), memberId)
100
+ .where(SQL.column('memberId'), memberId)
101
101
  .fetch();
102
102
 
103
103
  return MemberResponsibilityRecord.fromRows(
104
104
  rows,
105
- MemberResponsibilityRecord.table
105
+ MemberResponsibilityRecord.table,
106
106
  );
107
107
  }
108
108
 
@@ -112,22 +112,22 @@ async function mergeResponsibilities(base: Member, other: Member) {
112
112
  // Delete duplicate responsibilities where endDate is null -> keep responsibility with oldest start date
113
113
  for (const otherResponsibility of otherResponsibilities) {
114
114
  // check if equal responsibilities exist
115
- const otherResponsibilitiesWithoutCurrent =
116
- otherResponsibilities.filter(
117
- (o) => o.id !== otherResponsibility.id
115
+ const otherResponsibilitiesWithoutCurrent
116
+ = otherResponsibilities.filter(
117
+ o => o.id !== otherResponsibility.id,
118
118
  );
119
119
  const equalResponsibilities = baseResponsibilities
120
120
  .concat(otherResponsibilitiesWithoutCurrent)
121
121
  .filter((baseResponsibility) => {
122
122
  return (
123
- baseResponsibility.responsibilityId ===
124
- otherResponsibility.responsibilityId &&
125
- baseResponsibility.organizationId ===
126
- otherResponsibility.organizationId &&
127
- baseResponsibility.groupId ===
128
- otherResponsibility.groupId &&
129
- baseResponsibility.endDate === null &&
130
- otherResponsibility.endDate === null
123
+ baseResponsibility.responsibilityId
124
+ === otherResponsibility.responsibilityId
125
+ && baseResponsibility.organizationId
126
+ === otherResponsibility.organizationId
127
+ && baseResponsibility.groupId
128
+ === otherResponsibility.groupId
129
+ && baseResponsibility.endDate === null
130
+ && otherResponsibility.endDate === null
131
131
  );
132
132
  });
133
133
 
@@ -139,22 +139,22 @@ async function mergeResponsibilities(base: Member, other: Member) {
139
139
  // sort on startDate
140
140
  .sort((a, b) => a.startDate.getTime() - b.startDate.getTime());
141
141
 
142
- const responsibilityWithOldestStartDate =
143
- allEqualResponsibilities[0];
142
+ const responsibilityWithOldestStartDate
143
+ = allEqualResponsibilities[0];
144
144
 
145
145
  const responsibilitiesToDelete = allEqualResponsibilities.slice(
146
146
  1,
147
- undefined
147
+ undefined,
148
148
  );
149
149
 
150
150
  for (const responsibilityToDelete of responsibilitiesToDelete) {
151
151
  const baseIndex = baseResponsibilities.indexOf(
152
- responsibilityToDelete
152
+ responsibilityToDelete,
153
153
  );
154
154
  if (baseIndex !== -1) baseResponsibilities.splice(baseIndex, 1);
155
155
  else {
156
156
  const otherIndex = otherResponsibilities.indexOf(
157
- responsibilityToDelete
157
+ responsibilityToDelete,
158
158
  );
159
159
  if (otherIndex !== -1)
160
160
  otherResponsibilities.splice(otherIndex, 1);
@@ -169,7 +169,8 @@ async function mergeResponsibilities(base: Member, other: Member) {
169
169
  responsibilityWithOldestStartDate.memberId = base.id;
170
170
  await responsibilityWithOldestStartDate.save();
171
171
  }
172
- } else {
172
+ }
173
+ else {
173
174
  otherResponsibility.memberId = base.id;
174
175
  await otherResponsibility.save();
175
176
  }
@@ -195,7 +196,7 @@ class ModelWithMemberId extends Model {
195
196
  async function mergeModels<M extends typeof ModelWithMemberId>(
196
197
  base: Member,
197
198
  other: Member,
198
- model: M
199
+ model: M,
199
200
  ) {
200
201
  const baseId = base.id;
201
202
  const otherModels = await model.where({
@@ -215,11 +216,11 @@ export function mergeMemberDetails(base: Member, other: Member): void {
215
216
  otherDetails.cleanData();
216
217
 
217
218
  // string details
218
- mergeStringIfBaseNotSet(baseDetails, otherDetails, "firstName");
219
- mergeStringIfBaseNotSet(baseDetails, otherDetails, "lastName");
219
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, 'firstName');
220
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, 'lastName');
220
221
 
221
- mergeStringIfBaseNotSet(baseDetails, otherDetails, "memberNumber");
222
- mergeStringIfBaseNotSet(baseDetails, otherDetails, "uitpasNumber");
222
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, 'memberNumber');
223
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, 'uitpasNumber');
223
224
 
224
225
  // email
225
226
  mergeEmail(baseDetails, otherDetails);
@@ -236,19 +237,19 @@ export function mergeMemberDetails(base: Member, other: Member): void {
236
237
  mergeNotes(baseDetails, otherDetails);
237
238
 
238
239
  // date
239
- mergeIfBaseNotSet(baseDetails, otherDetails, "birthDay");
240
+ mergeIfBaseNotSet(baseDetails, otherDetails, 'birthDay');
240
241
 
241
242
  // boolean status
242
243
  mergeBooleanStatusIfBaseNotSet(
243
244
  baseDetails,
244
245
  otherDetails,
245
- "requiresFinancialSupport"
246
+ 'requiresFinancialSupport',
246
247
  );
247
248
 
248
249
  mergeBooleanStatusIfBaseNotSet(
249
250
  baseDetails,
250
251
  otherDetails,
251
- "dataPermissions"
252
+ 'dataPermissions',
252
253
  );
253
254
 
254
255
  // address
@@ -261,11 +262,11 @@ export function mergeMemberDetails(base: Member, other: Member): void {
261
262
  baseDetails.emergencyContacts = baseDetails.emergencyContacts.concat(
262
263
  // add contacts that are not yet in the list
263
264
  otherDetails.emergencyContacts.filter(
264
- (otherContact) =>
265
- !baseDetails.emergencyContacts.some((baseContact) =>
266
- baseContact.isEqual(otherContact)
267
- )
268
- )
265
+ otherContact =>
266
+ !baseDetails.emergencyContacts.some(baseContact =>
267
+ baseContact.isEqual(otherContact),
268
+ ),
269
+ ),
269
270
  );
270
271
 
271
272
  // review times
@@ -279,21 +280,21 @@ export function mergeMemberDetails(base: Member, other: Member): void {
279
280
  baseDetails.unverifiedEmails = Formatter.uniqueArray(
280
281
  baseDetails.unverifiedEmails.concat(
281
282
  otherDetails.unverifiedEmails.filter(
282
- (email) => !isNullOrEmpty(email)
283
- )
284
- )
283
+ email => !isNullOrEmpty(email),
284
+ ),
285
+ ),
285
286
  );
286
287
  baseDetails.unverifiedPhones = Formatter.uniqueArray(
287
288
  baseDetails.unverifiedPhones.concat(
288
289
  otherDetails.unverifiedPhones.filter(
289
- (phone) => !isNullOrEmpty(phone)
290
- )
291
- )
290
+ phone => !isNullOrEmpty(phone),
291
+ ),
292
+ ),
292
293
  );
293
294
 
294
295
  // unverified addresses
295
296
  for (const address of otherDetails.unverifiedAddresses) {
296
- if (!baseDetails.unverifiedAddresses.some((a) => a.id === address.id)) {
297
+ if (!baseDetails.unverifiedAddresses.some(a => a.id === address.id)) {
297
298
  baseDetails.unverifiedAddresses.push(address);
298
299
  }
299
300
  }
@@ -304,10 +305,10 @@ export function selectBaseMember(members: Member[]): {
304
305
  others: Member[];
305
306
  } {
306
307
  if (members.length < 2) {
307
- throw Error("Members array length is less than 2.");
308
+ throw Error('Members array length is less than 2.');
308
309
  }
309
310
  const sorted = members.sort(
310
- (m1, m2) => (m2.existsInDatabase ? 0 : m2.createdAt.getTime()) - (m1.existsInDatabase ? 0 : m1.createdAt.getTime())
311
+ (m1, m2) => (m2.existsInDatabase ? 0 : m2.createdAt.getTime()) - (m1.existsInDatabase ? 0 : m1.createdAt.getTime()),
311
312
  );
312
313
 
313
314
  return { base: sorted[0], others: sorted.slice(1, undefined) };
@@ -321,9 +322,11 @@ function mergeAnswers(base: MemberDetails, other: MemberDetails) {
321
322
 
322
323
  if (!baseAnswer) {
323
324
  newAnswers.set(otherId, otherAnswer);
324
- } else if (otherAnswer.date >= baseAnswer.date) {
325
+ }
326
+ else if (otherAnswer.date >= baseAnswer.date) {
325
327
  newAnswers.set(otherId, otherAnswer);
326
- } else {
328
+ }
329
+ else {
327
330
  // keep existing, this one is more up-to-date, don't add the other answer
328
331
  }
329
332
  }
@@ -333,9 +336,11 @@ function mergeAnswers(base: MemberDetails, other: MemberDetails) {
333
336
  function mergeNotes(base: MemberDetails, other: MemberDetails) {
334
337
  if (base.notes && other.notes) {
335
338
  base.notes = `${base.notes}\n${other.notes}`;
336
- } else if (base.notes) {
339
+ }
340
+ else if (base.notes) {
337
341
  return;
338
- } else {
342
+ }
343
+ else {
339
344
  base.notes = other.notes;
340
345
  }
341
346
  }
@@ -348,9 +353,9 @@ function mergeParents(base: MemberDetails, other: MemberDetails) {
348
353
  for (const otherParent of otherParents) {
349
354
  // equal if same first and last name
350
355
  const equalBaseParent = baseParents.find(
351
- (baseParent) =>
352
- hasEqualStringValue(baseParent, otherParent, "firstName") &&
353
- hasEqualStringValue(baseParent, otherParent, "lastName")
356
+ baseParent =>
357
+ hasEqualStringValue(baseParent, otherParent, 'firstName')
358
+ && hasEqualStringValue(baseParent, otherParent, 'lastName'),
354
359
  );
355
360
 
356
361
  if (!equalBaseParent) {
@@ -368,8 +373,8 @@ function mergeParent(base: Parent, other: Parent, baseDetails: MemberDetails) {
368
373
  if (base.type === ParentType.Other) {
369
374
  base.type = other.type;
370
375
  }
371
- mergeStringIfBaseNotSet(base, other, "firstName");
372
- mergeStringIfBaseNotSet(base, other, "lastName");
376
+ mergeStringIfBaseNotSet(base, other, 'firstName');
377
+ mergeStringIfBaseNotSet(base, other, 'lastName');
373
378
  // add other emails to alternative emails
374
379
  mergeEmail(base, other);
375
380
  mergePhone(base, other, baseDetails);
@@ -377,14 +382,14 @@ function mergeParent(base: Parent, other: Parent, baseDetails: MemberDetails) {
377
382
  }
378
383
 
379
384
  function mergeEmail(
380
- base: { email: string | null, alternativeEmails: string[] },
381
- other: { email: string | null, alternativeEmails: string[] }
385
+ base: { email: string | null; alternativeEmails: string[] },
386
+ other: { email: string | null; alternativeEmails: string[] },
382
387
  ) {
383
- const isEmailMerged = mergeStringIfBaseNotSet(base, other, "email");
388
+ const isEmailMerged = mergeStringIfBaseNotSet(base, other, 'email');
384
389
  base.alternativeEmails = Formatter.uniqueArray([...base.alternativeEmails, ...other.alternativeEmails]);
385
390
 
386
391
  if (!isEmailMerged && !isNullOrEmpty(other.email)) {
387
- if (!base.alternativeEmails.some((email) => email === other.email!)) {
392
+ if (!base.alternativeEmails.some(email => email === other.email!)) {
388
393
  base.alternativeEmails.push(other.email!);
389
394
  }
390
395
  }
@@ -393,13 +398,13 @@ function mergeEmail(
393
398
  function mergePhone(
394
399
  base: { phone: string | null | undefined },
395
400
  other: { phone: string | null | undefined },
396
- baseDetails: MemberDetails
401
+ baseDetails: MemberDetails,
397
402
  ) {
398
- const isPhoneMerged = mergeStringIfBaseNotSet(base, other, "phone");
403
+ const isPhoneMerged = mergeStringIfBaseNotSet(base, other, 'phone');
399
404
  const otherPhone = other.phone;
400
405
  if (!isPhoneMerged && !isNullOrEmpty(otherPhone)) {
401
406
  if (
402
- !baseDetails.unverifiedPhones.some((phone) => phone === otherPhone)
407
+ !baseDetails.unverifiedPhones.some(phone => phone === otherPhone)
403
408
  ) {
404
409
  baseDetails.unverifiedPhones.push(otherPhone!);
405
410
  }
@@ -409,18 +414,19 @@ function mergePhone(
409
414
  function mergeAddress(
410
415
  base: { address: Address | null | undefined },
411
416
  other: { address: Address | null | undefined },
412
- baseDetails: MemberDetails
417
+ baseDetails: MemberDetails,
413
418
  ) {
414
419
  const baseAddress = base.address;
415
420
  const otherAddress = other.address;
416
421
 
417
422
  if (!baseAddress) {
418
423
  base.address = otherAddress;
419
- } else if (otherAddress && baseAddress.id !== otherAddress.id) {
424
+ }
425
+ else if (otherAddress && baseAddress.id !== otherAddress.id) {
420
426
  // add other address to unverified addresses
421
427
  if (
422
428
  !baseDetails.unverifiedAddresses.some(
423
- (address) => address.id === otherAddress.id
429
+ address => address.id === otherAddress.id,
424
430
  )
425
431
  ) {
426
432
  baseDetails.unverifiedAddresses.push(otherAddress);
@@ -431,7 +437,7 @@ function mergeAddress(
431
437
  function mergeStringIfBaseNotSet<T, K extends keyof T>(
432
438
  base: T,
433
439
  other: T,
434
- key: K & (T[K] extends string | null | undefined ? K : never)
440
+ key: K & (T[K] extends string | null | undefined ? K : never),
435
441
  ): boolean {
436
442
  const baseValue = base[key] as string | null | undefined;
437
443
  if (!isNullOrEmpty(baseValue)) {
@@ -451,7 +457,7 @@ function mergeIfBaseNotSet<T, K extends keyof T>(
451
457
  base: T,
452
458
  other: T,
453
459
  key: K &
454
- (T[K] extends number | Date | boolean | null | undefined ? K : never)
460
+ (T[K] extends number | Date | boolean | null | undefined ? K : never),
455
461
  ): boolean {
456
462
  const baseValue = base[key] as number | Date | boolean | null | undefined;
457
463
  if (!(baseValue === null || baseValue === undefined)) return false;
@@ -464,7 +470,7 @@ function mergeIfBaseNotSet<T, K extends keyof T>(
464
470
  function mergeBooleanStatusIfBaseNotSet<T, K extends keyof T>(
465
471
  base: T,
466
472
  other: T,
467
- key: K & (T[K] extends BooleanStatus | null | undefined ? K : never)
473
+ key: K & (T[K] extends BooleanStatus | null | undefined ? K : never),
468
474
  ): boolean {
469
475
  const otherValue = other[key] as BooleanStatus | null | undefined;
470
476
  if (otherValue === null || otherValue === undefined) return false;
@@ -493,17 +499,17 @@ function mergeBooleanStatusIfBaseNotSet<T, K extends keyof T>(
493
499
  function hasEqualStringValue<T, K extends keyof T>(
494
500
  a: T,
495
501
  b: T,
496
- key: K & (T[K] extends string | null | undefined ? K : never)
502
+ key: K & (T[K] extends string | null | undefined ? K : never),
497
503
  ) {
498
504
  return hasValueAndIsEqual(
499
505
  a[key] as string | null | undefined,
500
- b[key] as string | null | undefined
506
+ b[key] as string | null | undefined,
501
507
  );
502
508
  }
503
509
 
504
510
  function hasValueAndIsEqual(
505
511
  a: string | null | undefined,
506
- b: string | null | undefined
512
+ b: string | null | undefined,
507
513
  ): boolean {
508
514
  if (isNullOrEmpty(a) || isNullOrEmpty(b)) return false;
509
515
  return isStringEqual(a as string, b as string);
@@ -518,5 +524,5 @@ function toLowerTrim(name: string) {
518
524
  }
519
525
 
520
526
  function isNullOrEmpty(value: string | null | undefined) {
521
- return value === null || value === undefined || value.trim() === "";
527
+ return value === null || value === undefined || value.trim() === '';
522
528
  }
@@ -1,76 +1,74 @@
1
- import { SimpleError } from "@simonbackx/simple-errors"
1
+ import { SimpleError } from '@simonbackx/simple-errors';
2
2
 
3
3
  export class RateLimitWindow {
4
- start: Date = new Date()
5
- windows: Map<string, number> = new Map()
4
+ start: Date = new Date();
5
+ windows: Map<string, number> = new Map();
6
6
 
7
- limit: number
7
+ limit: number;
8
8
 
9
9
  /**
10
10
  * in ms
11
11
  */
12
- duration: number
12
+ duration: number;
13
13
 
14
14
  constructor(options: {
15
- limit: number,
16
- duration: number
15
+ limit: number;
16
+ duration: number;
17
17
  }) {
18
- this.limit = options.limit
19
- this.duration = options.duration
18
+ this.limit = options.limit;
19
+ this.duration = options.duration;
20
20
  }
21
21
 
22
22
  isExpired() {
23
- return this.age > this.duration
23
+ return this.age > this.duration;
24
24
  }
25
25
 
26
26
  get age() {
27
- return Date.now() - this.start.getTime()
27
+ return Date.now() - this.start.getTime();
28
28
  }
29
29
 
30
30
  track(key: string, amount = 1) {
31
31
  if (this.isExpired()) {
32
32
  // We have a shared window
33
- this.start = new Date()
34
- this.windows.clear()
33
+ this.start = new Date();
34
+ this.windows.clear();
35
35
  }
36
36
 
37
- let w = this.windows.get(key) ?? 0
38
- w += amount
37
+ let w = this.windows.get(key) ?? 0;
38
+ w += amount;
39
39
 
40
40
  if (w > this.limit) {
41
- const retryAfter = Math.ceil((this.duration - this.age) / 1000)
41
+ const retryAfter = Math.ceil((this.duration - this.age) / 1000);
42
42
  throw new SimpleError({
43
43
  code: 'rate_limit',
44
- message: `Rate limit exceeded (${w} ${amount > 1 ? '('+amount+' added)' : ''} requests in ${Math.round(this.age/1000)}s). Retry after ${retryAfter}s. Check your code and try to reduce the number of (parallel) requests you make. Add waiting periods if needed.`,
44
+ message: `Rate limit exceeded (${w} ${amount > 1 ? '(' + amount + ' added)' : ''} requests in ${Math.round(this.age / 1000)}s). Retry after ${retryAfter}s. Check your code and try to reduce the number of (parallel) requests you make. Add waiting periods if needed.`,
45
45
  human: `Oeps! Te veel aanvragen. Om spam te vermijden is jouw aanvraag tijdelijk geblokkeerd. Probeer het over ${retryAfter} seconden opnieuw.`,
46
- statusCode: 429
47
- })
46
+ statusCode: 429,
47
+ });
48
48
  }
49
49
 
50
50
  // Save
51
- this.windows.set(key, w)
51
+ this.windows.set(key, w);
52
52
  }
53
53
  }
54
54
 
55
-
56
55
  export class RateLimiter {
57
- windows: RateLimitWindow[] = []
56
+ windows: RateLimitWindow[] = [];
58
57
 
59
58
  constructor(options: {
60
- limits: {duration: number, limit: number}[]
59
+ limits: { duration: number; limit: number }[];
61
60
  }) {
62
-
63
61
  for (const limit of options.limits) {
64
62
  this.windows.push(new RateLimitWindow({
65
63
  limit: limit.limit,
66
- duration: limit.duration
67
- }))
64
+ duration: limit.duration,
65
+ }));
68
66
  }
69
67
  }
70
68
 
71
69
  track(key: string, amount = 1) {
72
70
  for (const window of this.windows) {
73
- window.track(key, amount)
71
+ window.track(key, amount);
74
72
  }
75
73
  }
76
74
  }