@effect-kit/storage 0.0.0-stage → 0.0.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/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
package/dist/content.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { digestText } from "./runtime/portable-hash.js";
|
|
2
|
+
import { Storage } from "./core/storage.js";
|
|
3
|
+
import { replayable } from "./transfers/sources.js";
|
|
4
|
+
import { Transfers } from "./transfers.js";
|
|
5
|
+
import { makeRecordStore, workflowError } from "./workflows/store.js";
|
|
6
|
+
import { deletePinned, hashObject, headOptional, pin } from "./workflows/objects.js";
|
|
7
|
+
import { makeStaging } from "./composition/representation/staging.js";
|
|
8
|
+
import { CollectionPlan, ContentId, ContentRecord } from "./workflows/content/schema.js";
|
|
9
|
+
import { contentKey, makeReferences } from "./workflows/content/references.js";
|
|
10
|
+
import { makeCollection } from "./workflows/content/collection.js";
|
|
11
|
+
import { Clock, Context, Effect, Layer, Schema } from "effect";
|
|
12
|
+
import { SecureRandom } from "effect/crypto";
|
|
13
|
+
|
|
14
|
+
// src/workflows/content/index.ts
|
|
15
|
+
var ContentReferenceStore = class ContentReferenceStore extends Context.Service()("@effect-kit/storage/ContentReferenceStore") {
|
|
16
|
+
static make(options) {
|
|
17
|
+
return makeRecordStore(options, "content");
|
|
18
|
+
}
|
|
19
|
+
static layer(options) {
|
|
20
|
+
return Layer.effect(ContentReferenceStore, ContentReferenceStore.make(options));
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const marker = "effect-storage-content";
|
|
24
|
+
const make = Effect.fnUntraced(function* (options) {
|
|
25
|
+
const store = yield* ContentReferenceStore;
|
|
26
|
+
const storage = yield* Storage;
|
|
27
|
+
const random = yield* SecureRandom.SecureRandom;
|
|
28
|
+
const stage = yield* makeStaging;
|
|
29
|
+
const minimumRetention = options.minimumRetentionMillis ?? 864e5;
|
|
30
|
+
if (!options.configurationId || !/^[A-Za-z0-9_-]{1,100}$/u.test(options.namespace) || options.algorithm !== void 0 && options.algorithm !== "sha256" || !Number.isSafeInteger(options.maxBytes) || options.maxBytes < 1 || !Number.isSafeInteger(minimumRetention) || minimumRetention < 1 || !storage.capabilities.putConditions.includes("create-only")) return yield* workflowError("InvalidContentConfiguration");
|
|
31
|
+
const transfers = yield* Transfers.make({
|
|
32
|
+
...options.transfer,
|
|
33
|
+
maxBytes: options.maxBytes
|
|
34
|
+
});
|
|
35
|
+
const binding = digestText(JSON.stringify([
|
|
36
|
+
options.configurationId,
|
|
37
|
+
storage.storeId,
|
|
38
|
+
options.namespace,
|
|
39
|
+
"sha256"
|
|
40
|
+
]));
|
|
41
|
+
yield* store.exclusive(Effect.gen(function* () {
|
|
42
|
+
const existing = yield* store.read("configuration", Schema.String);
|
|
43
|
+
if (existing && existing !== binding) return yield* workflowError("ReferenceStoreConfigurationConflict");
|
|
44
|
+
if (!existing) yield* store.write("configuration", Schema.String, binding);
|
|
45
|
+
}));
|
|
46
|
+
const references = makeReferences(store, binding, storage, random);
|
|
47
|
+
const collection = makeCollection(store, binding, storage, references, random, minimumRetention);
|
|
48
|
+
const physicalKey = (record) => `${options.namespace}/sha256/${record.id}/${record.generation}`;
|
|
49
|
+
const verify = Effect.fnUntraced(function* (record, metadata) {
|
|
50
|
+
if (metadata.ref.storeId !== storage.storeId || metadata.ref.key !== physicalKey(record) || metadata.customMetadata?.[marker] !== binding) return yield* workflowError("ForeignContentObject");
|
|
51
|
+
const actual = yield* hashObject(storage, metadata);
|
|
52
|
+
if (actual.sha256 !== record.id || actual.size !== record.size) return yield* workflowError("ContentVerificationFailed");
|
|
53
|
+
return metadata;
|
|
54
|
+
});
|
|
55
|
+
const reconcile = Effect.fnUntraced(function* (id) {
|
|
56
|
+
const record = yield* references.load(id);
|
|
57
|
+
if (record.state === "ready" || record.state === "deleted") return record;
|
|
58
|
+
if (record.state === "deleting") {
|
|
59
|
+
if (!record.object || (yield* references.reachable(record))) return record;
|
|
60
|
+
yield* deletePinned(storage, record.object);
|
|
61
|
+
const deleted = {
|
|
62
|
+
...record,
|
|
63
|
+
state: "deleted"
|
|
64
|
+
};
|
|
65
|
+
yield* store.write(contentKey(id), ContentRecord, deleted);
|
|
66
|
+
return deleted;
|
|
67
|
+
}
|
|
68
|
+
const observed = yield* headOptional(storage, physicalKey(record));
|
|
69
|
+
if (!observed) return record;
|
|
70
|
+
const object = yield* verify(record, observed);
|
|
71
|
+
const ready = {
|
|
72
|
+
...record,
|
|
73
|
+
state: "ready",
|
|
74
|
+
object
|
|
75
|
+
};
|
|
76
|
+
yield* store.write(contentKey(id), ContentRecord, ready);
|
|
77
|
+
return ready;
|
|
78
|
+
});
|
|
79
|
+
const put = (request) => store.exclusive(Effect.scoped(Effect.gen(function* () {
|
|
80
|
+
const staged = yield* stage(request.source.open(), options.maxBytes);
|
|
81
|
+
if (request.source.length !== void 0 && request.source.length !== staged.size) return yield* workflowError("SourceLengthMismatch");
|
|
82
|
+
const id = staged.checksum.value;
|
|
83
|
+
let record = yield* store.read(contentKey(id), ContentRecord);
|
|
84
|
+
if (record && record.binding !== binding) return yield* workflowError("ContentConfigurationConflict");
|
|
85
|
+
if (record?.state === "deleting") return yield* workflowError("ContentDeletionPending");
|
|
86
|
+
if (record?.state === "ready" && record.object) yield* verify(record, yield* storage.head({ ref: record.object.ref }));
|
|
87
|
+
else {
|
|
88
|
+
if (!record || record.state === "deleted") {
|
|
89
|
+
const generation = (record?.generation ?? 0) + 1;
|
|
90
|
+
const next = {
|
|
91
|
+
id,
|
|
92
|
+
binding,
|
|
93
|
+
generation,
|
|
94
|
+
state: "writing",
|
|
95
|
+
size: staged.size,
|
|
96
|
+
createdAt: yield* Clock.currentTimeMillis,
|
|
97
|
+
retainUntil: (yield* Clock.currentTimeMillis) + minimumRetention,
|
|
98
|
+
edgeCount: record?.edgeCount ?? 0
|
|
99
|
+
};
|
|
100
|
+
if (yield* headOptional(storage, physicalKey(next))) return yield* workflowError("UnreservedDigestKey");
|
|
101
|
+
const sequence = (yield* store.read("content-sequence", Schema.Natural)) ?? 0;
|
|
102
|
+
yield* store.write("content-sequence", Schema.Natural, sequence + 1);
|
|
103
|
+
yield* store.write(`content-index:${sequence + 1}`, Schema.String, id);
|
|
104
|
+
yield* store.write(contentKey(id), ContentRecord, next);
|
|
105
|
+
record = next;
|
|
106
|
+
}
|
|
107
|
+
record = yield* reconcile(id);
|
|
108
|
+
if (record.state !== "ready") {
|
|
109
|
+
yield* transfers.upload({
|
|
110
|
+
key: physicalKey(record),
|
|
111
|
+
source: replayable(() => staged.stream(), staged.size),
|
|
112
|
+
expectedChecksum: staged.checksum,
|
|
113
|
+
condition: { _tag: "CreateOnly" },
|
|
114
|
+
headers: {
|
|
115
|
+
contentType: "application/octet-stream",
|
|
116
|
+
customMetadata: { [marker]: binding }
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
record = yield* reconcile(id);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const object = record.object;
|
|
123
|
+
if (!object || record.state !== "ready") return yield* workflowError("ContentOutcomeUnknown");
|
|
124
|
+
record = {
|
|
125
|
+
...record,
|
|
126
|
+
retainUntil: (yield* Clock.currentTimeMillis) + minimumRetention
|
|
127
|
+
};
|
|
128
|
+
yield* store.write(contentKey(id), ContentRecord, record);
|
|
129
|
+
if (request.reference !== void 0) yield* references.update(request.reference, id);
|
|
130
|
+
return {
|
|
131
|
+
id,
|
|
132
|
+
metadata: object,
|
|
133
|
+
size: record.size,
|
|
134
|
+
checksum: staged.checksum
|
|
135
|
+
};
|
|
136
|
+
})));
|
|
137
|
+
return {
|
|
138
|
+
put,
|
|
139
|
+
head: (id) => store.exclusive(Effect.gen(function* () {
|
|
140
|
+
const record = yield* references.load(id);
|
|
141
|
+
if (record.state !== "ready" || !record.object) return yield* workflowError("ContentNotReady");
|
|
142
|
+
return yield* storage.head({ ref: record.object.ref });
|
|
143
|
+
})),
|
|
144
|
+
get: (id) => store.exclusive(Effect.gen(function* () {
|
|
145
|
+
const record = yield* references.load(id);
|
|
146
|
+
if (record.state !== "ready" || !record.object) return yield* workflowError("ContentNotReady");
|
|
147
|
+
return yield* storage.get(yield* pin(record.object));
|
|
148
|
+
})),
|
|
149
|
+
status: (id) => store.exclusive(references.load(id)),
|
|
150
|
+
reconcile: (id) => store.exclusive(reconcile(id)),
|
|
151
|
+
attach: (request) => store.exclusive(references.update(request.reference, request.contentId, request.replace)),
|
|
152
|
+
detach: (request) => store.exclusive(references.update(request.reference)),
|
|
153
|
+
references: (id, page) => store.exclusive(references.inspect(id, page)),
|
|
154
|
+
reconcileReference: (reference) => store.exclusive(references.reconcile(reference)),
|
|
155
|
+
planGarbageCollection: (request) => store.exclusive(collection.plan(request)),
|
|
156
|
+
inspectGarbageCollection: (id, page) => store.exclusive(collection.inspect(id, page)),
|
|
157
|
+
applyGarbageCollection: (id, batch) => store.exclusive(collection.apply(id, batch))
|
|
158
|
+
};
|
|
159
|
+
});
|
|
160
|
+
var ContentStore = class ContentStore extends Context.Service()("@effect-kit/storage/ContentStore") {
|
|
161
|
+
static make = make;
|
|
162
|
+
static layer(options) {
|
|
163
|
+
return Layer.effect(ContentStore, make(options));
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export { CollectionPlan, ContentId, ContentRecord, ContentReferenceStore, ContentStore };
|
|
168
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","names":["UploadSource.replayable"],"sources":["../src/workflows/content/index.ts"],"sourcesContent":["import { Clock, Context, Effect, Layer, Schema } from \"effect\";\nimport { SecureRandom } from \"effect/crypto\";\n\nimport { makeStaging } from \"../../composition/representation/staging.js\";\nimport type { ObjectMetadata } from \"../../core/object.js\";\nimport { Storage } from \"../../core/storage.js\";\nimport { digestText } from \"../../runtime/portable-hash.js\";\nimport { Transfers, UploadSource } from \"../../transfers/index.js\";\nimport type { UploadSourceType, TransferPolicy } from \"../../transfers/index.js\";\nimport { deletePinned, hashObject, headOptional, pin } from \"../objects.js\";\nimport { makeRecordStore, workflowError } from \"../store.js\";\nimport type { RecordStore, WorkflowStoreOptions } from \"../store.js\";\nimport { makeCollection } from \"./collection.js\";\nimport { contentKey, makeReferences } from \"./references.js\";\nimport { ContentRecord } from \"./schema.js\";\n\nexport { ContentId, ContentRecord, CollectionPlan } from \"./schema.js\";\nexport type { WorkflowStoreOptions as ContentReferenceStoreOptions } from \"../store.js\";\nexport class ContentReferenceStore extends Context.Service<ContentReferenceStore, RecordStore>()(\n \"@effect-kit/storage/ContentReferenceStore\",\n) {\n static make(options: WorkflowStoreOptions) {\n return makeRecordStore(options, \"content\");\n }\n static layer(options: WorkflowStoreOptions) {\n return Layer.effect(ContentReferenceStore, ContentReferenceStore.make(options));\n }\n}\nexport interface ContentStoreOptions {\n readonly configurationId: string;\n readonly namespace: string;\n readonly algorithm?: \"sha256\";\n readonly maxBytes: number;\n readonly minimumRetentionMillis?: number;\n readonly transfer?: TransferPolicy;\n}\nconst marker = \"effect-storage-content\";\nconst make = Effect.fnUntraced(function* (options: ContentStoreOptions) {\n const store = yield* ContentReferenceStore;\n const storage = yield* Storage;\n const random = yield* SecureRandom.SecureRandom;\n const stage = yield* makeStaging;\n const minimumRetention = options.minimumRetentionMillis ?? 86400000;\n if (\n !options.configurationId ||\n !/^[A-Za-z0-9_-]{1,100}$/u.test(options.namespace) ||\n (options.algorithm !== undefined && options.algorithm !== \"sha256\") ||\n !Number.isSafeInteger(options.maxBytes) ||\n options.maxBytes < 1 ||\n !Number.isSafeInteger(minimumRetention) ||\n minimumRetention < 1 ||\n !storage.capabilities.putConditions.includes(\"create-only\")\n )\n return yield* workflowError(\"InvalidContentConfiguration\");\n const transfers = yield* Transfers.make({ ...options.transfer, maxBytes: options.maxBytes });\n const binding = digestText(\n JSON.stringify([options.configurationId, storage.storeId, options.namespace, \"sha256\"]),\n );\n yield* store.exclusive(\n Effect.gen(function* () {\n const existing = yield* store.read(\"configuration\", Schema.String);\n if (existing && existing !== binding)\n return yield* workflowError(\"ReferenceStoreConfigurationConflict\");\n if (!existing) yield* store.write(\"configuration\", Schema.String, binding);\n }),\n );\n const references = makeReferences(store, binding, storage, random);\n const collection = makeCollection(store, binding, storage, references, random, minimumRetention);\n const physicalKey = (record: ContentRecord) =>\n `${options.namespace}/sha256/${record.id}/${record.generation}`;\n const verify = Effect.fnUntraced(function* (record: ContentRecord, metadata: ObjectMetadata) {\n if (\n metadata.ref.storeId !== storage.storeId ||\n metadata.ref.key !== physicalKey(record) ||\n metadata.customMetadata?.[marker] !== binding\n )\n return yield* workflowError(\"ForeignContentObject\");\n const actual = yield* hashObject(storage, metadata);\n if (actual.sha256 !== record.id || actual.size !== record.size)\n return yield* workflowError(\"ContentVerificationFailed\");\n return metadata;\n });\n const reconcile = Effect.fnUntraced(function* (id: string) {\n const record = yield* references.load(id);\n if (record.state === \"ready\" || record.state === \"deleted\") return record;\n if (record.state === \"deleting\") {\n if (!record.object || (yield* references.reachable(record))) return record;\n yield* deletePinned(storage, record.object);\n const deleted: ContentRecord = { ...record, state: \"deleted\" };\n yield* store.write(contentKey(id), ContentRecord, deleted);\n return deleted;\n }\n const observed = yield* headOptional(storage, physicalKey(record));\n if (!observed) return record;\n const object = yield* verify(record, observed);\n const ready: ContentRecord = { ...record, state: \"ready\", object };\n yield* store.write(contentKey(id), ContentRecord, ready);\n return ready;\n });\n const put = <E = never, R = never>(request: {\n readonly source: UploadSourceType<E, R>;\n readonly reference?: string;\n }) =>\n store.exclusive(\n Effect.scoped(\n Effect.gen(function* () {\n const staged = yield* stage(request.source.open(), options.maxBytes);\n if (request.source.length !== undefined && request.source.length !== staged.size)\n return yield* workflowError(\"SourceLengthMismatch\");\n const id = staged.checksum.value;\n let record = yield* store.read(contentKey(id), ContentRecord);\n if (record && record.binding !== binding)\n return yield* workflowError(\"ContentConfigurationConflict\");\n if (record?.state === \"deleting\") return yield* workflowError(\"ContentDeletionPending\");\n if (record?.state === \"ready\" && record.object)\n yield* verify(record, yield* storage.head({ ref: record.object.ref }));\n else {\n if (!record || record.state === \"deleted\") {\n const generation = (record?.generation ?? 0) + 1;\n const next: ContentRecord = {\n id,\n binding,\n generation,\n state: \"writing\",\n size: staged.size,\n createdAt: yield* Clock.currentTimeMillis,\n retainUntil: (yield* Clock.currentTimeMillis) + minimumRetention,\n edgeCount: record?.edgeCount ?? 0,\n };\n if (yield* headOptional(storage, physicalKey(next)))\n return yield* workflowError(\"UnreservedDigestKey\");\n const sequence = (yield* store.read(\"content-sequence\", Schema.Natural)) ?? 0;\n yield* store.write(\"content-sequence\", Schema.Natural, sequence + 1);\n yield* store.write(`content-index:${sequence + 1}`, Schema.String, id);\n yield* store.write(contentKey(id), ContentRecord, next);\n record = next;\n }\n record = yield* reconcile(id);\n if (record.state !== \"ready\") {\n yield* transfers.upload({\n key: physicalKey(record),\n source: UploadSource.replayable(() => staged.stream(), staged.size),\n expectedChecksum: staged.checksum,\n condition: { _tag: \"CreateOnly\" },\n headers: {\n contentType: \"application/octet-stream\",\n customMetadata: { [marker]: binding },\n },\n });\n record = yield* reconcile(id);\n }\n }\n const object = record.object;\n if (!object || record.state !== \"ready\")\n return yield* workflowError(\"ContentOutcomeUnknown\");\n record = { ...record, retainUntil: (yield* Clock.currentTimeMillis) + minimumRetention };\n yield* store.write(contentKey(id), ContentRecord, record);\n if (request.reference !== undefined) yield* references.update(request.reference, id);\n return { id, metadata: object, size: record.size, checksum: staged.checksum };\n }),\n ),\n );\n return {\n put,\n head: (id: string) =>\n store.exclusive(\n Effect.gen(function* () {\n const record = yield* references.load(id);\n if (record.state !== \"ready\" || !record.object)\n return yield* workflowError(\"ContentNotReady\");\n return yield* storage.head({ ref: record.object.ref });\n }),\n ),\n get: (id: string) =>\n store.exclusive(\n Effect.gen(function* () {\n const record = yield* references.load(id);\n if (record.state !== \"ready\" || !record.object)\n return yield* workflowError(\"ContentNotReady\");\n return yield* storage.get(yield* pin(record.object));\n }),\n ),\n status: (id: string) => store.exclusive(references.load(id)),\n reconcile: (id: string) => store.exclusive(reconcile(id)),\n attach: (request: {\n readonly contentId: string;\n readonly reference: string;\n readonly replace?: boolean;\n }) => store.exclusive(references.update(request.reference, request.contentId, request.replace)),\n detach: (request: { readonly reference: string }) =>\n store.exclusive(references.update(request.reference)),\n references: (id: string, page?: { readonly offset?: number; readonly limit?: number }) =>\n store.exclusive(references.inspect(id, page)),\n reconcileReference: (reference: string) => store.exclusive(references.reconcile(reference)),\n planGarbageCollection: (request: { readonly olderThan: number }) =>\n store.exclusive(collection.plan(request)),\n inspectGarbageCollection: (\n id: string,\n page?: { readonly offset?: number; readonly limit?: number },\n ) => store.exclusive(collection.inspect(id, page)),\n applyGarbageCollection: (id: string, batch?: { readonly limit?: number }) =>\n store.exclusive(collection.apply(id, batch)),\n };\n});\nexport class ContentStore extends Context.Service<\n ContentStore,\n Effect.Success<ReturnType<typeof make>>\n>()(\"@effect-kit/storage/ContentStore\") {\n static readonly make = make;\n static layer(options: ContentStoreOptions) {\n return Layer.effect(ContentStore, make(options));\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ObjectMetadata, ObjectRef } from "./object.js";
|
|
2
|
+
import { StorageError } from "./errors.js";
|
|
3
|
+
import { WriteCondition } from "./requests.js";
|
|
4
|
+
import { Context, DateTime, Effect, Redacted } from "effect";
|
|
5
|
+
export interface StorageCapabilities {
|
|
6
|
+
readonly putConditions: ReadonlyArray<"create-only" | "if-match">;
|
|
7
|
+
readonly getConditions: ReadonlyArray<"if-match" | "if-none-match">;
|
|
8
|
+
readonly deleteConditions: ReadonlyArray<"if-match">;
|
|
9
|
+
readonly ranges: ReadonlyArray<"bounded" | "from" | "suffix">;
|
|
10
|
+
readonly versionedReads: "none" | "current-only" | "history";
|
|
11
|
+
readonly list: {
|
|
12
|
+
readonly maxPageSize: number;
|
|
13
|
+
readonly delimiter: boolean;
|
|
14
|
+
readonly cursorPersistence: "none" | "process" | "provider";
|
|
15
|
+
readonly snapshot: boolean;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface GrantConstraint {
|
|
19
|
+
readonly kind: string;
|
|
20
|
+
readonly enforcement: "provider" | "backend" | "advisory";
|
|
21
|
+
readonly value: string | number;
|
|
22
|
+
}
|
|
23
|
+
export interface SignedRequest {
|
|
24
|
+
readonly method: "GET" | "HEAD" | "PUT" | "DELETE";
|
|
25
|
+
readonly url: Redacted.Redacted<string>;
|
|
26
|
+
readonly headers: Redacted.Redacted<Readonly<Record<string, string>>>;
|
|
27
|
+
readonly expiresAt: DateTime.Utc;
|
|
28
|
+
readonly ref: ObjectRef;
|
|
29
|
+
readonly constraints: ReadonlyArray<GrantConstraint>;
|
|
30
|
+
}
|
|
31
|
+
declare const StorageSigning_base: Context.ServiceClass<StorageSigning, "@effect-kit/storage/StorageSigning", {
|
|
32
|
+
readonly sign: (request: {
|
|
33
|
+
readonly ref: ObjectRef;
|
|
34
|
+
readonly method: SignedRequest["method"];
|
|
35
|
+
readonly expiresInSeconds: number;
|
|
36
|
+
}) => Effect.Effect<SignedRequest, StorageError>;
|
|
37
|
+
}>;
|
|
38
|
+
export declare class StorageSigning extends StorageSigning_base {}
|
|
39
|
+
declare const StoragePublicUrls_base: Context.ServiceClass<StoragePublicUrls, "@effect-kit/storage/StoragePublicUrls", {
|
|
40
|
+
/** Resolving a URL does not change the object's visibility. */
|
|
41
|
+
readonly url: (ref: ObjectRef) => Effect.Effect<string, StorageError>;
|
|
42
|
+
}>;
|
|
43
|
+
export declare class StoragePublicUrls extends StoragePublicUrls_base {}
|
|
44
|
+
declare const StorageCopy_base: Context.ServiceClass<StorageCopy, "@effect-kit/storage/StorageCopy", {
|
|
45
|
+
readonly copy: (request: {
|
|
46
|
+
readonly source: ObjectRef;
|
|
47
|
+
readonly destinationKey: string;
|
|
48
|
+
readonly condition?: WriteCondition | undefined;
|
|
49
|
+
}) => Effect.Effect<ObjectMetadata, StorageError>;
|
|
50
|
+
}>;
|
|
51
|
+
export declare class StorageCopy extends StorageCopy_base {}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
|
|
3
|
+
// src/core/capabilities.ts
|
|
4
|
+
var StorageSigning = class extends Context.Service()("@effect-kit/storage/StorageSigning") {};
|
|
5
|
+
var StoragePublicUrls = class extends Context.Service()("@effect-kit/storage/StoragePublicUrls") {};
|
|
6
|
+
var StorageCopy = class extends Context.Service()("@effect-kit/storage/StorageCopy") {};
|
|
7
|
+
|
|
8
|
+
export { StorageCopy, StoragePublicUrls, StorageSigning };
|
|
9
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","names":[],"sources":["../../src/core/capabilities.ts"],"sourcesContent":["import { Context } from \"effect\";\nimport type { DateTime, Effect, Redacted } from \"effect\";\n\nimport type { StorageError } from \"./errors.js\";\nimport type { ObjectMetadata, ObjectRef } from \"./object.js\";\nimport type { WriteCondition } from \"./requests.js\";\n\nexport interface StorageCapabilities {\n readonly putConditions: ReadonlyArray<\"create-only\" | \"if-match\">;\n readonly getConditions: ReadonlyArray<\"if-match\" | \"if-none-match\">;\n readonly deleteConditions: ReadonlyArray<\"if-match\">;\n readonly ranges: ReadonlyArray<\"bounded\" | \"from\" | \"suffix\">;\n readonly versionedReads: \"none\" | \"current-only\" | \"history\";\n readonly list: {\n readonly maxPageSize: number;\n readonly delimiter: boolean;\n readonly cursorPersistence: \"none\" | \"process\" | \"provider\";\n readonly snapshot: boolean;\n };\n}\n\nexport interface GrantConstraint {\n readonly kind: string;\n readonly enforcement: \"provider\" | \"backend\" | \"advisory\";\n readonly value: string | number;\n}\n\nexport interface SignedRequest {\n readonly method: \"GET\" | \"HEAD\" | \"PUT\" | \"DELETE\";\n readonly url: Redacted.Redacted<string>;\n readonly headers: Redacted.Redacted<Readonly<Record<string, string>>>;\n readonly expiresAt: DateTime.Utc;\n readonly ref: ObjectRef;\n readonly constraints: ReadonlyArray<GrantConstraint>;\n}\n\nexport class StorageSigning extends Context.Service<\n StorageSigning,\n {\n readonly sign: (request: {\n readonly ref: ObjectRef;\n readonly method: SignedRequest[\"method\"];\n readonly expiresInSeconds: number;\n }) => Effect.Effect<SignedRequest, StorageError>;\n }\n>()(\"@effect-kit/storage/StorageSigning\") {}\n\nexport class StoragePublicUrls extends Context.Service<\n StoragePublicUrls,\n {\n /** Resolving a URL does not change the object's visibility. */\n readonly url: (ref: ObjectRef) => Effect.Effect<string, StorageError>;\n }\n>()(\"@effect-kit/storage/StoragePublicUrls\") {}\n\nexport class StorageCopy extends Context.Service<\n StorageCopy,\n {\n readonly copy: (request: {\n readonly source: ObjectRef;\n readonly destinationKey: string;\n readonly condition?: WriteCondition | undefined;\n }) => Effect.Effect<ObjectMetadata, StorageError>;\n }\n>()(\"@effect-kit/storage/StorageCopy\") {}\n"],"mappings":";;;AAoCA,IAAa,iBAAb,cAAoC,QAAQ,QAS1C,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;AAE3C,IAAa,oBAAb,cAAuC,QAAQ,QAM7C,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC;AAE9C,IAAa,cAAb,cAAiC,QAAQ,QASvC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Checksum, ObjectHeaders, ObjectMetadata, ObjectRef } from "../object.js";
|
|
2
|
+
import { StorageError } from "../errors.js";
|
|
3
|
+
import { ListRequest, UploadBody, WriteCondition } from "../requests.js";
|
|
4
|
+
import { Effect, Redacted } from "effect";
|
|
5
|
+
export interface MultipartHandle {
|
|
6
|
+
readonly ref: ObjectRef;
|
|
7
|
+
readonly uploadId: Redacted.Redacted<string>;
|
|
8
|
+
}
|
|
9
|
+
export interface MultipartHandleCodec {
|
|
10
|
+
readonly encode: (handle: MultipartHandle) => Effect.Effect<Redacted.Redacted<string>, StorageError>;
|
|
11
|
+
readonly decode: (encoded: Redacted.Redacted<string>) => Effect.Effect<MultipartHandle, StorageError>;
|
|
12
|
+
}
|
|
13
|
+
export interface UploadedPart {
|
|
14
|
+
readonly partNumber: number;
|
|
15
|
+
readonly etag: string;
|
|
16
|
+
readonly size?: number | undefined;
|
|
17
|
+
readonly checksums?: ReadonlyArray<Checksum> | undefined;
|
|
18
|
+
}
|
|
19
|
+
/** S3-style numbered parts; block/offset protocols have separate contracts. */
|
|
20
|
+
export interface MultipartUploads {
|
|
21
|
+
readonly limits: {
|
|
22
|
+
readonly minimumPartBytes: number;
|
|
23
|
+
readonly maximumPartBytes: number;
|
|
24
|
+
readonly maximumParts: number;
|
|
25
|
+
/** Omitted retains the full protocol contract; an empty array explicitly forbids conditional completion. */
|
|
26
|
+
readonly completeConditions?: ReadonlyArray<"create-only" | "if-match">;
|
|
27
|
+
};
|
|
28
|
+
readonly initiate: (request: {
|
|
29
|
+
readonly key: string;
|
|
30
|
+
readonly headers?: ObjectHeaders;
|
|
31
|
+
}) => Effect.Effect<MultipartHandle, StorageError>;
|
|
32
|
+
readonly uploadPart: <E = never, R = never>(request: {
|
|
33
|
+
readonly upload: MultipartHandle;
|
|
34
|
+
readonly partNumber: number;
|
|
35
|
+
readonly body: UploadBody<E, R>;
|
|
36
|
+
readonly contentLength?: number;
|
|
37
|
+
}) => Effect.Effect<UploadedPart, StorageError | E, R>;
|
|
38
|
+
readonly listParts: (request: {
|
|
39
|
+
readonly upload: MultipartHandle;
|
|
40
|
+
readonly cursor?: string;
|
|
41
|
+
}) => Effect.Effect<{
|
|
42
|
+
readonly parts: ReadonlyArray<UploadedPart>;
|
|
43
|
+
readonly cursor?: string;
|
|
44
|
+
}, StorageError>;
|
|
45
|
+
readonly complete: (request: {
|
|
46
|
+
readonly upload: MultipartHandle;
|
|
47
|
+
readonly parts: ReadonlyArray<UploadedPart>;
|
|
48
|
+
readonly condition?: WriteCondition;
|
|
49
|
+
}) => Effect.Effect<ObjectMetadata, StorageError>;
|
|
50
|
+
readonly abort: (upload: MultipartHandle) => Effect.Effect<void, StorageError>;
|
|
51
|
+
readonly listUploads?: (request: ListRequest) => Effect.Effect<{
|
|
52
|
+
readonly uploads: ReadonlyArray<MultipartHandle>;
|
|
53
|
+
readonly cursor?: string;
|
|
54
|
+
}, StorageError>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=multipart.d.ts.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ObjectHeaders, ObjectMetadata, ObjectRef } from "../object.js";
|
|
2
|
+
import { StorageError } from "../errors.js";
|
|
3
|
+
import { PutRequest, UploadBody, WriteCondition } from "../requests.js";
|
|
4
|
+
import { Effect, Redacted } from "effect";
|
|
5
|
+
export interface ResumableHandle {
|
|
6
|
+
readonly protocol: string;
|
|
7
|
+
readonly ref: ObjectRef;
|
|
8
|
+
readonly handle: Redacted.Redacted<string>;
|
|
9
|
+
}
|
|
10
|
+
export type ResumableState = {
|
|
11
|
+
readonly _tag: "Uploading";
|
|
12
|
+
readonly committedOffset: number;
|
|
13
|
+
} | {
|
|
14
|
+
readonly _tag: "Completed";
|
|
15
|
+
readonly metadata: ObjectMetadata;
|
|
16
|
+
} | {
|
|
17
|
+
readonly _tag: "Expired";
|
|
18
|
+
} | {
|
|
19
|
+
readonly _tag: "Unknown";
|
|
20
|
+
};
|
|
21
|
+
/** Offset protocols such as GCS/tus, with provider-specific constraints. */
|
|
22
|
+
export interface OffsetUploads {
|
|
23
|
+
readonly limits: {
|
|
24
|
+
readonly alignmentBytes: number;
|
|
25
|
+
readonly maximumChunkBytes: number;
|
|
26
|
+
readonly fixedChunkBytes?: number;
|
|
27
|
+
};
|
|
28
|
+
readonly create: (request: Omit<PutRequest, "body">) => Effect.Effect<ResumableHandle, StorageError>;
|
|
29
|
+
readonly query: (upload: ResumableHandle) => Effect.Effect<ResumableState, StorageError>;
|
|
30
|
+
readonly write: <E = never, R = never>(request: {
|
|
31
|
+
readonly upload: ResumableHandle;
|
|
32
|
+
readonly offset: number;
|
|
33
|
+
readonly body: UploadBody<E, R>;
|
|
34
|
+
readonly contentLength: number;
|
|
35
|
+
readonly final: boolean;
|
|
36
|
+
}) => Effect.Effect<ResumableState, StorageError | E, R>;
|
|
37
|
+
/** Resolve a protocol-only completion receipt in its own budgeted request. */
|
|
38
|
+
readonly resolveCompletion?: (upload: ResumableHandle) => Effect.Effect<ObjectMetadata, StorageError>;
|
|
39
|
+
readonly cancel: (upload: ResumableHandle) => Effect.Effect<void, StorageError>;
|
|
40
|
+
}
|
|
41
|
+
/** Azure-style named blocks are not reported as byte offsets or S3 parts. */
|
|
42
|
+
export interface BlockUploads {
|
|
43
|
+
readonly limits: {
|
|
44
|
+
readonly maximumBlockBytes: number;
|
|
45
|
+
readonly maximumBlocks: number;
|
|
46
|
+
};
|
|
47
|
+
readonly stage: <E = never, R = never>(request: {
|
|
48
|
+
readonly ref: ObjectRef;
|
|
49
|
+
readonly blockId: string;
|
|
50
|
+
readonly body: UploadBody<E, R>;
|
|
51
|
+
readonly contentLength: number;
|
|
52
|
+
}) => Effect.Effect<void, StorageError | E, R>;
|
|
53
|
+
readonly list: (ref: ObjectRef) => Effect.Effect<{
|
|
54
|
+
readonly committed: ReadonlyArray<{
|
|
55
|
+
readonly blockId: string;
|
|
56
|
+
readonly size: number;
|
|
57
|
+
}>;
|
|
58
|
+
readonly uncommitted: ReadonlyArray<{
|
|
59
|
+
readonly blockId: string;
|
|
60
|
+
readonly size: number;
|
|
61
|
+
}>;
|
|
62
|
+
}, StorageError>;
|
|
63
|
+
readonly commit: (request: {
|
|
64
|
+
readonly ref: ObjectRef;
|
|
65
|
+
readonly blockIds: ReadonlyArray<string>;
|
|
66
|
+
readonly headers?: ObjectHeaders;
|
|
67
|
+
readonly condition?: WriteCondition;
|
|
68
|
+
}) => Effect.Effect<ObjectMetadata, StorageError>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=resumable.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export declare const StorageReason: Schema.Union<readonly [Schema.TaggedStruct<"InvalidInput", {
|
|
3
|
+
readonly field: Schema.String;
|
|
4
|
+
}>, Schema.TaggedStruct<"InvalidConfiguration", {
|
|
5
|
+
readonly field: Schema.String;
|
|
6
|
+
}>, Schema.TaggedStruct<"Unsupported", {
|
|
7
|
+
readonly capability: Schema.String;
|
|
8
|
+
}>, Schema.TaggedStruct<"NotFound", {}>, Schema.TaggedStruct<"AccessDenied", {}>, Schema.TaggedStruct<"PreconditionFailed", {}>, Schema.TaggedStruct<"NotModified", {}>, Schema.TaggedStruct<"RangeNotSatisfiable", {}>, Schema.TaggedStruct<"Expired", {}>, Schema.TaggedStruct<"Throttled", {
|
|
9
|
+
readonly retryAfterMillis: Schema.optional<Schema.Natural>;
|
|
10
|
+
}>, Schema.TaggedStruct<"TransportFailure", {
|
|
11
|
+
readonly code: Schema.optional<Schema.String>;
|
|
12
|
+
}>, Schema.TaggedStruct<"ProviderFailure", {
|
|
13
|
+
readonly code: Schema.optional<Schema.String>;
|
|
14
|
+
}>, Schema.TaggedStruct<"IntegrityMismatch", {}>, Schema.TaggedStruct<"LengthMismatch", {
|
|
15
|
+
readonly expected: Schema.Natural;
|
|
16
|
+
readonly actual: Schema.Natural;
|
|
17
|
+
}>, Schema.TaggedStruct<"LimitExceeded", {
|
|
18
|
+
readonly limit: Schema.Natural;
|
|
19
|
+
}>, Schema.TaggedStruct<"InvalidSession", {}>, Schema.TaggedStruct<"QuotaExceeded", {
|
|
20
|
+
readonly limit: Schema.Natural;
|
|
21
|
+
}>, Schema.TaggedStruct<"ScopeClosed", {}>, Schema.TaggedStruct<"BodyConsumed", {}>, Schema.TaggedStruct<"PartialFailure", {}>]>;
|
|
22
|
+
export type StorageReason = typeof StorageReason.Type;
|
|
23
|
+
export declare const MutationOutcome: Schema.Literals<readonly ["not-applicable", "not-started", "rejected", "succeeded", "unknown", "partial"]>;
|
|
24
|
+
export type MutationOutcome = typeof MutationOutcome.Type;
|
|
25
|
+
declare const StorageError_base: Schema.Class<StorageError, Schema.TaggedStruct<"StorageError", {
|
|
26
|
+
readonly operation: Schema.String;
|
|
27
|
+
readonly provider: Schema.String;
|
|
28
|
+
readonly reason: Schema.Union<readonly [Schema.TaggedStruct<"InvalidInput", {
|
|
29
|
+
readonly field: Schema.String;
|
|
30
|
+
}>, Schema.TaggedStruct<"InvalidConfiguration", {
|
|
31
|
+
readonly field: Schema.String;
|
|
32
|
+
}>, Schema.TaggedStruct<"Unsupported", {
|
|
33
|
+
readonly capability: Schema.String;
|
|
34
|
+
}>, Schema.TaggedStruct<"NotFound", {}>, Schema.TaggedStruct<"AccessDenied", {}>, Schema.TaggedStruct<"PreconditionFailed", {}>, Schema.TaggedStruct<"NotModified", {}>, Schema.TaggedStruct<"RangeNotSatisfiable", {}>, Schema.TaggedStruct<"Expired", {}>, Schema.TaggedStruct<"Throttled", {
|
|
35
|
+
readonly retryAfterMillis: Schema.optional<Schema.Natural>;
|
|
36
|
+
}>, Schema.TaggedStruct<"TransportFailure", {
|
|
37
|
+
readonly code: Schema.optional<Schema.String>;
|
|
38
|
+
}>, Schema.TaggedStruct<"ProviderFailure", {
|
|
39
|
+
readonly code: Schema.optional<Schema.String>;
|
|
40
|
+
}>, Schema.TaggedStruct<"IntegrityMismatch", {}>, Schema.TaggedStruct<"LengthMismatch", {
|
|
41
|
+
readonly expected: Schema.Natural;
|
|
42
|
+
readonly actual: Schema.Natural;
|
|
43
|
+
}>, Schema.TaggedStruct<"LimitExceeded", {
|
|
44
|
+
readonly limit: Schema.Natural;
|
|
45
|
+
}>, Schema.TaggedStruct<"InvalidSession", {}>, Schema.TaggedStruct<"QuotaExceeded", {
|
|
46
|
+
readonly limit: Schema.Natural;
|
|
47
|
+
}>, Schema.TaggedStruct<"ScopeClosed", {}>, Schema.TaggedStruct<"BodyConsumed", {}>, Schema.TaggedStruct<"PartialFailure", {}>]>;
|
|
48
|
+
readonly mutationOutcome: Schema.Literals<readonly ["not-applicable", "not-started", "rejected", "succeeded", "unknown", "partial"]>;
|
|
49
|
+
readonly requestId: Schema.optional<Schema.String>;
|
|
50
|
+
}>, import("effect/Cause").YieldableError>;
|
|
51
|
+
/** Contains safe operational context only; raw SDK responses and bearer URLs stay private. */
|
|
52
|
+
export declare class StorageError extends StorageError_base {}
|
|
53
|
+
export declare function storageError(operation: string, provider: string, reason: StorageReason, mutationOutcome?: MutationOutcome): StorageError;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
// src/core/errors.ts
|
|
4
|
+
const StorageReason = Schema.Union([
|
|
5
|
+
Schema.TaggedStruct("InvalidInput", { field: Schema.String }),
|
|
6
|
+
Schema.TaggedStruct("InvalidConfiguration", { field: Schema.String }),
|
|
7
|
+
Schema.TaggedStruct("Unsupported", { capability: Schema.String }),
|
|
8
|
+
Schema.TaggedStruct("NotFound", {}),
|
|
9
|
+
Schema.TaggedStruct("AccessDenied", {}),
|
|
10
|
+
Schema.TaggedStruct("PreconditionFailed", {}),
|
|
11
|
+
Schema.TaggedStruct("NotModified", {}),
|
|
12
|
+
Schema.TaggedStruct("RangeNotSatisfiable", {}),
|
|
13
|
+
Schema.TaggedStruct("Expired", {}),
|
|
14
|
+
Schema.TaggedStruct("Throttled", { retryAfterMillis: Schema.optional(Schema.Natural) }),
|
|
15
|
+
Schema.TaggedStruct("TransportFailure", { code: Schema.optional(Schema.String) }),
|
|
16
|
+
Schema.TaggedStruct("ProviderFailure", { code: Schema.optional(Schema.String) }),
|
|
17
|
+
Schema.TaggedStruct("IntegrityMismatch", {}),
|
|
18
|
+
Schema.TaggedStruct("LengthMismatch", {
|
|
19
|
+
expected: Schema.Natural,
|
|
20
|
+
actual: Schema.Natural
|
|
21
|
+
}),
|
|
22
|
+
Schema.TaggedStruct("LimitExceeded", { limit: Schema.Natural }),
|
|
23
|
+
Schema.TaggedStruct("InvalidSession", {}),
|
|
24
|
+
Schema.TaggedStruct("QuotaExceeded", { limit: Schema.Natural }),
|
|
25
|
+
Schema.TaggedStruct("ScopeClosed", {}),
|
|
26
|
+
Schema.TaggedStruct("BodyConsumed", {}),
|
|
27
|
+
Schema.TaggedStruct("PartialFailure", {})
|
|
28
|
+
]);
|
|
29
|
+
const MutationOutcome = Schema.Literals([
|
|
30
|
+
"not-applicable",
|
|
31
|
+
"not-started",
|
|
32
|
+
"rejected",
|
|
33
|
+
"succeeded",
|
|
34
|
+
"unknown",
|
|
35
|
+
"partial"
|
|
36
|
+
]);
|
|
37
|
+
/** Contains safe operational context only; raw SDK responses and bearer URLs stay private. */
|
|
38
|
+
var StorageError = class extends Schema.TaggedError()("StorageError", {
|
|
39
|
+
operation: Schema.String,
|
|
40
|
+
provider: Schema.String,
|
|
41
|
+
reason: StorageReason,
|
|
42
|
+
mutationOutcome: MutationOutcome,
|
|
43
|
+
requestId: Schema.optional(Schema.String)
|
|
44
|
+
}) {};
|
|
45
|
+
function storageError(operation, provider, reason, mutationOutcome = "not-applicable") {
|
|
46
|
+
return new StorageError({
|
|
47
|
+
operation,
|
|
48
|
+
provider,
|
|
49
|
+
reason,
|
|
50
|
+
mutationOutcome
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { MutationOutcome, StorageError, StorageReason, storageError };
|
|
55
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../../src/core/errors.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nexport const StorageReason = Schema.Union([\n Schema.TaggedStruct(\"InvalidInput\", { field: Schema.String }),\n Schema.TaggedStruct(\"InvalidConfiguration\", { field: Schema.String }),\n Schema.TaggedStruct(\"Unsupported\", { capability: Schema.String }),\n Schema.TaggedStruct(\"NotFound\", {}),\n Schema.TaggedStruct(\"AccessDenied\", {}),\n Schema.TaggedStruct(\"PreconditionFailed\", {}),\n Schema.TaggedStruct(\"NotModified\", {}),\n Schema.TaggedStruct(\"RangeNotSatisfiable\", {}),\n Schema.TaggedStruct(\"Expired\", {}),\n Schema.TaggedStruct(\"Throttled\", { retryAfterMillis: Schema.optional(Schema.Natural) }),\n Schema.TaggedStruct(\"TransportFailure\", { code: Schema.optional(Schema.String) }),\n Schema.TaggedStruct(\"ProviderFailure\", { code: Schema.optional(Schema.String) }),\n Schema.TaggedStruct(\"IntegrityMismatch\", {}),\n Schema.TaggedStruct(\"LengthMismatch\", { expected: Schema.Natural, actual: Schema.Natural }),\n Schema.TaggedStruct(\"LimitExceeded\", { limit: Schema.Natural }),\n Schema.TaggedStruct(\"InvalidSession\", {}),\n Schema.TaggedStruct(\"QuotaExceeded\", { limit: Schema.Natural }),\n Schema.TaggedStruct(\"ScopeClosed\", {}),\n Schema.TaggedStruct(\"BodyConsumed\", {}),\n Schema.TaggedStruct(\"PartialFailure\", {}),\n]);\n\nexport type StorageReason = typeof StorageReason.Type;\n\nexport const MutationOutcome = Schema.Literals([\n \"not-applicable\",\n \"not-started\",\n \"rejected\",\n \"succeeded\",\n \"unknown\",\n \"partial\",\n]);\n\nexport type MutationOutcome = typeof MutationOutcome.Type;\n\n/** Contains safe operational context only; raw SDK responses and bearer URLs stay private. */\nexport class StorageError extends Schema.TaggedError<StorageError>()(\"StorageError\", {\n operation: Schema.String,\n provider: Schema.String,\n reason: StorageReason,\n mutationOutcome: MutationOutcome,\n requestId: Schema.optional(Schema.String),\n}) {}\n\nexport function storageError(\n operation: string,\n provider: string,\n reason: StorageReason,\n mutationOutcome: MutationOutcome = \"not-applicable\",\n): StorageError {\n return new StorageError({ operation, provider, reason, mutationOutcome });\n}\n"],"mappings":";;;AAEA,MAAa,gBAAgB,OAAO,MAAM;CACxC,OAAO,aAAa,gBAAgB,EAAE,OAAO,OAAO,OAAO,CAAC;CAC5D,OAAO,aAAa,wBAAwB,EAAE,OAAO,OAAO,OAAO,CAAC;CACpE,OAAO,aAAa,eAAe,EAAE,YAAY,OAAO,OAAO,CAAC;CAChE,OAAO,aAAa,YAAY,CAAC,CAAC;CAClC,OAAO,aAAa,gBAAgB,CAAC,CAAC;CACtC,OAAO,aAAa,sBAAsB,CAAC,CAAC;CAC5C,OAAO,aAAa,eAAe,CAAC,CAAC;CACrC,OAAO,aAAa,uBAAuB,CAAC,CAAC;CAC7C,OAAO,aAAa,WAAW,CAAC,CAAC;CACjC,OAAO,aAAa,aAAa,EAAE,kBAAkB,OAAO,SAAS,OAAO,OAAO,EAAE,CAAC;CACtF,OAAO,aAAa,oBAAoB,EAAE,MAAM,OAAO,SAAS,OAAO,MAAM,EAAE,CAAC;CAChF,OAAO,aAAa,mBAAmB,EAAE,MAAM,OAAO,SAAS,OAAO,MAAM,EAAE,CAAC;CAC/E,OAAO,aAAa,qBAAqB,CAAC,CAAC;CAC3C,OAAO,aAAa,kBAAkB;EAAE,UAAU,OAAO;EAAS,QAAQ,OAAO;CAAQ,CAAC;CAC1F,OAAO,aAAa,iBAAiB,EAAE,OAAO,OAAO,QAAQ,CAAC;CAC9D,OAAO,aAAa,kBAAkB,CAAC,CAAC;CACxC,OAAO,aAAa,iBAAiB,EAAE,OAAO,OAAO,QAAQ,CAAC;CAC9D,OAAO,aAAa,eAAe,CAAC,CAAC;CACrC,OAAO,aAAa,gBAAgB,CAAC,CAAC;CACtC,OAAO,aAAa,kBAAkB,CAAC,CAAC;AAC1C,CAAC;AAID,MAAa,kBAAkB,OAAO,SAAS;CAC7C;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;AAKD,IAAa,eAAb,cAAkC,OAAO,YAA0B,CAAC,CAAC,gBAAgB;CACnF,WAAW,OAAO;CAClB,UAAU,OAAO;CACjB,QAAQ;CACR,iBAAiB;CACjB,WAAW,OAAO,SAAS,OAAO,MAAM;AAC1C,CAAC,CAAC,CAAC,CAAC;AAEJ,SAAgB,aACd,WACA,UACA,QACA,kBAAmC,kBACrB;CACd,OAAO,IAAI,aAAa;EAAE;EAAW;EAAU;EAAQ;CAAgB,CAAC;AAC1E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** An opaque key. Provider-specific encoding and limits are checked by adapters. */
|
|
3
|
+
export declare const ObjectKey: Schema.NonEmptyString;
|
|
4
|
+
export type ObjectKey = typeof ObjectKey.Type;
|
|
5
|
+
/** A JSON-safe byte count. Unsafe integers are rejected rather than rounded. */
|
|
6
|
+
export declare const ObjectSize: Schema.Natural;
|
|
7
|
+
export type ObjectSize = typeof ObjectSize.Type;
|
|
8
|
+
export declare const NativeVersion: Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
9
|
+
readonly id: Schema.NonEmptyString;
|
|
10
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
11
|
+
readonly id: Schema.NonEmptyString;
|
|
12
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
13
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
14
|
+
readonly id: Schema.NonEmptyString;
|
|
15
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
16
|
+
readonly id: Schema.NonEmptyString;
|
|
17
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
18
|
+
readonly provider: Schema.NonEmptyString;
|
|
19
|
+
readonly id: Schema.NonEmptyString;
|
|
20
|
+
}>]>;
|
|
21
|
+
export type NativeVersion = typeof NativeVersion.Type;
|
|
22
|
+
export declare const ObjectRef: Schema.Struct<{
|
|
23
|
+
readonly storeId: Schema.NonEmptyString;
|
|
24
|
+
readonly key: Schema.NonEmptyString;
|
|
25
|
+
readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
26
|
+
readonly id: Schema.NonEmptyString;
|
|
27
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
28
|
+
readonly id: Schema.NonEmptyString;
|
|
29
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
30
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
31
|
+
readonly id: Schema.NonEmptyString;
|
|
32
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
33
|
+
readonly id: Schema.NonEmptyString;
|
|
34
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
35
|
+
readonly provider: Schema.NonEmptyString;
|
|
36
|
+
readonly id: Schema.NonEmptyString;
|
|
37
|
+
}>]>>;
|
|
38
|
+
}>;
|
|
39
|
+
export type ObjectRef = typeof ObjectRef.Type;
|
|
40
|
+
export declare const Checksum: Schema.Struct<{
|
|
41
|
+
readonly algorithm: Schema.NonEmptyString;
|
|
42
|
+
readonly encoding: Schema.Literals<readonly ["hex", "base64"]>;
|
|
43
|
+
readonly scope: Schema.Literals<readonly ["full-object", "composite"]>;
|
|
44
|
+
readonly value: Schema.NonEmptyString;
|
|
45
|
+
readonly partCount: Schema.optional<Schema.Int>;
|
|
46
|
+
}>;
|
|
47
|
+
export type Checksum = typeof Checksum.Type;
|
|
48
|
+
export declare const ObjectValidator: Schema.String;
|
|
49
|
+
export type ObjectValidator = typeof ObjectValidator.Type;
|
|
50
|
+
export declare const ObjectHeaders: Schema.Struct<{
|
|
51
|
+
readonly contentType: Schema.optional<Schema.String>;
|
|
52
|
+
readonly contentEncoding: Schema.optional<Schema.String>;
|
|
53
|
+
readonly contentLanguage: Schema.optional<Schema.String>;
|
|
54
|
+
readonly contentDisposition: Schema.optional<Schema.String>;
|
|
55
|
+
readonly cacheControl: Schema.optional<Schema.String>;
|
|
56
|
+
readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
57
|
+
}>;
|
|
58
|
+
export type ObjectHeaders = typeof ObjectHeaders.Type;
|
|
59
|
+
/** Type-side timestamps are DateTime.Utc; the encoded representation uses ISO strings. */
|
|
60
|
+
export declare const ObjectMetadata: Schema.Struct<{
|
|
61
|
+
readonly contentType: Schema.optional<Schema.String>;
|
|
62
|
+
readonly contentEncoding: Schema.optional<Schema.String>;
|
|
63
|
+
readonly contentLanguage: Schema.optional<Schema.String>;
|
|
64
|
+
readonly contentDisposition: Schema.optional<Schema.String>;
|
|
65
|
+
readonly cacheControl: Schema.optional<Schema.String>;
|
|
66
|
+
readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
67
|
+
readonly ref: Schema.Struct<{
|
|
68
|
+
readonly storeId: Schema.NonEmptyString;
|
|
69
|
+
readonly key: Schema.NonEmptyString;
|
|
70
|
+
readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
71
|
+
readonly id: Schema.NonEmptyString;
|
|
72
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
73
|
+
readonly id: Schema.NonEmptyString;
|
|
74
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
75
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
76
|
+
readonly id: Schema.NonEmptyString;
|
|
77
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
78
|
+
readonly id: Schema.NonEmptyString;
|
|
79
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
80
|
+
readonly provider: Schema.NonEmptyString;
|
|
81
|
+
readonly id: Schema.NonEmptyString;
|
|
82
|
+
}>]>>;
|
|
83
|
+
}>;
|
|
84
|
+
readonly size: Schema.optional<Schema.Natural>;
|
|
85
|
+
readonly etag: Schema.optional<Schema.String>;
|
|
86
|
+
readonly lastModified: Schema.optional<Schema.DateTimeUtcFromString>;
|
|
87
|
+
readonly checksums: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
88
|
+
readonly algorithm: Schema.NonEmptyString;
|
|
89
|
+
readonly encoding: Schema.Literals<readonly ["hex", "base64"]>;
|
|
90
|
+
readonly scope: Schema.Literals<readonly ["full-object", "composite"]>;
|
|
91
|
+
readonly value: Schema.NonEmptyString;
|
|
92
|
+
readonly partCount: Schema.optional<Schema.Int>;
|
|
93
|
+
}>>>;
|
|
94
|
+
readonly storageClass: Schema.optional<Schema.NonEmptyString>;
|
|
95
|
+
}>;
|
|
96
|
+
export type ObjectMetadata = typeof ObjectMetadata.Type;
|
|
97
|
+
//# sourceMappingURL=object.d.ts.map
|