@stamhoofd/models 2.78.1 → 2.78.3

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 (38) hide show
  1. package/dist/src/factories/GroupFactory.d.ts +0 -3
  2. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  3. package/dist/src/factories/GroupFactory.js +0 -20
  4. package/dist/src/factories/GroupFactory.js.map +1 -1
  5. package/dist/src/factories/MemberFactory.js +2 -2
  6. package/dist/src/factories/MemberFactory.js.map +1 -1
  7. package/dist/src/factories/UserFactory.d.ts.map +1 -1
  8. package/dist/src/factories/UserFactory.js +7 -4
  9. package/dist/src/factories/UserFactory.js.map +1 -1
  10. package/dist/src/helpers/EmailBuilder.d.ts +2 -1
  11. package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
  12. package/dist/src/helpers/EmailBuilder.js +36 -4
  13. package/dist/src/helpers/EmailBuilder.js.map +1 -1
  14. package/dist/src/models/Email.d.ts.map +1 -1
  15. package/dist/src/models/Email.js +39 -38
  16. package/dist/src/models/Email.js.map +1 -1
  17. package/dist/src/models/Email.test.d.ts +2 -0
  18. package/dist/src/models/Email.test.d.ts.map +1 -0
  19. package/dist/src/models/Email.test.js +461 -0
  20. package/dist/src/models/Email.test.js.map +1 -0
  21. package/dist/src/models/Organization.d.ts +0 -7
  22. package/dist/src/models/Organization.d.ts.map +1 -1
  23. package/dist/src/models/Organization.js +0 -11
  24. package/dist/src/models/Organization.js.map +1 -1
  25. package/dist/tests/jest.global.setup.d.ts.map +1 -1
  26. package/dist/tests/jest.global.setup.js +11 -1
  27. package/dist/tests/jest.global.setup.js.map +1 -1
  28. package/dist/tests/jest.setup.js +14 -0
  29. package/dist/tests/jest.setup.js.map +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +4 -3
  32. package/src/factories/GroupFactory.ts +0 -21
  33. package/src/factories/MemberFactory.ts +2 -2
  34. package/src/factories/UserFactory.ts +7 -4
  35. package/src/helpers/EmailBuilder.ts +43 -6
  36. package/src/models/Email.test.ts +533 -0
  37. package/src/models/Email.ts +42 -42
  38. package/src/models/Organization.ts +0 -14
@@ -0,0 +1,461 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const structures_1 = require("@stamhoofd/structures");
4
+ const Email_1 = require("./Email");
5
+ const EmailRecipient_1 = require("./EmailRecipient");
6
+ const email_1 = require("@stamhoofd/email");
7
+ const test_utils_1 = require("@stamhoofd/test-utils");
8
+ const OrganizationFactory_1 = require("../factories/OrganizationFactory");
9
+ const Platform_1 = require("./Platform");
10
+ async function buildEmail(data) {
11
+ Email_1.Email.recipientLoaders.set(structures_1.EmailRecipientFilterType.Members, {
12
+ fetch: async (query) => {
13
+ return Promise.resolve(new structures_1.PaginatedResponse({
14
+ results: data.recipients,
15
+ next: undefined,
16
+ }));
17
+ },
18
+ count: async (query) => {
19
+ return data.recipients.length;
20
+ },
21
+ });
22
+ const model = new Email_1.Email();
23
+ model.userId = null;
24
+ model.organizationId = data.organizationId ?? null;
25
+ model.recipientFilter = structures_1.EmailRecipientFilter.create({
26
+ filters: [
27
+ structures_1.EmailRecipientSubfilter.create({
28
+ type: structures_1.EmailRecipientFilterType.Members,
29
+ filter: { id: { $in: ['test'] } },
30
+ }),
31
+ ],
32
+ });
33
+ model.subject = data.subject ?? 'This is a test email';
34
+ model.html = data.html ?? '<p>This is a test email</p>';
35
+ model.text = data.text ?? 'This is a test email';
36
+ model.json = data.json ?? {};
37
+ model.status = data.status ?? structures_1.EmailStatus.Draft;
38
+ model.attachments = [];
39
+ model.fromAddress = data.fromAddress ?? 'test@stamhoofd.be';
40
+ model.fromName = data.fromName ?? 'Stamhoofd Test Suite';
41
+ await model.save();
42
+ return model;
43
+ }
44
+ describe('Model.Email', () => {
45
+ it('Correctly whitelists email recipients', async () => {
46
+ test_utils_1.TestUtils.setEnvironment('WHITELISTED_EMAIL_DESTINATIONS', ['*@stamhoofd-allowed-domain-tests.be']);
47
+ const model = await buildEmail({
48
+ recipients: [
49
+ structures_1.EmailRecipient.create({
50
+ firstName: 'Test',
51
+ lastName: 'Test',
52
+ email: 'example@not-whitelisted-domain.be',
53
+ }),
54
+ structures_1.EmailRecipient.create({
55
+ firstName: 'Test',
56
+ lastName: 'Test',
57
+ email: 'example2@stamhoofd-allowed-domain-tests.be',
58
+ }),
59
+ ],
60
+ });
61
+ await model.send();
62
+ await model.refresh();
63
+ // Check if it was sent correctly
64
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
65
+ expect(model.recipientCount).toBe(2);
66
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
67
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
68
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0); // never tried to send any failed emails (whitelist)
69
+ // Load recipietns
70
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
71
+ expect(recipients).toIncludeSameMembers([
72
+ expect.objectContaining({
73
+ email: 'example2@stamhoofd-allowed-domain-tests.be',
74
+ sentAt: expect.any(Date),
75
+ failCount: 0,
76
+ failErrorMessage: null,
77
+ firstFailedAt: null,
78
+ lastFailedAt: null,
79
+ }),
80
+ expect.objectContaining({
81
+ email: 'example@not-whitelisted-domain.be',
82
+ sentAt: null,
83
+ failCount: 1,
84
+ failErrorMessage: 'All recipients are filtered due to environment',
85
+ firstFailedAt: expect.any(Date),
86
+ lastFailedAt: expect.any(Date),
87
+ }),
88
+ ]);
89
+ }, 15_000);
90
+ it('Retries emails on network errors', async () => {
91
+ const model = await buildEmail({
92
+ recipients: [
93
+ structures_1.EmailRecipient.create({
94
+ firstName: 'Test',
95
+ lastName: 'Test',
96
+ email: 'example@domain.be',
97
+ }),
98
+ structures_1.EmailRecipient.create({
99
+ firstName: 'Test',
100
+ lastName: 'Test',
101
+ email: 'example2@domain.be',
102
+ }),
103
+ ],
104
+ });
105
+ // Only one failure (the first email)
106
+ // It should automatically retry to send the email
107
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error'));
108
+ await model.send();
109
+ await model.refresh();
110
+ // Check if it was sent correctly
111
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
112
+ expect(model.recipientCount).toBe(2);
113
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
114
+ // Both have succeeded
115
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(2);
116
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(1); // One retry
117
+ // Load recipietns
118
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
119
+ expect(recipients).toIncludeSameMembers([
120
+ expect.objectContaining({
121
+ email: 'example@domain.be',
122
+ sentAt: expect.any(Date),
123
+ failCount: 0,
124
+ }),
125
+ expect.objectContaining({
126
+ email: 'example2@domain.be',
127
+ sentAt: expect.any(Date),
128
+ failCount: 0,
129
+ }),
130
+ ]);
131
+ }, 15_000);
132
+ it('Marks email recipient as failed if fails three times', async () => {
133
+ const model = await buildEmail({
134
+ recipients: [
135
+ structures_1.EmailRecipient.create({
136
+ firstName: 'Test',
137
+ lastName: 'Test',
138
+ email: 'example@domain.be',
139
+ }),
140
+ structures_1.EmailRecipient.create({
141
+ firstName: 'Test',
142
+ lastName: 'Test',
143
+ email: 'example2@domain.be',
144
+ }),
145
+ ],
146
+ });
147
+ // Only one failure (the first email)
148
+ // It should automatically retry to send the email
149
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error 1'));
150
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error 2'));
151
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error 3'));
152
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error 4'));
153
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error 5'));
154
+ email_1.EmailMocker.broadcast.failNext(new Error('This is a simulated network error 6'));
155
+ await model.send();
156
+ await model.refresh();
157
+ // Check if it was sent correctly
158
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
159
+ expect(model.recipientCount).toBe(2);
160
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
161
+ // Both have succeeded
162
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(0);
163
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(6); // Two retries for each recipient
164
+ // Load recipietns
165
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
166
+ expect(recipients).toIncludeSameMembers([
167
+ expect.objectContaining({
168
+ email: 'example@domain.be',
169
+ sentAt: null,
170
+ failCount: 1,
171
+ firstFailedAt: expect.any(Date),
172
+ lastFailedAt: expect.any(Date),
173
+ }),
174
+ expect.objectContaining({
175
+ email: 'example2@domain.be',
176
+ sentAt: null,
177
+ failCount: 1,
178
+ firstFailedAt: expect.any(Date),
179
+ lastFailedAt: expect.any(Date),
180
+ }),
181
+ ]);
182
+ }, 15_000);
183
+ it('Can handle recipients without name', async () => {
184
+ const model = await buildEmail({
185
+ recipients: [
186
+ structures_1.EmailRecipient.create({
187
+ email: 'example@domain.be',
188
+ }),
189
+ ],
190
+ });
191
+ await model.send();
192
+ await model.refresh();
193
+ // Check if it was sent correctly
194
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
195
+ expect(model.recipientCount).toBe(1);
196
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
197
+ // Both have succeeded
198
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
199
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
200
+ // Load recipietns
201
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
202
+ expect(recipients).toIncludeSameMembers([
203
+ expect.objectContaining({
204
+ email: 'example@domain.be',
205
+ sentAt: expect.any(Date),
206
+ failCount: 0,
207
+ }),
208
+ ]);
209
+ // Check to header
210
+ expect(email_1.EmailMocker.broadcast.getSucceededEmail(0).to).toEqual('example@domain.be');
211
+ }, 15_000);
212
+ it('Includes recipient names in mail header', async () => {
213
+ const model = await buildEmail({
214
+ recipients: [
215
+ structures_1.EmailRecipient.create({
216
+ firstName: 'John',
217
+ lastName: 'Von Doe',
218
+ email: 'example@domain.be',
219
+ }),
220
+ ],
221
+ });
222
+ await model.send();
223
+ await model.refresh();
224
+ // Check if it was sent correctly
225
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
226
+ expect(model.recipientCount).toBe(1);
227
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
228
+ // Both have succeeded
229
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
230
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
231
+ // Load recipietns
232
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
233
+ expect(recipients).toIncludeSameMembers([
234
+ expect.objectContaining({
235
+ firstName: 'John',
236
+ lastName: 'Von Doe',
237
+ email: 'example@domain.be',
238
+ sentAt: expect.any(Date),
239
+ failCount: 0,
240
+ }),
241
+ ]);
242
+ // Check to header
243
+ expect(email_1.EmailMocker.broadcast.getSucceededEmail(0).to).toEqual('"John Von Doe" <example@domain.be>');
244
+ }, 15_000);
245
+ it('Skips invalid email addresses', async () => {
246
+ const model = await buildEmail({
247
+ recipients: [
248
+ structures_1.EmailRecipient.create({
249
+ firstName: 'John',
250
+ lastName: 'Von Doe',
251
+ email: 'invalid',
252
+ }),
253
+ ],
254
+ });
255
+ await model.send();
256
+ await model.refresh();
257
+ // Check if it was sent correctly
258
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
259
+ expect(model.recipientCount).toBe(1);
260
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
261
+ // Both have succeeded
262
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(0);
263
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
264
+ // Load recipietns
265
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
266
+ expect(recipients).toIncludeSameMembers([
267
+ expect.objectContaining({
268
+ firstName: 'John',
269
+ lastName: 'Von Doe',
270
+ email: 'invalid',
271
+ failCount: 1,
272
+ failErrorMessage: 'Invalid email address',
273
+ firstFailedAt: expect.any(Date),
274
+ lastFailedAt: expect.any(Date),
275
+ }),
276
+ ]);
277
+ }, 15_000);
278
+ it('Skips empty email addresses while creating recipients', async () => {
279
+ const model = await buildEmail({
280
+ recipients: [
281
+ structures_1.EmailRecipient.create({
282
+ firstName: '',
283
+ lastName: '',
284
+ email: '',
285
+ }),
286
+ structures_1.EmailRecipient.create({
287
+ firstName: '',
288
+ lastName: '',
289
+ email: 'valid@example.com',
290
+ }),
291
+ ],
292
+ });
293
+ await model.send();
294
+ await model.refresh();
295
+ // Check if it was sent correctly
296
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
297
+ expect(model.recipientCount).toBe(1);
298
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
299
+ // Both have succeeded
300
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
301
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
302
+ // Load recipietns
303
+ const recipients = await EmailRecipient_1.EmailRecipient.select().where('emailId', model.id).fetch();
304
+ expect(recipients).toIncludeSameMembers([
305
+ expect.objectContaining({
306
+ email: 'valid@example.com',
307
+ sentAt: expect.any(Date),
308
+ }),
309
+ ]);
310
+ }, 15_000);
311
+ it('Platform can send from default domain', async () => {
312
+ test_utils_1.TestUtils.setEnvironment('domains', {
313
+ ...STAMHOOFD.domains,
314
+ defaultTransactionalEmail: {
315
+ '': 'my-platform.com',
316
+ },
317
+ defaultBroadcastEmail: {
318
+ '': 'broadcast.my-platform.com',
319
+ },
320
+ });
321
+ const model = await buildEmail({
322
+ recipients: [
323
+ structures_1.EmailRecipient.create({
324
+ email: 'example@domain.be',
325
+ }),
326
+ ],
327
+ fromAddress: 'info@my-platform.com',
328
+ fromName: 'My Platform',
329
+ });
330
+ await model.send();
331
+ await model.refresh();
332
+ // Check if it was sent correctly
333
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
334
+ expect(model.recipientCount).toBe(1);
335
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
336
+ // Both have succeeded
337
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
338
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
339
+ // Check to header
340
+ expect(email_1.EmailMocker.broadcast.getSucceededEmail(0)).toMatchObject({
341
+ to: 'example@domain.be',
342
+ from: '"My Platform" <info@my-platform.com>',
343
+ replyTo: undefined,
344
+ });
345
+ }, 15_000);
346
+ it('Platform cannot send from unsupported domain', async () => {
347
+ test_utils_1.TestUtils.setEnvironment('domains', {
348
+ ...STAMHOOFD.domains,
349
+ defaultTransactionalEmail: {
350
+ '': 'my-platform.com',
351
+ },
352
+ defaultBroadcastEmail: {
353
+ '': 'broadcast.my-platform.com',
354
+ },
355
+ });
356
+ const model = await buildEmail({
357
+ recipients: [
358
+ structures_1.EmailRecipient.create({
359
+ email: 'example@domain.be',
360
+ }),
361
+ ],
362
+ fromAddress: 'info@other-platform.com',
363
+ fromName: 'My Platform',
364
+ });
365
+ await model.send();
366
+ await model.refresh();
367
+ // Check if it was sent correctly
368
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
369
+ expect(model.recipientCount).toBe(1);
370
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
371
+ // Both have succeeded
372
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
373
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
374
+ // Check to header
375
+ expect(email_1.EmailMocker.broadcast.getSucceededEmail(0)).toMatchObject({
376
+ to: 'example@domain.be',
377
+ from: '"My Platform" <noreply@broadcast.my-platform.com>', // domain has changed here
378
+ replyTo: '"My Platform" <info@other-platform.com>', // Reply to should be set
379
+ });
380
+ }, 15_000);
381
+ it('Organization cannot send from platform domain', async () => {
382
+ test_utils_1.TestUtils.setEnvironment('domains', {
383
+ ...STAMHOOFD.domains,
384
+ defaultTransactionalEmail: {
385
+ '': 'my-platform.com',
386
+ },
387
+ defaultBroadcastEmail: {
388
+ '': 'broadcast.my-platform.com',
389
+ },
390
+ });
391
+ const organization = await new OrganizationFactory_1.OrganizationFactory({
392
+ uri: 'uritest',
393
+ }).create();
394
+ const model = await buildEmail({
395
+ organizationId: organization.id,
396
+ recipients: [
397
+ structures_1.EmailRecipient.create({
398
+ email: 'example@domain.be',
399
+ }),
400
+ ],
401
+ fromAddress: 'info@my-platform.com',
402
+ fromName: 'My Platform',
403
+ });
404
+ await model.send();
405
+ await model.refresh();
406
+ // Check if it was sent correctly
407
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
408
+ expect(model.recipientCount).toBe(1);
409
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
410
+ // Both have succeeded
411
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
412
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
413
+ // Check to header
414
+ expect(email_1.EmailMocker.broadcast.getSucceededEmail(0)).toMatchObject({
415
+ to: 'example@domain.be',
416
+ from: '"My Platform" <noreply-uritest@broadcast.my-platform.com>', // domain has changed here
417
+ replyTo: '"My Platform" <info@my-platform.com>', // Reply to should be set
418
+ });
419
+ }, 15_000);
420
+ it('Organization can send from platform domain if default membership organization', async () => {
421
+ test_utils_1.TestUtils.setEnvironment('domains', {
422
+ ...STAMHOOFD.domains,
423
+ defaultTransactionalEmail: {
424
+ '': 'my-platform.com',
425
+ },
426
+ defaultBroadcastEmail: {
427
+ '': 'broadcast.my-platform.com',
428
+ },
429
+ });
430
+ const organization = await new OrganizationFactory_1.OrganizationFactory({}).create();
431
+ const platform = await Platform_1.Platform.getShared();
432
+ platform.membershipOrganizationId = organization.id;
433
+ await platform.save();
434
+ const model = await buildEmail({
435
+ organizationId: organization.id,
436
+ recipients: [
437
+ structures_1.EmailRecipient.create({
438
+ email: 'example@domain.be',
439
+ }),
440
+ ],
441
+ fromAddress: 'info@my-platform.com',
442
+ fromName: 'My Platform',
443
+ });
444
+ await model.send();
445
+ await model.refresh();
446
+ // Check if it was sent correctly
447
+ expect(model.recipientsStatus).toBe(structures_1.EmailRecipientsStatus.Created);
448
+ expect(model.recipientCount).toBe(1);
449
+ expect(model.status).toBe(structures_1.EmailStatus.Sent);
450
+ // Both have succeeded
451
+ expect(email_1.EmailMocker.broadcast.getSucceededCount()).toBe(1);
452
+ expect(email_1.EmailMocker.broadcast.getFailedCount()).toBe(0);
453
+ // Check to header
454
+ expect(email_1.EmailMocker.broadcast.getSucceededEmail(0)).toMatchObject({
455
+ to: 'example@domain.be',
456
+ from: '"My Platform" <info@my-platform.com>', // domain has changed here
457
+ replyTo: undefined,
458
+ });
459
+ }, 15_000);
460
+ });
461
+ //# sourceMappingURL=Email.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Email.test.js","sourceRoot":"","sources":["../../../src/models/Email.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { DecodedRequest } from '@simonbackx/simple-endpoints';
2
1
  import { I18n } from '@stamhoofd/backend-i18n';
3
2
  import { EmailInterfaceRecipient } from '@stamhoofd/email';
4
3
  import { QueryableModel } from '@stamhoofd/sql';
@@ -41,12 +40,6 @@ export declare class Organization extends QueryableModel {
41
40
  static getByURI(uri: string): Promise<Organization | undefined>;
42
41
  static getByEmail(email: string): Promise<Organization | undefined>;
43
42
  static getByRegisterDomain(host: string): Promise<Organization | undefined>;
44
- /**
45
- * Get an Organization by looking at the host of a request
46
- * Format is 2331c59a-0cbe-4279-871c-ea9d0474cd54.api.stamhoofd.app
47
- * + switch country if needed
48
- */
49
- static getFromRequest(request: DecodedRequest<any, any, any>): Promise<Organization>;
50
43
  /**
51
44
  * Get an Organization by looking at the host of a request
52
45
  * Format is 2331c59a-0cbe-4279-871c-ea9d0474cd54.api.stamhoofd.app
@@ -1 +1 @@
1
- {"version":3,"file":"Organization.d.ts","sourceRoot":"","sources":["../../../src/models/Organization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Organization.d.ts","sourceRoot":"","sources":["../../../src/models/Organization.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAS,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,OAAO,EAA4B,iBAAiB,EAAqB,oBAAoB,EAAE,2BAA2B,EAAE,YAAY,IAAI,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,2BAA2B,EAAE,SAAS,EAA8B,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAS7T,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAEnE,qBAAa,YAAa,SAAQ,cAAc;IAC5C,MAAM,CAAC,KAAK,SAAmB;IAO/B,EAAE,EAAG,MAAM,CAAC;IAGZ,IAAI,EAAE,MAAM,CAAC;IAIb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAK9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAKrC,GAAG,EAAE,MAAM,CAAC;IAGZ,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,IAAI,EAAE,oBAAoB,CAAC;IAE3B;;OAEG;IAEH,WAAW,EAAE,2BAA2B,CAA0C;IAElF;;OAEG;IAEH,UAAU,EAAE,0BAA0B,CAAyC;IAG/E,OAAO,EAAE,OAAO,CAAC;IAOjB,WAAW,EAAE,MAAM,CAAC;IAYpB,SAAS,EAAE,IAAI,CAAC;IAUhB,SAAS,EAAE,IAAI,CAAC;IAGhB,MAAM,UAAQ;IAEd;;OAEG;IACH,IAAI,IAAI,SAEP;IAED;;OAEG;IACH,IAAI,sBAAsB,IAAI,gBAAgB,CAE7C;WAGY,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;WAexD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;WAiC5D,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAcjF;;;OAGG;WACU,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IA2BpG;;OAEG;IACH,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM;IAa5B,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM;IAanC,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,UAAU,IAAI,MAAM;IAQpB,OAAO,CAAC,aAAa,CAAC,CAAiC;IAEjD,SAAS;IAkCf,gBAAgB,IAAI,kBAAkB;IAchC,gBAAgB;IAuHhB,iBAAiB,CAAC,IAAI,EAAE;QAC1B,IAAI,EAAE,iBAAiB,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,OAAO,CAAC;KACjB;IA8CK,sBAAsB,CAAC,UAAU,EAAE,MAAM;IAyC/C;;OAEG;IACG,sBAAsB;IAsGtB,UAAU;IA4JhB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAepD,SAAS;IAMf;;OAEG;IACG,aAAa;IAOnB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAgB5D;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAyBhD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,UAAO,EAAE,IAAI,GAAE,eAAe,GAAG,WAAyB;IAS7F;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,UAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAwCjG;;OAEG;IACH,eAAe,CAAC,aAAa,UAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAyC/E,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC;QAC7F,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;QACjC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;KACvC,CAAC;IA2BI,4BAA4B,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;CAqBnE"}
@@ -99,17 +99,6 @@ class Organization extends sql_1.QueryableModel {
99
99
  // Read member + address from first row
100
100
  return this.fromRow(rows[0][this.table]);
101
101
  }
102
- /**
103
- * Get an Organization by looking at the host of a request
104
- * Format is 2331c59a-0cbe-4279-871c-ea9d0474cd54.api.stamhoofd.app
105
- * + switch country if needed
106
- */
107
- static async getFromRequest(request) {
108
- const organization = await Organization.fromApiHost(request.host);
109
- const i18n = backend_i18n_1.I18n.fromRequest(request);
110
- i18n.switchToLocale({ country: organization.address.country });
111
- return organization;
112
- }
113
102
  /**
114
103
  * Get an Organization by looking at the host of a request
115
104
  * Format is 2331c59a-0cbe-4279-871c-ea9d0474cd54.api.stamhoofd.app