@supalive/core 1.9.0 → 1.11.0

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 (71) hide show
  1. package/dist/db-ClCicssQ.js.map +1 -1
  2. package/dist/index-BQRlJY_1.d.ts +2192 -0
  3. package/dist/index-BQRlJY_1.d.ts.map +1 -0
  4. package/dist/index-C_Zew1wH.d.ts +2209 -0
  5. package/dist/index-C_Zew1wH.d.ts.map +1 -0
  6. package/dist/index-D8O39FoZ.d.ts +2192 -0
  7. package/dist/index-D8O39FoZ.d.ts.map +1 -0
  8. package/dist/index-WMhtVzJA.d.ts +2192 -0
  9. package/dist/index-WMhtVzJA.d.ts.map +1 -0
  10. package/dist/mysql-BXy4mk-9.d.ts +113 -0
  11. package/dist/mysql-BXy4mk-9.d.ts.map +1 -0
  12. package/dist/mysql-CBSuONm5.d.ts +109 -0
  13. package/dist/mysql-CBSuONm5.d.ts.map +1 -0
  14. package/dist/mysql-CDenA4XE.d.ts +109 -0
  15. package/dist/mysql-CDenA4XE.d.ts.map +1 -0
  16. package/dist/mysql-D-PGYc1L.js +609 -0
  17. package/dist/mysql-D-PGYc1L.js.map +1 -0
  18. package/dist/mysql-DAfFK5v1.d.ts +109 -0
  19. package/dist/mysql-DAfFK5v1.d.ts.map +1 -0
  20. package/dist/mysql-txOOzccX.js +609 -0
  21. package/dist/mysql-txOOzccX.js.map +1 -0
  22. package/dist/overlap-checker-BoWNco2y.js +258 -0
  23. package/dist/overlap-checker-BoWNco2y.js.map +1 -0
  24. package/dist/overlap-checker-DvRqQOTe.js +265 -0
  25. package/dist/overlap-checker-DvRqQOTe.js.map +1 -0
  26. package/dist/postgres-BKGLPrKt.d.ts +113 -0
  27. package/dist/postgres-BKGLPrKt.d.ts.map +1 -0
  28. package/dist/postgres-CKBWXyY8.d.ts +113 -0
  29. package/dist/postgres-CKBWXyY8.d.ts.map +1 -0
  30. package/dist/postgres-CapFFTTn.d.ts +117 -0
  31. package/dist/postgres-CapFFTTn.d.ts.map +1 -0
  32. package/dist/postgres-Cn9vTBX7.js +864 -0
  33. package/dist/postgres-Cn9vTBX7.js.map +1 -0
  34. package/dist/postgres-DQxKs5Nu.d.ts +113 -0
  35. package/dist/postgres-DQxKs5Nu.d.ts.map +1 -0
  36. package/dist/postgres-tLkdxhFu.js +864 -0
  37. package/dist/postgres-tLkdxhFu.js.map +1 -0
  38. package/dist/src/client/index.d.ts +1 -1
  39. package/dist/src/exports/mysql.d.ts +1 -1
  40. package/dist/src/exports/mysql.js +1 -1
  41. package/dist/src/exports/postgres.d.ts +1 -1
  42. package/dist/src/exports/postgres.js +1 -1
  43. package/dist/src/exports/procedure.d.ts +1 -1
  44. package/dist/src/exports/schema-sql.d.ts +1 -1
  45. package/dist/src/exports/server.d.ts +24 -124
  46. package/dist/src/exports/server.d.ts.map +1 -1
  47. package/dist/src/exports/server.js +137 -32
  48. package/dist/src/exports/server.js.map +1 -1
  49. package/dist/src/exports/sub-manager-worker-entry.d.ts +1 -0
  50. package/dist/src/exports/sub-manager-worker-entry.js +71 -0
  51. package/dist/src/exports/sub-manager-worker-entry.js.map +1 -0
  52. package/dist/src/exports/subscription-manager-worker-entry.js +3 -49
  53. package/dist/src/exports/subscription-manager-worker-entry.js.map +1 -1
  54. package/dist/src/exports/types.d.ts +2 -2
  55. package/dist/sub-worker-dispatch-Cokz99D1.js +810 -0
  56. package/dist/sub-worker-dispatch-Cokz99D1.js.map +1 -0
  57. package/dist/sub-worker-dispatch-DohrszOw.js +810 -0
  58. package/dist/sub-worker-dispatch-DohrszOw.js.map +1 -0
  59. package/dist/sub-worker-dispatch-G8V8asfR.js +810 -0
  60. package/dist/sub-worker-dispatch-G8V8asfR.js.map +1 -0
  61. package/dist/subscription-worker-dispatch-CSQV-PO3.js +810 -0
  62. package/dist/subscription-worker-dispatch-CSQV-PO3.js.map +1 -0
  63. package/dist/types_server-AQ8Jl2_R.d.ts +521 -0
  64. package/dist/types_server-AQ8Jl2_R.d.ts.map +1 -0
  65. package/dist/types_server-BB2WvXEA.d.ts +521 -0
  66. package/dist/types_server-BB2WvXEA.d.ts.map +1 -0
  67. package/dist/types_server-DU9JMSXd.d.ts +521 -0
  68. package/dist/types_server-DU9JMSXd.d.ts.map +1 -0
  69. package/dist/types_server-SPElhjga.d.ts +521 -0
  70. package/dist/types_server-SPElhjga.d.ts.map +1 -0
  71. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,71 @@
