placementt-core 1.400.1128 → 1.400.1130
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/__tests__/outreach.test.js +10 -2
- package/lib/callables/__tests__/outreach.test.js.map +1 -1
- package/lib/callables/outreach.d.ts +44 -3
- package/lib/callables/outreach.js +22 -1
- package/lib/callables/outreach.js.map +1 -1
- package/lib/callables/registry.d.ts +80 -6
- package/lib/typeDefinitions.d.ts +10 -1
- package/package.json +1 -1
- package/src/callables/__tests__/outreach.test.ts +11 -2
- package/src/callables/outreach.ts +23 -1
- package/src/typeDefinitions.ts +8 -1
|
@@ -5,13 +5,17 @@ const outreach_1 = require("../outreach");
|
|
|
5
5
|
* breaks the web or backend payload fails here first. */
|
|
6
6
|
const samples = {
|
|
7
7
|
"outreach-upsertContacts": {
|
|
8
|
-
request: { rows: [{ urn: "100000", affiliation: "Test School", email: "head@test.sch.uk" }], dryRun: true },
|
|
8
|
+
request: { rows: [{ urn: "100000", affiliation: "Test School", email: "head@test.sch.uk" }], dryRun: true, group: "Derby" },
|
|
9
9
|
response: { added: 1, updated: 0, keptStatus: 0, noEmail: 0, invalidEmail: 0, duplicateEmailInUpload: 0, skipped: [{ row: 2, reason: "No URN" }] },
|
|
10
10
|
},
|
|
11
11
|
"outreach-setStatus": {
|
|
12
12
|
request: { urn: 100000, status: "deferred", deferUntil: "2027-09-28", reason: "Next year" },
|
|
13
13
|
response: { urn: 100000, status: "deferred", brevoSynced: true, affectedUrns: [100000] },
|
|
14
14
|
},
|
|
15
|
+
"outreach-setGroup": {
|
|
16
|
+
request: { urn: 100000, group: "Derby" },
|
|
17
|
+
response: { urn: 100000, group: "Derby", brevoSynced: true, affectedUrns: [100000] },
|
|
18
|
+
},
|
|
15
19
|
"outreach-convertToLead": {
|
|
16
20
|
request: { urn: 100000, lead: { forename: "Jo", surname: "Bloggs", email: "jo@test.sch.uk", organisation: "Test School", assignee: "uid1" } },
|
|
17
21
|
response: { leadId: "lead1" },
|
|
@@ -22,7 +26,7 @@ const samples = {
|
|
|
22
26
|
},
|
|
23
27
|
"outreach-setupBrevo": {
|
|
24
28
|
request: {},
|
|
25
|
-
response: {
|
|
29
|
+
response: { folderId: 12, customersListId: 80, webhookId: 5, attributesCreated: ["URN"] },
|
|
26
30
|
},
|
|
27
31
|
"outreach-migrateExisting": {
|
|
28
32
|
request: {},
|
|
@@ -49,6 +53,10 @@ describe("outreach contracts", () => {
|
|
|
49
53
|
expect(outreach_1.outreachCallables["outreach-setStatus"].request
|
|
50
54
|
.safeParse({ urn: 1, status: "deferred", deferUntil: "28/09/2027" }).success).toBe(false);
|
|
51
55
|
});
|
|
56
|
+
it("rejects a blank group name", () => {
|
|
57
|
+
expect(outreach_1.outreachCallables["outreach-upsertContacts"].request
|
|
58
|
+
.safeParse({ rows: [{ urn: "1" }], group: " " }).success).toBe(false);
|
|
59
|
+
});
|
|
52
60
|
it("rejects an empty upload", () => {
|
|
53
61
|
expect(outreach_1.outreachCallables["outreach-upsertContacts"].request.safeParse({ rows: [] }).success).toBe(false);
|
|
54
62
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outreach.test.js","sourceRoot":"","sources":["../../../src/callables/__tests__/outreach.test.ts"],"names":[],"mappings":";;AAAA,0CAA8C;AAE9C;yDACyD;AACzD,MAAM,OAAO,GAAmF;IAC5F,yBAAyB,EAAE;QACvB,OAAO,EAAE,EAAC,IAAI,EAAE,CAAC,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC;
|
|
1
|
+
{"version":3,"file":"outreach.test.js","sourceRoot":"","sources":["../../../src/callables/__tests__/outreach.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,17 @@ export declare const outreachCallables: {
|
|
|
3
3
|
"outreach-upsertContacts": {
|
|
4
4
|
request: z.ZodObject<{
|
|
5
5
|
rows: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>, "many">;
|
|
6
|
+
/** Group for rows whose group column is blank (created in Brevo if new). A row's own group wins. */
|
|
7
|
+
group: z.ZodOptional<z.ZodString>;
|
|
6
8
|
/** Count what would happen without writing to Firestore or Brevo. */
|
|
7
9
|
dryRun: z.ZodOptional<z.ZodBoolean>;
|
|
8
10
|
}, "strip", z.ZodTypeAny, {
|
|
9
11
|
rows: Record<string, string | undefined>[];
|
|
12
|
+
group?: string | undefined;
|
|
10
13
|
dryRun?: boolean | undefined;
|
|
11
14
|
}, {
|
|
12
15
|
rows: Record<string, string | undefined>[];
|
|
16
|
+
group?: string | undefined;
|
|
13
17
|
dryRun?: boolean | undefined;
|
|
14
18
|
}>;
|
|
15
19
|
response: z.ZodObject<{
|
|
@@ -33,6 +37,8 @@ export declare const outreachCallables: {
|
|
|
33
37
|
row: number;
|
|
34
38
|
urn?: string | undefined;
|
|
35
39
|
}>, "many">;
|
|
40
|
+
/** Rows put in each group by this upload. */
|
|
41
|
+
groups: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
36
42
|
brevoProcessId: z.ZodOptional<z.ZodNumber>;
|
|
37
43
|
brevoError: z.ZodOptional<z.ZodString>;
|
|
38
44
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -47,6 +53,7 @@ export declare const outreachCallables: {
|
|
|
47
53
|
keptStatus: number;
|
|
48
54
|
invalidEmail: number;
|
|
49
55
|
duplicateEmailInUpload: number;
|
|
56
|
+
groups?: Record<string, number> | undefined;
|
|
50
57
|
brevoProcessId?: number | undefined;
|
|
51
58
|
brevoError?: string | undefined;
|
|
52
59
|
}, {
|
|
@@ -61,6 +68,7 @@ export declare const outreachCallables: {
|
|
|
61
68
|
keptStatus: number;
|
|
62
69
|
invalidEmail: number;
|
|
63
70
|
duplicateEmailInUpload: number;
|
|
71
|
+
groups?: Record<string, number> | undefined;
|
|
64
72
|
brevoProcessId?: number | undefined;
|
|
65
73
|
brevoError?: string | undefined;
|
|
66
74
|
}>;
|
|
@@ -112,6 +120,38 @@ export declare const outreachCallables: {
|
|
|
112
120
|
affectedUrns: number[];
|
|
113
121
|
}>;
|
|
114
122
|
};
|
|
123
|
+
"outreach-setGroup": {
|
|
124
|
+
request: z.ZodObject<{
|
|
125
|
+
urn: z.ZodNumber;
|
|
126
|
+
/** The school's group; null takes it out of any group. */
|
|
127
|
+
group: z.ZodNullable<z.ZodString>;
|
|
128
|
+
applyToSharedEmail: z.ZodOptional<z.ZodBoolean>;
|
|
129
|
+
}, "strip", z.ZodTypeAny, {
|
|
130
|
+
group: string | null;
|
|
131
|
+
urn: number;
|
|
132
|
+
applyToSharedEmail?: boolean | undefined;
|
|
133
|
+
}, {
|
|
134
|
+
group: string | null;
|
|
135
|
+
urn: number;
|
|
136
|
+
applyToSharedEmail?: boolean | undefined;
|
|
137
|
+
}>;
|
|
138
|
+
response: z.ZodObject<{
|
|
139
|
+
urn: z.ZodNumber;
|
|
140
|
+
group: z.ZodNullable<z.ZodString>;
|
|
141
|
+
brevoSynced: z.ZodBoolean;
|
|
142
|
+
affectedUrns: z.ZodArray<z.ZodNumber, "many">;
|
|
143
|
+
}, "strip", z.ZodTypeAny, {
|
|
144
|
+
group: string | null;
|
|
145
|
+
urn: number;
|
|
146
|
+
brevoSynced: boolean;
|
|
147
|
+
affectedUrns: number[];
|
|
148
|
+
}, {
|
|
149
|
+
group: string | null;
|
|
150
|
+
urn: number;
|
|
151
|
+
brevoSynced: boolean;
|
|
152
|
+
affectedUrns: number[];
|
|
153
|
+
}>;
|
|
154
|
+
};
|
|
115
155
|
"outreach-convertToLead": {
|
|
116
156
|
request: z.ZodObject<{
|
|
117
157
|
urn: z.ZodNumber;
|
|
@@ -220,17 +260,18 @@ export declare const outreachCallables: {
|
|
|
220
260
|
"outreach-setupBrevo": {
|
|
221
261
|
request: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
222
262
|
response: z.ZodObject<{
|
|
223
|
-
|
|
263
|
+
/** The Brevo "Marketing Contacts" folder the group lists live in. */
|
|
264
|
+
folderId: z.ZodNumber;
|
|
224
265
|
customersListId: z.ZodNumber;
|
|
225
266
|
webhookId: z.ZodNumber;
|
|
226
267
|
attributesCreated: z.ZodArray<z.ZodString, "many">;
|
|
227
268
|
}, "strip", z.ZodTypeAny, {
|
|
228
|
-
|
|
269
|
+
folderId: number;
|
|
229
270
|
customersListId: number;
|
|
230
271
|
webhookId: number;
|
|
231
272
|
attributesCreated: string[];
|
|
232
273
|
}, {
|
|
233
|
-
|
|
274
|
+
folderId: number;
|
|
234
275
|
customersListId: number;
|
|
235
276
|
webhookId: number;
|
|
236
277
|
attributesCreated: string[];
|
|
@@ -12,11 +12,15 @@ const zod_1 = require("zod");
|
|
|
12
12
|
const outreachStatus = zod_1.z.enum(["pool", "lead", "deferred", "customer", "doNotContact"]);
|
|
13
13
|
/** A pasted spreadsheet row keyed by DFE_CONTACT_UPLOAD_COLUMNS. Raw strings; the backend coerces. */
|
|
14
14
|
const uploadRow = zod_1.z.record(zod_1.z.string(), zod_1.z.string().optional());
|
|
15
|
+
/** An outreach group name, which is also its Brevo list name. */
|
|
16
|
+
const groupName = zod_1.z.string().trim().min(1, "Name the group.").max(60, "Keep group names under 60 characters.");
|
|
15
17
|
const isoDate = zod_1.z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Use a YYYY-MM-DD date.");
|
|
16
18
|
exports.outreachCallables = {
|
|
17
19
|
"outreach-upsertContacts": {
|
|
18
20
|
request: zod_1.z.object({
|
|
19
21
|
rows: zod_1.z.array(uploadRow).min(1).max(2000),
|
|
22
|
+
/** Group for rows whose group column is blank (created in Brevo if new). A row's own group wins. */
|
|
23
|
+
group: groupName.optional(),
|
|
20
24
|
/** Count what would happen without writing to Firestore or Brevo. */
|
|
21
25
|
dryRun: zod_1.z.boolean().optional(),
|
|
22
26
|
}),
|
|
@@ -29,6 +33,8 @@ exports.outreachCallables = {
|
|
|
29
33
|
invalidEmail: zod_1.z.number(),
|
|
30
34
|
duplicateEmailInUpload: zod_1.z.number(),
|
|
31
35
|
skipped: zod_1.z.array(zod_1.z.object({ row: zod_1.z.number(), urn: zod_1.z.string().optional(), reason: zod_1.z.string() })),
|
|
36
|
+
/** Rows put in each group by this upload. */
|
|
37
|
+
groups: zod_1.z.record(zod_1.z.string(), zod_1.z.number()).optional(),
|
|
32
38
|
brevoProcessId: zod_1.z.number().optional(),
|
|
33
39
|
brevoError: zod_1.z.string().optional(),
|
|
34
40
|
}),
|
|
@@ -54,6 +60,20 @@ exports.outreachCallables = {
|
|
|
54
60
|
affectedUrns: zod_1.z.array(zod_1.z.number()),
|
|
55
61
|
}),
|
|
56
62
|
},
|
|
63
|
+
"outreach-setGroup": {
|
|
64
|
+
request: zod_1.z.object({
|
|
65
|
+
urn: zod_1.z.number(),
|
|
66
|
+
/** The school's group; null takes it out of any group. */
|
|
67
|
+
group: groupName.nullable(),
|
|
68
|
+
applyToSharedEmail: zod_1.z.boolean().optional(),
|
|
69
|
+
}),
|
|
70
|
+
response: zod_1.z.object({
|
|
71
|
+
urn: zod_1.z.number(),
|
|
72
|
+
group: zod_1.z.string().nullable(),
|
|
73
|
+
brevoSynced: zod_1.z.boolean(),
|
|
74
|
+
affectedUrns: zod_1.z.array(zod_1.z.number()),
|
|
75
|
+
}),
|
|
76
|
+
},
|
|
57
77
|
"outreach-convertToLead": {
|
|
58
78
|
request: zod_1.z.object({
|
|
59
79
|
urn: zod_1.z.number(),
|
|
@@ -86,7 +106,8 @@ exports.outreachCallables = {
|
|
|
86
106
|
"outreach-setupBrevo": {
|
|
87
107
|
request: zod_1.z.object({}),
|
|
88
108
|
response: zod_1.z.object({
|
|
89
|
-
|
|
109
|
+
/** The Brevo "Marketing Contacts" folder the group lists live in. */
|
|
110
|
+
folderId: zod_1.z.number(),
|
|
90
111
|
customersListId: zod_1.z.number(),
|
|
91
112
|
webhookId: zod_1.z.number(),
|
|
92
113
|
attributesCreated: zod_1.z.array(zod_1.z.string()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outreach.js","sourceRoot":"","sources":["../../src/callables/outreach.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"outreach.js","sourceRoot":"","sources":["../../src/callables/outreach.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,12 +14,15 @@ export declare const allCallables: {
|
|
|
14
14
|
"outreach-upsertContacts": {
|
|
15
15
|
request: z.ZodObject<{
|
|
16
16
|
rows: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>, "many">;
|
|
17
|
+
group: z.ZodOptional<z.ZodString>;
|
|
17
18
|
dryRun: z.ZodOptional<z.ZodBoolean>;
|
|
18
19
|
}, "strip", z.ZodTypeAny, {
|
|
19
20
|
rows: Record<string, string | undefined>[];
|
|
21
|
+
group?: string | undefined;
|
|
20
22
|
dryRun?: boolean | undefined;
|
|
21
23
|
}, {
|
|
22
24
|
rows: Record<string, string | undefined>[];
|
|
25
|
+
group?: string | undefined;
|
|
23
26
|
dryRun?: boolean | undefined;
|
|
24
27
|
}>;
|
|
25
28
|
response: z.ZodObject<{
|
|
@@ -42,6 +45,7 @@ export declare const allCallables: {
|
|
|
42
45
|
row: number;
|
|
43
46
|
urn?: string | undefined;
|
|
44
47
|
}>, "many">;
|
|
48
|
+
groups: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
45
49
|
brevoProcessId: z.ZodOptional<z.ZodNumber>;
|
|
46
50
|
brevoError: z.ZodOptional<z.ZodString>;
|
|
47
51
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -56,6 +60,7 @@ export declare const allCallables: {
|
|
|
56
60
|
keptStatus: number;
|
|
57
61
|
invalidEmail: number;
|
|
58
62
|
duplicateEmailInUpload: number;
|
|
63
|
+
groups?: Record<string, number> | undefined;
|
|
59
64
|
brevoProcessId?: number | undefined;
|
|
60
65
|
brevoError?: string | undefined;
|
|
61
66
|
}, {
|
|
@@ -70,6 +75,7 @@ export declare const allCallables: {
|
|
|
70
75
|
keptStatus: number;
|
|
71
76
|
invalidEmail: number;
|
|
72
77
|
duplicateEmailInUpload: number;
|
|
78
|
+
groups?: Record<string, number> | undefined;
|
|
73
79
|
brevoProcessId?: number | undefined;
|
|
74
80
|
brevoError?: string | undefined;
|
|
75
81
|
}>;
|
|
@@ -117,6 +123,37 @@ export declare const allCallables: {
|
|
|
117
123
|
affectedUrns: number[];
|
|
118
124
|
}>;
|
|
119
125
|
};
|
|
126
|
+
"outreach-setGroup": {
|
|
127
|
+
request: z.ZodObject<{
|
|
128
|
+
urn: z.ZodNumber;
|
|
129
|
+
group: z.ZodNullable<z.ZodString>;
|
|
130
|
+
applyToSharedEmail: z.ZodOptional<z.ZodBoolean>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
group: string | null;
|
|
133
|
+
urn: number;
|
|
134
|
+
applyToSharedEmail?: boolean | undefined;
|
|
135
|
+
}, {
|
|
136
|
+
group: string | null;
|
|
137
|
+
urn: number;
|
|
138
|
+
applyToSharedEmail?: boolean | undefined;
|
|
139
|
+
}>;
|
|
140
|
+
response: z.ZodObject<{
|
|
141
|
+
urn: z.ZodNumber;
|
|
142
|
+
group: z.ZodNullable<z.ZodString>;
|
|
143
|
+
brevoSynced: z.ZodBoolean;
|
|
144
|
+
affectedUrns: z.ZodArray<z.ZodNumber, "many">;
|
|
145
|
+
}, "strip", z.ZodTypeAny, {
|
|
146
|
+
group: string | null;
|
|
147
|
+
urn: number;
|
|
148
|
+
brevoSynced: boolean;
|
|
149
|
+
affectedUrns: number[];
|
|
150
|
+
}, {
|
|
151
|
+
group: string | null;
|
|
152
|
+
urn: number;
|
|
153
|
+
brevoSynced: boolean;
|
|
154
|
+
affectedUrns: number[];
|
|
155
|
+
}>;
|
|
156
|
+
};
|
|
120
157
|
"outreach-convertToLead": {
|
|
121
158
|
request: z.ZodObject<{
|
|
122
159
|
urn: z.ZodNumber;
|
|
@@ -225,17 +262,17 @@ export declare const allCallables: {
|
|
|
225
262
|
"outreach-setupBrevo": {
|
|
226
263
|
request: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
227
264
|
response: z.ZodObject<{
|
|
228
|
-
|
|
265
|
+
folderId: z.ZodNumber;
|
|
229
266
|
customersListId: z.ZodNumber;
|
|
230
267
|
webhookId: z.ZodNumber;
|
|
231
268
|
attributesCreated: z.ZodArray<z.ZodString, "many">;
|
|
232
269
|
}, "strip", z.ZodTypeAny, {
|
|
233
|
-
|
|
270
|
+
folderId: number;
|
|
234
271
|
customersListId: number;
|
|
235
272
|
webhookId: number;
|
|
236
273
|
attributesCreated: string[];
|
|
237
274
|
}, {
|
|
238
|
-
|
|
275
|
+
folderId: number;
|
|
239
276
|
customersListId: number;
|
|
240
277
|
webhookId: number;
|
|
241
278
|
attributesCreated: string[];
|
|
@@ -3585,12 +3622,15 @@ export declare const callableGroups: {
|
|
|
3585
3622
|
"outreach-upsertContacts": {
|
|
3586
3623
|
request: z.ZodObject<{
|
|
3587
3624
|
rows: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>, "many">;
|
|
3625
|
+
group: z.ZodOptional<z.ZodString>;
|
|
3588
3626
|
dryRun: z.ZodOptional<z.ZodBoolean>;
|
|
3589
3627
|
}, "strip", z.ZodTypeAny, {
|
|
3590
3628
|
rows: Record<string, string | undefined>[];
|
|
3629
|
+
group?: string | undefined;
|
|
3591
3630
|
dryRun?: boolean | undefined;
|
|
3592
3631
|
}, {
|
|
3593
3632
|
rows: Record<string, string | undefined>[];
|
|
3633
|
+
group?: string | undefined;
|
|
3594
3634
|
dryRun?: boolean | undefined;
|
|
3595
3635
|
}>;
|
|
3596
3636
|
response: z.ZodObject<{
|
|
@@ -3613,6 +3653,7 @@ export declare const callableGroups: {
|
|
|
3613
3653
|
row: number;
|
|
3614
3654
|
urn?: string | undefined;
|
|
3615
3655
|
}>, "many">;
|
|
3656
|
+
groups: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
3616
3657
|
brevoProcessId: z.ZodOptional<z.ZodNumber>;
|
|
3617
3658
|
brevoError: z.ZodOptional<z.ZodString>;
|
|
3618
3659
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -3627,6 +3668,7 @@ export declare const callableGroups: {
|
|
|
3627
3668
|
keptStatus: number;
|
|
3628
3669
|
invalidEmail: number;
|
|
3629
3670
|
duplicateEmailInUpload: number;
|
|
3671
|
+
groups?: Record<string, number> | undefined;
|
|
3630
3672
|
brevoProcessId?: number | undefined;
|
|
3631
3673
|
brevoError?: string | undefined;
|
|
3632
3674
|
}, {
|
|
@@ -3641,6 +3683,7 @@ export declare const callableGroups: {
|
|
|
3641
3683
|
keptStatus: number;
|
|
3642
3684
|
invalidEmail: number;
|
|
3643
3685
|
duplicateEmailInUpload: number;
|
|
3686
|
+
groups?: Record<string, number> | undefined;
|
|
3644
3687
|
brevoProcessId?: number | undefined;
|
|
3645
3688
|
brevoError?: string | undefined;
|
|
3646
3689
|
}>;
|
|
@@ -3688,6 +3731,37 @@ export declare const callableGroups: {
|
|
|
3688
3731
|
affectedUrns: number[];
|
|
3689
3732
|
}>;
|
|
3690
3733
|
};
|
|
3734
|
+
"outreach-setGroup": {
|
|
3735
|
+
request: z.ZodObject<{
|
|
3736
|
+
urn: z.ZodNumber;
|
|
3737
|
+
group: z.ZodNullable<z.ZodString>;
|
|
3738
|
+
applyToSharedEmail: z.ZodOptional<z.ZodBoolean>;
|
|
3739
|
+
}, "strip", z.ZodTypeAny, {
|
|
3740
|
+
group: string | null;
|
|
3741
|
+
urn: number;
|
|
3742
|
+
applyToSharedEmail?: boolean | undefined;
|
|
3743
|
+
}, {
|
|
3744
|
+
group: string | null;
|
|
3745
|
+
urn: number;
|
|
3746
|
+
applyToSharedEmail?: boolean | undefined;
|
|
3747
|
+
}>;
|
|
3748
|
+
response: z.ZodObject<{
|
|
3749
|
+
urn: z.ZodNumber;
|
|
3750
|
+
group: z.ZodNullable<z.ZodString>;
|
|
3751
|
+
brevoSynced: z.ZodBoolean;
|
|
3752
|
+
affectedUrns: z.ZodArray<z.ZodNumber, "many">;
|
|
3753
|
+
}, "strip", z.ZodTypeAny, {
|
|
3754
|
+
group: string | null;
|
|
3755
|
+
urn: number;
|
|
3756
|
+
brevoSynced: boolean;
|
|
3757
|
+
affectedUrns: number[];
|
|
3758
|
+
}, {
|
|
3759
|
+
group: string | null;
|
|
3760
|
+
urn: number;
|
|
3761
|
+
brevoSynced: boolean;
|
|
3762
|
+
affectedUrns: number[];
|
|
3763
|
+
}>;
|
|
3764
|
+
};
|
|
3691
3765
|
"outreach-convertToLead": {
|
|
3692
3766
|
request: z.ZodObject<{
|
|
3693
3767
|
urn: z.ZodNumber;
|
|
@@ -3796,17 +3870,17 @@ export declare const callableGroups: {
|
|
|
3796
3870
|
"outreach-setupBrevo": {
|
|
3797
3871
|
request: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
3798
3872
|
response: z.ZodObject<{
|
|
3799
|
-
|
|
3873
|
+
folderId: z.ZodNumber;
|
|
3800
3874
|
customersListId: z.ZodNumber;
|
|
3801
3875
|
webhookId: z.ZodNumber;
|
|
3802
3876
|
attributesCreated: z.ZodArray<z.ZodString, "many">;
|
|
3803
3877
|
}, "strip", z.ZodTypeAny, {
|
|
3804
|
-
|
|
3878
|
+
folderId: number;
|
|
3805
3879
|
customersListId: number;
|
|
3806
3880
|
webhookId: number;
|
|
3807
3881
|
attributesCreated: string[];
|
|
3808
3882
|
}, {
|
|
3809
|
-
|
|
3883
|
+
folderId: number;
|
|
3810
3884
|
customersListId: number;
|
|
3811
3885
|
webhookId: number;
|
|
3812
3886
|
attributesCreated: string[];
|
package/lib/typeDefinitions.d.ts
CHANGED
|
@@ -4421,6 +4421,8 @@ export type DfESchoolContact = {
|
|
|
4421
4421
|
city: string;
|
|
4422
4422
|
doesWex?: boolean;
|
|
4423
4423
|
notes?: string;
|
|
4424
|
+
/** Outreach group (e.g. "Derby"), false for none. Each group is a Brevo list the
|
|
4425
|
+
* school is in while it is in the mailable pool. */
|
|
4424
4426
|
group?: string | false;
|
|
4425
4427
|
url: string;
|
|
4426
4428
|
potential: string;
|
|
@@ -4514,9 +4516,16 @@ export type OutreachCampaign = {
|
|
|
4514
4516
|
};
|
|
4515
4517
|
/** `adminConfig/outreach`. */
|
|
4516
4518
|
export type OutreachConfig = {
|
|
4517
|
-
|
|
4519
|
+
/** Legacy: no longer used. Schools go into their group's list in the Marketing Contacts folder. */
|
|
4520
|
+
marketingListId?: number;
|
|
4518
4521
|
customersListId: number;
|
|
4519
4522
|
webhookId?: number;
|
|
4523
|
+
/** The Brevo "Marketing Contacts" folder holding one list per group. */
|
|
4524
|
+
folderId?: number;
|
|
4525
|
+
/** Brevo list id per outreach group name (list named as the group), created on first use. */
|
|
4526
|
+
groupLists?: {
|
|
4527
|
+
[group: string]: number;
|
|
4528
|
+
};
|
|
4520
4529
|
backfill?: {
|
|
4521
4530
|
cursorUrn?: number;
|
|
4522
4531
|
done: boolean;
|
package/package.json
CHANGED
|
@@ -4,13 +4,17 @@ import {outreachCallables} from "../outreach";
|
|
|
4
4
|
* breaks the web or backend payload fails here first. */
|
|
5
5
|
const samples: {[K in keyof typeof outreachCallables]: {request: unknown, response: unknown}} = {
|
|
6
6
|
"outreach-upsertContacts": {
|
|
7
|
-
request: {rows: [{urn: "100000", affiliation: "Test School", email: "head@test.sch.uk"}], dryRun: true},
|
|
7
|
+
request: {rows: [{urn: "100000", affiliation: "Test School", email: "head@test.sch.uk"}], dryRun: true, group: "Derby"},
|
|
8
8
|
response: {added: 1, updated: 0, keptStatus: 0, noEmail: 0, invalidEmail: 0, duplicateEmailInUpload: 0, skipped: [{row: 2, reason: "No URN"}]},
|
|
9
9
|
},
|
|
10
10
|
"outreach-setStatus": {
|
|
11
11
|
request: {urn: 100000, status: "deferred", deferUntil: "2027-09-28", reason: "Next year"},
|
|
12
12
|
response: {urn: 100000, status: "deferred", brevoSynced: true, affectedUrns: [100000]},
|
|
13
13
|
},
|
|
14
|
+
"outreach-setGroup": {
|
|
15
|
+
request: {urn: 100000, group: "Derby"},
|
|
16
|
+
response: {urn: 100000, group: "Derby", brevoSynced: true, affectedUrns: [100000]},
|
|
17
|
+
},
|
|
14
18
|
"outreach-convertToLead": {
|
|
15
19
|
request: {urn: 100000, lead: {forename: "Jo", surname: "Bloggs", email: "jo@test.sch.uk", organisation: "Test School", assignee: "uid1"}},
|
|
16
20
|
response: {leadId: "lead1"},
|
|
@@ -21,7 +25,7 @@ const samples: {[K in keyof typeof outreachCallables]: {request: unknown, respon
|
|
|
21
25
|
},
|
|
22
26
|
"outreach-setupBrevo": {
|
|
23
27
|
request: {},
|
|
24
|
-
response: {
|
|
28
|
+
response: {folderId: 12, customersListId: 80, webhookId: 5, attributesCreated: ["URN"]},
|
|
25
29
|
},
|
|
26
30
|
"outreach-migrateExisting": {
|
|
27
31
|
request: {},
|
|
@@ -51,6 +55,11 @@ describe("outreach contracts", () => {
|
|
|
51
55
|
.safeParse({urn: 1, status: "deferred", deferUntil: "28/09/2027"}).success).toBe(false);
|
|
52
56
|
});
|
|
53
57
|
|
|
58
|
+
it("rejects a blank group name", () => {
|
|
59
|
+
expect(outreachCallables["outreach-upsertContacts"].request
|
|
60
|
+
.safeParse({rows: [{urn: "1"}], group: " "}).success).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
|
|
54
63
|
it("rejects an empty upload", () => {
|
|
55
64
|
expect(outreachCallables["outreach-upsertContacts"].request.safeParse({rows: []}).success).toBe(false);
|
|
56
65
|
});
|
|
@@ -14,12 +14,17 @@ const outreachStatus = z.enum(["pool", "lead", "deferred", "customer", "doNotCon
|
|
|
14
14
|
/** A pasted spreadsheet row keyed by DFE_CONTACT_UPLOAD_COLUMNS. Raw strings; the backend coerces. */
|
|
15
15
|
const uploadRow = z.record(z.string(), z.string().optional());
|
|
16
16
|
|
|
17
|
+
/** An outreach group name, which is also its Brevo list name. */
|
|
18
|
+
const groupName = z.string().trim().min(1, "Name the group.").max(60, "Keep group names under 60 characters.");
|
|
19
|
+
|
|
17
20
|
const isoDate = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Use a YYYY-MM-DD date.");
|
|
18
21
|
|
|
19
22
|
export const outreachCallables = {
|
|
20
23
|
"outreach-upsertContacts": {
|
|
21
24
|
request: z.object({
|
|
22
25
|
rows: z.array(uploadRow).min(1).max(2000),
|
|
26
|
+
/** Group for rows whose group column is blank (created in Brevo if new). A row's own group wins. */
|
|
27
|
+
group: groupName.optional(),
|
|
23
28
|
/** Count what would happen without writing to Firestore or Brevo. */
|
|
24
29
|
dryRun: z.boolean().optional(),
|
|
25
30
|
}),
|
|
@@ -32,6 +37,8 @@ export const outreachCallables = {
|
|
|
32
37
|
invalidEmail: z.number(),
|
|
33
38
|
duplicateEmailInUpload: z.number(),
|
|
34
39
|
skipped: z.array(z.object({row: z.number(), urn: z.string().optional(), reason: z.string()})),
|
|
40
|
+
/** Rows put in each group by this upload. */
|
|
41
|
+
groups: z.record(z.string(), z.number()).optional(),
|
|
35
42
|
brevoProcessId: z.number().optional(),
|
|
36
43
|
brevoError: z.string().optional(),
|
|
37
44
|
}),
|
|
@@ -57,6 +64,20 @@ export const outreachCallables = {
|
|
|
57
64
|
affectedUrns: z.array(z.number()),
|
|
58
65
|
}),
|
|
59
66
|
},
|
|
67
|
+
"outreach-setGroup": {
|
|
68
|
+
request: z.object({
|
|
69
|
+
urn: z.number(),
|
|
70
|
+
/** The school's group; null takes it out of any group. */
|
|
71
|
+
group: groupName.nullable(),
|
|
72
|
+
applyToSharedEmail: z.boolean().optional(),
|
|
73
|
+
}),
|
|
74
|
+
response: z.object({
|
|
75
|
+
urn: z.number(),
|
|
76
|
+
group: z.string().nullable(),
|
|
77
|
+
brevoSynced: z.boolean(),
|
|
78
|
+
affectedUrns: z.array(z.number()),
|
|
79
|
+
}),
|
|
80
|
+
},
|
|
60
81
|
"outreach-convertToLead": {
|
|
61
82
|
request: z.object({
|
|
62
83
|
urn: z.number(),
|
|
@@ -89,7 +110,8 @@ export const outreachCallables = {
|
|
|
89
110
|
"outreach-setupBrevo": {
|
|
90
111
|
request: z.object({}),
|
|
91
112
|
response: z.object({
|
|
92
|
-
|
|
113
|
+
/** The Brevo "Marketing Contacts" folder the group lists live in. */
|
|
114
|
+
folderId: z.number(),
|
|
93
115
|
customersListId: z.number(),
|
|
94
116
|
webhookId: z.number(),
|
|
95
117
|
attributesCreated: z.array(z.string()),
|
package/src/typeDefinitions.ts
CHANGED
|
@@ -4573,6 +4573,8 @@ export type DfESchoolContact = {
|
|
|
4573
4573
|
city: string,
|
|
4574
4574
|
doesWex?: boolean,
|
|
4575
4575
|
notes?: string,
|
|
4576
|
+
/** Outreach group (e.g. "Derby"), false for none. Each group is a Brevo list the
|
|
4577
|
+
* school is in while it is in the mailable pool. */
|
|
4576
4578
|
group?: string|false,
|
|
4577
4579
|
url: string,
|
|
4578
4580
|
potential: string,
|
|
@@ -4667,9 +4669,14 @@ export type OutreachCampaign = {
|
|
|
4667
4669
|
|
|
4668
4670
|
/** `adminConfig/outreach`. */
|
|
4669
4671
|
export type OutreachConfig = {
|
|
4670
|
-
|
|
4672
|
+
/** Legacy: no longer used. Schools go into their group's list in the Marketing Contacts folder. */
|
|
4673
|
+
marketingListId?: number,
|
|
4671
4674
|
customersListId: number,
|
|
4672
4675
|
webhookId?: number,
|
|
4676
|
+
/** The Brevo "Marketing Contacts" folder holding one list per group. */
|
|
4677
|
+
folderId?: number,
|
|
4678
|
+
/** Brevo list id per outreach group name (list named as the group), created on first use. */
|
|
4679
|
+
groupLists?: {[group: string]: number},
|
|
4673
4680
|
backfill?: {cursorUrn?: number, done: boolean, total: number, processed?: number},
|
|
4674
4681
|
lastSweepAt?: string,
|
|
4675
4682
|
lastReconcile?: {
|