@syncular/server 0.0.1-100
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/blobs/adapters/database.d.ts +83 -0
- package/dist/blobs/adapters/database.d.ts.map +1 -0
- package/dist/blobs/adapters/database.js +202 -0
- package/dist/blobs/adapters/database.js.map +1 -0
- package/dist/blobs/adapters/s3.d.ts +82 -0
- package/dist/blobs/adapters/s3.d.ts.map +1 -0
- package/dist/blobs/adapters/s3.js +170 -0
- package/dist/blobs/adapters/s3.js.map +1 -0
- package/dist/blobs/index.d.ts +9 -0
- package/dist/blobs/index.d.ts.map +1 -0
- package/dist/blobs/index.js +9 -0
- package/dist/blobs/index.js.map +1 -0
- package/dist/blobs/manager.d.ts +195 -0
- package/dist/blobs/manager.d.ts.map +1 -0
- package/dist/blobs/manager.js +440 -0
- package/dist/blobs/manager.js.map +1 -0
- package/dist/blobs/migrate.d.ts +27 -0
- package/dist/blobs/migrate.d.ts.map +1 -0
- package/dist/blobs/migrate.js +119 -0
- package/dist/blobs/migrate.js.map +1 -0
- package/dist/blobs/types.d.ts +54 -0
- package/dist/blobs/types.d.ts.map +1 -0
- package/dist/blobs/types.js +5 -0
- package/dist/blobs/types.js.map +1 -0
- package/dist/clients.d.ts +14 -0
- package/dist/clients.d.ts.map +1 -0
- package/dist/clients.js +7 -0
- package/dist/clients.js.map +1 -0
- package/dist/compaction.d.ts +27 -0
- package/dist/compaction.d.ts.map +1 -0
- package/dist/compaction.js +49 -0
- package/dist/compaction.js.map +1 -0
- package/dist/dialect/base.d.ts +83 -0
- package/dist/dialect/base.d.ts.map +1 -0
- package/dist/dialect/base.js +144 -0
- package/dist/dialect/base.js.map +1 -0
- package/dist/dialect/helpers.d.ts +10 -0
- package/dist/dialect/helpers.d.ts.map +1 -0
- package/dist/dialect/helpers.js +59 -0
- package/dist/dialect/helpers.js.map +1 -0
- package/dist/dialect/index.d.ts +7 -0
- package/dist/dialect/index.d.ts.map +1 -0
- package/dist/dialect/index.js +7 -0
- package/dist/dialect/index.js.map +1 -0
- package/dist/dialect/types.d.ts +149 -0
- package/dist/dialect/types.d.ts.map +1 -0
- package/dist/dialect/types.js +8 -0
- package/dist/dialect/types.js.map +1 -0
- package/dist/helpers/conflict.d.ts +52 -0
- package/dist/helpers/conflict.d.ts.map +1 -0
- package/dist/helpers/conflict.js +49 -0
- package/dist/helpers/conflict.js.map +1 -0
- package/dist/helpers/emitted-change.d.ts +56 -0
- package/dist/helpers/emitted-change.d.ts.map +1 -0
- package/dist/helpers/emitted-change.js +46 -0
- package/dist/helpers/emitted-change.js.map +1 -0
- package/dist/helpers/index.d.ts +10 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +10 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/paginate.d.ts +49 -0
- package/dist/helpers/paginate.d.ts.map +1 -0
- package/dist/helpers/paginate.js +54 -0
- package/dist/helpers/paginate.js.map +1 -0
- package/dist/helpers/scope-strings.d.ts +74 -0
- package/dist/helpers/scope-strings.d.ts.map +1 -0
- package/dist/helpers/scope-strings.js +82 -0
- package/dist/helpers/scope-strings.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/migrate.d.ts +14 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +13 -0
- package/dist/migrate.js.map +1 -0
- package/dist/proxy/handler.d.ts +42 -0
- package/dist/proxy/handler.d.ts.map +1 -0
- package/dist/proxy/handler.js +102 -0
- package/dist/proxy/handler.js.map +1 -0
- package/dist/proxy/index.d.ts +9 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +14 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/mutation-detector.d.ts +35 -0
- package/dist/proxy/mutation-detector.d.ts.map +1 -0
- package/dist/proxy/mutation-detector.js +246 -0
- package/dist/proxy/mutation-detector.js.map +1 -0
- package/dist/proxy/oplog.d.ts +30 -0
- package/dist/proxy/oplog.d.ts.map +1 -0
- package/dist/proxy/oplog.js +110 -0
- package/dist/proxy/oplog.js.map +1 -0
- package/dist/proxy/registry.d.ts +35 -0
- package/dist/proxy/registry.d.ts.map +1 -0
- package/dist/proxy/registry.js +49 -0
- package/dist/proxy/registry.js.map +1 -0
- package/dist/proxy/types.d.ts +44 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +7 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/prune.d.ts +37 -0
- package/dist/prune.d.ts.map +1 -0
- package/dist/prune.js +112 -0
- package/dist/prune.js.map +1 -0
- package/dist/pull.d.ts +31 -0
- package/dist/pull.d.ts.map +1 -0
- package/dist/pull.js +608 -0
- package/dist/pull.js.map +1 -0
- package/dist/push.d.ts +33 -0
- package/dist/push.d.ts.map +1 -0
- package/dist/push.js +412 -0
- package/dist/push.js.map +1 -0
- package/dist/realtime/in-memory.d.ts +13 -0
- package/dist/realtime/in-memory.d.ts.map +1 -0
- package/dist/realtime/in-memory.js +28 -0
- package/dist/realtime/in-memory.js.map +1 -0
- package/dist/realtime/index.d.ts +3 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +2 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/types.d.ts +50 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/types.js +7 -0
- package/dist/realtime/types.js.map +1 -0
- package/dist/schema.d.ts +164 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +10 -0
- package/dist/schema.js.map +1 -0
- package/dist/shapes/create-handler.d.ts +119 -0
- package/dist/shapes/create-handler.d.ts.map +1 -0
- package/dist/shapes/create-handler.js +327 -0
- package/dist/shapes/create-handler.js.map +1 -0
- package/dist/shapes/index.d.ts +4 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +4 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/registry.d.ts +20 -0
- package/dist/shapes/registry.d.ts.map +1 -0
- package/dist/shapes/registry.js +88 -0
- package/dist/shapes/registry.js.map +1 -0
- package/dist/shapes/types.d.ts +204 -0
- package/dist/shapes/types.d.ts.map +1 -0
- package/dist/shapes/types.js +2 -0
- package/dist/shapes/types.js.map +1 -0
- package/dist/snapshot-chunks/adapters/s3.d.ts +74 -0
- package/dist/snapshot-chunks/adapters/s3.d.ts.map +1 -0
- package/dist/snapshot-chunks/adapters/s3.js +50 -0
- package/dist/snapshot-chunks/adapters/s3.js.map +1 -0
- package/dist/snapshot-chunks/db-metadata.d.ts +38 -0
- package/dist/snapshot-chunks/db-metadata.d.ts.map +1 -0
- package/dist/snapshot-chunks/db-metadata.js +324 -0
- package/dist/snapshot-chunks/db-metadata.js.map +1 -0
- package/dist/snapshot-chunks/index.d.ts +9 -0
- package/dist/snapshot-chunks/index.d.ts.map +1 -0
- package/dist/snapshot-chunks/index.js +9 -0
- package/dist/snapshot-chunks/index.js.map +1 -0
- package/dist/snapshot-chunks/types.d.ts +78 -0
- package/dist/snapshot-chunks/types.d.ts.map +1 -0
- package/dist/snapshot-chunks/types.js +8 -0
- package/dist/snapshot-chunks/types.js.map +1 -0
- package/dist/snapshot-chunks.d.ts +60 -0
- package/dist/snapshot-chunks.d.ts.map +1 -0
- package/dist/snapshot-chunks.js +223 -0
- package/dist/snapshot-chunks.js.map +1 -0
- package/dist/stats.d.ts +19 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +57 -0
- package/dist/stats.js.map +1 -0
- package/dist/subscriptions/index.d.ts +2 -0
- package/dist/subscriptions/index.d.ts.map +1 -0
- package/dist/subscriptions/index.js +2 -0
- package/dist/subscriptions/index.js.map +1 -0
- package/dist/subscriptions/resolve.d.ts +35 -0
- package/dist/subscriptions/resolve.d.ts.map +1 -0
- package/dist/subscriptions/resolve.js +134 -0
- package/dist/subscriptions/resolve.js.map +1 -0
- package/package.json +80 -0
- package/src/blobs/adapters/database.test.ts +67 -0
- package/src/blobs/adapters/database.ts +315 -0
- package/src/blobs/adapters/s3.ts +271 -0
- package/src/blobs/index.ts +9 -0
- package/src/blobs/manager.ts +600 -0
- package/src/blobs/migrate.ts +150 -0
- package/src/blobs/types.ts +70 -0
- package/src/clients.ts +21 -0
- package/src/compaction.ts +77 -0
- package/src/dialect/base.ts +292 -0
- package/src/dialect/helpers.ts +61 -0
- package/src/dialect/index.ts +7 -0
- package/src/dialect/types.ts +197 -0
- package/src/helpers/conflict.ts +64 -0
- package/src/helpers/emitted-change.ts +69 -0
- package/src/helpers/index.ts +10 -0
- package/src/helpers/paginate.ts +82 -0
- package/src/helpers/scope-strings.ts +101 -0
- package/src/index.ts +28 -0
- package/src/migrate.ts +20 -0
- package/src/proxy/handler.test.ts +120 -0
- package/src/proxy/handler.ts +159 -0
- package/src/proxy/index.ts +18 -0
- package/src/proxy/mutation-detector.test.ts +71 -0
- package/src/proxy/mutation-detector.ts +281 -0
- package/src/proxy/oplog.ts +146 -0
- package/src/proxy/registry.ts +56 -0
- package/src/proxy/types.ts +46 -0
- package/src/prune.ts +200 -0
- package/src/pull.ts +858 -0
- package/src/push.ts +583 -0
- package/src/realtime/in-memory.ts +33 -0
- package/src/realtime/index.ts +5 -0
- package/src/realtime/types.ts +55 -0
- package/src/schema.ts +172 -0
- package/src/shapes/create-handler.ts +590 -0
- package/src/shapes/index.ts +3 -0
- package/src/shapes/registry.ts +109 -0
- package/src/shapes/types.ts +267 -0
- package/src/snapshot-chunks/adapters/s3.ts +68 -0
- package/src/snapshot-chunks/db-metadata.test.ts +100 -0
- package/src/snapshot-chunks/db-metadata.ts +466 -0
- package/src/snapshot-chunks/index.ts +9 -0
- package/src/snapshot-chunks/types.ts +103 -0
- package/src/snapshot-chunks.ts +329 -0
- package/src/stats.ts +104 -0
- package/src/subscriptions/index.ts +1 -0
- package/src/subscriptions/resolve.ts +185 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-detector.js","sourceRoot":"","sources":["../../src/proxy/mutation-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Oplog Creation
|
|
3
|
+
*
|
|
4
|
+
* Creates sync oplog entries for proxy mutations.
|
|
5
|
+
*/
|
|
6
|
+
import type { SyncOp } from '@syncular/core';
|
|
7
|
+
import { type Kysely } from 'kysely';
|
|
8
|
+
import type { ServerSyncDialect } from '../dialect/types';
|
|
9
|
+
import type { SyncCoreDb } from '../schema';
|
|
10
|
+
import type { ProxyTableHandler } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* Create oplog entries for affected rows.
|
|
13
|
+
*
|
|
14
|
+
* This is called after a mutation to record the changes in the sync oplog,
|
|
15
|
+
* making them visible to sync clients.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createOplogEntries<DB extends SyncCoreDb>(args: {
|
|
18
|
+
trx: Kysely<DB>;
|
|
19
|
+
dialect: ServerSyncDialect;
|
|
20
|
+
actorId: string;
|
|
21
|
+
clientId: string;
|
|
22
|
+
partitionId?: string;
|
|
23
|
+
shape: ProxyTableHandler;
|
|
24
|
+
operation: SyncOp;
|
|
25
|
+
rows: Record<string, unknown>[];
|
|
26
|
+
}): Promise<{
|
|
27
|
+
commitSeq: number;
|
|
28
|
+
affectedTables: string[];
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=oplog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oplog.d.ts","sourceRoot":"","sources":["../../src/proxy/oplog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,MAAM,EAAO,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AASjD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,SAAS,UAAU,EAAE,IAAI,EAAE;IACpE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8G3D"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Oplog Creation
|
|
3
|
+
*
|
|
4
|
+
* Creates sync oplog entries for proxy mutations.
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import { sql } from 'kysely';
|
|
8
|
+
/**
|
|
9
|
+
* Generate a random ID for commit tracking.
|
|
10
|
+
*/
|
|
11
|
+
function generateId() {
|
|
12
|
+
return randomUUID();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create oplog entries for affected rows.
|
|
16
|
+
*
|
|
17
|
+
* This is called after a mutation to record the changes in the sync oplog,
|
|
18
|
+
* making them visible to sync clients.
|
|
19
|
+
*/
|
|
20
|
+
export async function createOplogEntries(args) {
|
|
21
|
+
const { trx, dialect, actorId, clientId, shape, operation, rows } = args;
|
|
22
|
+
const partitionId = args.partitionId ?? 'default';
|
|
23
|
+
if (rows.length === 0) {
|
|
24
|
+
return { commitSeq: 0, affectedTables: [] };
|
|
25
|
+
}
|
|
26
|
+
const pk = shape.primaryKey ?? 'id';
|
|
27
|
+
const versionCol = shape.versionColumn ?? 'server_version';
|
|
28
|
+
// Create commit record
|
|
29
|
+
const commitResult = await sql `
|
|
30
|
+
insert into ${sql.table('sync_commits')} (
|
|
31
|
+
partition_id,
|
|
32
|
+
actor_id,
|
|
33
|
+
client_id,
|
|
34
|
+
client_commit_id,
|
|
35
|
+
meta,
|
|
36
|
+
result_json
|
|
37
|
+
)
|
|
38
|
+
values (
|
|
39
|
+
${partitionId},
|
|
40
|
+
${actorId},
|
|
41
|
+
${clientId},
|
|
42
|
+
${`proxy:${generateId()}`},
|
|
43
|
+
${null},
|
|
44
|
+
${null}
|
|
45
|
+
)
|
|
46
|
+
returning commit_seq
|
|
47
|
+
`.execute(trx);
|
|
48
|
+
const commitRow = commitResult.rows[0];
|
|
49
|
+
if (!commitRow) {
|
|
50
|
+
throw new Error('Failed to insert sync_commits row');
|
|
51
|
+
}
|
|
52
|
+
const commitSeq = Number(commitRow.commit_seq);
|
|
53
|
+
// Compute scopes for all rows and collect changes
|
|
54
|
+
const affectedTablesSet = new Set();
|
|
55
|
+
affectedTablesSet.add(shape.table);
|
|
56
|
+
const changes = rows.map((row) => {
|
|
57
|
+
const scopes = shape.computeScopes(row);
|
|
58
|
+
return {
|
|
59
|
+
commit_seq: commitSeq,
|
|
60
|
+
partition_id: partitionId,
|
|
61
|
+
table: shape.table,
|
|
62
|
+
row_id: String(row[pk]),
|
|
63
|
+
op: operation,
|
|
64
|
+
row_json: operation === 'delete' ? null : row,
|
|
65
|
+
row_version: row[versionCol] != null ? Number(row[versionCol]) : null,
|
|
66
|
+
scopes: dialect.scopesToDb(scopes),
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
// Insert changes
|
|
70
|
+
await sql `
|
|
71
|
+
insert into ${sql.table('sync_changes')} (
|
|
72
|
+
commit_seq,
|
|
73
|
+
partition_id,
|
|
74
|
+
"table",
|
|
75
|
+
row_id,
|
|
76
|
+
op,
|
|
77
|
+
row_json,
|
|
78
|
+
row_version,
|
|
79
|
+
scopes
|
|
80
|
+
)
|
|
81
|
+
values ${sql.join(changes.map((c) => sql `(
|
|
82
|
+
${c.commit_seq},
|
|
83
|
+
${c.partition_id},
|
|
84
|
+
${c.table},
|
|
85
|
+
${c.row_id},
|
|
86
|
+
${c.op},
|
|
87
|
+
${c.row_json},
|
|
88
|
+
${c.row_version},
|
|
89
|
+
${c.scopes}
|
|
90
|
+
)`), sql `, `)}
|
|
91
|
+
`.execute(trx);
|
|
92
|
+
// Update commit with affected tables
|
|
93
|
+
const affectedTables = Array.from(affectedTablesSet);
|
|
94
|
+
const sortedAffectedTables = affectedTables.sort();
|
|
95
|
+
await sql `
|
|
96
|
+
update ${sql.table('sync_commits')}
|
|
97
|
+
set change_count = ${rows.length}, affected_tables = ${sortedAffectedTables}
|
|
98
|
+
where commit_seq = ${commitSeq}
|
|
99
|
+
`.execute(trx);
|
|
100
|
+
// Insert table commits for subscription filtering
|
|
101
|
+
if (affectedTables.length > 0) {
|
|
102
|
+
await sql `
|
|
103
|
+
insert into ${sql.table('sync_table_commits')} (partition_id, "table", commit_seq)
|
|
104
|
+
values ${sql.join(sortedAffectedTables.map((table) => sql `(${partitionId}, ${table}, ${commitSeq})`), sql `, `)}
|
|
105
|
+
on conflict (partition_id, "table", commit_seq) do nothing
|
|
106
|
+
`.execute(trx);
|
|
107
|
+
}
|
|
108
|
+
return { commitSeq, affectedTables };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=oplog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oplog.js","sourceRoot":"","sources":["../../src/proxy/oplog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Proxy Table Registry
|
|
3
|
+
*
|
|
4
|
+
* Registry for proxy table handlers.
|
|
5
|
+
*/
|
|
6
|
+
import type { ProxyTableHandler } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Registry for proxy table handlers.
|
|
9
|
+
*
|
|
10
|
+
* Maps table names to table handlers for oplog generation.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ProxyTableRegistry {
|
|
13
|
+
private handlers;
|
|
14
|
+
/**
|
|
15
|
+
* Register a proxy table handler.
|
|
16
|
+
*/
|
|
17
|
+
register(handler: ProxyTableHandler): this;
|
|
18
|
+
/**
|
|
19
|
+
* Get handler by table name.
|
|
20
|
+
*/
|
|
21
|
+
get(tableName: string): ProxyTableHandler | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Get handler by table name or throw.
|
|
24
|
+
*/
|
|
25
|
+
getOrThrow(tableName: string): ProxyTableHandler;
|
|
26
|
+
/**
|
|
27
|
+
* Check if a table has a registered handler.
|
|
28
|
+
*/
|
|
29
|
+
has(tableName: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get all registered handlers.
|
|
32
|
+
*/
|
|
33
|
+
getAll(): ProxyTableHandler[];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/proxy/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAwC;IAExD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAGzC;IAED;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEpD;IAED;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAM/C;IAED;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE,CAE5B;CACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Proxy Table Registry
|
|
3
|
+
*
|
|
4
|
+
* Registry for proxy table handlers.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Registry for proxy table handlers.
|
|
8
|
+
*
|
|
9
|
+
* Maps table names to table handlers for oplog generation.
|
|
10
|
+
*/
|
|
11
|
+
export class ProxyTableRegistry {
|
|
12
|
+
handlers = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Register a proxy table handler.
|
|
15
|
+
*/
|
|
16
|
+
register(handler) {
|
|
17
|
+
this.handlers.set(handler.table, handler);
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get handler by table name.
|
|
22
|
+
*/
|
|
23
|
+
get(tableName) {
|
|
24
|
+
return this.handlers.get(tableName);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get handler by table name or throw.
|
|
28
|
+
*/
|
|
29
|
+
getOrThrow(tableName) {
|
|
30
|
+
const handler = this.handlers.get(tableName);
|
|
31
|
+
if (!handler) {
|
|
32
|
+
throw new Error(`No proxy table registered for table: ${tableName}`);
|
|
33
|
+
}
|
|
34
|
+
return handler;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if a table has a registered handler.
|
|
38
|
+
*/
|
|
39
|
+
has(tableName) {
|
|
40
|
+
return this.handlers.has(tableName);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get all registered handlers.
|
|
44
|
+
*/
|
|
45
|
+
getAll() {
|
|
46
|
+
return Array.from(this.handlers.values());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/proxy/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD;;OAEG;IACH,QAAQ,CAAC,OAA0B,EAAQ;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IAAA,CACb;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB,EAAiC;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAAA,CACrC;IAED;;OAEG;IACH,UAAU,CAAC,SAAiB,EAAqB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,OAAO,CAAC;IAAA,CAChB;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB,EAAW;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAAA,CACrC;IAED;;OAEG;IACH,MAAM,GAAwB;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAAA,CAC3C;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Proxy Types
|
|
3
|
+
*
|
|
4
|
+
* Types for database proxy with automatic oplog generation.
|
|
5
|
+
*/
|
|
6
|
+
import type { StoredScopes } from '@syncular/core';
|
|
7
|
+
/**
|
|
8
|
+
* Proxy table handler for mutations.
|
|
9
|
+
*
|
|
10
|
+
* Defines how to compute scopes for rows affected by proxy operations.
|
|
11
|
+
*/
|
|
12
|
+
export interface ProxyTableHandler {
|
|
13
|
+
/** Database table name */
|
|
14
|
+
table: string;
|
|
15
|
+
/** Primary key column name (default: 'id') */
|
|
16
|
+
primaryKey?: string;
|
|
17
|
+
/** Version column name (default: 'server_version') */
|
|
18
|
+
versionColumn?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Compute scope values for a row.
|
|
21
|
+
*
|
|
22
|
+
* This determines which sync subscriptions will see changes to this row.
|
|
23
|
+
* Returns a JSONB-compatible object of scope key-value pairs.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* computeScopes: (row) => ({
|
|
27
|
+
* user_id: String(row.user_id),
|
|
28
|
+
* project_id: String(row.project_id),
|
|
29
|
+
* })
|
|
30
|
+
*/
|
|
31
|
+
computeScopes(row: Record<string, unknown>): StoredScopes;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Context for executing a proxied query.
|
|
35
|
+
*/
|
|
36
|
+
export interface ProxyQueryContext {
|
|
37
|
+
/** Actor ID for oplog tracking */
|
|
38
|
+
actorId: string;
|
|
39
|
+
/** Client ID for oplog tracking */
|
|
40
|
+
clientId: string;
|
|
41
|
+
/** Logical partition key (default: 'default') */
|
|
42
|
+
partitionId?: string;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/prune.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Pruning utilities
|
|
3
|
+
*
|
|
4
|
+
* Pruning strategy (initial):
|
|
5
|
+
* - Track per-client cursors in `sync_client_cursors`
|
|
6
|
+
* - Consider a client "active" if it has pulled within `activeWindowMs`
|
|
7
|
+
* - Compute watermark = min(cursor) across active clients (ignoring cursor < 0)
|
|
8
|
+
* - Delete commits with commit_seq <= watermark (cascade deletes changes)
|
|
9
|
+
*
|
|
10
|
+
* Clients behind pruned history will be forced to bootstrap.
|
|
11
|
+
*/
|
|
12
|
+
import type { Kysely } from 'kysely';
|
|
13
|
+
import type { SyncCoreDb } from './schema';
|
|
14
|
+
export interface PruneOptions {
|
|
15
|
+
/** Clients with updated_at older than this are ignored for watermark. Default: 14 days. */
|
|
16
|
+
activeWindowMs?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Time-based retention safety cap.
|
|
19
|
+
*
|
|
20
|
+
* The server prunes commits older than this age even if watermark pruning
|
|
21
|
+
* is stuck (e.g. a client never advances).
|
|
22
|
+
* Default: 30 days.
|
|
23
|
+
*/
|
|
24
|
+
fallbackMaxAgeMs?: number;
|
|
25
|
+
/** Soft cap: keep at least this many newest commits even if watermark is high. Default: 1000. */
|
|
26
|
+
keepNewestCommits?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function computePruneWatermarkCommitSeq<DB extends SyncCoreDb>(db: Kysely<DB>, options?: PruneOptions): Promise<number>;
|
|
29
|
+
export declare function pruneSync<DB extends SyncCoreDb>(db: Kysely<DB>, args: {
|
|
30
|
+
watermarkCommitSeq: number;
|
|
31
|
+
keepNewestCommits?: number;
|
|
32
|
+
}): Promise<number>;
|
|
33
|
+
export declare function maybePruneSync<DB extends SyncCoreDb>(db: Kysely<DB>, args: {
|
|
34
|
+
minIntervalMs: number;
|
|
35
|
+
options?: PruneOptions;
|
|
36
|
+
}): Promise<number>;
|
|
37
|
+
//# sourceMappingURL=prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../src/prune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAGV,MAAM,EAGP,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgB3C,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAsB,8BAA8B,CAAC,EAAE,SAAS,UAAU,EACxE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAED,wBAAsB,SAAS,CAAC,EAAE,SAAS,UAAU,EACnD,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,IAAI,EAAE;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,CAAC,CA0DjB;AAqBD,wBAAsB,cAAc,CAAC,EAAE,SAAS,UAAU,EACxD,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,IAAI,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GACtD,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
package/dist/prune.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/server - Pruning utilities
|
|
3
|
+
*
|
|
4
|
+
* Pruning strategy (initial):
|
|
5
|
+
* - Track per-client cursors in `sync_client_cursors`
|
|
6
|
+
* - Consider a client "active" if it has pulled within `activeWindowMs`
|
|
7
|
+
* - Compute watermark = min(cursor) across active clients (ignoring cursor < 0)
|
|
8
|
+
* - Delete commits with commit_seq <= watermark (cascade deletes changes)
|
|
9
|
+
*
|
|
10
|
+
* Clients behind pruned history will be forced to bootstrap.
|
|
11
|
+
*/
|
|
12
|
+
import { sql } from 'kysely';
|
|
13
|
+
function coerceNumber(value) {
|
|
14
|
+
if (value === null || value === undefined)
|
|
15
|
+
return null;
|
|
16
|
+
if (typeof value === 'number')
|
|
17
|
+
return Number.isFinite(value) ? value : null;
|
|
18
|
+
if (typeof value === 'bigint')
|
|
19
|
+
return Number.isFinite(Number(value)) ? Number(value) : null;
|
|
20
|
+
if (typeof value === 'string') {
|
|
21
|
+
const n = Number(value);
|
|
22
|
+
return Number.isFinite(n) ? n : null;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
export async function computePruneWatermarkCommitSeq(db, options = {}) {
|
|
27
|
+
const syncDb = db;
|
|
28
|
+
const activeWindowMs = options.activeWindowMs ?? 14 * 24 * 60 * 60 * 1000;
|
|
29
|
+
const cutoffIso = new Date(Date.now() - activeWindowMs).toISOString();
|
|
30
|
+
const cursorsQ = syncDb.selectFrom('sync_client_cursors');
|
|
31
|
+
const row = await cursorsQ
|
|
32
|
+
.select(({ fn }) => fn.min('cursor').as('minCursor'))
|
|
33
|
+
.where(sql `updated_at >= ${cutoffIso}`)
|
|
34
|
+
.where(sql `cursor >= ${0}`)
|
|
35
|
+
.executeTakeFirst();
|
|
36
|
+
const minCursor = coerceNumber(row?.minCursor) ?? 0;
|
|
37
|
+
const fallbackMaxAgeMs = options.fallbackMaxAgeMs ?? 30 * 24 * 60 * 60 * 1000;
|
|
38
|
+
if (fallbackMaxAgeMs <= 0)
|
|
39
|
+
return minCursor;
|
|
40
|
+
const ageCutoffIso = new Date(Date.now() - fallbackMaxAgeMs).toISOString();
|
|
41
|
+
const commitsQ = syncDb.selectFrom('sync_commits');
|
|
42
|
+
const ageRow = await commitsQ
|
|
43
|
+
.select(({ fn }) => fn.max('commit_seq').as('maxSeq'))
|
|
44
|
+
.where(sql `created_at < ${ageCutoffIso}`)
|
|
45
|
+
.executeTakeFirst();
|
|
46
|
+
const ageSeq = coerceNumber(ageRow?.maxSeq) ?? 0;
|
|
47
|
+
return Math.max(minCursor, ageSeq);
|
|
48
|
+
}
|
|
49
|
+
export async function pruneSync(db, args) {
|
|
50
|
+
if (args.watermarkCommitSeq <= 0)
|
|
51
|
+
return 0;
|
|
52
|
+
const syncDb = db;
|
|
53
|
+
const keepNewestCommits = args.keepNewestCommits ?? 1000;
|
|
54
|
+
// Don't delete the newest N commits (even if watermark is higher)
|
|
55
|
+
const commitsQ = syncDb.selectFrom('sync_commits');
|
|
56
|
+
const maxRow = await commitsQ
|
|
57
|
+
.select(({ fn }) => fn.max('commit_seq').as('maxSeq'))
|
|
58
|
+
.executeTakeFirst();
|
|
59
|
+
const maxSeq = coerceNumber(maxRow?.maxSeq) ?? 0;
|
|
60
|
+
const minKept = Math.max(0, maxSeq - keepNewestCommits);
|
|
61
|
+
const pruneUpTo = Math.min(args.watermarkCommitSeq, minKept);
|
|
62
|
+
if (pruneUpTo <= 0)
|
|
63
|
+
return 0;
|
|
64
|
+
// Delete dependent rows explicitly to be robust across dialects and older
|
|
65
|
+
// schemas that may not have FK cascade enabled.
|
|
66
|
+
await syncDb.deleteFrom('sync_table_commits')
|
|
67
|
+
.where(sql `commit_seq <= ${pruneUpTo}`)
|
|
68
|
+
.executeTakeFirst();
|
|
69
|
+
await syncDb.deleteFrom('sync_changes')
|
|
70
|
+
.where(sql `commit_seq <= ${pruneUpTo}`)
|
|
71
|
+
.executeTakeFirst();
|
|
72
|
+
const res = await syncDb.deleteFrom('sync_commits')
|
|
73
|
+
.where(sql `commit_seq <= ${pruneUpTo}`)
|
|
74
|
+
.executeTakeFirst();
|
|
75
|
+
return Number(res?.numDeletedRows ?? 0);
|
|
76
|
+
}
|
|
77
|
+
const pruneStateByDb = new WeakMap();
|
|
78
|
+
function getPruneState(db) {
|
|
79
|
+
const existing = pruneStateByDb.get(db);
|
|
80
|
+
if (existing)
|
|
81
|
+
return existing;
|
|
82
|
+
const created = {
|
|
83
|
+
lastPruneAtMs: 0,
|
|
84
|
+
pruneInFlight: null,
|
|
85
|
+
};
|
|
86
|
+
pruneStateByDb.set(db, created);
|
|
87
|
+
return created;
|
|
88
|
+
}
|
|
89
|
+
export async function maybePruneSync(db, args) {
|
|
90
|
+
const state = getPruneState(db);
|
|
91
|
+
const now = Date.now();
|
|
92
|
+
if (now - state.lastPruneAtMs < args.minIntervalMs)
|
|
93
|
+
return 0;
|
|
94
|
+
if (state.pruneInFlight)
|
|
95
|
+
return state.pruneInFlight;
|
|
96
|
+
state.pruneInFlight = (async () => {
|
|
97
|
+
try {
|
|
98
|
+
const watermark = await computePruneWatermarkCommitSeq(db, args.options);
|
|
99
|
+
const deleted = await pruneSync(db, {
|
|
100
|
+
watermarkCommitSeq: watermark,
|
|
101
|
+
keepNewestCommits: args.options?.keepNewestCommits,
|
|
102
|
+
});
|
|
103
|
+
state.lastPruneAtMs = Date.now();
|
|
104
|
+
return deleted;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
state.pruneInFlight = null;
|
|
108
|
+
}
|
|
109
|
+
})();
|
|
110
|
+
return state.pruneInFlight;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../src/prune.ts"],"names":[],"mappings":"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"}
|
package/dist/pull.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ScopeValues, type SyncPullRequest, type SyncPullResponse } from '@syncular/core';
|
|
2
|
+
import type { Kysely } from 'kysely';
|
|
3
|
+
import type { ServerSyncDialect } from './dialect/types';
|
|
4
|
+
import type { SyncCoreDb } from './schema';
|
|
5
|
+
import type { TableRegistry } from './shapes/registry';
|
|
6
|
+
import type { SnapshotChunkStorage } from './snapshot-chunks/types';
|
|
7
|
+
export interface PullResult {
|
|
8
|
+
response: SyncPullResponse;
|
|
9
|
+
/**
|
|
10
|
+
* Effective scopes for all active subscriptions (for cursor tracking).
|
|
11
|
+
* Maps subscription ID to effective scopes.
|
|
12
|
+
*/
|
|
13
|
+
effectiveScopes: ScopeValues;
|
|
14
|
+
/** Minimum nextCursor across active subscriptions (for pruning cursor tracking). */
|
|
15
|
+
clientCursor: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function pull<DB extends SyncCoreDb>(args: {
|
|
18
|
+
db: Kysely<DB>;
|
|
19
|
+
dialect: ServerSyncDialect;
|
|
20
|
+
shapes: TableRegistry<DB>;
|
|
21
|
+
actorId: string;
|
|
22
|
+
partitionId?: string;
|
|
23
|
+
request: SyncPullRequest;
|
|
24
|
+
/**
|
|
25
|
+
* Optional snapshot chunk storage adapter.
|
|
26
|
+
* When provided, stores chunk bodies in external storage (S3, etc.)
|
|
27
|
+
* instead of inline in the database.
|
|
28
|
+
*/
|
|
29
|
+
chunkStorage?: SnapshotChunkStorage;
|
|
30
|
+
}): Promise<PullResult>;
|
|
31
|
+
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../src/pull.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,WAAW,EAMhB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAItB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAiFpE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;;;OAGG;IACH,eAAe,EAAE,WAAW,CAAC;IAC7B,oFAAoF;IACpF,YAAY,EAAE,MAAM,CAAC;CACtB;AA0JD,wBAAsB,IAAI,CAAC,EAAE,SAAS,UAAU,EAAE,IAAI,EAAE;IACtD,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC,GAAG,OAAO,CAAC,UAAU,CAAC,CA2jBtB"}
|