@syncular/server-hono 0.0.4-26 → 0.0.6-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.
Files changed (51) hide show
  1. package/dist/console/gateway.d.ts +3 -1
  2. package/dist/console/gateway.d.ts.map +1 -1
  3. package/dist/console/gateway.js +218 -41
  4. package/dist/console/gateway.js.map +1 -1
  5. package/dist/console/index.d.ts +1 -0
  6. package/dist/console/index.d.ts.map +1 -1
  7. package/dist/console/index.js +1 -0
  8. package/dist/console/index.js.map +1 -1
  9. package/dist/console/routes.d.ts +3 -97
  10. package/dist/console/routes.d.ts.map +1 -1
  11. package/dist/console/routes.js +507 -80
  12. package/dist/console/routes.js.map +1 -1
  13. package/dist/console/schemas.d.ts +29 -0
  14. package/dist/console/schemas.d.ts.map +1 -1
  15. package/dist/console/schemas.js +22 -0
  16. package/dist/console/schemas.js.map +1 -1
  17. package/dist/console/types.d.ts +175 -0
  18. package/dist/console/types.d.ts.map +1 -0
  19. package/dist/console/types.js +2 -0
  20. package/dist/console/types.js.map +1 -0
  21. package/dist/create-server.d.ts +17 -34
  22. package/dist/create-server.d.ts.map +1 -1
  23. package/dist/create-server.js +26 -26
  24. package/dist/create-server.js.map +1 -1
  25. package/dist/proxy/connection-manager.d.ts +3 -3
  26. package/dist/proxy/connection-manager.d.ts.map +1 -1
  27. package/dist/proxy/routes.d.ts +4 -4
  28. package/dist/proxy/routes.d.ts.map +1 -1
  29. package/dist/proxy/routes.js +1 -1
  30. package/dist/routes.d.ts +33 -9
  31. package/dist/routes.d.ts.map +1 -1
  32. package/dist/routes.js +153 -70
  33. package/dist/routes.js.map +1 -1
  34. package/package.json +21 -7
  35. package/src/__tests__/blob-routes.test.ts +424 -0
  36. package/src/__tests__/console-gateway-live-routes.test.ts +54 -3
  37. package/src/__tests__/console-routes.test.ts +161 -7
  38. package/src/__tests__/console-ui.test.ts +114 -0
  39. package/src/__tests__/create-server.test.ts +233 -10
  40. package/src/__tests__/pull-chunk-storage.test.ts +6 -2
  41. package/src/__tests__/realtime-bridge.test.ts +6 -2
  42. package/src/__tests__/sync-rate-limit-routing.test.ts +6 -2
  43. package/src/console/gateway.ts +277 -53
  44. package/src/console/index.ts +1 -0
  45. package/src/console/routes.ts +654 -198
  46. package/src/console/schemas.ts +29 -0
  47. package/src/console/types.ts +185 -0
  48. package/src/create-server.ts +56 -53
  49. package/src/proxy/connection-manager.ts +3 -3
  50. package/src/proxy/routes.ts +4 -4
  51. package/src/routes.ts +225 -96
