@stamhoofd/backend 2.143.1 → 2.145.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 (111) hide show
  1. package/package.json +19 -19
  2. package/src/crons/fake-settlements.test.ts +13 -11
  3. package/src/crons/fake-settlements.ts +22 -38
  4. package/src/crons/mollie-chargebacks.ts +31 -29
  5. package/src/crons/mollie-refunds.ts +61 -59
  6. package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +16 -5
  7. package/src/endpoints/auth/CreateTokenEndpoint.test.ts +210 -4
  8. package/src/endpoints/auth/CreateTokenEndpoint.ts +9 -20
  9. package/src/endpoints/auth/DeleteTokenEndpoint.test.ts +29 -0
  10. package/src/endpoints/auth/DeleteTokenEndpoint.ts +2 -1
  11. package/src/endpoints/auth/GetUserEndpoint.test.ts +32 -11
  12. package/src/endpoints/auth/MFA.security.test.ts +9 -7
  13. package/src/endpoints/auth/MFA.test.ts +42 -15
  14. package/src/endpoints/auth/PatchUserEndpoint.ts +3 -2
  15. package/src/endpoints/auth/VerifyEmailEndpoint.ts +5 -4
  16. package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +4 -3
  17. package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +6 -5
  18. package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +5 -4
  19. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +5 -4
  20. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +2 -1
  21. package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +2 -1
  22. package/src/endpoints/global/files/UploadFile.test.ts +2 -1
  23. package/src/endpoints/global/files/UploadFile.ts +53 -25
  24. package/src/endpoints/global/files/UploadImage.test.ts +2 -1
  25. package/src/endpoints/global/files/UploadImage.ts +32 -6
  26. package/src/endpoints/global/files/upload-security.test.ts +3 -2
  27. package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +4 -3
  28. package/src/endpoints/global/members/GetMembersEndpoint.test.ts +26 -25
  29. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +57 -56
  30. package/src/endpoints/global/members/SendMemberSecurityCodeEndpoint.test.ts +4 -3
  31. package/src/endpoints/global/platform/GetPlatformEndpoint.test.ts +6 -4
  32. package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +6 -6
  33. package/src/endpoints/global/platform/SignOutPlatformAdminsEndpoint.test.ts +9 -8
  34. package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +14 -13
  35. package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +24 -23
  36. package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +4 -3
  37. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.test.ts +2 -1
  38. package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.test.ts +2 -1
  39. package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +20 -19
  40. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemBreakdownEndpoint.test.ts +2 -1
  41. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.test.ts +2 -1
  42. package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.test.ts +3 -2
  43. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +4 -3
  44. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +5 -4
  45. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +5 -4
  46. package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.test.ts +2 -1
  47. package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.test.ts +2 -1
  48. package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +0 -1
  49. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +23 -22
  50. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +4 -4
  51. package/src/endpoints/organization/dashboard/payments/GetPaymentBreakdownEndpoint.test.ts +2 -1
  52. package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.test.ts +4 -3
  53. package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +2 -2
  54. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.test.ts +2 -1
  55. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +5 -4
  56. package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +7 -6
  57. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +9 -8
  58. package/src/endpoints/organization/dashboard/settlements/SettlementsExportEndpoint.test.ts +3 -2
  59. package/src/endpoints/organization/dashboard/settlements/SettlementsSyncEndpoint.test.ts +2 -1
  60. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.test.ts +5 -4
  61. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +2 -1
  62. package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.test.ts +3 -2
  63. package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.test.ts +6 -5
  64. package/src/endpoints/organization/dashboard/users/SignOutOrganizationAdminsEndpoint.test.ts +16 -15
  65. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.test.ts +2 -1
  66. package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.test.ts +2 -1
  67. package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.test.ts +2 -1
  68. package/src/endpoints/organization/dashboard/webshops/WebshopReservedPathSegments.test.ts +2 -1
  69. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.test.ts +4 -3
  70. package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +6 -5
  71. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +94 -8
  72. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +18 -18
  73. package/src/helpers/ApplicationFeeInvoicer.ts +1 -1
  74. package/src/helpers/Context.ts +14 -21
  75. package/src/helpers/ContextStorage.ts +5 -0
  76. package/src/helpers/MollieSettlementSync.test.ts +94 -41
  77. package/src/helpers/MollieSettlementSync.ts +174 -78
  78. package/src/helpers/StripeSettlementSync.test.ts +0 -85
  79. package/src/helpers/StripeSettlementSync.ts +47 -70
  80. package/src/helpers/TwoFactorHelper.ts +21 -22
  81. package/src/helpers/streamForBreakdown.ts +1 -1
  82. package/src/services/AdminSessionService.ts +5 -3
  83. package/src/services/InvoiceService.ts +2 -2
  84. package/src/services/MollieService.ts +168 -126
  85. package/src/services/PaymentService.ts +2 -2
  86. package/src/services/SSOService.test.ts +25 -1
  87. package/src/services/SSOService.ts +17 -6
  88. package/src/services/SessionService.test.ts +319 -0
  89. package/src/services/SessionService.ts +357 -0
  90. package/src/services/SettlementService.test.ts +13 -85
  91. package/src/services/SettlementService.ts +5 -113
  92. package/src/services/WebshopCrowdfundingService.test.ts +4 -3
  93. package/src/sql-filters/balance-items.ts +10 -0
  94. package/src/sql-filters/registrations.ts +59 -1
  95. package/tests/actions/patchUserMember.ts +2 -1
  96. package/tests/e2e/api-rate-limits.test.ts +2 -1
  97. package/tests/e2e/bundle-discounts.test.ts +4 -3
  98. package/tests/e2e/charge-members.test.ts +6 -5
  99. package/tests/e2e/documents.test.ts +4 -3
  100. package/tests/e2e/private-files.test.ts +9 -8
  101. package/tests/e2e/register.test.ts +4 -3
  102. package/tests/e2e/stock.test.ts +4 -3
  103. package/tests/e2e/tickets.test.ts +4 -3
  104. package/tests/helpers/ExportSlice.ts +2 -1
  105. package/tests/helpers/MollieMocker.ts +173 -38
  106. package/tests/init/initAdmin.ts +2 -1
  107. package/tests/init/initPlatformAdmin.ts +2 -1
  108. package/src/helpers/ViesHelper.test.ts +0 -401
  109. package/src/helpers/ViesHelper.ts +0 -215
  110. package/src/services/PeppolDirectoryService.test.ts +0 -139
  111. package/src/services/PeppolDirectoryService.ts +0 -111
