@evolu/common 5.2.3 → 5.3.0

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.
@@ -34,6 +34,20 @@ export interface Config {
34
34
  * events with values. For production, use `warning`.
35
35
  */
36
36
  minimumLogLevel: "none" | "trace" | "debug" | "warning";
37
+ /**
38
+ * Enables websocket connection
39
+ *
40
+ * If set to true runs a websocket connection on the sync url
41
+ */
42
+ enableWebsocketConnection?: true;
43
+ /**
44
+ * Allows to reuse websocket connections for multiple database setup
45
+ *
46
+ * Works INSTEAD of enableWebsocket and if set overrides enableWebsocket this
47
+ * attaches the database to a connection produced by a call back from another
48
+ * database that has enableWebsocketConnection
49
+ */
50
+ externalWebsocketConnection?: WebSocket;
37
51
  }
38
52
  export declare const Config: Context.Tag<Config, Config>;
39
53
  export declare const defaultConfig: Config;
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAI1C,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;CACzD;AAED,eAAO,MAAM,MAAM,6BAAuC,CAAC;AAE3D,eAAO,MAAM,aAAa,EAAE,MAM3B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,aAAa,mBACR,OAAO,CAAC,MAAM,CAAC,KAC9B,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAsB7C,CAAC"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAI1C,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAExD;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,IAAI,CAAC;IAEjC;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,SAAS,CAAC;CACzC;AAED,eAAO,MAAM,MAAM,6BAAuC,CAAC;AAE3D,eAAO,MAAM,aAAa,EAAE,MAM3B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,aAAa,mBACR,OAAO,CAAC,MAAM,CAAC,KAC9B,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAsB7C,CAAC"}
@@ -36,6 +36,7 @@ import { SyncState } from "./Sync.js";
36
36
  * - Ensuring the database schema's integrity with ensureSchema.
37
37
  */
