jazz-webhook 0.18.28

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 (46) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +16 -0
  3. package/LICENSE.txt +19 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +3 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/successMap.d.ts +13 -0
  9. package/dist/successMap.d.ts.map +1 -0
  10. package/dist/successMap.js +32 -0
  11. package/dist/successMap.js.map +1 -0
  12. package/dist/test/http-server.d.ts +73 -0
  13. package/dist/test/http-server.d.ts.map +1 -0
  14. package/dist/test/http-server.js +177 -0
  15. package/dist/test/http-server.js.map +1 -0
  16. package/dist/test/setup.d.ts +2 -0
  17. package/dist/test/setup.d.ts.map +1 -0
  18. package/dist/test/setup.js +11 -0
  19. package/dist/test/setup.js.map +1 -0
  20. package/dist/test/successMap.test.d.ts +2 -0
  21. package/dist/test/successMap.test.d.ts.map +1 -0
  22. package/dist/test/successMap.test.js +172 -0
  23. package/dist/test/successMap.test.js.map +1 -0
  24. package/dist/test/webhook.test.d.ts +2 -0
  25. package/dist/test/webhook.test.d.ts.map +1 -0
  26. package/dist/test/webhook.test.js +356 -0
  27. package/dist/test/webhook.test.js.map +1 -0
  28. package/dist/types.d.ts +87 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +15 -0
  31. package/dist/types.js.map +1 -0
  32. package/dist/webhook.d.ts +67 -0
  33. package/dist/webhook.d.ts.map +1 -0
  34. package/dist/webhook.js +281 -0
  35. package/dist/webhook.js.map +1 -0
  36. package/package.json +34 -0
  37. package/src/index.ts +2 -0
  38. package/src/successMap.ts +55 -0
  39. package/src/test/http-server.ts +233 -0
  40. package/src/test/setup.ts +12 -0
  41. package/src/test/successMap.test.ts +215 -0
  42. package/src/test/webhook.test.ts +586 -0
  43. package/src/types.ts +106 -0
  44. package/src/webhook.ts +387 -0
  45. package/tsconfig.json +17 -0
  46. package/vitest.config.ts +14 -0
