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.
- package/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE.txt +19 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/successMap.d.ts +13 -0
- package/dist/successMap.d.ts.map +1 -0
- package/dist/successMap.js +32 -0
- package/dist/successMap.js.map +1 -0
- package/dist/test/http-server.d.ts +73 -0
- package/dist/test/http-server.d.ts.map +1 -0
- package/dist/test/http-server.js +177 -0
- package/dist/test/http-server.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +11 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/test/successMap.test.d.ts +2 -0
- package/dist/test/successMap.test.d.ts.map +1 -0
- package/dist/test/successMap.test.js +172 -0
- package/dist/test/successMap.test.js.map +1 -0
- package/dist/test/webhook.test.d.ts +2 -0
- package/dist/test/webhook.test.d.ts.map +1 -0
- package/dist/test/webhook.test.js +356 -0
- package/dist/test/webhook.test.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook.d.ts +67 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +281 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +34 -0
- package/src/index.ts +2 -0
- package/src/successMap.ts +55 -0
- package/src/test/http-server.ts +233 -0
- package/src/test/setup.ts +12 -0
- package/src/test/successMap.test.ts +215 -0
- package/src/test/webhook.test.ts +586 -0
- package/src/types.ts +106 -0
- package/src/webhook.ts +387 -0
- package/tsconfig.json +17 -0
- 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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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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"}
|