1
+ import { n as SubscriptionWorker, o as createDatabase, s as initCacheLayer, t as dispatchWorkerMessage } from "../../sub-worker-dispatch-DohrszOw.js";
2
+ import { parentPort } from "node:worker_threads";
3
+ //#region src/server/sub-manager-worker-entry.ts
4
+ if (!parentPort) throw new Error("subscription-manager-worker-entry must run inside a worker_threads Worker");
5
+ const port = parentPort;
6
+ let worker = null;
7
+ let db = null;
8
+ async function init(payload) {
9
+ const { cacheLayer } = initCacheLayer({
10
+ upstash: {
11
+ url: `https://${process.env.UPSTASH_REDIS_HOST}`,
12
+ token: process.env.UPSTASH_REDIS_TOKEN ?? "",
13
+ redisUrl: process.env.UPSTASH_REDIS_URL ?? ""
14
+ },
15
+ cacheTtlSeconds: payload.cacheTTLSeconds,
16
+ commandMaxRetries: 5,
17
+ createSubClient: false
18
+ });
19
+ if (payload.database.type === "postgres") db = createDatabase({
20
+ type: "postgres",
21
+ connectionString: payload.database.connectionString,
22
+ maxConnections: payload.maxConnectionsPerWorker,
23
+ minConnections: payload.database.minConnections ?? 1,
24
+ idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 3e4,
25
+ connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7e3
26
+ }, payload.workerId);
27
+ else db = createDatabase({
28
+ type: "mysql",
29
+ connectionString: payload.database.connectionString,
30
+ maxConnections: payload.maxConnectionsPerWorker,
31
+ minConnections: payload.database.minConnections ?? 1,
32
+ idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 3e4,
33
+ connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7e3,
34
+ queueLimit: payload.database.queueLimit ?? 0
35
+ }, payload.workerId);
36
+ worker = new SubscriptionWorker(payload.workerId, cacheLayer, db);
37
+ }
38
+ async function dispatch(req) {
39
+ if (req.type === 1) {
40
+ await init(req.payload);
41
+ return null;
42
+ }
43
+ if (!worker || !db) throw new Error("Worker received message before Init");
44
+ return dispatchWorkerMessage(worker, db, req.type, req.payload);
45
+ }
46
+ port.on("message", async (req) => {
47
+ try {
48
+ const result = await dispatch(req);
49
+ const res = {
50
+ reqId: req.reqId,
51
+ ok: true,
52
+ result
53
+ };
54
+ port.postMessage(res);
55
+ } catch (err) {
56
+ const e = err;
57
+ const res = {
58
+ reqId: req.reqId,
59
+ ok: false,
60
+ error: {
61
+ message: e?.message ?? String(err),
62
+ stack: e?.stack
63
+ }
64
+ };
65
+ port.postMessage(res);
66
+ }
67
+ });
68
+ //#endregion
69
+ export {};
70
+
71
+ //# sourceMappingURL=sub-manager-worker-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-manager-worker-entry.js","names":[],"sources":["../../../src/server/sub-manager-worker-entry.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport type { Database } from \"../db/db\";\nimport { SubscriptionWorker } from \"./sub-worker\";\nimport {\n MsgType,\n type WorkerInitPayload,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./sub-manager-worker-protocol\";\nimport { dispatchWorkerMessage } from \"./sub-worker-dispatch\";\nimport { createDatabase, initCacheLayer } from \"../db/init_db\";\n\nif (!parentPort) {\n throw new Error(\"subscription-manager-worker-entry must run inside a worker_threads Worker\");\n}\n\nconst port = parentPort;\n\nlet worker: SubscriptionWorker | null = null;\nlet db: Database | null = null;\n\nasync function init(payload: WorkerInitPayload): Promise<void> {\n const { cacheLayer } = initCacheLayer({\n upstash: {\n url: `https://${process.env.UPSTASH_REDIS_HOST}`,\n token: process.env.UPSTASH_REDIS_TOKEN ?? \"\",\n redisUrl: process.env.UPSTASH_REDIS_URL ?? \"\"\n },\n cacheTtlSeconds: payload.cacheTTLSeconds,\n commandMaxRetries: 5,\n createSubClient: false,\n });\n\n if (payload.database.type === \"postgres\") {\n db = createDatabase({\n type: \"postgres\",\n connectionString: payload.database.connectionString,\n maxConnections: payload.maxConnectionsPerWorker,\n minConnections: payload.database.minConnections ?? 1,\n idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 30_000,\n connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7_000,\n }, payload.workerId);\n } else {\n db = createDatabase({\n type: \"mysql\",\n connectionString: payload.database.connectionString,\n maxConnections: payload.maxConnectionsPerWorker,\n minConnections: payload.database.minConnections ?? 1,\n idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 30_000,\n connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7_000,\n queueLimit: payload.database.queueLimit ?? 0,\n }, payload.workerId);\n }\n\n worker = new SubscriptionWorker(payload.workerId, cacheLayer, db);\n}\n\nasync function dispatch(req: WorkerRequest): Promise<unknown> {\n if (req.type === MsgType.Init) {\n await init(req.payload as WorkerInitPayload);\n return null;\n }\n\n if (!worker || !db) {\n throw new Error(\"Worker received message before Init\");\n }\n\n // The payload just crossed the worker_threads boundary — untrusted, so the\n // shared dispatcher Zod-parses it. In-process callers pass `trusted: true`.\n return dispatchWorkerMessage(worker, db, req.type, req.payload);\n}\n\nport.on(\"message\", async (req: WorkerRequest) => {\n try {\n const result = await dispatch(req);\n const res: WorkerResponse = { reqId: req.reqId, ok: true, result };\n port.postMessage(res);\n } catch (err) {\n const e = err as Error;\n const res: WorkerResponse = {\n reqId: req.reqId,\n ok: false,\n error: { message: e?.message ?? String(err), stack: e?.stack },\n };\n port.postMessage(res);\n }\n});\n"],"mappings":";;;AAYA,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,2EAA2E;AAG7F,MAAM,OAAO;AAEb,IAAI,SAAoC;AACxC,IAAI,KAAsB;AAE1B,eAAe,KAAK,SAA2C;CAC7D,MAAM,EAAE,eAAe,eAAe;EACpC,SAAS;GACP,KAAK,WAAW,QAAQ,IAAI;GAC5B,OAAO,QAAQ,IAAI,uBAAuB;GAC1C,UAAU,QAAQ,IAAI,qBAAqB;EAC7C;EACA,iBAAiB,QAAQ;EACzB,mBAAmB;EACnB,iBAAiB;CACnB,CAAC;CAED,IAAI,QAAQ,SAAS,SAAS,YAC5B,KAAK,eAAe;EAClB,MAAM;EACN,kBAAkB,QAAQ,SAAS;EACnC,gBAAgB,QAAQ;EACxB,gBAAgB,QAAQ,SAAS,kBAAkB;EACnD,mBAAmB,QAAQ,SAAS,qBAAqB;EACzD,yBAAyB,QAAQ,SAAS,2BAA2B;CACvE,GAAG,QAAQ,QAAQ;MAEnB,KAAK,eAAe;EAClB,MAAM;EACN,kBAAkB,QAAQ,SAAS;EACnC,gBAAgB,QAAQ;EACxB,gBAAgB,QAAQ,SAAS,kBAAkB;EACnD,mBAAmB,QAAQ,SAAS,qBAAqB;EACzD,yBAAyB,QAAQ,SAAS,2BAA2B;EACrE,YAAY,QAAQ,SAAS,cAAc;CAC7C,GAAG,QAAQ,QAAQ;CAGrB,SAAS,IAAI,mBAAmB,QAAQ,UAAU,YAAY,EAAE;AAClE;AAEA,eAAe,SAAS,KAAsC;CAC5D,IAAI,IAAI,SAAA,GAAuB;EAC7B,MAAM,KAAK,IAAI,OAA4B;EAC3C,OAAO;CACT;CAEA,IAAI,CAAC,UAAU,CAAC,IACd,MAAM,IAAI,MAAM,qCAAqC;CAKvD,OAAO,sBAAsB,QAAQ,IAAI,IAAI,MAAM,IAAI,OAAO;AAChE;AAEA,KAAK,GAAG,WAAW,OAAO,QAAuB;CAC/C,IAAI;EACF,MAAM,SAAS,MAAM,SAAS,GAAG;EACjC,MAAM,MAAsB;GAAE,OAAO,IAAI;GAAO,IAAI;GAAM;EAAO;EACjE,KAAK,YAAY,GAAG;CACtB,SAAS,KAAK;EACZ,MAAM,IAAI;EACV,MAAM,MAAsB;GAC1B,OAAO,IAAI;GACX,IAAI;GACJ,OAAO;IAAE,SAAS,GAAG,WAAW,OAAO,GAAG;IAAG,OAAO,GAAG;GAAM;EAC/D;EACA,KAAK,YAAY,GAAG;CACtB;AACF,CAAC"}
@@ -1,5 +1,4 @@
1
- import { a as mapWriteSetToRaw } from "../../overlap-checker-BqR9qCfy.js";
2
- import { a as createDatabase, b as UpdateSubscriptionReadSetParamsSchema, f as RegisterSubscriptionBatchParamsSchema, g as UnregisterSubscriptionParamsSchema, m as RegisterSubscriptionParamsSchema, o as initCacheLayer, t as SubscriptionWorker, u as InvalidateWritesetParamsSchema, v as UnregisterSubscriptionsParamsSchema } from "../../subscription-worker-DC9v3_Xn.js";
1
+ import { n as SubscriptionWorker, o as createDatabase, s as initCacheLayer, t as dispatchWorkerMessage } from "../../subscription-worker-dispatch-CSQV-PO3.js";
3
2
  import { parentPort } from "node:worker_threads";
