@supalive/core 1.14.0 → 1.16.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 (97) hide show
  1. package/dist/index-B4UxN1ZL.d.ts +2365 -0
  2. package/dist/index-B4UxN1ZL.d.ts.map +1 -0
  3. package/dist/index-B8JFAyw4.d.ts +2377 -0
  4. package/dist/index-B8JFAyw4.d.ts.map +1 -0
  5. package/dist/index-CfcrWLLm.d.ts +2377 -0
  6. package/dist/index-CfcrWLLm.d.ts.map +1 -0
  7. package/dist/index-Ddr4NiPf.d.ts +2295 -0
  8. package/dist/index-Ddr4NiPf.d.ts.map +1 -0
  9. package/dist/index-ggi1DrSG.d.ts +2336 -0
  10. package/dist/index-ggi1DrSG.d.ts.map +1 -0
  11. package/dist/mysql-07ROfbBZ.d.ts +114 -0
  12. package/dist/mysql-07ROfbBZ.d.ts.map +1 -0
  13. package/dist/mysql-BTigT6mP.d.ts +114 -0
  14. package/dist/mysql-BTigT6mP.d.ts.map +1 -0
  15. package/dist/mysql-CXymz1Eu.d.ts +114 -0
  16. package/dist/mysql-CXymz1Eu.d.ts.map +1 -0
  17. package/dist/mysql-ClUK7S2j.js +623 -0
  18. package/dist/mysql-ClUK7S2j.js.map +1 -0
  19. package/dist/mysql-CtpWqOhO.d.ts +114 -0
  20. package/dist/mysql-CtpWqOhO.d.ts.map +1 -0
  21. package/dist/mysql-DWj2q3qR.d.ts +114 -0
  22. package/dist/mysql-DWj2q3qR.d.ts.map +1 -0
  23. package/dist/mysql-fTKZ1zaF.js +623 -0
  24. package/dist/mysql-fTKZ1zaF.js.map +1 -0
  25. package/dist/overlap-checker-1TwhkAwy.js +259 -0
  26. package/dist/overlap-checker-1TwhkAwy.js.map +1 -0
  27. package/dist/overlap-checker-CGlxWcyb.js +259 -0
  28. package/dist/overlap-checker-CGlxWcyb.js.map +1 -0
  29. package/dist/postgres-B5-5vgLJ.d.ts +118 -0
  30. package/dist/postgres-B5-5vgLJ.d.ts.map +1 -0
  31. package/dist/postgres-CN03Espg.js +868 -0
  32. package/dist/postgres-CN03Espg.js.map +1 -0
  33. package/dist/postgres-CRPJdZx2.js +868 -0
  34. package/dist/postgres-CRPJdZx2.js.map +1 -0
  35. package/dist/postgres-D0M1ri-C.d.ts +118 -0
  36. package/dist/postgres-D0M1ri-C.d.ts.map +1 -0
  37. package/dist/postgres-DCXnKaJr.d.ts +118 -0
  38. package/dist/postgres-DCXnKaJr.d.ts.map +1 -0
  39. package/dist/postgres-DgCYPf0j.d.ts +118 -0
  40. package/dist/postgres-DgCYPf0j.d.ts.map +1 -0
  41. package/dist/postgres-Dnshux6k.d.ts +118 -0
  42. package/dist/postgres-Dnshux6k.d.ts.map +1 -0
  43. package/dist/query-LJranz0c.js +795 -0
  44. package/dist/query-LJranz0c.js.map +1 -0
  45. package/dist/query-q1ZvKrZO.js +762 -0
  46. package/dist/query-q1ZvKrZO.js.map +1 -0
  47. package/dist/realtime_db-B0Tin87E.js +312 -0
  48. package/dist/realtime_db-B0Tin87E.js.map +1 -0
  49. package/dist/realtime_db-DVhhasJj.js +312 -0
  50. package/dist/realtime_db-DVhhasJj.js.map +1 -0
  51. package/dist/router-DP2ThAwh.js +274 -0
  52. package/dist/router-DP2ThAwh.js.map +1 -0
  53. package/dist/router-Dfnwka7K.js +337 -0
  54. package/dist/router-Dfnwka7K.js.map +1 -0
  55. package/dist/src/client/index.d.ts +2 -2
  56. package/dist/src/client/index.js +79 -17
  57. package/dist/src/client/index.js.map +1 -1
  58. package/dist/src/exports/mysql.d.ts +1 -1
  59. package/dist/src/exports/mysql.js +1 -1
  60. package/dist/src/exports/postgres.d.ts +1 -1
  61. package/dist/src/exports/postgres.js +1 -1
  62. package/dist/src/exports/procedure.d.ts +12 -9
  63. package/dist/src/exports/procedure.d.ts.map +1 -1
  64. package/dist/src/exports/procedure.js +65 -6
  65. package/dist/src/exports/procedure.js.map +1 -1
  66. package/dist/src/exports/schema-sql.d.ts +1 -1
  67. package/dist/src/exports/server.d.ts +12 -6
  68. package/dist/src/exports/server.d.ts.map +1 -1
  69. package/dist/src/exports/server.js +793 -253
  70. package/dist/src/exports/server.js.map +1 -1
  71. package/dist/src/exports/sub-manager-worker-entry.js +1 -1
  72. package/dist/src/exports/types.d.ts +2 -2
  73. package/dist/src/exports/types.js +1 -1
  74. package/dist/sub-worker-dispatch-D7jfw6ys.js +826 -0
  75. package/dist/sub-worker-dispatch-D7jfw6ys.js.map +1 -0
  76. package/dist/sub-worker-dispatch-qiSs5Xkm.js +826 -0
  77. package/dist/sub-worker-dispatch-qiSs5Xkm.js.map +1 -0
  78. package/dist/types_client_rpc-CWZmlWmM.js +145 -0
  79. package/dist/types_client_rpc-CWZmlWmM.js.map +1 -0
  80. package/dist/types_client_rpc-D4td5W0Y.js +141 -0
  81. package/dist/types_client_rpc-D4td5W0Y.js.map +1 -0
  82. package/dist/types_server-BSiGxbqb.d.ts +523 -0
  83. package/dist/types_server-BSiGxbqb.d.ts.map +1 -0
  84. package/dist/types_server-BhC19R2a.js.map +1 -1
  85. package/dist/types_server-BmIgDd8d.d.ts +614 -0
  86. package/dist/types_server-BmIgDd8d.d.ts.map +1 -0
  87. package/dist/types_server-C6B9_b1R.d.ts +662 -0
  88. package/dist/types_server-C6B9_b1R.d.ts.map +1 -0
  89. package/dist/types_server-DRr5yKy1.d.ts +655 -0
  90. package/dist/types_server-DRr5yKy1.d.ts.map +1 -0
  91. package/dist/types_server-DmCbve3w.d.ts +684 -0
  92. package/dist/types_server-DmCbve3w.d.ts.map +1 -0
  93. package/dist/types_server-Gs_vSVaS.d.ts +655 -0
  94. package/dist/types_server-Gs_vSVaS.d.ts.map +1 -0
  95. package/dist/types_server-ILUmPFvk.d.ts +614 -0
  96. package/dist/types_server-ILUmPFvk.d.ts.map +1 -0
  97. package/package.json +2 -1