@@ -13,6 +13,7 @@ import { testServer } from '../../../../tests/helpers/TestServer.js';
13
13
  import { initUitpasApi } from '../../../../tests/init/index.js';
14
14
  import { UniqueMemberNumberService } from '../../../services/UniqueMemberNumberService.js';
15
15
  import { PatchOrganizationMembersEndpoint } from './PatchOrganizationMembersEndpoint.js';
16
+ import { SessionService } from '../../../services/SessionService.js';
16
17
 
17
18
  const baseUrl = `/organization/members`;
18
19
  const endpoint = new PatchOrganizationMembersEndpoint();
@@ -50,7 +51,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
50
51
  generateSensitiveData: true,
51
52
  }).create();
52
53
 
53
- const token = await Token.createToken(user);
54
+ const token = await SessionService.createSession(user);
54
55
 
55
56
  const arr: Body = new PatchableArray();
56
57
  const put = MemberWithRegistrationsBlob.create({
@@ -100,7 +101,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
100
101
  organization,
101
102
  }).create();
102
103
 
103
- const token = await Token.createToken(user);
104
+ const token = await SessionService.createSession(user);
104
105
 
105
106
  const arr: Body = new PatchableArray();
106
107
  const put = MemberWithRegistrationsBlob.create({
@@ -173,7 +174,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
173
174
  group,
174
175
  }).create();
175
176
 
176
- const token = await Token.createToken(user);
177
+ const token = await SessionService.createSession(user);
177
178
 
178
179
  const arr: Body = new PatchableArray();
179
180
 
@@ -229,7 +230,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
229
230
  }),
230
231
  }).create();
231
232
 
232
- const token = await Token.createToken(user);
233
+ const token = await SessionService.createSession(user);
233
234
 
234
235
  const arr: Body = new PatchableArray();
235
236
  const newBirthDay = new Date(existingMember.details.birthDay!.getTime() + 1);
@@ -275,7 +276,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
275
276
  generateData: false,
276
277
  }).create();
277
278
 
278
- const token = await Token.createToken(user);
279
+ const token = await SessionService.createSession(user);
279
280
 
280
281
  const arr: Body = new PatchableArray();
281
282
  const newBirthDay = new Date(existingMember.details.birthDay!.getTime() + 1);
@@ -361,7 +362,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
361
362
  group,
362
363
  }).create();
363
364
 
364
- const token = await Token.createToken(user);
365
+ const token = await SessionService.createSession(user);
365
366
 
366
367
  const arr: Body = new PatchableArray();
367
368
  const newBirthDay = new Date(existingMember.details.birthDay!.getTime() + 1);
@@ -423,7 +424,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
423
424
  existingMember.organizationId = organization.id;
424
425
  await existingMember.save();
425
426
 
