@syncular/relay 0.0.6-168 → 0.0.6-177
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/dist/realtime.d.ts +1 -0
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +14 -1
- package/dist/realtime.js.map +1 -1
- package/package.json +4 -4
- package/src/realtime.ts +20 -1
package/dist/realtime.d.ts
CHANGED
package/dist/realtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IACtC,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,IAAI,IAAI,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IACtC,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,IAAI,IAAI,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AASD;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;IAEhF,YAAY,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,EAIrD;IAED;;;OAGG;IACH,QAAQ,CACN,UAAU,EAAE,wBAAwB,EACpC,gBAAgB,GAAE,MAAM,EAAO,GAC9B,MAAM,IAAI,CAEZ;IAED;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAYjE;IAED;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACrC,IAAI,CAQN;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3C;IAED;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE7C;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI,CAEf;CACF;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE;IACF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;CACpB,EACD,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1C,wBAAwB,CA4D1B"}
|
package/dist/realtime.js
CHANGED
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
* Adapted from @syncular/server-hono/ws.ts for relay use.
|
|
8
8
|
*/
|
|
9
9
|
import { RealtimeConnectionRegistry } from '@syncular/core';
|
|
10
|
+
function createRelayConnectionOwnerKey(args) {
|
|
11
|
+
return JSON.stringify([args.actorId, args.clientId]);
|
|
12
|
+
}
|
|
10
13
|
/**
|
|
11
14
|
* Realtime manager for relay WebSocket connections.
|
|
12
15
|
*
|
|
@@ -31,7 +34,16 @@ export class RelayRealtime {
|
|
|
31
34
|
* Update the effective scopes for an already-connected client.
|
|
32
35
|
*/
|
|
33
36
|
updateClientScopeKeys(clientId, scopeKeys) {
|
|
34
|
-
this.registry.
|
|
37
|
+
const connections = this.registry.getConnectionsForClient(clientId);
|
|
38
|
+
if (!connections || connections.size === 0)
|
|
39
|
+
return;
|
|
40
|
+
const ownerKeys = new Set();
|
|
41
|
+
for (const connection of connections) {
|
|
42
|
+
ownerKeys.add(connection.ownerKey);
|
|
43
|
+
}
|
|
44
|
+
for (const ownerKey of ownerKeys) {
|
|
45
|
+
this.registry.updateOwnerScopeKeys(ownerKey, scopeKeys);
|
|
46
|
+
}
|
|
35
47
|
}
|
|
36
48
|
/**
|
|
37
49
|
* Notify clients that new data is available for the given scopes.
|
|
@@ -91,6 +103,7 @@ export function createRelayWebSocketConnection(ws, args) {
|
|
|
91
103
|
},
|
|
92
104
|
actorId: args.actorId,
|
|
93
105
|
clientId: args.clientId,
|
|
106
|
+
ownerKey: createRelayConnectionOwnerKey(args),
|
|
94
107
|
sendSync(cursor) {
|
|
95
108
|
if (!connection.isOpen)
|
|
96
109
|
return;
|
package/dist/realtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/relay",
|
|
3
|
-
"version": "0.0.6-
|
|
3
|
+
"version": "0.0.6-177",
|
|
4
4
|
"description": "Edge relay for Syncular distributed sync",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Benjamin Kniffler",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"release": "bunx syncular-publish"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@syncular/core": "0.0.6-
|
|
46
|
-
"@syncular/server": "0.0.6-
|
|
45
|
+
"@syncular/core": "0.0.6-177",
|
|
46
|
+
"@syncular/server": "0.0.6-177"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"hono": "^4.0.0",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@syncular/config": "0.0.0",
|
|
54
|
-
"@syncular/server-dialect-sqlite": "0.0.6-
|
|
54
|
+
"@syncular/server-dialect-sqlite": "0.0.6-177",
|
|
55
55
|
"kysely": "*"
|
|
56
56
|
},
|
|
57
57
|
"files": [
|
package/src/realtime.ts
CHANGED
|
@@ -32,6 +32,14 @@ export interface RelayWebSocketConnection {
|
|
|
32
32
|
isOpen: boolean;
|
|
33
33
|
actorId: string;
|
|
34
34
|
clientId: string;
|
|
35
|
+
ownerKey: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function createRelayConnectionOwnerKey(args: {
|
|
39
|
+
actorId: string;
|
|
40
|
+
clientId: string;
|
|
41
|
+
}): string {
|
|
42
|
+
return JSON.stringify([args.actorId, args.clientId]);
|
|
35
43
|
}
|
|
36
44
|
|
|
37
45
|
/**
|
|
@@ -64,7 +72,17 @@ export class RelayRealtime {
|
|
|
64
72
|
* Update the effective scopes for an already-connected client.
|
|
65
73
|
*/
|
|
66
74
|
updateClientScopeKeys(clientId: string, scopeKeys: string[]): void {
|
|
67
|
-
this.registry.
|
|
75
|
+
const connections = this.registry.getConnectionsForClient(clientId);
|
|
76
|
+
if (!connections || connections.size === 0) return;
|
|
77
|
+
|
|
78
|
+
const ownerKeys = new Set<string>();
|
|
79
|
+
for (const connection of connections) {
|
|
80
|
+
ownerKeys.add(connection.ownerKey);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
for (const ownerKey of ownerKeys) {
|
|
84
|
+
this.registry.updateOwnerScopeKeys(ownerKey, scopeKeys);
|
|
85
|
+
}
|
|
68
86
|
}
|
|
69
87
|
|
|
70
88
|
/**
|
|
@@ -145,6 +163,7 @@ export function createRelayWebSocketConnection(
|
|
|
145
163
|
},
|
|
146
164
|
actorId: args.actorId,
|
|
147
165
|
clientId: args.clientId,
|
|
166
|
+
ownerKey: createRelayConnectionOwnerKey(args),
|
|
148
167
|
sendSync(cursor: number) {
|
|
149
168
|
if (!connection.isOpen) return;
|
|
150
169
|
const ok = safeSend(
|