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,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,31 +15,17 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
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
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var upgrade_exports = {};
30
20
  __export(upgrade_exports, {
21
+ _isDowngrade: () => _isDowngrade,
31
22
  handlePotentialUpgradeAndStart: () => handlePotentialUpgradeAndStart
32
23
  });
33
24
  module.exports = __toCommonJS(upgrade_exports);
34
- var import_path = __toESM(require("path"), 1);
35
25
  var import_log = require("../../../bundler/log.js");
36
- var import_run = require("../run.js");
37
26
  var import_filePaths = require("./filePaths.js");
38
- var import_run2 = require("./run.js");
39
- var import_convexExport = require("../convexExport.js");
40
- var import_utils = require("../utils/utils.js");
41
- var import_convexImport = require("../convexImport.js");
27
+ var import_run = require("./run.js");
42
28
  var import_prompts = require("../utils/prompts.js");
43
- var import_fsUtils = require("../fsUtils.js");
44
- var import_errors = require("./errors.js");
45
29
  var import_download = require("./download.js");
46
30
  var import_secrets = require("./secrets.js");
47
31
  async function handlePotentialUpgradeAndStart(ctx, args) {
@@ -71,7 +55,7 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
71
55
  args.deploymentName,
72
56
  newConfig
73
57
  );