426
- const token = await Token.createToken(user);
427
+ const token = await SessionService.createSession(user);
427
428
 
428
429
  const arr: Body = new PatchableArray();
429
430
  const put = MemberWithRegistrationsBlob.create({
@@ -465,7 +466,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
465
466
  existingMember.organizationId = organization.id;
466
467
  await existingMember.save();
467
468
 
468
- const token = await Token.createToken(user);
469
+ const token = await SessionService.createSession(user);
469
470
 
470
471
  const arr: Body = new PatchableArray();
471
472
  const put = MemberWithRegistrationsBlob.create({
@@ -511,7 +512,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
511
512
  organization: otherOrganization,
512
513
  }).create();
513
514
 
514
- const token = await Token.createToken(user);
515
+ const token = await SessionService.createSession(user);
515
516
 
516
517
  const arr: Body = new PatchableArray();
517
518
  const patch = MemberWithRegistrationsBlob.patch({
@@ -550,7 +551,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
550
551
  organization,
551
552
  }).create();
552
553
 
553
- const token = await Token.createToken(user);
554
+ const token = await SessionService.createSession(user);
554
555
 
555
556
  const arr: Body = new PatchableArray();
556
557
  const patch = MemberWithRegistrationsBlob.patch({
@@ -614,7 +615,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
614
615
  group,
615
616
  }).create();
616
617
 
617
- const token = await Token.createToken(user);
618
+ const token = await SessionService.createSession(user);
618
619
 
619
620
  const arr: Body = new PatchableArray();
620
621
  const patch = MemberWithRegistrationsBlob.patch({
@@ -687,7 +688,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
687
688
  deactivatedAt: new Date(),
688
689
  }).create();
689
690
 
690
- const token = await Token.createToken(user);
691
+ const token = await SessionService.createSession(user);
691
692
 
692
693
  const arr: Body = new PatchableArray();
693
694
  const patch = MemberWithRegistrationsBlob.patch({
@@ -733,7 +734,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
733
734
  generateData: false,
734
735
  }).create();
735
736
 
736
- const token = await Token.createToken(user);
737
+ const token = await SessionService.createSession(user);
737
738
 
738
739
  const arr: Body = new PatchableArray();
739
740
  const patch = MemberWithRegistrationsBlob.patch({
@@ -779,7 +780,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
779
780
  generateData: false,
780
781
  }).create();
781
782
 
782
- const token = await Token.createToken(user);
783
+ const token = await SessionService.createSession(user);
783
784
 
784
785
  const arr: Body = new PatchableArray();
785
786
  const patch = MemberWithRegistrationsBlob.patch({
@@ -825,7 +826,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
825
826
  const member = await new MemberFactory({ firstName, lastName, birthDay, generateData: false }).create();
826
827
  await new RegistrationFactory({ member, group }).create();
827
828
 
828
- const token = await Token.createToken(user);
829
+ const token = await SessionService.createSession(user);
829
830
 
830
831
  const arr: Body = new PatchableArray();
831
832
  arr.addPatch(MemberWithRegistrationsBlob.patch({
@@ -851,7 +852,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
851
852
  const member = await new MemberFactory({ firstName, lastName, birthDay, generateData: false }).create();
852
853
  await new RegistrationFactory({ member, organization }).create();
853
854
 
854
- const token = await Token.createToken(user);
855
+ const token = await SessionService.createSession(user);
855
856
 
856
857
  const base = member.details.birthDay!;
857
858
  const newBirthDay = new Date(base.getFullYear() + 5, base.getMonth() + 4, base.getDate() + 6);
@@ -911,7 +912,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
911
912
  organization,
912
913
  }).create();
913
914
 
914
- const token = await Token.createToken(user);
915
+ const token = await SessionService.createSession(user);
915
916
 
916
917
  const recordAnswers = new PatchMap() as PatchAnswers;
917
918
 
@@ -980,7 +981,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
980
981
  organization,
981
982
  }).create();
982
983
 
983
- const token = await Token.createToken(user);
984
+ const token = await SessionService.createSession(user);
984
985
 
985
986
  const recordAnswers = new PatchMap() as PatchAnswers;
986
987
 
@@ -1052,7 +1053,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1052
1053
  organization,
1053
1054
  }).create();
1054
1055
 
1055
- const token = await Token.createToken(user);
1056
+ const token = await SessionService.createSession(user);
1056
1057
 
1057
1058
  const recordAnswers = new PatchMap() as PatchAnswers;
1058
1059
 
@@ -1128,7 +1129,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1128
1129
  group,
1129
1130
  }).create();
1130
1131
 
1131
- const token = await Token.createToken(user);
1132
+ const token = await SessionService.createSession(user);
1132
1133
 
