convex 1.45.0 → 1.47.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 +105 -6
- package/dist/browser.bundle.js +7 -1
- package/dist/browser.bundle.js.map +2 -2
- package/dist/cjs/browser/http_client.js.map +2 -2
- package/dist/cjs/browser/query_options.js.map +2 -2
- package/dist/cjs/browser/simple_client.js.map +2 -2
- package/dist/cjs/browser/sync/optimistic_updates.js.map +1 -1
- package/dist/cjs/browser/sync/optimistic_updates_impl.js.map +2 -2
- package/dist/cjs/bundler/index.js +5 -4
- package/dist/cjs/bundler/index.js.map +2 -2
- package/dist/cjs/cli/codegen.js +0 -2
- package/dist/cjs/cli/codegen.js.map +2 -2
- package/dist/cjs/cli/configure.js +13 -4
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +28 -2
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentSelect.js +2 -2
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +6 -0
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/docs.js +3 -36
- package/dist/cjs/cli/docs.js.map +2 -2
- package/dist/cjs/cli/env.js +10 -5
- package/dist/cjs/cli/env.js.map +2 -2
- package/dist/cjs/cli/envDefault.js +7 -2
- package/dist/cjs/cli/envDefault.js.map +2 -2
- package/dist/cjs/cli/generatedApi.js.map +1 -1
- package/dist/cjs/cli/lib/api.js +2 -0
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js +113 -0
- package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js +100 -70
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +126 -0
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
- package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js +90 -0
- package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
- package/dist/cjs/cli/lib/codegen.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +2 -1
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/components/definition/bundle.js +37 -11
- package/dist/cjs/cli/lib/components/definition/bundle.js.map +2 -2
- package/dist/cjs/cli/lib/components.js +56 -1
- package/dist/cjs/cli/lib/components.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +56 -17
- package/dist/cjs/cli/lib/config.js.map +2 -2
- package/dist/cjs/cli/lib/deploy2.js +32 -3
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +101 -0
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js.map +7 -0
- package/dist/cjs/cli/lib/deployApi/finishPush.js +1 -0
- package/dist/cjs/cli/lib/deployApi/finishPush.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/startPush.js +1 -1
- package/dist/cjs/cli/lib/deployApi/startPush.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +6 -0
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/formatValidationProgress.js +47 -0
- package/dist/cjs/cli/lib/formatValidationProgress.js.map +7 -0
- package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
- package/dist/cjs/cli/lib/indexes.js.map +1 -1
- package/dist/cjs/cli/lib/localDeployment/run.js +30 -1
- package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +6 -5
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +5 -1
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/env.js +10 -3
- package/dist/cjs/cli/lib/mcp/tools/env.js.map +2 -2
- package/dist/cjs/cli/lib/run.js +5 -0
- package/dist/cjs/cli/lib/run.js.map +2 -2
- package/dist/cjs/cli/lib/schemaEvaluation.js +62 -0
- package/dist/cjs/cli/lib/schemaEvaluation.js.map +7 -0
- package/dist/cjs/cli/lib/usageLimits.js +4 -2
- package/dist/cjs/cli/lib/usageLimits.js.map +2 -2
- package/dist/cjs/cli/lib/utils/mutex.js +9 -24
- package/dist/cjs/cli/lib/utils/mutex.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +84 -47
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- package/dist/cjs/cli/projectCreate.js +1 -1
- package/dist/cjs/cli/projectCreate.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/nextjs/index.js.map +2 -2
- package/dist/cjs/react/client.js.map +2 -2
- package/dist/cjs/react/hydration.js.map +2 -2
- package/dist/cjs/react/queries_observer.js.map +2 -2
- package/dist/cjs/react/use_paginated_query2.js.map +2 -2
- package/dist/cjs/react/use_queries.js.map +2 -2
- package/dist/cjs/server/api.js.map +2 -2
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/cron.js +10 -10
- package/dist/cjs/server/cron.js.map +2 -2
- package/dist/cjs/server/impl/actions_impl.js +8 -3
- package/dist/cjs/server/impl/actions_impl.js.map +2 -2
- package/dist/cjs/server/impl/meta_impl.js +8 -2
- package/dist/cjs/server/impl/meta_impl.js.map +2 -2
- package/dist/cjs/server/impl/scheduler_impl.js.map +2 -2
- package/dist/cjs/server/impl/storage_impl.js +29 -0
- package/dist/cjs/server/impl/storage_impl.js.map +2 -2
- package/dist/cjs/server/index.js +1 -0
- 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/scheduler.js.map +1 -1
- package/dist/cjs/server/schema.js +72 -3
- package/dist/cjs/server/schema.js.map +2 -2
- package/dist/cjs/server/storage.js.map +1 -1
- package/dist/cjs/values/validator.js +1 -1
- package/dist/cjs/values/validator.js.map +2 -2
- package/dist/cjs/values/validators.js +82 -26
- package/dist/cjs/values/validators.js.map +2 -2
- package/dist/cjs/values/value.js +6 -0
- package/dist/cjs/values/value.js.map +2 -2
- package/dist/cjs-types/browser/http_client.d.ts +5 -5
- package/dist/cjs-types/browser/http_client.d.ts.map +1 -1
- package/dist/cjs-types/browser/query_options.d.ts +2 -2
- package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
- package/dist/cjs-types/browser/simple_client.d.ts +6 -6
- package/dist/cjs-types/browser/simple_client.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/optimistic_updates.d.ts +4 -4
- package/dist/cjs-types/browser/sync/optimistic_updates.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/optimistic_updates_impl.d.ts.map +1 -1
- package/dist/cjs-types/bundler/index.d.ts +9 -2
- package/dist/cjs-types/bundler/index.d.ts.map +1 -1
- package/dist/cjs-types/cli/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts +6 -0
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploy.d.ts +2 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +6 -6
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +1 -0
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/docs.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/generatedApi.d.ts +1 -1
- package/dist/cjs-types/cli/generatedApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
- package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts +25 -6
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +8 -0
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
- package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/codegen.d.ts +0 -2
- package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -0
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts +13 -0
- package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components.d.ts +5 -0
- package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +2 -1
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +8 -0
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +897 -0
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/deployApi/finishPush.d.ts +1 -2
- package/dist/cjs-types/cli/lib/deployApi/finishPush.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts +1 -0
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts +8 -0
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +2 -0
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.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/mcp/tools/env.d.ts +8 -5
- package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts +33 -0
- package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/usageLimits.d.ts +1 -1
- package/dist/cjs-types/cli/lib/usageLimits.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/mutex.d.ts +1 -3
- package/dist/cjs-types/cli/lib/utils/mutex.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +15 -7
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/nextjs/index.d.ts +6 -6
- package/dist/cjs-types/nextjs/index.d.ts.map +1 -1
- package/dist/cjs-types/react/client.d.ts +15 -15
- package/dist/cjs-types/react/client.d.ts.map +1 -1
- package/dist/cjs-types/react/hydration.d.ts +3 -3
- package/dist/cjs-types/react/hydration.d.ts.map +1 -1
- package/dist/cjs-types/react/queries_observer.d.ts +9 -9
- package/dist/cjs-types/react/queries_observer.d.ts.map +1 -1
- package/dist/cjs-types/react/use_paginated_query2.d.ts.map +1 -1
- package/dist/cjs-types/react/use_queries.d.ts +14 -6
- package/dist/cjs-types/react/use_queries.d.ts.map +1 -1
- package/dist/cjs-types/server/api.d.ts +157 -7
- package/dist/cjs-types/server/api.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +2 -2
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/cron.d.ts +21 -20
- package/dist/cjs-types/server/cron.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/actions_impl.d.ts +22 -7
- package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/scheduler_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/storage_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 +63 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/registration.d.ts +17 -7
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cjs-types/server/scheduler.d.ts +9 -7
- package/dist/cjs-types/server/scheduler.d.ts.map +1 -1
- package/dist/cjs-types/server/schema.d.ts +34 -0
- package/dist/cjs-types/server/schema.d.ts.map +1 -1
- package/dist/cjs-types/server/storage.d.ts.map +1 -1
- package/dist/cjs-types/values/validator.d.ts.map +1 -1
- package/dist/cjs-types/values/validators.d.ts +30 -0
- package/dist/cjs-types/values/validators.d.ts.map +1 -1
- package/dist/cjs-types/values/value.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +2728 -1627
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/http_client.js.map +2 -2
- package/dist/esm/browser/query_options.js.map +2 -2
- package/dist/esm/browser/simple_client.js.map +2 -2
- package/dist/esm/browser/sync/optimistic_updates_impl.js.map +2 -2
- package/dist/esm/bundler/index.js +5 -4
- package/dist/esm/bundler/index.js.map +2 -2
- package/dist/esm/cli/codegen.js +0 -2
- package/dist/esm/cli/codegen.js.map +2 -2
- package/dist/esm/cli/configure.js +12 -4
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +28 -2
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +6 -3
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +6 -0
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/docs.js +3 -43
- package/dist/esm/cli/docs.js.map +2 -2
- package/dist/esm/cli/env.js +11 -6
- package/dist/esm/cli/env.js.map +2 -2
- package/dist/esm/cli/envDefault.js +7 -2
- package/dist/esm/cli/envDefault.js.map +2 -2
- package/dist/esm/cli/lib/api.js +2 -0
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/checkForLargeIndexBackfill.js +95 -0
- package/dist/esm/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js +98 -69
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +107 -0
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
- package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js +68 -0
- package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
- package/dist/esm/cli/lib/codegen.js.map +2 -2
- package/dist/esm/cli/lib/command.js +2 -1
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/components/definition/bundle.js +37 -11
- package/dist/esm/cli/lib/components/definition/bundle.js.map +2 -2
- package/dist/esm/cli/lib/components.js +63 -1
- package/dist/esm/cli/lib/components.js.map +2 -2
- package/dist/esm/cli/lib/config.js +55 -17
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +33 -3
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js +72 -0
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js.map +7 -0
- package/dist/esm/cli/lib/deployApi/finishPush.js +1 -1
- package/dist/esm/cli/lib/deployApi/finishPush.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/startPush.js +1 -1
- package/dist/esm/cli/lib/deployApi/startPush.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +6 -0
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/formatValidationProgress.js +24 -0
- package/dist/esm/cli/lib/formatValidationProgress.js.map +7 -0
- package/dist/esm/cli/lib/indexes.js.map +1 -1
- package/dist/esm/cli/lib/localDeployment/run.js +30 -2
- package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js +4 -3
- package/dist/esm/cli/lib/localDeployment/upgrade.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/mcp/tools/env.js +10 -3
- package/dist/esm/cli/lib/mcp/tools/env.js.map +2 -2
- package/dist/esm/cli/lib/run.js +5 -0
- package/dist/esm/cli/lib/run.js.map +2 -2
- package/dist/esm/cli/lib/schemaEvaluation.js +39 -0
- package/dist/esm/cli/lib/schemaEvaluation.js.map +7 -0
- package/dist/esm/cli/lib/usageLimits.js +4 -2
- package/dist/esm/cli/lib/usageLimits.js.map +2 -2
- package/dist/esm/cli/lib/utils/mutex.js +9 -24
- package/dist/esm/cli/lib/utils/mutex.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +84 -49
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- package/dist/esm/cli/projectCreate.js +1 -1
- package/dist/esm/cli/projectCreate.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/nextjs/index.js.map +2 -2
- package/dist/esm/react/client.js.map +2 -2
- package/dist/esm/react/hydration.js +3 -1
- package/dist/esm/react/hydration.js.map +2 -2
- package/dist/esm/react/queries_observer.js +3 -1
- package/dist/esm/react/queries_observer.js.map +2 -2
- package/dist/esm/react/use_paginated_query2.js +3 -1
- package/dist/esm/react/use_paginated_query2.js.map +2 -2
- package/dist/esm/react/use_queries.js.map +2 -2
- package/dist/esm/server/api.js.map +2 -2
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/cron.js +13 -11
- package/dist/esm/server/cron.js.map +2 -2
- package/dist/esm/server/impl/actions_impl.js +7 -3
- package/dist/esm/server/impl/actions_impl.js.map +2 -2
- package/dist/esm/server/impl/meta_impl.js +9 -3
- package/dist/esm/server/impl/meta_impl.js.map +2 -2
- package/dist/esm/server/impl/scheduler_impl.js.map +2 -2
- package/dist/esm/server/impl/storage_impl.js +29 -0
- package/dist/esm/server/impl/storage_impl.js.map +2 -2
- package/dist/esm/server/index.js +4 -1
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/schema.js +72 -3
- package/dist/esm/server/schema.js.map +2 -2
- package/dist/esm/values/validator.js +1 -1
- package/dist/esm/values/validator.js.map +2 -2
- package/dist/esm/values/validators.js +82 -26
- package/dist/esm/values/validators.js.map +2 -2
- package/dist/esm/values/value.js +6 -0
- package/dist/esm/values/value.js.map +2 -2
- package/dist/esm-types/browser/http_client.d.ts +5 -5
- package/dist/esm-types/browser/http_client.d.ts.map +1 -1
- package/dist/esm-types/browser/query_options.d.ts +2 -2
- package/dist/esm-types/browser/query_options.d.ts.map +1 -1
- package/dist/esm-types/browser/simple_client.d.ts +6 -6
- package/dist/esm-types/browser/simple_client.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/optimistic_updates.d.ts +4 -4
- package/dist/esm-types/browser/sync/optimistic_updates.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/optimistic_updates_impl.d.ts.map +1 -1
- package/dist/esm-types/bundler/index.d.ts +9 -2
- package/dist/esm-types/bundler/index.d.ts.map +1 -1
- package/dist/esm-types/cli/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts +6 -0
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/deploy.d.ts +2 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +6 -6
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +1 -0
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/docs.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/generatedApi.d.ts +1 -1
- package/dist/esm-types/cli/generatedApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
- package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts +25 -6
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +8 -0
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
- package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/codegen.d.ts +0 -2
- package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -0
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components/definition/bundle.d.ts +13 -0
- package/dist/esm-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components.d.ts +5 -0
- package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +2 -1
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +8 -0
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +897 -0
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/deployApi/finishPush.d.ts +1 -2
- package/dist/esm-types/cli/lib/deployApi/finishPush.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts +1 -0
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts +8 -0
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts +2 -0
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/upgrade.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/mcp/tools/env.d.ts +8 -5
- package/dist/esm-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/schemaEvaluation.d.ts +33 -0
- package/dist/esm-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/usageLimits.d.ts +1 -1
- package/dist/esm-types/cli/lib/usageLimits.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/mutex.d.ts +1 -3
- package/dist/esm-types/cli/lib/utils/mutex.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +15 -7
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/nextjs/index.d.ts +6 -6
- package/dist/esm-types/nextjs/index.d.ts.map +1 -1
- package/dist/esm-types/react/client.d.ts +15 -15
- package/dist/esm-types/react/client.d.ts.map +1 -1
- package/dist/esm-types/react/hydration.d.ts +3 -3
- package/dist/esm-types/react/hydration.d.ts.map +1 -1
- package/dist/esm-types/react/queries_observer.d.ts +9 -9
- package/dist/esm-types/react/queries_observer.d.ts.map +1 -1
- package/dist/esm-types/react/use_paginated_query2.d.ts.map +1 -1
- package/dist/esm-types/react/use_queries.d.ts +14 -6
- package/dist/esm-types/react/use_queries.d.ts.map +1 -1
- package/dist/esm-types/server/api.d.ts +157 -7
- package/dist/esm-types/server/api.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +2 -2
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/cron.d.ts +21 -20
- package/dist/esm-types/server/cron.d.ts.map +1 -1
- package/dist/esm-types/server/impl/actions_impl.d.ts +22 -7
- package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/scheduler_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/storage_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 +63 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/registration.d.ts +17 -7
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/esm-types/server/scheduler.d.ts +9 -7
- package/dist/esm-types/server/scheduler.d.ts.map +1 -1
- package/dist/esm-types/server/schema.d.ts +34 -0
- package/dist/esm-types/server/schema.d.ts.map +1 -1
- package/dist/esm-types/server/storage.d.ts.map +1 -1
- package/dist/esm-types/values/validator.d.ts.map +1 -1
- package/dist/esm-types/values/validators.d.ts +30 -0
- package/dist/esm-types/values/validators.d.ts.map +1 -1
- package/dist/esm-types/values/value.d.ts.map +1 -1
- package/dist/react.bundle.js +7 -1
- package/dist/react.bundle.js.map +2 -2
- package/package.json +9 -9
- package/schemas/convex.schema.json +5 -5
- package/src/browser/http_client.ts +43 -10
- package/src/browser/query_options.ts +11 -5
- package/src/browser/simple_client.ts +35 -14
- package/src/browser/sync/optimistic_updates.ts +17 -4
- package/src/browser/sync/optimistic_updates_impl.ts +17 -4
- package/src/bundler/index.ts +9 -4
- package/src/cli/codegen.ts +0 -1
- package/src/cli/configure.ts +27 -7
- package/src/cli/deploy.ts +37 -5
- package/src/cli/deploymentSelect.ts +7 -4
- package/src/cli/dev.ts +9 -0
- package/src/cli/docs.ts +3 -44
- package/src/cli/env.ts +12 -6
- package/src/cli/envDefault.ts +8 -2
- package/src/cli/generatedApi.ts +1 -1
- package/src/cli/lib/api.ts +5 -1
- package/src/cli/lib/checkForLargeIndexBackfill.ts +173 -0
- package/src/cli/lib/checkForLargeIndexDeletion.ts +150 -91
- package/src/cli/lib/checkForSlowSchemaValidation.ts +141 -0
- package/src/cli/lib/checkForStagedValidatorDeletion.ts +104 -0
- package/src/cli/lib/codegen.ts +0 -2
- package/src/cli/lib/command.ts +3 -0
- package/src/cli/lib/components/definition/bundle.ts +68 -14
- package/src/cli/lib/components.ts +84 -0
- package/src/cli/lib/config.ts +85 -18
- package/src/cli/lib/deploy2.ts +66 -2
- package/src/cli/lib/deployApi/evaluateSchema.ts +97 -0
- package/src/cli/lib/deployApi/finishPush.ts +1 -1
- package/src/cli/lib/deployApi/startPush.ts +1 -1
- package/src/cli/lib/dev.ts +15 -0
- package/src/cli/lib/formatValidationProgress.ts +35 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
- package/src/cli/lib/indexes.ts +1 -1
- package/src/cli/lib/localDeployment/run.ts +44 -2
- package/src/cli/lib/localDeployment/upgrade.ts +4 -6
- package/src/cli/lib/localDeployment/utils.ts +6 -0
- package/src/cli/lib/mcp/tools/env.ts +17 -3
- package/src/cli/lib/run.ts +3 -0
- package/src/cli/lib/schemaEvaluation.ts +88 -0
- package/src/cli/lib/usageLimits.ts +2 -0
- package/src/cli/lib/utils/mutex.ts +9 -27
- package/src/cli/lib/utils/utils.ts +127 -56
- package/src/cli/projectCreate.ts +1 -1
- package/src/index.ts +1 -1
- package/src/nextjs/index.ts +19 -8
- package/src/react/client.ts +73 -30
- package/src/react/hydration.tsx +14 -6
- package/src/react/queries_observer.ts +19 -16
- package/src/react/use_paginated_query2.ts +10 -6
- package/src/react/use_queries.ts +23 -7
- package/src/server/api.ts +220 -14
- package/src/server/components/index.ts +4 -6
- package/src/server/cron.ts +34 -24
- package/src/server/impl/actions_impl.ts +39 -10
- package/src/server/impl/meta_impl.ts +8 -1
- package/src/server/impl/scheduler_impl.ts +13 -6
- package/src/server/impl/storage_impl.ts +30 -0
- package/src/server/index.ts +6 -1
- package/src/server/meta.ts +79 -0
- package/src/server/registration.ts +38 -7
- package/src/server/scheduler.ts +22 -7
- package/src/server/schema.ts +77 -0
- package/src/server/storage.ts +17 -0
- package/src/values/validator.ts +3 -1
- package/src/values/validators.ts +85 -27
- package/src/values/value.ts +9 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/usageLimits.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n GetCurrentUsageResponse,\n UsageLimitConfigRequest,\n UsageLimitConfigResponse,\n UsageLimitMetric,\n} from \"@convex-dev/platform/deploymentApi\";\nimport { Context } from \"../../bundler/context.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\n\nexport type UsageLimitDeployment = {\n deploymentUrl: string;\n adminKey: string;\n};\n\nexport const USAGE_LIMIT_METRICS = [\n \"functionCalls\",\n \"queryMutationComputeGbHours\",\n \"actionComputeConvexGbHours\",\n \"actionComputeNodeJsGbHours\",\n \"actionComputeCpuGbHours\",\n \"databaseIoGb\",\n \"searchQueryGb\",\n \"dataEgressGb\",\n] as const satisfies readonly UsageLimitMetric[];\n\n// Fails to compile if the backend's `UsageLimitMetric` gains a metric not listed\n// above, so the CLI's `--metric` choices and ordering stay complete.\ntype MissingMetric = Exclude<\n UsageLimitMetric,\n (typeof USAGE_LIMIT_METRICS)[number]\n>;\nconst _metricsExhaustive: [MissingMetric] extends [never] ? true : never = true;\nvoid _metricsExhaustive;\n\nexport const USAGE_LIMIT_WINDOWS = [\"day\", \"month\"] as const;\nexport type UsageLimitWindow = (typeof USAGE_LIMIT_WINDOWS)[number];\n\nexport const USAGE_LIMIT_TYPES = [\"warning\", \"disable\"] as const;\nexport type UsageLimitType = (typeof USAGE_LIMIT_TYPES)[number];\n\nexport const METRIC_LABELS: Record<UsageLimitMetric, string> = {\n functionCalls: \"Function calls\",\n queryMutationComputeGbHours: \"Query/Mutation compute\",\n actionComputeConvexGbHours: \"Action compute\",\n actionComputeNodeJsGbHours: \"Action compute (Node.js)\",\n actionComputeCpuGbHours: \"Action compute (CPU)\",\n databaseIoGb: \"Database I/O\",\n searchQueryGb: \"Search queries\",\n dataEgressGb: \"Data egress\",\n};\n\nexport function metricLabel(metric: string): string {\n // Look up permissively: a newer backend may report a metric this CLI's label\n // map doesn't know, in which case fall back to the raw id.\n return (METRIC_LABELS as Record<string, string>)[metric] ?? metric;\n}\n\nasync function usageLimitFetch(\n ctx: Context,\n deployment: UsageLimitDeployment,\n path: string,\n init?: { method?: string; body?: unknown },\n): Promise<unknown> {\n const fetch = deploymentFetch(ctx, deployment);\n try {\n const response = await fetch(`/api/v1${path}`, {\n method: init?.method ?? \"GET\",\n ...(init?.body !== undefined ? { body: JSON.stringify(init.body) } : {}),\n });\n const text = await response.text();\n return text.length > 0 ? JSON.parse(text) : undefined;\n } catch (e) {\n return await logAndHandleFetchError(ctx, e);\n }\n}\n\nexport async function listUsageLimits(\n ctx: Context,\n deployment: UsageLimitDeployment,\n): Promise<UsageLimitConfigResponse[]> {\n const result = (await usageLimitFetch(\n ctx,\n deployment,\n \"/list_usage_limits\",\n )) as {\n usageLimits: UsageLimitConfigResponse[];\n };\n return result.usageLimits;\n}\n\nexport async function createUsageLimit(\n ctx: Context,\n deployment: UsageLimitDeployment,\n config: UsageLimitConfigRequest,\n): Promise<UsageLimitConfigResponse> {\n const result = (await usageLimitFetch(\n ctx,\n deployment,\n \"/create_usage_limit\",\n {\n method: \"POST\",\n body: config,\n },\n )) as { usageLimit: UsageLimitConfigResponse };\n return result.usageLimit;\n}\n\nexport async function updateUsageLimit(\n ctx: Context,\n deployment: UsageLimitDeployment,\n id: string,\n config: UsageLimitConfigRequest,\n): Promise<UsageLimitConfigResponse> {\n const result = (await usageLimitFetch(\n ctx,\n deployment,\n `/update_usage_limit/${id}`,\n { method: \"POST\", body: config },\n )) as { usageLimit: UsageLimitConfigResponse };\n return result.usageLimit;\n}\n\nexport async function deleteUsageLimit(\n ctx: Context,\n deployment: UsageLimitDeployment,\n id: string,\n): Promise<void> {\n await usageLimitFetch(ctx, deployment, `/delete_usage_limit/${id}`, {\n method: \"POST\",\n });\n}\n\nexport async function getCurrentUsage(\n ctx: Context,\n deployment: UsageLimitDeployment,\n): Promise<GetCurrentUsageResponse> {\n return (await usageLimitFetch(\n ctx,\n deployment,\n \"/get_current_usage\",\n )) as GetCurrentUsageResponse;\n}\n\nfunction metricRank(metric: string): number {\n const i = (USAGE_LIMIT_METRICS as readonly string[]).indexOf(metric);\n // Unknown metrics (e.g. a newer backend adds one) sort last, stably.\n return i === -1 ? USAGE_LIMIT_METRICS.length : i;\n}\n\n// Windows coarsest-first and warning-before-disable,.\nconst windowRank = (w: string) => (w === \"month\" ? 0 : 1);\nconst typeRank = (t: string) => (t === \"warning\" ? 0 : 1);\n\nexport function compareUsageLimits(\n a: { metric: string; window: string; limitType: string },\n b: { metric: string; window: string; limitType: string },\n): number {\n return (\n metricRank(a.metric) - metricRank(b.metric) ||\n windowRank(a.window) - windowRank(b.window) ||\n typeRank(a.limitType) - typeRank(b.limitType)\n );\n}\n\nexport function compareMetricNames(a: string, b: string): number {\n return metricRank(a) - metricRank(b);\n}\n\n// A limit annotated with the current usage in its window and whether it's\n// currently triggered.\nexport type UsageLimitStatus = UsageLimitConfigResponse & {\n currentUsage: number | null;\n unit: string | null;\n triggered: boolean;\n};\n\nfunction usageInWindow(\n usage: GetCurrentUsageResponse,\n metric: string,\n window: string,\n): number | null {\n const m = usage.metrics[metric];\n if (m === undefined) {\n return null;\n }\n return window === \"day\" ? m.usage.current_day : m.usage.current_month;\n}\n\n// List usage limits annotated with current usage and triggered state, sorted in\n// dashboard order. Fetches the limits and current usage together.\nexport async function listUsageLimitsWithStatus(\n ctx: Context,\n deployment: UsageLimitDeployment,\n): Promise<{\n limits: UsageLimitStatus[];\n seedStatus: GetCurrentUsageResponse[\"seedStatus\"];\n}> {\n const [limits, usage] = await Promise.all([\n listUsageLimits(ctx, deployment),\n getCurrentUsage(ctx, deployment),\n ]);\n const withStatus = limits\n .map((limit): UsageLimitStatus => {\n const currentUsage = usageInWindow(usage, limit.metric, limit.window);\n const unit = usage.metrics[limit.metric]?.unit ?? null;\n const triggered =\n limit.enabled && currentUsage !== null && currentUsage >= limit.limit;\n return { ...limit, currentUsage, unit, triggered };\n })\n .sort(compareUsageLimits);\n return { limits: withStatus, seedStatus: usage.seedStatus };\n}\n\n// A usage limit is uniquely identified by (metric, window, limitType) \u2014 the\n// same key the backend enforces uniqueness on. The HTTP API addresses limits by\n// document id, so callers who know the natural key list and resolve it here.\nexport type UsageLimitKey = {\n metric: UsageLimitMetric;\n window: string;\n limitType: string;\n};\n\nexport async function findUsageLimitByKey(\n ctx: Context,\n deployment: UsageLimitDeployment & { deploymentNotice: string },\n key: UsageLimitKey,\n): Promise<UsageLimitConfigResponse> {\n const match = (await listUsageLimits(ctx, deployment)).find(\n (limit) =>\n limit.metric === key.metric &&\n limit.window === key.window &&\n limit.limitType === key.limitType,\n );\n if (match === undefined) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `error: No ${key.limitType} usage limit on ${key.metric} per ${key.window}${deployment.deploymentNotice}.`,\n });\n }\n return match;\n}\n"],
|
|
5
|
-
"mappings": ";AAOA,SAAS,iBAAiB,8BAA8B;AAOjD,aAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQA,MAAM,qBAAqE;AAC3E,KAAK;AAEE,aAAM,sBAAsB,CAAC,OAAO,OAAO;AAG3C,aAAM,oBAAoB,CAAC,WAAW,SAAS;AAG/C,aAAM,gBAAkD;AAAA,EAC7D,eAAe;AAAA,EACf,6BAA6B;AAAA,EAC7B,4BAA4B;AAAA,EAC5B,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;
|
|
4
|
+
"sourcesContent": ["import type {\n GetCurrentUsageResponse,\n UsageLimitConfigRequest,\n UsageLimitConfigResponse,\n UsageLimitMetric,\n} from \"@convex-dev/platform/deploymentApi\";\nimport { Context } from \"../../bundler/context.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\n\nexport type UsageLimitDeployment = {\n deploymentUrl: string;\n adminKey: string;\n};\n\nexport const USAGE_LIMIT_METRICS = [\n \"functionCalls\",\n \"queryMutationComputeGbHours\",\n \"actionComputeConvexGbHours\",\n \"actionComputeNodeJsGbHours\",\n \"actionComputeCpuGbHours\",\n \"databaseIoGb\",\n \"searchQueryGb\",\n \"dataEgressGb\",\n \"aiGatewayCostDollars\",\n] as const satisfies readonly UsageLimitMetric[];\n\n// Fails to compile if the backend's `UsageLimitMetric` gains a metric not listed\n// above, so the CLI's `--metric` choices and ordering stay complete.\ntype MissingMetric = Exclude<\n UsageLimitMetric,\n (typeof USAGE_LIMIT_METRICS)[number]\n>;\nconst _metricsExhaustive: [MissingMetric] extends [never] ? true : never = true;\nvoid _metricsExhaustive;\n\nexport const USAGE_LIMIT_WINDOWS = [\"day\", \"month\"] as const;\nexport type UsageLimitWindow = (typeof USAGE_LIMIT_WINDOWS)[number];\n\nexport const USAGE_LIMIT_TYPES = [\"warning\", \"disable\"] as const;\nexport type UsageLimitType = (typeof USAGE_LIMIT_TYPES)[number];\n\nexport const METRIC_LABELS: Record<UsageLimitMetric, string> = {\n functionCalls: \"Function calls\",\n queryMutationComputeGbHours: \"Query/Mutation compute\",\n actionComputeConvexGbHours: \"Action compute\",\n actionComputeNodeJsGbHours: \"Action compute (Node.js)\",\n actionComputeCpuGbHours: \"Action compute (CPU)\",\n databaseIoGb: \"Database I/O\",\n searchQueryGb: \"Search queries\",\n dataEgressGb: \"Data egress\",\n aiGatewayCostDollars: \"AI Gateway\",\n};\n\nexport function metricLabel(metric: string): string {\n // Look up permissively: a newer backend may report a metric this CLI's label\n // map doesn't know, in which case fall back to the raw id.\n return (METRIC_LABELS as Record<string, string>)[metric] ?? metric;\n}\n\nasync function usageLimitFetch(\n ctx: Context,\n deployment: UsageLimitDeployment,\n path: string,\n init?: { method?: string; body?: unknown },\n): Promise<unknown> {\n const fetch = deploymentFetch(ctx, deployment);\n try {\n const response = await fetch(`/api/v1${path}`, {\n method: init?.method ?? \"GET\",\n ...(init?.body !== undefined ? { body: JSON.stringify(init.body) } : {}),\n });\n const text = await response.text();\n return text.length > 0 ? JSON.parse(text) : undefined;\n } catch (e) {\n return await logAndHandleFetchError(ctx, e);\n }\n}\n\nexport async function listUsageLimits(\n ctx: Context,\n deployment: UsageLimitDeployment,\n): Promise<UsageLimitConfigResponse[]> {\n const result = (await usageLimitFetch(\n ctx,\n deployment,\n \"/list_usage_limits\",\n )) as {\n usageLimits: UsageLimitConfigResponse[];\n };\n return result.usageLimits;\n}\n\nexport async function createUsageLimit(\n ctx: Context,\n deployment: UsageLimitDeployment,\n config: UsageLimitConfigRequest,\n): Promise<UsageLimitConfigResponse> {\n const result = (await usageLimitFetch(\n ctx,\n deployment,\n \"/create_usage_limit\",\n {\n method: \"POST\",\n body: config,\n },\n )) as { usageLimit: UsageLimitConfigResponse };\n return result.usageLimit;\n}\n\nexport async function updateUsageLimit(\n ctx: Context,\n deployment: UsageLimitDeployment,\n id: string,\n config: UsageLimitConfigRequest,\n): Promise<UsageLimitConfigResponse> {\n const result = (await usageLimitFetch(\n ctx,\n deployment,\n `/update_usage_limit/${id}`,\n { method: \"POST\", body: config },\n )) as { usageLimit: UsageLimitConfigResponse };\n return result.usageLimit;\n}\n\nexport async function deleteUsageLimit(\n ctx: Context,\n deployment: UsageLimitDeployment,\n id: string,\n): Promise<void> {\n await usageLimitFetch(ctx, deployment, `/delete_usage_limit/${id}`, {\n method: \"POST\",\n });\n}\n\nexport async function getCurrentUsage(\n ctx: Context,\n deployment: UsageLimitDeployment,\n): Promise<GetCurrentUsageResponse> {\n return (await usageLimitFetch(\n ctx,\n deployment,\n \"/get_current_usage\",\n )) as GetCurrentUsageResponse;\n}\n\nfunction metricRank(metric: string): number {\n const i = (USAGE_LIMIT_METRICS as readonly string[]).indexOf(metric);\n // Unknown metrics (e.g. a newer backend adds one) sort last, stably.\n return i === -1 ? USAGE_LIMIT_METRICS.length : i;\n}\n\n// Windows coarsest-first and warning-before-disable,.\nconst windowRank = (w: string) => (w === \"month\" ? 0 : 1);\nconst typeRank = (t: string) => (t === \"warning\" ? 0 : 1);\n\nexport function compareUsageLimits(\n a: { metric: string; window: string; limitType: string },\n b: { metric: string; window: string; limitType: string },\n): number {\n return (\n metricRank(a.metric) - metricRank(b.metric) ||\n windowRank(a.window) - windowRank(b.window) ||\n typeRank(a.limitType) - typeRank(b.limitType)\n );\n}\n\nexport function compareMetricNames(a: string, b: string): number {\n return metricRank(a) - metricRank(b);\n}\n\n// A limit annotated with the current usage in its window and whether it's\n// currently triggered.\nexport type UsageLimitStatus = UsageLimitConfigResponse & {\n currentUsage: number | null;\n unit: string | null;\n triggered: boolean;\n};\n\nfunction usageInWindow(\n usage: GetCurrentUsageResponse,\n metric: string,\n window: string,\n): number | null {\n const m = usage.metrics[metric];\n if (m === undefined) {\n return null;\n }\n return window === \"day\" ? m.usage.current_day : m.usage.current_month;\n}\n\n// List usage limits annotated with current usage and triggered state, sorted in\n// dashboard order. Fetches the limits and current usage together.\nexport async function listUsageLimitsWithStatus(\n ctx: Context,\n deployment: UsageLimitDeployment,\n): Promise<{\n limits: UsageLimitStatus[];\n seedStatus: GetCurrentUsageResponse[\"seedStatus\"];\n}> {\n const [limits, usage] = await Promise.all([\n listUsageLimits(ctx, deployment),\n getCurrentUsage(ctx, deployment),\n ]);\n const withStatus = limits\n .map((limit): UsageLimitStatus => {\n const currentUsage = usageInWindow(usage, limit.metric, limit.window);\n const unit = usage.metrics[limit.metric]?.unit ?? null;\n const triggered =\n limit.enabled && currentUsage !== null && currentUsage >= limit.limit;\n return { ...limit, currentUsage, unit, triggered };\n })\n .sort(compareUsageLimits);\n return { limits: withStatus, seedStatus: usage.seedStatus };\n}\n\n// A usage limit is uniquely identified by (metric, window, limitType) \u2014 the\n// same key the backend enforces uniqueness on. The HTTP API addresses limits by\n// document id, so callers who know the natural key list and resolve it here.\nexport type UsageLimitKey = {\n metric: UsageLimitMetric;\n window: string;\n limitType: string;\n};\n\nexport async function findUsageLimitByKey(\n ctx: Context,\n deployment: UsageLimitDeployment & { deploymentNotice: string },\n key: UsageLimitKey,\n): Promise<UsageLimitConfigResponse> {\n const match = (await listUsageLimits(ctx, deployment)).find(\n (limit) =>\n limit.metric === key.metric &&\n limit.window === key.window &&\n limit.limitType === key.limitType,\n );\n if (match === undefined) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `error: No ${key.limitType} usage limit on ${key.metric} per ${key.window}${deployment.deploymentNotice}.`,\n });\n }\n return match;\n}\n"],
|
|
5
|
+
"mappings": ";AAOA,SAAS,iBAAiB,8BAA8B;AAOjD,aAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQA,MAAM,qBAAqE;AAC3E,KAAK;AAEE,aAAM,sBAAsB,CAAC,OAAO,OAAO;AAG3C,aAAM,oBAAoB,CAAC,WAAW,SAAS;AAG/C,aAAM,gBAAkD;AAAA,EAC7D,eAAe;AAAA,EACf,6BAA6B;AAAA,EAC7B,4BAA4B;AAAA,EAC5B,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,sBAAsB;AACxB;AAEO,gBAAS,YAAY,QAAwB;AAGlD,SAAQ,cAAyC,MAAM,KAAK;AAC9D;AAEA,eAAe,gBACb,KACA,YACA,MACA,MACkB;AAClB,QAAM,QAAQ,gBAAgB,KAAK,UAAU;AAC7C,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,UAAU,IAAI,IAAI;AAAA,MAC7C,QAAQ,MAAM,UAAU;AAAA,MACxB,GAAI,MAAM,SAAS,SAAY,EAAE,MAAM,KAAK,UAAU,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,IACxE,CAAC;AACD,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,KAAK,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI;AAAA,EAC9C,SAAS,GAAG;AACV,WAAO,MAAM,uBAAuB,KAAK,CAAC;AAAA,EAC5C;AACF;AAEA,sBAAsB,gBACpB,KACA,YACqC;AACrC,QAAM,SAAU,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,SAAO,OAAO;AAChB;AAEA,sBAAsB,iBACpB,KACA,YACA,QACmC;AACnC,QAAM,SAAU,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AACA,SAAO,OAAO;AAChB;AAEA,sBAAsB,iBACpB,KACA,YACA,IACA,QACmC;AACnC,QAAM,SAAU,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA,uBAAuB,EAAE;AAAA,IACzB,EAAE,QAAQ,QAAQ,MAAM,OAAO;AAAA,EACjC;AACA,SAAO,OAAO;AAChB;AAEA,sBAAsB,iBACpB,KACA,YACA,IACe;AACf,QAAM,gBAAgB,KAAK,YAAY,uBAAuB,EAAE,IAAI;AAAA,IAClE,QAAQ;AAAA,EACV,CAAC;AACH;AAEA,sBAAsB,gBACpB,KACA,YACkC;AAClC,SAAQ,MAAM;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,WAAW,QAAwB;AAC1C,QAAM,IAAK,oBAA0C,QAAQ,MAAM;AAEnE,SAAO,MAAM,KAAK,oBAAoB,SAAS;AACjD;AAGA,MAAM,aAAa,CAAC,MAAe,MAAM,UAAU,IAAI;AACvD,MAAM,WAAW,CAAC,MAAe,MAAM,YAAY,IAAI;AAEhD,gBAAS,mBACd,GACA,GACQ;AACR,SACE,WAAW,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,KAC1C,WAAW,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,KAC1C,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE,SAAS;AAEhD;AAEO,gBAAS,mBAAmB,GAAW,GAAmB;AAC/D,SAAO,WAAW,CAAC,IAAI,WAAW,CAAC;AACrC;AAUA,SAAS,cACP,OACA,QACA,QACe;AACf,QAAM,IAAI,MAAM,QAAQ,MAAM;AAC9B,MAAI,MAAM,QAAW;AACnB,WAAO;AAAA,EACT;AACA,SAAO,WAAW,QAAQ,EAAE,MAAM,cAAc,EAAE,MAAM;AAC1D;AAIA,sBAAsB,0BACpB,KACA,YAIC;AACD,QAAM,CAAC,QAAQ,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,IACxC,gBAAgB,KAAK,UAAU;AAAA,IAC/B,gBAAgB,KAAK,UAAU;AAAA,EACjC,CAAC;AACD,QAAM,aAAa,OAChB,IAAI,CAAC,UAA4B;AAChC,UAAM,eAAe,cAAc,OAAO,MAAM,QAAQ,MAAM,MAAM;AACpE,UAAM,OAAO,MAAM,QAAQ,MAAM,MAAM,GAAG,QAAQ;AAClD,UAAM,YACJ,MAAM,WAAW,iBAAiB,QAAQ,gBAAgB,MAAM;AAClE,WAAO,EAAE,GAAG,OAAO,cAAc,MAAM,UAAU;AAAA,EACnD,CAAC,EACA,KAAK,kBAAkB;AAC1B,SAAO,EAAE,QAAQ,YAAY,YAAY,MAAM,WAAW;AAC5D;AAWA,sBAAsB,oBACpB,KACA,YACA,KACmC;AACnC,QAAM,SAAS,MAAM,gBAAgB,KAAK,UAAU,GAAG;AAAA,IACrD,CAAC,UACC,MAAM,WAAW,IAAI,UACrB,MAAM,WAAW,IAAI,UACrB,MAAM,cAAc,IAAI;AAAA,EAC5B;AACA,MAAI,UAAU,QAAW;AACvB,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB,aAAa,IAAI,SAAS,mBAAmB,IAAI,MAAM,QAAQ,IAAI,MAAM,GAAG,WAAW,gBAAgB;AAAA,IACzH,CAAC;AAAA,EACH;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -4,32 +4,17 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
export class Mutex {
|
|
6
6
|
constructor() {
|
|
7
|
-
__publicField(this, "
|
|
8
|
-
__publicField(this, "waiting", []);
|
|
7
|
+
__publicField(this, "tail", Promise.resolve());
|
|
9
8
|
}
|
|
10
9
|
async runExclusive(fn) {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
enqueueCallbackForMutex(callback) {
|
|
20
|
-
if (this.currentlyRunning === null) {
|
|
21
|
-
this.currentlyRunning = callback().finally(() => {
|
|
22
|
-
const nextCb = this.waiting.shift();
|
|
23
|
-
if (nextCb === void 0) {
|
|
24
|
-
this.currentlyRunning = null;
|
|
25
|
-
} else {
|
|
26
|
-
this.enqueueCallbackForMutex(nextCb);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
this.waiting.length = 0;
|
|
30
|
-
} else {
|
|
31
|
-
this.waiting.push(callback);
|
|
32
|
-
}
|
|
10
|
+
const result = this.tail.then(fn);
|
|
11
|
+
this.tail = result.then(
|
|
12
|
+
() => {
|
|
13
|
+
},
|
|
14
|
+
() => {
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
return result;
|
|
33
18
|
}
|
|
34
19
|
}
|
|
35
20
|
//# sourceMappingURL=mutex.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/cli/lib/utils/mutex.ts"],
|
|
4
|
-
"sourcesContent": ["export class Mutex {\n
|
|
5
|
-
"mappings": ";;;;AAAO,aAAM,MAAM;AAAA,EAAZ;AACL,
|
|
4
|
+
"sourcesContent": ["export class Mutex {\n private tail: Promise<void> = Promise.resolve();\n\n async runExclusive<T>(fn: () => Promise<T>): Promise<T> {\n const result = this.tail.then(fn);\n // Reserve the next position before running fn, and allow the queue to\n // continue even if fn rejects or throws synchronously.\n this.tail = result.then(\n () => {},\n () => {},\n );\n return result;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;AAAO,aAAM,MAAM;AAAA,EAAZ;AACL,wBAAQ,QAAsB,QAAQ,QAAQ;AAAA;AAAA,EAE9C,MAAM,aAAgB,IAAkC;AACtD,UAAM,SAAS,KAAK,KAAK,KAAK,EAAE;AAGhC,SAAK,OAAO,OAAO;AAAA,MACjB,MAAM;AAAA,MAAC;AAAA,MACP,MAAM;AAAA,MAAC;AAAA,IACT;AACA,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -328,6 +328,16 @@ export async function selectRegionOrUseDefault(ctx, selectedTeam, deploymentType
|
|
|
328
328
|
}
|
|
329
329
|
return selectedRegionName;
|
|
330
330
|
}
|
|
331
|
+
const REGION_ORDER = [
|
|
332
|
+
"aws-us-east-1",
|
|
333
|
+
"aws-eu-west-1",
|
|
334
|
+
"aws-ca-central-1",
|
|
335
|
+
"aws-ap-southeast-2"
|
|
336
|
+
];
|
|
337
|
+
function regionSortIndex(regionName) {
|
|
338
|
+
const index = REGION_ORDER.indexOf(regionName);
|
|
339
|
+
return index === -1 ? REGION_ORDER.length : index;
|
|
340
|
+
}
|
|
331
341
|
export async function selectRegion(ctx, teamId, deploymentType) {
|
|
332
342
|
const regionsResponse = (await typedPlatformClient(ctx).GET(
|
|
333
343
|
"/teams/{team_id}/list_deployment_regions",
|
|
@@ -340,11 +350,7 @@ export async function selectRegion(ctx, teamId, deploymentType) {
|
|
|
340
350
|
const choices = regionsResponse.items.filter((item) => Boolean(item.available)).map((item) => ({
|
|
341
351
|
name: item.displayName,
|
|
342
352
|
value: item.name
|
|
343
|
-
})).sort((a, b) =>
|
|
344
|
-
if (a.value === "aws-us-east-1") return -1;
|
|
345
|
-
if (b.value === "aws-us-east-1") return 1;
|
|
346
|
-
return 0;
|
|
347
|
-
});
|
|
353
|
+
})).sort((a, b) => regionSortIndex(a.value) - regionSortIndex(b.value));
|
|
348
354
|
return await promptOptions(ctx, {
|
|
349
355
|
message: `Where should this ${deploymentType} deployment run?`,
|
|
350
356
|
suffix: `
|
|
@@ -356,14 +362,18 @@ ${chalkStderr.gray(
|
|
|
356
362
|
}
|
|
357
363
|
export async function hasProject(ctx, teamSlug, projectSlug) {
|
|
358
364
|
try {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
365
|
+
await typedPlatformClient(ctx, { throw: true }).GET(
|
|
366
|
+
"/teams/{team_id_or_slug}/projects/{project_slug}",
|
|
367
|
+
{
|
|
368
|
+
params: {
|
|
369
|
+
path: {
|
|
370
|
+
team_id_or_slug: teamSlug,
|
|
371
|
+
project_slug: projectSlug
|
|
372
|
+
}
|
|
363
373
|
}
|
|
364
374
|
}
|
|
365
|
-
|
|
366
|
-
return
|
|
375
|
+
);
|
|
376
|
+
return true;
|
|
367
377
|
} catch {
|
|
368
378
|
return false;
|
|
369
379
|
}
|
|
@@ -371,14 +381,20 @@ export async function hasProject(ctx, teamSlug, projectSlug) {
|
|
|
371
381
|
export async function hasProjects(ctx) {
|
|
372
382
|
return !!await bigBrainAPI({ ctx, method: "GET", path: `has_projects` });
|
|
373
383
|
}
|
|
374
|
-
export async function validateOrSelectProject(ctx, projectSlug,
|
|
375
|
-
const projects =
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
384
|
+
export async function validateOrSelectProject(ctx, projectSlug, teamId, singleProjectPrompt, multiProjectPrompt) {
|
|
385
|
+
const projects = [];
|
|
386
|
+
const client = typedPlatformClient(ctx);
|
|
387
|
+
let cursor;
|
|
388
|
+
do {
|
|
389
|
+
const { items, pagination } = (await client.GET("/teams/{team_id}/projects", {
|
|
390
|
+
params: {
|
|
391
|
+
path: { team_id: teamId },
|
|
392
|
+
query: cursor === void 0 ? {} : { cursor }
|
|
379
393
|
}
|
|
380
|
-
}
|
|
381
|
-
|
|
394
|
+
})).data;
|
|
395
|
+
projects.push(...items);
|
|
396
|
+
cursor = pagination.hasMore ? pagination.nextCursor ?? void 0 : void 0;
|
|
397
|
+
} while (cursor !== void 0);
|
|
382
398
|
if (projects.length === 0) {
|
|
383
399
|
return await ctx.crash({
|
|
384
400
|
exitCode: 1,
|
|
@@ -631,32 +647,34 @@ export function waitUntilCalled() {
|
|
|
631
647
|
const waitPromise = new Promise((resolve) => onCalled = resolve);
|
|
632
648
|
return [waitPromise, () => onCalled(null)];
|
|
633
649
|
}
|
|
634
|
-
const BYTE_UNITS = [
|
|
635
|
-
[1 << 30, "GiB"],
|
|
636
|
-
[1e9, "GB"],
|
|
637
|
-
[1 << 20, "MiB"],
|
|
638
|
-
[1e6, "MB"],
|
|
639
|
-
[1 << 10, "KiB"],
|
|
640
|
-
[1e3, "KB"]
|
|
641
|
-
];
|
|
650
|
+
const BYTE_UNITS = ["bytes", "KiB", "MiB", "GiB", "TiB", "PiB"];
|
|
642
651
|
export function formatSize(n) {
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
652
|
+
let value = n;
|
|
653
|
+
let unitIndex = 0;
|
|
654
|
+
while (value >= 1024 && unitIndex < BYTE_UNITS.length - 1) {
|
|
655
|
+
value /= 1024;
|
|
656
|
+
unitIndex++;
|
|
657
|
+
}
|
|
658
|
+
const roundedValue = Number(value.toFixed(1));
|
|
659
|
+
if (roundedValue >= 1024 && unitIndex < BYTE_UNITS.length - 1) {
|
|
660
|
+
value /= 1024;
|
|
661
|
+
unitIndex++;
|
|
662
|
+
}
|
|
663
|
+
const formatted = value.toFixed(1).replace(/\.0$/, "");
|
|
664
|
+
return `${formatted} ${BYTE_UNITS[unitIndex]}`;
|
|
665
|
+
}
|
|
666
|
+
export function integerFromEnv(envVar, defaultValue) {
|
|
667
|
+
const envValue = process.env[envVar];
|
|
668
|
+
if (envValue === void 0) {
|
|
669
|
+
return defaultValue;
|
|
670
|
+
}
|
|
671
|
+
if (!/^[+-]?\d+$/.test(envValue.trim())) {
|
|
672
|
+
logWarning(
|
|
673
|
+
`Ignoring ${envVar}=${JSON.stringify(envValue)}: expected an integer, using ${defaultValue}`
|
|
674
|
+
);
|
|
675
|
+
return defaultValue;
|
|
658
676
|
}
|
|
659
|
-
return
|
|
677
|
+
return Number(envValue);
|
|
660
678
|
}
|
|
661
679
|
export function formatDuration(ms) {
|
|
662
680
|
const twoDigits = (n, unit) => `${n.toLocaleString("en-US", { maximumFractionDigits: 2 })}${unit}`;
|
|
@@ -780,13 +798,13 @@ export function spawnAsync(_ctx, command, args, options) {
|
|
|
780
798
|
});
|
|
781
799
|
}
|
|
782
800
|
const IDEMPOTENT_METHODS = ["GET", "HEAD", "PUT", "DELETE", "OPTIONS", "TRACE"];
|
|
783
|
-
function retryDelay(attempt, _error, _response) {
|
|
801
|
+
export function retryDelay(attempt, _error, _response) {
|
|
784
802
|
const delay = attempt === 0 ? 1 : 2 ** (attempt - 1) * 1e3;
|
|
785
803
|
const randomSum = delay * 0.2 * Math.random();
|
|
786
804
|
return delay + randomSum;
|
|
787
805
|
}
|
|
788
|
-
function deploymentFetchRetryOn(onError, method) {
|
|
789
|
-
const
|
|
806
|
+
function deploymentFetchRetryOn(onError, method, maxRetries = MAX_RETRIES, shouldRetryOverride) {
|
|
807
|
+
const defaultShouldRetry = function(_attempt, error, response) {
|
|
790
808
|
if (error !== null) {
|
|
791
809
|
return { kind: "retry", error };
|
|
792
810
|
}
|
|
@@ -832,12 +850,18 @@ function deploymentFetchRetryOn(onError, method) {
|
|
|
832
850
|
}
|
|
833
851
|
return { kind: "stop" };
|
|
834
852
|
};
|
|
853
|
+
const shouldRetry = shouldRetryOverride ? function(_attempt, error, response) {
|
|
854
|
+
return shouldRetryOverride(error, response) ? {
|
|
855
|
+
kind: "retry",
|
|
856
|
+
error: error ?? `Received response with status ${response?.status}`
|
|
857
|
+
} : { kind: "stop" };
|
|
858
|
+
} : defaultShouldRetry;
|
|
835
859
|
return function(attempt, error, response) {
|
|
836
860
|
const result = shouldRetry(attempt, error, response);
|
|
837
861
|
if (result.kind === "retry") {
|
|
838
862
|
onError?.(result.error, attempt);
|
|
839
863
|
}
|
|
840
|
-
if (attempt >=
|
|
864
|
+
if (attempt >= maxRetries) {
|
|
841
865
|
return false;
|
|
842
866
|
}
|
|
843
867
|
return result.kind === "retry";
|
|
@@ -866,13 +890,19 @@ export function bareDeploymentFetch(_ctx, options) {
|
|
|
866
890
|
};
|
|
867
891
|
}
|
|
868
892
|
export function deploymentFetch(_ctx, options) {
|
|
869
|
-
const {
|
|
893
|
+
const {
|
|
894
|
+
deploymentUrl,
|
|
895
|
+
adminKey,
|
|
896
|
+
onError,
|
|
897
|
+
maxRetries = MAX_RETRIES,
|
|
898
|
+
shouldRetry
|
|
899
|
+
} = options;
|
|
870
900
|
const onErrorWithAttempt = (err, attempt) => {
|
|
871
901
|
onError?.(err);
|
|
872
902
|
if (attempt >= RETRY_LOG_THRESHOLD) {
|
|
873
903
|
logMessage(
|
|
874
904
|
chalkStderr.gray(
|
|
875
|
-
`Retrying request (attempt ${attempt}/${
|
|
905
|
+
`Retrying request (attempt ${attempt}/${maxRetries})...`
|
|
876
906
|
)
|
|
877
907
|
);
|
|
878
908
|
}
|
|
@@ -891,7 +921,12 @@ export function deploymentFetch(_ctx, options) {
|
|
|
891
921
|
}
|
|
892
922
|
const func = throwingFetch(url, {
|
|
893
923
|
retryDelay,
|
|
894
|
-
retryOn: deploymentFetchRetryOn(
|
|
924
|
+
retryOn: deploymentFetchRetryOn(
|
|
925
|
+
onErrorWithAttempt,
|
|
926
|
+
options2?.method,
|
|
927
|
+
maxRetries,
|
|
928
|
+
shouldRetry
|
|
929
|
+
),
|
|
895
930
|
...options2,
|
|
896
931
|
headers
|
|
897
932
|
});
|