alchemy 0.62.2 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1518 -1204
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/template-manager.ts +2 -0
- package/bin/types.ts +2 -1
- package/lib/alchemy.d.ts +6 -22
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +65 -169
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts +0 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -16
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts.map +1 -1
- package/lib/aws/account-id.js +3 -2
- package/lib/aws/account-id.js.map +1 -1
- package/lib/aws/bucket.d.ts +8 -2
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +21 -14
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +8 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +7 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/function.d.ts +9 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +35 -26
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +2 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +8 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +13 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +8 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +22 -14
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +8 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +10 -3
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -1
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -1
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +8 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +15 -10
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +8 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +17 -9
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +2 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +7 -6
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +9 -4
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +20 -24
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +2 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +6 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +5 -1
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +6 -1
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -1
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/astro/plugin.d.ts +2 -1
- package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
- package/lib/cloudflare/astro/plugin.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts +120 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +80 -2
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +10 -4
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +12 -9
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -1
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +7 -3
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +7 -5
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -1
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +2 -1
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +3 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +11 -2
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/paths.d.ts +4 -0
- package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/paths.js +11 -0
- package/lib/cloudflare/miniflare/paths.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +14 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +31 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.js +1 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +6 -4
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +13 -9
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.js +32 -2
- package/lib/cloudflare/react-router/react-router.js.map +1 -1
- package/lib/cloudflare/redwood/plugin.d.ts +2 -1
- package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
- package/lib/cloudflare/redwood/plugin.js.map +1 -1
- package/lib/cloudflare/route.js +1 -1
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +3 -1
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +3 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +6 -23
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +8 -4
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +1 -1
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +5 -2
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +5 -1
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +5 -1
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +7 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vite/plugin.d.ts +2 -1
- package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
- package/lib/cloudflare/vite/plugin.js.map +1 -1
- package/lib/cloudflare/vite/vite.d.ts +1 -1
- package/lib/cloudflare/vite/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite/vite.js +1 -1
- package/lib/cloudflare/vite/vite.js.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +1 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +12 -7
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +5 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/container.d.ts +6 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +5 -1
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/network.d.ts +8 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +7 -2
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/volume.d.ts +8 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +6 -4
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/fs/index.d.ts +0 -8
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -8
- package/lib/fs/index.js.map +1 -1
- package/lib/github/client.d.ts +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +2 -1
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts +8 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +16 -12
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/neon/project.d.ts +7 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +10 -6
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/branch.d.ts +4 -2
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +18 -12
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +8 -2
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +24 -16
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/password.d.ts +8 -2
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +2 -2
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts +0 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +1 -9
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +9 -3
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +21 -34
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts +7 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +45 -6
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +8 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +35 -5
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +8 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +36 -6
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +0 -5
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +0 -28
- package/lib/serde.js.map +1 -1
- package/lib/state/d1-state-store.d.ts +1 -1
- package/lib/state/d1-state-store.d.ts.map +1 -1
- package/lib/state/d1-state-store.js +5 -5
- package/lib/state/d1-state-store.js.map +1 -1
- package/lib/state/sqlite-state-store.d.ts.map +1 -1
- package/lib/state/sqlite-state-store.js +7 -11
- package/lib/state/sqlite-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +3 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts +2 -2
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +4 -3
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +4 -3
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.js +2 -2
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +3 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +3 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.js +2 -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 +3 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +3 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +3 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +3 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +3 -2
- 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 +4 -3
- 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 +3 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +4 -3
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -0
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts +8 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +5 -4
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/ignore-matcher.d.ts.map +1 -1
- package/lib/util/ignore-matcher.js +3 -1
- package/lib/util/ignore-matcher.js.map +1 -1
- package/lib/util/peer.d.ts +10 -0
- package/lib/util/peer.d.ts.map +1 -0
- package/lib/util/peer.js +42 -0
- package/lib/util/peer.js.map +1 -0
- package/lib/util/telemetry/constants.d.ts.map +1 -1
- package/lib/util/telemetry/constants.js +2 -2
- package/lib/util/telemetry/constants.js.map +1 -1
- package/lib/vercel/project.d.ts +7 -1
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +28 -0
- package/lib/vercel/project.js.map +1 -1
- package/package.json +88 -74
- package/src/alchemy.ts +76 -222
- package/src/apply.ts +6 -19
- package/src/aws/account-id.ts +6 -3
- package/src/aws/bucket.ts +43 -32
- package/src/aws/ec2/security-group.ts +15 -3
- package/src/aws/function.ts +65 -39
- package/src/aws/policy-attachment.ts +10 -6
- package/src/aws/policy.ts +33 -15
- package/src/aws/queue.ts +50 -29
- package/src/aws/role.ts +37 -20
- package/src/aws/ses.ts +24 -20
- package/src/aws/ssm-parameter.ts +40 -20
- package/src/aws/table.ts +35 -17
- package/src/cloudflare/account-api-token.ts +9 -7
- package/src/cloudflare/ai-gateway.ts +37 -34
- package/src/cloudflare/api-schema.ts +33 -26
- package/src/cloudflare/api-shield.ts +15 -2
- package/src/cloudflare/astro/astro.ts +5 -1
- package/src/cloudflare/astro/plugin.ts +2 -1
- package/src/cloudflare/bindings.ts +2 -2
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket.ts +242 -3
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +23 -12
- package/src/cloudflare/custom-domain.ts +2 -2
- package/src/cloudflare/d1-database.ts +11 -4
- package/src/cloudflare/dispatch-namespace.ts +10 -7
- package/src/cloudflare/hyperdrive.ts +13 -3
- package/src/cloudflare/kv-namespace.ts +25 -2
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
- package/src/cloudflare/miniflare/paths.ts +13 -0
- package/src/cloudflare/pipeline.ts +76 -28
- package/src/cloudflare/queue-consumer.ts +1 -1
- package/src/cloudflare/queue.ts +65 -54
- package/src/cloudflare/react-router/react-router.ts +28 -2
- package/src/cloudflare/redwood/plugin.ts +3 -2
- package/src/cloudflare/route.ts +1 -1
- package/src/cloudflare/ruleset.ts +7 -2
- package/src/cloudflare/secret.ts +20 -31
- package/src/cloudflare/secrets-store.ts +7 -3
- package/src/cloudflare/tunnel.ts +13 -2
- package/src/cloudflare/vectorize-index.ts +14 -3
- package/src/cloudflare/vite/plugin.ts +3 -2
- package/src/cloudflare/vite/vite.ts +2 -3
- package/src/cloudflare/website.ts +1 -1
- package/src/cloudflare/worker.ts +35 -23
- package/src/cloudflare/wrangler.json.ts +7 -4
- package/src/docker/container.ts +13 -1
- package/src/docker/network.ts +18 -3
- package/src/docker/volume.ts +17 -6
- package/src/fs/index.ts +0 -8
- package/src/github/client.ts +6 -2
- package/src/github/repository-environment.ts +27 -13
- package/src/neon/project.ts +20 -6
- package/src/planetscale/branch.ts +24 -13
- package/src/planetscale/database.ts +38 -17
- package/src/planetscale/password.ts +10 -3
- package/src/resource.ts +1 -10
- package/src/scope.ts +29 -38
- package/src/sentry/client-key.ts +74 -6
- package/src/sentry/project.ts +59 -6
- package/src/sentry/team.ts +55 -7
- package/src/serde.ts +0 -44
- package/src/state/d1-state-store.ts +13 -6
- package/src/state/sqlite-state-store.ts +16 -17
- package/src/stripe/card.ts +5 -2
- package/src/stripe/client.ts +10 -3
- package/src/stripe/coupon.ts +4 -3
- package/src/stripe/customer.ts +2 -2
- package/src/stripe/entitlements-feature.ts +5 -2
- package/src/stripe/file.ts +3 -2
- package/src/stripe/meter.ts +2 -2
- package/src/stripe/portal-configuration.ts +5 -2
- package/src/stripe/price.ts +3 -2
- package/src/stripe/product-feature.ts +5 -2
- package/src/stripe/product.ts +3 -2
- package/src/stripe/promotion-code.ts +3 -2
- package/src/stripe/shipping-rate.ts +4 -3
- package/src/stripe/tax-rate.ts +3 -2
- package/src/stripe/webhook.ts +4 -3
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +15 -5
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/util/telemetry/constants.ts +2 -2
- package/src/vercel/project.ts +46 -1
- package/templates/astro/_gitignore +2 -1
- package/templates/hono/README.md +19 -0
- package/templates/hono/_env +1 -0
- package/templates/hono/_env.example +1 -0
- package/templates/hono/_gitignore +34 -0
- package/templates/hono/alchemy.run.ts +22 -0
- package/templates/hono/package.json +18 -0
- package/templates/hono/src/index.ts +17 -0
- package/templates/hono/tsconfig.json +13 -0
- package/templates/hono/types/env.d.ts +16 -0
- package/templates/nuxt/_gitignore +2 -1
- package/templates/react-router/_gitignore +1 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/templates/rwsdk/_gitignore +2 -3
- package/templates/sveltekit/_gitignore +2 -1
- package/templates/tanstack-start/_gitignore +2 -1
- package/templates/typescript/_gitignore +2 -1
- package/templates/vite/_gitignore +2 -1
- package/workers/cloudflare-state-store.js +69 -74
- package/workers/dofs-state-store.js +1 -1
- package/bin/bootstrap-s3.ts +0 -255
- package/lib/ai/ark.d.ts +0 -12
- package/lib/ai/ark.d.ts.map +0 -1
- package/lib/ai/ark.js +0 -87
- package/lib/ai/ark.js.map +0 -1
- package/lib/ai/astro-file.d.ts +0 -138
- package/lib/ai/astro-file.d.ts.map +0 -1
- package/lib/ai/astro-file.js +0 -158
- package/lib/ai/astro-file.js.map +0 -1
- package/lib/ai/client.d.ts +0 -51
- package/lib/ai/client.d.ts.map +0 -1
- package/lib/ai/client.js +0 -58
- package/lib/ai/client.js.map +0 -1
- package/lib/ai/css-file.d.ts +0 -132
- package/lib/ai/css-file.d.ts.map +0 -1
- package/lib/ai/css-file.js +0 -142
- package/lib/ai/css-file.js.map +0 -1
- package/lib/ai/data.d.ts +0 -152
- package/lib/ai/data.d.ts.map +0 -1
- package/lib/ai/data.js +0 -120
- package/lib/ai/data.js.map +0 -1
- package/lib/ai/document.d.ts +0 -208
- package/lib/ai/document.d.ts.map +0 -1
- package/lib/ai/document.js +0 -206
- package/lib/ai/document.js.map +0 -1
- package/lib/ai/html-file.d.ts +0 -129
- package/lib/ai/html-file.d.ts.map +0 -1
- package/lib/ai/html-file.js +0 -139
- package/lib/ai/html-file.js.map +0 -1
- package/lib/ai/index.d.ts +0 -11
- package/lib/ai/index.d.ts.map +0 -1
- package/lib/ai/index.js +0 -11
- package/lib/ai/index.js.map +0 -1
- package/lib/ai/json-file.d.ts +0 -161
- package/lib/ai/json-file.d.ts.map +0 -1
- package/lib/ai/json-file.js +0 -188
- package/lib/ai/json-file.js.map +0 -1
- package/lib/ai/typescript-file.d.ts +0 -140
- package/lib/ai/typescript-file.d.ts.map +0 -1
- package/lib/ai/typescript-file.js +0 -146
- package/lib/ai/typescript-file.js.map +0 -1
- package/lib/ai/vue-file.d.ts +0 -127
- package/lib/ai/vue-file.d.ts.map +0 -1
- package/lib/ai/vue-file.js +0 -137
- package/lib/ai/vue-file.js.map +0 -1
- package/lib/ai/yaml-file.d.ts +0 -170
- package/lib/ai/yaml-file.d.ts.map +0 -1
- package/lib/ai/yaml-file.js +0 -201
- package/lib/ai/yaml-file.js.map +0 -1
- package/lib/fs/static-astro-file.d.ts +0 -35
- package/lib/fs/static-astro-file.d.ts.map +0 -1
- package/lib/fs/static-astro-file.js +0 -40
- package/lib/fs/static-astro-file.js.map +0 -1
- package/lib/fs/static-css-file.d.ts +0 -25
- package/lib/fs/static-css-file.d.ts.map +0 -1
- package/lib/fs/static-css-file.js +0 -30
- package/lib/fs/static-css-file.js.map +0 -1
- package/lib/fs/static-html-file.d.ts +0 -32
- package/lib/fs/static-html-file.d.ts.map +0 -1
- package/lib/fs/static-html-file.js +0 -37
- package/lib/fs/static-html-file.js.map +0 -1
- package/lib/fs/static-json-file.d.ts +0 -18
- package/lib/fs/static-json-file.d.ts.map +0 -1
- package/lib/fs/static-json-file.js +0 -19
- package/lib/fs/static-json-file.js.map +0 -1
- package/lib/fs/static-text-file.d.ts +0 -13
- package/lib/fs/static-text-file.d.ts.map +0 -1
- package/lib/fs/static-text-file.js +0 -9
- package/lib/fs/static-text-file.js.map +0 -1
- package/lib/fs/static-typescript-file.d.ts +0 -20
- package/lib/fs/static-typescript-file.d.ts.map +0 -1
- package/lib/fs/static-typescript-file.js +0 -16
- package/lib/fs/static-typescript-file.js.map +0 -1
- package/lib/fs/static-vue-file.d.ts +0 -29
- package/lib/fs/static-vue-file.d.ts.map +0 -1
- package/lib/fs/static-vue-file.js +0 -34
- package/lib/fs/static-vue-file.js.map +0 -1
- package/lib/fs/static-yaml-file.d.ts +0 -23
- package/lib/fs/static-yaml-file.d.ts.map +0 -1
- package/lib/fs/static-yaml-file.js +0 -10
- package/lib/fs/static-yaml-file.js.map +0 -1
- package/lib/internal/docs/providers.d.ts +0 -34
- package/lib/internal/docs/providers.d.ts.map +0 -1
- package/lib/internal/docs/providers.js +0 -200
- package/lib/internal/docs/providers.js.map +0 -1
- package/lib/runtime/bind.d.ts +0 -25
- package/lib/runtime/bind.d.ts.map +0 -1
- package/lib/runtime/bind.js +0 -76
- package/lib/runtime/bind.js.map +0 -1
- package/lib/runtime/global.d.ts +0 -8
- package/lib/runtime/global.d.ts.map +0 -1
- package/lib/runtime/global.js +0 -3
- package/lib/runtime/global.js.map +0 -1
- package/lib/runtime/plugin.d.ts +0 -35
- package/lib/runtime/plugin.d.ts.map +0 -1
- package/lib/runtime/plugin.js +0 -134
- package/lib/runtime/plugin.js.map +0 -1
- package/lib/runtime/shims.d.ts +0 -6
- package/lib/runtime/shims.d.ts.map +0 -1
- package/lib/runtime/shims.js +0 -27
- package/lib/runtime/shims.js.map +0 -1
- package/lib/runtime/state.d.ts +0 -5
- package/lib/runtime/state.d.ts.map +0 -1
- package/lib/runtime/state.js +0 -4
- package/lib/runtime/state.js.map +0 -1
- package/lib/web/astro.d.ts +0 -148
- package/lib/web/astro.d.ts.map +0 -1
- package/lib/web/astro.js +0 -419
- package/lib/web/astro.js.map +0 -1
- package/lib/web/shadcn-component.d.ts +0 -30
- package/lib/web/shadcn-component.d.ts.map +0 -1
- package/lib/web/shadcn-component.js +0 -25
- package/lib/web/shadcn-component.js.map +0 -1
- package/lib/web/shadcn.d.ts +0 -98
- package/lib/web/shadcn.d.ts.map +0 -1
- package/lib/web/shadcn.js +0 -102
- package/lib/web/shadcn.js.map +0 -1
- package/lib/web/tailwind.d.ts +0 -65
- package/lib/web/tailwind.d.ts.map +0 -1
- package/lib/web/tailwind.js +0 -98
- package/lib/web/tailwind.js.map +0 -1
- package/lib/web/vite.d.ts +0 -96
- package/lib/web/vite.d.ts.map +0 -1
- package/lib/web/vite.js +0 -232
- package/lib/web/vite.js.map +0 -1
- package/lib/web/vitepress/config.d.ts +0 -12
- package/lib/web/vitepress/config.d.ts.map +0 -1
- package/lib/web/vitepress/config.js +0 -33
- package/lib/web/vitepress/config.js.map +0 -1
- package/lib/web/vitepress/custom-theme.d.ts +0 -174
- package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
- package/lib/web/vitepress/custom-theme.js +0 -337
- package/lib/web/vitepress/custom-theme.js.map +0 -1
- package/lib/web/vitepress/dependencies.d.ts +0 -13
- package/lib/web/vitepress/dependencies.d.ts.map +0 -1
- package/lib/web/vitepress/dependencies.js +0 -37
- package/lib/web/vitepress/dependencies.js.map +0 -1
- package/lib/web/vitepress/home-page.d.ts +0 -247
- package/lib/web/vitepress/home-page.d.ts.map +0 -1
- package/lib/web/vitepress/home-page.js +0 -146
- package/lib/web/vitepress/home-page.js.map +0 -1
- package/lib/web/vitepress/index.d.ts +0 -6
- package/lib/web/vitepress/index.d.ts.map +0 -1
- package/lib/web/vitepress/index.js +0 -6
- package/lib/web/vitepress/index.js.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
- package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.js +0 -73
- package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
- package/lib/web/vitepress/vitepress.d.ts +0 -75
- package/lib/web/vitepress/vitepress.d.ts.map +0 -1
- package/lib/web/vitepress/vitepress.js +0 -254
- package/lib/web/vitepress/vitepress.js.map +0 -1
- package/src/ai/ark.ts +0 -118
- package/src/ai/astro-file.ts +0 -270
- package/src/ai/client.ts +0 -117
- package/src/ai/css-file.ts +0 -247
- package/src/ai/data.ts +0 -221
- package/src/ai/document.ts +0 -367
- package/src/ai/html-file.ts +0 -244
- package/src/ai/index.ts +0 -10
- package/src/ai/json-file.ts +0 -325
- package/src/ai/typescript-file.ts +0 -259
- package/src/ai/vue-file.ts +0 -242
- package/src/ai/yaml-file.ts +0 -328
- package/src/fs/static-astro-file.ts +0 -45
- package/src/fs/static-css-file.ts +0 -35
- package/src/fs/static-html-file.ts +0 -42
- package/src/fs/static-json-file.ts +0 -38
- package/src/fs/static-text-file.ts +0 -23
- package/src/fs/static-typescript-file.ts +0 -37
- package/src/fs/static-vue-file.ts +0 -39
- package/src/fs/static-yaml-file.ts +0 -33
- package/src/internal/docs/providers.ts +0 -286
- package/src/runtime/bind.ts +0 -95
- package/src/runtime/global.ts +0 -10
- package/src/runtime/plugin.ts +0 -163
- package/src/runtime/shims.js +0 -34
- package/src/runtime/state.ts +0 -9
- package/src/web/astro.ts +0 -643
- package/src/web/shadcn-component.ts +0 -72
- package/src/web/shadcn.ts +0 -221
- package/src/web/tailwind.ts +0 -167
- package/src/web/vite.ts +0 -407
- package/src/web/vitepress/config.ts +0 -50
- package/src/web/vitepress/custom-theme.ts +0 -514
- package/src/web/vitepress/dependencies.ts +0 -69
- package/src/web/vitepress/home-page.ts +0 -378
- package/src/web/vitepress/index.ts +0 -5
- package/src/web/vitepress/process-front-matter-files.ts +0 -107
- package/src/web/vitepress/vitepress.ts +0 -372
- package/templates/sveltekit/bun.lock +0 -1099
package/src/aws/ses.ts
CHANGED
|
@@ -1,27 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
GetConfigurationSetCommand,
|
|
8
|
-
GetEmailIdentityCommand,
|
|
9
|
-
NotFoundException,
|
|
10
|
-
PutConfigurationSetDeliveryOptionsCommand,
|
|
11
|
-
PutConfigurationSetReputationOptionsCommand,
|
|
12
|
-
PutConfigurationSetSendingOptionsCommand,
|
|
13
|
-
PutConfigurationSetSuppressionOptionsCommand,
|
|
14
|
-
PutConfigurationSetTrackingOptionsCommand,
|
|
15
|
-
PutEmailIdentityDkimAttributesCommand,
|
|
16
|
-
type ReputationOptions,
|
|
17
|
-
SESv2Client,
|
|
18
|
-
type SendingOptions,
|
|
19
|
-
type SuppressionOptions,
|
|
20
|
-
type TrackingOptions,
|
|
1
|
+
import type {
|
|
2
|
+
DeliveryOptions,
|
|
3
|
+
ReputationOptions,
|
|
4
|
+
SendingOptions,
|
|
5
|
+
SuppressionOptions,
|
|
6
|
+
TrackingOptions,
|
|
21
7
|
} from "@aws-sdk/client-sesv2";
|
|
22
8
|
import type { Context } from "../context.ts";
|
|
23
9
|
import { Resource } from "../resource.ts";
|
|
24
10
|
import { ignore } from "../util/ignore.ts";
|
|
11
|
+
import { importPeer } from "../util/peer.ts";
|
|
25
12
|
import { retry } from "./retry.ts";
|
|
26
13
|
|
|
27
14
|
/**
|
|
@@ -165,6 +152,23 @@ export const SES = Resource(
|
|
|
165
152
|
props: SESProps,
|
|
166
153
|
): Promise<SES> {
|
|
167
154
|
// Create SES client
|
|
155
|
+
const {
|
|
156
|
+
CreateConfigurationSetCommand,
|
|
157
|
+
CreateEmailIdentityCommand,
|
|
158
|
+
DeleteConfigurationSetCommand,
|
|
159
|
+
DeleteEmailIdentityCommand,
|
|
160
|
+
GetConfigurationSetCommand,
|
|
161
|
+
GetEmailIdentityCommand,
|
|
162
|
+
NotFoundException,
|
|
163
|
+
PutConfigurationSetDeliveryOptionsCommand,
|
|
164
|
+
PutConfigurationSetReputationOptionsCommand,
|
|
165
|
+
PutConfigurationSetSendingOptionsCommand,
|
|
166
|
+
PutConfigurationSetSuppressionOptionsCommand,
|
|
167
|
+
PutConfigurationSetTrackingOptionsCommand,
|
|
168
|
+
PutEmailIdentityDkimAttributesCommand,
|
|
169
|
+
SESv2Client,
|
|
170
|
+
} = await importPeer(import("@aws-sdk/client-sesv2"), "ses::SES");
|
|
171
|
+
|
|
168
172
|
const client = new SESv2Client({});
|
|
169
173
|
|
|
170
174
|
// Resource ID is either based on the configuration set name or email identity
|
package/src/aws/ssm-parameter.ts
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AddTagsToResourceCommand,
|
|
3
|
-
DeleteParameterCommand,
|
|
4
|
-
GetParameterCommand,
|
|
5
|
-
ParameterAlreadyExists,
|
|
6
|
-
ParameterNotFound,
|
|
7
|
-
PutParameterCommand,
|
|
8
|
-
SSMClient,
|
|
9
|
-
type Tag,
|
|
10
|
-
} from "@aws-sdk/client-ssm";
|
|
1
|
+
import type { Tag } from "@aws-sdk/client-ssm";
|
|
11
2
|
import type { Context } from "../context.ts";
|
|
12
3
|
import { Resource } from "../resource.ts";
|
|
13
4
|
import { type Secret, isSecret } from "../secret.ts";
|
|
14
5
|
import { ignore } from "../util/ignore.ts";
|
|
15
6
|
import { logger } from "../util/logger.ts";
|
|
7
|
+
import { importPeer } from "../util/peer.ts";
|
|
16
8
|
|
|
17
9
|
/**
|
|
18
10
|
* Base properties shared by all SSM Parameter types
|
|
@@ -20,8 +12,10 @@ import { logger } from "../util/logger.ts";
|
|
|
20
12
|
interface SSMParameterBaseProps {
|
|
21
13
|
/**
|
|
22
14
|
* Name of the parameter
|
|
15
|
+
*
|
|
16
|
+
* @default ${app}-${stage}-${id}
|
|
23
17
|
*/
|
|
24
|
-
name
|
|
18
|
+
name?: string;
|
|
25
19
|
|
|
26
20
|
/**
|
|
27
21
|
* Description of the parameter's purpose
|
|
@@ -101,6 +95,11 @@ export type SSMParameter = Resource<"ssm::Parameter"> & {
|
|
|
101
95
|
*/
|
|
102
96
|
arn: string;
|
|
103
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Name of the SSM Parameter.
|
|
100
|
+
*/
|
|
101
|
+
name: string;
|
|
102
|
+
|
|
104
103
|
/**
|
|
105
104
|
* Version of the parameter
|
|
106
105
|
*/
|
|
@@ -176,17 +175,33 @@ export const SSMParameter = Resource(
|
|
|
176
175
|
"ssm::Parameter",
|
|
177
176
|
async function (
|
|
178
177
|
this: Context<SSMParameter>,
|
|
179
|
-
|
|
178
|
+
id: string,
|
|
180
179
|
props: SSMParameterProps,
|
|
181
180
|
): Promise<SSMParameter> {
|
|
181
|
+
const {
|
|
182
|
+
AddTagsToResourceCommand,
|
|
183
|
+
DeleteParameterCommand,
|
|
184
|
+
GetParameterCommand,
|
|
185
|
+
ParameterAlreadyExists,
|
|
186
|
+
ParameterNotFound,
|
|
187
|
+
PutParameterCommand,
|
|
188
|
+
SSMClient,
|
|
189
|
+
} = await importPeer(import("@aws-sdk/client-ssm"), "ssm::Parameter");
|
|
182
190
|
const client = new SSMClient({});
|
|
183
191
|
|
|
192
|
+
const parameterName =
|
|
193
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
194
|
+
|
|
195
|
+
if (this.phase === "update" && this.output.name !== parameterName) {
|
|
196
|
+
this.replace();
|
|
197
|
+
}
|
|
198
|
+
|
|
184
199
|
if (this.phase === "delete") {
|
|
185
200
|
try {
|
|
186
201
|
await ignore(ParameterNotFound.name, () =>
|
|
187
202
|
client.send(
|
|
188
203
|
new DeleteParameterCommand({
|
|
189
|
-
Name:
|
|
204
|
+
Name: parameterName,
|
|
190
205
|
}),
|
|
191
206
|
),
|
|
192
207
|
);
|
|
@@ -217,7 +232,7 @@ export const SSMParameter = Resource(
|
|
|
217
232
|
try {
|
|
218
233
|
await client.send(
|
|
219
234
|
new PutParameterCommand({
|
|
220
|
-
Name:
|
|
235
|
+
Name: parameterName,
|
|
221
236
|
Value: parameterValue,
|
|
222
237
|
Type: parameterType,
|
|
223
238
|
Description: props.description,
|
|
@@ -247,7 +262,7 @@ export const SSMParameter = Resource(
|
|
|
247
262
|
if (error instanceof ParameterAlreadyExists) {
|
|
248
263
|
await client.send(
|
|
249
264
|
new PutParameterCommand({
|
|
250
|
-
Name:
|
|
265
|
+
Name: parameterName,
|
|
251
266
|
Value: parameterValue,
|
|
252
267
|
Type: parameterType,
|
|
253
268
|
Description: props.description,
|
|
@@ -278,7 +293,7 @@ export const SSMParameter = Resource(
|
|
|
278
293
|
await client.send(
|
|
279
294
|
new AddTagsToResourceCommand({
|
|
280
295
|
ResourceType: "Parameter",
|
|
281
|
-
ResourceId:
|
|
296
|
+
ResourceId: parameterName,
|
|
282
297
|
Tags: tags,
|
|
283
298
|
}),
|
|
284
299
|
);
|
|
@@ -290,13 +305,15 @@ export const SSMParameter = Resource(
|
|
|
290
305
|
// Get the updated parameter
|
|
291
306
|
const parameter = await client.send(
|
|
292
307
|
new GetParameterCommand({
|
|
293
|
-
Name:
|
|
308
|
+
Name: parameterName,
|
|
294
309
|
WithDecryption: true,
|
|
295
310
|
}),
|
|
296
311
|
);
|
|
297
312
|
|
|
298
313
|
if (!parameter?.Parameter) {
|
|
299
|
-
throw new Error(
|
|
314
|
+
throw new Error(
|
|
315
|
+
`Failed to create or update parameter ${parameterName}`,
|
|
316
|
+
);
|
|
300
317
|
}
|
|
301
318
|
|
|
302
319
|
return this({
|
|
@@ -304,12 +321,15 @@ export const SSMParameter = Resource(
|
|
|
304
321
|
arn: parameter.Parameter.ARN!,
|
|
305
322
|
version: parameter.Parameter.Version!,
|
|
306
323
|
lastModifiedDate: parameter.Parameter.LastModifiedDate!,
|
|
307
|
-
name: parameter.Parameter.Name ??
|
|
324
|
+
name: parameter.Parameter.Name ?? parameterName,
|
|
308
325
|
value: props.value,
|
|
309
326
|
type: (parameter.Parameter.Type as any) ?? parameterType,
|
|
310
327
|
} as SSMParameter);
|
|
311
328
|
} catch (error: any) {
|
|
312
|
-
logger.error(
|
|
329
|
+
logger.error(
|
|
330
|
+
`Error creating/updating parameter ${parameterName}:`,
|
|
331
|
+
error,
|
|
332
|
+
);
|
|
313
333
|
throw error;
|
|
314
334
|
}
|
|
315
335
|
},
|
package/src/aws/table.ts
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CreateTableCommand,
|
|
3
|
-
DeleteTableCommand,
|
|
4
|
-
DescribeTableCommand,
|
|
5
|
-
DynamoDBClient,
|
|
6
|
-
type KeySchemaElement,
|
|
7
|
-
ResourceNotFoundException,
|
|
8
|
-
} from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import type { KeySchemaElement } from "@aws-sdk/client-dynamodb";
|
|
9
2
|
import type { Context } from "../context.ts";
|
|
10
3
|
import { Resource } from "../resource.ts";
|
|
11
4
|
import { ignore } from "../util/ignore.ts";
|
|
5
|
+
import { importPeer } from "../util/peer.ts";
|
|
12
6
|
import { retry } from "./retry.ts";
|
|
13
7
|
|
|
14
8
|
/**
|
|
@@ -17,8 +11,10 @@ import { retry } from "./retry.ts";
|
|
|
17
11
|
export interface TableProps {
|
|
18
12
|
/**
|
|
19
13
|
* Name of the DynamoDB table
|
|
14
|
+
*
|
|
15
|
+
* @default ${app}-${stage}-${id}
|
|
20
16
|
*/
|
|
21
|
-
tableName
|
|
17
|
+
tableName?: string;
|
|
22
18
|
|
|
23
19
|
/**
|
|
24
20
|
* Primary partition key (hash key) configuration
|
|
@@ -88,6 +84,11 @@ export interface Table extends Resource<"dynamo::Table">, TableProps {
|
|
|
88
84
|
*/
|
|
89
85
|
arn: string;
|
|
90
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Name of the DynamoDB Table.
|
|
89
|
+
*/
|
|
90
|
+
tableName: string;
|
|
91
|
+
|
|
91
92
|
/**
|
|
92
93
|
* ARN of the table's stream if enabled
|
|
93
94
|
* Format: arn:aws:dynamodb:region:account-id:table/table-name/stream/timestamp
|
|
@@ -140,17 +141,33 @@ export const Table = Resource(
|
|
|
140
141
|
"dynamo::Table",
|
|
141
142
|
async function (
|
|
142
143
|
this: Context<Table>,
|
|
143
|
-
|
|
144
|
+
id: string,
|
|
144
145
|
props: TableProps,
|
|
145
146
|
): Promise<Table> {
|
|
147
|
+
const {
|
|
148
|
+
CreateTableCommand,
|
|
149
|
+
DeleteTableCommand,
|
|
150
|
+
DescribeTableCommand,
|
|
151
|
+
DynamoDBClient,
|
|
152
|
+
ResourceNotFoundException,
|
|
153
|
+
} = await importPeer(import("@aws-sdk/client-dynamodb"), "dynamo::Table");
|
|
146
154
|
const client = new DynamoDBClient({});
|
|
147
155
|
|
|
156
|
+
const tableName =
|
|
157
|
+
props.tableName ??
|
|
158
|
+
this.output?.tableName ??
|
|
159
|
+
this.scope.createPhysicalName(id);
|
|
160
|
+
|
|
161
|
+
if (this.phase === "update" && this.output?.tableName !== tableName) {
|
|
162
|
+
this.replace();
|
|
163
|
+
}
|
|
164
|
+
|
|
148
165
|
if (this.phase === "delete") {
|
|
149
166
|
await retry(async () => {
|
|
150
167
|
await ignore(ResourceNotFoundException.name, () =>
|
|
151
168
|
client.send(
|
|
152
169
|
new DeleteTableCommand({
|
|
153
|
-
TableName:
|
|
170
|
+
TableName: tableName,
|
|
154
171
|
}),
|
|
155
172
|
),
|
|
156
173
|
);
|
|
@@ -165,7 +182,7 @@ export const Table = Resource(
|
|
|
165
182
|
try {
|
|
166
183
|
await client.send(
|
|
167
184
|
new DescribeTableCommand({
|
|
168
|
-
TableName:
|
|
185
|
+
TableName: tableName,
|
|
169
186
|
}),
|
|
170
187
|
);
|
|
171
188
|
// If we get here, table still exists
|
|
@@ -184,7 +201,7 @@ export const Table = Resource(
|
|
|
184
201
|
|
|
185
202
|
if (!tableDeleted) {
|
|
186
203
|
throw new Error(
|
|
187
|
-
`Timed out waiting for table ${
|
|
204
|
+
`Timed out waiting for table ${tableName} to be deleted`,
|
|
188
205
|
);
|
|
189
206
|
}
|
|
190
207
|
|
|
@@ -222,7 +239,7 @@ export const Table = Resource(
|
|
|
222
239
|
// First check if table already exists
|
|
223
240
|
const describeResponse = await client.send(
|
|
224
241
|
new DescribeTableCommand({
|
|
225
|
-
TableName:
|
|
242
|
+
TableName: tableName,
|
|
226
243
|
}),
|
|
227
244
|
);
|
|
228
245
|
|
|
@@ -240,7 +257,7 @@ export const Table = Resource(
|
|
|
240
257
|
// Table doesn't exist, try to create it
|
|
241
258
|
await client.send(
|
|
242
259
|
new CreateTableCommand({
|
|
243
|
-
TableName:
|
|
260
|
+
TableName: tableName,
|
|
244
261
|
AttributeDefinitions: attributeDefinitions,
|
|
245
262
|
KeySchema: keySchema,
|
|
246
263
|
BillingMode: props.billingMode || "PAY_PER_REQUEST",
|
|
@@ -277,7 +294,7 @@ export const Table = Resource(
|
|
|
277
294
|
async () =>
|
|
278
295
|
await client.send(
|
|
279
296
|
new DescribeTableCommand({
|
|
280
|
-
TableName:
|
|
297
|
+
TableName: tableName,
|
|
281
298
|
}),
|
|
282
299
|
),
|
|
283
300
|
);
|
|
@@ -302,13 +319,14 @@ export const Table = Resource(
|
|
|
302
319
|
|
|
303
320
|
if (!tableActive) {
|
|
304
321
|
throw new Error(
|
|
305
|
-
`Timed out waiting for table ${
|
|
322
|
+
`Timed out waiting for table ${tableName} to become active`,
|
|
306
323
|
);
|
|
307
324
|
}
|
|
308
325
|
|
|
309
326
|
return this({
|
|
310
327
|
...props,
|
|
311
328
|
arn: tableDescription!.TableArn!,
|
|
329
|
+
tableName,
|
|
312
330
|
streamArn: tableDescription!.LatestStreamArn,
|
|
313
331
|
tableId: tableDescription!.TableId!,
|
|
314
332
|
});
|
|
@@ -88,7 +88,7 @@ export interface AccountApiTokenProps extends CloudflareApiOptions {
|
|
|
88
88
|
/**
|
|
89
89
|
* Name of the token
|
|
90
90
|
*/
|
|
91
|
-
name
|
|
91
|
+
name?: string;
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
94
|
* Policies that define what the token can access
|
|
@@ -252,12 +252,14 @@ export const AccountApiToken = Resource(
|
|
|
252
252
|
"cloudflare::AccountApiToken",
|
|
253
253
|
async function (
|
|
254
254
|
this: Context<AccountApiToken>,
|
|
255
|
-
|
|
255
|
+
id: string,
|
|
256
256
|
props: AccountApiTokenProps,
|
|
257
257
|
): Promise<AccountApiToken> {
|
|
258
258
|
// Create Cloudflare API client with automatic account discovery
|
|
259
259
|
const api = await createCloudflareApi(props);
|
|
260
260
|
|
|
261
|
+
const tokenName = props.name ?? this.scope.createPhysicalName(id);
|
|
262
|
+
|
|
261
263
|
if (this.phase === "delete") {
|
|
262
264
|
// Delete token if we have an ID
|
|
263
265
|
if (this.output?.id) {
|
|
@@ -270,10 +272,10 @@ export const AccountApiToken = Resource(
|
|
|
270
272
|
const errorData: any = await deleteResponse.json().catch(() => ({
|
|
271
273
|
errors: [{ message: deleteResponse.statusText }],
|
|
272
274
|
}));
|
|
273
|
-
logger.error(`Error deleting token '${
|
|
275
|
+
logger.error(`Error deleting token '${tokenName}':`, errorData);
|
|
274
276
|
}
|
|
275
277
|
} catch (error) {
|
|
276
|
-
logger.error(`Error deleting token '${
|
|
278
|
+
logger.error(`Error deleting token '${tokenName}':`, error);
|
|
277
279
|
}
|
|
278
280
|
}
|
|
279
281
|
|
|
@@ -288,7 +290,7 @@ export const AccountApiToken = Resource(
|
|
|
288
290
|
|
|
289
291
|
// Transform our properties to API format
|
|
290
292
|
const apiPayload = {
|
|
291
|
-
name:
|
|
293
|
+
name: tokenName,
|
|
292
294
|
policies: props.policies.map((policy) => ({
|
|
293
295
|
effect: policy.effect,
|
|
294
296
|
permission_groups: policy.permissionGroups.map((pg) =>
|
|
@@ -362,7 +364,7 @@ export const AccountApiToken = Resource(
|
|
|
362
364
|
}));
|
|
363
365
|
|
|
364
366
|
throw new Error(
|
|
365
|
-
`Error ${this.phase === "update" ? "updating" : "creating"} token '${
|
|
367
|
+
`Error ${this.phase === "update" ? "updating" : "creating"} token '${tokenName}': ${
|
|
366
368
|
errorData.errors?.[0]?.message || response.statusText
|
|
367
369
|
}`,
|
|
368
370
|
);
|
|
@@ -376,7 +378,7 @@ export const AccountApiToken = Resource(
|
|
|
376
378
|
} else {
|
|
377
379
|
if (!this.output?.value) {
|
|
378
380
|
throw new Error(
|
|
379
|
-
`Token '${
|
|
381
|
+
`Token '${tokenName}' was created but we have no record of its value. Try deleting and recreating the token.`,
|
|
380
382
|
);
|
|
381
383
|
}
|
|
382
384
|
tokenValue = this.output?.value;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import type { Context } from "../context.ts";
|
|
2
2
|
import { Resource } from "../resource.ts";
|
|
3
|
-
import { bind } from "../runtime/bind.ts";
|
|
4
3
|
import { logger } from "../util/logger.ts";
|
|
5
4
|
import { handleApiError } from "./api-error.ts";
|
|
6
5
|
import { createCloudflareApi, type CloudflareApiOptions } from "./api.ts";
|
|
7
|
-
import type { Bound } from "./bound.ts";
|
|
8
6
|
|
|
9
7
|
/**
|
|
10
8
|
* Properties for creating or updating a Cloudflare AI Gateway.
|
|
11
9
|
*/
|
|
12
10
|
export interface AiGatewayProps extends CloudflareApiOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Name of the AI Gateway.
|
|
13
|
+
*
|
|
14
|
+
* @default ${app.name}-${app.stage}-${id}
|
|
15
|
+
*/
|
|
16
|
+
gatewayName?: string;
|
|
13
17
|
/**
|
|
14
18
|
* Invalidate cache on update.
|
|
15
19
|
* @default true
|
|
@@ -88,7 +92,7 @@ export interface AiGatewayProps extends CloudflareApiOptions {
|
|
|
88
92
|
* Output returned after Cloudflare AI Gateway creation/update.
|
|
89
93
|
* IMPORTANT: The interface name MUST match the exported resource name.
|
|
90
94
|
*/
|
|
91
|
-
export interface
|
|
95
|
+
export interface AiGateway
|
|
92
96
|
extends Resource<"cloudflare::AiGateway">,
|
|
93
97
|
AiGatewayProps {
|
|
94
98
|
/**
|
|
@@ -128,8 +132,6 @@ export interface AiGatewayResource
|
|
|
128
132
|
type: "ai_gateway";
|
|
129
133
|
}
|
|
130
134
|
|
|
131
|
-
export type AiGateway = AiGatewayResource & Bound<AiGatewayResource>;
|
|
132
|
-
|
|
133
135
|
/**
|
|
134
136
|
* Represents a Cloudflare AI Gateway.
|
|
135
137
|
*
|
|
@@ -154,30 +156,25 @@ export type AiGateway = AiGatewayResource & Bound<AiGatewayResource>;
|
|
|
154
156
|
* logpushPublicKey: "mypublickey..." // Replace with actual public key
|
|
155
157
|
* });
|
|
156
158
|
*/
|
|
157
|
-
export
|
|
158
|
-
name: string,
|
|
159
|
-
props: AiGatewayProps = {},
|
|
160
|
-
): Promise<AiGateway> {
|
|
161
|
-
const gateway = await AiGatewayResource(name, props);
|
|
162
|
-
const binding = await bind(gateway);
|
|
163
|
-
return {
|
|
164
|
-
...gateway,
|
|
165
|
-
getLog: binding.getLog,
|
|
166
|
-
getUrl: binding.getUrl,
|
|
167
|
-
patchLog: binding.patchLog,
|
|
168
|
-
run: binding.run,
|
|
169
|
-
} as AiGateway;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const AiGatewayResource = Resource(
|
|
159
|
+
export const AiGateway = Resource(
|
|
173
160
|
"cloudflare::AiGateway",
|
|
174
161
|
async function (
|
|
175
|
-
this: Context<
|
|
162
|
+
this: Context<AiGateway>,
|
|
176
163
|
id: string,
|
|
177
164
|
props: AiGatewayProps = {},
|
|
178
|
-
): Promise<
|
|
165
|
+
): Promise<AiGateway> {
|
|
179
166
|
const api = await createCloudflareApi(props);
|
|
180
|
-
const
|
|
167
|
+
const gatewayName =
|
|
168
|
+
props.gatewayName ??
|
|
169
|
+
this.output?.gatewayName ??
|
|
170
|
+
this.output?.id ?? // name and ID are the same
|
|
171
|
+
this.scope.createPhysicalName(id);
|
|
172
|
+
|
|
173
|
+
if (this.phase === "update" && this.output?.id !== gatewayName) {
|
|
174
|
+
this.replace();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const gatewayPath = `/accounts/${api.accountId}/ai-gateway/gateways/${gatewayName}`;
|
|
181
178
|
const gatewaysPath = `/accounts/${api.accountId}/ai-gateway/gateways`;
|
|
182
179
|
|
|
183
180
|
if (this.phase === "delete") {
|
|
@@ -185,10 +182,15 @@ const AiGatewayResource = Resource(
|
|
|
185
182
|
const deleteResponse = await api.delete(gatewayPath);
|
|
186
183
|
// Only swallow 404 Not Found errors, all other errors should be handled
|
|
187
184
|
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
188
|
-
await handleApiError(
|
|
185
|
+
await handleApiError(
|
|
186
|
+
deleteResponse,
|
|
187
|
+
"delete",
|
|
188
|
+
"ai gateway",
|
|
189
|
+
gatewayName,
|
|
190
|
+
);
|
|
189
191
|
}
|
|
190
192
|
} catch (error) {
|
|
191
|
-
logger.error(`Error deleting AI Gateway ${
|
|
193
|
+
logger.error(`Error deleting AI Gateway ${gatewayName}:`, error);
|
|
192
194
|
throw error;
|
|
193
195
|
}
|
|
194
196
|
return this.destroy();
|
|
@@ -211,37 +213,37 @@ const AiGatewayResource = Resource(
|
|
|
211
213
|
try {
|
|
212
214
|
if (this.phase === "update") {
|
|
213
215
|
// Update existing gateway (PUT request)
|
|
214
|
-
const requestBody = mapPropsToApi(
|
|
216
|
+
const requestBody = mapPropsToApi(gatewayName, mergedProps, false);
|
|
215
217
|
response = await api.put(gatewayPath, requestBody);
|
|
216
218
|
} else {
|
|
217
|
-
// Check if gateway exists before creating (to
|
|
219
|
+
// Check if gateway exists before creating (to avogatewayName conflict)
|
|
218
220
|
const getResponse = await api.get(gatewayPath);
|
|
219
221
|
if (getResponse.status === 200) {
|
|
220
222
|
// Gateway exists, treat as update (PUT)
|
|
221
223
|
logger.log(
|
|
222
|
-
`AI Gateway '${
|
|
224
|
+
`AI Gateway '${gatewayName}' already exists. Updating existing resource.`,
|
|
223
225
|
);
|
|
224
|
-
const requestBody = mapPropsToApi(
|
|
226
|
+
const requestBody = mapPropsToApi(gatewayName, mergedProps, false);
|
|
225
227
|
response = await api.put(gatewayPath, requestBody);
|
|
226
228
|
} else if (getResponse.status === 404) {
|
|
227
229
|
// Gateway doesn't exist, create new (POST request)
|
|
228
|
-
const requestBody = mapPropsToApi(
|
|
230
|
+
const requestBody = mapPropsToApi(gatewayName, mergedProps, true); // Include 'gatewayName' in POST body
|
|
229
231
|
response = await api.post(gatewaysPath, requestBody);
|
|
230
232
|
} else {
|
|
231
233
|
// Unexpected error during GET check
|
|
232
|
-
await handleApiError(getResponse, "get", "ai gateway",
|
|
234
|
+
await handleApiError(getResponse, "get", "ai gateway", gatewayName);
|
|
233
235
|
}
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
if (!response?.ok) {
|
|
237
239
|
const action = this.phase === "update" ? "update" : "create";
|
|
238
|
-
await handleApiError(response!, action, "ai gateway",
|
|
240
|
+
await handleApiError(response!, action, "ai gateway", gatewayName);
|
|
239
241
|
}
|
|
240
242
|
|
|
241
243
|
const data: { result: Record<string, any> } = await response!.json();
|
|
242
244
|
apiResource = data.result;
|
|
243
245
|
} catch (error) {
|
|
244
|
-
logger.error(`Error ${this.phase} AI Gateway '${
|
|
246
|
+
logger.error(`Error ${this.phase} AI Gateway '${gatewayName}':`, error);
|
|
245
247
|
throw error; // Re-throw the error to fail the deployment
|
|
246
248
|
}
|
|
247
249
|
|
|
@@ -249,6 +251,7 @@ const AiGatewayResource = Resource(
|
|
|
249
251
|
return this({
|
|
250
252
|
...mergedProps, // Start with the input props (including defaults)
|
|
251
253
|
id: apiResource.id,
|
|
254
|
+
gatewayName,
|
|
252
255
|
accountId: apiResource.account_id,
|
|
253
256
|
accountTag: apiResource.account_tag,
|
|
254
257
|
createdAt: apiResource.created_at,
|
|
@@ -48,33 +48,33 @@ export interface APISchemaProps<S extends OpenAPIV3.Document>
|
|
|
48
48
|
/**
|
|
49
49
|
* APISchema resource attributes.
|
|
50
50
|
*/
|
|
51
|
-
export
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
51
|
+
export type APISchema<S extends OpenAPIV3.Document = OpenAPIV3.Document> =
|
|
52
|
+
Resource<"cloudflare::APISchema"> & {
|
|
53
|
+
/**
|
|
54
|
+
* Schema ID
|
|
55
|
+
*/
|
|
56
|
+
id: string;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Name for the schema
|
|
60
|
+
*/
|
|
61
|
+
name: string;
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
/**
|
|
64
|
+
* The API Schema
|
|
65
|
+
*/
|
|
66
|
+
schema: S;
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Source of the schema
|
|
70
|
+
*/
|
|
71
|
+
source: string;
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
73
|
+
/**
|
|
74
|
+
* Whether validation is enabled
|
|
75
|
+
*/
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
};
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Cloudflare API Gateway Schema manages OpenAPI v3 schemas for API validation.
|
|
@@ -160,10 +160,17 @@ export const APISchema = Resource("cloudflare::APISchema", async function <
|
|
|
160
160
|
|
|
161
161
|
let schemaDetails: CloudflareSchemaDetails;
|
|
162
162
|
|
|
163
|
+
const schemaName =
|
|
164
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
165
|
+
|
|
166
|
+
if (this.phase === "update" && this.output?.name !== schemaName) {
|
|
167
|
+
this.replace();
|
|
168
|
+
}
|
|
169
|
+
|
|
163
170
|
if (this.phase === "update" && this.output?.id) {
|
|
164
171
|
// Check if we need to replace due to name, schema content change, or disabling validation
|
|
165
172
|
if (
|
|
166
|
-
|
|
173
|
+
schemaName !== this.output.name ||
|
|
167
174
|
JSON.stringify(parsedSchema) !== JSON.stringify(this.output.schema) ||
|
|
168
175
|
(this.output.enabled === true && props.enabled === false)
|
|
169
176
|
) {
|
|
@@ -179,7 +186,7 @@ export const APISchema = Resource("cloudflare::APISchema", async function <
|
|
|
179
186
|
// Create new schema
|
|
180
187
|
schemaDetails = await uploadSchema(api, zoneId, {
|
|
181
188
|
file: yaml.stringify(parsedSchema),
|
|
182
|
-
name:
|
|
189
|
+
name: schemaName,
|
|
183
190
|
validation_enabled: props.enabled !== false,
|
|
184
191
|
});
|
|
185
192
|
}
|
|
@@ -28,7 +28,7 @@ export interface APIShieldProps<S extends string | URL | OpenAPIV3.Document>
|
|
|
28
28
|
/**
|
|
29
29
|
* The name of the schema validation
|
|
30
30
|
*
|
|
31
|
-
* @default id
|
|
31
|
+
* @default ${app.name}-${app.stage}-${id}
|
|
32
32
|
*/
|
|
33
33
|
name?: string;
|
|
34
34
|
|
|
@@ -165,6 +165,11 @@ export interface ValidationSettings {
|
|
|
165
165
|
*/
|
|
166
166
|
export interface APIShield<S extends OpenAPIV3.Document = OpenAPIV3.Document>
|
|
167
167
|
extends Resource<"cloudflare::APIShield"> {
|
|
168
|
+
/**
|
|
169
|
+
* Name of the API Shield.
|
|
170
|
+
*/
|
|
171
|
+
name: string;
|
|
172
|
+
|
|
168
173
|
/**
|
|
169
174
|
* The schema resource
|
|
170
175
|
*/
|
|
@@ -409,6 +414,13 @@ const _APIShield = Resource(
|
|
|
409
414
|
return this.destroy();
|
|
410
415
|
}
|
|
411
416
|
|
|
417
|
+
const schemaName =
|
|
418
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
419
|
+
|
|
420
|
+
if (this.phase === "update" && this.output?.name !== schemaName) {
|
|
421
|
+
this.replace();
|
|
422
|
+
}
|
|
423
|
+
|
|
412
424
|
// Update global settings
|
|
413
425
|
const defaultAction = props.defaultMitigation || "none";
|
|
414
426
|
await updateGlobalSettings(api, zoneId, {
|
|
@@ -419,7 +431,7 @@ const _APIShield = Resource(
|
|
|
419
431
|
const schema = await APISchema("schema", {
|
|
420
432
|
schema: props.schema,
|
|
421
433
|
zone: props.zone,
|
|
422
|
-
name:
|
|
434
|
+
name: schemaName,
|
|
423
435
|
enabled: props.enabled,
|
|
424
436
|
accountId: props.accountId,
|
|
425
437
|
apiKey: props.apiKey,
|
|
@@ -431,6 +443,7 @@ const _APIShield = Resource(
|
|
|
431
443
|
return this({
|
|
432
444
|
zoneId,
|
|
433
445
|
schema,
|
|
446
|
+
name: schemaName,
|
|
434
447
|
operations: await Promise.all(
|
|
435
448
|
parseSchemaOperations(schema.schema).map(async (parsedOp) => {
|
|
436
449
|
let operationAction = defaultAction;
|