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