@stamhoofd/models 2.81.0 → 2.83.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 (91) hide show
  1. package/dist/src/factories/EventNotificationTypeFactory.js +1 -1
  2. package/dist/src/factories/EventNotificationTypeFactory.js.map +1 -1
  3. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  4. package/dist/src/factories/GroupFactory.js +1 -1
  5. package/dist/src/factories/GroupFactory.js.map +1 -1
  6. package/dist/src/factories/RecordCategoryFactory.d.ts.map +1 -1
  7. package/dist/src/factories/RecordCategoryFactory.js +1 -1
  8. package/dist/src/factories/RecordCategoryFactory.js.map +1 -1
  9. package/dist/src/factories/RecordFactory.d.ts.map +1 -1
  10. package/dist/src/factories/RecordFactory.js +1 -1
  11. package/dist/src/factories/RecordFactory.js.map +1 -1
  12. package/dist/src/helpers/DNSValidator.js +8 -8
  13. package/dist/src/helpers/DNSValidator.js.map +1 -1
  14. package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
  15. package/dist/src/helpers/EmailBuilder.js +10 -7
  16. package/dist/src/helpers/EmailBuilder.js.map +1 -1
  17. package/dist/src/helpers/GroupBuilder.js +23 -23
  18. package/dist/src/helpers/GroupBuilder.js.map +1 -1
  19. package/dist/src/helpers/MemberMerger.test.js +4 -4
  20. package/dist/src/helpers/MemberMerger.test.js.map +1 -1
  21. package/dist/src/helpers/RateLimiter.d.ts +6 -5
  22. package/dist/src/helpers/RateLimiter.d.ts.map +1 -1
  23. package/dist/src/helpers/RateLimiter.js +13 -6
  24. package/dist/src/helpers/RateLimiter.js.map +1 -1
  25. package/dist/src/migrations/1743070458-default-email-template-orders.sql +2 -0
  26. package/dist/src/models/DocumentTemplate.js +3 -3
  27. package/dist/src/models/DocumentTemplate.js.map +1 -1
  28. package/dist/src/models/Email.js +10 -10
  29. package/dist/src/models/Email.js.map +1 -1
  30. package/dist/src/models/EmailVerificationCode.js +2 -2
  31. package/dist/src/models/EmailVerificationCode.js.map +1 -1
  32. package/dist/src/models/Event.d.ts.map +1 -1
  33. package/dist/src/models/Event.js +1 -1
  34. package/dist/src/models/Event.js.map +1 -1
  35. package/dist/src/models/Image.d.ts +3 -1
  36. package/dist/src/models/Image.d.ts.map +1 -1
  37. package/dist/src/models/Image.js +12 -2
  38. package/dist/src/models/Image.js.map +1 -1
  39. package/dist/src/models/MemberPlatformMembership.js +5 -5
  40. package/dist/src/models/MemberPlatformMembership.js.map +1 -1
  41. package/dist/src/models/MollieToken.js +1 -1
  42. package/dist/src/models/MollieToken.js.map +1 -1
  43. package/dist/src/models/Order.js +3 -3
  44. package/dist/src/models/Order.js.map +1 -1
  45. package/dist/src/models/Organization.d.ts.map +1 -1
  46. package/dist/src/models/Organization.js +4 -4
  47. package/dist/src/models/Organization.js.map +1 -1
  48. package/dist/src/models/PayconiqPayment.js +1 -1
  49. package/dist/src/models/PayconiqPayment.js.map +1 -1
  50. package/dist/src/models/Registration.js +2 -2
  51. package/dist/src/models/Registration.js.map +1 -1
  52. package/dist/src/models/STPackage.js +3 -3
  53. package/dist/src/models/STPackage.js.map +1 -1
  54. package/dist/src/models/Token.d.ts +0 -2
  55. package/dist/src/models/Token.d.ts.map +1 -1
  56. package/dist/src/models/Token.js +2 -26
  57. package/dist/src/models/Token.js.map +1 -1
  58. package/dist/src/models/User.js +2 -2
  59. package/dist/src/models/User.js.map +1 -1
  60. package/dist/src/models/Webshop.d.ts.map +1 -1
  61. package/dist/src/models/Webshop.js +3 -0
  62. package/dist/src/models/Webshop.js.map +1 -1
  63. package/dist/src/models/addresses/PostalCode.js +1 -1
  64. package/dist/src/models/addresses/PostalCode.js.map +1 -1
  65. package/package.json +2 -2
  66. package/src/factories/EventNotificationTypeFactory.ts +1 -1
  67. package/src/factories/GroupFactory.ts +2 -2
  68. package/src/factories/RecordCategoryFactory.ts +2 -2
  69. package/src/factories/RecordFactory.ts +2 -2
  70. package/src/helpers/DNSValidator.ts +8 -8
  71. package/src/helpers/EmailBuilder.ts +11 -7
  72. package/src/helpers/GroupBuilder.ts +24 -24
  73. package/src/helpers/MemberMerger.test.ts +5 -4
  74. package/src/helpers/RateLimiter.ts +18 -9
  75. package/src/migrations/1743070458-default-email-template-orders.sql +2 -0
  76. package/src/models/DocumentTemplate.ts +3 -3
  77. package/src/models/Email.ts +10 -10
  78. package/src/models/EmailVerificationCode.ts +2 -2
  79. package/src/models/Event.ts +2 -2
  80. package/src/models/Image.ts +14 -2
  81. package/src/models/MemberPlatformMembership.ts +5 -5
  82. package/src/models/MollieToken.ts +1 -1
  83. package/src/models/Order.ts +3 -3
  84. package/src/models/Organization.ts +5 -5
  85. package/src/models/PayconiqPayment.ts +1 -1
  86. package/src/models/Registration.ts +2 -2
  87. package/src/models/STPackage.ts +3 -3
  88. package/src/models/Token.ts +2 -26
  89. package/src/models/User.ts +2 -2
  90. package/src/models/Webshop.ts +4 -0
  91. package/src/models/addresses/PostalCode.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/models/addresses/PostalCode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/models/addresses/PostalCode.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamhoofd/models",
