convex 1.44.0 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/convexExport.js +1 -1
  5. package/dist/cjs/cli/convexExport.js.map +1 -1
  6. package/dist/cjs/cli/index.js +2 -32
  7. package/dist/cjs/cli/index.js.map +2 -2
  8. package/dist/cjs/cli/lib/api.js +11 -5
  9. package/dist/cjs/cli/lib/api.js.map +2 -2
  10. package/dist/cjs/cli/lib/convexExport.js +12 -1
  11. package/dist/cjs/cli/lib/convexExport.js.map +2 -2
  12. package/dist/cjs/cli/lib/dashboard.js.map +2 -2
  13. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  14. package/dist/cjs/cli/lib/indexes.js +1 -1
  15. package/dist/cjs/cli/lib/indexes.js.map +1 -1
  16. package/dist/cjs/cli/lib/localDeployment/upgrade.js +23 -188
  17. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  18. package/dist/cjs/cli/lib/mcp/tools/index.js.map +1 -1
  19. package/dist/cjs/cli/mcp.js +76 -69
  20. package/dist/cjs/cli/mcp.js.map +2 -2
  21. package/dist/cjs/index.js +1 -1
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/server/impl/actions_impl.js.map +2 -2
  24. package/dist/cjs/server/index.js.map +2 -2
  25. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  26. package/dist/cjs-types/cli/lib/convexExport.d.ts +1 -0
  27. package/dist/cjs-types/cli/lib/convexExport.d.ts.map +1 -1
  28. package/dist/cjs-types/cli/lib/dashboard.d.ts.map +1 -1
  29. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  30. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  31. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  32. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  33. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts +1 -1
  34. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  35. package/dist/cjs-types/cli/mcp.d.ts +3 -0
  36. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  37. package/dist/cjs-types/index.d.ts +1 -1
  38. package/dist/cjs-types/server/impl/actions_impl.d.ts +14 -0
  39. package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
  40. package/dist/cjs-types/server/index.d.ts +1 -0
  41. package/dist/cjs-types/server/index.d.ts.map +1 -1
  42. package/dist/cli.bundle.cjs +31210 -25495
  43. package/dist/cli.bundle.cjs.map +4 -4
  44. package/dist/esm/cli/convexExport.js +1 -1
  45. package/dist/esm/cli/convexExport.js.map +1 -1
  46. package/dist/esm/cli/index.js +2 -32
  47. package/dist/esm/cli/index.js.map +2 -2
  48. package/dist/esm/cli/lib/api.js +11 -5
  49. package/dist/esm/cli/lib/api.js.map +2 -2
  50. package/dist/esm/cli/lib/convexExport.js +16 -3
  51. package/dist/esm/cli/lib/convexExport.js.map +2 -2
  52. package/dist/esm/cli/lib/dashboard.js.map +2 -2
  53. package/dist/esm/cli/lib/indexes.js +1 -1
  54. package/dist/esm/cli/lib/indexes.js.map +1 -1
  55. package/dist/esm/cli/lib/localDeployment/upgrade.js +22 -190
  56. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  57. package/dist/esm/cli/lib/mcp/tools/index.js.map +1 -1
  58. package/dist/esm/cli/mcp.js +75 -72
  59. package/dist/esm/cli/mcp.js.map +2 -2
  60. package/dist/esm/index.js +1 -1
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/server/impl/actions_impl.js.map +2 -2
  63. package/dist/esm/server/index.js.map +2 -2
  64. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  65. package/dist/esm-types/cli/lib/convexExport.d.ts +1 -0
  66. package/dist/esm-types/cli/lib/convexExport.d.ts.map +1 -1
  67. package/dist/esm-types/cli/lib/dashboard.d.ts.map +1 -1
  68. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  69. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  70. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  71. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  72. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts +1 -1
  73. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  74. package/dist/esm-types/cli/mcp.d.ts +3 -0
  75. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  76. package/dist/esm-types/index.d.ts +1 -1
  77. package/dist/esm-types/server/impl/actions_impl.d.ts +14 -0
  78. package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
  79. package/dist/esm-types/server/index.d.ts +1 -0
  80. package/dist/esm-types/server/index.d.ts.map +1 -1
  81. package/dist/react.bundle.js +1 -1
  82. package/dist/react.bundle.js.map +1 -1
  83. package/package.json +3 -3
  84. package/src/cli/convexExport.ts +1 -1
  85. package/src/cli/index.ts +2 -35
  86. package/src/cli/lib/api.ts +11 -5
  87. package/src/cli/lib/convexExport.ts +21 -0
  88. package/src/cli/lib/dashboard.ts +2 -0
  89. package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
  90. package/src/cli/lib/indexes.ts +1 -1
  91. package/src/cli/lib/localDeployment/upgrade.ts +34 -207
  92. package/src/cli/lib/mcp/tools/index.ts +1 -1
  93. package/src/cli/mcp.ts +91 -77
  94. package/src/index.ts +1 -1
  95. package/src/server/impl/actions_impl.ts +3 -1
  96. package/src/server/index.ts +0 -3
  97. package/dist/cjs-types/browser/http_client.test.d.ts +0 -2
  98. package/dist/cjs-types/browser/http_client.test.d.ts.map +0 -1
  99. package/dist/cjs-types/browser/query_options.test.d.ts +0 -2
  100. package/dist/cjs-types/browser/query_options.test.d.ts.map +0 -1
  101. package/dist/cjs-types/browser/simple_client.test.d.ts +0 -2
  102. package/dist/cjs-types/browser/simple_client.test.d.ts.map +0 -1
  103. package/dist/cjs-types/browser/sync/client.test.d.ts +0 -5
  104. package/dist/cjs-types/browser/sync/client.test.d.ts.map +0 -1
  105. package/dist/cjs-types/browser/sync/client_node.test.d.ts +0 -2
  106. package/dist/cjs-types/browser/sync/client_node.test.d.ts.map +0 -1
  107. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  108. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  109. package/dist/cjs-types/browser/sync/local_state.test.d.ts +0 -2
  110. package/dist/cjs-types/browser/sync/local_state.test.d.ts.map +0 -1
  111. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  112. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  113. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  114. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  115. package/dist/cjs-types/browser/sync/protocol.test.d.ts +0 -5
  116. package/dist/cjs-types/browser/sync/protocol.test.d.ts.map +0 -1
  117. package/dist/cjs-types/browser/sync/request_manager.test.d.ts +0 -2
  118. package/dist/cjs-types/browser/sync/request_manager.test.d.ts.map +0 -1
  119. package/dist/cjs-types/bundler/fs.test.d.ts +0 -2
  120. package/dist/cjs-types/bundler/fs.test.d.ts.map +0 -1
  121. package/dist/cjs-types/bundler/index.test.d.ts +0 -2
  122. package/dist/cjs-types/bundler/index.test.d.ts.map +0 -1
  123. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts +0 -2
  124. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  125. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts +0 -2
  126. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  127. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts +0 -2
  128. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  129. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  130. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  131. package/dist/cjs-types/cli/configure.test.d.ts +0 -2
  132. package/dist/cjs-types/cli/configure.test.d.ts.map +0 -1
  133. package/dist/cjs-types/cli/deploymentCreate.test.d.ts +0 -2
  134. package/dist/cjs-types/cli/deploymentCreate.test.d.ts.map +0 -1
  135. package/dist/cjs-types/cli/deploymentSelect.test.d.ts +0 -2
  136. package/dist/cjs-types/cli/deploymentSelect.test.d.ts.map +0 -1
  137. package/dist/cjs-types/cli/deploymentSelection.test.d.ts +0 -2
  138. package/dist/cjs-types/cli/deploymentSelection.test.d.ts.map +0 -1
  139. package/dist/cjs-types/cli/deploymentToken.test.d.ts +0 -2
  140. package/dist/cjs-types/cli/deploymentToken.test.d.ts.map +0 -1
  141. package/dist/cjs-types/cli/dev.test.d.ts +0 -2
  142. package/dist/cjs-types/cli/dev.test.d.ts.map +0 -1
  143. package/dist/cjs-types/cli/envDefault.test.d.ts +0 -2
  144. package/dist/cjs-types/cli/envDefault.test.d.ts.map +0 -1
  145. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  146. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  147. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  148. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  149. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  150. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  151. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  152. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  153. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  154. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  155. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  156. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  157. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  158. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  159. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  160. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  161. package/dist/cjs-types/cli/lib/codegen.test.d.ts +0 -2
  162. package/dist/cjs-types/cli/lib/codegen.test.d.ts.map +0 -1
  163. package/dist/cjs-types/cli/lib/components.test.d.ts +0 -2
  164. package/dist/cjs-types/cli/lib/components.test.d.ts.map +0 -1
  165. package/dist/cjs-types/cli/lib/config.test.d.ts +0 -2
  166. package/dist/cjs-types/cli/lib/config.test.d.ts.map +0 -1
  167. package/dist/cjs-types/cli/lib/deployment.test.d.ts +0 -2
  168. package/dist/cjs-types/cli/lib/deployment.test.d.ts.map +0 -1
  169. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  170. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  171. package/dist/cjs-types/cli/lib/env.test.d.ts +0 -2
  172. package/dist/cjs-types/cli/lib/env.test.d.ts.map +0 -1
  173. package/dist/cjs-types/cli/lib/expiration.test.d.ts +0 -2
  174. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +0 -1
  175. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  176. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  177. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  178. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  179. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  180. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  181. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts +0 -2
  182. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  183. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +0 -2
  184. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  185. package/dist/cjs-types/cli/lib/indexes.test.d.ts +0 -2
  186. package/dist/cjs-types/cli/lib/indexes.test.d.ts.map +0 -1
  187. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  188. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  189. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  190. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  191. package/dist/cjs-types/cli/lib/run.test.d.ts +0 -2
  192. package/dist/cjs-types/cli/lib/run.test.d.ts.map +0 -1
  193. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts +0 -2
  194. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  195. package/dist/cjs-types/cli/lib/typecheck.test.d.ts +0 -2
  196. package/dist/cjs-types/cli/lib/typecheck.test.d.ts.map +0 -1
  197. package/dist/cjs-types/cli/lib/updates.test.d.ts +0 -2
  198. package/dist/cjs-types/cli/lib/updates.test.d.ts.map +0 -1
  199. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts +0 -2
  200. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  201. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts +0 -2
  202. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  203. package/dist/cjs-types/cli/lib/versionApi.test.d.ts +0 -2
  204. package/dist/cjs-types/cli/lib/versionApi.test.d.ts.map +0 -1
  205. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  206. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  207. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts +0 -2
  208. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  209. package/dist/cjs-types/cli/login.test.d.ts +0 -2
  210. package/dist/cjs-types/cli/login.test.d.ts.map +0 -1
  211. package/dist/cjs-types/common/index.test.d.ts +0 -2
  212. package/dist/cjs-types/common/index.test.d.ts.map +0 -1
  213. package/dist/cjs-types/nextjs/nextjs.test.d.ts +0 -2
  214. package/dist/cjs-types/nextjs/nextjs.test.d.ts.map +0 -1
  215. package/dist/cjs-types/react/ConvexAuthState.test.d.ts +0 -2
  216. package/dist/cjs-types/react/ConvexAuthState.test.d.ts.map +0 -1
  217. package/dist/cjs-types/react/auth_helpers.test.d.ts +0 -2
  218. package/dist/cjs-types/react/auth_helpers.test.d.ts.map +0 -1
  219. package/dist/cjs-types/react/auth_websocket.test.d.ts +0 -2
  220. package/dist/cjs-types/react/auth_websocket.test.d.ts.map +0 -1
  221. package/dist/cjs-types/react/client.test.d.ts +0 -2
  222. package/dist/cjs-types/react/client.test.d.ts.map +0 -1
  223. package/dist/cjs-types/react/client_provided_base_client.test.d.ts +0 -2
  224. package/dist/cjs-types/react/client_provided_base_client.test.d.ts.map +0 -1
  225. package/dist/cjs-types/react/queries_observer.test.d.ts +0 -2
  226. package/dist/cjs-types/react/queries_observer.test.d.ts.map +0 -1
  227. package/dist/cjs-types/react/react_node.test.d.ts +0 -2
  228. package/dist/cjs-types/react/react_node.test.d.ts.map +0 -1
  229. package/dist/cjs-types/react/use_paginated_query.test.d.ts +0 -2
  230. package/dist/cjs-types/react/use_paginated_query.test.d.ts.map +0 -1
  231. package/dist/cjs-types/react/use_queries.test.d.ts +0 -5
  232. package/dist/cjs-types/react/use_queries.test.d.ts.map +0 -1
  233. package/dist/cjs-types/react/use_query.test.d.ts +0 -5
  234. package/dist/cjs-types/react/use_query.test.d.ts.map +0 -1
  235. package/dist/cjs-types/react/use_query_object_options.test.d.ts +0 -5
  236. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +0 -1
  237. package/dist/cjs-types/react/use_query_result.test.d.ts +0 -5
  238. package/dist/cjs-types/react/use_query_result.test.d.ts.map +0 -1
  239. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  240. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  241. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  242. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  243. package/dist/cjs-types/server/api.intersect.test.d.ts +0 -2
  244. package/dist/cjs-types/server/api.intersect.test.d.ts.map +0 -1
  245. package/dist/cjs-types/server/api.test.d.ts +0 -2
  246. package/dist/cjs-types/server/api.test.d.ts.map +0 -1
  247. package/dist/cjs-types/server/audit_logging.test.d.ts +0 -2
  248. package/dist/cjs-types/server/audit_logging.test.d.ts.map +0 -1
  249. package/dist/cjs-types/server/components/index.test.d.ts +0 -2
  250. package/dist/cjs-types/server/components/index.test.d.ts.map +0 -1
  251. package/dist/cjs-types/server/cron.test.d.ts +0 -2
  252. package/dist/cjs-types/server/cron.test.d.ts.map +0 -1
  253. package/dist/cjs-types/server/data_model.test.d.ts +0 -2
  254. package/dist/cjs-types/server/data_model.test.d.ts.map +0 -1
  255. package/dist/cjs-types/server/database.test.d.ts +0 -2
  256. package/dist/cjs-types/server/database.test.d.ts.map +0 -1
  257. package/dist/cjs-types/server/database_api.test.d.ts +0 -2
  258. package/dist/cjs-types/server/database_api.test.d.ts.map +0 -1
  259. package/dist/cjs-types/server/filter_builder.test.d.ts +0 -2
  260. package/dist/cjs-types/server/filter_builder.test.d.ts.map +0 -1
  261. package/dist/cjs-types/server/impl/actions_impl.test.d.ts +0 -2
  262. package/dist/cjs-types/server/impl/actions_impl.test.d.ts.map +0 -1
  263. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  264. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  265. package/dist/cjs-types/server/impl/query_impl.test.d.ts +0 -2
  266. package/dist/cjs-types/server/impl/query_impl.test.d.ts.map +0 -1
  267. package/dist/cjs-types/server/pagination.test.d.ts +0 -2
  268. package/dist/cjs-types/server/pagination.test.d.ts.map +0 -1
  269. package/dist/cjs-types/server/query.test.d.ts +0 -2
  270. package/dist/cjs-types/server/query.test.d.ts.map +0 -1
  271. package/dist/cjs-types/server/registration.test.d.ts +0 -2
  272. package/dist/cjs-types/server/registration.test.d.ts.map +0 -1
  273. package/dist/cjs-types/server/router.test.d.ts +0 -2
  274. package/dist/cjs-types/server/router.test.d.ts.map +0 -1
  275. package/dist/cjs-types/server/scheduler.test.d.ts +0 -2
  276. package/dist/cjs-types/server/scheduler.test.d.ts.map +0 -1
  277. package/dist/cjs-types/server/schema.test.d.ts +0 -2
  278. package/dist/cjs-types/server/schema.test.d.ts.map +0 -1
  279. package/dist/cjs-types/test/fake_watch.d.ts +0 -16
  280. package/dist/cjs-types/test/fake_watch.d.ts.map +0 -1
  281. package/dist/cjs-types/test/type_testing.d.ts +0 -9
  282. package/dist/cjs-types/test/type_testing.d.ts.map +0 -1
  283. package/dist/cjs-types/type_utils.test.d.ts +0 -2
  284. package/dist/cjs-types/type_utils.test.d.ts.map +0 -1
  285. package/dist/cjs-types/values/size.test.d.ts +0 -2
  286. package/dist/cjs-types/values/size.test.d.ts.map +0 -1
  287. package/dist/cjs-types/values/validator.test.d.ts +0 -2
  288. package/dist/cjs-types/values/validator.test.d.ts.map +0 -1
  289. package/dist/cjs-types/values/value.test.d.ts +0 -2
  290. package/dist/cjs-types/values/value.test.d.ts.map +0 -1
  291. package/dist/esm-types/browser/http_client.test.d.ts +0 -2
  292. package/dist/esm-types/browser/http_client.test.d.ts.map +0 -1
  293. package/dist/esm-types/browser/query_options.test.d.ts +0 -2
  294. package/dist/esm-types/browser/query_options.test.d.ts.map +0 -1
  295. package/dist/esm-types/browser/simple_client.test.d.ts +0 -2
  296. package/dist/esm-types/browser/simple_client.test.d.ts.map +0 -1
  297. package/dist/esm-types/browser/sync/client.test.d.ts +0 -5
  298. package/dist/esm-types/browser/sync/client.test.d.ts.map +0 -1
  299. package/dist/esm-types/browser/sync/client_node.test.d.ts +0 -2
  300. package/dist/esm-types/browser/sync/client_node.test.d.ts.map +0 -1
  301. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  302. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  303. package/dist/esm-types/browser/sync/local_state.test.d.ts +0 -2
  304. package/dist/esm-types/browser/sync/local_state.test.d.ts.map +0 -1
  305. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  306. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  307. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  308. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  309. package/dist/esm-types/browser/sync/protocol.test.d.ts +0 -5
  310. package/dist/esm-types/browser/sync/protocol.test.d.ts.map +0 -1
  311. package/dist/esm-types/browser/sync/request_manager.test.d.ts +0 -2
  312. package/dist/esm-types/browser/sync/request_manager.test.d.ts.map +0 -1
  313. package/dist/esm-types/bundler/fs.test.d.ts +0 -2
  314. package/dist/esm-types/bundler/fs.test.d.ts.map +0 -1
  315. package/dist/esm-types/bundler/index.test.d.ts +0 -2
  316. package/dist/esm-types/bundler/index.test.d.ts.map +0 -1
  317. package/dist/esm-types/cli/codegen_templates/api.test.d.ts +0 -2
  318. package/dist/esm-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  319. package/dist/esm-types/cli/codegen_templates/common.test.d.ts +0 -2
  320. package/dist/esm-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  321. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts +0 -2
  322. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  323. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  324. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  325. package/dist/esm-types/cli/configure.test.d.ts +0 -2
  326. package/dist/esm-types/cli/configure.test.d.ts.map +0 -1
  327. package/dist/esm-types/cli/deploymentCreate.test.d.ts +0 -2
  328. package/dist/esm-types/cli/deploymentCreate.test.d.ts.map +0 -1
  329. package/dist/esm-types/cli/deploymentSelect.test.d.ts +0 -2
  330. package/dist/esm-types/cli/deploymentSelect.test.d.ts.map +0 -1
  331. package/dist/esm-types/cli/deploymentSelection.test.d.ts +0 -2
  332. package/dist/esm-types/cli/deploymentSelection.test.d.ts.map +0 -1
  333. package/dist/esm-types/cli/deploymentToken.test.d.ts +0 -2
  334. package/dist/esm-types/cli/deploymentToken.test.d.ts.map +0 -1
  335. package/dist/esm-types/cli/dev.test.d.ts +0 -2
  336. package/dist/esm-types/cli/dev.test.d.ts.map +0 -1
  337. package/dist/esm-types/cli/envDefault.test.d.ts +0 -2
  338. package/dist/esm-types/cli/envDefault.test.d.ts.map +0 -1
  339. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  340. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  341. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  342. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  343. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  344. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  345. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  346. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  347. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  348. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  349. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  350. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  351. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  352. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  353. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  354. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  355. package/dist/esm-types/cli/lib/codegen.test.d.ts +0 -2
  356. package/dist/esm-types/cli/lib/codegen.test.d.ts.map +0 -1
  357. package/dist/esm-types/cli/lib/components.test.d.ts +0 -2
  358. package/dist/esm-types/cli/lib/components.test.d.ts.map +0 -1
  359. package/dist/esm-types/cli/lib/config.test.d.ts +0 -2
  360. package/dist/esm-types/cli/lib/config.test.d.ts.map +0 -1
  361. package/dist/esm-types/cli/lib/deployment.test.d.ts +0 -2
  362. package/dist/esm-types/cli/lib/deployment.test.d.ts.map +0 -1
  363. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  364. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  365. package/dist/esm-types/cli/lib/env.test.d.ts +0 -2
  366. package/dist/esm-types/cli/lib/env.test.d.ts.map +0 -1
  367. package/dist/esm-types/cli/lib/expiration.test.d.ts +0 -2
  368. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +0 -1
  369. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  370. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  371. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  372. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  373. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  374. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  375. package/dist/esm-types/cli/lib/fsUtils.test.d.ts +0 -2
  376. package/dist/esm-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  377. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +0 -2
  378. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  379. package/dist/esm-types/cli/lib/indexes.test.d.ts +0 -2
  380. package/dist/esm-types/cli/lib/indexes.test.d.ts.map +0 -1
  381. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  382. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  383. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  384. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  385. package/dist/esm-types/cli/lib/run.test.d.ts +0 -2
  386. package/dist/esm-types/cli/lib/run.test.d.ts.map +0 -1
  387. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts +0 -2
  388. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  389. package/dist/esm-types/cli/lib/typecheck.test.d.ts +0 -2
  390. package/dist/esm-types/cli/lib/typecheck.test.d.ts.map +0 -1
  391. package/dist/esm-types/cli/lib/updates.test.d.ts +0 -2
  392. package/dist/esm-types/cli/lib/updates.test.d.ts.map +0 -1
  393. package/dist/esm-types/cli/lib/utils/hash.test.d.ts +0 -2
  394. package/dist/esm-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  395. package/dist/esm-types/cli/lib/utils/utils.test.d.ts +0 -2
  396. package/dist/esm-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  397. package/dist/esm-types/cli/lib/versionApi.test.d.ts +0 -2
  398. package/dist/esm-types/cli/lib/versionApi.test.d.ts.map +0 -1
  399. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  400. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  401. package/dist/esm-types/cli/lib/workos/workos.test.d.ts +0 -2
  402. package/dist/esm-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  403. package/dist/esm-types/cli/login.test.d.ts +0 -2
  404. package/dist/esm-types/cli/login.test.d.ts.map +0 -1
  405. package/dist/esm-types/common/index.test.d.ts +0 -2
  406. package/dist/esm-types/common/index.test.d.ts.map +0 -1
  407. package/dist/esm-types/nextjs/nextjs.test.d.ts +0 -2
  408. package/dist/esm-types/nextjs/nextjs.test.d.ts.map +0 -1
  409. package/dist/esm-types/react/ConvexAuthState.test.d.ts +0 -2
  410. package/dist/esm-types/react/ConvexAuthState.test.d.ts.map +0 -1
  411. package/dist/esm-types/react/auth_helpers.test.d.ts +0 -2
  412. package/dist/esm-types/react/auth_helpers.test.d.ts.map +0 -1
  413. package/dist/esm-types/react/auth_websocket.test.d.ts +0 -2
  414. package/dist/esm-types/react/auth_websocket.test.d.ts.map +0 -1
  415. package/dist/esm-types/react/client.test.d.ts +0 -2
  416. package/dist/esm-types/react/client.test.d.ts.map +0 -1
  417. package/dist/esm-types/react/client_provided_base_client.test.d.ts +0 -2
  418. package/dist/esm-types/react/client_provided_base_client.test.d.ts.map +0 -1
  419. package/dist/esm-types/react/queries_observer.test.d.ts +0 -2
  420. package/dist/esm-types/react/queries_observer.test.d.ts.map +0 -1
  421. package/dist/esm-types/react/react_node.test.d.ts +0 -2
  422. package/dist/esm-types/react/react_node.test.d.ts.map +0 -1
  423. package/dist/esm-types/react/use_paginated_query.test.d.ts +0 -2
  424. package/dist/esm-types/react/use_paginated_query.test.d.ts.map +0 -1
  425. package/dist/esm-types/react/use_queries.test.d.ts +0 -5
  426. package/dist/esm-types/react/use_queries.test.d.ts.map +0 -1
  427. package/dist/esm-types/react/use_query.test.d.ts +0 -5
  428. package/dist/esm-types/react/use_query.test.d.ts.map +0 -1
  429. package/dist/esm-types/react/use_query_object_options.test.d.ts +0 -5
  430. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +0 -1
  431. package/dist/esm-types/react/use_query_result.test.d.ts +0 -5
  432. package/dist/esm-types/react/use_query_result.test.d.ts.map +0 -1
  433. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  434. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  435. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  436. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  437. package/dist/esm-types/server/api.intersect.test.d.ts +0 -2
  438. package/dist/esm-types/server/api.intersect.test.d.ts.map +0 -1
  439. package/dist/esm-types/server/api.test.d.ts +0 -2
  440. package/dist/esm-types/server/api.test.d.ts.map +0 -1
  441. package/dist/esm-types/server/audit_logging.test.d.ts +0 -2
  442. package/dist/esm-types/server/audit_logging.test.d.ts.map +0 -1
  443. package/dist/esm-types/server/components/index.test.d.ts +0 -2
  444. package/dist/esm-types/server/components/index.test.d.ts.map +0 -1
  445. package/dist/esm-types/server/cron.test.d.ts +0 -2
  446. package/dist/esm-types/server/cron.test.d.ts.map +0 -1
  447. package/dist/esm-types/server/data_model.test.d.ts +0 -2
  448. package/dist/esm-types/server/data_model.test.d.ts.map +0 -1
  449. package/dist/esm-types/server/database.test.d.ts +0 -2
  450. package/dist/esm-types/server/database.test.d.ts.map +0 -1
  451. package/dist/esm-types/server/database_api.test.d.ts +0 -2
  452. package/dist/esm-types/server/database_api.test.d.ts.map +0 -1
  453. package/dist/esm-types/server/filter_builder.test.d.ts +0 -2
  454. package/dist/esm-types/server/filter_builder.test.d.ts.map +0 -1
  455. package/dist/esm-types/server/impl/actions_impl.test.d.ts +0 -2
  456. package/dist/esm-types/server/impl/actions_impl.test.d.ts.map +0 -1
  457. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  458. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  459. package/dist/esm-types/server/impl/query_impl.test.d.ts +0 -2
  460. package/dist/esm-types/server/impl/query_impl.test.d.ts.map +0 -1
  461. package/dist/esm-types/server/pagination.test.d.ts +0 -2
  462. package/dist/esm-types/server/pagination.test.d.ts.map +0 -1
  463. package/dist/esm-types/server/query.test.d.ts +0 -2
  464. package/dist/esm-types/server/query.test.d.ts.map +0 -1
  465. package/dist/esm-types/server/registration.test.d.ts +0 -2
  466. package/dist/esm-types/server/registration.test.d.ts.map +0 -1
  467. package/dist/esm-types/server/router.test.d.ts +0 -2
  468. package/dist/esm-types/server/router.test.d.ts.map +0 -1
  469. package/dist/esm-types/server/scheduler.test.d.ts +0 -2
  470. package/dist/esm-types/server/scheduler.test.d.ts.map +0 -1
  471. package/dist/esm-types/server/schema.test.d.ts +0 -2
  472. package/dist/esm-types/server/schema.test.d.ts.map +0 -1
  473. package/dist/esm-types/test/fake_watch.d.ts +0 -16
  474. package/dist/esm-types/test/fake_watch.d.ts.map +0 -1
  475. package/dist/esm-types/test/type_testing.d.ts +0 -9
  476. package/dist/esm-types/test/type_testing.d.ts.map +0 -1
  477. package/dist/esm-types/type_utils.test.d.ts +0 -2
  478. package/dist/esm-types/type_utils.test.d.ts.map +0 -1
  479. package/dist/esm-types/values/size.test.d.ts +0 -2
  480. package/dist/esm-types/values/size.test.d.ts.map +0 -1
  481. package/dist/esm-types/values/validator.test.d.ts +0 -2
  482. package/dist/esm-types/values/validator.test.d.ts.map +0 -1
  483. package/dist/esm-types/values/value.test.d.ts +0 -2
  484. package/dist/esm-types/values/value.test.d.ts.map +0 -1
  485. package/src/browser/http_client.test.ts +0 -202
  486. package/src/browser/query_options.test.ts +0 -43
  487. package/src/browser/simple_client.test.ts +0 -104
  488. package/src/browser/sync/client.test.ts +0 -44
  489. package/src/browser/sync/client_node.test.ts +0 -1207
  490. package/src/browser/sync/client_node_test_helpers.ts +0 -200
  491. package/src/browser/sync/local_state.test.ts +0 -128
  492. package/src/browser/sync/optimistic_query_set.test.ts +0 -253
  493. package/src/browser/sync/paginated_query_client.test.ts +0 -597
  494. package/src/browser/sync/protocol.test.ts +0 -14
  495. package/src/browser/sync/request_manager.test.ts +0 -273
  496. package/src/bundler/fs.test.ts +0 -86
  497. package/src/bundler/index.test.ts +0 -210
  498. package/src/bundler/test_fixtures/js/project01/bar.js +0 -4
  499. package/src/bundler/test_fixtures/js/project01/file with spaces.js +0 -1
  500. package/src/bundler/test_fixtures/js/project01/foo.js +0 -9
  501. package/src/bundler/test_fixtures/js/project_with_https/https.js +0 -9
  502. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/default.js +0 -3
  503. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/more_code/https.js +0 -5
  504. package/src/bundler/test_fixtures/js/project_with_https_without_router/https.js +0 -1
  505. package/src/bundler/test_fixtures/js/project_with_node_shims/uses_node_shims.js +0 -4
  506. package/src/cli/codegen_templates/api.test.ts +0 -18
  507. package/src/cli/codegen_templates/common.test.ts +0 -52
  508. package/src/cli/codegen_templates/templates.test.ts +0 -16
  509. package/src/cli/codegen_templates/validator_helpers.test.ts +0 -31
  510. package/src/cli/configure.test.ts +0 -138
  511. package/src/cli/deploymentCreate.test.ts +0 -1376
  512. package/src/cli/deploymentSelect.test.ts +0 -1291
  513. package/src/cli/deploymentSelection.test.ts +0 -2546
  514. package/src/cli/deploymentToken.test.ts +0 -397
  515. package/src/cli/dev.test.ts +0 -157
  516. package/src/cli/envDefault.test.ts +0 -495
  517. package/src/cli/lib/__snapshots__/formatTargetedDeployment.test.ts.snap +0 -94
  518. package/src/cli/lib/aiFiles/agentsmd.test.ts +0 -133
  519. package/src/cli/lib/aiFiles/claudemd.test.ts +0 -92
  520. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +0 -50
  521. package/src/cli/lib/aiFiles/index.test.ts +0 -986
  522. package/src/cli/lib/aiFiles/integration.test.ts +0 -692
  523. package/src/cli/lib/aiFiles/prompt.test.ts +0 -202
  524. package/src/cli/lib/aiFiles/state.test.ts +0 -305
  525. package/src/cli/lib/aiFiles/utils.test.ts +0 -50
  526. package/src/cli/lib/codegen.test.ts +0 -49
  527. package/src/cli/lib/components.test.ts +0 -227
  528. package/src/cli/lib/config.test.ts +0 -1026
  529. package/src/cli/lib/deployment.test.ts +0 -85
  530. package/src/cli/lib/deploymentSelector.test.ts +0 -107
  531. package/src/cli/lib/env.test.ts +0 -60
  532. package/src/cli/lib/expiration.test.ts +0 -159
  533. package/src/cli/lib/extractDeploymentNameForWorkOS.test.ts +0 -30
  534. package/src/cli/lib/formatEnvValueForDotfile.test.ts +0 -294
  535. package/src/cli/lib/formatTargetedDeployment.test.ts +0 -281
  536. package/src/cli/lib/fsUtils.test.ts +0 -67
  537. package/src/cli/lib/generateDocs.test.ts +0 -326
  538. package/src/cli/lib/indexes.test.ts +0 -77
  539. package/src/cli/lib/localDeployment/run.test.ts +0 -104
  540. package/src/cli/lib/localDeployment/secrets.test.ts +0 -53
  541. package/src/cli/lib/run.test.ts +0 -54
  542. package/src/cli/lib/runTestFunction.test.ts +0 -84
  543. package/src/cli/lib/typecheck.test.ts +0 -71
  544. package/src/cli/lib/updates.test.ts +0 -157
  545. package/src/cli/lib/utils/hash.test.ts +0 -25
  546. package/src/cli/lib/utils/utils.test.ts +0 -340
  547. package/src/cli/lib/versionApi.test.ts +0 -471
  548. package/src/cli/lib/workos/environmentApi.test.ts +0 -107
  549. package/src/cli/lib/workos/workos.test.ts +0 -242
  550. package/src/cli/login.test.ts +0 -261
  551. package/src/common/README.md +0 -2
  552. package/src/common/index.test.ts +0 -35
  553. package/src/nextjs/nextjs.test.tsx +0 -94
  554. package/src/react/ConvexAuthState.test.tsx +0 -702
  555. package/src/react/auth_helpers.test.tsx +0 -45
  556. package/src/react/auth_websocket.test.tsx +0 -1177
  557. package/src/react/client.test.tsx +0 -261
  558. package/src/react/client_provided_base_client.test.tsx +0 -174
  559. package/src/react/queries_observer.test.ts +0 -176
  560. package/src/react/react_node.test.ts +0 -78
  561. package/src/react/use_paginated_query.test.tsx +0 -1420
  562. package/src/react/use_queries.test.ts +0 -140
  563. package/src/react/use_query.test.ts +0 -71
  564. package/src/react/use_query_object_options.test.ts +0 -51
  565. package/src/react/use_query_result.test.ts +0 -75
  566. package/src/react-auth0/ConvexProviderWithAuth0.test.tsx +0 -17
  567. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +0 -18
  568. package/src/server/README.md +0 -15
  569. package/src/server/api.intersect.test.ts +0 -109
  570. package/src/server/api.test.ts +0 -447
  571. package/src/server/audit_logging.test.ts +0 -131
  572. package/src/server/components/index.test.ts +0 -48
  573. package/src/server/cron.test.ts +0 -58
  574. package/src/server/data_model.test.ts +0 -221
  575. package/src/server/database.test.ts +0 -184
  576. package/src/server/database_api.test.ts +0 -439
  577. package/src/server/filter_builder.test.ts +0 -102
  578. package/src/server/impl/actions_impl.test.ts +0 -59
  579. package/src/server/impl/filter_builder_impl.test.ts +0 -13
  580. package/src/server/impl/query_impl.test.ts +0 -46
  581. package/src/server/pagination.test.ts +0 -49
  582. package/src/server/query.test.ts +0 -112
  583. package/src/server/registration.test.ts +0 -589
  584. package/src/server/router.test.ts +0 -148
  585. package/src/server/scheduler.test.ts +0 -31
  586. package/src/server/schema.test.ts +0 -1081
  587. package/src/test/fake_watch.ts +0 -54
  588. package/src/test/type_testing.ts +0 -21
  589. package/src/type_utils.test.ts +0 -62
  590. package/src/values/size.test.ts +0 -95
  591. package/src/values/validator.test.ts +0 -619
  592. package/src/values/value.test.ts +0 -232
  593. package/src/vendor/README.md +0 -18
  594. package/src/vendor/jwt-decode/README.md +0 -1
