@camphoric/camphoric-event-import-tools 2.0.0 → 2.1.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.
- package/CHANGELOG.md +7 -0
- package/CamphoricEventCreator.ts +210 -15
- package/README.md +6 -1
- package/dist/CamphoricEventCreator.d.ts +30 -4
- package/dist/CamphoricEventCreator.d.ts.map +1 -1
- package/dist/CamphoricEventCreator.js +163 -15
- package/dist/CamphoricEventCreator.js.map +1 -1
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/types.ts +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.1.0](https://github.com/camphoric/camphoric/compare/camphoric-event-import-tools-v2.0.0...camphoric-event-import-tools-v2.1.0) (2026-11-06)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **data:** import group emails, promo codes and the invoice email ([03e7ab5](https://github.com/camphoric/camphoric/commit/03e7ab51b9ca9d7283f80facddd38ee623c96645)), closes [#970](https://github.com/camphoric/camphoric/issues/970)
|
|
9
|
+
|
|
3
10
|
## [2.0.0](https://github.com/camphoric/camphoric/compare/camphoric-event-import-tools-v1.2.1...camphoric-event-import-tools-v2.0.0) (2026-11-05)
|
|
4
11
|
|
|
5
12
|
|
package/CamphoricEventCreator.ts
CHANGED
|
@@ -18,10 +18,12 @@
|
|
|
18
18
|
* ---------
|
|
19
19
|
*
|
|
20
20
|
* data: an event import object (the spec's EventImport), checked first with
|
|
21
|
-
* `validate`, the spec's validateEventImport
|
|
22
|
-
*
|
|
23
|
-
* `
|
|
24
|
-
*
|
|
21
|
+
* `validate`, the spec's validateEventImport, and then for names it refers to
|
|
22
|
+
* (a promo code's excluded registration types must be the event's). Every
|
|
23
|
+
* field of `data.event` is sent to the events API as-is, including optional
|
|
24
|
+
* ones such as `registration_error_messages` (custom validation messages for
|
|
25
|
+
* the registration form), except its emails' fields, which are set on the
|
|
26
|
+
* event's confirmation and invoice email templates.
|
|
25
27
|
*
|
|
26
28
|
* sampleRegGenerator: a SampleRegGenerator, called with
|
|
27
29
|
* - fetch: a fetch function
|
|
@@ -66,6 +68,61 @@ export interface CamphoricEventCreatorOptions {
|
|
|
66
68
|
// A sample registration, with the server's answer to its last step
|
|
67
69
|
type PostedRegistration = SampleRegistration & { response: Record<string, unknown> };
|
|
68
70
|
|
|
71
|
+
// An email template's fields the import sets: undefined leaves one as it is
|
|
72
|
+
type EmailTemplateFields = Record<string, string | undefined>;
|
|
73
|
+
|
|
74
|
+
// One template's result from GET /api/events/<id>/templates/check
|
|
75
|
+
interface TemplateCheckResult {
|
|
76
|
+
kind: string;
|
|
77
|
+
label: string;
|
|
78
|
+
diagnostics: { severity: string, message: string, line?: number | null, field?: string | null }[];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// A group email's fields, as a new template has them: one the data leaves out
|
|
82
|
+
// is set to this, so a template matched by name ends up as the data declares it.
|
|
83
|
+
const GROUP_EMAIL_DEFAULTS = {
|
|
84
|
+
from_email: '',
|
|
85
|
+
reply_to: '',
|
|
86
|
+
recipient_source: 'registrations',
|
|
87
|
+
filter: {},
|
|
88
|
+
filter_expression: '',
|
|
89
|
+
address_expression: '',
|
|
90
|
+
name_expression: '',
|
|
91
|
+
recipient_list: '',
|
|
92
|
+
include_incomplete: false,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// Likewise for a promo code
|
|
96
|
+
const PROMO_CODE_DEFAULTS = {
|
|
97
|
+
scope: 'registration',
|
|
98
|
+
enabled: true,
|
|
99
|
+
expiration_date: null,
|
|
100
|
+
excluded_registration_types: [],
|
|
101
|
+
excludes_uninvited: false,
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* What the import data names that it doesn't hold: each promo code's excluded
|
|
106
|
+
* registration types must be among the event's. An empty list when there are
|
|
107
|
+
* none.
|
|
108
|
+
*/
|
|
109
|
+
export function referenceProblems(data: ImportData): string[] {
|
|
110
|
+
const typeNames = new Set(data.registration_types.map(t => t.name));
|
|
111
|
+
return (data.promo_codes ?? []).flatMap(promo => (promo.excluded_registration_types ?? [])
|
|
112
|
+
.filter(name => !typeNames.has(name))
|
|
113
|
+
.map(name => `promo code '${promo.code}' excludes registration type '${name}', which the event doesn't have`));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** The problems a template check found that are errors, by template. */
|
|
117
|
+
export function templateErrors(results: TemplateCheckResult[]): string[] {
|
|
118
|
+
return results.flatMap(result => result.diagnostics
|
|
119
|
+
.filter(d => d.severity === 'error')
|
|
120
|
+
.map(d => {
|
|
121
|
+
const where = [d.field, d.line ? `line ${d.line}` : ''].filter(Boolean).join(', ');
|
|
122
|
+
return `${result.label}${where ? ` (${where})` : ''}: ${d.message}`;
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
|
|
69
126
|
/**
|
|
70
127
|
* Requests started ahead of the Promise.all that collects them, pausing
|
|
71
128
|
* between batches so the server keeps up. Each is handled as it starts, so
|
|
@@ -105,6 +162,12 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
105
162
|
);
|
|
106
163
|
}
|
|
107
164
|
|
|
165
|
+
const references = referenceProblems(data);
|
|
166
|
+
|
|
167
|
+
if (references.length) {
|
|
168
|
+
throw this.error('event data object names what it does not hold', ...references);
|
|
169
|
+
}
|
|
170
|
+
|
|
108
171
|
this.setOrganizations(organizations, data.organization);
|
|
109
172
|
|
|
110
173
|
if (sampleRegGenerator) {
|
|
@@ -175,10 +238,16 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
175
238
|
const emailAccounts: Saved[] = await this.fetch('GET', '/api/emailaccounts/');
|
|
176
239
|
const email = emailAccounts.find(e => e.organization === org.id);
|
|
177
240
|
|
|
178
|
-
// The confirmation
|
|
241
|
+
// The confirmation and invoice emails are the event's email templates,
|
|
242
|
+
// updated below.
|
|
179
243
|
const {
|
|
180
|
-
confirmation_email_subject
|
|
181
|
-
confirmation_email_template
|
|
244
|
+
confirmation_email_subject,
|
|
245
|
+
confirmation_email_template,
|
|
246
|
+
confirmation_email_reply_to,
|
|
247
|
+
invoice_email_subject,
|
|
248
|
+
invoice_email_template,
|
|
249
|
+
invoice_email_from,
|
|
250
|
+
invoice_email_reply_to,
|
|
182
251
|
...eventData
|
|
183
252
|
} = this.data.event;
|
|
184
253
|
const event: Record<string, unknown> = {
|
|
@@ -207,7 +276,17 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
207
276
|
event,
|
|
208
277
|
);
|
|
209
278
|
|
|
210
|
-
await this.
|
|
279
|
+
await this.updateEmailTemplate(eventResponse.confirmation_template, {
|
|
280
|
+
subject: confirmation_email_subject,
|
|
281
|
+
body: confirmation_email_template,
|
|
282
|
+
reply_to: confirmation_email_reply_to,
|
|
283
|
+
});
|
|
284
|
+
await this.updateEmailTemplate(eventResponse.invoice_template, {
|
|
285
|
+
subject: invoice_email_subject,
|
|
286
|
+
body: invoice_email_template,
|
|
287
|
+
from_email: invoice_email_from,
|
|
288
|
+
reply_to: invoice_email_reply_to,
|
|
289
|
+
});
|
|
211
290
|
|
|
212
291
|
this.results.event = eventResponse;
|
|
213
292
|
return eventResponse;
|
|
@@ -216,11 +295,15 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
216
295
|
// An event's confirmation and a registration type's invitation are email
|
|
217
296
|
// templates, created with them (SPEC DR-45); set the text the data gives.
|
|
218
297
|
async loadEmailTemplate(templateId: unknown, subject?: string, body?: string) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
298
|
+
await this.updateEmailTemplate(templateId, { subject, body });
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Set the fields of an email template created with its event or
|
|
302
|
+
// registration type that the data gives (an undefined one is left as is).
|
|
303
|
+
async updateEmailTemplate(templateId: unknown, fields: EmailTemplateFields) {
|
|
304
|
+
const given = Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== undefined));
|
|
305
|
+
if (!templateId || !Object.keys(given).length) return;
|
|
306
|
+
await this.fetch('PATCH', `/api/emailtemplates/${templateId}/`, given);
|
|
224
307
|
}
|
|
225
308
|
|
|
226
309
|
async loadLodgings() {
|
|
@@ -258,6 +341,7 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
258
341
|
reserved: lodging.reserved || 0,
|
|
259
342
|
sharing_multiplier: lodging.sharing_multiplier || 1,
|
|
260
343
|
notes: lodging.notes || '',
|
|
344
|
+
availability: lodging.availability || 'auto',
|
|
261
345
|
};
|
|
262
346
|
const saved: Saved = await this.fetch('POST', '/api/lodgings/', data);
|
|
263
347
|
createdLodging = saved;
|
|
@@ -340,7 +424,7 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
340
424
|
|
|
341
425
|
const existingRegTypes = response.filter(regType => regType.event === event.id);
|
|
342
426
|
|
|
343
|
-
await Promise.all(
|
|
427
|
+
this.results.registration_types = await Promise.all(
|
|
344
428
|
this.data.registration_types.map(
|
|
345
429
|
async (regType) => {
|
|
346
430
|
const exists = existingRegTypes.find(r => r.name === regType.name);
|
|
@@ -348,6 +432,8 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
348
432
|
const {
|
|
349
433
|
invitation_email_subject: subject,
|
|
350
434
|
invitation_email_template: body,
|
|
435
|
+
invitation_email_from: from_email,
|
|
436
|
+
invitation_email_reply_to: reply_to,
|
|
351
437
|
...typeData
|
|
352
438
|
} = regType;
|
|
353
439
|
|
|
@@ -360,13 +446,117 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
360
446
|
event: event.id,
|
|
361
447
|
},
|
|
362
448
|
);
|
|
363
|
-
await this.
|
|
449
|
+
await this.updateEmailTemplate(saved.invitation_template, { subject, body, from_email, reply_to });
|
|
364
450
|
return saved;
|
|
365
451
|
}
|
|
366
452
|
)
|
|
367
453
|
);
|
|
368
454
|
}
|
|
369
455
|
|
|
456
|
+
// The event's group emails (SPEC §8.9): each one the data declares is
|
|
457
|
+
// created, or, when the event has one by its name, updated to match.
|
|
458
|
+
// Others the event has are left alone.
|
|
459
|
+
async loadGroupEmails() {
|
|
460
|
+
const { email_templates } = this.data;
|
|
461
|
+
|
|
462
|
+
if (!email_templates || !email_templates.length) return;
|
|
463
|
+
|
|
464
|
+
const event = this.savedEvent();
|
|
465
|
+
const all: Saved[] = await this.fetch('GET', '/api/emailtemplates/');
|
|
466
|
+
const existing = all.filter(t => t.event === event.id && t.purpose === 'group');
|
|
467
|
+
|
|
468
|
+
this.results.email_templates = await Promise.all(email_templates.map((template) => {
|
|
469
|
+
const exists = existing.find(t => t.name === template.name);
|
|
470
|
+
|
|
471
|
+
return this.fetch(
|
|
472
|
+
exists ? 'PUT' : 'POST',
|
|
473
|
+
`/api/emailtemplates/${exists ? `${exists.id}/` : ''}`,
|
|
474
|
+
{ ...GROUP_EMAIL_DEFAULTS, ...template, purpose: 'group', event: event.id },
|
|
475
|
+
) as Promise<Saved>;
|
|
476
|
+
}));
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// The event's promo codes (SPEC DR-67): each one the data declares is
|
|
480
|
+
// created, or, when the event has a live one with its code (ignoring case),
|
|
481
|
+
// updated to match. Its excluded registration types are given by name, so
|
|
482
|
+
// this runs once they're saved. Others the event has are left alone.
|
|
483
|
+
async loadPromoCodes() {
|
|
484
|
+
const { promo_codes } = this.data;
|
|
485
|
+
|
|
486
|
+
if (!promo_codes || !promo_codes.length) return;
|
|
487
|
+
|
|
488
|
+
const event = this.savedEvent();
|
|
489
|
+
const regTypes = this.results.registration_types ?? [];
|
|
490
|
+
// Every code is worked out before any is sent, so a problem sends none.
|
|
491
|
+
const bodies = promo_codes.map((promo) => {
|
|
492
|
+
const excluded = (promo.excluded_registration_types ?? []).map((name) => {
|
|
493
|
+
const regType = regTypes.find(t => t.name === name);
|
|
494
|
+
if (!regType) {
|
|
495
|
+
throw this.error(`promo code '${promo.code}' excludes registration type '${name}', which was not imported`);
|
|
496
|
+
}
|
|
497
|
+
return regType.id;
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
// An expiry that can't be read must not save as "never expires"
|
|
501
|
+
const expiration = formatDateTime(promo.expiration_date);
|
|
502
|
+
if (promo.expiration_date !== undefined && expiration === undefined) {
|
|
503
|
+
throw this.error(`promo code '${promo.code}' has an expiration_date that can't be read: '${promo.expiration_date}'`);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
return {
|
|
507
|
+
...PROMO_CODE_DEFAULTS,
|
|
508
|
+
...promo,
|
|
509
|
+
expiration_date: expiration ?? null,
|
|
510
|
+
excluded_registration_types: excluded,
|
|
511
|
+
event: event.id,
|
|
512
|
+
};
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
const all: Saved[] = await this.fetch('GET', '/api/promocodes/');
|
|
516
|
+
const existing = all.filter(p => p.event === event.id);
|
|
517
|
+
const sameCode = (a: unknown, b: string) => String(a).trim().toLowerCase() === b.trim().toLowerCase();
|
|
518
|
+
|
|
519
|
+
this.results.promo_codes = await Promise.all(bodies.map((body) => {
|
|
520
|
+
const exists = existing.find(p => sameCode(p.code, body.code));
|
|
521
|
+
|
|
522
|
+
return this.fetch(
|
|
523
|
+
exists ? 'PUT' : 'POST',
|
|
524
|
+
`/api/promocodes/${exists ? `${exists.id}/` : ''}`,
|
|
525
|
+
body,
|
|
526
|
+
) as Promise<Saved>;
|
|
527
|
+
}));
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// Check every template of the event through the server (SPEC §9.3), as
|
|
531
|
+
// `manage.py check_templates` does: each is rendered against the event's
|
|
532
|
+
// registrations (or, with none, parsed), so one that won't render fails the
|
|
533
|
+
// import rather than its first send.
|
|
534
|
+
async checkTemplates() {
|
|
535
|
+
const event = this.savedEvent();
|
|
536
|
+
const token = await this.getAuthToken();
|
|
537
|
+
// (Not this.fetch, which ends every path with a slash: this one has none.)
|
|
538
|
+
const res = await fetch(`${this.urlBase}/api/events/${event.id}/templates/check`, {
|
|
539
|
+
headers: { 'Authorization': `Token ${token}` },
|
|
540
|
+
});
|
|
541
|
+
const text = await res.text();
|
|
542
|
+
|
|
543
|
+
let json;
|
|
544
|
+
try {
|
|
545
|
+
json = JSON.parse(text);
|
|
546
|
+
} catch {
|
|
547
|
+
throw this.error(`template check returned non-JSON (${res.status})`, { status: res.status, body: text });
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
if (!res.ok) {
|
|
551
|
+
throw this.error(`template check failed (${res.status})`, { status: res.status, response: json });
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
const errors = templateErrors(json.results ?? []);
|
|
555
|
+
if (errors.length) {
|
|
556
|
+
throw this.error(`${errors.length} template problem(s): ${errors.join('; ')}`, ...errors);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
370
560
|
async loadTestRegs() {
|
|
371
561
|
if (!this.sampleRegGenerator) return [];
|
|
372
562
|
|
|
@@ -517,6 +707,8 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
517
707
|
await imp('custom charge types', this.loadCustomChargeTypes());
|
|
518
708
|
await imp('reports', this.loadReports());
|
|
519
709
|
await imp('registration types', this.loadRegTypes());
|
|
710
|
+
await imp('group emails', this.loadGroupEmails());
|
|
711
|
+
await imp('promo codes', this.loadPromoCodes());
|
|
520
712
|
|
|
521
713
|
await this.loadLodgings();
|
|
522
714
|
await imp('lodging', Promise.resolve());
|
|
@@ -534,6 +726,9 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
534
726
|
await imp('test registrations', this.loadTestRegs());
|
|
535
727
|
}
|
|
536
728
|
|
|
729
|
+
// After the sample registrations, so the templates render against them
|
|
730
|
+
await imp('template check', this.checkTemplates());
|
|
731
|
+
|
|
537
732
|
this.log(`🎉 Finished Importing ${this.data.event.name}!`);
|
|
538
733
|
|
|
539
734
|
return true;
|
package/README.md
CHANGED
|
@@ -17,7 +17,12 @@ importer:
|
|
|
17
17
|
the same check.
|
|
18
18
|
- `@camphoric/camphoric-event-import-tools/creator`: `CamphoricEventCreator`, which imports an
|
|
19
19
|
event module into a Camphoric server. Pass it the spec's `validateEventImport` as `validate`;
|
|
20
|
-
the tools don't depend on any particular spec version.
|
|
20
|
+
the tools don't depend on any particular spec version. Group emails are matched to the event's
|
|
21
|
+
saved ones by name and promo codes by code (ignoring case), so importing again updates them
|
|
22
|
+
rather than adding copies; ones the event has that the data doesn't name are left alone. Once
|
|
23
|
+
everything (and any sample registrations) is in, the server checks the event's templates
|
|
24
|
+
(`GET /api/events/<id>/templates/check`, as `manage.py check_templates` does), and a template
|
|
25
|
+
with an error fails the import, rather than its first send.
|
|
21
26
|
- `@camphoric/camphoric-event-import-tools/organizations`: `organizationLoader()` (loads each
|
|
22
27
|
organization once, creating it and its email account when missing) and `Organizations`.
|
|
23
28
|
- `@camphoric/camphoric-event-import-tools/e2e`: Playwright scaffolding for testing an event's
|
|
@@ -18,10 +18,12 @@
|
|
|
18
18
|
* ---------
|
|
19
19
|
*
|
|
20
20
|
* data: an event import object (the spec's EventImport), checked first with
|
|
21
|
-
* `validate`, the spec's validateEventImport
|
|
22
|
-
*
|
|
23
|
-
* `
|
|
24
|
-
*
|
|
21
|
+
* `validate`, the spec's validateEventImport, and then for names it refers to
|
|
22
|
+
* (a promo code's excluded registration types must be the event's). Every
|
|
23
|
+
* field of `data.event` is sent to the events API as-is, including optional
|
|
24
|
+
* ones such as `registration_error_messages` (custom validation messages for
|
|
25
|
+
* the registration form), except its emails' fields, which are set on the
|
|
26
|
+
* event's confirmation and invoice email templates.
|
|
25
27
|
*
|
|
26
28
|
* sampleRegGenerator: a SampleRegGenerator, called with
|
|
27
29
|
* - fetch: a fetch function
|
|
@@ -43,6 +45,25 @@ export interface CamphoricEventCreatorOptions {
|
|
|
43
45
|
organizations?: Organizations;
|
|
44
46
|
url?: string;
|
|
45
47
|
}
|
|
48
|
+
type EmailTemplateFields = Record<string, string | undefined>;
|
|
49
|
+
interface TemplateCheckResult {
|
|
50
|
+
kind: string;
|
|
51
|
+
label: string;
|
|
52
|
+
diagnostics: {
|
|
53
|
+
severity: string;
|
|
54
|
+
message: string;
|
|
55
|
+
line?: number | null;
|
|
56
|
+
field?: string | null;
|
|
57
|
+
}[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* What the import data names that it doesn't hold: each promo code's excluded
|
|
61
|
+
* registration types must be among the event's. An empty list when there are
|
|
62
|
+
* none.
|
|
63
|
+
*/
|
|
64
|
+
export declare function referenceProblems(data: ImportData): string[];
|
|
65
|
+
/** The problems a template check found that are errors, by template. */
|
|
66
|
+
export declare function templateErrors(results: TemplateCheckResult[]): string[];
|
|
46
67
|
/**
|
|
47
68
|
* Requests started ahead of the Promise.all that collects them, pausing
|
|
48
69
|
* between batches so the server keeps up. Each is handled as it starts, so
|
|
@@ -67,14 +88,19 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
67
88
|
deleteAll(path: string): Promise<void>;
|
|
68
89
|
loadEvent(): Promise<Saved>;
|
|
69
90
|
loadEmailTemplate(templateId: unknown, subject?: string, body?: string): Promise<void>;
|
|
91
|
+
updateEmailTemplate(templateId: unknown, fields: EmailTemplateFields): Promise<void>;
|
|
70
92
|
loadLodgings(): Promise<void>;
|
|
71
93
|
loadReports(): Promise<void>;
|
|
72
94
|
loadCustomChargeTypes(): Promise<void>;
|
|
73
95
|
loadRegTypes(): Promise<void>;
|
|
96
|
+
loadGroupEmails(): Promise<void>;
|
|
97
|
+
loadPromoCodes(): Promise<void>;
|
|
98
|
+
checkTemplates(): Promise<void>;
|
|
74
99
|
loadTestRegs(): Promise<(SampleRegistration & {
|
|
75
100
|
response: Record<string, unknown>;
|
|
76
101
|
})[]>;
|
|
77
102
|
create(): Promise<boolean>;
|
|
78
103
|
setOrganizations: (organizations: Organizations | undefined, organization: string | number) => Promise<void>;
|
|
79
104
|
}
|
|
105
|
+
export {};
|
|
80
106
|
//# sourceMappingURL=CamphoricEventCreator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CamphoricEventCreator.d.ts","sourceRoot":"","sources":["../CamphoricEventCreator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CamphoricEventCreator.d.ts","sourceRoot":"","sources":["../CamphoricEventCreator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAEb,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,EACL,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,UAAU,CAAC;IAGjB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAG9D,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACnG;AAyBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAK5D;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAOvE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY;;UAIlB,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;EAK5C;AAED,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,OAAO;IAChD,IAAI,EAAE,UAAU,CAAC;IACzB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;gBAErC,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,SAAc,EAAE,GAAG,EAAE,EAAE,4BAA4B;IA2CpH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAShC,UAAU,IAAI,KAAK;IASnB,YAAY,IAAI,YAAY;IAMtB,SAAS,CAAC,IAAI,EAAE,MAAM;IAUtB,SAAS;IAqET,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAMtE,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB;IAMpE,YAAY;IAqEZ,WAAW;IAYX,qBAAqB;IA8BrB,YAAY;IAuCZ,eAAe;IAwBf,cAAc;IAmDd,cAAc;IA0Bd,YAAY;kBA3euC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;IAinB1E,MAAM;IA2CZ,gBAAgB,GAAU,eAAe,aAAa,GAAG,SAAS,EAAE,cAAc,MAAM,GAAG,MAAM,mBAe/F;CACH"}
|
|
@@ -18,10 +18,12 @@
|
|
|
18
18
|
* ---------
|
|
19
19
|
*
|
|
20
20
|
* data: an event import object (the spec's EventImport), checked first with
|
|
21
|
-
* `validate`, the spec's validateEventImport
|
|
22
|
-
*
|
|
23
|
-
* `
|
|
24
|
-
*
|
|
21
|
+
* `validate`, the spec's validateEventImport, and then for names it refers to
|
|
22
|
+
* (a promo code's excluded registration types must be the event's). Every
|
|
23
|
+
* field of `data.event` is sent to the events API as-is, including optional
|
|
24
|
+
* ones such as `registration_error_messages` (custom validation messages for
|
|
25
|
+
* the registration form), except its emails' fields, which are set on the
|
|
26
|
+
* event's confirmation and invoice email templates.
|
|
25
27
|
*
|
|
26
28
|
* sampleRegGenerator: a SampleRegGenerator, called with
|
|
27
29
|
* - fetch: a fetch function
|
|
@@ -38,6 +40,47 @@ import lodash from 'lodash';
|
|
|
38
40
|
import Fetcher from "./CamphoricFetcher.js";
|
|
39
41
|
import { Organizations } from "./organizations.js";
|
|
40
42
|
import { formatDate, formatDateTime } from "./utils.js";
|
|
43
|
+
// A group email's fields, as a new template has them: one the data leaves out
|
|
44
|
+
// is set to this, so a template matched by name ends up as the data declares it.
|
|
45
|
+
const GROUP_EMAIL_DEFAULTS = {
|
|
46
|
+
from_email: '',
|
|
47
|
+
reply_to: '',
|
|
48
|
+
recipient_source: 'registrations',
|
|
49
|
+
filter: {},
|
|
50
|
+
filter_expression: '',
|
|
51
|
+
address_expression: '',
|
|
52
|
+
name_expression: '',
|
|
53
|
+
recipient_list: '',
|
|
54
|
+
include_incomplete: false,
|
|
55
|
+
};
|
|
56
|
+
// Likewise for a promo code
|
|
57
|
+
const PROMO_CODE_DEFAULTS = {
|
|
58
|
+
scope: 'registration',
|
|
59
|
+
enabled: true,
|
|
60
|
+
expiration_date: null,
|
|
61
|
+
excluded_registration_types: [],
|
|
62
|
+
excludes_uninvited: false,
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* What the import data names that it doesn't hold: each promo code's excluded
|
|
66
|
+
* registration types must be among the event's. An empty list when there are
|
|
67
|
+
* none.
|
|
68
|
+
*/
|
|
69
|
+
export function referenceProblems(data) {
|
|
70
|
+
const typeNames = new Set(data.registration_types.map(t => t.name));
|
|
71
|
+
return (data.promo_codes ?? []).flatMap(promo => (promo.excluded_registration_types ?? [])
|
|
72
|
+
.filter(name => !typeNames.has(name))
|
|
73
|
+
.map(name => `promo code '${promo.code}' excludes registration type '${name}', which the event doesn't have`));
|
|
74
|
+
}
|
|
75
|
+
/** The problems a template check found that are errors, by template. */
|
|
76
|
+
export function templateErrors(results) {
|
|
77
|
+
return results.flatMap(result => result.diagnostics
|
|
78
|
+
.filter(d => d.severity === 'error')
|
|
79
|
+
.map(d => {
|
|
80
|
+
const where = [d.field, d.line ? `line ${d.line}` : ''].filter(Boolean).join(', ');
|
|
81
|
+
return `${result.label}${where ? ` (${where})` : ''}: ${d.message}`;
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
41
84
|
/**
|
|
42
85
|
* Requests started ahead of the Promise.all that collects them, pausing
|
|
43
86
|
* between batches so the server keeps up. Each is handled as it starts, so
|
|
@@ -67,6 +110,10 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
67
110
|
if (errors.length) {
|
|
68
111
|
throw this.error('event data object did not pass JSON schema validation', ...errors);
|
|
69
112
|
}
|
|
113
|
+
const references = referenceProblems(data);
|
|
114
|
+
if (references.length) {
|
|
115
|
+
throw this.error('event data object names what it does not hold', ...references);
|
|
116
|
+
}
|
|
70
117
|
this.setOrganizations(organizations, data.organization);
|
|
71
118
|
if (sampleRegGenerator) {
|
|
72
119
|
if (typeof sampleRegGenerator !== 'function') {
|
|
@@ -116,8 +163,9 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
116
163
|
const existingEvent = events.find(event => event.name === this.data.event.name);
|
|
117
164
|
const emailAccounts = await this.fetch('GET', '/api/emailaccounts/');
|
|
118
165
|
const email = emailAccounts.find(e => e.organization === org.id);
|
|
119
|
-
// The confirmation
|
|
120
|
-
|
|
166
|
+
// The confirmation and invoice emails are the event's email templates,
|
|
167
|
+
// updated below.
|
|
168
|
+
const { confirmation_email_subject, confirmation_email_template, confirmation_email_reply_to, invoice_email_subject, invoice_email_template, invoice_email_from, invoice_email_reply_to, ...eventData } = this.data.event;
|
|
121
169
|
const event = {
|
|
122
170
|
organization: org.id,
|
|
123
171
|
...eventData,
|
|
@@ -136,19 +184,32 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
136
184
|
event.confirmation_email_from || email.account;
|
|
137
185
|
}
|
|
138
186
|
const eventResponse = await this.fetch(existingEvent ? 'PUT' : 'POST', `/api/events/${existingEvent ? event.id : ''}`, event);
|
|
139
|
-
await this.
|
|
187
|
+
await this.updateEmailTemplate(eventResponse.confirmation_template, {
|
|
188
|
+
subject: confirmation_email_subject,
|
|
189
|
+
body: confirmation_email_template,
|
|
190
|
+
reply_to: confirmation_email_reply_to,
|
|
191
|
+
});
|
|
192
|
+
await this.updateEmailTemplate(eventResponse.invoice_template, {
|
|
193
|
+
subject: invoice_email_subject,
|
|
194
|
+
body: invoice_email_template,
|
|
195
|
+
from_email: invoice_email_from,
|
|
196
|
+
reply_to: invoice_email_reply_to,
|
|
197
|
+
});
|
|
140
198
|
this.results.event = eventResponse;
|
|
141
199
|
return eventResponse;
|
|
142
200
|
}
|
|
143
201
|
// An event's confirmation and a registration type's invitation are email
|
|
144
202
|
// templates, created with them (SPEC DR-45); set the text the data gives.
|
|
145
203
|
async loadEmailTemplate(templateId, subject, body) {
|
|
146
|
-
|
|
204
|
+
await this.updateEmailTemplate(templateId, { subject, body });
|
|
205
|
+
}
|
|
206
|
+
// Set the fields of an email template created with its event or
|
|
207
|
+
// registration type that the data gives (an undefined one is left as is).
|
|
208
|
+
async updateEmailTemplate(templateId, fields) {
|
|
209
|
+
const given = Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== undefined));
|
|
210
|
+
if (!templateId || !Object.keys(given).length)
|
|
147
211
|
return;
|
|
148
|
-
await this.fetch('PATCH', `/api/emailtemplates/${templateId}/`,
|
|
149
|
-
...(subject !== undefined ? { subject } : {}),
|
|
150
|
-
...(body !== undefined ? { body } : {}),
|
|
151
|
-
});
|
|
212
|
+
await this.fetch('PATCH', `/api/emailtemplates/${templateId}/`, given);
|
|
152
213
|
}
|
|
153
214
|
async loadLodgings() {
|
|
154
215
|
const event = this.savedEvent();
|
|
@@ -178,6 +239,7 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
178
239
|
reserved: lodging.reserved || 0,
|
|
179
240
|
sharing_multiplier: lodging.sharing_multiplier || 1,
|
|
180
241
|
notes: lodging.notes || '',
|
|
242
|
+
availability: lodging.availability || 'auto',
|
|
181
243
|
};
|
|
182
244
|
const saved = await this.fetch('POST', '/api/lodgings/', data);
|
|
183
245
|
createdLodging = saved;
|
|
@@ -234,18 +296,100 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
234
296
|
const event = this.savedEvent();
|
|
235
297
|
const response = await this.fetch('GET', '/api/registrationtypes/');
|
|
236
298
|
const existingRegTypes = response.filter(regType => regType.event === event.id);
|
|
237
|
-
await Promise.all(this.data.registration_types.map(async (regType) => {
|
|
299
|
+
this.results.registration_types = await Promise.all(this.data.registration_types.map(async (regType) => {
|
|
238
300
|
const exists = existingRegTypes.find(r => r.name === regType.name);
|
|
239
|
-
const { invitation_email_subject: subject, invitation_email_template: body, ...typeData } = regType;
|
|
301
|
+
const { invitation_email_subject: subject, invitation_email_template: body, invitation_email_from: from_email, invitation_email_reply_to: reply_to, ...typeData } = regType;
|
|
240
302
|
const saved = await this.fetch(exists ? 'PUT' : 'POST', `/api/registrationtypes${exists ? `/${exists.id}` : ''}/`, {
|
|
241
303
|
...typeData,
|
|
242
304
|
...(exists ? { id: exists.id } : {}),
|
|
243
305
|
event: event.id,
|
|
244
306
|
});
|
|
245
|
-
await this.
|
|
307
|
+
await this.updateEmailTemplate(saved.invitation_template, { subject, body, from_email, reply_to });
|
|
246
308
|
return saved;
|
|
247
309
|
}));
|
|
248
310
|
}
|
|
311
|
+
// The event's group emails (SPEC §8.9): each one the data declares is
|
|
312
|
+
// created, or, when the event has one by its name, updated to match.
|
|
313
|
+
// Others the event has are left alone.
|
|
314
|
+
async loadGroupEmails() {
|
|
315
|
+
const { email_templates } = this.data;
|
|
316
|
+
if (!email_templates || !email_templates.length)
|
|
317
|
+
return;
|
|
318
|
+
const event = this.savedEvent();
|
|
319
|
+
const all = await this.fetch('GET', '/api/emailtemplates/');
|
|
320
|
+
const existing = all.filter(t => t.event === event.id && t.purpose === 'group');
|
|
321
|
+
this.results.email_templates = await Promise.all(email_templates.map((template) => {
|
|
322
|
+
const exists = existing.find(t => t.name === template.name);
|
|
323
|
+
return this.fetch(exists ? 'PUT' : 'POST', `/api/emailtemplates/${exists ? `${exists.id}/` : ''}`, { ...GROUP_EMAIL_DEFAULTS, ...template, purpose: 'group', event: event.id });
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
// The event's promo codes (SPEC DR-67): each one the data declares is
|
|
327
|
+
// created, or, when the event has a live one with its code (ignoring case),
|
|
328
|
+
// updated to match. Its excluded registration types are given by name, so
|
|
329
|
+
// this runs once they're saved. Others the event has are left alone.
|
|
330
|
+
async loadPromoCodes() {
|
|
331
|
+
const { promo_codes } = this.data;
|
|
332
|
+
if (!promo_codes || !promo_codes.length)
|
|
333
|
+
return;
|
|
334
|
+
const event = this.savedEvent();
|
|
335
|
+
const regTypes = this.results.registration_types ?? [];
|
|
336
|
+
// Every code is worked out before any is sent, so a problem sends none.
|
|
337
|
+
const bodies = promo_codes.map((promo) => {
|
|
338
|
+
const excluded = (promo.excluded_registration_types ?? []).map((name) => {
|
|
339
|
+
const regType = regTypes.find(t => t.name === name);
|
|
340
|
+
if (!regType) {
|
|
341
|
+
throw this.error(`promo code '${promo.code}' excludes registration type '${name}', which was not imported`);
|
|
342
|
+
}
|
|
343
|
+
return regType.id;
|
|
344
|
+
});
|
|
345
|
+
// An expiry that can't be read must not save as "never expires"
|
|
346
|
+
const expiration = formatDateTime(promo.expiration_date);
|
|
347
|
+
if (promo.expiration_date !== undefined && expiration === undefined) {
|
|
348
|
+
throw this.error(`promo code '${promo.code}' has an expiration_date that can't be read: '${promo.expiration_date}'`);
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
...PROMO_CODE_DEFAULTS,
|
|
352
|
+
...promo,
|
|
353
|
+
expiration_date: expiration ?? null,
|
|
354
|
+
excluded_registration_types: excluded,
|
|
355
|
+
event: event.id,
|
|
356
|
+
};
|
|
357
|
+
});
|
|
358
|
+
const all = await this.fetch('GET', '/api/promocodes/');
|
|
359
|
+
const existing = all.filter(p => p.event === event.id);
|
|
360
|
+
const sameCode = (a, b) => String(a).trim().toLowerCase() === b.trim().toLowerCase();
|
|
361
|
+
this.results.promo_codes = await Promise.all(bodies.map((body) => {
|
|
362
|
+
const exists = existing.find(p => sameCode(p.code, body.code));
|
|
363
|
+
return this.fetch(exists ? 'PUT' : 'POST', `/api/promocodes/${exists ? `${exists.id}/` : ''}`, body);
|
|
364
|
+
}));
|
|
365
|
+
}
|
|
366
|
+
// Check every template of the event through the server (SPEC §9.3), as
|
|
367
|
+
// `manage.py check_templates` does: each is rendered against the event's
|
|
368
|
+
// registrations (or, with none, parsed), so one that won't render fails the
|
|
369
|
+
// import rather than its first send.
|
|
370
|
+
async checkTemplates() {
|
|
371
|
+
const event = this.savedEvent();
|
|
372
|
+
const token = await this.getAuthToken();
|
|
373
|
+
// (Not this.fetch, which ends every path with a slash: this one has none.)
|
|
374
|
+
const res = await fetch(`${this.urlBase}/api/events/${event.id}/templates/check`, {
|
|
375
|
+
headers: { 'Authorization': `Token ${token}` },
|
|
376
|
+
});
|
|
377
|
+
const text = await res.text();
|
|
378
|
+
let json;
|
|
379
|
+
try {
|
|
380
|
+
json = JSON.parse(text);
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
throw this.error(`template check returned non-JSON (${res.status})`, { status: res.status, body: text });
|
|
384
|
+
}
|
|
385
|
+
if (!res.ok) {
|
|
386
|
+
throw this.error(`template check failed (${res.status})`, { status: res.status, response: json });
|
|
387
|
+
}
|
|
388
|
+
const errors = templateErrors(json.results ?? []);
|
|
389
|
+
if (errors.length) {
|
|
390
|
+
throw this.error(`${errors.length} template problem(s): ${errors.join('; ')}`, ...errors);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
249
393
|
async loadTestRegs() {
|
|
250
394
|
if (!this.sampleRegGenerator)
|
|
251
395
|
return [];
|
|
@@ -358,6 +502,8 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
358
502
|
await imp('custom charge types', this.loadCustomChargeTypes());
|
|
359
503
|
await imp('reports', this.loadReports());
|
|
360
504
|
await imp('registration types', this.loadRegTypes());
|
|
505
|
+
await imp('group emails', this.loadGroupEmails());
|
|
506
|
+
await imp('promo codes', this.loadPromoCodes());
|
|
361
507
|
await this.loadLodgings();
|
|
362
508
|
await imp('lodging', Promise.resolve());
|
|
363
509
|
// Run the overrides in series in case order matters
|
|
@@ -370,6 +516,8 @@ export default class CamphoricEventCreator extends Fetcher {
|
|
|
370
516
|
if (this.sampleRegGenerator && process.env.SKIP_TEST_REGS !== '1') {
|
|
371
517
|
await imp('test registrations', this.loadTestRegs());
|
|
372
518
|
}
|
|
519
|
+
// After the sample registrations, so the templates render against them
|
|
520
|
+
await imp('template check', this.checkTemplates());
|
|
373
521
|
this.log(`🎉 Finished Importing ${this.data.event.name}!`);
|
|
374
522
|
return true;
|
|
375
523
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CamphoricEventCreator.js","sourceRoot":"","sources":["../CamphoricEventCreator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CamphoricEventCreator.js","sourceRoot":"","sources":["../CamphoricEventCreator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface LodgingNode {
|
|
|
19
19
|
visible?: boolean;
|
|
20
20
|
name?: string;
|
|
21
21
|
notes?: string;
|
|
22
|
+
availability?: 'auto' | 'full' | 'open';
|
|
22
23
|
id?: number;
|
|
23
24
|
}
|
|
24
25
|
/** The lodging tree, flattened: every node by key, starting from `root`. */
|
|
@@ -36,6 +37,11 @@ export interface ImportData {
|
|
|
36
37
|
registration_end?: string;
|
|
37
38
|
confirmation_email_subject?: string;
|
|
38
39
|
confirmation_email_template?: string;
|
|
40
|
+
confirmation_email_reply_to?: string;
|
|
41
|
+
invoice_email_subject?: string;
|
|
42
|
+
invoice_email_template?: string;
|
|
43
|
+
invoice_email_from?: string;
|
|
44
|
+
invoice_email_reply_to?: string;
|
|
39
45
|
[field: string]: unknown;
|
|
40
46
|
};
|
|
41
47
|
lodgings?: Lodgings;
|
|
@@ -50,6 +56,18 @@ export interface ImportData {
|
|
|
50
56
|
name: string;
|
|
51
57
|
invitation_email_subject: string;
|
|
52
58
|
invitation_email_template: string;
|
|
59
|
+
invitation_email_from?: string;
|
|
60
|
+
invitation_email_reply_to?: string;
|
|
61
|
+
[field: string]: unknown;
|
|
62
|
+
}[];
|
|
63
|
+
email_templates?: {
|
|
64
|
+
name: string;
|
|
65
|
+
[field: string]: unknown;
|
|
66
|
+
}[];
|
|
67
|
+
promo_codes?: {
|
|
68
|
+
code: string;
|
|
69
|
+
expiration_date?: string;
|
|
70
|
+
excluded_registration_types?: string[];
|
|
53
71
|
[field: string]: unknown;
|
|
54
72
|
}[];
|
|
55
73
|
}
|
|
@@ -58,6 +76,9 @@ export interface ImportResults {
|
|
|
58
76
|
event?: Saved;
|
|
59
77
|
lodging?: Lodgings;
|
|
60
78
|
reports?: Saved[];
|
|
79
|
+
registration_types?: Saved[];
|
|
80
|
+
email_templates?: Saved[];
|
|
81
|
+
promo_codes?: Saved[];
|
|
61
82
|
}
|
|
62
83
|
/** What has been saved by the time an event's overrides and sample registrations run. */
|
|
63
84
|
export type SavedResults = ImportResults & {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEhE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAEnC,4EAA4E;AAE5E,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAExF,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE/C,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,4EAA4E;AAC5E,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAE3E,gEAAgE;AAChE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,CAAC;IACxC,mBAAmB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,CAAC;IACnE,kBAAkB,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,wBAAwB,EAAE,MAAM,CAAC;QACjC,yBAAyB,EAAE,MAAM,CAAC;QAClC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,EAAE,CAAC;CACL;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camphoric/camphoric-event-import-tools",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Camphoric REST client, login, the event importer (creator and organization loader), e2e scaffolding for an event's registration form, and the runner that posts generated registrations to an event.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
package/types.ts
CHANGED
|
@@ -25,6 +25,7 @@ export interface LodgingNode {
|
|
|
25
25
|
visible?: boolean;
|
|
26
26
|
name?: string;
|
|
27
27
|
notes?: string;
|
|
28
|
+
availability?: 'auto' | 'full' | 'open';
|
|
28
29
|
id?: number;
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -42,6 +43,11 @@ export interface ImportData {
|
|
|
42
43
|
registration_end?: string;
|
|
43
44
|
confirmation_email_subject?: string;
|
|
44
45
|
confirmation_email_template?: string;
|
|
46
|
+
confirmation_email_reply_to?: string;
|
|
47
|
+
invoice_email_subject?: string;
|
|
48
|
+
invoice_email_template?: string;
|
|
49
|
+
invoice_email_from?: string;
|
|
50
|
+
invoice_email_reply_to?: string;
|
|
45
51
|
[field: string]: unknown;
|
|
46
52
|
};
|
|
47
53
|
lodgings?: Lodgings;
|
|
@@ -51,6 +57,18 @@ export interface ImportData {
|
|
|
51
57
|
name: string,
|
|
52
58
|
invitation_email_subject: string,
|
|
53
59
|
invitation_email_template: string,
|
|
60
|
+
invitation_email_from?: string,
|
|
61
|
+
invitation_email_reply_to?: string,
|
|
62
|
+
[field: string]: unknown,
|
|
63
|
+
}[];
|
|
64
|
+
// Group emails, matched to the saved ones by name
|
|
65
|
+
email_templates?: { name: string, [field: string]: unknown }[];
|
|
66
|
+
// Matched to the saved ones by code, ignoring case
|
|
67
|
+
promo_codes?: {
|
|
68
|
+
code: string,
|
|
69
|
+
expiration_date?: string,
|
|
70
|
+
// registration type names
|
|
71
|
+
excluded_registration_types?: string[],
|
|
54
72
|
[field: string]: unknown,
|
|
55
73
|
}[];
|
|
56
74
|
}
|
|
@@ -60,6 +78,9 @@ export interface ImportResults {
|
|
|
60
78
|
event?: Saved;
|
|
61
79
|
lodging?: Lodgings;
|
|
62
80
|
reports?: Saved[];
|
|
81
|
+
registration_types?: Saved[];
|
|
82
|
+
email_templates?: Saved[];
|
|
83
|
+
promo_codes?: Saved[];
|
|
63
84
|
}
|
|
64
85
|
|
|
65
86
|
/** What has been saved by the time an event's overrides and sample registrations run. */
|