convex 1.26.0-alpha.2 → 1.26.0-alpha.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 (252) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/browser.bundle.js +102 -25
  3. package/dist/browser.bundle.js.map +2 -2
  4. package/dist/cjs/browser/http_client.js +2 -0
  5. package/dist/cjs/browser/http_client.js.map +2 -2
  6. package/dist/cjs/browser/logging.js +4 -4
  7. package/dist/cjs/browser/logging.js.map +2 -2
  8. package/dist/cjs/browser/simple_client.js +25 -0
  9. package/dist/cjs/browser/simple_client.js.map +2 -2
  10. package/dist/cjs/browser/sync/client.js +41 -2
  11. package/dist/cjs/browser/sync/client.js.map +2 -2
  12. package/dist/cjs/browser/sync/remote_query_set.js.map +2 -2
  13. package/dist/cjs/browser/sync/request_manager.js +8 -1
  14. package/dist/cjs/browser/sync/request_manager.js.map +2 -2
  15. package/dist/cjs/browser/sync/web_socket_manager.js +5 -1
  16. package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
  17. package/dist/cjs/bundler/context.js.map +1 -1
  18. package/dist/cjs/bundler/debugBundle.js +31 -6
  19. package/dist/cjs/bundler/debugBundle.js.map +2 -2
  20. package/dist/cjs/bundler/depgraph.js +24 -26
  21. package/dist/cjs/bundler/depgraph.js.map +3 -3
  22. package/dist/cjs/cli/codegen_templates/api.js +51 -0
  23. package/dist/cjs/cli/codegen_templates/api.js.map +2 -2
  24. package/dist/cjs/cli/codegen_templates/readme.js +4 -4
  25. package/dist/cjs/cli/codegen_templates/readme.js.map +1 -1
  26. package/dist/cjs/cli/configure.js +11 -6
  27. package/dist/cjs/cli/configure.js.map +2 -2
  28. package/dist/cjs/cli/dev.js +5 -0
  29. package/dist/cjs/cli/dev.js.map +2 -2
  30. package/dist/cjs/cli/index.js +7 -3
  31. package/dist/cjs/cli/index.js.map +3 -3
  32. package/dist/cjs/cli/lib/codegen.js +33 -24
  33. package/dist/cjs/cli/lib/codegen.js.map +3 -3
  34. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  35. package/dist/cjs/cli/lib/envvars.js +29 -0
  36. package/dist/cjs/cli/lib/envvars.js.map +2 -2
  37. package/dist/cjs/cli/lib/localDeployment/anonymous.js +21 -7
  38. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  39. package/dist/cjs/cli/lib/mcp/tools/run.js +1 -1
  40. package/dist/cjs/cli/lib/mcp/tools/run.js.map +2 -2
  41. package/dist/cjs/cli/lib/networkTest.js +8 -2
  42. package/dist/cjs/cli/lib/networkTest.js.map +2 -2
  43. package/dist/cjs/cli/lib/usage.js +4 -4
  44. package/dist/cjs/cli/lib/usage.js.map +1 -1
  45. package/dist/cjs/cli/lib/utils/prompts.js +4 -4
  46. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  47. package/dist/cjs/index.js +1 -1
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/nextjs/index.js +9 -1
  50. package/dist/cjs/nextjs/index.js.map +2 -2
  51. package/dist/cjs/react/client.js +37 -0
  52. package/dist/cjs/react/client.js.map +2 -2
  53. package/dist/cjs/react/index.js +1 -0
  54. package/dist/cjs/react/index.js.map +2 -2
  55. package/dist/cjs/server/database.js.map +1 -1
  56. package/dist/cjs/server/impl/database_impl.js +26 -20
  57. package/dist/cjs/server/impl/database_impl.js.map +2 -2
  58. package/dist/cjs/server/impl/registration_impl.js +10 -2
  59. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  60. package/dist/cjs/values/validators.js +19 -0
  61. package/dist/cjs/values/validators.js.map +2 -2
  62. package/dist/cjs-types/browser/http_client.d.ts +2 -0
  63. package/dist/cjs-types/browser/http_client.d.ts.map +1 -1
  64. package/dist/cjs-types/browser/logging.d.ts +7 -1
  65. package/dist/cjs-types/browser/logging.d.ts.map +1 -1
  66. package/dist/cjs-types/browser/simple_client.d.ts +19 -0
  67. package/dist/cjs-types/browser/simple_client.d.ts.map +1 -1
  68. package/dist/cjs-types/browser/sync/client.d.ts +21 -0
  69. package/dist/cjs-types/browser/sync/client.d.ts.map +1 -1
  70. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts +5 -0
  71. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts.map +1 -1
  72. package/dist/cjs-types/browser/sync/remote_query_set.d.ts +2 -0
  73. package/dist/cjs-types/browser/sync/remote_query_set.d.ts.map +1 -1
  74. package/dist/cjs-types/browser/sync/request_manager.d.ts +2 -1
  75. package/dist/cjs-types/browser/sync/request_manager.d.ts.map +1 -1
  76. package/dist/cjs-types/browser/sync/web_socket_manager.d.ts +2 -1
  77. package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  78. package/dist/cjs-types/bundler/debugBundle.d.ts +4 -2
  79. package/dist/cjs-types/bundler/debugBundle.d.ts.map +1 -1
  80. package/dist/cjs-types/bundler/depgraph.d.ts +5 -4
  81. package/dist/cjs-types/bundler/depgraph.d.ts.map +1 -1
  82. package/dist/cjs-types/cli/codegen.d.ts +1 -1
  83. package/dist/cjs-types/cli/codegen_templates/api.d.ts.map +1 -1
  84. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  85. package/dist/cjs-types/cli/deploy.d.ts +1 -1
  86. package/dist/cjs-types/cli/dev.d.ts +1 -1
  87. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  88. package/dist/cjs-types/cli/lib/codegen.d.ts +1 -0
  89. package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
  90. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  91. package/dist/cjs-types/cli/lib/envvars.d.ts +1 -0
  92. package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
  93. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  94. package/dist/cjs-types/cli/lib/networkTest.d.ts.map +1 -1
  95. package/dist/cjs-types/cli/run.d.ts +1 -1
  96. package/dist/cjs-types/index.d.ts +1 -1
  97. package/dist/cjs-types/nextjs/index.d.ts +2 -2
  98. package/dist/cjs-types/react/client.d.ts +30 -0
  99. package/dist/cjs-types/react/client.d.ts.map +1 -1
  100. package/dist/cjs-types/react/index.d.ts +1 -1
  101. package/dist/cjs-types/react/index.d.ts.map +1 -1
  102. package/dist/cjs-types/server/database.d.ts.map +1 -1
  103. package/dist/cjs-types/server/database_api.test.d.ts +2 -0
  104. package/dist/cjs-types/server/database_api.test.d.ts.map +1 -0
  105. package/dist/cjs-types/server/impl/database_impl.d.ts.map +1 -1
  106. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  107. package/dist/cjs-types/values/validators.d.ts.map +1 -1
  108. package/dist/cli.bundle.cjs +291 -97
  109. package/dist/cli.bundle.cjs.map +3 -3
  110. package/dist/esm/browser/http_client.js +2 -0
  111. package/dist/esm/browser/http_client.js.map +2 -2
  112. package/dist/esm/browser/logging.js +3 -3
  113. package/dist/esm/browser/logging.js.map +2 -2
  114. package/dist/esm/browser/simple_client.js +25 -0
  115. package/dist/esm/browser/simple_client.js.map +2 -2
  116. package/dist/esm/browser/sync/client.js +41 -2
  117. package/dist/esm/browser/sync/client.js.map +2 -2
  118. package/dist/esm/browser/sync/remote_query_set.js.map +2 -2
  119. package/dist/esm/browser/sync/request_manager.js +8 -1
  120. package/dist/esm/browser/sync/request_manager.js.map +2 -2
  121. package/dist/esm/browser/sync/web_socket_manager.js +5 -1
  122. package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
  123. package/dist/esm/bundler/context.js.map +1 -1
  124. package/dist/esm/bundler/debugBundle.js +33 -7
  125. package/dist/esm/bundler/debugBundle.js.map +2 -2
  126. package/dist/esm/bundler/depgraph.js +24 -26
  127. package/dist/esm/bundler/depgraph.js.map +3 -3
  128. package/dist/esm/cli/codegen_templates/api.js +51 -0
  129. package/dist/esm/cli/codegen_templates/api.js.map +2 -2
  130. package/dist/esm/cli/codegen_templates/readme.js +4 -4
  131. package/dist/esm/cli/codegen_templates/readme.js.map +1 -1
  132. package/dist/esm/cli/configure.js +12 -8
  133. package/dist/esm/cli/configure.js.map +2 -2
  134. package/dist/esm/cli/dev.js +5 -0
  135. package/dist/esm/cli/dev.js.map +2 -2
  136. package/dist/esm/cli/index.js +7 -3
  137. package/dist/esm/cli/index.js.map +2 -2
  138. package/dist/esm/cli/lib/codegen.js +33 -25
  139. package/dist/esm/cli/lib/codegen.js.map +3 -3
  140. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  141. package/dist/esm/cli/lib/envvars.js +28 -0
  142. package/dist/esm/cli/lib/envvars.js.map +2 -2
  143. package/dist/esm/cli/lib/localDeployment/anonymous.js +21 -7
  144. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  145. package/dist/esm/cli/lib/mcp/tools/run.js +2 -2
  146. package/dist/esm/cli/lib/mcp/tools/run.js.map +2 -2
  147. package/dist/esm/cli/lib/networkTest.js +9 -3
  148. package/dist/esm/cli/lib/networkTest.js.map +2 -2
  149. package/dist/esm/cli/lib/usage.js +4 -4
  150. package/dist/esm/cli/lib/usage.js.map +1 -1
  151. package/dist/esm/cli/lib/utils/prompts.js +4 -4
  152. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  153. package/dist/esm/index.js +1 -1
  154. package/dist/esm/index.js.map +1 -1
  155. package/dist/esm/nextjs/index.js +9 -1
  156. package/dist/esm/nextjs/index.js.map +2 -2
  157. package/dist/esm/react/client.js +37 -1
  158. package/dist/esm/react/client.js.map +2 -2
  159. package/dist/esm/react/index.js +2 -1
  160. package/dist/esm/react/index.js.map +2 -2
  161. package/dist/esm/server/impl/database_impl.js +26 -20
  162. package/dist/esm/server/impl/database_impl.js.map +2 -2
  163. package/dist/esm/server/impl/registration_impl.js +10 -2
  164. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  165. package/dist/esm/values/validators.js +19 -0
  166. package/dist/esm/values/validators.js.map +2 -2
  167. package/dist/esm-types/browser/http_client.d.ts +2 -0
  168. package/dist/esm-types/browser/http_client.d.ts.map +1 -1
  169. package/dist/esm-types/browser/logging.d.ts +7 -1
  170. package/dist/esm-types/browser/logging.d.ts.map +1 -1
  171. package/dist/esm-types/browser/simple_client.d.ts +19 -0
  172. package/dist/esm-types/browser/simple_client.d.ts.map +1 -1
  173. package/dist/esm-types/browser/sync/client.d.ts +21 -0
  174. package/dist/esm-types/browser/sync/client.d.ts.map +1 -1
  175. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts +5 -0
  176. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts.map +1 -1
  177. package/dist/esm-types/browser/sync/remote_query_set.d.ts +2 -0
  178. package/dist/esm-types/browser/sync/remote_query_set.d.ts.map +1 -1
  179. package/dist/esm-types/browser/sync/request_manager.d.ts +2 -1
  180. package/dist/esm-types/browser/sync/request_manager.d.ts.map +1 -1
  181. package/dist/esm-types/browser/sync/web_socket_manager.d.ts +2 -1
  182. package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  183. package/dist/esm-types/bundler/debugBundle.d.ts +4 -2
  184. package/dist/esm-types/bundler/debugBundle.d.ts.map +1 -1
  185. package/dist/esm-types/bundler/depgraph.d.ts +5 -4
  186. package/dist/esm-types/bundler/depgraph.d.ts.map +1 -1
  187. package/dist/esm-types/cli/codegen.d.ts +1 -1
  188. package/dist/esm-types/cli/codegen_templates/api.d.ts.map +1 -1
  189. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  190. package/dist/esm-types/cli/deploy.d.ts +1 -1
  191. package/dist/esm-types/cli/dev.d.ts +1 -1
  192. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  193. package/dist/esm-types/cli/lib/codegen.d.ts +1 -0
  194. package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
  195. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  196. package/dist/esm-types/cli/lib/envvars.d.ts +1 -0
  197. package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
  198. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  199. package/dist/esm-types/cli/lib/networkTest.d.ts.map +1 -1
  200. package/dist/esm-types/cli/run.d.ts +1 -1
  201. package/dist/esm-types/index.d.ts +1 -1
  202. package/dist/esm-types/nextjs/index.d.ts +2 -2
  203. package/dist/esm-types/react/client.d.ts +30 -0
  204. package/dist/esm-types/react/client.d.ts.map +1 -1
  205. package/dist/esm-types/react/index.d.ts +1 -1
  206. package/dist/esm-types/react/index.d.ts.map +1 -1
  207. package/dist/esm-types/server/database.d.ts.map +1 -1
  208. package/dist/esm-types/server/database_api.test.d.ts +2 -0
  209. package/dist/esm-types/server/database_api.test.d.ts.map +1 -0
  210. package/dist/esm-types/server/impl/database_impl.d.ts.map +1 -1
  211. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  212. package/dist/esm-types/values/validators.d.ts.map +1 -1
  213. package/dist/react.bundle.js +172 -84
  214. package/dist/react.bundle.js.map +4 -4
  215. package/package.json +3 -3
  216. package/src/browser/.claude/settings.local.json +1 -1
  217. package/src/browser/http_client.ts +2 -0
  218. package/src/browser/logging.ts +10 -3
  219. package/src/browser/simple_client.ts +29 -0
  220. package/src/browser/sync/client.ts +54 -1
  221. package/src/browser/sync/client_node.test.ts +415 -0
  222. package/src/browser/sync/client_node_test_helpers.ts +19 -0
  223. package/src/browser/sync/remote_query_set.ts +2 -0
  224. package/src/browser/sync/request_manager.test.ts +59 -1
  225. package/src/browser/sync/request_manager.ts +10 -1
  226. package/src/browser/sync/web_socket_manager.ts +4 -0
  227. package/src/bundler/context.ts +1 -1
  228. package/src/bundler/debugBundle.ts +32 -4
  229. package/src/bundler/depgraph.ts +39 -41
  230. package/src/cli/codegen_templates/api.ts +54 -0
  231. package/src/cli/codegen_templates/readme.ts +4 -4
  232. package/src/cli/configure.ts +27 -21
  233. package/src/cli/dev.ts +6 -0
  234. package/src/cli/index.ts +12 -3
  235. package/src/cli/lib/codegen.ts +11 -1
  236. package/src/cli/lib/deploymentSelection.ts +2 -0
  237. package/src/cli/lib/envvars.ts +42 -0
  238. package/src/cli/lib/localDeployment/anonymous.ts +25 -7
  239. package/src/cli/lib/mcp/tools/run.ts +2 -2
  240. package/src/cli/lib/networkTest.ts +10 -3
  241. package/src/cli/lib/usage.ts +4 -4
  242. package/src/cli/lib/utils/prompts.ts +4 -4
  243. package/src/index.ts +1 -1
  244. package/src/nextjs/index.ts +21 -3
  245. package/src/react/client.ts +62 -1
  246. package/src/react/index.ts +1 -0
  247. package/src/server/database.ts +71 -0
  248. package/src/server/database_api.test.ts +360 -0
  249. package/src/server/impl/database_impl.ts +37 -17
  250. package/src/server/impl/registration_impl.ts +10 -2
  251. package/src/values/validator.test.ts +71 -0
  252. package/src/values/validators.ts +24 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.25.3
