convex 1.44.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 (577) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/convexExport.js +1 -1
  5. package/dist/cjs/cli/convexExport.js.map +1 -1
  6. package/dist/cjs/cli/index.js +2 -32
  7. package/dist/cjs/cli/index.js.map +2 -2
  8. package/dist/cjs/cli/lib/api.js +11 -5
  9. package/dist/cjs/cli/lib/api.js.map +2 -2
  10. package/dist/cjs/cli/lib/convexExport.js +12 -1
  11. package/dist/cjs/cli/lib/convexExport.js.map +2 -2
  12. package/dist/cjs/cli/lib/dashboard.js.map +2 -2
  13. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  14. package/dist/cjs/cli/lib/localDeployment/upgrade.js +23 -188
  15. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  16. package/dist/cjs/cli/lib/mcp/tools/index.js.map +1 -1
  17. package/dist/cjs/cli/mcp.js +60 -63
  18. package/dist/cjs/cli/mcp.js.map +2 -2
  19. package/dist/cjs/index.js +1 -1
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  22. package/dist/cjs-types/cli/lib/convexExport.d.ts +1 -0
  23. package/dist/cjs-types/cli/lib/convexExport.d.ts.map +1 -1
  24. package/dist/cjs-types/cli/lib/dashboard.d.ts.map +1 -1
  25. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  26. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  27. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  28. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  29. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts +1 -1
  30. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  31. package/dist/cjs-types/cli/mcp.d.ts +3 -0
  32. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  33. package/dist/cjs-types/index.d.ts +1 -1
  34. package/dist/cjs-types/index.d.ts.map +1 -1
  35. package/dist/cli.bundle.cjs +25565 -21249
  36. package/dist/cli.bundle.cjs.map +4 -4
  37. package/dist/esm/cli/convexExport.js +1 -1
  38. package/dist/esm/cli/convexExport.js.map +1 -1
  39. package/dist/esm/cli/index.js +2 -32
  40. package/dist/esm/cli/index.js.map +2 -2
  41. package/dist/esm/cli/lib/api.js +11 -5
  42. package/dist/esm/cli/lib/api.js.map +2 -2
  43. package/dist/esm/cli/lib/convexExport.js +16 -3
  44. package/dist/esm/cli/lib/convexExport.js.map +2 -2
  45. package/dist/esm/cli/lib/dashboard.js.map +2 -2
  46. package/dist/esm/cli/lib/localDeployment/upgrade.js +22 -190
  47. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  48. package/dist/esm/cli/lib/mcp/tools/index.js.map +1 -1
  49. package/dist/esm/cli/mcp.js +60 -67
  50. package/dist/esm/cli/mcp.js.map +2 -2
  51. package/dist/esm/index.js +1 -1
  52. package/dist/esm/index.js.map +1 -1
  53. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  54. package/dist/esm-types/cli/lib/convexExport.d.ts +1 -0
  55. package/dist/esm-types/cli/lib/convexExport.d.ts.map +1 -1
  56. package/dist/esm-types/cli/lib/dashboard.d.ts.map +1 -1
  57. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  58. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  59. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  60. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  61. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts +1 -1
  62. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  63. package/dist/esm-types/cli/mcp.d.ts +3 -0
  64. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  65. package/dist/esm-types/index.d.ts +1 -1
  66. package/dist/esm-types/index.d.ts.map +1 -1
  67. package/dist/react.bundle.js +1 -1
  68. package/dist/react.bundle.js.map +1 -1
  69. package/package.json +3 -3
  70. package/src/cli/convexExport.ts +1 -1
  71. package/src/cli/index.ts +2 -35
  72. package/src/cli/lib/api.ts +11 -5
  73. package/src/cli/lib/convexExport.ts +21 -0
  74. package/src/cli/lib/dashboard.ts +2 -0
  75. package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
  76. package/src/cli/lib/localDeployment/upgrade.ts +34 -207
  77. package/src/cli/lib/mcp/tools/index.ts +1 -1
  78. package/src/cli/mcp.ts +64 -72
  79. package/src/index.ts +1 -1
  80. package/dist/cjs-types/browser/http_client.test.d.ts +0 -2
  81. package/dist/cjs-types/browser/http_client.test.d.ts.map +0 -1
  82. package/dist/cjs-types/browser/query_options.test.d.ts +0 -2
  83. package/dist/cjs-types/browser/query_options.test.d.ts.map +0 -1
  84. package/dist/cjs-types/browser/simple_client.test.d.ts +0 -2
  85. package/dist/cjs-types/browser/simple_client.test.d.ts.map +0 -1
  86. package/dist/cjs-types/browser/sync/client.test.d.ts +0 -5
  87. package/dist/cjs-types/browser/sync/client.test.d.ts.map +0 -1
  88. package/dist/cjs-types/browser/sync/client_node.test.d.ts +0 -2
  89. package/dist/cjs-types/browser/sync/client_node.test.d.ts.map +0 -1
  90. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  91. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  92. package/dist/cjs-types/browser/sync/local_state.test.d.ts +0 -2
  93. package/dist/cjs-types/browser/sync/local_state.test.d.ts.map +0 -1
  94. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  95. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  96. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  97. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  98. package/dist/cjs-types/browser/sync/protocol.test.d.ts +0 -5
  99. package/dist/cjs-types/browser/sync/protocol.test.d.ts.map +0 -1
  100. package/dist/cjs-types/browser/sync/request_manager.test.d.ts +0 -2
  101. package/dist/cjs-types/browser/sync/request_manager.test.d.ts.map +0 -1
  102. package/dist/cjs-types/bundler/fs.test.d.ts +0 -2
  103. package/dist/cjs-types/bundler/fs.test.d.ts.map +0 -1
  104. package/dist/cjs-types/bundler/index.test.d.ts +0 -2
  105. package/dist/cjs-types/bundler/index.test.d.ts.map +0 -1
  106. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts +0 -2
  107. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  108. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts +0 -2
  109. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  110. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts +0 -2
  111. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  112. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  113. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  114. package/dist/cjs-types/cli/configure.test.d.ts +0 -2
  115. package/dist/cjs-types/cli/configure.test.d.ts.map +0 -1
  116. package/dist/cjs-types/cli/deploymentCreate.test.d.ts +0 -2
  117. package/dist/cjs-types/cli/deploymentCreate.test.d.ts.map +0 -1
  118. package/dist/cjs-types/cli/deploymentSelect.test.d.ts +0 -2
  119. package/dist/cjs-types/cli/deploymentSelect.test.d.ts.map +0 -1
  120. package/dist/cjs-types/cli/deploymentSelection.test.d.ts +0 -2
  121. package/dist/cjs-types/cli/deploymentSelection.test.d.ts.map +0 -1
  122. package/dist/cjs-types/cli/deploymentToken.test.d.ts +0 -2
  123. package/dist/cjs-types/cli/deploymentToken.test.d.ts.map +0 -1
  124. package/dist/cjs-types/cli/dev.test.d.ts +0 -2
  125. package/dist/cjs-types/cli/dev.test.d.ts.map +0 -1
  126. package/dist/cjs-types/cli/envDefault.test.d.ts +0 -2
  127. package/dist/cjs-types/cli/envDefault.test.d.ts.map +0 -1
  128. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  129. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  130. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  131. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  132. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  133. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  134. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  135. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  136. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  137. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  138. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  139. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  140. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  141. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  142. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  143. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  144. package/dist/cjs-types/cli/lib/codegen.test.d.ts +0 -2
  145. package/dist/cjs-types/cli/lib/codegen.test.d.ts.map +0 -1
  146. package/dist/cjs-types/cli/lib/components.test.d.ts +0 -2
  147. package/dist/cjs-types/cli/lib/components.test.d.ts.map +0 -1
  148. package/dist/cjs-types/cli/lib/config.test.d.ts +0 -2
  149. package/dist/cjs-types/cli/lib/config.test.d.ts.map +0 -1
  150. package/dist/cjs-types/cli/lib/deployment.test.d.ts +0 -2
  151. package/dist/cjs-types/cli/lib/deployment.test.d.ts.map +0 -1
  152. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  153. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  154. package/dist/cjs-types/cli/lib/env.test.d.ts +0 -2
  155. package/dist/cjs-types/cli/lib/env.test.d.ts.map +0 -1
  156. package/dist/cjs-types/cli/lib/expiration.test.d.ts +0 -2
  157. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +0 -1
  158. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  159. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  160. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  161. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  162. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  163. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  164. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts +0 -2
  165. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  166. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +0 -2
  167. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  168. package/dist/cjs-types/cli/lib/indexes.test.d.ts +0 -2
  169. package/dist/cjs-types/cli/lib/indexes.test.d.ts.map +0 -1
  170. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  171. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  172. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  173. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  174. package/dist/cjs-types/cli/lib/run.test.d.ts +0 -2
  175. package/dist/cjs-types/cli/lib/run.test.d.ts.map +0 -1
  176. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts +0 -2
  177. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  178. package/dist/cjs-types/cli/lib/typecheck.test.d.ts +0 -2
  179. package/dist/cjs-types/cli/lib/typecheck.test.d.ts.map +0 -1
  180. package/dist/cjs-types/cli/lib/updates.test.d.ts +0 -2
  181. package/dist/cjs-types/cli/lib/updates.test.d.ts.map +0 -1
  182. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts +0 -2
  183. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  184. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts +0 -2
  185. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  186. package/dist/cjs-types/cli/lib/versionApi.test.d.ts +0 -2
  187. package/dist/cjs-types/cli/lib/versionApi.test.d.ts.map +0 -1
  188. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  189. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  190. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts +0 -2
  191. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  192. package/dist/cjs-types/cli/login.test.d.ts +0 -2
  193. package/dist/cjs-types/cli/login.test.d.ts.map +0 -1
  194. package/dist/cjs-types/common/index.test.d.ts +0 -2
  195. package/dist/cjs-types/common/index.test.d.ts.map +0 -1
  196. package/dist/cjs-types/nextjs/nextjs.test.d.ts +0 -2
  197. package/dist/cjs-types/nextjs/nextjs.test.d.ts.map +0 -1
  198. package/dist/cjs-types/react/ConvexAuthState.test.d.ts +0 -2
  199. package/dist/cjs-types/react/ConvexAuthState.test.d.ts.map +0 -1
  200. package/dist/cjs-types/react/auth_helpers.test.d.ts +0 -2
  201. package/dist/cjs-types/react/auth_helpers.test.d.ts.map +0 -1
  202. package/dist/cjs-types/react/auth_websocket.test.d.ts +0 -2
  203. package/dist/cjs-types/react/auth_websocket.test.d.ts.map +0 -1
  204. package/dist/cjs-types/react/client.test.d.ts +0 -2
  205. package/dist/cjs-types/react/client.test.d.ts.map +0 -1
  206. package/dist/cjs-types/react/client_provided_base_client.test.d.ts +0 -2
  207. package/dist/cjs-types/react/client_provided_base_client.test.d.ts.map +0 -1
  208. package/dist/cjs-types/react/queries_observer.test.d.ts +0 -2
  209. package/dist/cjs-types/react/queries_observer.test.d.ts.map +0 -1
  210. package/dist/cjs-types/react/react_node.test.d.ts +0 -2
  211. package/dist/cjs-types/react/react_node.test.d.ts.map +0 -1
  212. package/dist/cjs-types/react/use_paginated_query.test.d.ts +0 -2
  213. package/dist/cjs-types/react/use_paginated_query.test.d.ts.map +0 -1
  214. package/dist/cjs-types/react/use_queries.test.d.ts +0 -5
  215. package/dist/cjs-types/react/use_queries.test.d.ts.map +0 -1
  216. package/dist/cjs-types/react/use_query.test.d.ts +0 -5
  217. package/dist/cjs-types/react/use_query.test.d.ts.map +0 -1
  218. package/dist/cjs-types/react/use_query_object_options.test.d.ts +0 -5
  219. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +0 -1
  220. package/dist/cjs-types/react/use_query_result.test.d.ts +0 -5
  221. package/dist/cjs-types/react/use_query_result.test.d.ts.map +0 -1
  222. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  223. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  224. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  225. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  226. package/dist/cjs-types/server/api.intersect.test.d.ts +0 -2
  227. package/dist/cjs-types/server/api.intersect.test.d.ts.map +0 -1
  228. package/dist/cjs-types/server/api.test.d.ts +0 -2
  229. package/dist/cjs-types/server/api.test.d.ts.map +0 -1
  230. package/dist/cjs-types/server/audit_logging.test.d.ts +0 -2
  231. package/dist/cjs-types/server/audit_logging.test.d.ts.map +0 -1
  232. package/dist/cjs-types/server/components/index.test.d.ts +0 -2
  233. package/dist/cjs-types/server/components/index.test.d.ts.map +0 -1
  234. package/dist/cjs-types/server/cron.test.d.ts +0 -2
  235. package/dist/cjs-types/server/cron.test.d.ts.map +0 -1
  236. package/dist/cjs-types/server/data_model.test.d.ts +0 -2
  237. package/dist/cjs-types/server/data_model.test.d.ts.map +0 -1
  238. package/dist/cjs-types/server/database.test.d.ts +0 -2
  239. package/dist/cjs-types/server/database.test.d.ts.map +0 -1
  240. package/dist/cjs-types/server/database_api.test.d.ts +0 -2
  241. package/dist/cjs-types/server/database_api.test.d.ts.map +0 -1
  242. package/dist/cjs-types/server/filter_builder.test.d.ts +0 -2
  243. package/dist/cjs-types/server/filter_builder.test.d.ts.map +0 -1
  244. package/dist/cjs-types/server/impl/actions_impl.test.d.ts +0 -2
  245. package/dist/cjs-types/server/impl/actions_impl.test.d.ts.map +0 -1
  246. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  247. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  248. package/dist/cjs-types/server/impl/query_impl.test.d.ts +0 -2
  249. package/dist/cjs-types/server/impl/query_impl.test.d.ts.map +0 -1
  250. package/dist/cjs-types/server/pagination.test.d.ts +0 -2
  251. package/dist/cjs-types/server/pagination.test.d.ts.map +0 -1
  252. package/dist/cjs-types/server/query.test.d.ts +0 -2
  253. package/dist/cjs-types/server/query.test.d.ts.map +0 -1
  254. package/dist/cjs-types/server/registration.test.d.ts +0 -2
  255. package/dist/cjs-types/server/registration.test.d.ts.map +0 -1
  256. package/dist/cjs-types/server/router.test.d.ts +0 -2
  257. package/dist/cjs-types/server/router.test.d.ts.map +0 -1
  258. package/dist/cjs-types/server/scheduler.test.d.ts +0 -2
  259. package/dist/cjs-types/server/scheduler.test.d.ts.map +0 -1
  260. package/dist/cjs-types/server/schema.test.d.ts +0 -2
  261. package/dist/cjs-types/server/schema.test.d.ts.map +0 -1
  262. package/dist/cjs-types/test/fake_watch.d.ts +0 -16
  263. package/dist/cjs-types/test/fake_watch.d.ts.map +0 -1
  264. package/dist/cjs-types/test/type_testing.d.ts +0 -9
  265. package/dist/cjs-types/test/type_testing.d.ts.map +0 -1
  266. package/dist/cjs-types/type_utils.test.d.ts +0 -2
  267. package/dist/cjs-types/type_utils.test.d.ts.map +0 -1
  268. package/dist/cjs-types/values/size.test.d.ts +0 -2
  269. package/dist/cjs-types/values/size.test.d.ts.map +0 -1
  270. package/dist/cjs-types/values/validator.test.d.ts +0 -2
  271. package/dist/cjs-types/values/validator.test.d.ts.map +0 -1
  272. package/dist/cjs-types/values/value.test.d.ts +0 -2
  273. package/dist/cjs-types/values/value.test.d.ts.map +0 -1
  274. package/dist/esm-types/browser/http_client.test.d.ts +0 -2
  275. package/dist/esm-types/browser/http_client.test.d.ts.map +0 -1
  276. package/dist/esm-types/browser/query_options.test.d.ts +0 -2
  277. package/dist/esm-types/browser/query_options.test.d.ts.map +0 -1
  278. package/dist/esm-types/browser/simple_client.test.d.ts +0 -2
  279. package/dist/esm-types/browser/simple_client.test.d.ts.map +0 -1
  280. package/dist/esm-types/browser/sync/client.test.d.ts +0 -5
  281. package/dist/esm-types/browser/sync/client.test.d.ts.map +0 -1
  282. package/dist/esm-types/browser/sync/client_node.test.d.ts +0 -2
  283. package/dist/esm-types/browser/sync/client_node.test.d.ts.map +0 -1
  284. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  285. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  286. package/dist/esm-types/browser/sync/local_state.test.d.ts +0 -2
  287. package/dist/esm-types/browser/sync/local_state.test.d.ts.map +0 -1
  288. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  289. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  290. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  291. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  292. package/dist/esm-types/browser/sync/protocol.test.d.ts +0 -5
  293. package/dist/esm-types/browser/sync/protocol.test.d.ts.map +0 -1
  294. package/dist/esm-types/browser/sync/request_manager.test.d.ts +0 -2
  295. package/dist/esm-types/browser/sync/request_manager.test.d.ts.map +0 -1
  296. package/dist/esm-types/bundler/fs.test.d.ts +0 -2
  297. package/dist/esm-types/bundler/fs.test.d.ts.map +0 -1
  298. package/dist/esm-types/bundler/index.test.d.ts +0 -2
  299. package/dist/esm-types/bundler/index.test.d.ts.map +0 -1
  300. package/dist/esm-types/cli/codegen_templates/api.test.d.ts +0 -2
  301. package/dist/esm-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  302. package/dist/esm-types/cli/codegen_templates/common.test.d.ts +0 -2
  303. package/dist/esm-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  304. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts +0 -2
  305. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  306. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  307. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  308. package/dist/esm-types/cli/configure.test.d.ts +0 -2
  309. package/dist/esm-types/cli/configure.test.d.ts.map +0 -1
  310. package/dist/esm-types/cli/deploymentCreate.test.d.ts +0 -2
  311. package/dist/esm-types/cli/deploymentCreate.test.d.ts.map +0 -1
  312. package/dist/esm-types/cli/deploymentSelect.test.d.ts +0 -2
  313. package/dist/esm-types/cli/deploymentSelect.test.d.ts.map +0 -1
  314. package/dist/esm-types/cli/deploymentSelection.test.d.ts +0 -2
  315. package/dist/esm-types/cli/deploymentSelection.test.d.ts.map +0 -1
  316. package/dist/esm-types/cli/deploymentToken.test.d.ts +0 -2
  317. package/dist/esm-types/cli/deploymentToken.test.d.ts.map +0 -1
  318. package/dist/esm-types/cli/dev.test.d.ts +0 -2
  319. package/dist/esm-types/cli/dev.test.d.ts.map +0 -1
  320. package/dist/esm-types/cli/envDefault.test.d.ts +0 -2
  321. package/dist/esm-types/cli/envDefault.test.d.ts.map +0 -1
  322. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  323. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  324. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  325. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  326. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  327. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  328. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  329. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  330. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  331. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  332. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  333. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  334. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  335. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  336. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  337. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  338. package/dist/esm-types/cli/lib/codegen.test.d.ts +0 -2
  339. package/dist/esm-types/cli/lib/codegen.test.d.ts.map +0 -1
  340. package/dist/esm-types/cli/lib/components.test.d.ts +0 -2
  341. package/dist/esm-types/cli/lib/components.test.d.ts.map +0 -1
  342. package/dist/esm-types/cli/lib/config.test.d.ts +0 -2
  343. package/dist/esm-types/cli/lib/config.test.d.ts.map +0 -1
  344. package/dist/esm-types/cli/lib/deployment.test.d.ts +0 -2
  345. package/dist/esm-types/cli/lib/deployment.test.d.ts.map +0 -1
  346. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  347. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  348. package/dist/esm-types/cli/lib/env.test.d.ts +0 -2
  349. package/dist/esm-types/cli/lib/env.test.d.ts.map +0 -1
  350. package/dist/esm-types/cli/lib/expiration.test.d.ts +0 -2
  351. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +0 -1
  352. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  353. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  354. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  355. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  356. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  357. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  358. package/dist/esm-types/cli/lib/fsUtils.test.d.ts +0 -2
  359. package/dist/esm-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  360. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +0 -2
  361. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  362. package/dist/esm-types/cli/lib/indexes.test.d.ts +0 -2
  363. package/dist/esm-types/cli/lib/indexes.test.d.ts.map +0 -1
  364. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  365. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  366. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  367. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  368. package/dist/esm-types/cli/lib/run.test.d.ts +0 -2
  369. package/dist/esm-types/cli/lib/run.test.d.ts.map +0 -1
  370. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts +0 -2
  371. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  372. package/dist/esm-types/cli/lib/typecheck.test.d.ts +0 -2
  373. package/dist/esm-types/cli/lib/typecheck.test.d.ts.map +0 -1
  374. package/dist/esm-types/cli/lib/updates.test.d.ts +0 -2
  375. package/dist/esm-types/cli/lib/updates.test.d.ts.map +0 -1
  376. package/dist/esm-types/cli/lib/utils/hash.test.d.ts +0 -2
  377. package/dist/esm-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  378. package/dist/esm-types/cli/lib/utils/utils.test.d.ts +0 -2
  379. package/dist/esm-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  380. package/dist/esm-types/cli/lib/versionApi.test.d.ts +0 -2
  381. package/dist/esm-types/cli/lib/versionApi.test.d.ts.map +0 -1
  382. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  383. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  384. package/dist/esm-types/cli/lib/workos/workos.test.d.ts +0 -2
  385. package/dist/esm-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  386. package/dist/esm-types/cli/login.test.d.ts +0 -2
  387. package/dist/esm-types/cli/login.test.d.ts.map +0 -1
  388. package/dist/esm-types/common/index.test.d.ts +0 -2
  389. package/dist/esm-types/common/index.test.d.ts.map +0 -1
  390. package/dist/esm-types/nextjs/nextjs.test.d.ts +0 -2
  391. package/dist/esm-types/nextjs/nextjs.test.d.ts.map +0 -1
  392. package/dist/esm-types/react/ConvexAuthState.test.d.ts +0 -2
  393. package/dist/esm-types/react/ConvexAuthState.test.d.ts.map +0 -1
  394. package/dist/esm-types/react/auth_helpers.test.d.ts +0 -2
  395. package/dist/esm-types/react/auth_helpers.test.d.ts.map +0 -1
  396. package/dist/esm-types/react/auth_websocket.test.d.ts +0 -2
  397. package/dist/esm-types/react/auth_websocket.test.d.ts.map +0 -1
  398. package/dist/esm-types/react/client.test.d.ts +0 -2
  399. package/dist/esm-types/react/client.test.d.ts.map +0 -1
  400. package/dist/esm-types/react/client_provided_base_client.test.d.ts +0 -2
  401. package/dist/esm-types/react/client_provided_base_client.test.d.ts.map +0 -1
  402. package/dist/esm-types/react/queries_observer.test.d.ts +0 -2
  403. package/dist/esm-types/react/queries_observer.test.d.ts.map +0 -1
  404. package/dist/esm-types/react/react_node.test.d.ts +0 -2
  405. package/dist/esm-types/react/react_node.test.d.ts.map +0 -1
  406. package/dist/esm-types/react/use_paginated_query.test.d.ts +0 -2
  407. package/dist/esm-types/react/use_paginated_query.test.d.ts.map +0 -1
  408. package/dist/esm-types/react/use_queries.test.d.ts +0 -5
  409. package/dist/esm-types/react/use_queries.test.d.ts.map +0 -1
  410. package/dist/esm-types/react/use_query.test.d.ts +0 -5
  411. package/dist/esm-types/react/use_query.test.d.ts.map +0 -1
  412. package/dist/esm-types/react/use_query_object_options.test.d.ts +0 -5
  413. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +0 -1
  414. package/dist/esm-types/react/use_query_result.test.d.ts +0 -5
  415. package/dist/esm-types/react/use_query_result.test.d.ts.map +0 -1
  416. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  417. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  418. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  419. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  420. package/dist/esm-types/server/api.intersect.test.d.ts +0 -2
  421. package/dist/esm-types/server/api.intersect.test.d.ts.map +0 -1
  422. package/dist/esm-types/server/api.test.d.ts +0 -2
  423. package/dist/esm-types/server/api.test.d.ts.map +0 -1
  424. package/dist/esm-types/server/audit_logging.test.d.ts +0 -2
  425. package/dist/esm-types/server/audit_logging.test.d.ts.map +0 -1
  426. package/dist/esm-types/server/components/index.test.d.ts +0 -2
  427. package/dist/esm-types/server/components/index.test.d.ts.map +0 -1
  428. package/dist/esm-types/server/cron.test.d.ts +0 -2
  429. package/dist/esm-types/server/cron.test.d.ts.map +0 -1
  430. package/dist/esm-types/server/data_model.test.d.ts +0 -2
  431. package/dist/esm-types/server/data_model.test.d.ts.map +0 -1
  432. package/dist/esm-types/server/database.test.d.ts +0 -2
  433. package/dist/esm-types/server/database.test.d.ts.map +0 -1
  434. package/dist/esm-types/server/database_api.test.d.ts +0 -2
  435. package/dist/esm-types/server/database_api.test.d.ts.map +0 -1
  436. package/dist/esm-types/server/filter_builder.test.d.ts +0 -2
  437. package/dist/esm-types/server/filter_builder.test.d.ts.map +0 -1
  438. package/dist/esm-types/server/impl/actions_impl.test.d.ts +0 -2
  439. package/dist/esm-types/server/impl/actions_impl.test.d.ts.map +0 -1
  440. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  441. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  442. package/dist/esm-types/server/impl/query_impl.test.d.ts +0 -2
  443. package/dist/esm-types/server/impl/query_impl.test.d.ts.map +0 -1
  444. package/dist/esm-types/server/pagination.test.d.ts +0 -2
  445. package/dist/esm-types/server/pagination.test.d.ts.map +0 -1
  446. package/dist/esm-types/server/query.test.d.ts +0 -2
  447. package/dist/esm-types/server/query.test.d.ts.map +0 -1
  448. package/dist/esm-types/server/registration.test.d.ts +0 -2
  449. package/dist/esm-types/server/registration.test.d.ts.map +0 -1
  450. package/dist/esm-types/server/router.test.d.ts +0 -2
  451. package/dist/esm-types/server/router.test.d.ts.map +0 -1
  452. package/dist/esm-types/server/scheduler.test.d.ts +0 -2
  453. package/dist/esm-types/server/scheduler.test.d.ts.map +0 -1
  454. package/dist/esm-types/server/schema.test.d.ts +0 -2
  455. package/dist/esm-types/server/schema.test.d.ts.map +0 -1
  456. package/dist/esm-types/test/fake_watch.d.ts +0 -16
  457. package/dist/esm-types/test/fake_watch.d.ts.map +0 -1
  458. package/dist/esm-types/test/type_testing.d.ts +0 -9
  459. package/dist/esm-types/test/type_testing.d.ts.map +0 -1
  460. package/dist/esm-types/type_utils.test.d.ts +0 -2
  461. package/dist/esm-types/type_utils.test.d.ts.map +0 -1
  462. package/dist/esm-types/values/size.test.d.ts +0 -2
  463. package/dist/esm-types/values/size.test.d.ts.map +0 -1
  464. package/dist/esm-types/values/validator.test.d.ts +0 -2
  465. package/dist/esm-types/values/validator.test.d.ts.map +0 -1
  466. package/dist/esm-types/values/value.test.d.ts +0 -2
  467. package/dist/esm-types/values/value.test.d.ts.map +0 -1
  468. package/src/browser/http_client.test.ts +0 -202
  469. package/src/browser/query_options.test.ts +0 -43
  470. package/src/browser/simple_client.test.ts +0 -104
  471. package/src/browser/sync/client.test.ts +0 -44
  472. package/src/browser/sync/client_node.test.ts +0 -1207
  473. package/src/browser/sync/client_node_test_helpers.ts +0 -200
  474. package/src/browser/sync/local_state.test.ts +0 -128
  475. package/src/browser/sync/optimistic_query_set.test.ts +0 -253
  476. package/src/browser/sync/paginated_query_client.test.ts +0 -597
  477. package/src/browser/sync/protocol.test.ts +0 -14
  478. package/src/browser/sync/request_manager.test.ts +0 -273
  479. package/src/bundler/fs.test.ts +0 -86
  480. package/src/bundler/index.test.ts +0 -210
  481. package/src/bundler/test_fixtures/js/project01/bar.js +0 -4
  482. package/src/bundler/test_fixtures/js/project01/file with spaces.js +0 -1
  483. package/src/bundler/test_fixtures/js/project01/foo.js +0 -9
  484. package/src/bundler/test_fixtures/js/project_with_https/https.js +0 -9
  485. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/default.js +0 -3
  486. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/more_code/https.js +0 -5
  487. package/src/bundler/test_fixtures/js/project_with_https_without_router/https.js +0 -1
  488. package/src/bundler/test_fixtures/js/project_with_node_shims/uses_node_shims.js +0 -4
  489. package/src/cli/codegen_templates/api.test.ts +0 -18
  490. package/src/cli/codegen_templates/common.test.ts +0 -52
  491. package/src/cli/codegen_templates/templates.test.ts +0 -16
  492. package/src/cli/codegen_templates/validator_helpers.test.ts +0 -31
  493. package/src/cli/configure.test.ts +0 -138
  494. package/src/cli/deploymentCreate.test.ts +0 -1376
  495. package/src/cli/deploymentSelect.test.ts +0 -1291
  496. package/src/cli/deploymentSelection.test.ts +0 -2546
  497. package/src/cli/deploymentToken.test.ts +0 -397
  498. package/src/cli/dev.test.ts +0 -157
  499. package/src/cli/envDefault.test.ts +0 -495
  500. package/src/cli/lib/__snapshots__/formatTargetedDeployment.test.ts.snap +0 -94
  501. package/src/cli/lib/aiFiles/agentsmd.test.ts +0 -133
  502. package/src/cli/lib/aiFiles/claudemd.test.ts +0 -92
  503. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +0 -50
  504. package/src/cli/lib/aiFiles/index.test.ts +0 -986
  505. package/src/cli/lib/aiFiles/integration.test.ts +0 -692
  506. package/src/cli/lib/aiFiles/prompt.test.ts +0 -202
  507. package/src/cli/lib/aiFiles/state.test.ts +0 -305
  508. package/src/cli/lib/aiFiles/utils.test.ts +0 -50
  509. package/src/cli/lib/codegen.test.ts +0 -49
  510. package/src/cli/lib/components.test.ts +0 -227
  511. package/src/cli/lib/config.test.ts +0 -1026
  512. package/src/cli/lib/deployment.test.ts +0 -85
  513. package/src/cli/lib/deploymentSelector.test.ts +0 -107
  514. package/src/cli/lib/env.test.ts +0 -60
  515. package/src/cli/lib/expiration.test.ts +0 -159
  516. package/src/cli/lib/extractDeploymentNameForWorkOS.test.ts +0 -30
  517. package/src/cli/lib/formatEnvValueForDotfile.test.ts +0 -294
  518. package/src/cli/lib/formatTargetedDeployment.test.ts +0 -281
  519. package/src/cli/lib/fsUtils.test.ts +0 -67
  520. package/src/cli/lib/generateDocs.test.ts +0 -326
  521. package/src/cli/lib/indexes.test.ts +0 -77
  522. package/src/cli/lib/localDeployment/run.test.ts +0 -104
  523. package/src/cli/lib/localDeployment/secrets.test.ts +0 -53
  524. package/src/cli/lib/run.test.ts +0 -54
  525. package/src/cli/lib/runTestFunction.test.ts +0 -84
  526. package/src/cli/lib/typecheck.test.ts +0 -71
  527. package/src/cli/lib/updates.test.ts +0 -157
  528. package/src/cli/lib/utils/hash.test.ts +0 -25
  529. package/src/cli/lib/utils/utils.test.ts +0 -340
  530. package/src/cli/lib/versionApi.test.ts +0 -471
  531. package/src/cli/lib/workos/environmentApi.test.ts +0 -107
  532. package/src/cli/lib/workos/workos.test.ts +0 -242
  533. package/src/cli/login.test.ts +0 -261
  534. package/src/common/README.md +0 -2
  535. package/src/common/index.test.ts +0 -35
  536. package/src/nextjs/nextjs.test.tsx +0 -94
  537. package/src/react/ConvexAuthState.test.tsx +0 -702
  538. package/src/react/auth_helpers.test.tsx +0 -45
  539. package/src/react/auth_websocket.test.tsx +0 -1177
  540. package/src/react/client.test.tsx +0 -261
  541. package/src/react/client_provided_base_client.test.tsx +0 -174
  542. package/src/react/queries_observer.test.ts +0 -176
  543. package/src/react/react_node.test.ts +0 -78
  544. package/src/react/use_paginated_query.test.tsx +0 -1420
  545. package/src/react/use_queries.test.ts +0 -140
  546. package/src/react/use_query.test.ts +0 -71
  547. package/src/react/use_query_object_options.test.ts +0 -51
  548. package/src/react/use_query_result.test.ts +0 -75
  549. package/src/react-auth0/ConvexProviderWithAuth0.test.tsx +0 -17
  550. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +0 -18
  551. package/src/server/README.md +0 -15
  552. package/src/server/api.intersect.test.ts +0 -109
  553. package/src/server/api.test.ts +0 -447
  554. package/src/server/audit_logging.test.ts +0 -131
  555. package/src/server/components/index.test.ts +0 -48
  556. package/src/server/cron.test.ts +0 -58
  557. package/src/server/data_model.test.ts +0 -221
  558. package/src/server/database.test.ts +0 -184
  559. package/src/server/database_api.test.ts +0 -439
  560. package/src/server/filter_builder.test.ts +0 -102
  561. package/src/server/impl/actions_impl.test.ts +0 -59
  562. package/src/server/impl/filter_builder_impl.test.ts +0 -13
  563. package/src/server/impl/query_impl.test.ts +0 -46
  564. package/src/server/pagination.test.ts +0 -49
  565. package/src/server/query.test.ts +0 -112
  566. package/src/server/registration.test.ts +0 -589
  567. package/src/server/router.test.ts +0 -148
  568. package/src/server/scheduler.test.ts +0 -31
  569. package/src/server/schema.test.ts +0 -1081
  570. package/src/test/fake_watch.ts +0 -54
  571. package/src/test/type_testing.ts +0 -21
  572. package/src/type_utils.test.ts +0 -62
  573. package/src/values/size.test.ts +0 -95
  574. package/src/values/validator.test.ts +0 -619
  575. package/src/values/value.test.ts +0 -232
  576. package/src/vendor/README.md +0 -18
  577. 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
- });