@@ -1,10 +1,10 @@
1
- import { c as parentConn, i as createActionBuilder, n as getContextRegistry, o as createMutationBuilder, r as router, s as createQueryBuilder, u as primaryOnlyConn } from "../../router-Kgrlci8X.js";
1
+ import { c as parentConn, i as createActionBuilder, l as primaryOnlyConn, n as getContextRegistry, o as createMutationBuilder, r as router, s as createQueryBuilder } from "../../router-DP2ThAwh.js";
2
2
  import { r as supaliveStringify } from "../../helper-zdJT5FUc.js";
3
- import { o as matchesPredicate } from "../../query-Xw2hi6TB.js";
3
+ import { o as matchesPredicate } from "../../query-LJranz0c.js";
4
4
  import { n as defineSchema, t as defineComputedField } from "../../schema-DRtz5h5l.js";
5
5
  import { C as normalizeIdToBytes, S as bytesFromJson, _ as RawRangeReadSchema, a as DEFAULT_RETRY, b as WriteEntrySchema, c as OccAbortError, d as PointReadSchema, f as PredicateSchema, g as RawPointReadSchema, h as RangeReadSchema, i as CompareOperatorSchema, l as OccConflictError, m as QueryCacheMetadataSchema, n as BigIntSchema, o as LeafPredicateSchema, p as QueryCacheEntrySchema, r as CachedPgMetadataSchema, s as NO_RETRY, t as AndPredicateSchema, u as OrPredicateSchema, v as RawReadEntrySchema, w as normalizeToBytes, x as WriteOpSchema, y as ReadEntrySchema } from "../../types_db-OUou3o2Z.js";