1133
1134
  const recordAnswers = new PatchMap() as PatchAnswers;
1134
1135
 
@@ -1197,7 +1198,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1197
1198
  group,
1198
1199
  }).create();
1199
1200
 
1200
- const token = await Token.createToken(user);
1201
+ const token = await SessionService.createSession(user);
1201
1202
 
1202
1203
  const recordAnswers = new PatchMap() as PatchAnswers;
1203
1204
 
@@ -1267,7 +1268,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1267
1268
  group,
1268
1269
  }).create();
1269
1270
 
1270
- const token = await Token.createToken(user);
1271
+ const token = await SessionService.createSession(user);
1271
1272
 
1272
1273
  const recordAnswers = new PatchMap() as PatchAnswers;
1273
1274
 
@@ -1345,7 +1346,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1345
1346
  group,
1346
1347
  }).create();
1347
1348
 
1348
- const token = await Token.createToken(user);
1349
+ const token = await SessionService.createSession(user);
1349
1350
 
1350
1351
  const recordAnswers = new PatchMap() as PatchAnswers;
1351
1352
 
@@ -1429,7 +1430,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1429
1430
  const admin = await new UserFactory({
1430
1431
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
1431
1432
  }).create();
1432
- const token = await Token.createToken(admin);
1433
+ const token = await SessionService.createSession(admin);
1433
1434
 
1434
1435
  const arr: Body = new PatchableArray();
1435
1436
  const d = new Date();
@@ -1543,7 +1544,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1543
1544
  const admin = await new UserFactory({
1544
1545
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
1545
1546
  }).create();
1546
- const token = await Token.createToken(admin);
1547
+ const token = await SessionService.createSession(admin);
1547
1548
 
1548
1549
  const arr: Body = new PatchableArray();
1549
1550
  const parentsPatch = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
@@ -1670,7 +1671,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1670
1671
  const admin = await new UserFactory({
1671
1672
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
1672
1673
  }).create();
1673
- const token = await Token.createToken(admin);
1674
+ const token = await SessionService.createSession(admin);
1674
1675
 
1675
1676
  const arr: Body = new PatchableArray();
1676
1677
  const parentsPatch = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
@@ -1787,7 +1788,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1787
1788
  const admin = await new UserFactory({
1788
1789
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
1789
1790
  }).create();
1790
- const token = await Token.createToken(admin);
1791
+ const token = await SessionService.createSession(admin);
1791
1792
 
1792
1793
  const arr: Body = new PatchableArray();
1793
1794
  const parentsPatch = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
@@ -1939,7 +1940,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
1939
1940
  const admin = await new UserFactory({
1940
1941
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
1941
1942
  }).create();
1942
- const token = await Token.createToken(admin);
1943
+ const token = await SessionService.createSession(admin);
1943
1944
 
