@substrat-run/engine-notifications 0.0.0-stage → 0.3.1
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/LICENSE +661 -0
- package/README.md +172 -2
- package/dist/entities.d.ts +200 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +150 -0
- package/dist/entities.js.map +1 -0
- package/dist/events.d.ts +212 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +20 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +411 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +889 -0
- package/dist/index.js.map +1 -0
- package/dist/model.d.ts +11 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +18 -0
- package/dist/model.js.map +1 -0
- package/dist/operations.d.ts +243 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +139 -0
- package/dist/operations.js.map +1 -0
- package/dist/render.d.ts +60 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +84 -0
- package/dist/render.js.map +1 -0
- package/dist/seam.d.ts +5 -0
- package/dist/seam.d.ts.map +1 -0
- package/dist/seam.js +14 -0
- package/dist/seam.js.map +1 -0
- package/package.json +50 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/model.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The artifact of record for this engine (#697/#844, #976).
|
|
3
|
+
*
|
|
4
|
+
* `pnpm lint:model --check` re-emits this into `engines/notifications/model.json`, so a
|
|
5
|
+
* changed table or field has to appear in a PR diff. It describes the engine with no topics:
|
|
6
|
+
* the topics are a composing vertical's declaration, and appear in THAT vertical's manifest.
|
|
7
|
+
*
|
|
8
|
+
* Imported by nothing, so the direction stays acyclic.
|
|
9
|
+
*/
|
|
10
|
+
export declare const notificationsModel: import("@substrat-run/contracts").EmittedModel;
|
|
11
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,gDAG7B,CAAC"}
|
package/dist/model.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { emitModel } from '@substrat-run/contracts';
|
|
2
|
+
import { notificationsEntities } from './entities.js';
|
|
3
|
+
import { notificationsManifest } from './index.js';
|
|
4
|
+
import { notificationsOperations } from './operations.js';
|
|
5
|
+
/**
|
|
6
|
+
* The artifact of record for this engine (#697/#844, #976).
|
|
7
|
+
*
|
|
8
|
+
* `pnpm lint:model --check` re-emits this into `engines/notifications/model.json`, so a
|
|
9
|
+
* changed table or field has to appear in a PR diff. It describes the engine with no topics:
|
|
10
|
+
* the topics are a composing vertical's declaration, and appear in THAT vertical's manifest.
|
|
11
|
+
*
|
|
12
|
+
* Imported by nothing, so the direction stays acyclic.
|
|
13
|
+
*/
|
|
14
|
+
export const notificationsModel = emitModel(notificationsEntities, {
|
|
15
|
+
version: notificationsManifest.version,
|
|
16
|
+
operations: notificationsOperations,
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC,qBAAqB,EAAE;IACjE,OAAO,EAAE,qBAAqB,CAAC,OAAO;IACtC,UAAU,EAAE,uBAAuB;CACpC,CAAC,CAAC"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The notifications engine's declared operation surface.
|
|
3
|
+
*
|
|
4
|
+
* Two audiences. A person manages their OWN notifications — where they go, and which topics
|
|
5
|
+
* reach them — and reads their own delivery history, under `notifications:self`, and every one
|
|
6
|
+
* of those operations acts on the caller's principal and takes no principal as input, so holding
|
|
7
|
+
* the key never reaches anybody else's address or deliveries. An administrator reads the
|
|
8
|
+
* delivery log for the scope under `notifications:read`, which is how "why did nobody hear about
|
|
9
|
+
* this" gets an answer. The third key, `notifications:send-digests`, is the digest schedule's:
|
|
10
|
+
* the engine's system principal holds it, and the manifest declares it `holder: 'system'`, so
|
|
11
|
+
* `lint:permissions` refuses a role or entity grant shape that would hand it to a person.
|
|
12
|
+
*
|
|
13
|
+
* Node checks only, and that is the design: the entities are a person's own preferences and
|
|
14
|
+
* a log about the scope, neither of which narrows to a record somebody else holds a grant on.
|
|
15
|
+
*
|
|
16
|
+
* No `http`: an engine owns no URL shape; a composing vertical binds these with
|
|
17
|
+
* `defineEngineRoutes`.
|
|
18
|
+
*/
|
|
19
|
+
import { z } from '@substrat-run/contracts';
|
|
20
|
+
/** The keys these operations check. Mirrors `NOTIFICATIONS_PERM` in index.ts. */
|
|
21
|
+
export declare const NOTIFICATIONS_PERMISSIONS: readonly ['notifications:self', 'notifications:read', 'notifications:send-digests'];
|
|
22
|
+
/** The channels a delivery can go out on. One today; the enum is where the next one is added. */
|
|
23
|
+
export declare const notificationChannel: z.ZodEnum<{
|
|
24
|
+
email: "email";
|
|
25
|
+
}>;
|
|
26
|
+
export type NotificationChannel = z.infer<typeof notificationChannel>;
|
|
27
|
+
/**
|
|
28
|
+
* When a topic reaches a person: `immediate`, one mail per occasion, or held for their
|
|
29
|
+
* `daily-digest`. Immediate is the default and is never stored.
|
|
30
|
+
*/
|
|
31
|
+
export declare const notificationCadence: z.ZodEnum<{
|
|
32
|
+
"daily-digest": "daily-digest";
|
|
33
|
+
immediate: "immediate";
|
|
34
|
+
}>;
|
|
35
|
+
export type NotificationCadence = z.infer<typeof notificationCadence>;
|
|
36
|
+
/** One topic as a person sees it on their own preferences screen. */
|
|
37
|
+
export declare const topicPreference: z.ZodObject<{
|
|
38
|
+
topic: z.ZodString;
|
|
39
|
+
description: z.ZodString;
|
|
40
|
+
channel: z.ZodEnum<{
|
|
41
|
+
email: "email";
|
|
42
|
+
}>;
|
|
43
|
+
enabled: z.ZodBoolean;
|
|
44
|
+
required: z.ZodBoolean;
|
|
45
|
+
cadence: z.ZodEnum<{
|
|
46
|
+
"daily-digest": "daily-digest";
|
|
47
|
+
immediate: "immediate";
|
|
48
|
+
}>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
export declare const myPreferences: z.ZodObject<{
|
|
51
|
+
email: z.ZodNullable<z.ZodString>;
|
|
52
|
+
topics: z.ZodArray<z.ZodObject<{
|
|
53
|
+
topic: z.ZodString;
|
|
54
|
+
description: z.ZodString;
|
|
55
|
+
channel: z.ZodEnum<{
|
|
56
|
+
email: "email";
|
|
57
|
+
}>;
|
|
58
|
+
enabled: z.ZodBoolean;
|
|
59
|
+
required: z.ZodBoolean;
|
|
60
|
+
cadence: z.ZodEnum<{
|
|
61
|
+
"daily-digest": "daily-digest";
|
|
62
|
+
immediate: "immediate";
|
|
63
|
+
}>;
|
|
64
|
+
}, z.core.$strip>>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
export declare const notificationsOperations: {
|
|
67
|
+
readonly 'notifications/my-preferences': {
|
|
68
|
+
readonly summary: "The caller's notification address and every topic's switch";
|
|
69
|
+
readonly permission: "notifications:self";
|
|
70
|
+
readonly input: z.ZodObject<{}, z.core.$strip>;
|
|
71
|
+
readonly inputOptional: true;
|
|
72
|
+
readonly output: z.ZodObject<{
|
|
73
|
+
email: z.ZodNullable<z.ZodString>;
|
|
74
|
+
topics: z.ZodArray<z.ZodObject<{
|
|
75
|
+
topic: z.ZodString;
|
|
76
|
+
description: z.ZodString;
|
|
77
|
+
channel: z.ZodEnum<{
|
|
78
|
+
email: "email";
|
|
79
|
+
}>;
|
|
80
|
+
enabled: z.ZodBoolean;
|
|
81
|
+
required: z.ZodBoolean;
|
|
82
|
+
cadence: z.ZodEnum<{
|
|
83
|
+
"daily-digest": "daily-digest";
|
|
84
|
+
immediate: "immediate";
|
|
85
|
+
}>;
|
|
86
|
+
}, z.core.$strip>>;
|
|
87
|
+
}, z.core.$strip>;
|
|
88
|
+
};
|
|
89
|
+
readonly 'notifications/set-my-address': {
|
|
90
|
+
readonly summary: "Set or clear where the caller's notifications go";
|
|
91
|
+
readonly permission: "notifications:self";
|
|
92
|
+
readonly input: z.ZodObject<{
|
|
93
|
+
email: z.ZodNullable<z.ZodString>;
|
|
94
|
+
}, z.core.$strip>;
|
|
95
|
+
readonly output: z.ZodObject<{
|
|
96
|
+
email: z.ZodNullable<z.ZodString>;
|
|
97
|
+
topics: z.ZodArray<z.ZodObject<{
|
|
98
|
+
topic: z.ZodString;
|
|
99
|
+
description: z.ZodString;
|
|
100
|
+
channel: z.ZodEnum<{
|
|
101
|
+
email: "email";
|
|
102
|
+
}>;
|
|
103
|
+
enabled: z.ZodBoolean;
|
|
104
|
+
required: z.ZodBoolean;
|
|
105
|
+
cadence: z.ZodEnum<{
|
|
106
|
+
"daily-digest": "daily-digest";
|
|
107
|
+
immediate: "immediate";
|
|
108
|
+
}>;
|
|
109
|
+
}, z.core.$strip>>;
|
|
110
|
+
}, z.core.$strip>;
|
|
111
|
+
};
|
|
112
|
+
readonly 'notifications/set-my-preference': {
|
|
113
|
+
readonly summary: "Switch one topic on or off for the caller, on one channel, and choose when it arrives";
|
|
114
|
+
readonly permission: "notifications:self";
|
|
115
|
+
readonly input: z.ZodObject<{
|
|
116
|
+
topic: z.ZodString;
|
|
117
|
+
channel: z.ZodDefault<z.ZodEnum<{
|
|
118
|
+
email: "email";
|
|
119
|
+
}>>;
|
|
120
|
+
enabled: z.ZodBoolean;
|
|
121
|
+
cadence: z.ZodOptional<z.ZodEnum<{
|
|
122
|
+
"daily-digest": "daily-digest";
|
|
123
|
+
immediate: "immediate";
|
|
124
|
+
}>>;
|
|
125
|
+
}, z.core.$strip>;
|
|
126
|
+
readonly output: z.ZodObject<{
|
|
127
|
+
email: z.ZodNullable<z.ZodString>;
|
|
128
|
+
topics: z.ZodArray<z.ZodObject<{
|
|
129
|
+
topic: z.ZodString;
|
|
130
|
+
description: z.ZodString;
|
|
131
|
+
channel: z.ZodEnum<{
|
|
132
|
+
email: "email";
|
|
133
|
+
}>;
|
|
134
|
+
enabled: z.ZodBoolean;
|
|
135
|
+
required: z.ZodBoolean;
|
|
136
|
+
cadence: z.ZodEnum<{
|
|
137
|
+
"daily-digest": "daily-digest";
|
|
138
|
+
immediate: "immediate";
|
|
139
|
+
}>;
|
|
140
|
+
}, z.core.$strip>>;
|
|
141
|
+
}, z.core.$strip>;
|
|
142
|
+
};
|
|
143
|
+
readonly 'notifications/list-deliveries': {
|
|
144
|
+
readonly summary: "What became of each notification, newest first";
|
|
145
|
+
readonly permission: "notifications:read";
|
|
146
|
+
readonly input: z.ZodObject<{
|
|
147
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
148
|
+
dead_lettered: "dead_lettered";
|
|
149
|
+
refused: "refused";
|
|
150
|
+
requested: "requested";
|
|
151
|
+
sent: "sent";
|
|
152
|
+
skipped: "skipped";
|
|
153
|
+
}>>;
|
|
154
|
+
topic: z.ZodOptional<z.ZodString>;
|
|
155
|
+
principal: z.ZodOptional<z.ZodString>;
|
|
156
|
+
}, z.core.$strip>;
|
|
157
|
+
readonly inputOptional: true;
|
|
158
|
+
readonly output: z.ZodObject<{
|
|
159
|
+
id: z.ZodString;
|
|
160
|
+
topic: z.ZodString;
|
|
161
|
+
dedupe_key: z.ZodString;
|
|
162
|
+
principal: z.ZodString;
|
|
163
|
+
channel: z.ZodString;
|
|
164
|
+
status: z.ZodEnum<{
|
|
165
|
+
dead_lettered: "dead_lettered";
|
|
166
|
+
refused: "refused";
|
|
167
|
+
requested: "requested";
|
|
168
|
+
sent: "sent";
|
|
169
|
+
skipped: "skipped";
|
|
170
|
+
}>;
|
|
171
|
+
reason: z.ZodNullable<z.ZodString>;
|
|
172
|
+
request_id: z.ZodNullable<z.ZodString>;
|
|
173
|
+
about_type: z.ZodNullable<z.ZodString>;
|
|
174
|
+
about_id: z.ZodNullable<z.ZodString>;
|
|
175
|
+
created_at: z.ZodString;
|
|
176
|
+
settled_at: z.ZodNullable<z.ZodString>;
|
|
177
|
+
}, z.core.$strip>;
|
|
178
|
+
readonly paged: {
|
|
179
|
+
readonly over: {
|
|
180
|
+
readonly entity: "notification-delivery";
|
|
181
|
+
readonly sortable: readonly ["created_at"];
|
|
182
|
+
readonly filterable: readonly ["status", "topic", "principal"];
|
|
183
|
+
};
|
|
184
|
+
readonly order: "desc";
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
readonly 'notifications/my-deliveries': {
|
|
188
|
+
readonly summary: "What became of each notification sent to the caller, newest first";
|
|
189
|
+
readonly permission: "notifications:self";
|
|
190
|
+
readonly input: z.ZodObject<{
|
|
191
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
192
|
+
dead_lettered: "dead_lettered";
|
|
193
|
+
refused: "refused";
|
|
194
|
+
requested: "requested";
|
|
195
|
+
sent: "sent";
|
|
196
|
+
skipped: "skipped";
|
|
197
|
+
}>>;
|
|
198
|
+
topic: z.ZodOptional<z.ZodString>;
|
|
199
|
+
}, z.core.$strip>;
|
|
200
|
+
readonly inputOptional: true;
|
|
201
|
+
readonly output: z.ZodObject<{
|
|
202
|
+
id: z.ZodString;
|
|
203
|
+
topic: z.ZodString;
|
|
204
|
+
channel: z.ZodString;
|
|
205
|
+
status: z.ZodEnum<{
|
|
206
|
+
dead_lettered: "dead_lettered";
|
|
207
|
+
refused: "refused";
|
|
208
|
+
requested: "requested";
|
|
209
|
+
sent: "sent";
|
|
210
|
+
skipped: "skipped";
|
|
211
|
+
}>;
|
|
212
|
+
reason: z.ZodNullable<z.ZodString>;
|
|
213
|
+
about_type: z.ZodNullable<z.ZodString>;
|
|
214
|
+
about_id: z.ZodNullable<z.ZodString>;
|
|
215
|
+
created_at: z.ZodString;
|
|
216
|
+
settled_at: z.ZodNullable<z.ZodString>;
|
|
217
|
+
}, z.core.$strip>;
|
|
218
|
+
readonly paged: {
|
|
219
|
+
readonly over: {
|
|
220
|
+
readonly entity: "notification-delivery";
|
|
221
|
+
readonly sortable: readonly ["created_at"];
|
|
222
|
+
readonly filterable: readonly ["status", "topic"];
|
|
223
|
+
};
|
|
224
|
+
readonly order: "desc";
|
|
225
|
+
};
|
|
226
|
+
};
|
|
227
|
+
readonly 'notifications/send-digests': {
|
|
228
|
+
readonly summary: "Send each person whose digest is due one mail of what was held for it";
|
|
229
|
+
readonly permission: "notifications:send-digests";
|
|
230
|
+
readonly input: z.ZodObject<{}, z.core.$strip>;
|
|
231
|
+
readonly inputOptional: true;
|
|
232
|
+
readonly output: z.ZodObject<{
|
|
233
|
+
digests: z.ZodNumber;
|
|
234
|
+
items: z.ZodNumber;
|
|
235
|
+
failed: z.ZodNumber;
|
|
236
|
+
deferred: z.ZodNumber;
|
|
237
|
+
quarantined: z.ZodNumber;
|
|
238
|
+
released: z.ZodNumber;
|
|
239
|
+
withdrawn: z.ZodNumber;
|
|
240
|
+
}, z.core.$strip>;
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAoB,CAAC,EAAE,MAAM,yBAAyB,CAAC;AAG9D,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,YAAI,oBAAoB,EAAE,oBAAoB,EAAE,4BAA4B,CAAU,CAAC;AAE7H,iGAAiG;AACjG,eAAO,MAAM,mBAAmB;;EAAoB,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;EAAkD,CAAC;AACnF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,qEAAqE;AACrE,eAAO,MAAM,eAAe;;;;;;;;;;;;iBAS1B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;iBAIxB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGlC,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The notifications engine's declared operation surface.
|
|
3
|
+
*
|
|
4
|
+
* Two audiences. A person manages their OWN notifications — where they go, and which topics
|
|
5
|
+
* reach them — and reads their own delivery history, under `notifications:self`, and every one
|
|
6
|
+
* of those operations acts on the caller's principal and takes no principal as input, so holding
|
|
7
|
+
* the key never reaches anybody else's address or deliveries. An administrator reads the
|
|
8
|
+
* delivery log for the scope under `notifications:read`, which is how "why did nobody hear about
|
|
9
|
+
* this" gets an answer. The third key, `notifications:send-digests`, is the digest schedule's:
|
|
10
|
+
* the engine's system principal holds it, and the manifest declares it `holder: 'system'`, so
|
|
11
|
+
* `lint:permissions` refuses a role or entity grant shape that would hand it to a person.
|
|
12
|
+
*
|
|
13
|
+
* Node checks only, and that is the design: the entities are a person's own preferences and
|
|
14
|
+
* a log about the scope, neither of which narrows to a record somebody else holds a grant on.
|
|
15
|
+
*
|
|
16
|
+
* No `http`: an engine owns no URL shape; a composing vertical binds these with
|
|
17
|
+
* `defineEngineRoutes`.
|
|
18
|
+
*/
|
|
19
|
+
import { defineOperations, z } from '@substrat-run/contracts';
|
|
20
|
+
import { deliveryRow, digestCadence, myDeliveryRow, notificationsEntities } from './entities.js';
|
|
21
|
+
/** The keys these operations check. Mirrors `NOTIFICATIONS_PERM` in index.ts. */
|
|
22
|
+
export const NOTIFICATIONS_PERMISSIONS = ['notifications:self', 'notifications:read', 'notifications:send-digests'];
|
|
23
|
+
/** The channels a delivery can go out on. One today; the enum is where the next one is added. */
|
|
24
|
+
export const notificationChannel = z.enum(['email']);
|
|
25
|
+
/**
|
|
26
|
+
* When a topic reaches a person: `immediate`, one mail per occasion, or held for their
|
|
27
|
+
* `daily-digest`. Immediate is the default and is never stored.
|
|
28
|
+
*/
|
|
29
|
+
export const notificationCadence = z.enum(['immediate', ...digestCadence.options]);
|
|
30
|
+
/** One topic as a person sees it on their own preferences screen. */
|
|
31
|
+
export const topicPreference = z.object({
|
|
32
|
+
topic: z.string(),
|
|
33
|
+
description: z.string(),
|
|
34
|
+
channel: notificationChannel,
|
|
35
|
+
enabled: z.boolean(),
|
|
36
|
+
/** A required topic cannot be switched off — a security notice, a signature to give. */
|
|
37
|
+
required: z.boolean(),
|
|
38
|
+
/** When it reaches them. A required topic is always `immediate`. */
|
|
39
|
+
cadence: notificationCadence,
|
|
40
|
+
});
|
|
41
|
+
export const myPreferences = z.object({
|
|
42
|
+
/** Where this person's notifications go; null until they (or the vertical on their behalf) set one. */
|
|
43
|
+
email: z.string().nullable(),
|
|
44
|
+
topics: z.array(topicPreference),
|
|
45
|
+
});
|
|
46
|
+
export const notificationsOperations = defineOperations(notificationsEntities, NOTIFICATIONS_PERMISSIONS)({
|
|
47
|
+
'notifications/my-preferences': {
|
|
48
|
+
summary: "The caller's notification address and every topic's switch",
|
|
49
|
+
permission: 'notifications:self',
|
|
50
|
+
input: z.object({}),
|
|
51
|
+
inputOptional: true,
|
|
52
|
+
output: myPreferences,
|
|
53
|
+
},
|
|
54
|
+
'notifications/set-my-address': {
|
|
55
|
+
summary: "Set or clear where the caller's notifications go",
|
|
56
|
+
permission: 'notifications:self',
|
|
57
|
+
// `null` clears it: every topic then records `skipped: no_address` for this person.
|
|
58
|
+
input: z.object({ email: z.string().email().nullable() }),
|
|
59
|
+
output: myPreferences,
|
|
60
|
+
},
|
|
61
|
+
'notifications/set-my-preference': {
|
|
62
|
+
summary: 'Switch one topic on or off for the caller, on one channel, and choose when it arrives',
|
|
63
|
+
permission: 'notifications:self',
|
|
64
|
+
input: z.object({
|
|
65
|
+
topic: z.string().min(1),
|
|
66
|
+
channel: notificationChannel.default('email'),
|
|
67
|
+
enabled: z.boolean(),
|
|
68
|
+
// Absent leaves the cadence as it is. A required topic refuses `daily-digest`.
|
|
69
|
+
cadence: notificationCadence.optional(),
|
|
70
|
+
}),
|
|
71
|
+
output: myPreferences,
|
|
72
|
+
},
|
|
73
|
+
'notifications/list-deliveries': {
|
|
74
|
+
summary: 'What became of each notification, newest first',
|
|
75
|
+
permission: 'notifications:read',
|
|
76
|
+
input: z.object({
|
|
77
|
+
status: deliveryRow.shape.status.optional(),
|
|
78
|
+
topic: z.string().optional(),
|
|
79
|
+
principal: z.string().optional(),
|
|
80
|
+
}),
|
|
81
|
+
inputOptional: true,
|
|
82
|
+
output: deliveryRow,
|
|
83
|
+
paged: {
|
|
84
|
+
over: {
|
|
85
|
+
entity: 'notification-delivery',
|
|
86
|
+
sortable: ['created_at'],
|
|
87
|
+
filterable: ['status', 'topic', 'principal'],
|
|
88
|
+
},
|
|
89
|
+
order: 'desc',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
'notifications/my-deliveries': {
|
|
93
|
+
summary: 'What became of each notification sent to the caller, newest first',
|
|
94
|
+
permission: 'notifications:self',
|
|
95
|
+
// No `principal`: the caller's own id is pinned in the handler, and an input that named
|
|
96
|
+
// someone else's would be the whole log under the wrong key. `principal` is filterable on
|
|
97
|
+
// this entity already (`list-deliveries` declares it, and a scope indexes the union), so
|
|
98
|
+
// it is not repeated here, where the emitted document would advertise a parameter that
|
|
99
|
+
// does nothing.
|
|
100
|
+
input: z.object({
|
|
101
|
+
status: deliveryRow.shape.status.optional(),
|
|
102
|
+
topic: z.string().optional(),
|
|
103
|
+
}),
|
|
104
|
+
inputOptional: true,
|
|
105
|
+
output: myDeliveryRow,
|
|
106
|
+
paged: {
|
|
107
|
+
over: {
|
|
108
|
+
entity: 'notification-delivery',
|
|
109
|
+
sortable: ['created_at'],
|
|
110
|
+
filterable: ['status', 'topic'],
|
|
111
|
+
},
|
|
112
|
+
order: 'desc',
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
'notifications/send-digests': {
|
|
116
|
+
summary: 'Send each person whose digest is due one mail of what was held for it',
|
|
117
|
+
// The digest schedule's key, held by the engine's system principal: no person needs it.
|
|
118
|
+
permission: 'notifications:send-digests',
|
|
119
|
+
input: z.object({}),
|
|
120
|
+
inputOptional: true,
|
|
121
|
+
output: z.object({
|
|
122
|
+
/** People who were sent a digest, or had one recorded as skipped for want of an address. */
|
|
123
|
+
digests: z.number().int(),
|
|
124
|
+
/** The occasions those digests carried. */
|
|
125
|
+
items: z.number().int(),
|
|
126
|
+
/** People whose digest could not be composed; theirs stay held, and a window passes before the next try. */
|
|
127
|
+
failed: z.number().int(),
|
|
128
|
+
/** People who were due but left for a later pass, for want of room in the scope's send backlog. */
|
|
129
|
+
deferred: z.number().int(),
|
|
130
|
+
/** Held occasions found unreadable and set aside this pass, unsent. */
|
|
131
|
+
quarantined: z.number().int(),
|
|
132
|
+
/** Set-aside occasions that read again this pass and are held for the digest once more. */
|
|
133
|
+
released: z.number().int(),
|
|
134
|
+
/** Held occasions withdrawn this pass, unsent, because their person has switched the topic off since. */
|
|
135
|
+
withdrawn: z.number().int(),
|
|
136
|
+
}),
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The template renderer: `{{name}}` placeholders filled from the topic's variables.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately not a template language. A topic's text is the vertical's vocabulary, and the
|
|
5
|
+
* one thing it needs from a renderer is substitution that cannot be turned against the
|
|
6
|
+
* reader: a variable comes from event data — a title somebody typed — so it is HTML-escaped
|
|
7
|
+
* wherever it lands in the HTML part, and stripped of line breaks in the subject, which is a
|
|
8
|
+
* header. No conditionals or loops: a message that needs them is two topics, or a variable
|
|
9
|
+
* the vertical composes.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* A template as a topic declares it. `html` is optional; without it, the text is escaped into one.
|
|
13
|
+
* It may be a fragment or a whole document (`<!doctype html><html>…`); a digest of several
|
|
14
|
+
* messages keeps a fragment as it is and uses the text part in place of a document, which cannot
|
|
15
|
+
* nest inside another.
|
|
16
|
+
*/
|
|
17
|
+
export interface NotificationTemplate {
|
|
18
|
+
subject: string;
|
|
19
|
+
text: string;
|
|
20
|
+
html?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface RenderedMessage {
|
|
23
|
+
subject: string;
|
|
24
|
+
text: string;
|
|
25
|
+
html: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Why a render refused: a placeholder with no variable, or a part — subject, text or a
|
|
29
|
+
* declared html — that came out empty because every word of it was a blank variable. The
|
|
30
|
+
* platform refuses an empty part, so it is caught here, where the reason names the part.
|
|
31
|
+
*/
|
|
32
|
+
type RenderResult = {
|
|
33
|
+
ok: true;
|
|
34
|
+
message: RenderedMessage;
|
|
35
|
+
} | {
|
|
36
|
+
ok: false;
|
|
37
|
+
reason: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Render `template` with `vars`. A placeholder with no variable is reported, never rendered
|
|
41
|
+
* as empty: a mail reading "Assigned: " is worse than none, and the caller records why.
|
|
42
|
+
*/
|
|
43
|
+
export declare function render(template: NotificationTemplate, vars: Readonly<Record<string, string>>): RenderResult;
|
|
44
|
+
/**
|
|
45
|
+
* One mail out of the messages held for a person's digest, oldest first.
|
|
46
|
+
*
|
|
47
|
+
* Every word in it is the vertical's: a digest of one message is that message, and a digest of
|
|
48
|
+
* several is the first one's subject marked `(+N)`, with each message under its own subject.
|
|
49
|
+
* The engine adds only that count and the rules between them, so a workshop that writes its
|
|
50
|
+
* notifications in Swedish does not receive an English digest. Each message was rendered — and
|
|
51
|
+
* its variables escaped — when it was held; a subject is header text, so it is escaped here
|
|
52
|
+
* before it becomes a heading.
|
|
53
|
+
*
|
|
54
|
+
* The several come out as ONE document's body. A message whose html is a whole document — a
|
|
55
|
+
* branded template with its own `<html>` and `<head>` — cannot be nested in it, so its text part
|
|
56
|
+
* stands in for it, rendered the way a template without html is.
|
|
57
|
+
*/
|
|
58
|
+
export declare function digestOf(messages: readonly RenderedMessage[]): RenderedMessage;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,KAAK,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAmB3F;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,YAAY,CAe3G;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,CAY9E"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The template renderer: `{{name}}` placeholders filled from the topic's variables.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately not a template language. A topic's text is the vertical's vocabulary, and the
|
|
5
|
+
* one thing it needs from a renderer is substitution that cannot be turned against the
|
|
6
|
+
* reader: a variable comes from event data — a title somebody typed — so it is HTML-escaped
|
|
7
|
+
* wherever it lands in the HTML part, and stripped of line breaks in the subject, which is a
|
|
8
|
+
* header. No conditionals or loops: a message that needs them is two topics, or a variable
|
|
9
|
+
* the vertical composes.
|
|
10
|
+
*/
|
|
11
|
+
const PLACEHOLDER = /\{\{\s*([A-Za-z0-9_.-]+)\s*\}\}/g;
|
|
12
|
+
const ESCAPES = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' };
|
|
13
|
+
function escapeHtml(value) {
|
|
14
|
+
return value.replace(/[&<>"']/g, (c) => ESCAPES[c]);
|
|
15
|
+
}
|
|
16
|
+
/** Every placeholder a template names. */
|
|
17
|
+
function placeholdersOf(template) {
|
|
18
|
+
const names = new Set();
|
|
19
|
+
for (const part of [template.subject, template.text, template.html ?? '']) {
|
|
20
|
+
for (const m of part.matchAll(PLACEHOLDER))
|
|
21
|
+
names.add(m[1]);
|
|
22
|
+
}
|
|
23
|
+
return [...names];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Render `template` with `vars`. A placeholder with no variable is reported, never rendered
|
|
27
|
+
* as empty: a mail reading "Assigned: " is worse than none, and the caller records why.
|
|
28
|
+
*/
|
|
29
|
+
export function render(template, vars) {
|
|
30
|
+
const missing = placeholdersOf(template).find((name) => !Object.hasOwn(vars, name));
|
|
31
|
+
if (missing !== undefined)
|
|
32
|
+
return { ok: false, reason: `missing_variable:${missing}` };
|
|
33
|
+
const fill = (part, encode) => part.replace(PLACEHOLDER, (_m, name) => encode(vars[name]));
|
|
34
|
+
const text = fill(template.text, (v) => v);
|
|
35
|
+
// A header: a line break in a value would end it. Collapse rather than refuse — the
|
|
36
|
+
// subject is still the right one, on one line.
|
|
37
|
+
const subject = fill(template.subject, (v) => v.replace(/[\r\n]+/g, ' ')).trim();
|
|
38
|
+
const html = template.html !== undefined ? fill(template.html, escapeHtml) : htmlOfText(text);
|
|
39
|
+
const empty = Object.entries({ subject, text, html }).find(([, part]) => part.trim() === '');
|
|
40
|
+
if (empty)
|
|
41
|
+
return { ok: false, reason: `empty_message:${empty[0]}` };
|
|
42
|
+
return { ok: true, message: { subject, text, html } };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* One mail out of the messages held for a person's digest, oldest first.
|
|
46
|
+
*
|
|
47
|
+
* Every word in it is the vertical's: a digest of one message is that message, and a digest of
|
|
48
|
+
* several is the first one's subject marked `(+N)`, with each message under its own subject.
|
|
49
|
+
* The engine adds only that count and the rules between them, so a workshop that writes its
|
|
50
|
+
* notifications in Swedish does not receive an English digest. Each message was rendered — and
|
|
51
|
+
* its variables escaped — when it was held; a subject is header text, so it is escaped here
|
|
52
|
+
* before it becomes a heading.
|
|
53
|
+
*
|
|
54
|
+
* The several come out as ONE document's body. A message whose html is a whole document — a
|
|
55
|
+
* branded template with its own `<html>` and `<head>` — cannot be nested in it, so its text part
|
|
56
|
+
* stands in for it, rendered the way a template without html is.
|
|
57
|
+
*/
|
|
58
|
+
export function digestOf(messages) {
|
|
59
|
+
const [first, ...rest] = messages;
|
|
60
|
+
if (first === undefined)
|
|
61
|
+
throw new Error('digestOf: a digest needs at least one message');
|
|
62
|
+
// The three parts and nothing else: a held row carries more, and a send intent refuses it.
|
|
63
|
+
if (rest.length === 0)
|
|
64
|
+
return { subject: first.subject, text: first.text, html: first.html };
|
|
65
|
+
return {
|
|
66
|
+
subject: `${first.subject} (+${rest.length})`,
|
|
67
|
+
text: messages.map((m) => `${m.subject}\n\n${m.text}`).join('\n\n----\n\n'),
|
|
68
|
+
html: messages
|
|
69
|
+
.map((m) => `<section>\n<h2>${escapeHtml(m.subject)}</h2>\n${isDocument(m.html) ? htmlOfText(m.text) : m.html}\n</section>`)
|
|
70
|
+
.join('\n<hr>\n'),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Whether an html part is a whole document rather than a fragment that can sit inside one. */
|
|
74
|
+
function isDocument(html) {
|
|
75
|
+
return /<!doctype|<html[\s>]|<head[\s>]|<body[\s>]/i.test(html);
|
|
76
|
+
}
|
|
77
|
+
/** The text part as HTML: escaped, paragraphs at blank lines, `<br>` at single breaks. */
|
|
78
|
+
function htmlOfText(text) {
|
|
79
|
+
return text
|
|
80
|
+
.split(/\r?\n\s*\r?\n/)
|
|
81
|
+
.map((para) => `<p>${escapeHtml(para.trim()).replace(/\r?\n/g, '<br>')}</p>`)
|
|
82
|
+
.join('\n');
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|