convex 1.48.0-alpha.0 → 1.48.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.
- package/CHANGELOG.md +28 -4
- package/README.md +1 -1
- package/dist/browser.bundle.js +1 -1
- package/dist/browser.bundle.js.map +1 -1
- package/dist/cjs/bundler/context.js +5 -7
- package/dist/cjs/bundler/context.js.map +2 -2
- package/dist/cjs/bundler/fs.js +6 -47
- package/dist/cjs/bundler/fs.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +26 -4
- package/dist/cjs/cli/aiFiles.js.map +2 -2
- package/dist/cjs/cli/configure.js +2 -15
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/env.js +6 -3
- package/dist/cjs/cli/env.js.map +2 -2
- package/dist/cjs/cli/envDefault.js +5 -2
- package/dist/cjs/cli/envDefault.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +2 -1
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/index.js +13 -2
- package/dist/cjs/cli/lib/aiFiles/index.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/skills.js +6 -5
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/state.js +1 -1
- package/dist/cjs/cli/lib/aiFiles/state.js.map +1 -1
- package/dist/cjs/cli/lib/components.js +12 -2
- package/dist/cjs/cli/lib/components.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/startPush.js +42 -1
- package/dist/cjs/cli/lib/deployApi/startPush.js.map +2 -2
- package/dist/cjs/cli/lib/deployment.js +0 -2
- package/dist/cjs/cli/lib/deployment.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +18 -27
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/env.js +9 -1
- package/dist/cjs/cli/lib/env.js.map +2 -2
- package/dist/cjs/cli/lib/envvars.js +0 -32
- package/dist/cjs/cli/lib/envvars.js.map +2 -2
- package/dist/cjs/cli/lib/fsUtils.js +1 -1
- package/dist/cjs/cli/lib/fsUtils.js.map +2 -2
- package/dist/cjs/cli/lib/generateDocs.js +1 -1
- package/dist/cjs/cli/lib/generateDocs.js.map +1 -1
- package/dist/cjs/cli/lib/localDeployment/dashboard.js +11 -1
- package/dist/cjs/cli/lib/localDeployment/dashboard.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/download.js +16 -1
- package/dist/cjs/cli/lib/localDeployment/download.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +4 -0
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/cjs/cli/lib/login.js +4 -28
- package/dist/cjs/cli/lib/login.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/requestContext.js +1 -5
- package/dist/cjs/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/cjs/cli/lib/utils/aiAgent.js +32 -0
- package/dist/cjs/cli/lib/utils/aiAgent.js.map +7 -0
- package/dist/cjs/cli/lib/utils/utils.js +9 -18
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- package/dist/cjs/cli/login.js +114 -213
- package/dist/cjs/cli/login.js.map +3 -3
- package/dist/cjs/cli/logout.js +12 -113
- package/dist/cjs/cli/logout.js.map +3 -3
- package/dist/cjs/cli/mcp.js +10 -43
- package/dist/cjs/cli/mcp.js.map +3 -3
- package/dist/cjs/cli/program.js +1 -2
- package/dist/cjs/cli/program.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/authentication.js.map +1 -1
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/impl/authentication_impl.js +15 -1
- package/dist/cjs/server/impl/authentication_impl.js.map +2 -2
- package/dist/cjs/server/impl/registration_impl.js +1 -1
- package/dist/cjs/server/impl/registration_impl.js.map +2 -2
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js.map +1 -1
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs/server/schema.js +0 -2
- package/dist/cjs/server/schema.js.map +2 -2
- package/dist/cjs/server/storage.js.map +1 -1
- package/dist/cjs-types/bundler/context.d.ts +0 -5
- package/dist/cjs-types/bundler/context.d.ts.map +1 -1
- package/dist/cjs-types/bundler/fs.d.ts +2 -7
- package/dist/cjs-types/bundler/fs.d.ts.map +1 -1
- package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -1
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +11 -1
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +4 -1
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +13 -0
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployment.d.ts +0 -2
- package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +1 -2
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.d.ts +1 -0
- package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/envvars.d.ts +0 -6
- package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/fsUtils.d.ts +0 -1
- package/dist/cjs-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts +6 -0
- package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/download.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/login.d.ts +1 -3
- package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/utils/aiAgent.d.ts +8 -0
- package/dist/cjs-types/cli/lib/utils/aiAgent.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +0 -5
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/login.d.ts +0 -21
- package/dist/cjs-types/cli/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/logout.d.ts +1 -8
- package/dist/cjs-types/cli/logout.d.ts.map +1 -1
- package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
- package/dist/cjs-types/cli/program.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/index.d.ts.map +1 -1
- package/dist/cjs-types/server/authentication.d.ts +65 -0
- package/dist/cjs-types/server/authentication.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +6 -0
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/authentication_impl.d.ts +2 -1
- package/dist/cjs-types/server/impl/authentication_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +2 -2
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +8 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/registration.d.ts +5 -3
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cjs-types/server/schema.d.ts +0 -2
- package/dist/cjs-types/server/schema.d.ts.map +1 -1
- package/dist/cjs-types/server/storage.d.ts +28 -25
- package/dist/cjs-types/server/storage.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +1379 -2142
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/bundler/context.js +5 -7
- package/dist/esm/bundler/context.js.map +2 -2
- package/dist/esm/bundler/fs.js +6 -47
- package/dist/esm/bundler/fs.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +26 -4
- package/dist/esm/cli/aiFiles.js.map +2 -2
- package/dist/esm/cli/configure.js +2 -15
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/env.js +6 -3
- package/dist/esm/cli/env.js.map +2 -2
- package/dist/esm/cli/envDefault.js +5 -2
- package/dist/esm/cli/envDefault.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +2 -1
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/index.js +13 -2
- package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/skills.js +6 -5
- package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/state.js +1 -1
- package/dist/esm/cli/lib/aiFiles/state.js.map +1 -1
- package/dist/esm/cli/lib/components.js +15 -2
- package/dist/esm/cli/lib/components.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/startPush.js +39 -0
- package/dist/esm/cli/lib/deployApi/startPush.js.map +2 -2
- package/dist/esm/cli/lib/deployment.js +2 -2
- package/dist/esm/cli/lib/deployment.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +20 -35
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/env.js +9 -1
- package/dist/esm/cli/lib/env.js.map +2 -2
- package/dist/esm/cli/lib/envvars.js +1 -35
- package/dist/esm/cli/lib/envvars.js.map +2 -2
- package/dist/esm/cli/lib/fsUtils.js +1 -1
- package/dist/esm/cli/lib/fsUtils.js.map +2 -2
- package/dist/esm/cli/lib/generateDocs.js +1 -1
- package/dist/esm/cli/lib/generateDocs.js.map +1 -1
- package/dist/esm/cli/lib/localDeployment/dashboard.js +9 -0
- package/dist/esm/cli/lib/localDeployment/dashboard.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/download.js +16 -1
- package/dist/esm/cli/lib/localDeployment/download.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/utils.js +3 -0
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/login.js +4 -36
- package/dist/esm/cli/lib/login.js.map +2 -2
- package/dist/esm/cli/lib/mcp/requestContext.js +1 -5
- package/dist/esm/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/esm/cli/lib/utils/aiAgent.js +10 -0
- package/dist/esm/cli/lib/utils/aiAgent.js.map +7 -0
- package/dist/esm/cli/lib/utils/utils.js +9 -16
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- package/dist/esm/cli/login.js +112 -225
- package/dist/esm/cli/login.js.map +3 -3
- package/dist/esm/cli/logout.js +13 -110
- package/dist/esm/cli/logout.js.map +2 -2
- package/dist/esm/cli/mcp.js +10 -34
- package/dist/esm/cli/mcp.js.map +2 -2
- package/dist/esm/cli/program.js +1 -2
- package/dist/esm/cli/program.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/impl/authentication_impl.js +13 -0
- package/dist/esm/server/impl/authentication_impl.js.map +2 -2
- package/dist/esm/server/impl/registration_impl.js +2 -2
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/schema.js +0 -2
- package/dist/esm/server/schema.js.map +2 -2
- package/dist/esm-types/bundler/context.d.ts +0 -5
- package/dist/esm-types/bundler/context.d.ts.map +1 -1
- package/dist/esm-types/bundler/fs.d.ts +2 -7
- package/dist/esm-types/bundler/fs.d.ts.map +1 -1
- package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/env.d.ts.map +1 -1
- package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -1
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +11 -1
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +4 -1
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +13 -0
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployment.d.ts +0 -2
- package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts +1 -2
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.d.ts +1 -0
- package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/envvars.d.ts +0 -6
- package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/fsUtils.d.ts +0 -1
- package/dist/esm-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts +6 -0
- package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/download.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +1 -0
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/login.d.ts +1 -3
- package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/utils/aiAgent.d.ts +8 -0
- package/dist/esm-types/cli/lib/utils/aiAgent.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/utils/utils.d.ts +0 -5
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/login.d.ts +0 -21
- package/dist/esm-types/cli/login.d.ts.map +1 -1
- package/dist/esm-types/cli/logout.d.ts +1 -8
- package/dist/esm-types/cli/logout.d.ts.map +1 -1
- package/dist/esm-types/cli/mcp.d.ts.map +1 -1
- package/dist/esm-types/cli/program.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/index.d.ts.map +1 -1
- package/dist/esm-types/server/authentication.d.ts +65 -0
- package/dist/esm-types/server/authentication.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +6 -0
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/impl/authentication_impl.d.ts +2 -1
- package/dist/esm-types/server/impl/authentication_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +2 -2
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +8 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/registration.d.ts +5 -3
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/esm-types/server/schema.d.ts +0 -2
- package/dist/esm-types/server/schema.d.ts.map +1 -1
- package/dist/esm-types/server/storage.d.ts +28 -25
- package/dist/esm-types/server/storage.d.ts.map +1 -1
- package/dist/react.bundle.js +1 -1
- package/dist/react.bundle.js.map +1 -1
- package/package.json +3 -2
- package/schemas/convex.schema.json +1 -2
- package/src/bundler/context.ts +5 -9
- package/src/bundler/fs.ts +5 -54
- package/src/cli/aiFiles.ts +30 -4
- package/src/cli/configure.ts +2 -18
- package/src/cli/env.ts +4 -1
- package/src/cli/envDefault.ts +4 -1
- package/src/cli/lib/aiFiles/guidelinesmd.ts +7 -2
- package/src/cli/lib/aiFiles/index.ts +23 -3
- package/src/cli/lib/aiFiles/skills.ts +11 -7
- package/src/cli/lib/aiFiles/state.ts +1 -1
- package/src/cli/lib/components.ts +18 -3
- package/src/cli/lib/deployApi/startPush.ts +64 -0
- package/src/cli/lib/deployment.ts +2 -2
- package/src/cli/lib/deploymentSelection.ts +18 -37
- package/src/cli/lib/env.ts +13 -2
- package/src/cli/lib/envvars.ts +1 -43
- package/src/cli/lib/fsUtils.ts +2 -5
- package/src/cli/lib/generateDocs.ts +1 -1
- package/src/cli/lib/localDeployment/dashboard.ts +19 -0
- package/src/cli/lib/localDeployment/download.ts +17 -1
- package/src/cli/lib/localDeployment/utils.ts +4 -0
- package/src/cli/lib/login.ts +3 -47
- package/src/cli/lib/mcp/requestContext.ts +1 -7
- package/src/cli/lib/utils/aiAgent.ts +15 -0
- package/src/cli/lib/utils/utils.ts +15 -19
- package/src/cli/login.ts +168 -293
- package/src/cli/logout.ts +17 -142
- package/src/cli/mcp.ts +11 -48
- package/src/cli/program.ts +0 -2
- package/src/index.ts +1 -1
- package/src/server/authentication.ts +79 -0
- package/src/server/components/index.ts +11 -0
- package/src/server/impl/authentication_impl.ts +15 -1
- package/src/server/impl/registration_impl.ts +2 -2
- package/src/server/index.ts +6 -0
- package/src/server/meta.ts +0 -8
- package/src/server/registration.ts +5 -2
- package/src/server/schema.ts +0 -2
- package/src/server/storage.ts +29 -42
- package/dist/cjs/cli/account.js +0 -237
- package/dist/cjs/cli/account.js.map +0 -7
- package/dist/cjs/cli/lib/deployKeyWarning.js +0 -43
- package/dist/cjs/cli/lib/deployKeyWarning.js.map +0 -7
- package/dist/cjs/cli/lib/profileManagement.js +0 -196
- package/dist/cjs/cli/lib/profileManagement.js.map +0 -7
- package/dist/cjs/cli/lib/profiles.js +0 -333
- package/dist/cjs/cli/lib/profiles.js.map +0 -7
- package/dist/cjs-types/cli/account.d.ts +0 -6
- package/dist/cjs-types/cli/account.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts +0 -3
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/profileManagement.d.ts +0 -10
- package/dist/cjs-types/cli/lib/profileManagement.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/profiles.d.ts +0 -59
- package/dist/cjs-types/cli/lib/profiles.d.ts.map +0 -1
- package/dist/esm/cli/account.js +0 -221
- package/dist/esm/cli/account.js.map +0 -7
- package/dist/esm/cli/lib/deployKeyWarning.js +0 -27
- package/dist/esm/cli/lib/deployKeyWarning.js.map +0 -7
- package/dist/esm/cli/lib/profileManagement.js +0 -179
- package/dist/esm/cli/lib/profileManagement.js.map +0 -7
- package/dist/esm/cli/lib/profiles.js +0 -288
- package/dist/esm/cli/lib/profiles.js.map +0 -7
- package/dist/esm-types/cli/account.d.ts +0 -6
- package/dist/esm-types/cli/account.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts +0 -3
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/profileManagement.d.ts +0 -10
- package/dist/esm-types/cli/lib/profileManagement.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/profiles.d.ts +0 -59
- package/dist/esm-types/cli/lib/profiles.d.ts.map +0 -1
- package/src/cli/account.ts +0 -320
- package/src/cli/lib/deployKeyWarning.ts +0 -43
- package/src/cli/lib/profileManagement.ts +0 -262
- package/src/cli/lib/profiles.ts +0 -398
|
@@ -31,26 +31,18 @@ import {
|
|
|
31
31
|
targetProjectForLocalSelector,
|
|
32
32
|
} from "./localDeployment/projectMismatch.js";
|
|
33
33
|
import { chalkStderr } from "chalk";
|
|
34
|
-
import {
|
|
35
|
-
getBuildEnvironment,
|
|
36
|
-
loadProjectEnvironmentVariables,
|
|
37
|
-
} from "./envvars.js";
|
|
34
|
+
import { getBuildEnvironment } from "./envvars.js";
|
|
38
35
|
import { readGlobalConfig } from "./utils/globalConfig.js";
|
|
39
|
-
import {
|
|
40
|
-
getProfileSelection,
|
|
41
|
-
ProfileSelection,
|
|
42
|
-
readProfileAuth,
|
|
43
|
-
} from "./profiles.js";
|
|
44
36
|
import {
|
|
45
37
|
CONVEX_DEPLOYMENT_ENV_VAR_NAME,
|
|
46
38
|
CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
|
|
47
39
|
CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
|
|
48
40
|
CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,
|
|
49
41
|
CONVEX_SELF_HOSTED_URL_VAR_NAME,
|
|
42
|
+
ENV_VAR_FILE_PATH,
|
|
50
43
|
bigBrainAPI,
|
|
51
44
|
processDeployKeyValue,
|
|
52
45
|
readDeployKeyFromEnv,
|
|
53
|
-
readDeployKeyEnvVar,
|
|
54
46
|
typedPlatformClient,
|
|
55
47
|
} from "./utils/utils.js";
|
|
56
48
|
import * as dotenv from "dotenv";
|
|
@@ -91,11 +83,10 @@ export async function initializeBigBrainAuth(
|
|
|
91
83
|
if (initialArgs.url !== undefined && initialArgs.adminKey !== undefined) {
|
|
92
84
|
// Do not check any env vars if `url` and `adminKey` are specified via CLI
|
|
93
85
|
ctx._updateBigBrainAuth(
|
|
94
|
-
|
|
86
|
+
getBigBrainAuth(ctx, {
|
|
95
87
|
previewDeployKey: null,
|
|
96
88
|
projectKey: null,
|
|
97
89
|
deploymentKey: null,
|
|
98
|
-
skipProfile: true,
|
|
99
90
|
}),
|
|
100
91
|
);
|
|
101
92
|
return;
|
|
@@ -115,31 +106,30 @@ export async function initializeBigBrainAuth(
|
|
|
115
106
|
const rawDeployKey = readDeployKeyFromEnv((name) => config[name]);
|
|
116
107
|
const deployKey = await processDeployKeyValue(ctx, rawDeployKey);
|
|
117
108
|
if (deployKey !== undefined) {
|
|
118
|
-
const bigBrainAuth =
|
|
109
|
+
const bigBrainAuth = getBigBrainAuth(ctx, {
|
|
119
110
|
previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,
|
|
120
111
|
projectKey: isProjectKey(deployKey) ? deployKey : null,
|
|
121
112
|
deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,
|
|
122
|
-
envFile: initialArgs.envFile,
|
|
123
113
|
});
|
|
124
114
|
ctx._updateBigBrainAuth(bigBrainAuth);
|
|
125
115
|
return;
|
|
126
116
|
}
|
|
127
117
|
// No deploy key was found in the env file, so fall back on using the global config
|
|
128
118
|
ctx._updateBigBrainAuth(
|
|
129
|
-
|
|
119
|
+
getBigBrainAuth(ctx, {
|
|
130
120
|
previewDeployKey: null,
|
|
131
121
|
projectKey: null,
|
|
132
122
|
deploymentKey: null,
|
|
133
|
-
envFile: initialArgs.envFile,
|
|
134
123
|
}),
|
|
135
124
|
);
|
|
136
125
|
return;
|
|
137
126
|
}
|
|
138
|
-
|
|
127
|
+
dotenv.config({ path: ENV_VAR_FILE_PATH });
|
|
128
|
+
dotenv.config();
|
|
139
129
|
const rawDeployKey = readDeployKeyFromEnv((name) => process.env[name]);
|
|
140
130
|
const deployKey = await processDeployKeyValue(ctx, rawDeployKey);
|
|
141
131
|
if (deployKey !== undefined) {
|
|
142
|
-
const bigBrainAuth =
|
|
132
|
+
const bigBrainAuth = getBigBrainAuth(ctx, {
|
|
143
133
|
previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,
|
|
144
134
|
projectKey: isProjectKey(deployKey) ? deployKey : null,
|
|
145
135
|
deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,
|
|
@@ -148,7 +138,7 @@ export async function initializeBigBrainAuth(
|
|
|
148
138
|
return;
|
|
149
139
|
}
|
|
150
140
|
ctx._updateBigBrainAuth(
|
|
151
|
-
|
|
141
|
+
getBigBrainAuth(ctx, {
|
|
152
142
|
previewDeployKey: null,
|
|
153
143
|
projectKey: null,
|
|
154
144
|
deploymentKey: null,
|
|
@@ -160,7 +150,6 @@ export async function initializeBigBrainAuth(
|
|
|
160
150
|
export async function updateBigBrainAuthAfterLogin(
|
|
161
151
|
ctx: Context,
|
|
162
152
|
accessToken: string,
|
|
163
|
-
profile?: ProfileSelection,
|
|
164
153
|
) {
|
|
165
154
|
const existingAuth = ctx.bigBrainAuth();
|
|
166
155
|
if (existingAuth !== null && existingAuth.kind === "projectKey") {
|
|
@@ -173,7 +162,6 @@ export async function updateBigBrainAuthAfterLogin(
|
|
|
173
162
|
accessToken: accessToken,
|
|
174
163
|
kind: "accessToken",
|
|
175
164
|
header: `Bearer ${accessToken}`,
|
|
176
|
-
...(profile ? { profile } : {}),
|
|
177
165
|
});
|
|
178
166
|
}
|
|
179
167
|
|
|
@@ -181,22 +169,19 @@ export async function clearBigBrainAuth(ctx: Context) {
|
|
|
181
169
|
ctx._updateBigBrainAuth(null);
|
|
182
170
|
}
|
|
183
171
|
|
|
184
|
-
|
|
172
|
+
function getBigBrainAuth(
|
|
185
173
|
ctx: Context,
|
|
186
174
|
opts: {
|
|
187
175
|
previewDeployKey: string | null;
|
|
188
176
|
projectKey: string | null;
|
|
189
177
|
deploymentKey: string | null;
|
|
190
|
-
envFile?: string;
|
|
191
|
-
skipProfile?: boolean;
|
|
192
178
|
},
|
|
193
|
-
):
|
|
179
|
+
): BigBrainAuth | null {
|
|
194
180
|
if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {
|
|
195
181
|
return {
|
|
196
182
|
accessToken: process.env.CONVEX_OVERRIDE_ACCESS_TOKEN,
|
|
197
183
|
kind: "accessToken",
|
|
198
184
|
header: `Bearer ${process.env.CONVEX_OVERRIDE_ACCESS_TOKEN}`,
|
|
199
|
-
profile: null,
|
|
200
185
|
};
|
|
201
186
|
}
|
|
202
187
|
if (opts.projectKey !== null) {
|
|
@@ -215,19 +200,12 @@ async function getBigBrainAuth(
|
|
|
215
200
|
deploymentKey: opts.deploymentKey,
|
|
216
201
|
};
|
|
217
202
|
}
|
|
218
|
-
const profile = opts.skipProfile
|
|
219
|
-
? null
|
|
220
|
-
: await getProfileSelection(ctx, { envFile: opts.envFile });
|
|
221
|
-
if (profile !== null) {
|
|
222
|
-
return await readProfileAuth(ctx, profile);
|
|
223
|
-
}
|
|
224
203
|
const globalConfig = readGlobalConfig(ctx);
|
|
225
204
|
if (globalConfig) {
|
|
226
205
|
return {
|
|
227
206
|
kind: "accessToken",
|
|
228
207
|
header: `Bearer ${globalConfig.accessToken}`,
|
|
229
208
|
accessToken: globalConfig.accessToken,
|
|
230
|
-
profile: null,
|
|
231
209
|
};
|
|
232
210
|
}
|
|
233
211
|
if (opts.previewDeployKey !== null) {
|
|
@@ -294,9 +272,9 @@ export async function ensureAuthCanCreateDeployment(
|
|
|
294
272
|
)} and try again.`,
|
|
295
273
|
});
|
|
296
274
|
}
|
|
297
|
-
const envVar =
|
|
298
|
-
|
|
299
|
-
|
|
275
|
+
const envVar = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
|
|
276
|
+
? CONVEX_DEPLOY_KEY_ENV_VAR_NAME
|
|
277
|
+
: CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;
|
|
300
278
|
return await ctx.crash({
|
|
301
279
|
exitCode: 1,
|
|
302
280
|
errorType: "fatal",
|
|
@@ -591,7 +569,10 @@ async function resolveBaseDeploymentSelection(
|
|
|
591
569
|
}
|
|
592
570
|
return result.metadata;
|
|
593
571
|
}
|
|
594
|
-
|
|
572
|
+
// start with .env.local (but doesn't override existing)
|
|
573
|
+
dotenv.config({ path: ENV_VAR_FILE_PATH });
|
|
574
|
+
// for variables not already set, use .env values
|
|
575
|
+
dotenv.config();
|
|
595
576
|
const result = await getDeploymentSelectionFromEnv(
|
|
596
577
|
ctx,
|
|
597
578
|
selectionWithinProject,
|
package/src/cli/lib/env.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { runSystemQuery } from "./run.js";
|
|
|
11
11
|
import { deploymentFetch, logAndHandleFetchError } from "./utils/utils.js";
|
|
12
12
|
import { readFromStdin } from "./utils/stdin.js";
|
|
13
13
|
import { promptSecret } from "./utils/prompts.js";
|
|
14
|
+
import { detectAiAgent } from "./utils/aiAgent.js";
|
|
14
15
|
import {
|
|
15
16
|
EXPECTED_CONVEX_URL_NAMES,
|
|
16
17
|
EXPECTED_SITE_URL_NAMES,
|
|
@@ -174,15 +175,20 @@ export async function envRemove(
|
|
|
174
175
|
export async function envList(
|
|
175
176
|
ctx: Context,
|
|
176
177
|
backend: EnvVarBackend,
|
|
177
|
-
options?: { namesOnly?: boolean },
|
|
178
|
+
options?: { namesOnly?: boolean; includeValues?: boolean },
|
|
178
179
|
) {
|
|
179
180
|
const envs = await backend.list();
|
|
180
181
|
if (envs.length === 0) {
|
|
181
182
|
logMessage(`No environment variables set${backend.notice}`);
|
|
182
183
|
return;
|
|
183
184
|
}
|
|
185
|
+
// Agents tend to run `env list` to check what is set, which copies every
|
|
186
|
+
// secret into their context. They get names unless they ask for values.
|
|
187
|
+
const agent =
|
|
188
|
+
options?.namesOnly || options?.includeValues ? null : await detectAiAgent();
|
|
189
|
+
const namesOnly = options?.namesOnly || agent !== null;
|
|
184
190
|
for (const { name, value } of envs) {
|
|
185
|
-
if (
|
|
191
|
+
if (namesOnly) {
|
|
186
192
|
logOutput(name);
|
|
187
193
|
continue;
|
|
188
194
|
}
|
|
@@ -192,6 +198,11 @@ export async function envList(
|
|
|
192
198
|
}
|
|
193
199
|
logOutput(`${name}=${formatted}`);
|
|
194
200
|
}
|
|
201
|
+
if (agent !== null) {
|
|
202
|
+
logMessage(
|
|
203
|
+
`Listed names only because an AI agent (${agent}) appears to be running this command. Pass --include-values to print the values too.`,
|
|
204
|
+
);
|
|
205
|
+
}
|
|
195
206
|
}
|
|
196
207
|
|
|
197
208
|
async function getFileContents(
|
package/src/cli/lib/envvars.ts
CHANGED
|
@@ -6,49 +6,7 @@ import * as dotenv from "dotenv";
|
|
|
6
6
|
|
|
7
7
|
import { Context } from "../../bundler/context.js";
|
|
8
8
|
import { logWarning } from "../../bundler/log.js";
|
|
9
|
-
import {
|
|
10
|
-
CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
|
|
11
|
-
readDeployKeyEnvVar,
|
|
12
|
-
ENV_VAR_FILE_PATH,
|
|
13
|
-
loadPackageJson,
|
|
14
|
-
} from "./utils/utils.js";
|
|
15
|
-
|
|
16
|
-
export const CONVEX_ACCOUNT_ENV_VAR = "CONVEX_ACCOUNT";
|
|
17
|
-
|
|
18
|
-
const loadedEnvironment = new Map<string, { value: string; source: string }>();
|
|
19
|
-
|
|
20
|
-
export function loadProjectEnvironmentVariables() {
|
|
21
|
-
// Only remove values supplied by our previous load; later shell overrides win.
|
|
22
|
-
for (const [name, { value }] of loadedEnvironment) {
|
|
23
|
-
if (process.env[name] === value) delete process.env[name];
|
|
24
|
-
}
|
|
25
|
-
loadedEnvironment.clear();
|
|
26
|
-
const environment: Record<string, string> = {};
|
|
27
|
-
for (const [name, value] of Object.entries(process.env)) {
|
|
28
|
-
if (value !== undefined) environment[name] = value;
|
|
29
|
-
}
|
|
30
|
-
for (const file of [ENV_VAR_FILE_PATH, ".env"]) {
|
|
31
|
-
dotenv.config({ path: file, processEnv: environment });
|
|
32
|
-
for (const [name, value] of Object.entries(environment)) {
|
|
33
|
-
// Account selection reads the current project's files directly.
|
|
34
|
-
if (name !== CONVEX_ACCOUNT_ENV_VAR && process.env[name] === undefined) {
|
|
35
|
-
process.env[name] = value;
|
|
36
|
-
loadedEnvironment.set(name, { value, source: file });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function getDeployKeySource(key: string) {
|
|
43
|
-
const envVarName =
|
|
44
|
-
readDeployKeyEnvVar((name) => process.env[name])?.name ??
|
|
45
|
-
CONVEX_DEPLOY_KEY_ENV_VAR_NAME;
|
|
46
|
-
const loaded = loadedEnvironment.get(envVarName);
|
|
47
|
-
return {
|
|
48
|
-
envVarName,
|
|
49
|
-
source: loaded?.value === key ? loaded.source : "shell environment",
|
|
50
|
-
};
|
|
51
|
-
}
|
|
9
|
+
import { loadPackageJson } from "./utils/utils.js";
|
|
52
10
|
|
|
53
11
|
const _FRAMEWORKS = [
|
|
54
12
|
"create-react-app",
|
package/src/cli/lib/fsUtils.ts
CHANGED
|
@@ -6,15 +6,12 @@ import { NodeFs } from "../../bundler/fs.js";
|
|
|
6
6
|
export function recursivelyDelete(
|
|
7
7
|
ctx: Context,
|
|
8
8
|
deletePath: string,
|
|
9
|
-
opts?: { force?: boolean; dryRun?: boolean
|
|
9
|
+
opts?: { force?: boolean; dryRun?: boolean },
|
|
10
10
|
) {
|
|
11
11
|
const dryRun = !!opts?.dryRun;
|
|
12
12
|
let st;
|
|
13
13
|
try {
|
|
14
|
-
st =
|
|
15
|
-
opts?.followSymlinks === false
|
|
16
|
-
? ctx.fs.lstat(deletePath)
|
|
17
|
-
: ctx.fs.stat(deletePath);
|
|
14
|
+
st = ctx.fs.stat(deletePath);
|
|
18
15
|
} catch (err: any) {
|
|
19
16
|
if (err.code === "ENOENT" && opts?.force) {
|
|
20
17
|
return;
|
|
@@ -299,7 +299,7 @@ function renderCopyableCommands(text: string): string {
|
|
|
299
299
|
.map((line) =>
|
|
300
300
|
/^- /.test(line)
|
|
301
301
|
? line.replace(
|
|
302
|
-
/`(npx convex
|
|
302
|
+
/`(npx convex [^`]*)`/g,
|
|
303
303
|
(_, command) =>
|
|
304
304
|
`<CodeWithCopyButton text={${JSON.stringify(command)}} />`,
|
|
305
305
|
)
|
|
@@ -57,6 +57,12 @@ export async function handleDashboard(
|
|
|
57
57
|
ctx,
|
|
58
58
|
dashboardPort,
|
|
59
59
|
async (request, response) => {
|
|
60
|
+
if (!isLoopbackHost(request.headers.host, dashboardPort)) {
|
|
61
|
+
response.statusCode = 403;
|
|
62
|
+
response.end();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
60
66
|
const pathname = new URL(
|
|
61
67
|
request.url ?? "/",
|
|
62
68
|
// We only want to extract the pathname so the base doesn’t matter
|
|
@@ -96,6 +102,19 @@ export async function handleDashboard(
|
|
|
96
102
|
};
|
|
97
103
|
}
|
|
98
104
|
|
|
105
|
+
/**
|
|
106
|
+
* The dashboard is only meant to be opened at the URL the CLI prints, so
|
|
107
|
+
* requests addressed to any other hostname are not served, even if that
|
|
108
|
+
* hostname resolves to 127.0.0.1.
|
|
109
|
+
*/
|
|
110
|
+
export function isLoopbackHost(host: string | undefined, port: number) {
|
|
111
|
+
const normalizedHost = host?.toLowerCase();
|
|
112
|
+
return (
|
|
113
|
+
normalizedHost === `127.0.0.1:${port}` ||
|
|
114
|
+
normalizedHost === `localhost:${port}`
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
99
118
|
async function reportSelfHostedEvent(
|
|
100
119
|
ctx: Context,
|
|
101
120
|
{
|
|
@@ -27,6 +27,7 @@ import { recursivelyDelete, recursivelyCopy } from "../fsUtils.js";
|
|
|
27
27
|
import { LocalDeploymentError } from "./errors.js";
|
|
28
28
|
import type { ProgressBarInstance } from "../../../vendor/progress/index.js";
|
|
29
29
|
import path from "path";
|
|
30
|
+
import { isValidBackendVersion } from "./utils.js";
|
|
30
31
|
|
|
31
32
|
async function makeExecutable(p: string) {
|
|
32
33
|
switch (process.platform) {
|
|
@@ -67,6 +68,7 @@ async function _ensureBackendBinaryDownloaded(
|
|
|
67
68
|
ctx: Context,
|
|
68
69
|
version: string,
|
|
69
70
|
): Promise<{ binaryPath: string; version: string }> {
|
|
71
|
+
await assertValidBackendVersion(ctx, version);
|
|
70
72
|
logVerbose(`Ensuring backend binary downloaded for version ${version}`);
|
|
71
73
|
const existingDownload = await checkForExistingDownload(ctx, version);
|
|
72
74
|
if (existingDownload !== null) {
|
|
@@ -80,6 +82,19 @@ async function _ensureBackendBinaryDownloaded(
|
|
|
80
82
|
return { version, binaryPath };
|
|
81
83
|
}
|
|
82
84
|
|
|
85
|
+
async function assertValidBackendVersion(ctx: Context, version: string) {
|
|
86
|
+
if (!isValidBackendVersion(version)) {
|
|
87
|
+
return await ctx.crash({
|
|
88
|
+
exitCode: 1,
|
|
89
|
+
errorType: "fatal",
|
|
90
|
+
printedMessage: "Invalid local backend version",
|
|
91
|
+
errForSentry: new LocalDeploymentError(
|
|
92
|
+
`Invalid local backend version: ${JSON.stringify(version)}`,
|
|
93
|
+
),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
83
98
|
let cachedLatestVersion: string | null = null;
|
|
84
99
|
|
|
85
100
|
/**
|
|
@@ -259,7 +274,7 @@ function getDownloadPath() {
|
|
|
259
274
|
}
|
|
260
275
|
|
|
261
276
|
function getGithubDownloadUrl(version: string, filename: string) {
|
|
262
|
-
return `https://github.com/
|
|
277
|
+
return `https://github.com/convex/convex-backend/releases/download/${version}/${filename}`;
|
|
263
278
|
}
|
|
264
279
|
|
|
265
280
|
async function downloadZipFile(
|
|
@@ -326,6 +341,7 @@ async function downloadZipFile(
|
|
|
326
341
|
}
|
|
327
342
|
|
|
328
343
|
export async function ensureDashboardDownloaded(ctx: Context, version: string) {
|
|
344
|
+
await assertValidBackendVersion(ctx, version);
|
|
329
345
|
const config = loadGlobalDashboardConfig(ctx);
|
|
330
346
|
if (config !== null && config.version === version) {
|
|
331
347
|
return;
|
|
@@ -98,3 +98,7 @@ export const LOCAL_BACKEND_INSTANCE_SECRET =
|
|
|
98
98
|
export function releaseDate(version: string): string | null {
|
|
99
99
|
return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version)?.[1] ?? null;
|
|
100
100
|
}
|
|
101
|
+
|
|
102
|
+
export function isValidBackendVersion(version: string): boolean {
|
|
103
|
+
return /^precompiled-\d{4}-\d{2}-\d{2}-[\w.-]+$/.test(version);
|
|
104
|
+
}
|
package/src/cli/lib/login.ts
CHANGED
|
@@ -32,17 +32,6 @@ import {
|
|
|
32
32
|
modifyGlobalConfig,
|
|
33
33
|
} from "./utils/globalConfig.js";
|
|
34
34
|
import { updateBigBrainAuthAfterLogin } from "./deploymentSelection.js";
|
|
35
|
-
import {
|
|
36
|
-
getProfileSelection,
|
|
37
|
-
ProfileSelection,
|
|
38
|
-
profileConfigPath,
|
|
39
|
-
writeProfileCredentials,
|
|
40
|
-
readProfileCredentials,
|
|
41
|
-
} from "./profiles.js";
|
|
42
|
-
import {
|
|
43
|
-
profileLoginMetadata,
|
|
44
|
-
revokeReplacedProfileToken,
|
|
45
|
-
} from "./profileManagement.js";
|
|
46
35
|
|
|
47
36
|
// Per https://github.com/panva/node-openid-client/tree/main/docs#customizing
|
|
48
37
|
custom.setHttpOptionsDefaults({
|
|
@@ -302,7 +291,6 @@ export async function performLogin(
|
|
|
302
291
|
anonymousId,
|
|
303
292
|
vercel,
|
|
304
293
|
vercelOverride,
|
|
305
|
-
profile: selectedProfile,
|
|
306
294
|
}: {
|
|
307
295
|
overrideAuthUrl?: string | undefined;
|
|
308
296
|
overrideAuthClient?: string | undefined;
|
|
@@ -319,16 +307,8 @@ export async function performLogin(
|
|
|
319
307
|
anonymousId?: string | undefined;
|
|
320
308
|
vercel?: boolean | undefined;
|
|
321
309
|
vercelOverride?: string | undefined;
|
|
322
|
-
profile?: ProfileSelection | null;
|
|
323
310
|
} = {},
|
|
324
311
|
) {
|
|
325
|
-
const auth = ctx.bigBrainAuth();
|
|
326
|
-
const profile =
|
|
327
|
-
selectedProfile !== undefined
|
|
328
|
-
? selectedProfile
|
|
329
|
-
: auth?.kind === "accessToken" && auth.profile !== undefined
|
|
330
|
-
? auth.profile
|
|
331
|
-
: await getProfileSelection(ctx);
|
|
332
312
|
loginFlow = loginFlow || "auto";
|
|
333
313
|
// Get access token from big-brain
|
|
334
314
|
// Default the device name to the hostname, but allow the user to change this if the terminal is interactive.
|
|
@@ -420,12 +400,6 @@ export async function performLogin(
|
|
|
420
400
|
}
|
|
421
401
|
|
|
422
402
|
// Exchange the WorkOS access token for a Convex personal access token.
|
|
423
|
-
const previous =
|
|
424
|
-
profile === null ? null : await readProfileCredentials(ctx, profile, true);
|
|
425
|
-
const metadata =
|
|
426
|
-
profile === null
|
|
427
|
-
? {}
|
|
428
|
-
: await profileLoginMetadata(ctx, profile, accessToken, previous);
|
|
429
403
|
ctx._updateBigBrainAuth({
|
|
430
404
|
accessToken: accessToken,
|
|
431
405
|
kind: "accessToken",
|
|
@@ -443,19 +417,8 @@ export async function performLogin(
|
|
|
443
417
|
const newAccessToken = response.data!.accessToken;
|
|
444
418
|
const globalConfig = { accessToken: newAccessToken };
|
|
445
419
|
try {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
ctx,
|
|
449
|
-
profile.name,
|
|
450
|
-
newAccessToken,
|
|
451
|
-
metadata,
|
|
452
|
-
previous,
|
|
453
|
-
);
|
|
454
|
-
} else {
|
|
455
|
-
await modifyGlobalConfig(ctx, globalConfig);
|
|
456
|
-
}
|
|
457
|
-
const path =
|
|
458
|
-
profile !== null ? profileConfigPath(profile.name) : globalConfigPath();
|
|
420
|
+
await modifyGlobalConfig(ctx, globalConfig);
|
|
421
|
+
const path = globalConfigPath();
|
|
459
422
|
logFinishedStep(`Saved credentials to ${formatPathForPrinting(path)}`);
|
|
460
423
|
} catch (err: unknown) {
|
|
461
424
|
return await ctx.crash({
|
|
@@ -466,15 +429,8 @@ export async function performLogin(
|
|
|
466
429
|
});
|
|
467
430
|
}
|
|
468
431
|
|
|
469
|
-
if (profile !== null) {
|
|
470
|
-
await revokeReplacedProfileToken(
|
|
471
|
-
ctx,
|
|
472
|
-
previous?.accessToken,
|
|
473
|
-
newAccessToken,
|
|
474
|
-
);
|
|
475
|
-
}
|
|
476
432
|
logVerbose(`performLogin: updating big brain auth after login`);
|
|
477
|
-
await updateBigBrainAuthAfterLogin(ctx, newAccessToken
|
|
433
|
+
await updateBigBrainAuthAfterLogin(ctx, newAccessToken);
|
|
478
434
|
|
|
479
435
|
logVerbose(`performLogin: checking opt ins, acceptOptIns: ${acceptOptIns}`);
|
|
480
436
|
// Do opt in to TOS and Privacy Policy stuff
|
|
@@ -149,13 +149,7 @@ export function encodeDeploymentSelector(
|
|
|
149
149
|
projectDir,
|
|
150
150
|
deployment,
|
|
151
151
|
};
|
|
152
|
-
|
|
153
|
-
const serialized = JSON.stringify(payload).replace(
|
|
154
|
-
/[\u0080-\uffff]/g,
|
|
155
|
-
(character) =>
|
|
156
|
-
`\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`,
|
|
157
|
-
);
|
|
158
|
-
return `${deployment.kind}:${btoa(serialized)}`;
|
|
152
|
+
return `${deployment.kind}:${btoa(JSON.stringify(payload))}`;
|
|
159
153
|
}
|
|
160
154
|
|
|
161
155
|
const payloadSchema = z.object({
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { determineAgent } from "@vercel/detect-agent";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns the name of the AI agent running this process, or null if none is
|
|
5
|
+
* detected. `@vercel/detect-agent` recognizes the environment variables that
|
|
6
|
+
* agents like Claude Code, Codex and Cursor set; `CONVEX_AGENT_MODE` is
|
|
7
|
+
* Convex's own.
|
|
8
|
+
*/
|
|
9
|
+
export async function detectAiAgent(): Promise<string | null> {
|
|
10
|
+
if (process.env.CONVEX_AGENT_MODE) {
|
|
11
|
+
return "CONVEX_AGENT_MODE";
|
|
12
|
+
}
|
|
13
|
+
const result = await determineAgent();
|
|
14
|
+
return result.isAgent ? result.agent.name : null;
|
|
15
|
+
}
|
|
@@ -45,7 +45,6 @@ export const CONVEX_DEPLOYMENT_ENV_VAR_NAME = "CONVEX_DEPLOYMENT";
|
|
|
45
45
|
export const CONVEX_SELF_HOSTED_URL_VAR_NAME = "CONVEX_SELF_HOSTED_URL";
|
|
46
46
|
export const CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME =
|
|
47
47
|
"CONVEX_SELF_HOSTED_ADMIN_KEY";
|
|
48
|
-
export const IGNORED_DEPLOY_KEY = "<ignore_deploy_key>";
|
|
49
48
|
const MAX_RETRIES = 6;
|
|
50
49
|
// After 3 retries, log a progress message that we're retrying the request
|
|
51
50
|
const RETRY_LOG_THRESHOLD = 3;
|
|
@@ -70,7 +69,7 @@ export async function processDeployKeyValue(
|
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
// Check for <ignore_deploy_key> sentinel
|
|
73
|
-
if (deployKey ===
|
|
72
|
+
if (deployKey === "<ignore_deploy_key>") {
|
|
74
73
|
return undefined;
|
|
75
74
|
}
|
|
76
75
|
|
|
@@ -97,20 +96,9 @@ export async function processDeployKeyValue(
|
|
|
97
96
|
export function readDeployKeyFromEnv(
|
|
98
97
|
getEnv: (name: string) => string | undefined | null,
|
|
99
98
|
): string | undefined {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
export function readDeployKeyEnvVar(
|
|
104
|
-
getEnv: (name: string) => string | undefined | null,
|
|
105
|
-
): { name: string; value: string } | undefined {
|
|
106
|
-
for (const name of [
|
|
107
|
-
CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
|
|
108
|
-
CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
|
|
109
|
-
]) {
|
|
110
|
-
const value = getEnv(name);
|
|
111
|
-
if (value) return { name, value };
|
|
112
|
-
}
|
|
113
|
-
return undefined;
|
|
99
|
+
const fromDeployKey = getEnv(CONVEX_DEPLOY_KEY_ENV_VAR_NAME);
|
|
100
|
+
const fromToken = getEnv(CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME);
|
|
101
|
+
return fromDeployKey || fromToken || undefined;
|
|
114
102
|
}
|
|
115
103
|
|
|
116
104
|
// The prefix the backend's `require_operation` checks use when an identity
|
|
@@ -120,9 +108,17 @@ const PERMISSION_DENIED_MESSAGE_PREFIX =
|
|
|
120
108
|
"You do not have permission to perform this operation";
|
|
121
109
|
|
|
122
110
|
function deployKeyPermissionAdvice(): string | null {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
111
|
+
// Name whichever env var is actually set. `CONVEX_DEPLOY_KEY` takes
|
|
112
|
+
// precedence over `CONVEX_DEPLOYMENT_TOKEN` when both are present.
|
|
113
|
+
const envVarName = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
|
|
114
|
+
? CONVEX_DEPLOY_KEY_ENV_VAR_NAME
|
|
115
|
+
: process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME]
|
|
116
|
+
? CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME
|
|
117
|
+
: null;
|
|
118
|
+
if (envVarName === null) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return `This is determined by the permissions granted to ${envVarName}.`;
|
|
126
122
|
}
|
|
127
123
|
|
|
128
124
|
/**
|