@voidhash/mimic 0.0.2 → 0.0.4

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 (273) hide show
  1. package/.turbo/turbo-build.log +257 -42
  2. package/dist/Document.cjs +152 -0
  3. package/dist/Document.d.cts +67 -0
  4. package/dist/Document.d.cts.map +1 -0
  5. package/dist/Document.d.mts +68 -0
  6. package/dist/Document.d.mts.map +1 -0
  7. package/dist/Document.mjs +147 -0
  8. package/dist/Document.mjs.map +1 -0
  9. package/dist/EffectSchema.cjs +180 -0
  10. package/dist/EffectSchema.d.cts +84 -0
  11. package/dist/EffectSchema.d.cts.map +1 -0
  12. package/dist/EffectSchema.d.mts +84 -0
  13. package/dist/EffectSchema.d.mts.map +1 -0
  14. package/dist/EffectSchema.mjs +176 -0
  15. package/dist/EffectSchema.mjs.map +1 -0
  16. package/dist/FractionalIndex.cjs +365 -0
  17. package/dist/FractionalIndex.mjs +364 -0
  18. package/dist/FractionalIndex.mjs.map +1 -0
  19. package/dist/Operation.cjs +53 -0
  20. package/dist/Operation.d.cts +39 -0
  21. package/dist/Operation.d.cts.map +1 -0
  22. package/dist/Operation.d.mts +39 -0
  23. package/dist/Operation.d.mts.map +1 -0
  24. package/dist/Operation.mjs +46 -0
  25. package/dist/Operation.mjs.map +1 -0
  26. package/dist/OperationDefinition.cjs +13 -0
  27. package/dist/OperationDefinition.d.cts +12 -0
  28. package/dist/OperationDefinition.d.cts.map +1 -0
  29. package/dist/OperationDefinition.d.mts +12 -0
  30. package/dist/OperationDefinition.d.mts.map +1 -0
  31. package/dist/OperationDefinition.mjs +13 -0
  32. package/dist/OperationDefinition.mjs.map +1 -0
  33. package/dist/OperationPath.cjs +148 -0
  34. package/dist/OperationPath.d.cts +60 -0
  35. package/dist/OperationPath.d.cts.map +1 -0
  36. package/dist/OperationPath.d.mts +60 -0
  37. package/dist/OperationPath.d.mts.map +1 -0
  38. package/dist/OperationPath.mjs +138 -0
  39. package/dist/OperationPath.mjs.map +1 -0
  40. package/dist/{Presence-gWrmGBeu.cjs → Presence.cjs} +4 -39
  41. package/dist/{Presence-N8u7Eppr.d.mts → Presence.d.cts} +2 -2
  42. package/dist/Presence.d.cts.map +1 -0
  43. package/dist/{Presence-DKKP4v5X.d.cts → Presence.d.mts} +2 -2
  44. package/dist/Presence.d.mts.map +1 -0
  45. package/dist/{Presence-DdMVKcOv.mjs → Presence.mjs} +3 -28
  46. package/dist/Presence.mjs.map +1 -0
  47. package/dist/Primitive.cjs +52 -0
  48. package/dist/Primitive.d.cts +20 -0
  49. package/dist/Primitive.d.cts.map +1 -0
  50. package/dist/Primitive.d.mts +20 -0
  51. package/dist/Primitive.d.mts.map +1 -0
  52. package/dist/Primitive.mjs +48 -0
  53. package/dist/Primitive.mjs.map +1 -0
  54. package/dist/ProxyEnvironment.cjs +34 -0
  55. package/dist/ProxyEnvironment.d.cts +31 -0
  56. package/dist/ProxyEnvironment.d.cts.map +1 -0
  57. package/dist/ProxyEnvironment.d.mts +31 -0
  58. package/dist/ProxyEnvironment.d.mts.map +1 -0
  59. package/dist/ProxyEnvironment.mjs +29 -0
  60. package/dist/ProxyEnvironment.mjs.map +1 -0
  61. package/dist/Transaction.cjs +66 -0
  62. package/dist/Transaction.d.cts +56 -0
  63. package/dist/Transaction.d.cts.map +1 -0
  64. package/dist/Transaction.d.mts +56 -0
  65. package/dist/Transaction.d.mts.map +1 -0
  66. package/dist/Transaction.mjs +58 -0
  67. package/dist/Transaction.mjs.map +1 -0
  68. package/dist/Transform.cjs +11 -0
  69. package/dist/Transform.d.cts +21 -0
  70. package/dist/Transform.d.cts.map +1 -0
  71. package/dist/Transform.d.mts +21 -0
  72. package/dist/Transform.d.mts.map +1 -0
  73. package/dist/Transform.mjs +6 -0
  74. package/dist/Transform.mjs.map +1 -0
  75. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs +14 -0
  76. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs +14 -0
  77. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs +27 -0
  78. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs +27 -0
  79. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.cjs +16 -0
  80. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs +16 -0
  81. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs +11 -0
  82. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs +11 -0
  83. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.cjs +18 -0
  84. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs +12 -0
  85. package/dist/_virtual/rolldown_runtime.cjs +43 -0
  86. package/dist/{chunk-CLMFDpHK.mjs → _virtual/rolldown_runtime.mjs} +1 -1
  87. package/dist/client/ClientDocument.cjs +590 -0
  88. package/dist/client/ClientDocument.d.cts +161 -0
  89. package/dist/client/ClientDocument.d.cts.map +1 -0
  90. package/dist/client/ClientDocument.d.mts +162 -0
  91. package/dist/client/ClientDocument.d.mts.map +1 -0
  92. package/dist/client/ClientDocument.mjs +586 -0
  93. package/dist/client/ClientDocument.mjs.map +1 -0
  94. package/dist/client/Rebase.cjs +204 -0
  95. package/dist/client/Rebase.d.cts +87 -0
  96. package/dist/client/Rebase.d.cts.map +1 -0
  97. package/dist/client/Rebase.d.mts +88 -0
  98. package/dist/client/Rebase.d.mts.map +1 -0
  99. package/dist/client/Rebase.mjs +198 -0
  100. package/dist/client/Rebase.mjs.map +1 -0
  101. package/dist/client/StateMonitor.cjs +133 -0
  102. package/dist/client/StateMonitor.d.cts +122 -0
  103. package/dist/client/StateMonitor.d.cts.map +1 -0
  104. package/dist/client/StateMonitor.d.mts +122 -0
  105. package/dist/client/StateMonitor.d.mts.map +1 -0
  106. package/dist/client/StateMonitor.mjs +129 -0
  107. package/dist/client/StateMonitor.mjs.map +1 -0
  108. package/dist/client/Transport.cjs +11 -0
  109. package/dist/client/Transport.d.cts +237 -0
  110. package/dist/client/Transport.d.cts.map +1 -0
  111. package/dist/client/Transport.d.mts +237 -0
  112. package/dist/client/Transport.d.mts.map +1 -0
  113. package/dist/client/Transport.mjs +6 -0
  114. package/dist/client/Transport.mjs.map +1 -0
  115. package/dist/client/WebSocketTransport.cjs +396 -0
  116. package/dist/client/WebSocketTransport.d.cts +29 -0
  117. package/dist/client/WebSocketTransport.d.cts.map +1 -0
  118. package/dist/client/WebSocketTransport.d.mts +29 -0
  119. package/dist/client/WebSocketTransport.d.mts.map +1 -0
  120. package/dist/client/WebSocketTransport.mjs +392 -0
  121. package/dist/client/WebSocketTransport.mjs.map +1 -0
  122. package/dist/client/errors.cjs +135 -0
  123. package/dist/client/errors.d.cts +87 -0
  124. package/dist/client/errors.d.cts.map +1 -0
  125. package/dist/client/errors.d.mts +87 -0
  126. package/dist/client/errors.d.mts.map +1 -0
  127. package/dist/client/errors.mjs +127 -0
  128. package/dist/client/errors.mjs.map +1 -0
  129. package/dist/client/index.cjs +22 -1424
  130. package/dist/client/index.d.cts +8 -692
  131. package/dist/client/index.d.mts +8 -692
  132. package/dist/client/index.mjs +9 -1413
  133. package/dist/index.cjs +20 -2973
  134. package/dist/index.d.cts +12 -419
  135. package/dist/index.d.mts +12 -419
  136. package/dist/index.mjs +13 -2968
  137. package/dist/primitives/Array.cjs +302 -0
  138. package/dist/primitives/Array.d.cts +95 -0
  139. package/dist/primitives/Array.d.cts.map +1 -0
  140. package/dist/primitives/Array.d.mts +95 -0
  141. package/dist/primitives/Array.d.mts.map +1 -0
  142. package/dist/primitives/Array.mjs +301 -0
  143. package/dist/primitives/Array.mjs.map +1 -0
  144. package/dist/primitives/Boolean.cjs +95 -0
  145. package/dist/primitives/Boolean.d.cts +44 -0
  146. package/dist/primitives/Boolean.d.cts.map +1 -0
  147. package/dist/primitives/Boolean.d.mts +44 -0
  148. package/dist/primitives/Boolean.d.mts.map +1 -0
  149. package/dist/primitives/Boolean.mjs +94 -0
  150. package/dist/primitives/Boolean.mjs.map +1 -0
  151. package/dist/primitives/Either.cjs +200 -0
  152. package/dist/primitives/Either.d.cts +113 -0
  153. package/dist/primitives/Either.d.cts.map +1 -0
  154. package/dist/primitives/Either.d.mts +113 -0
  155. package/dist/primitives/Either.d.mts.map +1 -0
  156. package/dist/primitives/Either.mjs +199 -0
  157. package/dist/primitives/Either.mjs.map +1 -0
  158. package/dist/primitives/Lazy.cjs +46 -0
  159. package/dist/primitives/Lazy.d.cts +46 -0
  160. package/dist/primitives/Lazy.d.cts.map +1 -0
  161. package/dist/primitives/Lazy.d.mts +46 -0
  162. package/dist/primitives/Lazy.d.mts.map +1 -0
  163. package/dist/primitives/Lazy.mjs +46 -0
  164. package/dist/primitives/Lazy.mjs.map +1 -0
  165. package/dist/primitives/Literal.cjs +91 -0
  166. package/dist/primitives/Literal.d.cts +46 -0
  167. package/dist/primitives/Literal.d.cts.map +1 -0
  168. package/dist/primitives/Literal.d.mts +46 -0
  169. package/dist/primitives/Literal.d.mts.map +1 -0
  170. package/dist/primitives/Literal.mjs +90 -0
  171. package/dist/primitives/Literal.mjs.map +1 -0
  172. package/dist/primitives/Number.cjs +115 -0
  173. package/dist/primitives/Number.d.cts +54 -0
  174. package/dist/primitives/Number.d.cts.map +1 -0
  175. package/dist/primitives/Number.d.mts +54 -0
  176. package/dist/primitives/Number.d.mts.map +1 -0
  177. package/dist/primitives/Number.mjs +114 -0
  178. package/dist/primitives/Number.mjs.map +1 -0
  179. package/dist/primitives/String.cjs +127 -0
  180. package/dist/primitives/String.d.cts +56 -0
  181. package/dist/primitives/String.d.cts.map +1 -0
  182. package/dist/primitives/String.d.mts +56 -0
  183. package/dist/primitives/String.d.mts.map +1 -0
  184. package/dist/primitives/String.mjs +126 -0
  185. package/dist/primitives/String.mjs.map +1 -0
  186. package/dist/primitives/Struct.cjs +207 -0
  187. package/dist/primitives/Struct.d.cts +96 -0
  188. package/dist/primitives/Struct.d.cts.map +1 -0
  189. package/dist/primitives/Struct.d.mts +97 -0
  190. package/dist/primitives/Struct.d.mts.map +1 -0
  191. package/dist/primitives/Struct.mjs +206 -0
  192. package/dist/primitives/Struct.mjs.map +1 -0
  193. package/dist/primitives/Tree.cjs +575 -0
  194. package/dist/primitives/Tree.d.cts +185 -0
  195. package/dist/primitives/Tree.d.cts.map +1 -0
  196. package/dist/primitives/Tree.d.mts +185 -0
  197. package/dist/primitives/Tree.d.mts.map +1 -0
  198. package/dist/primitives/Tree.mjs +574 -0
  199. package/dist/primitives/Tree.mjs.map +1 -0
  200. package/dist/primitives/TreeNode.cjs +73 -0
  201. package/dist/primitives/TreeNode.d.cts +92 -0
  202. package/dist/primitives/TreeNode.d.cts.map +1 -0
  203. package/dist/primitives/TreeNode.d.mts +93 -0
  204. package/dist/primitives/TreeNode.d.mts.map +1 -0
  205. package/dist/primitives/TreeNode.mjs +72 -0
  206. package/dist/primitives/TreeNode.mjs.map +1 -0
  207. package/dist/primitives/Union.cjs +170 -0
  208. package/dist/primitives/Union.d.cts +81 -0
  209. package/dist/primitives/Union.d.cts.map +1 -0
  210. package/dist/primitives/Union.d.mts +81 -0
  211. package/dist/primitives/Union.d.mts.map +1 -0
  212. package/dist/primitives/Union.mjs +169 -0
  213. package/dist/primitives/Union.mjs.map +1 -0
  214. package/dist/primitives/shared.cjs +60 -0
  215. package/dist/primitives/shared.d.cts +147 -0
  216. package/dist/primitives/shared.d.cts.map +1 -0
  217. package/dist/primitives/shared.d.mts +147 -0
  218. package/dist/primitives/shared.d.mts.map +1 -0
  219. package/dist/primitives/shared.mjs +58 -0
  220. package/dist/primitives/shared.mjs.map +1 -0
  221. package/dist/server/ServerDocument.cjs +110 -0
  222. package/dist/server/ServerDocument.d.cts +98 -0
  223. package/dist/server/ServerDocument.d.cts.map +1 -0
  224. package/dist/server/ServerDocument.d.mts +99 -0
  225. package/dist/server/ServerDocument.d.mts.map +1 -0
  226. package/dist/server/ServerDocument.mjs +106 -0
  227. package/dist/server/ServerDocument.mjs.map +1 -0
  228. package/dist/server/errors.cjs +85 -0
  229. package/dist/server/errors.d.cts +53 -0
  230. package/dist/server/errors.d.cts.map +1 -0
  231. package/dist/server/errors.d.mts +53 -0
  232. package/dist/server/errors.d.mts.map +1 -0
  233. package/dist/server/errors.mjs +81 -0
  234. package/dist/server/errors.mjs.map +1 -0
  235. package/dist/server/index.cjs +9 -185
  236. package/dist/server/index.d.cts +3 -148
  237. package/dist/server/index.d.mts +3 -148
  238. package/dist/server/index.mjs +3 -181
  239. package/dist/types/index.cjs +16 -0
  240. package/dist/types/index.d.cts +16 -0
  241. package/dist/types/index.d.cts.map +1 -0
  242. package/dist/types/index.d.mts +16 -0
  243. package/dist/types/index.d.mts.map +1 -0
  244. package/dist/types/index.mjs +12 -0
  245. package/dist/types/index.mjs.map +1 -0
  246. package/dist/utils/tree-helpers.cjs +443 -0
  247. package/dist/utils/tree-helpers.d.cts +280 -0
  248. package/dist/utils/tree-helpers.d.cts.map +1 -0
  249. package/dist/utils/tree-helpers.d.mts +280 -0
  250. package/dist/utils/tree-helpers.d.mts.map +1 -0
  251. package/dist/utils/tree-helpers.mjs +439 -0
  252. package/dist/utils/tree-helpers.mjs.map +1 -0
  253. package/package.json +2 -2
  254. package/tsdown.config.ts +1 -1
  255. package/dist/Document-ChuFrTk1.cjs +0 -571
  256. package/dist/Document-CwiAFTIq.mjs +0 -438
  257. package/dist/Document-CwiAFTIq.mjs.map +0 -1
  258. package/dist/Presence-DKKP4v5X.d.cts.map +0 -1
  259. package/dist/Presence-DdMVKcOv.mjs.map +0 -1
  260. package/dist/Presence-N8u7Eppr.d.mts.map +0 -1
  261. package/dist/Primitive-DqQFc3Gu.d.mts +0 -1180
  262. package/dist/Primitive-DqQFc3Gu.d.mts.map +0 -1
  263. package/dist/Primitive-awpEjnKL.d.cts +0 -1180
  264. package/dist/Primitive-awpEjnKL.d.cts.map +0 -1
  265. package/dist/client/index.d.cts.map +0 -1
  266. package/dist/client/index.d.mts.map +0 -1
  267. package/dist/client/index.mjs.map +0 -1
  268. package/dist/index.d.cts.map +0 -1
  269. package/dist/index.d.mts.map +0 -1
  270. package/dist/index.mjs.map +0 -1
  271. package/dist/server/index.d.cts.map +0 -1
  272. package/dist/server/index.d.mts.map +0 -1
  273. package/dist/server/index.mjs.map +0 -1