38
38
  export interface Evolu<T extends EvoluSchema = EvoluSchema> {
39
+ readonly socket: Promise<WebSocket | undefined>;
39
40
  /**
40
41
  * Subscribe to {@link EvoluError} changes.
41
42
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"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"}
package/dist/src/Evolu.js CHANGED
@@ -12,6 +12,7 @@ import * as Record from "effect/Record";
12
12
  import * as Kysely from "kysely";
13
13
  import { Config, createRuntime, defaultConfig } from "./Config.js";
14
14
  import { NanoIdGenerator } from "./Crypto.js";
15
+ import { createSocket } from "./Socket.js";
15
16
  import { DbFactory, deserializeQuery, emptyRows, queryResultFromRows, serializeQuery, } from "./Db.js";
16
17
  import { applyPatches } from "./Diff.js";
17
18
  import { makeUnexpectedError } from "./Error.js";
@@ -102,6 +103,16 @@ const createEvolu = (schema, runtime, initialData, mnemonic) => Effect.gen(funct
102
103
  };
103
104
  db.init(schema, initialDataAsMutations, handleDbError, handleSyncStateChange, handleDbReceive, mnemonic).pipe(Effect.tap(sync({ refreshQueries: false })), Effect.flatMap(ownerStore.setState), Effect.catchTag("NotSupportedPlatformError", () => Effect.void), // no-op
104
105
  runFork);
106
+ let socketResolved = false;
107
+ const socket = new Promise((resolve) => {
108
+ ownerStore.subscribe(() => {
109
+ const owner = ownerStore.getState();
110
+ if (!socketResolved && typeof owner?.id === "string") {
111
+ socketResolved = true;
112
+ resolve(createSocket(sync, config, owner));
113
+ }
114
+ });
115
+ });
105
116
  const appStateReset = yield* appState.init({
106
117
  onRequestSync: sync({ refreshQueries: true }),
107
118
  reloadUrl: config.reloadUrl,
@@ -193,6 +204,7 @@ const createEvolu = (schema, runtime, initialData, mnemonic) => Effect.gen(funct
193
204
  };
194
205
  })();
195
206
  const evolu = {
207
+ socket,
196
208
  subscribeError: errorStore.subscribe,
197
209
  getError: errorStore.getState,
198
210
  createQuery: (queryCallback, options) => pipe(queryCallback(kysely).compile(), (compiledQuery) => {
@@ -0,0 +1,8 @@
1
+ import { Config } from "./Config.js";
2
+ import { Owner } from "./Owner.js";
3
+ type ForceSyncMethod = ({ refreshQueries, }: {
4
+ refreshQueries: boolean;
5
+ }) => () => void;
6
+ export declare const createSocket: (sync: ForceSyncMethod, config: Config, owner: Owner) => WebSocket | undefined;
7
+ export {};
8
+ //# sourceMappingURL=Socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Socket.d.ts","sourceRoot":"","sources":["../../src/Socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,KAAK,eAAe,GAAG,CAAC,EACtB,cAAc,GACf,EAAE;IACD,cAAc,EAAE,OAAO,CAAC;CACzB,KAAK,MAAM,IAAI,CAAC;AAoBjB,eAAO,MAAM,YAAY,SACjB,eAAe,UACb,MAAM,SACP,KAAK,KACX,SAAS,GAAG,SA0Cd,CAAC"}
@@ -0,0 +1,51 @@
1
+ let syncTimeout;
2
+ let lockTimeout;
3
+ let socketTimeout;
4
+ let isLocked = false;
5
+ const SocketTimeout = 3000;
6
+ const SyncTimeout = 500;
7
+ const SyncLockTimeout = 500;
8
+ let socket;
9
+ const processWebsocketEvent = (sync, event) => {
10
+ if (typeof event.data === "string" || isLocked === true)
11
+ return;
12
+ clearTimeout(syncTimeout);
13
+ syncTimeout = undefined;
14
+ syncTimeout = setTimeout(() => {
15
+ isLocked = true;
16
+ sync({ refreshQueries: true })();
17
+ clearTimeout(syncTimeout);
18
+ clearTimeout(lockTimeout);
19
+ lockTimeout = setTimeout(() => {
20
+ isLocked = false;
21
+ }, SyncLockTimeout);
22
+ }, SyncTimeout);
23
+ };
24
+ export const createSocket = (sync, config, owner) => {
25
+ if (config.externalWebsocketConnection) {
26
+ // Hook up to an external WebSocket connection
27
+ config.externalWebsocketConnection.send(JSON.stringify({ message: "subscribe", channelId: owner.id }));
28
+ config.externalWebsocketConnection.addEventListener("message", (event) => processWebsocketEvent(sync, event));
29
+ return config.externalWebsocketConnection;
30
+ }
31
+ if (config.enableWebsocketConnection) {
32
+ // Create a WebSocket connection
33
+ socket = new WebSocket(config.syncUrl?.replace("http", "ws"));
34
+ // Handle incoming WebSocket messages
35
+ socket.addEventListener("message", (event) => processWebsocketEvent(sync, event));
36
+ // Handle WebSocket errors
37
+ socket.onerror = (error) => {
38
+ // eslint-disable-next-line no-console
39
+ console.error("WebSocket error:", error);
40
+ };
41
+ // Handle WebSocket closure
42
+ socket.onclose = () => {
43
+ socketTimeout = setTimeout(() => createSocket(sync, config, owner), SocketTimeout);
44
+ };
45
+ socket.onopen = () => {
46
+ socket.send(JSON.stringify({ message: "subscribe", channelId: owner.id }));
47
+ clearTimeout(socketTimeout);
48
+ };
49
+ return socket;
50
+ }
51
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolu/common",
3
- "version": "5.2.3",
3
+ "version": "5.3.0",
4
4
  "description": "Local-first platform designed for privacy, ease of use, and no vendor lock-in to sync and backup people's lifetime data",
5
5
  "keywords": [
6
6
  "evolu",
@@ -52,7 +52,7 @@
52
52
  "nanoid": "^5.0.7"
53
53
  },
54
54
  "devDependencies": {
55
- "@effect/platform": "^0.58.0",
55
+ "@effect/platform": "^0.59.0",
56
56
  "@effect/schema": "^0.68.0",
57
57
  "@protobuf-ts/plugin": "^2.9.4",
58
58
  "@protobuf-ts/protoc": "^2.9.4",
@@ -60,12 +60,12 @@
60
60
  "effect": "^3.2.1",
61
61
  "eslint": "^8.57.0",
62
62
  "typescript": "^5.4.5",
63
- "vitest": "^1.6.0",
63
+ "vitest": "^2.0.0",
64
64
  "@evolu/tsconfig": "0.0.2",
65
65
  "eslint-config-evolu": "1.0.0"
66
66
  },
67
67
  "peerDependencies": {
68
- "@effect/platform": "^0.58.0",
68
+ "@effect/platform": "^0.59.0",
69
69
  "@effect/schema": "^0.68.0",
70
70
  "effect": "^3.1.2"
71
71
  },
package/src/Config.ts CHANGED
@@ -43,6 +43,22 @@ export interface Config {
43
43
  * events with values. For production, use `warning`.
44
44
  */
45
45
  minimumLogLevel: "none" | "trace" | "debug" | "warning";
46
+
47
+ /**
48
+ * Enables websocket connection
49
+ *
50
+ * If set to true runs a websocket connection on the sync url
51
+ */
52
+ enableWebsocketConnection?: true;
53
+
54
+ /**
55
+ * Allows to reuse websocket connections for multiple database setup
56
+ *
57
+ * Works INSTEAD of enableWebsocket and if set overrides enableWebsocket this
58
+ * attaches the database to a connection produced by a call back from another
59
+ * database that has enableWebsocketConnection
60
+ */
61
+ externalWebsocketConnection?: WebSocket;
46
62
  }
47
63
 
48
64
  export const Config = Context.GenericTag<Config>("Config");
package/src/Evolu.ts CHANGED
@@ -15,6 +15,7 @@ import * as Kysely from "kysely";
15
15
  import { Config, createRuntime, defaultConfig } from "./Config.js";
