convex 1.43.0 → 1.45.0-alpha.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 (631) hide show
  1. package/CHANGELOG.md +136 -113
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/codegen_templates/component_server.js +4 -3
  5. package/dist/cjs/cli/codegen_templates/component_server.js.map +2 -2
  6. package/dist/cjs/cli/codegen_templates/server.js +24 -12
  7. package/dist/cjs/cli/codegen_templates/server.js.map +2 -2
  8. package/dist/cjs/cli/convexExport.js +1 -1
  9. package/dist/cjs/cli/convexExport.js.map +1 -1
  10. package/dist/cjs/cli/index.js +2 -32
  11. package/dist/cjs/cli/index.js.map +2 -2
  12. package/dist/cjs/cli/lib/api.js +11 -5
  13. package/dist/cjs/cli/lib/api.js.map +2 -2
  14. package/dist/cjs/cli/lib/convexExport.js +12 -1
  15. package/dist/cjs/cli/lib/convexExport.js.map +2 -2
  16. package/dist/cjs/cli/lib/dashboard.js.map +2 -2
  17. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  18. package/dist/cjs/cli/lib/localDeployment/upgrade.js +23 -188
  19. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  20. package/dist/cjs/cli/lib/login.js +12 -8
  21. package/dist/cjs/cli/lib/login.js.map +2 -2
  22. package/dist/cjs/cli/lib/mcp/tools/index.js.map +1 -1
  23. package/dist/cjs/cli/login.js +52 -7
  24. package/dist/cjs/cli/login.js.map +2 -2
  25. package/dist/cjs/cli/mcp.js +60 -63
  26. package/dist/cjs/cli/mcp.js.map +2 -2
  27. package/dist/cjs/index.js +1 -1
  28. package/dist/cjs/index.js.map +1 -1
  29. package/dist/cjs/react/ConvexAuthState.js +30 -32
  30. package/dist/cjs/react/ConvexAuthState.js.map +2 -2
  31. package/dist/cjs/server/impl/actions_impl.js +12 -0
  32. package/dist/cjs/server/impl/actions_impl.js.map +2 -2
  33. package/dist/cjs/server/index.js +3 -0
  34. package/dist/cjs/server/index.js.map +2 -2
  35. package/dist/cjs/server/schema.js +69 -1
  36. package/dist/cjs/server/schema.js.map +2 -2
  37. package/dist/cjs-types/cli/codegen_templates/component_server.d.ts.map +1 -1
  38. package/dist/cjs-types/cli/codegen_templates/server.d.ts +1 -0
  39. package/dist/cjs-types/cli/codegen_templates/server.d.ts.map +1 -1
  40. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  41. package/dist/cjs-types/cli/lib/convexExport.d.ts +1 -0
  42. package/dist/cjs-types/cli/lib/convexExport.d.ts.map +1 -1
  43. package/dist/cjs-types/cli/lib/dashboard.d.ts.map +1 -1
  44. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  45. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  46. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  47. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  48. package/dist/cjs-types/cli/lib/login.d.ts +5 -0
  49. package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
  50. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts +1 -1
  51. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  52. package/dist/cjs-types/cli/login.d.ts.map +1 -1
  53. package/dist/cjs-types/cli/mcp.d.ts +3 -0
  54. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  55. package/dist/cjs-types/index.d.ts +1 -1
  56. package/dist/cjs-types/index.d.ts.map +1 -1
  57. package/dist/cjs-types/react/ConvexAuthState.d.ts.map +1 -1
  58. package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
  59. package/dist/cjs-types/server/index.d.ts +2 -2
  60. package/dist/cjs-types/server/index.d.ts.map +1 -1
  61. package/dist/cjs-types/server/schema.d.ts +83 -5
  62. package/dist/cjs-types/server/schema.d.ts.map +1 -1
  63. package/dist/cli.bundle.cjs +23775 -18752
  64. package/dist/cli.bundle.cjs.map +4 -4
  65. package/dist/esm/cli/codegen_templates/component_server.js +8 -4
  66. package/dist/esm/cli/codegen_templates/component_server.js.map +2 -2
  67. package/dist/esm/cli/codegen_templates/server.js +22 -11
  68. package/dist/esm/cli/codegen_templates/server.js.map +2 -2
  69. package/dist/esm/cli/convexExport.js +1 -1
  70. package/dist/esm/cli/convexExport.js.map +1 -1
  71. package/dist/esm/cli/index.js +2 -32
  72. package/dist/esm/cli/index.js.map +2 -2
  73. package/dist/esm/cli/lib/api.js +11 -5
  74. package/dist/esm/cli/lib/api.js.map +2 -2
  75. package/dist/esm/cli/lib/convexExport.js +16 -3
  76. package/dist/esm/cli/lib/convexExport.js.map +2 -2
  77. package/dist/esm/cli/lib/dashboard.js.map +2 -2
  78. package/dist/esm/cli/lib/localDeployment/upgrade.js +22 -190
  79. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  80. package/dist/esm/cli/lib/login.js +11 -8
  81. package/dist/esm/cli/lib/login.js.map +2 -2
  82. package/dist/esm/cli/lib/mcp/tools/index.js.map +1 -1
  83. package/dist/esm/cli/login.js +54 -10
  84. package/dist/esm/cli/login.js.map +2 -2
  85. package/dist/esm/cli/mcp.js +60 -67
  86. package/dist/esm/cli/mcp.js.map +2 -2
  87. package/dist/esm/index.js +1 -1
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/react/ConvexAuthState.js +31 -32
  90. package/dist/esm/react/ConvexAuthState.js.map +2 -2
  91. package/dist/esm/server/impl/actions_impl.js +11 -0
  92. package/dist/esm/server/impl/actions_impl.js.map +2 -2
  93. package/dist/esm/server/index.js +2 -1
  94. package/dist/esm/server/index.js.map +2 -2
  95. package/dist/esm/server/schema.js +67 -0
  96. package/dist/esm/server/schema.js.map +2 -2
  97. package/dist/esm-types/cli/codegen_templates/component_server.d.ts.map +1 -1
  98. package/dist/esm-types/cli/codegen_templates/server.d.ts +1 -0
  99. package/dist/esm-types/cli/codegen_templates/server.d.ts.map +1 -1
  100. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  101. package/dist/esm-types/cli/lib/convexExport.d.ts +1 -0
  102. package/dist/esm-types/cli/lib/convexExport.d.ts.map +1 -1
  103. package/dist/esm-types/cli/lib/dashboard.d.ts.map +1 -1
  104. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  105. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  106. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  107. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  108. package/dist/esm-types/cli/lib/login.d.ts +5 -0
  109. package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
  110. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts +1 -1
  111. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  112. package/dist/esm-types/cli/login.d.ts.map +1 -1
  113. package/dist/esm-types/cli/mcp.d.ts +3 -0
  114. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  115. package/dist/esm-types/index.d.ts +1 -1
  116. package/dist/esm-types/index.d.ts.map +1 -1
  117. package/dist/esm-types/react/ConvexAuthState.d.ts.map +1 -1
  118. package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
  119. package/dist/esm-types/server/index.d.ts +2 -2
  120. package/dist/esm-types/server/index.d.ts.map +1 -1
  121. package/dist/esm-types/server/schema.d.ts +83 -5
  122. package/dist/esm-types/server/schema.d.ts.map +1 -1
  123. package/dist/react.bundle.js +31 -33
  124. package/dist/react.bundle.js.map +2 -2
  125. package/package.json +5 -6
  126. package/src/cli/codegen_templates/component_server.ts +12 -6
  127. package/src/cli/codegen_templates/server.ts +36 -19
  128. package/src/cli/convexExport.ts +1 -1
  129. package/src/cli/index.ts +2 -35
  130. package/src/cli/lib/api.ts +11 -5
  131. package/src/cli/lib/convexExport.ts +21 -0
  132. package/src/cli/lib/dashboard.ts +2 -0
  133. package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
  134. package/src/cli/lib/localDeployment/upgrade.ts +34 -207
  135. package/src/cli/lib/login.ts +20 -9
  136. package/src/cli/lib/mcp/tools/index.ts +1 -1
  137. package/src/cli/login.ts +88 -13
  138. package/src/cli/mcp.ts +64 -72
  139. package/src/index.ts +1 -1
  140. package/src/react/ConvexAuthState.tsx +15 -7
  141. package/src/server/impl/actions_impl.ts +23 -0
  142. package/src/server/index.ts +7 -1
  143. package/src/server/schema.ts +178 -1
  144. package/dist/cjs-types/browser/http_client.test.d.ts +0 -2
  145. package/dist/cjs-types/browser/http_client.test.d.ts.map +0 -1
  146. package/dist/cjs-types/browser/query_options.test.d.ts +0 -2
  147. package/dist/cjs-types/browser/query_options.test.d.ts.map +0 -1
  148. package/dist/cjs-types/browser/simple_client.test.d.ts +0 -2
  149. package/dist/cjs-types/browser/simple_client.test.d.ts.map +0 -1
  150. package/dist/cjs-types/browser/sync/client.test.d.ts +0 -5
  151. package/dist/cjs-types/browser/sync/client.test.d.ts.map +0 -1
  152. package/dist/cjs-types/browser/sync/client_node.test.d.ts +0 -2
  153. package/dist/cjs-types/browser/sync/client_node.test.d.ts.map +0 -1
  154. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  155. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  156. package/dist/cjs-types/browser/sync/local_state.test.d.ts +0 -2
  157. package/dist/cjs-types/browser/sync/local_state.test.d.ts.map +0 -1
  158. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  159. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  160. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  161. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  162. package/dist/cjs-types/browser/sync/protocol.test.d.ts +0 -5
  163. package/dist/cjs-types/browser/sync/protocol.test.d.ts.map +0 -1
  164. package/dist/cjs-types/browser/sync/request_manager.test.d.ts +0 -2
  165. package/dist/cjs-types/browser/sync/request_manager.test.d.ts.map +0 -1
  166. package/dist/cjs-types/bundler/fs.test.d.ts +0 -2
  167. package/dist/cjs-types/bundler/fs.test.d.ts.map +0 -1
  168. package/dist/cjs-types/bundler/index.test.d.ts +0 -2
  169. package/dist/cjs-types/bundler/index.test.d.ts.map +0 -1
  170. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts +0 -2
  171. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  172. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts +0 -2
  173. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  174. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts +0 -2
  175. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  176. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  177. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  178. package/dist/cjs-types/cli/configure.test.d.ts +0 -2
  179. package/dist/cjs-types/cli/configure.test.d.ts.map +0 -1
  180. package/dist/cjs-types/cli/deploymentCreate.test.d.ts +0 -2
  181. package/dist/cjs-types/cli/deploymentCreate.test.d.ts.map +0 -1
  182. package/dist/cjs-types/cli/deploymentSelect.test.d.ts +0 -2
  183. package/dist/cjs-types/cli/deploymentSelect.test.d.ts.map +0 -1
  184. package/dist/cjs-types/cli/deploymentSelection.test.d.ts +0 -2
  185. package/dist/cjs-types/cli/deploymentSelection.test.d.ts.map +0 -1
  186. package/dist/cjs-types/cli/deploymentToken.test.d.ts +0 -2
  187. package/dist/cjs-types/cli/deploymentToken.test.d.ts.map +0 -1
  188. package/dist/cjs-types/cli/dev.test.d.ts +0 -2
  189. package/dist/cjs-types/cli/dev.test.d.ts.map +0 -1
  190. package/dist/cjs-types/cli/envDefault.test.d.ts +0 -2
  191. package/dist/cjs-types/cli/envDefault.test.d.ts.map +0 -1
  192. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  193. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  194. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  195. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  196. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  197. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  198. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  199. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  200. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  201. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  202. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  203. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  204. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  205. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  206. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  207. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  208. package/dist/cjs-types/cli/lib/codegen.test.d.ts +0 -2
  209. package/dist/cjs-types/cli/lib/codegen.test.d.ts.map +0 -1
  210. package/dist/cjs-types/cli/lib/components.test.d.ts +0 -2
  211. package/dist/cjs-types/cli/lib/components.test.d.ts.map +0 -1
  212. package/dist/cjs-types/cli/lib/config.test.d.ts +0 -2
  213. package/dist/cjs-types/cli/lib/config.test.d.ts.map +0 -1
  214. package/dist/cjs-types/cli/lib/deployment.test.d.ts +0 -2
  215. package/dist/cjs-types/cli/lib/deployment.test.d.ts.map +0 -1
  216. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  217. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  218. package/dist/cjs-types/cli/lib/env.test.d.ts +0 -2
  219. package/dist/cjs-types/cli/lib/env.test.d.ts.map +0 -1
  220. package/dist/cjs-types/cli/lib/expiration.test.d.ts +0 -2
  221. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +0 -1
  222. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  223. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  224. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  225. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  226. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  227. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  228. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts +0 -2
  229. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  230. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +0 -2
  231. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  232. package/dist/cjs-types/cli/lib/indexes.test.d.ts +0 -2
  233. package/dist/cjs-types/cli/lib/indexes.test.d.ts.map +0 -1
  234. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  235. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  236. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  237. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  238. package/dist/cjs-types/cli/lib/run.test.d.ts +0 -2
  239. package/dist/cjs-types/cli/lib/run.test.d.ts.map +0 -1
  240. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts +0 -2
  241. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  242. package/dist/cjs-types/cli/lib/typecheck.test.d.ts +0 -2
  243. package/dist/cjs-types/cli/lib/typecheck.test.d.ts.map +0 -1
  244. package/dist/cjs-types/cli/lib/updates.test.d.ts +0 -2
  245. package/dist/cjs-types/cli/lib/updates.test.d.ts.map +0 -1
  246. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts +0 -2
  247. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  248. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts +0 -2
  249. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  250. package/dist/cjs-types/cli/lib/versionApi.test.d.ts +0 -2
  251. package/dist/cjs-types/cli/lib/versionApi.test.d.ts.map +0 -1
  252. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  253. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  254. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts +0 -2
  255. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  256. package/dist/cjs-types/common/index.test.d.ts +0 -2
  257. package/dist/cjs-types/common/index.test.d.ts.map +0 -1
  258. package/dist/cjs-types/nextjs/nextjs.test.d.ts +0 -2
  259. package/dist/cjs-types/nextjs/nextjs.test.d.ts.map +0 -1
  260. package/dist/cjs-types/react/ConvexAuthState.test.d.ts +0 -2
  261. package/dist/cjs-types/react/ConvexAuthState.test.d.ts.map +0 -1
  262. package/dist/cjs-types/react/auth_helpers.test.d.ts +0 -2
  263. package/dist/cjs-types/react/auth_helpers.test.d.ts.map +0 -1
  264. package/dist/cjs-types/react/auth_websocket.test.d.ts +0 -2
  265. package/dist/cjs-types/react/auth_websocket.test.d.ts.map +0 -1
  266. package/dist/cjs-types/react/client.test.d.ts +0 -2
  267. package/dist/cjs-types/react/client.test.d.ts.map +0 -1
  268. package/dist/cjs-types/react/client_provided_base_client.test.d.ts +0 -2
  269. package/dist/cjs-types/react/client_provided_base_client.test.d.ts.map +0 -1
  270. package/dist/cjs-types/react/queries_observer.test.d.ts +0 -2
  271. package/dist/cjs-types/react/queries_observer.test.d.ts.map +0 -1
  272. package/dist/cjs-types/react/react_node.test.d.ts +0 -2
  273. package/dist/cjs-types/react/react_node.test.d.ts.map +0 -1
  274. package/dist/cjs-types/react/use_paginated_query.test.d.ts +0 -2
  275. package/dist/cjs-types/react/use_paginated_query.test.d.ts.map +0 -1
  276. package/dist/cjs-types/react/use_queries.test.d.ts +0 -5
  277. package/dist/cjs-types/react/use_queries.test.d.ts.map +0 -1
  278. package/dist/cjs-types/react/use_query.test.d.ts +0 -5
  279. package/dist/cjs-types/react/use_query.test.d.ts.map +0 -1
  280. package/dist/cjs-types/react/use_query_object_options.test.d.ts +0 -5
  281. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +0 -1
  282. package/dist/cjs-types/react/use_query_result.test.d.ts +0 -5
  283. package/dist/cjs-types/react/use_query_result.test.d.ts.map +0 -1
  284. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  285. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  286. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  287. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  288. package/dist/cjs-types/server/api.intersect.test.d.ts +0 -2
  289. package/dist/cjs-types/server/api.intersect.test.d.ts.map +0 -1
  290. package/dist/cjs-types/server/api.test.d.ts +0 -2
  291. package/dist/cjs-types/server/api.test.d.ts.map +0 -1
  292. package/dist/cjs-types/server/audit_logging.test.d.ts +0 -2
  293. package/dist/cjs-types/server/audit_logging.test.d.ts.map +0 -1
  294. package/dist/cjs-types/server/components/index.test.d.ts +0 -2
  295. package/dist/cjs-types/server/components/index.test.d.ts.map +0 -1
  296. package/dist/cjs-types/server/cron.test.d.ts +0 -2
  297. package/dist/cjs-types/server/cron.test.d.ts.map +0 -1
  298. package/dist/cjs-types/server/data_model.test.d.ts +0 -2
  299. package/dist/cjs-types/server/data_model.test.d.ts.map +0 -1
  300. package/dist/cjs-types/server/database.test.d.ts +0 -2
  301. package/dist/cjs-types/server/database.test.d.ts.map +0 -1
  302. package/dist/cjs-types/server/database_api.test.d.ts +0 -2
  303. package/dist/cjs-types/server/database_api.test.d.ts.map +0 -1
  304. package/dist/cjs-types/server/filter_builder.test.d.ts +0 -2
  305. package/dist/cjs-types/server/filter_builder.test.d.ts.map +0 -1
  306. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  307. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  308. package/dist/cjs-types/server/impl/query_impl.test.d.ts +0 -2
  309. package/dist/cjs-types/server/impl/query_impl.test.d.ts.map +0 -1
  310. package/dist/cjs-types/server/pagination.test.d.ts +0 -2
  311. package/dist/cjs-types/server/pagination.test.d.ts.map +0 -1
  312. package/dist/cjs-types/server/query.test.d.ts +0 -2
  313. package/dist/cjs-types/server/query.test.d.ts.map +0 -1
  314. package/dist/cjs-types/server/registration.test.d.ts +0 -2
  315. package/dist/cjs-types/server/registration.test.d.ts.map +0 -1
  316. package/dist/cjs-types/server/router.test.d.ts +0 -2
  317. package/dist/cjs-types/server/router.test.d.ts.map +0 -1
  318. package/dist/cjs-types/server/scheduler.test.d.ts +0 -2
  319. package/dist/cjs-types/server/scheduler.test.d.ts.map +0 -1
  320. package/dist/cjs-types/server/schema.test.d.ts +0 -2
  321. package/dist/cjs-types/server/schema.test.d.ts.map +0 -1
  322. package/dist/cjs-types/test/fake_watch.d.ts +0 -16
  323. package/dist/cjs-types/test/fake_watch.d.ts.map +0 -1
  324. package/dist/cjs-types/test/type_testing.d.ts +0 -9
  325. package/dist/cjs-types/test/type_testing.d.ts.map +0 -1
  326. package/dist/cjs-types/type_utils.test.d.ts +0 -2
  327. package/dist/cjs-types/type_utils.test.d.ts.map +0 -1
  328. package/dist/cjs-types/values/size.test.d.ts +0 -2
  329. package/dist/cjs-types/values/size.test.d.ts.map +0 -1
  330. package/dist/cjs-types/values/validator.test.d.ts +0 -2
  331. package/dist/cjs-types/values/validator.test.d.ts.map +0 -1
  332. package/dist/cjs-types/values/value.test.d.ts +0 -2
  333. package/dist/cjs-types/values/value.test.d.ts.map +0 -1
  334. package/dist/esm-types/browser/http_client.test.d.ts +0 -2
  335. package/dist/esm-types/browser/http_client.test.d.ts.map +0 -1
  336. package/dist/esm-types/browser/query_options.test.d.ts +0 -2
  337. package/dist/esm-types/browser/query_options.test.d.ts.map +0 -1
  338. package/dist/esm-types/browser/simple_client.test.d.ts +0 -2
  339. package/dist/esm-types/browser/simple_client.test.d.ts.map +0 -1
  340. package/dist/esm-types/browser/sync/client.test.d.ts +0 -5
  341. package/dist/esm-types/browser/sync/client.test.d.ts.map +0 -1
  342. package/dist/esm-types/browser/sync/client_node.test.d.ts +0 -2
  343. package/dist/esm-types/browser/sync/client_node.test.d.ts.map +0 -1
  344. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  345. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  346. package/dist/esm-types/browser/sync/local_state.test.d.ts +0 -2
  347. package/dist/esm-types/browser/sync/local_state.test.d.ts.map +0 -1
  348. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  349. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  350. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  351. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  352. package/dist/esm-types/browser/sync/protocol.test.d.ts +0 -5
  353. package/dist/esm-types/browser/sync/protocol.test.d.ts.map +0 -1
  354. package/dist/esm-types/browser/sync/request_manager.test.d.ts +0 -2
  355. package/dist/esm-types/browser/sync/request_manager.test.d.ts.map +0 -1
  356. package/dist/esm-types/bundler/fs.test.d.ts +0 -2
  357. package/dist/esm-types/bundler/fs.test.d.ts.map +0 -1
  358. package/dist/esm-types/bundler/index.test.d.ts +0 -2
  359. package/dist/esm-types/bundler/index.test.d.ts.map +0 -1
  360. package/dist/esm-types/cli/codegen_templates/api.test.d.ts +0 -2
  361. package/dist/esm-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  362. package/dist/esm-types/cli/codegen_templates/common.test.d.ts +0 -2
  363. package/dist/esm-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  364. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts +0 -2
  365. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  366. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  367. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  368. package/dist/esm-types/cli/configure.test.d.ts +0 -2
  369. package/dist/esm-types/cli/configure.test.d.ts.map +0 -1
  370. package/dist/esm-types/cli/deploymentCreate.test.d.ts +0 -2
  371. package/dist/esm-types/cli/deploymentCreate.test.d.ts.map +0 -1
  372. package/dist/esm-types/cli/deploymentSelect.test.d.ts +0 -2
  373. package/dist/esm-types/cli/deploymentSelect.test.d.ts.map +0 -1
  374. package/dist/esm-types/cli/deploymentSelection.test.d.ts +0 -2
  375. package/dist/esm-types/cli/deploymentSelection.test.d.ts.map +0 -1
  376. package/dist/esm-types/cli/deploymentToken.test.d.ts +0 -2
  377. package/dist/esm-types/cli/deploymentToken.test.d.ts.map +0 -1
  378. package/dist/esm-types/cli/dev.test.d.ts +0 -2
  379. package/dist/esm-types/cli/dev.test.d.ts.map +0 -1
  380. package/dist/esm-types/cli/envDefault.test.d.ts +0 -2
  381. package/dist/esm-types/cli/envDefault.test.d.ts.map +0 -1
  382. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  383. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  384. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  385. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  386. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  387. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  388. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  389. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  390. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  391. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  392. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  393. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  394. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  395. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  396. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  397. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  398. package/dist/esm-types/cli/lib/codegen.test.d.ts +0 -2
  399. package/dist/esm-types/cli/lib/codegen.test.d.ts.map +0 -1
  400. package/dist/esm-types/cli/lib/components.test.d.ts +0 -2
  401. package/dist/esm-types/cli/lib/components.test.d.ts.map +0 -1
  402. package/dist/esm-types/cli/lib/config.test.d.ts +0 -2
  403. package/dist/esm-types/cli/lib/config.test.d.ts.map +0 -1
  404. package/dist/esm-types/cli/lib/deployment.test.d.ts +0 -2
  405. package/dist/esm-types/cli/lib/deployment.test.d.ts.map +0 -1
  406. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  407. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  408. package/dist/esm-types/cli/lib/env.test.d.ts +0 -2
  409. package/dist/esm-types/cli/lib/env.test.d.ts.map +0 -1
  410. package/dist/esm-types/cli/lib/expiration.test.d.ts +0 -2
  411. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +0 -1
  412. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  413. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  414. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  415. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  416. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  417. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  418. package/dist/esm-types/cli/lib/fsUtils.test.d.ts +0 -2
  419. package/dist/esm-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  420. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +0 -2
  421. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  422. package/dist/esm-types/cli/lib/indexes.test.d.ts +0 -2
  423. package/dist/esm-types/cli/lib/indexes.test.d.ts.map +0 -1
  424. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  425. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  426. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  427. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  428. package/dist/esm-types/cli/lib/run.test.d.ts +0 -2
  429. package/dist/esm-types/cli/lib/run.test.d.ts.map +0 -1
  430. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts +0 -2
  431. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  432. package/dist/esm-types/cli/lib/typecheck.test.d.ts +0 -2
  433. package/dist/esm-types/cli/lib/typecheck.test.d.ts.map +0 -1
  434. package/dist/esm-types/cli/lib/updates.test.d.ts +0 -2
  435. package/dist/esm-types/cli/lib/updates.test.d.ts.map +0 -1
  436. package/dist/esm-types/cli/lib/utils/hash.test.d.ts +0 -2
  437. package/dist/esm-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  438. package/dist/esm-types/cli/lib/utils/utils.test.d.ts +0 -2
  439. package/dist/esm-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  440. package/dist/esm-types/cli/lib/versionApi.test.d.ts +0 -2
  441. package/dist/esm-types/cli/lib/versionApi.test.d.ts.map +0 -1
  442. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  443. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  444. package/dist/esm-types/cli/lib/workos/workos.test.d.ts +0 -2
  445. package/dist/esm-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  446. package/dist/esm-types/common/index.test.d.ts +0 -2
  447. package/dist/esm-types/common/index.test.d.ts.map +0 -1
  448. package/dist/esm-types/nextjs/nextjs.test.d.ts +0 -2
  449. package/dist/esm-types/nextjs/nextjs.test.d.ts.map +0 -1
  450. package/dist/esm-types/react/ConvexAuthState.test.d.ts +0 -2
  451. package/dist/esm-types/react/ConvexAuthState.test.d.ts.map +0 -1
  452. package/dist/esm-types/react/auth_helpers.test.d.ts +0 -2
  453. package/dist/esm-types/react/auth_helpers.test.d.ts.map +0 -1
  454. package/dist/esm-types/react/auth_websocket.test.d.ts +0 -2
  455. package/dist/esm-types/react/auth_websocket.test.d.ts.map +0 -1
  456. package/dist/esm-types/react/client.test.d.ts +0 -2
  457. package/dist/esm-types/react/client.test.d.ts.map +0 -1
  458. package/dist/esm-types/react/client_provided_base_client.test.d.ts +0 -2
  459. package/dist/esm-types/react/client_provided_base_client.test.d.ts.map +0 -1
  460. package/dist/esm-types/react/queries_observer.test.d.ts +0 -2
  461. package/dist/esm-types/react/queries_observer.test.d.ts.map +0 -1
  462. package/dist/esm-types/react/react_node.test.d.ts +0 -2
  463. package/dist/esm-types/react/react_node.test.d.ts.map +0 -1
  464. package/dist/esm-types/react/use_paginated_query.test.d.ts +0 -2
  465. package/dist/esm-types/react/use_paginated_query.test.d.ts.map +0 -1
  466. package/dist/esm-types/react/use_queries.test.d.ts +0 -5
  467. package/dist/esm-types/react/use_queries.test.d.ts.map +0 -1
  468. package/dist/esm-types/react/use_query.test.d.ts +0 -5
  469. package/dist/esm-types/react/use_query.test.d.ts.map +0 -1
  470. package/dist/esm-types/react/use_query_object_options.test.d.ts +0 -5
  471. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +0 -1
  472. package/dist/esm-types/react/use_query_result.test.d.ts +0 -5
  473. package/dist/esm-types/react/use_query_result.test.d.ts.map +0 -1
  474. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  475. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  476. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  477. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  478. package/dist/esm-types/server/api.intersect.test.d.ts +0 -2
  479. package/dist/esm-types/server/api.intersect.test.d.ts.map +0 -1
  480. package/dist/esm-types/server/api.test.d.ts +0 -2
  481. package/dist/esm-types/server/api.test.d.ts.map +0 -1
  482. package/dist/esm-types/server/audit_logging.test.d.ts +0 -2
  483. package/dist/esm-types/server/audit_logging.test.d.ts.map +0 -1
  484. package/dist/esm-types/server/components/index.test.d.ts +0 -2
  485. package/dist/esm-types/server/components/index.test.d.ts.map +0 -1
  486. package/dist/esm-types/server/cron.test.d.ts +0 -2
  487. package/dist/esm-types/server/cron.test.d.ts.map +0 -1
  488. package/dist/esm-types/server/data_model.test.d.ts +0 -2
  489. package/dist/esm-types/server/data_model.test.d.ts.map +0 -1
  490. package/dist/esm-types/server/database.test.d.ts +0 -2
  491. package/dist/esm-types/server/database.test.d.ts.map +0 -1
  492. package/dist/esm-types/server/database_api.test.d.ts +0 -2
  493. package/dist/esm-types/server/database_api.test.d.ts.map +0 -1
  494. package/dist/esm-types/server/filter_builder.test.d.ts +0 -2
  495. package/dist/esm-types/server/filter_builder.test.d.ts.map +0 -1
  496. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  497. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  498. package/dist/esm-types/server/impl/query_impl.test.d.ts +0 -2
  499. package/dist/esm-types/server/impl/query_impl.test.d.ts.map +0 -1
  500. package/dist/esm-types/server/pagination.test.d.ts +0 -2
  501. package/dist/esm-types/server/pagination.test.d.ts.map +0 -1
  502. package/dist/esm-types/server/query.test.d.ts +0 -2
  503. package/dist/esm-types/server/query.test.d.ts.map +0 -1
  504. package/dist/esm-types/server/registration.test.d.ts +0 -2
  505. package/dist/esm-types/server/registration.test.d.ts.map +0 -1
  506. package/dist/esm-types/server/router.test.d.ts +0 -2
  507. package/dist/esm-types/server/router.test.d.ts.map +0 -1
  508. package/dist/esm-types/server/scheduler.test.d.ts +0 -2
  509. package/dist/esm-types/server/scheduler.test.d.ts.map +0 -1
  510. package/dist/esm-types/server/schema.test.d.ts +0 -2
  511. package/dist/esm-types/server/schema.test.d.ts.map +0 -1
  512. package/dist/esm-types/test/fake_watch.d.ts +0 -16
  513. package/dist/esm-types/test/fake_watch.d.ts.map +0 -1
  514. package/dist/esm-types/test/type_testing.d.ts +0 -9
  515. package/dist/esm-types/test/type_testing.d.ts.map +0 -1
  516. package/dist/esm-types/type_utils.test.d.ts +0 -2
  517. package/dist/esm-types/type_utils.test.d.ts.map +0 -1
  518. package/dist/esm-types/values/size.test.d.ts +0 -2
  519. package/dist/esm-types/values/size.test.d.ts.map +0 -1
  520. package/dist/esm-types/values/validator.test.d.ts +0 -2
  521. package/dist/esm-types/values/validator.test.d.ts.map +0 -1
  522. package/dist/esm-types/values/value.test.d.ts +0 -2
  523. package/dist/esm-types/values/value.test.d.ts.map +0 -1
  524. package/src/browser/http_client.test.ts +0 -202
  525. package/src/browser/query_options.test.ts +0 -43
  526. package/src/browser/simple_client.test.ts +0 -104
  527. package/src/browser/sync/client.test.ts +0 -44
  528. package/src/browser/sync/client_node.test.ts +0 -1207
  529. package/src/browser/sync/client_node_test_helpers.ts +0 -200
  530. package/src/browser/sync/local_state.test.ts +0 -128
  531. package/src/browser/sync/optimistic_query_set.test.ts +0 -253
  532. package/src/browser/sync/paginated_query_client.test.ts +0 -597
  533. package/src/browser/sync/protocol.test.ts +0 -14
  534. package/src/browser/sync/request_manager.test.ts +0 -273
  535. package/src/bundler/fs.test.ts +0 -86
  536. package/src/bundler/index.test.ts +0 -210
  537. package/src/bundler/test_fixtures/js/project01/bar.js +0 -4
  538. package/src/bundler/test_fixtures/js/project01/file with spaces.js +0 -1
  539. package/src/bundler/test_fixtures/js/project01/foo.js +0 -9
  540. package/src/bundler/test_fixtures/js/project_with_https/https.js +0 -9
  541. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/default.js +0 -3
  542. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/more_code/https.js +0 -5
  543. package/src/bundler/test_fixtures/js/project_with_https_without_router/https.js +0 -1
  544. package/src/bundler/test_fixtures/js/project_with_node_shims/uses_node_shims.js +0 -4
  545. package/src/cli/codegen_templates/api.test.ts +0 -18
  546. package/src/cli/codegen_templates/common.test.ts +0 -52
  547. package/src/cli/codegen_templates/templates.test.ts +0 -16
  548. package/src/cli/codegen_templates/validator_helpers.test.ts +0 -31
  549. package/src/cli/configure.test.ts +0 -138
  550. package/src/cli/deploymentCreate.test.ts +0 -1376
  551. package/src/cli/deploymentSelect.test.ts +0 -1291
  552. package/src/cli/deploymentSelection.test.ts +0 -2546
  553. package/src/cli/deploymentToken.test.ts +0 -397
  554. package/src/cli/dev.test.ts +0 -157
  555. package/src/cli/envDefault.test.ts +0 -495
  556. package/src/cli/lib/__snapshots__/formatTargetedDeployment.test.ts.snap +0 -94
  557. package/src/cli/lib/aiFiles/agentsmd.test.ts +0 -133
  558. package/src/cli/lib/aiFiles/claudemd.test.ts +0 -92
  559. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +0 -50
  560. package/src/cli/lib/aiFiles/index.test.ts +0 -986
  561. package/src/cli/lib/aiFiles/integration.test.ts +0 -692
  562. package/src/cli/lib/aiFiles/prompt.test.ts +0 -202
  563. package/src/cli/lib/aiFiles/state.test.ts +0 -305
  564. package/src/cli/lib/aiFiles/utils.test.ts +0 -50
  565. package/src/cli/lib/codegen.test.ts +0 -49
  566. package/src/cli/lib/components.test.ts +0 -227
  567. package/src/cli/lib/config.test.ts +0 -1026
  568. package/src/cli/lib/deployment.test.ts +0 -85
  569. package/src/cli/lib/deploymentSelector.test.ts +0 -107
  570. package/src/cli/lib/env.test.ts +0 -60
  571. package/src/cli/lib/expiration.test.ts +0 -159
  572. package/src/cli/lib/extractDeploymentNameForWorkOS.test.ts +0 -30
  573. package/src/cli/lib/formatEnvValueForDotfile.test.ts +0 -294
  574. package/src/cli/lib/formatTargetedDeployment.test.ts +0 -281
  575. package/src/cli/lib/fsUtils.test.ts +0 -67
  576. package/src/cli/lib/generateDocs.test.ts +0 -326
  577. package/src/cli/lib/indexes.test.ts +0 -77
  578. package/src/cli/lib/localDeployment/run.test.ts +0 -104
  579. package/src/cli/lib/localDeployment/secrets.test.ts +0 -53
  580. package/src/cli/lib/run.test.ts +0 -54
  581. package/src/cli/lib/runTestFunction.test.ts +0 -84
  582. package/src/cli/lib/typecheck.test.ts +0 -71
  583. package/src/cli/lib/updates.test.ts +0 -157
  584. package/src/cli/lib/utils/hash.test.ts +0 -25
  585. package/src/cli/lib/utils/utils.test.ts +0 -340
  586. package/src/cli/lib/versionApi.test.ts +0 -471
  587. package/src/cli/lib/workos/environmentApi.test.ts +0 -107
  588. package/src/cli/lib/workos/workos.test.ts +0 -242
  589. package/src/common/README.md +0 -2
  590. package/src/common/index.test.ts +0 -35
  591. package/src/nextjs/nextjs.test.tsx +0 -94
  592. package/src/react/ConvexAuthState.test.tsx +0 -702
  593. package/src/react/auth_helpers.test.tsx +0 -45
  594. package/src/react/auth_websocket.test.tsx +0 -1177
  595. package/src/react/client.test.tsx +0 -261
  596. package/src/react/client_provided_base_client.test.tsx +0 -174
  597. package/src/react/queries_observer.test.ts +0 -176
  598. package/src/react/react_node.test.ts +0 -78
  599. package/src/react/use_paginated_query.test.tsx +0 -1420
  600. package/src/react/use_queries.test.ts +0 -140
  601. package/src/react/use_query.test.ts +0 -71
  602. package/src/react/use_query_object_options.test.ts +0 -51
  603. package/src/react/use_query_result.test.ts +0 -75
  604. package/src/react-auth0/ConvexProviderWithAuth0.test.tsx +0 -17
  605. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +0 -18
  606. package/src/server/README.md +0 -15
  607. package/src/server/api.intersect.test.ts +0 -109
  608. package/src/server/api.test.ts +0 -447
  609. package/src/server/audit_logging.test.ts +0 -131
  610. package/src/server/components/index.test.ts +0 -48
  611. package/src/server/cron.test.ts +0 -58
  612. package/src/server/data_model.test.ts +0 -221
  613. package/src/server/database.test.ts +0 -184
  614. package/src/server/database_api.test.ts +0 -439
  615. package/src/server/filter_builder.test.ts +0 -102
  616. package/src/server/impl/filter_builder_impl.test.ts +0 -13
  617. package/src/server/impl/query_impl.test.ts +0 -46
  618. package/src/server/pagination.test.ts +0 -49
  619. package/src/server/query.test.ts +0 -112
  620. package/src/server/registration.test.ts +0 -589
  621. package/src/server/router.test.ts +0 -148
  622. package/src/server/scheduler.test.ts +0 -31
  623. package/src/server/schema.test.ts +0 -983
  624. package/src/test/fake_watch.ts +0 -54
  625. package/src/test/type_testing.ts +0 -21
  626. package/src/type_utils.test.ts +0 -62
  627. package/src/values/size.test.ts +0 -95
  628. package/src/values/validator.test.ts +0 -619
  629. package/src/values/value.test.ts +0 -232
  630. package/src/vendor/README.md +0 -18
  631. package/src/vendor/jwt-decode/README.md +0 -1
