@sveltebase/sync 1.3.0 → 1.4.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC,CAAC;AAaF,cAAM,eAAe,CACnB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACzD,SAAQ,KAAK;IACb,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAqB;IAG3C,OAAO,CAAC,YAAY,CAA0B;IAG9C,OAAO,CAAC,gBAAgB,CAAsC;IAE9D,OAAO,CAAC,aAAa,CAMb;gBAEI,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC;KACrD;IAoBD,IAAW,MAAM,gDAEhB;IAED,OAAO,CAAC,cAAc;YAiJR,OAAO;IAuFd,SAAS;IAgBhB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;YAOP,kBAAkB;IAoBhC,OAAO,CAAC,kBAAkB;YAkBZ,UAAU;YAiBV,aAAa;YAqBb,mBAAmB;IAyFjC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,eAAe;IAqChB,UAAU;CAelB;AAED,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG;KAC5G,CAAC,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACxC,GAAG;IACF,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KACvB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,OAAO,EAAE;IACT,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC;CACrD,KAAK,UAAU,CAAC,OAAO,CAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC,CAAC;AAaF,cAAM,eAAe,CACnB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACzD,SAAQ,KAAK;IACb,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAqB;IAG3C,OAAO,CAAC,YAAY,CAA0B;IAG9C,OAAO,CAAC,gBAAgB,CAAsC;IAE9D,OAAO,CAAC,aAAa,CAMb;gBAEI,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC;KACrD;IAoBD,IAAW,MAAM,gDAEhB;IAED,OAAO,CAAC,cAAc;YAiJR,OAAO;IAuFd,SAAS;IAgBhB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;YAOP,kBAAkB;IAoBhC,OAAO,CAAC,kBAAkB;YAkBZ,UAAU;YAiBV,aAAa;YAqBb,mBAAmB;IAyFjC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,eAAe;IAqChB,UAAU;CAelB;AAED,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG;KAC5G,CAAC,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACxC,GAAG;IACF,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KACvB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,OAAO,EAAE;IACT,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC;CACrD,KAAK,UAAU,CAAC,OAAO,CAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"live-query.svelte.d.ts","sourceRoot":"","sources":["../../src/client/live-query.svelte.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC7B,YAAY,CAAC,EAAE,MAAM,OAAO,EAAE,GAC7B,cAAc,CAAC,CAAC,CAAC,CA6BnB"}
1
+ {"version":3,"file":"live-query.svelte.d.ts","sourceRoot":"","sources":["live-query.svelte.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC7B,YAAY,CAAC,EAAE,MAAM,OAAO,EAAE,GAC7B,cAAc,CAAC,CAAC,CAAC,CA6BnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.svelte.d.ts","sourceRoot":"","sources":["../../src/client/status.svelte.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAqE;IAEnF,IAAI,KAAK,IAIW,YAAY,GAAG,WAAW,GAAG,cAAc,CAF9D;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,EAE9D;CACF"}
1
+ {"version":3,"file":"status.svelte.d.ts","sourceRoot":"","sources":["status.svelte.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAqE;IAEnF,IAAI,KAAK,IAIW,YAAY,GAAG,WAAW,GAAG,cAAc,CAF9D;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,EAE9D;CACF"}
@@ -0,0 +1,17 @@
1
+ import { SyncEngineBase } from "../server/engine.js";
2
+ import { type SyncAuthResult } from "../server/handler.js";
3
+ import type { SyncHandler, SyncPlatform } from "../server/index.js";
4
+ export type SyncWorkerOptions<TAuth = unknown> = {
5
+ handlers: SyncHandler[];
6
+ durableObjectBinding?: string;
7
+ websocketPath?: string;
8
+ auth?: (request: Request, platform: SyncPlatform) => Promise<SyncAuthResult<TAuth>> | SyncAuthResult<TAuth>;
9
+ identity?: (auth: TAuth) => string | number | bigint | null | undefined;
10
+ allowUnauthenticated?: boolean;
11
+ };
12
+ export declare function createSyncWorker<TAuth = unknown>(options: SyncWorkerOptions<TAuth>): ExportedHandler;
13
+ export declare function defineSyncWorker<TAuth = unknown>(options: SyncWorkerOptions<TAuth>): ExportedHandler;
14
+ export declare class SyncEngine extends SyncEngineBase {
15
+ constructor(ctx: DurableObjectState, env: Record<string, unknown>);
16
+ }
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA2CpE,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,OAAO,IAAI;IAC/C,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,CACL,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,KACnB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AA6FF,wBAAgB,gBAAgB,CAAC,KAAK,GAAG,OAAO,EAC9C,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAChC,eAAe,CAgDjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,GAAG,OAAO,EAC9C,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAChC,eAAe,CAEjB;AAED,qBAAa,UAAW,SAAQ,cAAc;gBAChC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAGlE"}
@@ -0,0 +1,116 @@
1
+ import { SyncEngineBase } from "../server/engine.js";
2
+ import { INTERNAL_AUTH_HEADER, } from "../server/handler.js";
3
+ let activeHandlers = [];
4
+ function defaultIdentity(auth) {
5
+ const value = auth?.identity ?? auth?.user?.id ?? auth?.userId;
6
+ return value == null ? null : String(value);
7
+ }
8
+ function serializeConnectionAuth(auth, identity) {
9
+ const payload = { auth, identity };
10
+ return btoa(unescape(encodeURIComponent(JSON.stringify(payload))));
11
+ }
12
+ function createPlatform(request, env, ctx) {
13
+ return {
14
+ env,
15
+ ctx,
16
+ context: ctx,
17
+ caches,
18
+ cf: request.cf,
19
+ };
20
+ }
21
+ function withPath(request, pathname) {
22
+ const url = new URL(request.url);
23
+ url.pathname = pathname;
24
+ return url.toString();
25
+ }
26
+ function isWebSocketRequest(request) {
27
+ return request.headers.get("Upgrade")?.toLowerCase() === "websocket";
28
+ }
29
+ async function forwardToEngine(request, env, durableObjectBinding) {
30
+ const namespace = env[durableObjectBinding];
31
+ if (!namespace) {
32
+ return new Response(`Missing ${durableObjectBinding} Durable Object binding`, { status: 500 });
33
+ }
34
+ const id = namespace.idFromName("global");
35
+ return namespace.get(id).fetch(request);
36
+ }
37
+ async function handleWebSocket(request, env, ctx, options) {
38
+ if (!isWebSocketRequest(request)) {
39
+ return new Response("Expected Upgrade: websocket", { status: 426 });
40
+ }
41
+ const publicHeaders = new Headers(request.headers);
42
+ publicHeaders.delete(INTERNAL_AUTH_HEADER);
43
+ const publicRequest = new Request(request, {
44
+ headers: publicHeaders,
45
+ });
46
+ const platform = createPlatform(publicRequest, env, ctx);
47
+ let resolvedAuth = null;
48
+ let identity = null;
49
+ if (options.auth) {
50
+ resolvedAuth = (await options.auth(publicRequest, platform)) ?? null;
51
+ if (!resolvedAuth && options.allowUnauthenticated === false) {
52
+ return new Response("Unauthorized", { status: 401 });
53
+ }
54
+ if (resolvedAuth) {
55
+ const identityValue = options.identity
56
+ ? options.identity(resolvedAuth)
57
+ : defaultIdentity(resolvedAuth);
58
+ identity = identityValue == null ? null : String(identityValue);
59
+ }
60
+ }
61
+ else if (options.allowUnauthenticated === false) {
62
+ return new Response("Unauthorized", { status: 401 });
63
+ }
64
+ const forwardedHeaders = new Headers(publicRequest.headers);
65
+ forwardedHeaders.delete(INTERNAL_AUTH_HEADER);
66
+ if (resolvedAuth) {
67
+ forwardedHeaders.set(INTERNAL_AUTH_HEADER, serializeConnectionAuth(resolvedAuth, identity));
68
+ }
69
+ const forwardedRequest = new Request(withPath(publicRequest, "/websocket"), publicRequest);
70
+ for (const [key, value] of forwardedHeaders) {
71
+ forwardedRequest.headers.set(key, value);
72
+ }
73
+ return forwardToEngine(forwardedRequest, env, options.durableObjectBinding);
74
+ }
75
+ export function createSyncWorker(options) {
76
+ activeHandlers = options.handlers;
77
+ const durableObjectBinding = options.durableObjectBinding ?? "SYNC_ENGINE";
78
+ const websocketPath = options.websocketPath ?? "/api/sync";
79
+ const authMetadata = options.auth;
80
+ const allowUnauthenticated = options.allowUnauthenticated ??
81
+ authMetadata?.allowUnauthenticated ??
82
+ true;
83
+ return {
84
+ async fetch(request, env, ctx) {
85
+ const url = new URL(request.url);
86
+ const workerEnv = env;
87
+ if (url.pathname === websocketPath && request.method === "GET") {
88
+ return handleWebSocket(request, workerEnv, ctx, {
89
+ ...options,
90
+ durableObjectBinding,
91
+ websocketPath,
92
+ allowUnauthenticated,
93
+ });
94
+ }
95
+ if (url.pathname === "/websocket") {
96
+ return new Response("Not found", { status: 404 });
97
+ }
98
+ if ((url.pathname === "/broadcast" ||
99
+ url.pathname === "/broadcast-batch") &&
100
+ request.method === "POST") {
101
+ const headers = new Headers(request.headers);
102
+ headers.delete(INTERNAL_AUTH_HEADER);
103
+ return forwardToEngine(new Request(request, { headers }), workerEnv, durableObjectBinding);
104
+ }
105
+ return new Response("Not found", { status: 404 });
106
+ },
107
+ };
108
+ }
109
+ export function defineSyncWorker(options) {
110
+ return createSyncWorker(options);
111
+ }
112
+ export class SyncEngine extends SyncEngineBase {
113
+ constructor(ctx, env) {
114
+ super(ctx, env, activeHandlers);
115
+ }
116
+ }
package/dist/index.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  export { SyncClient, createLiveQuery } from "./client/index.js";
2
2
  export type { LiveQueryState } from "./client/index.js";
3
3
  export { defineSync } from "./server/index.js";
4
- export { handleUpgrade, publishEvent, publishBulkEvent, createPublisher, createBulkPublisher } from "./server/handler.js";
5
- export type { PublishEventData, InferSchemaFromHandlers, SyncAuthResult, SyncUpgradeOptions } from "./server/handler.js";
6
- export type { SyncConnectionAuth, SyncContext, SyncHandler } from "./server/index.js";
4
+ export type { BulkPublishFn, InferSchemaFromHandlers, PublishEventData, PublishFn, SyncAuthResult, SyncConnectionAuth, SyncContext, SyncHandler, SyncPlatform, SyncPublisherOptions, } from "./server/index.js";
7
5
  export type { SyncMessage } from "./protocol.js";
8
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1H,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzH,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
1
1
  export { SyncClient, createLiveQuery } from "./client/index.js";
2
2
  export { defineSync } from "./server/index.js";
3
- export { handleUpgrade, publishEvent, publishBulkEvent, createPublisher, createBulkPublisher } from "./server/handler.js";
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,GACD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7C;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACvC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC,CAAC;CACJ,CAAC;AAEN,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAcjE"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["protocol.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,GACD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7C;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACvC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC,CAAC;CACJ,CAAC;AAEN,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAcjE"}
@@ -1,4 +1,4 @@
1
- import type { SyncHandler } from "./index.js";
1
+ import type { SyncHandler, SyncPlatform } from "./index.js";
2
2
  export interface ISyncConnection {
3
3
  send(data: string): void;
4
4
  close(code?: number, reason?: string): void;
@@ -21,7 +21,7 @@ export declare class SyncBroker {
21
21
  * Resolves the appropriate handler for a channel name.
22
22
  */
23
23
  private findHandler;
24
- handleMessage(conn: ISyncConnection, rawMessage: string, platform: App.Platform | undefined, request: Request): Promise<void>;
24
+ handleMessage(conn: ISyncConnection, rawMessage: string, platform: SyncPlatform, request: Request): Promise<void>;
25
25
  private broadcastChange;
26
26
  handleExternalChange(channel: string, action: "create" | "update" | "delete", key: string | undefined, data: any): Promise<void>;
27
27
  handleExternalBatchChange(channel: string, changes: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/server/broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,OAAO,IAAI,GAAG,CAAC;IACf,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3C,qBAAqB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,WAAW,CAAmC;gBAE1C,QAAQ,EAAE,WAAW,EAAE;IAK5B,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE;IAanC,kBAAkB,CAAC,IAAI,EAAE,eAAe;IAIxC,gBAAgB,CAAC,IAAI,EAAE,eAAe;IAI7C;;OAEG;IACH,OAAO,CAAC,WAAW;IAqCN,aAAa,CACxB,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,SAAS,EAClC,OAAO,EAAE,OAAO;YA0IJ,eAAe;IAmDhB,oBAAoB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACtC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,GAAG;IAqBE,yBAAyB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CAkBvF"}
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/server/broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,OAAO,IAAI,GAAG,CAAC;IACf,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3C,qBAAqB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,WAAW,CAAmC;gBAE1C,QAAQ,EAAE,WAAW,EAAE;IAK5B,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE;IAanC,kBAAkB,CAAC,IAAI,EAAE,eAAe;IAIxC,gBAAgB,CAAC,IAAI,EAAE,eAAe;IAI7C;;OAEG;IACH,OAAO,CAAC,WAAW;IAqCN,aAAa,CACxB,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO;YA2IJ,eAAe;IAmDhB,oBAAoB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACtC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,GAAG;IAqBE,yBAAyB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CAkBvF"}
@@ -69,6 +69,7 @@ export class SyncBroker {
69
69
  platform,
70
70
  request,
71
71
  auth,
72
+ identity: conn.getIdentity(),
72
73
  };
73
74
  try {
74
75
  switch (msg.type) {
@@ -1,13 +1,16 @@
1
1
  import { DurableObject } from "cloudflare:workers";
2
2
  import { SyncBroker } from "./broker.js";
3
- export declare class SyncEngineBase extends DurableObject<Env> {
3
+ import type { SyncHandler } from "./index.js";
4
+ type SyncEngineEnv = Record<string, unknown>;
5
+ export declare class SyncEngineBase extends DurableObject<SyncEngineEnv> {
4
6
  protected broker: SyncBroker;
5
7
  private connMap;
6
- constructor(ctx: DurableObjectState, env: Env, handlers: any[]);
8
+ constructor(ctx: DurableObjectState, env: SyncEngineEnv, handlers: SyncHandler[]);
7
9
  fetch(request: Request): Promise<Response>;
8
10
  private connectWebSocket;
9
11
  webSocketMessage(ws: WebSocket, message: string | ArrayBuffer): Promise<void>;
10
12
  webSocketClose(ws: WebSocket, code: number, reason: string): void;
11
13
  webSocketError(ws: WebSocket): void;
12
14
  }
15
+ export {};
13
16
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/server/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAqE/D,qBAAa,cAAe,SAAQ,aAAa,CAAC,GAAG,CAAC;IACpD,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAkD;gBAErD,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE;IAKxD,KAAK,CAAC,OAAO,EAAE,OAAO;IAoC5B,OAAO,CAAC,gBAAgB;IAoClB,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW;IAiBnE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAa1D,cAAc,CAAC,EAAE,EAAE,SAAS;CAO7B"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/server/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAE5D,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAoE7C,qBAAa,cAAe,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC9D,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAkD;gBAG/D,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,WAAW,EAAE;IAMnB,KAAK,CAAC,OAAO,EAAE,OAAO;IAoC5B,OAAO,CAAC,gBAAgB;IA4BlB,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW;IAoBnE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAa1D,cAAc,CAAC,EAAE,EAAE,SAAS;CAO7B"}
@@ -107,12 +107,6 @@ export class SyncEngineBase extends DurableObject {
107
107
  conn.setAuth(forwardedAuth.auth);
108
108
  conn.setIdentity(forwardedAuth.identity);
109
109
  }
110
- const url = new URL(request.url);
111
- const userId = url.searchParams.get("userId") || request.headers.get("x-user-id");
112
- if (userId && !conn.getAuth()) {
113
- conn.setAuth({ userId });
114
- conn.setIdentity(userId);
115
- }
116
110
  this.connMap.set(server, conn);
117
111
  this.broker.registerConnection(conn);
118
112
  return new Response(null, {
@@ -129,7 +123,10 @@ export class SyncEngineBase extends DurableObject {
129
123
  const request = new Request(conn.url, {
130
124
  headers: conn.headers,
131
125
  });
132
- await this.broker.handleMessage(conn, message, this.env, request);
126
+ const platform = {
127
+ env: this.env,
128
+ };
129
+ await this.broker.handleMessage(conn, message, platform, request);
133
130
  }
134
131
  webSocketClose(ws, code, reason) {
135
132
  const conn = this.connMap.get(ws);
@@ -1,47 +1,26 @@
1
- import type { SyncHandler } from "./index.js";
1
+ import type { SyncHandler, SyncPlatform } from "./index.js";
2
2
  export type SyncAuthResult<TAuth> = TAuth | null | undefined;
3
- export type SyncUpgradeOptions<TAuth = any> = {
4
- /**
5
- * Resolves the authenticated app payload for this WebSocket connection.
6
- * Return null/undefined when no session is present.
7
- */
8
- auth?: (request: Request, platform: App.Platform | undefined) => Promise<SyncAuthResult<TAuth>> | SyncAuthResult<TAuth>;
9
- /**
10
- * Returns the stable identity key used by scope filtering.
11
- * Defaults to auth.user.id when available, then auth.userId for legacy payloads.
12
- */
13
- identity?: (auth: TAuth) => string | number | bigint | null | undefined;
14
- /**
15
- * Defaults to true so existing public channels continue to work.
16
- * Set false to reject WebSocket upgrades without a resolved auth payload.
17
- */
18
- allowUnauthenticated?: boolean;
19
- };
20
- declare const INTERNAL_AUTH_HEADER = "x-sveltebase-sync-auth";
3
+ export declare const INTERNAL_AUTH_HEADER = "x-sveltebase-sync-auth";
21
4
  export type PublishEventData<TRecord, TAction extends "create" | "update" | "delete"> = TAction extends "create" ? TRecord : TAction extends "update" ? Partial<TRecord> : {
22
5
  updatedAt?: string;
23
6
  } | undefined;
24
7
  export type InferSchemaFromHandlers<T extends SyncHandler[]> = {
25
8
  [K in T[number] as K["config"]["channel"] extends string ? K["config"]["channel"] : K["config"]["channel"] extends (...args: any[]) => infer R ? R extends string ? R : string : string]: K extends SyncHandler<infer TRow> ? TRow : never;
26
9
  };
27
- export declare function createPublisher<TSchema extends Record<string, any>>(): <TChannel extends keyof TSchema & string, TAction extends "create" | "update" | "delete">(channel: TChannel | `${TChannel}:${string}`, action: TAction, key: string | undefined, data: PublishEventData<TSchema[TChannel], TAction>) => Promise<void>;
28
- export declare function createPublisher<THandlers extends SyncHandler[]>(handlers: THandlers): <TChannel extends keyof InferSchemaFromHandlers<THandlers> & string, TAction extends "create" | "update" | "delete">(channel: TChannel | `${TChannel}:${string}`, action: TAction, key: string | undefined, data: PublishEventData<InferSchemaFromHandlers<THandlers>[TChannel], TAction>) => Promise<void>;
29
- export declare function createBulkPublisher<TSchema extends Record<string, any>>(): <TChannel extends keyof TSchema & string>(channel: TChannel | `${TChannel}:${string}`, changes: Array<{
30
- action: "create" | "update" | "delete";
31
- key?: string;
32
- data?: any;
33
- }>) => Promise<void>;
34
- export declare function createBulkPublisher<THandlers extends SyncHandler[]>(handlers: THandlers): <TChannel extends keyof InferSchemaFromHandlers<THandlers> & string>(channel: TChannel | `${TChannel}:${string}`, changes: Array<{
10
+ export type SyncPublisherOptions = {
11
+ binding?: string;
12
+ fallbackUrl?: string;
13
+ durableObjectBinding?: string;
14
+ platform?: SyncPlatform;
15
+ };
16
+ export type PublishFn<TSchema extends Record<string, unknown>> = <TChannel extends keyof TSchema & string, TAction extends "create" | "update" | "delete">(channel: TChannel | `${TChannel}:${string}`, action: TAction, key: string | undefined, data: PublishEventData<TSchema[TChannel], TAction>) => Promise<void>;
17
+ export type BulkPublishFn<TSchema extends Record<string, unknown>> = <TChannel extends keyof TSchema & string>(channel: TChannel | `${TChannel}:${string}`, changes: Array<{
35
18
  action: "create" | "update" | "delete";
36
19
  key?: string;
37
20
  data?: any;
38
21
  }>) => Promise<void>;
39
- export declare function publishEvent(channel: string, action: "create" | "update" | "delete", key: string | undefined, data: any): Promise<void>;
40
- export declare function publishBulkEvent(channel: string, changes: Array<{
41
- action: "create" | "update" | "delete";
42
- key?: string;
43
- data?: any;
44
- }>): Promise<void>;
45
- export declare function handleUpgrade<TAuth = any>(request: Request, platform: App.Platform | undefined, options?: SyncUpgradeOptions<TAuth>): Promise<Response>;
46
- export { INTERNAL_AUTH_HEADER };
22
+ export declare function createPublisher<TSchema extends Record<string, unknown>>(options: SyncPublisherOptions): PublishFn<TSchema>;
23
+ export declare function createPublisher<THandlers extends SyncHandler[]>(options: SyncPublisherOptions, handlers: THandlers): PublishFn<InferSchemaFromHandlers<THandlers>>;
24
+ export declare function createBulkPublisher<TSchema extends Record<string, unknown>>(options: SyncPublisherOptions): BulkPublishFn<TSchema>;
25
+ export declare function createBulkPublisher<THandlers extends SyncHandler[]>(options: SyncPublisherOptions, handlers: THandlers): BulkPublishFn<InferSchemaFromHandlers<THandlers>>;
47
26
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/server/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["handler.ts"],"names":[],"mappings":"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"}
@@ -1,145 +1,82 @@
1
- const INTERNAL_AUTH_HEADER = "x-sveltebase-sync-auth";
2
- function defaultIdentity(auth) {
3
- const value = auth?.user?.id ?? auth?.userId;
4
- return value == null ? null : String(value);
1
+ export const INTERNAL_AUTH_HEADER = "x-sveltebase-sync-auth";
2
+ function getEnv(options) {
3
+ return options.platform?.env;
5
4
  }
6
- function serializeConnectionAuth(auth, identity) {
7
- const payload = { auth, identity };
8
- return btoa(unescape(encodeURIComponent(JSON.stringify(payload))));
5
+ function normalizeEndpoint(baseUrl, pathname) {
6
+ return new URL(pathname, baseUrl).toString();
9
7
  }
10
- export function createPublisher(handlers) {
11
- return async (channel, action, key, data) => {
12
- const resolvedChannel = String(channel);
13
- return publishEvent(resolvedChannel, action, key, data);
14
- };
15
- }
16
- export function createBulkPublisher(handlers) {
17
- return async (channel, changes) => {
18
- const resolvedChannel = String(channel);
19
- return publishBulkEvent(resolvedChannel, changes);
20
- };
21
- }
22
- export async function publishEvent(channel, action, key, data) {
23
- const envId = "$app/environment";
24
- let isDev = false;
25
- try {
26
- const env = await import(/* @vite-ignore */ envId);
27
- isDev = env.dev;
28
- }
29
- catch { }
30
- if (!isDev) {
31
- const globalObj = typeof globalThis !== "undefined" ? globalThis : {};
32
- const processEnv = globalObj.process?.env;
33
- if (processEnv?.NODE_ENV === "development" ||
34
- processEnv?.NODE_ENV === "test" ||
35
- globalObj.__sync_dev_broker__) {
36
- isDev = true;
37
- }
8
+ async function publishToDurableObject(platform, durableObjectBinding, pathname, body) {
9
+ const namespace = platform.env[durableObjectBinding];
10
+ if (!namespace) {
11
+ throw new Error(`Missing ${durableObjectBinding} Durable Object binding`);
38
12
  }
39
- if (isDev) {
40
- const { broadcastExternalChange } = await import("./dev-engine.js");
41
- await broadcastExternalChange(channel, action, key, data);
42
- return;
13
+ const id = namespace.idFromName("global");
14
+ const stub = namespace.get(id);
15
+ const response = await stub.fetch(`https://sync.internal${pathname}`, {
16
+ method: "POST",
17
+ headers: { "Content-Type": "application/json" },
18
+ body: JSON.stringify(body),
19
+ });
20
+ if (!response.ok) {
21
+ throw new Error(await response.text());
43
22
  }
44
- try {
45
- const serverId = "$app/server";
46
- const { getRequestEvent } = await import(/* @vite-ignore */ serverId);
47
- const { platform } = getRequestEvent();
48
- const namespace = platform?.env.SYNC_ENGINE;
49
- if (!namespace)
50
- return;
51
- const id = namespace.idFromName("global");
52
- const stub = namespace.get(id);
53
- await stub.fetch("https://realtime.internal/broadcast", {
54
- method: "POST",
55
- headers: { "Content-Type": "application/json" },
56
- body: JSON.stringify({ channel, action, key, data }),
57
- });
23
+ }
24
+ async function publishToServiceBinding(binding, pathname, body) {
25
+ const response = await binding.fetch(`https://sync.internal${pathname}`, {
26
+ method: "POST",
27
+ headers: { "Content-Type": "application/json" },
28
+ body: JSON.stringify(body),
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(await response.text());
58
32
  }
59
- catch (err) {
60
- console.error("Failed to publish sync event to Durable Object:", err);
33
+ }
34
+ async function publishToFallbackUrl(fallbackUrl, pathname, body) {
35
+ const response = await fetch(normalizeEndpoint(fallbackUrl, pathname), {
36
+ method: "POST",
37
+ headers: { "Content-Type": "application/json" },
38
+ body: JSON.stringify(body),
39
+ });
40
+ if (!response.ok) {
41
+ throw new Error(await response.text());
61
42
  }
62
43
  }
63
- export async function publishBulkEvent(channel, changes) {
64
- const envId = "$app/environment";
65
- let isDev = false;
66
- try {
67
- const env = await import(/* @vite-ignore */ envId);
68
- isDev = env.dev;
44
+ async function publish(options, pathname, body) {
45
+ const env = getEnv(options);
46
+ const durableObjectBinding = options.durableObjectBinding ?? "SYNC_ENGINE";
47
+ const bindingName = options.binding ?? "SYNC_WORKER";
48
+ if (options.platform && env?.[durableObjectBinding]) {
49
+ await publishToDurableObject(options.platform, durableObjectBinding, pathname, body);
50
+ return;
69
51
  }
70
- catch { }
71
- if (!isDev) {
72
- const globalObj = typeof globalThis !== "undefined" ? globalThis : {};
73
- const processEnv = globalObj.process?.env;
74
- if (processEnv?.NODE_ENV === "development" ||
75
- processEnv?.NODE_ENV === "test" ||
76
- globalObj.__sync_dev_broker__) {
77
- isDev = true;
78
- }
52
+ const serviceBinding = env?.[bindingName];
53
+ if (serviceBinding?.fetch) {
54
+ await publishToServiceBinding(serviceBinding, pathname, body);
55
+ return;
79
56
  }
80
- if (isDev) {
81
- const { broadcastExternalBatchChange } = await import("./dev-engine.js");
82
- await broadcastExternalBatchChange(channel, changes);
57
+ if (options.fallbackUrl) {
58
+ await publishToFallbackUrl(options.fallbackUrl, pathname, body);
83
59
  return;
84
60
  }
85
- try {
86
- const serverId = "$app/server";
87
- const { getRequestEvent } = await import(/* @vite-ignore */ serverId);
88
- const { platform } = getRequestEvent();
89
- const namespace = platform?.env.SYNC_ENGINE;
90
- if (!namespace)
91
- return;
92
- const id = namespace.idFromName("global");
93
- const stub = namespace.get(id);
94
- await stub.fetch("https://realtime.internal/broadcast-batch", {
95
- method: "POST",
96
- headers: { "Content-Type": "application/json" },
97
- body: JSON.stringify({ channel, changes }),
61
+ throw new Error(`Missing sync publisher target: provide platform.env.${durableObjectBinding}, platform.env.${bindingName}, or fallbackUrl`);
62
+ }
63
+ export function createPublisher(options, handlers) {
64
+ void handlers;
65
+ return async (channel, action, key, data) => {
66
+ await publish(options, "/broadcast", {
67
+ channel: String(channel),
68
+ action,
69
+ key,
70
+ data,
98
71
  });
99
- }
100
- catch (err) {
101
- console.error("Failed to publish bulk sync event to Durable Object:", err);
102
- }
72
+ };
103
73
  }
104
- export async function handleUpgrade(request, platform, options) {
105
- if (request.headers.get("Upgrade") !== "websocket") {
106
- return new Response("Expected Upgrade: websocket", { status: 426 });
107
- }
108
- const namespace = platform?.env?.SYNC_ENGINE;
109
- if (!namespace) {
110
- return new Response("SyncEngine binding is not available", { status: 500 });
111
- }
112
- try {
113
- let resolvedAuth = null;
114
- let identity = null;
115
- if (options?.auth) {
116
- resolvedAuth = (await options.auth(request, platform)) ?? null;
117
- if (!resolvedAuth && options.allowUnauthenticated === false) {
118
- return new Response("Unauthorized", { status: 401 });
119
- }
120
- if (resolvedAuth) {
121
- const identityValue = options.identity
122
- ? options.identity(resolvedAuth)
123
- : defaultIdentity(resolvedAuth);
124
- identity = identityValue == null ? null : String(identityValue);
125
- }
126
- }
127
- const forwardedRequest = new Request("https://realtime.internal/websocket", request);
128
- forwardedRequest.headers.delete(INTERNAL_AUTH_HEADER);
129
- if (resolvedAuth) {
130
- forwardedRequest.headers.set(INTERNAL_AUTH_HEADER, serializeConnectionAuth(resolvedAuth, identity));
131
- }
132
- else if (options?.auth) {
133
- forwardedRequest.headers.delete(INTERNAL_AUTH_HEADER);
134
- }
135
- const id = namespace.idFromName("global");
136
- const stub = namespace.get(id);
137
- return await stub.fetch(forwardedRequest);
138
- }
139
- catch (err) {
140
- return new Response(err.message || "SyncEngine binding is not available", {
141
- status: 503,
74
+ export function createBulkPublisher(options, handlers) {
75
+ void handlers;
76
+ return async (channel, changes) => {
77
+ await publish(options, "/broadcast-batch", {
78
+ channel: String(channel),
79
+ changes,
142
80
  });
143
- }
81
+ };
144
82
  }
145
- export { INTERNAL_AUTH_HEADER };
@@ -2,10 +2,18 @@ import type { ZodSchema } from "zod";
2
2
  export type SyncConnectionAuth<TUser = unknown> = {
3
3
  user: TUser;
4
4
  };
5
- export type SyncContext<TAuth = any> = {
6
- platform: App.Platform | undefined;
5
+ export type SyncPlatform<TEnv extends Record<string, unknown> = Record<string, unknown>> = {
6
+ env: TEnv;
7
+ ctx?: ExecutionContext;
8
+ context?: ExecutionContext;
9
+ caches?: CacheStorage;
10
+ cf?: IncomingRequestCfProperties;
11
+ };
12
+ export type SyncContext<TAuth = any, TEnv extends Record<string, unknown> = Record<string, unknown>> = {
13
+ platform: SyncPlatform<TEnv>;
7
14
  request: Request;
8
15
  auth: TAuth | null;
16
+ identity: string | null;
9
17
  };
10
18
  export type SyncHandlerConfig<TRow = any, TAuth = any> = {
11
19
  channel: string | ((ctx: SyncContext<TAuth>) => string);
@@ -25,4 +33,6 @@ export interface SyncHandler<TRow = any, TAuth = any> {
25
33
  resolveChannel(ctx: SyncContext<TAuth>): string;
26
34
  }
27
35
  export declare function defineSync<TRow = any, TAuth = any>(config: SyncHandlerConfig<TRow, TAuth>): SyncHandler<TRow, TAuth>;
36
+ export { createBulkPublisher, createPublisher, INTERNAL_AUTH_HEADER, } from "./handler.js";
37
+ export type { BulkPublishFn, InferSchemaFromHandlers, PublishEventData, PublishFn, SyncAuthResult, SyncPublisherOptions, } from "./handler.js";
28
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,MAAM,MAAM,kBAAkB,CAAC,KAAK,GAAG,OAAO,IAAI;IAChD,IAAI,EAAE,KAAK,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,KAAK,GAAG,GAAG,IAAI;IACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IACvD,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;IACxD,KAAK,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,CACP,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;KACzB,CAAC;IACF,KAAK,CAAC,EAAE,CACN,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,EACvB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACtC,IAAI,EAAE,IAAI,KACP,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;CACnD,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG;IAClD,MAAM,EAAE,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAChD,MAAM,EAAE,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,GACrC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAS1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}