@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
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { storageError } from "../core/errors.js";
|
|
2
|
+
import { decodeRequest } from "../internal/request-validation.js";
|
|
3
|
+
import { decodeJson, jsonRequest } from "../providers/gcs/transport.js";
|
|
4
|
+
import { GcsStorage } from "../gcs.js";
|
|
5
|
+
import { configurationState } from "../lifecycle/configuration-state.js";
|
|
6
|
+
import { iam } from "../providers/gcs/iam.js";
|
|
7
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
8
|
+
|
|
9
|
+
// src/providers/gcs/admin.ts
|
|
10
|
+
const Bucket = Schema.String.check(Schema.isPattern(/^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$/u));
|
|
11
|
+
const Native = Schema.Record(Schema.String, Schema.Unknown);
|
|
12
|
+
const Configuration = Schema.Struct({
|
|
13
|
+
cors: Schema.optional(Schema.Array(Native)),
|
|
14
|
+
lifecycle: Schema.optional(Native),
|
|
15
|
+
versioning: Schema.optional(Schema.Struct({ enabled: Schema.Boolean })),
|
|
16
|
+
encryption: Schema.optional(Native),
|
|
17
|
+
retentionPolicy: Schema.optional(Native),
|
|
18
|
+
softDeletePolicy: Schema.optional(Native),
|
|
19
|
+
iamConfiguration: Schema.optional(Native),
|
|
20
|
+
labels: Schema.optional(Schema.Record(Schema.String, Schema.String)),
|
|
21
|
+
logging: Schema.optional(Native),
|
|
22
|
+
website: Schema.optional(Native),
|
|
23
|
+
autoclass: Schema.optional(Native)
|
|
24
|
+
});
|
|
25
|
+
const makeService = (storage) => {
|
|
26
|
+
const path = (bucket) => `${storage.config.apiEndpoint}/storage/v1/b/${encodeURIComponent(bucket)}`;
|
|
27
|
+
const get = Effect.fnUntraced(function* (input) {
|
|
28
|
+
const value = yield* decodeRequest(Schema.Struct({ bucket: Bucket }), input, "headBucket", "gcs");
|
|
29
|
+
const output = yield* jsonRequest(storage, "headBucket", false, {
|
|
30
|
+
uri: path(value.bucket),
|
|
31
|
+
json: true
|
|
32
|
+
});
|
|
33
|
+
return yield* decodeJson(Schema.Struct({
|
|
34
|
+
name: Schema.String,
|
|
35
|
+
metageneration: Schema.String.check(Schema.isPattern(/^\d+$/u)),
|
|
36
|
+
...Configuration.fields
|
|
37
|
+
}), output.body, "headBucket");
|
|
38
|
+
});
|
|
39
|
+
const plans = /* @__PURE__ */ new WeakMap();
|
|
40
|
+
return {
|
|
41
|
+
head: get,
|
|
42
|
+
iam: iam(storage),
|
|
43
|
+
listPage: Effect.fnUntraced(function* (input) {
|
|
44
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
45
|
+
project: Schema.NonEmptyString,
|
|
46
|
+
cursor: Schema.optional(Schema.String),
|
|
47
|
+
limit: Schema.optional(Schema.Int.check(Schema.isBetween({
|
|
48
|
+
minimum: 1,
|
|
49
|
+
maximum: 1e3
|
|
50
|
+
})))
|
|
51
|
+
}), input, "listBuckets", "gcs");
|
|
52
|
+
const output = yield* jsonRequest(storage, "listBuckets", false, {
|
|
53
|
+
uri: `${storage.config.apiEndpoint}/storage/v1/b`,
|
|
54
|
+
qs: {
|
|
55
|
+
project: value.project,
|
|
56
|
+
pageToken: value.cursor,
|
|
57
|
+
maxResults: value.limit ?? 1e3
|
|
58
|
+
},
|
|
59
|
+
json: true
|
|
60
|
+
});
|
|
61
|
+
return yield* decodeJson(Schema.Struct({
|
|
62
|
+
items: Schema.optional(Schema.Array(Native)),
|
|
63
|
+
nextPageToken: Schema.optional(Schema.String)
|
|
64
|
+
}), output.body, "listBuckets");
|
|
65
|
+
}),
|
|
66
|
+
create: Effect.fnUntraced(function* (input) {
|
|
67
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
68
|
+
bucket: Bucket,
|
|
69
|
+
project: Schema.NonEmptyString,
|
|
70
|
+
location: Schema.NonEmptyString
|
|
71
|
+
}), input, "createBucket", "gcs", true);
|
|
72
|
+
const output = yield* jsonRequest(storage, "createBucket", true, {
|
|
73
|
+
uri: `${storage.config.apiEndpoint}/storage/v1/b`,
|
|
74
|
+
method: "POST",
|
|
75
|
+
qs: { project: value.project },
|
|
76
|
+
json: {
|
|
77
|
+
name: value.bucket,
|
|
78
|
+
location: value.location
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return yield* decodeJson(Native, output.body, "createBucket");
|
|
82
|
+
}),
|
|
83
|
+
deleteEmpty: Effect.fnUntraced(function* (input) {
|
|
84
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
85
|
+
bucket: Bucket,
|
|
86
|
+
ifMetagenerationMatch: Schema.String.check(Schema.isPattern(/^\d+$/u))
|
|
87
|
+
}), input, "deleteBucket", "gcs", true);
|
|
88
|
+
yield* jsonRequest(storage, "deleteBucket", true, {
|
|
89
|
+
uri: path(value.bucket),
|
|
90
|
+
method: "DELETE",
|
|
91
|
+
qs: { ifMetagenerationMatch: value.ifMetagenerationMatch },
|
|
92
|
+
json: true
|
|
93
|
+
});
|
|
94
|
+
}),
|
|
95
|
+
configuration: {
|
|
96
|
+
get,
|
|
97
|
+
plan: Effect.fnUntraced(function* (input) {
|
|
98
|
+
const desired = yield* decodeRequest(Configuration, input.desired, "planConfiguration", "gcs");
|
|
99
|
+
const current = yield* get({ bucket: input.bucket });
|
|
100
|
+
const plan = {
|
|
101
|
+
bucket: current.name,
|
|
102
|
+
expectedMetageneration: current.metageneration,
|
|
103
|
+
desired: structuredClone(desired),
|
|
104
|
+
changes: Object.keys(desired).filter((key) => configurationState(current[key]) !== configurationState(desired[key]))
|
|
105
|
+
};
|
|
106
|
+
plans.set(plan, {
|
|
107
|
+
snapshot: configurationState(plan),
|
|
108
|
+
bucket: current.name,
|
|
109
|
+
metageneration: current.metageneration,
|
|
110
|
+
desired: structuredClone(desired)
|
|
111
|
+
});
|
|
112
|
+
return plan;
|
|
113
|
+
}),
|
|
114
|
+
apply: Effect.fnUntraced(function* (input) {
|
|
115
|
+
const saved = plans.get(input.plan);
|
|
116
|
+
if (!saved || configurationState(input.plan) !== saved.snapshot) return yield* storageError("applyConfiguration", "gcs", {
|
|
117
|
+
_tag: "InvalidInput",
|
|
118
|
+
field: "issued-plan"
|
|
119
|
+
}, "not-started");
|
|
120
|
+
if ([
|
|
121
|
+
"retentionPolicy",
|
|
122
|
+
"softDeletePolicy",
|
|
123
|
+
"iamConfiguration",
|
|
124
|
+
"encryption",
|
|
125
|
+
"lifecycle"
|
|
126
|
+
].some((key) => Object.hasOwn(saved.desired, key)) && (input.protectionChange?.intent !== "change-storage-protection" || !input.protectionChange.reason)) return yield* storageError("applyConfiguration", "gcs", {
|
|
127
|
+
_tag: "InvalidInput",
|
|
128
|
+
field: "protectionChange"
|
|
129
|
+
}, "not-started");
|
|
130
|
+
plans.delete(input.plan);
|
|
131
|
+
const output = yield* jsonRequest(storage, "applyConfiguration", true, {
|
|
132
|
+
uri: path(saved.bucket),
|
|
133
|
+
method: "PATCH",
|
|
134
|
+
qs: { ifMetagenerationMatch: saved.metageneration },
|
|
135
|
+
json: saved.desired
|
|
136
|
+
});
|
|
137
|
+
return yield* decodeJson(Native, output.body, "applyConfiguration");
|
|
138
|
+
})
|
|
139
|
+
},
|
|
140
|
+
lockRetentionPolicy: Effect.fnUntraced(function* (input) {
|
|
141
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
142
|
+
bucket: Bucket,
|
|
143
|
+
ifMetagenerationMatch: Schema.String.check(Schema.isPattern(/^\d+$/u)),
|
|
144
|
+
intent: Schema.Literal("irreversibly-lock-retention")
|
|
145
|
+
}), input, "lockRetentionPolicy", "gcs", true);
|
|
146
|
+
const output = yield* jsonRequest(storage, "lockRetentionPolicy", true, {
|
|
147
|
+
uri: `${path(value.bucket)}/lockRetentionPolicy`,
|
|
148
|
+
method: "POST",
|
|
149
|
+
qs: { ifMetagenerationMatch: value.ifMetagenerationMatch },
|
|
150
|
+
json: {}
|
|
151
|
+
});
|
|
152
|
+
return yield* decodeJson(Native, output.body, "lockRetentionPolicy");
|
|
153
|
+
}),
|
|
154
|
+
notifications: {
|
|
155
|
+
list: Effect.fnUntraced(function* (input) {
|
|
156
|
+
const value = yield* decodeRequest(Schema.Struct({ bucket: Bucket }), input, "listNotifications", "gcs");
|
|
157
|
+
return (yield* jsonRequest(storage, "listNotifications", false, {
|
|
158
|
+
uri: `${path(value.bucket)}/notificationConfigs`,
|
|
159
|
+
json: true
|
|
160
|
+
})).body;
|
|
161
|
+
}),
|
|
162
|
+
create: Effect.fnUntraced(function* (input) {
|
|
163
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
164
|
+
bucket: Bucket,
|
|
165
|
+
topic: Schema.NonEmptyString,
|
|
166
|
+
events: Schema.optional(Schema.Array(Schema.NonEmptyString))
|
|
167
|
+
}), input, "createNotification", "gcs", true);
|
|
168
|
+
return (yield* jsonRequest(storage, "createNotification", true, {
|
|
169
|
+
uri: `${path(value.bucket)}/notificationConfigs`,
|
|
170
|
+
method: "POST",
|
|
171
|
+
json: {
|
|
172
|
+
topic: value.topic,
|
|
173
|
+
payload_format: "JSON_API_V1",
|
|
174
|
+
event_types: value.events
|
|
175
|
+
}
|
|
176
|
+
})).body;
|
|
177
|
+
}),
|
|
178
|
+
delete: Effect.fnUntraced(function* (input) {
|
|
179
|
+
const value = yield* decodeRequest(Schema.Struct({
|
|
180
|
+
bucket: Bucket,
|
|
181
|
+
id: Schema.NonEmptyString
|
|
182
|
+
}), input, "deleteNotification", "gcs", true);
|
|
183
|
+
yield* jsonRequest(storage, "deleteNotification", true, {
|
|
184
|
+
uri: `${path(value.bucket)}/notificationConfigs/${encodeURIComponent(value.id)}`,
|
|
185
|
+
method: "DELETE",
|
|
186
|
+
json: true
|
|
187
|
+
});
|
|
188
|
+
})
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
const make = Effect.fnUntraced(function* (config) {
|
|
193
|
+
return makeService(yield* GcsStorage.make({
|
|
194
|
+
...config,
|
|
195
|
+
bucket: "administration"
|
|
196
|
+
}));
|
|
197
|
+
});
|
|
198
|
+
var GcsAdministration = class GcsAdministration extends Context.Service()("@effect-kit/storage/gcs/GcsAdministration") {
|
|
199
|
+
static make = make;
|
|
200
|
+
static layer(config) {
|
|
201
|
+
return Layer.effect(GcsAdministration, make(config));
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
export { GcsAdministration };
|
|
206
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","names":[],"sources":["../../src/providers/gcs/admin.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { configurationState } from \"../../lifecycle/configuration-state.js\";\nimport { iam } from \"./iam.js\";\nimport { GcsStorage } from \"./index.js\";\nimport type { GcsConfig, GcsStorageService } from \"./index.js\";\nimport { jsonRequest, decodeJson } from \"./transport.js\";\n\nconst Bucket = Schema.String.check(Schema.isPattern(/^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$/u));\nconst Native = Schema.Record(Schema.String, Schema.Unknown);\nconst Configuration = Schema.Struct({\n cors: Schema.optional(Schema.Array(Native)),\n lifecycle: Schema.optional(Native),\n versioning: Schema.optional(Schema.Struct({ enabled: Schema.Boolean })),\n encryption: Schema.optional(Native),\n retentionPolicy: Schema.optional(Native),\n softDeletePolicy: Schema.optional(Native),\n iamConfiguration: Schema.optional(Native),\n labels: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n logging: Schema.optional(Native),\n website: Schema.optional(Native),\n autoclass: Schema.optional(Native),\n});\nexport type GcsBucketConfiguration = typeof Configuration.Type;\nconst makeService = (storage: GcsStorageService) => {\n const path = (bucket: string) =>\n `${storage.config.apiEndpoint}/storage/v1/b/${encodeURIComponent(bucket)}`;\n const get = Effect.fnUntraced(function* (input: { readonly bucket: string }) {\n const value = yield* decodeRequest(\n Schema.Struct({ bucket: Bucket }),\n input,\n \"headBucket\",\n \"gcs\",\n );\n const output = yield* jsonRequest(storage, \"headBucket\", false, {\n uri: path(value.bucket),\n json: true,\n });\n return yield* decodeJson(\n Schema.Struct({\n name: Schema.String,\n metageneration: Schema.String.check(Schema.isPattern(/^\\d+$/u)),\n ...Configuration.fields,\n }),\n output.body,\n \"headBucket\",\n );\n });\n const plans = new WeakMap<\n object,\n { snapshot: string; bucket: string; metageneration: string; desired: GcsBucketConfiguration }\n >();\n return {\n head: get,\n iam: iam(storage),\n listPage: Effect.fnUntraced(function* (input: {\n readonly project: string;\n readonly cursor?: string;\n readonly limit?: number;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n project: Schema.NonEmptyString,\n cursor: Schema.optional(Schema.String),\n limit: Schema.optional(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1000 }))),\n }),\n input,\n \"listBuckets\",\n \"gcs\",\n );\n const output = yield* jsonRequest(storage, \"listBuckets\", false, {\n uri: `${storage.config.apiEndpoint}/storage/v1/b`,\n qs: { project: value.project, pageToken: value.cursor, maxResults: value.limit ?? 1000 },\n json: true,\n });\n return yield* decodeJson(\n Schema.Struct({\n items: Schema.optional(Schema.Array(Native)),\n nextPageToken: Schema.optional(Schema.String),\n }),\n output.body,\n \"listBuckets\",\n );\n }),\n create: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly project: string;\n readonly location: string;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n project: Schema.NonEmptyString,\n location: Schema.NonEmptyString,\n }),\n input,\n \"createBucket\",\n \"gcs\",\n true,\n );\n const output = yield* jsonRequest(storage, \"createBucket\", true, {\n uri: `${storage.config.apiEndpoint}/storage/v1/b`,\n method: \"POST\",\n qs: { project: value.project },\n json: { name: value.bucket, location: value.location },\n });\n return yield* decodeJson(Native, output.body, \"createBucket\");\n }),\n deleteEmpty: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly ifMetagenerationMatch: string;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n ifMetagenerationMatch: Schema.String.check(Schema.isPattern(/^\\d+$/u)),\n }),\n input,\n \"deleteBucket\",\n \"gcs\",\n true,\n );\n yield* jsonRequest(storage, \"deleteBucket\", true, {\n uri: path(value.bucket),\n method: \"DELETE\",\n qs: { ifMetagenerationMatch: value.ifMetagenerationMatch },\n json: true,\n });\n }),\n configuration: {\n get,\n plan: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly desired: GcsBucketConfiguration;\n }) {\n const desired = yield* decodeRequest(\n Configuration,\n input.desired,\n \"planConfiguration\",\n \"gcs\",\n );\n const current = yield* get({ bucket: input.bucket });\n const plan = {\n bucket: current.name,\n expectedMetageneration: current.metageneration,\n desired: structuredClone(desired),\n changes: Object.keys(desired).filter(\n (key) =>\n configurationState(current[key as keyof typeof current]) !==\n configurationState(desired[key as keyof typeof desired]),\n ),\n };\n plans.set(plan, {\n snapshot: configurationState(plan),\n bucket: current.name,\n metageneration: current.metageneration,\n desired: structuredClone(desired),\n });\n return plan;\n }),\n apply: Effect.fnUntraced(function* (input: {\n readonly plan: object;\n readonly protectionChange?: {\n readonly intent: \"change-storage-protection\";\n readonly reason: string;\n };\n }) {\n const saved = plans.get(input.plan);\n if (!saved || configurationState(input.plan) !== saved.snapshot)\n return yield* storageError(\n \"applyConfiguration\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"issued-plan\" },\n \"not-started\",\n );\n if (\n [\n \"retentionPolicy\",\n \"softDeletePolicy\",\n \"iamConfiguration\",\n \"encryption\",\n \"lifecycle\",\n ].some((key) => Object.hasOwn(saved.desired, key)) &&\n (input.protectionChange?.intent !== \"change-storage-protection\" ||\n !input.protectionChange.reason)\n )\n return yield* storageError(\n \"applyConfiguration\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"protectionChange\" },\n \"not-started\",\n );\n plans.delete(input.plan);\n const output = yield* jsonRequest(storage, \"applyConfiguration\", true, {\n uri: path(saved.bucket),\n method: \"PATCH\",\n qs: { ifMetagenerationMatch: saved.metageneration },\n json: saved.desired,\n });\n return yield* decodeJson(Native, output.body, \"applyConfiguration\");\n }),\n },\n lockRetentionPolicy: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly ifMetagenerationMatch: string;\n readonly intent: \"irreversibly-lock-retention\";\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n ifMetagenerationMatch: Schema.String.check(Schema.isPattern(/^\\d+$/u)),\n intent: Schema.Literal(\"irreversibly-lock-retention\"),\n }),\n input,\n \"lockRetentionPolicy\",\n \"gcs\",\n true,\n );\n const output = yield* jsonRequest(storage, \"lockRetentionPolicy\", true, {\n uri: `${path(value.bucket)}/lockRetentionPolicy`,\n method: \"POST\",\n qs: { ifMetagenerationMatch: value.ifMetagenerationMatch },\n json: {},\n });\n return yield* decodeJson(Native, output.body, \"lockRetentionPolicy\");\n }),\n notifications: {\n list: Effect.fnUntraced(function* (input: { readonly bucket: string }) {\n const value = yield* decodeRequest(\n Schema.Struct({ bucket: Bucket }),\n input,\n \"listNotifications\",\n \"gcs\",\n );\n return (yield* jsonRequest(storage, \"listNotifications\", false, {\n uri: `${path(value.bucket)}/notificationConfigs`,\n json: true,\n })).body;\n }),\n create: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly topic: string;\n readonly events?: ReadonlyArray<string>;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n topic: Schema.NonEmptyString,\n events: Schema.optional(Schema.Array(Schema.NonEmptyString)),\n }),\n input,\n \"createNotification\",\n \"gcs\",\n true,\n );\n return (yield* jsonRequest(storage, \"createNotification\", true, {\n uri: `${path(value.bucket)}/notificationConfigs`,\n method: \"POST\",\n json: { topic: value.topic, payload_format: \"JSON_API_V1\", event_types: value.events },\n })).body;\n }),\n delete: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly id: string;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({ bucket: Bucket, id: Schema.NonEmptyString }),\n input,\n \"deleteNotification\",\n \"gcs\",\n true,\n );\n yield* jsonRequest(storage, \"deleteNotification\", true, {\n uri: `${path(value.bucket)}/notificationConfigs/${encodeURIComponent(value.id)}`,\n method: \"DELETE\",\n json: true,\n });\n }),\n },\n };\n};\nconst make = Effect.fnUntraced(function* (config: Omit<GcsConfig, \"bucket\">) {\n return makeService(yield* GcsStorage.make({ ...config, bucket: \"administration\" }));\n});\nexport class GcsAdministration extends Context.Service<\n GcsAdministration,\n ReturnType<typeof makeService>\n>()(\"@effect-kit/storage/gcs/GcsAdministration\") {\n static readonly make = make;\n static layer(config: Omit<GcsConfig, \"bucket\">) {\n return Layer.effect(GcsAdministration, make(config));\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { StorageError } from "../core/errors.js";
|
|
2
|
+
import "../index.js";
|
|
3
|
+
import { Effect, Redacted } from "effect";
|
|
4
|
+
export declare namespace GcsEvents {
|
|
5
|
+
/** Accepts the Pub/Sub message after transport authentication and payload decoding. */
|
|
6
|
+
const decode: (payload: unknown, options: {
|
|
7
|
+
readonly bucket: string;
|
|
8
|
+
readonly storeId: string;
|
|
9
|
+
}) => Effect.Effect<{
|
|
10
|
+
readonly provider: string;
|
|
11
|
+
readonly kind: "delete-marker-created" | "metadata-updated" | "object-created" | "object-deleted" | "other" | "restore-completed" | "version-archived";
|
|
12
|
+
readonly ref: {
|
|
13
|
+
readonly storeId: string;
|
|
14
|
+
readonly key: string;
|
|
15
|
+
readonly version?: {
|
|
16
|
+
readonly _tag: "S3Version";
|
|
17
|
+
readonly id: string;
|
|
18
|
+
} | {
|
|
19
|
+
readonly _tag: "GcsGeneration";
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly metageneration?: string | undefined;
|
|
22
|
+
} | {
|
|
23
|
+
readonly _tag: "AzureVersion";
|
|
24
|
+
readonly id: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly _tag: "AzureSnapshot";
|
|
27
|
+
readonly id: string;
|
|
28
|
+
} | {
|
|
29
|
+
readonly _tag: "OpaqueVersion";
|
|
30
|
+
readonly provider: string;
|
|
31
|
+
readonly id: string;
|
|
32
|
+
} | undefined;
|
|
33
|
+
};
|
|
34
|
+
readonly occurredAt: import("effect/DateTime").Utc;
|
|
35
|
+
readonly id?: string | undefined;
|
|
36
|
+
readonly sequencer?: string | undefined;
|
|
37
|
+
readonly nativeType: string;
|
|
38
|
+
readonly native?: Redacted.Redacted<unknown> | undefined;
|
|
39
|
+
}[], StorageError, never>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { storageError } from "../core/errors.js";
|
|
2
|
+
import { decodeRequest } from "../internal/request-validation.js";
|
|
3
|
+
import { StorageEvent } from "../events.js";
|
|
4
|
+
import { decodeResponse } from "../internal/provider-response.js";
|
|
5
|
+
import { Effect, Redacted, Schema } from "effect";
|
|
6
|
+
|
|
7
|
+
// src/providers/gcs/events.ts
|
|
8
|
+
let GcsEvents;
|
|
9
|
+
(function(_GcsEvents) {
|
|
10
|
+
_GcsEvents.decode = Effect.fnUntraced(function* (payload, options) {
|
|
11
|
+
const value = yield* decodeResponse(Schema.Struct({
|
|
12
|
+
messageId: Schema.NonEmptyString,
|
|
13
|
+
publishTime: Schema.DateTimeUtcFromString,
|
|
14
|
+
attributes: Schema.Struct({
|
|
15
|
+
bucketId: Schema.NonEmptyString,
|
|
16
|
+
objectId: Schema.NonEmptyString,
|
|
17
|
+
objectGeneration: Schema.optional(Schema.String.check(Schema.isPattern(/^\d+$/u))),
|
|
18
|
+
eventType: Schema.NonEmptyString
|
|
19
|
+
})
|
|
20
|
+
}), payload, "decodeEvent", "gcs");
|
|
21
|
+
if (value.attributes.bucketId !== options.bucket) return yield* storageError("decodeEvent", "gcs", {
|
|
22
|
+
_tag: "InvalidInput",
|
|
23
|
+
field: "bucket"
|
|
24
|
+
});
|
|
25
|
+
return [yield* decodeRequest(StorageEvent, {
|
|
26
|
+
provider: "gcs",
|
|
27
|
+
kind: value.attributes.eventType === "OBJECT_FINALIZE" ? "object-created" : value.attributes.eventType === "OBJECT_DELETE" ? "object-deleted" : value.attributes.eventType === "OBJECT_ARCHIVE" ? "version-archived" : value.attributes.eventType === "OBJECT_METADATA_UPDATE" ? "metadata-updated" : "other",
|
|
28
|
+
ref: {
|
|
29
|
+
storeId: options.storeId,
|
|
30
|
+
key: value.attributes.objectId,
|
|
31
|
+
...value.attributes.objectGeneration ? { version: {
|
|
32
|
+
_tag: "GcsGeneration",
|
|
33
|
+
id: value.attributes.objectGeneration
|
|
34
|
+
} } : {}
|
|
35
|
+
},
|
|
36
|
+
occurredAt: value.publishTime,
|
|
37
|
+
id: value.messageId,
|
|
38
|
+
nativeType: value.attributes.eventType,
|
|
39
|
+
native: Redacted.make(payload)
|
|
40
|
+
}, "decodeEvent", "gcs")];
|
|
41
|
+
});
|
|
42
|
+
})(GcsEvents || (GcsEvents = {}));
|
|
43
|
+
|
|
44
|
+
export { GcsEvents };
|
|
45
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","names":[],"sources":["../../src/providers/gcs/events.ts"],"sourcesContent":["import { Effect, Redacted, Schema } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeResponse } from \"../../internal/provider-response.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { StorageEvent } from \"../../lifecycle/events.js\";\n\nexport namespace GcsEvents {\n /** Accepts the Pub/Sub message after transport authentication and payload decoding. */\n export const decode = Effect.fnUntraced(function* (\n payload: unknown,\n options: { readonly bucket: string; readonly storeId: string },\n ) {\n const value = yield* decodeResponse(\n Schema.Struct({\n messageId: Schema.NonEmptyString,\n publishTime: Schema.DateTimeUtcFromString,\n attributes: Schema.Struct({\n bucketId: Schema.NonEmptyString,\n objectId: Schema.NonEmptyString,\n objectGeneration: Schema.optional(Schema.String.check(Schema.isPattern(/^\\d+$/u))),\n eventType: Schema.NonEmptyString,\n }),\n }),\n payload,\n \"decodeEvent\",\n \"gcs\",\n );\n if (value.attributes.bucketId !== options.bucket)\n return yield* storageError(\"decodeEvent\", \"gcs\", { _tag: \"InvalidInput\", field: \"bucket\" });\n return [\n yield* decodeRequest(\n StorageEvent,\n {\n provider: \"gcs\",\n kind:\n value.attributes.eventType === \"OBJECT_FINALIZE\"\n ? \"object-created\"\n : value.attributes.eventType === \"OBJECT_DELETE\"\n ? \"object-deleted\"\n : value.attributes.eventType === \"OBJECT_ARCHIVE\"\n ? \"version-archived\"\n : value.attributes.eventType === \"OBJECT_METADATA_UPDATE\"\n ? \"metadata-updated\"\n : \"other\",\n ref: {\n storeId: options.storeId,\n key: value.attributes.objectId,\n ...(value.attributes.objectGeneration\n ? { version: { _tag: \"GcsGeneration\", id: value.attributes.objectGeneration } }\n : {}),\n },\n occurredAt: value.publishTime,\n id: value.messageId,\n nativeType: value.attributes.eventType,\n native: Redacted.make(payload),\n },\n \"decodeEvent\",\n \"gcs\",\n ),\n ];\n });\n}\n"],"mappings":";;;;;;;AAOO,IAAU;CAAV;qBAEiB,OAAO,WAAW,WACtC,SACA,SACA;EACA,MAAM,QAAQ,OAAO,eACnB,OAAO,OAAO;GACZ,WAAW,OAAO;GAClB,aAAa,OAAO;GACpB,YAAY,OAAO,OAAO;IACxB,UAAU,OAAO;IACjB,UAAU,OAAO;IACjB,kBAAkB,OAAO,SAAS,OAAO,OAAO,MAAM,OAAO,UAAU,QAAQ,CAAC,CAAC;IACjF,WAAW,OAAO;GACpB,CAAC;EACH,CAAC,GACD,SACA,eACA,KACF;EACA,IAAI,MAAM,WAAW,aAAa,QAAQ,QACxC,OAAO,OAAO,aAAa,eAAe,OAAO;GAAE,MAAM;GAAgB,OAAO;EAAS,CAAC;EAC5F,OAAO,CACL,OAAO,cACL,cACA;GACE,UAAU;GACV,MACE,MAAM,WAAW,cAAc,oBAC3B,mBACA,MAAM,WAAW,cAAc,kBAC7B,mBACA,MAAM,WAAW,cAAc,mBAC7B,qBACA,MAAM,WAAW,cAAc,2BAC7B,qBACA;GACZ,KAAK;IACH,SAAS,QAAQ;IACjB,KAAK,MAAM,WAAW;IACtB,GAAI,MAAM,WAAW,mBACjB,EAAE,SAAS;KAAE,MAAM;KAAiB,IAAI,MAAM,WAAW;IAAiB,EAAE,IAC5E,CAAC;GACP;GACA,YAAY,MAAM;GAClB,IAAI,MAAM;GACV,YAAY,MAAM,WAAW;GAC7B,QAAQ,SAAS,KAAK,OAAO;EAC/B,GACA,eACA,KACF,CACF;CACF,CAAC;EACF,8BAAD"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { StorageError } from "../core/errors.js";
|
|
2
|
+
import { VersionRef } from "../lifecycle.js";
|
|
3
|
+
import "../index.js";
|
|
4
|
+
import { GcsStorage, GcsStorageService } from "../gcs.js";
|
|
5
|
+
import { GcsStorageTier } from "../providers/gcs/tier.js";
|
|
6
|
+
import { Context, DateTime, Effect, Layer } from "effect";
|
|
7
|
+
declare const make: (storage: GcsStorageService) => {
|
|
8
|
+
setRetention: (input: {
|
|
9
|
+
readonly ref: {
|
|
10
|
+
readonly storeId: string;
|
|
11
|
+
readonly key: string;
|
|
12
|
+
readonly version: {
|
|
13
|
+
readonly _tag: "S3Version";
|
|
14
|
+
readonly id: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly _tag: "GcsGeneration";
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly metageneration?: string | undefined;
|
|
19
|
+
} | {
|
|
20
|
+
readonly _tag: "AzureVersion";
|
|
21
|
+
readonly id: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly _tag: "AzureSnapshot";
|
|
24
|
+
readonly id: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly _tag: "OpaqueVersion";
|
|
27
|
+
readonly provider: string;
|
|
28
|
+
readonly id: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
readonly mode: "Locked" | "Unlocked";
|
|
32
|
+
readonly retainUntil: DateTime.Utc;
|
|
33
|
+
readonly intent: "change-object-retention";
|
|
34
|
+
readonly override?: "override-unlocked-retention" | undefined;
|
|
35
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
36
|
+
inspect: (input: {
|
|
37
|
+
readonly ref: VersionRef;
|
|
38
|
+
}) => Effect.Effect<{
|
|
39
|
+
readonly temporaryHold?: boolean | undefined;
|
|
40
|
+
readonly eventBasedHold?: boolean | undefined;
|
|
41
|
+
readonly retentionExpirationTime?: string | undefined;
|
|
42
|
+
readonly retention?: {
|
|
43
|
+
readonly mode: string;
|
|
44
|
+
readonly retainUntilTime: string;
|
|
45
|
+
} | undefined;
|
|
46
|
+
readonly kmsKeyName?: string | undefined;
|
|
47
|
+
readonly customerEncryption?: {
|
|
48
|
+
readonly encryptionAlgorithm?: string | undefined;
|
|
49
|
+
readonly keySha256?: string | undefined;
|
|
50
|
+
} | undefined;
|
|
51
|
+
}, StorageError, never>;
|
|
52
|
+
setHolds: (input: {
|
|
53
|
+
readonly ref: {
|
|
54
|
+
readonly storeId: string;
|
|
55
|
+
readonly key: string;
|
|
56
|
+
readonly version: {
|
|
57
|
+
readonly _tag: "S3Version";
|
|
58
|
+
readonly id: string;
|
|
59
|
+
} | {
|
|
60
|
+
readonly _tag: "GcsGeneration";
|
|
61
|
+
readonly id: string;
|
|
62
|
+
readonly metageneration?: string | undefined;
|
|
63
|
+
} | {
|
|
64
|
+
readonly _tag: "AzureVersion";
|
|
65
|
+
readonly id: string;
|
|
66
|
+
} | {
|
|
67
|
+
readonly _tag: "AzureSnapshot";
|
|
68
|
+
readonly id: string;
|
|
69
|
+
} | {
|
|
70
|
+
readonly _tag: "OpaqueVersion";
|
|
71
|
+
readonly provider: string;
|
|
72
|
+
readonly id: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
readonly temporaryHold?: boolean | undefined;
|
|
76
|
+
readonly eventBasedHold?: boolean | undefined;
|
|
77
|
+
readonly releaseIntent?: "release-object-hold" | undefined;
|
|
78
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
79
|
+
};
|
|
80
|
+
declare const GcsProtection_base: Context.ServiceClass<GcsProtection, "@effect-kit/storage/gcs/GcsProtection", {
|
|
81
|
+
setRetention: (input: {
|
|
82
|
+
readonly ref: {
|
|
83
|
+
readonly storeId: string;
|
|
84
|
+
readonly key: string;
|
|
85
|
+
readonly version: {
|
|
86
|
+
readonly _tag: "S3Version";
|
|
87
|
+
readonly id: string;
|
|
88
|
+
} | {
|
|
89
|
+
readonly _tag: "GcsGeneration";
|
|
90
|
+
readonly id: string;
|
|
91
|
+
readonly metageneration?: string | undefined;
|
|
92
|
+
} | {
|
|
93
|
+
readonly _tag: "AzureVersion";
|
|
94
|
+
readonly id: string;
|
|
95
|
+
} | {
|
|
96
|
+
readonly _tag: "AzureSnapshot";
|
|
97
|
+
readonly id: string;
|
|
98
|
+
} | {
|
|
99
|
+
readonly _tag: "OpaqueVersion";
|
|
100
|
+
readonly provider: string;
|
|
101
|
+
readonly id: string;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
readonly mode: "Locked" | "Unlocked";
|
|
105
|
+
readonly retainUntil: DateTime.Utc;
|
|
106
|
+
readonly intent: "change-object-retention";
|
|
107
|
+
readonly override?: "override-unlocked-retention" | undefined;
|
|
108
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
109
|
+
inspect: (input: {
|
|
110
|
+
readonly ref: VersionRef;
|
|
111
|
+
}) => Effect.Effect<{
|
|
112
|
+
readonly temporaryHold?: boolean | undefined;
|
|
113
|
+
readonly eventBasedHold?: boolean | undefined;
|
|
114
|
+
readonly retentionExpirationTime?: string | undefined;
|
|
115
|
+
readonly retention?: {
|
|
116
|
+
readonly mode: string;
|
|
117
|
+
readonly retainUntilTime: string;
|
|
118
|
+
} | undefined;
|
|
119
|
+
readonly kmsKeyName?: string | undefined;
|
|
120
|
+
readonly customerEncryption?: {
|
|
121
|
+
readonly encryptionAlgorithm?: string | undefined;
|
|
122
|
+
readonly keySha256?: string | undefined;
|
|
123
|
+
} | undefined;
|
|
124
|
+
}, StorageError, never>;
|
|
125
|
+
setHolds: (input: {
|
|
126
|
+
readonly ref: {
|
|
127
|
+
readonly storeId: string;
|
|
128
|
+
readonly key: string;
|
|
129
|
+
readonly version: {
|
|
130
|
+
readonly _tag: "S3Version";
|
|
131
|
+
readonly id: string;
|
|
132
|
+
} | {
|
|
133
|
+
readonly _tag: "GcsGeneration";
|
|
134
|
+
readonly id: string;
|
|
135
|
+
readonly metageneration?: string | undefined;
|
|
136
|
+
} | {
|
|
137
|
+
readonly _tag: "AzureVersion";
|
|
138
|
+
readonly id: string;
|
|
139
|
+
} | {
|
|
140
|
+
readonly _tag: "AzureSnapshot";
|
|
141
|
+
readonly id: string;
|
|
142
|
+
} | {
|
|
143
|
+
readonly _tag: "OpaqueVersion";
|
|
144
|
+
readonly provider: string;
|
|
145
|
+
readonly id: string;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
readonly temporaryHold?: boolean | undefined;
|
|
149
|
+
readonly eventBasedHold?: boolean | undefined;
|
|
150
|
+
readonly releaseIntent?: "release-object-hold" | undefined;
|
|
151
|
+
}) => Effect.Effect<unknown, StorageError, never>;
|
|
152
|
+
}>;
|
|
153
|
+
export declare class GcsProtection extends GcsProtection_base {
|
|
154
|
+
static readonly make: typeof make;
|
|
155
|
+
static readonly layer: Layer.Layer<GcsProtection, never, GcsStorage>;
|
|
156
|
+
}
|
|
157
|
+
export { GcsStorageTier };
|
|
158
|
+
//# sourceMappingURL=governance.d.ts.map
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { storageError } from "../core/errors.js";
|
|
2
|
+
import { decodeRequest } from "../internal/request-validation.js";
|
|
3
|
+
import { decodeJson, jsonRequest } from "../providers/gcs/transport.js";
|
|
4
|
+
import { target } from "../providers/gcs/mapping.js";
|
|
5
|
+
import { GcsStorage } from "../gcs.js";
|
|
6
|
+
import { VersionRef } from "../lifecycle.js";
|
|
7
|
+
import { GcsStorageTier } from "../providers/gcs/tier.js";
|
|
8
|
+
import { Context, DateTime, Effect, Layer, Schema } from "effect";
|
|
9
|
+
|
|
10
|
+
// src/providers/gcs/governance.ts
|
|
11
|
+
const Request = Schema.Struct({
|
|
12
|
+
ref: VersionRef,
|
|
13
|
+
temporaryHold: Schema.optional(Schema.Boolean),
|
|
14
|
+
eventBasedHold: Schema.optional(Schema.Boolean),
|
|
15
|
+
releaseIntent: Schema.optional(Schema.Literal("release-object-hold"))
|
|
16
|
+
});
|
|
17
|
+
const Retention = Schema.Struct({
|
|
18
|
+
ref: VersionRef,
|
|
19
|
+
mode: Schema.Literals(["Locked", "Unlocked"]),
|
|
20
|
+
retainUntil: Schema.DateTimeUtc,
|
|
21
|
+
intent: Schema.Literal("change-object-retention"),
|
|
22
|
+
override: Schema.optional(Schema.Literal("override-unlocked-retention"))
|
|
23
|
+
});
|
|
24
|
+
const make = (storage) => ({
|
|
25
|
+
setRetention: Effect.fnUntraced(function* (input) {
|
|
26
|
+
const value = yield* decodeRequest(Retention, input, "setRetention", "gcs", true);
|
|
27
|
+
const address = yield* target(storage, { ref: value.ref }, "setRetention");
|
|
28
|
+
if (value.ref.version._tag !== "GcsGeneration" || !value.ref.version.metageneration || DateTime.toEpochMillis(value.retainUntil) <= DateTime.toEpochMillis(yield* DateTime.now)) return yield* storageError("setRetention", "gcs", {
|
|
29
|
+
_tag: "InvalidInput",
|
|
30
|
+
field: "metageneration-or-retainUntil"
|
|
31
|
+
}, "not-started");
|
|
32
|
+
return (yield* jsonRequest(storage, "setRetention", true, {
|
|
33
|
+
uri: address.uri,
|
|
34
|
+
method: "PATCH",
|
|
35
|
+
qs: {
|
|
36
|
+
...address.qs,
|
|
37
|
+
ifMetagenerationMatch: value.ref.version.metageneration,
|
|
38
|
+
...value.override ? { overrideUnlockedRetention: "true" } : {}
|
|
39
|
+
},
|
|
40
|
+
json: { retention: {
|
|
41
|
+
mode: value.mode,
|
|
42
|
+
retainUntilTime: DateTime.formatIso(value.retainUntil)
|
|
43
|
+
} }
|
|
44
|
+
})).body;
|
|
45
|
+
}),
|
|
46
|
+
inspect: Effect.fnUntraced(function* (input) {
|
|
47
|
+
const value = yield* decodeRequest(Schema.Struct({ ref: VersionRef }), input, "inspectProtection", "gcs");
|
|
48
|
+
const address = yield* target(storage, { ref: value.ref }, "inspectProtection");
|
|
49
|
+
const output = yield* jsonRequest(storage, "inspectProtection", false, {
|
|
50
|
+
uri: address.uri,
|
|
51
|
+
qs: address.qs,
|
|
52
|
+
json: true
|
|
53
|
+
});
|
|
54
|
+
return yield* decodeJson(Schema.Struct({
|
|
55
|
+
temporaryHold: Schema.optional(Schema.Boolean),
|
|
56
|
+
eventBasedHold: Schema.optional(Schema.Boolean),
|
|
57
|
+
retentionExpirationTime: Schema.optional(Schema.String),
|
|
58
|
+
retention: Schema.optional(Schema.Struct({
|
|
59
|
+
mode: Schema.String,
|
|
60
|
+
retainUntilTime: Schema.String
|
|
61
|
+
})),
|
|
62
|
+
kmsKeyName: Schema.optional(Schema.String),
|
|
63
|
+
customerEncryption: Schema.optional(Schema.Struct({
|
|
64
|
+
encryptionAlgorithm: Schema.optional(Schema.String),
|
|
65
|
+
keySha256: Schema.optional(Schema.String)
|
|
66
|
+
}))
|
|
67
|
+
}), output.body, "inspectProtection");
|
|
68
|
+
}),
|
|
69
|
+
setHolds: Effect.fnUntraced(function* (input) {
|
|
70
|
+
const value = yield* decodeRequest(Request, input, "setHolds", "gcs", true);
|
|
71
|
+
if ((value.temporaryHold === false || value.eventBasedHold === false) && !value.releaseIntent) return yield* storageError("setHolds", "gcs", {
|
|
72
|
+
_tag: "InvalidInput",
|
|
73
|
+
field: "releaseIntent"
|
|
74
|
+
}, "not-started");
|
|
75
|
+
const address = yield* target(storage, { ref: value.ref }, "setHolds");
|
|
76
|
+
if (value.ref.version._tag !== "GcsGeneration" || !value.ref.version.metageneration) return yield* storageError("setHolds", "gcs", {
|
|
77
|
+
_tag: "InvalidInput",
|
|
78
|
+
field: "metageneration"
|
|
79
|
+
}, "not-started");
|
|
80
|
+
return (yield* jsonRequest(storage, "setHolds", true, {
|
|
81
|
+
uri: address.uri,
|
|
82
|
+
method: "PATCH",
|
|
83
|
+
qs: {
|
|
84
|
+
...address.qs,
|
|
85
|
+
ifMetagenerationMatch: value.ref.version.metageneration
|
|
86
|
+
},
|
|
87
|
+
json: {
|
|
88
|
+
...value.temporaryHold !== void 0 ? { temporaryHold: value.temporaryHold } : {},
|
|
89
|
+
...value.eventBasedHold !== void 0 ? { eventBasedHold: value.eventBasedHold } : {}
|
|
90
|
+
}
|
|
91
|
+
})).body;
|
|
92
|
+
})
|
|
93
|
+
});
|
|
94
|
+
var GcsProtection = class GcsProtection extends Context.Service()("@effect-kit/storage/gcs/GcsProtection") {
|
|
95
|
+
static make = make;
|
|
96
|
+
static layer = Layer.effect(GcsProtection, Effect.map(GcsStorage, make));
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export { GcsProtection, GcsStorageTier };
|
|
100
|
+
//# sourceMappingURL=governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance.js","names":[],"sources":["../../src/providers/gcs/governance.ts"],"sourcesContent":["import { Context, DateTime, Effect, Layer, Schema } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { VersionRef } from \"../../lifecycle/index.js\";\nimport { GcsStorage } from \"./index.js\";\nimport type { GcsStorageService } from \"./index.js\";\nimport { target } from \"./mapping.js\";\nimport { jsonRequest, decodeJson } from \"./transport.js\";\n\nconst Request = Schema.Struct({\n ref: VersionRef,\n temporaryHold: Schema.optional(Schema.Boolean),\n eventBasedHold: Schema.optional(Schema.Boolean),\n releaseIntent: Schema.optional(Schema.Literal(\"release-object-hold\")),\n});\nconst Retention = Schema.Struct({\n ref: VersionRef,\n mode: Schema.Literals([\"Locked\", \"Unlocked\"]),\n retainUntil: Schema.DateTimeUtc,\n intent: Schema.Literal(\"change-object-retention\"),\n override: Schema.optional(Schema.Literal(\"override-unlocked-retention\")),\n});\nconst make = (storage: GcsStorageService) => ({\n setRetention: Effect.fnUntraced(function* (input: typeof Retention.Type) {\n const value = yield* decodeRequest(Retention, input, \"setRetention\", \"gcs\", true);\n const address = yield* target(storage, { ref: value.ref }, \"setRetention\");\n if (\n value.ref.version._tag !== \"GcsGeneration\" ||\n !value.ref.version.metageneration ||\n DateTime.toEpochMillis(value.retainUntil) <= DateTime.toEpochMillis(yield* DateTime.now)\n )\n return yield* storageError(\n \"setRetention\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"metageneration-or-retainUntil\" },\n \"not-started\",\n );\n return (yield* jsonRequest(storage, \"setRetention\", true, {\n uri: address.uri,\n method: \"PATCH\",\n qs: {\n ...address.qs,\n ifMetagenerationMatch: value.ref.version.metageneration,\n ...(value.override ? { overrideUnlockedRetention: \"true\" } : {}),\n },\n json: {\n retention: { mode: value.mode, retainUntilTime: DateTime.formatIso(value.retainUntil) },\n },\n })).body;\n }),\n inspect: Effect.fnUntraced(function* (input: { readonly ref: VersionRef }) {\n const value = yield* decodeRequest(\n Schema.Struct({ ref: VersionRef }),\n input,\n \"inspectProtection\",\n \"gcs\",\n );\n const address = yield* target(storage, { ref: value.ref }, \"inspectProtection\");\n const output = yield* jsonRequest(storage, \"inspectProtection\", false, {\n uri: address.uri,\n qs: address.qs,\n json: true,\n });\n return yield* decodeJson(\n Schema.Struct({\n temporaryHold: Schema.optional(Schema.Boolean),\n eventBasedHold: Schema.optional(Schema.Boolean),\n retentionExpirationTime: Schema.optional(Schema.String),\n retention: Schema.optional(\n Schema.Struct({ mode: Schema.String, retainUntilTime: Schema.String }),\n ),\n kmsKeyName: Schema.optional(Schema.String),\n customerEncryption: Schema.optional(\n Schema.Struct({\n encryptionAlgorithm: Schema.optional(Schema.String),\n keySha256: Schema.optional(Schema.String),\n }),\n ),\n }),\n output.body,\n \"inspectProtection\",\n );\n }),\n setHolds: Effect.fnUntraced(function* (input: typeof Request.Type) {\n const value = yield* decodeRequest(Request, input, \"setHolds\", \"gcs\", true);\n if ((value.temporaryHold === false || value.eventBasedHold === false) && !value.releaseIntent)\n return yield* storageError(\n \"setHolds\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"releaseIntent\" },\n \"not-started\",\n );\n const address = yield* target(storage, { ref: value.ref }, \"setHolds\");\n if (value.ref.version._tag !== \"GcsGeneration\" || !value.ref.version.metageneration)\n return yield* storageError(\n \"setHolds\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"metageneration\" },\n \"not-started\",\n );\n return (yield* jsonRequest(storage, \"setHolds\", true, {\n uri: address.uri,\n method: \"PATCH\",\n qs: { ...address.qs, ifMetagenerationMatch: value.ref.version.metageneration },\n json: {\n ...(value.temporaryHold !== undefined ? { temporaryHold: value.temporaryHold } : {}),\n ...(value.eventBasedHold !== undefined ? { eventBasedHold: value.eventBasedHold } : {}),\n },\n })).body;\n }),\n});\nexport class GcsProtection extends Context.Service<GcsProtection, ReturnType<typeof make>>()(\n \"@effect-kit/storage/gcs/GcsProtection\",\n) {\n static readonly make = make;\n static readonly layer = Layer.effect(GcsProtection, Effect.map(GcsStorage, make));\n}\n\nexport { GcsStorageTier } from \"./tier.js\";\n"],"mappings":"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"}
|