@baukit/notifications-core 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/dist/errors.d.ts +8 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +11 -0
  6. package/dist/errors.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +8 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/memory.d.ts +45 -0
  12. package/dist/memory.d.ts.map +1 -0
  13. package/dist/memory.js +104 -0
  14. package/dist/memory.js.map +1 -0
  15. package/dist/occurrences.d.ts +34 -0
  16. package/dist/occurrences.d.ts.map +1 -0
  17. package/dist/occurrences.js +84 -0
  18. package/dist/occurrences.js.map +1 -0
  19. package/dist/ownership.d.ts +11 -0
  20. package/dist/ownership.d.ts.map +1 -0
  21. package/dist/ownership.js +49 -0
  22. package/dist/ownership.js.map +1 -0
  23. package/dist/plan-vectors.d.ts +57 -0
  24. package/dist/plan-vectors.d.ts.map +1 -0
  25. package/dist/plan-vectors.js +108 -0
  26. package/dist/plan-vectors.js.map +1 -0
  27. package/dist/replacement-plan.d.ts +11 -0
  28. package/dist/replacement-plan.d.ts.map +1 -0
  29. package/dist/replacement-plan.js +28 -0
  30. package/dist/replacement-plan.js.map +1 -0
  31. package/dist/scheduler.d.ts +46 -0
  32. package/dist/scheduler.d.ts.map +1 -0
  33. package/dist/scheduler.js +143 -0
  34. package/dist/scheduler.js.map +1 -0
  35. package/dist/validation.d.ts +21 -0
  36. package/dist/validation.d.ts.map +1 -0
  37. package/dist/validation.js +62 -0
  38. package/dist/validation.js.map +1 -0
  39. package/dist/vitest.d.ts +13 -0
  40. package/dist/vitest.d.ts.map +1 -0
  41. package/dist/vitest.js +261 -0
  42. package/dist/vitest.js.map +1 -0
  43. package/package.json +61 -0
package/dist/vitest.js ADDED
@@ -0,0 +1,261 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { NotificationPlanError } from './errors.js';
3
+ import { isOwnedBy, ownedNotificationIdentifier } from './ownership.js';
4
+ const BASE_INSTANT = Date.parse('2030-01-01T00:00:00Z');
5
+ const MILLISECONDS_PER_HOUR = 3_600_000;
6
+ const PRIVATE_COPY = 'private copy';
7
+ const UNRELATED = 'unrelated-request';
8
+ const OWNER = { namespace: 'reminders' };
9
+ const PREFIX_SIBLING = { namespace: 'reminders-extra' };
10
+ const LIMIT = 4;
11
+ /** Registers the owned-notification replacement contract in the current Vitest suite. */
12
+ export function describeOwnedNotificationSchedulerContract(makeHarness) {
13
+ const setup = async (options = {}) => {
14
+ const harness = await makeHarness(options);
15
+ const build = (specs) => specs.map(([logicalId, hour, contentDigest = 'v1']) => ({
16
+ logicalId,
17
+ epochMilliseconds: BASE_INSTANT + hour * MILLISECONDS_PER_HOUR,
18
+ contentDigest,
19
+ content: harness.content(logicalId, `${PRIVATE_COPY} ${logicalId} ${contentDigest}`),
20
+ }));
21
+ const owned = async (owner = OWNER) => (await harness.pending())
22
+ .filter((request) => isOwnedBy(owner.namespace, request.identifier, request.marker))
23
+ .map(({ marker }) => ({
24
+ logicalId: marker?.logicalId ?? '',
25
+ epochMilliseconds: marker?.epochMilliseconds ?? 0,
26
+ contentDigest: marker?.contentDigest ?? '',
27
+ }))
28
+ .sort((left, right) => left.epochMilliseconds - right.epochMilliseconds);
29
+ const identifiers = async () => (await harness.pending()).map(({ identifier }) => identifier).sort();
30
+ const replace = (specs, owner = OWNER, replaceAll = false) => harness.scheduler.replaceOwned(owner, build(specs), { replaceAll });
31
+ const planned = (specs) => build(specs).map(({ logicalId, epochMilliseconds, contentDigest }) => ({
32
+ logicalId,
33
+ epochMilliseconds,
34
+ contentDigest,
35
+ }));
36
+ return { harness, owned, identifiers, replace, planned };
37
+ };
38
+ describe('OwnedNotificationScheduler contract', () => {
39
+ it('schedules the desired set in instant order and reports completion', async () => {
40
+ const { owned, replace, planned } = await setup();
41
+ const outcome = await replace([
42
+ ['b', 2],
43
+ ['a', 1],
44
+ ]);
45
+ expect(outcome).toEqual(complete({ scheduled: ['a', 'b'] }));
46
+ expect(await owned()).toEqual(planned([
47
+ ['a', 1],
48
+ ['b', 2],
49
+ ]));
50
+ });
51
+ it('keeps an unchanged set on repeated calls', async () => {
52
+ const { owned, replace } = await setup();
53
+ const specs = [
54
+ ['a', 1],
55
+ ['b', 2],
56
+ ];
57
+ await replace(specs);
58
+ const before = await owned();
59
+ expect(await replace(specs)).toEqual(complete({ kept: ['a', 'b'] }));
60
+ expect(await replace([...specs].reverse())).toEqual(complete({ kept: ['a', 'b'] }));
61
+ expect(await owned()).toEqual(before);
62
+ });
63
+ it('moves, removes, and adds by logical ID and instant', async () => {
64
+ const { owned, replace, planned } = await setup();
65
+ await replace([
66
+ ['keep', 1],
67
+ ['move', 2],
68
+ ['drop', 3],
69
+ ]);
70
+ const outcome = await replace([
71
+ ['keep', 1],
72
+ ['move', 5],
73
+ ['add', 4],
74
+ ]);
75
+ expect(outcome).toEqual(complete({ kept: ['keep'], cancelled: ['move', 'drop'], scheduled: ['add', 'move'] }));
76
+ expect(await owned()).toEqual(planned([
77
+ ['keep', 1],
78
+ ['add', 4],
79
+ ['move', 5],
80
+ ]));
81
+ });
82
+ it('replaces content only when the digest changes or replaceAll is set', async () => {
83
+ const { owned, replace, planned } = await setup();
84
+ await replace([
85
+ ['a', 1],
86
+ ['b', 2],
87
+ ]);
88
+ expect(await replace([
89
+ ['a', 1, 'v2'],
90
+ ['b', 2],
91
+ ])).toEqual(complete({ kept: ['b'], cancelled: ['a'], scheduled: ['a'] }));
92
+ expect(await replace([
93
+ ['a', 1, 'v2'],
94
+ ['b', 2],
95
+ ], OWNER, true)).toEqual(complete({ cancelled: ['a', 'b'], scheduled: ['a', 'b'] }));
96
+ expect(await owned()).toEqual(planned([
97
+ ['a', 1, 'v2'],
98
+ ['b', 2],
99
+ ]));
100
+ });
101
+ it('leaves other namespaces and unrelated requests alone, including on disable', async () => {
102
+ const { harness, owned, identifiers, replace, planned } = await setup();
103
+ await harness.addUnrelated(UNRELATED);
104
+ await replace([['shared-id', 1]], PREFIX_SIBLING);
105
+ await replace([['shared-id', 2]]);
106
+ expect(await replace([])).toEqual(complete({ cancelled: ['shared-id'] }));
107
+ expect(await owned()).toEqual([]);
108
+ expect(await owned(PREFIX_SIBLING)).toEqual(planned([['shared-id', 1]]));
109
+ expect(await identifiers()).toEqual([ownedNotificationIdentifier(PREFIX_SIBLING.namespace, 'shared-id'), UNRELATED].sort());
110
+ });
111
+ it('returns an incomplete outcome when listing fails and converges on retry', async () => {
112
+ const { harness, owned, replace, planned } = await setup();
113
+ harness.faults.failNextList();
114
+ expect(await replace([['a', 1]])).toEqual(incomplete({}, [{ code: 'list_failed' }]));
115
+ expect(await owned()).toEqual([]);
116
+ expect(await replace([['a', 1]])).toEqual(complete({ scheduled: ['a'] }));
117
+ expect(await owned()).toEqual(planned([['a', 1]]));
118
+ });
119
+ it('does not reschedule an item whose cancel failed and converges on retry', async () => {
120
+ const { harness, owned, replace, planned } = await setup();
121
+ await replace([
122
+ ['a', 1],
123
+ ['b', 2],
124
+ ]);
125
+ harness.faults.failCancel(ownedNotificationIdentifier(OWNER.namespace, 'a'));
126
+ const specs = [
127
+ ['a', 3],
128
+ ['b', 4],
129
+ ];
130
+ expect(await replace(specs)).toEqual(incomplete({ cancelled: ['b'], scheduled: ['b'] }, [
131
+ { code: 'cancel_failed', logicalId: 'a' },
132
+ ]));
133
+ expect(await owned()).toEqual(planned([
134
+ ['a', 1],
135
+ ['b', 4],
136
+ ]));
137
+ expect(await replace(specs)).toEqual(complete({ kept: ['b'], cancelled: ['a'], scheduled: ['a'] }));
138
+ expect(await owned()).toEqual(planned(specs));
139
+ });
140
+ it('reports one failed schedule and converges on retry', async () => {
141
+ const { harness, owned, replace, planned } = await setup();
142
+ harness.faults.failSchedule(ownedNotificationIdentifier(OWNER.namespace, 'b'));
143
+ const specs = [
144
+ ['a', 1],
145
+ ['b', 2],
146
+ ['c', 3],
147
+ ];
148
+ expect(await replace(specs)).toEqual(incomplete({ scheduled: ['a', 'c'] }, [{ code: 'schedule_failed', logicalId: 'b' }]));
149
+ expect(await replace(specs)).toEqual(complete({ kept: ['a', 'c'], scheduled: ['b'] }));
150
+ expect(await owned()).toEqual(planned(specs));
151
+ });
152
+ it('cancels stale requests but schedules nothing without permission', async () => {
153
+ const { harness, owned, replace, planned } = await setup();
154
+ await replace([
155
+ ['a', 1],
156
+ ['b', 2],
157
+ ]);
158
+ harness.faults.setPermission('denied');
159
+ expect(await replace([
160
+ ['a', 1],
161
+ ['c', 3],
162
+ ])).toEqual(incomplete({ kept: ['a'], cancelled: ['b'] }, [
163
+ { code: 'permission_denied', logicalId: 'c' },
164
+ ]));
165
+ expect(await owned()).toEqual(planned([['a', 1]]));
166
+ expect(await replace([])).toEqual(complete({ cancelled: ['a'] }));
167
+ });
168
+ it('notices permission revoked after listing', async () => {
169
+ const { harness, replace } = await setup();
170
+ harness.faults.afterNextList(() => {
171
+ harness.faults.setPermission('denied');
172
+ });
173
+ expect(await replace([['a', 1]])).toEqual(incomplete({}, [{ code: 'permission_denied', logicalId: 'a' }]));
174
+ });
175
+ it('reports a failed permission check', async () => {
176
+ const { harness, replace } = await setup();
177
+ harness.faults.failNextPermission();
178
+ expect(await replace([['a', 1]])).toEqual(incomplete({}, [{ code: 'permission_failed', logicalId: 'a' }]));
179
+ });
180
+ it('stops at the pending limit, counting other owners, and keeps the earliest', async () => {
181
+ const { harness, owned, replace, planned } = await setup({ pendingLimit: LIMIT });
182
+ await harness.addUnrelated(UNRELATED);
183
+ await replace([['other', 1]], PREFIX_SIBLING);
184
+ expect(await replace([
185
+ ['c', 3],
186
+ ['a', 1],
187
+ ['b', 2],
188
+ ])).toEqual(incomplete({ scheduled: ['a', 'b'] }, [{ code: 'schedule_limit', logicalId: 'c' }]));
189
+ expect(await owned()).toEqual(planned([
190
+ ['a', 1],
191
+ ['b', 2],
192
+ ]));
193
+ });
194
+ it('coalesces queued replacements for one owner to the newest set', async () => {
195
+ const { harness, owned, replace, planned } = await setup();
196
+ const release = harness.faults.holdNextList();
197
+ const first = replace([['first', 1]]);
198
+ const second = replace([['second', 2]]);
199
+ const third = replace([['third', 3]]);
200
+ release();
201
+ expect(await second).toEqual({
202
+ status: 'superseded',
203
+ kept: [],
204
+ cancelled: [],
205
+ scheduled: [],
206
+ failures: [],
207
+ });
208
+ expect(await first).toEqual(complete({ scheduled: ['first'] }));
209
+ expect(await third).toEqual(complete({ cancelled: ['first'], scheduled: ['third'] }));
210
+ expect(await owned()).toEqual(planned([['third', 3]]));
211
+ });
212
+ it('does not make different owners wait for each other', async () => {
213
+ const { harness, owned, replace, planned } = await setup();
214
+ const release = harness.faults.holdNextList();
215
+ const held = replace([['a', 1]]);
216
+ expect(await replace([['b', 2]], PREFIX_SIBLING)).toEqual(complete({ scheduled: ['b'] }));
217
+ release();
218
+ expect(await held).toEqual(complete({ scheduled: ['a'] }));
219
+ expect(await owned()).toEqual(planned([['a', 1]]));
220
+ expect(await owned(PREFIX_SIBLING)).toEqual(planned([['b', 2]]));
221
+ });
222
+ it('rejects invalid owners and duplicate logical IDs before touching the platform', async () => {
223
+ const { harness, identifiers, replace } = await setup();
224
+ harness.faults.failNextList();
225
+ await expect(replace([['a', 1]], { namespace: 'Bad Namespace' })).rejects.toMatchObject({
226
+ code: 'invalid_namespace',
227
+ });
228
+ await expect(replace([
229
+ ['a', 1],
230
+ ['a', 2],
231
+ ])).rejects.toBeInstanceOf(NotificationPlanError);
232
+ expect(await replace([])).toEqual(incomplete({}, [{ code: 'list_failed' }]));
233
+ expect(await identifiers()).toEqual([]);
234
+ });
235
+ it('keeps notification content out of outcomes', async () => {
236
+ const { harness, replace } = await setup({ pendingLimit: 1 });
237
+ harness.faults.failSchedule(ownedNotificationIdentifier(OWNER.namespace, 'a'));
238
+ const outcome = await replace([
239
+ ['a', 1],
240
+ ['b', 2],
241
+ ['c', 3],
242
+ ]);
243
+ expect(outcome.status).toBe('incomplete');
244
+ expect(JSON.stringify(outcome)).not.toContain(PRIVATE_COPY);
245
+ });
246
+ });
247
+ }
248
+ function complete(lists) {
249
+ return { status: 'complete', ...emptyLists(lists), failures: [] };
250
+ }
251
+ function incomplete(lists, failures) {
252
+ return { status: 'incomplete', ...emptyLists(lists), failures };
253
+ }
254
+ function emptyLists(lists) {
255
+ return {
256
+ kept: lists.kept ?? [],
257
+ cancelled: lists.cancelled ?? [],
258
+ scheduled: lists.scheduled ?? [],
259
+ };
260
+ }
261
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@baukit/notifications-core",
3
+ "version": "0.5.0",
4
+ "description": "Framework-free local notification planning: zoned occurrence resolution, horizon filtering, deterministic keep, cancel, and schedule sets, and owner-scoped replacement over a platform port.",
5
+ "license": "MIT",
6
+ "author": "Patrick Koss",
7
+ "homepage": "https://github.com/PatrickKoss/baukit#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/PatrickKoss/baukit.git",
11
+ "directory": "typescript/packages/notifications-core"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/PatrickKoss/baukit/issues"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "type": "module",
20
+ "engines": {
21
+ "node": ">=24.0.0"
22
+ },
23
+ "types": "./dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js",
28
+ "default": "./dist/index.js"
29
+ },
30
+ "./vectors": {
31
+ "types": "./dist/plan-vectors.d.ts",
32
+ "import": "./dist/plan-vectors.js",
33
+ "default": "./dist/plan-vectors.js"
34
+ },
35
+ "./vitest": {
36
+ "types": "./dist/vitest.d.ts",
37
+ "import": "./dist/vitest.js"
38
+ }
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE"
44
+ ],
45
+ "scripts": {
46
+ "build": "tsc -p tsconfig.json",
47
+ "prepare": "pnpm run build",
48
+ "test": "tsc -p tsconfig.test.json && vitest run --config ../../vitest.config.ts && node ../../scripts/test-packed-exports.mjs --esm-only ./vitest",
49
+ "lint": "eslint src --max-warnings=0",
50
+ "format:check": "prettier --check src package.json tsconfig.json tsconfig.test.json"
51
+ },
52
+ "devDependencies": {
53
+ "@baukit/localization-core": "workspace:*",
54
+ "@types/node": "24.10.1",
55
+ "typescript": "6.0.3",
56
+ "vitest": "4.1.10"
57
+ },
58
+ "peerDependencies": {
59
+ "@baukit/localization-core": "^0.5.0"
60
+ }
61
+ }