3
- "version": "2.81.0",
3
+ "version": "2.83.0",
4
4
  "main": "./dist/src/index.js",
5
5
  "types": "./dist/src/index.d.ts",
6
6
  "license": "UNLICENCED",
@@ -30,5 +30,5 @@
30
30
  "publishConfig": {
31
31
  "access": "public"
32
32
  },
33
- "gitHead": "5a0faf4813aeb5c3d7216536278acb65ba2361e0"
33
+ "gitHead": "5f116184aad8965d9deda1902e73af7feefa5721"
34
34
  }
@@ -11,7 +11,7 @@ class Options {
11
11
  export class EventNotificationTypeFactory extends Factory<Options, EventNotificationType> {
12
12
  async create(): Promise<EventNotificationType> {
13
13
  const eventType = EventNotificationType.create({
14
- title: this.options.title ?? ('Melding ' + (new Date().getTime() + Math.floor(Math.random() * 999999))),
14
+ title: this.options.title ?? ($t(`506e15b4-622c-4167-a98a-98fbc4404bfc`) + ' ' + (new Date().getTime() + Math.floor(Math.random() * 999999))),
15
15
  });
16
16
 
17
17
  eventType.recordCategories = this.options.recordCategories ?? [];
@@ -1,5 +1,5 @@
1
1
  import { Factory } from '@simonbackx/simple-database';
2
- import { GroupPrice, GroupSettings, GroupType, ReduceablePrice } from '@stamhoofd/structures';
2
+ import { GroupPrice, GroupSettings, GroupType, ReduceablePrice, TranslatedString } from '@stamhoofd/structures';
3
3
 
4
4
  import { RegistrationPeriod } from '../models';
5
5
  import { Group } from '../models/Group';
@@ -32,7 +32,7 @@ export class GroupFactory extends Factory<Options, Group> {
32
32
  }
33
33
 
34
34
  group.settings = GroupSettings.create({
35
- name: 'Group name',
35
+ name: new TranslatedString('Group name'),
36
36
  startDate: new Date(new Date().getTime() - 10 * 1000),
37
37
  endDate: new Date(new Date().getTime() + 10 * 1000),
38
38
  registrationStartDate: new Date(new Date().getTime() - 10 * 1000),
@@ -1,5 +1,5 @@
1
1
  import { Factory } from '@simonbackx/simple-database';
2
- import { RecordCategory, RecordSettings, RecordType } from '@stamhoofd/structures';
2
+ import { RecordCategory, RecordSettings, TranslatedString } from '@stamhoofd/structures';
3
3
  import { RecordFactory, RecordOptions } from './RecordFactory';
4
4
 
5
5
  class Options {
@@ -16,7 +16,7 @@ export class RecordCategoryFactory extends Factory<Options, RecordCategory> {
16
16
  }
17
17
 
18
18
  return RecordCategory.create({
19
- name: 'Record category ' + Math.floor(Math.random() * 10000),
19
+ name: TranslatedString.create('Record category ' + Math.floor(Math.random() * 10000)),
20
20
  records,
21
21
  });
22
22
  }
@@ -1,5 +1,5 @@
1
1
  import { Factory } from '@simonbackx/simple-database';
2
- import { RecordSettings, RecordType } from '@stamhoofd/structures';
2
+ import { RecordSettings, RecordType, TranslatedString } from '@stamhoofd/structures';
3
3
 
4
4
  export class RecordOptions {
5
5
  type: RecordType;
@@ -10,7 +10,7 @@ export class RecordFactory extends Factory<RecordOptions, RecordSettings> {
10
10
  create(): Promise<RecordSettings> {
11
11
  return Promise.resolve(
12
12
  RecordSettings.create({
13
- name: 'Record name ' + Math.floor(Math.random() * 10000),
13
+ name: TranslatedString.create('Record name ' + Math.floor(Math.random() * 10000)),
14
14
  type: this.options.type,
15
15
  required: this.options.required ?? (this.options.type !== RecordType.Checkbox),
16
16
  }),
@@ -30,7 +30,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
30
30
  record.errors = new SimpleErrors(new SimpleError({
31
31
  code: 'not_found',
32
32
  message: '',
33
- human: 'We konden de CNAME-record ' + record.name + ' nog niet vinden. Hou er rekening mee dat het even (tot 24u) kan duren voor we deze kunnen zien.',
33
+ human: $t(`50c67afd-9f29-4634-bbb6-91a6083d7b4b`) + ' ' + record.name + ' ' + $t(`ac374e9b-f59d-4faa-8c12-f4984b798bdd`),
34
34
  }));
35
35
  }
36
36
  }
@@ -42,7 +42,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
42
42
  record.errors = new SimpleErrors(new SimpleError({
43
43
  code: 'too_many_fields',
44
44
  message: '',
45
- human: 'Er zijn meerdere CNAME records ingesteld voor ' + record.name + ', kijk na of je er geen moet verwijderen of per ongeluk meerdere hebt aangemaakt',
45
+ human: $t(`2cd9734f-c32b-4513-99b5-de749f12cb87`) + ' ' + record.name + $t(`4c66b760-cef1-47bc-899a-1ec5ec363560`),
46
46
  }));
47
47
  }
48
48
  else {
@@ -59,7 +59,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
59
59
  record.errors = new SimpleErrors(new SimpleError({
60
60
  code: 'wrong_value',
61
61
  message: '',
62
- human: 'Er is een andere waarde ingesteld voor de CNAME-record ' + record.name + ', kijk na of je geen typfout hebt gemaakt. Gevonden: ' + addresses[0] + '.',
62
+ human: $t(`66fa2988-3bef-4e08-9ae8-da904007444e`) + ' ' + record.name + $t(`dbcdb363-81d4-4f74-a484-3f91b2a8bd3d`) + ' ' + addresses[0] + '.',
63
63
  }));
64
64
  }
65
65
  }
@@ -82,7 +82,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
82
82
  record.errors = new SimpleErrors(new SimpleError({
83
83
  code: 'not_found',
84
84
  message: '',
85
- human: 'We konden de TXT-record ' + record.name + ' nog niet vinden. Hou er rekening mee dat het even (tot 24u) kan duren voor we deze kunnen zien.',
85
+ human: $t(`55a44a06-c9da-4ba6-a142-9d223636f54b`) + ' ' + record.name + ' ' + $t(`ac374e9b-f59d-4faa-8c12-f4984b798bdd`),
86
86
  }));
87
87
  }
88
88
  }
@@ -92,7 +92,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
92
92
  record.errors = new SimpleErrors(new SimpleError({
93
93
  code: 'too_many_fields',
94
94
  message: '',
95
- human: 'Er zijn meerdere TXT-records ingesteld voor ' + record.name + ', kijk na of je er geen moet verwijderen of per ongeluk meerdere hebt aangemaakt',
95
+ human: $t(`f0a3b61f-a736-47f7-b893-1c8c61555b50`) + ' ' + record.name + $t(`4c66b760-cef1-47bc-899a-1ec5ec363560`),
96
96
  }));
97
97
  }
98
98
  else {
@@ -109,7 +109,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
109
109
  record.errors = new SimpleErrors(new SimpleError({
110
110
  code: 'wrong_value',
111
111
  message: '',
112
- human: 'Er is een andere waarde ingesteld voor de TXT-record ' + record.name + ', kijk na of je geen typfout hebt gemaakt. Gevonden: ' + records[0].join(''),
112
+ human: $t(`3580661b-3a30-4f7f-bb7a-07dfe644957a`) + ' ' + record.name + $t(`dbcdb363-81d4-4f74-a484-3f91b2a8bd3d`) + ' ' + records[0].join(''),
113
113
  }));
114
114
  }
115
115
  }
@@ -126,7 +126,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
126
126
  record.errors = new SimpleErrors(new SimpleError({
127
127
  code: 'not_found',
128
128
  message: '',
129
- human: 'We konden de record ' + record.name + ' nog niet vinden. Hou er rekening mee dat het even (tot 24u) kan duren voor we deze kunnen zien.',
129
+ human: $t(`d6572dda-561a-4aeb-9d9b-1fc4f7a3e337`) + ' ' + record.name + ' ' + $t(`ac374e9b-f59d-4faa-8c12-f4984b798bdd`),
130
130
  }));
131
131
  }