6
- import { l as ServerMessageSchema } from "../../types_client_rpc-ByGwoRCL.js";
7
- import { a as TxContext, i as DbWriter, n as sleep, r as DbReader, t as SupaliveDb } from "../../realtime_db-CVze3gM0.js";
6
+ import { l as ServerMessageSchema } from "../../types_client_rpc-CWZmlWmM.js";
7
+ import { a as TxContext, i as DbWriter, n as sleep, r as DbReader, t as SupaliveDb } from "../../realtime_db-B0Tin87E.js";
8
8
  import { n as resolveReadRouting, t as makeConnRouting } from "../../read-routing-BUcQAwnd.js";
9
9
  import { sha1 } from "hash-wasm";
10
10
  //#region src/db/query_definition.ts
@@ -78,6 +78,23 @@ var RPCError = class extends Error {
78
78
  this.code = code;
79
79
  }
80
80
  };
81
+ const LEVEL_ORDER = {
82
+ debug: 10,
83
+ info: 20,
84
+ warn: 30,
85
+ error: 40
86
+ };
87
+ /** Console-backed logger that drops anything below `level`. `"silent"` mutes all. */
88
+ function createConsoleLogger(level = "warn") {
89
+ const enabled = (l) => level !== "silent" && LEVEL_ORDER[l] >= LEVEL_ORDER[level];
90
+ const noop = () => {};
91
+ return {
92
+ debug: enabled("debug") ? (m, ...a) => console.debug(`[WSClient] ${m}`, ...a) : noop,
93
+ info: enabled("info") ? (m, ...a) => console.info(`[WSClient] ${m}`, ...a) : noop,
94
+ warn: enabled("warn") ? (m, ...a) => console.warn(`[WSClient] ${m}`, ...a) : noop,
95
+ error: enabled("error") ? (m, ...a) => console.error(`[WSClient] ${m}`, ...a) : noop
96
+ };
97
+ }
81
98
  var WsClientManager = class {
82
99
  ws = null;
83
100
  options;
@@ -123,7 +140,9 @@ var WsClientManager = class {
123
140
  throttling = false;
124
141
  visibilityListener = null;
125
142
  onlineListener = null;
143
+ log;
126
144
  constructor(options) {
145
+ this.log = options.logger ?? createConsoleLogger(options.logLevel ?? "warn");
127
146
  this.options = {
128
147
  reconnectionTimeout: 18e4,
129
148
  reconnect: {
@@ -166,6 +185,11 @@ var WsClientManager = class {
166
185
  if (this.connectionState == "connected" || this.connectionState == "connecting") return;
167
186
  this.connectionState = "connecting";
168
187
  this.emitState();
188
+ this.log.debug(`connecting to ${this.options.url}`);
189
+ this.emitEvent({
190
+ type: "connecting",
191
+ detail: this.options.url
192
+ });
169
193
  return new Promise(async (resolve, reject) => {
170
194
  this.pendingConnectResolve = () => {
171
195
  this.pendingConnectResolve = null;
@@ -337,7 +361,8 @@ var WsClientManager = class {
337
361
  id,
338
362
  procedure,
339
363
  input,
340
- minTs: this.highWaterTs > 0n ? this.highWaterTs.toString() : void 0
364
+ minTs: this.highWaterTs > 0n ? this.highWaterTs.toString() : void 0,
365
+ trace: this.traceparent()
341
366
  });
342
367
  });
343
368
  }
@@ -420,14 +445,15 @@ var WsClientManager = class {
420
445
  this.subscriptions.delete(pendingKey);
421
446
  this.rejectJoiners(parked, err);
422
447
  }
423
- console.error(`[WSClient] Failed to re-subscribe ${sub.procedure}:`, err);
448
+ this.log.warn(`Failed to re-subscribe ${sub.procedure}:`, err);
424
449
  }
425
450
  });
426
451
  this.send({
427
452
  type: "subscribe",
428
453
  id,
429
454
  procedure: sub.procedure,
430
- input: sub.input
455
+ input: sub.input,
456
+ trace: this.traceparent()
431
457
  });
432
458
  }
433
459
  }
@@ -529,7 +555,8 @@ var WsClientManager = class {
529
555
  type: "subscribe",
530
556
  id,
531
557
  procedure,
532
- input
558
+ input,
559
+ trace: this.traceparent()
533
560
  });