4
3
  //#region src/server/subscription-manager-worker-entry.ts
5
4
  if (!parentPort) throw new Error("subscription-manager-worker-entry must run inside a worker_threads Worker");
@@ -41,53 +40,8 @@ async function dispatch(req) {
41
40
  await init(req.payload);
42
41
  return null;
43
42
  }
44
- if (!worker) throw new Error("Worker received message before Init");
45
- switch (req.type) {
46
- case 2: {
47
- const params = RegisterSubscriptionParamsSchema.parse(req.payload);
48
- return worker.register(params);
49
- }
50
- case 3: {
51
- const params = RegisterSubscriptionBatchParamsSchema.parse(req.payload);
52
- return Promise.all(params.map((p) => worker.register(p)));
53
- }
54
- case 4: {
55
- const params = UpdateSubscriptionReadSetParamsSchema.parse(req.payload);
56
- return worker.updateReadSet(params);
57
- }
58
- case 5: {
59
- const params = UnregisterSubscriptionParamsSchema.parse(req.payload);
60
- return worker.unregister(params);
61
- }
62
- case 6: {
63
- const params = UnregisterSubscriptionsParamsSchema.parse(req.payload);
64
- return worker.unregisters(params);
65
- }
66
- case 7: {
67
- const { writeSet } = InvalidateWritesetParamsSchema.parse(req.payload);
68
- const rawWriteSet = mapWriteSetToRaw(writeSet);
69
- return worker.invalidate(rawWriteSet);
70
- }
71
- case 8: return worker.minSubscriptionTs();
72
- case 9: return db.getLatestSnapshotTimestamp();
73
- case 10: {
74
- const ts = req.payload;
75
- return worker.prune(ts);
76
- }
77
- case 12: return worker.refreshRetentionWatermark();
78
- case 13:
79
- worker.setRetentionWatermark(req.payload);
80
- return null;
81
- case 11:
82
- try {
83
- await db?.close();
84
- } catch (_) {}
85
- try {
86
- await void 0;
87
- } catch (_) {}
88
- return null;
89
- default: throw new Error(`Unknown MsgType: ${req.type}`);
90
- }
43
+ if (!worker || !db) throw new Error("Worker received message before Init");
44
+ return dispatchWorkerMessage(worker, db, req.type, req.payload);
91
45
  }