1944
1945
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
1945
1946
  nonEmtpyArray.addPatch(Parent.patch({
@@ -2082,7 +2083,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2082
2083
  const admin = await new UserFactory({
2083
2084
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2084
2085
  }).create();
2085
- const token = await Token.createToken(admin);
2086
+ const token = await SessionService.createSession(admin);
2086
2087
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
2087
2088
  nonEmtpyArray.addPatch(Parent.patch({
2088
2089
  id: parent1.id,
@@ -2220,7 +2221,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2220
2221
  const admin = await new UserFactory({
2221
2222
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2222
2223
  }).create();
2223
- const token = await Token.createToken(admin);
2224
+ const token = await SessionService.createSession(admin);
2224
2225
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
2225
2226
  nonEmtpyArray.addPatch(Parent.patch({
2226
2227
  id: parent1.id,
@@ -2322,7 +2323,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2322
2323
  const admin = await new UserFactory({
2323
2324
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2324
2325
  }).create();
2325
- const token = await Token.createToken(admin);
2326
+ const token = await SessionService.createSession(admin);
2326
2327
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
2327
2328
  nonEmtpyArray.addPut(oldestParent);
2328
2329
 
@@ -2410,7 +2411,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2410
2411
  const admin = await new UserFactory({
2411
2412
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2412
2413
  }).create();
2413
- const token = await Token.createToken(admin);
2414
+ const token = await SessionService.createSession(admin);
2414
2415
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<Parent>;
2415
2416
  nonEmtpyArray.addPatch(Parent.patch({
2416
2417
  id: latestParent.id,
@@ -2532,7 +2533,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2532
2533
  const admin = await new UserFactory({
2533
2534
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2534
2535
  }).create();
2535
- const token = await Token.createToken(admin);
2536
+ const token = await SessionService.createSession(admin);
2536
2537
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
2537
2538
  nonEmtpyArray.addPatch(EmergencyContact.patch({
2538
2539
  id: contact1.id,
@@ -2650,7 +2651,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2650
2651
  const admin = await new UserFactory({
2651
2652
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2652
2653
  }).create();
2653
- const token = await Token.createToken(admin);
2654
+ const token = await SessionService.createSession(admin);
2654
2655
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
2655
2656
  nonEmtpyArray.addPatch(EmergencyContact.patch({
2656
2657
  id: contact1.id,
@@ -2727,7 +2728,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2727
2728
  const admin = await new UserFactory({
2728
2729
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2729
2730
  }).create();
2730
- const token = await Token.createToken(admin);
2731
+ const token = await SessionService.createSession(admin);
2731
2732
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
2732
2733
  nonEmtpyArray.addPut(EmergencyContact.create({
2733
2734
  name: 'Linda Doe',
@@ -2811,7 +2812,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2811
2812
  const admin = await new UserFactory({
2812
2813
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2813
2814
  }).create();
2814
- const token = await Token.createToken(admin);
2815
+ const token = await SessionService.createSession(admin);
2815
2816
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
2816
2817
  nonEmtpyArray.addPut(oldVersionContact);
2817
2818
 
@@ -2881,7 +2882,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2881
2882
  const admin = await new UserFactory({
2882
2883
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2883
2884
  }).create();
2884
- const token = await Token.createToken(admin);
2885
+ const token = await SessionService.createSession(admin);
2885
2886
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
2886
2887
  nonEmtpyArray.addPatch(EmergencyContact.patch({
2887
2888
  id: contact1.id,
@@ -2956,7 +2957,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
2956
2957
  const admin = await new UserFactory({
2957
2958
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
2958
2959
  }).create();
2959
- const token = await Token.createToken(admin);
2960
+ const token = await SessionService.createSession(admin);
2960
2961
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
2961
2962
  const d = new Date();
2962
2963
  nonEmtpyArray.addPatch(EmergencyContact.patch({
@@ -3027,7 +3028,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3027
3028
  const admin = await new UserFactory({
3028
3029
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
3029
3030
  }).create();
3030
- const token = await Token.createToken(admin);
3031
+ const token = await SessionService.createSession(admin);
3031
3032
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
3032
3033
  nonEmtpyArray.addPut(newContact);
3033
3034
 
@@ -3085,7 +3086,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3085
3086
  const admin = await new UserFactory({
3086
3087
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
3087
3088
  }).create();
3088
- const token = await Token.createToken(admin);
3089
+ const token = await SessionService.createSession(admin);
3089
3090
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
3090
3091
  nonEmtpyArray.addPatch(updatedContact);
3091
3092
 
@@ -3140,7 +3141,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3140
3141
  const admin = await new UserFactory({
3141
3142
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
3142
3143
  }).create();
3143
- const token = await Token.createToken(admin);
3144
+ const token = await SessionService.createSession(admin);
3144
3145
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
3145
3146
  nonEmtpyArray.addDelete(contact1.id);
3146
3147
 
@@ -3206,7 +3207,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3206
3207
  const admin = await new UserFactory({
3207
3208
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
3208
3209
  }).create();
3209
- const token = await Token.createToken(admin);
3210
+ const token = await SessionService.createSession(admin);
3210
3211
  const nonEmtpyArray1 = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
3211
3212
  nonEmtpyArray1.addPatch(EmergencyContact.patch({
3212
3213
  id: contact1.id,
@@ -3300,7 +3301,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3300
3301
  const admin = await new UserFactory({
3301
3302
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
3302
3303
  }).create();
3303
- const token = await Token.createToken(admin);
3304
+ const token = await SessionService.createSession(admin);
3304
3305
  const nonEmtpyArray = new PatchableArray() as PatchableArrayAutoEncoder<EmergencyContact>;
3305
3306
  nonEmtpyArray.addPatch(EmergencyContact.patch({
3306
3307
  id: contact1.id,
@@ -3354,7 +3355,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3354
3355
  organization, // since we are in platform mode, this will only set the permissions for this organization
3355
3356
  }).create();
3356
3357
 
3357
- const token = await Token.createToken(user);
3358
+ const token = await SessionService.createSession(user);
3358
3359
 
3359
3360
  // patch uitpas number
3360
3361
  const arr: Body = new PatchableArray();
@@ -3401,7 +3402,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3401
3402
  organization, // since we are in platform mode, this will only set the permissions for this organization
3402
3403
  }).create();
3403
3404
 
3404
- const token = await Token.createToken(user);
3405
+ const token = await SessionService.createSession(user);
3405
3406
 
3406
3407
  // create member
3407
3408
  const member = await new MemberFactory({
@@ -3459,7 +3460,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3459
3460
  organization, // since we are in platform mode, this will only set the permissions for this organization
3460
3461
  }).create();
3461
3462
 
3462
- const token = await Token.createToken(user);
3463
+ const token = await SessionService.createSession(user);
3463
3464
 
3464
3465
  // create member
3465
3466
  const member = await new MemberFactory({
@@ -3513,7 +3514,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3513
3514
  organization, // since we are in platform mode, this will only set the permissions for this organization
3514
3515
  }).create();
3515
3516
 
3516
- const token = await Token.createToken(user);
3517
+ const token = await SessionService.createSession(user);
3517
3518
 
3518
3519
  // create member
3519
3520
  const member = await new MemberFactory({
@@ -3566,7 +3567,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3566
3567
  organization, // since we are in platform mode, this will only set the permissions for this organization
3567
3568
  }).create();
3568
3569
 
3569
- const token = await Token.createToken(user);
3570
+ const token = await SessionService.createSession(user);
3570
3571
 
3571
3572
  // create member
3572
3573
  const member = await new MemberFactory({
@@ -3627,7 +3628,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3627
3628
  organization, // since we are in platform mode, this will only set the permissions for this organization
3628
3629
  }).create();
3629
3630
 
3630
- const token = await Token.createToken(user);
3631
+ const token = await SessionService.createSession(user);
3631
3632
 
3632
3633
  // create member
3633
3634
  const member = await new MemberFactory({
@@ -3686,7 +3687,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3686
3687
  organization, // since we are in platform mode, this will only set the permissions for this organization
3687
3688
  }).create();
3688
3689
 
3689
- const token = await Token.createToken(user);
3690
+ const token = await SessionService.createSession(user);
3690
3691
 
3691
3692
  // create member
3692
3693
  const member = await new MemberFactory({
@@ -3747,7 +3748,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3747
3748
  organization, // since we are in platform mode, this will only set the permissions for this organization
3748
3749
  }).create();
3749
3750
 
3750
- const token = await Token.createToken(user);
3751
+ const token = await SessionService.createSession(user);
3751
3752
 
3752
3753
  // create member
3753
3754
  const member = await new MemberFactory({
@@ -3813,7 +3814,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3813
3814
  organization, // since we are in platform mode, this will only set the permissions for this organization
3814
3815
  }).create();
3815
3816
 
3816
- const token = await Token.createToken(user);
3817
+ const token = await SessionService.createSession(user);
3817
3818
 
3818
3819
  // create member
3819
3820
  const member = await new MemberFactory({
@@ -3870,7 +3871,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3870
3871
  organization, // since we are in platform mode, this will only set the permissions for this organization
3871
3872
  }).create();
3872
3873
 
3873
- const token = await Token.createToken(user);
3874
+ const token = await SessionService.createSession(user);
3874
3875
 
3875
3876
  // create member
3876
3877
  const member = await new MemberFactory({
@@ -3921,7 +3922,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3921
3922
  organization, // since we are in platform mode, this will only set the permissions for this organization
3922
3923
  }).create();
3923
3924
 
3924
- const token = await Token.createToken(user);
3925
+ const token = await SessionService.createSession(user);
3925
3926
 
3926
3927
  // create member
3927
3928
  const member = await new MemberFactory({
@@ -3982,7 +3983,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
3982
3983
  organization, // since we are in platform mode, this will only set the permissions for this organization
3983
3984
  }).create();
3984
3985
 
3985
- const token = await Token.createToken(user);
3986
+ const token = await SessionService.createSession(user);
3986
3987
 
3987
3988
  // create member
3988
3989
  const member = await new MemberFactory({
@@ -4084,7 +4085,7 @@ describe('Endpoint.PatchOrganizationMembersEndpoint', () => {
4084
4085
  permissions: Permissions.create({ level: PermissionLevel.Full }),
4085
4086
  organization,
4086
4087
  }).create();
4087
- const token = await Token.createToken(user);
4088
+ const token = await SessionService.createSession(user);
4088
4089
 
4089
4090
  const member = await new MemberFactory({ organization }).create();
4090
4091
  const group = await new GroupFactory({ organization, period }).create();
@@ -1,7 +1,7 @@
1
1
  import { Request } from '@simonbackx/simple-endpoints';
2
2
  import { EmailMocker } from '@stamhoofd/email';
3
- import type { RateLimiter } from '@stamhoofd/models';
4
- import { AuditLog, EmailTemplateFactory, Member, MemberFactory, OrganizationFactory, Token, UserFactory } from '@stamhoofd/models';
3
+ import type { RateLimiter, Token } from '@stamhoofd/models';
4
+ import { AuditLog, EmailTemplateFactory, Member, MemberFactory, OrganizationFactory, UserFactory } from '@stamhoofd/models';
5
5
  import { AuditLogReplacementType, AuditLogType, EmailTemplateType, MemberDetails, Parent, ParentType, SecurityCodeSendMethod, SendMemberSecurityCodeRequest } from '@stamhoofd/structures';
6
6
  import { STExpect, TestUtils } from '@stamhoofd/test-utils';
7
7
  import { Formatter } from '@stamhoofd/utility';
@@ -9,6 +9,7 @@ import type { SMSMocker } from '../../../../tests/helpers/SMSMocker.js';
9
9
  import { testServer } from '../../../../tests/helpers/TestServer.js';
10
10
  import { initSMSApi } from '../../../../tests/init/index.js';
11
11
  import { memberPhoneLookupLimiter, memberSecurityCodeSendLimiter, SendMemberSecurityCodeEndpoint, smsOrganizationLimiter, userSecurityCodeSendLimiter } from './SendMemberSecurityCodeEndpoint.js';
12
+ import { SessionService } from '../../../services/SessionService.js';
12
13
 
13
14
  const baseUrl = `/members/security-code`;
14
15
  const endpoint = new SendMemberSecurityCodeEndpoint();
@@ -41,7 +42,7 @@ describe('Endpoint.SendMemberSecurityCode', () => {
41
42
  await new EmailTemplateFactory({ type: EmailTemplateType.MemberSecurityCode }).create();
42
43
 
43
44
  const user = await new UserFactory({ organization }).create();
44
- const token = await Token.createToken(user);
45
+ const token = await SessionService.createSession(user);
45
46
 
46
47
  const details = MemberDetails.create({
47
48
  firstName: 'Jef',
@@ -1,6 +1,8 @@
1
1
  import { Request } from '@simonbackx/simple-endpoints';
2
- import { Token, UserFactory } from '@stamhoofd/models';
2
+ import type { Token } from '@stamhoofd/models';
3
+ import { UserFactory } from '@stamhoofd/models';
3
4
  import { PermissionLevel, Permissions, Version } from '@stamhoofd/structures';
5
+ import { SessionService } from '../../../services/SessionService.js';
4
6
 
5
7
  import { TestUtils } from '@stamhoofd/test-utils';
6
8
  import { testServer } from '../../../../tests/helpers/TestServer.js';
@@ -34,7 +36,7 @@ describe('Endpoint.GetPlatformEndpoint', () => {
34
36
  })
35
37
  .create();
36
38
 
37
- const token = await Token.createToken(user);
39
+ const token = await SessionService.createSession(user);
38
40
  const platform = await getPlatform(token);
39
41
  expect(platform.body.privateConfig).toBeNull();
40
42
  });
@@ -47,7 +49,7 @@ describe('Endpoint.GetPlatformEndpoint', () => {
47
49
  })
48
50
  .create();
49
51
 
50
- const token = await Token.createToken(user);
52
+ const token = await SessionService.createSession(user);
51
53
  const platform = await getPlatform(token);
52
54
  expect(platform.body.privateConfig).not.toBeNull();
53
55
  });
@@ -60,7 +62,7 @@ describe('Endpoint.GetPlatformEndpoint', () => {
60
62
  })
61
63
  .create();
62
64
 
63
- const token = await Token.createToken(user);
65
+ const token = await SessionService.createSession(user);
64
66
  token.accessToken = 'invalid-token';
65
67
  await token.save();
66
68
  await expect(getPlatform(token)).rejects.toThrow('The access token is invalid');
@@ -1,7 +1,8 @@
1
1
  import { Request } from '@simonbackx/simple-endpoints';
2
- import type { Organization } from '@stamhoofd/models';
3
- import { OrganizationFactory, Platform, RegistrationPeriod, RegistrationPeriodFactory, Token, UserFactory } from '@stamhoofd/models';
2
+ import type { Organization, Token } from '@stamhoofd/models';
3
+ import { OrganizationFactory, Platform, RegistrationPeriod, RegistrationPeriodFactory, UserFactory } from '@stamhoofd/models';
4
4
  import { PermissionLevel, Permissions, PlatformConfig, PlatformPrivateConfig, Platform as PlatformStruct, Version } from '@stamhoofd/structures';
5
+ import { SessionService } from '../../../services/SessionService.js';
5
6
 
6
7
  import type { AutoEncoderPatchType } from '@simonbackx/simple-encoding';
7
8
  import { TestUtils } from '@stamhoofd/test-utils';
@@ -34,7 +35,7 @@ describe('Endpoint.PatchPlatform', () => {
34
35
  const admin = await new UserFactory({
35
36
  globalPermissions: Permissions.create({ level: PermissionLevel.Full }),
36
37
  }).create();
37
- const token = await Token.createToken(admin);
38
+ const token = await SessionService.createSession(admin);
38
39
 
39
40
  try {
40
41
  const response = await patchPlatform({
@@ -49,8 +50,7 @@ describe('Endpoint.PatchPlatform', () => {
49
50
 
50
51
  expect(response.body.privateConfig?.requireTwoFactor).toBe(true);
51
52
  expect((await Platform.getForEditing()).privateConfig.requireTwoFactor).toBe(true);
52
- }
53
- finally {
53
+ } finally {
54
54
  // The platform row is shared by every test file
55
55
  await setPlatformRequiresTwoFactor(false);
56
56
  }
@@ -72,7 +72,7 @@ describe('Endpoint.PatchPlatform', () => {
72
72
  admin.organizationId = null;
73
73
  await admin.save();
74
74
 
75
- const token = await Token.createToken(admin);
75
+ const token = await SessionService.createSession(admin);
76
76
 
77
77
  const patch = PlatformStruct.patch({
78
78
  config: PlatformConfig.patch({
@@ -3,6 +3,7 @@ import type { Organization } from '@stamhoofd/models';
3
3
  import { OrganizationFactory, Token, UserFactory } from '@stamhoofd/models';
4
4
  import { PermissionLevel, Permissions } from '@stamhoofd/structures';
5
5
  import { STExpect, TestUtils } from '@stamhoofd/test-utils';
6
+ import { SessionService } from '../../../services/SessionService.js';
6
7
 
7
8
  import { testServer } from '../../../../tests/helpers/TestServer.js';
8
9
  import { SignOutPlatformAdminsEndpoint } from './SignOutPlatformAdminsEndpoint.js';
@@ -44,10 +45,10 @@ describe('Endpoint.SignOutPlatformAdmins', () => {
44
45
  organizationAdmin.organizationId = null;
45
46
  await organizationAdmin.save();
46
47
 
47
- const currentToken = await Token.createToken(admin, new Date());
48
- const secondDeviceOfAdmin = await Token.createToken(admin, new Date());
49
- const otherAdminToken = await Token.createToken(otherAdmin, new Date());
50
- const organizationAdminToken = await Token.createToken(organizationAdmin, new Date());
48
+ const currentToken = await SessionService.createSession(admin, { authenticatedAt: new Date() });
49
+ const secondDeviceOfAdmin = await SessionService.createSession(admin, { authenticatedAt: new Date() });
50
+ const otherAdminToken = await SessionService.createSession(otherAdmin, { authenticatedAt: new Date() });
51
+ const organizationAdminToken = await SessionService.createSession(organizationAdmin, { authenticatedAt: new Date() });
51
52
 
52
53
  const response = await signOut(organization, currentToken);
53
54
 
@@ -63,9 +64,9 @@ describe('Endpoint.SignOutPlatformAdmins', () => {
63
64
 
64
65
  const admin = await createPlatformAdmin(PermissionLevel.Write);
65
66
  const otherAdmin = await createPlatformAdmin();
66
- const otherAdminToken = await Token.createToken(otherAdmin, new Date());
67
+ const otherAdminToken = await SessionService.createSession(otherAdmin, { authenticatedAt: new Date() });
67
68
 
68
- await expect(signOut(organization, await Token.createToken(admin, new Date()))).rejects.toThrow(STExpect.simpleError({
69
+ await expect(signOut(organization, await SessionService.createSession(admin, { authenticatedAt: new Date() }))).rejects.toThrow(STExpect.simpleError({
69
70
  code: 'permission_denied',
70
71
  }));
71
72
  expect(await tokenExists(otherAdminToken)).toBe(true);
@@ -82,9 +83,9 @@ describe('Endpoint.SignOutPlatformAdmins', () => {
82
83
  await organizationAdmin.save();
83
84
 
84
85
  const platformAdmin = await createPlatformAdmin();
85
- const platformAdminToken = await Token.createToken(platformAdmin, new Date());
86
+ const platformAdminToken = await SessionService.createSession(platformAdmin, { authenticatedAt: new Date() });
86
87
 
87
- await expect(signOut(organization, await Token.createToken(organizationAdmin, new Date()))).rejects.toThrow(STExpect.simpleError({
88
+ await expect(signOut(organization, await SessionService.createSession(organizationAdmin, { authenticatedAt: new Date() }))).rejects.toThrow(STExpect.simpleError({
88
89
  code: 'permission_denied',
89
90
  }));
90
91
  expect(await tokenExists(platformAdminToken)).toBe(true);