534
561
  timeout = setTimeout(() => {
535
562
  if (this.pendingRequests.has(id)) {
@@ -584,11 +611,11 @@ var WsClientManager = class {
584
611
  try {
585
612
  data = JSON.parse(dataValue);
586
613
  } catch {
587
- console.error("[WSClient] Failed to parse server message as JSON:", dataValue);
614
+ this.log.warn("Failed to parse server message as JSON:", dataValue);
588
615
  }
589
616
  const parsed = ServerMessageSchema.safeParse(data);
590
617
  if (!parsed.success) {
591
- console.error("[WSClient] Invalid server message:", parsed.error.issues, data);
618
+ this.log.warn("Invalid server message:", parsed.error.issues, data);
592
619
  return;
593
620
  }
594
621
  const message = parsed.data;
@@ -597,6 +624,8 @@ var WsClientManager = class {
597
624
  this.connectionState = "connected";
598
625
  this.reconnectAttempts = 0;
599
626
  this.lastSuccessfulConnectionTime = Date.now();
627
+ this.log.info("connected");
628
+ this.emitEvent({ type: "connected" });
600
629
  const token = await this.options.token?.();
601
630
  if (token) {
602
631
  this.authState = "pending";
@@ -640,7 +669,10 @@ var WsClientManager = class {
640
669
  this.handleSubscriptionGone(message);
641
670
  break;
642
671
  case "ping": break;
643
- default: console.warn("[WSClient] Unhandled server message type:", message);
672
+ default: {
673
+ const _exhaustive = message;
674
+ this.log.warn("Unhandled server message type:", _exhaustive);
675
+ }
644
676
  }
645
677
  }
646
678
  /**
@@ -683,7 +715,7 @@ var WsClientManager = class {
683
715
  try {
684
716
  sub.onGone?.(message.reason);
685
717
  } catch (e) {
686
- console.error("[WSClient] onGone listener threw:", e);
718
+ this.log.error("onGone listener threw:", e);
687
719
  }
688
720
  }
689
721
  handleClose() {
@@ -692,6 +724,8 @@ var WsClientManager = class {
692
724
  this.authState = "pending";
693
725
  this.ws = null;
694
726
  this.stopInactivityWatchdog();
727
+ this.log.info("disconnected");
728
+ this.emitEvent({ type: "disconnected" });
695
729
  this.options.onDisconnect?.();
696
730
  this.pendingConnectReject?.(new RPCError("Connection closed before ready", "DISCONNECTED"));
697
731
  for (const pending of this.pendingRequests.values()) pending.reject(new RPCError("Connection closed", "DISCONNECTED"));
@@ -700,6 +734,11 @@ var WsClientManager = class {
700
734
  if (!this.explicitlyClosed && this.options.reconnect?.enabled) this.scheduleReconnect();
701
735
  }
702
736
  handleError(err) {
737
+ this.log.warn("connection error:", err);
738
+ this.emitEvent({
739
+ type: "error",
740
+ detail: err.message
741
+ });
703
742
  this.options.onError?.(err);
704
743
  }
705
744
  startInactivityWatchdog() {
@@ -726,7 +765,7 @@ var WsClientManager = class {
726
765
  */
727
766
  closeAndReconnect(reason) {
728
767
  if (this.connectionState === "disconnected") return;
729
- console.warn(`[WSClient] closeAndReconnect: ${reason}`);
768
+ this.log.warn(`closeAndReconnect: ${reason}`);
730
769
  const oldWs = this.ws;
731
770
  if (oldWs) {
732
771
  oldWs.onmessage = null;
@@ -774,7 +813,7 @@ var WsClientManager = class {
774
813
  }
775
814
  scheduleReconnect() {
776
815
  if (this.reconnectAttempts >= (this.options.reconnect?.maxAttempts ?? 5)) {
777
- console.error("[WSClient] Max reconnection attempts reached");
816
+ this.log.error("Max reconnection attempts reached");
778
817
  const giveUp = new RPCError("Max reconnection attempts reached", "DISCONNECTED");
779
818
  for (const q of this.queuedCalls) q.reject(giveUp);
780
819
  this.queuedCalls = [];
@@ -784,9 +823,14 @@ var WsClientManager = class {
784
823
  const base = (this.options.reconnect?.delay ?? 1e3) * Math.pow(this.options.reconnect?.backoff ?? 1.5, this.reconnectAttempts);
785
824
  const delay = base + base * (Math.random() - .5);
786
825
  this.reconnectAttempts++;
826
+ this.log.info(`reconnecting (attempt ${this.reconnectAttempts}) in ${Math.round(delay)}ms`);
827
+ this.emitEvent({
828
+ type: "reconnecting",
829
+ attempt: this.reconnectAttempts
830
+ });
787
831
  this.reconnectTimer = setTimeout(() => {
788
832
  this.connect().catch((err) => {
789
- console.error("[WSClient] Reconnection failed:", err);
833
+ this.log.warn("Reconnection failed:", err);
790
834
  });
791
835
  }, delay);
792
836
  }
@@ -803,7 +847,17 @@ var WsClientManager = class {
803
847
  for (const l of this.stateListeners) try {
804
848
  l(next);
805
849
  } catch (e) {
806
- console.error("[WSClient] state listener threw:", e);
850
+ this.log.error("state listener threw:", e);
851
+ }
852
+ }
853
+ /** Fire the optional structured lifecycle event; never lets a throwing hook
854
+ * break the client. */
855
+ emitEvent(event) {
856
+ if (!this.options.onEvent) return;
857
+ try {
858
+ this.options.onEvent(event);
859
+ } catch (e) {
860
+ this.log.error("onEvent listener threw:", e);
807
861
  }
808
862
  }
809
863
  async ensureConnected() {
@@ -812,6 +866,10 @@ var WsClientManager = class {
812
866
  send(message) {
813
867
  if (this.ws && this.ws.readyState === WS_OPEN) this.ws.send(supaliveStringify(message));
814
868
  }
869
+ /** Current W3C traceparent from the optional hook, or undefined. */
870
+ traceparent() {
871
+ return this.options.getTraceparent?.() ?? void 0;
872
+ }
815
873
  cleanup() {
816
874
  this.connectionState = "disconnected";
817
875
  this.authState = "pending";
@@ -852,6 +910,10 @@ function createClient(options) {
852
910
  reconnect: options.reconnect,
853
911
  heartbeat: options.heartbeat,
854
912
  throttle: options.throttle,
913
+ logger: options.logger,
914
+ logLevel: options.logLevel,
915
+ onEvent: options.onEvent,
916
+ getTraceparent: options.getTraceparent,
855
917
  onConnect: options.onConnect,
856
918
  onDisconnect: options.onDisConnect
857
919
  });
@@ -1233,6 +1295,6 @@ function createCaller(options) {
1233
1295
  } });
1234
1296
  }
1235
1297
  //#endregion
1236
- export { AndPredicateSchema, BigIntSchema, CachedPgMetadataSchema, CompareOperatorSchema, DEFAULT_RETRY, DbReader, DbReader as ReadContext, DbWriter, DbWriter as WritableContext, LeafPredicateSchema, NO_RETRY, OccAbortError, OccConflictError, OrPredicateSchema, PointReadSchema, PredicateSchema, QueryCacheEntrySchema, QueryCacheMetadataSchema, RPCError, RangeReadSchema, RawPointReadSchema, RawRangeReadSchema, RawReadEntrySchema, ReadEntrySchema, SupaliveDb, TxContext, WriteEntrySchema, WriteOpSchema, WsClientManager, _resetGlobalDefs, bytesFromJson, createActionBuilder, createCaller, createClient, createMutationBuilder, createQueryBuilder, defineComputedField, defineQuery, defineSchema, matchesPredicate, normalizeIdToBytes, normalizeToBytes, router, sleep };
1298
+ export { AndPredicateSchema, BigIntSchema, CachedPgMetadataSchema, CompareOperatorSchema, DEFAULT_RETRY, DbReader, DbReader as ReadContext, DbWriter, DbWriter as WritableContext, LeafPredicateSchema, NO_RETRY, OccAbortError, OccConflictError, OrPredicateSchema, PointReadSchema, PredicateSchema, QueryCacheEntrySchema, QueryCacheMetadataSchema, RPCError, RangeReadSchema, RawPointReadSchema, RawRangeReadSchema, RawReadEntrySchema, ReadEntrySchema, SupaliveDb, TxContext, WriteEntrySchema, WriteOpSchema, WsClientManager, _resetGlobalDefs, bytesFromJson, createActionBuilder, createCaller, createClient, createConsoleLogger, createMutationBuilder, createQueryBuilder, defineComputedField, defineQuery, defineSchema, matchesPredicate, normalizeIdToBytes, normalizeToBytes, router, sleep };
1237
1299
 
1238
1300
  //# sourceMappingURL=index.js.map