convex 1.40.0 → 1.42.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 +42 -0
- package/dist/browser.bundle.js +1 -1
- package/dist/browser.bundle.js.map +1 -1
- package/dist/cjs/browser/simple_client-node.js +85 -27
- package/dist/cjs/browser/simple_client-node.js.map +3 -3
- package/dist/cjs/cli/aiFiles.js +2 -2
- package/dist/cjs/cli/aiFiles.js.map +1 -1
- package/dist/cjs/cli/configure.js +1 -4
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/convexExport.js +3 -3
- package/dist/cjs/cli/convexExport.js.map +1 -1
- package/dist/cjs/cli/convexImport.js +2 -2
- package/dist/cjs/cli/convexImport.js.map +1 -1
- package/dist/cjs/cli/dashboard.js +19 -6
- package/dist/cjs/cli/dashboard.js.map +3 -3
- package/dist/cjs/cli/data.js +2 -2
- package/dist/cjs/cli/data.js.map +1 -1
- package/dist/cjs/cli/deploy.js +5 -5
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentCreate.js +11 -5
- package/dist/cjs/cli/deploymentCreate.js.map +2 -2
- package/dist/cjs/cli/deploymentSelect.js +5 -5
- package/dist/cjs/cli/deploymentSelect.js.map +1 -1
- package/dist/cjs/cli/deploymentTokenCreate.js +5 -13
- package/dist/cjs/cli/deploymentTokenCreate.js.map +2 -2
- package/dist/cjs/cli/deploymentTokenDelete.js +4 -11
- package/dist/cjs/cli/deploymentTokenDelete.js.map +2 -2
- package/dist/cjs/cli/dev.js +6 -5
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/env.js +25 -18
- package/dist/cjs/cli/env.js.map +2 -2
- package/dist/cjs/cli/envDefault.js +20 -15
- package/dist/cjs/cli/envDefault.js.map +2 -2
- package/dist/cjs/cli/insights.js +14 -4
- package/dist/cjs/cli/insights.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/skills.js +2 -2
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +1 -1
- package/dist/cjs/cli/lib/command.js.map +1 -1
- package/dist/cjs/cli/lib/deployment.js.map +1 -1
- package/dist/cjs/cli/lib/deploymentSelection.js +39 -0
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +31 -0
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/env.js +5 -1
- package/dist/cjs/cli/lib/env.js.map +2 -2
- package/dist/cjs/cli/lib/generateDocs.js +256 -0
- package/dist/cjs/cli/lib/generateDocs.js.map +7 -0
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +24 -49
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +3 -3
- package/dist/cjs/cli/lib/localDeployment/bigBrain.js +0 -9
- package/dist/cjs/cli/lib/localDeployment/bigBrain.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/dashboard.js +30 -68
- package/dist/cjs/cli/lib/localDeployment/dashboard.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/download.js +14 -1
- package/dist/cjs/cli/lib/localDeployment/download.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/filePaths.js +33 -4
- package/dist/cjs/cli/lib/localDeployment/filePaths.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js +37 -126
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +3 -3
- package/dist/cjs/cli/lib/localDeployment/secrets.js +91 -0
- package/dist/cjs/cli/lib/localDeployment/secrets.js.map +7 -0
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +43 -28
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
- package/dist/cjs/cli/lib/localDeployment/utils.js +0 -19
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +3 -3
- package/dist/cjs/cli/lib/login.js +16 -12
- package/dist/cjs/cli/lib/login.js.map +2 -2
- package/dist/cjs/cli/lib/logs.js +4 -1
- package/dist/cjs/cli/lib/logs.js.map +2 -2
- package/dist/cjs/cli/lib/run.js +27 -2
- package/dist/cjs/cli/lib/run.js.map +2 -2
- package/dist/cjs/cli/lib/runTestFunction.js +3 -3
- package/dist/cjs/cli/lib/runTestFunction.js.map +1 -1
- package/dist/cjs/cli/lib/utils/utils.js +30 -0
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- package/dist/cjs/cli/program.js +2 -1
- package/dist/cjs/cli/program.js.map +2 -2
- package/dist/cjs/cli/project.js +27 -0
- package/dist/cjs/cli/project.js.map +7 -0
- package/dist/cjs/cli/projectCreate.js +90 -0
- package/dist/cjs/cli/projectCreate.js.map +7 -0
- package/dist/cjs/cli/run.js +5 -5
- package/dist/cjs/cli/run.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/database.js.map +1 -1
- package/dist/cjs/server/impl/meta_impl.js +6 -6
- package/dist/cjs/server/impl/meta_impl.js.map +2 -2
- package/dist/cjs/server/impl/registration_impl.js +9 -3
- 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/query.js.map +1 -1
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs/server/storage.js.map +1 -1
- package/dist/cjs/server/system_fields.js.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts +3 -2
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/dashboard.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentTokenCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentTokenDelete.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.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/insights.d.ts +1 -0
- package/dist/cjs-types/cli/insights.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +16 -16
- 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 +7 -0
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts +2 -1
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.d.ts +3 -1
- package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/env.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generateDocs.d.ts +20 -0
- package/dist/cjs-types/cli/lib/generateDocs.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
- package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
- package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/download.d.ts +11 -1
- package/dist/cjs-types/cli/lib/localDeployment/download.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
- package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts +31 -0
- package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +0 -2
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/logs.d.ts +1 -1
- package/dist/cjs-types/cli/lib/logs.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/run.d.ts +1 -1
- package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +10 -0
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts +2 -2
- package/dist/cjs-types/cli/program.d.ts.map +1 -1
- package/dist/cjs-types/cli/project.d.ts +3 -0
- package/dist/cjs-types/cli/project.d.ts.map +1 -0
- package/dist/cjs-types/cli/projectCreate.d.ts +5 -0
- package/dist/cjs-types/cli/projectCreate.d.ts.map +1 -0
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/server/database.d.ts +21 -3
- package/dist/cjs-types/server/database.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/registration_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 +26 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/query.d.ts +1 -1
- package/dist/cjs-types/server/registration.d.ts +23 -5
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cjs-types/server/storage.d.ts +20 -3
- package/dist/cjs-types/server/storage.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +67155 -68245
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/simple_client-node.js +85 -27
- package/dist/esm/browser/simple_client-node.js.map +3 -3
- package/dist/esm/cli/aiFiles.js +2 -2
- package/dist/esm/cli/aiFiles.js.map +1 -1
- package/dist/esm/cli/configure.js +1 -4
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/convexExport.js +3 -3
- package/dist/esm/cli/convexExport.js.map +1 -1
- package/dist/esm/cli/convexImport.js +2 -2
- package/dist/esm/cli/convexImport.js.map +1 -1
- package/dist/esm/cli/dashboard.js +16 -3
- package/dist/esm/cli/dashboard.js.map +2 -2
- package/dist/esm/cli/data.js +2 -2
- package/dist/esm/cli/data.js.map +1 -1
- package/dist/esm/cli/deploy.js +5 -5
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentCreate.js +13 -9
- package/dist/esm/cli/deploymentCreate.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +5 -5
- package/dist/esm/cli/deploymentSelect.js.map +1 -1
- package/dist/esm/cli/deploymentTokenCreate.js +9 -15
- package/dist/esm/cli/deploymentTokenCreate.js.map +2 -2
- package/dist/esm/cli/deploymentTokenDelete.js +8 -16
- package/dist/esm/cli/deploymentTokenDelete.js.map +2 -2
- package/dist/esm/cli/dev.js +6 -5
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/env.js +25 -18
- package/dist/esm/cli/env.js.map +2 -2
- package/dist/esm/cli/envDefault.js +20 -15
- package/dist/esm/cli/envDefault.js.map +2 -2
- package/dist/esm/cli/insights.js +14 -4
- package/dist/esm/cli/insights.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/skills.js +2 -2
- package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/esm/cli/lib/command.js +1 -1
- package/dist/esm/cli/lib/command.js.map +1 -1
- package/dist/esm/cli/lib/deployment.js.map +1 -1
- package/dist/esm/cli/lib/deploymentSelection.js +38 -0
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +31 -0
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/env.js +5 -1
- package/dist/esm/cli/lib/env.js.map +2 -2
- package/dist/esm/cli/lib/generateDocs.js +233 -0
- package/dist/esm/cli/lib/generateDocs.js.map +7 -0
- package/dist/esm/cli/lib/localDeployment/anonymous.js +30 -61
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +3 -3
- package/dist/esm/cli/lib/localDeployment/bigBrain.js +0 -8
- package/dist/esm/cli/lib/localDeployment/bigBrain.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/dashboard.js +36 -69
- package/dist/esm/cli/lib/localDeployment/dashboard.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/download.js +15 -2
- package/dist/esm/cli/lib/localDeployment/download.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/filePaths.js +29 -2
- package/dist/esm/cli/lib/localDeployment/filePaths.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/localDeployment.js +40 -134
- package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +3 -3
- package/dist/esm/cli/lib/localDeployment/secrets.js +57 -0
- package/dist/esm/cli/lib/localDeployment/secrets.js.map +7 -0
- package/dist/esm/cli/lib/localDeployment/upgrade.js +45 -28
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +3 -3
- package/dist/esm/cli/lib/localDeployment/utils.js +0 -7
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/login.js +18 -13
- package/dist/esm/cli/lib/login.js.map +2 -2
- package/dist/esm/cli/lib/logs.js +5 -2
- package/dist/esm/cli/lib/logs.js.map +2 -2
- package/dist/esm/cli/lib/run.js +32 -3
- package/dist/esm/cli/lib/run.js.map +2 -2
- package/dist/esm/cli/lib/runTestFunction.js +3 -3
- package/dist/esm/cli/lib/runTestFunction.js.map +1 -1
- package/dist/esm/cli/lib/utils/utils.js +29 -0
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- package/dist/esm/cli/program.js +2 -1
- package/dist/esm/cli/program.js.map +2 -2
- package/dist/esm/cli/project.js +5 -0
- package/dist/esm/cli/project.js.map +7 -0
- package/dist/esm/cli/projectCreate.js +68 -0
- package/dist/esm/cli/projectCreate.js.map +7 -0
- package/dist/esm/cli/run.js +5 -5
- package/dist/esm/cli/run.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/impl/meta_impl.js +6 -6
- package/dist/esm/server/impl/meta_impl.js.map +2 -2
- package/dist/esm/server/impl/registration_impl.js +9 -3
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm-types/cli/configure.d.ts +3 -2
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/dashboard.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentTokenCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentTokenDelete.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.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/insights.d.ts +1 -0
- package/dist/esm-types/cli/insights.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +16 -16
- 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 +7 -0
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts +2 -1
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.d.ts +3 -1
- package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/env.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generateDocs.d.ts +20 -0
- package/dist/esm-types/cli/lib/generateDocs.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generateDocs.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
- package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
- package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/download.d.ts +11 -1
- package/dist/esm-types/cli/lib/localDeployment/download.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
- package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts +31 -0
- package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +0 -2
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/logs.d.ts +1 -1
- package/dist/esm-types/cli/lib/logs.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/run.d.ts +1 -1
- package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +10 -0
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts +2 -2
- package/dist/esm-types/cli/program.d.ts.map +1 -1
- package/dist/esm-types/cli/project.d.ts +3 -0
- package/dist/esm-types/cli/project.d.ts.map +1 -0
- package/dist/esm-types/cli/projectCreate.d.ts +5 -0
- package/dist/esm-types/cli/projectCreate.d.ts.map +1 -0
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/server/database.d.ts +21 -3
- package/dist/esm-types/server/database.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/registration_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 +26 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/query.d.ts +1 -1
- package/dist/esm-types/server/registration.d.ts +23 -5
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/esm-types/server/storage.d.ts +20 -3
- 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 +7 -5
- package/src/browser/sync/request_manager.test.ts +2 -2
- package/src/cli/aiFiles.ts +2 -2
- package/src/cli/configure.ts +4 -6
- package/src/cli/convexExport.ts +3 -3
- package/src/cli/convexImport.ts +2 -2
- package/src/cli/dashboard.ts +29 -3
- package/src/cli/data.ts +2 -2
- package/src/cli/deploy.ts +5 -5
- package/src/cli/deploymentCreate.test.ts +151 -24
- package/src/cli/deploymentCreate.ts +21 -11
- package/src/cli/deploymentSelect.ts +5 -5
- package/src/cli/deploymentSelection.test.ts +0 -3
- package/src/cli/deploymentToken.test.ts +34 -23
- package/src/cli/deploymentTokenCreate.ts +9 -21
- package/src/cli/deploymentTokenDelete.ts +8 -23
- package/src/cli/dev.ts +5 -4
- package/src/cli/env.ts +29 -19
- package/src/cli/envDefault.ts +21 -15
- package/src/cli/insights.ts +15 -3
- package/src/cli/lib/aiFiles/integration.test.ts +2 -0
- package/src/cli/lib/aiFiles/skills.ts +3 -3
- package/src/cli/lib/command.ts +2 -2
- package/src/cli/lib/deployment.ts +0 -5
- package/src/cli/lib/deploymentSelection.ts +67 -0
- package/src/cli/lib/dev.ts +39 -0
- package/src/cli/lib/env.test.ts +60 -0
- package/src/cli/lib/env.ts +9 -1
- package/src/cli/lib/generateDocs.test.ts +326 -0
- package/src/cli/lib/generateDocs.ts +393 -0
- package/src/cli/lib/localDeployment/anonymous.ts +48 -72
- package/src/cli/lib/localDeployment/bigBrain.ts +7 -15
- package/src/cli/lib/localDeployment/dashboard.ts +48 -80
- package/src/cli/lib/localDeployment/download.ts +34 -3
- package/src/cli/lib/localDeployment/filePaths.ts +66 -6
- package/src/cli/lib/localDeployment/localDeployment.ts +46 -184
- package/src/cli/lib/localDeployment/run.test.ts +6 -6
- package/src/cli/lib/localDeployment/secrets.test.ts +53 -0
- package/src/cli/lib/localDeployment/secrets.ts +93 -0
- package/src/cli/lib/localDeployment/tests/keygenFailure.mjs +9 -0
- package/src/cli/lib/localDeployment/tests/keygenSuccess.mjs +31 -0
- package/src/cli/lib/localDeployment/upgrade.ts +52 -38
- package/src/cli/lib/localDeployment/utils.ts +0 -10
- package/src/cli/lib/login.ts +18 -18
- package/src/cli/lib/logs.ts +7 -2
- package/src/cli/lib/run.ts +37 -3
- package/src/cli/lib/runTestFunction.ts +3 -3
- package/src/cli/lib/utils/utils.ts +56 -0
- package/src/cli/program.ts +2 -0
- package/src/cli/project.ts +7 -0
- package/src/cli/projectCreate.ts +99 -0
- package/src/cli/run.ts +5 -5
- package/src/index.ts +1 -1
- package/src/server/database.ts +21 -3
- package/src/server/impl/meta_impl.ts +7 -6
- package/src/server/impl/registration_impl.ts +11 -5
- package/src/server/index.ts +2 -0
- package/src/server/meta.ts +27 -0
- package/src/server/query.ts +1 -1
- package/src/server/registration.test.ts +16 -25
- package/src/server/registration.ts +25 -19
- package/src/server/storage.ts +22 -3
- package/src/server/system_fields.ts +1 -1
|
@@ -101,6 +101,52 @@ export function readDeployKeyFromEnv(
|
|
|
101
101
|
return fromDeployKey || fromToken || undefined;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
// The prefix the backend's `require_operation` checks use when an identity
|
|
105
|
+
// lacks a permission. The full message names the missing permission, e.g.
|
|
106
|
+
// `You do not have permission to perform this operation (deployment:data:view).`
|
|
107
|
+
const PERMISSION_DENIED_MESSAGE_PREFIX =
|
|
108
|
+
"You do not have permission to perform this operation";
|
|
109
|
+
|
|
110
|
+
function deployKeyPermissionAdvice(): string | null {
|
|
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}.`;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Detects a server-side authorization failure (a `require_operation` error,
|
|
126
|
+
* surfaced both as an HTTP 403 and as an error from a system UDF query) and
|
|
127
|
+
* produces a clean, single-line message naming the missing permission. When a
|
|
128
|
+
* deploy key is in use, appends advice for configuring its permissions.
|
|
129
|
+
*
|
|
130
|
+
* Returns `null` if `errorMessage` is not a permission error, so callers can
|
|
131
|
+
* fall back to their normal error handling.
|
|
132
|
+
*/
|
|
133
|
+
export function permissionDeniedErrorMessage(
|
|
134
|
+
errorMessage: string,
|
|
135
|
+
): string | null {
|
|
136
|
+
const index = errorMessage.indexOf(PERMISSION_DENIED_MESSAGE_PREFIX);
|
|
137
|
+
if (index === -1) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
// Drop any wrapping context (e.g. the `[CONVEX Q(...)]` prefix) and stack
|
|
141
|
+
// trace, keeping just the permission sentence.
|
|
142
|
+
let msg = errorMessage.slice(index).split("\n")[0].trim();
|
|
143
|
+
const advice = deployKeyPermissionAdvice();
|
|
144
|
+
if (advice) {
|
|
145
|
+
msg = `${msg}\n${advice}`;
|
|
146
|
+
}
|
|
147
|
+
return msg;
|
|
148
|
+
}
|
|
149
|
+
|
|
104
150
|
export function parsePositiveInteger(value: string) {
|
|
105
151
|
const parsedValue = parseInteger(value);
|
|
106
152
|
if (parsedValue <= 0) {
|
|
@@ -177,6 +223,16 @@ export class ThrowingFetchError extends Error {
|
|
|
177
223
|
} else if (this.response.status === 401) {
|
|
178
224
|
error_type = "fatal";
|
|
179
225
|
msg = `${msg}\nAuthenticate with \`npx convex dev\``;
|
|
226
|
+
} else if (this.response.status === 403) {
|
|
227
|
+
error_type = "fatal";
|
|
228
|
+
// Surface the missing permission cleanly (e.g. the server includes the
|
|
229
|
+
// required action like `deployment:data:view`) instead of the noisy
|
|
230
|
+
// "Error fetching ..." wrapper.
|
|
231
|
+
msg = this.serverErrorData?.message ?? msg;
|
|
232
|
+
const advice = deployKeyPermissionAdvice();
|
|
233
|
+
if (advice) {
|
|
234
|
+
msg = `${msg}\n${advice}`;
|
|
235
|
+
}
|
|
180
236
|
} else if (this.response.status === 404) {
|
|
181
237
|
error_type = "fatal";
|
|
182
238
|
msg = `${msg}: ${this.response.url}`;
|
package/src/cli/program.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { logout } from "./logout.js";
|
|
|
21
21
|
import { logs } from "./logs.js";
|
|
22
22
|
import { mcp } from "./mcp.js";
|
|
23
23
|
import { networkTest } from "./network_test.js";
|
|
24
|
+
import { project } from "./project.js";
|
|
24
25
|
import { reinit } from "./reinit.js";
|
|
25
26
|
import { run } from "./run.js";
|
|
26
27
|
import { typecheck } from "./typecheck.js";
|
|
@@ -51,6 +52,7 @@ export function buildProgram() {
|
|
|
51
52
|
.addCommand(env)
|
|
52
53
|
.addCommand(data)
|
|
53
54
|
.addCommand(deployment)
|
|
55
|
+
.addCommand(project)
|
|
54
56
|
.addCommand(codegen)
|
|
55
57
|
.addCommand(update)
|
|
56
58
|
.addCommand(logout)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Command, Option } from "@commander-js/extra-typings";
|
|
2
|
+
import { oneoffContext } from "../bundler/context.js";
|
|
3
|
+
import { logFinishedStep, logMessage, showSpinner } from "../bundler/log.js";
|
|
4
|
+
import { chalkStderr } from "chalk";
|
|
5
|
+
import { createProject } from "./lib/api.js";
|
|
6
|
+
import { ensureAuthCanCreateDeployment } from "./lib/deploymentSelection.js";
|
|
7
|
+
import { validateOrSelectTeam } from "./lib/utils/utils.js";
|
|
8
|
+
import { promptString } from "./lib/utils/prompts.js";
|
|
9
|
+
import { projectDashboardUrl } from "./lib/dashboard.js";
|
|
10
|
+
|
|
11
|
+
type ProjectCreateOptions = {
|
|
12
|
+
team?: string | undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
async function runProjectCreate(
|
|
16
|
+
nameArg: string | undefined,
|
|
17
|
+
options: ProjectCreateOptions,
|
|
18
|
+
): Promise<void> {
|
|
19
|
+
const ctx = await oneoffContext({
|
|
20
|
+
url: undefined,
|
|
21
|
+
adminKey: undefined,
|
|
22
|
+
envFile: undefined,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Creating a project goes through the platform API, which accepts personal
|
|
26
|
+
// access tokens and project keys but not deployment/preview deploy keys.
|
|
27
|
+
// Fail fast (and clearly) for the unsupported keys rather than surfacing an
|
|
28
|
+
// opaque error later.
|
|
29
|
+
await ensureAuthCanCreateDeployment(ctx);
|
|
30
|
+
|
|
31
|
+
const { team } = await validateOrSelectTeam(ctx, options.team, "Team:");
|
|
32
|
+
|
|
33
|
+
let projectName = nameArg;
|
|
34
|
+
if (!projectName) {
|
|
35
|
+
if (!process.stdin.isTTY) {
|
|
36
|
+
return await ctx.crash({
|
|
37
|
+
exitCode: 1,
|
|
38
|
+
errorType: "fatal",
|
|
39
|
+
printedMessage:
|
|
40
|
+
"Specify a project name:\n" + " `npx convex project create my-app`",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
projectName = await promptString(ctx, {
|
|
44
|
+
message: "Project name:",
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
showSpinner(`Creating project ${projectName}...`);
|
|
49
|
+
// `project create` only creates the project. Provisioning a deployment is a
|
|
50
|
+
// separate, explicit step (`npx convex deployment create`) so this command
|
|
51
|
+
// doesn't have to mirror every deployment setting (region, class, ...).
|
|
52
|
+
const { projectSlug } = await createProject(ctx, {
|
|
53
|
+
teamId: team.id,
|
|
54
|
+
projectName,
|
|
55
|
+
deploymentToProvision: null,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
logFinishedStep(
|
|
59
|
+
`Created project ${chalkStderr.bold(projectSlug)} in team ` +
|
|
60
|
+
`${chalkStderr.bold(team.slug)}, manage it at ${chalkStderr.bold(
|
|
61
|
+
projectDashboardUrl(team.slug, projectSlug),
|
|
62
|
+
)}`,
|
|
63
|
+
);
|
|
64
|
+
logMessage(
|
|
65
|
+
chalkStderr.gray(
|
|
66
|
+
`Next, add a deployment with ` +
|
|
67
|
+
`\`npx convex deployment create ${team.slug}:${projectSlug}:dev --type dev\` ` +
|
|
68
|
+
`(pass \`--region us\` to choose a region).`,
|
|
69
|
+
),
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const projectCreate = new Command("create")
|
|
74
|
+
.summary("Create a new project")
|
|
75
|
+
.description(
|
|
76
|
+
[
|
|
77
|
+
"Create a new project.",
|
|
78
|
+
"",
|
|
79
|
+
"Provisioning a deployment is a separate step — after creating the",
|
|
80
|
+
"project, run `npx convex deployment create` to add one.",
|
|
81
|
+
"",
|
|
82
|
+
"• Create a project in your only team: `npx convex project create my-app`",
|
|
83
|
+
"• Pick the team: `npx convex project create my-app --team my-team`",
|
|
84
|
+
].join("\n"),
|
|
85
|
+
)
|
|
86
|
+
.allowExcessArguments(false)
|
|
87
|
+
.argument(
|
|
88
|
+
"[name]",
|
|
89
|
+
"The name of the new project. Prompted for when omitted in an " +
|
|
90
|
+
"interactive terminal; required otherwise.",
|
|
91
|
+
)
|
|
92
|
+
.addOption(
|
|
93
|
+
new Option(
|
|
94
|
+
"--team <team_slug>",
|
|
95
|
+
"The team to create the project in. Defaults to your only team, or " +
|
|
96
|
+
"prompts when you belong to several.",
|
|
97
|
+
),
|
|
98
|
+
)
|
|
99
|
+
.action(runProjectCreate);
|
package/src/cli/run.ts
CHANGED
|
@@ -31,11 +31,11 @@ export const run = new Command("run")
|
|
|
31
31
|
[
|
|
32
32
|
"Run a function or evaluate an inline readonly query on your deployment.",
|
|
33
33
|
"",
|
|
34
|
-
'
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
34
|
+
'• Run a function with JSON arguments: `npx convex run messages:send \'{"body": "hello", "author": "me"}\'`',
|
|
35
|
+
"• Run a function on prod: `npx convex run messages:list --prod`",
|
|
36
|
+
"• Live-update a query's result: `npx convex run messages:list --watch`",
|
|
37
|
+
"• Push local code before running: `npx convex run messages:send '{}' --push`",
|
|
38
|
+
"• Evaluate an inline readonly query: `npx convex run --inline-query 'await ctx.db.query(\"messages\").take(5)'`",
|
|
39
39
|
"",
|
|
40
40
|
"Arguments are specified as a JSON object. By default, this runs on your dev deployment.",
|
|
41
41
|
].join("\n"),
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = "1.
|
|
1
|
+
export const version = "1.42.0";
|
package/src/server/database.ts
CHANGED
|
@@ -14,7 +14,13 @@ import {
|
|
|
14
14
|
|
|
15
15
|
interface BaseDatabaseReader<DataModel extends GenericDataModel> {
|
|
16
16
|
/**
|
|
17
|
-
* Fetch a single document from the database by
|
|
17
|
+
* Fetch a single document from the database by table name and
|
|
18
|
+
* {@link values.GenericId}.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const user = await ctx.db.get("users", userId);
|
|
23
|
+
* ```
|
|
18
24
|
*
|
|
19
25
|
* @param table - The name of the table to fetch the document from.
|
|
20
26
|
* @param id - The {@link values.GenericId} of the document to fetch from the database.
|
|
@@ -28,6 +34,9 @@ interface BaseDatabaseReader<DataModel extends GenericDataModel> {
|
|
|
28
34
|
/**
|
|
29
35
|
* Fetch a single document from the database by its {@link values.GenericId}.
|
|
30
36
|
*
|
|
37
|
+
* Supported for backwards compatibility. Prefer `db.get(tableName, id)` in
|
|
38
|
+
* new code, or `db.system.get(tableName, id)` for system tables.
|
|
39
|
+
*
|
|
31
40
|
* @param id - The {@link values.GenericId} of the document to fetch from the database.
|
|
32
41
|
* @returns - The {@link GenericDocument} of the document at the given {@link values.GenericId}, or `null` if it no longer exists.
|
|
33
42
|
*/
|
|
@@ -55,7 +64,7 @@ interface BaseDatabaseReader<DataModel extends GenericDataModel> {
|
|
|
55
64
|
* This accepts the string ID format as well as the `.toString()` representation
|
|
56
65
|
* of the legacy class-based ID format.
|
|
57
66
|
*
|
|
58
|
-
* This does not guarantee that the ID exists (i.e. `db.get(id)` may return `null`).
|
|
67
|
+
* This does not guarantee that the ID exists (i.e. `db.get(tableName, id)` may return `null`).
|
|
59
68
|
*
|
|
60
69
|
* @param tableName - The name of the table.
|
|
61
70
|
* @param id - The ID string.
|
|
@@ -109,7 +118,7 @@ export interface BaseTableReader<
|
|
|
109
118
|
*
|
|
110
119
|
* The two entry points are:
|
|
111
120
|
* - {@link GenericDatabaseReader.get}, which fetches a single document
|
|
112
|
-
* by
|
|
121
|
+
* by table name and {@link values.GenericId}.
|
|
113
122
|
* - {@link GenericDatabaseReader.query}, which starts building a query.
|
|
114
123
|
*
|
|
115
124
|
* @example
|
|
@@ -272,6 +281,9 @@ export interface GenericDatabaseWriter<DataModel extends GenericDataModel>
|
|
|
272
281
|
*
|
|
273
282
|
* This method will throw if the document does not exist.
|
|
274
283
|
*
|
|
284
|
+
* Supported for backwards compatibility. Prefer `db.patch(tableName, id, value)`
|
|
285
|
+
* in new code.
|
|
286
|
+
*
|
|
275
287
|
* @param id - The {@link values.GenericId} of the document to patch.
|
|
276
288
|
* @param value - The partial document to merge into the existing document.
|
|
277
289
|
*/
|
|
@@ -316,6 +328,9 @@ export interface GenericDatabaseWriter<DataModel extends GenericDataModel>
|
|
|
316
328
|
* Unlike `patch`, which does a shallow merge, `replace` overwrites the
|
|
317
329
|
* entire document.
|
|
318
330
|
*
|
|
331
|
+
* Supported for backwards compatibility. Prefer `db.replace(tableName, id, value)`
|
|
332
|
+
* in new code.
|
|
333
|
+
*
|
|
319
334
|
* @param id - The {@link values.GenericId} of the document to replace.
|
|
320
335
|
* @param value - The new document. System fields can be omitted.
|
|
321
336
|
*/
|
|
@@ -343,6 +358,9 @@ export interface GenericDatabaseWriter<DataModel extends GenericDataModel>
|
|
|
343
358
|
/**
|
|
344
359
|
* Delete an existing document.
|
|
345
360
|
*
|
|
361
|
+
* Supported for backwards compatibility. Prefer `db.delete(tableName, id)` in
|
|
362
|
+
* new code.
|
|
363
|
+
*
|
|
346
364
|
* **Note:** Convex queries do not support `.delete()` directly on query
|
|
347
365
|
* results. To delete multiple documents, `.collect()` them first, then
|
|
348
366
|
* delete each one individually.
|
|
@@ -34,7 +34,10 @@ async function getFunctionMetadata(): Promise<{
|
|
|
34
34
|
"1.0/getFunctionMetadata",
|
|
35
35
|
{},
|
|
36
36
|
);
|
|
37
|
-
return {
|
|
37
|
+
return {
|
|
38
|
+
name,
|
|
39
|
+
componentPath,
|
|
40
|
+
};
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
async function getDeploymentMetadata(): Promise<DeploymentMetadata> {
|
|
@@ -51,11 +54,9 @@ async function getDeploymentMetadata(): Promise<DeploymentMetadata> {
|
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
async function getRequestMetadata(): Promise<RequestMetadata> {
|
|
54
|
-
const { ip, userAgent, requestId } =
|
|
55
|
-
"1.0/getRequestMetadata",
|
|
56
|
-
|
|
57
|
-
);
|
|
58
|
-
return { ip, userAgent, requestId };
|
|
57
|
+
const { ip, userAgent, requestId, scheduledFunctionId } =
|
|
58
|
+
await performAsyncSyscall("1.0/getRequestMetadata", {});
|
|
59
|
+
return { ip, userAgent, requestId, scheduledFunctionId };
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
export function setupQueryMeta(
|
|
@@ -61,9 +61,9 @@ async function invokeMutation<
|
|
|
61
61
|
meta: setupMutationMeta(visibility),
|
|
62
62
|
|
|
63
63
|
runQuery: (reference: any, args?: any, options?: any) =>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
options?.useStaleSnapshot
|
|
65
|
+
? runUdf("snapshotQuery", reference, args, options?.transactionLimits)
|
|
66
|
+
: runUdf("query", reference, args, options?.transactionLimits),
|
|
67
67
|
runMutation: (reference: any, args?: any, options?: any) =>
|
|
68
68
|
runUdf("mutation", reference, args, options?.transactionLimits),
|
|
69
69
|
};
|
|
@@ -338,8 +338,14 @@ async function invokeQuery<
|
|
|
338
338
|
auth: setupAuth(requestId),
|
|
339
339
|
storage: setupStorageReader(requestId),
|
|
340
340
|
meta: setupQueryMeta(visibility),
|
|
341
|
-
runQuery: (reference: any, args?: any, options?: any) =>
|
|
342
|
-
|
|
341
|
+
runQuery: (reference: any, args?: any, options?: any) => {
|
|
342
|
+
if (options?.useStaleSnapshot) {
|
|
343
|
+
throw new Error(
|
|
344
|
+
"`useStaleSnapshot` is only supported in mutations, not queries.",
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
return runUdf("query", reference, args, options?.transactionLimits);
|
|
348
|
+
},
|
|
343
349
|
};
|
|
344
350
|
const result = await invokeFunction(func, queryCtx, args as any);
|
|
345
351
|
validateReturnValue(result);
|
package/src/server/index.ts
CHANGED
|
@@ -106,6 +106,7 @@ export {
|
|
|
106
106
|
export type {
|
|
107
107
|
TransactionMetric,
|
|
108
108
|
TransactionMetrics,
|
|
109
|
+
TransactionLimits,
|
|
109
110
|
FunctionMetadata,
|
|
110
111
|
DeploymentMetadata,
|
|
111
112
|
RequestMetadata,
|
|
@@ -117,6 +118,7 @@ export type { IndexRange, IndexRangeBuilder } from "./index_range_builder.js";
|
|
|
117
118
|
export * from "./pagination.js";
|
|
118
119
|
export type { OrderedQuery, Query, QueryInitializer } from "./query.js";
|
|
119
120
|
export type {
|
|
121
|
+
AdvancedRunQueryOptions,
|
|
120
122
|
ArgsArray,
|
|
121
123
|
DefaultFunctionArgs,
|
|
122
124
|
FunctionVisibility,
|
package/src/server/meta.ts
CHANGED
|
@@ -28,6 +28,23 @@ export type TransactionMetrics = {
|
|
|
28
28
|
scheduledFunctionArgsBytes: TransactionMetric;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Custom limits for a nested transaction. Each field specifies the absolute
|
|
33
|
+
* maximum allowed for the nested function call. Values are capped at the
|
|
34
|
+
* global transaction limits, so they can only lower limits, never raise them.
|
|
35
|
+
*
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export interface TransactionLimits {
|
|
39
|
+
bytesRead?: number;
|
|
40
|
+
bytesWritten?: number;
|
|
41
|
+
databaseQueries?: number;
|
|
42
|
+
documentsRead?: number;
|
|
43
|
+
documentsWritten?: number;
|
|
44
|
+
functionsScheduled?: number;
|
|
45
|
+
scheduledFunctionArgsBytes?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
31
48
|
/**
|
|
32
49
|
* Metadata about the currently executing Convex function.
|
|
33
50
|
*
|
|
@@ -87,6 +104,16 @@ export type RequestMetadata = {
|
|
|
87
104
|
ip: string | null;
|
|
88
105
|
userAgent: string | null;
|
|
89
106
|
requestId: string;
|
|
107
|
+
/**
|
|
108
|
+
* The ID of the scheduled function document (in `_scheduled_functions`) that
|
|
109
|
+
* this execution belongs to, or `null` otherwise.
|
|
110
|
+
*
|
|
111
|
+
* This is set for the scheduled function itself and for any functions it
|
|
112
|
+
* calls (e.g. a mutation invoked via `runMutation` by a scheduled action),
|
|
113
|
+
* propagating the top-level scheduled function's ID down the call tree. It is
|
|
114
|
+
* `null` when the function was not scheduled.
|
|
115
|
+
*/
|
|
116
|
+
scheduledFunctionId: string | null;
|
|
90
117
|
};
|
|
91
118
|
|
|
92
119
|
/**
|
package/src/server/query.ts
CHANGED
|
@@ -106,7 +106,7 @@ export interface QueryInitializer<TableInfo extends GenericTableInfo>
|
|
|
106
106
|
/**
|
|
107
107
|
* The {@link Query} interface allows functions to read values out of the database.
|
|
108
108
|
*
|
|
109
|
-
* **If you only need to load an object by ID, use `db.get(id)` instead.**
|
|
109
|
+
* **If you only need to load an object by ID, use `db.get(tableName, id)` instead.**
|
|
110
110
|
*
|
|
111
111
|
* Executing a query consists of calling
|
|
112
112
|
* 1. (Optional) {@link Query.order} to define the order
|
|
@@ -6,19 +6,15 @@ import {
|
|
|
6
6
|
ActionBuilder,
|
|
7
7
|
ApiFromModules,
|
|
8
8
|
DefaultFunctionArgs,
|
|
9
|
+
GenericDataModel,
|
|
10
|
+
GenericMutationCtx,
|
|
11
|
+
GenericQueryCtx,
|
|
9
12
|
QueryBuilder,
|
|
10
13
|
actionGeneric,
|
|
11
14
|
mutationGeneric,
|
|
12
15
|
queryGeneric,
|
|
13
16
|
} from "./index.js";
|
|
14
|
-
import {
|
|
15
|
-
EmptyObject,
|
|
16
|
-
GenericActionCtx,
|
|
17
|
-
GenericMutationCtx,
|
|
18
|
-
GenericQueryCtx,
|
|
19
|
-
MutationBuilder,
|
|
20
|
-
} from "./registration.js";
|
|
21
|
-
import { GenericDataModel } from "./data_model.js";
|
|
17
|
+
import { EmptyObject, MutationBuilder } from "./registration.js";
|
|
22
18
|
|
|
23
19
|
describe("argument inference", () => {
|
|
24
20
|
// Test with mutation, but all the wrappers work the same way.
|
|
@@ -571,28 +567,23 @@ describe("argument and return value validators can be objects or validators", ()
|
|
|
571
567
|
});
|
|
572
568
|
});
|
|
573
569
|
|
|
574
|
-
describe("
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
});
|
|
570
|
+
describe("useStaleSnapshot availability", () => {
|
|
571
|
+
type MutationRunQueryOptions = NonNullable<
|
|
572
|
+
Parameters<GenericMutationCtx<GenericDataModel>["runQuery"]>[2]
|
|
573
|
+
>;
|
|
574
|
+
type QueryRunQueryOptions = NonNullable<
|
|
575
|
+
Parameters<GenericQueryCtx<GenericDataModel>["runQuery"]>[2]
|
|
576
|
+
>;
|
|
582
577
|
|
|
583
|
-
test("
|
|
584
|
-
|
|
585
|
-
"
|
|
586
|
-
? true
|
|
587
|
-
: false
|
|
578
|
+
test("available on mutation ctx runQuery options", () => {
|
|
579
|
+
assert<
|
|
580
|
+
"useStaleSnapshot" extends keyof MutationRunQueryOptions ? true : false
|
|
588
581
|
>();
|
|
589
582
|
});
|
|
590
583
|
|
|
591
|
-
test("not available on
|
|
584
|
+
test("not available on query ctx runQuery options", () => {
|
|
592
585
|
assertFalse<
|
|
593
|
-
"
|
|
594
|
-
? true
|
|
595
|
-
: false
|
|
586
|
+
"useStaleSnapshot" extends keyof QueryRunQueryOptions ? true : false
|
|
596
587
|
>();
|
|
597
588
|
});
|
|
598
589
|
});
|
|
@@ -8,8 +8,14 @@ import {
|
|
|
8
8
|
StorageReader,
|
|
9
9
|
StorageWriter,
|
|
10
10
|
} from "./index.js";
|
|
11
|
-
import { ActionMeta, MutationMeta, QueryMeta } from "./meta.js";
|
|
12
11
|
import {
|
|
12
|
+
ActionMeta,
|
|
13
|
+
MutationMeta,
|
|
14
|
+
QueryMeta,
|
|
15
|
+
TransactionLimits,
|
|
16
|
+
} from "./meta.js";
|
|
17
|
+
import {
|
|
18
|
+
ArgsAndOptions,
|
|
13
19
|
FunctionReference,
|
|
14
20
|
FunctionReturnType,
|
|
15
21
|
OptionalRestArgs,
|
|
@@ -129,22 +135,7 @@ export interface GenericMutationCtx<DataModel extends GenericDataModel> {
|
|
|
129
135
|
*/
|
|
130
136
|
runQuery: <Query extends FunctionReference<"query", "public" | "internal">>(
|
|
131
137
|
query: Query,
|
|
132
|
-
...args:
|
|
133
|
-
) => Promise<FunctionReturnType<Query>>;
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Experimental: call a query function in the same transaction that runs on a
|
|
137
|
-
* snapshot of the database without taking a read dependency.
|
|
138
|
-
*
|
|
139
|
-
* This is an unstable feature and its behavior may change in the future.
|
|
140
|
-
*
|
|
141
|
-
* @internal
|
|
142
|
-
*/
|
|
143
|
-
runSnapshotQuery: <
|
|
144
|
-
Query extends FunctionReference<"query", "public" | "internal">,
|
|
145
|
-
>(
|
|
146
|
-
query: Query,
|
|
147
|
-
...args: OptionalRestArgs<Query>
|
|
138
|
+
...args: ArgsAndOptions<Query, AdvancedRunQueryOptions>
|
|
148
139
|
) => Promise<FunctionReturnType<Query>>;
|
|
149
140
|
|
|
150
141
|
/**
|
|
@@ -161,7 +152,7 @@ export interface GenericMutationCtx<DataModel extends GenericDataModel> {
|
|
|
161
152
|
Mutation extends FunctionReference<"mutation", "public" | "internal">,
|
|
162
153
|
>(
|
|
163
154
|
mutation: Mutation,
|
|
164
|
-
...args:
|
|
155
|
+
...args: ArgsAndOptions<Mutation, { transactionLimits?: TransactionLimits }>
|
|
165
156
|
) => Promise<FunctionReturnType<Mutation>>;
|
|
166
157
|
|
|
167
158
|
meta: MutationMeta;
|
|
@@ -254,7 +245,7 @@ export interface GenericQueryCtx<DataModel extends GenericDataModel> {
|
|
|
254
245
|
*/
|
|
255
246
|
runQuery: <Query extends FunctionReference<"query", "public" | "internal">>(
|
|
256
247
|
query: Query,
|
|
257
|
-
...args:
|
|
248
|
+
...args: ArgsAndOptions<Query, { transactionLimits?: TransactionLimits }>
|
|
258
249
|
) => Promise<FunctionReturnType<Query>>;
|
|
259
250
|
|
|
260
251
|
meta: QueryMeta;
|
|
@@ -1220,3 +1211,18 @@ export type ActionBuilder<
|
|
|
1220
1211
|
export type HttpActionBuilder = (
|
|
1221
1212
|
func: (ctx: GenericActionCtx<any>, request: Request) => Promise<Response>,
|
|
1222
1213
|
) => PublicHttpAction;
|
|
1214
|
+
|
|
1215
|
+
export interface AdvancedRunQueryOptions {
|
|
1216
|
+
transactionLimits?: TransactionLimits;
|
|
1217
|
+
/**
|
|
1218
|
+
* Run a query on a recent snapshot of the database that is not guaranteed
|
|
1219
|
+
* to be up-to-date when this transaction commits.
|
|
1220
|
+
*
|
|
1221
|
+
* This is an advanced feature which can introduce subtle race conditions,
|
|
1222
|
+
* so its use is generally discouraged except for specific use-cases where
|
|
1223
|
+
* database read conflicts are expected, e.g. reading from an append-only
|
|
1224
|
+
* table with immutable records where the only read conflicts are from
|
|
1225
|
+
* concurrent appends.
|
|
1226
|
+
*/
|
|
1227
|
+
useStaleSnapshot?: boolean;
|
|
1228
|
+
}
|
package/src/server/storage.ts
CHANGED
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import { GenericId } from "../values/index.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* @deprecated This ID format is no longer returned by stable file storage APIs. Use `Id<"_storage">` instead.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* The old ID format used by Convex file storage.
|
|
7
|
+
*
|
|
8
|
+
* ⚠️ Security warning: Anyone that has knows to this ID can download the underlying file
|
|
9
|
+
* from `https://<deployment>.convex.cloud/api/storage/<storageId>`.
|
|
10
|
+
* (Note that it’s safe to share the new ID format, `Id<"_storage">`, to anyone).
|
|
8
11
|
*
|
|
9
12
|
* @public
|
|
10
13
|
*/
|
|
11
14
|
export type StorageId = string;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated This type is only necessary for backwards compatibility with Convex versions that
|
|
18
|
+
* pre-date `convex@1.6.0`. Use `Id<"_storage">` instead.
|
|
19
|
+
*/
|
|
12
20
|
export type FileStorageId = GenericId<"_storage"> | StorageId;
|
|
21
|
+
|
|
13
22
|
/**
|
|
23
|
+
* @deprecated This type is only returned by {@link StorageReader.getUrl | storage.getUrl}.
|
|
24
|
+
* To get the details of a document, use `ctx.db.system.get("_storage", storageId)` instead.
|
|
25
|
+
*
|
|
14
26
|
* Metadata for a single file as returned by {@link StorageReader.getMetadata | storage.getMetadata}.
|
|
15
27
|
*
|
|
16
28
|
* @public
|
|
@@ -18,6 +30,13 @@ export type FileStorageId = GenericId<"_storage"> | StorageId;
|
|
|
18
30
|
export type FileMetadata = {
|
|
19
31
|
/**
|
|
20
32
|
* ID for referencing the file (eg. via {@link StorageReader.getUrl | storage.getUrl})
|
|
33
|
+
*
|
|
34
|
+
* This is an older ID format that is no longer returned by stable file storage APIs.
|
|
35
|
+
* Consider using `Id<"_storage">` instead.
|
|
36
|
+
*
|
|
37
|
+
* ⚠️ Security warning: Anyone that has knows to this ID can download the underlying file
|
|
38
|
+
* from `https://<deployment>.convex.cloud/api/storage/<storageId>`.
|
|
39
|
+
* (Note that it’s safe to share the new ID format, `Id<"_storage">`, to anyone).
|
|
21
40
|
*/
|
|
22
41
|
storageId: StorageId;
|
|
23
42
|
/**
|
|
@@ -46,7 +46,7 @@ export type WithOptionalSystemFields<Document extends GenericDocument> = Expand<
|
|
|
46
46
|
* @public
|
|
47
47
|
*/
|
|
48
48
|
export type SystemIndexes = {
|
|
49
|
-
// Note `db.get(id)` is simpler and equivalent to a query on `by_id`.
|
|
49
|
+
// Note `db.get(tableName, id)` is simpler and equivalent to a query on `by_id`.
|
|
50
50
|
// Unless the query is being built dynamically, or doing manual pagination.
|
|
51
51
|
by_id: ["_id"];
|
|
52
52
|
|