4
+
5
+ - Experimental `convex dev --once --debug-node-apis` debug flag for tracing
6
+ through imports to find Node.js APIs imported from non-"use node" convex
7
+ endpoint files.
8
+
9
+ - Experimental `CONVEX_AGENT_MODE=anonymous npx convex dev` for a
10
+ non-interactive anonymous development flow when not logged in.
11
+
12
+ - Simplify the `Logger` interface of Convex clients making it easier to replace.
13
+
14
+ - Reactive `ConnectionState` via `useConvexConnectionState` hook. How often this
15
+ value updates may change in the future if more information is added to
16
+ `ConnectionState`.
17
+
18
+ - Escape JavaScript keywords in codegen, fixing issues with files in the convex
19
+ folder named things like convex/delete.ts.
20
+
21
+ - Warn when the explicit value `undefined` is passed to Next.js server-side
22
+ helpers, indicating the issue may have been an unset environment variable.
23
+ This may become an error in the future.
24
+
25
+ - Error closer to the call site when invalid validators are contructed.
26
+
27
+ ## 1.25.2
28
+
29
+ - Increase a network timeout that was causing Node.js v20+ issues on slow
30
+ connections, good old Happy Eyeballs
31
+ https://github.com/nodejs/node/issues/54359.
32
+
33
+ ## 1.25.1
34
+
35
+ - Print more error info in `npx convex network-test`.
36
+
37
+ - Crash when it looks like an environment variable is missing:
38
+ `CONVEX_DEPLOY_KEY=project:me:new-project|eyABCD0= npx convex` parses as
39
+ `CONVEX_DEPLOY_KEY=project:me:new-project | eyABCD0='' npx convex` but when
40
+ was meant was
41
+ `CONVEX_DEPLOY_KEY='project:me:new-project|eyABCD0=' npx convex`.
42
+
43
+ Crash when an environment variable like `ey...0=` is present to surface errors
44
+ like this quicker.
45
+
3
46
  ## 1.25.0