132
132
  }
@@ -136,7 +136,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
136
136
  record.errors = new SimpleErrors(new SimpleError({
137
137
  code: 'not_found',
138
138
  message: '',
139
- human: 'Er ging iets mis. Deze record lijkt niet goed ingesteld te zijn.',
139
+ human: $t(`8fdb686d-0a87-477c-a532-dac98afedf43`),
140
140
  }));
141
141
  }
142
142
  }
@@ -276,7 +276,7 @@ export async function getEmailBuilder(organization: Organization | null, email:
276
276
  new SimpleError({
277
277
  code: 'email_hard_bounce',
278
278
  message: 'Recipient has hard bounced',
279
- human: 'Dit e-mailadres is waarschijnlijk ongeldig. We konden eerder geen e-mails naar dit adres sturen.',
279
+ human: $t(`af49a569-ce88-48d9-ac37-81e594e16c03`),
280
280
  }),
281
281
  );
282
282
  }
@@ -290,7 +290,7 @@ export async function getEmailBuilder(organization: Organization | null, email:
290
290
  new SimpleError({
291
291
  code: 'email_spam',
292
292
  message: 'Recipient has marked as spam',
293
- human: 'Dit e-mailadres heeft eerder een e-mail als spam gemarkeerd. We kunnen geen e-mails naar dit adres sturen.',
293
+ human: $t(`e6523f56-397e-4127-8bf7-8396f6f25a62`),
294
294
  }),
295
295
  );
296
296
  }
@@ -427,7 +427,7 @@ export async function fillRecipientReplacements(recipient: Recipient, options: {
427
427
  Replacement.create({
428
428
  token: 'loginDetails',
429
429
  value: '',
430
- html: recipientUser && recipientUser.hasAccount() ? `<p class="description"><em>Je kan op het ledenportaal inloggen met <strong>${Formatter.escapeHtml(recipientUser.email)}</strong></em></p>` : `<p class="description"><em>Je kan op het ledenportaal een nieuw account aanmaken met het e-mailadres <strong>${Formatter.escapeHtml(recipient.email)}</strong>, dan krijg je automatisch toegang tot alle bestaande gegevens.</em></p>`,
430
+ html: recipientUser && recipientUser.hasAccount() ? `<p class="description"><em>${$t('2fa762f2-c061-4c40-83cb-6ddc3e5f0f7a')} <strong>${Formatter.escapeHtml(recipientUser.email)}</strong></em></p>` : `<p class="description"><em>${$t('c2af5148-15a7-44b1-aa3e-91cfc4c66013')} <strong>${Formatter.escapeHtml(recipient.email)}</strong>${$t('f3aa8253-d88e-41c7-8c98-ed477806c533')}</em></p>`,
431
431
  }),
432
432
  );
433
433
 
@@ -452,10 +452,14 @@ export async function fillRecipientReplacements(recipient: Recipient, options: {
452
452
  }
453
453
 
454
454
  if (from || replyTo) {
455
- recipient.replacements.push(Replacement.create({
456
- token: 'fromAddress',
457
- value: replyTo?.email ?? from!.email,
458
- }));
455
+ const fromAddress = replyTo?.email ?? from!.email;
456
+
457
+ if (fromAddress) {
458
+ recipient.replacements.push(Replacement.create({
459
+ token: 'fromAddress',
460
+ value: fromAddress,
461
+ }));
462
+ }
459
463
 
460
464
  const name = replyTo?.name ?? from?.name;
461
465
  if (name) {
@@ -1,4 +1,4 @@
1
- import { Group as GroupStruct, GroupCategory, GroupCategorySettings, GroupGenderType, GroupSettings, OrganizationGenderType, OrganizationType, OrganizationTypeHelper, UmbrellaOrganization } from '@stamhoofd/structures';
1
+ import { Group as GroupStruct, GroupCategory, GroupCategorySettings, GroupGenderType, GroupSettings, OrganizationGenderType, OrganizationType, OrganizationTypeHelper, UmbrellaOrganization, TranslatedString } from '@stamhoofd/structures';
2
2
  import { Group, Organization } from '../models';
3
3
 
4
4
  export class GroupBuilder {
@@ -84,7 +84,7 @@ export class GroupBuilder {
84
84
  kapoenen.organizationId = this.organization.id;
85
85
  kapoenen.periodId = this.organization.periodId;
86
86
  kapoenen.settings = GroupSettings.create({
87
- name: 'Kapoenen',
87
+ name: new TranslatedString('Kapoenen'),
88
88
  genderType: mixedType,
89
89
  startDate: this.organization.meta.defaultStartDate,
90
90
  endDate: this.organization.meta.defaultEndDate,
@@ -98,7 +98,7 @@ export class GroupBuilder {
98
98
  jin.organizationId = this.organization.id;
99
99
  jin.periodId = this.organization.periodId;
100
100
  jin.settings = GroupSettings.create({
101
- name: 'Jin',
101
+ name: new TranslatedString('Jin'),
102
102
  genderType: mixedType,
103
103
  startDate: this.organization.meta.defaultStartDate,
104
104
  endDate: this.organization.meta.defaultEndDate,
@@ -113,7 +113,7 @@ export class GroupBuilder {
113
113
  wouters.organizationId = this.organization.id;
114
114
  wouters.periodId = this.organization.periodId;
115
115
  wouters.settings = GroupSettings.create({
116
- name: 'Wouters',
116
+ name: new TranslatedString('Wouters'),
117
117
  genderType: GroupGenderType.Mixed,
118
118
  startDate: this.organization.meta.defaultStartDate,
119
119
  endDate: this.organization.meta.defaultEndDate,
@@ -127,7 +127,7 @@ export class GroupBuilder {
127
127
  jonggivers.organizationId = this.organization.id;
128
128
  jonggivers.periodId = this.organization.periodId;
129
129
  jonggivers.settings = GroupSettings.create({
130
- name: 'Jonggivers',
130
+ name: new TranslatedString('Jonggivers'),
131
131
  genderType: GroupGenderType.Mixed,
132
132
  startDate: this.organization.meta.defaultStartDate,
133
133
  endDate: this.organization.meta.defaultEndDate,
@@ -141,7 +141,7 @@ export class GroupBuilder {
141
141
  givers.organizationId = this.organization.id;
142
142
  givers.periodId = this.organization.periodId;
143
143
  givers.settings = GroupSettings.create({
144
- name: 'Givers',
144
+ name: new TranslatedString('Givers'),
145
145
  genderType: GroupGenderType.Mixed,
146
146
  startDate: this.organization.meta.defaultStartDate,
147
147
  endDate: this.organization.meta.defaultEndDate,
@@ -157,7 +157,7 @@ export class GroupBuilder {
157
157
  wouters.organizationId = this.organization.id;
158
158
  wouters.periodId = this.organization.periodId;
159
159
  wouters.settings = GroupSettings.create({
160
- name: 'Kabouters',
160
+ name: new TranslatedString('Kabouters'),
161
161
  genderType: GroupGenderType.OnlyFemale,
162
162
  startDate: this.organization.meta.defaultStartDate,
163
163
  endDate: this.organization.meta.defaultEndDate,
@@ -171,7 +171,7 @@ export class GroupBuilder {
171
171
  jonggivers.organizationId = this.organization.id;
172
172
  jonggivers.periodId = this.organization.periodId;
173
173
  jonggivers.settings = GroupSettings.create({
174
- name: 'Jonggidsen',
174
+ name: new TranslatedString('Jonggidsen'),
175
175
  genderType: GroupGenderType.OnlyFemale,
176
176
  startDate: this.organization.meta.defaultStartDate,
177
177
  endDate: this.organization.meta.defaultEndDate,
@@ -185,7 +185,7 @@ export class GroupBuilder {
185
185
  givers.organizationId = this.organization.id;
186
186
  givers.periodId = this.organization.periodId;
187
187
  givers.settings = GroupSettings.create({
188
- name: 'Gidsen',
188
+ name: new TranslatedString('Gidsen'),
189
189
  genderType: GroupGenderType.OnlyFemale,
190
190
  startDate: this.organization.meta.defaultStartDate,
191
191
  endDate: this.organization.meta.defaultEndDate,
@@ -201,7 +201,7 @@ export class GroupBuilder {
201
201
  wouters.organizationId = this.organization.id;
202
202
  wouters.periodId = this.organization.periodId;
203
203
  wouters.settings = GroupSettings.create({
204
- name: 'Welpen',
204
+ name: new TranslatedString('Welpen'),
205
205
  genderType: GroupGenderType.OnlyMale,
206
206
  startDate: this.organization.meta.defaultStartDate,
207
207
  endDate: this.organization.meta.defaultEndDate,
@@ -215,7 +215,7 @@ export class GroupBuilder {
215
215
  jonggivers.organizationId = this.organization.id;
216
216
  jonggivers.periodId = this.organization.periodId;
217
217
  jonggivers.settings = GroupSettings.create({
218
- name: 'Jongverkenners',
218
+ name: new TranslatedString('Jongverkenners'),
219
219
  genderType: GroupGenderType.OnlyMale,
220
220
  startDate: this.organization.meta.defaultStartDate,
221
221
  endDate: this.organization.meta.defaultEndDate,
@@ -229,7 +229,7 @@ export class GroupBuilder {
229
229
  givers.organizationId = this.organization.id;
230
230
  givers.periodId = this.organization.periodId;
231
231
  givers.settings = GroupSettings.create({
232
- name: 'Verkenners',
232
+ name: new TranslatedString('Verkenners'),
233
233
  genderType: GroupGenderType.OnlyMale,
234
234
  startDate: this.organization.meta.defaultStartDate,
235
235
  endDate: this.organization.meta.defaultEndDate,
@@ -254,7 +254,7 @@ export class GroupBuilder {
254
254
  ribbels.organizationId = this.organization.id;
255
255
  ribbels.periodId = this.organization.periodId;
256
256
  ribbels.settings = GroupSettings.create({
257
- name: 'Ribbels',
257
+ name: new TranslatedString('Ribbels'),
258
258
  genderType: mixedType,
259
259
  startDate: this.organization.meta.defaultStartDate,
260
260
  endDate: this.organization.meta.defaultEndDate,
@@ -267,7 +267,7 @@ export class GroupBuilder {
267
267
  speelclub.organizationId = this.organization.id;
268
268
  speelclub.periodId = this.organization.periodId;
269
269
  speelclub.settings = GroupSettings.create({
270
- name: 'Speelclub',
270
+ name: new TranslatedString('Speelclub'),
271
271
  genderType: mixedType,
272
272
  startDate: this.organization.meta.defaultStartDate,
273
273
  endDate: this.organization.meta.defaultEndDate,
@@ -280,7 +280,7 @@ export class GroupBuilder {
280
280
  aspis.organizationId = this.organization.id;
281
281
  aspis.periodId = this.organization.periodId;
282
282
  aspis.settings = GroupSettings.create({
283
- name: "Aspi's",
283
+ name: new TranslatedString("Aspi's"),
284
284
  genderType: mixedType,
285
285
  startDate: this.organization.meta.defaultStartDate,
286
286
  endDate: this.organization.meta.defaultEndDate,
@@ -294,7 +294,7 @@ export class GroupBuilder {
294
294
  rakwis.organizationId = this.organization.id;
295
295
  rakwis.periodId = this.organization.periodId;
296
296
  rakwis.settings = GroupSettings.create({
297
- name: "Rakwi's",
297
+ name: new TranslatedString("Rakwi's"),
298
298
  genderType: GroupGenderType.Mixed,
299
299
  startDate: this.organization.meta.defaultStartDate,
300
300
  endDate: this.organization.meta.defaultEndDate,
@@ -307,7 +307,7 @@ export class GroupBuilder {
307
307
  titos.organizationId = this.organization.id;
308
308
  titos.periodId = this.organization.periodId;
309
309
  titos.settings = GroupSettings.create({
310
- name: "Tito's",
310
+ name: new TranslatedString("Tito's"),
311
311
  genderType: GroupGenderType.Mixed,
312
312
  startDate: this.organization.meta.defaultStartDate,
313
313
  endDate: this.organization.meta.defaultEndDate,
@@ -320,7 +320,7 @@ export class GroupBuilder {
320
320
  ketis.organizationId = this.organization.id;
321
321
  ketis.periodId = this.organization.periodId;
322
322
  ketis.settings = GroupSettings.create({
323
- name: "Keti's",
323
+ name: new TranslatedString("Keti's"),
324
324
  genderType: GroupGenderType.Mixed,
325
325
  startDate: this.organization.meta.defaultStartDate,
326
326
  endDate: this.organization.meta.defaultEndDate,
@@ -335,7 +335,7 @@ export class GroupBuilder {
335
335
  rakwis.organizationId = this.organization.id;
336
336
  rakwis.periodId = this.organization.periodId;
337
337
  rakwis.settings = GroupSettings.create({
338
- name: 'Kwiks',
338
+ name: new TranslatedString('Kwiks'),
339
339
  genderType: GroupGenderType.OnlyFemale,
340
340
  startDate: this.organization.meta.defaultStartDate,
341
341
  endDate: this.organization.meta.defaultEndDate,
@@ -348,7 +348,7 @@ export class GroupBuilder {
348
348
  titos.organizationId = this.organization.id;
349
349
  titos.periodId = this.organization.periodId;
350
350
  titos.settings = GroupSettings.create({
351
- name: 'Toppers',
351
+ name: new TranslatedString('Toppers'),
352
352
  genderType: GroupGenderType.OnlyFemale,
353
353
  startDate: this.organization.meta.defaultStartDate,
354
354
  endDate: this.organization.meta.defaultEndDate,
@@ -361,7 +361,7 @@ export class GroupBuilder {
361
361
  ketis.organizationId = this.organization.id;
362
362
  ketis.periodId = this.organization.periodId;
363
363
  ketis.settings = GroupSettings.create({
364
- name: 'Tiptiens',
364
+ name: new TranslatedString('Tiptiens'),
365
365
  genderType: GroupGenderType.OnlyFemale,
366
366
  startDate: this.organization.meta.defaultStartDate,
367
367
  endDate: this.organization.meta.defaultEndDate,
@@ -376,7 +376,7 @@ export class GroupBuilder {
376
376
  rakwis.organizationId = this.organization.id;
377
377
  rakwis.periodId = this.organization.periodId;
378
378
  rakwis.settings = GroupSettings.create({
379
- name: 'Rakkers',
379
+ name: new TranslatedString('Rakkers'),
380
380
  genderType: GroupGenderType.OnlyMale,
381
381
  startDate: this.organization.meta.defaultStartDate,
382
382
  endDate: this.organization.meta.defaultEndDate,
@@ -389,7 +389,7 @@ export class GroupBuilder {
389
389
  titos.organizationId = this.organization.id;
390
390
  titos.periodId = this.organization.periodId;
391
391
  titos.settings = GroupSettings.create({
392
- name: 'Tippers',
392
+ name: new TranslatedString('Tippers'),
393
393
  genderType: GroupGenderType.OnlyMale,
394
394
  startDate: this.organization.meta.defaultStartDate,
395
395
  endDate: this.organization.meta.defaultEndDate,
@@ -402,7 +402,7 @@ export class GroupBuilder {
402
402
  ketis.organizationId = this.organization.id;
403
403
  ketis.periodId = this.organization.periodId;
404
404
  ketis.settings = GroupSettings.create({
405
- name: 'Kerels',
405
+ name: new TranslatedString('Kerels'),
406
406
  genderType: GroupGenderType.OnlyMale,
407
407
  startDate: this.organization.meta.defaultStartDate,
408
408
  endDate: this.organization.meta.defaultEndDate,
@@ -10,6 +10,7 @@ import {
10
10
  RecordSettings,
11
11
  ReviewTime,
12
12
  ReviewTimes,
13
+ TranslatedString,
13
14
  } from '@stamhoofd/structures';
14
15
  import { v4 as uuidv4 } from 'uuid';
15
16
  import { Member } from '../models';
@@ -45,7 +46,7 @@ describe('member merge', () => {
45
46
 
46
47
  const recordAnswer = RecordAnswer.create({
47
48
  settings: RecordSettings.create({
48
- name: 'answer1',
49
+ name: TranslatedString.create('answer1'),
49
50
  required: true,
50
51
  choices: [],
51
52
  }),
@@ -215,7 +216,7 @@ describe('member merge', () => {
215
216
 
216
217
  const recordAnswer = RecordAnswer.create({
217
218
  settings: RecordSettings.create({
218
- name: 'answer1',
219
+ name: TranslatedString.create('answer1'),
219
220
  required: true,
220
221
  choices: [],
221
222
  }),
@@ -407,7 +408,7 @@ describe('member merge', () => {
407
408
 
408
409
  const recordAnswer1 = RecordAnswer.create({
409
410
  settings: RecordSettings.create({
410
- name: 'answer1',
411
+ name: TranslatedString.create('answer1'),
411
412
  required: true,
412
413
  choices: [],
413
414
  }),
@@ -418,7 +419,7 @@ describe('member merge', () => {
418
419
 
419
420
  const recordAnswer2 = RecordAnswer.create({
420
421
  settings: RecordSettings.create({
421
- name: 'answer2',
422
+ name: TranslatedString.create('answer2'),
422
423
  required: true,
423
424
  choices: [],
424
425
  }),
@@ -4,7 +4,7 @@ export class RateLimitWindow {
4
4
  start: Date = new Date();
5
5
  windows: Map<string, number> = new Map();
6
6
 
7
- limit: number;
7
+ limit: Record<string, number>;
8
8
 
9
9
  /**
10
10
  * in ms
@@ -12,10 +12,10 @@ export class RateLimitWindow {
12
12
  duration: number;
13
13
 
14
14
  constructor(options: {
15
- limit: number;
15
+ limit: Record<string, number> | number;
16
16
  duration: number;
17
17
  }) {
18
- this.limit = options.limit;
18
+ this.limit = typeof options.limit === 'number' ? { '': options.limit } : options.limit;
19
19
  this.duration = options.duration;
20
20
  }
21
21
 
@@ -27,7 +27,14 @@ export class RateLimitWindow {
27
27
  return Date.now() - this.start.getTime();
28
28
  }
29
29
 
30
- track(key: string, amount = 1) {
30
+ getLimit(category?: string) {
31
+ if (category) {
32
+ return this.limit[category] ?? this.limit[''] ?? 0;
33
+ }
34
+ return this.limit[''] ?? 0;
35
+ }
36
+
37
+ track(key: string, amount = 1, category?: string) {
31
38
  if (this.isExpired()) {
32
39
  // We have a shared window
33
40
  this.start = new Date();
@@ -37,11 +44,13 @@ export class RateLimitWindow {
37
44
  let w = this.windows.get(key) ?? 0;
38
45
  w += amount;
39
46
 
40
- if (w > this.limit) {
47
+ const limit = this.getLimit(category);
48
+
49
+ if (w > limit) {
41
50
  const retryAfter = Math.ceil((this.duration - this.age) / 1000);
42
51
  throw new SimpleError({
43
52
  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.`,
53
+ 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. Limit ${limit} ${category ?? ''}`,
45
54
  human: `Oeps! Te veel aanvragen. Om spam te vermijden is jouw aanvraag tijdelijk geblokkeerd. Probeer het over ${retryAfter} seconden opnieuw.`,
46
55
  statusCode: 429,
47
56
  });
@@ -56,7 +65,7 @@ export class RateLimiter {
56
65
  windows: RateLimitWindow[] = [];
57
66
 
58
67
  constructor(options: {
59
- limits: { duration: number; limit: number }[];
68
+ limits: { duration: number; limit: Record<string, number> | number }[];
60
69
  }) {
61
70
  for (const limit of options.limits) {
62
71
  this.windows.push(new RateLimitWindow({
@@ -66,9 +75,9 @@ export class RateLimiter {
66
75
  }
67
76
  }
68
77
 
69
- track(key: string, amount = 1) {
78
+ track(key: string, amount = 1, category?: string) {
70
79
  for (const window of this.windows) {
71
- window.track(key, amount);
80
+ window.track(key, amount, category);
72
81
  }
73
82
  }
74
83
  }
@@ -0,0 +1,2 @@
1
+ INSERT INTO `email_templates` (`id`, `subject`, `groupId`, `webshopId`, `organizationId`, `type`, `text`, `html`, `json`, `updatedAt`, `createdAt`) VALUES
2
+ ('48d7fb00-4e68-468b-97ec-1ce7b5bc4436', '', NULL, NULL, NULL, 'DefaultOrdersEmail', '{{greeting}}Met vriendelijke groeten,{{organizationName}}Overzicht{{orderDetailsTable}}{{orderTable}}\n\n \n \n \n \n Bestelling bekijken\n \n \n \n \n\nGebruik de bovenstaande knop om de gegevens van jouw bestelling na te kijken.Wil je geen e-mails van {{organizationName}} meer ontvangen? Klik dan hier om uit te schrijven.', '<!DOCTYPE html>\n<html>\n\n<head>\n<meta charset=\"utf-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\" />\n<title></title>\n<style type=\"text/css\">body {\n color: #000716;\n color: var(--color-dark, #000716);\n font-family: -apple-system-body, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 12pt;\n line-height: 1.4;\n}\n\np {\n margin: 0;\n padding: 0;\n line-height: 1.4;\n}\n\np.description {\n color: var(--color-gray-4, #5e5e5e);\n}\np.description a, p.description a:link, p.description a:visited, p.description a:active, p.description a:hover {\n text-decoration: underline;\n color: var(--color-gray-4, #5e5e5e);\n}\n\nstrong {\n font-weight: bold;\n}\n\nem {\n font-style: italic;\n}\n\nh1 {\n font-size: 30px;\n font-weight: bold;\n line-height: 1.2;\n margin: 0;\n padding: 0;\n}\n@media (max-width: 350px) {\n h1 {\n font-size: 24px;\n }\n}\n\nh2 {\n font-size: 20px;\n line-height: 1.2;\n font-weight: bold;\n margin: 0;\n padding: 0;\n}\n\nh3 {\n font-size: 16px;\n line-height: 1.2;\n font-weight: bold;\n margin: 0;\n padding: 0;\n}\n\nh4 {\n line-height: 1.2;\n font-weight: 500;\n margin: 0;\n padding: 0;\n}\n\nol, ul {\n list-style-position: outside;\n padding-left: 30px;\n}\n\nhr {\n height: 1px;\n background: var(--color-border, var(--color-gray-2, #dcdcdc));\n border-radius: 1px;\n padding: 0;\n margin: 20px 0;\n outline: none;\n border: 0;\n}\n\n.button {\n touch-action: inherit;\n user-select: auto;\n cursor: pointer;\n display: inline-block !important;\n line-height: 42px;\n font-size: 16px;\n font-weight: bold;\n}\n.button:active {\n transform: none;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\na, a:link, a:visited, a:active, a:hover {\n text-decoration: underline;\n color: blue;\n}\n\n.email-data-table {\n width: 100%;\n border-collapse: collapse;\n}\n.email-data-table th, .email-data-table td {\n text-align: left;\n padding: 10px 10px 10px 0;\n border-bottom: 1px solid var(--color-border, var(--color-gray-2, #dcdcdc));\n vertical-align: middle;\n}\n.email-data-table th:last-child, .email-data-table td:last-child {\n text-align: right;\n padding-right: 0;\n}\n.email-data-table thead {\n font-weight: bold;\n}\n.email-data-table thead th {\n font-size: 10pt;\n}\n.email-data-table h4 ~ p {\n padding-top: 3px;\n opacity: 0.8;\n font-size: 11pt;\n}\n\n.email-style-inline-code {\n font-family: monospace;\n white-space: pre-wrap;\n display: inline-block;\n}\n\n.email-style-description-small {\n font-size: 14px;\n line-height: 1.5;\n font-weight: normal;\n color: var(--color-gray-4, #5e5e5e);\n font-variation-settings: \"opsz\" 19;\n}\n\n.email-style-title-list {\n font-size: 16px;\n line-height: 1.3;\n font-weight: 500;\n}\n.email-style-title-list + p {\n padding-top: 3px;\n}\n\n.email-style-title-prefix-list {\n font-size: 11px;\n line-height: 1.5;\n font-weight: bold;\n color: {{primaryColor}};\n text-transform: uppercase;\n margin-bottom: 3px;\n}\n.email-style-title-prefix-list.error {\n color: #f0153d;\n}\n\n.email-style-price-base, .email-style-discount-price, .email-style-discount-old-price, .email-style-price {\n font-size: 15px;\n line-height: 1.4;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n}\n.email-style-price-base.disabled, .disabled.email-style-discount-price, .disabled.email-style-discount-old-price, .disabled.email-style-price {\n opacity: 0.6;\n}\n.email-style-price-base.negative, .negative.email-style-discount-price, .negative.email-style-discount-old-price, .negative.email-style-price {\n color: #f0153d;\n}\n\n.email-style-price {\n font-weight: bold;\n color: {{primaryColor}};\n}\n\n.email-style-discount-old-price {\n text-decoration: line-through;\n color: var(--color-gray-4, #5e5e5e);\n}\n\n.email-style-discount-price {\n font-weight: bold;\n color: #ff4747;\n margin-left: 5px;\n}\n\n.pre-wrap {\n white-space: pre-wrap;\n} hr {height: 2px;background: #e7e7e7; border-radius: 1px; padding: 0; margin: 20px 0; outline: none; border: 0;} .button.primary { margin: 0; text-decoration: none; font-size: 16px; font-weight: bold; color: {{primaryColorContrast}}; padding: 0 27px; line-height: 42px; background: {{primaryColor}}; text-align: center; border-radius: 7px; touch-action: manipulation; display: inline-block; transition: 0.2s transform, 0.2s opacity; } .button.primary:active { transform: scale(0.95, 0.95); } .inline-link, .inline-link:link, .inline-link:visited, .inline-link:active, .inline-link:hover { margin: 0; text-decoration: underline; font-size: inherit; font-weight: inherit; color: inherit; touch-action: manipulation; } .inline-link:active { opacity: 0.5; } .description { color: #5e5e5e; } </style>\n</head>\n\n<body>\n<p style=\"margin: 0; padding: 0; line-height: 1.4;\">{{greeting}}</p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\">Met vriendelijke groeten,</p><p style=\"margin: 0; padding: 0; line-height: 1.4;\">{{organizationName}}</p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><hr style=\"height: 2px;background: #e7e7e7; border-radius: 1px; padding: 0; margin: 20px 0; outline: none; border: 0;\"><h2 style=\"margin: 0; padding: 0;\">Overzicht</h2><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><div data-type=\"smartVariableBlock\" data-id=\"orderDetailsTable\">{{orderDetailsTable}}</div><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><div data-type=\"smartVariableBlock\" data-id=\"orderTable\">{{orderTable}}</div><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><div data-type=\"smartButton\" data-id=\"orderUrl\"><table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" style=\"margin: 5px 0;\">\n<tbody><tr>\n <td>\n <table cellspacing=\"0\" cellpadding=\"0\">\n <tbody><tr>\n <td style=\"border-radius: 7px;\" bgcolor=\"{{primaryColor}}\">\n <a class=\"button primary\" href=\"{{orderUrl}}\" target=\"\" style=\"margin: 0; text-decoration: none; font-size: 16px; font-weight: bold; color: {{primaryColorContrast}}; padding: 0 27px; line-height: 42px; background: {{primaryColor}}; text-align: center; border-radius: 7px; touch-action: manipulation; display: inline-block; transition: 0.2s transform, 0.2s opacity;\">Bestelling bekijken</a>\n </td>\n </tr>\n </tbody></table>\n </td>\n</tr>\n</tbody></table></div><p class=\"description\" style=\"color: #5e5e5e;\"><em>Gebruik de bovenstaande knop om de gegevens van jouw bestelling na te kijken.</em></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><hr style=\"height: 2px;background: #e7e7e7; border-radius: 1px; padding: 0; margin: 20px 0; outline: none; border: 0;\"><p class=\"description\" style=\"color: #5e5e5e;\">Wil je geen e-mails van {{organizationName}} meer ontvangen? <a class=\"inline-link\" href=\"{{unsubscribeUrl}}\" target=\"\" style=\"margin: 0; text-decoration: underline; font-size: inherit; font-weight: inherit; color: inherit; touch-action: manipulation;\">Klik dan hier om uit te schrijven</a>.</p>\n</body>\n\n</html>', '{\"value\": {\"type\": \"doc\", \"content\": [{\"type\": \"paragraph\", \"content\": [{\"type\": \"smartVariable\", \"attrs\": {\"id\": \"greeting\"}}]}, {\"type\": \"paragraph\"}, {\"type\": \"paragraph\"}, {\"type\": \"paragraph\", \"content\": [{\"text\": \"Met vriendelijke groeten,\", \"type\": \"text\"}]}, {\"type\": \"paragraph\", \"content\": [{\"type\": \"smartVariable\", \"attrs\": {\"id\": \"organizationName\"}}]}, {\"type\": \"paragraph\"}, {\"type\": \"horizontalRule\"}, {\"type\": \"heading\", \"attrs\": {\"level\": 2}, \"content\": [{\"text\": \"Overzicht\", \"type\": \"text\"}]}, {\"type\": \"paragraph\"}, {\"type\": \"smartVariableBlock\", \"attrs\": {\"id\": \"orderDetailsTable\"}}, {\"type\": \"paragraph\"}, {\"type\": \"paragraph\"}, {\"type\": \"smartVariableBlock\", \"attrs\": {\"id\": \"orderTable\"}}, {\"type\": \"paragraph\"}, {\"type\": \"smartButton\", \"attrs\": {\"id\": \"orderUrl\"}, \"content\": [{\"text\": \"Bestelling bekijken\", \"type\": \"text\"}]}, {\"type\": \"descriptiveText\", \"content\": [{\"text\": \"Gebruik de bovenstaande knop om de gegevens van jouw bestelling na te kijken.\", \"type\": \"text\", \"marks\": [{\"type\": \"italic\"}]}]}, {\"type\": \"paragraph\"}, {\"type\": \"horizontalRule\"}, {\"type\": \"descriptiveText\", \"content\": [{\"text\": \"Wil je geen e-mails van \", \"type\": \"text\"}, {\"type\": \"smartVariable\", \"attrs\": {\"id\": \"organizationName\"}}, {\"text\": \" meer ontvangen? \", \"type\": \"text\"}, {\"type\": \"smartButtonInline\", \"attrs\": {\"id\": \"unsubscribeUrl\"}, \"content\": [{\"text\": \"Klik dan hier om uit te schrijven\", \"type\": \"text\"}]}, {\"text\": \".\", \"type\": \"text\"}]}]}, \"version\": 368}', '2025-03-27 10:13:00', '2025-03-27 10:13:00');
@@ -91,7 +91,7 @@ export class DocumentTemplate extends QueryableModel {
91
91
  id: 'group.name',
92
92
  type: RecordType.Text,
93
93
  }),
94
- value: group?.settings?.name ?? '',
94
+ value: group?.settings?.name?.toString() ?? '',
95
95
  }),
96
96
  'group.type': RecordTextAnswer.create({
97
97
  settings: RecordSettings.create({
@@ -426,7 +426,7 @@ export class DocumentTemplate extends QueryableModel {
426
426
  }
427
427
 
428
428
  const group = await Group.getByID(registration.groupId);
429
- const description = `${registration.member.details.name}, ${group ? group.settings.name : ''}${group && group.settings.period && group.type === GroupType.Membership ? ' ' + group.settings.period?.nameShort : ''}`;
429
+ const description = `${registration.member.details.name}, ${group ? group.settings.name.toString() : ''}${group && group.settings.period && group.type === GroupType.Membership ? ' ' + group.settings.period?.nameShort : ''}`;
430
430
 
431
431
  if (existingDocuments.length > 0) {
432
432
  for (const document of existingDocuments) {
@@ -622,7 +622,7 @@ export class DocumentTemplate extends QueryableModel {
622
622
  throw new SimpleError({
623
623
  code: 'invalid_document_number',
624
624
  message: 'Expected document number to be ' + (lastNumber + 1) + ' but got ' + document.number,
625
- human: 'Er ging iets mis bij het nummeren van de documenten (ben je zeker dat je geen documenten hebt verwijderd of toegevoegd sinds de vorige export?). Als je de export nog niet hebt gebruikt in Belcotax kan je de nummering resetten en de export opnieuw proberen.',
625
+ human: $t(`7fd5e5f1-6ff5-48a5-beae-36776935ec90`),
626
626
  });
627
627
  }
628
628
  lastNumber = document.number;