alchemy 0.25.0 → 0.26.1
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/README.md +7 -0
- package/lib/ai/astro-file.d.ts.map +1 -1
- package/lib/ai/astro-file.js +2 -1
- package/lib/ai/astro-file.js.map +1 -1
- package/lib/ai/client.d.ts.map +1 -1
- package/lib/ai/client.js +3 -2
- package/lib/ai/client.js.map +1 -1
- package/lib/alchemy.d.ts +7 -0
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +19 -3
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +63 -5
- package/lib/apply.js.map +1 -1
- package/lib/aws/control/client.js +4 -3
- package/lib/aws/control/client.js.map +1 -1
- package/lib/aws/control/properties.d.ts +6 -0
- package/lib/aws/control/properties.d.ts.map +1 -1
- package/lib/aws/control/properties.js +48 -0
- package/lib/aws/control/properties.js.map +1 -1
- package/lib/aws/control/resource.d.ts.map +1 -1
- package/lib/aws/control/resource.js +3 -2
- package/lib/aws/control/resource.js.map +1 -1
- package/lib/aws/control/types.d.ts +3969 -4862
- package/lib/aws/control/types.d.ts.map +1 -1
- package/lib/aws/control/types.js.map +1 -1
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +9 -8
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
- package/lib/aws/oidc/oidc-provider.js +3 -2
- package/lib/aws/oidc/oidc-provider.js.map +1 -1
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +3 -2
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +3 -1
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +2 -1
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +3 -2
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +4 -3
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-error.d.ts +0 -9
- package/lib/cloudflare/api-error.d.ts.map +1 -1
- package/lib/cloudflare/api-error.js +24 -0
- package/lib/cloudflare/api-error.js.map +1 -1
- package/lib/cloudflare/api.d.ts.map +1 -1
- package/lib/cloudflare/api.js +5 -4
- package/lib/cloudflare/api.js.map +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/assets.js +26 -6
- package/lib/cloudflare/assets.js.map +1 -1
- package/lib/cloudflare/astro.d.ts +63 -0
- package/lib/cloudflare/astro.d.ts.map +1 -0
- package/lib/cloudflare/astro.js +133 -0
- package/lib/cloudflare/astro.js.map +1 -0
- package/lib/cloudflare/auth.d.ts.map +1 -1
- package/lib/cloudflare/auth.js +3 -2
- package/lib/cloudflare/auth.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +24 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bindings.js.map +1 -1
- package/lib/cloudflare/bound.d.ts +10 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +12 -8
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/bundle/bundle-worker.d.ts.map +1 -1
- package/lib/cloudflare/bundle/bundle-worker.js +2 -1
- package/lib/cloudflare/bundle/bundle-worker.js.map +1 -1
- package/lib/cloudflare/bundle/nodejs-compat-mode.d.ts.map +1 -1
- package/lib/cloudflare/bundle/nodejs-compat-mode.js +2 -1
- package/lib/cloudflare/bundle/nodejs-compat-mode.js.map +1 -1
- package/lib/cloudflare/custom-domain.d.ts.map +1 -1
- package/lib/cloudflare/custom-domain.js +10 -9
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +11 -10
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/d1-export.d.ts.map +1 -1
- package/lib/cloudflare/d1-export.js +2 -1
- package/lib/cloudflare/d1-export.js.map +1 -1
- package/lib/cloudflare/d1-import.d.ts.map +1 -1
- package/lib/cloudflare/d1-import.js +2 -1
- package/lib/cloudflare/d1-import.js.map +1 -1
- package/lib/cloudflare/d1-migrations.d.ts.map +1 -1
- package/lib/cloudflare/d1-migrations.js +2 -1
- package/lib/cloudflare/d1-migrations.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +94 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -0
- package/lib/cloudflare/dispatch-namespace.js +143 -0
- package/lib/cloudflare/dispatch-namespace.js.map +1 -0
- package/lib/cloudflare/dns-records.d.ts.map +1 -1
- package/lib/cloudflare/dns-records.js +5 -4
- package/lib/cloudflare/dns-records.js.map +1 -1
- package/lib/cloudflare/do-state-store/worker.d.ts.map +1 -1
- package/lib/cloudflare/do-state-store/worker.js +4 -0
- package/lib/cloudflare/do-state-store/worker.js.map +1 -1
- package/lib/cloudflare/email-address.d.ts +79 -0
- package/lib/cloudflare/email-address.d.ts.map +1 -0
- package/lib/cloudflare/email-address.js +112 -0
- package/lib/cloudflare/email-address.js.map +1 -0
- package/lib/cloudflare/email-catch-all.d.ts +123 -0
- package/lib/cloudflare/email-catch-all.d.ts.map +1 -0
- package/lib/cloudflare/email-catch-all.js +124 -0
- package/lib/cloudflare/email-catch-all.js.map +1 -0
- package/lib/cloudflare/email-routing.d.ts +89 -0
- package/lib/cloudflare/email-routing.d.ts.map +1 -0
- package/lib/cloudflare/email-routing.js +120 -0
- package/lib/cloudflare/email-routing.js.map +1 -0
- package/lib/cloudflare/email-rule.d.ts +196 -0
- package/lib/cloudflare/email-rule.d.ts.map +1 -0
- package/lib/cloudflare/email-rule.js +153 -0
- package/lib/cloudflare/email-rule.js.map +1 -0
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +5 -4
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/images.d.ts +60 -0
- package/lib/cloudflare/images.d.ts.map +1 -0
- package/lib/cloudflare/images.js +60 -0
- package/lib/cloudflare/images.js.map +1 -0
- package/lib/cloudflare/index.d.ts +10 -0
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +10 -0
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +2 -1
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +7 -0
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +28 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
- package/lib/cloudflare/queue-consumer.js +2 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +0 -8
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/route.d.ts +26 -1
- package/lib/cloudflare/route.d.ts.map +1 -1
- package/lib/cloudflare/route.js +84 -16
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +137 -0
- package/lib/cloudflare/secret.d.ts.map +1 -0
- package/lib/cloudflare/secret.js +122 -0
- package/lib/cloudflare/secret.js.map +1 -0
- package/lib/cloudflare/secrets-store.d.ts +145 -0
- package/lib/cloudflare/secrets-store.d.ts.map +1 -0
- package/lib/cloudflare/secrets-store.js +213 -0
- package/lib/cloudflare/secrets-store.js.map +1 -0
- package/lib/cloudflare/sveltekit.d.ts +49 -0
- package/lib/cloudflare/sveltekit.d.ts.map +1 -0
- package/lib/cloudflare/sveltekit.js +56 -0
- package/lib/cloudflare/sveltekit.js.map +1 -0
- package/lib/cloudflare/user.d.ts.map +1 -1
- package/lib/cloudflare/user.js +2 -1
- package/lib/cloudflare/user.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +6 -5
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-metadata-index.js +2 -1
- package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +7 -2
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-assets.d.ts +18 -0
- package/lib/cloudflare/worker-assets.d.ts.map +1 -1
- package/lib/cloudflare/worker-assets.js +61 -67
- package/lib/cloudflare/worker-assets.js.map +1 -1
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
- package/lib/cloudflare/worker-metadata.js +23 -1
- package/lib/cloudflare/worker-metadata.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +43 -2
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +50 -11
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +21 -0
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +33 -0
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/cloudflare/zone.d.ts.map +1 -1
- package/lib/cloudflare/zone.js +4 -3
- package/lib/cloudflare/zone.js.map +1 -1
- package/lib/destroy.d.ts.map +1 -1
- package/lib/destroy.js +30 -13
- package/lib/destroy.js.map +1 -1
- package/lib/dns/godaddy.d.ts.map +1 -1
- package/lib/dns/godaddy.js +3 -2
- package/lib/dns/godaddy.js.map +1 -1
- package/lib/dns/import-dns.d.ts.map +1 -1
- package/lib/dns/import-dns.js +2 -1
- package/lib/dns/import-dns.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/esbuild/bundle.d.ts.map +1 -1
- package/lib/esbuild/bundle.js +2 -1
- package/lib/esbuild/bundle.js.map +1 -1
- package/lib/fs/copy-file.d.ts.map +1 -1
- package/lib/fs/copy-file.js +2 -1
- package/lib/fs/copy-file.js.map +1 -1
- package/lib/fs/file.d.ts.map +1 -1
- package/lib/fs/file.js +2 -1
- package/lib/fs/file.js.map +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +11 -10
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +5 -4
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/github/secret.d.ts.map +1 -1
- package/lib/github/secret.js +7 -6
- package/lib/github/secret.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +3 -2
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/api.d.ts +53 -0
- package/lib/planetscale/api.d.ts.map +1 -0
- package/lib/planetscale/api.js +84 -0
- package/lib/planetscale/api.js.map +1 -0
- package/lib/planetscale/branch.d.ts +129 -0
- package/lib/planetscale/branch.d.ts.map +1 -0
- package/lib/planetscale/branch.js +161 -0
- package/lib/planetscale/branch.js.map +1 -0
- package/lib/planetscale/database.d.ts +143 -0
- package/lib/planetscale/database.d.ts.map +1 -0
- package/lib/planetscale/database.js +184 -0
- package/lib/planetscale/database.js.map +1 -0
- package/lib/planetscale/index.d.ts +5 -0
- package/lib/planetscale/index.d.ts.map +1 -0
- package/lib/planetscale/index.js +5 -0
- package/lib/planetscale/index.js.map +1 -0
- package/lib/planetscale/utils.d.ts +15 -0
- package/lib/planetscale/utils.d.ts.map +1 -0
- package/lib/planetscale/utils.js +95 -0
- package/lib/planetscale/utils.js.map +1 -0
- package/lib/resource.js +7 -1
- package/lib/resource.js.map +1 -1
- package/lib/runtime/plugin.d.ts.map +1 -1
- package/lib/runtime/plugin.js +2 -1
- package/lib/runtime/plugin.js.map +1 -1
- package/lib/scope.d.ts +13 -2
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +53 -10
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +5 -4
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +5 -4
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +5 -4
- package/lib/sentry/team.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +2 -1
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +3 -2
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +2 -1
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.d.ts.map +1 -1
- package/lib/stripe/customer.js +2 -1
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +2 -1
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +2 -1
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.d.ts.map +1 -1
- package/lib/stripe/meter.js +4 -2
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +2 -1
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +2 -1
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +2 -1
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +2 -1
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +2 -1
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +2 -1
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +2 -1
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +3 -2
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/bun.d.ts.map +1 -1
- package/lib/test/bun.js +6 -1
- package/lib/test/bun.js.map +1 -1
- package/lib/test/prune.js +7 -1
- package/lib/test/prune.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +10 -3
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +2 -1
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/async-queue.d.ts +35 -0
- package/lib/util/async-queue.d.ts.map +1 -0
- package/lib/util/async-queue.js +87 -0
- package/lib/util/async-queue.js.map +1 -0
- package/lib/util/cli.d.ts +37 -0
- package/lib/util/cli.d.ts.map +1 -0
- package/lib/util/cli.js +90 -0
- package/lib/util/cli.js.map +1 -0
- package/lib/util/ignore-matcher.d.ts +94 -0
- package/lib/util/ignore-matcher.d.ts.map +1 -0
- package/lib/util/ignore-matcher.js +616 -0
- package/lib/util/ignore-matcher.js.map +1 -0
- package/lib/util/logger.d.ts +3 -0
- package/lib/util/logger.d.ts.map +1 -0
- package/lib/util/logger.js +15 -0
- package/lib/util/logger.js.map +1 -0
- package/lib/util/retry.d.ts.map +1 -1
- package/lib/util/retry.js +0 -1
- package/lib/util/retry.js.map +1 -1
- package/lib/util/safe-fetch.d.ts.map +1 -1
- package/lib/util/safe-fetch.js +2 -1
- package/lib/util/safe-fetch.js.map +1 -1
- package/lib/util/telemetry/client.d.ts +32 -0
- package/lib/util/telemetry/client.d.ts.map +1 -0
- package/lib/util/telemetry/client.js +94 -0
- package/lib/util/telemetry/client.js.map +1 -0
- package/lib/util/telemetry/constants.d.ts +4 -0
- package/lib/util/telemetry/constants.d.ts.map +1 -0
- package/lib/util/telemetry/constants.js +8 -0
- package/lib/util/telemetry/constants.js.map +1 -0
- package/lib/util/telemetry/context.d.ts +15 -0
- package/lib/util/telemetry/context.d.ts.map +1 -0
- package/lib/util/telemetry/context.js +128 -0
- package/lib/util/telemetry/context.js.map +1 -0
- package/lib/util/telemetry/index.d.ts +3 -0
- package/lib/util/telemetry/index.d.ts.map +1 -0
- package/lib/util/telemetry/index.js +3 -0
- package/lib/util/telemetry/index.js.map +1 -0
- package/lib/util/telemetry/types.d.ts +59 -0
- package/lib/util/telemetry/types.d.ts.map +1 -0
- package/lib/util/telemetry/types.js +1 -0
- package/lib/util/telemetry/types.js.map +1 -0
- package/lib/util/xdg-paths.d.ts +9 -0
- package/lib/util/xdg-paths.d.ts.map +1 -0
- package/lib/util/xdg-paths.js +41 -0
- package/lib/util/xdg-paths.js.map +1 -0
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +2 -1
- package/lib/vercel/project.js.map +1 -1
- package/lib/web/astro.d.ts.map +1 -1
- package/lib/web/astro.js +2 -1
- package/lib/web/astro.js.map +1 -1
- package/lib/web/shadcn.d.ts.map +1 -1
- package/lib/web/shadcn.js +2 -1
- package/lib/web/shadcn.js.map +1 -1
- package/lib/web/vite.d.ts.map +1 -1
- package/lib/web/vite.js +3 -2
- package/lib/web/vite.js.map +1 -1
- package/lib/web/vitepress/dependencies.d.ts.map +1 -1
- package/lib/web/vitepress/dependencies.js +2 -1
- package/lib/web/vitepress/dependencies.js.map +1 -1
- package/lib/web/vitepress/vitepress.d.ts.map +1 -1
- package/lib/web/vitepress/vitepress.js +2 -1
- package/lib/web/vitepress/vitepress.js.map +1 -1
- package/package.json +6 -4
- package/src/ai/astro-file.ts +2 -1
- package/src/ai/client.ts +3 -2
- package/src/alchemy.ts +28 -3
- package/src/apply.ts +66 -5
- package/src/aws/control/client.ts +4 -4
- package/src/aws/control/properties.ts +48 -0
- package/src/aws/control/resource.ts +3 -2
- package/src/aws/control/types.ts +3988 -6301
- package/src/aws/function.ts +9 -8
- package/src/aws/oidc/oidc-provider.ts +3 -2
- package/src/aws/queue.ts +3 -2
- package/src/aws/role.ts +3 -1
- package/src/aws/ssm-parameter.ts +2 -1
- package/src/cloudflare/account-api-token.ts +3 -2
- package/src/cloudflare/ai-gateway.ts +4 -3
- package/src/cloudflare/api-error.ts +36 -0
- package/src/cloudflare/api.ts +9 -4
- package/src/cloudflare/assets.ts +30 -6
- package/src/cloudflare/astro.ts +176 -0
- package/src/cloudflare/auth.ts +3 -2
- package/src/cloudflare/bindings.ts +29 -0
- package/src/cloudflare/bound.ts +38 -21
- package/src/cloudflare/bucket.ts +15 -8
- package/src/cloudflare/bundle/bundle-worker.ts +2 -1
- package/src/cloudflare/bundle/nodejs-compat-mode.ts +2 -1
- package/src/cloudflare/custom-domain.ts +10 -9
- package/src/cloudflare/d1-database.ts +11 -10
- package/src/cloudflare/d1-export.ts +2 -1
- package/src/cloudflare/d1-import.ts +2 -1
- package/src/cloudflare/d1-migrations.ts +2 -1
- package/src/cloudflare/dispatch-namespace.ts +281 -0
- package/src/cloudflare/dns-records.ts +5 -4
- package/src/cloudflare/do-state-store/worker.ts +4 -0
- package/src/cloudflare/email-address.ts +203 -0
- package/src/cloudflare/email-catch-all.ts +248 -0
- package/src/cloudflare/email-routing.ts +230 -0
- package/src/cloudflare/email-rule.ts +322 -0
- package/src/cloudflare/hyperdrive.ts +5 -4
- package/src/cloudflare/images.ts +59 -0
- package/src/cloudflare/index.ts +10 -0
- package/src/cloudflare/kv-namespace.ts +2 -1
- package/src/cloudflare/pipeline.ts +38 -2
- package/src/cloudflare/queue-consumer.ts +2 -1
- package/src/cloudflare/queue.ts +0 -12
- package/src/cloudflare/route.ts +118 -18
- package/src/cloudflare/secret.ts +253 -0
- package/src/cloudflare/secrets-store.ts +420 -0
- package/src/cloudflare/sveltekit.ts +72 -0
- package/src/cloudflare/user.ts +2 -1
- package/src/cloudflare/vectorize-index.ts +6 -5
- package/src/cloudflare/vectorize-metadata-index.ts +2 -1
- package/src/cloudflare/website.ts +76 -66
- package/src/cloudflare/worker-assets.ts +95 -89
- package/src/cloudflare/worker-metadata.ts +20 -1
- package/src/cloudflare/worker.ts +116 -18
- package/src/cloudflare/wrangler.json.ts +63 -0
- package/src/cloudflare/zone.ts +4 -3
- package/src/destroy.ts +35 -17
- package/src/dns/godaddy.ts +3 -2
- package/src/dns/import-dns.ts +2 -1
- package/src/esbuild/bundle.ts +2 -1
- package/src/fs/copy-file.ts +2 -1
- package/src/fs/file.ts +3 -1
- package/src/github/client.ts +11 -10
- package/src/github/repository-environment.ts +5 -4
- package/src/github/secret.ts +7 -6
- package/src/index.ts +2 -1
- package/src/neon/project.ts +3 -2
- package/src/planetscale/api.ts +115 -0
- package/src/planetscale/branch.ts +352 -0
- package/src/planetscale/database.ts +394 -0
- package/src/planetscale/index.ts +4 -0
- package/src/planetscale/utils.ts +189 -0
- package/src/resource.ts +7 -1
- package/src/runtime/plugin.ts +2 -1
- package/src/scope.ts +64 -13
- package/src/sentry/client-key.ts +5 -4
- package/src/sentry/project.ts +5 -4
- package/src/sentry/team.ts +5 -4
- package/src/stripe/card.ts +2 -1
- package/src/stripe/client.ts +3 -2
- package/src/stripe/coupon.ts +2 -1
- package/src/stripe/customer.ts +2 -1
- package/src/stripe/entitlements-feature.ts +2 -1
- package/src/stripe/file.ts +2 -1
- package/src/stripe/meter.ts +4 -2
- package/src/stripe/portal-configuration.ts +2 -1
- package/src/stripe/price.ts +2 -1
- package/src/stripe/product-feature.ts +2 -1
- package/src/stripe/product.ts +2 -1
- package/src/stripe/promotion-code.ts +2 -1
- package/src/stripe/shipping-rate.ts +2 -1
- package/src/stripe/tax-rate.ts +2 -1
- package/src/stripe/webhook.ts +3 -2
- package/src/test/bun.ts +6 -1
- package/src/test/prune.ts +7 -1
- package/src/test/vitest.ts +14 -3
- package/src/upstash/redis.ts +2 -1
- package/src/util/async-queue.ts +97 -0
- package/src/util/cli.tsx +221 -0
- package/src/util/ignore-matcher.ts +873 -0
- package/src/util/logger.ts +17 -0
- package/src/util/retry.ts +0 -1
- package/src/util/safe-fetch.ts +2 -1
- package/src/util/telemetry/client.ts +127 -0
- package/src/util/telemetry/constants.ts +13 -0
- package/src/util/telemetry/context.ts +154 -0
- package/src/util/telemetry/index.ts +2 -0
- package/src/util/telemetry/types.ts +83 -0
- package/src/util/xdg-paths.ts +48 -0
- package/src/vercel/project.ts +2 -1
- package/src/web/astro.ts +2 -1
- package/src/web/shadcn.ts +2 -1
- package/src/web/vite.ts +3 -2
- package/src/web/vitepress/dependencies.ts +2 -1
- package/src/web/vitepress/vitepress.ts +2 -1
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
DnsRecordWithMetadata,
|
|
6
6
|
} from "../dns/record.ts";
|
|
7
7
|
import { Resource } from "../resource.ts";
|
|
8
|
+
import { logger } from "../util/logger.ts";
|
|
8
9
|
import {
|
|
9
10
|
type CloudflareApi,
|
|
10
11
|
type CloudflareApiOptions,
|
|
@@ -146,12 +147,12 @@ export const DnsRecords = Resource(
|
|
|
146
147
|
`/zones/${zoneId}/dns_records/${record.id}`,
|
|
147
148
|
);
|
|
148
149
|
if (!response.ok && response.status !== 404) {
|
|
149
|
-
|
|
150
|
+
logger.error(
|
|
150
151
|
`Failed to delete DNS record ${record.name}: ${response.statusText}`,
|
|
151
152
|
);
|
|
152
153
|
}
|
|
153
154
|
} catch (error) {
|
|
154
|
-
|
|
155
|
+
logger.error(`Error deleting DNS record ${record.name}:`, error);
|
|
155
156
|
}
|
|
156
157
|
}),
|
|
157
158
|
);
|
|
@@ -181,12 +182,12 @@ export const DnsRecords = Resource(
|
|
|
181
182
|
`/zones/${zoneId}/dns_records/${record.id}`,
|
|
182
183
|
);
|
|
183
184
|
if (!response.ok && response.status !== 404) {
|
|
184
|
-
|
|
185
|
+
logger.error(
|
|
185
186
|
`Failed to delete DNS record ${record.name}: ${response.statusText}`,
|
|
186
187
|
);
|
|
187
188
|
}
|
|
188
189
|
} catch (error) {
|
|
189
|
-
|
|
190
|
+
logger.error(`Error deleting DNS record ${record.name}:`, error);
|
|
190
191
|
}
|
|
191
192
|
}),
|
|
192
193
|
);
|
|
@@ -11,6 +11,10 @@ interface Env {
|
|
|
11
11
|
|
|
12
12
|
export default class extends WorkerEntrypoint<Env> {
|
|
13
13
|
override async fetch(request: Request) {
|
|
14
|
+
const url = new URL(request.url);
|
|
15
|
+
if (url.pathname === "/health-check") {
|
|
16
|
+
return new Response("OK", { status: 200 });
|
|
17
|
+
}
|
|
14
18
|
try {
|
|
15
19
|
const result = await this.handle(request);
|
|
16
20
|
const body: DOStateStoreAPI.Response = {
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { Resource } from "../resource.ts";
|
|
3
|
+
import { handleApiError } from "./api-error.ts";
|
|
4
|
+
import { type CloudflareApiOptions, createCloudflareApi } from "./api.ts";
|
|
5
|
+
import type { CloudflareResponse } from "./response.ts";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Cloudflare Email Address response format
|
|
9
|
+
*/
|
|
10
|
+
interface CloudflareEmailAddress {
|
|
11
|
+
email: string;
|
|
12
|
+
verified: boolean;
|
|
13
|
+
created: string;
|
|
14
|
+
modified: string;
|
|
15
|
+
tag: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Properties for creating an email destination address
|
|
20
|
+
*/
|
|
21
|
+
export interface EmailAddressProps extends CloudflareApiOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Destination email address for routing
|
|
24
|
+
*/
|
|
25
|
+
email: string;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Whether to automatically verify the email address if possible
|
|
29
|
+
* Note: Verification typically requires email confirmation by the recipient
|
|
30
|
+
*
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
verified?: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A destination email address for Cloudflare email routing
|
|
38
|
+
*/
|
|
39
|
+
export interface EmailAddress extends Resource<"cloudflare::EmailAddress"> {
|
|
40
|
+
/**
|
|
41
|
+
* The email address
|
|
42
|
+
*/
|
|
43
|
+
email: string;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Whether the email address has been verified
|
|
47
|
+
*/
|
|
48
|
+
verified: boolean;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* When the email address was created
|
|
52
|
+
*/
|
|
53
|
+
created: string;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* When the email address was last modified
|
|
57
|
+
*/
|
|
58
|
+
modified: string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Email address tag
|
|
62
|
+
*/
|
|
63
|
+
tag: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Manages destination email addresses for Cloudflare email routing.
|
|
68
|
+
* These addresses can be used as targets in email routing rules.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ## Add a destination email address
|
|
72
|
+
*
|
|
73
|
+
* Add an email address that can receive routed emails.
|
|
74
|
+
*
|
|
75
|
+
* ```ts
|
|
76
|
+
* const emailAddress = await EmailAddress("admin-email", {
|
|
77
|
+
* email: "admin@company.com"
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* // Note: The email address will need to be verified before it can receive emails
|
|
81
|
+
* console.log(`Verified: ${emailAddress.verified}`);
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ## Add multiple destination addresses
|
|
86
|
+
*
|
|
87
|
+
* Create multiple destination addresses for different routing purposes.
|
|
88
|
+
*
|
|
89
|
+
* ```ts
|
|
90
|
+
* const supportEmail = await EmailAddress("support-email", {
|
|
91
|
+
* email: "support@company.com"
|
|
92
|
+
* });
|
|
93
|
+
*
|
|
94
|
+
* const salesEmail = await EmailAddress("sales-email", {
|
|
95
|
+
* email: "sales@company.com"
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export const EmailAddress = Resource(
|
|
100
|
+
"cloudflare::EmailAddress",
|
|
101
|
+
async function (
|
|
102
|
+
this: Context<EmailAddress>,
|
|
103
|
+
_id: string,
|
|
104
|
+
props: EmailAddressProps,
|
|
105
|
+
): Promise<EmailAddress> {
|
|
106
|
+
const api = await createCloudflareApi(props);
|
|
107
|
+
|
|
108
|
+
if (this.phase === "delete") {
|
|
109
|
+
if (this.output?.email) {
|
|
110
|
+
const response = await api.delete(
|
|
111
|
+
`/accounts/${api.accountId}/email/routing/addresses/${encodeURIComponent(this.output.email)}`,
|
|
112
|
+
);
|
|
113
|
+
if (!response.ok && response.status !== 404) {
|
|
114
|
+
await handleApiError(response, "delete", "email address");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return this.destroy();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (this.phase === "update" && this.output) {
|
|
121
|
+
// Email addresses cannot be updated, only created or deleted
|
|
122
|
+
// If the email changed, we need to delete the old one and create a new one
|
|
123
|
+
if (this.output.email !== props.email) {
|
|
124
|
+
// Delete the old email address
|
|
125
|
+
const deleteResponse = await api.delete(
|
|
126
|
+
`/accounts/${api.accountId}/email/routing/addresses/${encodeURIComponent(this.output.email)}`,
|
|
127
|
+
);
|
|
128
|
+
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
129
|
+
await handleApiError(deleteResponse, "delete", "old email address");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Create the new email address (fall through to create logic)
|
|
133
|
+
} else {
|
|
134
|
+
// Get current state
|
|
135
|
+
const getResponse = await api.get(
|
|
136
|
+
`/accounts/${api.accountId}/email/routing/addresses/${encodeURIComponent(props.email)}`,
|
|
137
|
+
);
|
|
138
|
+
if (!getResponse.ok) {
|
|
139
|
+
if (getResponse.status === 404) {
|
|
140
|
+
// Email address was deleted externally, recreate it
|
|
141
|
+
} else {
|
|
142
|
+
await handleApiError(getResponse, "get", "email address");
|
|
143
|
+
}
|
|
144
|
+
} else {
|
|
145
|
+
const result =
|
|
146
|
+
(await getResponse.json()) as CloudflareResponse<CloudflareEmailAddress>;
|
|
147
|
+
|
|
148
|
+
return this({
|
|
149
|
+
email: result.result.email,
|
|
150
|
+
verified: result.result.verified,
|
|
151
|
+
created: result.result.created,
|
|
152
|
+
modified: result.result.modified,
|
|
153
|
+
tag: result.result.tag,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Check if email address already exists
|
|
160
|
+
const getResponse = await api.get(
|
|
161
|
+
`/accounts/${api.accountId}/email/routing/addresses/${encodeURIComponent(props.email)}`,
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
if (getResponse.ok) {
|
|
165
|
+
// Email address already exists, return it
|
|
166
|
+
const result =
|
|
167
|
+
(await getResponse.json()) as CloudflareResponse<CloudflareEmailAddress>;
|
|
168
|
+
|
|
169
|
+
return this({
|
|
170
|
+
email: result.result.email,
|
|
171
|
+
verified: result.result.verified,
|
|
172
|
+
created: result.result.created,
|
|
173
|
+
modified: result.result.modified,
|
|
174
|
+
tag: result.result.tag,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Create new email address
|
|
179
|
+
const createPayload = {
|
|
180
|
+
email: props.email,
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
const createResponse = await api.post(
|
|
184
|
+
`/accounts/${api.accountId}/email/routing/addresses`,
|
|
185
|
+
createPayload,
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
if (!createResponse.ok) {
|
|
189
|
+
await handleApiError(createResponse, "create", "email address");
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const result =
|
|
193
|
+
(await createResponse.json()) as CloudflareResponse<CloudflareEmailAddress>;
|
|
194
|
+
|
|
195
|
+
return this({
|
|
196
|
+
email: result.result.email,
|
|
197
|
+
verified: result.result.verified,
|
|
198
|
+
created: result.result.created,
|
|
199
|
+
modified: result.result.modified,
|
|
200
|
+
tag: result.result.tag,
|
|
201
|
+
});
|
|
202
|
+
},
|
|
203
|
+
);
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { Resource } from "../resource.ts";
|
|
3
|
+
import { type CloudflareApiOptions, createCloudflareApi } from "./api.ts";
|
|
4
|
+
import type { CloudflareResponse } from "./response.ts";
|
|
5
|
+
import type { EmailAction, EmailMatcher } from "./email-rule.ts";
|
|
6
|
+
import type { Zone } from "./zone.ts";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Cloudflare Email Catch All response format
|
|
10
|
+
*/
|
|
11
|
+
interface CloudflareEmailCatchAll {
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
name: string;
|
|
14
|
+
matchers: EmailMatcher[];
|
|
15
|
+
actions: EmailAction[];
|
|
16
|
+
tag: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Properties for configuring the catch-all email rule
|
|
21
|
+
*/
|
|
22
|
+
export interface EmailCatchAllProps extends CloudflareApiOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Zone ID or Zone resource where the catch-all rule will be configured
|
|
25
|
+
*/
|
|
26
|
+
zone: string | Zone;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Whether the catch-all rule is enabled
|
|
30
|
+
*
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Name for the catch-all rule
|
|
37
|
+
*
|
|
38
|
+
* @default "Catch All"
|
|
39
|
+
*/
|
|
40
|
+
name?: string;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Matchers for the catch-all rule (typically matches all emails)
|
|
44
|
+
* If not provided, defaults to matching all emails
|
|
45
|
+
*/
|
|
46
|
+
matchers?: EmailMatcher[];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Actions to take for emails that don't match other rules
|
|
50
|
+
*/
|
|
51
|
+
actions: EmailAction[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A catch-all email routing rule for a Cloudflare zone
|
|
56
|
+
*/
|
|
57
|
+
export interface EmailCatchAll extends Resource<"cloudflare::EmailCatchAll"> {
|
|
58
|
+
/**
|
|
59
|
+
* Zone ID where the catch-all rule is configured
|
|
60
|
+
*/
|
|
61
|
+
zoneId: string;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Whether the catch-all rule is enabled
|
|
65
|
+
*/
|
|
66
|
+
enabled: boolean;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Rule name
|
|
70
|
+
*/
|
|
71
|
+
name: string;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Matchers for the catch-all rule
|
|
75
|
+
*/
|
|
76
|
+
matchers: EmailMatcher[];
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Actions for the catch-all rule
|
|
80
|
+
*/
|
|
81
|
+
actions: EmailAction[];
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Rule tag
|
|
85
|
+
*/
|
|
86
|
+
tag: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Configures a catch-all email routing rule that handles emails not matched by other rules.
|
|
91
|
+
* This rule is processed last and typically matches all emails that haven't been handled.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ## Forward all unmatched emails
|
|
95
|
+
*
|
|
96
|
+
* Set up a catch-all rule to forward any unmatched emails to an admin address.
|
|
97
|
+
*
|
|
98
|
+
* ```ts
|
|
99
|
+
* const catchAll = await EmailCatchAll("default-catchall", {
|
|
100
|
+
* zone: "example.com",
|
|
101
|
+
* enabled: true,
|
|
102
|
+
* actions: [
|
|
103
|
+
* {
|
|
104
|
+
* type: "forward",
|
|
105
|
+
* value: ["admin@company.com"]
|
|
106
|
+
* }
|
|
107
|
+
* ]
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ## Drop unmatched emails
|
|
113
|
+
*
|
|
114
|
+
* Configure catch-all to drop any emails that don't match specific rules.
|
|
115
|
+
*
|
|
116
|
+
* ```ts
|
|
117
|
+
* const catchAll = await EmailCatchAll("drop-catchall", {
|
|
118
|
+
* zone: "example.com",
|
|
119
|
+
* enabled: true,
|
|
120
|
+
* actions: [
|
|
121
|
+
* {
|
|
122
|
+
* type: "drop"
|
|
123
|
+
* }
|
|
124
|
+
* ]
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ## Process with Worker
|
|
130
|
+
*
|
|
131
|
+
* Use a Worker to handle all unmatched emails for custom processing.
|
|
132
|
+
*
|
|
133
|
+
* ```ts
|
|
134
|
+
* const catchAll = await EmailCatchAll("worker-catchall", {
|
|
135
|
+
* zone: "example.com",
|
|
136
|
+
* enabled: true,
|
|
137
|
+
* actions: [
|
|
138
|
+
* {
|
|
139
|
+
* type: "worker",
|
|
140
|
+
* value: ["email-processor"]
|
|
141
|
+
* }
|
|
142
|
+
* ]
|
|
143
|
+
* });
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export const EmailCatchAll = Resource(
|
|
147
|
+
"cloudflare::EmailCatchAll",
|
|
148
|
+
async function (
|
|
149
|
+
this: Context<EmailCatchAll>,
|
|
150
|
+
_id: string,
|
|
151
|
+
props: EmailCatchAllProps,
|
|
152
|
+
): Promise<EmailCatchAll> {
|
|
153
|
+
const api = await createCloudflareApi(props);
|
|
154
|
+
const zoneId = typeof props.zone === "string" ? props.zone : props.zone.id;
|
|
155
|
+
|
|
156
|
+
if (this.phase === "delete") {
|
|
157
|
+
// Disable the catch-all rule by setting enabled to false
|
|
158
|
+
const disablePayload = {
|
|
159
|
+
enabled: false,
|
|
160
|
+
name: "Catch All",
|
|
161
|
+
matchers: [{ type: "all" as const }],
|
|
162
|
+
actions: [{ type: "drop" as const }],
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
const response = await api.put(
|
|
166
|
+
`/zones/${zoneId}/email/routing/rules/catch_all`,
|
|
167
|
+
disablePayload,
|
|
168
|
+
);
|
|
169
|
+
if (!response.ok && response.status !== 404) {
|
|
170
|
+
throw new Error(
|
|
171
|
+
`Failed to disable catch-all rule: ${response.statusText}`,
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
return this.destroy();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Get current catch-all rule state
|
|
178
|
+
const _getResponse = await api.get(
|
|
179
|
+
`/zones/${zoneId}/email/routing/rules/catch_all`,
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
if (this.phase === "update" && this.output) {
|
|
183
|
+
// Update the catch-all rule
|
|
184
|
+
const updatePayload = {
|
|
185
|
+
enabled: props.enabled ?? true,
|
|
186
|
+
name: props.name || "Catch All",
|
|
187
|
+
matchers: props.matchers || [{ type: "all" as const }],
|
|
188
|
+
actions: props.actions,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const response = await api.put(
|
|
192
|
+
`/zones/${zoneId}/email/routing/rules/catch_all`,
|
|
193
|
+
updatePayload,
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
if (!response.ok) {
|
|
197
|
+
const errorBody = await response.text();
|
|
198
|
+
throw new Error(
|
|
199
|
+
`Failed to update catch-all rule: ${response.statusText}\nResponse: ${errorBody}`,
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const result =
|
|
204
|
+
(await response.json()) as CloudflareResponse<CloudflareEmailCatchAll>;
|
|
205
|
+
|
|
206
|
+
return this({
|
|
207
|
+
zoneId,
|
|
208
|
+
enabled: result.result.enabled,
|
|
209
|
+
name: result.result.name,
|
|
210
|
+
matchers: result.result.matchers,
|
|
211
|
+
actions: result.result.actions,
|
|
212
|
+
tag: result.result.tag,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Create or update catch-all rule
|
|
217
|
+
const catchAllPayload = {
|
|
218
|
+
enabled: props.enabled ?? true,
|
|
219
|
+
name: props.name || "Catch All",
|
|
220
|
+
matchers: props.matchers || [{ type: "all" as const }],
|
|
221
|
+
actions: props.actions,
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const response = await api.put(
|
|
225
|
+
`/zones/${zoneId}/email/routing/rules/catch_all`,
|
|
226
|
+
catchAllPayload,
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
if (!response.ok) {
|
|
230
|
+
const errorBody = await response.text();
|
|
231
|
+
throw new Error(
|
|
232
|
+
`Failed to configure catch-all rule: ${response.statusText}\nResponse: ${errorBody}`,
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const result =
|
|
237
|
+
(await response.json()) as CloudflareResponse<CloudflareEmailCatchAll>;
|
|
238
|
+
|
|
239
|
+
return this({
|
|
240
|
+
zoneId,
|
|
241
|
+
enabled: result.result.enabled,
|
|
242
|
+
name: result.result.name,
|
|
243
|
+
matchers: result.result.matchers,
|
|
244
|
+
actions: result.result.actions,
|
|
245
|
+
tag: result.result.tag,
|
|
246
|
+
});
|
|
247
|
+
},
|
|
248
|
+
);
|