92
46
  port.on("message", async (req) => {
93
47
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"subscription-manager-worker-entry.js","names":[],"sources":["../../../src/server/subscription-manager-worker-entry.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport Redis from \"ioredis\";\nimport type { Database } from \"../db/db\";\nimport { mapWriteSetToRaw } from \"./overlap-checker\";\nimport {\n InvalidateWritesetParamsSchema,\n RegisterSubscriptionBatchParamsSchema,\n RegisterSubscriptionParamsSchema,\n UnregisterSubscriptionParamsSchema,\n UnregisterSubscriptionsParamsSchema,\n UpdateSubscriptionReadSetParamsSchema,\n} from \"./subscription-manager-types\";\nimport { SubscriptionWorker } from \"./subscription-worker\";\nimport {\n MsgType,\n type WorkerInitPayload,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./subscription-manager-worker-protocol\";\nimport { createDatabase, initCacheLayer } from \"../db/init_db\";\n\nif (!parentPort) {\n throw new Error(\"subscription-manager-worker-entry must run inside a worker_threads Worker\");\n}\n\nconst port = parentPort;\n\nlet worker: SubscriptionWorker | null = null;\nlet db: Database | null = null;\nlet redis: Redis | null = null;\n\nasync function init(payload: WorkerInitPayload): Promise<void> {\n const { cacheLayer } = initCacheLayer({\n upstash: {\n url: `https://${process.env.UPSTASH_REDIS_HOST}`,\n token: process.env.UPSTASH_REDIS_TOKEN ?? \"\",\n redisUrl: process.env.UPSTASH_REDIS_URL ?? \"\"\n },\n cacheTtlSeconds: payload.cacheTTLSeconds,\n commandMaxRetries: 5,\n createSubClient: false,\n });\n\n if (payload.database.type === \"postgres\") {\n db = createDatabase({\n type: \"postgres\",\n connectionString: payload.database.connectionString,\n maxConnections: payload.maxConnectionsPerWorker,\n minConnections: payload.database.minConnections ?? 1,\n idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 30_000,\n connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7_000,\n }, payload.workerId);\n } else {\n db = createDatabase({\n type: \"mysql\",\n connectionString: payload.database.connectionString,\n maxConnections: payload.maxConnectionsPerWorker,\n minConnections: payload.database.minConnections ?? 1,\n idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 30_000,\n connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7_000,\n queueLimit: payload.database.queueLimit ?? 0,\n }, payload.workerId);\n }\n\n worker = new SubscriptionWorker(payload.workerId, cacheLayer, db);\n}\n\nasync function dispatch(req: WorkerRequest): Promise<unknown> {\n if (req.type === MsgType.Init) {\n await init(req.payload as WorkerInitPayload);\n return null;\n }\n\n if (!worker) {\n throw new Error(\"Worker received message before Init\");\n }\n\n switch (req.type) {\n case MsgType.Register: {\n const params = RegisterSubscriptionParamsSchema.parse(req.payload);\n return worker.register(params);\n }\n case MsgType.RegisterBatch: {\n const params = RegisterSubscriptionBatchParamsSchema.parse(req.payload);\n return Promise.all(params.map((p) => worker!.register(p)));\n }\n case MsgType.UpdateReadSet: {\n const params = UpdateSubscriptionReadSetParamsSchema.parse(req.payload);\n return worker.updateReadSet(params);\n }\n case MsgType.Unregister: {\n const params = UnregisterSubscriptionParamsSchema.parse(req.payload);\n return worker.unregister(params);\n }\n case MsgType.Unregisters: {\n const params = UnregisterSubscriptionsParamsSchema.parse(req.payload);\n return worker.unregisters(params);\n }\n case MsgType.Invalidate: {\n const { writeSet } = InvalidateWritesetParamsSchema.parse(req.payload);\n const rawWriteSet = mapWriteSetToRaw(writeSet);\n return worker.invalidate(rawWriteSet);\n }\n case MsgType.MinSubscriptionTs: {\n const m = worker.minSubscriptionTs();\n // bigint isn't structured-cloneable via JSON; postMessage handles\n // bigints natively, so we return it as-is.\n return m;\n }\n case MsgType.LatestSnapshotTs: {\n return db!.getLatestSnapshotTimestamp();\n }\n case MsgType.Prune: {\n const ts = req.payload as bigint;\n // Route through the worker so it deletes AND republishes the new watermark.\n return worker.prune(ts);\n }\n case MsgType.RefreshRetentionWatermark: {\n // Seed/repair the watermark from the DB and return it so the manager can\n // fan it out to the other workers.\n return worker.refreshRetentionWatermark();\n }\n case MsgType.SetRetentionWatermark: {\n worker.setRetentionWatermark(req.payload as bigint);\n return null;\n }\n case MsgType.Shutdown: {\n try { await db?.close(); } catch (_) { /* ignore */ }\n try { await (redis as any)?.quit?.(); } catch (_) { /* ignore */ }\n return null;\n }\n default: {\n throw new Error(`Unknown MsgType: ${req.type satisfies never}`);\n }\n }\n}\n\nport.on(\"message\", async (req: WorkerRequest) => {\n try {\n const result = await dispatch(req);\n const res: WorkerResponse = { reqId: req.reqId, ok: true, result };\n port.postMessage(res);\n } catch (err) {\n const e = err as Error;\n const res: WorkerResponse = {\n reqId: req.reqId,\n ok: false,\n error: { message: e?.message ?? String(err), stack: e?.stack },\n };\n port.postMessage(res);\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"subscription-manager-worker-entry.js","names":[],"sources":["../../../src/server/subscription-manager-worker-entry.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport type { Database } from \"../db/db\";\nimport { SubscriptionWorker } from \"./subscription-worker\";\nimport {\n MsgType,\n type WorkerInitPayload,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./subscription-manager-worker-protocol\";\nimport { dispatchWorkerMessage } from \"./subscription-worker-dispatch\";\nimport { createDatabase, initCacheLayer } from \"../db/init_db\";\n\nif (!parentPort) {\n throw new Error(\"subscription-manager-worker-entry must run inside a worker_threads Worker\");\n}\n\nconst port = parentPort;\n\nlet worker: SubscriptionWorker | null = null;\nlet db: Database | null = null;\n\nasync function init(payload: WorkerInitPayload): Promise<void> {\n const { cacheLayer } = initCacheLayer({\n upstash: {\n url: `https://${process.env.UPSTASH_REDIS_HOST}`,\n token: process.env.UPSTASH_REDIS_TOKEN ?? \"\",\n redisUrl: process.env.UPSTASH_REDIS_URL ?? \"\"\n },\n cacheTtlSeconds: payload.cacheTTLSeconds,\n commandMaxRetries: 5,\n createSubClient: false,\n });\n\n if (payload.database.type === \"postgres\") {\n db = createDatabase({\n type: \"postgres\",\n connectionString: payload.database.connectionString,\n maxConnections: payload.maxConnectionsPerWorker,\n minConnections: payload.database.minConnections ?? 1,\n idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 30_000,\n connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7_000,\n }, payload.workerId);\n } else {\n db = createDatabase({\n type: \"mysql\",\n connectionString: payload.database.connectionString,\n maxConnections: payload.maxConnectionsPerWorker,\n minConnections: payload.database.minConnections ?? 1,\n idleTimeoutMillis: payload.database.idleTimeoutMillis ?? 30_000,\n connectionTimeoutMillis: payload.database.connectionTimeoutMillis ?? 7_000,\n queueLimit: payload.database.queueLimit ?? 0,\n }, payload.workerId);\n }\n\n worker = new SubscriptionWorker(payload.workerId, cacheLayer, db);\n}\n\nasync function dispatch(req: WorkerRequest): Promise<unknown> {\n if (req.type === MsgType.Init) {\n await init(req.payload as WorkerInitPayload);\n return null;\n }\n\n if (!worker || !db) {\n throw new Error(\"Worker received message before Init\");\n }\n\n // The payload just crossed the worker_threads boundary untrusted, so the\n // shared dispatcher Zod-parses it. In-process callers pass `trusted: true`.\n return dispatchWorkerMessage(worker, db, req.type, req.payload);\n}\n\nport.on(\"message\", async (req: WorkerRequest) => {\n try {\n const result = await dispatch(req);\n const res: WorkerResponse = { reqId: req.reqId, ok: true, result };\n port.postMessage(res);\n } catch (err) {\n const e = err as Error;\n const res: WorkerResponse = {\n reqId: req.reqId,\n ok: false,\n error: { message: e?.message ?? String(err), stack: e?.stack },\n };\n port.postMessage(res);\n }\n});\n"],"mappings":";;;AAYA,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,2EAA2E;AAG7F,MAAM,OAAO;AAEb,IAAI,SAAoC;AACxC,IAAI,KAAsB;AAE1B,eAAe,KAAK,SAA2C;CAC7D,MAAM,EAAE,eAAe,eAAe;EACpC,SAAS;GACP,KAAK,WAAW,QAAQ,IAAI;GAC5B,OAAO,QAAQ,IAAI,uBAAuB;GAC1C,UAAU,QAAQ,IAAI,qBAAqB;EAC7C;EACA,iBAAiB,QAAQ;EACzB,mBAAmB;EACnB,iBAAiB;CACnB,CAAC;CAED,IAAI,QAAQ,SAAS,SAAS,YAC5B,KAAK,eAAe;EAClB,MAAM;EACN,kBAAkB,QAAQ,SAAS;EACnC,gBAAgB,QAAQ;EACxB,gBAAgB,QAAQ,SAAS,kBAAkB;EACnD,mBAAmB,QAAQ,SAAS,qBAAqB;EACzD,yBAAyB,QAAQ,SAAS,2BAA2B;CACvE,GAAG,QAAQ,QAAQ;MAEnB,KAAK,eAAe;EAClB,MAAM;EACN,kBAAkB,QAAQ,SAAS;EACnC,gBAAgB,QAAQ;EACxB,gBAAgB,QAAQ,SAAS,kBAAkB;EACnD,mBAAmB,QAAQ,SAAS,qBAAqB;EACzD,yBAAyB,QAAQ,SAAS,2BAA2B;EACrE,YAAY,QAAQ,SAAS,cAAc;CAC7C,GAAG,QAAQ,QAAQ;CAGrB,SAAS,IAAI,mBAAmB,QAAQ,UAAU,YAAY,EAAE;AAClE;AAEA,eAAe,SAAS,KAAsC;CAC5D,IAAI,IAAI,SAAA,GAAuB;EAC7B,MAAM,KAAK,IAAI,OAA4B;EAC3C,OAAO;CACT;CAEA,IAAI,CAAC,UAAU,CAAC,IACd,MAAM,IAAI,MAAM,qCAAqC;CAKvD,OAAO,sBAAsB,QAAQ,IAAI,IAAI,MAAM,IAAI,OAAO;AAChE;AAEA,KAAK,GAAG,WAAW,OAAO,QAAuB;CAC/C,IAAI;EACF,MAAM,SAAS,MAAM,SAAS,GAAG;EACjC,MAAM,MAAsB;GAAE,OAAO,IAAI;GAAO,IAAI;GAAM;EAAO;EACjE,KAAK,YAAY,GAAG;CACtB,SAAS,KAAK;EACZ,MAAM,IAAI;EACV,MAAM,MAAsB;GAC1B,OAAO,IAAI;GACX,IAAI;GACJ,OAAO;IAAE,SAAS,GAAG,WAAW,OAAO,GAAG;IAAG,OAAO,GAAG;GAAM;EAC/D;EACA,KAAK,YAAY,GAAG;CACtB;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { $r as WriteEntry, A as ResponseMessageSchema, Ar as OccConflictError, B as SubscriptionUpdateMessageSchema, Br as QueryCacheMetadataSchema, C as ClientMessageSchema, Cr as DEFAULT_RETRY, D as ErrorMessage, Dr as MutationResult, E as Context, Er as LiveResult, F as SubscribeMessage, Fr as Predicate, Gr as RawPointReadSchema, H as UnsubscribeMessageSchema, Hr as RangeRead, I as SubscribeMessageSchema, Ir as PredicateSchema, Jr as RawReadEntry, Kr as RawRangeRead, L as SubscriptionGoneMessage, Lr as QueryCacheEntry, M as ServerMessageSchema, Mr as OrPredicateSchema, N as ServerPingMessage, Nr as PointRead, O as IsInternal, Or as NO_RETRY, P as ServerPingMessageSchema, Pr as PointReadSchema, Qr as RetryConfig, R as SubscriptionGoneMessageSchema, Rr as QueryCacheEntrySchema, S as ClientMessage, Sr as CompareOperatorSchema, T as ConnectedMessageSchema, Tr as LeafPredicateSchema, Ur as RangeReadSchema, V as UnsubscribeMessage, Vr as QuerySpec, Wr as RawPointRead, Xr as ReadEntry, Yr as RawReadEntrySchema, Zr as ReadEntrySchema, _ as AuthSuccessMessage, _r as CachedPgMetadata, ai as normalizeToBytes, b as CallMessage, br as CommitTs, ei as WriteEntrySchema, g as AuthMessageSchema, gr as BigIntSchema, h as AuthMessage, hr as AndPredicateSchema, ii as normalizeIdToBytes, j as ServerMessage, jr as OrPredicate, k as ResponseMessage, kr as OccAbortError, m as AuthFailedMessageSchema, mr as AndPredicate, ni as WriteOpSchema, p as AuthFailedMessage, qr as RawRangeReadSchema, ri as bytesFromJson, ti as WriteOp, v as AuthSuccessMessageSchema, vr as CachedPgMetadataSchema, w as ConnectedMessage, wr as LeafPredicate, x as CallMessageSchema, xr as CompareOperator, y as AuthenticationError, yr as CommitLogEntry, z as SubscriptionUpdateMessage, zr as QueryCacheMetadata } from "../../index-Dy9UlONo.js";
1
+ import { $r as WriteEntry, A as ResponseMessageSchema, Ar as OccConflictError, B as SubscriptionUpdateMessageSchema, Br as QueryCacheMetadataSchema, C as ClientMessageSchema, Cr as DEFAULT_RETRY, D as ErrorMessage, Dr as MutationResult, E as Context, Er as LiveResult, F as SubscribeMessage, Fr as Predicate, Gr as RawPointReadSchema, H as UnsubscribeMessageSchema, Hr as RangeRead, I as SubscribeMessageSchema, Ir as PredicateSchema, Jr as RawReadEntry, Kr as RawRangeRead, L as SubscriptionGoneMessage, Lr as QueryCacheEntry, M as ServerMessageSchema, Mr as OrPredicateSchema, N as ServerPingMessage, Nr as PointRead, O as IsInternal, Or as NO_RETRY, P as ServerPingMessageSchema, Pr as PointReadSchema, Qr as RetryConfig, R as SubscriptionGoneMessageSchema, Rr as QueryCacheEntrySchema, S as ClientMessage, Sr as CompareOperatorSchema, T as ConnectedMessageSchema, Tr as LeafPredicateSchema, Ur as RangeReadSchema, V as UnsubscribeMessage, Vr as QuerySpec, Wr as RawPointRead, Xr as ReadEntry, Yr as RawReadEntrySchema, Zr as ReadEntrySchema, _ as AuthSuccessMessage, _r as CachedPgMetadata, ai as normalizeToBytes, b as CallMessage, br as CommitTs, ei as WriteEntrySchema, g as AuthMessageSchema, gr as BigIntSchema, h as AuthMessage, hr as AndPredicateSchema, ii as normalizeIdToBytes, j as ServerMessage, jr as OrPredicate, k as ResponseMessage, kr as OccAbortError, m as AuthFailedMessageSchema, mr as AndPredicate, ni as WriteOpSchema, p as AuthFailedMessage, qr as RawRangeReadSchema, ri as bytesFromJson, ti as WriteOp, v as AuthSuccessMessageSchema, vr as CachedPgMetadataSchema, w as ConnectedMessage, wr as LeafPredicate, x as CallMessageSchema, xr as CompareOperator, y as AuthenticationError, yr as CommitLogEntry, z as SubscriptionUpdateMessage, zr as QueryCacheMetadata } from "../../index-C_Zew1wH.js";
2
2
  import { n as stableStringify, r as supaliveStringify, t as groupByToMap } from "../../helper-CiacMqje.js";
3
- import { _ as RpcCorsConfig, a as RemoteSubscriptionMessage, b as SupaliveServerConfig, c as RemoteSubscriptionUpdateSchema, d as SubscriptionEntry, f as AppPubSubConfig, g as RpcConfig, h as PostgresConfig, i as RemoteRecomputeRaceSchema, l as Session, m as MySQLConfig, n as PendingMutation, o as RemoteSubscriptionMessageSchema, p as DatabaseConfig, r as RemoteRecomputeRace, s as RemoteSubscriptionUpdate, t as InstanceId, u as SubId, v as RpcRateLimitConfig, x as UpstashConfig, y as SubscriptionManagerConfig } from "../../types_server-Clf74qZP.js";
3
+ import { _ as RpcCorsConfig, a as RemoteSubscriptionMessage, b as SupaliveServerConfig, c as RemoteSubscriptionUpdateSchema, d as SubscriptionEntry, f as AppPubSubConfig, g as RpcConfig, h as PostgresConfig, i as RemoteRecomputeRaceSchema, l as Session, m as MySQLConfig, n as PendingMutation, o as RemoteSubscriptionMessageSchema, p as DatabaseConfig, r as RemoteRecomputeRace, s as RemoteSubscriptionUpdate, t as InstanceId, u as SubId, v as RpcRateLimitConfig, x as UpstashConfig, y as SubscriptionManagerConfig } from "../../types_server-SPElhjga.js";
4
4
  export { AndPredicate, AndPredicateSchema, AppPubSubConfig, AuthFailedMessage, AuthFailedMessageSchema, AuthMessage, AuthMessageSchema, AuthSuccessMessage, AuthSuccessMessageSchema, AuthenticationError, BigIntSchema, CachedPgMetadata, CachedPgMetadataSchema, CallMessage, CallMessageSchema, ClientMessage, ClientMessageSchema, CommitLogEntry, CommitTs, CompareOperator, CompareOperatorSchema, ConnectedMessage, ConnectedMessageSchema, Context, DEFAULT_RETRY, DatabaseConfig, ErrorMessage, InstanceId, IsInternal, LeafPredicate, LeafPredicateSchema, LiveResult, MutationResult, MySQLConfig, NO_RETRY, OccAbortError, OccConflictError, OrPredicate, OrPredicateSchema, PendingMutation, PointRead, PointReadSchema, PostgresConfig, Predicate, PredicateSchema, QueryCacheEntry, QueryCacheEntrySchema, QueryCacheMetadata, QueryCacheMetadataSchema, QuerySpec, RangeRead, RangeReadSchema, RawPointRead, RawPointReadSchema, RawRangeRead, RawRangeReadSchema, RawReadEntry, RawReadEntrySchema, ReadEntry, ReadEntrySchema, RemoteRecomputeRace, RemoteRecomputeRaceSchema, RemoteSubscriptionMessage, RemoteSubscriptionMessageSchema, RemoteSubscriptionUpdate, RemoteSubscriptionUpdateSchema, ResponseMessage, ResponseMessageSchema, RetryConfig, RpcConfig, RpcCorsConfig, RpcRateLimitConfig, ServerMessage, ServerMessageSchema, ServerPingMessage, ServerPingMessageSchema, Session, SubId, SubscribeMessage, SubscribeMessageSchema, SubscriptionEntry, SubscriptionGoneMessage, SubscriptionGoneMessageSchema, SubscriptionManagerConfig, SubscriptionUpdateMessage, SubscriptionUpdateMessageSchema, SupaliveServerConfig, UnsubscribeMessage, UnsubscribeMessageSchema, UpstashConfig, WriteEntry, WriteEntrySchema, WriteOp, WriteOpSchema, bytesFromJson, groupByToMap, normalizeIdToBytes, normalizeToBytes, stableStringify, supaliveStringify };