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
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.
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.test.d.ts","sourceRoot":"","sources":["../../src/test/webhook.test.ts"],"names":[],"mappings":""}
|