convex 1.43.0 → 1.45.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/CHANGELOG.md +136 -113
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/codegen_templates/component_server.js +4 -3
  5. package/dist/cjs/cli/codegen_templates/component_server.js.map +2 -2
  6. package/dist/cjs/cli/codegen_templates/server.js +24 -12
  7. package/dist/cjs/cli/codegen_templates/server.js.map +2 -2
  8. package/dist/cjs/cli/convexExport.js +1 -1
  9. package/dist/cjs/cli/convexExport.js.map +1 -1
  10. package/dist/cjs/cli/index.js +2 -32
  11. package/dist/cjs/cli/index.js.map +2 -2
  12. package/dist/cjs/cli/lib/api.js +11 -5
  13. package/dist/cjs/cli/lib/api.js.map +2 -2
  14. package/dist/cjs/cli/lib/convexExport.js +12 -1
  15. package/dist/cjs/cli/lib/convexExport.js.map +2 -2
  16. package/dist/cjs/cli/lib/dashboard.js.map +2 -2
  17. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  18. package/dist/cjs/cli/lib/localDeployment/upgrade.js +23 -188
  19. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  20. package/dist/cjs/cli/lib/login.js +12 -8
  21. package/dist/cjs/cli/lib/login.js.map +2 -2
  22. package/dist/cjs/cli/lib/mcp/tools/index.js.map +1 -1
  23. package/dist/cjs/cli/login.js +52 -7
  24. package/dist/cjs/cli/login.js.map +2 -2
  25. package/dist/cjs/cli/mcp.js +60 -63
  26. package/dist/cjs/cli/mcp.js.map +2 -2
  27. package/dist/cjs/index.js +1 -1
  28. package/dist/cjs/index.js.map +1 -1
  29. package/dist/cjs/react/ConvexAuthState.js +30 -32
  30. package/dist/cjs/react/ConvexAuthState.js.map +2 -2
  31. package/dist/cjs/server/impl/actions_impl.js +12 -0
  32. package/dist/cjs/server/impl/actions_impl.js.map +2 -2
  33. package/dist/cjs/server/index.js +3 -0
  34. package/dist/cjs/server/index.js.map +2 -2
  35. package/dist/cjs/server/schema.js +69 -1
  36. package/dist/cjs/server/schema.js.map +2 -2
  37. package/dist/cjs-types/cli/codegen_templates/component_server.d.ts.map +1 -1
  38. package/dist/cjs-types/cli/codegen_templates/server.d.ts +1 -0
  39. package/dist/cjs-types/cli/codegen_templates/server.d.ts.map +1 -1
  40. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  41. package/dist/cjs-types/cli/lib/convexExport.d.ts +1 -0
  42. package/dist/cjs-types/cli/lib/convexExport.d.ts.map +1 -1
  43. package/dist/cjs-types/cli/lib/dashboard.d.ts.map +1 -1
  44. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  45. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  46. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  47. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  48. package/dist/cjs-types/cli/lib/login.d.ts +5 -0
  49. package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
  50. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts +1 -1
  51. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  52. package/dist/cjs-types/cli/login.d.ts.map +1 -1
  53. package/dist/cjs-types/cli/mcp.d.ts +3 -0
  54. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  55. package/dist/cjs-types/index.d.ts +1 -1
  56. package/dist/cjs-types/index.d.ts.map +1 -1
  57. package/dist/cjs-types/react/ConvexAuthState.d.ts.map +1 -1
  58. package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
  59. package/dist/cjs-types/server/index.d.ts +2 -2
  60. package/dist/cjs-types/server/index.d.ts.map +1 -1
  61. package/dist/cjs-types/server/schema.d.ts +83 -5
  62. package/dist/cjs-types/server/schema.d.ts.map +1 -1
  63. package/dist/cli.bundle.cjs +23775 -18752
  64. package/dist/cli.bundle.cjs.map +4 -4
  65. package/dist/esm/cli/codegen_templates/component_server.js +8 -4
  66. package/dist/esm/cli/codegen_templates/component_server.js.map +2 -2
  67. package/dist/esm/cli/codegen_templates/server.js +22 -11
  68. package/dist/esm/cli/codegen_templates/server.js.map +2 -2
  69. package/dist/esm/cli/convexExport.js +1 -1
  70. package/dist/esm/cli/convexExport.js.map +1 -1
  71. package/dist/esm/cli/index.js +2 -32
  72. package/dist/esm/cli/index.js.map +2 -2
  73. package/dist/esm/cli/lib/api.js +11 -5
  74. package/dist/esm/cli/lib/api.js.map +2 -2
  75. package/dist/esm/cli/lib/convexExport.js +16 -3
  76. package/dist/esm/cli/lib/convexExport.js.map +2 -2
  77. package/dist/esm/cli/lib/dashboard.js.map +2 -2
  78. package/dist/esm/cli/lib/localDeployment/upgrade.js +22 -190
  79. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  80. package/dist/esm/cli/lib/login.js +11 -8
  81. package/dist/esm/cli/lib/login.js.map +2 -2
  82. package/dist/esm/cli/lib/mcp/tools/index.js.map +1 -1
  83. package/dist/esm/cli/login.js +54 -10
  84. package/dist/esm/cli/login.js.map +2 -2
  85. package/dist/esm/cli/mcp.js +60 -67
  86. package/dist/esm/cli/mcp.js.map +2 -2
  87. package/dist/esm/index.js +1 -1
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/react/ConvexAuthState.js +31 -32
  90. package/dist/esm/react/ConvexAuthState.js.map +2 -2
  91. package/dist/esm/server/impl/actions_impl.js +11 -0
  92. package/dist/esm/server/impl/actions_impl.js.map +2 -2
  93. package/dist/esm/server/index.js +2 -1
  94. package/dist/esm/server/index.js.map +2 -2
  95. package/dist/esm/server/schema.js +67 -0
  96. package/dist/esm/server/schema.js.map +2 -2
  97. package/dist/esm-types/cli/codegen_templates/component_server.d.ts.map +1 -1
  98. package/dist/esm-types/cli/codegen_templates/server.d.ts +1 -0
  99. package/dist/esm-types/cli/codegen_templates/server.d.ts.map +1 -1
  100. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  101. package/dist/esm-types/cli/lib/convexExport.d.ts +1 -0
  102. package/dist/esm-types/cli/lib/convexExport.d.ts.map +1 -1
  103. package/dist/esm-types/cli/lib/dashboard.d.ts.map +1 -1
  104. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  105. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  106. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  107. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  108. package/dist/esm-types/cli/lib/login.d.ts +5 -0
  109. package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
  110. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts +1 -1
  111. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  112. package/dist/esm-types/cli/login.d.ts.map +1 -1
  113. package/dist/esm-types/cli/mcp.d.ts +3 -0
  114. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  115. package/dist/esm-types/index.d.ts +1 -1
  116. package/dist/esm-types/index.d.ts.map +1 -1
  117. package/dist/esm-types/react/ConvexAuthState.d.ts.map +1 -1
  118. package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
  119. package/dist/esm-types/server/index.d.ts +2 -2
  120. package/dist/esm-types/server/index.d.ts.map +1 -1
  121. package/dist/esm-types/server/schema.d.ts +83 -5
  122. package/dist/esm-types/server/schema.d.ts.map +1 -1
  123. package/dist/react.bundle.js +31 -33
  124. package/dist/react.bundle.js.map +2 -2
  125. package/package.json +5 -6
  126. package/src/cli/codegen_templates/component_server.ts +12 -6
  127. package/src/cli/codegen_templates/server.ts +36 -19
  128. package/src/cli/convexExport.ts +1 -1
  129. package/src/cli/index.ts +2 -35
  130. package/src/cli/lib/api.ts +11 -5
  131. package/src/cli/lib/convexExport.ts +21 -0
  132. package/src/cli/lib/dashboard.ts +2 -0
  133. package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
  134. package/src/cli/lib/localDeployment/upgrade.ts +34 -207
  135. package/src/cli/lib/login.ts +20 -9
  136. package/src/cli/lib/mcp/tools/index.ts +1 -1
  137. package/src/cli/login.ts +88 -13
  138. package/src/cli/mcp.ts +64 -72
  139. package/src/index.ts +1 -1
  140. package/src/react/ConvexAuthState.tsx +15 -7
  141. package/src/server/impl/actions_impl.ts +23 -0
  142. package/src/server/index.ts +7 -1
  143. package/src/server/schema.ts +178 -1
  144. package/dist/cjs-types/browser/http_client.test.d.ts +0 -2
  145. package/dist/cjs-types/browser/http_client.test.d.ts.map +0 -1
  146. package/dist/cjs-types/browser/query_options.test.d.ts +0 -2
  147. package/dist/cjs-types/browser/query_options.test.d.ts.map +0 -1
  148. package/dist/cjs-types/browser/simple_client.test.d.ts +0 -2
  149. package/dist/cjs-types/browser/simple_client.test.d.ts.map +0 -1
  150. package/dist/cjs-types/browser/sync/client.test.d.ts +0 -5
  151. package/dist/cjs-types/browser/sync/client.test.d.ts.map +0 -1
  152. package/dist/cjs-types/browser/sync/client_node.test.d.ts +0 -2
  153. package/dist/cjs-types/browser/sync/client_node.test.d.ts.map +0 -1
  154. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  155. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  156. package/dist/cjs-types/browser/sync/local_state.test.d.ts +0 -2
  157. package/dist/cjs-types/browser/sync/local_state.test.d.ts.map +0 -1
  158. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  159. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  160. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  161. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  162. package/dist/cjs-types/browser/sync/protocol.test.d.ts +0 -5
  163. package/dist/cjs-types/browser/sync/protocol.test.d.ts.map +0 -1
  164. package/dist/cjs-types/browser/sync/request_manager.test.d.ts +0 -2
  165. package/dist/cjs-types/browser/sync/request_manager.test.d.ts.map +0 -1
  166. package/dist/cjs-types/bundler/fs.test.d.ts +0 -2
  167. package/dist/cjs-types/bundler/fs.test.d.ts.map +0 -1
  168. package/dist/cjs-types/bundler/index.test.d.ts +0 -2
  169. package/dist/cjs-types/bundler/index.test.d.ts.map +0 -1
  170. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts +0 -2
  171. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  172. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts +0 -2
  173. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  174. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts +0 -2
  175. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  176. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  177. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  178. package/dist/cjs-types/cli/configure.test.d.ts +0 -2
  179. package/dist/cjs-types/cli/configure.test.d.ts.map +0 -1
  180. package/dist/cjs-types/cli/deploymentCreate.test.d.ts +0 -2
  181. package/dist/cjs-types/cli/deploymentCreate.test.d.ts.map +0 -1
  182. package/dist/cjs-types/cli/deploymentSelect.test.d.ts +0 -2
  183. package/dist/cjs-types/cli/deploymentSelect.test.d.ts.map +0 -1
  184. package/dist/cjs-types/cli/deploymentSelection.test.d.ts +0 -2
  185. package/dist/cjs-types/cli/deploymentSelection.test.d.ts.map +0 -1
  186. package/dist/cjs-types/cli/deploymentToken.test.d.ts +0 -2
  187. package/dist/cjs-types/cli/deploymentToken.test.d.ts.map +0 -1
  188. package/dist/cjs-types/cli/dev.test.d.ts +0 -2
  189. package/dist/cjs-types/cli/dev.test.d.ts.map +0 -1
  190. package/dist/cjs-types/cli/envDefault.test.d.ts +0 -2
  191. package/dist/cjs-types/cli/envDefault.test.d.ts.map +0 -1
  192. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  193. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  194. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  195. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  196. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  197. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  198. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  199. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  200. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  201. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  202. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  203. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  204. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  205. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  206. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  207. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  208. package/dist/cjs-types/cli/lib/codegen.test.d.ts +0 -2
  209. package/dist/cjs-types/cli/lib/codegen.test.d.ts.map +0 -1
  210. package/dist/cjs-types/cli/lib/components.test.d.ts +0 -2
  211. package/dist/cjs-types/cli/lib/components.test.d.ts.map +0 -1
  212. package/dist/cjs-types/cli/lib/config.test.d.ts +0 -2
  213. package/dist/cjs-types/cli/lib/config.test.d.ts.map +0 -1
  214. package/dist/cjs-types/cli/lib/deployment.test.d.ts +0 -2
  215. package/dist/cjs-types/cli/lib/deployment.test.d.ts.map +0 -1
  216. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  217. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  218. package/dist/cjs-types/cli/lib/env.test.d.ts +0 -2
  219. package/dist/cjs-types/cli/lib/env.test.d.ts.map +0 -1
  220. package/dist/cjs-types/cli/lib/expiration.test.d.ts +0 -2
  221. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +0 -1
  222. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  223. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  224. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  225. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  226. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  227. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  228. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts +0 -2
  229. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  230. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +0 -2
  231. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  232. package/dist/cjs-types/cli/lib/indexes.test.d.ts +0 -2
  233. package/dist/cjs-types/cli/lib/indexes.test.d.ts.map +0 -1
  234. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  235. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  236. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  237. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  238. package/dist/cjs-types/cli/lib/run.test.d.ts +0 -2
  239. package/dist/cjs-types/cli/lib/run.test.d.ts.map +0 -1
  240. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts +0 -2
  241. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  242. package/dist/cjs-types/cli/lib/typecheck.test.d.ts +0 -2
  243. package/dist/cjs-types/cli/lib/typecheck.test.d.ts.map +0 -1
  244. package/dist/cjs-types/cli/lib/updates.test.d.ts +0 -2
  245. package/dist/cjs-types/cli/lib/updates.test.d.ts.map +0 -1
  246. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts +0 -2
  247. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  248. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts +0 -2
  249. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  250. package/dist/cjs-types/cli/lib/versionApi.test.d.ts +0 -2
  251. package/dist/cjs-types/cli/lib/versionApi.test.d.ts.map +0 -1
  252. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  253. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  254. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts +0 -2
  255. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  256. package/dist/cjs-types/common/index.test.d.ts +0 -2
  257. package/dist/cjs-types/common/index.test.d.ts.map +0 -1
  258. package/dist/cjs-types/nextjs/nextjs.test.d.ts +0 -2
  259. package/dist/cjs-types/nextjs/nextjs.test.d.ts.map +0 -1
  260. package/dist/cjs-types/react/ConvexAuthState.test.d.ts +0 -2
  261. package/dist/cjs-types/react/ConvexAuthState.test.d.ts.map +0 -1
  262. package/dist/cjs-types/react/auth_helpers.test.d.ts +0 -2
  263. package/dist/cjs-types/react/auth_helpers.test.d.ts.map +0 -1
  264. package/dist/cjs-types/react/auth_websocket.test.d.ts +0 -2
  265. package/dist/cjs-types/react/auth_websocket.test.d.ts.map +0 -1
  266. package/dist/cjs-types/react/client.test.d.ts +0 -2
  267. package/dist/cjs-types/react/client.test.d.ts.map +0 -1
  268. package/dist/cjs-types/react/client_provided_base_client.test.d.ts +0 -2
  269. package/dist/cjs-types/react/client_provided_base_client.test.d.ts.map +0 -1
  270. package/dist/cjs-types/react/queries_observer.test.d.ts +0 -2
  271. package/dist/cjs-types/react/queries_observer.test.d.ts.map +0 -1
  272. package/dist/cjs-types/react/react_node.test.d.ts +0 -2
  273. package/dist/cjs-types/react/react_node.test.d.ts.map +0 -1
  274. package/dist/cjs-types/react/use_paginated_query.test.d.ts +0 -2
  275. package/dist/cjs-types/react/use_paginated_query.test.d.ts.map +0 -1
  276. package/dist/cjs-types/react/use_queries.test.d.ts +0 -5
  277. package/dist/cjs-types/react/use_queries.test.d.ts.map +0 -1
  278. package/dist/cjs-types/react/use_query.test.d.ts +0 -5
  279. package/dist/cjs-types/react/use_query.test.d.ts.map +0 -1
  280. package/dist/cjs-types/react/use_query_object_options.test.d.ts +0 -5
  281. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +0 -1
  282. package/dist/cjs-types/react/use_query_result.test.d.ts +0 -5
  283. package/dist/cjs-types/react/use_query_result.test.d.ts.map +0 -1
  284. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  285. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  286. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  287. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  288. package/dist/cjs-types/server/api.intersect.test.d.ts +0 -2
  289. package/dist/cjs-types/server/api.intersect.test.d.ts.map +0 -1
  290. package/dist/cjs-types/server/api.test.d.ts +0 -2
  291. package/dist/cjs-types/server/api.test.d.ts.map +0 -1
  292. package/dist/cjs-types/server/audit_logging.test.d.ts +0 -2
  293. package/dist/cjs-types/server/audit_logging.test.d.ts.map +0 -1
  294. package/dist/cjs-types/server/components/index.test.d.ts +0 -2
  295. package/dist/cjs-types/server/components/index.test.d.ts.map +0 -1
  296. package/dist/cjs-types/server/cron.test.d.ts +0 -2
  297. package/dist/cjs-types/server/cron.test.d.ts.map +0 -1
  298. package/dist/cjs-types/server/data_model.test.d.ts +0 -2
  299. package/dist/cjs-types/server/data_model.test.d.ts.map +0 -1
  300. package/dist/cjs-types/server/database.test.d.ts +0 -2
  301. package/dist/cjs-types/server/database.test.d.ts.map +0 -1
  302. package/dist/cjs-types/server/database_api.test.d.ts +0 -2
  303. package/dist/cjs-types/server/database_api.test.d.ts.map +0 -1
  304. package/dist/cjs-types/server/filter_builder.test.d.ts +0 -2
  305. package/dist/cjs-types/server/filter_builder.test.d.ts.map +0 -1
  306. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  307. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  308. package/dist/cjs-types/server/impl/query_impl.test.d.ts +0 -2
  309. package/dist/cjs-types/server/impl/query_impl.test.d.ts.map +0 -1
  310. package/dist/cjs-types/server/pagination.test.d.ts +0 -2
  311. package/dist/cjs-types/server/pagination.test.d.ts.map +0 -1
  312. package/dist/cjs-types/server/query.test.d.ts +0 -2
  313. package/dist/cjs-types/server/query.test.d.ts.map +0 -1
  314. package/dist/cjs-types/server/registration.test.d.ts +0 -2
  315. package/dist/cjs-types/server/registration.test.d.ts.map +0 -1
  316. package/dist/cjs-types/server/router.test.d.ts +0 -2
  317. package/dist/cjs-types/server/router.test.d.ts.map +0 -1
  318. package/dist/cjs-types/server/scheduler.test.d.ts +0 -2
  319. package/dist/cjs-types/server/scheduler.test.d.ts.map +0 -1
  320. package/dist/cjs-types/server/schema.test.d.ts +0 -2
  321. package/dist/cjs-types/server/schema.test.d.ts.map +0 -1
  322. package/dist/cjs-types/test/fake_watch.d.ts +0 -16
  323. package/dist/cjs-types/test/fake_watch.d.ts.map +0 -1
  324. package/dist/cjs-types/test/type_testing.d.ts +0 -9
  325. package/dist/cjs-types/test/type_testing.d.ts.map +0 -1
  326. package/dist/cjs-types/type_utils.test.d.ts +0 -2
  327. package/dist/cjs-types/type_utils.test.d.ts.map +0 -1
  328. package/dist/cjs-types/values/size.test.d.ts +0 -2
  329. package/dist/cjs-types/values/size.test.d.ts.map +0 -1
  330. package/dist/cjs-types/values/validator.test.d.ts +0 -2
  331. package/dist/cjs-types/values/validator.test.d.ts.map +0 -1
  332. package/dist/cjs-types/values/value.test.d.ts +0 -2
  333. package/dist/cjs-types/values/value.test.d.ts.map +0 -1
  334. package/dist/esm-types/browser/http_client.test.d.ts +0 -2
  335. package/dist/esm-types/browser/http_client.test.d.ts.map +0 -1
  336. package/dist/esm-types/browser/query_options.test.d.ts +0 -2
  337. package/dist/esm-types/browser/query_options.test.d.ts.map +0 -1
  338. package/dist/esm-types/browser/simple_client.test.d.ts +0 -2
  339. package/dist/esm-types/browser/simple_client.test.d.ts.map +0 -1
  340. package/dist/esm-types/browser/sync/client.test.d.ts +0 -5
  341. package/dist/esm-types/browser/sync/client.test.d.ts.map +0 -1
  342. package/dist/esm-types/browser/sync/client_node.test.d.ts +0 -2
  343. package/dist/esm-types/browser/sync/client_node.test.d.ts.map +0 -1
  344. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  345. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  346. package/dist/esm-types/browser/sync/local_state.test.d.ts +0 -2
  347. package/dist/esm-types/browser/sync/local_state.test.d.ts.map +0 -1
  348. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  349. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  350. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  351. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  352. package/dist/esm-types/browser/sync/protocol.test.d.ts +0 -5
  353. package/dist/esm-types/browser/sync/protocol.test.d.ts.map +0 -1
  354. package/dist/esm-types/browser/sync/request_manager.test.d.ts +0 -2
  355. package/dist/esm-types/browser/sync/request_manager.test.d.ts.map +0 -1
  356. package/dist/esm-types/bundler/fs.test.d.ts +0 -2
  357. package/dist/esm-types/bundler/fs.test.d.ts.map +0 -1
  358. package/dist/esm-types/bundler/index.test.d.ts +0 -2
  359. package/dist/esm-types/bundler/index.test.d.ts.map +0 -1
  360. package/dist/esm-types/cli/codegen_templates/api.test.d.ts +0 -2
  361. package/dist/esm-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  362. package/dist/esm-types/cli/codegen_templates/common.test.d.ts +0 -2
  363. package/dist/esm-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  364. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts +0 -2
  365. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  366. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  367. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  368. package/dist/esm-types/cli/configure.test.d.ts +0 -2
  369. package/dist/esm-types/cli/configure.test.d.ts.map +0 -1
  370. package/dist/esm-types/cli/deploymentCreate.test.d.ts +0 -2
  371. package/dist/esm-types/cli/deploymentCreate.test.d.ts.map +0 -1
  372. package/dist/esm-types/cli/deploymentSelect.test.d.ts +0 -2
  373. package/dist/esm-types/cli/deploymentSelect.test.d.ts.map +0 -1
  374. package/dist/esm-types/cli/deploymentSelection.test.d.ts +0 -2
  375. package/dist/esm-types/cli/deploymentSelection.test.d.ts.map +0 -1
  376. package/dist/esm-types/cli/deploymentToken.test.d.ts +0 -2
  377. package/dist/esm-types/cli/deploymentToken.test.d.ts.map +0 -1
  378. package/dist/esm-types/cli/dev.test.d.ts +0 -2
  379. package/dist/esm-types/cli/dev.test.d.ts.map +0 -1
  380. package/dist/esm-types/cli/envDefault.test.d.ts +0 -2
  381. package/dist/esm-types/cli/envDefault.test.d.ts.map +0 -1
  382. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  383. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  384. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  385. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  386. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  387. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  388. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  389. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  390. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  391. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  392. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  393. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  394. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  395. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  396. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  397. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  398. package/dist/esm-types/cli/lib/codegen.test.d.ts +0 -2
  399. package/dist/esm-types/cli/lib/codegen.test.d.ts.map +0 -1
  400. package/dist/esm-types/cli/lib/components.test.d.ts +0 -2
  401. package/dist/esm-types/cli/lib/components.test.d.ts.map +0 -1
  402. package/dist/esm-types/cli/lib/config.test.d.ts +0 -2
  403. package/dist/esm-types/cli/lib/config.test.d.ts.map +0 -1
  404. package/dist/esm-types/cli/lib/deployment.test.d.ts +0 -2
  405. package/dist/esm-types/cli/lib/deployment.test.d.ts.map +0 -1
  406. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  407. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  408. package/dist/esm-types/cli/lib/env.test.d.ts +0 -2
  409. package/dist/esm-types/cli/lib/env.test.d.ts.map +0 -1
  410. package/dist/esm-types/cli/lib/expiration.test.d.ts +0 -2
  411. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +0 -1
  412. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  413. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  414. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  415. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  416. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  417. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  418. package/dist/esm-types/cli/lib/fsUtils.test.d.ts +0 -2
  419. package/dist/esm-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  420. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +0 -2
  421. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  422. package/dist/esm-types/cli/lib/indexes.test.d.ts +0 -2
  423. package/dist/esm-types/cli/lib/indexes.test.d.ts.map +0 -1
  424. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  425. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  426. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  427. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  428. package/dist/esm-types/cli/lib/run.test.d.ts +0 -2
  429. package/dist/esm-types/cli/lib/run.test.d.ts.map +0 -1
  430. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts +0 -2
  431. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  432. package/dist/esm-types/cli/lib/typecheck.test.d.ts +0 -2
  433. package/dist/esm-types/cli/lib/typecheck.test.d.ts.map +0 -1
  434. package/dist/esm-types/cli/lib/updates.test.d.ts +0 -2
  435. package/dist/esm-types/cli/lib/updates.test.d.ts.map +0 -1
  436. package/dist/esm-types/cli/lib/utils/hash.test.d.ts +0 -2
  437. package/dist/esm-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  438. package/dist/esm-types/cli/lib/utils/utils.test.d.ts +0 -2
  439. package/dist/esm-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  440. package/dist/esm-types/cli/lib/versionApi.test.d.ts +0 -2
  441. package/dist/esm-types/cli/lib/versionApi.test.d.ts.map +0 -1
  442. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  443. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  444. package/dist/esm-types/cli/lib/workos/workos.test.d.ts +0 -2
  445. package/dist/esm-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  446. package/dist/esm-types/common/index.test.d.ts +0 -2
  447. package/dist/esm-types/common/index.test.d.ts.map +0 -1
  448. package/dist/esm-types/nextjs/nextjs.test.d.ts +0 -2
  449. package/dist/esm-types/nextjs/nextjs.test.d.ts.map +0 -1
  450. package/dist/esm-types/react/ConvexAuthState.test.d.ts +0 -2
  451. package/dist/esm-types/react/ConvexAuthState.test.d.ts.map +0 -1
  452. package/dist/esm-types/react/auth_helpers.test.d.ts +0 -2
  453. package/dist/esm-types/react/auth_helpers.test.d.ts.map +0 -1
  454. package/dist/esm-types/react/auth_websocket.test.d.ts +0 -2
  455. package/dist/esm-types/react/auth_websocket.test.d.ts.map +0 -1
  456. package/dist/esm-types/react/client.test.d.ts +0 -2
  457. package/dist/esm-types/react/client.test.d.ts.map +0 -1
  458. package/dist/esm-types/react/client_provided_base_client.test.d.ts +0 -2
  459. package/dist/esm-types/react/client_provided_base_client.test.d.ts.map +0 -1
  460. package/dist/esm-types/react/queries_observer.test.d.ts +0 -2
  461. package/dist/esm-types/react/queries_observer.test.d.ts.map +0 -1
  462. package/dist/esm-types/react/react_node.test.d.ts +0 -2
  463. package/dist/esm-types/react/react_node.test.d.ts.map +0 -1
  464. package/dist/esm-types/react/use_paginated_query.test.d.ts +0 -2
  465. package/dist/esm-types/react/use_paginated_query.test.d.ts.map +0 -1
  466. package/dist/esm-types/react/use_queries.test.d.ts +0 -5
  467. package/dist/esm-types/react/use_queries.test.d.ts.map +0 -1
  468. package/dist/esm-types/react/use_query.test.d.ts +0 -5
  469. package/dist/esm-types/react/use_query.test.d.ts.map +0 -1
  470. package/dist/esm-types/react/use_query_object_options.test.d.ts +0 -5
  471. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +0 -1
  472. package/dist/esm-types/react/use_query_result.test.d.ts +0 -5
  473. package/dist/esm-types/react/use_query_result.test.d.ts.map +0 -1
  474. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  475. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  476. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  477. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  478. package/dist/esm-types/server/api.intersect.test.d.ts +0 -2
  479. package/dist/esm-types/server/api.intersect.test.d.ts.map +0 -1
  480. package/dist/esm-types/server/api.test.d.ts +0 -2
  481. package/dist/esm-types/server/api.test.d.ts.map +0 -1
  482. package/dist/esm-types/server/audit_logging.test.d.ts +0 -2
  483. package/dist/esm-types/server/audit_logging.test.d.ts.map +0 -1
  484. package/dist/esm-types/server/components/index.test.d.ts +0 -2
  485. package/dist/esm-types/server/components/index.test.d.ts.map +0 -1
  486. package/dist/esm-types/server/cron.test.d.ts +0 -2
  487. package/dist/esm-types/server/cron.test.d.ts.map +0 -1
  488. package/dist/esm-types/server/data_model.test.d.ts +0 -2
  489. package/dist/esm-types/server/data_model.test.d.ts.map +0 -1
  490. package/dist/esm-types/server/database.test.d.ts +0 -2
  491. package/dist/esm-types/server/database.test.d.ts.map +0 -1
  492. package/dist/esm-types/server/database_api.test.d.ts +0 -2
  493. package/dist/esm-types/server/database_api.test.d.ts.map +0 -1
  494. package/dist/esm-types/server/filter_builder.test.d.ts +0 -2
  495. package/dist/esm-types/server/filter_builder.test.d.ts.map +0 -1
  496. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  497. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  498. package/dist/esm-types/server/impl/query_impl.test.d.ts +0 -2
  499. package/dist/esm-types/server/impl/query_impl.test.d.ts.map +0 -1
  500. package/dist/esm-types/server/pagination.test.d.ts +0 -2
  501. package/dist/esm-types/server/pagination.test.d.ts.map +0 -1
  502. package/dist/esm-types/server/query.test.d.ts +0 -2
  503. package/dist/esm-types/server/query.test.d.ts.map +0 -1
  504. package/dist/esm-types/server/registration.test.d.ts +0 -2
  505. package/dist/esm-types/server/registration.test.d.ts.map +0 -1
  506. package/dist/esm-types/server/router.test.d.ts +0 -2
  507. package/dist/esm-types/server/router.test.d.ts.map +0 -1
  508. package/dist/esm-types/server/scheduler.test.d.ts +0 -2
  509. package/dist/esm-types/server/scheduler.test.d.ts.map +0 -1
  510. package/dist/esm-types/server/schema.test.d.ts +0 -2
  511. package/dist/esm-types/server/schema.test.d.ts.map +0 -1
  512. package/dist/esm-types/test/fake_watch.d.ts +0 -16
  513. package/dist/esm-types/test/fake_watch.d.ts.map +0 -1
  514. package/dist/esm-types/test/type_testing.d.ts +0 -9
  515. package/dist/esm-types/test/type_testing.d.ts.map +0 -1
  516. package/dist/esm-types/type_utils.test.d.ts +0 -2
  517. package/dist/esm-types/type_utils.test.d.ts.map +0 -1
  518. package/dist/esm-types/values/size.test.d.ts +0 -2
  519. package/dist/esm-types/values/size.test.d.ts.map +0 -1
  520. package/dist/esm-types/values/validator.test.d.ts +0 -2
  521. package/dist/esm-types/values/validator.test.d.ts.map +0 -1
  522. package/dist/esm-types/values/value.test.d.ts +0 -2
  523. package/dist/esm-types/values/value.test.d.ts.map +0 -1
  524. package/src/browser/http_client.test.ts +0 -202
  525. package/src/browser/query_options.test.ts +0 -43
  526. package/src/browser/simple_client.test.ts +0 -104
  527. package/src/browser/sync/client.test.ts +0 -44
  528. package/src/browser/sync/client_node.test.ts +0 -1207
  529. package/src/browser/sync/client_node_test_helpers.ts +0 -200
  530. package/src/browser/sync/local_state.test.ts +0 -128
  531. package/src/browser/sync/optimistic_query_set.test.ts +0 -253
  532. package/src/browser/sync/paginated_query_client.test.ts +0 -597
  533. package/src/browser/sync/protocol.test.ts +0 -14
  534. package/src/browser/sync/request_manager.test.ts +0 -273
  535. package/src/bundler/fs.test.ts +0 -86
  536. package/src/bundler/index.test.ts +0 -210
  537. package/src/bundler/test_fixtures/js/project01/bar.js +0 -4
  538. package/src/bundler/test_fixtures/js/project01/file with spaces.js +0 -1
  539. package/src/bundler/test_fixtures/js/project01/foo.js +0 -9
  540. package/src/bundler/test_fixtures/js/project_with_https/https.js +0 -9
  541. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/default.js +0 -3
  542. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/more_code/https.js +0 -5
  543. package/src/bundler/test_fixtures/js/project_with_https_without_router/https.js +0 -1
  544. package/src/bundler/test_fixtures/js/project_with_node_shims/uses_node_shims.js +0 -4
  545. package/src/cli/codegen_templates/api.test.ts +0 -18
  546. package/src/cli/codegen_templates/common.test.ts +0 -52
  547. package/src/cli/codegen_templates/templates.test.ts +0 -16
  548. package/src/cli/codegen_templates/validator_helpers.test.ts +0 -31
  549. package/src/cli/configure.test.ts +0 -138
  550. package/src/cli/deploymentCreate.test.ts +0 -1376
  551. package/src/cli/deploymentSelect.test.ts +0 -1291
  552. package/src/cli/deploymentSelection.test.ts +0 -2546
  553. package/src/cli/deploymentToken.test.ts +0 -397
  554. package/src/cli/dev.test.ts +0 -157
  555. package/src/cli/envDefault.test.ts +0 -495
  556. package/src/cli/lib/__snapshots__/formatTargetedDeployment.test.ts.snap +0 -94
  557. package/src/cli/lib/aiFiles/agentsmd.test.ts +0 -133
  558. package/src/cli/lib/aiFiles/claudemd.test.ts +0 -92
  559. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +0 -50
  560. package/src/cli/lib/aiFiles/index.test.ts +0 -986
  561. package/src/cli/lib/aiFiles/integration.test.ts +0 -692
  562. package/src/cli/lib/aiFiles/prompt.test.ts +0 -202
  563. package/src/cli/lib/aiFiles/state.test.ts +0 -305
  564. package/src/cli/lib/aiFiles/utils.test.ts +0 -50
  565. package/src/cli/lib/codegen.test.ts +0 -49
  566. package/src/cli/lib/components.test.ts +0 -227
  567. package/src/cli/lib/config.test.ts +0 -1026
  568. package/src/cli/lib/deployment.test.ts +0 -85
  569. package/src/cli/lib/deploymentSelector.test.ts +0 -107
  570. package/src/cli/lib/env.test.ts +0 -60
  571. package/src/cli/lib/expiration.test.ts +0 -159
  572. package/src/cli/lib/extractDeploymentNameForWorkOS.test.ts +0 -30
  573. package/src/cli/lib/formatEnvValueForDotfile.test.ts +0 -294
  574. package/src/cli/lib/formatTargetedDeployment.test.ts +0 -281
  575. package/src/cli/lib/fsUtils.test.ts +0 -67
  576. package/src/cli/lib/generateDocs.test.ts +0 -326
  577. package/src/cli/lib/indexes.test.ts +0 -77
  578. package/src/cli/lib/localDeployment/run.test.ts +0 -104
  579. package/src/cli/lib/localDeployment/secrets.test.ts +0 -53
  580. package/src/cli/lib/run.test.ts +0 -54
  581. package/src/cli/lib/runTestFunction.test.ts +0 -84
  582. package/src/cli/lib/typecheck.test.ts +0 -71
  583. package/src/cli/lib/updates.test.ts +0 -157
  584. package/src/cli/lib/utils/hash.test.ts +0 -25
  585. package/src/cli/lib/utils/utils.test.ts +0 -340
  586. package/src/cli/lib/versionApi.test.ts +0 -471
  587. package/src/cli/lib/workos/environmentApi.test.ts +0 -107
  588. package/src/cli/lib/workos/workos.test.ts +0 -242
  589. package/src/common/README.md +0 -2
  590. package/src/common/index.test.ts +0 -35
  591. package/src/nextjs/nextjs.test.tsx +0 -94
  592. package/src/react/ConvexAuthState.test.tsx +0 -702
  593. package/src/react/auth_helpers.test.tsx +0 -45
  594. package/src/react/auth_websocket.test.tsx +0 -1177
  595. package/src/react/client.test.tsx +0 -261
  596. package/src/react/client_provided_base_client.test.tsx +0 -174
  597. package/src/react/queries_observer.test.ts +0 -176
  598. package/src/react/react_node.test.ts +0 -78
  599. package/src/react/use_paginated_query.test.tsx +0 -1420
  600. package/src/react/use_queries.test.ts +0 -140
  601. package/src/react/use_query.test.ts +0 -71
  602. package/src/react/use_query_object_options.test.ts +0 -51
  603. package/src/react/use_query_result.test.ts +0 -75
  604. package/src/react-auth0/ConvexProviderWithAuth0.test.tsx +0 -17
  605. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +0 -18
  606. package/src/server/README.md +0 -15
  607. package/src/server/api.intersect.test.ts +0 -109
  608. package/src/server/api.test.ts +0 -447
  609. package/src/server/audit_logging.test.ts +0 -131
  610. package/src/server/components/index.test.ts +0 -48
  611. package/src/server/cron.test.ts +0 -58
  612. package/src/server/data_model.test.ts +0 -221
  613. package/src/server/database.test.ts +0 -184
  614. package/src/server/database_api.test.ts +0 -439
  615. package/src/server/filter_builder.test.ts +0 -102
  616. package/src/server/impl/filter_builder_impl.test.ts +0 -13
  617. package/src/server/impl/query_impl.test.ts +0 -46
  618. package/src/server/pagination.test.ts +0 -49
  619. package/src/server/query.test.ts +0 -112
  620. package/src/server/registration.test.ts +0 -589
  621. package/src/server/router.test.ts +0 -148
  622. package/src/server/scheduler.test.ts +0 -31
  623. package/src/server/schema.test.ts +0 -983
  624. package/src/test/fake_watch.ts +0 -54
  625. package/src/test/type_testing.ts +0 -21
  626. package/src/type_utils.test.ts +0 -62
  627. package/src/values/size.test.ts +0 -95
  628. package/src/values/validator.test.ts +0 -619
  629. package/src/values/value.test.ts +0 -232
  630. package/src/vendor/README.md +0 -18
  631. package/src/vendor/jwt-decode/README.md +0 -1
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var login_exports = {};
20
30
  __export(login_exports, {
@@ -22,6 +32,7 @@ __export(login_exports, {
22
32
  });
23
33
  module.exports = __toCommonJS(login_exports);
24
34
  var import_extra_typings = require("@commander-js/extra-typings");
35
+ var dotenv = __toESM(require("dotenv"), 1);
25
36
  var import_context = require("../bundler/context.js");
26
37
  var import_log = require("../bundler/log.js");
27
38
  var import_login = require("./lib/login.js");
@@ -35,26 +46,59 @@ var import_deploymentSelection = require("./lib/deploymentSelection.js");
35
46
  var import_deployment = require("./lib/deployment.js");
36
47
  var import_globalConfig = require("./lib/utils/globalConfig.js");
37
48
  var import_api = require("./lib/api.js");
49
+ function deployKeyEnvFile(ctx, envVarName, value) {
50
+ for (const file of [import_utils.ENV_VAR_FILE_PATH, ".env"]) {
51
+ if (!ctx.fs.exists(file)) {
52
+ continue;
53
+ }
54
+ if (dotenv.parse(ctx.fs.readUtf8File(file))[envVarName] === value) {
55
+ return file;
56
+ }
57
+ }
58
+ return null;
59
+ }
60
+ async function reportDeployKeyInWorkingDirectory(ctx, auth) {
61
+ if (auth === null || auth.kind === "accessToken" || auth.kind === "previewDeployKey") {
62
+ return;
63
+ }
64
+ const key = auth.kind === "projectKey" ? auth.projectKey : auth.deploymentKey;
65
+ const envVarName = process.env[import_utils.CONVEX_DEPLOY_KEY_ENV_VAR_NAME] ? import_utils.CONVEX_DEPLOY_KEY_ENV_VAR_NAME : import_utils.CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;
66
+ const envFile = deployKeyEnvFile(ctx, envVarName, key);
67
+ const source = envFile ?? "shell environment";
68
+ const secret = key.slice(key.indexOf("|") + 1);
69
+ if (await (0, import_login.isAuthorizedHeader)(ctx, `Bearer ${secret}`)) {
70
+ (0, import_log.logMessage)(`Working Directory: Valid ${envVarName} in ${source}`);
71
+ return;
72
+ }
73
+ (0, import_log.logWarning)(`Working Directory: Invalid ${envVarName} in ${source}`);
74
+ }
38
75
  const loginStatus = new import_extra_typings.Command("status").description("Check login status and list accessible teams").allowExcessArguments(false).action(async () => {
39
76
  const ctx = await (0, import_context.oneoffContext)({
40
77
  url: void 0,
41
78
  adminKey: void 0,
42
79
  envFile: void 0
43
80
  });
81
+ const auth = ctx.bigBrainAuth();
44
82
  const globalConfig = (0, import_globalConfig.readGlobalConfig)(ctx);
45
- const hasToken = globalConfig?.accessToken !== null;
46
- if (hasToken) {
47
- (0, import_log.logMessage)(`Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
48
- } else {
49
- (0, import_log.logMessage)("No token found locally");
83
+ if (globalConfig === null) {
84
+ (0, import_log.logMessage)(`No Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
85
+ (0, import_log.logMessage)("Status: Not logged in");
86
+ await reportDeployKeyInWorkingDirectory(ctx, auth);
50
87
  return;
51
88
  }
52
- const isLoggedIn = await (0, import_login.checkAuthorization)(ctx, false);
53
- if (!isLoggedIn) {
89
+ (0, import_log.logMessage)(`Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
90
+ const accessToken = globalConfig.accessToken;
91
+ if (!await (0, import_login.isAuthorizedHeader)(ctx, `Bearer ${accessToken}`)) {
54
92
  (0, import_log.logMessage)("Status: Not logged in");
93
+ await reportDeployKeyInWorkingDirectory(ctx, auth);
55
94
  return;
56
95
  }
57
96
  (0, import_log.logMessage)("Status: Logged in");
97
+ ctx._updateBigBrainAuth({
98
+ kind: "accessToken",
99
+ header: `Bearer ${accessToken}`,
100
+ accessToken
101
+ });
58
102
  const teams = await (0, import_api.getTeamsForUser)(ctx);
59
103
  (0, import_log.logMessage)(
60
104
  `Teams: ${teams.length} team${teams.length === 1 ? "" : "s"} accessible`
@@ -62,6 +106,7 @@ const loginStatus = new import_extra_typings.Command("status").description("Chec
62
106
  for (const team of teams) {
63
107
  (0, import_log.logMessage)(` - ${team.name} (${team.slug})`);
64
108
  }
109
+ await reportDeployKeyInWorkingDirectory(ctx, auth);
65
110
  });
66
111
  const login = new import_extra_typings.Command("login").description("Login to Convex").allowExcessArguments(false).option(
67
112
  "--device-name <name>",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/login.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage } from \"../bundler/log.js\";\nimport { checkAuthorization, performLogin } from \"./lib/login.js\";\nimport {\n loadProjectLocalConfig,\n loadUuidForAnonymousUser,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n handleLinkToProject,\n listLegacyAnonymousDeployments,\n} from \"./lib/localDeployment/anonymous.js\";\nimport {\n DASHBOARD_HOST,\n deploymentDashboardUrlPage,\n teamDashboardUrl,\n} from \"./lib/dashboard.js\";\nimport { promptSearch, promptYesNo } from \"./lib/utils/prompts.js\";\nimport { validateOrSelectTeam } from \"./lib/utils/utils.js\";\nimport {\n selectProject,\n updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport {\n getDeploymentSelection,\n shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport {\n isAnonymousDeployment,\n removeAnonymousPrefix,\n} from \"./lib/deployment.js\";\nimport {\n readGlobalConfig,\n globalConfigPath,\n} from \"./lib/utils/globalConfig.js\";\nimport { getTeamsForUser } from \"./lib/api.js\";\n\nconst loginStatus = new Command(\"status\")\n .description(\"Check login status and list accessible teams\")\n .allowExcessArguments(false)\n .action(async () => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n const globalConfig = readGlobalConfig(ctx);\n const hasToken = globalConfig?.accessToken !== null;\n\n if (hasToken) {\n logMessage(`Convex account token found in: ${globalConfigPath()}`);\n } else {\n logMessage(\"No token found locally\");\n return;\n }\n\n const isLoggedIn = await checkAuthorization(ctx, false);\n\n if (!isLoggedIn) {\n logMessage(\"Status: Not logged in\");\n return;\n }\n\n logMessage(\"Status: Logged in\");\n const teams = await getTeamsForUser(ctx);\n logMessage(\n `Teams: ${teams.length} team${teams.length === 1 ? \"\" : \"s\"} accessible`,\n );\n for (const team of teams) {\n logMessage(` - ${team.name} (${team.slug})`);\n }\n });\n\nexport const login = new Command(\"login\")\n .description(\"Login to Convex\")\n .allowExcessArguments(false)\n .option(\n \"--device-name <name>\",\n \"Provide a name for the device being authorized\",\n )\n .option(\n \"-f, --force\",\n \"Proceed with login even if a valid access token already exists for this device\",\n )\n .option(\n \"--no-open\",\n \"Don't automatically open the login link in the default browser\",\n )\n .addOption(\n new Option(\n \"--login-flow <mode>\",\n `How to log in; defaults to guessing based on the environment.`,\n )\n .choices([\"paste\", \"auto\", \"poll\"] as const)\n .default(\"auto\" as const),\n )\n .addOption(new Option(\"--link-deployments\").hideHelp())\n // These options are hidden from the help/usage message, but allow overriding settings for testing.\n // Change the auth credentials with the auth provider\n .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n // Skip the auth provider login and directly use this access token\n .addOption(new Option(\"--override-access-token <token>\").hideHelp())\n // Automatically accept opt ins without prompting\n .addOption(new Option(\"--accept-opt-ins\").hideHelp())\n // Dump the access token from the auth provider and skip authorization with Convex\n .addOption(new Option(\"--dump-access-token\").hideHelp())\n // Hidden option for tests to check if the user is logged in.\n .addOption(new Option(\"--check-login\").hideHelp())\n // Redirect to Vercel SSO integration URL\n .addOption(\n new Option(\n \"--vercel\",\n \"Redirect to Vercel SSO integration for login\",\n ).hideHelp(),\n )\n // Override the Vercel URL slug (defaults to 'convex')\n .addOption(new Option(\"--vercel-override <slug>\").hideHelp())\n .addCommand(loginStatus)\n .addHelpCommand(false)\n .action(async (options, cmd: Command) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n if (\n !options.force &&\n (await checkAuthorization(ctx, !!options.acceptOptIns))\n ) {\n logFinishedStep(\n \"This device has previously been authorized and is ready for use with Convex.\",\n );\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n return;\n }\n if (!options.force && options.checkLogin) {\n const isLoggedIn = await checkAuthorization(ctx, !!options.acceptOptIns);\n if (!isLoggedIn) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: \"You are not logged in.\",\n printedMessage: \"You are not logged in.\",\n });\n }\n }\n if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {\n cmd.error(\n \"If overriding credentials, both username and password must be provided\",\n );\n }\n\n const uuid = loadUuidForAnonymousUser(ctx);\n await performLogin(ctx, {\n ...options,\n anonymousId: uuid,\n vercel: options.vercel,\n vercelOverride: options.vercelOverride,\n });\n\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n });\n\nasync function handleLinkingDeployments(\n ctx: Context,\n args: {\n interactive: boolean;\n },\n) {\n if (!shouldAllowAnonymousDevelopment()) {\n return;\n }\n\n // Check for project-local anonymous deployment first - this takes priority\n const projectLocal = loadProjectLocalConfig(ctx);\n if (\n projectLocal !== null &&\n isAnonymousDeployment(projectLocal.deploymentName)\n ) {\n const shouldLink = await promptYesNo(ctx, {\n message: `Would you like to link your existing deployment to your account? (\"${projectLocal.deploymentName}\")`,\n default: true,\n });\n if (!shouldLink) {\n logMessage(\n \"Not linking your existing deployment. If you want to link it later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const { dashboardUrl } = await linkSingleDeployment(\n ctx,\n projectLocal.deploymentName,\n projectLocal.deploymentName,\n );\n logFinishedStep(`Visit ${dashboardUrl} to get started.`);\n return;\n }\n\n // No project-local deployment - check for legacy deployments\n const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (legacyDeployments.length === 0) {\n if (args.interactive) {\n logMessage(\n \"It doesn't look like you have any deployments to link. You can run `npx convex dev` to set up a new project or select an existing one.\",\n );\n }\n return;\n }\n\n // Get the currently configured deployment (if any) for env var updates\n const deploymentSelection = await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n const configuredDeployment =\n deploymentSelection.kind === \"anonymous\"\n ? deploymentSelection.deploymentName\n : null;\n\n if (!args.interactive) {\n // Non-interactive: link all legacy deployments automatically\n const message = getMessage(legacyDeployments.map((d) => d.deploymentName));\n const createProjects = await promptYesNo(ctx, {\n message,\n default: true,\n });\n if (!createProjects) {\n logMessage(\n \"Not linking your existing deployments. If you want to link them later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const {\n team: { slug: teamSlug },\n } = await validateOrSelectTeam(\n ctx,\n undefined,\n \"Choose a team for your deployments:\",\n );\n let dashboardUrl = teamDashboardUrl(teamSlug);\n for (const deployment of legacyDeployments) {\n const result = await linkSingleDeployment(\n ctx,\n deployment.deploymentName,\n configuredDeployment,\n { teamSlug, projectSlug: null },\n );\n if (deployment.deploymentName === configuredDeployment) {\n dashboardUrl = result.dashboardUrl;\n }\n }\n logFinishedStep(\n `Successfully linked your deployments! Visit ${dashboardUrl} to get started.`,\n );\n return;\n }\n\n // Interactive mode: let user choose which legacy deployments to link\n while (true) {\n const currentLegacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (currentLegacyDeployments.length === 0) {\n logMessage(\"All deployments have been linked.\");\n break;\n }\n logMessage(\n getDeploymentListMessage(\n currentLegacyDeployments.map((d) => d.deploymentName),\n ),\n );\n const deploymentToLink = await promptSearch(ctx, {\n message: \"Which deployment would you like to link to your account?\",\n choices: currentLegacyDeployments.map((d) => ({\n name: d.deploymentName,\n value: d.deploymentName,\n })),\n });\n\n await linkSingleDeployment(ctx, deploymentToLink, configuredDeployment);\n\n const shouldContinue = await promptYesNo(ctx, {\n message: \"Would you like to link another deployment?\",\n default: true,\n });\n if (!shouldContinue) {\n break;\n }\n }\n}\n\n/**\n * Link a single deployment to a project, prompting for team and project selection.\n * Updates env vars if this is the currently configured deployment.\n */\nasync function linkSingleDeployment(\n ctx: Context,\n deploymentName: string,\n configuredDeployment: string | null,\n options?: {\n teamSlug?: string;\n projectSlug?: string | null;\n },\n): Promise<{ dashboardUrl: string }> {\n const { team } = await validateOrSelectTeam(\n ctx,\n options?.teamSlug,\n \"Choose a team for your deployment:\",\n );\n\n const projectSlug =\n options?.projectSlug ??\n (\n await selectProject(ctx, \"ask\", {\n team: team.slug,\n devDeployment: \"local\",\n defaultProjectName: removeAnonymousPrefix(deploymentName),\n })\n ).projectSlug;\n\n const linkedDeployment = await handleLinkToProject(ctx, {\n deploymentName,\n teamSlug: team.slug,\n teamId: team.id,\n projectSlug,\n });\n\n if (deploymentName === configuredDeployment) {\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: linkedDeployment.deploymentUrl,\n deploymentName: linkedDeployment.deploymentName,\n teamSlug: team.slug,\n projectSlug: linkedDeployment.projectSlug,\n deploymentType: \"local\",\n },\n configuredDeployment,\n );\n }\n\n return {\n dashboardUrl: deploymentDashboardUrlPage(\n linkedDeployment.deploymentName,\n \"\",\n ),\n };\n}\n\nfunction getDeploymentListMessage(anonymousDeploymentNames: string[]) {\n let message = `You have ${anonymousDeploymentNames.length} existing deployments.`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n return message;\n}\n\nfunction getMessage(anonymousDeploymentNames: string[]) {\n if (anonymousDeploymentNames.length === 1) {\n return `Would you like to link your existing deployment to your account? (\"${anonymousDeploymentNames[0]}\")`;\n }\n let message = `You have ${anonymousDeploymentNames.length} existing deployments. Would you like to link them to your account?`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n message += `\\n\\nYou can alternatively run \\`npx convex login --link-deployments\\` to interactively choose which deployments to add.`;\n return message;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport * as dotenv from \"dotenv\";\nimport { BigBrainAuth, Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, logWarning } from \"../bundler/log.js\";\nimport {\n checkAuthorization,\n isAuthorizedHeader,\n performLogin,\n} from \"./lib/login.js\";\nimport {\n loadProjectLocalConfig,\n loadUuidForAnonymousUser,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n handleLinkToProject,\n listLegacyAnonymousDeployments,\n} from \"./lib/localDeployment/anonymous.js\";\nimport {\n DASHBOARD_HOST,\n deploymentDashboardUrlPage,\n teamDashboardUrl,\n} from \"./lib/dashboard.js\";\nimport { promptSearch, promptYesNo } from \"./lib/utils/prompts.js\";\nimport {\n CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,\n ENV_VAR_FILE_PATH,\n validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport {\n selectProject,\n updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport {\n getDeploymentSelection,\n shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport {\n isAnonymousDeployment,\n removeAnonymousPrefix,\n} from \"./lib/deployment.js\";\nimport {\n readGlobalConfig,\n globalConfigPath,\n} from \"./lib/utils/globalConfig.js\";\nimport { getTeamsForUser } from \"./lib/api.js\";\n\n/**\n * The env file a deploy key came from, or null if it came from the shell.\n * `dotenv` doesn't overwrite variables that are already set, so a value from\n * the shell outranks these files -- match on the value to tell them apart.\n */\nfunction deployKeyEnvFile(\n ctx: Context,\n envVarName: string,\n value: string,\n): string | null {\n for (const file of [ENV_VAR_FILE_PATH, \".env\"]) {\n if (!ctx.fs.exists(file)) {\n continue;\n }\n if (dotenv.parse(ctx.fs.readUtf8File(file))[envVarName] === value) {\n return file;\n }\n }\n return null;\n}\n\n/**\n * A project or deployment key in the environment outranks the account token for\n * commands run from this directory, and an expired one makes the CLI look\n * logged out, so report it separately from the account.\n */\nasync function reportDeployKeyInWorkingDirectory(\n ctx: Context,\n auth: BigBrainAuth | null,\n) {\n // A preview deploy key is only used when there's no account token at all.\n if (\n auth === null ||\n auth.kind === \"accessToken\" ||\n auth.kind === \"previewDeployKey\"\n ) {\n return;\n }\n const key = auth.kind === \"projectKey\" ? auth.projectKey : auth.deploymentKey;\n const envVarName = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]\n ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME\n : CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;\n const envFile = deployKeyEnvFile(ctx, envVarName, key);\n const source = envFile ?? \"shell environment\";\n // Big Brain only strips a `project:`/`team:` prefix itself, so a deployment\n // key authorizes only without its `dev:`/`prod:` prefix. Split on the first\n // `|` like the server does, so a secret containing one survives.\n const secret = key.slice(key.indexOf(\"|\") + 1);\n if (await isAuthorizedHeader(ctx, `Bearer ${secret}`)) {\n logMessage(`Working Directory: Valid ${envVarName} in ${source}`);\n return;\n }\n logWarning(`Working Directory: Invalid ${envVarName} in ${source}`);\n}\n\nconst loginStatus = new Command(\"status\")\n .description(\"Check login status and list accessible teams\")\n .allowExcessArguments(false)\n .action(async () => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // `_updateBigBrainAuth` below replaces any deploy key in `ctx` with the\n // account token, so read the deploy key first.\n const auth = ctx.bigBrainAuth();\n\n const globalConfig = readGlobalConfig(ctx);\n if (globalConfig === null) {\n logMessage(`No Convex account token found in: ${globalConfigPath()}`);\n logMessage(\"Status: Not logged in\");\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n return;\n }\n logMessage(`Convex account token found in: ${globalConfigPath()}`);\n\n const accessToken = globalConfig.accessToken;\n if (!(await isAuthorizedHeader(ctx, `Bearer ${accessToken}`))) {\n logMessage(\"Status: Not logged in\");\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n return;\n }\n\n logMessage(\"Status: Logged in\");\n // Describe the account, even if a deploy key outranks it for other commands.\n ctx._updateBigBrainAuth({\n kind: \"accessToken\",\n header: `Bearer ${accessToken}`,\n accessToken,\n });\n const teams = await getTeamsForUser(ctx);\n logMessage(\n `Teams: ${teams.length} team${teams.length === 1 ? \"\" : \"s\"} accessible`,\n );\n for (const team of teams) {\n logMessage(` - ${team.name} (${team.slug})`);\n }\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n });\n\nexport const login = new Command(\"login\")\n .description(\"Login to Convex\")\n .allowExcessArguments(false)\n .option(\n \"--device-name <name>\",\n \"Provide a name for the device being authorized\",\n )\n .option(\n \"-f, --force\",\n \"Proceed with login even if a valid access token already exists for this device\",\n )\n .option(\n \"--no-open\",\n \"Don't automatically open the login link in the default browser\",\n )\n .addOption(\n new Option(\n \"--login-flow <mode>\",\n `How to log in; defaults to guessing based on the environment.`,\n )\n .choices([\"paste\", \"auto\", \"poll\"] as const)\n .default(\"auto\" as const),\n )\n .addOption(new Option(\"--link-deployments\").hideHelp())\n // These options are hidden from the help/usage message, but allow overriding settings for testing.\n // Change the auth credentials with the auth provider\n .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n // Skip the auth provider login and directly use this access token\n .addOption(new Option(\"--override-access-token <token>\").hideHelp())\n // Automatically accept opt ins without prompting\n .addOption(new Option(\"--accept-opt-ins\").hideHelp())\n // Dump the access token from the auth provider and skip authorization with Convex\n .addOption(new Option(\"--dump-access-token\").hideHelp())\n // Hidden option for tests to check if the user is logged in.\n .addOption(new Option(\"--check-login\").hideHelp())\n // Redirect to Vercel SSO integration URL\n .addOption(\n new Option(\n \"--vercel\",\n \"Redirect to Vercel SSO integration for login\",\n ).hideHelp(),\n )\n // Override the Vercel URL slug (defaults to 'convex')\n .addOption(new Option(\"--vercel-override <slug>\").hideHelp())\n .addCommand(loginStatus)\n .addHelpCommand(false)\n .action(async (options, cmd: Command) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n if (\n !options.force &&\n (await checkAuthorization(ctx, !!options.acceptOptIns))\n ) {\n logFinishedStep(\n \"This device has previously been authorized and is ready for use with Convex.\",\n );\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n return;\n }\n if (!options.force && options.checkLogin) {\n const isLoggedIn = await checkAuthorization(ctx, !!options.acceptOptIns);\n if (!isLoggedIn) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: \"You are not logged in.\",\n printedMessage: \"You are not logged in.\",\n });\n }\n }\n if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {\n cmd.error(\n \"If overriding credentials, both username and password must be provided\",\n );\n }\n\n const uuid = loadUuidForAnonymousUser(ctx);\n await performLogin(ctx, {\n ...options,\n anonymousId: uuid,\n vercel: options.vercel,\n vercelOverride: options.vercelOverride,\n });\n\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n });\n\nasync function handleLinkingDeployments(\n ctx: Context,\n args: {\n interactive: boolean;\n },\n) {\n if (!shouldAllowAnonymousDevelopment()) {\n return;\n }\n\n // Check for project-local anonymous deployment first - this takes priority\n const projectLocal = loadProjectLocalConfig(ctx);\n if (\n projectLocal !== null &&\n isAnonymousDeployment(projectLocal.deploymentName)\n ) {\n const shouldLink = await promptYesNo(ctx, {\n message: `Would you like to link your existing deployment to your account? (\"${projectLocal.deploymentName}\")`,\n default: true,\n });\n if (!shouldLink) {\n logMessage(\n \"Not linking your existing deployment. If you want to link it later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const { dashboardUrl } = await linkSingleDeployment(\n ctx,\n projectLocal.deploymentName,\n projectLocal.deploymentName,\n );\n logFinishedStep(`Visit ${dashboardUrl} to get started.`);\n return;\n }\n\n // No project-local deployment - check for legacy deployments\n const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (legacyDeployments.length === 0) {\n if (args.interactive) {\n logMessage(\n \"It doesn't look like you have any deployments to link. You can run `npx convex dev` to set up a new project or select an existing one.\",\n );\n }\n return;\n }\n\n // Get the currently configured deployment (if any) for env var updates\n const deploymentSelection = await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n const configuredDeployment =\n deploymentSelection.kind === \"anonymous\"\n ? deploymentSelection.deploymentName\n : null;\n\n if (!args.interactive) {\n // Non-interactive: link all legacy deployments automatically\n const message = getMessage(legacyDeployments.map((d) => d.deploymentName));\n const createProjects = await promptYesNo(ctx, {\n message,\n default: true,\n });\n if (!createProjects) {\n logMessage(\n \"Not linking your existing deployments. If you want to link them later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const {\n team: { slug: teamSlug },\n } = await validateOrSelectTeam(\n ctx,\n undefined,\n \"Choose a team for your deployments:\",\n );\n let dashboardUrl = teamDashboardUrl(teamSlug);\n for (const deployment of legacyDeployments) {\n const result = await linkSingleDeployment(\n ctx,\n deployment.deploymentName,\n configuredDeployment,\n { teamSlug, projectSlug: null },\n );\n if (deployment.deploymentName === configuredDeployment) {\n dashboardUrl = result.dashboardUrl;\n }\n }\n logFinishedStep(\n `Successfully linked your deployments! Visit ${dashboardUrl} to get started.`,\n );\n return;\n }\n\n // Interactive mode: let user choose which legacy deployments to link\n while (true) {\n const currentLegacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (currentLegacyDeployments.length === 0) {\n logMessage(\"All deployments have been linked.\");\n break;\n }\n logMessage(\n getDeploymentListMessage(\n currentLegacyDeployments.map((d) => d.deploymentName),\n ),\n );\n const deploymentToLink = await promptSearch(ctx, {\n message: \"Which deployment would you like to link to your account?\",\n choices: currentLegacyDeployments.map((d) => ({\n name: d.deploymentName,\n value: d.deploymentName,\n })),\n });\n\n await linkSingleDeployment(ctx, deploymentToLink, configuredDeployment);\n\n const shouldContinue = await promptYesNo(ctx, {\n message: \"Would you like to link another deployment?\",\n default: true,\n });\n if (!shouldContinue) {\n break;\n }\n }\n}\n\n/**\n * Link a single deployment to a project, prompting for team and project selection.\n * Updates env vars if this is the currently configured deployment.\n */\nasync function linkSingleDeployment(\n ctx: Context,\n deploymentName: string,\n configuredDeployment: string | null,\n options?: {\n teamSlug?: string;\n projectSlug?: string | null;\n },\n): Promise<{ dashboardUrl: string }> {\n const { team } = await validateOrSelectTeam(\n ctx,\n options?.teamSlug,\n \"Choose a team for your deployment:\",\n );\n\n const projectSlug =\n options?.projectSlug ??\n (\n await selectProject(ctx, \"ask\", {\n team: team.slug,\n devDeployment: \"local\",\n defaultProjectName: removeAnonymousPrefix(deploymentName),\n })\n ).projectSlug;\n\n const linkedDeployment = await handleLinkToProject(ctx, {\n deploymentName,\n teamSlug: team.slug,\n teamId: team.id,\n projectSlug,\n });\n\n if (deploymentName === configuredDeployment) {\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: linkedDeployment.deploymentUrl,\n deploymentName: linkedDeployment.deploymentName,\n teamSlug: team.slug,\n projectSlug: linkedDeployment.projectSlug,\n deploymentType: \"local\",\n },\n configuredDeployment,\n );\n }\n\n return {\n dashboardUrl: deploymentDashboardUrlPage(\n linkedDeployment.deploymentName,\n \"\",\n ),\n };\n}\n\nfunction getDeploymentListMessage(anonymousDeploymentNames: string[]) {\n let message = `You have ${anonymousDeploymentNames.length} existing deployments.`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n return message;\n}\n\nfunction getMessage(anonymousDeploymentNames: string[]) {\n if (anonymousDeploymentNames.length === 1) {\n return `Would you like to link your existing deployment to your account? (\"${anonymousDeploymentNames[0]}\")`;\n }\n let message = `You have ${anonymousDeploymentNames.length} existing deployments. Would you like to link them to your account?`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n message += `\\n\\nYou can alternatively run \\`npx convex login --link-deployments\\` to interactively choose which deployments to add.`;\n return message;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -18,16 +18,16 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var mcp_exports = {};
20
20
  __export(mcp_exports, {
21
+ makeServer: () => makeServer,
21
22
  mcp: () => mcp
22
23
  });
23
24
  module.exports = __toCommonJS(mcp_exports);
24
25
  var import_extra_typings = require("@commander-js/extra-typings");
25
26
  var import_context = require("../bundler/context.js");
26
- var import_server = require("@modelcontextprotocol/sdk/server/index.js");
27
- var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
27
+ var import_server = require("@modelcontextprotocol/server");
28
+ var import_stdio = require("@modelcontextprotocol/server/stdio");
28
29
  var import_command = require("./lib/command.js");
29
30
  var import_login = require("./lib/login.js");
30
- var import_types = require("@modelcontextprotocol/sdk/types.js");
31
31
  var import_requestContext = require("./lib/mcp/requestContext.js");
32
32
  var import_tools = require("./lib/mcp/tools/index.js");
33
33
  var import_mutex = require("./lib/utils/mutex.js");
@@ -100,69 +100,66 @@ function makeServer(options) {
100
100
  }
101
101
  }
102
102
  );
103
- server.setRequestHandler(
104
- import_types.CallToolRequestSchema,
105
- async (request) => {
106
- const ctx = new import_requestContext.RequestContext(options);
107
- await (0, import_deploymentSelection.initializeBigBrainAuth)(ctx, options);
108
- try {
109
- const authorized = await (0, import_login.checkAuthorization)(ctx, false);
110
- if (!authorized) {
111
- await ctx.crash({
112
- exitCode: 1,
113
- errorType: "fatal",
114
- printedMessage: "Not Authorized: Run `npx convex dev` to login to your Convex project."
115
- });
116
- }
117
- if (!request.params.arguments) {
118
- await ctx.crash({
119
- exitCode: 1,
120
- errorType: "fatal",
121
- printedMessage: "No arguments provided"
122
- });
123
- }
124
- const convexTool = enabledToolsByName[request.params.name];
125
- if (!convexTool) {
126
- await ctx.crash({
127
- exitCode: 1,
128
- errorType: "fatal",
129
- printedMessage: `Tool ${request.params.name} not found`
130
- });
131
- }
132
- const input = convexTool.inputSchema.parse(request.params.arguments);
133
- const result = await mutex.runExclusive(async () => {
134
- return await convexTool.handler(ctx, input);
103
+ server.setRequestHandler("tools/call", async (request) => {
104
+ const ctx = new import_requestContext.RequestContext(options);
105
+ await (0, import_deploymentSelection.initializeBigBrainAuth)(ctx, options);
106
+ try {
107
+ const authorized = await (0, import_login.checkAuthorization)(ctx, false);
108
+ if (!authorized) {
109
+ await ctx.crash({
110
+ exitCode: 1,
111
+ errorType: "fatal",
112
+ printedMessage: "Not Authorized: Run `npx convex dev` to login to your Convex project."
135
113
  });
136
- return {
137
- content: [
138
- {
139
- type: "text",
140
- text: JSON.stringify(result)
141
- }
142
- ]
143
- };
144
- } catch (error) {
145
- let message;
146
- if (error instanceof import_requestContext.RequestCrash) {
147
- message = error.printedMessage;
148
- } else if (error instanceof Error) {
149
- message = error.message;
150
- } else {
151
- message = String(error);
152
- }
153
- return {
154
- content: [
155
- {
156
- type: "text",
157
- text: JSON.stringify({ error: message })
158
- }
159
- ],
160
- isError: true
161
- };
162
114
  }
115
+ if (!request.params.arguments) {
116
+ await ctx.crash({
117
+ exitCode: 1,
118
+ errorType: "fatal",
119
+ printedMessage: "No arguments provided"
120
+ });
121
+ }
122
+ const convexTool = enabledToolsByName[request.params.name];
123
+ if (!convexTool) {
124
+ await ctx.crash({
125
+ exitCode: 1,
126
+ errorType: "fatal",
127
+ printedMessage: `Tool ${request.params.name} not found`
128
+ });
129
+ }
130
+ const input = convexTool.inputSchema.parse(request.params.arguments);
131
+ const result = await mutex.runExclusive(async () => {
132
+ return await convexTool.handler(ctx, input);
133
+ });
134
+ return {
135
+ content: [
136
+ {
137
+ type: "text",
138
+ text: JSON.stringify(result)
139
+ }
140
+ ]
141
+ };
142
+ } catch (error) {
143
+ let message;
144
+ if (error instanceof import_requestContext.RequestCrash) {
145
+ message = error.printedMessage;
146
+ } else if (error instanceof Error) {
147
+ message = error.message;
148
+ } else {
149
+ message = String(error);
150
+ }
151
+ return {
152
+ content: [
153
+ {
154
+ type: "text",
155
+ text: JSON.stringify({ error: message })
156
+ }
157
+ ],
158
+ isError: true
159
+ };
163
160
  }
164
- );
165
- server.setRequestHandler(import_types.ListToolsRequestSchema, async () => {
161
+ });
162
+ server.setRequestHandler("tools/list", async () => {
166
163
  return {
167
164
  tools: Object.values(enabledToolsByName).map(import_tools.mcpTool)
168
165
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/mcp.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n CallToolRequest,\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n McpOptions,\n RequestContext,\n RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n .description(\n \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n \"This server exposes your Convex codebase to AI tools in a structured way.\",\n )\n .allowExcessArguments(false);\n\nmcp\n .command(\"start\")\n .summary(\"Start the MCP server\")\n .description(\n \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n )\n .option(\n \"--project-dir <project-dir>\",\n \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n )\n .option(\n \"--disable-tools <tool-names>\",\n `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n )\n .option(\n \"--cautiously-allow-production-pii\",\n \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n false,\n )\n .option(\n \"--dangerously-enable-production-deployments\",\n \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n false,\n )\n // Deprecated option, we swapped the default. no-op.\n .addOption(\n new Option(\"--disable-production-deployments\")\n .conflicts(\"--dangerously-enable-production-deployments\")\n .hideHelp(),\n )\n .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n .action(async (options) => {\n const ctx = await oneoffContext(options);\n try {\n const server = makeServer(options);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n // Keep the process running\n await new Promise(() => {});\n } catch (error: any) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Failed to start MCP server: ${error}`,\n printedMessage: `Failed to start MCP server: ${error}`,\n });\n }\n });\n\nfunction makeServer(options: McpOptions) {\n const disabledToolNames = new Set<string>();\n for (const toolName of options.disableTools?.split(\",\") ?? []) {\n const name = toolName.trim();\n if (!allToolNames.includes(name)) {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\n `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n );\n }\n disabledToolNames.add(name);\n }\n\n const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n for (const tool of convexTools) {\n if (!disabledToolNames.has(tool.name)) {\n enabledToolsByName[tool.name] = tool;\n }\n }\n\n const mutex = new Mutex();\n const server = new Server(\n {\n name: \"Convex MCP Server\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n server.setRequestHandler(\n CallToolRequestSchema,\n async (request: CallToolRequest) => {\n const ctx = new RequestContext(options);\n await initializeBigBrainAuth(ctx, options);\n try {\n const authorized = await checkAuthorization(ctx, false);\n if (!authorized) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n });\n }\n if (!request.params.arguments) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No arguments provided\",\n });\n }\n const convexTool = enabledToolsByName[request.params.name];\n if (!convexTool) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Tool ${request.params.name} not found`,\n });\n }\n const input = convexTool.inputSchema.parse(request.params.arguments);\n\n // Serialize tool handlers since they're mutating the current working directory.\n const result = await mutex.runExclusive(async () => {\n return await convexTool.handler(ctx, input);\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n let message: string;\n if (error instanceof RequestCrash) {\n message = error.printedMessage;\n } else if (error instanceof Error) {\n message = error.message;\n } else {\n message = String(error);\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }),\n },\n ],\n isError: true,\n };\n }\n },\n );\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: Object.values(enabledToolsByName).map(mcpTool),\n };\n });\n return server;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { CallToolRequest, Server } from \"@modelcontextprotocol/server\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/server/stdio\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n McpOptions,\n RequestContext,\n RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n .description(\n \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n \"This server exposes your Convex codebase to AI tools in a structured way.\",\n )\n .allowExcessArguments(false);\n\nmcp\n .command(\"start\")\n .summary(\"Start the MCP server\")\n .description(\n \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n )\n .option(\n \"--project-dir <project-dir>\",\n \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n )\n .option(\n \"--disable-tools <tool-names>\",\n `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n )\n .option(\n \"--cautiously-allow-production-pii\",\n \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n false,\n )\n .option(\n \"--dangerously-enable-production-deployments\",\n \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n false,\n )\n // Deprecated option, we swapped the default. no-op.\n .addOption(\n new Option(\"--disable-production-deployments\")\n .conflicts(\"--dangerously-enable-production-deployments\")\n .hideHelp(),\n )\n .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n .action(async (options) => {\n const ctx = await oneoffContext(options);\n try {\n const server = makeServer(options);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n // Keep the process running\n await new Promise(() => {});\n } catch (error: any) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Failed to start MCP server: ${error}`,\n printedMessage: `Failed to start MCP server: ${error}`,\n });\n }\n });\n\nexport function makeServer(options: McpOptions) {\n const disabledToolNames = new Set<string>();\n for (const toolName of options.disableTools?.split(\",\") ?? []) {\n const name = toolName.trim();\n if (!allToolNames.includes(name)) {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\n `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n );\n }\n disabledToolNames.add(name);\n }\n\n const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n for (const tool of convexTools) {\n if (!disabledToolNames.has(tool.name)) {\n enabledToolsByName[tool.name] = tool;\n }\n }\n\n const mutex = new Mutex();\n const server = new Server(\n {\n name: \"Convex MCP Server\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n server.setRequestHandler(\"tools/call\", async (request: CallToolRequest) => {\n const ctx = new RequestContext(options);\n await initializeBigBrainAuth(ctx, options);\n try {\n const authorized = await checkAuthorization(ctx, false);\n if (!authorized) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n });\n }\n if (!request.params.arguments) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No arguments provided\",\n });\n }\n const convexTool = enabledToolsByName[request.params.name];\n if (!convexTool) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Tool ${request.params.name} not found`,\n });\n }\n const input = convexTool.inputSchema.parse(request.params.arguments);\n\n // Serialize tool handlers since they're mutating the current working directory.\n const result = await mutex.runExclusive(async () => {\n return await convexTool.handler(ctx, input);\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n let message: string;\n if (error instanceof RequestCrash) {\n message = error.printedMessage;\n } else if (error instanceof Error) {\n message = error.message;\n } else {\n message = String(error);\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }),\n },\n ],\n isError: true,\n };\n }\n });\n server.setRequestHandler(\"tools/list\", async () => {\n return {\n tools: Object.values(enabledToolsByName).map(mcpTool),\n };\n });\n return server;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/cjs/index.js CHANGED
@@ -21,5 +21,5 @@ __export(index_exports, {
21
21
  version: () => version
22
22
  });
23
23
  module.exports = __toCommonJS(index_exports);
24
- const version = "1.43.0";
24
+ const version = "1.45.0-alpha.0";
25
25
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["export const version = \"1.43.0\";\n"],
4
+ "sourcesContent": ["export const version = \"1.45.0-alpha.0\";"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,UAAU;",
6
6
  "names": []
7
7
  }
@@ -65,39 +65,37 @@ function ConvexProviderWithAuth({
65
65
  setIsRefreshing(false);
66
66
  }
67
67
  const isAuthenticated = authProviderAuthenticated && (isConvexAuthenticated ?? false);
68
- return /* @__PURE__ */ import_react.default.createElement(
69
- ConvexAuthContext.Provider,
70
- {
71
- value: {
72
- isLoading: isConvexAuthenticated === null,
73
- isAuthenticated,
74
- isRefreshing: isRefreshing && isAuthenticated
75
- }
76
- },
77
- /* @__PURE__ */ import_react.default.createElement(
78
- ConvexAuthStateFirstEffect,
79
- {
80
- authProviderAuthenticated,
81
- fetchAccessToken,
82
- authProviderLoading,
83
- client,
84
- setIsConvexAuthenticated,
85
- setIsRefreshing
86
- }
87
- ),
88
- /* @__PURE__ */ import_react.default.createElement(import_client2.ConvexProvider, { client }, children),
89
- /* @__PURE__ */ import_react.default.createElement(
90
- ConvexAuthStateLastEffect,
91
- {
92
- authProviderAuthenticated,
93
- fetchAccessToken,
94
- authProviderLoading,
95
- client,
96
- setIsConvexAuthenticated,
97
- setIsRefreshing
98
- }
99
- )
68
+ const isLoading = isConvexAuthenticated === null;
69
+ const isRefreshingWhileAuthenticated = isRefreshing && isAuthenticated;
70
+ const authState = (0, import_react.useMemo)(
71
+ () => ({
72
+ isLoading,
73
+ isAuthenticated,
74
+ isRefreshing: isRefreshingWhileAuthenticated
75
+ }),
76
+ [isLoading, isAuthenticated, isRefreshingWhileAuthenticated]
100
77
  );
78
+ return /* @__PURE__ */ import_react.default.createElement(ConvexAuthContext.Provider, { value: authState }, /* @__PURE__ */ import_react.default.createElement(
79
+ ConvexAuthStateFirstEffect,
80
+ {
81
+ authProviderAuthenticated,
82
+ fetchAccessToken,
83
+ authProviderLoading,
84
+ client,
85
+ setIsConvexAuthenticated,
86
+ setIsRefreshing
87
+ }
88
+ ), /* @__PURE__ */ import_react.default.createElement(import_client2.ConvexProvider, { client }, children), /* @__PURE__ */ import_react.default.createElement(
89
+ ConvexAuthStateLastEffect,
90
+ {
91
+ authProviderAuthenticated,
92
+ fetchAccessToken,
93
+ authProviderLoading,
94
+ client,
95
+ setIsConvexAuthenticated,
96
+ setIsRefreshing
97
+ }
98
+ ));
101
99
  }
102
100
  function ConvexAuthStateFirstEffect({
103
101
  authProviderAuthenticated,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/react/ConvexAuthState.tsx"],
4
- "sourcesContent": ["import React, {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { AuthTokenFetcher } from \"../browser/sync/client.js\";\nimport { ConvexProvider } from \"./client.js\";\n\n// Until we can import from our own entry points (requires TypeScript 4.7),\n// just describe the interface enough to help users pass the right type.\ntype IConvexReactClient = {\n setAuth(\n fetchToken: AuthTokenFetcher,\n onChange: (isAuthenticated: boolean) => void,\n onRefreshChange?: (isRefreshing: boolean) => void,\n ): void;\n clearAuth(): void;\n};\n\n/**\n * Type representing the state of an auth integration with Convex.\n *\n * - `isLoading`: the client is still resolving the initial auth state and\n * waiting for the server to confirm the current token.\n * - `isAuthenticated`: the server has confirmed the current token.\n * - `isRefreshing`: the server rejected a previously-confirmed token and the\n * socket is paused while a replacement is fetched. Only ever `true` when\n * `isAuthenticated` is also `true`. Routine background token rotation does\n * not trigger this state.\n *\n * @public\n */\nexport type ConvexAuthState = {\n isLoading: boolean;\n isAuthenticated: boolean;\n isRefreshing: boolean;\n};\n\nconst ConvexAuthContext = createContext<ConvexAuthState>(undefined as any);\n\n/**\n * Get the {@link ConvexAuthState} within a React component.\n *\n * This relies on a Convex auth integration provider being above in the React\n * component tree. See {@link ConvexAuthState} for the meaning of each field.\n *\n * @returns The current {@link ConvexAuthState}.\n *\n * @public\n */\nexport function useConvexAuth(): {\n isLoading: boolean;\n isAuthenticated: boolean;\n isRefreshing: boolean;\n} {\n const authContext = useContext(ConvexAuthContext);\n if (authContext === undefined) {\n throw new Error(\n \"Could not find `ConvexProviderWithAuth` (or `ConvexProviderWithClerk` \" +\n \"or `ConvexProviderWithAuth0`) \" +\n \"as an ancestor component. This component may be missing, or you \" +\n \"might have two instances of the `convex/react` module loaded in your \" +\n \"project.\",\n );\n }\n return authContext;\n}\n\n/**\n * A replacement for {@link ConvexProvider} which additionally provides\n * {@link ConvexAuthState} to descendants of this component.\n *\n * Use this to integrate any auth provider with Convex. The `useAuth` prop\n * should be a React hook that returns the provider's authentication state\n * and a function to fetch a JWT access token.\n *\n * If the `useAuth` prop function updates causing a rerender then auth state\n * will transition to loading and the `fetchAccessToken()` function called again.\n *\n * See [Custom Auth Integration](https://docs.convex.dev/auth/advanced/custom-auth) for more information.\n *\n * @public\n */\nexport function ConvexProviderWithAuth({\n children,\n client,\n useAuth,\n}: {\n children?: ReactNode;\n client: IConvexReactClient;\n useAuth: () => {\n isLoading: boolean;\n isAuthenticated: boolean;\n fetchAccessToken: (args: {\n forceRefreshToken: boolean;\n }) => Promise<string | null>;\n };\n}) {\n const {\n isLoading: authProviderLoading,\n isAuthenticated: authProviderAuthenticated,\n fetchAccessToken,\n } = useAuth();\n const [isConvexAuthenticated, setIsConvexAuthenticated] = useState<\n boolean | null\n >(null);\n const [isRefreshing, setIsRefreshing] = useState<boolean>(false);\n\n // If the useAuth went back to the authProviderLoading state (which is unusual but possible)\n // reset the Convex auth state to null so that we can correctly\n // transition the state from \"loading\" to \"authenticated\"\n // without going through \"unauthenticated\".\n if (authProviderLoading && isConvexAuthenticated !== null) {\n setIsConvexAuthenticated(null);\n setIsRefreshing(false);\n }\n\n // If the useAuth goes to not authenticated then isConvexAuthenticated should reflect that.\n if (\n !authProviderLoading &&\n !authProviderAuthenticated &&\n isConvexAuthenticated !== false\n ) {\n setIsConvexAuthenticated(false);\n setIsRefreshing(false);\n }\n\n const isAuthenticated =\n authProviderAuthenticated && (isConvexAuthenticated ?? false);\n\n return (\n <ConvexAuthContext.Provider\n value={{\n isLoading: isConvexAuthenticated === null,\n isAuthenticated,\n isRefreshing: isRefreshing && isAuthenticated,\n }}\n >\n <ConvexAuthStateFirstEffect\n authProviderAuthenticated={authProviderAuthenticated}\n fetchAccessToken={fetchAccessToken}\n authProviderLoading={authProviderLoading}\n client={client}\n setIsConvexAuthenticated={setIsConvexAuthenticated}\n setIsRefreshing={setIsRefreshing}\n />\n <ConvexProvider client={client as any}>{children}</ConvexProvider>\n <ConvexAuthStateLastEffect\n authProviderAuthenticated={authProviderAuthenticated}\n fetchAccessToken={fetchAccessToken}\n authProviderLoading={authProviderLoading}\n client={client}\n setIsConvexAuthenticated={setIsConvexAuthenticated}\n setIsRefreshing={setIsRefreshing}\n />\n </ConvexAuthContext.Provider>\n );\n}\n\n// First child ensures we `setAuth` before\n// other child components subscribe to queries via `useEffect`.\nfunction ConvexAuthStateFirstEffect({\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n}: {\n authProviderAuthenticated: boolean;\n fetchAccessToken: (args: {\n forceRefreshToken: boolean;\n }) => Promise<string | null>;\n authProviderLoading: boolean;\n client: IConvexReactClient;\n setIsConvexAuthenticated: React.Dispatch<\n React.SetStateAction<boolean | null>\n >;\n setIsRefreshing: React.Dispatch<React.SetStateAction<boolean>>;\n}) {\n useEffect(() => {\n let isThisEffectRelevant = true;\n if (authProviderAuthenticated) {\n client.setAuth(\n fetchAccessToken,\n (backendReportsIsAuthenticated) => {\n if (isThisEffectRelevant) {\n setIsConvexAuthenticated(() => backendReportsIsAuthenticated);\n }\n },\n (isRefreshing) => {\n if (isThisEffectRelevant) {\n setIsRefreshing(isRefreshing);\n }\n },\n );\n return () => {\n isThisEffectRelevant = false;\n\n // If unmounting or something changed before we finished fetching the token\n // we shouldn't transition to a loaded state.\n setIsConvexAuthenticated((isConvexAuthenticated: boolean | null) =>\n isConvexAuthenticated ? false : null,\n );\n setIsRefreshing(false);\n };\n }\n }, [\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n ]);\n return null;\n}\n\n// Last child ensures we `clearAuth` last,\n// so that queries from unmounted sibling components\n// unsubscribe first and don't rerun without auth on the server\nfunction ConvexAuthStateLastEffect({\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n}: {\n authProviderAuthenticated: boolean;\n fetchAccessToken: (args: {\n forceRefreshToken: boolean;\n }) => Promise<string | null>;\n authProviderLoading: boolean;\n client: IConvexReactClient;\n setIsConvexAuthenticated: React.Dispatch<\n React.SetStateAction<boolean | null>\n >;\n setIsRefreshing: React.Dispatch<React.SetStateAction<boolean>>;\n}) {\n useEffect(() => {\n // If rendered with authProviderAuthenticated=true then clear that auth on in cleanup.\n if (authProviderAuthenticated) {\n return () => {\n client.clearAuth();\n // Set state back to loading in case this is a transition from one\n // fetchToken function to another which signals a new auth context,\n // e.g. a new orgId from Clerk. Auth context changes like this\n // return isAuthenticated: true from useAuth() but if\n // useAuth reports isAuthenticated: false on the next render\n // then this null value will be overridden to false.\n setIsConvexAuthenticated(() => null);\n setIsRefreshing(false);\n };\n }\n }, [\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n ]);\n return null;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAMO;AAEP,IAAAA,iBAA+B;AAgC/B,MAAM,wBAAoB,4BAA+B,MAAgB;AAYlE,SAAS,gBAId;AACA,QAAM,kBAAc,yBAAW,iBAAiB;AAChD,MAAI,gBAAgB,QAAW;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,IAKF;AAAA,EACF;AACA,SAAO;AACT;AAiBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,GAUG;AACD,QAAM;AAAA,IACJ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB;AAAA,EACF,IAAI,QAAQ;AACZ,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,uBAExD,IAAI;AACN,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAkB,KAAK;AAM/D,MAAI,uBAAuB,0BAA0B,MAAM;AACzD,6BAAyB,IAAI;AAC7B,oBAAgB,KAAK;AAAA,EACvB;AAGA,MACE,CAAC,uBACD,CAAC,6BACD,0BAA0B,OAC1B;AACA,6BAAyB,KAAK;AAC9B,oBAAgB,KAAK;AAAA,EACvB;AAEA,QAAM,kBACJ,8BAA8B,yBAAyB;AAEzD,SACE,6BAAAC,QAAA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,OAAO;AAAA,QACL,WAAW,0BAA0B;AAAA,QACrC;AAAA,QACA,cAAc,gBAAgB;AAAA,MAChC;AAAA;AAAA,IAEA,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IACA,6BAAAA,QAAA,cAAC,iCAAe,UAAwB,QAAS;AAAA,IACjD,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAIA,SAAS,2BAA2B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,8BAAU,MAAM;AACd,QAAI,uBAAuB;AAC3B,QAAI,2BAA2B;AAC7B,aAAO;AAAA,QACL;AAAA,QACA,CAAC,kCAAkC;AACjC,cAAI,sBAAsB;AACxB,qCAAyB,MAAM,6BAA6B;AAAA,UAC9D;AAAA,QACF;AAAA,QACA,CAAC,iBAAiB;AAChB,cAAI,sBAAsB;AACxB,4BAAgB,YAAY;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AACA,aAAO,MAAM;AACX,+BAAuB;AAIvB;AAAA,UAAyB,CAAC,0BACxB,wBAAwB,QAAQ;AAAA,QAClC;AACA,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAKA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,8BAAU,MAAM;AAEd,QAAI,2BAA2B;AAC7B,aAAO,MAAM;AACX,eAAO,UAAU;AAOjB,iCAAyB,MAAM,IAAI;AACnC,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AACT;",
4
+ "sourcesContent": ["import React, {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { AuthTokenFetcher } from \"../browser/sync/client.js\";\nimport { ConvexProvider } from \"./client.js\";\n\n// Until we can import from our own entry points (requires TypeScript 4.7),\n// just describe the interface enough to help users pass the right type.\ntype IConvexReactClient = {\n setAuth(\n fetchToken: AuthTokenFetcher,\n onChange: (isAuthenticated: boolean) => void,\n onRefreshChange?: (isRefreshing: boolean) => void,\n ): void;\n clearAuth(): void;\n};\n\n/**\n * Type representing the state of an auth integration with Convex.\n *\n * - `isLoading`: the client is still resolving the initial auth state and\n * waiting for the server to confirm the current token.\n * - `isAuthenticated`: the server has confirmed the current token.\n * - `isRefreshing`: the server rejected a previously-confirmed token and the\n * socket is paused while a replacement is fetched. Only ever `true` when\n * `isAuthenticated` is also `true`. Routine background token rotation does\n * not trigger this state.\n *\n * @public\n */\nexport type ConvexAuthState = {\n isLoading: boolean;\n isAuthenticated: boolean;\n isRefreshing: boolean;\n};\n\nconst ConvexAuthContext = createContext<ConvexAuthState>(undefined as any);\n\n/**\n * Get the {@link ConvexAuthState} within a React component.\n *\n * This relies on a Convex auth integration provider being above in the React\n * component tree. See {@link ConvexAuthState} for the meaning of each field.\n *\n * @returns The current {@link ConvexAuthState}.\n *\n * @public\n */\nexport function useConvexAuth(): {\n isLoading: boolean;\n isAuthenticated: boolean;\n isRefreshing: boolean;\n} {\n const authContext = useContext(ConvexAuthContext);\n if (authContext === undefined) {\n throw new Error(\n \"Could not find `ConvexProviderWithAuth` (or `ConvexProviderWithClerk` \" +\n \"or `ConvexProviderWithAuth0`) \" +\n \"as an ancestor component. This component may be missing, or you \" +\n \"might have two instances of the `convex/react` module loaded in your \" +\n \"project.\",\n );\n }\n return authContext;\n}\n\n/**\n * A replacement for {@link ConvexProvider} which additionally provides\n * {@link ConvexAuthState} to descendants of this component.\n *\n * Use this to integrate any auth provider with Convex. The `useAuth` prop\n * should be a React hook that returns the provider's authentication state\n * and a function to fetch a JWT access token.\n *\n * If the `useAuth` prop function updates causing a rerender then auth state\n * will transition to loading and the `fetchAccessToken()` function called again.\n *\n * See [Custom Auth Integration](https://docs.convex.dev/auth/advanced/custom-auth) for more information.\n *\n * @public\n */\nexport function ConvexProviderWithAuth({\n children,\n client,\n useAuth,\n}: {\n children?: ReactNode;\n client: IConvexReactClient;\n useAuth: () => {\n isLoading: boolean;\n isAuthenticated: boolean;\n fetchAccessToken: (args: {\n forceRefreshToken: boolean;\n }) => Promise<string | null>;\n };\n}) {\n const {\n isLoading: authProviderLoading,\n isAuthenticated: authProviderAuthenticated,\n fetchAccessToken,\n } = useAuth();\n const [isConvexAuthenticated, setIsConvexAuthenticated] = useState<\n boolean | null\n >(null);\n const [isRefreshing, setIsRefreshing] = useState<boolean>(false);\n\n // If the useAuth went back to the authProviderLoading state (which is unusual but possible)\n // reset the Convex auth state to null so that we can correctly\n // transition the state from \"loading\" to \"authenticated\"\n // without going through \"unauthenticated\".\n if (authProviderLoading && isConvexAuthenticated !== null) {\n setIsConvexAuthenticated(null);\n setIsRefreshing(false);\n }\n\n // If the useAuth goes to not authenticated then isConvexAuthenticated should reflect that.\n if (\n !authProviderLoading &&\n !authProviderAuthenticated &&\n isConvexAuthenticated !== false\n ) {\n setIsConvexAuthenticated(false);\n setIsRefreshing(false);\n }\n\n const isAuthenticated =\n authProviderAuthenticated && (isConvexAuthenticated ?? false);\n const isLoading = isConvexAuthenticated === null;\n const isRefreshingWhileAuthenticated = isRefreshing && isAuthenticated;\n\n // Stabilize the context value's identity so `useConvexAuth()` consumers\n // only re-render when the derived auth state actually changes.\n const authState = useMemo<ConvexAuthState>(\n () => ({\n isLoading,\n isAuthenticated,\n isRefreshing: isRefreshingWhileAuthenticated,\n }),\n [isLoading, isAuthenticated, isRefreshingWhileAuthenticated],\n );\n\n return (\n <ConvexAuthContext.Provider value={authState}>\n <ConvexAuthStateFirstEffect\n authProviderAuthenticated={authProviderAuthenticated}\n fetchAccessToken={fetchAccessToken}\n authProviderLoading={authProviderLoading}\n client={client}\n setIsConvexAuthenticated={setIsConvexAuthenticated}\n setIsRefreshing={setIsRefreshing}\n />\n <ConvexProvider client={client as any}>{children}</ConvexProvider>\n <ConvexAuthStateLastEffect\n authProviderAuthenticated={authProviderAuthenticated}\n fetchAccessToken={fetchAccessToken}\n authProviderLoading={authProviderLoading}\n client={client}\n setIsConvexAuthenticated={setIsConvexAuthenticated}\n setIsRefreshing={setIsRefreshing}\n />\n </ConvexAuthContext.Provider>\n );\n}\n\n// First child ensures we `setAuth` before\n// other child components subscribe to queries via `useEffect`.\nfunction ConvexAuthStateFirstEffect({\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n}: {\n authProviderAuthenticated: boolean;\n fetchAccessToken: (args: {\n forceRefreshToken: boolean;\n }) => Promise<string | null>;\n authProviderLoading: boolean;\n client: IConvexReactClient;\n setIsConvexAuthenticated: React.Dispatch<\n React.SetStateAction<boolean | null>\n >;\n setIsRefreshing: React.Dispatch<React.SetStateAction<boolean>>;\n}) {\n useEffect(() => {\n let isThisEffectRelevant = true;\n if (authProviderAuthenticated) {\n client.setAuth(\n fetchAccessToken,\n (backendReportsIsAuthenticated) => {\n if (isThisEffectRelevant) {\n setIsConvexAuthenticated(() => backendReportsIsAuthenticated);\n }\n },\n (isRefreshing) => {\n if (isThisEffectRelevant) {\n setIsRefreshing(isRefreshing);\n }\n },\n );\n return () => {\n isThisEffectRelevant = false;\n\n // If unmounting or something changed before we finished fetching the token\n // we shouldn't transition to a loaded state.\n setIsConvexAuthenticated((isConvexAuthenticated: boolean | null) =>\n isConvexAuthenticated ? false : null,\n );\n setIsRefreshing(false);\n };\n }\n }, [\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n ]);\n return null;\n}\n\n// Last child ensures we `clearAuth` last,\n// so that queries from unmounted sibling components\n// unsubscribe first and don't rerun without auth on the server\nfunction ConvexAuthStateLastEffect({\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n}: {\n authProviderAuthenticated: boolean;\n fetchAccessToken: (args: {\n forceRefreshToken: boolean;\n }) => Promise<string | null>;\n authProviderLoading: boolean;\n client: IConvexReactClient;\n setIsConvexAuthenticated: React.Dispatch<\n React.SetStateAction<boolean | null>\n >;\n setIsRefreshing: React.Dispatch<React.SetStateAction<boolean>>;\n}) {\n useEffect(() => {\n // If rendered with authProviderAuthenticated=true then clear that auth on in cleanup.\n if (authProviderAuthenticated) {\n return () => {\n client.clearAuth();\n // Set state back to loading in case this is a transition from one\n // fetchToken function to another which signals a new auth context,\n // e.g. a new orgId from Clerk. Auth context changes like this\n // return isAuthenticated: true from useAuth() but if\n // useAuth reports isAuthenticated: false on the next render\n // then this null value will be overridden to false.\n setIsConvexAuthenticated(() => null);\n setIsRefreshing(false);\n };\n }\n }, [\n authProviderAuthenticated,\n fetchAccessToken,\n authProviderLoading,\n client,\n setIsConvexAuthenticated,\n setIsRefreshing,\n ]);\n return null;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOO;AAEP,IAAAA,iBAA+B;AAgC/B,MAAM,wBAAoB,4BAA+B,MAAgB;AAYlE,SAAS,gBAId;AACA,QAAM,kBAAc,yBAAW,iBAAiB;AAChD,MAAI,gBAAgB,QAAW;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,IAKF;AAAA,EACF;AACA,SAAO;AACT;AAiBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,GAUG;AACD,QAAM;AAAA,IACJ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB;AAAA,EACF,IAAI,QAAQ;AACZ,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,uBAExD,IAAI;AACN,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAkB,KAAK;AAM/D,MAAI,uBAAuB,0BAA0B,MAAM;AACzD,6BAAyB,IAAI;AAC7B,oBAAgB,KAAK;AAAA,EACvB;AAGA,MACE,CAAC,uBACD,CAAC,6BACD,0BAA0B,OAC1B;AACA,6BAAyB,KAAK;AAC9B,oBAAgB,KAAK;AAAA,EACvB;AAEA,QAAM,kBACJ,8BAA8B,yBAAyB;AACzD,QAAM,YAAY,0BAA0B;AAC5C,QAAM,iCAAiC,gBAAgB;AAIvD,QAAM,gBAAY;AAAA,IAChB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA,CAAC,WAAW,iBAAiB,8BAA8B;AAAA,EAC7D;AAEA,SACE,6BAAAC,QAAA,cAAC,kBAAkB,UAAlB,EAA2B,OAAO,aACjC,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,GACA,6BAAAA,QAAA,cAAC,iCAAe,UAAwB,QAAS,GACjD,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,CACF;AAEJ;AAIA,SAAS,2BAA2B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,8BAAU,MAAM;AACd,QAAI,uBAAuB;AAC3B,QAAI,2BAA2B;AAC7B,aAAO;AAAA,QACL;AAAA,QACA,CAAC,kCAAkC;AACjC,cAAI,sBAAsB;AACxB,qCAAyB,MAAM,6BAA6B;AAAA,UAC9D;AAAA,QACF;AAAA,QACA,CAAC,iBAAiB;AAChB,cAAI,sBAAsB;AACxB,4BAAgB,YAAY;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AACA,aAAO,MAAM;AACX,+BAAuB;AAIvB;AAAA,UAAyB,CAAC,0BACxB,wBAAwB,QAAQ;AAAA,QAClC;AACA,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAKA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,8BAAU,MAAM;AAEd,QAAI,2BAA2B;AAC7B,aAAO,MAAM;AACX,eAAO,UAAU;AAOjB,iCAAyB,MAAM,IAAI;AACnC,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AACT;",
6
6
  "names": ["import_client", "React"]
7
7
  }
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var actions_impl_exports = {};
20
20
  __export(actions_impl_exports, {
21
+ getServiceToken: () => getServiceToken,
21
22
  setupActionCalls: () => setupActionCalls
22
23
  });
23
24
  module.exports = __toCommonJS(actions_impl_exports);
@@ -26,6 +27,7 @@ var import__ = require("../../index.js");
26
27
  var import_syscall = require("./syscall.js");
27
28
  var import_common = require("../../common/index.js");
28
29
  var import_paths = require("../components/paths.js");
30
+ var import_validate = require("./validate.js");
29
31
  function syscallArgs(requestId, functionReference, args) {
30
32
  const address = (0, import_paths.getFunctionAddress)(functionReference);
31
33
  return {
@@ -60,4 +62,14 @@ function setupActionCalls(requestId) {
60
62
  }
61
63
  };
62
64
  }
65
+ async function getServiceToken(service) {
66
+ (0, import_validate.validateArg)(service, 1, "getServiceToken", "service");
67
+ if (service !== "ai-gateway") {
68
+ throw new Error(`Unsupported service "${String(service)}"`);
69
+ }
70
+ return await (0, import_syscall.performAsyncSyscall)("1.0/createServiceToken", {
71
+ service,
72
+ version: import__.version
73
+ });
74
+ }
63
75
  //# sourceMappingURL=actions_impl.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/server/impl/actions_impl.ts"],
4
- "sourcesContent": ["import { convexToJson, jsonToConvex, Value } from \"../../values/index.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall } from \"./syscall.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport { FunctionReference } from \"../../server/api.js\";\nimport { getFunctionAddress } from \"../components/paths.js\";\n\nfunction syscallArgs(\n requestId: string,\n functionReference: any,\n args?: Record<string, Value>,\n) {\n const address = getFunctionAddress(functionReference);\n return {\n ...address,\n args: convexToJson(parseArgs(args)),\n version,\n requestId,\n };\n}\n\nexport function setupActionCalls(requestId: string) {\n return {\n runQuery: async (\n query: FunctionReference<\"query\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/query\",\n syscallArgs(requestId, query, args),\n );\n return jsonToConvex(result);\n },\n runMutation: async (\n mutation: FunctionReference<\"mutation\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/mutation\",\n syscallArgs(requestId, mutation, args),\n );\n return jsonToConvex(result);\n },\n runAction: async (\n action: FunctionReference<\"action\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/action\",\n syscallArgs(requestId, action, args),\n );\n return jsonToConvex(result);\n },\n };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAkD;AAClD,eAAwB;AACxB,qBAAoC;AACpC,oBAA0B;AAE1B,mBAAmC;AAEnC,SAAS,YACP,WACA,mBACA,MACA;AACA,QAAM,cAAU,iCAAmB,iBAAiB;AACpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAM,gCAAa,yBAAU,IAAI,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,WAAmB;AAClD,SAAO;AAAA,IACL,UAAU,OACR,OACA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,OAAO,IAAI;AAAA,MACpC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,aAAa,OACX,UACA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,UAAU,IAAI;AAAA,MACvC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW,OACT,QACA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,QAAQ,IAAI;AAAA,MACrC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import { convexToJson, jsonToConvex, Value } from \"../../values/index.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall } from \"./syscall.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport { FunctionReference } from \"../../server/api.js\";\nimport { getFunctionAddress } from \"../components/paths.js\";\nimport { validateArg } from \"./validate.js\";\n\nfunction syscallArgs(\n requestId: string,\n functionReference: any,\n args?: Record<string, Value>,\n) {\n const address = getFunctionAddress(functionReference);\n return {\n ...address,\n args: convexToJson(parseArgs(args)),\n version,\n requestId,\n };\n}\n\nexport function setupActionCalls(requestId: string) {\n return {\n runQuery: async (\n query: FunctionReference<\"query\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/query\",\n syscallArgs(requestId, query, args),\n );\n return jsonToConvex(result);\n },\n runMutation: async (\n mutation: FunctionReference<\"mutation\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/mutation\",\n syscallArgs(requestId, mutation, args),\n );\n return jsonToConvex(result);\n },\n runAction: async (\n action: FunctionReference<\"action\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/action\",\n syscallArgs(requestId, action, args),\n );\n return jsonToConvex(result);\n },\n };\n}\n\n/**\n * Get a short-lived credential for calling a Convex-managed service.\n *\n * This function can only be called while an action is running. The credential\n * is scoped to the current deployment and should be sent as a bearer token.\n * Repeated calls in the same action reuse one token; a failed mint is not\n * cached, so a later call retries.\n *\n * @param service - The service the credential may access.\n * @internal\n */\nexport async function getServiceToken(service: \"ai-gateway\"): Promise<string> {\n validateArg(service, 1, \"getServiceToken\", \"service\");\n if (service !== \"ai-gateway\") {\n throw new Error(`Unsupported service \"${String(service)}\"`);\n }\n return await performAsyncSyscall(\"1.0/createServiceToken\", {\n service,\n version,\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAkD;AAClD,eAAwB;AACxB,qBAAoC;AACpC,oBAA0B;AAE1B,mBAAmC;AACnC,sBAA4B;AAE5B,SAAS,YACP,WACA,mBACA,MACA;AACA,QAAM,cAAU,iCAAmB,iBAAiB;AACpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAM,gCAAa,yBAAU,IAAI,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,WAAmB;AAClD,SAAO;AAAA,IACL,UAAU,OACR,OACA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,OAAO,IAAI;AAAA,MACpC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,aAAa,OACX,UACA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,UAAU,IAAI;AAAA,MACvC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW,OACT,QACA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,QAAQ,IAAI;AAAA,MACrC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,EACF;AACF;AAaA,eAAsB,gBAAgB,SAAwC;AAC5E,mCAAY,SAAS,GAAG,mBAAmB,SAAS;AACpD,MAAI,YAAY,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB,OAAO,OAAO,CAAC,GAAG;AAAA,EAC5D;AACA,SAAO,UAAM,oCAAoB,0BAA0B;AAAA,IACzD;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }