placementt-core 1.400.1116 → 1.400.1118
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/lib/callables/misSync.d.ts +0 -3
- package/lib/callables/registry.d.ts +0 -6
- package/lib/misSync.d.ts +14 -19
- package/lib/misSync.js +21 -32
- package/lib/misSync.js.map +1 -1
- package/lib/misSync.test.js +16 -13
- package/lib/misSync.test.js.map +1 -1
- package/lib/typeDefinitions.d.ts +5 -0
- package/lib/typeDefinitions.js.map +1 -1
- package/package.json +1 -1
- package/src/misSync.test.ts +18 -15
- package/src/misSync.ts +24 -35
- package/src/typeDefinitions.ts +3 -0
- package/watch-local.js +38 -1
|
@@ -14,7 +14,6 @@ export declare const misSyncCallables: {
|
|
|
14
14
|
method: z.ZodEnum<["email", "api"]>;
|
|
15
15
|
allowedSenders: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
|
|
16
16
|
studentEmailDomains: z.ZodArray<z.ZodString, "many">;
|
|
17
|
-
columnMapping: z.ZodRecord<z.ZodEnum<["mis_student_id", "first_name", "last_name", "email", "year_group", "course", "tutor_group", "status", "start_date", "leave_date"]>, z.ZodString>;
|
|
18
17
|
inactiveStatuses: z.ZodArray<z.ZodString, "many">;
|
|
19
18
|
requireApproval: z.ZodBoolean;
|
|
20
19
|
maxArchivePercent: z.ZodNumber;
|
|
@@ -30,7 +29,6 @@ export declare const misSyncCallables: {
|
|
|
30
29
|
enabled: boolean;
|
|
31
30
|
allowedSenders: string[];
|
|
32
31
|
studentEmailDomains: string[];
|
|
33
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
34
32
|
inactiveStatuses: string[];
|
|
35
33
|
requireApproval: boolean;
|
|
36
34
|
maxArchivePercent: number;
|
|
@@ -44,7 +42,6 @@ export declare const misSyncCallables: {
|
|
|
44
42
|
enabled: boolean;
|
|
45
43
|
allowedSenders: string[];
|
|
46
44
|
studentEmailDomains: string[];
|
|
47
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
48
45
|
inactiveStatuses: string[];
|
|
49
46
|
requireApproval: boolean;
|
|
50
47
|
maxArchivePercent: number;
|
|
@@ -17,7 +17,6 @@ export declare const allCallables: {
|
|
|
17
17
|
method: z.ZodEnum<["email", "api"]>;
|
|
18
18
|
allowedSenders: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
|
|
19
19
|
studentEmailDomains: z.ZodArray<z.ZodString, "many">;
|
|
20
|
-
columnMapping: z.ZodRecord<z.ZodEnum<["mis_student_id", "first_name", "last_name", "email", "year_group", "course", "tutor_group", "status", "start_date", "leave_date"]>, z.ZodString>;
|
|
21
20
|
inactiveStatuses: z.ZodArray<z.ZodString, "many">;
|
|
22
21
|
requireApproval: z.ZodBoolean;
|
|
23
22
|
maxArchivePercent: z.ZodNumber;
|
|
@@ -33,7 +32,6 @@ export declare const allCallables: {
|
|
|
33
32
|
enabled: boolean;
|
|
34
33
|
allowedSenders: string[];
|
|
35
34
|
studentEmailDomains: string[];
|
|
36
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
37
35
|
inactiveStatuses: string[];
|
|
38
36
|
requireApproval: boolean;
|
|
39
37
|
maxArchivePercent: number;
|
|
@@ -47,7 +45,6 @@ export declare const allCallables: {
|
|
|
47
45
|
enabled: boolean;
|
|
48
46
|
allowedSenders: string[];
|
|
49
47
|
studentEmailDomains: string[];
|
|
50
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
51
48
|
inactiveStatuses: string[];
|
|
52
49
|
requireApproval: boolean;
|
|
53
50
|
maxArchivePercent: number;
|
|
@@ -2765,7 +2762,6 @@ export declare const callableGroups: {
|
|
|
2765
2762
|
method: z.ZodEnum<["email", "api"]>;
|
|
2766
2763
|
allowedSenders: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
|
|
2767
2764
|
studentEmailDomains: z.ZodArray<z.ZodString, "many">;
|
|
2768
|
-
columnMapping: z.ZodRecord<z.ZodEnum<["mis_student_id", "first_name", "last_name", "email", "year_group", "course", "tutor_group", "status", "start_date", "leave_date"]>, z.ZodString>;
|
|
2769
2765
|
inactiveStatuses: z.ZodArray<z.ZodString, "many">;
|
|
2770
2766
|
requireApproval: z.ZodBoolean;
|
|
2771
2767
|
maxArchivePercent: z.ZodNumber;
|
|
@@ -2781,7 +2777,6 @@ export declare const callableGroups: {
|
|
|
2781
2777
|
enabled: boolean;
|
|
2782
2778
|
allowedSenders: string[];
|
|
2783
2779
|
studentEmailDomains: string[];
|
|
2784
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
2785
2780
|
inactiveStatuses: string[];
|
|
2786
2781
|
requireApproval: boolean;
|
|
2787
2782
|
maxArchivePercent: number;
|
|
@@ -2795,7 +2790,6 @@ export declare const callableGroups: {
|
|
|
2795
2790
|
enabled: boolean;
|
|
2796
2791
|
allowedSenders: string[];
|
|
2797
2792
|
studentEmailDomains: string[];
|
|
2798
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
2799
2793
|
inactiveStatuses: string[];
|
|
2800
2794
|
requireApproval: boolean;
|
|
2801
2795
|
maxArchivePercent: number;
|
package/lib/misSync.d.ts
CHANGED
|
@@ -11,15 +11,10 @@ import { z } from "zod";
|
|
|
11
11
|
* that list staying minimal).
|
|
12
12
|
*/
|
|
13
13
|
/** Canonical snapshot columns, in the order the spec documents them. */
|
|
14
|
-
export declare const MIS_SNAPSHOT_FIELDS: readonly ["mis_student_id", "first_name", "last_name", "email", "year_group", "course", "tutor_group", "status", "start_date", "leave_date"];
|
|
14
|
+
export declare const MIS_SNAPSHOT_FIELDS: readonly ["mis_student_id", "first_name", "last_name", "email", "year_group", "parent_email", "course", "tutor_group", "status", "start_date", "leave_date"];
|
|
15
15
|
export type MisSnapshotField = typeof MIS_SNAPSHOT_FIELDS[number];
|
|
16
16
|
/** Columns a file must have. A file missing any of these is never applied. */
|
|
17
17
|
export declare const MIS_REQUIRED_FIELDS: readonly MisSnapshotField[];
|
|
18
|
-
/**
|
|
19
|
-
* Header spellings accepted without any mapping. Compared after
|
|
20
|
-
* `normaliseMisHeader`, so case, spaces and hyphens don't matter.
|
|
21
|
-
*/
|
|
22
|
-
export declare const MIS_FIELD_ALIASES: Record<MisSnapshotField, readonly string[]>;
|
|
23
18
|
/** Human labels for the settings panel and preview. */
|
|
24
19
|
export declare const MIS_FIELD_LABELS: Record<MisSnapshotField, string>;
|
|
25
20
|
/** One validated snapshot row. Optional columns are omitted when blank. */
|
|
@@ -29,6 +24,7 @@ export type MisSnapshotRow = {
|
|
|
29
24
|
"last_name": string;
|
|
30
25
|
"email": string;
|
|
31
26
|
"year_group": string;
|
|
27
|
+
"parent_email"?: string;
|
|
32
28
|
"course"?: string;
|
|
33
29
|
"tutor_group"?: string;
|
|
34
30
|
"status"?: string;
|
|
@@ -37,7 +33,10 @@ export type MisSnapshotRow = {
|
|
|
37
33
|
};
|
|
38
34
|
/** A raw row keyed by canonical field, before validation. */
|
|
39
35
|
export type MisRawRow = Partial<Record<MisSnapshotField, string>>;
|
|
40
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Per-field header overrides, stored on `InstituteData.mis.mapping`: canonical
|
|
38
|
+
* field to the exact header in the college's file.
|
|
39
|
+
*/
|
|
41
40
|
export type MisColumnMapping = Partial<Record<MisSnapshotField, string>>;
|
|
42
41
|
export type MisRowErrorCode = "missing" | "invalid" | "tooLong" | "duplicateId" | "duplicateEmail" | "emailDomain" | "emailInUse" | "dateOrder";
|
|
43
42
|
/**
|
|
@@ -98,7 +97,6 @@ export type MisSyncConfig = {
|
|
|
98
97
|
allowedSenders: string[];
|
|
99
98
|
/** If set, every student email must be on one of these domains. */
|
|
100
99
|
studentEmailDomains: string[];
|
|
101
|
-
columnMapping: MisColumnMapping;
|
|
102
100
|
inactiveStatuses: string[];
|
|
103
101
|
requireApproval: boolean;
|
|
104
102
|
maxArchivePercent: number;
|
|
@@ -215,28 +213,28 @@ export type MisSyncRun = {
|
|
|
215
213
|
updatedAt: string;
|
|
216
214
|
};
|
|
217
215
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
216
|
+
* Drops the UTF-8 BOM Excel adds and surrounding whitespace. Nothing else: headers
|
|
217
|
+
* must match exactly.
|
|
220
218
|
*
|
|
221
219
|
* @param {string} header the raw header text.
|
|
222
|
-
* @return {string} the
|
|
220
|
+
* @return {string} the cleaned header.
|
|
223
221
|
*/
|
|
224
|
-
export declare const
|
|
222
|
+
export declare const cleanMisHeader: (header: string) => string;
|
|
225
223
|
export type MisColumnResolution = {
|
|
226
224
|
/** Canonical field to column index in the file. */
|
|
227
225
|
columns: Partial<Record<MisSnapshotField, number>>;
|
|
228
226
|
missingRequired: MisSnapshotField[];
|
|
229
227
|
/** Headers that map to no field. */
|
|
230
228
|
ignored: string[];
|
|
231
|
-
/** Fields
|
|
229
|
+
/** Fields whose header appears more than once. The first wins. */
|
|
232
230
|
ambiguous: MisSnapshotField[];
|
|
233
231
|
};
|
|
234
232
|
/**
|
|
235
|
-
* Works out which column holds each field.
|
|
236
|
-
*
|
|
233
|
+
* Works out which column holds each field. Each field is found by its exact
|
|
234
|
+
* header: the college's mapped name if it has one, otherwise the field name.
|
|
237
235
|
*
|
|
238
236
|
* @param {string[]} headers the header row as read from the file.
|
|
239
|
-
* @param {MisColumnMapping} mapping per-field header overrides from the
|
|
237
|
+
* @param {MisColumnMapping} mapping per-field header overrides from the institute.
|
|
240
238
|
* @return {MisColumnResolution} the resolved columns and any problems.
|
|
241
239
|
*/
|
|
242
240
|
export declare const resolveMisColumns: (headers: string[], mapping?: MisColumnMapping) => MisColumnResolution;
|
|
@@ -316,7 +314,6 @@ export declare const misSyncSettingsSchema: z.ZodObject<{
|
|
|
316
314
|
method: z.ZodEnum<["email", "api"]>;
|
|
317
315
|
allowedSenders: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
|
|
318
316
|
studentEmailDomains: z.ZodArray<z.ZodString, "many">;
|
|
319
|
-
columnMapping: z.ZodRecord<z.ZodEnum<["mis_student_id", "first_name", "last_name", "email", "year_group", "course", "tutor_group", "status", "start_date", "leave_date"]>, z.ZodString>;
|
|
320
317
|
inactiveStatuses: z.ZodArray<z.ZodString, "many">;
|
|
321
318
|
requireApproval: z.ZodBoolean;
|
|
322
319
|
maxArchivePercent: z.ZodNumber;
|
|
@@ -329,7 +326,6 @@ export declare const misSyncSettingsSchema: z.ZodObject<{
|
|
|
329
326
|
enabled: boolean;
|
|
330
327
|
allowedSenders: string[];
|
|
331
328
|
studentEmailDomains: string[];
|
|
332
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
333
329
|
inactiveStatuses: string[];
|
|
334
330
|
requireApproval: boolean;
|
|
335
331
|
maxArchivePercent: number;
|
|
@@ -342,7 +338,6 @@ export declare const misSyncSettingsSchema: z.ZodObject<{
|
|
|
342
338
|
enabled: boolean;
|
|
343
339
|
allowedSenders: string[];
|
|
344
340
|
studentEmailDomains: string[];
|
|
345
|
-
columnMapping: Partial<Record<"email" | "status" | "mis_student_id" | "first_name" | "last_name" | "year_group" | "course" | "tutor_group" | "start_date" | "leave_date", string>>;
|
|
346
341
|
inactiveStatuses: string[];
|
|
347
342
|
requireApproval: boolean;
|
|
348
343
|
maxArchivePercent: number;
|
package/lib/misSync.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultMisSyncSettings = exports.misSyncSettingsSchema = exports.misAllowedSenderSchema = exports.emptyMisSyncCounts = exports.misInboundTokenFromAddress = exports.misInboundAddress = exports.isMisRowEnrolled = exports.validateMisSnapshot = exports.validateMisRow = exports.isIsoDate = exports.resolveMisColumns = exports.
|
|
3
|
+
exports.defaultMisSyncSettings = exports.misSyncSettingsSchema = exports.misAllowedSenderSchema = exports.emptyMisSyncCounts = exports.misInboundTokenFromAddress = exports.misInboundAddress = exports.isMisRowEnrolled = exports.validateMisSnapshot = exports.validateMisRow = exports.isIsoDate = exports.resolveMisColumns = exports.cleanMisHeader = exports.MIS_SYNC_CHANGES_PER_DOC = exports.MIS_SYNC_DECIDABLE_STATUSES = exports.MIS_SYNC_UPLOAD_FUNCTION = exports.MIS_SYNC_API_KEY_PREFIX = exports.MIS_SYNC_INBOUND_PREFIX = exports.MIS_SYNC_INBOUND_DOMAIN = exports.MIS_SYNC_MAX_STORED_ERRORS = exports.MIS_SYNC_MAX_ROWS = exports.MIS_SYNC_MAX_FILE_BYTES = exports.MIS_SYNC_DEFAULTS = exports.MIS_DEFAULT_INACTIVE_STATUSES = exports.MIS_FIELD_LABELS = exports.MIS_REQUIRED_FIELDS = exports.MIS_SNAPSHOT_FIELDS = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
/**
|
|
6
6
|
* MIS file sync: shared contract between the college's scheduled MIS export, the
|
|
@@ -20,6 +20,7 @@ exports.MIS_SNAPSHOT_FIELDS = [
|
|
|
20
20
|
"last_name",
|
|
21
21
|
"email",
|
|
22
22
|
"year_group",
|
|
23
|
+
"parent_email",
|
|
23
24
|
"course",
|
|
24
25
|
"tutor_group",
|
|
25
26
|
"status",
|
|
@@ -34,28 +35,13 @@ exports.MIS_REQUIRED_FIELDS = [
|
|
|
34
35
|
"email",
|
|
35
36
|
"year_group",
|
|
36
37
|
];
|
|
37
|
-
/**
|
|
38
|
-
* Header spellings accepted without any mapping. Compared after
|
|
39
|
-
* `normaliseMisHeader`, so case, spaces and hyphens don't matter.
|
|
40
|
-
*/
|
|
41
|
-
exports.MIS_FIELD_ALIASES = {
|
|
42
|
-
"mis_student_id": ["mis_student_id", "student_id", "learner_id", "student_ref", "student_reference"],
|
|
43
|
-
"first_name": ["first_name", "forename", "firstname", "legal_forename", "preferred_forename"],
|
|
44
|
-
"last_name": ["last_name", "surname", "lastname", "legal_surname"],
|
|
45
|
-
"email": ["email", "college_email", "email_address", "student_email"],
|
|
46
|
-
"year_group": ["year_group", "course_year", "year", "year_of_study"],
|
|
47
|
-
"course": ["course", "course_name", "programme", "study_programme"],
|
|
48
|
-
"tutor_group": ["tutor_group", "tutor", "form_group", "registration_group"],
|
|
49
|
-
"status": ["status", "enrolment_status", "enrollment_status"],
|
|
50
|
-
"start_date": ["start_date", "enrolment_date", "enrollment_date"],
|
|
51
|
-
"leave_date": ["leave_date", "end_date", "withdrawal_date"],
|
|
52
|
-
};
|
|
53
38
|
/** Human labels for the settings panel and preview. */
|
|
54
39
|
exports.MIS_FIELD_LABELS = {
|
|
55
40
|
"mis_student_id": "MIS student ID",
|
|
56
41
|
"first_name": "First name",
|
|
57
42
|
"last_name": "Last name",
|
|
58
43
|
"email": "College email",
|
|
44
|
+
"parent_email": "Parent email",
|
|
59
45
|
"year_group": "Year group / course year",
|
|
60
46
|
"course": "Course",
|
|
61
47
|
"tutor_group": "Tutor group",
|
|
@@ -101,32 +87,31 @@ exports.MIS_SYNC_DECIDABLE_STATUSES = ["pendingApproval", "blocked"];
|
|
|
101
87
|
/** How many preview changes go in each `changes` doc. */
|
|
102
88
|
exports.MIS_SYNC_CHANGES_PER_DOC = 400;
|
|
103
89
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
90
|
+
* Drops the UTF-8 BOM Excel adds and surrounding whitespace. Nothing else: headers
|
|
91
|
+
* must match exactly.
|
|
106
92
|
*
|
|
107
93
|
* @param {string} header the raw header text.
|
|
108
|
-
* @return {string} the
|
|
94
|
+
* @return {string} the cleaned header.
|
|
109
95
|
*/
|
|
110
|
-
const
|
|
111
|
-
exports.
|
|
96
|
+
const cleanMisHeader = (header) => header.replace(/^\uFEFF/, "").trim();
|
|
97
|
+
exports.cleanMisHeader = cleanMisHeader;
|
|
112
98
|
/**
|
|
113
|
-
* Works out which column holds each field.
|
|
114
|
-
*
|
|
99
|
+
* Works out which column holds each field. Each field is found by its exact
|
|
100
|
+
* header: the college's mapped name if it has one, otherwise the field name.
|
|
115
101
|
*
|
|
116
102
|
* @param {string[]} headers the header row as read from the file.
|
|
117
|
-
* @param {MisColumnMapping} mapping per-field header overrides from the
|
|
103
|
+
* @param {MisColumnMapping} mapping per-field header overrides from the institute.
|
|
118
104
|
* @return {MisColumnResolution} the resolved columns and any problems.
|
|
119
105
|
*/
|
|
120
106
|
const resolveMisColumns = (headers, mapping = {}) => {
|
|
121
|
-
const
|
|
107
|
+
const cleaned = headers.map(exports.cleanMisHeader);
|
|
122
108
|
const columns = {};
|
|
123
109
|
const ambiguous = [];
|
|
124
110
|
const used = new Set();
|
|
125
111
|
for (const field of exports.MIS_SNAPSHOT_FIELDS) {
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
.map((h, i) => (candidates.includes(h) && !used.has(i) ? i : -1))
|
|
112
|
+
const expected = mapping[field]?.trim() || field;
|
|
113
|
+
const matches = cleaned
|
|
114
|
+
.map((h, i) => (h === expected && !used.has(i) ? i : -1))
|
|
130
115
|
.filter((i) => i >= 0);
|
|
131
116
|
if (!matches.length)
|
|
132
117
|
continue;
|
|
@@ -162,6 +147,7 @@ const FIELD_MAX_LENGTH = {
|
|
|
162
147
|
"first_name": 100,
|
|
163
148
|
"last_name": 100,
|
|
164
149
|
"email": 254,
|
|
150
|
+
"parent_email": 254,
|
|
165
151
|
"year_group": 50,
|
|
166
152
|
"course": 150,
|
|
167
153
|
"tutor_group": 50,
|
|
@@ -213,6 +199,11 @@ const validateMisRow = (raw, rowNumber, studentEmailDomains = []) => {
|
|
|
213
199
|
}
|
|
214
200
|
}
|
|
215
201
|
}
|
|
202
|
+
if (clean.parent_email) {
|
|
203
|
+
clean.parent_email = clean.parent_email.toLowerCase();
|
|
204
|
+
if (!emailSchema.safeParse(clean.parent_email).success)
|
|
205
|
+
fail("parent_email", "invalid", "Parent email is not a valid email address.");
|
|
206
|
+
}
|
|
216
207
|
for (const field of ["start_date", "leave_date"]) {
|
|
217
208
|
if (clean[field] && !(0, exports.isIsoDate)(clean[field]))
|
|
218
209
|
fail(field, "invalid", `${exports.MIS_FIELD_LABELS[field]} must be a date in YYYY-MM-DD format.`);
|
|
@@ -327,7 +318,6 @@ exports.misSyncSettingsSchema = zod_1.z.object({
|
|
|
327
318
|
method: zod_1.z.enum(["email", "api"]),
|
|
328
319
|
allowedSenders: zod_1.z.array(exports.misAllowedSenderSchema).max(20),
|
|
329
320
|
studentEmailDomains: zod_1.z.array(zod_1.z.string().trim().toLowerCase().regex(/^@?[a-z0-9.-]+\.[a-z]{2,}$/, "Enter a domain such as college.ac.uk.")).max(10),
|
|
330
|
-
columnMapping: zod_1.z.record(zod_1.z.enum(exports.MIS_SNAPSHOT_FIELDS), zod_1.z.string().trim().max(100)),
|
|
331
321
|
inactiveStatuses: zod_1.z.array(zod_1.z.string().trim().min(1).max(50)).max(30),
|
|
332
322
|
requireApproval: zod_1.z.boolean(),
|
|
333
323
|
maxArchivePercent: zod_1.z.number().min(0).max(100),
|
|
@@ -346,7 +336,6 @@ const defaultMisSyncSettings = () => ({
|
|
|
346
336
|
method: "email",
|
|
347
337
|
allowedSenders: [],
|
|
348
338
|
studentEmailDomains: [],
|
|
349
|
-
columnMapping: {},
|
|
350
339
|
inactiveStatuses: [...exports.MIS_DEFAULT_INACTIVE_STATUSES],
|
|
351
340
|
requireApproval: exports.MIS_SYNC_DEFAULTS.requireApproval,
|
|
352
341
|
maxArchivePercent: exports.MIS_SYNC_DEFAULTS.maxArchivePercent,
|
package/lib/misSync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misSync.js","sourceRoot":"","sources":["../src/misSync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"misSync.js","sourceRoot":"","sources":["../src/misSync.ts"],"names":[],"mappings":"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"}
|
package/lib/misSync.test.js
CHANGED
|
@@ -9,29 +9,27 @@ const good = {
|
|
|
9
9
|
"email": "Ada.Lovelace@College.ac.uk",
|
|
10
10
|
"year_group": "Year 12",
|
|
11
11
|
};
|
|
12
|
-
describe("normaliseMisHeader", () => {
|
|
13
|
-
it("ignores case, spacing, punctuation and a BOM", () => {
|
|
14
|
-
expect((0, misSync_1.normaliseMisHeader)("\uFEFF MIS Student-ID ")).toBe("mis_student_id");
|
|
15
|
-
expect((0, misSync_1.normaliseMisHeader)("Course.Year")).toBe("course_year");
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
12
|
describe("resolveMisColumns", () => {
|
|
19
|
-
it("matches
|
|
20
|
-
const r = (0, misSync_1.resolveMisColumns)(["
|
|
13
|
+
it("matches exact field names, ignoring only a BOM and surrounding spaces", () => {
|
|
14
|
+
const r = (0, misSync_1.resolveMisColumns)(["\uFEFFmis_student_id", " first_name ", "last_name", "email", "year_group", "Forename", "Extra"]);
|
|
21
15
|
expect(r.columns).toEqual({ "mis_student_id": 0, "first_name": 1, "last_name": 2, "email": 3, "year_group": 4 });
|
|
22
16
|
expect(r.missingRequired).toEqual([]);
|
|
23
|
-
expect(r.ignored).toEqual(["Extra"]);
|
|
17
|
+
expect(r.ignored).toEqual(["Forename", "Extra"]);
|
|
24
18
|
});
|
|
25
|
-
it("
|
|
26
|
-
|
|
19
|
+
it("never guesses: other spellings and case don't match", () => {
|
|
20
|
+
expect((0, misSync_1.resolveMisColumns)(["Student ID", "First_Name", "surname", "email", "year_group"]).missingRequired).toEqual(["mis_student_id", "first_name", "last_name"]);
|
|
21
|
+
});
|
|
22
|
+
it("uses the mapped header instead of the field name", () => {
|
|
23
|
+
const r = (0, misSync_1.resolveMisColumns)(["Learner Ref", "first_name", "last_name", "email", "Yr 2025", "mis_student_id"], { "mis_student_id": "Learner Ref", "year_group": "Yr 2025" });
|
|
27
24
|
expect(r.columns.mis_student_id).toBe(0);
|
|
28
25
|
expect(r.columns.year_group).toBe(4);
|
|
26
|
+
expect(r.ignored).toEqual(["mis_student_id"]);
|
|
29
27
|
});
|
|
30
28
|
it("reports missing required columns", () => {
|
|
31
29
|
expect((0, misSync_1.resolveMisColumns)(["first_name", "email"]).missingRequired).toEqual(["mis_student_id", "last_name", "year_group"]);
|
|
32
30
|
});
|
|
33
|
-
it("flags a
|
|
34
|
-
const r = (0, misSync_1.resolveMisColumns)(["email", "
|
|
31
|
+
it("flags a repeated header and uses the first", () => {
|
|
32
|
+
const r = (0, misSync_1.resolveMisColumns)(["email", "email", "mis_student_id", "first_name", "last_name", "year_group"]);
|
|
35
33
|
expect(r.ambiguous).toContain("email");
|
|
36
34
|
expect(r.columns.email).toBe(0);
|
|
37
35
|
});
|
|
@@ -59,6 +57,11 @@ describe("validateMisRow", () => {
|
|
|
59
57
|
expect((0, misSync_1.validateMisRow)({ ...good, "start_date": "2025-02-30" }, 2).errors[0].field).toBe("start_date");
|
|
60
58
|
expect((0, misSync_1.validateMisRow)({ ...good, "start_date": "2025-09-01", "leave_date": "2025-01-01" }, 2).errors[0].code).toBe("dateOrder");
|
|
61
59
|
});
|
|
60
|
+
it("lower-cases a parent email and rejects an invalid one", () => {
|
|
61
|
+
expect((0, misSync_1.validateMisRow)({ ...good, "parent_email": "Parent@Home.com" }, 2).row?.parent_email).toBe("parent@home.com");
|
|
62
|
+
expect((0, misSync_1.validateMisRow)({ ...good, "parent_email": "nope" }, 2).errors[0].field).toBe("parent_email");
|
|
63
|
+
expect((0, misSync_1.validateMisRow)({ ...good, "parent_email": "parent@elsewhere.com" }, 2, ["college.ac.uk"]).errors).toEqual([]);
|
|
64
|
+
});
|
|
62
65
|
it("enforces student email domains when configured", () => {
|
|
63
66
|
expect((0, misSync_1.validateMisRow)(good, 2, ["college.ac.uk"]).errors).toEqual([]);
|
|
64
67
|
expect((0, misSync_1.validateMisRow)(good, 2, ["@college.ac.uk"]).errors).toEqual([]);
|
package/lib/misSync.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misSync.test.js","sourceRoot":"","sources":["../src/misSync.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"misSync.test.js","sourceRoot":"","sources":["../src/misSync.test.ts"],"names":[],"mappings":"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"}
|
package/lib/typeDefinitions.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { ChecklistItem, GiftHistory } from "./customerCareConfig";
|
|
|
5
5
|
import type { StudentTaskConfigMap, SurveyKind, SurveySendPolicyMap, SurveySlot } from "./surveys/types";
|
|
6
6
|
import type { InstitutePricing } from "./pricing";
|
|
7
7
|
import type { CompassActivityType, CompassCareersPartnerType, CompassDeliveryMethod } from "./compassTemplate";
|
|
8
|
+
import type { MisColumnMapping } from "./misSync";
|
|
8
9
|
export type FilterObject = {
|
|
9
10
|
[key: string]: {
|
|
10
11
|
label: string;
|
|
@@ -1058,6 +1059,10 @@ export type EmployerField = {
|
|
|
1058
1059
|
/** The areas of the staff platform that each own part of the careers year. */
|
|
1059
1060
|
export type CareersSetupArea = "development" | "destinations";
|
|
1060
1061
|
export type InstituteData = {
|
|
1062
|
+
/** MIS file sync. `mapping` holds the college's own header for any field not named exactly as we specify. */
|
|
1063
|
+
mis?: {
|
|
1064
|
+
mapping?: MisColumnMapping;
|
|
1065
|
+
};
|
|
1061
1066
|
students: number;
|
|
1062
1067
|
staff: number;
|
|
1063
1068
|
studentsFields: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../src/typeDefinitions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../src/typeDefinitions.ts"],"names":[],"mappings":";;;AAwkIA,sDASC;AAeD,oDAKC;AAaD,0CAEC;AA/nED;;;;;kFAKkF;AACrE,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,iBAAiB,GAAG,OAAO,CAAC;AA2iEzC;yEACyE;AAC5D,QAAA,0BAA0B,GAA2C;IAC9E,gBAAgB,EAAE,2BAA2B;IAC7C,mBAAmB,EAAE,sBAAsB;IAC3C,cAAc,EAAE,iBAAiB;IACjC,kBAAkB,EAAE,qBAAqB;IACzC,UAAU,EAAE,oCAAoC;IAChD,aAAa,EAAE,yBAAyB;IACxC,aAAa,EAAE,wBAAwB;IACvC,KAAK,EAAE,OAAO;CACjB,CAAC;AAEW,QAAA,0BAA0B,GAA+C;IAClF,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,SAAsC;IACxE,QAAQ,SAAS,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC;QAC5B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;IAC3B,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAChC,IAAwC,EACxC,MAA6C;IAE7C,OAAO,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,YAAY,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,eAAe,CAAC,KAA6D;IACzF,OAAO,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED
package/src/misSync.test.ts
CHANGED
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
misInboundTokenFromAddress,
|
|
7
7
|
misAllowedSenderSchema,
|
|
8
8
|
misSyncSettingsSchema,
|
|
9
|
-
normaliseMisHeader,
|
|
10
9
|
resolveMisColumns,
|
|
11
10
|
validateMisRow,
|
|
12
11
|
validateMisSnapshot,
|
|
@@ -22,33 +21,31 @@ const good: MisRawRow = {
|
|
|
22
21
|
"year_group": "Year 12",
|
|
23
22
|
};
|
|
24
23
|
|
|
25
|
-
describe("normaliseMisHeader", () => {
|
|
26
|
-
it("ignores case, spacing, punctuation and a BOM", () => {
|
|
27
|
-
expect(normaliseMisHeader("\uFEFF MIS Student-ID ")).toBe("mis_student_id");
|
|
28
|
-
expect(normaliseMisHeader("Course.Year")).toBe("course_year");
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
|
|
32
24
|
describe("resolveMisColumns", () => {
|
|
33
|
-
it("matches
|
|
34
|
-
const r = resolveMisColumns(["
|
|
25
|
+
it("matches exact field names, ignoring only a BOM and surrounding spaces", () => {
|
|
26
|
+
const r = resolveMisColumns(["\uFEFFmis_student_id", " first_name ", "last_name", "email", "year_group", "Forename", "Extra"]);
|
|
35
27
|
expect(r.columns).toEqual({"mis_student_id": 0, "first_name": 1, "last_name": 2, "email": 3, "year_group": 4});
|
|
36
28
|
expect(r.missingRequired).toEqual([]);
|
|
37
|
-
expect(r.ignored).toEqual(["Extra"]);
|
|
29
|
+
expect(r.ignored).toEqual(["Forename", "Extra"]);
|
|
38
30
|
});
|
|
39
31
|
|
|
40
|
-
it("
|
|
41
|
-
|
|
32
|
+
it("never guesses: other spellings and case don't match", () => {
|
|
33
|
+
expect(resolveMisColumns(["Student ID", "First_Name", "surname", "email", "year_group"]).missingRequired).toEqual(["mis_student_id", "first_name", "last_name"]);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("uses the mapped header instead of the field name", () => {
|
|
37
|
+
const r = resolveMisColumns(["Learner Ref", "first_name", "last_name", "email", "Yr 2025", "mis_student_id"], {"mis_student_id": "Learner Ref", "year_group": "Yr 2025"});
|
|
42
38
|
expect(r.columns.mis_student_id).toBe(0);
|
|
43
39
|
expect(r.columns.year_group).toBe(4);
|
|
40
|
+
expect(r.ignored).toEqual(["mis_student_id"]);
|
|
44
41
|
});
|
|
45
42
|
|
|
46
43
|
it("reports missing required columns", () => {
|
|
47
44
|
expect(resolveMisColumns(["first_name", "email"]).missingRequired).toEqual(["mis_student_id", "last_name", "year_group"]);
|
|
48
45
|
});
|
|
49
46
|
|
|
50
|
-
it("flags a
|
|
51
|
-
const r = resolveMisColumns(["email", "
|
|
47
|
+
it("flags a repeated header and uses the first", () => {
|
|
48
|
+
const r = resolveMisColumns(["email", "email", "mis_student_id", "first_name", "last_name", "year_group"]);
|
|
52
49
|
expect(r.ambiguous).toContain("email");
|
|
53
50
|
expect(r.columns.email).toBe(0);
|
|
54
51
|
});
|
|
@@ -81,6 +78,12 @@ describe("validateMisRow", () => {
|
|
|
81
78
|
expect(validateMisRow({...good, "start_date": "2025-09-01", "leave_date": "2025-01-01"}, 2).errors[0].code).toBe("dateOrder");
|
|
82
79
|
});
|
|
83
80
|
|
|
81
|
+
it("lower-cases a parent email and rejects an invalid one", () => {
|
|
82
|
+
expect(validateMisRow({...good, "parent_email": "Parent@Home.com"}, 2).row?.parent_email).toBe("parent@home.com");
|
|
83
|
+
expect(validateMisRow({...good, "parent_email": "nope"}, 2).errors[0].field).toBe("parent_email");
|
|
84
|
+
expect(validateMisRow({...good, "parent_email": "parent@elsewhere.com"}, 2, ["college.ac.uk"]).errors).toEqual([]);
|
|
85
|
+
});
|
|
86
|
+
|
|
84
87
|
it("enforces student email domains when configured", () => {
|
|
85
88
|
expect(validateMisRow(good, 2, ["college.ac.uk"]).errors).toEqual([]);
|
|
86
89
|
expect(validateMisRow(good, 2, ["@college.ac.uk"]).errors).toEqual([]);
|
package/src/misSync.ts
CHANGED
|
@@ -19,6 +19,7 @@ export const MIS_SNAPSHOT_FIELDS = [
|
|
|
19
19
|
"last_name",
|
|
20
20
|
"email",
|
|
21
21
|
"year_group",
|
|
22
|
+
"parent_email",
|
|
22
23
|
"course",
|
|
23
24
|
"tutor_group",
|
|
24
25
|
"status",
|
|
@@ -37,29 +38,13 @@ export const MIS_REQUIRED_FIELDS: readonly MisSnapshotField[] = [
|
|
|
37
38
|
"year_group",
|
|
38
39
|
];
|
|
39
40
|
|
|
40
|
-
/**
|
|
41
|
-
* Header spellings accepted without any mapping. Compared after
|
|
42
|
-
* `normaliseMisHeader`, so case, spaces and hyphens don't matter.
|
|
43
|
-
*/
|
|
44
|
-
export const MIS_FIELD_ALIASES: Record<MisSnapshotField, readonly string[]> = {
|
|
45
|
-
"mis_student_id": ["mis_student_id", "student_id", "learner_id", "student_ref", "student_reference"],
|
|
46
|
-
"first_name": ["first_name", "forename", "firstname", "legal_forename", "preferred_forename"],
|
|
47
|
-
"last_name": ["last_name", "surname", "lastname", "legal_surname"],
|
|
48
|
-
"email": ["email", "college_email", "email_address", "student_email"],
|
|
49
|
-
"year_group": ["year_group", "course_year", "year", "year_of_study"],
|
|
50
|
-
"course": ["course", "course_name", "programme", "study_programme"],
|
|
51
|
-
"tutor_group": ["tutor_group", "tutor", "form_group", "registration_group"],
|
|
52
|
-
"status": ["status", "enrolment_status", "enrollment_status"],
|
|
53
|
-
"start_date": ["start_date", "enrolment_date", "enrollment_date"],
|
|
54
|
-
"leave_date": ["leave_date", "end_date", "withdrawal_date"],
|
|
55
|
-
};
|
|
56
|
-
|
|
57
41
|
/** Human labels for the settings panel and preview. */
|
|
58
42
|
export const MIS_FIELD_LABELS: Record<MisSnapshotField, string> = {
|
|
59
43
|
"mis_student_id": "MIS student ID",
|
|
60
44
|
"first_name": "First name",
|
|
61
45
|
"last_name": "Last name",
|
|
62
46
|
"email": "College email",
|
|
47
|
+
"parent_email": "Parent email",
|
|
63
48
|
"year_group": "Year group / course year",
|
|
64
49
|
"course": "Course",
|
|
65
50
|
"tutor_group": "Tutor group",
|
|
@@ -75,6 +60,7 @@ export type MisSnapshotRow = {
|
|
|
75
60
|
"last_name": string,
|
|
76
61
|
"email": string,
|
|
77
62
|
"year_group": string,
|
|
63
|
+
"parent_email"?: string,
|
|
78
64
|
"course"?: string,
|
|
79
65
|
"tutor_group"?: string,
|
|
80
66
|
"status"?: string,
|
|
@@ -85,7 +71,10 @@ export type MisSnapshotRow = {
|
|
|
85
71
|
/** A raw row keyed by canonical field, before validation. */
|
|
86
72
|
export type MisRawRow = Partial<Record<MisSnapshotField, string>>;
|
|
87
73
|
|
|
88
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* Per-field header overrides, stored on `InstituteData.mis.mapping`: canonical
|
|
76
|
+
* field to the exact header in the college's file.
|
|
77
|
+
*/
|
|
89
78
|
export type MisColumnMapping = Partial<Record<MisSnapshotField, string>>;
|
|
90
79
|
|
|
91
80
|
export type MisRowErrorCode =
|
|
@@ -177,7 +166,6 @@ export type MisSyncConfig = {
|
|
|
177
166
|
allowedSenders: string[],
|
|
178
167
|
/** If set, every student email must be on one of these domains. */
|
|
179
168
|
studentEmailDomains: string[],
|
|
180
|
-
columnMapping: MisColumnMapping,
|
|
181
169
|
inactiveStatuses: string[],
|
|
182
170
|
requireApproval: boolean,
|
|
183
171
|
maxArchivePercent: number,
|
|
@@ -306,14 +294,13 @@ export type MisSyncRun = {
|
|
|
306
294
|
};
|
|
307
295
|
|
|
308
296
|
/**
|
|
309
|
-
*
|
|
310
|
-
*
|
|
297
|
+
* Drops the UTF-8 BOM Excel adds and surrounding whitespace. Nothing else: headers
|
|
298
|
+
* must match exactly.
|
|
311
299
|
*
|
|
312
300
|
* @param {string} header the raw header text.
|
|
313
|
-
* @return {string} the
|
|
301
|
+
* @return {string} the cleaned header.
|
|
314
302
|
*/
|
|
315
|
-
export const
|
|
316
|
-
header.replace(/^\uFEFF/, "").trim().toLowerCase().replace(/[\s\-./]+/g, "_").replace(/^_+|_+$/g, "");
|
|
303
|
+
export const cleanMisHeader = (header: string): string => header.replace(/^\uFEFF/, "").trim();
|
|
317
304
|
|
|
318
305
|
export type MisColumnResolution = {
|
|
319
306
|
/** Canonical field to column index in the file. */
|
|
@@ -321,29 +308,28 @@ export type MisColumnResolution = {
|
|
|
321
308
|
missingRequired: MisSnapshotField[],
|
|
322
309
|
/** Headers that map to no field. */
|
|
323
310
|
ignored: string[],
|
|
324
|
-
/** Fields
|
|
311
|
+
/** Fields whose header appears more than once. The first wins. */
|
|
325
312
|
ambiguous: MisSnapshotField[],
|
|
326
313
|
};
|
|
327
314
|
|
|
328
315
|
/**
|
|
329
|
-
* Works out which column holds each field.
|
|
330
|
-
*
|
|
316
|
+
* Works out which column holds each field. Each field is found by its exact
|
|
317
|
+
* header: the college's mapped name if it has one, otherwise the field name.
|
|
331
318
|
*
|
|
332
319
|
* @param {string[]} headers the header row as read from the file.
|
|
333
|
-
* @param {MisColumnMapping} mapping per-field header overrides from the
|
|
320
|
+
* @param {MisColumnMapping} mapping per-field header overrides from the institute.
|
|
334
321
|
* @return {MisColumnResolution} the resolved columns and any problems.
|
|
335
322
|
*/
|
|
336
323
|
export const resolveMisColumns = (headers: string[], mapping: MisColumnMapping = {}): MisColumnResolution => {
|
|
337
|
-
const
|
|
324
|
+
const cleaned = headers.map(cleanMisHeader);
|
|
338
325
|
const columns: Partial<Record<MisSnapshotField, number>> = {};
|
|
339
326
|
const ambiguous: MisSnapshotField[] = [];
|
|
340
327
|
const used = new Set<number>();
|
|
341
328
|
|
|
342
329
|
for (const field of MIS_SNAPSHOT_FIELDS) {
|
|
343
|
-
const
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
.map((h, i) => (candidates.includes(h) && !used.has(i) ? i : -1))
|
|
330
|
+
const expected = mapping[field]?.trim() || field;
|
|
331
|
+
const matches = cleaned
|
|
332
|
+
.map((h, i) => (h === expected && !used.has(i) ? i : -1))
|
|
347
333
|
.filter((i) => i >= 0);
|
|
348
334
|
if (!matches.length) continue;
|
|
349
335
|
if (matches.length > 1) ambiguous.push(field);
|
|
@@ -378,6 +364,7 @@ const FIELD_MAX_LENGTH: Record<MisSnapshotField, number> = {
|
|
|
378
364
|
"first_name": 100,
|
|
379
365
|
"last_name": 100,
|
|
380
366
|
"email": 254,
|
|
367
|
+
"parent_email": 254,
|
|
381
368
|
"year_group": 50,
|
|
382
369
|
"course": 150,
|
|
383
370
|
"tutor_group": 50,
|
|
@@ -431,6 +418,10 @@ export const validateMisRow = (raw: MisRawRow, rowNumber: number, studentEmailDo
|
|
|
431
418
|
}
|
|
432
419
|
}
|
|
433
420
|
}
|
|
421
|
+
if (clean.parent_email) {
|
|
422
|
+
clean.parent_email = clean.parent_email.toLowerCase();
|
|
423
|
+
if (!emailSchema.safeParse(clean.parent_email).success) fail("parent_email", "invalid", "Parent email is not a valid email address.");
|
|
424
|
+
}
|
|
434
425
|
for (const field of ["start_date", "leave_date"] as const) {
|
|
435
426
|
if (clean[field] && !isIsoDate(clean[field] as string)) fail(field, "invalid", `${MIS_FIELD_LABELS[field]} must be a date in YYYY-MM-DD format.`);
|
|
436
427
|
}
|
|
@@ -555,7 +546,6 @@ export const misSyncSettingsSchema = z.object({
|
|
|
555
546
|
method: z.enum(["email", "api"]),
|
|
556
547
|
allowedSenders: z.array(misAllowedSenderSchema).max(20),
|
|
557
548
|
studentEmailDomains: z.array(z.string().trim().toLowerCase().regex(/^@?[a-z0-9.-]+\.[a-z]{2,}$/, "Enter a domain such as college.ac.uk.")).max(10),
|
|
558
|
-
columnMapping: z.record(z.enum(MIS_SNAPSHOT_FIELDS), z.string().trim().max(100)),
|
|
559
549
|
inactiveStatuses: z.array(z.string().trim().min(1).max(50)).max(30),
|
|
560
550
|
requireApproval: z.boolean(),
|
|
561
551
|
maxArchivePercent: z.number().min(0).max(100),
|
|
@@ -577,7 +567,6 @@ export const defaultMisSyncSettings = (): MisSyncSettings => ({
|
|
|
577
567
|
method: "email",
|
|
578
568
|
allowedSenders: [],
|
|
579
569
|
studentEmailDomains: [],
|
|
580
|
-
columnMapping: {},
|
|
581
570
|
inactiveStatuses: [...MIS_DEFAULT_INACTIVE_STATUSES],
|
|
582
571
|
requireApproval: MIS_SYNC_DEFAULTS.requireApproval,
|
|
583
572
|
maxArchivePercent: MIS_SYNC_DEFAULTS.maxArchivePercent,
|
package/src/typeDefinitions.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type {ChecklistItem, GiftHistory} from "./customerCareConfig";
|
|
|
5
5
|
import type {StudentTaskConfigMap, SurveyKind, SurveySendPolicyMap, SurveySlot} from "./surveys/types";
|
|
6
6
|
import type {InstitutePricing} from "./pricing";
|
|
7
7
|
import type {CompassActivityType, CompassCareersPartnerType, CompassDeliveryMethod} from "./compassTemplate";
|
|
8
|
+
import type {MisColumnMapping} from "./misSync";
|
|
8
9
|
|
|
9
10
|
export type FilterObject = {
|
|
10
11
|
[key: string]: {
|
|
@@ -1106,6 +1107,8 @@ export type EmployerField = {
|
|
|
1106
1107
|
export type CareersSetupArea = "development"|"destinations";
|
|
1107
1108
|
|
|
1108
1109
|
export type InstituteData = {
|
|
1110
|
+
/** MIS file sync. `mapping` holds the college's own header for any field not named exactly as we specify. */
|
|
1111
|
+
mis?: {mapping?: MisColumnMapping},
|
|
1109
1112
|
students: number,
|
|
1110
1113
|
staff: number,
|
|
1111
1114
|
studentsFields: string[],
|
package/watch-local.js
CHANGED
|
@@ -50,6 +50,43 @@ function toDevAlgoliaConfig(source) {
|
|
|
50
50
|
return swapped;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
// Consumers linked via yalc during a dev watch session should talk to the
|
|
54
|
+
// local Functions emulator, not the deployed dev project - otherwise every
|
|
55
|
+
// backend change under test here needs re-deploying to be seen at all. The
|
|
56
|
+
// source never imports connectFunctionsEmulator (the call is normally left
|
|
57
|
+
// commented out for real builds), so this adds the import as well as
|
|
58
|
+
// uncommenting the call - both get undone by restore() like everything else.
|
|
59
|
+
function toDevFirebaseConfig(source) {
|
|
60
|
+
const withCredentials = source.replace(/\(credentialsProd\)/g, "(credentialsDev)");
|
|
61
|
+
if (withCredentials === source) {
|
|
62
|
+
console.error(`❌ No credentialsProd usage found in ${firebaseConfigPath} — this dev build would still point at production.`);
|
|
63
|
+
restore();
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const withImport = withCredentials.replace(
|
|
68
|
+
"import {getFunctions} from \"firebase/functions\";",
|
|
69
|
+
"import {getFunctions, connectFunctionsEmulator} from \"firebase/functions\";",
|
|
70
|
+
);
|
|
71
|
+
if (withImport === withCredentials) {
|
|
72
|
+
console.error(`❌ Could not find the firebase/functions import in ${firebaseConfigPath} to add connectFunctionsEmulator to.`);
|
|
73
|
+
restore();
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const withEmulator = withImport.replace(
|
|
78
|
+
"// connectFunctionsEmulator(functions, \"localhost\", 5001);",
|
|
79
|
+
"connectFunctionsEmulator(functions, \"localhost\", 5001);",
|
|
80
|
+
);
|
|
81
|
+
if (withEmulator === withImport) {
|
|
82
|
+
console.error(`❌ Could not find the commented-out connectFunctionsEmulator line in ${firebaseConfigPath}.`);
|
|
83
|
+
restore();
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return withEmulator;
|
|
88
|
+
}
|
|
89
|
+
|
|
53
90
|
let restored = false;
|
|
54
91
|
function restore() {
|
|
55
92
|
if (restored) return;
|
|
@@ -72,7 +109,7 @@ if (target === "dev") {
|
|
|
72
109
|
console.log("🛠 Switching to DEV config for this watch session...");
|
|
73
110
|
fs.writeFileSync(
|
|
74
111
|
firebaseConfigPath,
|
|
75
|
-
originalFirebaseConfig
|
|
112
|
+
toDevFirebaseConfig(originalFirebaseConfig),
|
|
76
113
|
);
|
|
77
114
|
fs.writeFileSync(
|
|
78
115
|
algoliaConfigPath,
|