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
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Resource, ResourceKind } from "../resource.js";
|
|
2
|
+
import { secret as alchemySecret, } from "../secret.js";
|
|
3
|
+
import { handleApiError } from "./api-error.js";
|
|
4
|
+
import { createCloudflareApi, } from "./api.js";
|
|
5
|
+
export function isSecret(resource) {
|
|
6
|
+
return resource[ResourceKind] === "cloudflare::Secret";
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A Cloudflare Secret represents an individual secret stored in a Secrets Store.
|
|
10
|
+
*
|
|
11
|
+
* Use this resource to add individual secrets to an existing Secrets Store,
|
|
12
|
+
* providing fine-grained control over secret management.
|
|
13
|
+
*
|
|
14
|
+
* @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/subresources/secrets/
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Create a secrets store first
|
|
18
|
+
* const store = await SecretsStore("my-store", {
|
|
19
|
+
* name: "production-secrets"
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Add individual secrets to the store
|
|
23
|
+
* const apiKey = await Secret("api-key", {
|
|
24
|
+
* store: store,
|
|
25
|
+
* value: alchemy.secret(process.env.API_KEY)
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* const dbUrl = await Secret("database-url", {
|
|
29
|
+
* store: store,
|
|
30
|
+
* value: process.env.DATABASE_URL
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Use in a Worker binding
|
|
35
|
+
* const worker = await Worker("my-worker", {
|
|
36
|
+
* bindings: {
|
|
37
|
+
* SECRETS: store
|
|
38
|
+
* },
|
|
39
|
+
* code: `
|
|
40
|
+
* export default {
|
|
41
|
+
* async fetch(request, env) {
|
|
42
|
+
* const apiKey = await env.SECRETS.get("api-key");
|
|
43
|
+
* const dbUrl = await env.SECRETS.get("database-url");
|
|
44
|
+
* return new Response(\`API: \${apiKey ? "set" : "unset"}\`);
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
* `
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // When removing from Alchemy state, keep the secret in Cloudflare
|
|
52
|
+
* const preservedSecret = await Secret("preserve-secret", {
|
|
53
|
+
* store: myStore,
|
|
54
|
+
* value: "preserved-value",
|
|
55
|
+
* delete: false
|
|
56
|
+
* });
|
|
57
|
+
*/
|
|
58
|
+
export async function Secret(name, props) {
|
|
59
|
+
// Convert string value to AlchemySecret if needed to prevent plain text serialization
|
|
60
|
+
const secretValue = typeof props.value === "string" ? alchemySecret(props.value) : props.value;
|
|
61
|
+
// Call the internal resource with secure props
|
|
62
|
+
return _Secret(name, {
|
|
63
|
+
...props,
|
|
64
|
+
value: secretValue,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const _Secret = Resource("cloudflare::Secret", async function (name, props) {
|
|
68
|
+
const api = await createCloudflareApi(props);
|
|
69
|
+
if (this.phase === "delete") {
|
|
70
|
+
if (props.delete !== false) {
|
|
71
|
+
await deleteSecret(api, props.store.id, name);
|
|
72
|
+
}
|
|
73
|
+
return this.destroy();
|
|
74
|
+
}
|
|
75
|
+
const createdAt = this.phase === "update"
|
|
76
|
+
? this.output?.createdAt || Date.now()
|
|
77
|
+
: Date.now();
|
|
78
|
+
// Insert or update the secret
|
|
79
|
+
await insertSecret(api, props.store.id, name, props.value);
|
|
80
|
+
return this({
|
|
81
|
+
name,
|
|
82
|
+
storeId: props.store.id,
|
|
83
|
+
store: props.store,
|
|
84
|
+
value: props.value,
|
|
85
|
+
createdAt,
|
|
86
|
+
modifiedAt: Date.now(),
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
/**
|
|
90
|
+
* Insert or update a secret in a secrets store
|
|
91
|
+
*/
|
|
92
|
+
export async function insertSecret(api, storeId, secretName, secretValue) {
|
|
93
|
+
const response = await api.post(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`, [
|
|
94
|
+
{
|
|
95
|
+
name: secretName,
|
|
96
|
+
value: secretValue.unencrypted,
|
|
97
|
+
scopes: [],
|
|
98
|
+
},
|
|
99
|
+
]);
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
const errorData = await response.json().catch(() => ({
|
|
102
|
+
errors: [{ message: response.statusText }],
|
|
103
|
+
}));
|
|
104
|
+
const errorMessage = errorData.errors?.[0]?.message || response.statusText;
|
|
105
|
+
throw new Error(`Error creating secret '${secretName}': ${errorMessage}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Delete a secret from a secrets store
|
|
110
|
+
*/
|
|
111
|
+
export async function deleteSecret(api, storeId, secretName) {
|
|
112
|
+
const response = await api.delete(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`, {
|
|
113
|
+
body: JSON.stringify([secretName]),
|
|
114
|
+
headers: {
|
|
115
|
+
"Content-Type": "application/json",
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
if (!response.ok && response.status !== 404) {
|
|
119
|
+
await handleApiError(response, "delete", "secret", secretName);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/cloudflare/secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Resource } from "../resource.ts";
|
|
2
|
+
import { type Secret } from "../secret.ts";
|
|
3
|
+
import { type CloudflareApi, type CloudflareApiOptions } from "./api.ts";
|
|
4
|
+
import type { Bound } from "./bound.ts";
|
|
5
|
+
/**
|
|
6
|
+
* Properties for creating or updating a Secrets Store
|
|
7
|
+
*/
|
|
8
|
+
export interface SecretsStoreProps<S extends Record<string, Secret> | undefined = undefined> extends CloudflareApiOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Name of the secrets store
|
|
11
|
+
*
|
|
12
|
+
* @default id
|
|
13
|
+
*/
|
|
14
|
+
name?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Secrets to store in the secrets store
|
|
17
|
+
* Maps secret names to secret values (string) or Secret instances
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const store = await SecretsStore("my-store", {
|
|
22
|
+
* secrets: {
|
|
23
|
+
* API_KEY: "my-api-key-value",
|
|
24
|
+
* DATABASE_URL: alchemy.secret(process.env.DATABASE_URL)
|
|
25
|
+
* }
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
secrets?: {
|
|
30
|
+
[K in keyof S]: string | Secret;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Whether to adopt an existing store with the same name if it exists
|
|
34
|
+
* If true and a store with the same name exists, it will be adopted rather than creating a new one
|
|
35
|
+
*
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
adopt?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Whether to delete the store.
|
|
41
|
+
* If set to false, the store will remain but the resource will be removed from state
|
|
42
|
+
*
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
delete?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare function isSecretsStore(resource: Resource): resource is SecretsStore<any>;
|
|
48
|
+
export interface SecretsStore<S extends Record<string, Secret> | undefined = undefined> extends Resource<"cloudflare::SecretsStore">, Omit<SecretsStoreProps<S>, "delete"> {
|
|
49
|
+
/**
|
|
50
|
+
* The binding type for Cloudflare Workers
|
|
51
|
+
*/
|
|
52
|
+
type: "secrets_store";
|
|
53
|
+
/**
|
|
54
|
+
* The unique identifier of the secrets store
|
|
55
|
+
*/
|
|
56
|
+
id: string;
|
|
57
|
+
/**
|
|
58
|
+
* The name of the secrets store
|
|
59
|
+
*/
|
|
60
|
+
name: string;
|
|
61
|
+
/**
|
|
62
|
+
* The secrets stored in this secrets store
|
|
63
|
+
* Maps secret names to Secret instances created with alchemy.secret()
|
|
64
|
+
*/
|
|
65
|
+
secrets?: S;
|
|
66
|
+
/**
|
|
67
|
+
* Timestamp when the secrets store was created
|
|
68
|
+
*/
|
|
69
|
+
createdAt: number;
|
|
70
|
+
/**
|
|
71
|
+
* Timestamp when the secrets store was last modified
|
|
72
|
+
*/
|
|
73
|
+
modifiedAt: number;
|
|
74
|
+
}
|
|
75
|
+
export type SecretsStoreWithBinding<S extends Record<string, Secret> | undefined = undefined> = SecretsStore<S> & Bound<SecretsStore<S>>;
|
|
76
|
+
/**
|
|
77
|
+
* A Cloudflare Secrets Store is a secure, centralized location for storing account-level secrets.
|
|
78
|
+
*
|
|
79
|
+
* @see https://developers.cloudflare.com/secrets-store/
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* // Create a basic secrets store
|
|
83
|
+
* const store = await SecretsStore("my-secrets", {
|
|
84
|
+
* name: "production-secrets"
|
|
85
|
+
* });
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* // Create a secrets store with initial secrets
|
|
89
|
+
* const store = await SecretsStore("my-secrets", {
|
|
90
|
+
* name: "production-secrets",
|
|
91
|
+
* secrets: {
|
|
92
|
+
* API_KEY: alchemy.secret(process.env.API_KEY),
|
|
93
|
+
* DATABASE_URL: alchemy.secret(process.env.DATABASE_URL),
|
|
94
|
+
* JWT_SECRET: alchemy.secret(process.env.JWT_SECRET)
|
|
95
|
+
* }
|
|
96
|
+
* });
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* // Adopt an existing store if it already exists
|
|
100
|
+
* const existingStore = await SecretsStore("existing-store", {
|
|
101
|
+
* name: "existing-secrets-store",
|
|
102
|
+
* adopt: true,
|
|
103
|
+
* secrets: {
|
|
104
|
+
* NEW_SECRET: alchemy.secret("new-value")
|
|
105
|
+
* }
|
|
106
|
+
* });
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* // When removing from Alchemy state, keep the store in Cloudflare
|
|
110
|
+
* const preservedStore = await SecretsStore("preserve-store", {
|
|
111
|
+
* name: "preserved-secrets-store",
|
|
112
|
+
* delete: false
|
|
113
|
+
* });
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* // Use in a Worker binding to access secrets
|
|
117
|
+
* const worker = await Worker("my-worker", {
|
|
118
|
+
* bindings: {
|
|
119
|
+
* SECRETS: store
|
|
120
|
+
* },
|
|
121
|
+
* code: `
|
|
122
|
+
* export default {
|
|
123
|
+
* async fetch(request, env) {
|
|
124
|
+
* const apiKey = await env.SECRETS.get("API_KEY");
|
|
125
|
+
* return new Response(apiKey ? "Secret found" : "No secret");
|
|
126
|
+
* }
|
|
127
|
+
* }
|
|
128
|
+
* `
|
|
129
|
+
* });
|
|
130
|
+
*/
|
|
131
|
+
export declare function SecretsStore<const S extends Record<string, Secret> | undefined = undefined>(name: string, props?: SecretsStoreProps<S>): Promise<SecretsStoreWithBinding<S>>;
|
|
132
|
+
export declare function createSecretsStore<S extends Record<string, Secret> | undefined = undefined>(api: CloudflareApi, props: SecretsStoreProps<S> & {
|
|
133
|
+
name: string;
|
|
134
|
+
}): Promise<{
|
|
135
|
+
id: string;
|
|
136
|
+
}>;
|
|
137
|
+
export declare function deleteSecretsStore(api: CloudflareApi, storeId: string): Promise<void>;
|
|
138
|
+
export declare function findSecretsStoreByName(api: CloudflareApi, name: string): Promise<{
|
|
139
|
+
id: string;
|
|
140
|
+
createdAt?: number;
|
|
141
|
+
} | null>;
|
|
142
|
+
export declare function insertSecrets<S extends Record<string, Secret> | undefined = undefined>(api: CloudflareApi, storeId: string, props: SecretsStoreProps<S>): Promise<void>;
|
|
143
|
+
export declare function deleteSecrets(api: CloudflareApi, storeId: string, secretNames: string[]): Promise<void>;
|
|
144
|
+
export declare function listSecrets(api: CloudflareApi, storeId: string): Promise<string[]>;
|
|
145
|
+
//# sourceMappingURL=secrets-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-store.d.ts","sourceRoot":"","sources":["../../src/cloudflare/secrets-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { Resource, ResourceKind } from "../resource.js";
|
|
2
|
+
import { bind } from "../runtime/bind.js";
|
|
3
|
+
import { secret } from "../secret.js";
|
|
4
|
+
import { handleApiError } from "./api-error.js";
|
|
5
|
+
import { createCloudflareApi, } from "./api.js";
|
|
6
|
+
export function isSecretsStore(resource) {
|
|
7
|
+
return resource[ResourceKind] === "cloudflare::SecretsStore";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A Cloudflare Secrets Store is a secure, centralized location for storing account-level secrets.
|
|
11
|
+
*
|
|
12
|
+
* @see https://developers.cloudflare.com/secrets-store/
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Create a basic secrets store
|
|
16
|
+
* const store = await SecretsStore("my-secrets", {
|
|
17
|
+
* name: "production-secrets"
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Create a secrets store with initial secrets
|
|
22
|
+
* const store = await SecretsStore("my-secrets", {
|
|
23
|
+
* name: "production-secrets",
|
|
24
|
+
* secrets: {
|
|
25
|
+
* API_KEY: alchemy.secret(process.env.API_KEY),
|
|
26
|
+
* DATABASE_URL: alchemy.secret(process.env.DATABASE_URL),
|
|
27
|
+
* JWT_SECRET: alchemy.secret(process.env.JWT_SECRET)
|
|
28
|
+
* }
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* // Adopt an existing store if it already exists
|
|
33
|
+
* const existingStore = await SecretsStore("existing-store", {
|
|
34
|
+
* name: "existing-secrets-store",
|
|
35
|
+
* adopt: true,
|
|
36
|
+
* secrets: {
|
|
37
|
+
* NEW_SECRET: alchemy.secret("new-value")
|
|
38
|
+
* }
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* // When removing from Alchemy state, keep the store in Cloudflare
|
|
43
|
+
* const preservedStore = await SecretsStore("preserve-store", {
|
|
44
|
+
* name: "preserved-secrets-store",
|
|
45
|
+
* delete: false
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* // Use in a Worker binding to access secrets
|
|
50
|
+
* const worker = await Worker("my-worker", {
|
|
51
|
+
* bindings: {
|
|
52
|
+
* SECRETS: store
|
|
53
|
+
* },
|
|
54
|
+
* code: `
|
|
55
|
+
* export default {
|
|
56
|
+
* async fetch(request, env) {
|
|
57
|
+
* const apiKey = await env.SECRETS.get("API_KEY");
|
|
58
|
+
* return new Response(apiKey ? "Secret found" : "No secret");
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
* `
|
|
62
|
+
* });
|
|
63
|
+
*/
|
|
64
|
+
export async function SecretsStore(name, props = {}) {
|
|
65
|
+
// Convert string values to Secret instances
|
|
66
|
+
const normalizedProps = {
|
|
67
|
+
...props,
|
|
68
|
+
secrets: props.secrets
|
|
69
|
+
? Object.fromEntries(Object.entries(props.secrets).map(([key, value]) => [
|
|
70
|
+
key,
|
|
71
|
+
typeof value === "string" ? secret(value) : value,
|
|
72
|
+
]))
|
|
73
|
+
: undefined,
|
|
74
|
+
};
|
|
75
|
+
const store = await _SecretsStore(name, normalizedProps);
|
|
76
|
+
const binding = await bind(store);
|
|
77
|
+
return {
|
|
78
|
+
...store,
|
|
79
|
+
get: binding.get,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const _SecretsStore = Resource("cloudflare::SecretsStore", async function (id, props) {
|
|
83
|
+
const api = await createCloudflareApi(props);
|
|
84
|
+
const name = props.name ?? id;
|
|
85
|
+
if (this.phase === "delete") {
|
|
86
|
+
const storeId = this.output?.id;
|
|
87
|
+
if (storeId && props.delete !== false) {
|
|
88
|
+
await deleteSecretsStore(api, storeId);
|
|
89
|
+
}
|
|
90
|
+
return this.destroy();
|
|
91
|
+
}
|
|
92
|
+
let storeId = this.phase === "update" ? this.output?.id || "" : "";
|
|
93
|
+
let createdAt = this.phase === "update" ? this.output?.createdAt || Date.now() : Date.now();
|
|
94
|
+
if (this.phase === "update" && storeId) {
|
|
95
|
+
const currentSecrets = props.secrets || {};
|
|
96
|
+
const existingSecretNames = await listSecrets(api, storeId);
|
|
97
|
+
const secretsToDelete = existingSecretNames.filter((name) => !(name in currentSecrets));
|
|
98
|
+
if (secretsToDelete.length > 0) {
|
|
99
|
+
await deleteSecrets(api, storeId, secretsToDelete);
|
|
100
|
+
}
|
|
101
|
+
await insertSecrets(api, storeId, props);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
try {
|
|
105
|
+
const { id } = await createSecretsStore(api, {
|
|
106
|
+
...props,
|
|
107
|
+
name,
|
|
108
|
+
});
|
|
109
|
+
createdAt = Date.now();
|
|
110
|
+
storeId = id;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (props.adopt &&
|
|
114
|
+
error instanceof Error &&
|
|
115
|
+
error.message.includes("already exists")) {
|
|
116
|
+
console.log(`Secrets store '${name}' already exists, adopting it`);
|
|
117
|
+
const existingStore = await findSecretsStoreByName(api, name);
|
|
118
|
+
if (!existingStore) {
|
|
119
|
+
throw new Error(`Failed to find existing secrets store '${name}' for adoption`);
|
|
120
|
+
}
|
|
121
|
+
storeId = existingStore.id;
|
|
122
|
+
createdAt = existingStore.createdAt || Date.now();
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
await insertSecrets(api, storeId, props);
|
|
129
|
+
}
|
|
130
|
+
return this({
|
|
131
|
+
type: "secrets_store",
|
|
132
|
+
id: storeId,
|
|
133
|
+
name: name,
|
|
134
|
+
secrets: props.secrets,
|
|
135
|
+
createdAt: createdAt,
|
|
136
|
+
modifiedAt: Date.now(),
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
export async function createSecretsStore(api, props) {
|
|
140
|
+
const createResponse = await api.post(`/accounts/${api.accountId}/secrets_store/stores`, {
|
|
141
|
+
name: props.name,
|
|
142
|
+
});
|
|
143
|
+
if (!createResponse.ok) {
|
|
144
|
+
await handleApiError(createResponse, "create", "secrets_store", props.name);
|
|
145
|
+
}
|
|
146
|
+
return { id: (await createResponse.json()).result.id };
|
|
147
|
+
}
|
|
148
|
+
export async function deleteSecretsStore(api, storeId) {
|
|
149
|
+
const deleteResponse = await api.delete(`/accounts/${api.accountId}/secrets_store/stores/${storeId}`);
|
|
150
|
+
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
151
|
+
await handleApiError(deleteResponse, "delete", "secrets_store", storeId);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export async function findSecretsStoreByName(api, name) {
|
|
155
|
+
const response = await api.get(`/accounts/${api.accountId}/secrets_store/stores`);
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
await handleApiError(response, "list", "secrets_store", "all");
|
|
158
|
+
}
|
|
159
|
+
const data = (await response.json());
|
|
160
|
+
const stores = data.result;
|
|
161
|
+
const match = stores.find((store) => store.name === name);
|
|
162
|
+
if (match) {
|
|
163
|
+
return {
|
|
164
|
+
id: match.id,
|
|
165
|
+
createdAt: match.created ? new Date(match.created).getTime() : undefined,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
export async function insertSecrets(api, storeId, props) {
|
|
171
|
+
if (props.secrets && Object.keys(props.secrets).length > 0) {
|
|
172
|
+
const secretEntries = Object.entries(props.secrets);
|
|
173
|
+
const BATCH_SIZE = 100;
|
|
174
|
+
for (let i = 0; i < secretEntries.length; i += BATCH_SIZE) {
|
|
175
|
+
const batch = secretEntries.slice(i, i + BATCH_SIZE);
|
|
176
|
+
const bulkPayload = batch.map(([name, secretValue]) => ({
|
|
177
|
+
name,
|
|
178
|
+
value: secretValue.unencrypted,
|
|
179
|
+
scopes: [],
|
|
180
|
+
}));
|
|
181
|
+
const bulkResponse = await api.post(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`, bulkPayload);
|
|
182
|
+
if (!bulkResponse.ok) {
|
|
183
|
+
const errorData = await bulkResponse.json().catch(() => ({
|
|
184
|
+
errors: [{ message: bulkResponse.statusText }],
|
|
185
|
+
}));
|
|
186
|
+
const errorMessage = errorData.errors?.[0]?.message || bulkResponse.statusText;
|
|
187
|
+
throw new Error(`Error creating secrets batch: ${errorMessage}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export async function deleteSecrets(api, storeId, secretNames) {
|
|
193
|
+
if (secretNames.length > 0) {
|
|
194
|
+
const deleteResponse = await api.delete(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`, {
|
|
195
|
+
body: JSON.stringify(secretNames),
|
|
196
|
+
headers: {
|
|
197
|
+
"Content-Type": "application/json",
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
201
|
+
await handleApiError(deleteResponse, "delete", "secrets", secretNames.join(", "));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
export async function listSecrets(api, storeId) {
|
|
206
|
+
const response = await api.get(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`);
|
|
207
|
+
if (!response.ok) {
|
|
208
|
+
await handleApiError(response, "list", "secrets", "all");
|
|
209
|
+
}
|
|
210
|
+
const data = (await response.json());
|
|
211
|
+
return data.result.map((secret) => secret.name);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=secrets-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-store.js","sourceRoot":"","sources":["../../src/cloudflare/secrets-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Assets } from "./assets.ts";
|
|
2
|
+
import type { Bindings } from "./bindings.ts";
|
|
3
|
+
import { type WebsiteProps } from "./website.ts";
|
|
4
|
+
import type { Worker } from "./worker.ts";
|
|
5
|
+
export interface SvelteKitProps<B extends Bindings> extends WebsiteProps<B> {
|
|
6
|
+
}
|
|
7
|
+
export type SvelteKit<B extends Bindings> = B extends {
|
|
8
|
+
ASSETS: any;
|
|
9
|
+
} ? never : Worker<B & {
|
|
10
|
+
ASSETS: Assets;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Deploy a SvelteKit application to Cloudflare Workers with automatically configured defaults.
|
|
14
|
+
*
|
|
15
|
+
* This resource handles the deployment of SvelteKit applications with optimized settings for
|
|
16
|
+
* Cloudflare Workers, including proper build commands and compatibility flags. It expects
|
|
17
|
+
* the SvelteKit app to be configured with the @sveltejs/adapter-cloudflare adapter.
|
|
18
|
+
*
|
|
19
|
+
* For local development, SvelteKit provides excellent built-in dev server support with
|
|
20
|
+
* emulated platform.env bindings for Cloudflare-specific APIs.
|
|
21
|
+
*
|
|
22
|
+
* @see https://svelte.dev/docs/kit/adapter-cloudflare - Official SvelteKit Cloudflare adapter docs
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Deploy a basic SvelteKit application
|
|
26
|
+
* const svelteApp = await SvelteKit("my-svelte-app");
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Deploy with Cloudflare bindings
|
|
30
|
+
* import { D1Database, KVNamespace, R2Bucket } from "alchemy/cloudflare";
|
|
31
|
+
*
|
|
32
|
+
* const database = await D1Database("svelte-db");
|
|
33
|
+
* const sessions = await KVNamespace("sessions");
|
|
34
|
+
* const storage = await R2Bucket("app-storage");
|
|
35
|
+
*
|
|
36
|
+
* const svelteApp = await SvelteKit("svelte-with-bindings", {
|
|
37
|
+
* bindings: {
|
|
38
|
+
* DB: database,
|
|
39
|
+
* AUTH_STORE: sessions,
|
|
40
|
+
* STORAGE: storage
|
|
41
|
+
* }
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* @param id - Unique identifier for the SvelteKit application
|
|
45
|
+
* @param props - Configuration properties for the SvelteKit deployment
|
|
46
|
+
* @returns A Cloudflare Worker resource representing the deployed SvelteKit application
|
|
47
|
+
*/
|
|
48
|
+
export declare function SvelteKit<B extends Bindings>(id: string, props?: Partial<SvelteKitProps<B>>): Promise<SvelteKit<B>>;
|
|
49
|
+
//# sourceMappingURL=sveltekit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sveltekit.d.ts","sourceRoot":"","sources":["../../src/cloudflare/sveltekit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;CAAG;AAG9E,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,GACjE,KAAK,GACL,MAAM,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAChD,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAmBvB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Website } from "./website.js";
|
|
3
|
+
/**
|
|
4
|
+
* Deploy a SvelteKit application to Cloudflare Workers with automatically configured defaults.
|
|
5
|
+
*
|
|
6
|
+
* This resource handles the deployment of SvelteKit applications with optimized settings for
|
|
7
|
+
* Cloudflare Workers, including proper build commands and compatibility flags. It expects
|
|
8
|
+
* the SvelteKit app to be configured with the @sveltejs/adapter-cloudflare adapter.
|
|
9
|
+
*
|
|
10
|
+
* For local development, SvelteKit provides excellent built-in dev server support with
|
|
11
|
+
* emulated platform.env bindings for Cloudflare-specific APIs.
|
|
12
|
+
*
|
|
13
|
+
* @see https://svelte.dev/docs/kit/adapter-cloudflare - Official SvelteKit Cloudflare adapter docs
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // Deploy a basic SvelteKit application
|
|
17
|
+
* const svelteApp = await SvelteKit("my-svelte-app");
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* // Deploy with Cloudflare bindings
|
|
21
|
+
* import { D1Database, KVNamespace, R2Bucket } from "alchemy/cloudflare";
|
|
22
|
+
*
|
|
23
|
+
* const database = await D1Database("svelte-db");
|
|
24
|
+
* const sessions = await KVNamespace("sessions");
|
|
25
|
+
* const storage = await R2Bucket("app-storage");
|
|
26
|
+
*
|
|
27
|
+
* const svelteApp = await SvelteKit("svelte-with-bindings", {
|
|
28
|
+
* bindings: {
|
|
29
|
+
* DB: database,
|
|
30
|
+
* AUTH_STORE: sessions,
|
|
31
|
+
* STORAGE: storage
|
|
32
|
+
* }
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* @param id - Unique identifier for the SvelteKit application
|
|
36
|
+
* @param props - Configuration properties for the SvelteKit deployment
|
|
37
|
+
* @returns A Cloudflare Worker resource representing the deployed SvelteKit application
|
|
38
|
+
*/
|
|
39
|
+
export async function SvelteKit(id, props) {
|
|
40
|
+
if (props?.compatibilityDate) {
|
|
41
|
+
const providedDate = new Date(props.compatibilityDate);
|
|
42
|
+
const minDate = new Date("2024-09-23");
|
|
43
|
+
if (providedDate < minDate) {
|
|
44
|
+
throw new Error(`SvelteKit compatibility date must be >= 2024-09-23 for nodejs_compat support, got ${props.compatibilityDate}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return Website(id, {
|
|
48
|
+
...props,
|
|
49
|
+
command: props?.command ?? "bun run build",
|
|
50
|
+
main: props?.main ?? join(".svelte-kit", "cloudflare", "_worker.js"),
|
|
51
|
+
assets: props?.assets ?? join(".svelte-kit", "cloudflare"),
|
|
52
|
+
compatibilityFlags: ["nodejs_compat", ...(props?.compatibilityFlags ?? [])],
|
|
53
|
+
compatibilityDate: props?.compatibilityDate,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=sveltekit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sveltekit.js","sourceRoot":"","sources":["../../src/cloudflare/sveltekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAC;AAU1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAU,EACV,KAAkC;IAElC,IAAI,KAAK,EAAE,iBAAiB,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,YAAY,GAAG,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,qFAAqF,KAAK,CAAC,iBAAiB,EAAE,CAC/G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,EAAE,EAAE;QACjB,GAAG,KAAK;QACR,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,eAAe;QAC1C,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;QACpE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;QAC1D,kBAAkB,EAAE,CAAC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC3E,iBAAiB,EAAE,KAAK,EAAE,iBAAiB;KAC5C,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/cloudflare/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/cloudflare/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,cAAc,CAAC;IAClD,QAAQ,EAAE;QACR,iBAAiB,EAAE,OAAO,CAAC;QAC3B,kBAAkB,EAAE,IAAI,CAAC;QACzB,sBAAsB,EAAE,IAAI,CAAC;QAC7B,mBAAmB,EAAE,IAAI,CAAC;KAC3B,CAAC;IACF,YAAY,EAAE;QACZ,qBAAqB,EAAE;YACrB,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,gBAAgB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iCAAiC,EAAE,OAAO,CAAC;IAC3C,gCAAgC,EAAE,OAAO,CAAC;IAC1C,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B;AAID,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C5E"}
|
package/lib/cloudflare/user.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { logger } from "../util/logger.js";
|
|
1
2
|
import { CloudflareApiError } from "./api-error.js";
|
|
2
3
|
import { getCloudflareAuthHeaders, } from "./auth.js";
|
|
3
4
|
const accountCache = {};
|
|
@@ -46,7 +47,7 @@ export async function getUserEmailFromApiKey(apiKey) {
|
|
|
46
47
|
return data.result.email;
|
|
47
48
|
}
|
|
48
49
|
catch (error) {
|
|
49
|
-
|
|
50
|
+
logger.error("Error retrieving email from Cloudflare API:", error);
|
|
50
51
|
throw new Error("Failed to automatically discover email for API Key authentication");
|
|
51
52
|
}
|
|
52
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/cloudflare/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,wBAAwB,GAEzB,MAAM,WAAW,CAAC;AAmDnB,MAAM,YAAY,GAAwC,EAAE,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA8B;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,+CAA+C,EAC/C;QACE,OAAO;KACR,CACF,CAAC;IAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAS,CAAC,MAAM,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,kBAAkB,CAC1B,kQAAkQ,EAClQ,QAAQ,CACT,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAA2B,EAAE,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAc;IACzD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,sCAAsC,CAAC;QAEvD,kDAAkD;QAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,OAAO,EAAE;YAC9C,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,MAAM;aACrB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAQlC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/cloudflare/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,wBAAwB,GAEzB,MAAM,WAAW,CAAC;AAmDnB,MAAM,YAAY,GAAwC,EAAE,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA8B;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,+CAA+C,EAC/C;QACE,OAAO;KACR,CACF,CAAC;IAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAS,CAAC,MAAM,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,kBAAkB,CAC1B,kQAAkQ,EAClQ,QAAQ,CACT,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAA2B,EAAE,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAc;IACzD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,sCAAsC,CAAC;QAEvD,kDAAkD;QAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,OAAO,EAAE;YAC9C,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,MAAM;aACrB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAQlC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC"}
|