@@ -0,0 +1,175 @@
1
+ import type { ServerSyncDialect, ServerTableHandler, SqlFamily, SyncCoreDb, SyncServerAuth } from '@syncular/server';
2
+ import type { Context } from 'hono';
3
+ import type { UpgradeWebSocket } from 'hono/ws';
4
+ import type { Kysely } from 'kysely';
5
+ import type { WebSocketConnectionManager } from '../ws';
6
+ import type { LiveEvent } from './schemas';
7
+ export interface ConsoleAuthResult {
8
+ /** Identifier for the console user (for audit logging). */
9
+ consoleUserId?: string;
10
+ }
11
+ /**
12
+ * Listener for console live events (SSE streaming).
13
+ */
14
+ export type ConsoleEventListener = (event: LiveEvent) => void;
15
+ /**
16
+ * Console event emitter for broadcasting live events.
17
+ */
18
+ export interface ConsoleEventEmitter {
19
+ /** Add a listener for live events */
20
+ addListener(listener: ConsoleEventListener): void;
21
+ /** Remove a listener */
22
+ removeListener(listener: ConsoleEventListener): void;
23
+ /** Emit an event to all listeners */
24
+ emit(event: LiveEvent): void;
25
+ /**
26
+ * Replay recent events, optionally constrained by timestamp, partition, and max count.
27
+ */
28
+ replay(options?: {
29
+ since?: string;
30
+ limit?: number;
31
+ partitionId?: string;
32
+ }): LiveEvent[];
33
+ }
34
+ export interface ConsoleMetricsOptions {
35
+ /**
36
+ * Metrics query strategy for timeseries/latency endpoints.
37
+ * - raw: in-memory processing from raw event rows
38
+ * - aggregated: DB-level aggregation where supported (raw fallback for unsupported paths)
39
+ * - auto: use raw for small windows, aggregated for larger windows
40
+ */
41
+ aggregationMode?: 'auto' | 'raw' | 'aggregated';
42
+ /** Max events for using raw mode when aggregationMode is 'auto'. */
43
+ rawFallbackMaxEvents?: number;
44
+ }
45
+ export interface ConsoleMaintenanceOptions {
46
+ /**
47
+ * Minimum interval between automatic event-prune runs.
48
+ * Set to 0 to disable automatic pruning.
49
+ * Default: 5 minutes.
50
+ */
51
+ autoPruneIntervalMs?: number;
52
+ /**
53
+ * Max age for request events before pruning.
54
+ * Set to 0 to disable age-based pruning.
55
+ * Default: 7 days.
56
+ */
57
+ requestEventsMaxAgeMs?: number;
58
+ /**
59
+ * Max number of request events to retain.
60
+ * Set to 0 to disable count-based pruning.
61
+ * Default: 10000.
62
+ */
63
+ requestEventsMaxRows?: number;
64
+ /**
65
+ * Max age for operation audit events before pruning.
66
+ * Set to 0 to disable age-based pruning.
67
+ * Default: 30 days.
68
+ */
69
+ operationEventsMaxAgeMs?: number;
70
+ /**
71
+ * Max number of operation audit events to retain.
72
+ * Set to 0 to disable count-based pruning.
73
+ * Default: 5000.
74
+ */
75
+ operationEventsMaxRows?: number;
76
+ }
77
+ export interface ConsoleBlobObject {
78
+ key: string;
79
+ size: number;
80
+ uploaded: Date;
81
+ httpMetadata?: {
82
+ contentType?: string;
83
+ };
84
+ }
85
+ export interface ConsoleBlobGetResult {
86
+ body: ReadableStream;
87
+ size: number;
88
+ httpMetadata?: {
89
+ contentType?: string;
90
+ };
91
+ }
92
+ export interface ConsoleBlobHeadResult {
93
+ size: number;
94
+ httpMetadata?: {
95
+ contentType?: string;
96
+ };
97
+ }
98
+ export interface ConsoleBlobBucket {
99
+ list(options: {
100
+ prefix?: string;
101
+ cursor?: string;
102
+ limit?: number;
103
+ }): Promise<{
104
+ objects: ConsoleBlobObject[];
105
+ truncated: boolean;
106
+ cursor?: string;
107
+ }>;
108
+ get(key: string): Promise<ConsoleBlobGetResult | null>;
109
+ delete(key: string | string[]): Promise<void>;
110
+ head(key: string): Promise<ConsoleBlobHeadResult | null>;
111
+ }
112
+ export interface ConsoleSharedOptions {
113
+ /**
114
+ * CORS origins to allow. Defaults to ['http://localhost:5173', 'https://console.sync.dev'].
115
+ * Set to '*' to allow all origins (not recommended for production).
116
+ */
117
+ corsOrigins?: string[] | '*';
118
+ metrics?: ConsoleMetricsOptions;
119
+ maintenance?: ConsoleMaintenanceOptions;
120
+ blobBucket?: ConsoleBlobBucket;
121
+ }
122
+ export interface CreateConsoleRoutesOptions<DB extends SyncCoreDb = SyncCoreDb, Auth extends SyncServerAuth = SyncServerAuth, F extends SqlFamily = SqlFamily> extends ConsoleSharedOptions {
123
+ db: Kysely<DB>;
124
+ dialect: ServerSyncDialect<F>;
125
+ handlers: ServerTableHandler<DB, Auth>[];
126
+ /**
127
+ * Authentication function for console requests.
128
+ * Return null to reject the request.
129
+ */
130
+ authenticate: (c: Context) => Promise<ConsoleAuthResult | null>;
131
+ /**
132
+ * Compaction options (required for /compact endpoint).
133
+ */
134
+ compact?: {
135
+ fullHistoryHours?: number;
136
+ };
137
+ /**
138
+ * Pruning options.
139
+ */
140
+ prune?: {
141
+ activeWindowMs?: number;
142
+ fallbackMaxAgeMs?: number;
143
+ keepNewestCommits?: number;
144
+ };
145
+ /**
146
+ * Event emitter for live console events.
147
+ * If provided along with websocket config, enables the /events/live WebSocket endpoint.
148
+ */
149
+ eventEmitter?: ConsoleEventEmitter;
150
+ /**
151
+ * Shared sync WebSocket connection manager.
152
+ * When provided, `/clients` includes realtime connection state per client.
153
+ */
154
+ wsConnectionManager?: WebSocketConnectionManager;
155
+ /**
156
+ * WebSocket configuration for live events streaming.
157
+ */
158
+ websocket?: {
159
+ enabled?: boolean;
160
+ /**
161
+ * Runtime-provided WebSocket upgrader (e.g. from `hono/bun`'s `createBunWebSocket()`).
162
+ */
163
+ upgradeWebSocket?: UpgradeWebSocket;
164
+ /**
165
+ * Heartbeat interval in milliseconds. Default: 30000
166
+ */
167
+ heartbeatIntervalMs?: number;
168
+ };
169
+ /**
170
+ * Optional console schema readiness promise.
171
+ * When provided, routes wait for this promise before querying console tables.
172
+ */
173
+ consoleSchemaReady?: Promise<void>;
174
+ }
175
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/console/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/console/types.ts"],"names":[],"mappings":""}
@@ -2,47 +2,38 @@
2
2
  * Simplified server factory for Hono