@@ -1,702 +0,0 @@
1
- /**
2
- * @vitest-environment custom-vitest-environment.ts
3
- */
4
- import { expect, vi, test } from "vitest";
5
- import { act, render, screen, within } from "@testing-library/react";
6
- import { jwtEncode } from "../vendor/jwt-encode/index.js";
7
- import React, { createContext, useCallback, useContext, useMemo } from "react";
8
- import {
9
- ConvexProviderWithAuth,
10
- ConvexReactClient,
11
- useConvexAuth,
12
- } from "./index.js";
13
- import {
14
- BaseConvexClient,
15
- BaseConvexClientInterface,
16
- } from "../browser/index.js";
17
-
18
- vi.useFakeTimers();
19
-
20
- const flushPromises = async () => {
21
- const timers = await vi.importActual("timers");
22
- await act(() => new Promise((timers as any).setImmediate));
23
- };
24
-
25
- // Test helpers reach into `BaseConvexClient`'s private internals; the tests
26
- // only ever construct `ConvexReactClient` without a `baseClient` override, so
27
- // `sync` is always a real `BaseConvexClient` under the hood.
28
- const syncAsBaseConvexClient = (sync: BaseConvexClientInterface) => {
29
- if (!(sync instanceof BaseConvexClient)) {
30
- throw new Error("Expected `sync` to be a `BaseConvexClient`");
31
- }
32
- return sync;
33
- };
34
-
35
- test("setAuth legacy signature typechecks and doesn't throw", async () => {
36
- const convex = new ConvexReactClient("https://127.0.0.1:3001");
37
- // We're moving towards removing the Promise, but for backwards compatibility
38
- // it's still here now.
39
- await convex.setAuth(async () => "foo");
40
- });
41
-
42
- test("ConvexProviderWithAuth works", async () => {
43
- // This is our fake ProviderX state
44
- const AuthProviderXContext = createContext<{
45
- isLoading: boolean;
46
- isAuthenticated: boolean;
47
- getToken: (args: { ignoreCache: boolean }) => Promise<string | null>;
48
- }>(null as any);
49
-
50
- // Fake ProviderX React hook
51
- const useProviderXAuth = () => {
52
- return useContext(AuthProviderXContext);
53
- };
54
-
55
- // What our users would have to write, this is the same as in docs
56
- // but works in TypeScript. We should transpile this back to JS
57
- // and use it as a snippet in docs.
58
- function useAuthFromProviderX() {
59
- const { isLoading, isAuthenticated, getToken } = useProviderXAuth();
60
- const fetchAccessToken = useCallback(
61
- async ({ forceRefreshToken }: { forceRefreshToken: boolean }) => {
62
- // Here you can do whatever transformation to get the ID Token
63
- // or null
64
- // Make sure to fetch a new token when `forceRefreshToken` is true
65
- return await getToken({ ignoreCache: forceRefreshToken });
66
- },
67
- // If `getToken` isn't correctly memoized
68
- // remove it from this dependency array
69
- [getToken],
70
- );
71
- return useMemo(
72
- () => ({
73
- // Whether the auth provider is in a loading state
74
- isLoading: isLoading,
75
- // Whether the auth provider has the user signed in
76
- isAuthenticated: isAuthenticated ?? false,
77
- // The async function to fetch the ID token
78
- fetchAccessToken,
79
- }),
80
- [isLoading, isAuthenticated, fetchAccessToken],
81
- );
82
- }
83
-
84
- const convex = new ConvexReactClient("https://127.0.0.1:3001");
85
-
86
- // Our app will mirror the Convex auth state
87
- const App = () => {
88
- const { isLoading, isAuthenticated } = useConvexAuth();
89
- return (
90
- <>
91
- {isLoading
92
- ? "Loading..."
93
- : isAuthenticated
94
- ? "Authenticated"
95
- : "Unauthenticated"}
96
- </>
97
- );
98
- };
99
-
100
- const element = (
101
- <ConvexProviderWithAuth client={convex} useAuth={useAuthFromProviderX}>
102
- <App />
103
- </ConvexProviderWithAuth>
104
- );
105
-
106
- const { rerender } = render(
107
- <AuthProviderXContext.Provider
108
- value={{
109
- isLoading: true,
110
- isAuthenticated: false,
111
- getToken: async () => null,
112
- }}
113
- >
114
- {element}
115
- </AuthProviderXContext.Provider>,
116
- );
117
- expect(screen.getByText("Loading...")).toBeDefined();
118
-
119
- const token = jwtEncode({ iat: 1234500, exp: 1234500 + 30 }, "secret");
120
-
121
- rerender(
122
- <AuthProviderXContext.Provider
123
- value={{
124
- isLoading: false,
125
- isAuthenticated: true,
126
- getToken: async () => token,
127
- }}
128
- >
129
- {element}
130
- </AuthProviderXContext.Provider>,
131
- );
132
- expect(screen.getByText("Loading...")).toBeDefined();
133
-
134
- vi.runOnlyPendingTimers();
135
-
136
- await flushPromises();
137
-
138
- mockServerConfirmsAuth(convex, 0);
139
-
140
- expect(screen.getByText("Authenticated")).toBeDefined();
141
- });
142
-
143
- // This is no longer really possible, because
144
- // we wait on server response before scheduling token refetch,
145
- // and the server currently requires JWT tokens.
146
- test("Tokens must be valid JWT", async () => {
147
- const client = new ConvexReactClient("https://127.0.0.1:3001");
148
- const consoleSpy = vi
149
- .spyOn(global.console, "error")
150
- .mockImplementation(() => {
151
- // Do nothing
152
- });
153
-
154
- let tokenId = 0;
155
- void client.setAuth(
156
- async () => "foo" + tokenId++, // simulate a new token on every fetch
157
- () => {
158
- // Do nothing
159
- },
160
- );
161
-
162
- // Wait for token
163
- await flushPromises();
164
-
165
- // Server confirms it
166
- mockServerConfirmsAuth(client, 0);
167
-
168
- // Wait for token with `forceRefreshToken: true`
169
- await flushPromises();
170
-
171
- // Server confirms it
172
- mockServerConfirmsAuth(client, 1);
173
-
174
- expect(consoleSpy).toHaveBeenCalledWith(
175
- "Auth token is not a valid JWT, cannot refetch the token",
176
- );
177
- });
178
-
179
- test("Tokens are used to schedule refetch", async () => {
180
- const client = new ConvexReactClient("https://127.0.0.1:3001");
181
- const tokenLifetimeSeconds = 60;
182
- let tokenId = 0;
183
- const tokenFetcher = vi.fn(async () =>
184
- jwtEncode(
185
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
186
- "secret" + tokenId++, // simulate a new token on every fetch
187
- ),
188
- );
189
- void client.setAuth(tokenFetcher, () => {
190
- // Do nothing
191
- });
192
-
193
- // Wait for token
194
- await flushPromises();
195
-
196
- // Server confirms it
197
- mockServerConfirmsAuth(client, 0);
198
-
199
- // Wait for token with `forceRefreshToken: true`
200
- await flushPromises();
201
-
202
- // Confirm refetched token
203
- mockServerConfirmsAuth(client, 1);
204
-
205
- expect(tokenFetcher).toHaveBeenCalledTimes(2);
206
-
207
- // Check that next refetch happens in time
208
- vi.advanceTimersByTime(tokenLifetimeSeconds * 1000);
209
- expect(tokenFetcher).toHaveBeenCalledTimes(3);
210
- });
211
-
212
- function mockServerConfirmsAuth(
213
- client: ConvexReactClient,
214
- oldIdentityVersion: number,
215
- clientClockSkew?: number,
216
- ) {
217
- act(() => {
218
- const querySetVersion = syncAsBaseConvexClient(client.sync)[
219
- "remoteQuerySet"
220
- ]["version"];
221
- syncAsBaseConvexClient(client.sync)["authenticationManager"].onTransition({
222
- type: "Transition",
223
- startVersion: {
224
- ...querySetVersion,
225
- identity: oldIdentityVersion,
226
- },
227
- endVersion: {
228
- ...querySetVersion,
229
- identity: oldIdentityVersion + 1,
230
- },
231
- modifications: [],
232
- ...(clientClockSkew !== undefined ? { clientClockSkew } : {}),
233
- });
234
- });
235
- }
236
-
237
- test("isRefreshing reflects reauthentication in React tree", async () => {
238
- const AuthProviderXContext = createContext<{
239
- isLoading: boolean;
240
- isAuthenticated: boolean;
241
- getToken: (args: { ignoreCache: boolean }) => Promise<string | null>;
242
- }>(null as any);
243
-
244
- const useProviderXAuth = () => useContext(AuthProviderXContext);
245
-
246
- function useAuthFromProviderX() {
247
- const { isLoading, isAuthenticated, getToken } = useProviderXAuth();
248
- const fetchAccessToken = useCallback(
249
- async ({ forceRefreshToken }: { forceRefreshToken: boolean }) => {
250
- return await getToken({ ignoreCache: forceRefreshToken });
251
- },
252
- [getToken],
253
- );
254
- return useMemo(
255
- () => ({
256
- isLoading,
257
- isAuthenticated: isAuthenticated ?? false,
258
- fetchAccessToken,
259
- }),
260
- [isLoading, isAuthenticated, fetchAccessToken],
261
- );
262
- }
263
-
264
- const convex = new ConvexReactClient("https://127.0.0.1:3001");
265
-
266
- const App = () => {
267
- const { isLoading, isAuthenticated, isRefreshing } = useConvexAuth();
268
- return (
269
- <>
270
- {isLoading
271
- ? "Loading..."
272
- : isAuthenticated
273
- ? "Authenticated"
274
- : "Unauthenticated"}
275
- {isRefreshing && " (Refreshing)"}
276
- </>
277
- );
278
- };
279
-
280
- const tokenLifetimeSeconds = 60;
281
- let tokenId = 0;
282
- const getToken = vi.fn(async () =>
283
- jwtEncode(
284
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
285
- "secret" + tokenId++,
286
- ),
287
- );
288
-
289
- const element = (
290
- <ConvexProviderWithAuth client={convex} useAuth={useAuthFromProviderX}>
291
- <App />
292
- </ConvexProviderWithAuth>
293
- );
294
-
295
- const { container } = render(
296
- <AuthProviderXContext.Provider
297
- value={{
298
- isLoading: false,
299
- isAuthenticated: true,
300
- getToken,
301
- }}
302
- >
303
- {element}
304
- </AuthProviderXContext.Provider>,
305
- );
306
- const view = within(container);
307
-
308
- // Get through initial auth. Background token rotation is silent, so no
309
- // Refreshing flash should appear during this sequence.
310
- await flushPromises();
311
- mockServerConfirmsAuth(convex, 0);
312
- await flushPromises();
313
- mockServerConfirmsAuth(convex, 1);
314
-
315
- expect(view.getByText("Authenticated")).toBeDefined();
316
- expect(view.queryByText(/Refreshing/)).toBeNull();
317
-
318
- // Advancing the scheduled refresh timer must remain silent in the UI.
319
- act(() => {
320
- vi.advanceTimersByTime(tokenLifetimeSeconds * 1000);
321
- });
322
- expect(view.queryByText(/Refreshing/)).toBeNull();
323
-
324
- await flushPromises();
325
- mockServerConfirmsAuth(convex, 2);
326
- expect(view.queryByText(/Refreshing/)).toBeNull();
327
-
328
- // Server rejects a token mid-session, triggering reauthentication.
329
- act(() => {
330
- syncAsBaseConvexClient(convex.sync)["authenticationManager"].onAuthError({
331
- type: "AuthError",
332
- error: "token expired",
333
- baseVersion: 2,
334
- authUpdateAttempted: false,
335
- });
336
- });
337
-
338
- // Socket is paused while we fetch a new token, but the user is still
339
- // locally authenticated.
340
- expect(view.getByText(/Refreshing/)).toBeDefined();
341
- expect(view.getByText(/Authenticated/)).toBeDefined();
342
-
343
- await flushPromises();
344
- mockServerConfirmsAuth(convex, 3);
345
-
346
- expect(view.queryByText(/Refreshing/)).toBeNull();
347
- expect(view.getByText("Authenticated")).toBeDefined();
348
-
349
- await convex.close();
350
- });
351
-
352
- test("isRefreshing becomes false when reauth fetch fails", async () => {
353
- const client = new ConvexReactClient("https://127.0.0.1:3001");
354
- const tokenLifetimeSeconds = 60;
355
- let tokenId = 0;
356
-
357
- // First two calls (initial cached + initial fresh) succeed; the reauth
358
- // attempt returns null to simulate the token fetcher failing.
359
- const tokenFetcher = vi.fn(async () => {
360
- if (tokenId++ < 2) {
361
- return jwtEncode(
362
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
363
- "secret" + tokenId,
364
- );
365
- }
366
- return null;
367
- });
368
-
369
- const onRefreshChange = vi.fn();
370
- void client.setAuth(tokenFetcher, () => {}, onRefreshChange);
371
-
372
- await flushPromises();
373
- mockServerConfirmsAuth(client, 0);
374
- await flushPromises();
375
- mockServerConfirmsAuth(client, 1);
376
-
377
- onRefreshChange.mockClear();
378
-
379
- // Server rejects the token; tryToReauthenticate runs but the fetcher
380
- // returns null on its retry.
381
- syncAsBaseConvexClient(client.sync)["authenticationManager"].onAuthError({
382
- type: "AuthError",
383
- error: "token expired",
384
- baseVersion: 1,
385
- authUpdateAttempted: false,
386
- });
387
- await flushPromises();
388
-
389
- expect(onRefreshChange).toHaveBeenCalledWith(true);
390
- expect(onRefreshChange).toHaveBeenCalledWith(false);
391
-
392
- await client.close();
393
- });
394
-
395
- test("isRefreshing is not set during initial token fetch (no cached token)", async () => {
396
- const client = new ConvexReactClient("https://127.0.0.1:3001");
397
- const tokenLifetimeSeconds = 60;
398
- let tokenId = 0;
399
-
400
- // Return null on first call (no cached token), valid tokens afterwards
401
- const tokenFetcher = vi.fn(
402
- async ({ forceRefreshToken }: { forceRefreshToken: boolean }) => {
403
- if (!forceRefreshToken) {
404
- return null; // No cached token available
405
- }
406
- return jwtEncode(
407
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
408
- "secret" + tokenId++,
409
- );
410
- },
411
- );
412
-
413
- const onRefreshChange = vi.fn();
414
- void client.setAuth(tokenFetcher, () => {}, onRefreshChange);
415
-
416
- // Wait for initial (cached) fetch - returns null, enters initialRefetch
417
- await flushPromises();
418
-
419
- // Wait for force-refresh fetch in initialRefetch state
420
- await flushPromises();
421
-
422
- // onRefreshChange should NOT have been called during the initialRefetch path,
423
- // because "refreshing" implies re-acquiring a token that already existed.
424
- expect(onRefreshChange).not.toHaveBeenCalledWith(true);
425
-
426
- // Server confirms the fresh token
427
- mockServerConfirmsAuth(client, 0);
428
-
429
- await client.close();
430
- });
431
-
432
- test("isFromOutdatedConfig during reauth resets isRefreshing via resetAuthState", async () => {
433
- const client = new ConvexReactClient("https://127.0.0.1:3001");
434
- const tokenLifetimeSeconds = 60;
435
- let tokenId = 0;
436
- const tokenFetcher = vi.fn(async () =>
437
- jwtEncode(
438
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
439
- "secret" + tokenId++,
440
- ),
441
- );
442
-
443
- const onRefreshChange = vi.fn();
444
- void client.setAuth(tokenFetcher, () => {}, onRefreshChange);
445
-
446
- await flushPromises();
447
- mockServerConfirmsAuth(client, 0);
448
- await flushPromises();
449
- mockServerConfirmsAuth(client, 1);
450
-
451
- onRefreshChange.mockClear();
452
-
453
- // Server rejects the token, kicking off tryToReauthenticate.
454
- syncAsBaseConvexClient(client.sync)["authenticationManager"].onAuthError({
455
- type: "AuthError",
456
- error: "token expired",
457
- baseVersion: 1,
458
- authUpdateAttempted: false,
459
- });
460
-
461
- expect(onRefreshChange).toHaveBeenCalledWith(true);
462
-
463
- // Call setAuth again while the reauth fetch is in flight. This bumps
464
- // configVersion via resetAuthState, which also notifies false for the
465
- // old config before transitioning to noAuth.
466
- const onRefreshChange2 = vi.fn();
467
- void client.setAuth(tokenFetcher, () => {}, onRefreshChange2);
468
-
469
- expect(onRefreshChange).toHaveBeenCalledWith(false);
470
-
471
- await flushPromises();
472
-
473
- await client.close();
474
- });
475
-
476
- test("isRefreshing is true during reauthentication after auth error", async () => {
477
- const client = new ConvexReactClient("https://127.0.0.1:3001");
478
- const tokenLifetimeSeconds = 60;
479
- let tokenId = 0;
480
- const tokenFetcher = vi.fn(async () =>
481
- jwtEncode(
482
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
483
- "secret" + tokenId++,
484
- ),
485
- );
486
-
487
- const onRefreshChange = vi.fn();
488
- void client.setAuth(tokenFetcher, () => {}, onRefreshChange);
489
-
490
- // Wait for tokens and confirm
491
- await flushPromises();
492
- mockServerConfirmsAuth(client, 0);
493
- await flushPromises();
494
- mockServerConfirmsAuth(client, 1);
495
-
496
- // Clear mock
497
- onRefreshChange.mockClear();
498
-
499
- // Simulate auth error from server
500
- act(() => {
501
- syncAsBaseConvexClient(client.sync)["authenticationManager"].onAuthError({
502
- type: "AuthError",
503
- error: "token expired",
504
- baseVersion: 1,
505
- authUpdateAttempted: false,
506
- });
507
- });
508
-
509
- // Should have notified refreshing started
510
- expect(onRefreshChange).toHaveBeenCalledWith(true);
511
-
512
- // Wait for reauth token fetch
513
- await flushPromises();
514
-
515
- // Server confirms new token
516
- mockServerConfirmsAuth(client, 2);
517
-
518
- // Should have notified refreshing ended
519
- expect(onRefreshChange).toHaveBeenCalledWith(false);
520
-
521
- await client.close();
522
- });
523
-
524
- test("stop() during reauth notifies isRefreshing false", async () => {
525
- const client = new ConvexReactClient("https://127.0.0.1:3001");
526
- const tokenLifetimeSeconds = 60;
527
- let tokenId = 0;
528
- const tokenFetcher = vi.fn(async () =>
529
- jwtEncode(
530
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
531
- "secret" + tokenId++,
532
- ),
533
- );
534
-
535
- const onRefreshChange = vi.fn();
536
- void client.setAuth(tokenFetcher, () => {}, onRefreshChange);
537
-
538
- await flushPromises();
539
- mockServerConfirmsAuth(client, 0);
540
- await flushPromises();
541
- mockServerConfirmsAuth(client, 1);
542
-
543
- onRefreshChange.mockClear();
544
-
545
- // Server rejects the token so isRefreshing becomes true.
546
- syncAsBaseConvexClient(client.sync)["authenticationManager"].onAuthError({
547
- type: "AuthError",
548
- error: "token expired",
549
- baseVersion: 1,
550
- authUpdateAttempted: false,
551
- });
552
- expect(onRefreshChange).toHaveBeenCalledWith(true);
553
-
554
- // Closing the client calls stop() on the auth manager, which calls
555
- // resetAuthState() and should notify false.
556
- await client.close();
557
-
558
- expect(onRefreshChange).toHaveBeenCalledWith(false);
559
- });
560
-
561
- // --- initialAuthTokenReuse tests ---
562
- // When enabled, the cached token is reused after server confirmation
563
- // (no immediate fresh-token fetch), and the refetch is scheduled using
564
- // the server's clientClockSkew to estimate remaining lifetime.
565
- // The server computes clientClockSkew = clientTs - serverReceiveTs:
566
- // negative means client behind, positive means ahead. Connect latency
567
- // makes the skew more negative (conservative).
568
-
569
- test("initialAuthTokenReuse: sends only one Authenticate", async () => {
570
- const client = new ConvexReactClient("https://127.0.0.1:3001", {
571
- initialAuthTokenReuse: true,
572
- });
573
- const tokenLifetimeSeconds = 60;
574
- let tokenId = 0;
575
- const tokenFetcher = vi.fn(async () =>
576
- jwtEncode(
577
- { iat: 1234500, exp: 1234500 + tokenLifetimeSeconds },
578
- "secret" + tokenId++,
579
- ),
580
- );
581
-
582
- const sendMessageSpy = vi.spyOn(
583
- syncAsBaseConvexClient(client.sync)["webSocketManager"],
584
- "sendMessage",
585
- );
586
-
587
- const onAuthChange = vi.fn();
588
- void client.setAuth(tokenFetcher, onAuthChange);
589
-
590
- await flushPromises();
591
- mockServerConfirmsAuth(client, 0);
592
- await flushPromises();
593
-
594
- expect(onAuthChange).toHaveBeenCalledWith(true);
595
-
596
- const authenticateMessages = sendMessageSpy.mock.calls.filter(
597
- ([msg]) => msg.type === "Authenticate",
598
- );
599
- expect(authenticateMessages).toHaveLength(1);
600
-
601
- await client.close();
602
- });
603
-
604
- test("initialAuthTokenReuse: clock skew adjusts schedule for partially-expired token", async () => {
605
- const client = new ConvexReactClient("https://127.0.0.1:3001", {
606
- initialAuthTokenReuse: true,
607
- });
608
- const defaultLeewaySeconds = 10;
609
- const tokenLifetimeSeconds = 60;
610
- const tokenAgeOnServer = 30;
611
- const clientClockSkewMs = 0;
612
- const clientNow = Date.now() / 1000;
613
- const serverNow = clientNow;
614
- const tokenFetcher = vi.fn(async () =>
615
- jwtEncode(
616
- {
617
- iat: serverNow - tokenAgeOnServer,
618
- exp: serverNow - tokenAgeOnServer + tokenLifetimeSeconds,
619
- },
620
- "secret",
621
- ),
622
- );
623
- void client.setAuth(tokenFetcher, () => {});
624
-
625
- await flushPromises();
626
- mockServerConfirmsAuth(client, 0, clientClockSkewMs);
627
-
628
- expect(tokenFetcher).toHaveBeenCalledTimes(1);
629
-
630
- const expectedDelay =
631
- (tokenLifetimeSeconds - tokenAgeOnServer - defaultLeewaySeconds) * 1000;
632
-
633
- vi.advanceTimersByTime(expectedDelay - 1);
634
- expect(tokenFetcher).toHaveBeenCalledTimes(1);
635
-
636
- vi.advanceTimersByTime(1);
637
- expect(tokenFetcher).toHaveBeenCalledTimes(2);
638
- });
639
-
640
- test("initialAuthTokenReuse: clock skew triggers immediate refetch for nearly-expired token", async () => {
641
- const client = new ConvexReactClient("https://127.0.0.1:3001", {
642
- initialAuthTokenReuse: true,
643
- });
644
- const tokenLifetimeSeconds = 60;
645
- const clientClockSkewMs = -50_000;
646
- const clientNow = Date.now() / 1000;
647
- const serverNow = clientNow - clientClockSkewMs / 1000;
648
- const tokenFetcher = vi.fn(async () =>
649
- jwtEncode(
650
- {
651
- iat: serverNow - 55,
652
- exp: serverNow - 55 + tokenLifetimeSeconds,
653
- },
654
- "secret",
655
- ),
656
- );
657
- void client.setAuth(tokenFetcher, () => {});
658
-
659
- await flushPromises();
660
- mockServerConfirmsAuth(client, 0, clientClockSkewMs);
661
-
662
- expect(tokenFetcher).toHaveBeenCalledTimes(1);
663
-
664
- vi.advanceTimersByTime(1);
665
- expect(tokenFetcher).toHaveBeenCalledTimes(2);
666
- });
667
-
668
- test("initialAuthTokenReuse: clock skew corrects for client clock behind server", async () => {
669
- const client = new ConvexReactClient("https://127.0.0.1:3001", {
670
- initialAuthTokenReuse: true,
671
- });
672
- const defaultLeewaySeconds = 10;
673
- const tokenLifetimeSeconds = 60;
674
- const tokenAgeOnServer = 30;
675
- const clientClockSkewMs = -20_000;
676
- const clientNow = Date.now() / 1000;
677
- const serverNow = clientNow - clientClockSkewMs / 1000;
678
- const tokenFetcher = vi.fn(async () =>
679
- jwtEncode(
680
- {
681
- iat: serverNow - tokenAgeOnServer,
682
- exp: serverNow - tokenAgeOnServer + tokenLifetimeSeconds,
683
- },
684
- "secret",
685
- ),
686
- );
687
- void client.setAuth(tokenFetcher, () => {});
688
-
689
- await flushPromises();
690
- mockServerConfirmsAuth(client, 0, clientClockSkewMs);
691
-
692
- expect(tokenFetcher).toHaveBeenCalledTimes(1);
693
-
694
- const expectedDelay =
695
- (tokenLifetimeSeconds - tokenAgeOnServer - defaultLeewaySeconds) * 1000;
696
-
697
- vi.advanceTimersByTime(expectedDelay - 1);
698
- expect(tokenFetcher).toHaveBeenCalledTimes(1);
699
-
700
- vi.advanceTimersByTime(1);
701
- expect(tokenFetcher).toHaveBeenCalledTimes(2);
702
- });