@syncular/relay 0.0.1 → 0.0.2-127
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/README.md +41 -0
- package/dist/client-role/forward-engine.d.ts.map +1 -1
- package/dist/client-role/forward-engine.js +11 -11
- package/dist/client-role/forward-engine.js.map +1 -1
- package/dist/client-role/index.js +3 -3
- package/dist/client-role/pull-engine.d.ts +2 -2
- package/dist/client-role/pull-engine.d.ts.map +1 -1
- package/dist/client-role/pull-engine.js +38 -18
- package/dist/client-role/pull-engine.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +9 -9
- package/dist/mode-manager.js +1 -1
- package/dist/mode-manager.js.map +1 -1
- package/dist/relay.d.ts +7 -6
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +37 -31
- package/dist/relay.js.map +1 -1
- package/dist/server-role/index.d.ts +1 -1
- package/dist/server-role/index.d.ts.map +1 -1
- package/dist/server-role/index.js +9 -12
- package/dist/server-role/index.js.map +1 -1
- package/dist/server-role/pull.d.ts +1 -1
- package/dist/server-role/pull.d.ts.map +1 -1
- package/dist/server-role/pull.js +2 -2
- package/dist/server-role/pull.js.map +1 -1
- package/dist/server-role/push.d.ts +1 -1
- package/dist/server-role/push.d.ts.map +1 -1
- package/dist/server-role/push.js +23 -27
- package/dist/server-role/push.js.map +1 -1
- package/package.json +28 -6
- package/src/__tests__/relay.test.ts +317 -0
- package/src/client-role/forward-engine.ts +11 -14
- package/src/client-role/pull-engine.ts +47 -21
- package/src/index.ts +2 -2
- package/src/mode-manager.ts +1 -1
- package/src/relay.ts +35 -30
- package/src/server-role/index.ts +8 -11
- package/src/server-role/pull.ts +3 -3
- package/src/server-role/push.ts +27 -34
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @syncular/relay
|
|
2
|
+
|
|
3
|
+
Edge relay server for Syncular.
|
|
4
|
+
|
|
5
|
+
A relay acts as a local sync server for nearby clients and forwards commits to a main server when online. Useful for intermittent connectivity (branch offices, field devices, edge deployments).
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @syncular/relay
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { createRelayServer } from '@syncular/relay';
|
|
17
|
+
|
|
18
|
+
const relay = createRelayServer({
|
|
19
|
+
db,
|
|
20
|
+
dialect,
|
|
21
|
+
mainServerTransport,
|
|
22
|
+
mainServerClientId: 'relay-1',
|
|
23
|
+
mainServerActorId: 'relay-service',
|
|
24
|
+
tables: ['tasks'],
|
|
25
|
+
scopes: { project_id: 'acme' },
|
|
26
|
+
handlers,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
await relay.start();
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Documentation
|
|
33
|
+
|
|
34
|
+
- Relay guide: https://syncular.dev/docs/build/relay
|
|
35
|
+
|
|
36
|
+
## Links
|
|
37
|
+
|
|
38
|
+
- GitHub: https://github.com/syncular/syncular
|
|
39
|
+
- Issues: https://github.com/syncular/syncular/issues
|
|
40
|
+
|
|
41
|
+
> Status: Alpha. APIs and storage layouts may change between releases.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward-engine.d.ts","sourceRoot":"","sources":["../../src/client-role/forward-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"forward-engine.d.ts","sourceRoot":"","sources":["../../src/client-role/forward-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EACV,oBAAoB,EAEpB,aAAa,EAEd,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB,CACnC,EAAE,SAAS,aAAa,GAAG,aAAa;IAExC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,aAAa,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa;IACjE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA2C;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;IAElD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA8C;IAE3D,OAAO,CAAC,eAAe,CAAS;IAEhC,YAAY,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC,EAQ5C;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,CAMX;IAED;;OAEG;IACH,MAAM,IAAI,IAAI,CAQb;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAEpC;IAED,OAAO,CAAC,YAAY;YAoBN,UAAU;YAsDV,eAAe;YAgEf,WAAW;YAcX,WAAW;YAUX,aAAa;YAmBb,UAAU;YAkBV,cAAc;CAsC7B"}
|
|
@@ -4,14 +4,8 @@
|
|
|
4
4
|
* Forwards commits from the relay's local outbox to the main server.
|
|
5
5
|
* Preserves original client_id + client_commit_id for idempotency.
|
|
6
6
|
*/
|
|
7
|
+
import { randomId } from '@syncular/core';
|
|
7
8
|
import { sql } from 'kysely';
|
|
8
|
-
function randomId() {
|
|
9
|
-
if (typeof crypto !== 'undefined' &&
|
|
10
|
-
typeof crypto.randomUUID === 'function') {
|
|
11
|
-
return crypto.randomUUID();
|
|
12
|
-
}
|
|
13
|
-
return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
14
|
-
}
|
|
15
9
|
/**
|
|
16
10
|
* Forward engine for sending local commits to the main server.
|
|
17
11
|
*/
|
|
@@ -101,12 +95,18 @@ export class ForwardEngine {
|
|
|
101
95
|
await this.markSending(next.id);
|
|
102
96
|
let response;
|
|
103
97
|
try {
|
|
104
|
-
|
|
98
|
+
const combined = await this.transport.sync({
|
|
105
99
|
clientId: next.client_id,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
push: {
|
|
101
|
+
clientCommitId: next.client_commit_id,
|
|
102
|
+
operations: next.operations,
|
|
103
|
+
schemaVersion: next.schema_version,
|
|
104
|
+
},
|
|
109
105
|
});
|
|
106
|
+
if (!combined.push) {
|
|
107
|
+
throw new Error('Server returned no push response');
|
|
108
|
+
}
|
|
109
|
+
response = combined.push;
|
|
110
110
|
}
|
|
111
111
|
catch (err) {
|
|
112
112
|
// Network error - mark as pending for retry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward-engine.js","sourceRoot":"","sources":["../../src/client-role/forward-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"forward-engine.js","sourceRoot":"","sources":["../../src/client-role/forward-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Components for the relay's role as a client to the main server.
|
|
5
5
|
*/
|
|
6
|
-
export * from './forward-engine';
|
|
7
|
-
export * from './pull-engine';
|
|
8
|
-
export * from './sequence-mapper';
|
|
6
|
+
export * from './forward-engine.js';
|
|
7
|
+
export * from './pull-engine.js';
|
|
8
|
+
export * from './sequence-mapper.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -22,7 +22,7 @@ export interface PullEngineOptions<DB extends RelayDatabase = RelayDatabase> {
|
|
|
22
22
|
tables: string[];
|
|
23
23
|
/** Scope values for subscriptions */
|
|
24
24
|
scopes: ScopeValues;
|
|
25
|
-
|
|
25
|
+
handlers: TableRegistry<DB>;
|
|
26
26
|
sequenceMapper: SequenceMapper<DB>;
|
|
27
27
|
realtime: RelayRealtime;
|
|
28
28
|
intervalMs?: number;
|
|
@@ -39,7 +39,7 @@ export declare class PullEngine<DB extends RelayDatabase = RelayDatabase> {
|
|
|
39
39
|
private readonly clientId;
|
|
40
40
|
private readonly tables;
|
|
41
41
|
private readonly scopes;
|
|
42
|
-
private readonly
|
|
42
|
+
private readonly handlers;
|
|
43
43
|
private readonly sequenceMapper;
|
|
44
44
|
private readonly realtime;
|
|
45
45
|
private readonly intervalMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-engine.d.ts","sourceRoot":"","sources":["../../src/client-role/pull-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EAIX,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,KAAK,MAAM,EAAO,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa;IACzE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"pull-engine.d.ts","sourceRoot":"","sources":["../../src/client-role/pull-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EAIX,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,KAAK,MAAM,EAAO,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa;IACzE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAsB;IAEtD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,OAAO,CAA6B;IAE5C,YAAY,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAazC;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAcZ;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,CAMX;IAED;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAEjC;YAEa,WAAW;YA0BX,WAAW;IAezB,OAAO,CAAC,YAAY;YAmBN,UAAU;YAqFV,kBAAkB;CA6DjC"}
|
|
@@ -16,7 +16,7 @@ export class PullEngine {
|
|
|
16
16
|
clientId;
|
|
17
17
|
tables;
|
|
18
18
|
scopes;
|
|
19
|
-
|
|
19
|
+
handlers;
|
|
20
20
|
sequenceMapper;
|
|
21
21
|
realtime;
|
|
22
22
|
intervalMs;
|
|
@@ -32,7 +32,7 @@ export class PullEngine {
|
|
|
32
32
|
this.clientId = options.clientId;
|
|
33
33
|
this.tables = options.tables;
|
|
34
34
|
this.scopes = options.scopes;
|
|
35
|
-
this.
|
|
35
|
+
this.handlers = options.handlers;
|
|
36
36
|
this.sequenceMapper = options.sequenceMapper;
|
|
37
37
|
this.realtime = options.realtime;
|
|
38
38
|
this.intervalMs = options.intervalMs ?? 10000;
|
|
@@ -46,8 +46,14 @@ export class PullEngine {
|
|
|
46
46
|
if (this.running)
|
|
47
47
|
return;
|
|
48
48
|
this.running = true;
|
|
49
|
-
this.loadCursors()
|
|
50
|
-
|
|
49
|
+
void this.loadCursors()
|
|
50
|
+
.catch((error) => {
|
|
51
|
+
this.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
52
|
+
})
|
|
53
|
+
.finally(() => {
|
|
54
|
+
if (this.running) {
|
|
55
|
+
this.scheduleNext(0);
|
|
56
|
+
}
|
|
51
57
|
});
|
|
52
58
|
}
|
|
53
59
|
/**
|
|
@@ -127,17 +133,23 @@ export class PullEngine {
|
|
|
127
133
|
// Build subscriptions for each table
|
|
128
134
|
const subscriptionRequests = this.tables.map((table) => ({
|
|
129
135
|
id: table,
|
|
130
|
-
|
|
136
|
+
table,
|
|
131
137
|
scopes: this.scopes,
|
|
132
138
|
cursor: this.cursors.get(table) ?? -1,
|
|
133
139
|
}));
|
|
134
140
|
let response;
|
|
135
141
|
try {
|
|
136
|
-
|
|
142
|
+
const combined = await this.transport.sync({
|
|
137
143
|
clientId: this.clientId,
|
|
138
|
-
|
|
139
|
-
|
|
144
|
+
pull: {
|
|
145
|
+
subscriptions: subscriptionRequests,
|
|
146
|
+
limitCommits: 100,
|
|
147
|
+
},
|
|
140
148
|
});
|
|
149
|
+
if (!combined.pull) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
response = combined.pull;
|
|
141
153
|
}
|
|
142
154
|
catch {
|
|
143
155
|
// Network error - will retry
|
|
@@ -153,15 +165,21 @@ export class PullEngine {
|
|
|
153
165
|
continue;
|
|
154
166
|
const table = sub.id;
|
|
155
167
|
// Process commits
|
|
168
|
+
let canAdvanceCursor = true;
|
|
156
169
|
for (const commit of sub.commits) {
|
|
157
|
-
const
|
|
158
|
-
if (applied) {
|
|
170
|
+
const outcome = await this.applyCommitLocally(commit, table);
|
|
171
|
+
if (outcome === 'applied') {
|
|
159
172
|
hasChanges = true;
|
|
160
173
|
affectedTables.add(table);
|
|
161
174
|
}
|
|
175
|
+
if (outcome === 'rejected') {
|
|
176
|
+
canAdvanceCursor = false;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
162
179
|
}
|
|
163
180
|
// Update cursor
|
|
164
|
-
if (
|
|
181
|
+
if (canAdvanceCursor &&
|
|
182
|
+
sub.nextCursor > (this.cursors.get(table) ?? -1)) {
|
|
165
183
|
this.cursors.set(table, sub.nextCursor);
|
|
166
184
|
}
|
|
167
185
|
}
|
|
@@ -179,12 +197,12 @@ export class PullEngine {
|
|
|
179
197
|
/**
|
|
180
198
|
* Apply a commit from main server locally.
|
|
181
199
|
*
|
|
182
|
-
* This re-applies the commit through the local
|
|
200
|
+
* This re-applies the commit through the local table handlers
|
|
183
201
|
* to ensure proper indexing and scope assignment.
|
|
184
202
|
*/
|
|
185
203
|
async applyCommitLocally(commit, table) {
|
|
186
204
|
if (commit.changes.length === 0)
|
|
187
|
-
return
|
|
205
|
+
return 'cached';
|
|
188
206
|
// Convert changes to operations
|
|
189
207
|
const operations = commit.changes.map((change) => ({
|
|
190
208
|
table: change.table,
|
|
@@ -198,7 +216,7 @@ export class PullEngine {
|
|
|
198
216
|
const result = await pushCommit({
|
|
199
217
|
db: this.db,
|
|
200
218
|
dialect: this.dialect,
|
|
201
|
-
|
|
219
|
+
handlers: this.handlers,
|
|
202
220
|
actorId: commit.actorId,
|
|
203
221
|
request: {
|
|
204
222
|
clientId: `relay:${this.clientId}`,
|
|
@@ -212,16 +230,18 @@ export class PullEngine {
|
|
|
212
230
|
typeof result.response.commitSeq === 'number') {
|
|
213
231
|
// Record sequence mapping
|
|
214
232
|
await this.sequenceMapper.createConfirmedMapping(result.response.commitSeq, commit.commitSeq);
|
|
215
|
-
return
|
|
233
|
+
return 'applied';
|
|
216
234
|
}
|
|
217
235
|
// Already applied (cached) - that's fine
|
|
218
236
|
if (result.response.status === 'cached') {
|
|
219
|
-
return
|
|
237
|
+
return 'cached';
|
|
220
238
|
}
|
|
221
239
|
// Rejected - this shouldn't happen for pulls from main
|
|
222
|
-
//
|
|
240
|
+
// Do not advance cursor; signal error so caller can react.
|
|
241
|
+
const error = new Error(`Relay: Failed to apply commit ${commit.commitSeq} locally (status=${result.response.status})`);
|
|
223
242
|
console.warn(`Relay: Failed to apply commit ${commit.commitSeq} locally:`, result.response);
|
|
224
|
-
|
|
243
|
+
this.onError?.(error);
|
|
244
|
+
return 'rejected';
|
|
225
245
|
}
|
|
226
246
|
}
|
|
227
247
|
//# sourceMappingURL=pull-engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-engine.js","sourceRoot":"","sources":["../../src/client-role/pull-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAe,GAAG,EAAE,MAAM,QAAQ,CAAC;AAyB1C;;GAEG;AACH,MAAM,OAAO,UAAU;IACJ,EAAE,CAAa;IACf,OAAO,CAAoB;IAC3B,SAAS,CAAgB;IACzB,QAAQ,CAAS;IACjB,MAAM,CAAW;IACjB,MAAM,CAAc;IACpB,
|
|
1
|
+
{"version":3,"file":"pull-engine.js","sourceRoot":"","sources":["../../src/client-role/pull-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
* mainServerClientId: 'relay-branch-001',
|
|
17
17
|
* mainServerActorId: 'relay-service',
|
|
18
18
|
* scopeKeys: ['client:acme'],
|
|
19
|
-
*
|
|
19
|
+
* handlers: shapeRegistry,
|
|
20
20
|
* subscriptions: subscriptionRegistry,
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
23
23
|
* // Mount routes for local clients
|
|
24
|
-
* app.route('/sync', relay.getRoutes());
|
|
24
|
+
* app.route('/sync', await relay.getRoutes());
|
|
25
25
|
*
|
|
26
26
|
* // Start background sync with main
|
|
27
27
|
* await relay.start();
|
package/dist/index.js
CHANGED
|
@@ -16,29 +16,29 @@
|
|
|
16
16
|
* mainServerClientId: 'relay-branch-001',
|
|
17
17
|
* mainServerActorId: 'relay-service',
|
|
18
18
|
* scopeKeys: ['client:acme'],
|
|
19
|
-
*
|
|
19
|
+
* handlers: shapeRegistry,
|
|
20
20
|
* subscriptions: subscriptionRegistry,
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
23
23
|
* // Mount routes for local clients
|
|
24
|
-
* app.route('/sync', relay.getRoutes());
|
|
24
|
+
* app.route('/sync', await relay.getRoutes());
|
|
25
25
|
*
|
|
26
26
|
* // Start background sync with main
|
|
27
27
|
* await relay.start();
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
// Client role (syncing with main server)
|
|
31
|
-
export * from './client-role';
|
|
31
|
+
export * from './client-role/index.js';
|
|
32
32
|
// Migration
|
|
33
|
-
export * from './migrate';
|
|
33
|
+
export * from './migrate.js';
|
|
34
34
|
// Mode manager
|
|
35
|
-
export * from './mode-manager';
|
|
35
|
+
export * from './mode-manager.js';
|
|
36
36
|
// Realtime WebSocket manager
|
|
37
|
-
export * from './realtime';
|
|
37
|
+
export * from './realtime.js';
|
|
38
38
|
// Main exports
|
|
39
|
-
export * from './relay';
|
|
39
|
+
export * from './relay.js';
|
|
40
40
|
// Schema types
|
|
41
|
-
export * from './schema';
|
|
41
|
+
export * from './schema.js';
|
|
42
42
|
// Server role (serving local clients)
|
|
43
|
-
export * from './server-role';
|
|
43
|
+
export * from './server-role/index.js';
|
|
44
44
|
//# sourceMappingURL=index.js.map
|
package/dist/mode-manager.js
CHANGED
package/dist/mode-manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-manager.js","sourceRoot":"","sources":["../src/mode-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACd,IAAI,GAAc,SAAS,CAAC;IAC5B,qBAAqB,CAAS;IAC9B,kBAAkB,CAAS;IAC3B,qBAAqB,CAAS;IAC9B,gBAAgB,CAAS;IACzB,YAAY,CAA6B;IAEzC,OAAO,GAAG,KAAK,CAAC;IAChB,KAAK,GAAyC,IAAI,CAAC;IACnD,aAAa,GAAoC,IAAI,CAAC;IAC9D,qGAAqG;IAC7F,mBAAmB,GAAG,CAAC,CAAC;IAEhC,YAAY,OAAO,GAAuB,EAAE,EAAE;QAC5C,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC;QAC7D,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAAA,CAC1C;IAED;;OAEG;IACH,OAAO,GAAc;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC;IAAA,CAClB;IAED;;OAEG;IACH,KAAK,CAAC,aAAqC,EAAQ;QACjD,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,oCAAoC;QACpC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAAA,CAC7B;IAED;;OAEG;IACH,IAAI,GAAS;QACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IAAA,CACF;IAED;;OAEG;IACH,aAAa,GAAS;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IAAA,CACjD;IAED;;OAEG;IACH,aAAa,GAAS;QACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"mode-manager.js","sourceRoot":"","sources":["../src/mode-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/relay.d.ts
CHANGED
|
@@ -40,8 +40,8 @@ export interface RelayServerOptions<DB extends RelayDatabase = RelayDatabase> {
|
|
|
40
40
|
tables: string[];
|
|
41
41
|
/** Scope values for subscriptions to the main server */
|
|
42
42
|
scopes: ScopeValues;
|
|
43
|
-
/**
|
|
44
|
-
|
|
43
|
+
/** Handler registry for handling operations */
|
|
44
|
+
handlers: TableRegistry<DB>;
|
|
45
45
|
/** Optional: WebSocket heartbeat interval in milliseconds (default: 30000) */
|
|
46
46
|
heartbeatIntervalMs?: number;
|
|
47
47
|
/** Optional: Forward engine retry interval in milliseconds (default: 5000) */
|
|
@@ -80,11 +80,11 @@ type EventHandler<K extends keyof RelayEvents> = RelayEvents[K];
|
|
|
80
80
|
* mainServerActorId: 'relay-service',
|
|
81
81
|
* tables: ['tasks', 'projects'],
|
|
82
82
|
* scopes: { project_id: 'acme' },
|
|
83
|
-
*
|
|
83
|
+
* handlers: shapeRegistry,
|
|
84
84
|
* });
|
|
85
85
|
*
|
|
86
86
|
* // Mount routes for local clients
|
|
87
|
-
* app.route('/sync', relay.getRoutes());
|
|
87
|
+
* app.route('/sync', await relay.getRoutes());
|
|
88
88
|
*
|
|
89
89
|
* // Start background sync with main
|
|
90
90
|
* await relay.start();
|
|
@@ -102,7 +102,7 @@ export declare class RelayServer<DB extends RelayDatabase = RelayDatabase> {
|
|
|
102
102
|
private readonly mainServerActorId;
|
|
103
103
|
private readonly tables;
|
|
104
104
|
private readonly scopes;
|
|
105
|
-
private readonly
|
|
105
|
+
private readonly handlers;
|
|
106
106
|
private readonly modeManager;
|
|
107
107
|
private readonly sequenceMapper;
|
|
108
108
|
private readonly forwardEngine;
|
|
@@ -116,6 +116,7 @@ export declare class RelayServer<DB extends RelayDatabase = RelayDatabase> {
|
|
|
116
116
|
private started;
|
|
117
117
|
private schemaInitialized;
|
|
118
118
|
private routes;
|
|
119
|
+
private routesPromise;
|
|
119
120
|
constructor(options: RelayServerOptions<DB>);
|
|
120
121
|
/**
|
|
121
122
|
* Subscribe to relay events.
|
|
@@ -177,7 +178,7 @@ export declare class RelayServer<DB extends RelayDatabase = RelayDatabase> {
|
|
|
177
178
|
* - POST /push
|
|
178
179
|
* - GET /realtime (WebSocket)
|
|
179
180
|
*/
|
|
180
|
-
getRoutes(): Hono
|
|
181
|
+
getRoutes(): Promise<Hono>;
|
|
181
182
|
private emit;
|
|
182
183
|
}
|
|
183
184
|
/**
|
package/dist/relay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMrC,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,eAAe,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa;IAC1E,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,qDAAqD;IACrD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,uDAAuD;IACvD,mBAAmB,EAAE,aAAa,CAAC;IACnC,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,WAAW,CAAC;IACpB
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
package/dist/relay.js
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
* continue syncing when internet is lost.
|
|
9
9
|
*/
|
|
10
10
|
import { sql } from 'kysely';
|
|
11
|
-
import { ForwardEngine } from './client-role/forward-engine';
|
|
12
|
-
import { PullEngine } from './client-role/pull-engine';
|
|
13
|
-
import { SequenceMapper } from './client-role/sequence-mapper';
|
|
14
|
-
import { ensureRelaySchema } from './migrate';
|
|
15
|
-
import { ModeManager } from './mode-manager';
|
|
16
|
-
import { RelayRealtime } from './realtime';
|
|
11
|
+
import { ForwardEngine } from './client-role/forward-engine.js';
|
|
12
|
+
import { PullEngine } from './client-role/pull-engine.js';
|
|
13
|
+
import { SequenceMapper } from './client-role/sequence-mapper.js';
|
|
14
|
+
import { ensureRelaySchema } from './migrate.js';
|
|
15
|
+
import { ModeManager } from './mode-manager.js';
|
|
16
|
+
import { RelayRealtime } from './realtime.js';
|
|
17
17
|
/**
|
|
18
18
|
* Relay server that acts as an edge relay between local clients and a main server.
|
|
19
19
|
*
|
|
@@ -30,11 +30,11 @@ import { RelayRealtime } from './realtime';
|
|
|
30
30
|
* mainServerActorId: 'relay-service',
|
|
31
31
|
* tables: ['tasks', 'projects'],
|
|
32
32
|
* scopes: { project_id: 'acme' },
|
|
33
|
-
*
|
|
33
|
+
* handlers: shapeRegistry,
|
|
34
34
|
* });
|
|
35
35
|
*
|
|
36
36
|
* // Mount routes for local clients
|
|
37
|
-
* app.route('/sync', relay.getRoutes());
|
|
37
|
+
* app.route('/sync', await relay.getRoutes());
|
|
38
38
|
*
|
|
39
39
|
* // Start background sync with main
|
|
40
40
|
* await relay.start();
|
|
@@ -52,7 +52,7 @@ export class RelayServer {
|
|
|
52
52
|
mainServerActorId;
|
|
53
53
|
tables;
|
|
54
54
|
scopes;
|
|
55
|
-
|
|
55
|
+
handlers;
|
|
56
56
|
modeManager;
|
|
57
57
|
sequenceMapper;
|
|
58
58
|
forwardEngine;
|
|
@@ -66,6 +66,7 @@ export class RelayServer {
|
|
|
66
66
|
started = false;
|
|
67
67
|
schemaInitialized = false;
|
|
68
68
|
routes = null;
|
|
69
|
+
routesPromise = null;
|
|
69
70
|
constructor(options) {
|
|
70
71
|
this.db = options.db;
|
|
71
72
|
this.dialect = options.dialect;
|
|
@@ -74,7 +75,7 @@ export class RelayServer {
|
|
|
74
75
|
this.mainServerActorId = options.mainServerActorId;
|
|
75
76
|
this.tables = options.tables;
|
|
76
77
|
this.scopes = options.scopes;
|
|
77
|
-
this.
|
|
78
|
+
this.handlers = options.handlers;
|
|
78
79
|
this.pruneIntervalMs = options.pruneIntervalMs ?? 3600000;
|
|
79
80
|
this.pruneMaxAgeMs = options.pruneMaxAgeMs ?? 7 * 24 * 60 * 60 * 1000;
|
|
80
81
|
// Initialize mode manager
|
|
@@ -108,7 +109,7 @@ export class RelayServer {
|
|
|
108
109
|
clientId: this.mainServerClientId,
|
|
109
110
|
tables: this.tables,
|
|
110
111
|
scopes: this.scopes,
|
|
111
|
-
|
|
112
|
+
handlers: this.handlers,
|
|
112
113
|
sequenceMapper: this.sequenceMapper,
|
|
113
114
|
realtime: this.realtime,
|
|
114
115
|
intervalMs: options.pullIntervalMs ?? 10000,
|
|
@@ -177,10 +178,12 @@ export class RelayServer {
|
|
|
177
178
|
this.modeManager.start(async () => {
|
|
178
179
|
// Health check: try an empty pull
|
|
179
180
|
try {
|
|
180
|
-
await this.mainServerTransport.
|
|
181
|
+
await this.mainServerTransport.sync({
|
|
181
182
|
clientId: this.mainServerClientId,
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
pull: {
|
|
184
|
+
subscriptions: [],
|
|
185
|
+
limitCommits: 1,
|
|
186
|
+
},
|
|
184
187
|
});
|
|
185
188
|
return true;
|
|
186
189
|
}
|
|
@@ -270,25 +273,28 @@ export class RelayServer {
|
|
|
270
273
|
* - POST /push
|
|
271
274
|
* - GET /realtime (WebSocket)
|
|
272
275
|
*/
|
|
273
|
-
getRoutes() {
|
|
276
|
+
async getRoutes() {
|
|
274
277
|
if (this.routes)
|
|
275
278
|
return this.routes;
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
279
|
+
if (this.routesPromise)
|
|
280
|
+
return this.routesPromise;
|
|
281
|
+
this.routesPromise = (async () => {
|
|
282
|
+
const { createRelayRoutes } = await import('./server-role/index.js');
|
|
283
|
+
const routes = createRelayRoutes({
|
|
284
|
+
db: this.db,
|
|
285
|
+
dialect: this.dialect,
|
|
286
|
+
handlers: this.handlers,
|
|
287
|
+
realtime: this.realtime,
|
|
288
|
+
onCommit: async (localCommitSeq, affectedTables) => {
|
|
289
|
+
this.realtime.notifyScopeKeys(affectedTables, localCommitSeq);
|
|
290
|
+
this.forwardEngine.wakeUp();
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
this.routes = routes;
|
|
294
|
+
this.routesPromise = null;
|
|
295
|
+
return routes;
|
|
296
|
+
})();
|
|
297
|
+
return this.routesPromise;
|
|
292
298
|
}
|
|
293
299
|
emit(event, ...args) {
|
|
294
300
|
const handlers = this.eventHandlers.get(event);
|