jazz-run 0.17.6 → 0.17.7
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 +1 -1
- package/CHANGELOG.md +10 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +25 -8
- package/dist/index.js.map +1 -1
- package/dist/startSyncServer.d.ts +4 -6
- package/dist/startSyncServer.d.ts.map +1 -1
- package/dist/startSyncServer.js +7 -3
- package/dist/startSyncServer.js.map +1 -1
- package/dist/tests/createWorkerAccount.test.js +2 -0
- package/dist/tests/createWorkerAccount.test.js.map +1 -1
- package/dist/tests/startSyncServer.test.js +23 -3
- package/dist/tests/startSyncServer.test.js.map +1 -1
- package/dist/tests/startWorker.test.js +10 -4
- package/dist/tests/startWorker.test.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +5 -5
- package/src/config.ts +6 -0
- package/src/index.ts +37 -9
- package/src/startSyncServer.ts +12 -5
- package/src/tests/createWorkerAccount.test.ts +2 -0
- package/src/tests/startSyncServer.test.ts +28 -5
- package/src/tests/startWorker.test.ts +13 -4
- package/src/types.ts +4 -0
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# jazz-run
|
2
2
|
|
3
|
+
## 0.17.7
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- feaa69e: Add host option to the jazz-run sync command
|
8
|
+
- cojson@0.17.7
|
9
|
+
- cojson-storage-sqlite@0.17.7
|
10
|
+
- cojson-transport-ws@0.17.7
|
11
|
+
- jazz-tools@0.17.7
|
12
|
+
|
3
13
|
## 0.17.6
|
4
14
|
|
5
15
|
### Patch Changes
|
package/dist/config.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC"}
|
package/dist/config.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,KAAK;IACf,EAAE,EAAE,oBAAoB;CACzB,CAAC"}
|
package/dist/index.js
CHANGED
@@ -5,6 +5,7 @@ import { NodeContext, NodeRuntime } from "@effect/platform-node";
|
|
5
5
|
import { Console, Effect } from "effect";
|
6
6
|
import { createWorkerAccount } from "./createWorkerAccount.js";
|
7
7
|
import { startSyncServer } from "./startSyncServer.js";
|
8
|
+
import { serverDefaults } from "./config.js";
|
8
9
|
const jazzTools = Command.make("jazz-tools");
|
9
10
|
const nameOption = Options.text("name").pipe(Options.withAlias("n"));
|
10
11
|
const jsonOption = Options.boolean("json");
|
@@ -26,18 +27,34 @@ JAZZ_WORKER_SECRET=${agentSecret}
|
|
26
27
|
});
|
27
28
|
});
|
28
29
|
const accountCommand = Command.make("account").pipe(Command.withSubcommands([createAccountCommand]));
|
30
|
+
const hostOption = Options.text("host")
|
31
|
+
.pipe(Options.withAlias("h"))
|
32
|
+
.pipe(Options.withDescription(`The host to listen on. Default is ${serverDefaults.host}`))
|
33
|
+
.pipe(Options.withDefault(serverDefaults.host));
|
29
34
|
const portOption = Options.text("port")
|
30
35
|
.pipe(Options.withAlias("p"))
|
31
|
-
.pipe(Options.withDescription(
|
32
|
-
.pipe(Options.withDefault(
|
33
|
-
const inMemoryOption = Options.boolean("in-memory").pipe(Options.withDescription("Use an in-memory storage instead of file-based"));
|
36
|
+
.pipe(Options.withDescription(`Select a different port for the WebSocket server. Default is ${serverDefaults.port}`))
|
37
|
+
.pipe(Options.withDefault(serverDefaults.port.toString()));
|
38
|
+
const inMemoryOption = Options.boolean("in-memory").pipe(Options.withDescription("Use an in-memory storage instead of file-based."));
|
34
39
|
const dbOption = Options.file("db")
|
35
|
-
.pipe(Options.withDescription(
|
36
|
-
.pipe(Options.withDefault(
|
37
|
-
const startSyncServerCommand = Command.make("sync", {
|
40
|
+
.pipe(Options.withDescription(`The path to the file where to store the data. Default is '${serverDefaults.db}'`))
|
41
|
+
.pipe(Options.withDefault(serverDefaults.db));
|
42
|
+
const startSyncServerCommand = Command.make("sync", {
|
43
|
+
host: hostOption,
|
44
|
+
port: portOption,
|
45
|
+
inMemory: inMemoryOption,
|
46
|
+
db: dbOption,
|
47
|
+
}, ({ host, port, inMemory, db }) => {
|
38
48
|
return Effect.gen(function* () {
|
39
|
-
yield* Effect.promise(() => startSyncServer({ port, inMemory, db }));
|
40
|
-
|
49
|
+
const server = yield* Effect.promise(() => startSyncServer({ host, port, inMemory, db }));
|
50
|
+
const serverAddress = server.address();
|
51
|
+
if (!serverAddress) {
|
52
|
+
return yield* Effect.fail(new Error("Failed to start sync server."));
|
53
|
+
}
|
54
|
+
const socketAddress = typeof serverAddress === "object"
|
55
|
+
? `${serverAddress.address}:${serverAddress.port}`
|
56
|
+
: serverAddress;
|
57
|
+
yield* Console.log(`COJSON sync server listening on ws://${socketAddress}`);
|
41
58
|
// Keep the server up
|
42
59
|
yield* Effect.never;
|
43
60
|
});
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,uCAAuC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,10 +1,8 @@
|
|
1
|
-
import { type
|
2
|
-
|
3
|
-
|
1
|
+
import { type SyncServer } from "./types.js";
|
2
|
+
export declare const startSyncServer: ({ host, port, inMemory, db, }: {
|
3
|
+
host: string | undefined;
|
4
4
|
port: string | undefined;
|
5
5
|
inMemory: boolean;
|
6
6
|
db: string;
|
7
|
-
}) => Promise<
|
8
|
-
localNode: LocalNode;
|
9
|
-
}>;
|
7
|
+
}) => Promise<SyncServer>;
|
10
8
|
//# sourceMappingURL=startSyncServer.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"startSyncServer.d.ts","sourceRoot":"","sources":["../src/startSyncServer.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"startSyncServer.d.ts","sourceRoot":"","sources":["../src/startSyncServer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,eAAe,kCAKzB;IACD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ,KAAG,OAAO,CAAC,UAAU,CAgGrB,CAAC"}
|
package/dist/startSyncServer.js
CHANGED
@@ -6,7 +6,7 @@ import { getBetterSqliteStorage } from "cojson-storage-sqlite";
|
|
6
6
|
import { createWebSocketPeer } from "cojson-transport-ws";
|
7
7
|
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
|
8
8
|
import { WebSocketServer } from "ws";
|
9
|
-
export const startSyncServer = async ({ port, inMemory, db, }) => {
|
9
|
+
export const startSyncServer = async ({ host, port, inMemory, db, }) => {
|
10
10
|
const crypto = await WasmCrypto.create();
|
11
11
|
const server = createServer((req, res) => {
|
12
12
|
if (req.url === "/health") {
|
@@ -60,13 +60,17 @@ export const startSyncServer = async ({ port, inMemory, db, }) => {
|
|
60
60
|
server.on("close", () => {
|
61
61
|
localNode.gracefulShutdown();
|
62
62
|
});
|
63
|
-
server.listen(port ? parseInt(port) : undefined);
|
64
63
|
const _close = server.close;
|
65
64
|
server.close = () => {
|
66
65
|
localNode.gracefulShutdown();
|
67
66
|
return _close.call(server);
|
68
67
|
};
|
69
68
|
Object.defineProperty(server, "localNode", { value: localNode });
|
70
|
-
|
69
|
+
server.listen(port ? parseInt(port) : undefined, host);
|
70
|
+
return new Promise((resolve) => {
|
71
|
+
server.once("listening", () => {
|
72
|
+
resolve(server);
|
73
|
+
});
|
74
|
+
});
|
71
75
|
};
|
72
76
|
//# sourceMappingURL=startSyncServer.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"startSyncServer.js","sourceRoot":"","sources":["../src/startSyncServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,
|
1
|
+
{"version":3,"file":"startSyncServer.js","sourceRoot":"","sources":["../src/startSyncServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAGrC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,EAAE,GAMH,EAAuB,EAAE;IACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,IAAI,SAAS,CAC7B,WAAW,EACX,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAClC,MAAM,CACP,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAE3C,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,sBAAsB,EAAE,CAAC;IAEnC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,UAAU,CAAC,EAAE,EAAE,GAAG;QAC9C,wCAAwC;QACxC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;gBAChB,EAAE,EAAE,SAAS;aACd,CAAC,CACH,CAAC;QACJ,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,aAAa,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAChB,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAwB;YACpD,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACf,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAEzC,MAAM,QAAQ,GAAG,aAAa,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhE,SAAS,CAAC,WAAW,CAAC,OAAO,CAC3B,mBAAmB,CAAC;YAClB,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,KAAK;YAClB,iBAAiB,EAAE,KAAK;YACxB,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI;QACrD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,EAAE;gBACnD,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,SAAS,CAAC,gBAAgB,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAE5B,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE;QAClB,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAE7B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAEjE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5B,OAAO,CAAC,MAAoB,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
@@ -5,10 +5,12 @@ import { describe, expect, it, onTestFinished } from "vitest";
|
|
5
5
|
import { WebSocket } from "ws";
|
6
6
|
import { createWorkerAccount } from "../createWorkerAccount.js";
|
7
7
|
import { startSyncServer } from "../startSyncServer.js";
|
8
|
+
import { serverDefaults } from "../config.js";
|
8
9
|
describe("createWorkerAccount - integration tests", () => {
|
9
10
|
it("should create a worker account using the local sync server", async () => {
|
10
11
|
// Pass port: undefined to let the server choose a random port
|
11
12
|
const server = await startSyncServer({
|
13
|
+
host: serverDefaults.host,
|
12
14
|
port: undefined,
|
13
15
|
inMemory: true,
|
14
16
|
db: "",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"createWorkerAccount.test.js","sourceRoot":"","sources":["../../src/tests/createWorkerAccount.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
1
|
+
{"version":3,"file":"createWorkerAccount.test.js","sourceRoot":"","sources":["../../src/tests/createWorkerAccount.test.ts"],"names":[],"mappings":"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"}
|
@@ -3,18 +3,23 @@ import { tmpdir } from "os";
|
|
3
3
|
import { join } from "path";
|
4
4
|
import { co, z } from "jazz-tools";
|
5
5
|
import { startWorker } from "jazz-tools/worker";
|
6
|
-
import { describe, expect, test } from "vitest";
|
6
|
+
import { describe, expect, test, afterAll } from "vitest";
|
7
7
|
import { createWorkerAccount } from "../createWorkerAccount.js";
|
8
8
|
import { startSyncServer } from "../startSyncServer.js";
|
9
|
+
import { serverDefaults } from "../config.js";
|
10
|
+
import { unlinkSync } from "node:fs";
|
9
11
|
const TestMap = co.map({
|
10
12
|
value: z.string(),
|
11
13
|
});
|
14
|
+
const dbPath = join(tmpdir(), `test-${randomUUID()}.db`);
|
15
|
+
afterAll(() => {
|
16
|
+
unlinkSync(dbPath);
|
17
|
+
});
|
12
18
|
describe("startSyncServer", () => {
|
13
19
|
test("persists values in storage and loads them after restart", async () => {
|
14
|
-
// Create a temporary database file
|
15
|
-
const dbPath = join(tmpdir(), `test-${randomUUID()}.db`);
|
16
20
|
// Start first server instance
|
17
21
|
const server1 = await startSyncServer({
|
22
|
+
host: serverDefaults.host,
|
18
23
|
port: "0", // Random available port
|
19
24
|
inMemory: false,
|
20
25
|
db: dbPath,
|
@@ -38,6 +43,7 @@ describe("startSyncServer", () => {
|
|
38
43
|
server1.close();
|
39
44
|
// Start second server instance with same DB
|
40
45
|
const server2 = await startSyncServer({
|
46
|
+
host: serverDefaults.host,
|
41
47
|
port: "0",
|
42
48
|
inMemory: false,
|
43
49
|
db: dbPath,
|
@@ -59,5 +65,19 @@ describe("startSyncServer", () => {
|
|
59
65
|
await worker2.done();
|
60
66
|
server2.close();
|
61
67
|
});
|
68
|
+
test("starts a sync server with a specific host and port", async () => {
|
69
|
+
const server = await startSyncServer({
|
70
|
+
host: "0.0.0.0",
|
71
|
+
port: "4900",
|
72
|
+
inMemory: false,
|
73
|
+
db: dbPath,
|
74
|
+
});
|
75
|
+
expect(server.address()).toEqual({
|
76
|
+
address: "0.0.0.0",
|
77
|
+
port: 4900,
|
78
|
+
family: "IPv4",
|
79
|
+
});
|
80
|
+
server.close();
|
81
|
+
});
|
62
82
|
});
|
63
83
|
//# sourceMappingURL=startSyncServer.test.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"startSyncServer.test.js","sourceRoot":"","sources":["../../src/tests/startSyncServer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"startSyncServer.test.js","sourceRoot":"","sources":["../../src/tests/startSyncServer.test.ts"],"names":[],"mappings":"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"}
|
@@ -8,13 +8,14 @@ import { afterAll, describe, expect, onTestFinished, test } from "vitest";
|
|
8
8
|
import { createWorkerAccount } from "../createWorkerAccount.js";
|
9
9
|
import { startSyncServer } from "../startSyncServer.js";
|
10
10
|
import { waitFor } from "./utils.js";
|
11
|
+
import { serverDefaults } from "../config.js";
|
11
12
|
const dbPath = join(tmpdir(), `test-${randomUUID()}.db`);
|
12
13
|
afterAll(() => {
|
13
14
|
unlinkSync(dbPath);
|
14
15
|
});
|
15
16
|
async function setup(AccountSchema) {
|
16
|
-
const { server, port } = await setupSyncServer();
|
17
|
-
const syncServer = `ws
|
17
|
+
const { server, port, host } = await setupSyncServer();
|
18
|
+
const syncServer = `ws://${host}:${port}`;
|
18
19
|
const { worker, done, waitForConnection, subscribeToConnectionChange } = await setupWorker(syncServer, AccountSchema);
|
19
20
|
return {
|
20
21
|
worker,
|
@@ -22,12 +23,14 @@ async function setup(AccountSchema) {
|
|
22
23
|
syncServer,
|
23
24
|
server,
|
24
25
|
port,
|
26
|
+
host,
|
25
27
|
waitForConnection,
|
26
28
|
subscribeToConnectionChange,
|
27
29
|
};
|
28
30
|
}
|
29
|
-
async function setupSyncServer(defaultPort = "0") {
|
31
|
+
async function setupSyncServer(defaultHost = serverDefaults.host, defaultPort = "0") {
|
30
32
|
const server = await startSyncServer({
|
33
|
+
host: defaultHost,
|
31
34
|
port: defaultPort,
|
32
35
|
inMemory: false,
|
33
36
|
db: dbPath,
|
@@ -36,7 +39,7 @@ async function setupSyncServer(defaultPort = "0") {
|
|
36
39
|
onTestFinished(() => {
|
37
40
|
server.close();
|
38
41
|
});
|
39
|
-
return { server, port };
|
42
|
+
return { server, port, host: defaultHost };
|
40
43
|
}
|
41
44
|
async function setupWorker(syncServer, AccountSchema) {
|
42
45
|
const { accountID, agentSecret } = await createWorkerAccount({
|
@@ -157,6 +160,7 @@ describe("startWorker integration", () => {
|
|
157
160
|
map.value = "updated while offline";
|
158
161
|
// Start a new sync server on the same port
|
159
162
|
const newServer = await startSyncServer({
|
163
|
+
host: worker1.host,
|
160
164
|
port: worker1.port,
|
161
165
|
inMemory: true,
|
162
166
|
db: "",
|
@@ -181,6 +185,7 @@ describe("startWorker integration", () => {
|
|
181
185
|
worker1.server.close();
|
182
186
|
// Start a new sync server on the same port
|
183
187
|
const newServer = await startSyncServer({
|
188
|
+
host: worker1.host,
|
184
189
|
port: worker1.port,
|
185
190
|
inMemory: true,
|
186
191
|
db: "",
|
@@ -208,6 +213,7 @@ describe("startWorker integration", () => {
|
|
208
213
|
});
|
209
214
|
// Start a new sync server on the same port
|
210
215
|
const newServer = await startSyncServer({
|
216
|
+
host: worker1.host,
|
211
217
|
port: worker1.port,
|
212
218
|
inMemory: true,
|
213
219
|
db: "",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"startWorker.test.js","sourceRoot":"","sources":["../../src/tests/startWorker.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAKL,KAAK,EACL,WAAW,EAEX,EAAE,EACF,CAAC,GACF,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
1
|
+
{"version":3,"file":"startWorker.test.js","sourceRoot":"","sources":["../../src/tests/startWorker.test.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC"}
|
package/dist/types.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"bin": "./dist/index.js",
|
4
4
|
"type": "module",
|
5
5
|
"license": "MIT",
|
6
|
-
"version": "0.17.
|
6
|
+
"version": "0.17.7",
|
7
7
|
"exports": {
|
8
8
|
"./startSyncServer": {
|
9
9
|
"types": "./dist/startSyncServer.d.ts",
|
@@ -21,11 +21,11 @@
|
|
21
21
|
"@effect/printer-ansi": "^0.34.5",
|
22
22
|
"@effect/schema": "^0.71.1",
|
23
23
|
"@effect/typeclass": "^0.25.5",
|
24
|
-
"cojson": "0.17.
|
25
|
-
"cojson-storage-sqlite": "0.17.
|
26
|
-
"cojson-transport-ws": "0.17.
|
24
|
+
"cojson": "0.17.7",
|
25
|
+
"cojson-storage-sqlite": "0.17.7",
|
26
|
+
"cojson-transport-ws": "0.17.7",
|
27
27
|
"effect": "^3.6.5",
|
28
|
-
"jazz-tools": "0.17.
|
28
|
+
"jazz-tools": "0.17.7",
|
29
29
|
"ws": "^8.14.2"
|
30
30
|
},
|
31
31
|
"devDependencies": {
|
package/src/config.ts
ADDED
package/src/index.ts
CHANGED
@@ -5,6 +5,7 @@ import { NodeContext, NodeRuntime } from "@effect/platform-node";
|
|
5
5
|
import { Console, Effect } from "effect";
|
6
6
|
import { createWorkerAccount } from "./createWorkerAccount.js";
|
7
7
|
import { startSyncServer } from "./startSyncServer.js";
|
8
|
+
import { serverDefaults } from "./config.js";
|
8
9
|
|
9
10
|
const jazzTools = Command.make("jazz-tools");
|
10
11
|
|
@@ -39,36 +40,63 @@ const accountCommand = Command.make("account").pipe(
|
|
39
40
|
Command.withSubcommands([createAccountCommand]),
|
40
41
|
);
|
41
42
|
|
43
|
+
const hostOption = Options.text("host")
|
44
|
+
.pipe(Options.withAlias("h"))
|
45
|
+
.pipe(
|
46
|
+
Options.withDescription(
|
47
|
+
`The host to listen on. Default is ${serverDefaults.host}`,
|
48
|
+
),
|
49
|
+
)
|
50
|
+
.pipe(Options.withDefault(serverDefaults.host));
|
51
|
+
|
42
52
|
const portOption = Options.text("port")
|
43
53
|
.pipe(Options.withAlias("p"))
|
44
54
|
.pipe(
|
45
55
|
Options.withDescription(
|
46
|
-
|
56
|
+
`Select a different port for the WebSocket server. Default is ${serverDefaults.port}`,
|
47
57
|
),
|
48
58
|
)
|
49
|
-
.pipe(Options.withDefault(
|
59
|
+
.pipe(Options.withDefault(serverDefaults.port.toString()));
|
50
60
|
|
51
61
|
const inMemoryOption = Options.boolean("in-memory").pipe(
|
52
|
-
Options.withDescription("Use an in-memory storage instead of file-based"),
|
62
|
+
Options.withDescription("Use an in-memory storage instead of file-based."),
|
53
63
|
);
|
54
64
|
|
55
65
|
const dbOption = Options.file("db")
|
56
66
|
.pipe(
|
57
67
|
Options.withDescription(
|
58
|
-
|
68
|
+
`The path to the file where to store the data. Default is '${serverDefaults.db}'`,
|
59
69
|
),
|
60
70
|
)
|
61
|
-
.pipe(Options.withDefault(
|
71
|
+
.pipe(Options.withDefault(serverDefaults.db));
|
62
72
|
|
63
73
|
const startSyncServerCommand = Command.make(
|
64
74
|
"sync",
|
65
|
-
{
|
66
|
-
|
75
|
+
{
|
76
|
+
host: hostOption,
|
77
|
+
port: portOption,
|
78
|
+
inMemory: inMemoryOption,
|
79
|
+
db: dbOption,
|
80
|
+
},
|
81
|
+
({ host, port, inMemory, db }) => {
|
67
82
|
return Effect.gen(function* () {
|
68
|
-
yield* Effect.promise(() =>
|
83
|
+
const server = yield* Effect.promise(() =>
|
84
|
+
startSyncServer({ host, port, inMemory, db }),
|
85
|
+
);
|
86
|
+
|
87
|
+
const serverAddress = server.address();
|
88
|
+
|
89
|
+
if (!serverAddress) {
|
90
|
+
return yield* Effect.fail(new Error("Failed to start sync server."));
|
91
|
+
}
|
92
|
+
|
93
|
+
const socketAddress =
|
94
|
+
typeof serverAddress === "object"
|
95
|
+
? `${serverAddress.address}:${serverAddress.port}`
|
96
|
+
: serverAddress;
|
69
97
|
|
70
98
|
yield* Console.log(
|
71
|
-
`COJSON sync server listening on ws
|
99
|
+
`COJSON sync server listening on ws://${socketAddress}`,
|
72
100
|
);
|
73
101
|
|
74
102
|
// Keep the server up
|
package/src/startSyncServer.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { createServer
|
1
|
+
import { createServer } from "node:http";
|
2
2
|
import { mkdir } from "node:fs/promises";
|
3
3
|
import { dirname } from "node:path";
|
4
4
|
import { LocalNode } from "cojson";
|
@@ -6,16 +6,19 @@ import { getBetterSqliteStorage } from "cojson-storage-sqlite";
|
|
6
6
|
import { createWebSocketPeer } from "cojson-transport-ws";
|
7
7
|
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
|
8
8
|
import { WebSocketServer } from "ws";
|
9
|
+
import { type SyncServer } from "./types.js";
|
9
10
|
|
10
11
|
export const startSyncServer = async ({
|
12
|
+
host,
|
11
13
|
port,
|
12
14
|
inMemory,
|
13
15
|
db,
|
14
16
|
}: {
|
17
|
+
host: string | undefined;
|
15
18
|
port: string | undefined;
|
16
19
|
inMemory: boolean;
|
17
20
|
db: string;
|
18
|
-
}) => {
|
21
|
+
}): Promise<SyncServer> => {
|
19
22
|
const crypto = await WasmCrypto.create();
|
20
23
|
|
21
24
|
const server = createServer((req, res) => {
|
@@ -94,8 +97,6 @@ export const startSyncServer = async ({
|
|
94
97
|
localNode.gracefulShutdown();
|
95
98
|
});
|
96
99
|
|
97
|
-
server.listen(port ? parseInt(port) : undefined);
|
98
|
-
|
99
100
|
const _close = server.close;
|
100
101
|
|
101
102
|
server.close = () => {
|
@@ -106,5 +107,11 @@ export const startSyncServer = async ({
|
|
106
107
|
|
107
108
|
Object.defineProperty(server, "localNode", { value: localNode });
|
108
109
|
|
109
|
-
|
110
|
+
server.listen(port ? parseInt(port) : undefined, host);
|
111
|
+
|
112
|
+
return new Promise((resolve) => {
|
113
|
+
server.once("listening", () => {
|
114
|
+
resolve(server as SyncServer);
|
115
|
+
});
|
116
|
+
});
|
110
117
|
};
|
@@ -5,11 +5,13 @@ import { describe, expect, it, onTestFinished } from "vitest";
|
|
5
5
|
import { WebSocket } from "ws";
|
6
6
|
import { createWorkerAccount } from "../createWorkerAccount.js";
|
7
7
|
import { startSyncServer } from "../startSyncServer.js";
|
8
|
+
import { serverDefaults } from "../config.js";
|
8
9
|
|
9
10
|
describe("createWorkerAccount - integration tests", () => {
|
10
11
|
it("should create a worker account using the local sync server", async () => {
|
11
12
|
// Pass port: undefined to let the server choose a random port
|
12
13
|
const server = await startSyncServer({
|
14
|
+
host: serverDefaults.host,
|
13
15
|
port: undefined,
|
14
16
|
inMemory: true,
|
15
17
|
db: "",
|
@@ -1,24 +1,29 @@
|
|
1
1
|
import { randomUUID } from "crypto";
|
2
2
|
import { tmpdir } from "os";
|
3
3
|
import { join } from "path";
|
4
|
-
import { LocalNode } from "cojson";
|
5
4
|
import { co, z } from "jazz-tools";
|
6
5
|
import { startWorker } from "jazz-tools/worker";
|
7
|
-
import { describe, expect, test } from "vitest";
|
6
|
+
import { describe, expect, test, afterAll } from "vitest";
|
8
7
|
import { createWorkerAccount } from "../createWorkerAccount.js";
|
9
8
|
import { startSyncServer } from "../startSyncServer.js";
|
9
|
+
import { serverDefaults } from "../config.js";
|
10
|
+
import { unlinkSync } from "node:fs";
|
10
11
|
|
11
12
|
const TestMap = co.map({
|
12
13
|
value: z.string(),
|
13
14
|
});
|
14
15
|
|
16
|
+
const dbPath = join(tmpdir(), `test-${randomUUID()}.db`);
|
17
|
+
|
18
|
+
afterAll(() => {
|
19
|
+
unlinkSync(dbPath);
|
20
|
+
});
|
21
|
+
|
15
22
|
describe("startSyncServer", () => {
|
16
23
|
test("persists values in storage and loads them after restart", async () => {
|
17
|
-
// Create a temporary database file
|
18
|
-
const dbPath = join(tmpdir(), `test-${randomUUID()}.db`);
|
19
|
-
|
20
24
|
// Start first server instance
|
21
25
|
const server1 = await startSyncServer({
|
26
|
+
host: serverDefaults.host,
|
22
27
|
port: "0", // Random available port
|
23
28
|
inMemory: false,
|
24
29
|
db: dbPath,
|
@@ -48,6 +53,7 @@ describe("startSyncServer", () => {
|
|
48
53
|
|
49
54
|
// Start second server instance with same DB
|
50
55
|
const server2 = await startSyncServer({
|
56
|
+
host: serverDefaults.host,
|
51
57
|
port: "0",
|
52
58
|
inMemory: false,
|
53
59
|
db: dbPath,
|
@@ -74,4 +80,21 @@ describe("startSyncServer", () => {
|
|
74
80
|
await worker2.done();
|
75
81
|
server2.close();
|
76
82
|
});
|
83
|
+
|
84
|
+
test("starts a sync server with a specific host and port", async () => {
|
85
|
+
const server = await startSyncServer({
|
86
|
+
host: "0.0.0.0",
|
87
|
+
port: "4900",
|
88
|
+
inMemory: false,
|
89
|
+
db: dbPath,
|
90
|
+
});
|
91
|
+
|
92
|
+
expect(server.address()).toEqual({
|
93
|
+
address: "0.0.0.0",
|
94
|
+
port: 4900,
|
95
|
+
family: "IPv4",
|
96
|
+
});
|
97
|
+
|
98
|
+
server.close();
|
99
|
+
});
|
77
100
|
});
|
@@ -18,6 +18,7 @@ import { afterAll, describe, expect, onTestFinished, test } from "vitest";
|
|
18
18
|
import { createWorkerAccount } from "../createWorkerAccount.js";
|
19
19
|
import { startSyncServer } from "../startSyncServer.js";
|
20
20
|
import { waitFor } from "./utils.js";
|
21
|
+
import { serverDefaults } from "../config.js";
|
21
22
|
|
22
23
|
const dbPath = join(tmpdir(), `test-${randomUUID()}.db`);
|
23
24
|
|
@@ -30,9 +31,9 @@ async function setup<
|
|
30
31
|
| (AccountClass<Account> & CoValueFromRaw<Account>)
|
31
32
|
| AnyAccountSchema,
|
32
33
|
>(AccountSchema?: S) {
|
33
|
-
const { server, port } = await setupSyncServer();
|
34
|
+
const { server, port, host } = await setupSyncServer();
|
34
35
|
|
35
|
-
const syncServer = `ws
|
36
|
+
const syncServer = `ws://${host}:${port}`;
|
36
37
|
|
37
38
|
const { worker, done, waitForConnection, subscribeToConnectionChange } =
|
38
39
|
await setupWorker(syncServer, AccountSchema);
|
@@ -43,13 +44,18 @@ async function setup<
|
|
43
44
|
syncServer,
|
44
45
|
server,
|
45
46
|
port,
|
47
|
+
host,
|
46
48
|
waitForConnection,
|
47
49
|
subscribeToConnectionChange,
|
48
50
|
};
|
49
51
|
}
|
50
52
|
|
51
|
-
async function setupSyncServer(
|
53
|
+
async function setupSyncServer(
|
54
|
+
defaultHost = serverDefaults.host,
|
55
|
+
defaultPort = "0",
|
56
|
+
) {
|
52
57
|
const server = await startSyncServer({
|
58
|
+
host: defaultHost,
|
53
59
|
port: defaultPort,
|
54
60
|
inMemory: false,
|
55
61
|
db: dbPath,
|
@@ -61,7 +67,7 @@ async function setupSyncServer(defaultPort = "0") {
|
|
61
67
|
server.close();
|
62
68
|
});
|
63
69
|
|
64
|
-
return { server, port };
|
70
|
+
return { server, port, host: defaultHost };
|
65
71
|
}
|
66
72
|
|
67
73
|
async function setupWorker<
|
@@ -258,6 +264,7 @@ describe("startWorker integration", () => {
|
|
258
264
|
|
259
265
|
// Start a new sync server on the same port
|
260
266
|
const newServer = await startSyncServer({
|
267
|
+
host: worker1.host,
|
261
268
|
port: worker1.port,
|
262
269
|
inMemory: true,
|
263
270
|
db: "",
|
@@ -290,6 +297,7 @@ describe("startWorker integration", () => {
|
|
290
297
|
|
291
298
|
// Start a new sync server on the same port
|
292
299
|
const newServer = await startSyncServer({
|
300
|
+
host: worker1.host,
|
293
301
|
port: worker1.port,
|
294
302
|
inMemory: true,
|
295
303
|
db: "",
|
@@ -326,6 +334,7 @@ describe("startWorker integration", () => {
|
|
326
334
|
|
327
335
|
// Start a new sync server on the same port
|
328
336
|
const newServer = await startSyncServer({
|
337
|
+
host: worker1.host,
|
329
338
|
port: worker1.port,
|
330
339
|
inMemory: true,
|
331
340
|
db: "",
|
package/src/types.ts
ADDED