@@ -1,33 +1,14 @@
1
1
  "use strict";
2
- import path from "path";
3
2
  import {
4
- logFailure,
5
3
  logFinishedStep,
6
- logVerbose
4
+ logVerbose,
5
+ logWarning
7
6
  } from "../../../bundler/log.js";
8
- import { runSystemQuery } from "../run.js";
9
7
  import {
10
- deploymentStateDir,
11
8
  saveDeploymentConfig
12
9
  } from "./filePaths.js";
13
- import {
14
- ensureBackendStopped,
15
- localDeploymentUrl,
16
- runLocalBackend
17
- } from "./run.js";
18
- import {
19
- downloadSnapshotExport,
20
- startSnapshotExport
21
- } from "../convexExport.js";
22
- import { deploymentFetch, logAndHandleFetchError } from "../utils/utils.js";
23
- import {
24
- confirmImport,
25
- uploadForImport,
26
- waitForStableImportState
27
- } from "../convexImport.js";
28
- import { promptOptions, promptYesNo } from "../utils/prompts.js";
29
- import { recursivelyDelete } from "../fsUtils.js";
30
- import { LocalDeploymentError } from "./errors.js";
10
+ import { runLocalBackend } from "./run.js";
11
+ import { promptYesNo } from "../utils/prompts.js";
31
12
  import { ensureBackendBinaryDownloaded } from "./download.js";
32
13
  import {
33
14
  generateLocalDevSecretsWithLatestBinary,
@@ -99,37 +80,6 @@ export async function handlePotentialUpgradeAndStart(ctx, args) {
99
80
  });
100
81
  return { cleanupHandle: cleanupHandle2, adminKey };
101
82
  }
102
- const choice = args.forceUpgrade || !process.stdin.isTTY ? "transfer" : await promptOptions(ctx, {
103
- message: "Transfer data from existing deployment?",
104
- default: "transfer",
105
- choices: [
106
- { name: "transfer data", value: "transfer" },
107
- { name: "start fresh", value: "reset" }
108
- ]
109
- });
110
- const deploymentStatePath = deploymentStateDir(
111
- ctx,
112
- args.deploymentKind,
113
- args.deploymentName
114
- );
115
- if (choice === "reset") {
116
- recursivelyDelete(ctx, deploymentStatePath, { force: true });
117
- saveDeploymentConfig(
118
- ctx,
119
- args.deploymentKind,
120
- args.deploymentName,
121
- newConfig
122
- );
123
- const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
124
- binaryPath: args.newBinaryPath,
125
- deploymentKind: args.deploymentKind,
126
- deploymentName: args.deploymentName,
127
- ports: args.ports,
128
- instanceSecret,
129
- isLatestVersion: true
130
- });
131
- return { cleanupHandle: cleanupHandle2, adminKey };
132
- }
133
83
  const { cleanupHandle } = await handleUpgrade(ctx, {
134
84
  deploymentKind: args.deploymentKind,
135
85
  deploymentName: args.deploymentName,
@@ -144,71 +94,13 @@ export async function handlePotentialUpgradeAndStart(ctx, args) {
144
94
  return { cleanupHandle, adminKey };
145
95
  }
146
96
  async function handleUpgrade(ctx, args) {
147
- const { adminKey } = args;
148
- const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(
149
- ctx,
150
- {
151
- kind: "version",
152
- version: args.oldVersion
153
- }
154
- );
155
- logVerbose("Running backend on old version");
156
- const { cleanupHandle: oldCleanupHandle } = await runLocalBackend(ctx, {
157
- binaryPath: oldBinaryPath,
158
- ports: args.ports,
159
- deploymentKind: args.deploymentKind,
160
- deploymentName: args.deploymentName,
161
- instanceSecret: args.instanceSecret,
162
- isLatestVersion: false
163
- });
164
- logVerbose("Downloading env vars");
165
- const deploymentUrl = localDeploymentUrl(args.ports.cloud);
166
- const envs = await runSystemQuery(ctx, {
167
- deploymentUrl,
168
- adminKey,
169
- functionName: "_system/cli/queryEnvironmentVariables",
170
- componentPath: void 0,
171
- args: {}
172
- });
173
- logVerbose("Doing a snapshot export");
174
- const exportPath = path.join(
175
- deploymentStateDir(ctx, args.deploymentKind, args.deploymentName),
176
- "export.zip"
177
- );
178
- if (ctx.fs.exists(exportPath)) {
179
- ctx.fs.unlink(exportPath);
180
- }
181
- const snapshotExportState = await startSnapshotExport(ctx, {
182
- deploymentUrl,
183
- adminKey,
184
- includeStorage: true,
185
- inputPath: exportPath
186
- });
187
- if (snapshotExportState.state !== "completed") {
188
- return ctx.crash({
189
- exitCode: 1,
190
- errorType: "fatal",
191
- printedMessage: "Failed to export snapshot"
192
- });
193
- }
194
- await downloadSnapshotExport(ctx, {
195
- snapshotExportTs: snapshotExportState.start_ts,
196
- inputPath: exportPath,
197
- adminKey,
198
- deploymentUrl
199
- });
200
- logVerbose("Stopping the backend on the old version");
201
- const oldCleanupFunc = ctx.removeCleanup(oldCleanupHandle);
202
- if (oldCleanupFunc) {
203
- await oldCleanupFunc(0);
97
+ const isDowngrade = _isDowngrade(args.oldVersion, args.newVersion);
98
+ if (isDowngrade) {
99
+ logWarning(
100
+ `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.`
101
+ );
204
102
  }
205
- await ensureBackendStopped(ctx, {
206
- ports: args.ports,
207
- maxTimeSecs: 5,
208
- deploymentName: args.deploymentName,
209
- allowOtherDeployments: false
210
- });
211
- logVerbose("Running backend on new version");
103
+ logVerbose(`Running backend on new version ${args.newVersion}`);
212
104
  const { cleanupHandle } = await runLocalBackend(ctx, {
213
105
  binaryPath: args.newBinaryPath,
214
106
  ports: args.ports,
@@ -217,84 +109,24 @@ async function handleUpgrade(ctx, args) {
217
109
  instanceSecret: args.instanceSecret,
218
110
  isLatestVersion: true
219
111
  });
220
- logVerbose("Importing the env vars");
221
- if (envs.length > 0) {
222
- const fetch = deploymentFetch(ctx, {
223
- deploymentUrl,
224
- adminKey
225
- });
226
- try {
227
- await fetch("/api/update_environment_variables", {
228
- body: JSON.stringify({ changes: envs }),
229
- method: "POST"
230
- });
231
- } catch (e) {
232
- return await logAndHandleFetchError(ctx, e);
233
- }
234
- }
235
- logVerbose("Doing a snapshot import");
236
- const importId = await uploadForImport(ctx, {
237
- deploymentUrl,
238
- adminKey,
239
- filePath: exportPath,
240
- importArgs: { format: "zip", mode: "replace", tableName: void 0 },
241
- onImportFailed: async (e) => {
242
- logFailure(`Failed to import snapshot: ${e}`);
243
- }
244
- });
245
- logVerbose(`Snapshot import started`);
246
- let status = await waitForStableImportState(ctx, {
247
- importId,
248
- deploymentUrl,
249
- adminKey,
250
- onProgress: () => {
251
- return 0;
252
- }
253
- });
254
- if (status.state !== "waiting_for_confirmation") {
255
- const message = "Error while transferring data: Failed to upload snapshot";
256
- return ctx.crash({
257
- exitCode: 1,
258
- errorType: "fatal",
259
- printedMessage: message,
260
- errForSentry: new LocalDeploymentError(message)
261
- });
262
- }
263
- await confirmImport(ctx, {
264
- importId,
265
- adminKey,
266
- deploymentUrl,
267
- onError: async (e) => {
268
- logFailure(`Failed to confirm import: ${e}`);
269
- }
270
- });
271
- logVerbose(`Snapshot import confirmed`);
272
- status = await waitForStableImportState(ctx, {
273
- importId,
274
- deploymentUrl,
275
- adminKey,
276
- onProgress: () => {
277
- return 0;
278
- }
279
- });
280
- logVerbose(`Snapshot import status: ${status.state}`);
281
- if (status.state !== "completed") {
282
- const message = "Error while transferring data: Failed to import snapshot";
283
- return ctx.crash({
284
- exitCode: 1,
285
- errorType: "fatal",
286
- printedMessage: message,
287
- errForSentry: new LocalDeploymentError(message)
288
- });
289
- }
290
- logFinishedStep("Successfully upgraded to a new backend version");
112
+ logFinishedStep(
113
+ `Successfully ${isDowngrade ? "moved" : "upgraded"} to backend version ${args.newVersion}`
114
+ );
291
115
  saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {
292
116
  ports: args.ports,
293
117
  backendVersion: args.newVersion,
294
- adminKey,
118
+ adminKey: args.adminKey,
295
119
  instanceSecret: args.instanceSecret,
296
120
  cloudProjectId: args.cloudProjectId
297
121
  });
298
122
  return { cleanupHandle };
299
123
  }
124
+ export function _isDowngrade(oldVersion, newVersion) {
125
+ const oldDate = releaseDate(oldVersion);
126
+ const newDate = releaseDate(newVersion);
127
+ return oldDate !== null && newDate !== null && newDate < oldDate;
128
+ }
129
+ function releaseDate(version) {
130
+ return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version)?.[1] ?? null;
131
+ }
300
132
  //# 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": ";AAAA,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,8BAA8B;AACxD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe,mBAAmB;AAC3C,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AACrC,SAAS,qCAAqC;AAC9C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,sBAAsB,+BACpB,KACA,MAcsD;AACtD,QAAM,EAAE,UAAU,eAAe,IAC/B,KAAK,wBAAwB,QAC7B,KAAK,oBAAoB,mBACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQE,MAAM,wCAAwC,KAAK;AAAA,MACjD,gBAAgB,KAAK;AAAA,IACvB,CAAC;AAAA,MACD,KAAK;AACX,QAAM,YAAmC;AAAA,IACvC,OAAO,KAAK;AAAA,IACZ,gBAAgB,KAAK;AAAA,IACrB;AAAA,IACA;AAAA,IACA,gBAAgB,KAAK;AAAA,EACvB;AACA,MAAI,KAAK,eAAe,QAAQ,KAAK,eAAe,KAAK,YAAY;AAEnE;AAAA,MACE;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AACA,UAAM,EAAE,eAAAA,eAAc,IAAI,MAAM,gBAAgB,KAAK;AAAA,MACnD,YAAY,KAAK;AAAA,MACjB,gBAAgB,KAAK;AAAA,MACrB,gBAAgB,KAAK;AAAA,MACrB,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC;AACD,WAAO,EAAE,eAAAA,gBAAe,SAAS;AAAA,EACnC;AACA;AAAA,IACE,4BAA4B,KAAK,UAAU,OAAO,KAAK,UAAU;AAAA,EACnE;AACA,QAAM,YACJ,KAAK,gBACL,CAAC,QAAQ,MAAM,SACd,MAAM,YAAY,KAAK;AAAA,IACtB,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC;AACH,MAAI,CAAC,WAAW;AACd,UAAM,EAAE,YAAY,cAAc,IAAI,MAAM;AAAA,MAC1C;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB;AAAA,IACF;AAEA,yBAAqB,KAAK,KAAK,gBAAgB,KAAK,gBAAgB;AAAA,MAClE,GAAG;AAAA,MACH,gBAAgB,KAAK;AAAA,IACvB,CAAC;AACD,UAAM,EAAE,eAAAA,eAAc,IAAI,MAAM,gBAAgB,KAAK;AAAA,MACnD,YAAY;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,gBAAgB,KAAK;AAAA,MACrB,gBAAgB,KAAK;AAAA,MACrB;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC;AACD,WAAO,EAAE,eAAAA,gBAAe,SAAS;AAAA,EACnC;AACA,QAAM,SACJ,KAAK,gBAAgB,CAAC,QAAQ,MAAM,QAChC,aACA,MAAM,cAAc,KAAK;AAAA,IACvB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,iBAAiB,OAAO,WAAW;AAAA,MAC3C,EAAE,MAAM,eAAe,OAAO,QAAQ;AAAA,IACxC;AAAA,EACF,CAAC;AACP,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,MAAI,WAAW,SAAS;AACtB,sBAAkB,KAAK,qBAAqB,EAAE,OAAO,KAAK,CAAC;AAC3D;AAAA,MACE;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AACA,UAAM,EAAE,eAAAA,eAAc,IAAI,MAAM,gBAAgB,KAAK;AAAA,MACnD,YAAY,KAAK;AAAA,MACjB,gBAAgB,KAAK;AAAA,MACrB,gBAAgB,KAAK;AAAA,MACrB,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC;AACD,WAAO,EAAE,eAAAA,gBAAe,SAAS;AAAA,EACnC;AACA,QAAM,EAAE,cAAc,IAAI,MAAM,cAAc,KAAK;AAAA,IACjD,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB,YAAY,KAAK;AAAA,IACjB,eAAe,KAAK;AAAA,IACpB,YAAY,KAAK;AAAA,IACjB,OAAO,KAAK;AAAA,IACZ;AAAA,IACA;AAAA,IACA,gBAAgB,KAAK;AAAA,EACvB,CAAC;AACD,SAAO,EAAE,eAAe,SAAS;AACnC;AAEA,eAAe,cACb,KACA,MAcoC;AACpC,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,EAAE,YAAY,cAAc,IAAI,MAAM;AAAA,IAC1C;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,aAAW,gCAAgC;AAC3C,QAAM,EAAE,eAAe,iBAAiB,IAAI,MAAM,gBAAgB,KAAK;AAAA,IACrE,YAAY;AAAA,IACZ,OAAO,KAAK;AAAA,IACZ,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB,iBAAiB;AAAA,EACnB,CAAC;AAED,aAAW,sBAAsB;AACjC,QAAM,gBAAgB,mBAAmB,KAAK,MAAM,KAAK;AACzD,QAAM,OAAQ,MAAM,eAAe,KAAK;AAAA,IACtC;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,eAAe;AAAA,IACf,MAAM,CAAC;AAAA,EACT,CAAC;AAKD,aAAW,yBAAyB;AACpC,QAAM,aAAa,KAAK;AAAA,IACtB,mBAAmB,KAAK,KAAK,gBAAgB,KAAK,cAAc;AAAA,IAChE;AAAA,EACF;AACA,MAAI,IAAI,GAAG,OAAO,UAAU,GAAG;AAC7B,QAAI,GAAG,OAAO,UAAU;AAAA,EAC1B;AACA,QAAM,sBAAsB,MAAM,oBAAoB,KAAK;AAAA,IACzD;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,WAAW;AAAA,EACb,CAAC;AACD,MAAI,oBAAoB,UAAU,aAAa;AAC7C,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AACA,QAAM,uBAAuB,KAAK;AAAA,IAChC,kBAAkB,oBAAoB;AAAA,IACtC,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EACF,CAAC;AAED,aAAW,yCAAyC;AACpD,QAAM,iBAAiB,IAAI,cAAc,gBAAgB;AACzD,MAAI,gBAAgB;AAClB,UAAM,eAAe,CAAC;AAAA,EACxB;AACA,QAAM,qBAAqB,KAAK;AAAA,IAC9B,OAAO,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,gBAAgB,KAAK;AAAA,IACrB,uBAAuB;AAAA,EACzB,CAAC;AAGD,aAAW,gCAAgC;AAC3C,QAAM,EAAE,cAAc,IAAI,MAAM,gBAAgB,KAAK;AAAA,IACnD,YAAY,KAAK;AAAA,IACjB,OAAO,KAAK;AAAA,IACZ,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB,iBAAiB;AAAA,EACnB,CAAC;AAED,aAAW,wBAAwB;AACnC,MAAI,KAAK,SAAS,GAAG;AACnB,UAAM,QAAQ,gBAAgB,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI;AACF,YAAM,MAAM,qCAAqC;AAAA,QAC/C,MAAM,KAAK,UAAU,EAAE,SAAS,KAAK,CAAC;AAAA,QACtC,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAS,GAAG;AAEV,aAAO,MAAM,uBAAuB,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,aAAW,yBAAyB;AACpC,QAAM,WAAW,MAAM,gBAAgB,KAAK;AAAA,IAC1C;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,YAAY,EAAE,QAAQ,OAAO,MAAM,WAAW,WAAW,OAAU;AAAA,IACnE,gBAAgB,OAAO,MAAM;AAC3B,iBAAW,8BAA8B,CAAC,EAAE;AAAA,IAC9C;AAAA,EACF,CAAC;AACD,aAAW,yBAAyB;AACpC,MAAI,SAAS,MAAM,yBAAyB,KAAK;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,MAAM;AAEhB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACD,MAAI,OAAO,UAAU,4BAA4B;AAC/C,UAAM,UAAU;AAChB,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,cAAc,IAAI,qBAAqB,OAAO;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,KAAK;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,OAAO,MAAM;AACpB,iBAAW,6BAA6B,CAAC,EAAE;AAAA,IAC7C;AAAA,EACF,CAAC;AACD,aAAW,2BAA2B;AACtC,WAAS,MAAM,yBAAyB,KAAK;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,MAAM;AAEhB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACD,aAAW,2BAA2B,OAAO,KAAK,EAAE;AACpD,MAAI,OAAO,UAAU,aAAa;AAChC,UAAM,UAAU;AAChB,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,cAAc,IAAI,qBAAqB,OAAO;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,kBAAgB,gDAAgD;AAChE,uBAAqB,KAAK,KAAK,gBAAgB,KAAK,gBAAgB;AAAA,IAClE,OAAO,KAAK;AAAA,IACZ,gBAAgB,KAAK;AAAA,IACrB;AAAA,IACA,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,EACvB,CAAC;AAED,SAAO,EAAE,cAAc;AACzB;",
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
6
  "names": ["cleanupHandle"]
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": ";AAEA,OAAO,qBAAqB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AACjC,SAAS,eAAe;AACxB,SAAS,aAAa,YAAY,YAAY,qBAAqB;AACnE,SAAS,0BAA0B;AACnC,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAgBtB,gBAAS,QAAQ,MAAgD;AACtE,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,aAAa,gBAAgB,KAAK,WAAW;AAAA,EAC/C;AACF;AAEO,aAAM,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": []
7
7
  }
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
2
  import { Command, Option } from "@commander-js/extra-typings";
3
3
  import { oneoffContext } from "../bundler/context.js";
4
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
5
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { logError } from "../bundler/log.js";
5
+ import { Server } from "@modelcontextprotocol/server";
6
+ import { serveStdio } from "@modelcontextprotocol/server/stdio";
6
7
  import { actionDescription } from "./lib/command.js";
7
8
  import { checkAuthorization } from "./lib/login.js";
8
- import {
9
- CallToolRequestSchema,
10
- ListToolsRequestSchema
11
- } from "@modelcontextprotocol/sdk/types.js";
12
9
  import {
13
10
  RequestContext,
14
11
  RequestCrash
@@ -41,11 +38,7 @@ mcp.command("start").summary("Start the MCP server").description(
41
38
  ).addDeploymentSelectionOptions(actionDescription("Run the MCP server on")).action(async (options) => {
42
39
  const ctx = await oneoffContext(options);
43
40
  try {
44
- const server = makeServer(options);
45
- const transport = new StdioServerTransport();
46
- await server.connect(transport);
47
- await new Promise(() => {
48
- });
41
+ enabledTools(options);
49
42
  } catch (error) {
50
43
  await ctx.crash({
51
44
  exitCode: 1,
@@ -54,8 +47,17 @@ mcp.command("start").summary("Start the MCP server").description(
54
47
  printedMessage: `Failed to start MCP server: ${error}`
55
48
  });
56
49
  }
50
+ serveStdio(() => makeServer(options), {
51
+ legacy: "serve",
52
+ // The only channel for out-of-band failures (transport errors, dropped
53
+ // malformed notifications). stdout carries the protocol, so they go to
54
+ // stderr.
55
+ onerror: (error) => logError(`MCP server error: ${error.message}`)
56
+ });
57
+ await new Promise(() => {
58
+ });
57
59
  });
58
- function makeServer(options) {
60
+ function enabledTools(options) {
59
61
  const disabledToolNames = /* @__PURE__ */ new Set();
60
62
  for (const toolName of options.disableTools?.split(",") ?? []) {
61
63
  const name = toolName.trim();
@@ -72,6 +74,10 @@ function makeServer(options) {
72
74
  enabledToolsByName[tool.name] = tool;
73
75
  }
74
76
  }
77
+ return enabledToolsByName;
78
+ }
79
+ export function makeServer(options) {
80
+ const enabledToolsByName = enabledTools(options);
75
81
  const mutex = new Mutex();
76
82
  const server = new Server(
77
83
  {
@@ -84,69 +90,66 @@ function makeServer(options) {
84
90
  }
85
91
  }
86
92
  );
87
- server.setRequestHandler(
88
- CallToolRequestSchema,
89
- async (request) => {
90
- const ctx = new RequestContext(options);
91
- await initializeBigBrainAuth(ctx, options);
92
- try {
93
- const authorized = await checkAuthorization(ctx, false);
94
- if (!authorized) {
95
- await ctx.crash({
96
- exitCode: 1,
97
- errorType: "fatal",
98
- printedMessage: "Not Authorized: Run `npx convex dev` to login to your Convex project."
99
- });
100
- }
101
- if (!request.params.arguments) {
102
- await ctx.crash({
103
- exitCode: 1,
104
- errorType: "fatal",
105
- printedMessage: "No arguments provided"
106
- });
107
- }
108
- const convexTool = enabledToolsByName[request.params.name];
109
- if (!convexTool) {
110
- await ctx.crash({
111
- exitCode: 1,
112
- errorType: "fatal",
113
- printedMessage: `Tool ${request.params.name} not found`
114
- });
115
- }
116
- const input = convexTool.inputSchema.parse(request.params.arguments);
117
- const result = await mutex.runExclusive(async () => {
118
- return await convexTool.handler(ctx, input);
93
+ server.setRequestHandler("tools/call", async (request) => {
94
+ const ctx = new RequestContext(options);
95
+ await initializeBigBrainAuth(ctx, options);
96
+ try {
97
+ const authorized = await checkAuthorization(ctx, false);
98
+ if (!authorized) {
99
+ await ctx.crash({
100
+ exitCode: 1,
101
+ errorType: "fatal",
102
+ printedMessage: "Not Authorized: Run `npx convex dev` to login to your Convex project."
103
+ });
104
+ }
105
+ if (!request.params.arguments) {
106
+ await ctx.crash({
107
+ exitCode: 1,
108
+ errorType: "fatal",
109
+ printedMessage: "No arguments provided"
110
+ });
111
+ }
112
+ const convexTool = enabledToolsByName[request.params.name];
113
+ if (!convexTool) {
114
+ await ctx.crash({
115
+ exitCode: 1,
116
+ errorType: "fatal",
117
+ printedMessage: `Tool ${request.params.name} not found`
119
118
  });
120
- return {
121
- content: [
122
- {
123
- type: "text",
124
- text: JSON.stringify(result)
125
- }
126
- ]
127
- };
128
- } catch (error) {
129
- let message;
130
- if (error instanceof RequestCrash) {
131
- message = error.printedMessage;
132
- } else if (error instanceof Error) {
133
- message = error.message;
134
- } else {
135
- message = String(error);
136
- }
137
- return {
138
- content: [
139
- {
140
- type: "text",
141
- text: JSON.stringify({ error: message })
142
- }
143
- ],
144
- isError: true
145
- };
146
119
  }
120
+ const input = convexTool.inputSchema.parse(request.params.arguments);
121
+ const result = await mutex.runExclusive(async () => {
122
+ return await convexTool.handler(ctx, input);
123
+ });
124
+ return {
125
+ content: [
126
+ {
127
+ type: "text",
128
+ text: JSON.stringify(result)
129
+ }
130
+ ]
131
+ };
132
+ } catch (error) {
133
+ let message;
134
+ if (error instanceof RequestCrash) {
135
+ message = error.printedMessage;
136
+ } else if (error instanceof Error) {
137
+ message = error.message;
138
+ } else {
139
+ message = String(error);
140
+ }
141
+ return {
142
+ content: [
143
+ {
144
+ type: "text",
145
+ text: JSON.stringify({ error: message })
146
+ }
147
+ ],
148
+ isError: true
149
+ };
147
150
  }
148
- );
149
- server.setRequestHandler(ListToolsRequestSchema, async () => {
151
+ });
152
+ server.setRequestHandler("tools/list", async () => {
150
153
  return {
151
154
  tools: Object.values(enabledToolsByName).map(mcpTool)
152
155
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/mcp.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n CallToolRequest,\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n McpOptions,\n RequestContext,\n RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n .description(\n \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n \"This server exposes your Convex codebase to AI tools in a structured way.\",\n )\n .allowExcessArguments(false);\n\nmcp\n .command(\"start\")\n .summary(\"Start the MCP server\")\n .description(\n \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n )\n .option(\n \"--project-dir <project-dir>\",\n \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n )\n .option(\n \"--disable-tools <tool-names>\",\n `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n )\n .option(\n \"--cautiously-allow-production-pii\",\n \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n false,\n )\n .option(\n \"--dangerously-enable-production-deployments\",\n \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n false,\n )\n // Deprecated option, we swapped the default. no-op.\n .addOption(\n new Option(\"--disable-production-deployments\")\n .conflicts(\"--dangerously-enable-production-deployments\")\n .hideHelp(),\n )\n .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n .action(async (options) => {\n const ctx = await oneoffContext(options);\n try {\n const server = makeServer(options);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n // Keep the process running\n await new Promise(() => {});\n } catch (error: any) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Failed to start MCP server: ${error}`,\n printedMessage: `Failed to start MCP server: ${error}`,\n });\n }\n });\n\nfunction makeServer(options: McpOptions) {\n const disabledToolNames = new Set<string>();\n for (const toolName of options.disableTools?.split(\",\") ?? []) {\n const name = toolName.trim();\n if (!allToolNames.includes(name)) {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\n `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n );\n }\n disabledToolNames.add(name);\n }\n\n const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n for (const tool of convexTools) {\n if (!disabledToolNames.has(tool.name)) {\n enabledToolsByName[tool.name] = tool;\n }\n }\n\n const mutex = new Mutex();\n const server = new Server(\n {\n name: \"Convex MCP Server\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n server.setRequestHandler(\n CallToolRequestSchema,\n async (request: CallToolRequest) => {\n const ctx = new RequestContext(options);\n await initializeBigBrainAuth(ctx, options);\n try {\n const authorized = await checkAuthorization(ctx, false);\n if (!authorized) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n });\n }\n if (!request.params.arguments) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No arguments provided\",\n });\n }\n const convexTool = enabledToolsByName[request.params.name];\n if (!convexTool) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Tool ${request.params.name} not found`,\n });\n }\n const input = convexTool.inputSchema.parse(request.params.arguments);\n\n // Serialize tool handlers since they're mutating the current working directory.\n const result = await mutex.runExclusive(async () => {\n return await convexTool.handler(ctx, input);\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n let message: string;\n if (error instanceof RequestCrash) {\n message = error.printedMessage;\n } else if (error instanceof Error) {\n message = error.message;\n } else {\n message = String(error);\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }),\n },\n ],\n isError: true,\n };\n }\n },\n );\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: Object.values(enabledToolsByName).map(mcpTool),\n };\n });\n return server;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logError } from \"../bundler/log.js\";\nimport { CallToolRequest, Server } from \"@modelcontextprotocol/server\";\nimport { serveStdio } from \"@modelcontextprotocol/server/stdio\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n McpOptions,\n RequestContext,\n RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n .description(\n \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n \"This server exposes your Convex codebase to AI tools in a structured way.\",\n )\n .allowExcessArguments(false);\n\nmcp\n .command(\"start\")\n .summary(\"Start the MCP server\")\n .description(\n \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n )\n .option(\n \"--project-dir <project-dir>\",\n \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n )\n .option(\n \"--disable-tools <tool-names>\",\n `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n )\n .option(\n \"--cautiously-allow-production-pii\",\n \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n false,\n )\n .option(\n \"--dangerously-enable-production-deployments\",\n \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n false,\n )\n // Deprecated option, we swapped the default. no-op.\n .addOption(\n new Option(\"--disable-production-deployments\")\n .conflicts(\"--dangerously-enable-production-deployments\")\n .hideHelp(),\n )\n .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n .action(async (options) => {\n const ctx = await oneoffContext(options);\n try {\n // `serveStdio` only calls the factory once a client connects, and answers\n // a factory throw with an opaque `-32603`, so reject a bad\n // `--disable-tools` here instead.\n enabledTools(options);\n } catch (error: any) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Failed to start MCP server: ${error}`,\n printedMessage: `Failed to start MCP server: ${error}`,\n });\n }\n // The SDK picks the era from the client's opening message: a request\n // carrying the 2026-07-28 `_meta` envelope pins a stateless connection,\n // while an `initialize` is still served by the same factory over the legacy\n // protocol.\n // The returned handle's `close()` is intentionally never called: the\n // server lives until the client kills the process, and process exit tears\n // the transport down.\n serveStdio(() => makeServer(options), {\n legacy: \"serve\",\n // The only channel for out-of-band failures (transport errors, dropped\n // malformed notifications). stdout carries the protocol, so they go to\n // stderr.\n onerror: (error) => logError(`MCP server error: ${error.message}`),\n });\n // Keep the process running\n await new Promise(() => {});\n });\n\nfunction enabledTools(\n options: McpOptions,\n): Record<string, ConvexTool<any, any>> {\n const disabledToolNames = new Set<string>();\n for (const toolName of options.disableTools?.split(\",\") ?? []) {\n const name = toolName.trim();\n if (!allToolNames.includes(name)) {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\n `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n );\n }\n disabledToolNames.add(name);\n }\n\n const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n for (const tool of convexTools) {\n if (!disabledToolNames.has(tool.name)) {\n enabledToolsByName[tool.name] = tool;\n }\n }\n return enabledToolsByName;\n}\n\nexport function makeServer(options: McpOptions) {\n const enabledToolsByName = enabledTools(options);\n const mutex = new Mutex();\n const server = new Server(\n {\n name: \"Convex MCP Server\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n server.setRequestHandler(\"tools/call\", async (request: CallToolRequest) => {\n const ctx = new RequestContext(options);\n await initializeBigBrainAuth(ctx, options);\n try {\n const authorized = await checkAuthorization(ctx, false);\n if (!authorized) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n });\n }\n if (!request.params.arguments) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No arguments provided\",\n });\n }\n const convexTool = enabledToolsByName[request.params.name];\n if (!convexTool) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Tool ${request.params.name} not found`,\n });\n }\n const input = convexTool.inputSchema.parse(request.params.arguments);\n\n // Serialize tool handlers since they're mutating the current working directory.\n const result = await mutex.runExclusive(async () => {\n return await convexTool.handler(ctx, input);\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n let message: string;\n if (error instanceof RequestCrash) {\n message = error.printedMessage;\n } else if (error instanceof Error) {\n message = error.message;\n } else {\n message = String(error);\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }),\n },\n ],\n isError: true,\n };\n }\n });\n server.setRequestHandler(\"tools/list\", async () => {\n return {\n tools: Object.values(enabledToolsByName).map(mcpTool),\n };\n });\n return server;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
- export const version = "1.44.0";
2
+ export const version = "1.45.0";
3
3
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["export const version = \"1.44.0\";\n"],
4
+ "sourcesContent": ["export const version = \"1.45.0\";\n"],
5
5
  "mappings": ";AAAO,aAAM,UAAU;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/server/impl/actions_impl.ts"],
4
- "sourcesContent": ["import { convexToJson, jsonToConvex, Value } from \"../../values/index.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall } from \"./syscall.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport { FunctionReference } from \"../../server/api.js\";\nimport { getFunctionAddress } from \"../components/paths.js\";\nimport { validateArg } from \"./validate.js\";\n\nfunction syscallArgs(\n requestId: string,\n functionReference: any,\n args?: Record<string, Value>,\n) {\n const address = getFunctionAddress(functionReference);\n return {\n ...address,\n args: convexToJson(parseArgs(args)),\n version,\n requestId,\n };\n}\n\nexport function setupActionCalls(requestId: string) {\n return {\n runQuery: async (\n query: FunctionReference<\"query\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/query\",\n syscallArgs(requestId, query, args),\n );\n return jsonToConvex(result);\n },\n runMutation: async (\n mutation: FunctionReference<\"mutation\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/mutation\",\n syscallArgs(requestId, mutation, args),\n );\n return jsonToConvex(result);\n },\n runAction: async (\n action: FunctionReference<\"action\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/action\",\n syscallArgs(requestId, action, args),\n );\n return jsonToConvex(result);\n },\n };\n}\n\n/**\n * Get a short-lived credential for calling a Convex-managed service.\n *\n * This function can only be called while an action is running. The credential\n * is scoped to the current deployment and should be sent as a bearer token.\n * Repeated calls in the same action reuse one token; a failed mint is not\n * cached, so a later call retries.\n *\n * @param service - The service the credential may access.\n * @internal\n */\nexport async function getServiceToken(service: \"ai-gateway\"): Promise<string> {\n validateArg(service, 1, \"getServiceToken\", \"service\");\n if (service !== \"ai-gateway\") {\n throw new Error(`Unsupported service \"${String(service)}\"`);\n }\n return await performAsyncSyscall(\"1.0/createServiceToken\", {\n service,\n version,\n });\n}\n"],
5
- "mappings": ";AAAA,SAAS,cAAc,oBAA2B;AAClD,SAAS,eAAe;AACxB,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAE1B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAE5B,SAAS,YACP,WACA,mBACA,MACA;AACA,QAAM,UAAU,mBAAmB,iBAAiB;AACpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,aAAa,UAAU,IAAI,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAEO,gBAAS,iBAAiB,WAAmB;AAClD,SAAO;AAAA,IACL,UAAU,OACR,OACA,SACiB;AACjB,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,OAAO,IAAI;AAAA,MACpC;AACA,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,aAAa,OACX,UACA,SACiB;AACjB,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,UAAU,IAAI;AAAA,MACvC;AACA,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW,OACT,QACA,SACiB;AACjB,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,QAAQ,IAAI;AAAA,MACrC;AACA,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,EACF;AACF;AAaA,sBAAsB,gBAAgB,SAAwC;AAC5E,cAAY,SAAS,GAAG,mBAAmB,SAAS;AACpD,MAAI,YAAY,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB,OAAO,OAAO,CAAC,GAAG;AAAA,EAC5D;AACA,SAAO,MAAM,oBAAoB,0BAA0B;AAAA,IACzD;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import { convexToJson, jsonToConvex, Value } from \"../../values/index.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall } from \"./syscall.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport { FunctionReference } from \"../../server/api.js\";\nimport { getFunctionAddress } from \"../components/paths.js\";\nimport { validateArg } from \"./validate.js\";\n\nfunction syscallArgs(\n requestId: string,\n functionReference: any,\n args?: Record<string, Value>,\n) {\n const address = getFunctionAddress(functionReference);\n return {\n ...address,\n args: convexToJson(parseArgs(args)),\n version,\n requestId,\n };\n}\n\nexport function setupActionCalls(requestId: string) {\n return {\n runQuery: async (\n query: FunctionReference<\"query\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/query\",\n syscallArgs(requestId, query, args),\n );\n return jsonToConvex(result);\n },\n runMutation: async (\n mutation: FunctionReference<\"mutation\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/mutation\",\n syscallArgs(requestId, mutation, args),\n );\n return jsonToConvex(result);\n },\n runAction: async (\n action: FunctionReference<\"action\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/action\",\n syscallArgs(requestId, action, args),\n );\n return jsonToConvex(result);\n },\n };\n}\n\n/**\n * Get a short-lived credential for calling a Convex-managed service.\n *\n * This function can only be called while an action is running. The credential\n * is scoped to the current deployment and should be sent as a bearer token.\n * Repeated calls in the same action reuse one token; a failed mint is not\n * cached, so a later call retries.\n *\n * @param service - The service the credential may access.\n * @returns A JWT to send as `Authorization: Bearer <token>`. Keep it inside\n * the action: don't return it to clients or store it in environment\n * variables.\n */\nexport async function getServiceToken(service: \"ai-gateway\"): Promise<string> {\n validateArg(service, 1, \"getServiceToken\", \"service\");\n if (service !== \"ai-gateway\") {\n throw new Error(`Unsupported service \"${String(service)}\"`);\n }\n return await performAsyncSyscall(\"1.0/createServiceToken\", {\n service,\n version,\n });\n}\n"],
5
+ "mappings": ";AAAA,SAAS,cAAc,oBAA2B;AAClD,SAAS,eAAe;AACxB,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAE1B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAE5B,SAAS,YACP,WACA,mBACA,MACA;AACA,QAAM,UAAU,mBAAmB,iBAAiB;AACpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,aAAa,UAAU,IAAI,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAEO,gBAAS,iBAAiB,WAAmB;AAClD,SAAO;AAAA,IACL,UAAU,OACR,OACA,SACiB;AACjB,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,OAAO,IAAI;AAAA,MACpC;AACA,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,aAAa,OACX,UACA,SACiB;AACjB,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,UAAU,IAAI;AAAA,MACvC;AACA,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW,OACT,QACA,SACiB;AACjB,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,QAAQ,IAAI;AAAA,MACrC;AACA,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,EACF;AACF;AAeA,sBAAsB,gBAAgB,SAAwC;AAC5E,cAAY,SAAS,GAAG,mBAAmB,SAAS;AACpD,MAAI,YAAY,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB,OAAO,OAAO,CAAC,GAAG;AAAA,EAC5D;AACA,SAAO,MAAM,oBAAoB,0BAA0B;AAAA,IACzD;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }