alchemy 0.67.0 → 0.69.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 +25580 -26264
- package/bin/alchemy.ts +6 -2
- package/bin/commands/configure.ts +194 -0
- package/bin/commands/login.ts +99 -55
- package/bin/commands/logout.ts +66 -0
- package/bin/trpc.ts +27 -2
- package/lib/apply.d.ts +2 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +18 -15
- package/lib/apply.js.map +1 -1
- package/lib/auth.d.ts +72 -0
- package/lib/auth.d.ts.map +1 -0
- package/lib/auth.js +163 -0
- package/lib/auth.js.map +1 -0
- package/lib/aws/bucket.d.ts +12 -3
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +2 -2
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/control/properties.d.ts +64 -0
- package/lib/aws/control/properties.d.ts.map +1 -1
- package/lib/aws/control/properties.js +554 -39
- package/lib/aws/control/properties.js.map +1 -1
- package/lib/aws/control/resource.d.ts +34 -3
- package/lib/aws/control/resource.d.ts.map +1 -1
- package/lib/aws/control/resource.js +36 -3
- package/lib/aws/control/resource.js.map +1 -1
- package/lib/aws/control/types.d.ts +5451 -1587
- package/lib/aws/control/types.d.ts.map +1 -1
- package/lib/aws/control/types.js.map +1 -1
- package/lib/aws/control/update-types.d.ts +12913 -0
- package/lib/aws/control/update-types.d.ts.map +1 -0
- package/lib/aws/control/update-types.js +12916 -0
- package/lib/aws/control/update-types.js.map +1 -0
- package/lib/aws/ec2/internet-gateway-attachment.d.ts +1 -2
- package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway-attachment.js +4 -4
- package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -1
- package/lib/aws/ec2/internet-gateway.d.ts +1 -2
- package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.js +2 -2
- package/lib/aws/ec2/internet-gateway.js.map +1 -1
- package/lib/aws/ec2/nat-gateway.d.ts +1 -2
- package/lib/aws/ec2/nat-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/nat-gateway.js +2 -2
- package/lib/aws/ec2/nat-gateway.js.map +1 -1
- package/lib/aws/ec2/route-table-association.d.ts +1 -2
- package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
- package/lib/aws/ec2/route-table-association.js +2 -2
- package/lib/aws/ec2/route-table-association.js.map +1 -1
- package/lib/aws/ec2/route-table.d.ts +1 -2
- package/lib/aws/ec2/route-table.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.js +2 -2
- package/lib/aws/ec2/route-table.js.map +1 -1
- package/lib/aws/ec2/route.d.ts +1 -2
- package/lib/aws/ec2/route.d.ts.map +1 -1
- package/lib/aws/ec2/route.js +2 -2
- package/lib/aws/ec2/route.js.map +1 -1
- package/lib/aws/ec2/security-group-rule.d.ts +1 -2
- package/lib/aws/ec2/security-group-rule.d.ts.map +1 -1
- package/lib/aws/ec2/security-group-rule.js +2 -2
- package/lib/aws/ec2/security-group-rule.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +1 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +2 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/ec2/subnet.d.ts +1 -2
- package/lib/aws/ec2/subnet.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.js +2 -2
- package/lib/aws/ec2/subnet.js.map +1 -1
- package/lib/aws/ec2/vpc.d.ts +1 -2
- package/lib/aws/ec2/vpc.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.js +2 -2
- package/lib/aws/ec2/vpc.js.map +1 -1
- package/lib/aws/function.d.ts +116 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +2 -2
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/oidc/github-oidc-provider.d.ts +13 -2
- package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -1
- package/lib/aws/oidc/oidc-provider.d.ts +48 -3
- package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
- package/lib/aws/oidc/oidc-provider.js +2 -2
- package/lib/aws/oidc/oidc-provider.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts +2 -3
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +1 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +1 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +4 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +1 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +4 -4
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +1 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +2 -2
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -2
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -2
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +1 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +2 -2
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +1 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +2 -2
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +1 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +2 -2
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +1 -2
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +2 -2
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-gateway-operation.d.ts +1 -2
- package/lib/cloudflare/api-gateway-operation.d.ts.map +1 -1
- package/lib/cloudflare/api-gateway-operation.js +2 -2
- package/lib/cloudflare/api-gateway-operation.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +1 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +2 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +1 -2
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +2 -2
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/api.d.ts +18 -10
- package/lib/cloudflare/api.d.ts.map +1 -1
- package/lib/cloudflare/api.js +92 -38
- package/lib/cloudflare/api.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +21 -43
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/assets.js +78 -70
- package/lib/cloudflare/assets.js.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -3
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/auth.d.ts +91 -17
- package/lib/cloudflare/auth.d.ts.map +1 -1
- package/lib/cloudflare/auth.js +141 -62
- package/lib/cloudflare/auth.js.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket-object.d.ts +81 -0
- package/lib/cloudflare/bucket-object.d.ts.map +1 -0
- package/lib/cloudflare/bucket-object.js +67 -0
- package/lib/cloudflare/bucket-object.js.map +1 -0
- package/lib/cloudflare/bucket.d.ts +87 -8
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +246 -19
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/bundle/plugin-wasm.js +4 -2
- package/lib/cloudflare/bundle/plugin-wasm.js.map +1 -1
- package/lib/cloudflare/certificate-pack.d.ts +1 -2
- package/lib/cloudflare/certificate-pack.d.ts.map +1 -1
- package/lib/cloudflare/certificate-pack.js +4 -4
- package/lib/cloudflare/certificate-pack.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 +1 -2
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +7 -7
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.d.ts +1 -2
- package/lib/cloudflare/custom-domain.d.ts.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -2
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +2 -3
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +5 -5
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -3
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +3 -3
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/dns-records.d.ts +1 -2
- package/lib/cloudflare/dns-records.d.ts.map +1 -1
- package/lib/cloudflare/dns-records.js +4 -4
- package/lib/cloudflare/dns-records.js.map +1 -1
- package/lib/cloudflare/email-address.d.ts +1 -2
- package/lib/cloudflare/email-address.d.ts.map +1 -1
- package/lib/cloudflare/email-address.js +6 -6
- package/lib/cloudflare/email-address.js.map +1 -1
- package/lib/cloudflare/email-catch-all.d.ts +1 -2
- package/lib/cloudflare/email-catch-all.d.ts.map +1 -1
- package/lib/cloudflare/email-catch-all.js +4 -4
- package/lib/cloudflare/email-catch-all.js.map +1 -1
- package/lib/cloudflare/email-routing.d.ts +1 -2
- package/lib/cloudflare/email-routing.d.ts.map +1 -1
- package/lib/cloudflare/email-routing.js +4 -4
- package/lib/cloudflare/email-routing.js.map +1 -1
- package/lib/cloudflare/email-rule.d.ts +1 -2
- package/lib/cloudflare/email-rule.d.ts.map +1 -1
- package/lib/cloudflare/email-rule.js +4 -4
- package/lib/cloudflare/email-rule.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +1 -2
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +4 -4
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/index.d.ts +1 -0
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +1 -0
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +2 -3
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +5 -5
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/delete.js +1 -1
- package/lib/cloudflare/miniflare/delete.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +2 -7
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/remote-binding-proxy.js +15 -4
- package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -1
- package/lib/cloudflare/next.js.map +1 -1
- package/lib/cloudflare/nuxt/nuxt.d.ts.map +1 -1
- package/lib/cloudflare/nuxt/nuxt.js +3 -3
- package/lib/cloudflare/nuxt/nuxt.js.map +1 -1
- package/lib/cloudflare/permission-groups.d.ts +1 -2
- package/lib/cloudflare/permission-groups.d.ts.map +1 -1
- package/lib/cloudflare/permission-groups.js +1 -1
- package/lib/cloudflare/permission-groups.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +2 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +5 -5
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.d.ts +1 -2
- package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
- package/lib/cloudflare/queue-consumer.js +4 -4
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +1 -2
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +4 -4
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/plugin.js +13 -0
- package/lib/cloudflare/react-router/plugin.js.map +1 -1
- package/lib/cloudflare/redirect-rule.d.ts +1 -2
- package/lib/cloudflare/redirect-rule.d.ts.map +1 -1
- package/lib/cloudflare/redirect-rule.js +4 -4
- package/lib/cloudflare/redirect-rule.js.map +1 -1
- package/lib/cloudflare/route.d.ts +1 -2
- package/lib/cloudflare/route.d.ts.map +1 -1
- package/lib/cloudflare/route.js +4 -4
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +1 -2
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +2 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +2 -3
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +3 -3
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +2 -3
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +3 -3
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +2 -3
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +3 -3
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/user.d.ts +3 -2
- package/lib/cloudflare/user.d.ts.map +1 -1
- package/lib/cloudflare/user.js +7 -5
- package/lib/cloudflare/user.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +2 -3
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +6 -6
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vectorize-metadata-index.d.ts +2 -3
- package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-metadata-index.js +4 -4
- package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
- package/lib/cloudflare/vite/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite/vite.js +3 -3
- package/lib/cloudflare/vite/vite.js.map +1 -1
- package/lib/cloudflare/website.d.ts +7 -1
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +20 -2
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-assets.d.ts +1 -29
- package/lib/cloudflare/worker-assets.d.ts.map +1 -1
- package/lib/cloudflare/worker-assets.js +9 -42
- package/lib/cloudflare/worker-assets.js.map +1 -1
- package/lib/cloudflare/worker-stub.d.ts +2 -3
- package/lib/cloudflare/worker-stub.d.ts.map +1 -1
- package/lib/cloudflare/worker-stub.js +3 -3
- package/lib/cloudflare/worker-stub.js.map +1 -1
- package/lib/cloudflare/worker-subdomain.d.ts +4 -3
- package/lib/cloudflare/worker-subdomain.d.ts.map +1 -1
- package/lib/cloudflare/worker-subdomain.js +5 -5
- package/lib/cloudflare/worker-subdomain.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +3 -4
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +6 -5
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +27 -8
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +3 -1
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/cloudflare/zone.d.ts +1 -2
- package/lib/cloudflare/zone.d.ts.map +1 -1
- package/lib/cloudflare/zone.js +2 -2
- package/lib/cloudflare/zone.js.map +1 -1
- package/lib/context.d.ts +8 -8
- package/lib/context.d.ts.map +1 -1
- package/lib/context.js.map +1 -1
- package/lib/destroy.d.ts +1 -1
- package/lib/destroy.d.ts.map +1 -1
- package/lib/destroy.js.map +1 -1
- package/lib/dns/import-dns.d.ts +1 -2
- package/lib/dns/import-dns.d.ts.map +1 -1
- package/lib/dns/import-dns.js +2 -2
- package/lib/dns/import-dns.js.map +1 -1
- package/lib/docker/container.d.ts +1 -2
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +2 -3
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/image.d.ts +1 -2
- package/lib/docker/image.d.ts.map +1 -1
- package/lib/docker/image.js +9 -9
- package/lib/docker/image.js.map +1 -1
- package/lib/docker/network.d.ts +1 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +2 -3
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/remote-image.d.ts +1 -2
- package/lib/docker/remote-image.d.ts.map +1 -1
- package/lib/docker/remote-image.js +2 -3
- package/lib/docker/remote-image.js.map +1 -1
- package/lib/docker/volume.d.ts +1 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +2 -3
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -2
- package/lib/esbuild/bundle.d.ts.map +1 -1
- package/lib/esbuild/bundle.js +4 -4
- package/lib/esbuild/bundle.js.map +1 -1
- package/lib/fs/copy-file.d.ts +1 -2
- package/lib/fs/copy-file.d.ts.map +1 -1
- package/lib/fs/copy-file.js +2 -2
- package/lib/fs/copy-file.js.map +1 -1
- package/lib/fs/file.d.ts +1 -2
- package/lib/fs/file.d.ts.map +1 -1
- package/lib/fs/file.js +2 -2
- package/lib/fs/file.js.map +1 -1
- package/lib/fs/folder.d.ts +1 -2
- package/lib/fs/folder.d.ts.map +1 -1
- package/lib/fs/folder.js +2 -2
- package/lib/fs/folder.js.map +1 -1
- package/lib/github/comment.d.ts +1 -2
- package/lib/github/comment.d.ts.map +1 -1
- package/lib/github/comment.js +4 -4
- package/lib/github/comment.js.map +1 -1
- package/lib/github/repository-environment.d.ts +1 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +2 -2
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/github/repository-webhook.d.ts +1 -2
- package/lib/github/repository-webhook.d.ts.map +1 -1
- package/lib/github/repository-webhook.js +2 -2
- package/lib/github/repository-webhook.js.map +1 -1
- package/lib/github/secret.d.ts +1 -2
- package/lib/github/secret.d.ts.map +1 -1
- package/lib/github/secret.js +2 -2
- package/lib/github/secret.js.map +1 -1
- package/lib/llms.cloudflare.txt +2 -2
- package/lib/neon/api/client.gen.d.ts +13 -0
- package/lib/neon/api/client.gen.d.ts.map +1 -0
- package/lib/neon/api/client.gen.js +7 -0
- package/lib/neon/api/client.gen.js.map +1 -0
- package/lib/neon/api/sdk.gen.d.ts +880 -0
- package/lib/neon/api/sdk.gen.d.ts.map +1 -0
- package/lib/neon/api/sdk.gen.js +1527 -0
- package/lib/neon/api/sdk.gen.js.map +1 -0
- package/lib/neon/api/types.gen.d.ts +7250 -0
- package/lib/neon/api/types.gen.d.ts.map +1 -0
- package/lib/neon/api/types.gen.js +2 -0
- package/lib/neon/api/types.gen.js.map +1 -0
- package/lib/neon/api.d.ts +14 -49
- package/lib/neon/api.d.ts.map +1 -1
- package/lib/neon/api.js +36 -114
- package/lib/neon/api.js.map +1 -1
- package/lib/neon/branch.d.ts +157 -0
- package/lib/neon/branch.d.ts.map +1 -0
- package/lib/neon/branch.js +112 -0
- package/lib/neon/branch.js.map +1 -0
- package/lib/neon/index.d.ts +1 -1
- package/lib/neon/index.d.ts.map +1 -1
- package/lib/neon/index.js +1 -1
- package/lib/neon/index.js.map +1 -1
- package/lib/neon/project.d.ts +49 -243
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +90 -269
- package/lib/neon/project.js.map +1 -1
- package/lib/neon/utils.d.ts +49 -0
- package/lib/neon/utils.d.ts.map +1 -0
- package/lib/neon/utils.js +44 -0
- package/lib/neon/utils.js.map +1 -0
- package/lib/os/exec.d.ts +1 -2
- package/lib/os/exec.d.ts.map +1 -1
- package/lib/os/exec.js +2 -2
- package/lib/os/exec.js.map +1 -1
- package/lib/planetscale/api/client.gen.d.ts +12 -1749
- package/lib/planetscale/api/client.gen.d.ts.map +1 -1
- package/lib/planetscale/api/client.gen.js +6 -2400
- package/lib/planetscale/api/client.gen.js.map +1 -1
- package/lib/planetscale/api/sdk.gen.d.ts +1582 -0
- package/lib/planetscale/api/sdk.gen.d.ts.map +1 -0
- package/lib/planetscale/api/sdk.gen.js +2219 -0
- package/lib/planetscale/api/sdk.gen.js.map +1 -0
- package/lib/planetscale/api/types.gen.d.ts +594 -449
- package/lib/planetscale/api/types.gen.d.ts.map +1 -1
- package/lib/planetscale/api.d.ts +43 -0
- package/lib/planetscale/api.d.ts.map +1 -0
- package/lib/planetscale/api.js +53 -0
- package/lib/planetscale/api.js.map +1 -0
- package/lib/planetscale/branch.d.ts +2 -3
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +17 -15
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +2 -3
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +34 -34
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/index.d.ts +1 -1
- package/lib/planetscale/index.d.ts.map +1 -1
- package/lib/planetscale/index.js +1 -1
- package/lib/planetscale/index.js.map +1 -1
- package/lib/planetscale/password.d.ts +2 -3
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +11 -11
- package/lib/planetscale/password.js.map +1 -1
- package/lib/planetscale/role.d.ts +2 -3
- package/lib/planetscale/role.d.ts.map +1 -1
- package/lib/planetscale/role.js +18 -18
- package/lib/planetscale/role.js.map +1 -1
- package/lib/planetscale/utils.d.ts +1 -1
- package/lib/planetscale/utils.d.ts.map +1 -1
- package/lib/planetscale/utils.js +17 -33
- package/lib/planetscale/utils.js.map +1 -1
- package/lib/random/random-string.d.ts +1 -2
- package/lib/random/random-string.d.ts.map +1 -1
- package/lib/random/random-string.js +3 -3
- package/lib/random/random-string.js.map +1 -1
- package/lib/resource.d.ts +4 -1
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js.map +1 -1
- package/lib/sentry/client-key.d.ts +1 -2
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +2 -2
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +1 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +2 -2
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +1 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +2 -2
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +3 -0
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +40 -0
- package/lib/serde.js.map +1 -1
- package/lib/state/r2-rest-state-store.d.ts +1 -0
- package/lib/state/r2-rest-state-store.d.ts.map +1 -1
- package/lib/state/r2-rest-state-store.js +15 -34
- package/lib/state/r2-rest-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts +1 -2
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +2 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/coupon.d.ts +1 -2
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +2 -2
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.d.ts +1 -2
- package/lib/stripe/customer.d.ts.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 +1 -2
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +2 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts +1 -2
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +2 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.d.ts +1 -2
- package/lib/stripe/meter.d.ts.map +1 -1
- package/lib/stripe/meter.js +1 -1
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts +1 -2
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +2 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts +1 -2
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +2 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts +1 -2
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +2 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts +1 -2
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +2 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts +1 -2
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +2 -2
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts +1 -2
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +2 -2
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts +1 -2
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +2 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts +16 -3
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +2 -2
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/bun.d.ts.map +1 -1
- package/lib/test/bun.js +1 -0
- package/lib/test/bun.js.map +1 -1
- package/lib/test/options.d.ts +5 -0
- package/lib/test/options.d.ts.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 +1 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/api/client/client.gen.d.ts +3 -0
- package/lib/util/api/client/client.gen.d.ts.map +1 -0
- package/lib/util/api/client/client.gen.js +205 -0
- package/lib/util/api/client/client.gen.js.map +1 -0
- package/lib/util/api/client/index.d.ts +8 -0
- package/lib/util/api/client/index.d.ts.map +1 -0
- package/lib/util/api/client/index.js +6 -0
- package/lib/util/api/client/index.js.map +1 -0
- package/lib/util/api/client/types.gen.d.ts +125 -0
- package/lib/util/api/client/types.gen.d.ts.map +1 -0
- package/lib/util/api/client/types.gen.js +2 -0
- package/lib/util/api/client/types.gen.js.map +1 -0
- package/lib/util/api/client/utils.gen.d.ts +34 -0
- package/lib/util/api/client/utils.gen.d.ts.map +1 -0
- package/lib/util/api/client/utils.gen.js +231 -0
- package/lib/util/api/client/utils.gen.js.map +1 -0
- package/lib/util/api/core/auth.gen.d.ts +19 -0
- package/lib/util/api/core/auth.gen.d.ts.map +1 -0
- package/lib/util/api/core/auth.gen.js +15 -0
- package/lib/util/api/core/auth.gen.js.map +1 -0
- package/lib/util/api/core/bodySerializer.gen.d.ts +18 -0
- package/lib/util/api/core/bodySerializer.gen.d.ts.map +1 -0
- package/lib/util/api/core/bodySerializer.gen.js +58 -0
- package/lib/util/api/core/bodySerializer.gen.js.map +1 -0
- package/lib/util/api/core/params.gen.d.ts +34 -0
- package/lib/util/api/core/params.gen.d.ts.map +1 -0
- package/lib/util/api/core/params.gen.js +89 -0
- package/lib/util/api/core/params.gen.js.map +1 -0
- package/lib/util/api/core/pathSerializer.gen.d.ts +34 -0
- package/lib/util/api/core/pathSerializer.gen.d.ts.map +1 -0
- package/lib/util/api/core/pathSerializer.gen.js +115 -0
- package/lib/util/api/core/pathSerializer.gen.js.map +1 -0
- package/lib/util/api/core/serverSentEvents.gen.d.ts +72 -0
- package/lib/util/api/core/serverSentEvents.gen.d.ts.map +1 -0
- package/lib/util/api/core/serverSentEvents.gen.js +136 -0
- package/lib/util/api/core/serverSentEvents.gen.js.map +1 -0
- package/lib/util/api/core/types.gen.d.ts +79 -0
- package/lib/util/api/core/types.gen.d.ts.map +1 -0
- package/lib/util/api/core/types.gen.js +2 -0
- package/lib/util/api/core/types.gen.js.map +1 -0
- package/lib/util/api/core/utils.gen.d.ts +20 -0
- package/lib/util/api/core/utils.gen.d.ts.map +1 -0
- package/lib/util/api/core/utils.gen.js +88 -0
- package/lib/util/api/core/utils.gen.js.map +1 -0
- package/lib/util/http.d.ts +7 -2
- package/lib/util/http.d.ts.map +1 -1
- package/lib/util/http.js +29 -11
- package/lib/util/http.js.map +1 -1
- package/lib/util/lock.d.ts +20 -0
- package/lib/util/lock.d.ts.map +1 -0
- package/lib/util/lock.js +45 -0
- package/lib/util/lock.js.map +1 -0
- package/lib/util/memoize.d.ts +6 -0
- package/lib/util/memoize.d.ts.map +1 -1
- package/lib/util/memoize.js +23 -0
- package/lib/util/memoize.js.map +1 -1
- package/lib/util/oauth-client.d.ts +71 -0
- package/lib/util/oauth-client.d.ts.map +1 -0
- package/lib/util/oauth-client.js +188 -0
- package/lib/util/oauth-client.js.map +1 -0
- package/lib/util/poll.d.ts +33 -0
- package/lib/util/poll.d.ts.map +1 -0
- package/lib/util/poll.js +19 -0
- package/lib/util/poll.js.map +1 -0
- package/lib/vercel/project-domain.d.ts +1 -2
- package/lib/vercel/project-domain.d.ts.map +1 -1
- package/lib/vercel/project-domain.js.map +1 -1
- package/lib/vercel/project.d.ts +1 -2
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +2 -2
- package/lib/vercel/project.js.map +1 -1
- package/package.json +5 -1
- package/src/apply.ts +32 -29
- package/src/auth.ts +253 -0
- package/src/aws/bucket.ts +3 -3
- package/src/aws/control/properties.ts +554 -39
- package/src/aws/control/resource.ts +62 -6
- package/src/aws/control/types.ts +85281 -84914
- package/src/aws/control/update-types.ts +12917 -0
- package/src/aws/ec2/internet-gateway-attachment.ts +5 -6
- package/src/aws/ec2/internet-gateway.ts +3 -5
- package/src/aws/ec2/nat-gateway.ts +3 -5
- package/src/aws/ec2/route-table-association.ts +3 -5
- package/src/aws/ec2/route-table.ts +3 -5
- package/src/aws/ec2/route.ts +3 -3
- package/src/aws/ec2/security-group-rule.ts +3 -5
- package/src/aws/ec2/security-group.ts +3 -5
- package/src/aws/ec2/subnet.ts +3 -3
- package/src/aws/ec2/vpc.ts +3 -3
- package/src/aws/function.ts +3 -3
- package/src/aws/oidc/oidc-provider.ts +3 -5
- package/src/aws/policy-attachment.ts +2 -4
- package/src/aws/policy.ts +5 -5
- package/src/aws/queue.ts +5 -5
- package/src/aws/role.ts +3 -3
- package/src/aws/ses.ts +3 -3
- package/src/aws/ssm-parameter.ts +3 -3
- package/src/aws/table.ts +3 -3
- package/src/cloudflare/account-api-token.ts +3 -4
- package/src/cloudflare/ai-gateway.ts +3 -5
- package/src/cloudflare/api-gateway-operation.ts +3 -4
- package/src/cloudflare/api-schema.ts +25 -26
- package/src/cloudflare/api-shield.ts +3 -4
- package/src/cloudflare/api.ts +121 -57
- package/src/cloudflare/assets.ts +95 -136
- package/src/cloudflare/astro/astro.ts +8 -3
- package/src/cloudflare/auth.ts +160 -95
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket-object.ts +117 -0
- package/src/cloudflare/bucket.ts +452 -55
- package/src/cloudflare/bundle/plugin-wasm.ts +5 -5
- package/src/cloudflare/certificate-pack.ts +5 -6
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +9 -11
- package/src/cloudflare/custom-domain.ts +3 -5
- package/src/cloudflare/d1-database.ts +33 -34
- package/src/cloudflare/dispatch-namespace.ts +5 -6
- package/src/cloudflare/dns-records.ts +5 -5
- package/src/cloudflare/email-address.ts +7 -7
- package/src/cloudflare/email-catch-all.ts +6 -6
- package/src/cloudflare/email-routing.ts +5 -5
- package/src/cloudflare/email-rule.ts +5 -5
- package/src/cloudflare/hyperdrive.ts +35 -36
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/kv-namespace.ts +31 -32
- package/src/cloudflare/miniflare/delete.ts +1 -1
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +2 -7
- package/src/cloudflare/miniflare/remote-binding-proxy.ts +16 -4
- package/src/cloudflare/next.ts +2 -2
- package/src/cloudflare/nuxt/nuxt.ts +8 -3
- package/src/cloudflare/permission-groups.ts +4 -6
- package/src/cloudflare/pipeline.ts +29 -30
- package/src/cloudflare/queue-consumer.ts +5 -7
- package/src/cloudflare/queue.ts +42 -43
- package/src/cloudflare/react-router/plugin.ts +20 -0
- package/src/cloudflare/redirect-rule.ts +5 -5
- package/src/cloudflare/route.ts +5 -5
- package/src/cloudflare/ruleset.ts +3 -4
- package/src/cloudflare/secret.ts +35 -36
- package/src/cloudflare/secrets-store.ts +5 -8
- package/src/cloudflare/tunnel.ts +5 -7
- package/src/cloudflare/user.ts +12 -9
- package/src/cloudflare/vectorize-index.ts +8 -12
- package/src/cloudflare/vectorize-metadata-index.ts +6 -8
- package/src/cloudflare/vite/vite.ts +8 -3
- package/src/cloudflare/website.ts +29 -3
- package/src/cloudflare/worker-assets.ts +10 -56
- package/src/cloudflare/worker-stub.ts +5 -5
- package/src/cloudflare/worker-subdomain.ts +6 -7
- package/src/cloudflare/worker.ts +91 -91
- package/src/cloudflare/wrangler.json.ts +32 -17
- package/src/cloudflare/zone.ts +3 -3
- package/src/context.ts +9 -7
- package/src/destroy.ts +2 -2
- package/src/dns/import-dns.ts +3 -5
- package/src/docker/container.ts +3 -6
- package/src/docker/image.ts +13 -13
- package/src/docker/network.ts +3 -4
- package/src/docker/remote-image.ts +3 -6
- package/src/docker/volume.ts +3 -4
- package/src/esbuild/bundle.ts +10 -8
- package/src/fs/copy-file.ts +3 -3
- package/src/fs/file.ts +3 -3
- package/src/fs/folder.ts +3 -3
- package/src/github/comment.ts +5 -7
- package/src/github/repository-environment.ts +3 -5
- package/src/github/repository-webhook.ts +3 -5
- package/src/github/secret.ts +3 -5
- package/src/llms.cloudflare.txt +2 -2
- package/src/neon/api/client.gen.ts +28 -0
- package/src/neon/api/sdk.gen.ts +2596 -0
- package/src/neon/api/types.gen.ts +8287 -0
- package/src/neon/api.ts +51 -147
- package/src/neon/branch.ts +279 -0
- package/src/neon/index.ts +1 -1
- package/src/neon/project.ts +136 -721
- package/src/neon/utils.ts +105 -0
- package/src/os/exec.ts +3 -3
- package/src/planetscale/api/client.gen.ts +28 -2882
- package/src/planetscale/api/sdk.gen.ts +3336 -0
- package/src/planetscale/api/types.gen.ts +778 -450
- package/src/planetscale/api.ts +101 -0
- package/src/planetscale/branch.ts +20 -19
- package/src/planetscale/database.ts +69 -70
- package/src/planetscale/index.ts +1 -1
- package/src/planetscale/password.ts +18 -22
- package/src/planetscale/role.ts +21 -21
- package/src/planetscale/utils.ts +20 -74
- package/src/random/random-string.ts +4 -4
- package/src/resource.ts +6 -2
- package/src/sentry/client-key.ts +3 -5
- package/src/sentry/project.ts +3 -5
- package/src/sentry/team.ts +3 -3
- package/src/serde.ts +50 -0
- package/src/state/r2-rest-state-store.ts +15 -57
- package/src/stripe/card.ts +3 -3
- package/src/stripe/coupon.ts +3 -3
- package/src/stripe/customer.ts +3 -3
- package/src/stripe/entitlements-feature.ts +3 -5
- package/src/stripe/file.ts +3 -3
- package/src/stripe/meter.ts +3 -3
- package/src/stripe/portal-configuration.ts +3 -5
- package/src/stripe/price.ts +3 -3
- package/src/stripe/product-feature.ts +3 -5
- package/src/stripe/product.ts +3 -3
- package/src/stripe/promotion-code.ts +3 -5
- package/src/stripe/shipping-rate.ts +3 -5
- package/src/stripe/tax-rate.ts +3 -3
- package/src/stripe/webhook.ts +3 -5
- package/src/test/bun.ts +2 -1
- package/src/test/options.ts +6 -0
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +1 -3
- package/src/util/api/client/client.gen.ts +268 -0
- package/src/util/api/client/index.ts +25 -0
- package/src/util/api/client/types.gen.ts +268 -0
- package/src/util/api/client/utils.gen.ts +331 -0
- package/src/util/api/core/auth.gen.ts +42 -0
- package/src/util/api/core/bodySerializer.gen.ts +92 -0
- package/src/util/api/core/params.gen.ts +153 -0
- package/src/util/api/core/pathSerializer.gen.ts +181 -0
- package/src/util/api/core/serverSentEvents.gen.ts +264 -0
- package/src/util/api/core/types.gen.ts +118 -0
- package/src/util/api/core/utils.gen.ts +143 -0
- package/src/util/http.ts +38 -11
- package/src/util/lock.ts +48 -0
- package/src/util/memoize.ts +26 -0
- package/src/util/oauth-client.ts +238 -0
- package/src/util/poll.ts +55 -0
- package/src/vercel/project-domain.ts +1 -3
- package/src/vercel/project.ts +3 -3
- package/templates/rwsdk/.cursor/rules/alchemy_cloudflare.mdc +2 -2
- package/workers/cloudflare-state-store.js +8 -5619
- package/workers/dofs-state-store.js +2 -802
- package/workers/remote-binding-proxy.js +3 -39
- package/workers/remote-binding-proxy.ts +126 -35
- package/workers/tunnel-proxy.js +6 -73
- package/lib/cloudflare/asset-manifest.d.ts +0 -15
- package/lib/cloudflare/asset-manifest.d.ts.map +0 -1
- package/lib/cloudflare/asset-manifest.js +0 -1
- package/lib/cloudflare/asset-manifest.js.map +0 -1
- package/lib/cloudflare/oauth.d.ts +0 -22
- package/lib/cloudflare/oauth.d.ts.map +0 -1
- package/lib/cloudflare/oauth.js +0 -214
- package/lib/cloudflare/oauth.js.map +0 -1
- package/lib/neon/api-error.d.ts +0 -31
- package/lib/neon/api-error.d.ts.map +0 -1
- package/lib/neon/api-error.js +0 -73
- package/lib/neon/api-error.js.map +0 -1
- package/lib/planetscale/api/index.d.ts +0 -3
- package/lib/planetscale/api/index.d.ts.map +0 -1
- package/lib/planetscale/api/index.js +0 -4
- package/lib/planetscale/api/index.js.map +0 -1
- package/lib/util/neverthrow.d.ts +0 -16
- package/lib/util/neverthrow.d.ts.map +0 -1
- package/lib/util/neverthrow.js +0 -46
- package/lib/util/neverthrow.js.map +0 -1
- package/src/cloudflare/asset-manifest.ts +0 -16
- package/src/cloudflare/oauth.ts +0 -301
- package/src/neon/api-error.ts +0 -81
- package/src/planetscale/api/index.ts +0 -4
- package/src/util/neverthrow.ts +0 -64
package/src/cloudflare/bucket.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import * as mf from "miniflare";
|
|
1
2
|
import { isDeepStrictEqual } from "node:util";
|
|
2
3
|
import type { Context } from "../context.ts";
|
|
3
4
|
import { Resource, ResourceKind } from "../resource.ts";
|
|
4
5
|
import { Scope } from "../scope.ts";
|
|
6
|
+
import { streamToBuffer } from "../serde.ts";
|
|
7
|
+
import { isRetryableError } from "../state/r2-rest-state-store.ts";
|
|
5
8
|
import { withExponentialBackoff } from "../util/retry.ts";
|
|
6
|
-
import { CloudflareApiError } from "./api-error.ts";
|
|
9
|
+
import { CloudflareApiError, handleApiError } from "./api-error.ts";
|
|
7
10
|
import {
|
|
8
11
|
extractCloudflareResult,
|
|
9
12
|
type CloudflareApiErrorPayload,
|
|
@@ -14,6 +17,7 @@ import {
|
|
|
14
17
|
type CloudflareApiOptions,
|
|
15
18
|
} from "./api.ts";
|
|
16
19
|
import { deleteMiniflareBinding } from "./miniflare/delete.ts";
|
|
20
|
+
import { getDefaultPersistPath } from "./miniflare/paths.ts";
|
|
17
21
|
|
|
18
22
|
export type R2BucketJurisdiction = "default" | "eu" | "fedramp";
|
|
19
23
|
|
|
@@ -88,6 +92,11 @@ export interface BucketProps extends CloudflareApiOptions {
|
|
|
88
92
|
*/
|
|
89
93
|
lock?: R2BucketLockRule[];
|
|
90
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Enable data catalog for bucket
|
|
97
|
+
*/
|
|
98
|
+
dataCatalog?: boolean;
|
|
99
|
+
|
|
91
100
|
/**
|
|
92
101
|
* Whether to emulate the bucket locally when Alchemy is running in watch mode.
|
|
93
102
|
*/
|
|
@@ -239,55 +248,125 @@ interface R2BucketCORSRule {
|
|
|
239
248
|
maxAgeSeconds?: number;
|
|
240
249
|
}
|
|
241
250
|
|
|
251
|
+
export type R2ObjectMetadata = {
|
|
252
|
+
key: string;
|
|
253
|
+
etag: string;
|
|
254
|
+
uploaded: Date;
|
|
255
|
+
size: number;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export type R2ObjectContent = R2ObjectMetadata & {
|
|
259
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
260
|
+
bytes(): Promise<Uint8Array>;
|
|
261
|
+
text(): Promise<string>;
|
|
262
|
+
json<T>(): Promise<T>;
|
|
263
|
+
blob(): Promise<Blob>;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export type PutR2ObjectResponse = {
|
|
267
|
+
key: string;
|
|
268
|
+
etag: string;
|
|
269
|
+
uploaded: Date;
|
|
270
|
+
version: string;
|
|
271
|
+
size: number;
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
export type R2Objects = {
|
|
275
|
+
objects: R2ObjectMetadata[];
|
|
276
|
+
} & (
|
|
277
|
+
| {
|
|
278
|
+
truncated: true;
|
|
279
|
+
cursor: string;
|
|
280
|
+
}
|
|
281
|
+
| {
|
|
282
|
+
truncated: false;
|
|
283
|
+
cursor?: never;
|
|
284
|
+
}
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
export type R2Bucket = _R2Bucket & {
|
|
288
|
+
head(key: string): Promise<R2ObjectMetadata | null>;
|
|
289
|
+
get(key: string): Promise<R2ObjectContent | null>;
|
|
290
|
+
put(
|
|
291
|
+
key: string,
|
|
292
|
+
value:
|
|
293
|
+
| ReadableStream
|
|
294
|
+
| ArrayBuffer
|
|
295
|
+
| ArrayBufferView
|
|
296
|
+
| string
|
|
297
|
+
| null
|
|
298
|
+
| Blob,
|
|
299
|
+
): Promise<PutR2ObjectResponse>;
|
|
300
|
+
delete(key: string): Promise<Response>;
|
|
301
|
+
list(options?: R2ListOptions): Promise<R2Objects>;
|
|
302
|
+
};
|
|
303
|
+
|
|
242
304
|
/**
|
|
243
305
|
* Output returned after R2 Bucket creation/update
|
|
244
306
|
*/
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
type: "r2_bucket";
|
|
307
|
+
type _R2Bucket = Omit<BucketProps, "delete" | "dev"> & {
|
|
308
|
+
/**
|
|
309
|
+
* Resource type identifier
|
|
310
|
+
*/
|
|
311
|
+
type: "r2_bucket";
|
|
251
312
|
|
|
313
|
+
/**
|
|
314
|
+
* The name of the bucket
|
|
315
|
+
*/
|
|
316
|
+
name: string;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Location of the bucket
|
|
320
|
+
*/
|
|
321
|
+
location: string;
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Time at which the bucket was created
|
|
325
|
+
*/
|
|
326
|
+
creationDate: Date;
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* The `r2.dev` subdomain for the bucket, if `allowPublicAccess` is true
|
|
330
|
+
*/
|
|
331
|
+
domain: string | undefined;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Development mode properties
|
|
335
|
+
* @internal
|
|
336
|
+
*/
|
|
337
|
+
dev: {
|
|
252
338
|
/**
|
|
253
|
-
* The
|
|
339
|
+
* The ID of the bucket in development mode
|
|
254
340
|
*/
|
|
255
|
-
|
|
341
|
+
id: string;
|
|
256
342
|
|
|
257
343
|
/**
|
|
258
|
-
*
|
|
344
|
+
* Whether the bucket is running remotely
|
|
259
345
|
*/
|
|
260
|
-
|
|
346
|
+
remote: boolean;
|
|
347
|
+
};
|
|
261
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Data catalog for the bucket
|
|
351
|
+
*/
|
|
352
|
+
catalog?: {
|
|
262
353
|
/**
|
|
263
|
-
*
|
|
354
|
+
* ID of the data catalog
|
|
264
355
|
*/
|
|
265
|
-
|
|
266
|
-
|
|
356
|
+
id: string;
|
|
267
357
|
/**
|
|
268
|
-
*
|
|
358
|
+
* Name of the data catalog
|
|
269
359
|
*/
|
|
270
|
-
|
|
271
|
-
|
|
360
|
+
name: string;
|
|
272
361
|
/**
|
|
273
|
-
*
|
|
274
|
-
* @internal
|
|
362
|
+
* Host of the data catalog
|
|
275
363
|
*/
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* The ID of the bucket in development mode
|
|
279
|
-
*/
|
|
280
|
-
id: string;
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Whether the bucket is running remotely
|
|
284
|
-
*/
|
|
285
|
-
remote: boolean;
|
|
286
|
-
};
|
|
364
|
+
host: string;
|
|
287
365
|
};
|
|
366
|
+
};
|
|
288
367
|
|
|
289
|
-
export function isBucket(resource:
|
|
290
|
-
return resource[ResourceKind] === "cloudflare::R2Bucket";
|
|
368
|
+
export function isBucket(resource: any): resource is R2Bucket {
|
|
369
|
+
return resource?.[ResourceKind] === "cloudflare::R2Bucket";
|
|
291
370
|
}
|
|
292
371
|
|
|
293
372
|
/**
|
|
@@ -338,24 +417,154 @@ export async function R2Bucket(
|
|
|
338
417
|
id: string,
|
|
339
418
|
props: BucketProps = {},
|
|
340
419
|
): Promise<R2Bucket> {
|
|
341
|
-
|
|
420
|
+
const scope = Scope.current;
|
|
421
|
+
const isLocal = scope.local && props.dev?.remote !== true;
|
|
422
|
+
const api = await createCloudflareApi(props);
|
|
423
|
+
const bucket = await _R2Bucket(id, {
|
|
342
424
|
...props,
|
|
343
425
|
dev: {
|
|
344
426
|
...(props.dev ?? {}),
|
|
345
427
|
force: Scope.current.local,
|
|
346
428
|
},
|
|
347
429
|
});
|
|
430
|
+
|
|
431
|
+
let _miniflare: mf.Miniflare | undefined;
|
|
432
|
+
const miniflare = () => {
|
|
433
|
+
if (_miniflare) {
|
|
434
|
+
return _miniflare;
|
|
435
|
+
}
|
|
436
|
+
_miniflare = new mf.Miniflare({
|
|
437
|
+
script: "",
|
|
438
|
+
modules: true,
|
|
439
|
+
defaultPersistRoot: getDefaultPersistPath(scope.rootDir),
|
|
440
|
+
r2Buckets: [bucket.dev.id],
|
|
441
|
+
log: process.env.DEBUG ? new mf.Log(mf.LogLevel.DEBUG) : undefined,
|
|
442
|
+
});
|
|
443
|
+
scope.onCleanup(async () => _miniflare?.dispose());
|
|
444
|
+
return _miniflare;
|
|
445
|
+
};
|
|
446
|
+
const localBucket = () => miniflare().getR2Bucket(bucket.dev.id);
|
|
447
|
+
|
|
448
|
+
return {
|
|
449
|
+
...bucket,
|
|
450
|
+
head: async (key: string) => {
|
|
451
|
+
if (isLocal) {
|
|
452
|
+
return (await localBucket()).head(key);
|
|
453
|
+
}
|
|
454
|
+
return headObject(api, {
|
|
455
|
+
bucketName: bucket.name,
|
|
456
|
+
key,
|
|
457
|
+
});
|
|
458
|
+
},
|
|
459
|
+
get: async (key: string) => {
|
|
460
|
+
if (isLocal) {
|
|
461
|
+
const result = await (await localBucket()).get(key);
|
|
462
|
+
if (result) {
|
|
463
|
+
// cast because workers vs node built-ins
|
|
464
|
+
return result as unknown as R2ObjectContent;
|
|
465
|
+
}
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
const response = await getObject(api, {
|
|
469
|
+
bucketName: bucket.name,
|
|
470
|
+
key,
|
|
471
|
+
});
|
|
472
|
+
if (response.ok) {
|
|
473
|
+
return parseR2Object(key, response);
|
|
474
|
+
} else if (response.status === 404) {
|
|
475
|
+
return null;
|
|
476
|
+
} else {
|
|
477
|
+
throw await handleApiError(response, "get", "object", key);
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
list: async (options?: R2ListOptions): Promise<R2Objects> => {
|
|
481
|
+
if (isLocal) {
|
|
482
|
+
return (await localBucket()).list(options);
|
|
483
|
+
}
|
|
484
|
+
return listObjects(api, bucket.name, {
|
|
485
|
+
...options,
|
|
486
|
+
jurisdiction: bucket.jurisdiction,
|
|
487
|
+
});
|
|
488
|
+
},
|
|
489
|
+
put: async (
|
|
490
|
+
key: string,
|
|
491
|
+
value: PutObjectObject,
|
|
492
|
+
): Promise<PutR2ObjectResponse> => {
|
|
493
|
+
if (isLocal) {
|
|
494
|
+
// @ts-expect-error - node built-ins vs cloudflare built-ins
|
|
495
|
+
return await (await localBucket()).put(
|
|
496
|
+
key,
|
|
497
|
+
typeof value === "string"
|
|
498
|
+
? value
|
|
499
|
+
: Buffer.isBuffer(value) ||
|
|
500
|
+
value instanceof Uint8Array ||
|
|
501
|
+
value instanceof ArrayBuffer
|
|
502
|
+
? new Uint8Array(value)
|
|
503
|
+
: value instanceof Blob
|
|
504
|
+
? new Uint8Array(await value.arrayBuffer())
|
|
505
|
+
: value instanceof ReadableStream
|
|
506
|
+
? new Uint8Array(await streamToBuffer(value))
|
|
507
|
+
: value,
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
const response = await putObject(api, {
|
|
511
|
+
bucketName: bucket.name,
|
|
512
|
+
key: key,
|
|
513
|
+
object: value,
|
|
514
|
+
});
|
|
515
|
+
const body = (await response.json()) as {
|
|
516
|
+
result: {
|
|
517
|
+
key: string;
|
|
518
|
+
etag: string;
|
|
519
|
+
uploaded: string;
|
|
520
|
+
version: string;
|
|
521
|
+
size: string;
|
|
522
|
+
};
|
|
523
|
+
};
|
|
524
|
+
return {
|
|
525
|
+
key: body.result.key,
|
|
526
|
+
etag: body.result.etag,
|
|
527
|
+
uploaded: new Date(body.result.uploaded),
|
|
528
|
+
version: body.result.version,
|
|
529
|
+
size: Number(body.result.size),
|
|
530
|
+
};
|
|
531
|
+
},
|
|
532
|
+
delete: async (key: string) => {
|
|
533
|
+
if (isLocal) {
|
|
534
|
+
await (await localBucket()).delete(key);
|
|
535
|
+
}
|
|
536
|
+
return deleteObject(api, {
|
|
537
|
+
bucketName: bucket.name,
|
|
538
|
+
key: key,
|
|
539
|
+
});
|
|
540
|
+
},
|
|
541
|
+
};
|
|
348
542
|
}
|
|
349
543
|
|
|
544
|
+
const parseR2Object = (key: string, response: Response): R2ObjectContent => ({
|
|
545
|
+
etag: response.headers.get("ETag")!,
|
|
546
|
+
uploaded: parseDate(response.headers),
|
|
547
|
+
key,
|
|
548
|
+
size: Number(response.headers.get("Content-Length")),
|
|
549
|
+
arrayBuffer: () => response.arrayBuffer(),
|
|
550
|
+
bytes: () => response.bytes(),
|
|
551
|
+
text: () => response.text(),
|
|
552
|
+
json: () => response.json(),
|
|
553
|
+
blob: () => response.blob(),
|
|
554
|
+
});
|
|
555
|
+
|
|
556
|
+
const parseDate = (headers: Headers) =>
|
|
557
|
+
new Date(headers.get("Last-Modified") ?? headers.get("Date")!);
|
|
558
|
+
|
|
350
559
|
const _R2Bucket = Resource(
|
|
351
560
|
"cloudflare::R2Bucket",
|
|
352
561
|
async function (
|
|
353
|
-
this: Context<
|
|
562
|
+
this: Context<_R2Bucket>,
|
|
354
563
|
id: string,
|
|
355
564
|
props: BucketProps = {},
|
|
356
|
-
): Promise<
|
|
565
|
+
): Promise<_R2Bucket> {
|
|
357
566
|
const bucketName =
|
|
358
|
-
props.name ?? this.output?.name
|
|
567
|
+
props.name ?? (this.output?.name || this.scope.createPhysicalName(id));
|
|
359
568
|
|
|
360
569
|
if (this.phase === "update" && this.output?.name !== bucketName) {
|
|
361
570
|
this.replace();
|
|
@@ -369,7 +578,7 @@ const _R2Bucket = Resource(
|
|
|
369
578
|
const adopt = props.adopt ?? this.scope.adopt;
|
|
370
579
|
|
|
371
580
|
if (this.scope.local && !props.dev?.remote) {
|
|
372
|
-
return
|
|
581
|
+
return {
|
|
373
582
|
name: this.output?.name ?? "",
|
|
374
583
|
location: this.output?.location ?? "",
|
|
375
584
|
creationDate: this.output?.creationDate ?? new Date(),
|
|
@@ -380,13 +589,16 @@ const _R2Bucket = Resource(
|
|
|
380
589
|
accountId: this.output?.accountId ?? "",
|
|
381
590
|
cors: props.cors,
|
|
382
591
|
dev,
|
|
383
|
-
}
|
|
592
|
+
};
|
|
384
593
|
}
|
|
385
594
|
|
|
386
595
|
const api = await createCloudflareApi(props);
|
|
387
596
|
|
|
388
597
|
if (this.phase === "delete") {
|
|
389
598
|
if (props.delete !== false) {
|
|
599
|
+
if (this.output?.catalog) {
|
|
600
|
+
await disableDataCatalog(api, bucketName);
|
|
601
|
+
}
|
|
390
602
|
if (this.output.dev?.id) {
|
|
391
603
|
await deleteMiniflareBinding(this.scope, "r2", this.output.dev.id);
|
|
392
604
|
}
|
|
@@ -426,7 +638,17 @@ const _R2Bucket = Resource(
|
|
|
426
638
|
if (props.lock?.length) {
|
|
427
639
|
await putBucketLockRules(api, bucketName, props);
|
|
428
640
|
}
|
|
429
|
-
|
|
641
|
+
let dataCatalog:
|
|
642
|
+
| {
|
|
643
|
+
id: string;
|
|
644
|
+
name: string;
|
|
645
|
+
host: string;
|
|
646
|
+
}
|
|
647
|
+
| undefined;
|
|
648
|
+
if (props.dataCatalog) {
|
|
649
|
+
dataCatalog = await enableDataCatalog(api, bucketName);
|
|
650
|
+
}
|
|
651
|
+
return {
|
|
430
652
|
name: bucketName,
|
|
431
653
|
location: bucket.location,
|
|
432
654
|
creationDate: new Date(bucket.creation_date),
|
|
@@ -439,13 +661,21 @@ const _R2Bucket = Resource(
|
|
|
439
661
|
lock: props.lock,
|
|
440
662
|
cors: props.cors,
|
|
441
663
|
dev,
|
|
442
|
-
|
|
664
|
+
catalog: dataCatalog,
|
|
665
|
+
};
|
|
443
666
|
} else {
|
|
444
667
|
if (bucketName !== this.output.name) {
|
|
445
668
|
throw new Error(
|
|
446
669
|
`Cannot update R2Bucket name after creation. Bucket name is immutable. Before: ${this.output.name}, After: ${bucketName}`,
|
|
447
670
|
);
|
|
448
671
|
}
|
|
672
|
+
if (this.output?.catalog && !props.dataCatalog) {
|
|
673
|
+
await disableDataCatalog(api, bucketName);
|
|
674
|
+
this.output.catalog = undefined;
|
|
675
|
+
}
|
|
676
|
+
if (!this.output.catalog && props.dataCatalog) {
|
|
677
|
+
this.output.catalog = await enableDataCatalog(api, bucketName);
|
|
678
|
+
}
|
|
449
679
|
let domain = this.output.domain;
|
|
450
680
|
if (!!domain !== allowPublicAccess) {
|
|
451
681
|
domain = await putManagedDomain(
|
|
@@ -466,7 +696,7 @@ const _R2Bucket = Resource(
|
|
|
466
696
|
if (!isDeepStrictEqual(this.output.lock ?? [], props.lock ?? [])) {
|
|
467
697
|
await putBucketLockRules(api, bucketName, props);
|
|
468
698
|
}
|
|
469
|
-
return
|
|
699
|
+
return {
|
|
470
700
|
...this.output,
|
|
471
701
|
allowPublicAccess,
|
|
472
702
|
dev,
|
|
@@ -474,7 +704,7 @@ const _R2Bucket = Resource(
|
|
|
474
704
|
lifecycle: props.lifecycle,
|
|
475
705
|
lock: props.lock,
|
|
476
706
|
domain,
|
|
477
|
-
}
|
|
707
|
+
};
|
|
478
708
|
}
|
|
479
709
|
},
|
|
480
710
|
);
|
|
@@ -613,17 +843,20 @@ async function emptyBucket(
|
|
|
613
843
|
) {
|
|
614
844
|
let cursor: string | undefined;
|
|
615
845
|
while (true) {
|
|
616
|
-
const result = await listObjects(api, bucketName,
|
|
617
|
-
|
|
846
|
+
const result = await listObjects(api, bucketName, {
|
|
847
|
+
jurisdiction: props.jurisdiction,
|
|
848
|
+
cursor,
|
|
849
|
+
});
|
|
850
|
+
if (result.objects.length) {
|
|
618
851
|
// Another undocumented API! But it lets us delete multiple objects at once instead of one by one.
|
|
619
852
|
await extractCloudflareResult(
|
|
620
|
-
`delete ${result.
|
|
853
|
+
`delete ${result.objects.length} objects from bucket "${bucketName}"`,
|
|
621
854
|
api.delete(
|
|
622
855
|
`/accounts/${api.accountId}/r2/buckets/${bucketName}/objects`,
|
|
623
856
|
{
|
|
624
857
|
headers: withJurisdiction(props),
|
|
625
858
|
method: "DELETE",
|
|
626
|
-
body: JSON.stringify(result.
|
|
859
|
+
body: JSON.stringify(result.objects.map((object) => object.key)),
|
|
627
860
|
},
|
|
628
861
|
),
|
|
629
862
|
);
|
|
@@ -642,21 +875,39 @@ async function emptyBucket(
|
|
|
642
875
|
export async function listObjects(
|
|
643
876
|
api: CloudflareApi,
|
|
644
877
|
bucketName: string,
|
|
645
|
-
props:
|
|
646
|
-
|
|
647
|
-
|
|
878
|
+
props: R2ListOptions & {
|
|
879
|
+
jurisdiction?: string;
|
|
880
|
+
},
|
|
881
|
+
): Promise<R2Objects> {
|
|
648
882
|
const params = new URLSearchParams({
|
|
649
883
|
per_page: "1000",
|
|
650
884
|
});
|
|
651
|
-
if (cursor) {
|
|
652
|
-
params.set("cursor", cursor);
|
|
885
|
+
if (props.cursor) {
|
|
886
|
+
params.set("cursor", props.cursor);
|
|
887
|
+
}
|
|
888
|
+
if (props.delimiter) {
|
|
889
|
+
params.set("delimiter", props.delimiter);
|
|
890
|
+
}
|
|
891
|
+
if (props.prefix) {
|
|
892
|
+
params.set("prefix", props.prefix);
|
|
893
|
+
}
|
|
894
|
+
if (props.startAfter) {
|
|
895
|
+
params.set("start_after", props.startAfter);
|
|
896
|
+
}
|
|
897
|
+
if (props.limit) {
|
|
898
|
+
params.set("limit", props.limit.toString());
|
|
653
899
|
}
|
|
654
900
|
const response = await api.get(
|
|
655
901
|
`/accounts/${api.accountId}/r2/buckets/${bucketName}/objects?${params.toString()}`,
|
|
656
902
|
{ headers: withJurisdiction(props) },
|
|
657
903
|
);
|
|
658
904
|
const json: {
|
|
659
|
-
result: {
|
|
905
|
+
result: {
|
|
906
|
+
key: string;
|
|
907
|
+
etag: string;
|
|
908
|
+
last_modified: string;
|
|
909
|
+
size: number;
|
|
910
|
+
}[];
|
|
660
911
|
result_info?: {
|
|
661
912
|
cursor: string;
|
|
662
913
|
is_truncated: boolean;
|
|
@@ -668,7 +919,11 @@ export async function listObjects(
|
|
|
668
919
|
if (!json.success) {
|
|
669
920
|
// 10006 indicates that the bucket does not exist, so there are no objects to list
|
|
670
921
|
if (json.errors.some((e) => e.code === 10006)) {
|
|
671
|
-
return {
|
|
922
|
+
return {
|
|
923
|
+
objects: [],
|
|
924
|
+
cursor: undefined,
|
|
925
|
+
truncated: false,
|
|
926
|
+
};
|
|
672
927
|
}
|
|
673
928
|
throw new CloudflareApiError(
|
|
674
929
|
`Failed to list objects in bucket "${bucketName}": ${json.errors.map((e) => `- [${e.code}] ${e.message}${e.documentation_url ? ` (${e.documentation_url})` : ""}`).join("\n")}`,
|
|
@@ -677,9 +932,17 @@ export async function listObjects(
|
|
|
677
932
|
);
|
|
678
933
|
}
|
|
679
934
|
return {
|
|
680
|
-
keys: json.result.map((object) => object.key),
|
|
935
|
+
// keys: json.result.map((object) => object.key),
|
|
936
|
+
objects: json.result.map((object) => ({
|
|
937
|
+
key: object.key,
|
|
938
|
+
etag: object.etag,
|
|
939
|
+
uploaded: new Date(object.last_modified),
|
|
940
|
+
size: object.size,
|
|
941
|
+
})),
|
|
942
|
+
delimitedPrefixes: [],
|
|
681
943
|
cursor: json.result_info?.cursor,
|
|
682
|
-
|
|
944
|
+
truncated: json.result_info?.is_truncated ?? false,
|
|
945
|
+
} as R2Objects;
|
|
683
946
|
}
|
|
684
947
|
|
|
685
948
|
/**
|
|
@@ -869,3 +1132,137 @@ export async function getBucketLockRules(
|
|
|
869
1132
|
: (json.result?.rules ?? []);
|
|
870
1133
|
return rules as R2BucketLockRule[];
|
|
871
1134
|
}
|
|
1135
|
+
|
|
1136
|
+
export async function headObject(
|
|
1137
|
+
api: CloudflareApi,
|
|
1138
|
+
{ bucketName, key }: { bucketName: string; key: string },
|
|
1139
|
+
): Promise<R2ObjectMetadata | null> {
|
|
1140
|
+
const response = await withRetries(
|
|
1141
|
+
async () =>
|
|
1142
|
+
await api.get(
|
|
1143
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/objects/${key}`,
|
|
1144
|
+
),
|
|
1145
|
+
);
|
|
1146
|
+
// for some reason HEAD returns 404 for keys that exist, this is the best we can do without using S3 API
|
|
1147
|
+
response.body?.cancel();
|
|
1148
|
+
if (response.status === 404) {
|
|
1149
|
+
return null;
|
|
1150
|
+
} else if (!response.ok) {
|
|
1151
|
+
throw await handleApiError(response, "head", "object", key);
|
|
1152
|
+
}
|
|
1153
|
+
return {
|
|
1154
|
+
key,
|
|
1155
|
+
etag: response.headers.get("ETag")?.replace(/"/g, "")!,
|
|
1156
|
+
uploaded: parseDate(response.headers),
|
|
1157
|
+
size: Number(response.headers.get("Content-Length")),
|
|
1158
|
+
};
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
const withRetries = (f: () => Promise<Response>) => {
|
|
1162
|
+
return withExponentialBackoff(f, isRetryableError, 5, 1000);
|
|
1163
|
+
};
|
|
1164
|
+
|
|
1165
|
+
export async function getObject(
|
|
1166
|
+
api: CloudflareApi,
|
|
1167
|
+
{ bucketName, key }: { bucketName: string; key: string },
|
|
1168
|
+
) {
|
|
1169
|
+
return await withRetries(async () => {
|
|
1170
|
+
const response = await api.get(
|
|
1171
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/objects/${key}`,
|
|
1172
|
+
{
|
|
1173
|
+
headers: {
|
|
1174
|
+
"Content-Type": "application/octet-stream",
|
|
1175
|
+
Accept: "application/octet-stream",
|
|
1176
|
+
},
|
|
1177
|
+
},
|
|
1178
|
+
);
|
|
1179
|
+
if (!response.ok && response.status !== 404) {
|
|
1180
|
+
throw await handleApiError(response, "get", "object", key);
|
|
1181
|
+
}
|
|
1182
|
+
return response;
|
|
1183
|
+
});
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
export type PutObjectObject =
|
|
1187
|
+
| ReadableStream
|
|
1188
|
+
| ArrayBuffer
|
|
1189
|
+
| ArrayBufferView
|
|
1190
|
+
| Uint8Array
|
|
1191
|
+
| string
|
|
1192
|
+
| Buffer
|
|
1193
|
+
| Blob;
|
|
1194
|
+
|
|
1195
|
+
export async function putObject(
|
|
1196
|
+
api: CloudflareApi,
|
|
1197
|
+
{
|
|
1198
|
+
bucketName,
|
|
1199
|
+
key,
|
|
1200
|
+
object,
|
|
1201
|
+
}: {
|
|
1202
|
+
bucketName: string;
|
|
1203
|
+
key: string;
|
|
1204
|
+
object: PutObjectObject;
|
|
1205
|
+
},
|
|
1206
|
+
): Promise<Response> {
|
|
1207
|
+
// Using withExponentialBackoff for reliability
|
|
1208
|
+
return await withRetries(async () => {
|
|
1209
|
+
const response = await api.put(
|
|
1210
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/objects/${key}`,
|
|
1211
|
+
object,
|
|
1212
|
+
{
|
|
1213
|
+
headers: {
|
|
1214
|
+
"Content-Type": "application/octet-stream",
|
|
1215
|
+
},
|
|
1216
|
+
},
|
|
1217
|
+
);
|
|
1218
|
+
if (!response.ok) {
|
|
1219
|
+
await handleApiError(response, "put", "object", key);
|
|
1220
|
+
}
|
|
1221
|
+
return response;
|
|
1222
|
+
});
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
export async function deleteObject(
|
|
1226
|
+
api: CloudflareApi,
|
|
1227
|
+
{ bucketName, key }: { bucketName: string; key: string },
|
|
1228
|
+
) {
|
|
1229
|
+
return await withRetries(async () => {
|
|
1230
|
+
const response = await api.delete(
|
|
1231
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/objects/${key}`,
|
|
1232
|
+
);
|
|
1233
|
+
|
|
1234
|
+
if (!response.ok && response.status !== 404) {
|
|
1235
|
+
await handleApiError(response, "delete", "object", key);
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
return response;
|
|
1239
|
+
});
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
export async function enableDataCatalog(
|
|
1243
|
+
api: CloudflareApi,
|
|
1244
|
+
bucketName: string,
|
|
1245
|
+
) {
|
|
1246
|
+
const response = await extractCloudflareResult<{
|
|
1247
|
+
id: string;
|
|
1248
|
+
name: string;
|
|
1249
|
+
}>(
|
|
1250
|
+
`enable data catalog for bucket "${bucketName}"`,
|
|
1251
|
+
api.post(`/accounts/${api.accountId}/r2-catalog/${bucketName}/enable`, {}),
|
|
1252
|
+
);
|
|
1253
|
+
return {
|
|
1254
|
+
id: response.id,
|
|
1255
|
+
name: response.name,
|
|
1256
|
+
host: `https://catalog.cloudflarestorage.com/${response.name.replace("_", "/")}`,
|
|
1257
|
+
};
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
export async function disableDataCatalog(
|
|
1261
|
+
api: CloudflareApi,
|
|
1262
|
+
bucketName: string,
|
|
1263
|
+
) {
|
|
1264
|
+
await api.post(
|
|
1265
|
+
`/accounts/${api.accountId}/r2-catalog/${bucketName}/disable`,
|
|
1266
|
+
{},
|
|
1267
|
+
);
|
|
1268
|
+
}
|
|
@@ -35,11 +35,11 @@ export function createWasmPlugin() {
|
|
|
35
35
|
);
|
|
36
36
|
|
|
37
37
|
// Copy to outdir so it's included in the upload
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
const copyFrom = path.join(args.resolveDir, name);
|
|
39
|
+
const copyTo = path.join(outdir, name);
|
|
40
|
+
await fs.mkdir(path.dirname(copyTo), { recursive: true });
|
|
41
|
+
await fs.copyFile(copyFrom, copyTo);
|
|
42
|
+
|
|
43
43
|
modules.set(args.path, {
|
|
44
44
|
type: "wasm",
|
|
45
45
|
path: name,
|