4
47
 
5
48
  To upgrade to this release you'll need to upgrade any Convex components you use.
@@ -28,7 +28,7 @@ var convex = (() => {
28
28
  });
29
29
 
30
30
  // src/index.ts
31
- var version = "1.26.0-alpha.2";
31
+ var version = "1.26.0-alpha.4";
32
32
 
33
33
  // src/values/base64.ts
34
34
  var base64_exports = {};
@@ -481,7 +481,7 @@ var convex = (() => {
481
481
  return "?";
482
482
  }
483
483
  }
484
- var Logger = class {
484
+ var DefaultLogger = class {
485
485
  _onLogLineFuncs;
486
486
  _verbose;
487
487
  constructor(options) {
@@ -525,7 +525,7 @@ var convex = (() => {
525
525
  }
526
526
  };
527
527
  function instantiateDefaultLogger(options) {
528
- const logger = new Logger(options);
528
+ const logger = new DefaultLogger(options);
529
529
  logger.addLogLineListener((level, ...args) => {
530
530
  switch (level) {
531
531
  case "debug":
@@ -549,7 +549,7 @@ var convex = (() => {
549
549
  return logger;
550
550
  }
551
551
  function instantiateNoopLogger(options) {
552
- return new Logger(options);
552
+ return new DefaultLogger(options);
553
553
  }
554
554
  function logForFunction(logger, type, source, udfPath, message) {
555
555
  const prefix = prefix_for_source(source);
@@ -897,8 +897,9 @@ var convex = (() => {
897
897
 
898
898
  // src/browser/sync/request_manager.ts
899
899
  var RequestManager = class {
900
- constructor(logger) {
900
+ constructor(logger, markConnectionStateDirty) {
901
901
  this.logger = logger;
902
+ this.markConnectionStateDirty = markConnectionStateDirty;
902
903
  this.inflightRequests = /* @__PURE__ */ new Map();
903
904
  this.requestsOlderThanRestart = /* @__PURE__ */ new Set();
904
905
  }
@@ -919,6 +920,7 @@ var convex = (() => {
919
920
  this.inflightActionsCount++;
920
921
  }
921
922
  });
923
+ this.markConnectionStateDirty();
922
924
  return result;
923
925
  }
924
926
  /**
@@ -971,6 +973,7 @@ var convex = (() => {
971
973
  } else if (requestInfo.message.type === "Mutation") {
972
974
  this.inflightMutationsCount--;
973
975
  }
976
+ this.markConnectionStateDirty();
974
977
  return { requestId: response.requestId, result };
975
978
  }
976
979
  requestInfo.status = {
@@ -998,6 +1001,9 @@ var convex = (() => {
998
1001
  this.requestsOlderThanRestart.delete(requestId);
999
1002
  }
1000
1003
  }
1004
+ if (completeRequests.size > 0) {
1005
+ this.markConnectionStateDirty();
1006
+ }
1001
1007
  return completeRequests;
1002
1008
  }
1003
1009
  restart() {
@@ -1025,6 +1031,7 @@ var convex = (() => {
1025
1031
  });
1026
1032
  }
1027
1033
  }
1034
+ this.markConnectionStateDirty();
1028
1035
  return allMessages;
1029
1036
  }
1030
1037
  resume() {
@@ -1576,6 +1583,25 @@ var convex = (() => {
1576
1583
  return "Unknown";
1577
1584
  }
1578
1585
  var WebSocketManager = class {
1586
+ constructor(uri, callbacks, webSocketConstructor, logger, markConnectionStateDirty) {
1587
+ this.markConnectionStateDirty = markConnectionStateDirty;
1588
+ this.webSocketConstructor = webSocketConstructor;
1589
+ this.socket = { state: "disconnected" };
1590
+ this.connectionCount = 0;
1591
+ this.lastCloseReason = "InitialConnect";
1592
+ this.defaultInitialBackoff = 1e3;
1593
+ this.maxBackoff = 16e3;
1594
+ this.retries = 0;
1595
+ this.serverInactivityThreshold = 3e4;
1596
+ this.reconnectDueToServerInactivityTimeout = null;
1597
+ this.uri = uri;
1598
+ this.onOpen = callbacks.onOpen;
1599
+ this.onResume = callbacks.onResume;
1600
+ this.onMessage = callbacks.onMessage;
1601
+ this.onServerDisconnectError = callbacks.onServerDisconnectError;
1602
+ this.logger = logger;
1603
+ this.connect();
1604
+ }
1579
1605
  socket;
1580
1606
  connectionCount;
1581
1607
  _hasEverConnected = false;
@@ -1597,29 +1623,12 @@ var convex = (() => {
1597
1623
  webSocketConstructor;
1598
1624
  logger;
1599
1625
  onServerDisconnectError;
1600
- constructor(uri, callbacks, webSocketConstructor, logger) {
1601
- this.webSocketConstructor = webSocketConstructor;
1602
- this.socket = { state: "disconnected" };
1603
- this.connectionCount = 0;
1604
- this.lastCloseReason = "InitialConnect";
1605
- this.defaultInitialBackoff = 1e3;
1606
- this.maxBackoff = 16e3;
1607
- this.retries = 0;
1608
- this.serverInactivityThreshold = 3e4;
1609
- this.reconnectDueToServerInactivityTimeout = null;
1610
- this.uri = uri;
1611
- this.onOpen = callbacks.onOpen;
1612
- this.onResume = callbacks.onResume;
1613
- this.onMessage = callbacks.onMessage;
1614
- this.onServerDisconnectError = callbacks.onServerDisconnectError;
1615
- this.logger = logger;
1616
- this.connect();
1617
- }
1618
1626
  setSocketState(state) {
1619
1627
  this.socket = state;
1620
1628
  this._logVerbose(
1621
1629
  `socket state changed: ${this.socket.state}, paused: ${"paused" in this.socket ? this.socket.paused : void 0}`
1622
1630
  );
1631
+ this.markConnectionStateDirty();
1623
1632
  }
1624
1633
  connect() {
1625
1634
  if (this.socket.state === "terminated") {
@@ -1673,6 +1682,7 @@ var convex = (() => {
1673
1682
  const response = this.onMessage(serverMessage);
1674
1683
  if (response.hasSyncedPastLastReconnect) {
1675
1684
  this.retries = 0;
1685
+ this.markConnectionStateDirty();
1676
1686
  }
1677
1687
  };
1678
1688
  ws.onclose = (event) => {
@@ -1753,6 +1763,7 @@ var convex = (() => {
1753
1763
  scheduleReconnect(reason) {
1754
1764
  this.socket = { state: "disconnected" };
1755
1765
  const backoff = this.nextBackoff(reason);
1766
+ this.markConnectionStateDirty();
1756
1767
  this.logger.log(`Attempting reconnect in ${backoff}ms`);
1757
1768
  setTimeout(() => this.connect(), backoff);
1758
1769
  }
@@ -2388,6 +2399,9 @@ var convex = (() => {
2388
2399
  debug;
2389
2400
  logger;
2390
2401
  maxObservedTimestamp;
2402
+ connectionStateSubscribers = /* @__PURE__ */ new Map();
2403
+ nextConnectionStateSubscriberId = 0;
2404
+ _lastPublishedConnectionState;
2391
2405
  /**
2392
2406
  * @param address - The url of your Convex deployment, often provided
2393
2407
  * by an environment variable. E.g. `https://small-mouse-123.convex.cloud`.
@@ -2437,7 +2451,10 @@ var convex = (() => {
2437
2451
  (queryId) => this.state.queryPath(queryId),
2438
2452
  this.logger
2439
2453
  );
2440
- this.requestManager = new RequestManager(this.logger);
2454
+ this.requestManager = new RequestManager(
2455
+ this.logger,
2456
+ this.markConnectionStateDirty
2457
+ );
2441
2458
  this.authenticationManager = new AuthenticationManager(
2442
2459
  this.state,
2443
2460
  {
@@ -2588,7 +2605,8 @@ var convex = (() => {
2588
2605
  onServerDisconnectError: options.onServerDisconnectError
2589
2606
  },
2590
2607
  webSocketConstructor,
2591
- this.logger
2608
+ this.logger,
2609
+ this.markConnectionStateDirty
2592
2610
  );
2593
2611
  this.mark("convexClientConstructed");
2594
2612
  }
@@ -2805,6 +2823,38 @@ var convex = (() => {
2805
2823
  inflightActions: this.requestManager.inflightActions()
2806
2824
  };
2807
2825
  }
2826
+ /**
2827
+ * Call this whenever the connection state may have changed in a way that could
2828
+ * require publishing it. Schedules a possibly update.
2829
+ */
2830
+ markConnectionStateDirty = () => {
2831
+ void Promise.resolve().then(() => {
2832
+ const curConnectionState = this.connectionState();
2833
+ if (JSON.stringify(curConnectionState) !== JSON.stringify(this._lastPublishedConnectionState)) {
2834
+ this._lastPublishedConnectionState = curConnectionState;
2835
+ for (const cb of this.connectionStateSubscribers.values()) {
2836
+ cb(curConnectionState);
2837
+ }
2838
+ }
2839
+ });
2840
+ };
2841
+ /**
2842
+ * Subscribe to the {@link ConnectionState} between the client and the Convex
2843
+ * backend, calling a callback each time it changes.
2844
+ *
2845
+ * Subscribed callbacks will be called when any part of ConnectionState changes.
2846
+ * ConnectionState may grow in future versions (e.g. to provide a array of
2847
+ * inflight requests) in which case callbacks would be called more frequently.
2848
+ *
2849
+ * @returns An unsubscribe function to stop listening.
2850
+ */
2851
+ subscribeToConnectionState(cb) {
2852
+ const id = this.nextConnectionStateSubscriberId++;
2853
+ this.connectionStateSubscribers.set(id, cb);
2854
+ return () => {
2855
+ this.connectionStateSubscribers.delete(id);
2856
+ };
2857
+ }
2808
2858
  /**
2809
2859
  * Execute a mutation function.
2810
2860
  *
@@ -3275,6 +3325,31 @@ var convex = (() => {
3275
3325
  );
3276
3326
  });
3277
3327
  }
3328
+ /**
3329
+ * Get the current {@link ConnectionState} between the client and the Convex
3330
+ * backend.
3331
+ *
3332
+ * @returns The {@link ConnectionState} with the Convex backend.
3333
+ */
3334
+ connectionState() {
3335
+ if (this.disabled) throw new Error("ConvexClient is disabled");
3336
+ return this.client.connectionState();
3337
+ }
3338
+ /**
3339
+ * Subscribe to the {@link ConnectionState} between the client and the Convex
3340
+ * backend, calling a callback each time it changes.
3341
+ *
3342
+ * Subscribed callbacks will be called when any part of ConnectionState changes.
3343
+ * ConnectionState may grow in future versions (e.g. to provide a array of
3344
+ * inflight requests) in which case callbacks would be called more frequently.
3345
+ *
3346
+ * @returns An unsubscribe function to stop listening.
3347
+ */
3348
+ subscribeToConnectionState(cb) {
3349
+ if (this.disabled) return () => {
3350
+ };
3351
+ return this.client.subscribeToConnectionState(cb);
3352
+ }
3278
3353
  };
3279
3354
 
3280
3355
  // src/browser/http_client.ts
@@ -3302,6 +3377,8 @@ var convex = (() => {
3302
3377
  * - `logger` - A logger or a boolean. If not provided, logs to the console.
3303
3378
  * You can construct your own logger to customize logging to log elsewhere
3304
3379
  * or not log at all, or use `false` as a shorthand for a no-op logger.
3380
+ * A logger is an object with 4 methods: log(), warn(), error(), and logVerbose().
3381
+ * These methods can receive multiple arguments of any types, like console.log().
3305
3382
  * - `auth` - A JWT containing identity claims accessible in Convex functions.
3306
3383
  * This identity may expire so it may be necessary to call `setAuth()` later,
3307
3384
  * but for short-lived clients it's convenient to specify this value here.