jazz-run 0.17.6 → 0.17.8
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 +22 -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,27 @@
|
|
1
1
|
# jazz-run
|
2
2
|
|
3
|
+
## 0.17.8
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- Updated dependencies [ac3e694]
|
8
|
+
- Updated dependencies [6dbb053]
|
9
|
+
- Updated dependencies [1a182f0]
|
10
|
+
- jazz-tools@0.17.8
|
11
|
+
- cojson@0.17.8
|
12
|
+
- cojson-storage-sqlite@0.17.8
|
13
|
+
- cojson-transport-ws@0.17.8
|
14
|
+
|
15
|
+
## 0.17.7
|
16
|
+
|
17
|
+
### Patch Changes
|
18
|
+
|
19
|
+
- feaa69e: Add host option to the jazz-run sync command
|
20
|
+
- cojson@0.17.7
|
21
|
+
- cojson-storage-sqlite@0.17.7
|
22
|
+
- cojson-transport-ws@0.17.7
|
23
|
+
- jazz-tools@0.17.7
|
24
|
+
|
3
25
|
## 0.17.6
|
4
26
|
|
5
27
|
### 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":"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"}
|
@@ -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.8",
|
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.8",
|
25
|
+
"cojson-storage-sqlite": "0.17.8",
|
26
|
+
"cojson-transport-ws": "0.17.8",
|
27
27
|
"effect": "^3.6.5",
|
28
|
-
"jazz-tools": "0.17.
|
28
|
+
"jazz-tools": "0.17.8",
|
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