@@ -0,0 +1,396 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_Transaction = require('../Transaction.cjs');
3
+ const require_errors = require('./errors.cjs');
4
+
5
+ //#region src/client/WebSocketTransport.ts
6
+ var WebSocketTransport_exports = /* @__PURE__ */ require_rolldown_runtime.__export({ make: () => make });
7
+ /**
8
+ * Creates a WebSocket-based transport for real-time server communication.
9
+ */
10
+ /**
11
+ * Build the WebSocket URL with optional document ID path.
12
+ */
13
+ const buildWebSocketUrl = (baseUrl, documentId) => {
14
+ if (!documentId) return baseUrl;
15
+ return `${baseUrl.replace(/\/+$/, "")}/doc/${encodeURIComponent(documentId)}`;
16
+ };
17
+ const make = (options) => {
18
+ const { url: baseUrl, documentId, protocols, authToken, onEvent, connectionTimeout = 1e4, autoReconnect = true, maxReconnectAttempts = 10, reconnectDelay = 1e3, maxReconnectDelay = 3e4, heartbeatInterval = 3e4, heartbeatTimeout = 1e4 } = options;
19
+ const url = buildWebSocketUrl(baseUrl, documentId);
20
+ let _state = { type: "disconnected" };
21
+ let _ws = null;
22
+ let _messageHandlers = /* @__PURE__ */ new Set();
23
+ let _connectionTimeoutHandle = null;
24
+ let _heartbeatIntervalHandle = null;
25
+ let _heartbeatTimeoutHandle = null;
26
+ let _reconnectTimeoutHandle = null;
27
+ let _messageQueue = [];
28
+ let _connectResolver = null;
29
+ let _connectRejecter = null;
30
+ let _reconnectAttempt = 0;
31
+ const emit = (handler, event) => {
32
+ handler === null || handler === void 0 || handler(event);
33
+ };
34
+ /**
35
+ * Encodes a client message for network transport.
36
+ */
37
+ const encodeClientMessage = (message) => {
38
+ if (message.type === "submit") return {
39
+ type: "submit",
40
+ transaction: require_Transaction.encode(message.transaction)
41
+ };
42
+ return message;
43
+ };
44
+ /**
45
+ * Decodes a server message from network transport.
46
+ */
47
+ const decodeServerMessage = (encoded) => {
48
+ if (encoded.type === "transaction") return {
49
+ type: "transaction",
50
+ transaction: require_Transaction.decode(encoded.transaction),
51
+ version: encoded.version
52
+ };
53
+ return encoded;
54
+ };
55
+ /**
56
+ * Sends a raw message over the WebSocket.
57
+ */
58
+ const sendRaw = (message) => {
59
+ if (_ws && _ws.readyState === WebSocket.OPEN) _ws.send(JSON.stringify(encodeClientMessage(message)));
60
+ };
61
+ /**
62
+ * Clears all active timers.
63
+ */
64
+ const clearTimers = () => {
65
+ if (_connectionTimeoutHandle) {
66
+ clearTimeout(_connectionTimeoutHandle);
67
+ _connectionTimeoutHandle = null;
68
+ }
69
+ if (_heartbeatIntervalHandle) {
70
+ clearInterval(_heartbeatIntervalHandle);
71
+ _heartbeatIntervalHandle = null;
72
+ }
73
+ if (_heartbeatTimeoutHandle) {
74
+ clearTimeout(_heartbeatTimeoutHandle);
75
+ _heartbeatTimeoutHandle = null;
76
+ }
77
+ if (_reconnectTimeoutHandle) {
78
+ clearTimeout(_reconnectTimeoutHandle);
79
+ _reconnectTimeoutHandle = null;
80
+ }
81
+ };
82
+ /**
83
+ * Starts the heartbeat mechanism.
84
+ */
85
+ const startHeartbeat = () => {
86
+ stopHeartbeat();
87
+ _heartbeatIntervalHandle = setInterval(() => {
88
+ if (_state.type !== "connected") return;
89
+ sendRaw({ type: "ping" });
90
+ _heartbeatTimeoutHandle = setTimeout(() => {
91
+ handleConnectionLost("Heartbeat timeout");
92
+ }, heartbeatTimeout);
93
+ }, heartbeatInterval);
94
+ };
95
+ /**
96
+ * Stops the heartbeat mechanism.
97
+ */
98
+ const stopHeartbeat = () => {
99
+ if (_heartbeatIntervalHandle) {
100
+ clearInterval(_heartbeatIntervalHandle);
101
+ _heartbeatIntervalHandle = null;
102
+ }
103
+ if (_heartbeatTimeoutHandle) {
104
+ clearTimeout(_heartbeatTimeoutHandle);
105
+ _heartbeatTimeoutHandle = null;
106
+ }
107
+ };
108
+ /**
109
+ * Handles pong response - clears the heartbeat timeout.
110
+ */
111
+ const handlePong = () => {
112
+ if (_heartbeatTimeoutHandle) {
113
+ clearTimeout(_heartbeatTimeoutHandle);
114
+ _heartbeatTimeoutHandle = null;
115
+ }
116
+ };
117
+ /**
118
+ * Flushes the message queue after reconnection.
119
+ */
120
+ const flushMessageQueue = () => {
121
+ const queue = _messageQueue;
122
+ _messageQueue = [];
123
+ for (const message of queue) sendRaw(message);
124
+ };
125
+ /**
126
+ * Calculates reconnection delay with exponential backoff.
127
+ */
128
+ const getReconnectDelay = (attempt) => {
129
+ const delay = reconnectDelay * Math.pow(2, attempt);
130
+ return Math.min(delay, maxReconnectDelay);
131
+ };
132
+ /**
133
+ * Resolves the auth token (handles both string and function).
134
+ * Returns empty string if no token is configured.
135
+ */
136
+ const resolveAuthToken = async () => {
137
+ if (!authToken) return "";
138
+ if (typeof authToken === "string") return authToken;
139
+ return authToken();
140
+ };
141
+ /**
142
+ * Performs authentication after connection.
143
+ * Always sends an auth message (even with empty token) to trigger server auth flow.
144
+ */
145
+ const authenticate = async () => {
146
+ const token = await resolveAuthToken();
147
+ _state = { type: "authenticating" };
148
+ sendRaw({
149
+ type: "auth",
150
+ token
151
+ });
152
+ };
153
+ /**
154
+ * Handles authentication result from server.
155
+ */
156
+ const handleAuthResult = (success, error) => {
157
+ if (!success) {
158
+ const authError = new require_errors.AuthenticationError(error || "Authentication failed");
159
+ cleanup();
160
+ _connectRejecter === null || _connectRejecter === void 0 || _connectRejecter(authError);
161
+ _connectResolver = null;
162
+ _connectRejecter = null;
163
+ emit(onEvent, {
164
+ type: "error",
165
+ error: authError
166
+ });
167
+ return;
168
+ }
169
+ completeConnection();
170
+ };
171
+ /**
172
+ * Completes the connection process.
173
+ */
174
+ const completeConnection = () => {
175
+ _state = { type: "connected" };
176
+ _reconnectAttempt = 0;
177
+ if (_connectionTimeoutHandle) {
178
+ clearTimeout(_connectionTimeoutHandle);
179
+ _connectionTimeoutHandle = null;
180
+ }
181
+ startHeartbeat();
182
+ flushMessageQueue();
183
+ _connectResolver === null || _connectResolver === void 0 || _connectResolver();
184
+ _connectResolver = null;
185
+ _connectRejecter = null;
186
+ emit(onEvent, { type: "connected" });
187
+ };
188
+ /**
189
+ * Cleans up WebSocket and related state.
190
+ */
191
+ const cleanup = () => {
192
+ clearTimers();
193
+ if (_ws) {
194
+ _ws.onopen = null;
195
+ _ws.onclose = null;
196
+ _ws.onerror = null;
197
+ _ws.onmessage = null;
198
+ if (_ws.readyState === WebSocket.OPEN || _ws.readyState === WebSocket.CONNECTING) _ws.close();
199
+ _ws = null;
200
+ }
201
+ };
202
+ /**
203
+ * Handles connection lost - initiates reconnection if enabled.
204
+ */
205
+ const handleConnectionLost = (reason) => {
206
+ cleanup();
207
+ if (_state.type === "disconnected") return;
208
+ if (_connectRejecter !== null) {
209
+ _state = { type: "disconnected" };
210
+ _reconnectAttempt = 0;
211
+ _connectRejecter(new require_errors.WebSocketError("Connection failed", void 0, reason));
212
+ _connectResolver = null;
213
+ _connectRejecter = null;
214
+ emit(onEvent, {
215
+ type: "disconnected",
216
+ reason
217
+ });
218
+ return;
219
+ }
220
+ if (!autoReconnect) {
221
+ _state = { type: "disconnected" };
222
+ _reconnectAttempt = 0;
223
+ emit(onEvent, {
224
+ type: "disconnected",
225
+ reason
226
+ });
227
+ return;
228
+ }
229
+ _reconnectAttempt++;
230
+ if (_reconnectAttempt > maxReconnectAttempts) {
231
+ _state = { type: "disconnected" };
232
+ _reconnectAttempt = 0;
233
+ emit(onEvent, {
234
+ type: "disconnected",
235
+ reason: "Max reconnection attempts reached"
236
+ });
237
+ return;
238
+ }
239
+ _state = {
240
+ type: "reconnecting",
241
+ attempt: _reconnectAttempt
242
+ };
243
+ emit(onEvent, {
244
+ type: "reconnecting",
245
+ attempt: _reconnectAttempt
246
+ });
247
+ const delay = getReconnectDelay(_reconnectAttempt - 1);
248
+ _reconnectTimeoutHandle = setTimeout(() => {
249
+ _reconnectTimeoutHandle = null;
250
+ attemptConnection();
251
+ }, delay);
252
+ };
253
+ /**
254
+ * Attempts to establish WebSocket connection.
255
+ */
256
+ const attemptConnection = () => {
257
+ if (_state.type === "connected") return;
258
+ _state = { type: "connecting" };
259
+ try {
260
+ _ws = new WebSocket(url, protocols);
261
+ } catch (error) {
262
+ handleConnectionLost(error.message);
263
+ return;
264
+ }
265
+ _connectionTimeoutHandle = setTimeout(() => {
266
+ _connectionTimeoutHandle = null;
267
+ handleConnectionLost("Connection timeout");
268
+ }, connectionTimeout);
269
+ _ws.onopen = async () => {
270
+ if (_connectionTimeoutHandle) {
271
+ clearTimeout(_connectionTimeoutHandle);
272
+ _connectionTimeoutHandle = null;
273
+ }
274
+ try {
275
+ await authenticate();
276
+ } catch (error) {
277
+ handleConnectionLost(error.message);
278
+ }
279
+ };
280
+ _ws.onclose = (event) => {
281
+ handleConnectionLost(event.reason || `Connection closed (code: ${event.code})`);
282
+ };
283
+ _ws.onerror = () => {};
284
+ _ws.onmessage = (event) => {
285
+ try {
286
+ handleMessage(decodeServerMessage(JSON.parse(event.data)));
287
+ } catch (_unused) {}
288
+ };
289
+ };
290
+ /**
291
+ * Handles incoming server messages.
292
+ */
293
+ const handleMessage = (message) => {
294
+ if (message.type === "pong") {
295
+ handlePong();
296
+ return;
297
+ }
298
+ if (message.type === "auth_result") {
299
+ handleAuthResult(message.success, message.error);
300
+ return;
301
+ }
302
+ for (const handler of _messageHandlers) try {
303
+ handler(message);
304
+ } catch (_unused2) {}
305
+ };
306
+ return {
307
+ send: (transaction) => {
308
+ const message = {
309
+ type: "submit",
310
+ transaction
311
+ };
312
+ if (_state.type === "connected") sendRaw(message);
313
+ else if (_state.type === "reconnecting") _messageQueue.push(message);
314
+ },
315
+ requestSnapshot: () => {
316
+ const message = { type: "request_snapshot" };
317
+ if (_state.type === "connected") sendRaw(message);
318
+ else if (_state.type === "reconnecting") _messageQueue.push(message);
319
+ },
320
+ subscribe: (handler) => {
321
+ _messageHandlers.add(handler);
322
+ return () => {
323
+ _messageHandlers.delete(handler);
324
+ };
325
+ },
326
+ connect: async () => {
327
+ if (_state.type === "connected") return;
328
+ if (_state.type === "connecting" || _state.type === "authenticating") return new Promise((resolve, reject) => {
329
+ const existingResolver = _connectResolver;
330
+ const existingRejecter = _connectRejecter;
331
+ _connectResolver = () => {
332
+ existingResolver === null || existingResolver === void 0 || existingResolver();
333
+ resolve();
334
+ };
335
+ _connectRejecter = (error) => {
336
+ existingRejecter === null || existingRejecter === void 0 || existingRejecter(error);
337
+ reject(error);
338
+ };
339
+ });
340
+ return new Promise((resolve, reject) => {
341
+ _connectResolver = resolve;
342
+ _connectRejecter = reject;
343
+ attemptConnection();
344
+ });
345
+ },
346
+ disconnect: () => {
347
+ if (_reconnectTimeoutHandle) {
348
+ clearTimeout(_reconnectTimeoutHandle);
349
+ _reconnectTimeoutHandle = null;
350
+ }
351
+ if (_connectRejecter) {
352
+ _connectRejecter(new require_errors.WebSocketError("Disconnected by user"));
353
+ _connectResolver = null;
354
+ _connectRejecter = null;
355
+ }
356
+ cleanup();
357
+ _state = { type: "disconnected" };
358
+ _reconnectAttempt = 0;
359
+ _messageQueue = [];
360
+ emit(onEvent, {
361
+ type: "disconnected",
362
+ reason: "User disconnected"
363
+ });
364
+ },
365
+ isConnected: () => {
366
+ return _state.type === "connected";
367
+ },
368
+ sendPresenceSet: (data) => {
369
+ const message = {
370
+ type: "presence_set",
371
+ data
372
+ };
373
+ if (_state.type === "connected") sendRaw(message);
374
+ else if (_state.type === "reconnecting") {
375
+ _messageQueue = _messageQueue.filter((message$1) => message$1.type !== "presence_set");
376
+ _messageQueue.push(message);
377
+ }
378
+ },
379
+ sendPresenceClear: () => {
380
+ const message = { type: "presence_clear" };
381
+ if (_state.type === "connected") sendRaw(message);
382
+ else if (_state.type === "reconnecting") {
383
+ _messageQueue = _messageQueue.filter((message$1) => message$1.type !== "presence_clear");
384
+ _messageQueue.push(message);
385
+ }
386
+ }
387
+ };
388
+ };
389
+
390
+ //#endregion
391
+ Object.defineProperty(exports, 'WebSocketTransport_exports', {
392
+ enumerable: true,
393
+ get: function () {
394
+ return WebSocketTransport_exports;
395
+ }
396
+ });
@@ -0,0 +1,29 @@
1
+ import { Transport, TransportOptions } from "./Transport.cjs";
2
+
3
+ //#region src/client/WebSocketTransport.d.ts
4
+ declare namespace WebSocketTransport_d_exports {
5
+ export { WebSocketTransportOptions, make };
6
+ }
7
+ /**
8
+ * Options for creating a WebSocket transport.
9
+ */
10
+ interface WebSocketTransportOptions extends TransportOptions {
11
+ /** WebSocket URL (ws:// or wss://) - base URL without document path */
12
+ readonly url: string;
13
+ /** Document ID to connect to. Will be appended to URL as /doc/{documentId} */
14
+ readonly documentId?: string;
15
+ /** WebSocket subprotocols */
16
+ readonly protocols?: string[];
17
+ /** Authentication token or function that returns a token */
18
+ readonly authToken?: string | (() => string | Promise<string>);
19
+ /** Interval between heartbeat pings (ms). Default: 30000 */
20
+ readonly heartbeatInterval?: number;
21
+ /** Timeout to wait for pong response (ms). Default: 10000 */
22
+ readonly heartbeatTimeout?: number;
23
+ /** Maximum delay between reconnection attempts (ms). Default: 30000 */
24
+ readonly maxReconnectDelay?: number;
25
+ }
26
+ declare const make: (options: WebSocketTransportOptions) => Transport;
27
+ //#endregion
28
+ export { WebSocketTransport_d_exports };
29
+ //# sourceMappingURL=WebSocketTransport.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketTransport.d.cts","names":[],"sources":["../../src/client/WebSocketTransport.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAYiB,yBAAA,SAAkC;;;;EAAlC,SAAA,UAAA,CAAA,EAAA,MAA0B;EAiD9B;;;gDAzCmC;;;;;;;;cAyCnC,gBAAiB,8BAA4B"}
@@ -0,0 +1,29 @@
1
+ import { Transport, TransportOptions } from "./Transport.mjs";
2
+
3
+ //#region src/client/WebSocketTransport.d.ts
4
+ declare namespace WebSocketTransport_d_exports {
5
+ export { WebSocketTransportOptions, make };
6
+ }
7
+ /**
8
+ * Options for creating a WebSocket transport.
9
+ */
10
+ interface WebSocketTransportOptions extends TransportOptions {
11
+ /** WebSocket URL (ws:// or wss://) - base URL without document path */
12
+ readonly url: string;
13
+ /** Document ID to connect to. Will be appended to URL as /doc/{documentId} */
14
+ readonly documentId?: string;
15
+ /** WebSocket subprotocols */
16
+ readonly protocols?: string[];
17
+ /** Authentication token or function that returns a token */
18
+ readonly authToken?: string | (() => string | Promise<string>);
19
+ /** Interval between heartbeat pings (ms). Default: 30000 */
20
+ readonly heartbeatInterval?: number;
21
+ /** Timeout to wait for pong response (ms). Default: 10000 */
22
+ readonly heartbeatTimeout?: number;
23
+ /** Maximum delay between reconnection attempts (ms). Default: 30000 */
24
+ readonly maxReconnectDelay?: number;
25
+ }
26
+ declare const make: (options: WebSocketTransportOptions) => Transport;
27
+ //#endregion
28
+ export { WebSocketTransport_d_exports };
29
+ //# sourceMappingURL=WebSocketTransport.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketTransport.d.mts","names":[],"sources":["../../src/client/WebSocketTransport.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAYiB,yBAAA,SAAkC;;;;EAAlC,SAAA,UAAA,CAAA,EAAA,MAA0B;EAiD9B;;;gDAzCmC;;;;;;;;cAyCnC,gBAAiB,8BAA4B"}