16
16
  import { TimestampString } from "./Crdt.js";
17
17
  import { Mnemonic, NanoIdGenerator } from "./Crypto.js";
18
+ import { createSocket } from "./Socket.js";
18
19
  import {
19
20
  DbFactory,
20
21
  DbSchema,
@@ -67,6 +68,7 @@ import { SyncState, initialSyncState } from "./Sync.js";
67
68
  * - Ensuring the database schema's integrity with ensureSchema.
68
69
  */
69
70
  export interface Evolu<T extends EvoluSchema = EvoluSchema> {
71
+ readonly socket: Promise<WebSocket | undefined>;
70
72
  /**
71
73
  * Subscribe to {@link EvoluError} changes.
72
74
  *
@@ -680,6 +682,16 @@ const createEvolu = (
680
682
  Effect.catchTag("NotSupportedPlatformError", () => Effect.void), // no-op
681
683
  runFork,
682
684
  );
685
+ let socketResolved = false;
686
+ const socket: Promise<WebSocket | undefined> = new Promise((resolve) => {
687
+ ownerStore.subscribe(() => {
688
+ const owner = ownerStore.getState() as Owner;
689
+ if (!socketResolved && typeof owner?.id === "string") {
690
+ socketResolved = true;
691
+ resolve(createSocket(sync, config, owner));
692
+ }
693
+ });
694
+ });
683
695
 
684
696
  const appStateReset = yield* appState.init({
685
697
  onRequestSync: sync({ refreshQueries: true }),
@@ -804,6 +816,7 @@ const createEvolu = (
804
816
  })();
805
817
 
806
818
  const evolu: Evolu = {
819
+ socket,
807
820
  subscribeError: errorStore.subscribe,
808
821
  getError: errorStore.getState,
809
822
 
package/src/Socket.ts ADDED
@@ -0,0 +1,83 @@
1
+ import { Config } from "./Config.js";
2
+ import { Owner } from "./Owner.js";
3
+
4
+ let syncTimeout: number | NodeJS.Timeout | undefined;
5
+ let lockTimeout: number | NodeJS.Timeout | undefined;
6
+ let socketTimeout: number | NodeJS.Timeout | undefined;
7
+ let isLocked = false;
8
+ const SocketTimeout = 3000;
9
+ const SyncTimeout = 500;
10
+ const SyncLockTimeout = 500;
11
+ let socket: WebSocket;
12
+
13
+ type ForceSyncMethod = ({
14
+ refreshQueries,
15
+ }: {
16
+ refreshQueries: boolean;
17
+ }) => () => void;
18
+
19
+ const processWebsocketEvent = (
20
+ sync: ForceSyncMethod,
21
+ event: MessageEvent<any>,
22
+ ) => {
23
+ if (typeof event.data === "string" || isLocked === true) return;
24
+ clearTimeout(syncTimeout);
25
+ syncTimeout = undefined;
26
+ syncTimeout = setTimeout(() => {
27
+ isLocked = true;
28
+ sync({ refreshQueries: true })();
29
+ clearTimeout(syncTimeout);
30
+ clearTimeout(lockTimeout);
31
+ lockTimeout = setTimeout(() => {
32
+ isLocked = false;
33
+ }, SyncLockTimeout);
34
+ }, SyncTimeout);
35
+ };
36
+
37
+ export const createSocket = (
38
+ sync: ForceSyncMethod,
39
+ config: Config,
40
+ owner: Owner,
41
+ ): WebSocket | undefined => {
42
+ if (config.externalWebsocketConnection) {
43
+ // Hook up to an external WebSocket connection
44
+ config.externalWebsocketConnection.send(
45
+ JSON.stringify({ message: "subscribe", channelId: owner.id }),
46
+ );
47
+ config.externalWebsocketConnection.addEventListener("message", (event) =>
48
+ processWebsocketEvent(sync, event),
49
+ );
50
+ return config.externalWebsocketConnection;
51
+ }
52
+
53
+ if (config.enableWebsocketConnection) {
54
+ // Create a WebSocket connection
55
+ socket = new WebSocket(config.syncUrl?.replace("http", "ws"));
56
+ // Handle incoming WebSocket messages
57
+ socket.addEventListener("message", (event) =>
58
+ processWebsocketEvent(sync, event),
59
+ );
60
+
61
+ // Handle WebSocket errors
62
+ socket.onerror = (error) => {
63
+ // eslint-disable-next-line no-console
64
+ console.error("WebSocket error:", error);
65
+ };
66
+
67
+ // Handle WebSocket closure
68
+ socket.onclose = () => {
69
+ socketTimeout = setTimeout(
70
+ () => createSocket(sync, config, owner),
71
+ SocketTimeout,
72
+ );
73
+ };
74
+
75
+ socket.onopen = () => {
76
+ socket.send(
77
+ JSON.stringify({ message: "subscribe", channelId: owner.id }),
78
+ );
79
+ clearTimeout(socketTimeout);
80
+ };
81
+ return socket;
82
+ }
83
+ };