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,4 @@
1
+
2
+ > jazz-webhook@0.18.28 build /home/runner/_work/jazz/jazz/packages/jazz-webhook
3
+ > rm -rf ./dist && tsc --sourceMap --outDir dist && chmod +x ./dist/index.js
4
+
package/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # jazz-webhook
2
+
3
+ ## 0.18.28
4
+
5
+ ### Patch Changes
6
+
7
+ - 52c8c89: Add webhook registries and the ability to run and create them with jazz-run
8
+ - Updated dependencies [8cbbe0e]
9
+ - Updated dependencies [14806c8]
10
+ - Updated dependencies [e8880dc]
11
+ - Updated dependencies [d83b5e3]
12
+ - Updated dependencies [5320349]
13
+ - jazz-tools@0.18.28
14
+ - cojson@0.18.28
15
+ - cojson-storage-sqlite@0.18.28
16
+ - cojson-transport-ws@0.18.28
package/LICENSE.txt ADDED
@@ -0,0 +1,19 @@
1
+ Copyright 2025, Garden Computing, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ export * from "./webhook.js";
2
+ export * from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./webhook.js";
2
+ export * from "./types.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { CojsonInternalTypes, SessionID } from "cojson";
2
+ import { co, z } from "jazz-tools";
3
+ export declare const SuccessMap: co.Record<z.z.ZodString, z.z.ZodBoolean>;
4
+ export type SuccessMap = co.loaded<typeof SuccessMap>;
5
+ export type TxIdKey = `${SessionID}:${number}`;
6
+ export declare function getTxIdKey(txID: {
7
+ sessionID: SessionID;
8
+ txIndex: number;
9
+ }): TxIdKey;
10
+ export declare function markSuccessful(successMap: SuccessMap, txID: CojsonInternalTypes.TransactionID): void;
11
+ export declare function getTransactionsToTry(successMap: SuccessMap, knownState: CojsonInternalTypes.CoValueKnownState): import("cojson/dist/ids.js").TransactionID[];
12
+ export declare function isTxSuccessful(successMap: SuccessMap, txID: CojsonInternalTypes.TransactionID): boolean;
13
+ //# sourceMappingURL=successMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"successMap.d.ts","sourceRoot":"","sources":["../src/successMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAEnC,eAAO,MAAM,UAAU,0CAGtB,CAAC;AACF,MAAM,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAEtD,MAAM,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC;AAE/C,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAEV;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,mBAAmB,CAAC,aAAa,QAMxC;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,mBAAmB,CAAC,iBAAiB,gDAiBlD;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,mBAAmB,CAAC,aAAa,WAGxC"}
@@ -0,0 +1,32 @@
1
+ import { co, z } from "jazz-tools";
2
+ export const SuccessMap = co.record(z.string(), // stringified transaction ID
3
+ z.boolean());
4
+ export function getTxIdKey(txID) {
5
+ return `${txID.sessionID}:${txID.txIndex}`;
6
+ }
7
+ export function markSuccessful(successMap, txID) {
8
+ let success = successMap[getTxIdKey(txID)];
9
+ if (!success) {
10
+ successMap.$jazz.set(getTxIdKey(txID), true);
11
+ }
12
+ }
13
+ export function getTransactionsToTry(successMap, knownState) {
14
+ const result = [];
15
+ // TODO: optimisation: we can likely avoid even constructing a CoMap view
16
+ // and just get/set raw transactions from the CoValueCore of SuccessMap
17
+ for (const [sessionID, knownTxCount] of Object.entries(knownState.sessions)) {
18
+ for (let txIndex = 0; txIndex < knownTxCount; txIndex++) {
19
+ if (!successMap[`${sessionID}:${txIndex}`]) {
20
+ result.push({
21
+ sessionID: sessionID,
22
+ txIndex: txIndex,
23
+ });
24
+ }
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ export function isTxSuccessful(successMap, txID) {
30
+ return successMap[getTxIdKey(txID)] ?? false;
31
+ }
32
+ //# sourceMappingURL=successMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"successMap.js","sourceRoot":"","sources":["../src/successMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM,CACjC,CAAC,CAAC,MAAM,EAAE,EAAE,6BAA6B;AACzC,CAAC,CAAC,OAAO,EAAE,CACZ,CAAC;AAKF,MAAM,UAAU,UAAU,CAAC,IAG1B;IACC,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,UAAsB,EACtB,IAAuC;IAEvC,IAAI,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAsB,EACtB,UAAiD;IAEjD,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,yEAAyE;IACzE,uEAAuE;IACvE,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC;oBACV,SAAS,EAAE,SAAsB;oBACjC,OAAO,EAAE,OAAO;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,UAAsB,EACtB,IAAuC;IAEvC,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { CojsonInternalTypes } from "cojson";
2
+ export interface WebhookRequest {
3
+ coValueId: string;
4
+ txID: CojsonInternalTypes.TransactionID;
5
+ timestamp: number;
6
+ }
7
+ export interface WebhookResponse {
8
+ statusCode: number;
9
+ body?: string;
10
+ delay?: number;
11
+ headers?: Record<string, string>;
12
+ }
13
+ export declare class WebhookTestServer {
14
+ private server;
15
+ private port;
16
+ private url;
17
+ private responseIndex;
18
+ readonly requests: WebhookRequest[];
19
+ readonly responses: WebhookResponse[];
20
+ constructor();
21
+ listeners: Set<() => void>;
22
+ addRequestListener(listener: () => void): void;
23
+ removeRequestListener(listener: () => void): void;
24
+ emitRequest(): void;
25
+ private handleRequest;
26
+ /**
27
+ * Starts the server on an available port
28
+ */
29
+ start(): Promise<void>;
30
+ /**
31
+ * Stops the server
32
+ */
33
+ close(): Promise<void>;
34
+ /**
35
+ * Resets all stored requests and responses
36
+ */
37
+ reset(): void;
38
+ /**
39
+ * Sets a response for a specific request index
40
+ */
41
+ setResponse(index: number, statusCode: number, body?: string, delay?: number, headers?: Record<string, string>): void;
42
+ /**
43
+ * Waits for a specific number of requests to be received
44
+ */
45
+ waitForRequests(count: number, timeout?: number): Promise<WebhookRequest[]>;
46
+ /**
47
+ * Gets the server port
48
+ */
49
+ getPort(): number;
50
+ /**
51
+ * Gets the webhook URL
52
+ */
53
+ getUrl(): string;
54
+ /**
55
+ * Gets the number of requests received
56
+ */
57
+ getRequestCount(): number;
58
+ expectSingleRequest(): WebhookRequest;
59
+ /**
60
+ * Gets the last request received
61
+ */
62
+ getLastRequest(): WebhookRequest;
63
+ /**
64
+ * Checks if the server is running
65
+ */
66
+ isRunning(): boolean;
67
+ }
68
+ /**
69
+ * Factory function to create and start a webhook test server
70
+ * @deprecated Use WebhookTestServer class directly
71
+ */
72
+ export declare function createWebhookTestServer(): Promise<WebhookTestServer>;
73
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/test/http-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,mBAAmB,CAAC,aAAa,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,aAAa,CAAa;IAElC,SAAgB,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChD,SAAgB,SAAS,EAAE,eAAe,EAAE,CAAM;;IAMlD,SAAS,YAAiB,IAAI,EAAI;IAClC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAG9C,qBAAqB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjD,WAAW,IAAI,IAAI;IAMnB,OAAO,CAAC,aAAa;IA+CrB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,IAAI;IAIP;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,cAAc,EAAE,CAAC;IAwB5B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB,mBAAmB,IAAI,cAAc;IAQrC;;OAEG;IACH,cAAc,IAAI,cAAc;IAShC;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAI1E"}
@@ -0,0 +1,177 @@
1
+ import { createServer } from "http";
2
+ export class WebhookTestServer {
3
+ constructor() {
4
+ this.port = 0;
5
+ this.url = "";
6
+ this.responseIndex = 0;
7
+ this.requests = [];
8
+ this.responses = [];
9
+ this.listeners = new Set();
10
+ this.server = createServer(this.handleRequest.bind(this));
11
+ }
12
+ addRequestListener(listener) {
13
+ this.listeners.add(listener);
14
+ }
15
+ removeRequestListener(listener) {
16
+ this.listeners.delete(listener);
17
+ }
18
+ emitRequest() {
19
+ for (const listener of this.listeners) {
20
+ listener();
21
+ }
22
+ }
23
+ handleRequest(req, res) {
24
+ if (req.method === "POST" && req.url === "/webhook") {
25
+ let body = "";
26
+ req.on("data", (chunk) => {
27
+ body += chunk.toString();
28
+ });
29
+ req.on("end", async () => {
30
+ try {
31
+ const response = this.responses[this.responseIndex] || {
32
+ statusCode: 200,
33
+ };
34
+ this.responseIndex++;
35
+ // Add delay if specified
36
+ if (response.delay) {
37
+ await new Promise((resolve) => setTimeout(resolve, response.delay));
38
+ }
39
+ res.statusCode = response.statusCode;
40
+ res.setHeader("Content-Type", "application/json");
41
+ if (response.headers) {
42
+ for (const [key, value] of Object.entries(response.headers)) {
43
+ res.setHeader(key, value);
44
+ }
45
+ }
46
+ res.end(response.body || JSON.stringify({ received: true }));
47
+ }
48
+ catch (error) {
49
+ res.statusCode = 400;
50
+ res.setHeader("Content-Type", "application/json");
51
+ res.end(JSON.stringify({ error: "Invalid JSON" }));
52
+ }
53
+ const webhookData = JSON.parse(body);
54
+ this.requests.push(webhookData);
55
+ console.log("request " + this.requests.length, webhookData);
56
+ this.emitRequest();
57
+ });
58
+ }
59
+ else {
60
+ res.statusCode = 404;
61
+ res.end("Not Found");
62
+ }
63
+ }
64
+ /**
65
+ * Starts the server on an available port
66
+ */
67
+ async start() {
68
+ return new Promise((resolve, reject) => {
69
+ this.server.listen(0, () => {
70
+ try {
71
+ const address = this.server.address();
72
+ this.port = address.port;
73
+ this.url = `http://localhost:${this.port}/webhook`;
74
+ resolve();
75
+ }
76
+ catch (error) {
77
+ reject(error);
78
+ }
79
+ });
80
+ this.server.on("error", reject);
81
+ });
82
+ }
83
+ /**
84
+ * Stops the server
85
+ */
86
+ async close() {
87
+ return new Promise((resolve) => {
88
+ this.server.close(() => {
89
+ resolve();
90
+ });
91
+ });
92
+ }
93
+ /**
94
+ * Resets all stored requests and responses
95
+ */
96
+ reset() {
97
+ this.requests.length = 0;
98
+ this.responses.length = 0;
99
+ this.responseIndex = 0;
100
+ }
101
+ /**
102
+ * Sets a response for a specific request index
103
+ */
104
+ setResponse(index, statusCode, body, delay, headers) {
105
+ this.responses[index] = { statusCode, body, delay, headers };
106
+ }
107
+ /**
108
+ * Waits for a specific number of requests to be received
109
+ */
110
+ async waitForRequests(count, timeout = 5000) {
111
+ return new Promise((resolve, reject) => {
112
+ const timer = setTimeout(() => {
113
+ this.removeRequestListener(onRequest);
114
+ reject(new Error(`Timeout waiting for ${count} requests. Got ${this.requests.length}`));
115
+ }, timeout);
116
+ const onRequest = () => {
117
+ if (this.requests.length >= count) {
118
+ clearTimeout(timer);
119
+ this.removeRequestListener(onRequest);
120
+ resolve(this.requests);
121
+ }
122
+ };
123
+ this.addRequestListener(onRequest);
124
+ onRequest();
125
+ });
126
+ }
127
+ /**
128
+ * Gets the server port
129
+ */
130
+ getPort() {
131
+ return this.port;
132
+ }
133
+ /**
134
+ * Gets the webhook URL
135
+ */
136
+ getUrl() {
137
+ return this.url;
138
+ }
139
+ /**
140
+ * Gets the number of requests received
141
+ */
142
+ getRequestCount() {
143
+ return this.requests.length;
144
+ }
145
+ expectSingleRequest() {
146
+ if (this.requests.length !== 1) {
147
+ throw new Error("Expected 1 request, got " + this.requests.length);
148
+ }
149
+ return this.getLastRequest();
150
+ }
151
+ /**
152
+ * Gets the last request received
153
+ */
154
+ getLastRequest() {
155
+ const lastRequest = this.requests.at(-1);
156
+ if (!lastRequest) {
157
+ throw new Error("No requests received");
158
+ }
159
+ return lastRequest;
160
+ }
161
+ /**
162
+ * Checks if the server is running
163
+ */
164
+ isRunning() {
165
+ return this.server.listening;
166
+ }
167
+ }
168
+ /**
169
+ * Factory function to create and start a webhook test server
170
+ * @deprecated Use WebhookTestServer class directly
171
+ */
172
+ export async function createWebhookTestServer() {
173
+ const server = new WebhookTestServer();
174
+ await server.start();
175
+ return server;
176
+ }
177
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/test/http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { beforeEach, afterEach } from "vitest";
2
+ import { setupJazzTestSync } from "jazz-tools/testing";
3
+ // Global test setup
4
+ beforeEach(async () => {
5
+ await setupJazzTestSync();
6
+ });
7
+ // Clean up after each test
8
+ afterEach(async () => {
9
+ // Clean up any global state if needed
10
+ });
11
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,oBAAoB;AACpB,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,sCAAsC;AACxC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=successMap.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"successMap.test.d.ts","sourceRoot":"","sources":["../../src/test/successMap.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ import { getTransactionsToTry, isTxSuccessful, markSuccessful, SuccessMap, } from "../successMap";
2
+ import { beforeEach, describe, expect, it } from "vitest";
3
+ import { createJazzTestAccount } from "jazz-tools/testing";
4
+ import { Account } from "jazz-tools";
5
+ describe("successMap", () => {
6
+ beforeEach(async () => {
7
+ await createJazzTestAccount({
8
+ AccountSchema: Account,
9
+ isCurrentActiveAccount: true,
10
+ });
11
+ });
12
+ it("should mark a first transaction as successful", async () => {
13
+ const successMap = SuccessMap.create({});
14
+ const transactionID = {
15
+ sessionID: "co_z123_session_z123",
16
+ txIndex: 0,
17
+ };
18
+ markSuccessful(successMap, transactionID);
19
+ expect(successMap).toEqual({
20
+ "co_z123_session_z123:0": true,
21
+ });
22
+ expect(isTxSuccessful(successMap, transactionID)).toBe(true);
23
+ });
24
+ it("should mark a second, consecutive transaction as successful", async () => {
25
+ const successMap = SuccessMap.create({});
26
+ const transactionID0 = {
27
+ sessionID: "co_z123_session_z123",
28
+ txIndex: 0,
29
+ };
30
+ const transactionID1 = {
31
+ sessionID: "co_z123_session_z123",
32
+ txIndex: 1,
33
+ };
34
+ markSuccessful(successMap, transactionID0);
35
+ markSuccessful(successMap, transactionID1);
36
+ expect(successMap).toEqual({
37
+ "co_z123_session_z123:0": true,
38
+ "co_z123_session_z123:1": true,
39
+ });
40
+ expect(isTxSuccessful(successMap, transactionID0)).toBe(true);
41
+ expect(isTxSuccessful(successMap, transactionID1)).toBe(true);
42
+ expect(isTxSuccessful(successMap, {
43
+ sessionID: transactionID0.sessionID,
44
+ txIndex: 3,
45
+ })).toBe(false);
46
+ });
47
+ it("should mark a second, non-consecutive transaction as successful", async () => {
48
+ const successMap = SuccessMap.create({});
49
+ const transactionID0 = {
50
+ sessionID: "co_z123_session_z123",
51
+ txIndex: 0,
52
+ };
53
+ const transactionID2 = {
54
+ sessionID: "co_z123_session_z123",
55
+ txIndex: 2,
56
+ };
57
+ markSuccessful(successMap, transactionID0);
58
+ markSuccessful(successMap, transactionID2);
59
+ expect(successMap).toEqual({
60
+ "co_z123_session_z123:0": true,
61
+ "co_z123_session_z123:2": true,
62
+ });
63
+ expect(isTxSuccessful(successMap, transactionID0)).toBe(true);
64
+ expect(isTxSuccessful(successMap, {
65
+ sessionID: transactionID0.sessionID,
66
+ txIndex: 1,
67
+ })).toBe(false);
68
+ expect(isTxSuccessful(successMap, transactionID2)).toBe(true);
69
+ expect(isTxSuccessful(successMap, {
70
+ sessionID: transactionID0.sessionID,
71
+ txIndex: 3,
72
+ })).toBe(false);
73
+ });
74
+ it("should mark gap-filling transactions as successful", async () => {
75
+ const successMap = SuccessMap.create({});
76
+ const transactionID0 = {
77
+ sessionID: "co_z123_session_z123",
78
+ txIndex: 0,
79
+ };
80
+ const transactionID2 = {
81
+ sessionID: "co_z123_session_z123",
82
+ txIndex: 2,
83
+ };
84
+ markSuccessful(successMap, transactionID0);
85
+ markSuccessful(successMap, transactionID2);
86
+ expect(successMap).toEqual({
87
+ "co_z123_session_z123:0": true,
88
+ "co_z123_session_z123:2": true,
89
+ });
90
+ expect(isTxSuccessful(successMap, transactionID0)).toBe(true);
91
+ expect(isTxSuccessful(successMap, transactionID2)).toBe(true);
92
+ expect(isTxSuccessful(successMap, {
93
+ sessionID: transactionID0.sessionID,
94
+ txIndex: 1,
95
+ })).toBe(false);
96
+ expect(isTxSuccessful(successMap, {
97
+ sessionID: transactionID0.sessionID,
98
+ txIndex: 3,
99
+ })).toBe(false);
100
+ markSuccessful(successMap, {
101
+ sessionID: transactionID0.sessionID,
102
+ txIndex: 1,
103
+ });
104
+ expect(successMap).toEqual({
105
+ "co_z123_session_z123:0": true,
106
+ "co_z123_session_z123:1": true,
107
+ "co_z123_session_z123:2": true,
108
+ });
109
+ expect(isTxSuccessful(successMap, transactionID0)).toBe(true);
110
+ expect(isTxSuccessful(successMap, transactionID2)).toBe(true);
111
+ expect(isTxSuccessful(successMap, {
112
+ sessionID: transactionID0.sessionID,
113
+ txIndex: 1,
114
+ })).toBe(true);
115
+ expect(isTxSuccessful(successMap, {
116
+ sessionID: transactionID0.sessionID,
117
+ txIndex: 3,
118
+ })).toBe(false);
119
+ });
120
+ it("should get transactions to retry", async () => {
121
+ const map1 = SuccessMap.create({});
122
+ expect(Array.from(getTransactionsToTry(map1, {
123
+ id: "co_z123",
124
+ header: false,
125
+ sessions: {
126
+ ["co_z123_session_z123"]: 3,
127
+ },
128
+ }))).toEqual([
129
+ {
130
+ sessionID: "co_z123_session_z123",
131
+ txIndex: 0,
132
+ },
133
+ {
134
+ sessionID: "co_z123_session_z123",
135
+ txIndex: 1,
136
+ },
137
+ {
138
+ sessionID: "co_z123_session_z123",
139
+ txIndex: 2,
140
+ },
141
+ ]);
142
+ const map2 = SuccessMap.create({
143
+ "co_z123_session_z123:0": true,
144
+ "co_z123_session_z123:2": true,
145
+ });
146
+ expect(Array.from(getTransactionsToTry(map2, {
147
+ id: "co_z123",
148
+ header: false,
149
+ sessions: {
150
+ ["co_z123_session_z123"]: 3,
151
+ },
152
+ }))).toEqual([
153
+ {
154
+ sessionID: "co_z123_session_z123",
155
+ txIndex: 1,
156
+ },
157
+ ]);
158
+ const map3 = SuccessMap.create({
159
+ "co_z123_session_z123:0": true,
160
+ "co_z123_session_z123:1": true,
161
+ "co_z123_session_z123:2": true,
162
+ });
163
+ expect(Array.from(getTransactionsToTry(map3, {
164
+ id: "co_z123",
165
+ header: false,
166
+ sessions: {
167
+ ["co_z123_session_z123"]: 3,
168
+ },
169
+ }))).toEqual([]);
170
+ });
171
+ });
172
+ //# sourceMappingURL=successMap.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"successMap.test.js","sourceRoot":"","sources":["../../src/test/successMap.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=webhook.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.test.d.ts","sourceRoot":"","sources":["../../src/test/webhook.test.ts"],"names":[],"mappings":""}