@effect-kit/storage 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/LICENSE +204 -0
- package/README.md +369 -2
- package/dist/_virtual/_rolldown/runtime.js +17 -0
- package/dist/azure/account-admin.d.ts +116 -0
- package/dist/azure/account-admin.js +90 -0
- package/dist/azure/account-admin.js.map +1 -0
- package/dist/azure/admin.d.ts +68 -0
- package/dist/azure/admin.js +85 -0
- package/dist/azure/admin.js.map +1 -0
- package/dist/azure/archive.d.ts +95 -0
- package/dist/azure/archive.js +52 -0
- package/dist/azure/archive.js.map +1 -0
- package/dist/azure/events.d.ts +40 -0
- package/dist/azure/events.js +62 -0
- package/dist/azure/events.js.map +1 -0
- package/dist/azure/governance.d.ts +139 -0
- package/dist/azure/governance.js +59 -0
- package/dist/azure/governance.js.map +1 -0
- package/dist/azure/identity.d.ts +4 -0
- package/dist/azure/identity.js +8 -0
- package/dist/azure/identity.js.map +1 -0
- package/dist/azure/lifecycle.d.ts +21 -0
- package/dist/azure/lifecycle.js +193 -0
- package/dist/azure/lifecycle.js.map +1 -0
- package/dist/azure/signing.d.ts +17 -0
- package/dist/azure/signing.js +71 -0
- package/dist/azure/signing.js.map +1 -0
- package/dist/azure/uploads.d.ts +11 -0
- package/dist/azure/uploads.js +83 -0
- package/dist/azure/uploads.js.map +1 -0
- package/dist/azure.d.ts +427 -0
- package/dist/azure.js +77 -0
- package/dist/azure.js.map +1 -0
- package/dist/b2/admin.d.ts +149 -0
- package/dist/b2/admin.js +157 -0
- package/dist/b2/admin.js.map +1 -0
- package/dist/b2.d.ts +15 -0
- package/dist/b2.js +15 -0
- package/dist/b2.js.map +1 -0
- package/dist/browser.d.ts +7 -0
- package/dist/browser.js +11 -0
- package/dist/browser.js.map +1 -0
- package/dist/bun.d.ts +14 -0
- package/dist/bun.js +17 -0
- package/dist/bun.js.map +1 -0
- package/dist/cache.d.ts +18 -0
- package/dist/cache.js +116 -0
- package/dist/cache.js.map +1 -0
- package/dist/client/atoms/controller.d.ts +10 -0
- package/dist/client/atoms/controller.js +267 -0
- package/dist/client/atoms/controller.js.map +1 -0
- package/dist/client/atoms/state.d.ts +17 -0
- package/dist/client/atoms/state.js +11 -0
- package/dist/client/atoms/state.js.map +1 -0
- package/dist/client/atoms.d.ts +59 -0
- package/dist/client/atoms.js +39 -0
- package/dist/client/atoms.js.map +1 -0
- package/dist/client/fingerprint.js +28 -0
- package/dist/client/fingerprint.js.map +1 -0
- package/dist/client/store.d.ts +31 -0
- package/dist/client/store.js +56 -0
- package/dist/client/store.js.map +1 -0
- package/dist/client/transport.d.ts +11 -0
- package/dist/client/transport.js +78 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client.d.ts +259 -0
- package/dist/client.js +350 -0
- package/dist/client.js.map +1 -0
- package/dist/composition/layer.js +22 -0
- package/dist/composition/layer.js.map +1 -0
- package/dist/composition/representation/staging.js +46 -0
- package/dist/composition/representation/staging.js.map +1 -0
- package/dist/composition/representation/storage.js +188 -0
- package/dist/composition/representation/storage.js.map +1 -0
- package/dist/composition.d.ts +20 -0
- package/dist/composition.js +124 -0
- package/dist/composition.js.map +1 -0
- package/dist/compression.d.ts +16 -0
- package/dist/compression.js +38 -0
- package/dist/compression.js.map +1 -0
- package/dist/content.d.ts +590 -0
- package/dist/content.js +168 -0
- package/dist/content.js.map +1 -0
- package/dist/core/capabilities.d.ts +53 -0
- package/dist/core/capabilities.js +9 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/contracts/multipart.d.ts +56 -0
- package/dist/core/contracts/resumable.d.ts +70 -0
- package/dist/core/errors.d.ts +55 -0
- package/dist/core/errors.js +55 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/object.d.ts +97 -0
- package/dist/core/object.js +55 -0
- package/dist/core/object.js.map +1 -0
- package/dist/core/ranges.d.ts +17 -0
- package/dist/core/ranges.js +27 -0
- package/dist/core/ranges.js.map +1 -0
- package/dist/core/requests.d.ts +185 -0
- package/dist/core/requests.js +42 -0
- package/dist/core/requests.js.map +1 -0
- package/dist/core/storage.d.ts +249 -0
- package/dist/core/storage.js +173 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/deno.d.ts +14 -0
- package/dist/deno.js +17 -0
- package/dist/deno.js.map +1 -0
- package/dist/encryption/age.d.ts +14 -0
- package/dist/encryption/age.js +46 -0
- package/dist/encryption/age.js.map +1 -0
- package/dist/encryption.d.ts +16 -0
- package/dist/encryption.js +16 -0
- package/dist/encryption.js.map +1 -0
- package/dist/events.d.ts +57 -0
- package/dist/events.js +106 -0
- package/dist/events.js.map +1 -0
- package/dist/filesystem.d.ts +23 -0
- package/dist/filesystem.js +75 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/gcs/admin.d.ts +470 -0
- package/dist/gcs/admin.js +206 -0
- package/dist/gcs/admin.js.map +1 -0
- package/dist/gcs/events.d.ts +41 -0
- package/dist/gcs/events.js +45 -0
- package/dist/gcs/events.js.map +1 -0
- package/dist/gcs/governance.d.ts +158 -0
- package/dist/gcs/governance.js +100 -0
- package/dist/gcs/governance.js.map +1 -0
- package/dist/gcs/lifecycle.d.ts +161 -0
- package/dist/gcs/lifecycle.js +174 -0
- package/dist/gcs/lifecycle.js.map +1 -0
- package/dist/gcs/post.d.ts +31 -0
- package/dist/gcs/post.js +70 -0
- package/dist/gcs/post.js.map +1 -0
- package/dist/gcs/signing.d.ts +10 -0
- package/dist/gcs/signing.js +61 -0
- package/dist/gcs/signing.js.map +1 -0
- package/dist/gcs/uploads.d.ts +10 -0
- package/dist/gcs/uploads.js +76 -0
- package/dist/gcs/uploads.js.map +1 -0
- package/dist/gcs.d.ts +888 -0
- package/dist/gcs.js +91 -0
- package/dist/gcs.js.map +1 -0
- package/dist/hetzner/admin.d.ts +112 -0
- package/dist/hetzner/admin.js +19 -0
- package/dist/hetzner/admin.js.map +1 -0
- package/dist/hetzner.d.ts +15 -0
- package/dist/hetzner.js +15 -0
- package/dist/hetzner.js.map +1 -0
- package/dist/http/api.d.ts +236 -0
- package/dist/http/api.js +54 -0
- package/dist/http/api.js.map +1 -0
- package/dist/http/download.js +99 -0
- package/dist/http/download.js.map +1 -0
- package/dist/http/schema.d.ts +3 -0
- package/dist/http/schema.js +4 -0
- package/dist/http.d.ts +35 -0
- package/dist/http.js +178 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +9 -0
- package/dist/internal/http/control-plane.js +71 -0
- package/dist/internal/http/control-plane.js.map +1 -0
- package/dist/internal/listing-cursor.js +44 -0
- package/dist/internal/listing-cursor.js.map +1 -0
- package/dist/internal/node/provider-errors.js +16 -0
- package/dist/internal/node/provider-errors.js.map +1 -0
- package/dist/internal/node/upload-body.js +111 -0
- package/dist/internal/node/upload-body.js.map +1 -0
- package/dist/internal/provider-response.js +14 -0
- package/dist/internal/provider-response.js.map +1 -0
- package/dist/internal/public-urls.js +30 -0
- package/dist/internal/public-urls.js.map +1 -0
- package/dist/internal/read-condition.js +11 -0
- package/dist/internal/read-condition.js.map +1 -0
- package/dist/internal/request-validation.js +24 -0
- package/dist/internal/request-validation.js.map +1 -0
- package/dist/internal/signing-request.js +22 -0
- package/dist/internal/signing-request.js.map +1 -0
- package/dist/internal/web-upload-body.js +71 -0
- package/dist/internal/web-upload-body.js.map +1 -0
- package/dist/lifecycle/configuration-state.js +26 -0
- package/dist/lifecycle/configuration-state.js.map +1 -0
- package/dist/lifecycle/metadata.js +28 -0
- package/dist/lifecycle/metadata.js.map +1 -0
- package/dist/lifecycle.d.ts +269 -0
- package/dist/lifecycle.js +72 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/migrations.d.ts +537 -0
- package/dist/migrations.js +296 -0
- package/dist/migrations.js.map +1 -0
- package/dist/minio/admin.d.ts +112 -0
- package/dist/minio/admin.js +19 -0
- package/dist/minio/admin.js.map +1 -0
- package/dist/minio.d.ts +15 -0
- package/dist/minio.js +15 -0
- package/dist/minio.js.map +1 -0
- package/dist/mirror.d.ts +830 -0
- package/dist/mirror.js +290 -0
- package/dist/mirror.js.map +1 -0
- package/dist/node.d.ts +14 -0
- package/dist/node.js +17 -0
- package/dist/node.js.map +1 -0
- package/dist/providers/azure/blocks.js +94 -0
- package/dist/providers/azure/blocks.js.map +1 -0
- package/dist/providers/azure/config.d.ts +41 -0
- package/dist/providers/azure/config.js +62 -0
- package/dist/providers/azure/config.js.map +1 -0
- package/dist/providers/azure/mapping.js +83 -0
- package/dist/providers/azure/mapping.js.map +1 -0
- package/dist/providers/azure/native.js +88 -0
- package/dist/providers/azure/native.js.map +1 -0
- package/dist/providers/azure/primitives.js +203 -0
- package/dist/providers/azure/primitives.js.map +1 -0
- package/dist/providers/azure/properties.d.ts +180 -0
- package/dist/providers/azure/properties.js +55 -0
- package/dist/providers/azure/properties.js.map +1 -0
- package/dist/providers/azure/transport.js +14 -0
- package/dist/providers/azure/transport.js.map +1 -0
- package/dist/providers/azure/validation.js +11 -0
- package/dist/providers/azure/validation.js.map +1 -0
- package/dist/providers/filesystem/envelope.js +56 -0
- package/dist/providers/filesystem/envelope.js.map +1 -0
- package/dist/providers/filesystem/identity.js +68 -0
- package/dist/providers/filesystem/identity.js.map +1 -0
- package/dist/providers/filesystem/layout.d.ts +15 -0
- package/dist/providers/filesystem/layout.js +112 -0
- package/dist/providers/filesystem/layout.js.map +1 -0
- package/dist/providers/filesystem/list.js +82 -0
- package/dist/providers/filesystem/list.js.map +1 -0
- package/dist/providers/filesystem/operations.js +134 -0
- package/dist/providers/filesystem/operations.js.map +1 -0
- package/dist/providers/gcs/config.d.ts +34 -0
- package/dist/providers/gcs/config.js +60 -0
- package/dist/providers/gcs/config.js.map +1 -0
- package/dist/providers/gcs/iam.js +45 -0
- package/dist/providers/gcs/iam.js.map +1 -0
- package/dist/providers/gcs/mapping.js +118 -0
- package/dist/providers/gcs/mapping.js.map +1 -0
- package/dist/providers/gcs/native.d.ts +11 -0
- package/dist/providers/gcs/native.js +122 -0
- package/dist/providers/gcs/native.js.map +1 -0
- package/dist/providers/gcs/primitives.js +194 -0
- package/dist/providers/gcs/primitives.js.map +1 -0
- package/dist/providers/gcs/resumable.js +145 -0
- package/dist/providers/gcs/resumable.js.map +1 -0
- package/dist/providers/gcs/tier.d.ts +176 -0
- package/dist/providers/gcs/tier.js +34 -0
- package/dist/providers/gcs/tier.js.map +1 -0
- package/dist/providers/gcs/transport.js +123 -0
- package/dist/providers/gcs/transport.js.map +1 -0
- package/dist/providers/gcs/upload.js +28 -0
- package/dist/providers/gcs/upload.js.map +1 -0
- package/dist/providers/gcs/validation.js +10 -0
- package/dist/providers/gcs/validation.js.map +1 -0
- package/dist/providers/r2-workers/binding.d.ts +102 -0
- package/dist/providers/r2-workers/body.js +82 -0
- package/dist/providers/r2-workers/body.js.map +1 -0
- package/dist/providers/r2-workers/list.js +62 -0
- package/dist/providers/r2-workers/list.js.map +1 -0
- package/dist/providers/r2-workers/mapping.js +140 -0
- package/dist/providers/r2-workers/mapping.js.map +1 -0
- package/dist/providers/r2-workers/multipart.js +121 -0
- package/dist/providers/r2-workers/multipart.js.map +1 -0
- package/dist/providers/r2-workers/primitives.js +80 -0
- package/dist/providers/r2-workers/primitives.js.map +1 -0
- package/dist/providers/s3/admin-configuration.d.ts +19 -0
- package/dist/providers/s3/admin-configuration.js +171 -0
- package/dist/providers/s3/admin-configuration.js.map +1 -0
- package/dist/providers/s3/bulk-delete.d.ts +43 -0
- package/dist/providers/s3/bulk-delete.js +58 -0
- package/dist/providers/s3/bulk-delete.js.map +1 -0
- package/dist/providers/s3/config.d.ts +43 -0
- package/dist/providers/s3/config.js +89 -0
- package/dist/providers/s3/config.js.map +1 -0
- package/dist/providers/s3/copy.d.ts +115 -0
- package/dist/providers/s3/copy.js +122 -0
- package/dist/providers/s3/copy.js.map +1 -0
- package/dist/providers/s3/lifecycle-validation.js +33 -0
- package/dist/providers/s3/lifecycle-validation.js.map +1 -0
- package/dist/providers/s3/listing.js +56 -0
- package/dist/providers/s3/listing.js.map +1 -0
- package/dist/providers/s3/metadata.d.ts +10 -0
- package/dist/providers/s3/metadata.js +90 -0
- package/dist/providers/s3/metadata.js.map +1 -0
- package/dist/providers/s3/multipart.d.ts +41 -0
- package/dist/providers/s3/multipart.js +299 -0
- package/dist/providers/s3/multipart.js.map +1 -0
- package/dist/providers/s3/native-models.d.ts +82 -0
- package/dist/providers/s3/native-models.js +91 -0
- package/dist/providers/s3/native-models.js.map +1 -0
- package/dist/providers/s3/object-mapping.js +114 -0
- package/dist/providers/s3/object-mapping.js.map +1 -0
- package/dist/providers/s3/primitives.d.ts +8 -0
- package/dist/providers/s3/primitives.js +235 -0
- package/dist/providers/s3/primitives.js.map +1 -0
- package/dist/providers/s3/profile.d.ts +25 -0
- package/dist/providers/s3/profile.js +46 -0
- package/dist/providers/s3/profile.js.map +1 -0
- package/dist/providers/s3/request-extension.js +29 -0
- package/dist/providers/s3/request-extension.js.map +1 -0
- package/dist/providers/s3/service.js +55 -0
- package/dist/providers/s3/service.js.map +1 -0
- package/dist/providers/s3/signing-credentials.js +32 -0
- package/dist/providers/s3/signing-credentials.js.map +1 -0
- package/dist/providers/s3/tags.d.ts +10 -0
- package/dist/providers/s3/tags.js +65 -0
- package/dist/providers/s3/tags.js.map +1 -0
- package/dist/providers/s3/tier.d.ts +171 -0
- package/dist/providers/s3/tier.js +100 -0
- package/dist/providers/s3/tier.js.map +1 -0
- package/dist/providers/s3/transfer-driver.js +72 -0
- package/dist/providers/s3/transfer-driver.js.map +1 -0
- package/dist/providers/s3/transport.js +94 -0
- package/dist/providers/s3/transport.js.map +1 -0
- package/dist/providers/s3/upload-body.js +10 -0
- package/dist/providers/s3/upload-body.js.map +1 -0
- package/dist/providers/s3/validation.js +31 -0
- package/dist/providers/s3/validation.js.map +1 -0
- package/dist/providers/s3/versions.d.ts +10 -0
- package/dist/providers/s3/versions.js +143 -0
- package/dist/providers/s3/versions.js.map +1 -0
- package/dist/providers/s3-compatible/config.d.ts +36 -0
- package/dist/providers/s3-compatible/config.js +174 -0
- package/dist/providers/s3-compatible/config.js.map +1 -0
- package/dist/providers/s3-compatible/service.js +48 -0
- package/dist/providers/s3-compatible/service.js.map +1 -0
- package/dist/providers/supabase/config.d.ts +20 -0
- package/dist/providers/supabase/config.js +41 -0
- package/dist/providers/supabase/config.js.map +1 -0
- package/dist/providers/supabase/mapping.js +60 -0
- package/dist/providers/supabase/mapping.js.map +1 -0
- package/dist/providers/supabase/primitives.js +205 -0
- package/dist/providers/supabase/primitives.js.map +1 -0
- package/dist/providers/supabase/transport.js +64 -0
- package/dist/providers/supabase/transport.js.map +1 -0
- package/dist/providers/supabase/tus.js +163 -0
- package/dist/providers/supabase/tus.js.map +1 -0
- package/dist/providers/tigris/configuration.js +118 -0
- package/dist/providers/tigris/configuration.js.map +1 -0
- package/dist/providers/tigris/snapshots.js +87 -0
- package/dist/providers/tigris/snapshots.js.map +1 -0
- package/dist/providers/tigris/transport.js +18 -0
- package/dist/providers/tigris/transport.js.map +1 -0
- package/dist/providers/vercel/config.d.ts +16 -0
- package/dist/providers/vercel/config.js +48 -0
- package/dist/providers/vercel/config.js.map +1 -0
- package/dist/providers/vercel/mapping.js +79 -0
- package/dist/providers/vercel/mapping.js.map +1 -0
- package/dist/providers/vercel/multipart.js +113 -0
- package/dist/providers/vercel/multipart.js.map +1 -0
- package/dist/providers/vercel/primitives.js +168 -0
- package/dist/providers/vercel/primitives.js.map +1 -0
- package/dist/providers/vercel/transport.js +32 -0
- package/dist/providers/vercel/transport.js.map +1 -0
- package/dist/providers/wasabi/compliance.d.ts +52 -0
- package/dist/providers/wasabi/compliance.js +89 -0
- package/dist/providers/wasabi/compliance.js.map +1 -0
- package/dist/providers/wasabi/xml.js +55 -0
- package/dist/providers/wasabi/xml.js.map +1 -0
- package/dist/r2/admin.d.ts +126 -0
- package/dist/r2/admin.js +138 -0
- package/dist/r2/admin.js.map +1 -0
- package/dist/r2/events.d.ts +41 -0
- package/dist/r2/events.js +37 -0
- package/dist/r2/events.js.map +1 -0
- package/dist/r2-workers.d.ts +24 -0
- package/dist/r2-workers.js +115 -0
- package/dist/r2-workers.js.map +1 -0
- package/dist/r2.d.ts +15 -0
- package/dist/r2.js +15 -0
- package/dist/r2.js.map +1 -0
- package/dist/react.d.ts +73 -0
- package/dist/react.js +49 -0
- package/dist/react.js.map +1 -0
- package/dist/representation.d.ts +24 -0
- package/dist/representation.js +7 -0
- package/dist/representation.js.map +1 -0
- package/dist/runtime/bun-filesystem.js +136 -0
- package/dist/runtime/bun-filesystem.js.map +1 -0
- package/dist/runtime/file-target.d.ts +10 -0
- package/dist/runtime/file-target.js +66 -0
- package/dist/runtime/file-target.js.map +1 -0
- package/dist/runtime/filesystem.d.ts +6 -0
- package/dist/runtime/filesystem.js +68 -0
- package/dist/runtime/filesystem.js.map +1 -0
- package/dist/runtime/node-hash.d.ts +4 -0
- package/dist/runtime/node-hash.js +31 -0
- package/dist/runtime/node-hash.js.map +1 -0
- package/dist/runtime/node-protection.d.ts +4 -0
- package/dist/runtime/node-protection.js +46 -0
- package/dist/runtime/node-protection.js.map +1 -0
- package/dist/runtime/portable-hash.d.ts +3 -0
- package/dist/runtime/portable-hash.js +31 -0
- package/dist/runtime/portable-hash.js.map +1 -0
- package/dist/runtime/session-store.d.ts +12 -0
- package/dist/runtime/session-store.js +19 -0
- package/dist/runtime/session-store.js.map +1 -0
- package/dist/runtime/web-protection.d.ts +7 -0
- package/dist/runtime/web-protection.js +54 -0
- package/dist/runtime/web-protection.js.map +1 -0
- package/dist/s3/admin.d.ts +183 -0
- package/dist/s3/admin.js +197 -0
- package/dist/s3/admin.js.map +1 -0
- package/dist/s3/archive.d.ts +25 -0
- package/dist/s3/archive.js +113 -0
- package/dist/s3/archive.js.map +1 -0
- package/dist/s3/events.d.ts +42 -0
- package/dist/s3/events.js +69 -0
- package/dist/s3/events.js.map +1 -0
- package/dist/s3/governance.d.ts +319 -0
- package/dist/s3/governance.js +108 -0
- package/dist/s3/governance.js.map +1 -0
- package/dist/s3/lifecycle.d.ts +4 -0
- package/dist/s3/lifecycle.js +5 -0
- package/dist/s3/post.d.ts +31 -0
- package/dist/s3/post.js +93 -0
- package/dist/s3/post.js.map +1 -0
- package/dist/s3/signing.d.ts +105 -0
- package/dist/s3/signing.js +198 -0
- package/dist/s3/signing.js.map +1 -0
- package/dist/s3/uploads.d.ts +11 -0
- package/dist/s3/uploads.js +173 -0
- package/dist/s3/uploads.js.map +1 -0
- package/dist/s3.d.ts +37 -0
- package/dist/s3.js +114 -0
- package/dist/s3.js.map +1 -0
- package/dist/scaleway/admin.d.ts +112 -0
- package/dist/scaleway/admin.js +19 -0
- package/dist/scaleway/admin.js.map +1 -0
- package/dist/scaleway.d.ts +15 -0
- package/dist/scaleway.js +15 -0
- package/dist/scaleway.js.map +1 -0
- package/dist/session-events.d.ts +22 -0
- package/dist/session-events.js +22 -0
- package/dist/session-events.js.map +1 -0
- package/dist/sessions/checkpoint.d.ts +423 -0
- package/dist/sessions/checkpoint.js +102 -0
- package/dist/sessions/checkpoint.js.map +1 -0
- package/dist/sessions/download.d.ts +17 -0
- package/dist/sessions/download.js +111 -0
- package/dist/sessions/download.js.map +1 -0
- package/dist/sessions/native-upload.js +168 -0
- package/dist/sessions/native-upload.js.map +1 -0
- package/dist/sessions/store.d.ts +40 -0
- package/dist/sessions/store.js +77 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/upload.d.ts +10 -0
- package/dist/sessions/upload.js +329 -0
- package/dist/sessions/upload.js.map +1 -0
- package/dist/sessions.d.ts +98 -0
- package/dist/sessions.js +268 -0
- package/dist/sessions.js.map +1 -0
- package/dist/spaces/admin.d.ts +112 -0
- package/dist/spaces/admin.js +19 -0
- package/dist/spaces/admin.js.map +1 -0
- package/dist/spaces.d.ts +15 -0
- package/dist/spaces.js +15 -0
- package/dist/spaces.js.map +1 -0
- package/dist/supabase/admin.d.ts +77 -0
- package/dist/supabase/admin.js +74 -0
- package/dist/supabase/admin.js.map +1 -0
- package/dist/supabase/s3.d.ts +311 -0
- package/dist/supabase/s3.js +153 -0
- package/dist/supabase/s3.js.map +1 -0
- package/dist/supabase/signing.d.ts +23 -0
- package/dist/supabase/signing.js +93 -0
- package/dist/supabase/signing.js.map +1 -0
- package/dist/supabase/tus-uploads.d.ts +13 -0
- package/dist/supabase/tus-uploads.js +109 -0
- package/dist/supabase/tus-uploads.js.map +1 -0
- package/dist/supabase/uploads.d.ts +5 -0
- package/dist/supabase/uploads.js +32 -0
- package/dist/supabase/uploads.js.map +1 -0
- package/dist/supabase.d.ts +100 -0
- package/dist/supabase.js +50 -0
- package/dist/supabase.js.map +1 -0
- package/dist/testing/body-failure.js +18 -0
- package/dist/testing/body-failure.js.map +1 -0
- package/dist/testing/conformance/assertions.d.ts +10 -0
- package/dist/testing/conformance/assertions.js +21 -0
- package/dist/testing/conformance/assertions.js.map +1 -0
- package/dist/testing/conformance/core-cases.js +107 -0
- package/dist/testing/conformance/core-cases.js.map +1 -0
- package/dist/testing/conformance/list-cases.js +72 -0
- package/dist/testing/conformance/list-cases.js.map +1 -0
- package/dist/testing/conformance/read-cases.js +105 -0
- package/dist/testing/conformance/read-cases.js.map +1 -0
- package/dist/testing/conformance.d.ts +23 -0
- package/dist/testing/conformance.js +37 -0
- package/dist/testing/conformance.js.map +1 -0
- package/dist/testing/faults.d.ts +258 -0
- package/dist/testing/faults.js +111 -0
- package/dist/testing/faults.js.map +1 -0
- package/dist/testing/memory-list.js +79 -0
- package/dist/testing/memory-list.js.map +1 -0
- package/dist/testing/memory-state.d.ts +18 -0
- package/dist/testing/memory-state.js +57 -0
- package/dist/testing/memory-state.js.map +1 -0
- package/dist/testing/memory-upload.js +123 -0
- package/dist/testing/memory-upload.js.map +1 -0
- package/dist/testing/memory.d.ts +23 -0
- package/dist/testing/memory.js +121 -0
- package/dist/testing/memory.js.map +1 -0
- package/dist/testing.d.ts +6 -0
- package/dist/testing.js +6 -0
- package/dist/tigris/events.d.ts +42 -0
- package/dist/tigris/events.js +42 -0
- package/dist/tigris/events.js.map +1 -0
- package/dist/tigris/native.d.ts +438 -0
- package/dist/tigris/native.js +166 -0
- package/dist/tigris/native.js.map +1 -0
- package/dist/tigris.d.ts +15 -0
- package/dist/tigris.js +15 -0
- package/dist/tigris.js.map +1 -0
- package/dist/transfers/budget.js +50 -0
- package/dist/transfers/budget.js.map +1 -0
- package/dist/transfers/copy.js +250 -0
- package/dist/transfers/copy.js.map +1 -0
- package/dist/transfers/dependencies.d.ts +10 -0
- package/dist/transfers/dependencies.js +11 -0
- package/dist/transfers/dependencies.js.map +1 -0
- package/dist/transfers/download.js +132 -0
- package/dist/transfers/download.js.map +1 -0
- package/dist/transfers/managed-runtime.d.ts +34 -0
- package/dist/transfers/managed-runtime.js +30 -0
- package/dist/transfers/managed-runtime.js.map +1 -0
- package/dist/transfers/models.d.ts +160 -0
- package/dist/transfers/native-upload.js +195 -0
- package/dist/transfers/native-upload.js.map +1 -0
- package/dist/transfers/part-receipts.js +32 -0
- package/dist/transfers/part-receipts.js.map +1 -0
- package/dist/transfers/planner.d.ts +19 -0
- package/dist/transfers/planner.js +153 -0
- package/dist/transfers/planner.js.map +1 -0
- package/dist/transfers/reader.js +81 -0
- package/dist/transfers/reader.js.map +1 -0
- package/dist/transfers/runtime.d.ts +19 -0
- package/dist/transfers/runtime.js +132 -0
- package/dist/transfers/runtime.js.map +1 -0
- package/dist/transfers/sources.d.ts +22 -0
- package/dist/transfers/sources.js +83 -0
- package/dist/transfers/sources.js.map +1 -0
- package/dist/transfers/upload.js +235 -0
- package/dist/transfers/upload.js.map +1 -0
- package/dist/transfers.d.ts +31 -0
- package/dist/transfers.js +82 -0
- package/dist/transfers.js.map +1 -0
- package/dist/uploads/driver.d.ts +22 -0
- package/dist/uploads/driver.js +18 -0
- package/dist/uploads/driver.js.map +1 -0
- package/dist/uploads/policy.d.ts +39 -0
- package/dist/uploads/schema.d.ts +278 -0
- package/dist/uploads/schema.js +167 -0
- package/dist/uploads/schema.js.map +1 -0
- package/dist/uploads/signed-driver.d.ts +8 -0
- package/dist/uploads/signed-driver.js +36 -0
- package/dist/uploads/signed-driver.js.map +1 -0
- package/dist/uploads/store.d.ts +26 -0
- package/dist/uploads/store.js +51 -0
- package/dist/uploads/store.js.map +1 -0
- package/dist/uploads/verification.js +86 -0
- package/dist/uploads/verification.js.map +1 -0
- package/dist/uploads.d.ts +518 -0
- package/dist/uploads.js +330 -0
- package/dist/uploads.js.map +1 -0
- package/dist/vercel/authorized-uploads.d.ts +7 -0
- package/dist/vercel/authorized-uploads.js +15 -0
- package/dist/vercel/authorized-uploads.js.map +1 -0
- package/dist/vercel/client.d.ts +16 -0
- package/dist/vercel/client.js +28 -0
- package/dist/vercel/client.js.map +1 -0
- package/dist/vercel/signing.d.ts +19 -0
- package/dist/vercel/signing.js +120 -0
- package/dist/vercel/signing.js.map +1 -0
- package/dist/vercel/uploads.d.ts +36 -0
- package/dist/vercel/uploads.js +161 -0
- package/dist/vercel/uploads.js.map +1 -0
- package/dist/vercel.d.ts +86 -0
- package/dist/vercel.js +46 -0
- package/dist/vercel.js.map +1 -0
- package/dist/wasabi/admin.d.ts +112 -0
- package/dist/wasabi/admin.js +19 -0
- package/dist/wasabi/admin.js.map +1 -0
- package/dist/wasabi/native.d.ts +200 -0
- package/dist/wasabi/native.js +132 -0
- package/dist/wasabi/native.js.map +1 -0
- package/dist/wasabi.d.ts +15 -0
- package/dist/wasabi.js +15 -0
- package/dist/wasabi.js.map +1 -0
- package/dist/workflows/content/collection.js +122 -0
- package/dist/workflows/content/collection.js.map +1 -0
- package/dist/workflows/content/references.js +113 -0
- package/dist/workflows/content/references.js.map +1 -0
- package/dist/workflows/content/schema.d.ts +58 -0
- package/dist/workflows/content/schema.js +64 -0
- package/dist/workflows/content/schema.js.map +1 -0
- package/dist/workflows/endpoint.js +16 -0
- package/dist/workflows/endpoint.js.map +1 -0
- package/dist/workflows/migrations/schema.d.ts +149 -0
- package/dist/workflows/migrations/schema.js +58 -0
- package/dist/workflows/migrations/schema.js.map +1 -0
- package/dist/workflows/mirror/operations.js +175 -0
- package/dist/workflows/mirror/operations.js.map +1 -0
- package/dist/workflows/mirror/schema.d.ts +68 -0
- package/dist/workflows/mirror/schema.js +57 -0
- package/dist/workflows/mirror/schema.js.map +1 -0
- package/dist/workflows/mirror/view.js +103 -0
- package/dist/workflows/mirror/view.js.map +1 -0
- package/dist/workflows/objects.js +54 -0
- package/dist/workflows/objects.js.map +1 -0
- package/dist/workflows/store.d.ts +13 -0
- package/dist/workflows/store.js +58 -0
- package/dist/workflows/store.js.map +1 -0
- package/package.json +513 -3
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { storageError } from "../../core/errors.js";
|
|
2
|
+
import { Storage } from "../../core/storage.js";
|
|
3
|
+
import { decodeCursor, encodeCursor } from "../../internal/listing-cursor.js";
|
|
4
|
+
import { readCondition } from "../../internal/read-condition.js";
|
|
5
|
+
import { webUploadBody } from "../../internal/web-upload-body.js";
|
|
6
|
+
import { metadata, providerError, validateKey, writeOptions } from "./mapping.js";
|
|
7
|
+
import { call } from "./transport.js";
|
|
8
|
+
import { Effect, Stream } from "effect";
|
|
9
|
+
import * as Blob from "@vercel/blob";
|
|
10
|
+
|
|
11
|
+
// src/providers/vercel/primitives.ts
|
|
12
|
+
const get = Effect.fnUntraced(function* (connection, input) {
|
|
13
|
+
const key = "ref" in input ? input.ref.key : input.key;
|
|
14
|
+
yield* validateKey(key, "get");
|
|
15
|
+
const controller = yield* Effect.acquireRelease(Effect.sync(() => new AbortController()), (owned) => Effect.sync(() => owned.abort()));
|
|
16
|
+
const range = input.range;
|
|
17
|
+
const response = yield* call(connection, "get", false, (options) => Blob.get(`${connection.config.apiOrigin ?? `https://${connection.config.storeId}.${connection.config.access}.blob.vercel-storage.com`}/${key.split("/").map(encodeURIComponent).join("/")}`, {
|
|
18
|
+
...options,
|
|
19
|
+
abortSignal: AbortSignal.any([options.abortSignal, controller.signal]),
|
|
20
|
+
access: connection.config.access,
|
|
21
|
+
useCache: false,
|
|
22
|
+
...input.condition?._tag === "IfNoneMatch" ? { ifNoneMatch: input.condition.etag } : {},
|
|
23
|
+
headers: {
|
|
24
|
+
"accept-encoding": "identity",
|
|
25
|
+
...input.condition?._tag === "IfMatch" ? { "if-match": input.condition.etag } : {},
|
|
26
|
+
...range ? { range: range._tag === "Suffix" ? `bytes=-${range.length}` : `bytes=${range.start}-${range._tag === "Bounded" ? range.end : ""}` } : {}
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
if (!response) return yield* storageError("get", "vercel", { _tag: "NotFound" });
|
|
30
|
+
if (response.stream) yield* Effect.addFinalizer(() => Effect.promise(() => response.stream?.cancel().catch(() => void 0) ?? Promise.resolve()));
|
|
31
|
+
if (response.headers.get("content-encoding") && response.headers.get("content-encoding") !== "identity") return yield* storageError("get", "vercel", {
|
|
32
|
+
_tag: "Unsupported",
|
|
33
|
+
capability: "encoded-representation"
|
|
34
|
+
});
|
|
35
|
+
if (response.statusCode === 304 && input.condition?._tag !== "IfNoneMatch") return yield* storageError("get", "vercel", { _tag: "ProviderFailure" });
|
|
36
|
+
let observed = yield* metadata(connection, {
|
|
37
|
+
...response.blob,
|
|
38
|
+
pathname: key
|
|
39
|
+
}, "get", key);
|
|
40
|
+
const outcome = readCondition(input.condition, observed.etag);
|
|
41
|
+
if (outcome === "failed") return yield* storageError("get", "vercel", { _tag: "PreconditionFailed" });
|
|
42
|
+
if (response.statusCode === 304 || outcome === "not-modified") return {
|
|
43
|
+
_tag: "NotModified",
|
|
44
|
+
metadata: observed
|
|
45
|
+
};
|
|
46
|
+
let resolved;
|
|
47
|
+
if (range) {
|
|
48
|
+
const match = /^bytes (\d+)-(\d+)\/(\d+)$/u.exec(response.headers.get("content-range") ?? "");
|
|
49
|
+
if (!match) return yield* storageError("get", "vercel", {
|
|
50
|
+
_tag: "Unsupported",
|
|
51
|
+
capability: "range-response"
|
|
52
|
+
});
|
|
53
|
+
resolved = {
|
|
54
|
+
start: Number(match[1]),
|
|
55
|
+
end: Number(match[2]),
|
|
56
|
+
totalSize: Number(match[3])
|
|
57
|
+
};
|
|
58
|
+
const start = range._tag === "Suffix" ? Math.max(0, resolved.totalSize - range.length) : range.start;
|
|
59
|
+
const end = range._tag === "Bounded" ? Math.min(range.end, resolved.totalSize - 1) : resolved.totalSize - 1;
|
|
60
|
+
if (resolved.start !== start || resolved.end !== end || !Object.values(resolved).every(Number.isSafeInteger)) return yield* storageError("get", "vercel", { _tag: "ProviderFailure" });
|
|
61
|
+
observed = {
|
|
62
|
+
...observed,
|
|
63
|
+
size: resolved.totalSize
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
_tag: "Object",
|
|
68
|
+
metadata: observed,
|
|
69
|
+
contentLength: resolved ? resolved.end - resolved.start + 1 : observed.size,
|
|
70
|
+
...resolved ? { range: resolved } : {},
|
|
71
|
+
body: Stream.fromReadableStream({
|
|
72
|
+
evaluate: () => response.stream,
|
|
73
|
+
onError: () => providerError("get", false, {})
|
|
74
|
+
})
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
const put = Effect.fnUntraced(function* (connection, input) {
|
|
78
|
+
yield* validateKey(input.key, "put");
|
|
79
|
+
const settings = yield* writeOptions(input, "put");
|
|
80
|
+
return yield* webUploadBody("vercel", {
|
|
81
|
+
...input,
|
|
82
|
+
maxBytes: Math.min(input.maxBytes ?? Infinity, connection.config.maxObjectBytes)
|
|
83
|
+
}, connection.config.maxUnknownLengthBytes, (body, length) => call(connection, "put", true, (options) => Blob.put(input.key, body instanceof Uint8Array ? new ReadableStream({ start(controller) {
|
|
84
|
+
controller.enqueue(body);
|
|
85
|
+
controller.close();
|
|
86
|
+
} }) : body, {
|
|
87
|
+
...options,
|
|
88
|
+
...settings,
|
|
89
|
+
access: connection.config.access,
|
|
90
|
+
multipart: false,
|
|
91
|
+
allowOverwrite: input.condition?._tag !== "CreateOnly",
|
|
92
|
+
...input.condition?._tag === "IfMatch" ? { ifMatch: input.condition.etag } : {}
|
|
93
|
+
})).pipe(Effect.flatMap((result) => metadata(connection, result, "put", input.key, true)), Effect.map((result) => ({
|
|
94
|
+
...result,
|
|
95
|
+
size: length
|
|
96
|
+
}))));
|
|
97
|
+
});
|
|
98
|
+
function primitives(connection) {
|
|
99
|
+
return Storage.make({
|
|
100
|
+
provider: "vercel",
|
|
101
|
+
storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,
|
|
102
|
+
capabilities: {
|
|
103
|
+
putConditions: ["create-only", "if-match"],
|
|
104
|
+
getConditions: ["if-match", "if-none-match"],
|
|
105
|
+
deleteConditions: ["if-match"],
|
|
106
|
+
ranges: [
|
|
107
|
+
"bounded",
|
|
108
|
+
"from",
|
|
109
|
+
"suffix"
|
|
110
|
+
],
|
|
111
|
+
versionedReads: "none",
|
|
112
|
+
list: {
|
|
113
|
+
maxPageSize: 1e3,
|
|
114
|
+
delimiter: true,
|
|
115
|
+
cursorPersistence: "provider",
|
|
116
|
+
snapshot: false
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
put: (input) => put(connection, input),
|
|
120
|
+
get: (input) => get(connection, input),
|
|
121
|
+
head: Effect.fnUntraced(function* (input) {
|
|
122
|
+
const key = "ref" in input ? input.ref.key : input.key;
|
|
123
|
+
yield* validateKey(key, "head");
|
|
124
|
+
return yield* call(connection, "head", false, (options) => Blob.head(key, options)).pipe(Effect.flatMap((result) => metadata(connection, result, "head", key)));
|
|
125
|
+
}),
|
|
126
|
+
delete: Effect.fnUntraced(function* (input) {
|
|
127
|
+
const key = "ref" in input ? input.ref.key : input.key;
|
|
128
|
+
yield* validateKey(key, "delete");
|
|
129
|
+
yield* call(connection, "delete", true, (options) => Blob.del(key, {
|
|
130
|
+
...options,
|
|
131
|
+
...input.condition ? { ifMatch: input.condition.etag } : {}
|
|
132
|
+
}));
|
|
133
|
+
}),
|
|
134
|
+
listPage: Effect.fnUntraced(function* (input = {}) {
|
|
135
|
+
const query = JSON.stringify([
|
|
136
|
+
input.prefix ?? "",
|
|
137
|
+
input.delimiter ?? null,
|
|
138
|
+
input.limit ?? null
|
|
139
|
+
]);
|
|
140
|
+
const token = yield* decodeCursor("vercel", input.cursor, `vercel:${connection.config.access}:${connection.config.storeId}`, query, "list");
|
|
141
|
+
if (input.delimiter && input.delimiter !== "/") return yield* storageError("list", "vercel", {
|
|
142
|
+
_tag: "Unsupported",
|
|
143
|
+
capability: "delimiter"
|
|
144
|
+
});
|
|
145
|
+
const result = yield* call(connection, "list", false, (options) => Blob.list({
|
|
146
|
+
...options,
|
|
147
|
+
prefix: input.prefix ?? "",
|
|
148
|
+
limit: Math.min(input.limit ?? 1e3, 1e3),
|
|
149
|
+
...token ? { cursor: token } : {},
|
|
150
|
+
mode: input.delimiter ? "folded" : "expanded"
|
|
151
|
+
}));
|
|
152
|
+
if (result.hasMore && !result.cursor) return yield* storageError("list", "vercel", { _tag: "ProviderFailure" });
|
|
153
|
+
return {
|
|
154
|
+
entries: [...yield* Effect.forEach(result.blobs, (blob) => metadata(connection, blob, "list").pipe(Effect.map((value) => ({
|
|
155
|
+
_tag: "Object",
|
|
156
|
+
metadata: value
|
|
157
|
+
})))), ..."folders" in result && Array.isArray(result.folders) ? result.folders.map((prefix) => ({
|
|
158
|
+
_tag: "CommonPrefix",
|
|
159
|
+
prefix
|
|
160
|
+
})) : []],
|
|
161
|
+
...result.hasMore ? { cursor: encodeCursor(`vercel:${connection.config.access}:${connection.config.storeId}`, query, result.cursor ?? "") } : {}
|
|
162
|
+
};
|
|
163
|
+
})
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export { get, primitives, put };
|
|
168
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","names":[],"sources":["../../../src/providers/vercel/primitives.ts"],"sourcesContent":["import { Effect, Stream } from \"effect\";\nimport type { Scope } from \"effect\";\n\nimport * as Blob from \"@vercel/blob\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport type { GetRequest, GetResult, PutRequest } from \"../../core/requests.js\";\nimport { Storage } from \"../../core/storage.js\";\nimport { decodeCursor, encodeCursor } from \"../../internal/listing-cursor.js\";\nimport { readCondition } from \"../../internal/read-condition.js\";\nimport { webUploadBody } from \"../../internal/web-upload-body.js\";\nimport type { VercelConnection } from \"./config.js\";\nimport { metadata, providerError, validateKey, writeOptions } from \"./mapping.js\";\nimport { call } from \"./transport.js\";\n\nexport const get = Effect.fnUntraced(function* (\n connection: VercelConnection,\n input: GetRequest,\n): Effect.fn.Return<GetResult, ReturnType<typeof storageError>, Scope.Scope> {\n const key = \"ref\" in input ? input.ref.key : input.key;\n yield* validateKey(key, \"get\");\n const controller = yield* Effect.acquireRelease(\n Effect.sync(() => new AbortController()),\n (owned) => Effect.sync(() => owned.abort()),\n );\n const range = input.range;\n const response = yield* call(connection, \"get\", false, (options) =>\n Blob.get(\n `${connection.config.apiOrigin ?? `https://${connection.config.storeId}.${connection.config.access}.blob.vercel-storage.com`}/${key.split(\"/\").map(encodeURIComponent).join(\"/\")}`,\n {\n ...options,\n abortSignal: AbortSignal.any([options.abortSignal, controller.signal]),\n access: connection.config.access,\n useCache: false,\n ...(input.condition?._tag === \"IfNoneMatch\" ? { ifNoneMatch: input.condition.etag } : {}),\n headers: {\n // CDN compression changes response lengths and range validators for the stored bytes.\n \"accept-encoding\": \"identity\",\n ...(input.condition?._tag === \"IfMatch\" ? { \"if-match\": input.condition.etag } : {}),\n ...(range\n ? {\n range:\n range._tag === \"Suffix\"\n ? `bytes=-${range.length}`\n : `bytes=${range.start}-${range._tag === \"Bounded\" ? range.end : \"\"}`,\n }\n : {}),\n },\n },\n ),\n );\n if (!response) return yield* storageError(\"get\", \"vercel\", { _tag: \"NotFound\" });\n if (response.stream)\n yield* Effect.addFinalizer(() =>\n Effect.promise(() => response.stream?.cancel().catch(() => undefined) ?? Promise.resolve()),\n );\n if (\n response.headers.get(\"content-encoding\") &&\n response.headers.get(\"content-encoding\") !== \"identity\"\n )\n return yield* storageError(\"get\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"encoded-representation\",\n });\n if (response.statusCode === 304 && input.condition?._tag !== \"IfNoneMatch\")\n return yield* storageError(\"get\", \"vercel\", { _tag: \"ProviderFailure\" });\n let observed = yield* metadata(connection, { ...response.blob, pathname: key }, \"get\", key);\n const outcome = readCondition(input.condition, observed.etag);\n if (outcome === \"failed\")\n return yield* storageError(\"get\", \"vercel\", { _tag: \"PreconditionFailed\" });\n if (response.statusCode === 304 || outcome === \"not-modified\")\n return { _tag: \"NotModified\", metadata: observed };\n let resolved: { start: number; end: number; totalSize: number } | undefined;\n if (range) {\n const match = /^bytes (\\d+)-(\\d+)\\/(\\d+)$/u.exec(response.headers.get(\"content-range\") ?? \"\");\n if (!match)\n return yield* storageError(\"get\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"range-response\",\n });\n resolved = { start: Number(match[1]), end: Number(match[2]), totalSize: Number(match[3]) };\n const start =\n range._tag === \"Suffix\" ? Math.max(0, resolved.totalSize - range.length) : range.start;\n const end =\n range._tag === \"Bounded\"\n ? Math.min(range.end, resolved.totalSize - 1)\n : resolved.totalSize - 1;\n if (\n resolved.start !== start ||\n resolved.end !== end ||\n !Object.values(resolved).every(Number.isSafeInteger)\n )\n return yield* storageError(\"get\", \"vercel\", { _tag: \"ProviderFailure\" });\n observed = { ...observed, size: resolved.totalSize };\n }\n return {\n _tag: \"Object\",\n metadata: observed,\n contentLength: resolved ? resolved.end - resolved.start + 1 : observed.size,\n ...(resolved ? { range: resolved } : {}),\n body: Stream.fromReadableStream({\n evaluate: () => response.stream,\n onError: () => providerError(\"get\", false, {}),\n }),\n };\n});\n\nexport const put = Effect.fnUntraced(function* <E, R>(\n connection: VercelConnection,\n input: PutRequest<E, R>,\n) {\n yield* validateKey(input.key, \"put\");\n const settings = yield* writeOptions(input, \"put\");\n return yield* webUploadBody(\n \"vercel\",\n { ...input, maxBytes: Math.min(input.maxBytes ?? Infinity, connection.config.maxObjectBytes) },\n connection.config.maxUnknownLengthBytes,\n (body, length) =>\n call(connection, \"put\", true, (options) =>\n Blob.put(\n input.key,\n body instanceof Uint8Array\n ? new ReadableStream({\n start(controller) {\n controller.enqueue(body);\n controller.close();\n },\n })\n : body,\n {\n ...options,\n ...settings,\n access: connection.config.access,\n multipart: false,\n allowOverwrite: input.condition?._tag !== \"CreateOnly\",\n ...(input.condition?._tag === \"IfMatch\" ? { ifMatch: input.condition.etag } : {}),\n },\n ),\n ).pipe(\n Effect.flatMap((result) => metadata(connection, result, \"put\", input.key, true)),\n Effect.map((result) => ({ ...result, size: length })),\n ),\n );\n});\n\nexport function primitives(connection: VercelConnection) {\n return Storage.make({\n provider: \"vercel\",\n storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,\n capabilities: {\n putConditions: [\"create-only\", \"if-match\"],\n getConditions: [\"if-match\", \"if-none-match\"],\n deleteConditions: [\"if-match\"],\n ranges: [\"bounded\", \"from\", \"suffix\"],\n versionedReads: \"none\",\n list: { maxPageSize: 1000, delimiter: true, cursorPersistence: \"provider\", snapshot: false },\n },\n put: (input) => put(connection, input),\n get: (input) => get(connection, input),\n head: Effect.fnUntraced(function* (input) {\n const key = \"ref\" in input ? input.ref.key : input.key;\n yield* validateKey(key, \"head\");\n return yield* call(connection, \"head\", false, (options) => Blob.head(key, options)).pipe(\n Effect.flatMap((result) => metadata(connection, result, \"head\", key)),\n );\n }),\n delete: Effect.fnUntraced(function* (input) {\n const key = \"ref\" in input ? input.ref.key : input.key;\n yield* validateKey(key, \"delete\");\n yield* call(connection, \"delete\", true, (options) =>\n Blob.del(key, {\n ...options,\n ...(input.condition ? { ifMatch: input.condition.etag } : {}),\n }),\n );\n }),\n listPage: Effect.fnUntraced(function* (input = {}) {\n const query = JSON.stringify([\n input.prefix ?? \"\",\n input.delimiter ?? null,\n input.limit ?? null,\n ]);\n const token = yield* decodeCursor(\n \"vercel\",\n input.cursor,\n `vercel:${connection.config.access}:${connection.config.storeId}`,\n query,\n \"list\",\n );\n if (input.delimiter && input.delimiter !== \"/\")\n return yield* storageError(\"list\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"delimiter\",\n });\n const result = yield* call(connection, \"list\", false, (options) =>\n Blob.list({\n ...options,\n prefix: input.prefix ?? \"\",\n limit: Math.min(input.limit ?? 1000, 1000),\n ...(token ? { cursor: token } : {}),\n mode: input.delimiter ? \"folded\" : \"expanded\",\n }),\n );\n if (result.hasMore && !result.cursor)\n return yield* storageError(\"list\", \"vercel\", { _tag: \"ProviderFailure\" });\n const entries = yield* Effect.forEach(result.blobs, (blob) =>\n metadata(connection, blob, \"list\").pipe(\n Effect.map((value) => ({ _tag: \"Object\" as const, metadata: value })),\n ),\n );\n return {\n entries: [\n ...entries,\n ...(\"folders\" in result && Array.isArray(result.folders)\n ? result.folders.map((prefix: string) => ({ _tag: \"CommonPrefix\" as const, prefix }))\n : []),\n ],\n ...(result.hasMore\n ? {\n cursor: encodeCursor(\n `vercel:${connection.config.access}:${connection.config.storeId}`,\n query,\n result.cursor ?? \"\",\n ),\n }\n : {}),\n };\n }),\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { storageError } from "../../core/errors.js";
|
|
2
|
+
import { retryPolicy } from "./config.js";
|
|
3
|
+
import { providerError } from "./mapping.js";
|
|
4
|
+
import { Effect, Redacted } from "effect";
|
|
5
|
+
|
|
6
|
+
// src/providers/vercel/transport.ts
|
|
7
|
+
const call = Effect.fnUntraced(function* (connection, operation, mutation, execute) {
|
|
8
|
+
yield* retryPolicy();
|
|
9
|
+
const currentEndpoint = process.env.VERCEL_BLOB_API_URL ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;
|
|
10
|
+
if ((currentEndpoint ? URL.parse(currentEndpoint)?.origin : void 0) !== connection.config.apiOrigin) return yield* storageError(operation, "vercel", {
|
|
11
|
+
_tag: "InvalidConfiguration",
|
|
12
|
+
field: "changed-sdk-endpoint"
|
|
13
|
+
}, "not-started");
|
|
14
|
+
const credential = connection.config.credential;
|
|
15
|
+
const token = yield* Effect.isEffect(credential.token) ? credential.token : Effect.succeed(credential.token);
|
|
16
|
+
if (!Redacted.isRedacted(token) || !Redacted.value(token)) return yield* storageError(operation, "vercel", { _tag: "AccessDenied" }, "not-started");
|
|
17
|
+
if (credential.mode === "token" && Redacted.value(token).split("_")[3] !== connection.config.storeId) return yield* storageError(operation, "vercel", {
|
|
18
|
+
_tag: "InvalidConfiguration",
|
|
19
|
+
field: "credential.storeId"
|
|
20
|
+
}, "not-started");
|
|
21
|
+
return yield* Effect.tryPromise({
|
|
22
|
+
try: (signal) => execute({
|
|
23
|
+
[credential.mode === "token" ? "token" : "oidcToken"]: Redacted.value(token),
|
|
24
|
+
storeId: connection.config.storeId,
|
|
25
|
+
abortSignal: signal
|
|
26
|
+
}),
|
|
27
|
+
catch: (error) => providerError(operation, mutation, error)
|
|
28
|
+
}).pipe(Effect.timeout(connection.config.requestTimeoutMillis), Effect.mapError((error) => error._tag === "StorageError" ? error : providerError(operation, mutation, error)));
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export { call };
|
|
32
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","names":[],"sources":["../../../src/providers/vercel/transport.ts"],"sourcesContent":["import { Effect, Redacted } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport type { VercelConnection } from \"./config.js\";\nimport { retryPolicy } from \"./config.js\";\nimport { providerError } from \"./mapping.js\";\n\nexport const call = Effect.fnUntraced(function* <A>(\n connection: VercelConnection,\n operation: string,\n mutation: boolean,\n execute: (options: {\n token?: string;\n oidcToken?: string;\n storeId: string;\n abortSignal: AbortSignal;\n }) => Promise<A>,\n) {\n yield* retryPolicy();\n const currentEndpoint =\n process.env.VERCEL_BLOB_API_URL ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;\n if (\n (currentEndpoint ? URL.parse(currentEndpoint)?.origin : undefined) !==\n connection.config.apiOrigin\n )\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"InvalidConfiguration\", field: \"changed-sdk-endpoint\" },\n \"not-started\",\n );\n const credential = connection.config.credential;\n const token = yield* Effect.isEffect(credential.token)\n ? credential.token\n : Effect.succeed(credential.token);\n if (!Redacted.isRedacted(token) || !Redacted.value(token))\n return yield* storageError(operation, \"vercel\", { _tag: \"AccessDenied\" }, \"not-started\");\n if (\n credential.mode === \"token\" &&\n Redacted.value(token).split(\"_\")[3] !== connection.config.storeId\n )\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"InvalidConfiguration\", field: \"credential.storeId\" },\n \"not-started\",\n );\n return yield* Effect.tryPromise({\n try: (signal) =>\n execute({\n [credential.mode === \"token\" ? \"token\" : \"oidcToken\"]: Redacted.value(token),\n storeId: connection.config.storeId,\n abortSignal: signal,\n }),\n catch: (error) => providerError(operation, mutation, error),\n }).pipe(\n Effect.timeout(connection.config.requestTimeoutMillis),\n Effect.mapError((error) =>\n error._tag === \"StorageError\" ? error : providerError(operation, mutation, error),\n ),\n );\n});\n"],"mappings":";;;;;;AAOA,MAAa,OAAO,OAAO,WAAW,WACpC,YACA,WACA,UACA,SAMA;CACA,OAAO,YAAY;CACnB,MAAM,kBACJ,QAAQ,IAAI,uBAAuB,QAAQ,IAAI;CACjD,KACG,kBAAkB,IAAI,MAAM,eAAe,CAAC,EAAE,SAAS,YACxD,WAAW,OAAO,WAElB,OAAO,OAAO,aACZ,WACA,UACA;EAAE,MAAM;EAAwB,OAAO;CAAuB,GAC9D,aACF;CACF,MAAM,aAAa,WAAW,OAAO;CACrC,MAAM,QAAQ,OAAO,OAAO,SAAS,WAAW,KAAK,IACjD,WAAW,QACX,OAAO,QAAQ,WAAW,KAAK;CACnC,IAAI,CAAC,SAAS,WAAW,KAAK,KAAK,CAAC,SAAS,MAAM,KAAK,GACtD,OAAO,OAAO,aAAa,WAAW,UAAU,EAAE,MAAM,eAAe,GAAG,aAAa;CACzF,IACE,WAAW,SAAS,WACpB,SAAS,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,WAAW,OAAO,SAE1D,OAAO,OAAO,aACZ,WACA,UACA;EAAE,MAAM;EAAwB,OAAO;CAAqB,GAC5D,aACF;CACF,OAAO,OAAO,OAAO,WAAW;EAC9B,MAAM,WACJ,QAAQ;IACL,WAAW,SAAS,UAAU,UAAU,cAAc,SAAS,MAAM,KAAK;GAC3E,SAAS,WAAW,OAAO;GAC3B,aAAa;EACf,CAAC;EACH,QAAQ,UAAU,cAAc,WAAW,UAAU,KAAK;CAC5D,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,WAAW,OAAO,oBAAoB,GACrD,OAAO,UAAU,UACf,MAAM,SAAS,iBAAiB,QAAQ,cAAc,WAAW,UAAU,KAAK,CAClF,CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { StorageError } from "../../core/errors.js";
|
|
2
|
+
import "../../index.js";
|
|
3
|
+
import { S3Storage, S3StorageService } from "../../s3.js";
|
|
4
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
5
|
+
declare const Policy: Schema.Struct<{
|
|
6
|
+
readonly status: Schema.Literals<readonly ["enabled", "disabled"]>;
|
|
7
|
+
readonly retentionDays: Schema.Natural;
|
|
8
|
+
readonly conditionalHold: Schema.Boolean;
|
|
9
|
+
readonly deleteAfterRetention: Schema.Boolean;
|
|
10
|
+
readonly lockTime: Schema.String;
|
|
11
|
+
}>;
|
|
12
|
+
declare const make: (storage: S3StorageService) => {
|
|
13
|
+
inspect: () => Effect.Effect<{
|
|
14
|
+
readonly Status: "disabled" | "enabled";
|
|
15
|
+
readonly LockTime?: string | undefined;
|
|
16
|
+
readonly IsLocked?: "false" | "true" | undefined;
|
|
17
|
+
readonly RetentionDays: string;
|
|
18
|
+
readonly ConditionalHold?: "false" | "true" | undefined;
|
|
19
|
+
readonly DeleteAfterRetention?: "false" | "true" | undefined;
|
|
20
|
+
}, StorageError, never>;
|
|
21
|
+
set: (input: {
|
|
22
|
+
readonly policy: typeof Policy.Type;
|
|
23
|
+
readonly intent: "change-legacy-compliance";
|
|
24
|
+
readonly lockIntent?: "irreversibly-lock-compliance";
|
|
25
|
+
}) => Effect.Effect<{
|
|
26
|
+
_tag: "Accepted";
|
|
27
|
+
}, StorageError, never>;
|
|
28
|
+
};
|
|
29
|
+
declare const WasabiCompliance_base: Context.ServiceClass<WasabiCompliance, "@effect-kit/storage/wasabi/WasabiCompliance", {
|
|
30
|
+
inspect: () => Effect.Effect<{
|
|
31
|
+
readonly Status: "disabled" | "enabled";
|
|
32
|
+
readonly LockTime?: string | undefined;
|
|
33
|
+
readonly IsLocked?: "false" | "true" | undefined;
|
|
34
|
+
readonly RetentionDays: string;
|
|
35
|
+
readonly ConditionalHold?: "false" | "true" | undefined;
|
|
36
|
+
readonly DeleteAfterRetention?: "false" | "true" | undefined;
|
|
37
|
+
}, StorageError, never>;
|
|
38
|
+
set: (input: {
|
|
39
|
+
readonly policy: typeof Policy.Type;
|
|
40
|
+
readonly intent: "change-legacy-compliance";
|
|
41
|
+
readonly lockIntent?: "irreversibly-lock-compliance";
|
|
42
|
+
}) => Effect.Effect<{
|
|
43
|
+
_tag: "Accepted";
|
|
44
|
+
}, StorageError, never>;
|
|
45
|
+
}>;
|
|
46
|
+
/** Wasabi legacy bucket Compliance is separate from S3 Object Lock. */
|
|
47
|
+
export declare class WasabiCompliance extends WasabiCompliance_base {
|
|
48
|
+
static readonly make: typeof make;
|
|
49
|
+
static readonly layer: Layer.Layer<WasabiCompliance, never, S3Storage>;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=compliance.d.ts.map
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { storageError } from "../../core/errors.js";
|
|
2
|
+
import { decodeRequest } from "../../internal/request-validation.js";
|
|
3
|
+
import { request } from "../s3/transport.js";
|
|
4
|
+
import { S3Storage } from "../../s3.js";
|
|
5
|
+
import { decodeResponse } from "../../internal/provider-response.js";
|
|
6
|
+
import { extendRequest } from "../s3/request-extension.js";
|
|
7
|
+
import { readXml } from "./xml.js";
|
|
8
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
9
|
+
import { GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
|
|
10
|
+
import { XMLBuilder } from "fast-xml-parser";
|
|
11
|
+
|
|
12
|
+
// src/providers/wasabi/compliance.ts
|
|
13
|
+
const Policy = Schema.Struct({
|
|
14
|
+
status: Schema.Literals(["enabled", "disabled"]),
|
|
15
|
+
retentionDays: Schema.Natural,
|
|
16
|
+
conditionalHold: Schema.Boolean,
|
|
17
|
+
deleteAfterRetention: Schema.Boolean,
|
|
18
|
+
lockTime: Schema.String.check(Schema.makeFilter((value) => value === "off" || value === "now" || Number.isFinite(Date.parse(value))))
|
|
19
|
+
});
|
|
20
|
+
const make = (storage) => {
|
|
21
|
+
const guard = () => storage.provider === "wasabi" ? Effect.void : Effect.fail(storageError("compliance", "wasabi", {
|
|
22
|
+
_tag: "InvalidConfiguration",
|
|
23
|
+
field: "provider"
|
|
24
|
+
}));
|
|
25
|
+
return {
|
|
26
|
+
inspect: Effect.fnUntraced(function* () {
|
|
27
|
+
yield* guard();
|
|
28
|
+
return yield* Effect.scoped(Effect.gen(function* () {
|
|
29
|
+
const command = new GetObjectCommand({
|
|
30
|
+
Bucket: storage.config.bucket,
|
|
31
|
+
Key: "compliance"
|
|
32
|
+
});
|
|
33
|
+
extendRequest(command, {
|
|
34
|
+
bucketRoot: true,
|
|
35
|
+
query: { compliance: "" }
|
|
36
|
+
});
|
|
37
|
+
const response = yield* request(storage, "getLegacyCompliance", false, (signal) => storage.client.send(command, { abortSignal: signal }));
|
|
38
|
+
const receipt = yield* readXml(response.Body, "getLegacyCompliance");
|
|
39
|
+
return yield* decodeResponse(Schema.Struct({ BucketComplianceConfiguration: Schema.Struct({
|
|
40
|
+
Status: Schema.Literals(["enabled", "disabled"]),
|
|
41
|
+
LockTime: Schema.optional(Schema.String),
|
|
42
|
+
IsLocked: Schema.optional(Schema.Literals(["true", "false"])),
|
|
43
|
+
RetentionDays: Schema.String,
|
|
44
|
+
ConditionalHold: Schema.optional(Schema.Literals(["true", "false"])),
|
|
45
|
+
DeleteAfterRetention: Schema.optional(Schema.Literals(["true", "false"]))
|
|
46
|
+
}) }), receipt.decoded, "getLegacyCompliance", "wasabi").pipe(Effect.map((value) => value.BucketComplianceConfiguration));
|
|
47
|
+
}));
|
|
48
|
+
}),
|
|
49
|
+
set: Effect.fnUntraced(function* (input) {
|
|
50
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
51
|
+
policy: Policy,
|
|
52
|
+
intent: Schema.Literal("change-legacy-compliance"),
|
|
53
|
+
lockIntent: Schema.optional(Schema.Literal("irreversibly-lock-compliance"))
|
|
54
|
+
}), input, "setLegacyCompliance", "wasabi", true);
|
|
55
|
+
yield* guard();
|
|
56
|
+
if (value.policy.lockTime !== "off" && !value.lockIntent) return yield* storageError("setLegacyCompliance", "wasabi", {
|
|
57
|
+
_tag: "InvalidInput",
|
|
58
|
+
field: "lockIntent"
|
|
59
|
+
}, "not-started");
|
|
60
|
+
const body = new XMLBuilder({}).build({ BucketComplianceConfiguration: {
|
|
61
|
+
Status: value.policy.status,
|
|
62
|
+
LockTime: value.policy.lockTime,
|
|
63
|
+
RetentionDays: value.policy.retentionDays,
|
|
64
|
+
ConditionalHold: value.policy.conditionalHold,
|
|
65
|
+
DeleteAfterRetention: value.policy.deleteAfterRetention
|
|
66
|
+
} });
|
|
67
|
+
const command = new PutObjectCommand({
|
|
68
|
+
Bucket: storage.config.bucket,
|
|
69
|
+
Key: "compliance",
|
|
70
|
+
Body: body,
|
|
71
|
+
ContentType: "application/xml"
|
|
72
|
+
});
|
|
73
|
+
extendRequest(command, {
|
|
74
|
+
bucketRoot: true,
|
|
75
|
+
query: { compliance: "" }
|
|
76
|
+
});
|
|
77
|
+
yield* request(storage, "setLegacyCompliance", true, (signal) => storage.client.send(command, { abortSignal: signal }));
|
|
78
|
+
return { _tag: "Accepted" };
|
|
79
|
+
})
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
/** Wasabi legacy bucket Compliance is separate from S3 Object Lock. */
|
|
83
|
+
var WasabiCompliance = class WasabiCompliance extends Context.Service()("@effect-kit/storage/wasabi/WasabiCompliance") {
|
|
84
|
+
static make = make;
|
|
85
|
+
static layer = Layer.effect(WasabiCompliance, Effect.map(S3Storage, make));
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export { WasabiCompliance };
|
|
89
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","names":[],"sources":["../../../src/providers/wasabi/compliance.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { GetObjectCommand, PutObjectCommand } from \"@aws-sdk/client-s3\";\nimport { XMLBuilder } from \"fast-xml-parser\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeResponse } from \"../../internal/provider-response.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { S3Storage } from \"../s3/index.js\";\nimport type { S3StorageService } from \"../s3/index.js\";\nimport { extendRequest } from \"../s3/request-extension.js\";\nimport { request } from \"../s3/transport.js\";\nimport { readXml } from \"./xml.js\";\n\nconst Policy = Schema.Struct({\n status: Schema.Literals([\"enabled\", \"disabled\"]),\n retentionDays: Schema.Natural,\n conditionalHold: Schema.Boolean,\n deleteAfterRetention: Schema.Boolean,\n lockTime: Schema.String.check(\n Schema.makeFilter(\n (value) => value === \"off\" || value === \"now\" || Number.isFinite(Date.parse(value)),\n ),\n ),\n});\nconst make = (storage: S3StorageService) => {\n const guard = () =>\n storage.provider === \"wasabi\"\n ? Effect.void\n : Effect.fail(\n storageError(\"compliance\", \"wasabi\", { _tag: \"InvalidConfiguration\", field: \"provider\" }),\n );\n return {\n inspect: Effect.fnUntraced(function* () {\n yield* guard();\n return yield* Effect.scoped(\n Effect.gen(function* () {\n const command = new GetObjectCommand({\n Bucket: storage.config.bucket,\n Key: \"compliance\",\n });\n extendRequest(command, { bucketRoot: true, query: { compliance: \"\" } });\n const response = yield* request(storage, \"getLegacyCompliance\", false, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n const receipt = yield* readXml(response.Body, \"getLegacyCompliance\");\n return yield* decodeResponse(\n Schema.Struct({\n BucketComplianceConfiguration: Schema.Struct({\n Status: Schema.Literals([\"enabled\", \"disabled\"]),\n LockTime: Schema.optional(Schema.String),\n IsLocked: Schema.optional(Schema.Literals([\"true\", \"false\"])),\n RetentionDays: Schema.String,\n ConditionalHold: Schema.optional(Schema.Literals([\"true\", \"false\"])),\n DeleteAfterRetention: Schema.optional(Schema.Literals([\"true\", \"false\"])),\n }),\n }),\n receipt.decoded,\n \"getLegacyCompliance\",\n \"wasabi\",\n ).pipe(Effect.map((value) => value.BucketComplianceConfiguration));\n }),\n );\n }),\n set: Effect.fnUntraced(function* (input: {\n readonly policy: typeof Policy.Type;\n readonly intent: \"change-legacy-compliance\";\n readonly lockIntent?: \"irreversibly-lock-compliance\";\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n policy: Policy,\n intent: Schema.Literal(\"change-legacy-compliance\"),\n lockIntent: Schema.optional(Schema.Literal(\"irreversibly-lock-compliance\")),\n }),\n input,\n \"setLegacyCompliance\",\n \"wasabi\",\n true,\n );\n yield* guard();\n if (value.policy.lockTime !== \"off\" && !value.lockIntent)\n return yield* storageError(\n \"setLegacyCompliance\",\n \"wasabi\",\n { _tag: \"InvalidInput\", field: \"lockIntent\" },\n \"not-started\",\n );\n const body = new XMLBuilder({}).build({\n BucketComplianceConfiguration: {\n Status: value.policy.status,\n LockTime: value.policy.lockTime,\n RetentionDays: value.policy.retentionDays,\n ConditionalHold: value.policy.conditionalHold,\n DeleteAfterRetention: value.policy.deleteAfterRetention,\n },\n }) as string;\n const command = new PutObjectCommand({\n Bucket: storage.config.bucket,\n Key: \"compliance\",\n Body: body,\n ContentType: \"application/xml\",\n });\n extendRequest(command, { bucketRoot: true, query: { compliance: \"\" } });\n yield* request(storage, \"setLegacyCompliance\", true, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n return { _tag: \"Accepted\" as const };\n }),\n };\n};\n/** Wasabi legacy bucket Compliance is separate from S3 Object Lock. */\nexport class WasabiCompliance extends Context.Service<WasabiCompliance, ReturnType<typeof make>>()(\n \"@effect-kit/storage/wasabi/WasabiCompliance\",\n) {\n static readonly make = make;\n static readonly layer = Layer.effect(WasabiCompliance, Effect.map(S3Storage, make));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { storageError } from "../../core/errors.js";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { XMLParser, XMLValidator } from "fast-xml-parser";
|
|
4
|
+
|
|
5
|
+
// src/providers/wasabi/xml.ts
|
|
6
|
+
const parser = new XMLParser({
|
|
7
|
+
ignoreAttributes: false,
|
|
8
|
+
parseTagValue: false,
|
|
9
|
+
processEntities: true
|
|
10
|
+
});
|
|
11
|
+
const readXml = Effect.fnUntraced(function* (body, operation) {
|
|
12
|
+
if (!body || !(Symbol.asyncIterator in body)) return yield* storageError(operation, "wasabi", {
|
|
13
|
+
_tag: "ProviderFailure",
|
|
14
|
+
code: "MissingXmlReceipt"
|
|
15
|
+
}, "unknown");
|
|
16
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => {
|
|
17
|
+
if ("destroy" in body && typeof body.destroy === "function") body.destroy();
|
|
18
|
+
}));
|
|
19
|
+
return yield* Effect.tryPromise({
|
|
20
|
+
try: async () => {
|
|
21
|
+
const chunks = [];
|
|
22
|
+
let size = 0;
|
|
23
|
+
for await (const chunk of body) {
|
|
24
|
+
size += chunk.byteLength;
|
|
25
|
+
if (size > 4 * 1024 ** 2) throw new Error("Receipt exceeds limit");
|
|
26
|
+
chunks.push(chunk);
|
|
27
|
+
}
|
|
28
|
+
const bytes = new Uint8Array(size);
|
|
29
|
+
let offset = 0;
|
|
30
|
+
for (const chunk of chunks) {
|
|
31
|
+
bytes.set(chunk, offset);
|
|
32
|
+
offset += chunk.byteLength;
|
|
33
|
+
}
|
|
34
|
+
const xml = new TextDecoder().decode(bytes);
|
|
35
|
+
if (/<!DOCTYPE|<!ENTITY/iu.test(xml) || XMLValidator.validate(xml) !== true) throw new Error("Invalid receipt");
|
|
36
|
+
return {
|
|
37
|
+
xml,
|
|
38
|
+
decoded: parser.parse(xml)
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
catch: () => storageError(operation, "wasabi", {
|
|
42
|
+
_tag: "ProviderFailure",
|
|
43
|
+
code: "InvalidXmlReceipt"
|
|
44
|
+
}, "unknown")
|
|
45
|
+
}).pipe(Effect.timeoutOrElse({
|
|
46
|
+
duration: "30 seconds",
|
|
47
|
+
orElse: () => Effect.fail(storageError(operation, "wasabi", {
|
|
48
|
+
_tag: "TransportFailure",
|
|
49
|
+
code: "ReceiptDeadline"
|
|
50
|
+
}, "unknown"))
|
|
51
|
+
}));
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export { readXml };
|
|
55
|
+
//# sourceMappingURL=xml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.js","names":[],"sources":["../../../src/providers/wasabi/xml.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport type { GetObjectCommandOutput } from \"@aws-sdk/client-s3\";\nimport { XMLParser, XMLValidator } from \"fast-xml-parser\";\n\nimport { storageError } from \"../../core/errors.js\";\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n parseTagValue: false,\n processEntities: true,\n});\nexport const readXml = Effect.fnUntraced(function* (\n body: GetObjectCommandOutput[\"Body\"],\n operation: string,\n) {\n if (!body || !(Symbol.asyncIterator in body))\n return yield* storageError(\n operation,\n \"wasabi\",\n { _tag: \"ProviderFailure\", code: \"MissingXmlReceipt\" },\n \"unknown\",\n );\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n if (\"destroy\" in body && typeof body.destroy === \"function\") body.destroy();\n }),\n );\n return yield* Effect.tryPromise({\n try: async () => {\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of body) {\n size += chunk.byteLength;\n if (size > 4 * 1024 ** 2) throw new Error(\"Receipt exceeds limit\");\n chunks.push(chunk);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n const xml = new TextDecoder().decode(bytes);\n if (/<!DOCTYPE|<!ENTITY/iu.test(xml) || XMLValidator.validate(xml) !== true)\n throw new Error(\"Invalid receipt\");\n return { xml, decoded: parser.parse(xml) as unknown };\n },\n catch: () =>\n storageError(\n operation,\n \"wasabi\",\n { _tag: \"ProviderFailure\", code: \"InvalidXmlReceipt\" },\n \"unknown\",\n ),\n }).pipe(\n Effect.timeoutOrElse({\n duration: \"30 seconds\",\n orElse: () =>\n Effect.fail(\n storageError(\n operation,\n \"wasabi\",\n { _tag: \"TransportFailure\", code: \"ReceiptDeadline\" },\n \"unknown\",\n ),\n ),\n }),\n );\n});\n"],"mappings":";;;;;AAOA,MAAM,SAAS,IAAI,UAAU;CAC3B,kBAAkB;CAClB,eAAe;CACf,iBAAiB;AACnB,CAAC;AACD,MAAa,UAAU,OAAO,WAAW,WACvC,MACA,WACA;CACA,IAAI,CAAC,QAAQ,EAAE,OAAO,iBAAiB,OACrC,OAAO,OAAO,aACZ,WACA,UACA;EAAE,MAAM;EAAmB,MAAM;CAAoB,GACrD,SACF;CACF,OAAO,OAAO,mBACZ,OAAO,WAAW;EAChB,IAAI,aAAa,QAAQ,OAAO,KAAK,YAAY,YAAY,KAAK,QAAQ;CAC5E,CAAC,CACH;CACA,OAAO,OAAO,OAAO,WAAW;EAC9B,KAAK,YAAY;GACf,MAAM,SAAuB,CAAC;GAC9B,IAAI,OAAO;GACX,WAAW,MAAM,SAAS,MAAM;IAC9B,QAAQ,MAAM;IACd,IAAI,OAAO,IAAI,QAAQ,GAAG,MAAM,IAAI,MAAM,uBAAuB;IACjE,OAAO,KAAK,KAAK;GACnB;GACA,MAAM,QAAQ,IAAI,WAAW,IAAI;GACjC,IAAI,SAAS;GACb,KAAK,MAAM,SAAS,QAAQ;IAC1B,MAAM,IAAI,OAAO,MAAM;IACvB,UAAU,MAAM;GAClB;GACA,MAAM,MAAM,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK;GAC1C,IAAI,uBAAuB,KAAK,GAAG,KAAK,aAAa,SAAS,GAAG,MAAM,MACrE,MAAM,IAAI,MAAM,iBAAiB;GACnC,OAAO;IAAE;IAAK,SAAS,OAAO,MAAM,GAAG;GAAa;EACtD;EACA,aACE,aACE,WACA,UACA;GAAE,MAAM;GAAmB,MAAM;EAAoB,GACrD,SACF;CACJ,CAAC,CAAC,CAAC,KACD,OAAO,cAAc;EACnB,UAAU;EACV,cACE,OAAO,KACL,aACE,WACA,UACA;GAAE,MAAM;GAAoB,MAAM;EAAkB,GACpD,SACF,CACF;CACJ,CAAC,CACH;AACF,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { StorageError } from "../core/errors.js";
|
|
2
|
+
import "../index.js";
|
|
3
|
+
import { Context, Effect, Layer, Redacted, Schema } from "effect";
|
|
4
|
+
import { HttpClient } from "effect/http";
|
|
5
|
+
declare const Rule: Schema.Struct<{
|
|
6
|
+
readonly id: Schema.NonEmptyString;
|
|
7
|
+
readonly enabled: Schema.Boolean;
|
|
8
|
+
readonly prefix: Schema.optional<Schema.String>;
|
|
9
|
+
readonly condition: Schema.Union<readonly [Schema.Struct<{
|
|
10
|
+
readonly type: Schema.Literal<"Age">;
|
|
11
|
+
readonly maxAgeSeconds: Schema.Natural;
|
|
12
|
+
}>, Schema.Struct<{
|
|
13
|
+
readonly type: Schema.Literal<"Date">;
|
|
14
|
+
readonly date: Schema.String;
|
|
15
|
+
}>, Schema.Struct<{
|
|
16
|
+
readonly type: Schema.Literal<"Indefinite">;
|
|
17
|
+
}>]>;
|
|
18
|
+
}>;
|
|
19
|
+
export interface R2AdminConfig {
|
|
20
|
+
readonly accountId: string;
|
|
21
|
+
readonly token: Redacted.Redacted<string>;
|
|
22
|
+
readonly endpoint?: string;
|
|
23
|
+
readonly jurisdiction?: "default" | "eu" | "fedramp";
|
|
24
|
+
}
|
|
25
|
+
declare const R2Administration_base: Context.ServiceClass<R2Administration, "@effect-kit/storage/r2/R2Administration", {
|
|
26
|
+
list: () => Effect.Effect<unknown, StorageError, never>;
|
|
27
|
+
head: (input: {
|
|
28
|
+
readonly bucket: string;
|
|
29
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
30
|
+
create: (input: {
|
|
31
|
+
readonly bucket: string;
|
|
32
|
+
readonly locationHint?: string;
|
|
33
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
34
|
+
deleteEmpty: (input: {
|
|
35
|
+
readonly bucket: string;
|
|
36
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
37
|
+
notifications: {
|
|
38
|
+
get: (input: {
|
|
39
|
+
readonly bucket: string;
|
|
40
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
41
|
+
createRules: (input: {
|
|
42
|
+
readonly bucket: string;
|
|
43
|
+
readonly queueId: string;
|
|
44
|
+
readonly rules: ReadonlyArray<{
|
|
45
|
+
readonly actions: ReadonlyArray<"PutObject" | "CopyObject" | "DeleteObject" | "CompleteMultipartUpload" | "LifecycleDeletion">;
|
|
46
|
+
readonly prefix?: string;
|
|
47
|
+
readonly suffix?: string;
|
|
48
|
+
readonly description?: string;
|
|
49
|
+
}>;
|
|
50
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
51
|
+
};
|
|
52
|
+
configuration: {
|
|
53
|
+
get: (input: {
|
|
54
|
+
readonly bucket: string;
|
|
55
|
+
readonly section: "cors" | "lifecycle" | "locks" | "domains/managed";
|
|
56
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
57
|
+
setCors: (input: {
|
|
58
|
+
readonly bucket: string;
|
|
59
|
+
readonly rules: ReadonlyArray<Record<string, unknown>>;
|
|
60
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
61
|
+
setLifecycle: (input: {
|
|
62
|
+
readonly bucket: string;
|
|
63
|
+
readonly rules: ReadonlyArray<Record<string, unknown>>;
|
|
64
|
+
readonly intent: "change-storage-protection";
|
|
65
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
66
|
+
setLocks: (input: {
|
|
67
|
+
readonly bucket: string;
|
|
68
|
+
readonly rules: ReadonlyArray<typeof Rule.Type>;
|
|
69
|
+
readonly intent: "change-bucket-locks";
|
|
70
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
71
|
+
};
|
|
72
|
+
}>;
|
|
73
|
+
export declare class R2Administration extends R2Administration_base {
|
|
74
|
+
static readonly make: (settings: R2AdminConfig) => Effect.Effect<{
|
|
75
|
+
list: () => Effect.Effect<unknown, StorageError, never>;
|
|
76
|
+
head: (input: {
|
|
77
|
+
readonly bucket: string;
|
|
78
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
79
|
+
create: (input: {
|
|
80
|
+
readonly bucket: string;
|
|
81
|
+
readonly locationHint?: string;
|
|
82
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
83
|
+
deleteEmpty: (input: {
|
|
84
|
+
readonly bucket: string;
|
|
85
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
86
|
+
notifications: {
|
|
87
|
+
get: (input: {
|
|
88
|
+
readonly bucket: string;
|
|
89
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
90
|
+
createRules: (input: {
|
|
91
|
+
readonly bucket: string;
|
|
92
|
+
readonly queueId: string;
|
|
93
|
+
readonly rules: ReadonlyArray<{
|
|
94
|
+
readonly actions: ReadonlyArray<"PutObject" | "CopyObject" | "DeleteObject" | "CompleteMultipartUpload" | "LifecycleDeletion">;
|
|
95
|
+
readonly prefix?: string;
|
|
96
|
+
readonly suffix?: string;
|
|
97
|
+
readonly description?: string;
|
|
98
|
+
}>;
|
|
99
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
100
|
+
};
|
|
101
|
+
configuration: {
|
|
102
|
+
get: (input: {
|
|
103
|
+
readonly bucket: string;
|
|
104
|
+
readonly section: "cors" | "lifecycle" | "locks" | "domains/managed";
|
|
105
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
106
|
+
setCors: (input: {
|
|
107
|
+
readonly bucket: string;
|
|
108
|
+
readonly rules: ReadonlyArray<Record<string, unknown>>;
|
|
109
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
110
|
+
setLifecycle: (input: {
|
|
111
|
+
readonly bucket: string;
|
|
112
|
+
readonly rules: ReadonlyArray<Record<string, unknown>>;
|
|
113
|
+
readonly intent: "change-storage-protection";
|
|
114
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
115
|
+
setLocks: (input: {
|
|
116
|
+
readonly bucket: string;
|
|
117
|
+
readonly rules: ReadonlyArray<typeof Rule.Type>;
|
|
118
|
+
readonly intent: "change-bucket-locks";
|
|
119
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
120
|
+
};
|
|
121
|
+
}, StorageError, HttpClient.HttpClient>;
|
|
122
|
+
static layerHttp(config: R2AdminConfig): Layer.Layer<R2Administration, StorageError, HttpClient.HttpClient>;
|
|
123
|
+
static layer(config: R2AdminConfig): Layer.Layer<R2Administration, StorageError, never>;
|
|
124
|
+
}
|
|
125
|
+
export {};
|
|
126
|
+
//# sourceMappingURL=admin.d.ts.map
|