@@ -0,0 +1,356 @@
1
+ import { describe, expect, test, onTestFinished, assert } from "vitest";
2
+ import { co, z, Group } from "jazz-tools";
3
+ import { createJazzTestAccount } from "jazz-tools/testing";
4
+ import { WebhookTestServer } from "./http-server.js";
5
+ import { WebhookRegistry, WebhookRegistration, RegistryState, } from "../webhook.js";
6
+ import { isTxSuccessful } from "../successMap.js";
7
+ // Define test schemas
8
+ const TestCoMap = co.map({
9
+ value: z.string(),
10
+ });
11
+ const TestRoot = co.map({
12
+ webhookRegistry: RegistryState,
13
+ });
14
+ const TestAccount = co
15
+ .account({
16
+ root: TestRoot,
17
+ profile: co.profile(),
18
+ })
19
+ .withMigration((account, creationProps) => {
20
+ const group = Group.create({ owner: account });
21
+ group.addMember("everyone", "reader");
22
+ if (!account.$jazz.has("profile")) {
23
+ account.$jazz.set("profile", co.profile().create({
24
+ name: creationProps?.name ?? "Test Account",
25
+ }, group));
26
+ }
27
+ if (!account.$jazz.has("root")) {
28
+ account.$jazz.set("root", TestRoot.create({
29
+ webhookRegistry: WebhookRegistry.createRegistry(group),
30
+ }, group));
31
+ }
32
+ });
33
+ async function setupTest(options) {
34
+ const account = await createJazzTestAccount({
35
+ AccountSchema: TestAccount,
36
+ isCurrentActiveAccount: true,
37
+ });
38
+ const webhookServer = new WebhookTestServer();
39
+ await webhookServer.start();
40
+ const registryState = account.root.webhookRegistry;
41
+ const webhookRegistry = new WebhookRegistry(registryState, options || {
42
+ baseDelayMs: 10,
43
+ });
44
+ webhookRegistry.start();
45
+ // Set up cleanup for this test
46
+ onTestFinished(async () => {
47
+ if (webhookServer) {
48
+ webhookServer.close();
49
+ }
50
+ webhookRegistry.shutdown();
51
+ });
52
+ return {
53
+ account,
54
+ webhookServer,
55
+ registryState,
56
+ webhookRegistry,
57
+ };
58
+ }
59
+ describe("jazz-webhook", () => {
60
+ describe("webhook registration", () => {
61
+ test("should register a valid webhook", async () => {
62
+ const { webhookServer, registryState, webhookRegistry } = await setupTest();
63
+ const webhookId = await webhookRegistry.register(webhookServer.getUrl(), "co_z1234567890abcdef");
64
+ expect(webhookId).toBeDefined();
65
+ expect(registryState[webhookId]).toBeDefined();
66
+ expect(registryState[webhookId].webhookUrl).toBe(webhookServer.getUrl());
67
+ expect(registryState[webhookId].coValueId).toBe("co_z1234567890abcdef");
68
+ expect(registryState[webhookId].active).toBe(true);
69
+ expect(Object.keys(registryState[webhookId].successMap).length).toBe(0);
70
+ });
71
+ test("should throw error for invalid callback URL", async () => {
72
+ const { webhookRegistry: webhookManager } = await setupTest();
73
+ await expect(webhookManager.register("not-a-url", "co_z1234567890abcdef")).rejects.toThrow("Invalid webhook URL: not-a-url");
74
+ });
75
+ test("should throw error for invalid CoValue ID format", async () => {
76
+ const { webhookServer, webhookRegistry: webhookManager } = await setupTest();
77
+ await expect(webhookManager.register(webhookServer.getUrl(), "invalid-id")).rejects.toThrow("Invalid CoValue ID format: invalid-id. Expected format: co_z...");
78
+ await expect(webhookManager.register(webhookServer.getUrl(), "co_invalid")).rejects.toThrow("Invalid CoValue ID format: co_invalid. Expected format: co_z...");
79
+ });
80
+ test("should create multiple webhooks with different IDs", async () => {
81
+ const { webhookServer, registryState, webhookRegistry } = await setupTest();
82
+ const webhook1 = await webhookRegistry.register(webhookServer.getUrl(), "co_z1111111111111111");
83
+ const webhook2 = await webhookRegistry.register(webhookServer.getUrl(), "co_z2222222222222222");
84
+ expect(webhook1).not.toBe(webhook2);
85
+ expect(registryState[webhook1].coValueId).toBe("co_z1111111111111111");
86
+ expect(registryState[webhook2].coValueId).toBe("co_z2222222222222222");
87
+ });
88
+ });
89
+ describe("webhook unregistration", () => {
90
+ test("should unregister a webhook", async () => {
91
+ const { webhookServer, registryState, webhookRegistry } = await setupTest();
92
+ const webhookId = await webhookRegistry.register(webhookServer.getUrl(), "co_z1234567890abcdef");
93
+ const webhook = registryState[webhookId];
94
+ expect(webhook.active).toBe(true);
95
+ webhookRegistry.unregister(webhookId);
96
+ expect(registryState[webhookId]).toBeUndefined();
97
+ expect(webhook.active).toBe(false);
98
+ });
99
+ test("should throw error for non-existent webhook", async () => {
100
+ const { webhookRegistry } = await setupTest();
101
+ expect(() => {
102
+ webhookRegistry.unregister("fake-id");
103
+ }).toThrow("Webhook with ID fake-id not found");
104
+ });
105
+ });
106
+ describe("webhook emission with real HTTP server", () => {
107
+ test("should emit webhook when CoValue changes", async () => {
108
+ const { account, webhookServer, webhookRegistry: webhookManager, } = await setupTest();
109
+ // Create a test CoMap
110
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
111
+ const coValueId = testMap.$jazz.id;
112
+ // Register webhook
113
+ await webhookManager.register(webhookServer.getUrl(), coValueId);
114
+ // Make a change to trigger webhook
115
+ testMap.$jazz.set("value", "changed");
116
+ const txID = testMap.$jazz.raw.lastEditAt("value")?.tx;
117
+ // Wait for webhook to be emitted
118
+ const requests = await webhookServer.waitForRequests(2, 3000);
119
+ expect(requests.length).toBe(2);
120
+ const lastRequest = webhookServer.getLastRequest();
121
+ expect(lastRequest.coValueId).toBe(coValueId);
122
+ expect(lastRequest.txID).toEqual(txID);
123
+ });
124
+ test("should queue multiple changes and emit only the latest", async () => {
125
+ const { account, webhookServer, webhookRegistry: webhookManager, } = await setupTest();
126
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
127
+ const coValueId = testMap.$jazz.id;
128
+ await webhookManager.register(webhookServer.getUrl(), coValueId);
129
+ // Make multiple rapid changes
130
+ testMap.$jazz.set("value", "change1");
131
+ testMap.$jazz.set("value", "change2");
132
+ testMap.$jazz.set("value", "change3");
133
+ // Wait for webhook to be processed
134
+ await new Promise((resolve) => setTimeout(resolve, 500));
135
+ // Should only receive one webhook with the latest state
136
+ expect(webhookServer.requests.length).toBeGreaterThanOrEqual(1);
137
+ // The last request should be for the final change
138
+ const lastRequest = webhookServer.requests.at(-1);
139
+ expect(lastRequest?.coValueId).toBe(coValueId);
140
+ });
141
+ test("should update lastSuccessfulEmit after successful webhook", async () => {
142
+ const { account, webhookServer, registryState, webhookRegistry } = await setupTest();
143
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
144
+ const coValueId = testMap.$jazz.id;
145
+ const webhookId = await webhookRegistry.register(webhookServer.getUrl(), coValueId);
146
+ testMap.$jazz.set("value", "changed");
147
+ const requests = await webhookServer.waitForRequests(1, 3000);
148
+ expect(requests.length).toBeGreaterThanOrEqual(1);
149
+ const lastRequest = webhookServer.getLastRequest();
150
+ const webhook = registryState[webhookId];
151
+ await new Promise((resolve) => setTimeout(resolve, 100));
152
+ expect(isTxSuccessful(webhook.successMap, lastRequest.txID)).toBe(true);
153
+ });
154
+ test("should retry failed webhooks with exponential backoff", async () => {
155
+ const { account, webhookServer, webhookRegistry: webhookManager, } = await setupTest();
156
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
157
+ const coValueId = testMap.$jazz.id;
158
+ // Set up server to fail first 2 requests, then succeed
159
+ webhookServer.setResponse(0, 500, "Server Error");
160
+ webhookServer.setResponse(1, 500, "Server Error");
161
+ webhookServer.setResponse(2, 200, "Success");
162
+ await webhookManager.register(webhookServer.getUrl(), coValueId);
163
+ testMap.$jazz.set("value", "changed");
164
+ // Should eventually succeed after retries
165
+ const requests = await webhookServer.waitForRequests(3, 10000);
166
+ expect(requests).toHaveLength(3);
167
+ expect(requests[0].coValueId).toBe(coValueId);
168
+ expect(requests[1].coValueId).toBe(coValueId);
169
+ expect(requests[2].coValueId).toBe(coValueId);
170
+ });
171
+ test("should respect Retry-After response header", async () => {
172
+ const { account, webhookServer, webhookRegistry: webhookManager, } = await setupTest({
173
+ baseDelayMs: 100000, // Really long default delay, we expect this to be overridden by the Retry-After header
174
+ });
175
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
176
+ const coValueId = testMap.$jazz.id;
177
+ // Set up server to fail with Retry-After header
178
+ webhookServer.setResponse(0, 500, "Server Error", undefined, {
179
+ "Retry-After": "0.05",
180
+ }); // 50ms
181
+ webhookServer.setResponse(1, 500, "Server Error", undefined, {
182
+ "Retry-After": "0.05",
183
+ }); // 50ms
184
+ webhookServer.setResponse(2, 200, "Success");
185
+ await webhookManager.register(webhookServer.getUrl(), coValueId);
186
+ testMap.$jazz.set("value", "changed");
187
+ // Should eventually succeed after retry
188
+ const requests = await webhookServer.waitForRequests(3, 1000);
189
+ expect(requests).toHaveLength(3);
190
+ expect(requests[0].coValueId).toBe(coValueId);
191
+ expect(requests[1].coValueId).toBe(coValueId);
192
+ expect(requests[2].coValueId).toBe(coValueId);
193
+ });
194
+ test("should give up after max retries", async () => {
195
+ const { account, webhookServer, webhookRegistry: webhookManager, } = await setupTest();
196
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
197
+ const coValueId = testMap.$jazz.id;
198
+ // Set up server to always fail
199
+ for (let i = 0; i < 10; i++) {
200
+ webhookServer.setResponse(i, 500, "Server Error");
201
+ }
202
+ await webhookManager.register(webhookServer.getUrl(), coValueId);
203
+ testMap.$jazz.set("value", "changed");
204
+ // Should retry 5 times then give up
205
+ const requests = await webhookServer.waitForRequests(5, 1000);
206
+ expect(requests).toHaveLength(5); // 5 retries
207
+ expect(requests.every((req) => req.coValueId === coValueId)).toBe(true);
208
+ });
209
+ test("should handle slow server responses", async () => {
210
+ const { account, webhookServer, webhookRegistry: webhookManager, } = await setupTest();
211
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
212
+ const coValueId = testMap.$jazz.id;
213
+ // Set up server with slow response
214
+ webhookServer.setResponse(0, 200, "Success", 500);
215
+ await webhookManager.register(webhookServer.getUrl(), coValueId);
216
+ testMap.$jazz.set("value", "changed");
217
+ await webhookServer.waitForRequests(1, 5000);
218
+ const request = webhookServer.expectSingleRequest();
219
+ expect(request.coValueId).toBe(coValueId);
220
+ });
221
+ test("should handle webhook unregistration cleanup", async () => {
222
+ const { account, webhookServer, webhookRegistry } = await setupTest();
223
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
224
+ const coValueId = testMap.$jazz.id;
225
+ const webhookId = await webhookRegistry.register(webhookServer.getUrl(), coValueId);
226
+ // Make initial change
227
+ testMap.$jazz.set("value", "changed");
228
+ await webhookServer.waitForRequests(2, 3000);
229
+ const initialRequestCount = webhookServer.requests.length;
230
+ // Unregister webhook
231
+ webhookRegistry.unregister(webhookId);
232
+ // Wait a bit to ensure the unregistration is processed
233
+ await new Promise((resolve) => setTimeout(resolve, 100));
234
+ // Make another change - should not trigger webhook
235
+ testMap.$jazz.set("value", "changed_again");
236
+ // Wait a bit to ensure no additional requests
237
+ await new Promise((resolve) => setTimeout(resolve, 200));
238
+ expect(webhookServer.getRequestCount()).toBe(initialRequestCount);
239
+ });
240
+ test("should start all active webhook subscriptions", async () => {
241
+ const { account, webhookServer, webhookRegistry } = await setupTest();
242
+ const testMap1 = TestCoMap.create({ value: "initial1" }, account.root);
243
+ const testMap2 = TestCoMap.create({ value: "initial2" }, account.root);
244
+ const coValueId1 = testMap1.$jazz.id;
245
+ const coValueId2 = testMap2.$jazz.id;
246
+ // Register webhooks (this automatically starts subscriptions)
247
+ const webhookId1 = await webhookRegistry.register(webhookServer.getUrl(), coValueId1);
248
+ const webhookId2 = await webhookRegistry.register(webhookServer.getUrl(), coValueId2);
249
+ // Shutdown all subscriptions
250
+ webhookRegistry.shutdown();
251
+ // Verify no subscriptions are active
252
+ expect(webhookRegistry["activeSubscriptions"].size).toBe(0);
253
+ // Start all active webhook subscriptions
254
+ await webhookRegistry.start();
255
+ // Verify subscriptions are active again
256
+ expect(webhookRegistry["activeSubscriptions"].size).toBe(2);
257
+ expect(webhookRegistry["activeSubscriptions"].has(webhookId1)).toBe(true);
258
+ expect(webhookRegistry["activeSubscriptions"].has(webhookId2)).toBe(true);
259
+ // Make changes to both CoValues to verify webhooks are working
260
+ testMap1.$jazz.set("value", "changed1");
261
+ testMap2.$jazz.set("value", "changed2");
262
+ // Wait for webhooks to be emitted
263
+ // TODO: why are we getting two requests for webhook1
264
+ const requests = await webhookServer.waitForRequests(4, 3000);
265
+ expect(requests.length).toBeGreaterThanOrEqual(2);
266
+ // Verify both webhooks were triggered
267
+ const coValueIds = requests.map((req) => req.coValueId);
268
+ expect(coValueIds).toContain(coValueId1);
269
+ expect(coValueIds).toContain(coValueId2);
270
+ });
271
+ test("should when restarting, only the changed covalues should trigger webhooks", async () => {
272
+ const { account, webhookServer, webhookRegistry } = await setupTest();
273
+ const testMap1 = TestCoMap.create({ value: "initial1" }, account.root);
274
+ const initialTxID1 = testMap1.$jazz.raw.lastEditAt("value").tx;
275
+ const testMap2 = TestCoMap.create({ value: "initial2" }, account.root);
276
+ const initialTxID2 = testMap2.$jazz.raw.lastEditAt("value").tx;
277
+ const coValueId1 = testMap1.$jazz.id;
278
+ const coValueId2 = testMap2.$jazz.id;
279
+ // Register webhooks (this automatically starts subscriptions)
280
+ const webhookId1 = await webhookRegistry.register(webhookServer.getUrl(), coValueId1);
281
+ const webhookId2 = await webhookRegistry.register(webhookServer.getUrl(), coValueId2);
282
+ await waitForWebhookEmitted(webhookId1, initialTxID1);
283
+ await waitForWebhookEmitted(webhookId2, initialTxID2);
284
+ webhookRegistry.shutdown();
285
+ testMap1.$jazz.set("value", "changed");
286
+ const changedTxID1 = testMap1.$jazz.raw.lastEditAt("value").tx;
287
+ webhookRegistry.start();
288
+ await waitForWebhookEmitted(webhookId1, changedTxID1);
289
+ // Wait some extra time to ensure that we have only one extra request
290
+ await new Promise((resolve) => setTimeout(resolve, 100));
291
+ // The two initial updates, plus the one we made before restarting
292
+ expect(webhookServer.getRequestCount()).toBe(3);
293
+ });
294
+ test("should not start subscriptions for inactive webhooks", async () => {
295
+ const { account, webhookServer, webhookRegistry } = await setupTest();
296
+ const testMap = TestCoMap.create({ value: "initial" }, account.root);
297
+ const coValueId = testMap.$jazz.id;
298
+ // Register webhook
299
+ const webhookId = await webhookRegistry.register(webhookServer.getUrl(), coValueId);
300
+ // Wait a bit to ensure no webhook is sent
301
+ await new Promise((resolve) => setTimeout(resolve, 200));
302
+ expect(webhookServer.getRequestCount()).toBe(1);
303
+ // Deactivate the webhook
304
+ const webhook = webhookRegistry.state[webhookId];
305
+ expect(webhook).toBeDefined();
306
+ webhook.$jazz.set("active", false);
307
+ // Shutdown all subscriptions
308
+ webhookRegistry.shutdown();
309
+ // Start all active webhook subscriptions
310
+ webhookRegistry.start();
311
+ // Verify no subscriptions are active (since webhook is inactive)
312
+ expect(webhookRegistry["activeSubscriptions"].size).toBe(0);
313
+ // Make a change - should not trigger webhook
314
+ testMap.$jazz.set("value", "changed");
315
+ // Wait a bit to ensure no webhook is sent
316
+ await new Promise((resolve) => setTimeout(resolve, 200));
317
+ expect(webhookServer.getRequestCount()).toBe(1);
318
+ });
319
+ });
320
+ });
321
+ async function waitForWebhookEmitted(id, txID) {
322
+ const webhook = await WebhookRegistration.load(id, {
323
+ resolve: {
324
+ successMap: { $each: true },
325
+ },
326
+ });
327
+ assert(webhook);
328
+ return waitFor(() => {
329
+ expect(isTxSuccessful(webhook.successMap, txID)).toBe(true);
330
+ });
331
+ }
332
+ function waitFor(callback) {
333
+ return new Promise((resolve, reject) => {
334
+ const checkPassed = async () => {
335
+ try {
336
+ return { ok: await callback(), error: null };
337
+ }
338
+ catch (error) {
339
+ return { ok: false, error };
340
+ }
341
+ };
342
+ let retries = 0;
343
+ const interval = setInterval(async () => {
344
+ const { ok, error } = await checkPassed();
345
+ if (ok !== false) {
346
+ clearInterval(interval);
347
+ resolve();
348
+ }
349
+ if (++retries > 10) {
350
+ clearInterval(interval);
351
+ reject(error);
352
+ }
353
+ }, 100);
354
+ });
355
+ }
356
+ //# sourceMappingURL=webhook.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.test.js","sourceRoot":"","sources":["../../src/test/webhook.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Comprehensive type definitions for Jazz Webhook service
3
+ */
4
+ export interface WebhookServiceOptions {
5
+ /** Port to run the service on (default: 3000) */
6
+ port?: number;
7
+ /** Host to bind the service to (default: "localhost") */
8
+ host?: string;
9
+ /** Enable CORS for all origins (default: true) */
10
+ enableCors?: boolean;
11
+ /** Maximum number of retry attempts for failed webhooks (default: 5) */
12
+ maxRetries?: number;
13
+ }
14
+ export interface RegisterWebhookRequest {
15
+ webhookUrl: string;
16
+ coValueId: string;
17
+ }
18
+ export interface WebhookInfo {
19
+ id: string;
20
+ webhookUrl: string;
21
+ coValueId: string;
22
+ active: boolean;
23
+ successMap: {
24
+ [transactionID: string]: boolean;
25
+ };
26
+ }
27
+ export interface RegisterWebhookResponse {
28
+ webhookId: string;
29
+ message: string;
30
+ }
31
+ export interface WebhookTestResponse {
32
+ statusCode: number;
33
+ body?: string;
34
+ delay?: number;
35
+ }
36
+ /**
37
+ * Consolidated interface for all webhook service response types
38
+ */
39
+ export interface WebhookServiceResponses {
40
+ RegisterWebhookSuccess: {
41
+ success: true;
42
+ data: RegisterWebhookResponse;
43
+ };
44
+ WebhookInfoSuccess: {
45
+ success: true;
46
+ data: WebhookInfo;
47
+ };
48
+ HealthCheckSuccess: {
49
+ success: true;
50
+ message: string;
51
+ data: {
52
+ timestamp: string;
53
+ webhookCount: number;
54
+ };
55
+ };
56
+ DeleteWebhookSuccess: {
57
+ success: true;
58
+ message: string;
59
+ };
60
+ WebhookNotFoundError: {
61
+ success: false;
62
+ error: string;
63
+ };
64
+ ValidationError: {
65
+ success: false;
66
+ error: string;
67
+ };
68
+ InternalServerError: {
69
+ success: false;
70
+ error: string;
71
+ };
72
+ GenericError: {
73
+ success: false;
74
+ error: string;
75
+ };
76
+ }
77
+ /**
78
+ * HTTP status codes used by the webhook service
79
+ */
80
+ export declare enum WebhookServiceStatusCodes {
81
+ OK = 200,
82
+ CREATED = 201,
83
+ BAD_REQUEST = 400,
84
+ NOT_FOUND = 404,
85
+ INTERNAL_SERVER_ERROR = 500
86
+ }
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE;QACV,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IAEtC,sBAAsB,EAAE;QACtB,OAAO,EAAE,IAAI,CAAC;QACd,IAAI,EAAE,uBAAuB,CAAC;KAC/B,CAAC;IAEF,kBAAkB,EAAE;QAClB,OAAO,EAAE,IAAI,CAAC;QACd,IAAI,EAAE,WAAW,CAAC;KACnB,CAAC;IAEF,kBAAkB,EAAE;QAClB,OAAO,EAAE,IAAI,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE;YACJ,SAAS,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;IAEF,oBAAoB,EAAE;QACpB,OAAO,EAAE,IAAI,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAGF,oBAAoB,EAAE;QACpB,OAAO,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,eAAe,EAAE;QACf,OAAO,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,mBAAmB,EAAE;QACnB,OAAO,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAGF,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,oBAAY,yBAAyB;IACnC,EAAE,MAAM;IACR,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,SAAS,MAAM;IACf,qBAAqB,MAAM;CAC5B"}
package/dist/types.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Comprehensive type definitions for Jazz Webhook service
3
+ */
4
+ /**
5
+ * HTTP status codes used by the webhook service
6
+ */
7
+ export var WebhookServiceStatusCodes;
8
+ (function (WebhookServiceStatusCodes) {
9
+ WebhookServiceStatusCodes[WebhookServiceStatusCodes["OK"] = 200] = "OK";
10
+ WebhookServiceStatusCodes[WebhookServiceStatusCodes["CREATED"] = 201] = "CREATED";
11
+ WebhookServiceStatusCodes[WebhookServiceStatusCodes["BAD_REQUEST"] = 400] = "BAD_REQUEST";
12
+ WebhookServiceStatusCodes[WebhookServiceStatusCodes["NOT_FOUND"] = 404] = "NOT_FOUND";
13
+ WebhookServiceStatusCodes[WebhookServiceStatusCodes["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
14
+ })(WebhookServiceStatusCodes || (WebhookServiceStatusCodes = {}));
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8FH;;GAEG;AACH,MAAM,CAAN,IAAY,yBAMX;AAND,WAAY,yBAAyB;IACnC,uEAAQ,CAAA;IACR,iFAAa,CAAA;IACb,yFAAiB,CAAA;IACjB,qFAAe,CAAA;IACf,6GAA2B,CAAA;AAC7B,CAAC,EANW,yBAAyB,KAAzB,yBAAyB,QAMpC"}
@@ -0,0 +1,67 @@
1
+ import { co, z, Account, Group } from "jazz-tools";
2
+ export declare const WebhookRegistration: co.Map<{
3
+ webhookUrl: z.z.ZodString;
4
+ coValueId: z.z.ZodString;
5
+ active: z.z.ZodBoolean;
6
+ successMap: co.Record<z.z.ZodString, z.z.ZodBoolean>;
7
+ }, unknown, Account | Group>;
8
+ export type WebhookRegistration = co.loaded<typeof WebhookRegistration>;
9
+ export declare const RegistryState: co.Record<z.z.ZodString, co.Map<{
10
+ webhookUrl: z.z.ZodString;
11
+ coValueId: z.z.ZodString;
12
+ active: z.z.ZodBoolean;
13
+ successMap: co.Record<z.z.ZodString, z.z.ZodBoolean>;
14
+ }, unknown, Account | Group>>;
15
+ export type RegistryState = co.loaded<typeof RegistryState>;
16
+ export interface JazzWebhookOptions {
17
+ /** Maximum number of retry attempts for failed webhooks (default: 5) */
18
+ maxRetries?: number;
19
+ /** Base delay in milliseconds for exponential backoff (default: 1000ms) */
20
+ baseDelayMs?: number;
21
+ }
22
+ export declare const DEFAULT_JazzWebhookOptions: Required<JazzWebhookOptions>;
23
+ export declare class WebhookRegistry {
24
+ private options;
25
+ state: RegistryState;
26
+ private activeSubscriptions;
27
+ private rootUnsubscribe;
28
+ constructor(registry: RegistryState, options?: JazzWebhookOptions);
29
+ static createRegistry(owner: Group | Account): RegistryState;
30
+ static loadAndStart(registryId: string, options?: JazzWebhookOptions): Promise<WebhookRegistry>;
31
+ /**
32
+ * Registers a new webhook for a CoValue.
33
+ *
34
+ * @param webhookUrl - The HTTP URL to call when the CoValue changes
35
+ * @param coValueId - The ID of the CoValue to monitor (must start with "co_z")
36
+ * @returns The ID of the registered webhook
37
+ */
38
+ register(webhookUrl: string, coValueId: string): Promise<string>;
39
+ /**
40
+ * Unregisters a webhook and stops monitoring the CoValue.
41
+ *
42
+ * @param webhookId - The ID of the webhook to unregister
43
+ */
44
+ unregister(webhookId: string): void;
45
+ /**
46
+ * Starts monitoring a CoValue and emitting webhooks when it changes.
47
+ *
48
+ * @param webhookId - The ID of the webhook to start monitoring
49
+ */
50
+ private subscribe;
51
+ /**
52
+ * Starts monitoring all active webhooks in the registry.
53
+ *
54
+ * This method iterates through all webhooks in the registry and starts
55
+ * subscriptions for any active webhooks that don't already have active
56
+ * subscriptions. This is useful for resuming webhook monitoring after
57
+ * a shutdown or when loading an existing registry.
58
+ */
59
+ start(): Promise<void>;
60
+ shutdown(): void;
61
+ }
62
+ export declare const registerWebhook: (options: {
63
+ webhookUrl: string;
64
+ coValueId: string;
65
+ registryId?: string;
66
+ }) => Promise<string>;
67
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAUnD,eAAO,MAAM,mBAAmB;;;;;4BAK9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAExE,eAAO,MAAM,aAAa;;;;;6BAA6C,CAAC;AACxE,MAAM,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,kBAAkB,CAGnE,CAAC;AAEF,qBAAa,eAAe;IAOxB,OAAO,CAAC,OAAO;IANV,KAAK,EAAE,aAAa,CAAC;IAC5B,OAAO,CAAC,mBAAmB,CAAiC;IAC5D,OAAO,CAAC,eAAe,CAA6B;gBAGlD,QAAQ,EAAE,aAAa,EACf,OAAO,GAAE,kBAAuB;IAK1C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,aAAa;WAI/C,YAAY,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAuB;IAalC;;;;;;OAMG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBtE;;;;OAIG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUnC;;;;OAIG;IACH,OAAO,CAAC,SAAS;IASjB;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC5B,QAAQ,IAAI,IAAI;CAOjB;AAwKD,eAAO,MAAM,eAAe,YAAmB;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAG,OAAO,CAAC,MAAM,CAgDjB,CAAC"}