3
3
  *
4
4
  * Breaking changes from legacy createSyncRoutes:
5
- * - handlers: array instead of TableRegistry
5
+ * - sync contract instead of top-level handlers/authenticate
6
6
  * - Combined sync + console routes in one call
7
7
  */
8
- import type { ServerSyncDialect, ServerTableHandler, SnapshotChunkStorage, SyncCoreDb } from '@syncular/server';
9
- import type { Context } from 'hono';
8
+ import type { ScopeCacheBackend, ServerSyncConfig, ServerSyncDialect, SnapshotChunkStorage, SqlFamily, SyncCoreDb } from '@syncular/server';
10
9
  import type { UpgradeWebSocket } from 'hono/ws';
11
10
  import type { Kysely } from 'kysely';
12
- import { type ConsoleEventEmitter, createConsoleRoutes } from './console';
11
+ import { createConsoleRoutes } from './console/routes';
12
+ import type { ConsoleEventEmitter, ConsoleSharedOptions } from './console/types';
13
13
  import { createSyncRoutes, type SyncAuthResult, type SyncRoutesConfigWithRateLimit } from './routes';
14
- export interface SyncServerOptions<DB extends SyncCoreDb = SyncCoreDb> {
14
+ export interface SyncServerOptions<DB extends SyncCoreDb = SyncCoreDb, Auth extends SyncAuthResult = SyncAuthResult, F extends SqlFamily = SqlFamily> {
15
15
  /** Kysely database instance */
16
16
  db: Kysely<DB>;
17
17
  /** Server sync dialect */
18
- dialect: ServerSyncDialect;
19
- /**
20
- * Table handlers for sync operations.
21
- */
22
- handlers: ServerTableHandler<DB>[];
23
- /** Authentication function - returns actorId or null for unauthenticated */
24
- authenticate: (c: Context) => Promise<SyncAuthResult | null>;
18
+ dialect: ServerSyncDialect<F>;
19
+ /** Sync contract with auth + table handlers */
20
+ sync: ServerSyncConfig<DB, Auth>;
25
21
  /** Snapshot chunk storage (external body storage, e.g. R2/S3) */
26
22
  chunkStorage?: SnapshotChunkStorage;
23
+ /** Scope cache backend for resolveScopes() results */
24
+ scopeCache?: ScopeCacheBackend;
27
25
  /** Sync route configuration */
28
- sync?: SyncRoutesConfigWithRateLimit;
26
+ routes?: SyncRoutesConfigWithRateLimit;
29
27
  /** WebSocket upgrader for realtime */
30
28
  upgradeWebSocket?: UpgradeWebSocket;
31
29
  /**
32
30
  * Console configuration for dashboard/monitoring.
33
31
  * Omit or set to false to disable console routes.
34
32
  */
35
- console?: false | {
33
+ console?: false | ({
36
34
  /** Console bearer token for authentication (required unless SYNC_CONSOLE_TOKEN is set) */
37
35
  token?: string;
38
- /** CORS origins (defaults to '*') */
39
- corsOrigins?: '*' | string[];
40
- /** Metrics aggregation strategy for console stats endpoints */
41
- metrics?: {
42
- aggregationMode?: 'auto' | 'raw' | 'aggregated';
43
- rawFallbackMaxEvents?: number;
44
- };
45
- };
36
+ } & ConsoleSharedOptions);
46
37
  }
47
38
  export interface SyncServerResult {
48
39
  /** Sync routes for Hono */
@@ -57,29 +48,21 @@ export interface SyncServerResult {
57
48
  *
58
49
  * @example
59
50
  * ```typescript
60
- * // With handlers
51
+ * // With sync contract
61
52
  * const { syncRoutes } = createSyncServer({
62
53
  * db,
63
54
  * dialect,
64
- * handlers: [tasksHandler, notesHandler],
65
- * authenticate: async (c) => {
66
- * const userId = c.req.header('x-user-id');
67
- * return userId ? { actorId: userId } : null;
68
- * },
55
+ * sync,
69
56
  * });
70
57
  *
71
58
  * // With custom handlers
72
59
  * const { syncRoutes, consoleRoutes } = createSyncServer({
73
60
  * db,
74
61
  * dialect,
75
- * handlers: [tasksHandler, notesHandler],
76
- * authenticate: async (c) => {
77
- * const userId = c.req.header('x-user-id');
78
- * return userId ? { actorId: userId } : null;
79
- * },
62
+ * sync,
80
63
  * console: { token: process.env.CONSOLE_TOKEN },
81
64
  * });
82
65
  * ```
83
66
  */
84
- export declare function createSyncServer<DB extends SyncCoreDb = SyncCoreDb>(options: SyncServerOptions<DB>): SyncServerResult;
67
+ export declare function createSyncServer<DB extends SyncCoreDb = SyncCoreDb, Auth extends SyncAuthResult = SyncAuthResult, F extends SqlFamily = SqlFamily>(options: SyncServerOptions<DB, Auth, F>): SyncServerResult;
85
68
  //# sourceMappingURL=create-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EAExB,mBAAmB,EAEpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAEhB,KAAK,cAAc,EACnB,KAAK,6BAA6B,EACnC,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,iBAAiB,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU;IACnE,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEf,0BAA0B;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnC,4EAA4E;IAC5E,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAE7D,iEAAiE;IACjE,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAEpC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,6BAA6B,CAAC;IAErC,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;OAGG;IACH,OAAO,CAAC,EACJ,KAAK,GACL;QACE,0FAA0F;QAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,qCAAqC;QACrC,WAAW,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;QAC7B,+DAA+D;QAC/D,OAAO,CAAC,EAAE;YACR,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;YAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;SAC/B,CAAC;KACH,CAAC;CACP;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAChD,2CAA2C;IAC3C,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACvD,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU,EACjE,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,GAC7B,gBAAgB,CA0FlB"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,UAAU,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAEL,mBAAmB,EAEpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAEhB,KAAK,cAAc,EACnB,KAAK,6BAA6B,EACnC,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,iBAAiB,CAChC,EAAE,SAAS,UAAU,GAAG,UAAU,EAClC,IAAI,SAAS,cAAc,GAAG,cAAc,EAC5C,CAAC,SAAS,SAAS,GAAG,SAAS;IAE/B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEf,0BAA0B;IAC1B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAE9B,+CAA+C;IAC/C,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAEjC,iEAAiE;IACjE,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAEpC,sDAAsD;IACtD,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,6BAA6B,CAAC;IAEvC,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;OAGG;IACH,OAAO,CAAC,EACJ,KAAK,GACL,CAAC;QACC,0FAA0F;QAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,oBAAoB,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAChD,2CAA2C;IAC3C,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACvD,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,SAAS,UAAU,GAAG,UAAU,EAClC,IAAI,SAAS,cAAc,GAAG,cAAc,EAC5C,CAAC,SAAS,SAAS,GAAG,SAAS,EAC/B,OAAO,EAAE,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAoG3D"}
@@ -2,43 +2,35 @@
2
2
  * Simplified server factory for Hono
3
3
  *
4
4
  * Breaking changes from legacy createSyncRoutes:
5
- * - handlers: array instead of TableRegistry
5
+ * - sync contract instead of top-level handlers/authenticate
6
6
  * - Combined sync + console routes in one call
7
7
  */
8
- import { createConsoleEventEmitter, createConsoleRoutes, createTokenAuthenticator, } from './console/index.js';
8
+ import { createConsoleEventEmitter, createConsoleRoutes, createTokenAuthenticator, } from './console/routes.js';
9
9
  import { createSyncRoutes, getSyncWebSocketConnectionManager, } from './routes.js';
10
10
  /**
11
11
  * Create a simplified sync server with sync and optional console routes.
12
12
  *
13
13
  * @example
14
14
  * ```typescript
15
- * // With handlers
15
+ * // With sync contract
16
16
  * const { syncRoutes } = createSyncServer({
17
17
  * db,
18
18
  * dialect,
19
- * handlers: [tasksHandler, notesHandler],
20
- * authenticate: async (c) => {
21
- * const userId = c.req.header('x-user-id');
22
- * return userId ? { actorId: userId } : null;
23
- * },
19
+ * sync,
24
20
  * });
25
21
  *
26
22
  * // With custom handlers
27
23
  * const { syncRoutes, consoleRoutes } = createSyncServer({
28
24
  * db,
29
25
  * dialect,
30
- * handlers: [tasksHandler, notesHandler],
31
- * authenticate: async (c) => {
32
- * const userId = c.req.header('x-user-id');
33
- * return userId ? { actorId: userId } : null;
34
- * },
26
+ * sync,
35
27
  * console: { token: process.env.CONSOLE_TOKEN },
36
28
  * });
37
29
  * ```
38
30
  */
39
31
  export function createSyncServer(options) {
40
- const { db, dialect, handlers, authenticate, chunkStorage, sync, upgradeWebSocket, console: consoleConfig, } = options;
41
- if (handlers.length === 0) {
32
+ const { db, dialect, sync, chunkStorage, scopeCache, routes, upgradeWebSocket, console: consoleConfig, } = options;
33
+ if (sync.handlers.length === 0) {
42
34
  throw new Error('At least one handler must be provided');
43
35
  }
44
36
  const resolvedConsoleConfig = consoleConfig === false || consoleConfig === undefined
@@ -54,28 +46,33 @@ export function createSyncServer(options) {
54
46
  const consoleEventEmitter = isConsoleEnabled
55
47
  ? createConsoleEventEmitter()
56
48
  : undefined;
49
+ const consoleSchemaReady = isConsoleEnabled && dialect.ensureConsoleSchema
50
+ ? dialect.ensureConsoleSchema(db)
51
+ : undefined;
57
52
  // Create sync routes
58
53
  const syncRoutes = createSyncRoutes({
59
54
  db,
60
55
  dialect,
61
- handlers,
62
- authenticate,
56
+ handlers: sync.handlers,
57
+ authenticate: async (context) => sync.authenticate(context.req.raw),
63
58
  chunkStorage,
59
+ scopeCache,
64
60
  consoleLiveEmitter: consoleEventEmitter,
61
+ consoleSchemaReady,
65
62
  sync: {
66
- ...sync,
63
+ ...routes,
67
64
  websocket: upgradeWebSocket
68
65
  ? {
69
66
  enabled: true,
70
67
  upgradeWebSocket,
71
- ...(sync?.websocket?.heartbeatIntervalMs !== undefined && {
72
- heartbeatIntervalMs: sync.websocket.heartbeatIntervalMs,
68
+ ...(routes?.websocket?.heartbeatIntervalMs !== undefined && {
69
+ heartbeatIntervalMs: routes.websocket.heartbeatIntervalMs,
73
70
  }),
74
- ...(sync?.websocket?.maxConnectionsTotal !== undefined && {
75
- maxConnectionsTotal: sync.websocket.maxConnectionsTotal,
71
+ ...(routes?.websocket?.maxConnectionsTotal !== undefined && {
72
+ maxConnectionsTotal: routes.websocket.maxConnectionsTotal,
76
73
  }),
77
- ...(sync?.websocket?.maxConnectionsPerClient !== undefined && {
78
- maxConnectionsPerClient: sync.websocket.maxConnectionsPerClient,
74
+ ...(routes?.websocket?.maxConnectionsPerClient !== undefined && {
75
+ maxConnectionsPerClient: routes.websocket.maxConnectionsPerClient,
79
76
  }),
80
77
  }
81
78
  : { enabled: false },
@@ -88,12 +85,15 @@ export function createSyncServer(options) {
88
85
  const consoleRoutes = createConsoleRoutes({
89
86
  db,
90
87
  dialect,
91
- handlers,
88
+ handlers: sync.handlers,
92
89
  authenticate: createTokenAuthenticator(consoleToken),
93
- corsOrigins: resolvedConsoleConfig.corsOrigins ?? '*',
90
+ corsOrigins: resolvedConsoleConfig.corsOrigins,
94
91
  eventEmitter: consoleEventEmitter,
92
+ consoleSchemaReady,
95
93
  wsConnectionManager: getSyncWebSocketConnectionManager(syncRoutes),
96
94
  metrics: resolvedConsoleConfig.metrics,
95
+ maintenance: resolvedConsoleConfig.maintenance,
96
+ blobBucket: resolvedConsoleConfig.blobBucket,
97
97
  ...(upgradeWebSocket && {
98
98
  websocket: {
99
99
  enabled: true,
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Manages WebSocket connections for the proxy.
5
5
  */
6
6
  import type { ProxyHandshake, ProxyMessage, ProxyResponse } from '@syncular/core';
7
- import type { ProxyTableRegistry, ServerSyncDialect, SyncCoreDb } from '@syncular/server';
7
+ import type { ProxyHandlerCollection, ServerSyncDialect, SyncCoreDb } from '@syncular/server';
8
8
  import type { WSContext } from 'hono/ws';
9
9
  import type { Kysely, Transaction } from 'kysely';
10
10
  export interface ProxyConnectionManagerConfig<DB extends SyncCoreDb = SyncCoreDb> {
@@ -12,8 +12,8 @@ export interface ProxyConnectionManagerConfig<DB extends SyncCoreDb = SyncCoreDb
12
12
  db: Kysely<DB>;
13
13
  /** Server sync dialect */
14
14
  dialect: ServerSyncDialect;
15
- /** Proxy table registry for oplog generation */
16
- handlers: ProxyTableRegistry;
15
+ /** Proxy table handlers for oplog generation */
16
+ handlers: ProxyHandlerCollection;
17
17
  /** Maximum concurrent connections (default: 100) */
18
18
  maxConnections?: number;
19
19
  /** Idle connection timeout in ms (default: 30000) */
@@ -1 +1 @@
1
- {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/proxy/connection-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAEV,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,WAAW,4BAA4B,CAC3C,EAAE,SAAS,UAAU,GAAG,UAAU;IAElC,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,oBAAoB,CAAC,EAAE,SAAS,UAAU;IAClD,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAChD,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,sBAAsB,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU;IACpE,OAAO,CAAC,WAAW,CAAkD;IACrE,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAE/B,YAAY,MAAM,EAAE,4BAA4B,CAAC,EAAE,CAAC,EAInD;IAED;;OAEG;IACH,SAAS,IAAI,OAAO,CAEnB;IAED;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAc3E;IAED;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,oBAAoB,CAAC,EAAE,CAAC,GAAG,SAAS,CAEvD;IAED;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7C;IAED;;OAEG;IACG,aAAa,CACjB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CA0CxB;YAEa,WAAW;YAoCX,YAAY;YA2BZ,cAAc;YA2Bd,WAAW;IAkCzB,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9B;CACF"}
1
+ {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/proxy/connection-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAEV,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,WAAW,4BAA4B,CAC3C,EAAE,SAAS,UAAU,GAAG,UAAU;IAElC,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,EAAE,sBAAsB,CAAC;IACjC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,oBAAoB,CAAC,EAAE,SAAS,UAAU;IAClD,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAChD,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,sBAAsB,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU;IACpE,OAAO,CAAC,WAAW,CAAkD;IACrE,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAE/B,YAAY,MAAM,EAAE,4BAA4B,CAAC,EAAE,CAAC,EAInD;IAED;;OAEG;IACH,SAAS,IAAI,OAAO,CAEnB;IAED;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAc3E;IAED;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,oBAAoB,CAAC,EAAE,CAAC,GAAG,SAAS,CAEvD;IAED;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7C;IAED;;OAEG;IACG,aAAa,CACjB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CA0CxB;YAEa,WAAW;YAoCX,YAAY;YA2BZ,cAAc;YA2Bd,WAAW;IAkCzB,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9B;CACF"}
@@ -4,7 +4,7 @@
4
4
  * WebSocket endpoint for database proxy.
5
5
  */
6
6
  import type { ProxyHandshake, ProxyMessage, ProxyResponse } from '@syncular/core';
7
- import type { ProxyTableRegistry, ServerSyncDialect, SyncCoreDb } from '@syncular/server';
7
+ import type { ProxyHandlerCollection, ServerSyncDialect, SyncCoreDb } from '@syncular/server';
8
8
  import type { Context } from 'hono';
9
9
  import { Hono } from 'hono';
10
10
  import type { UpgradeWebSocket, WSContext } from 'hono/ws';
@@ -28,8 +28,8 @@ interface CreateProxyRoutesConfig<DB extends SyncCoreDb = SyncCoreDb> {
28
28
  db: Kysely<DB>;
29
29
  /** Server sync dialect */
30
30
  dialect: ServerSyncDialect;
31
- /** Proxy table registry for oplog generation */
32
- handlers: ProxyTableRegistry;
31
+ /** Proxy table handlers for oplog generation */
32
+ handlers: ProxyHandlerCollection;
33
33
  /** Authenticate the request and return actor info */
34
34
  authenticate: (c: Context) => Promise<ProxyAuthResult | null>;
35
35
  /** WebSocket upgrade function from Hono */
@@ -54,7 +54,7 @@ interface CreateProxyRoutesConfig<DB extends SyncCoreDb = SyncCoreDb> {
54
54
  *
55
55
  * app.route('/proxy', createProxyRoutes({
56
56
  * db,
57
- * handlers: proxyTableRegistry,
57
+ * handlers: proxyHandlers,
58
58
  * authenticate: async (c) => {
59
59
  * // Verify admin auth
60
60
  * return { actorId: 'admin:123' };
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/proxy/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC;;GAEG;AACH,UAAU,4BAA4B;IACpC,SAAS,IAAI,OAAO,CAAC;IACrB,kBAAkB,IAAI,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC;IAC5D,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5E,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAOD,UAAU,eAAe;IACvB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,uBAAuB,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU;IAClE,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,qDAAqD;IACrD,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,UAAU,EACrD,MAAM,EAAE,uBAAuB,CAAC,EAAE,CAAC,GAClC,IAAI,CA2HN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,GACX,4BAA4B,GAAG,SAAS,CAE1C"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/proxy/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC;;GAEG;AACH,UAAU,4BAA4B;IACpC,SAAS,IAAI,OAAO,CAAC;IACrB,kBAAkB,IAAI,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC;IAC5D,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5E,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAOD,UAAU,eAAe;IACvB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,uBAAuB,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU;IAClE,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,EAAE,sBAAsB,CAAC;IACjC,qDAAqD;IACrD,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,UAAU,EACrD,MAAM,EAAE,uBAAuB,CAAC,EAAE,CAAC,GAClC,IAAI,CA2HN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,GACX,4BAA4B,GAAG,SAAS,CAE1C"}
@@ -22,7 +22,7 @@ const proxyConnectionManagerMap = new WeakMap();
22
22
  *
23
23
  * app.route('/proxy', createProxyRoutes({
24
24
  * db,
25
- * handlers: proxyTableRegistry,
25
+ * handlers: proxyHandlers,
26
26
  * authenticate: async (c) => {
27
27
  * // Verify admin auth
28
28
  * return { actorId: 'admin:123' };
package/dist/routes.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  * - GET /snapshot-chunks/:chunkId (download encoded snapshot chunks)
7
7
  * - GET /realtime (optional WebSocket "wake up" notifications)
8
8
  */
9
- import type { ServerSyncDialect, ServerTableHandler, SnapshotChunkStorage, SyncCoreDb, SyncRealtimeBroadcaster } from '@syncular/server';
9
+ import type { ScopeCacheBackend, ServerSyncDialect, ServerTableHandler, SnapshotChunkStorage, SqlFamily, SyncCoreDb, SyncRealtimeBroadcaster, SyncServerAuth } from '@syncular/server';
10
10
  import { type CompactOptions, type PruneOptions } from '@syncular/server';
11
11
  import type { Context } from 'hono';
12
12
  import { Hono } from 'hono';
@@ -14,9 +14,7 @@ import type { UpgradeWebSocket } from 'hono/ws';
14
14
  import { type Kysely } from 'kysely';
15
15
  import { type SyncRateLimitConfig } from './rate-limit';
16
16
  import { WebSocketConnectionManager } from './ws';
17
- export interface SyncAuthResult {
18
- actorId: string;
19
- partitionId?: string;
17
+ export interface SyncAuthResult extends SyncServerAuth {
20
18
  }
21
19
  /**
22
20
  * WebSocket configuration for realtime sync.
@@ -67,6 +65,22 @@ export interface SyncRoutesConfigWithRateLimit {
67
65
  * Default: 200
68
66
  */
69
67
  maxOperationsPerPush?: number;
68
+ /**
69
+ * Request/response payload snapshots recorded for console inspection.
70
+ */
71
+ requestPayloadSnapshots?: {
72
+ /**
73
+ * Enable payload snapshot storage in `sync_request_payloads`.
74
+ * Default: true when console event recording is enabled.
75
+ */
76
+ enabled?: boolean;
77
+ /**
78
+ * Max serialized payload size in bytes per request/response snapshot.
79
+ * Larger payloads are truncated with metadata.
80
+ * Default: 128 KiB.
81
+ */
82
+ maxBytes?: number;
83
+ };
70
84
  /**
71
85
  * Rate limiting configuration.
72
86
  * Set to false to disable all rate limiting.
@@ -106,11 +120,11 @@ export interface SyncRoutesConfigWithRateLimit {
106
120
  instanceId?: string;
107
121
  };
108
122
  }
109
- export interface CreateSyncRoutesOptions<DB extends SyncCoreDb = SyncCoreDb> {
123
+ export interface CreateSyncRoutesOptions<DB extends SyncCoreDb = SyncCoreDb, Auth extends SyncAuthResult = SyncAuthResult, F extends SqlFamily = SqlFamily> {
110
124
  db: Kysely<DB>;
111
- dialect: ServerSyncDialect;
112
- handlers: ServerTableHandler<DB>[];
113
- authenticate: (c: Context) => Promise<SyncAuthResult | null>;
125
+ dialect: ServerSyncDialect<F>;
126
+ handlers: ServerTableHandler<DB, Auth>[];
127
+ authenticate: (c: Context) => Promise<Auth | null>;
114
128
  sync?: SyncRoutesConfigWithRateLimit;
115
129
  wsConnectionManager?: WebSocketConnectionManager;
116
130
  /**
@@ -119,6 +133,11 @@ export interface CreateSyncRoutesOptions<DB extends SyncCoreDb = SyncCoreDb> {
119
133
  * (S3, R2, etc.) instead of inline in the database.
120
134
  */
121
135
  chunkStorage?: SnapshotChunkStorage;
136
+ /**
137
+ * Optional scope cache backend for resolveScopes() results.
138
+ * Request-local memoization is always applied for every pull.
139
+ */
140
+ scopeCache?: ScopeCacheBackend;
122
141
  /**
123
142
  * Optional live emitter for console websocket activity feed.
124
143
  * When provided, sync lifecycle events are published to `/console/events/live`.
@@ -130,8 +149,13 @@ export interface CreateSyncRoutesOptions<DB extends SyncCoreDb = SyncCoreDb> {
130
149
  data: Record<string, unknown>;
131
150
  }): void;
132
151
  };
152
+ /**
153
+ * Optional console schema readiness promise.
154
+ * When provided, request-event recording waits for this promise before writing.
155
+ */
156
+ consoleSchemaReady?: Promise<void>;
133
157
  }
134
- export declare function createSyncRoutes<DB extends SyncCoreDb = SyncCoreDb>(options: CreateSyncRoutesOptions<DB>): Hono;
158
+ export declare function createSyncRoutes<DB extends SyncCoreDb = SyncCoreDb, Auth extends SyncAuthResult = SyncAuthResult, F extends SqlFamily = SqlFamily>(options: CreateSyncRoutesOptions<DB, Auth, F>): Hono;
135
159
  export declare function getSyncWebSocketConnectionManager(routes: Hono): WebSocketConnectionManager | undefined;
136
160
  export declare function getSyncRealtimeUnsubscribe(routes: Hono): (() => void) | undefined;
137
161
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}