74
- const { cleanupHandle: cleanupHandle2 } = await (0, import_run2.runLocalBackend)(ctx, {
58
+ const { cleanupHandle: cleanupHandle2 } = await (0, import_run.runLocalBackend)(ctx, {
75
59
  binaryPath: args.newBinaryPath,
76
60
  deploymentKind: args.deploymentKind,
77
61
  deploymentName: args.deploymentName,
@@ -100,7 +84,7 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
100
84
  ...newConfig,
101
85
  backendVersion: args.oldVersion
102
86
  });
103
- const { cleanupHandle: cleanupHandle2 } = await (0, import_run2.runLocalBackend)(ctx, {
87
+ const { cleanupHandle: cleanupHandle2 } = await (0, import_run.runLocalBackend)(ctx, {
104
88
  binaryPath: oldBinaryPath,
105
89
  ports: args.ports,
106
90
  deploymentKind: args.deploymentKind,
@@ -110,37 +94,6 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
110
94
  });
111
95
  return { cleanupHandle: cleanupHandle2, adminKey };
112
96
  }
113
- const choice = args.forceUpgrade || !process.stdin.isTTY ? "transfer" : await (0, import_prompts.promptOptions)(ctx, {
114
- message: "Transfer data from existing deployment?",
115
- default: "transfer",
116
- choices: [
117
- { name: "transfer data", value: "transfer" },
118
- { name: "start fresh", value: "reset" }
119
- ]
120
- });
121
- const deploymentStatePath = (0, import_filePaths.deploymentStateDir)(
122
- ctx,
123
- args.deploymentKind,
124
- args.deploymentName
125
- );
126
- if (choice === "reset") {
127
- (0, import_fsUtils.recursivelyDelete)(ctx, deploymentStatePath, { force: true });
128
- (0, import_filePaths.saveDeploymentConfig)(
129
- ctx,
130
- args.deploymentKind,
131
- args.deploymentName,
132
- newConfig
133
- );
134
- const { cleanupHandle: cleanupHandle2 } = await (0, import_run2.runLocalBackend)(ctx, {
135
- binaryPath: args.newBinaryPath,
136
- deploymentKind: args.deploymentKind,
137
- deploymentName: args.deploymentName,
138
- ports: args.ports,
139
- instanceSecret,
140
- isLatestVersion: true
141
- });
142
- return { cleanupHandle: cleanupHandle2, adminKey };
143
- }
144
97
  const { cleanupHandle } = await handleUpgrade(ctx, {
145
98
  deploymentKind: args.deploymentKind,
146
99
  deploymentName: args.deploymentName,
@@ -155,72 +108,14 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
155
108
  return { cleanupHandle, adminKey };
156
109
  }
157
110
  async function handleUpgrade(ctx, args) {
158
- const { adminKey } = args;
159
- const { binaryPath: oldBinaryPath } = await (0, import_download.ensureBackendBinaryDownloaded)(
160
- ctx,
161
- {
162
- kind: "version",
163
- version: args.oldVersion
164
- }
165
- );
166
- (0, import_log.logVerbose)("Running backend on old version");
167
- const { cleanupHandle: oldCleanupHandle } = await (0, import_run2.runLocalBackend)(ctx, {
168
- binaryPath: oldBinaryPath,
169
- ports: args.ports,
170
- deploymentKind: args.deploymentKind,
171
- deploymentName: args.deploymentName,
172
- instanceSecret: args.instanceSecret,
173
- isLatestVersion: false
174
- });
175
- (0, import_log.logVerbose)("Downloading env vars");
176
- const deploymentUrl = (0, import_run2.localDeploymentUrl)(args.ports.cloud);
177
- const envs = await (0, import_run.runSystemQuery)(ctx, {
178
- deploymentUrl,
179
- adminKey,
180
- functionName: "_system/cli/queryEnvironmentVariables",
181
- componentPath: void 0,
182
- args: {}
183
- });
184
- (0, import_log.logVerbose)("Doing a snapshot export");
185
- const exportPath = import_path.default.join(
186
- (0, import_filePaths.deploymentStateDir)(ctx, args.deploymentKind, args.deploymentName),
187
- "export.zip"
188
- );
189
- if (ctx.fs.exists(exportPath)) {
190
- ctx.fs.unlink(exportPath);
191
- }
192
- const snapshotExportState = await (0, import_convexExport.startSnapshotExport)(ctx, {
193
- deploymentUrl,
194
- adminKey,
195
- includeStorage: true,
196
- inputPath: exportPath
197
- });
198
- if (snapshotExportState.state !== "completed") {
199
- return ctx.crash({
200
- exitCode: 1,
201
- errorType: "fatal",
202
- printedMessage: "Failed to export snapshot"
203
- });
204
- }
205
- await (0, import_convexExport.downloadSnapshotExport)(ctx, {
206
- snapshotExportTs: snapshotExportState.start_ts,
207
- inputPath: exportPath,
208
- adminKey,
209
- deploymentUrl
210
- });
211
- (0, import_log.logVerbose)("Stopping the backend on the old version");
212
- const oldCleanupFunc = ctx.removeCleanup(oldCleanupHandle);
213
- if (oldCleanupFunc) {
214
- await oldCleanupFunc(0);
111
+ const isDowngrade = _isDowngrade(args.oldVersion, args.newVersion);
112
+ if (isDowngrade) {
113
+ (0, import_log.logWarning)(
114
+ `Moving a local deployment back to an older backend version (${args.oldVersion} \u2192 ${args.newVersion}) isn't supported: the older backend may not be able to read data written by the newer one. If it fails to start, delete the deployment's state directory to start fresh on this version.`
115
+ );
215
116
  }
216
- await (0, import_run2.ensureBackendStopped)(ctx, {
217
- ports: args.ports,
218
- maxTimeSecs: 5,
219
- deploymentName: args.deploymentName,
220
- allowOtherDeployments: false
221
- });
222
- (0, import_log.logVerbose)("Running backend on new version");
223
- const { cleanupHandle } = await (0, import_run2.runLocalBackend)(ctx, {
117
+ (0, import_log.logVerbose)(`Running backend on new version ${args.newVersion}`);
118
+ const { cleanupHandle } = await (0, import_run.runLocalBackend)(ctx, {
224
119
  binaryPath: args.newBinaryPath,
225
120
  ports: args.ports,
226
121
  deploymentKind: args.deploymentKind,
@@ -228,84 +123,24 @@ async function handleUpgrade(ctx, args) {
228
123
  instanceSecret: args.instanceSecret,
229
124
  isLatestVersion: true
230
125
  });
231
- (0, import_log.logVerbose)("Importing the env vars");
232
- if (envs.length > 0) {
233
- const fetch = (0, import_utils.deploymentFetch)(ctx, {
234
- deploymentUrl,
235
- adminKey
236
- });
237
- try {
238
- await fetch("/api/update_environment_variables", {
239
- body: JSON.stringify({ changes: envs }),
240
- method: "POST"
241
- });
242
- } catch (e) {
243
- return await (0, import_utils.logAndHandleFetchError)(ctx, e);
244
- }
245
- }
246
- (0, import_log.logVerbose)("Doing a snapshot import");
247
- const importId = await (0, import_convexImport.uploadForImport)(ctx, {
248
- deploymentUrl,
249
- adminKey,
250
- filePath: exportPath,
251
- importArgs: { format: "zip", mode: "replace", tableName: void 0 },
252
- onImportFailed: async (e) => {
253
- (0, import_log.logFailure)(`Failed to import snapshot: ${e}`);
254
- }
255
- });
256
- (0, import_log.logVerbose)(`Snapshot import started`);
257
- let status = await (0, import_convexImport.waitForStableImportState)(ctx, {
258
- importId,
259
- deploymentUrl,
260
- adminKey,
261
- onProgress: () => {
262
- return 0;
263
- }
264
- });
265
- if (status.state !== "waiting_for_confirmation") {
266
- const message = "Error while transferring data: Failed to upload snapshot";
267
- return ctx.crash({
268
- exitCode: 1,
269
- errorType: "fatal",
270
- printedMessage: message,
271
- errForSentry: new import_errors.LocalDeploymentError(message)
272
- });
273
- }
274
- await (0, import_convexImport.confirmImport)(ctx, {
275
- importId,
276
- adminKey,
277
- deploymentUrl,
278
- onError: async (e) => {
279
- (0, import_log.logFailure)(`Failed to confirm import: ${e}`);
280
- }
281
- });
282
- (0, import_log.logVerbose)(`Snapshot import confirmed`);
283
- status = await (0, import_convexImport.waitForStableImportState)(ctx, {
284
- importId,
285
- deploymentUrl,
286
- adminKey,
287
- onProgress: () => {
288
- return 0;
289
- }
290
- });
291
- (0, import_log.logVerbose)(`Snapshot import status: ${status.state}`);
292
- if (status.state !== "completed") {
293
- const message = "Error while transferring data: Failed to import snapshot";
294
- return ctx.crash({
295
- exitCode: 1,
296
- errorType: "fatal",
297
- printedMessage: message,
298
- errForSentry: new import_errors.LocalDeploymentError(message)
299
- });
300
- }
301
- (0, import_log.logFinishedStep)("Successfully upgraded to a new backend version");
126
+ (0, import_log.logFinishedStep)(
127
+ `Successfully ${isDowngrade ? "moved" : "upgraded"} to backend version ${args.newVersion}`
128
+ );
302
129
  (0, import_filePaths.saveDeploymentConfig)(ctx, args.deploymentKind, args.deploymentName, {
303
130
  ports: args.ports,
304
131
  backendVersion: args.newVersion,
305
- adminKey,
132
+ adminKey: args.adminKey,
306
133
  instanceSecret: args.instanceSecret,
307
134
  cloudProjectId: args.cloudProjectId
308
135
  });
309
136
  return { cleanupHandle };
310
137
  }
138
+ function _isDowngrade(oldVersion, newVersion) {
139
+ const oldDate = releaseDate(oldVersion);
140
+ const newDate = releaseDate(newVersion);
141
+ return oldDate !== null && newDate !== null && newDate < oldDate;
142
+ }
143
+ function releaseDate(version) {
144
+ return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version)?.[1] ?? null;
145
+ }
311
146
  //# sourceMappingURL=upgrade.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/cli/lib/localDeployment/upgrade.ts"],
4
- "sourcesContent": ["import path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logVerbose,\n} from \"../../../bundler/log.js\";\nimport { runSystemQuery } from \"../run.js\";\nimport {\n LocalDeploymentConfig,\n LocalDeploymentKind,\n deploymentStateDir,\n saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport {\n ensureBackendStopped,\n localDeploymentUrl,\n runLocalBackend,\n} from \"./run.js\";\nimport {\n downloadSnapshotExport,\n startSnapshotExport,\n} from \"../convexExport.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"../utils/utils.js\";\nimport {\n confirmImport,\n uploadForImport,\n waitForStableImportState,\n} from \"../convexImport.js\";\nimport { promptOptions, promptYesNo } from \"../utils/prompts.js\";\nimport { recursivelyDelete } from \"../fsUtils.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport {\n generateLocalDevSecretsWithLatestBinary,\n LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./secrets.js\";\n\nexport async function handlePotentialUpgradeAndStart(\n ctx: Context,\n args: {\n deploymentKind: LocalDeploymentKind;\n deploymentName: string;\n oldVersion: string | null;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n existingCredentials: { adminKey: string; instanceSecret: string } | null;\n forceUpgrade: boolean;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string; adminKey: string }> {\n const { adminKey, instanceSecret } =\n args.existingCredentials === null ||\n args.existingCredentials.instanceSecret ===\n LEGACY_LOCAL_BACKEND_INSTANCE_SECRET\n ? // Using `generateLocalDevSecretsFromLatestBinary` instead of `generateLocalDevSecrets`\n // here, because `newBinaryPath` can be a binary that doesn\u2019t support\n // the `keygen admin-key` subcommand (when the --local-backend-version flag is provided to the CLI)\n //\n // In most cases (the user is not using the flag), we have already downloaded the latest binary\n // shortly before in handleLocalDeployment/handleAnonymousDeployment, so this doesn\u2019t cause an\n // extra download (even if the user chooses later not to upgrade their deployment)\n await generateLocalDevSecretsWithLatestBinary(ctx, {\n deploymentName: args.deploymentName,\n })\n : args.existingCredentials;\n const newConfig: LocalDeploymentConfig = {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey,\n instanceSecret,\n cloudProjectId: args.cloudProjectId,\n };\n if (args.oldVersion === null || args.oldVersion === args.newVersion) {\n // No upgrade needed. Save the current config and start running the backend.\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret,\n isLatestVersion: true,\n });\n return { cleanupHandle, adminKey };\n }\n logVerbose(\n `Considering upgrade from ${args.oldVersion} to ${args.newVersion}`,\n );\n const confirmed =\n args.forceUpgrade ||\n !process.stdin.isTTY ||\n (await promptYesNo(ctx, {\n message: `This deployment is using an older version of the Convex backend. Upgrade now?`,\n default: true,\n }));\n if (!confirmed) {\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n // Skipping upgrade, save the config with the old version and run.\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ...newConfig,\n backendVersion: args.oldVersion,\n });\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret,\n isLatestVersion: false,\n });\n return { cleanupHandle, adminKey };\n }\n const choice =\n args.forceUpgrade || !process.stdin.isTTY\n ? \"transfer\"\n : await promptOptions(ctx, {\n message: \"Transfer data from existing deployment?\",\n default: \"transfer\",\n choices: [\n { name: \"transfer data\", value: \"transfer\" },\n { name: \"start fresh\", value: \"reset\" },\n ],\n });\n const deploymentStatePath = deploymentStateDir(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n );\n if (choice === \"reset\") {\n recursivelyDelete(ctx, deploymentStatePath, { force: true });\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret,\n isLatestVersion: true,\n });\n return { cleanupHandle, adminKey };\n }\n const { cleanupHandle } = await handleUpgrade(ctx, {\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n oldVersion: args.oldVersion!,\n newBinaryPath: args.newBinaryPath,\n newVersion: args.newVersion,\n ports: args.ports,\n adminKey,\n instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n return { cleanupHandle, adminKey };\n}\n\nasync function handleUpgrade(\n ctx: Context,\n args: {\n deploymentName: string;\n deploymentKind: LocalDeploymentKind;\n oldVersion: string;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n instanceSecret: string;\n adminKey: string;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string }> {\n const { adminKey } = args;\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n\n logVerbose(\"Running backend on old version\");\n const { cleanupHandle: oldCleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: false,\n });\n\n logVerbose(\"Downloading env vars\");\n const deploymentUrl = localDeploymentUrl(args.ports.cloud);\n const envs = (await runSystemQuery(ctx, {\n deploymentUrl,\n adminKey,\n functionName: \"_system/cli/queryEnvironmentVariables\",\n componentPath: undefined,\n args: {},\n })) as Array<{\n name: string;\n value: string;\n }>;\n\n logVerbose(\"Doing a snapshot export\");\n const exportPath = path.join(\n deploymentStateDir(ctx, args.deploymentKind, args.deploymentName),\n \"export.zip\",\n );\n if (ctx.fs.exists(exportPath)) {\n ctx.fs.unlink(exportPath);\n }\n const snapshotExportState = await startSnapshotExport(ctx, {\n deploymentUrl,\n adminKey,\n includeStorage: true,\n inputPath: exportPath,\n });\n if (snapshotExportState.state !== \"completed\") {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Failed to export snapshot\",\n });\n }\n await downloadSnapshotExport(ctx, {\n snapshotExportTs: snapshotExportState.start_ts,\n inputPath: exportPath,\n adminKey,\n deploymentUrl,\n });\n\n logVerbose(\"Stopping the backend on the old version\");\n const oldCleanupFunc = ctx.removeCleanup(oldCleanupHandle);\n if (oldCleanupFunc) {\n await oldCleanupFunc(0);\n }\n await ensureBackendStopped(ctx, {\n ports: args.ports,\n maxTimeSecs: 5,\n deploymentName: args.deploymentName,\n allowOtherDeployments: false,\n });\n\n // TODO(ENG-7078) save old artifacts to backup files\n logVerbose(\"Running backend on new version\");\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: true,\n });\n\n logVerbose(\"Importing the env vars\");\n if (envs.length > 0) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl,\n adminKey,\n });\n try {\n await fetch(\"/api/update_environment_variables\", {\n body: JSON.stringify({ changes: envs }),\n method: \"POST\",\n });\n } catch (e) {\n // TODO: this should ideally have a `LocalDeploymentError`\n return await logAndHandleFetchError(ctx, e);\n }\n }\n\n logVerbose(\"Doing a snapshot import\");\n const importId = await uploadForImport(ctx, {\n deploymentUrl,\n adminKey,\n filePath: exportPath,\n importArgs: { format: \"zip\", mode: \"replace\", tableName: undefined },\n onImportFailed: async (e) => {\n logFailure(`Failed to import snapshot: ${e}`);\n },\n });\n logVerbose(`Snapshot import started`);\n let status = await waitForStableImportState(ctx, {\n importId,\n deploymentUrl,\n adminKey,\n onProgress: () => {\n // do nothing for now\n return 0;\n },\n });\n if (status.state !== \"waiting_for_confirmation\") {\n const message = \"Error while transferring data: Failed to upload snapshot\";\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: new LocalDeploymentError(message),\n });\n }\n\n await confirmImport(ctx, {\n importId,\n adminKey,\n deploymentUrl,\n onError: async (e) => {\n logFailure(`Failed to confirm import: ${e}`);\n },\n });\n logVerbose(`Snapshot import confirmed`);\n status = await waitForStableImportState(ctx, {\n importId,\n deploymentUrl,\n adminKey,\n onProgress: () => {\n // do nothing for now\n return 0;\n },\n });\n logVerbose(`Snapshot import status: ${status.state}`);\n if (status.state !== \"completed\") {\n const message = \"Error while transferring data: Failed to import snapshot\";\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: new LocalDeploymentError(message),\n });\n }\n\n logFinishedStep(\"Successfully upgraded to a new backend version\");\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey,\n instanceSecret: args.instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n\n return { cleanupHandle };\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_run", "cleanupHandle", "path"]
4
+ "sourcesContent": ["import { Context } from \"../../../bundler/context.js\";\nimport {\n logFinishedStep,\n logVerbose,\n logWarning,\n} from \"../../../bundler/log.js\";\nimport {\n LocalDeploymentConfig,\n LocalDeploymentKind,\n saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport { runLocalBackend } from \"./run.js\";\nimport { promptYesNo } from \"../utils/prompts.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport {\n generateLocalDevSecretsWithLatestBinary,\n LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./secrets.js\";\n\nexport async function handlePotentialUpgradeAndStart(\n ctx: Context,\n args: {\n deploymentKind: LocalDeploymentKind;\n deploymentName: string;\n oldVersion: string | null;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n existingCredentials: { adminKey: string; instanceSecret: string } | null;\n forceUpgrade: boolean;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string; adminKey: string }> {\n const { adminKey, instanceSecret } =\n args.existingCredentials === null ||\n args.existingCredentials.instanceSecret ===\n LEGACY_LOCAL_BACKEND_INSTANCE_SECRET\n ? // Using `generateLocalDevSecretsFromLatestBinary` instead of `generateLocalDevSecrets`\n // here, because `newBinaryPath` can be a binary that doesn\u2019t support\n // the `keygen admin-key` subcommand (when the --local-backend-version flag is provided to the CLI)\n //\n // In most cases (the user is not using the flag), we have already downloaded the latest binary\n // shortly before in handleLocalDeployment/handleAnonymousDeployment, so this doesn\u2019t cause an\n // extra download (even if the user chooses later not to upgrade their deployment)\n await generateLocalDevSecretsWithLatestBinary(ctx, {\n deploymentName: args.deploymentName,\n })\n : args.existingCredentials;\n const newConfig: LocalDeploymentConfig = {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey,\n instanceSecret,\n cloudProjectId: args.cloudProjectId,\n };\n if (args.oldVersion === null || args.oldVersion === args.newVersion) {\n // No upgrade needed. Save the current config and start running the backend.\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret,\n isLatestVersion: true,\n });\n return { cleanupHandle, adminKey };\n }\n logVerbose(\n `Considering upgrade from ${args.oldVersion} to ${args.newVersion}`,\n );\n const confirmed =\n args.forceUpgrade ||\n !process.stdin.isTTY ||\n (await promptYesNo(ctx, {\n message: `This deployment is using an older version of the Convex backend. Upgrade now?`,\n default: true,\n }));\n if (!confirmed) {\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n // Skipping upgrade, save the config with the old version and run.\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ...newConfig,\n backendVersion: args.oldVersion,\n });\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret,\n isLatestVersion: false,\n });\n return { cleanupHandle, adminKey };\n }\n const { cleanupHandle } = await handleUpgrade(ctx, {\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n oldVersion: args.oldVersion,\n newBinaryPath: args.newBinaryPath,\n newVersion: args.newVersion,\n ports: args.ports,\n adminKey,\n instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n return { cleanupHandle, adminKey };\n}\n\n/**\n * Upgrade in place: hand the existing data directory to the new binary, which\n * migrates its own on-disk state on startup (the same path self-hosted\n * deployments take).\n */\nasync function handleUpgrade(\n ctx: Context,\n args: {\n deploymentName: string;\n deploymentKind: LocalDeploymentKind;\n oldVersion: string;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n instanceSecret: string;\n adminKey: string;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string }> {\n const isDowngrade = _isDowngrade(args.oldVersion, args.newVersion);\n if (isDowngrade) {\n logWarning(\n `Moving a local deployment back to an older backend version (${args.oldVersion} \u2192 ${args.newVersion}) isn't supported: ` +\n `the older backend may not be able to read data written by the newer one. ` +\n `If it fails to start, delete the deployment's state directory to start fresh on this version.`,\n );\n }\n\n logVerbose(`Running backend on new version ${args.newVersion}`);\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: true,\n });\n\n logFinishedStep(\n `Successfully ${isDowngrade ? \"moved\" : \"upgraded\"} to backend version ${args.newVersion}`,\n );\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey: args.adminKey,\n instanceSecret: args.instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n\n return { cleanupHandle };\n}\n\n/** Whether `newVersion` predates `oldVersion`, as far as we can tell. */\nexport function _isDowngrade(oldVersion: string, newVersion: string): boolean {\n const oldDate = releaseDate(oldVersion);\n const newDate = releaseDate(newVersion);\n return oldDate !== null && newDate !== null && newDate < oldDate;\n}\n\n// Backend releases are tagged `precompiled-YYYY-MM-DD-<commit>`, so the dates\n// sort lexicographically.\nfunction releaseDate(version: string): string | null {\n return /^precompiled-(\\d{4}-\\d{2}-\\d{2})-/.exec(version)?.[1] ?? null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["cleanupHandle"]
7
7
  }
@@ -30,6 +30,7 @@ var login_exports = {};
30
30
  __export(login_exports, {
31
31
  checkAuthorization: () => checkAuthorization,
32
32
  ensureLoggedIn: () => ensureLoggedIn,
33
+ isAuthorizedHeader: () => isAuthorizedHeader,
33
34
  performLogin: () => performLogin
34
35
  });
35
36
  module.exports = __toCommonJS(login_exports);
@@ -49,11 +50,7 @@ var import_deploymentSelection = require("./deploymentSelection.js");
49
50
  import_openid_client.custom.setHttpOptionsDefaults({
50
51
  timeout: parseInt(process.env.OPENID_CLIENT_TIMEOUT || "10000")
51
52
  });
52
- async function checkAuthorization(ctx, acceptOptIns) {
53
- const header = ctx.bigBrainAuth()?.header ?? null;
54
- if (header === null) {
55
- return false;
56
- }
53
+ async function isAuthorizedHeader(ctx, header) {
57
54
  try {
58
55
  const resp = await fetch(`${import_config.provisionHost}/api/authorize`, {
59
56
  method: "HEAD",
@@ -62,15 +59,22 @@ async function checkAuthorization(ctx, acceptOptIns) {
62
59
  "Convex-Client": `npm-cli-${import_version.version}`
63
60
  }
64
61
  });
65
- if (resp.status !== 200) {
66
- return false;
67
- }
62
+ return resp.status === 200;
68
63
  } catch (e) {
69
64
  (0, import_log.logError)(
70
65
  `Unexpected error when authorizing - are you connected to the internet?`
71
66
  );
72
67
  return await (0, import_utils.logAndHandleFetchError)(ctx, e);
73
68
  }
69
+ }
70
+ async function checkAuthorization(ctx, acceptOptIns) {
71
+ const header = ctx.bigBrainAuth()?.header ?? null;
72
+ if (header === null) {
73
+ return false;
74
+ }
75
+ if (!await isAuthorizedHeader(ctx, header)) {
76
+ return false;
77
+ }
74
78
  const shouldContinue = await optins(ctx, acceptOptIns);
75
79
  if (!shouldContinue) {
76
80
  return await ctx.crash({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cli/lib/login.ts"],
4
- "sourcesContent": ["import { errors, BaseClient, custom } from \"openid-client\";\nimport {\n bigBrainAPI,\n bigBrainFetch,\n logAndHandleFetchError,\n throwingFetch,\n isWebContainer,\n typedPlatformClient,\n} from \"./utils/utils.js\";\nimport open from \"open\";\nimport { chalkStderr } from \"chalk\";\nimport { provisionHost } from \"./config.js\";\nimport { version } from \"../version.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logOutput,\n logVerbose,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport { Issuer } from \"openid-client\";\nimport { hostname } from \"os\";\nimport { execSync } from \"child_process\";\nimport { promptString, promptYesNo } from \"./utils/prompts.js\";\nimport {\n formatPathForPrinting,\n globalConfigPath,\n modifyGlobalConfig,\n} from \"./utils/globalConfig.js\";\nimport { updateBigBrainAuthAfterLogin } from \"./deploymentSelection.js\";\n\n// Per https://github.com/panva/node-openid-client/tree/main/docs#customizing\ncustom.setHttpOptionsDefaults({\n timeout: parseInt(process.env.OPENID_CLIENT_TIMEOUT || \"10000\"),\n});\n\nexport async function checkAuthorization(\n ctx: Context,\n acceptOptIns: boolean,\n): Promise<boolean> {\n const header = ctx.bigBrainAuth()?.header ?? null;\n if (header === null) {\n return false;\n }\n try {\n const resp = await fetch(`${provisionHost}/api/authorize`, {\n method: \"HEAD\",\n headers: {\n Authorization: header,\n \"Convex-Client\": `npm-cli-${version}`,\n },\n });\n // Don't throw an error if this request returns a non-200 status.\n // Big Brain responds with a variety of error codes -- 401 if the token is correctly-formed but not valid, and either 400 or 500 if the token is ill-formed.\n // We only care if this check returns a 200 code (so we can skip logging in again) -- any other errors should be silently skipped and we'll run the whole login flow again.\n if (resp.status !== 200) {\n return false;\n }\n } catch (e: any) {\n // This `catch` block should only be hit if a network error was encountered\n logError(\n `Unexpected error when authorizing - are you connected to the internet?`,\n );\n return await logAndHandleFetchError(ctx, e);\n }\n\n // Check that we have optin as well\n const shouldContinue = await optins(ctx, acceptOptIns);\n if (!shouldContinue) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n return true;\n}\n\nasync function performDeviceAuthorization(\n ctx: Context,\n authClient: BaseClient,\n shouldOpen: boolean,\n vercel?: boolean,\n vercelOverride?: string,\n): Promise<string> {\n // Device authorization flow follows this guide: https://github.com/auth0/auth0-device-flow-cli-sample/blob/9f0f3b76a6cd56ea8d99e76769187ea5102d519d/cli.js\n // License: MIT License\n // Copyright (c) 2019 Auth0 Samples\n /*\n The MIT License (MIT)\n\n Copyright (c) 2019 Auth0 Samples\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n // Device Authorization Request - https://tools.ietf.org/html/rfc8628#section-3.1\n // Get authentication URL\n let handle;\n try {\n handle = await authClient.deviceAuthorization();\n } catch {\n // We couldn't get verification URL from the auth provider, proceed with manual auth\n return promptString(ctx, {\n message:\n \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n });\n }\n\n // Device Authorization Response - https://tools.ietf.org/html/rfc8628#section-3.2\n // Open authentication URL\n const { verification_uri_complete, user_code, expires_in } = handle;\n\n // Construct Vercel URL if --vercel flag is used\n const urlToOpen = vercel\n ? `https://vercel.com/sso/integrations/${vercelOverride || \"convex\"}?url=${verification_uri_complete}`\n : verification_uri_complete;\n\n logMessage(\n `Visit ${urlToOpen} to finish logging in.\\n` +\n `You should see the following code which expires in ${\n expires_in % 60 === 0\n ? `${expires_in / 60} minutes`\n : `${expires_in} seconds`\n }: ${user_code}`,\n );\n if (shouldOpen) {\n shouldOpen = await promptYesNo(ctx, {\n message: `Open the browser?`,\n default: true,\n });\n }\n\n if (shouldOpen) {\n showSpinner(`Opening ${urlToOpen} in your browser to log in...\\n`);\n try {\n const p = await open(urlToOpen);\n p.once(\"error\", () => {\n changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n });\n changeSpinner(\"Waiting for the confirmation...\");\n } catch {\n logError(chalkStderr.red(`Unable to open browser.`));\n changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n }\n } else {\n showSpinner(`Open ${urlToOpen} in your browser to log in.`);\n }\n\n // Device Access Token Request - https://tools.ietf.org/html/rfc8628#section-3.4\n // Device Access Token Response - https://tools.ietf.org/html/rfc8628#section-3.5\n try {\n const tokens = await handle.poll();\n if (typeof tokens.access_token === \"string\") {\n return tokens.access_token;\n } else {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw Error(\"Access token is missing\");\n }\n } catch (err: any) {\n switch (err.error) {\n case \"access_denied\": // end-user declined the device confirmation prompt, consent or rules failed\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Access denied.\",\n errForSentry: err,\n });\n case \"expired_token\": // end-user did not complete the interaction in time\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Device flow expired.\",\n errForSentry: err,\n });\n default: {\n const message =\n err instanceof errors.OPError\n ? `Error = ${err.error}; error_description = ${err.error_description}`\n : `Login failed with error: ${err}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: err,\n });\n }\n }\n }\n}\n\nasync function performPasswordAuthentication(\n ctx: Context,\n clientId: string,\n username: string,\n password: string,\n): Promise<string> {\n if (!process.env.WORKOS_API_SECRET) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"WORKOS_API_SECRET environment variable is not set\",\n });\n }\n\n // Unfortunately, `openid-client` doesn't support the resource owner password credentials flow so we need to manually send the requests.\n const options: Parameters<typeof throwingFetch>[1] = {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"password\",\n email: username,\n password: password,\n client_id: clientId,\n client_secret: process.env.WORKOS_API_SECRET,\n }),\n };\n\n try {\n const response = await throwingFetch(\n \"https://apiauth.convex.dev/user_management/authenticate\",\n options,\n );\n const data = await response.json();\n if (typeof data.access_token === \"string\") {\n return data.access_token;\n } else {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw Error(\"Access token is missing\");\n }\n } catch (err: any) {\n logFailure(`Password flow failed: ${err}`);\n if (err.response) {\n logError(chalkStderr.red(`${JSON.stringify(err.response.data)}`));\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: err,\n printedMessage: null,\n });\n }\n}\n\nexport async function performLogin(\n ctx: Context,\n {\n overrideAuthUrl,\n overrideAuthClient,\n overrideAuthUsername,\n overrideAuthPassword,\n overrideAccessToken,\n loginFlow,\n open,\n acceptOptIns,\n dumpAccessToken,\n deviceName: deviceNameOverride,\n anonymousId,\n vercel,\n vercelOverride,\n }: {\n overrideAuthUrl?: string | undefined;\n overrideAuthClient?: string | undefined;\n overrideAuthUsername?: string | undefined;\n overrideAuthPassword?: string | undefined;\n overrideAccessToken?: string | undefined;\n loginFlow?: \"auto\" | \"paste\" | \"poll\" | undefined;\n // default `true`\n open?: boolean | undefined;\n // default `false`\n acceptOptIns?: boolean | undefined;\n dumpAccessToken?: boolean | undefined;\n deviceName?: string | undefined;\n anonymousId?: string | undefined;\n vercel?: boolean | undefined;\n vercelOverride?: string | undefined;\n } = {},\n) {\n loginFlow = loginFlow || \"auto\";\n // Get access token from big-brain\n // Default the device name to the hostname, but allow the user to change this if the terminal is interactive.\n // On Macs, the `hostname()` may be a weirdly-truncated form of the computer name. Attempt to read the \"real\" name before falling back to hostname.\n let deviceName = deviceNameOverride ?? \"\";\n if (!deviceName && process.platform === \"darwin\") {\n try {\n deviceName = execSync(\"scutil --get ComputerName\").toString().trim();\n } catch {\n // Just fall back to the hostname default below.\n }\n }\n if (!deviceName) {\n deviceName = hostname();\n }\n if (!deviceNameOverride) {\n logMessage(\n chalkStderr.bold(\n `Welcome to developing with Convex, let's get you logged in.`,\n ),\n );\n deviceName = await promptString(ctx, {\n message: \"Device name:\",\n default: deviceName,\n });\n }\n\n const issuer = overrideAuthUrl ?? \"https://auth.convex.dev\";\n const clientId = overrideAuthClient ?? \"HFtA247jp9iNs08NTLIB7JsNPMmRIyfi\";\n let accessToken: string;\n\n if (overrideAccessToken) {\n // Access token was supplied directly.\n accessToken = overrideAccessToken;\n } else if (overrideAuthUsername && overrideAuthPassword) {\n // Username/Password auth\n accessToken = await performPasswordAuthentication(\n ctx,\n clientId,\n overrideAuthUsername,\n overrideAuthPassword,\n );\n } else if (\n loginFlow === \"paste\" ||\n (loginFlow === \"auto\" && isWebContainer())\n ) {\n accessToken = await promptString(ctx, {\n message:\n \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n });\n } else {\n // Device authorization flow. Contact OIDC issuer.\n let authIssuer;\n try {\n authIssuer = await Issuer.discover(issuer);\n } catch {\n // Couldn't contact https://auth.convex.dev/.well-known/openid-configuration,\n // proceed with manual auth.\n authIssuer = undefined;\n }\n if (authIssuer) {\n const authClient = new authIssuer.Client({\n client_id: clientId,\n token_endpoint_auth_method: \"none\",\n id_token_signed_response_alg: \"RS256\",\n });\n accessToken = await performDeviceAuthorization(\n ctx,\n authClient,\n open ?? true,\n vercel,\n vercelOverride,\n );\n } else {\n accessToken = await promptString(ctx, {\n message:\n \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n });\n }\n }\n\n if (dumpAccessToken) {\n logOutput(`${accessToken}`);\n return await ctx.crash({\n exitCode: 0,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n // Exchange the WorkOS access token for a Convex personal access token.\n ctx._updateBigBrainAuth({\n accessToken: accessToken,\n kind: \"accessToken\",\n header: `Bearer ${accessToken}`,\n });\n const response = await typedPlatformClient(ctx).POST(\n \"/create_personal_access_token\",\n {\n // `anonymousId` links a prior anonymous session to this account. It's\n // intentionally absent from the generated platform API types,\n // so cast to pass it through.\n body: { name: deviceName, anonymousId } as { name: string },\n },\n );\n const newAccessToken = response.data!.accessToken;\n const globalConfig = { accessToken: newAccessToken };\n try {\n await modifyGlobalConfig(ctx, globalConfig);\n const path = globalConfigPath();\n logFinishedStep(`Saved credentials to ${formatPathForPrinting(path)}`);\n } catch (err: unknown) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n printedMessage: null,\n });\n }\n\n logVerbose(`performLogin: updating big brain auth after login`);\n await updateBigBrainAuthAfterLogin(ctx, newAccessToken);\n\n logVerbose(`performLogin: checking opt ins, acceptOptIns: ${acceptOptIns}`);\n // Do opt in to TOS and Privacy Policy stuff\n const shouldContinue = await optins(ctx, acceptOptIns ?? false);\n if (!shouldContinue) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n if (vercel) {\n await promptJoinVercelTeams(ctx);\n }\n}\n\ntype PotentialVercelTeam = {\n teamId: number;\n teamName: string;\n teamSlug: string;\n planId: string;\n planName: string;\n pricingNotice: string | null;\n};\n\n// After `--vercel` login, surface any Vercel-marketplace teams the user has\n// access to but isn't yet a member of, and prompt to join each.\nasync function promptJoinVercelTeams(ctx: Context): Promise<void> {\n const fetch = bigBrainFetch(ctx);\n let teams: PotentialVercelTeam[];\n try {\n const res = await fetch(\n new URL(\"vercel/potential_teams\", `${provisionHost}/`),\n );\n if (!res.ok) {\n logVerbose(\n `vercel/potential_teams returned ${res.status}; skipping team-join prompt`,\n );\n return;\n }\n teams = await res.json();\n } catch (err) {\n logVerbose(`Failed to fetch potential Vercel teams: ${String(err)}`);\n return;\n }\n if (teams.length === 0) return;\n\n for (const [index, team] of teams.entries()) {\n const displayName = team.teamName.replace(/ \\(Vercel\\)$/, \"\");\n const counter = teams.length > 1 ? `[${index + 1}/${teams.length}] ` : \"\";\n const lines = [\n chalkStderr.bold(`${counter}You've been invited to join ${displayName}`) +\n ` (${team.planName}) through the Vercel marketplace.`,\n ];\n if (team.pricingNotice) {\n lines.push(chalkStderr.yellow(team.pricingNotice));\n }\n lines.push(`Join \"${displayName}\"?`);\n const join = await promptYesNo(ctx, {\n message: `${lines.join(\"\\n\")}`,\n default: true,\n });\n if (!join) continue;\n try {\n await fetch(\n new URL(\n `vercel/potential_teams/${team.teamId}/join`,\n `${provisionHost}/`,\n ),\n { method: \"POST\" },\n );\n logFinishedStep(`Joined ${displayName}`);\n } catch (err) {\n logFailure(`Failed to join ${displayName}: ${String(err)}`);\n }\n }\n}\n\n/// There are fields like version, but we keep them opaque\ntype OptIn = Record<string, unknown>;\n\ntype OptInToAccept = {\n optIn: OptIn;\n message: string;\n};\n\ntype AcceptOptInsArgs = {\n optInsAccepted: OptIn[];\n};\n\n// Returns whether we can proceed or not.\nasync function optins(ctx: Context, acceptOptIns: boolean): Promise<boolean> {\n const bbAuth = ctx.bigBrainAuth();\n if (bbAuth === null) {\n // This should never happen, but if we're not even logged in, we can't proceed.\n return false;\n }\n switch (bbAuth.kind) {\n case \"accessToken\":\n break;\n case \"deploymentKey\":\n case \"projectKey\":\n case \"previewDeployKey\":\n // If we have a key configured as auth, we do not need to check opt ins.\n return true;\n default: {\n bbAuth satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Unexpected auth kind ${(bbAuth as any).kind}`,\n printedMessage: \"Hit an unexpected error while logging in.\",\n });\n }\n }\n const data = await bigBrainAPI({\n ctx,\n method: \"POST\",\n path: \"check_opt_ins\",\n });\n if (data.optInsToAccept.length === 0) {\n return true;\n }\n for (const optInToAccept of data.optInsToAccept) {\n const confirmed =\n acceptOptIns ||\n (await promptYesNo(ctx, {\n message: optInToAccept.message,\n }));\n if (!confirmed) {\n logFailure(\"Please accept the Terms of Service to use Convex.\");\n return Promise.resolve(false);\n }\n }\n\n const optInsAccepted = data.optInsToAccept.map((o: OptInToAccept) => o.optIn);\n const args: AcceptOptInsArgs = { optInsAccepted };\n await bigBrainAPI({\n ctx,\n method: \"POST\",\n path: \"accept_opt_ins\",\n data: args,\n });\n return true;\n}\n\nexport async function ensureLoggedIn(\n ctx: Context,\n options?: {\n message?: string | undefined;\n overrideAuthUrl?: string | undefined;\n overrideAuthClient?: string | undefined;\n overrideAuthUsername?: string | undefined;\n overrideAuthPassword?: string | undefined;\n },\n) {\n const isLoggedIn = await checkAuthorization(ctx, false);\n if (!isLoggedIn) {\n if (options?.message) {\n logMessage(options.message);\n }\n await performLogin(ctx, {\n acceptOptIns: false,\n overrideAuthUrl: options?.overrideAuthUrl,\n overrideAuthClient: options?.overrideAuthClient,\n overrideAuthUsername: options?.overrideAuthUsername,\n overrideAuthPassword: options?.overrideAuthPassword,\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { errors, BaseClient, custom } from \"openid-client\";\nimport {\n bigBrainAPI,\n bigBrainFetch,\n logAndHandleFetchError,\n throwingFetch,\n isWebContainer,\n typedPlatformClient,\n} from \"./utils/utils.js\";\nimport open from \"open\";\nimport { chalkStderr } from \"chalk\";\nimport { provisionHost } from \"./config.js\";\nimport { version } from \"../version.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logOutput,\n logVerbose,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport { Issuer } from \"openid-client\";\nimport { hostname } from \"os\";\nimport { execSync } from \"child_process\";\nimport { promptString, promptYesNo } from \"./utils/prompts.js\";\nimport {\n formatPathForPrinting,\n globalConfigPath,\n modifyGlobalConfig,\n} from \"./utils/globalConfig.js\";\nimport { updateBigBrainAuthAfterLogin } from \"./deploymentSelection.js\";\n\n// Per https://github.com/panva/node-openid-client/tree/main/docs#customizing\ncustom.setHttpOptionsDefaults({\n timeout: parseInt(process.env.OPENID_CLIENT_TIMEOUT || \"10000\"),\n});\n\n/**\n * Whether Big Brain accepts this credential. Takes the header explicitly so\n * callers can check a credential other than the one `ctx` resolved to.\n */\nexport async function isAuthorizedHeader(\n ctx: Context,\n header: string,\n): Promise<boolean> {\n try {\n const resp = await fetch(`${provisionHost}/api/authorize`, {\n method: \"HEAD\",\n headers: {\n Authorization: header,\n \"Convex-Client\": `npm-cli-${version}`,\n },\n });\n // Don't throw an error if this request returns a non-200 status.\n // Big Brain responds with a variety of error codes -- 401 if the token is correctly-formed but not valid, and either 400 or 500 if the token is ill-formed.\n // We only care if this check returns a 200 code (so we can skip logging in again) -- any other errors should be silently skipped and we'll run the whole login flow again.\n return resp.status === 200;\n } catch (e: any) {\n // This `catch` block should only be hit if a network error was encountered\n logError(\n `Unexpected error when authorizing - are you connected to the internet?`,\n );\n return await logAndHandleFetchError(ctx, e);\n }\n}\n\nexport async function checkAuthorization(\n ctx: Context,\n acceptOptIns: boolean,\n): Promise<boolean> {\n const header = ctx.bigBrainAuth()?.header ?? null;\n if (header === null) {\n return false;\n }\n if (!(await isAuthorizedHeader(ctx, header))) {\n return false;\n }\n\n // Check that we have optin as well\n const shouldContinue = await optins(ctx, acceptOptIns);\n if (!shouldContinue) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n return true;\n}\n\nasync function performDeviceAuthorization(\n ctx: Context,\n authClient: BaseClient,\n shouldOpen: boolean,\n vercel?: boolean,\n vercelOverride?: string,\n): Promise<string> {\n // Device authorization flow follows this guide: https://github.com/auth0/auth0-device-flow-cli-sample/blob/9f0f3b76a6cd56ea8d99e76769187ea5102d519d/cli.js\n // License: MIT License\n // Copyright (c) 2019 Auth0 Samples\n /*\n The MIT License (MIT)\n\n Copyright (c) 2019 Auth0 Samples\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n // Device Authorization Request - https://tools.ietf.org/html/rfc8628#section-3.1\n // Get authentication URL\n let handle;\n try {\n handle = await authClient.deviceAuthorization();\n } catch {\n // We couldn't get verification URL from the auth provider, proceed with manual auth\n return promptString(ctx, {\n message:\n \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n });\n }\n\n // Device Authorization Response - https://tools.ietf.org/html/rfc8628#section-3.2\n // Open authentication URL\n const { verification_uri_complete, user_code, expires_in } = handle;\n\n // Construct Vercel URL if --vercel flag is used\n const urlToOpen = vercel\n ? `https://vercel.com/sso/integrations/${vercelOverride || \"convex\"}?url=${verification_uri_complete}`\n : verification_uri_complete;\n\n logMessage(\n `Visit ${urlToOpen} to finish logging in.\\n` +\n `You should see the following code which expires in ${\n expires_in % 60 === 0\n ? `${expires_in / 60} minutes`\n : `${expires_in} seconds`\n }: ${user_code}`,\n );\n if (shouldOpen) {\n shouldOpen = await promptYesNo(ctx, {\n message: `Open the browser?`,\n default: true,\n });\n }\n\n if (shouldOpen) {\n showSpinner(`Opening ${urlToOpen} in your browser to log in...\\n`);\n try {\n const p = await open(urlToOpen);\n p.once(\"error\", () => {\n changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n });\n changeSpinner(\"Waiting for the confirmation...\");\n } catch {\n logError(chalkStderr.red(`Unable to open browser.`));\n changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n }\n } else {\n showSpinner(`Open ${urlToOpen} in your browser to log in.`);\n }\n\n // Device Access Token Request - https://tools.ietf.org/html/rfc8628#section-3.4\n // Device Access Token Response - https://tools.ietf.org/html/rfc8628#section-3.5\n try {\n const tokens = await handle.poll();\n if (typeof tokens.access_token === \"string\") {\n return tokens.access_token;\n } else {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw Error(\"Access token is missing\");\n }\n } catch (err: any) {\n switch (err.error) {\n case \"access_denied\": // end-user declined the device confirmation prompt, consent or rules failed\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Access denied.\",\n errForSentry: err,\n });\n case \"expired_token\": // end-user did not complete the interaction in time\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Device flow expired.\",\n errForSentry: err,\n });\n default: {\n const message =\n err instanceof errors.OPError\n ? `Error = ${err.error}; error_description = ${err.error_description}`\n : `Login failed with error: ${err}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: err,\n });\n }\n }\n }\n}\n\nasync function performPasswordAuthentication(\n ctx: Context,\n clientId: string,\n username: string,\n password: string,\n): Promise<string> {\n if (!process.env.WORKOS_API_SECRET) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"WORKOS_API_SECRET environment variable is not set\",\n });\n }\n\n // Unfortunately, `openid-client` doesn't support the resource owner password credentials flow so we need to manually send the requests.\n const options: Parameters<typeof throwingFetch>[1] = {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"password\",\n email: username,\n password: password,\n client_id: clientId,\n client_secret: process.env.WORKOS_API_SECRET,\n }),\n };\n\n try {\n const response = await throwingFetch(\n \"https://apiauth.convex.dev/user_management/authenticate\",\n options,\n );\n const data = await response.json();\n if (typeof data.access_token === \"string\") {\n return data.access_token;\n } else {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw Error(\"Access token is missing\");\n }\n } catch (err: any) {\n logFailure(`Password flow failed: ${err}`);\n if (err.response) {\n logError(chalkStderr.red(`${JSON.stringify(err.response.data)}`));\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: err,\n printedMessage: null,\n });\n }\n}\n\nexport async function performLogin(\n ctx: Context,\n {\n overrideAuthUrl,\n overrideAuthClient,\n overrideAuthUsername,\n overrideAuthPassword,\n overrideAccessToken,\n loginFlow,\n open,\n acceptOptIns,\n dumpAccessToken,\n deviceName: deviceNameOverride,\n anonymousId,\n vercel,\n vercelOverride,\n }: {\n overrideAuthUrl?: string | undefined;\n overrideAuthClient?: string | undefined;\n overrideAuthUsername?: string | undefined;\n overrideAuthPassword?: string | undefined;\n overrideAccessToken?: string | undefined;\n loginFlow?: \"auto\" | \"paste\" | \"poll\" | undefined;\n // default `true`\n open?: boolean | undefined;\n // default `false`\n acceptOptIns?: boolean | undefined;\n dumpAccessToken?: boolean | undefined;\n deviceName?: string | undefined;\n anonymousId?: string | undefined;\n vercel?: boolean | undefined;\n vercelOverride?: string | undefined;\n } = {},\n) {\n loginFlow = loginFlow || \"auto\";\n // Get access token from big-brain\n // Default the device name to the hostname, but allow the user to change this if the terminal is interactive.\n // On Macs, the `hostname()` may be a weirdly-truncated form of the computer name. Attempt to read the \"real\" name before falling back to hostname.\n let deviceName = deviceNameOverride ?? \"\";\n if (!deviceName && process.platform === \"darwin\") {\n try {\n deviceName = execSync(\"scutil --get ComputerName\").toString().trim();\n } catch {\n // Just fall back to the hostname default below.\n }\n }\n if (!deviceName) {\n deviceName = hostname();\n }\n if (!deviceNameOverride) {\n logMessage(\n chalkStderr.bold(\n `Welcome to developing with Convex, let's get you logged in.`,\n ),\n );\n deviceName = await promptString(ctx, {\n message: \"Device name:\",\n default: deviceName,\n });\n }\n\n const issuer = overrideAuthUrl ?? \"https://auth.convex.dev\";\n const clientId = overrideAuthClient ?? \"HFtA247jp9iNs08NTLIB7JsNPMmRIyfi\";\n let accessToken: string;\n\n if (overrideAccessToken) {\n // Access token was supplied directly.\n accessToken = overrideAccessToken;\n } else if (overrideAuthUsername && overrideAuthPassword) {\n // Username/Password auth\n accessToken = await performPasswordAuthentication(\n ctx,\n clientId,\n overrideAuthUsername,\n overrideAuthPassword,\n );\n } else if (\n loginFlow === \"paste\" ||\n (loginFlow === \"auto\" && isWebContainer())\n ) {\n accessToken = await promptString(ctx, {\n message:\n \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n });\n } else {\n // Device authorization flow. Contact OIDC issuer.\n let authIssuer;\n try {\n authIssuer = await Issuer.discover(issuer);\n } catch {\n // Couldn't contact https://auth.convex.dev/.well-known/openid-configuration,\n // proceed with manual auth.\n authIssuer = undefined;\n }\n if (authIssuer) {\n const authClient = new authIssuer.Client({\n client_id: clientId,\n token_endpoint_auth_method: \"none\",\n id_token_signed_response_alg: \"RS256\",\n });\n accessToken = await performDeviceAuthorization(\n ctx,\n authClient,\n open ?? true,\n vercel,\n vercelOverride,\n );\n } else {\n accessToken = await promptString(ctx, {\n message:\n \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n });\n }\n }\n\n if (dumpAccessToken) {\n logOutput(`${accessToken}`);\n return await ctx.crash({\n exitCode: 0,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n // Exchange the WorkOS access token for a Convex personal access token.\n ctx._updateBigBrainAuth({\n accessToken: accessToken,\n kind: \"accessToken\",\n header: `Bearer ${accessToken}`,\n });\n const response = await typedPlatformClient(ctx).POST(\n \"/create_personal_access_token\",\n {\n // `anonymousId` links a prior anonymous session to this account. It's\n // intentionally absent from the generated platform API types,\n // so cast to pass it through.\n body: { name: deviceName, anonymousId } as { name: string },\n },\n );\n const newAccessToken = response.data!.accessToken;\n const globalConfig = { accessToken: newAccessToken };\n try {\n await modifyGlobalConfig(ctx, globalConfig);\n const path = globalConfigPath();\n logFinishedStep(`Saved credentials to ${formatPathForPrinting(path)}`);\n } catch (err: unknown) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n printedMessage: null,\n });\n }\n\n logVerbose(`performLogin: updating big brain auth after login`);\n await updateBigBrainAuthAfterLogin(ctx, newAccessToken);\n\n logVerbose(`performLogin: checking opt ins, acceptOptIns: ${acceptOptIns}`);\n // Do opt in to TOS and Privacy Policy stuff\n const shouldContinue = await optins(ctx, acceptOptIns ?? false);\n if (!shouldContinue) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n if (vercel) {\n await promptJoinVercelTeams(ctx);\n }\n}\n\ntype PotentialVercelTeam = {\n teamId: number;\n teamName: string;\n teamSlug: string;\n planId: string;\n planName: string;\n pricingNotice: string | null;\n};\n\n// After `--vercel` login, surface any Vercel-marketplace teams the user has\n// access to but isn't yet a member of, and prompt to join each.\nasync function promptJoinVercelTeams(ctx: Context): Promise<void> {\n const fetch = bigBrainFetch(ctx);\n let teams: PotentialVercelTeam[];\n try {\n const res = await fetch(\n new URL(\"vercel/potential_teams\", `${provisionHost}/`),\n );\n if (!res.ok) {\n logVerbose(\n `vercel/potential_teams returned ${res.status}; skipping team-join prompt`,\n );\n return;\n }\n teams = await res.json();\n } catch (err) {\n logVerbose(`Failed to fetch potential Vercel teams: ${String(err)}`);\n return;\n }\n if (teams.length === 0) return;\n\n for (const [index, team] of teams.entries()) {\n const displayName = team.teamName.replace(/ \\(Vercel\\)$/, \"\");\n const counter = teams.length > 1 ? `[${index + 1}/${teams.length}] ` : \"\";\n const lines = [\n chalkStderr.bold(`${counter}You've been invited to join ${displayName}`) +\n ` (${team.planName}) through the Vercel marketplace.`,\n ];\n if (team.pricingNotice) {\n lines.push(chalkStderr.yellow(team.pricingNotice));\n }\n lines.push(`Join \"${displayName}\"?`);\n const join = await promptYesNo(ctx, {\n message: `${lines.join(\"\\n\")}`,\n default: true,\n });\n if (!join) continue;\n try {\n await fetch(\n new URL(\n `vercel/potential_teams/${team.teamId}/join`,\n `${provisionHost}/`,\n ),\n { method: \"POST\" },\n );\n logFinishedStep(`Joined ${displayName}`);\n } catch (err) {\n logFailure(`Failed to join ${displayName}: ${String(err)}`);\n }\n }\n}\n\n/// There are fields like version, but we keep them opaque\ntype OptIn = Record<string, unknown>;\n\ntype OptInToAccept = {\n optIn: OptIn;\n message: string;\n};\n\ntype AcceptOptInsArgs = {\n optInsAccepted: OptIn[];\n};\n\n// Returns whether we can proceed or not.\nasync function optins(ctx: Context, acceptOptIns: boolean): Promise<boolean> {\n const bbAuth = ctx.bigBrainAuth();\n if (bbAuth === null) {\n // This should never happen, but if we're not even logged in, we can't proceed.\n return false;\n }\n switch (bbAuth.kind) {\n case \"accessToken\":\n break;\n case \"deploymentKey\":\n case \"projectKey\":\n case \"previewDeployKey\":\n // If we have a key configured as auth, we do not need to check opt ins.\n return true;\n default: {\n bbAuth satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Unexpected auth kind ${(bbAuth as any).kind}`,\n printedMessage: \"Hit an unexpected error while logging in.\",\n });\n }\n }\n const data = await bigBrainAPI({\n ctx,\n method: \"POST\",\n path: \"check_opt_ins\",\n });\n if (data.optInsToAccept.length === 0) {\n return true;\n }\n for (const optInToAccept of data.optInsToAccept) {\n const confirmed =\n acceptOptIns ||\n (await promptYesNo(ctx, {\n message: optInToAccept.message,\n }));\n if (!confirmed) {\n logFailure(\"Please accept the Terms of Service to use Convex.\");\n return Promise.resolve(false);\n }\n }\n\n const optInsAccepted = data.optInsToAccept.map((o: OptInToAccept) => o.optIn);\n const args: AcceptOptInsArgs = { optInsAccepted };\n await bigBrainAPI({\n ctx,\n method: \"POST\",\n path: \"accept_opt_ins\",\n data: args,\n });\n return true;\n}\n\nexport async function ensureLoggedIn(\n ctx: Context,\n options?: {\n message?: string | undefined;\n overrideAuthUrl?: string | undefined;\n overrideAuthClient?: string | undefined;\n overrideAuthUsername?: string | undefined;\n overrideAuthPassword?: string | undefined;\n },\n) {\n const isLoggedIn = await checkAuthorization(ctx, false);\n if (!isLoggedIn) {\n if (options?.message) {\n logMessage(options.message);\n }\n await performLogin(ctx, {\n acceptOptIns: false,\n overrideAuthUrl: options?.overrideAuthUrl,\n overrideAuthClient: options?.overrideAuthClient,\n overrideAuthUsername: options?.overrideAuthUsername,\n overrideAuthPassword: options?.overrideAuthPassword,\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_openid_client", "open", "fetch"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/cli/lib/mcp/tools/index.ts"],
4
- "sourcesContent": ["import { RequestContext } from \"../requestContext.js\";\nimport { ZodTypeAny, z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { TablesTool } from \"./tables.js\";\nimport { DataTool } from \"./data.js\";\nimport { StatusTool } from \"./status.js\";\nimport { FunctionSpecTool } from \"./functionSpec.js\";\nimport { RunTool } from \"./run.js\";\nimport { EnvListTool, EnvGetTool, EnvSetTool, EnvRemoveTool } from \"./env.js\";\nimport { RunOneoffQueryTool } from \"./runOneoffQuery.js\";\nimport { LogsTool } from \"./logs.js\";\nimport { InsightsTool } from \"./insights.js\";\nimport { Tool } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport type ConvexTool<Input extends ZodTypeAny, Output extends ZodTypeAny> = {\n name: string;\n description: string;\n inputSchema: Input;\n outputSchema: Output;\n handler: (\n ctx: RequestContext,\n input: z.infer<Input>,\n ) => Promise<z.infer<Output>>;\n};\n\ntype ToolInput = Tool[\"inputSchema\"];\n\nexport function mcpTool(tool: ConvexTool<ZodTypeAny, ZodTypeAny>): Tool {\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,\n };\n}\n\nexport const convexTools: ConvexTool<any, any>[] = [\n StatusTool,\n DataTool,\n TablesTool,\n FunctionSpecTool,\n RunTool,\n EnvListTool,\n EnvGetTool,\n EnvSetTool,\n EnvRemoveTool,\n RunOneoffQueryTool,\n LogsTool,\n InsightsTool,\n];\n"],
4
+ "sourcesContent": ["import { RequestContext } from \"../requestContext.js\";\nimport { ZodTypeAny, z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { TablesTool } from \"./tables.js\";\nimport { DataTool } from \"./data.js\";\nimport { StatusTool } from \"./status.js\";\nimport { FunctionSpecTool } from \"./functionSpec.js\";\nimport { RunTool } from \"./run.js\";\nimport { EnvListTool, EnvGetTool, EnvSetTool, EnvRemoveTool } from \"./env.js\";\nimport { RunOneoffQueryTool } from \"./runOneoffQuery.js\";\nimport { LogsTool } from \"./logs.js\";\nimport { InsightsTool } from \"./insights.js\";\nimport { Tool } from \"@modelcontextprotocol/server\";\n\nexport type ConvexTool<Input extends ZodTypeAny, Output extends ZodTypeAny> = {\n name: string;\n description: string;\n inputSchema: Input;\n outputSchema: Output;\n handler: (\n ctx: RequestContext,\n input: z.infer<Input>,\n ) => Promise<z.infer<Output>>;\n};\n\ntype ToolInput = Tool[\"inputSchema\"];\n\nexport function mcpTool(tool: ConvexTool<ZodTypeAny, ZodTypeAny>): Tool {\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,\n };\n}\n\nexport const convexTools: ConvexTool<any, any>[] = [\n StatusTool,\n DataTool,\n TablesTool,\n FunctionSpecTool,\n RunTool,\n EnvListTool,\n EnvGetTool,\n EnvSetTool,\n EnvRemoveTool,\n RunOneoffQueryTool,\n LogsTool,\n InsightsTool,\n];\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,gCAA4B;AAC5B,oBAA2B;AAC3B,kBAAyB;AACzB,oBAA2B;AAC3B,0BAAiC;AACjC,iBAAwB;AACxB,iBAAmE;AACnE,4BAAmC;AACnC,kBAAyB;AACzB,sBAA6B;AAgBtB,SAAS,QAAQ,MAAgD;AACtE,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,iBAAa,0BAAAA,SAAgB,KAAK,WAAW;AAAA,EAC/C;AACF;AAEO,MAAM,cAAsC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
6
  "names": ["zodToJsonSchema"]
7
7
  }