@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 @@
|
|
|
1
|
+
{"version":3,"file":"references.js","names":[],"sources":["../../../src/workflows/content/references.ts"],"sourcesContent":["import { Effect, Schema } from \"effect\";\nimport type { SecureRandom } from \"effect/crypto\";\n\nimport type { StorageService } from \"../../core/storage.js\";\nimport { digestText } from \"../../runtime/portable-hash.js\";\nimport { workflowError } from \"../store.js\";\nimport type { RecordStore } from \"../store.js\";\nimport {\n ContentId,\n ContentRecord,\n ReferenceEdge,\n ReferenceIntent,\n ReferenceName,\n ReferencePointer,\n} from \"./schema.js\";\n\nexport const contentKey = (id: string) => `content:${id}`;\nconst pointerKey = (reference: string) => `reference:${digestText(reference)}`;\nconst intentKey = (reference: string) => `intent:${digestText(reference)}`;\nexport const makeReferences = (\n store: RecordStore,\n binding: string,\n storage: StorageService,\n random: SecureRandom.SecureRandom[\"Service\"],\n) => {\n const load = Effect.fnUntraced(function* (id: string) {\n yield* Schema.decodeUnknownEffect(ContentId)(id).pipe(\n Effect.mapError(() => workflowError(\"InvalidContentId\")),\n );\n const record = yield* store.read(contentKey(id), ContentRecord);\n if (!record || record.binding !== binding) return yield* workflowError(\"ContentNotFound\");\n return record;\n });\n const reconcile = Effect.fnUntraced(function* (reference: string) {\n const intent = yield* store.read(intentKey(reference), ReferenceIntent);\n if (!intent || intent.state === \"completed\") return intent;\n const pointer = yield* store.read(pointerKey(reference), ReferencePointer);\n if (pointer?.intentId !== intent.id) return intent;\n if (intent.contentId && intent.edge !== undefined)\n yield* store.write(`${contentKey(intent.contentId)}:edge:${intent.edge}`, ReferenceEdge, {\n reference,\n intentId: intent.id,\n state: \"committed\",\n });\n const completed: ReferenceIntent = { ...intent, state: \"completed\" };\n yield* store.write(intentKey(reference), ReferenceIntent, completed);\n return completed;\n });\n const update = Effect.fnUntraced(function* (\n reference: string,\n contentId?: string,\n replace = false,\n ) {\n yield* Schema.decodeUnknownEffect(ReferenceName)(reference).pipe(\n Effect.mapError(() => workflowError(\"InvalidReference\")),\n );\n const pending = yield* reconcile(reference);\n if (pending?.state === \"pending\") return yield* workflowError(\"ReferenceOutcomeUnknown\");\n const previous = yield* store.read(pointerKey(reference), ReferencePointer);\n if (previous?.contentId === contentId && previous) return previous;\n if (contentId && previous?.contentId && !replace)\n return yield* workflowError(\"ReferenceConflict\");\n const intentId = yield* random.uuidV4();\n let edge: number | undefined;\n if (contentId) {\n const record = yield* load(contentId);\n if (record.state !== \"ready\" || !record.object)\n return yield* workflowError(\"ContentNotReady\");\n const head = yield* storage.head({ ref: record.object.ref });\n if (head.etag !== record.object.etag || head.size !== record.size)\n return yield* workflowError(\"ContentChanged\");\n edge = record.edgeCount;\n // Reserve and publish the edge before the pointer. Prepared edges conservatively block GC.\n yield* store.write(contentKey(contentId), ContentRecord, { ...record, edgeCount: edge + 1 });\n yield* store.write(`${contentKey(contentId)}:edge:${edge}`, ReferenceEdge, {\n reference,\n intentId,\n state: \"prepared\",\n });\n }\n const intent: ReferenceIntent = {\n id: intentId,\n reference,\n state: \"pending\",\n ...(contentId ? { contentId } : {}),\n ...(edge !== undefined ? { edge } : {}),\n };\n yield* store.write(intentKey(reference), ReferenceIntent, intent);\n const pointer = { reference, intentId, ...(contentId ? { contentId } : {}) };\n // A failed/unknown pointer write is never blindly replayed; reconcile observes this unique intent.\n yield* store.write(pointerKey(reference), ReferencePointer, pointer);\n yield* reconcile(reference);\n return pointer;\n });\n const reachable = Effect.fnUntraced(function* (record: ContentRecord) {\n for (let index = 0; index < record.edgeCount; index++) {\n const edge = yield* store.read(`${contentKey(record.id)}:edge:${index}`, ReferenceEdge);\n if (!edge) return true;\n if (edge.state === \"prepared\") return true;\n const pointer = yield* store.read(pointerKey(edge.reference), ReferencePointer);\n if (pointer?.contentId === record.id) return true;\n }\n return false;\n });\n const inspect = Effect.fnUntraced(function* (\n id: string,\n options: { readonly offset?: number; readonly limit?: number } = {},\n ) {\n const record = yield* load(id);\n const offset = options.offset ?? 0;\n const limit = options.limit ?? 100;\n if (\n !Number.isSafeInteger(offset) ||\n offset < 0 ||\n !Number.isSafeInteger(limit) ||\n limit < 1 ||\n limit > 1000\n )\n return yield* workflowError(\"InvalidPage\");\n const references: string[] = [];\n const pending: string[] = [];\n const end = Math.min(record.edgeCount, offset + limit);\n for (let index = offset; index < end; index++) {\n const edge = yield* store.read(`${contentKey(id)}:edge:${index}`, ReferenceEdge);\n if (!edge) {\n pending.push(\"unknown\");\n continue;\n }\n if (edge.state === \"prepared\") pending.push(edge.reference);\n const pointer = yield* store.read(pointerKey(edge.reference), ReferencePointer);\n if (pointer?.contentId === id && !references.includes(edge.reference))\n references.push(edge.reference);\n }\n return { references, pending, ...(end < record.edgeCount ? { nextOffset: end } : {}) };\n });\n return { load, update, reconcile, reachable, inspect };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export declare const ContentId: Schema.String;
|
|
3
|
+
export declare const ContentRecord: Schema.Struct<{
|
|
4
|
+
readonly id: Schema.String;
|
|
5
|
+
readonly binding: Schema.String;
|
|
6
|
+
readonly generation: Schema.Natural;
|
|
7
|
+
readonly state: Schema.Literals<readonly ["writing", "ready", "deleting", "deleted"]>;
|
|
8
|
+
readonly size: Schema.Natural;
|
|
9
|
+
readonly createdAt: Schema.Number;
|
|
10
|
+
readonly retainUntil: Schema.Number;
|
|
11
|
+
readonly edgeCount: Schema.Natural;
|
|
12
|
+
readonly object: Schema.optional<Schema.Struct<{
|
|
13
|
+
readonly contentType: Schema.optional<Schema.String>;
|
|
14
|
+
readonly contentEncoding: Schema.optional<Schema.String>;
|
|
15
|
+
readonly contentLanguage: Schema.optional<Schema.String>;
|
|
16
|
+
readonly contentDisposition: Schema.optional<Schema.String>;
|
|
17
|
+
readonly cacheControl: Schema.optional<Schema.String>;
|
|
18
|
+
readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
19
|
+
readonly ref: Schema.Struct<{
|
|
20
|
+
readonly storeId: Schema.NonEmptyString;
|
|
21
|
+
readonly key: Schema.NonEmptyString;
|
|
22
|
+
readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
23
|
+
readonly id: Schema.NonEmptyString;
|
|
24
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
25
|
+
readonly id: Schema.NonEmptyString;
|
|
26
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
27
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
28
|
+
readonly id: Schema.NonEmptyString;
|
|
29
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
30
|
+
readonly id: Schema.NonEmptyString;
|
|
31
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
32
|
+
readonly provider: Schema.NonEmptyString;
|
|
33
|
+
readonly id: Schema.NonEmptyString;
|
|
34
|
+
}>]>>;
|
|
35
|
+
}>;
|
|
36
|
+
readonly size: Schema.optional<Schema.Natural>;
|
|
37
|
+
readonly etag: Schema.optional<Schema.String>;
|
|
38
|
+
readonly lastModified: Schema.optional<Schema.DateTimeUtcFromString>;
|
|
39
|
+
readonly checksums: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
40
|
+
readonly algorithm: Schema.NonEmptyString;
|
|
41
|
+
readonly encoding: Schema.Literals<readonly ["hex", "base64"]>;
|
|
42
|
+
readonly scope: Schema.Literals<readonly ["full-object", "composite"]>;
|
|
43
|
+
readonly value: Schema.NonEmptyString;
|
|
44
|
+
readonly partCount: Schema.optional<Schema.Int>;
|
|
45
|
+
}>>>;
|
|
46
|
+
readonly storageClass: Schema.optional<Schema.NonEmptyString>;
|
|
47
|
+
}>>;
|
|
48
|
+
}>;
|
|
49
|
+
export type ContentRecord = typeof ContentRecord.Type;
|
|
50
|
+
export declare const CollectionPlan: Schema.Struct<{
|
|
51
|
+
readonly id: Schema.String;
|
|
52
|
+
readonly binding: Schema.String;
|
|
53
|
+
readonly cutoff: Schema.Number;
|
|
54
|
+
readonly count: Schema.Natural;
|
|
55
|
+
readonly state: Schema.Literals<readonly ["planned", "applying", "completed", "partial"]>;
|
|
56
|
+
}>;
|
|
57
|
+
export type CollectionPlan = typeof CollectionPlan.Type;
|
|
58
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ObjectMetadata } from "../../core/object.js";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
|
|
4
|
+
// src/workflows/content/schema.ts
|
|
5
|
+
const ContentId = Schema.String.check(Schema.isPattern(/^[a-f0-9]{64}$/u));
|
|
6
|
+
const ContentRecord = Schema.Struct({
|
|
7
|
+
id: ContentId,
|
|
8
|
+
binding: Schema.String,
|
|
9
|
+
generation: Schema.Natural,
|
|
10
|
+
state: Schema.Literals([
|
|
11
|
+
"writing",
|
|
12
|
+
"ready",
|
|
13
|
+
"deleting",
|
|
14
|
+
"deleted"
|
|
15
|
+
]),
|
|
16
|
+
size: Schema.Natural,
|
|
17
|
+
createdAt: Schema.Number,
|
|
18
|
+
retainUntil: Schema.Number,
|
|
19
|
+
edgeCount: Schema.Natural,
|
|
20
|
+
object: Schema.optional(ObjectMetadata)
|
|
21
|
+
});
|
|
22
|
+
const ReferenceName = Schema.String.check(Schema.isMinLength(1), Schema.makeFilter((value) => value.isWellFormed()), Schema.isMaxLength(256), Schema.isPattern(/^[^\0\r\n]+$/u));
|
|
23
|
+
const ReferencePointer = Schema.Struct({
|
|
24
|
+
reference: ReferenceName,
|
|
25
|
+
intentId: Schema.String,
|
|
26
|
+
contentId: Schema.optional(ContentId)
|
|
27
|
+
});
|
|
28
|
+
const ReferenceIntent = Schema.Struct({
|
|
29
|
+
id: Schema.String,
|
|
30
|
+
reference: ReferenceName,
|
|
31
|
+
contentId: Schema.optional(ContentId),
|
|
32
|
+
edge: Schema.optional(Schema.Natural),
|
|
33
|
+
state: Schema.Literals(["pending", "completed"])
|
|
34
|
+
});
|
|
35
|
+
const ReferenceEdge = Schema.Struct({
|
|
36
|
+
reference: ReferenceName,
|
|
37
|
+
intentId: Schema.String,
|
|
38
|
+
state: Schema.Literals(["prepared", "committed"])
|
|
39
|
+
});
|
|
40
|
+
const CollectionPlan = Schema.Struct({
|
|
41
|
+
id: Schema.String,
|
|
42
|
+
binding: Schema.String,
|
|
43
|
+
cutoff: Schema.Number,
|
|
44
|
+
count: Schema.Natural,
|
|
45
|
+
state: Schema.Literals([
|
|
46
|
+
"planned",
|
|
47
|
+
"applying",
|
|
48
|
+
"completed",
|
|
49
|
+
"partial"
|
|
50
|
+
])
|
|
51
|
+
});
|
|
52
|
+
const CollectionEntry = Schema.Struct({
|
|
53
|
+
contentId: ContentId,
|
|
54
|
+
generation: Schema.Natural,
|
|
55
|
+
state: Schema.Literals([
|
|
56
|
+
"planned",
|
|
57
|
+
"collected",
|
|
58
|
+
"retained",
|
|
59
|
+
"unknown"
|
|
60
|
+
])
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export { CollectionEntry, CollectionPlan, ContentId, ContentRecord, ReferenceEdge, ReferenceIntent, ReferenceName, ReferencePointer };
|
|
64
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../src/workflows/content/schema.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nimport { ObjectMetadata } from \"../../core/object.js\";\nexport const ContentId = Schema.String.check(Schema.isPattern(/^[a-f0-9]{64}$/u));\nexport const ContentRecord = Schema.Struct({\n id: ContentId,\n binding: Schema.String,\n generation: Schema.Natural,\n state: Schema.Literals([\"writing\", \"ready\", \"deleting\", \"deleted\"]),\n size: Schema.Natural,\n createdAt: Schema.Number,\n retainUntil: Schema.Number,\n edgeCount: Schema.Natural,\n object: Schema.optional(ObjectMetadata),\n});\nexport type ContentRecord = typeof ContentRecord.Type;\nexport const ReferenceName = Schema.String.check(\n Schema.isMinLength(1),\n Schema.makeFilter<string>((value) => value.isWellFormed()),\n Schema.isMaxLength(256),\n Schema.isPattern(/^[^\\0\\r\\n]+$/u),\n);\nexport const ReferencePointer = Schema.Struct({\n reference: ReferenceName,\n intentId: Schema.String,\n contentId: Schema.optional(ContentId),\n});\nexport const ReferenceIntent = Schema.Struct({\n id: Schema.String,\n reference: ReferenceName,\n contentId: Schema.optional(ContentId),\n edge: Schema.optional(Schema.Natural),\n state: Schema.Literals([\"pending\", \"completed\"]),\n});\nexport type ReferenceIntent = typeof ReferenceIntent.Type;\nexport const ReferenceEdge = Schema.Struct({\n reference: ReferenceName,\n intentId: Schema.String,\n state: Schema.Literals([\"prepared\", \"committed\"]),\n});\nexport const CollectionPlan = Schema.Struct({\n id: Schema.String,\n binding: Schema.String,\n cutoff: Schema.Number,\n count: Schema.Natural,\n state: Schema.Literals([\"planned\", \"applying\", \"completed\", \"partial\"]),\n});\nexport type CollectionPlan = typeof CollectionPlan.Type;\nexport const CollectionEntry = Schema.Struct({\n contentId: ContentId,\n generation: Schema.Natural,\n state: Schema.Literals([\"planned\", \"collected\", \"retained\", \"unknown\"]),\n});\n"],"mappings":";;;;AAGA,MAAa,YAAY,OAAO,OAAO,MAAM,OAAO,UAAU,iBAAiB,CAAC;AAChF,MAAa,gBAAgB,OAAO,OAAO;CACzC,IAAI;CACJ,SAAS,OAAO;CAChB,YAAY,OAAO;CACnB,OAAO,OAAO,SAAS;EAAC;EAAW;EAAS;EAAY;CAAS,CAAC;CAClE,MAAM,OAAO;CACb,WAAW,OAAO;CAClB,aAAa,OAAO;CACpB,WAAW,OAAO;CAClB,QAAQ,OAAO,SAAS,cAAc;AACxC,CAAC;AAED,MAAa,gBAAgB,OAAO,OAAO,MACzC,OAAO,YAAY,CAAC,GACpB,OAAO,YAAoB,UAAU,MAAM,aAAa,CAAC,GACzD,OAAO,YAAY,GAAG,GACtB,OAAO,UAAU,eAAe,CAClC;AACA,MAAa,mBAAmB,OAAO,OAAO;CAC5C,WAAW;CACX,UAAU,OAAO;CACjB,WAAW,OAAO,SAAS,SAAS;AACtC,CAAC;AACD,MAAa,kBAAkB,OAAO,OAAO;CAC3C,IAAI,OAAO;CACX,WAAW;CACX,WAAW,OAAO,SAAS,SAAS;CACpC,MAAM,OAAO,SAAS,OAAO,OAAO;CACpC,OAAO,OAAO,SAAS,CAAC,WAAW,WAAW,CAAC;AACjD,CAAC;AAED,MAAa,gBAAgB,OAAO,OAAO;CACzC,WAAW;CACX,UAAU,OAAO;CACjB,OAAO,OAAO,SAAS,CAAC,YAAY,WAAW,CAAC;AAClD,CAAC;AACD,MAAa,iBAAiB,OAAO,OAAO;CAC1C,IAAI,OAAO;CACX,SAAS,OAAO;CAChB,QAAQ,OAAO;CACf,OAAO,OAAO;CACd,OAAO,OAAO,SAAS;EAAC;EAAW;EAAY;EAAa;CAAS,CAAC;AACxE,CAAC;AAED,MAAa,kBAAkB,OAAO,OAAO;CAC3C,WAAW;CACX,YAAY,OAAO;CACnB,OAAO,OAAO,SAAS;EAAC;EAAW;EAAa;EAAY;CAAS,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Storage } from "../core/storage.js";
|
|
2
|
+
import { TransferDriver } from "../transfers/dependencies.js";
|
|
3
|
+
import { workflowError } from "./store.js";
|
|
4
|
+
import { Context, Effect, Layer } from "effect";
|
|
5
|
+
|
|
6
|
+
// src/workflows/endpoint.ts
|
|
7
|
+
/** Resolve each role separately and preserve the provider's exact enforced Storage instance. */
|
|
8
|
+
const buildEndpoint = Effect.fnUntraced(function* (provider) {
|
|
9
|
+
const context = yield* Layer.build(provider);
|
|
10
|
+
const endpoint = Context.get(context, TransferDriver);
|
|
11
|
+
if (Context.get(context, Storage) !== endpoint.storage) return yield* workflowError("MismatchedProviderLayer");
|
|
12
|
+
return endpoint;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export { buildEndpoint };
|
|
16
|
+
//# sourceMappingURL=endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.js","names":[],"sources":["../../src/workflows/endpoint.ts"],"sourcesContent":["import { Context, Effect, Layer } from \"effect\";\n\nimport { Storage } from \"../core/storage.js\";\nimport { TransferDriver } from \"../transfers/dependencies.js\";\nimport { workflowError } from \"./store.js\";\n\n/** Resolve each role separately and preserve the provider's exact enforced Storage instance. */\nexport const buildEndpoint = Effect.fnUntraced(function* <E, R>(\n provider: Layer.Layer<Storage | TransferDriver, E, R>,\n) {\n const context = yield* Layer.build(provider);\n const endpoint = Context.get(context, TransferDriver);\n if (Context.get(context, Storage) !== endpoint.storage)\n return yield* workflowError(\"MismatchedProviderLayer\");\n return endpoint;\n});\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,OAAO,WAAW,WAC7C,UACA;CACA,MAAM,UAAU,OAAO,MAAM,MAAM,QAAQ;CAC3C,MAAM,WAAW,QAAQ,IAAI,SAAS,cAAc;CACpD,IAAI,QAAQ,IAAI,SAAS,OAAO,MAAM,SAAS,SAC7C,OAAO,OAAO,cAAc,yBAAyB;CACvD,OAAO;AACT,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { StorageError } from "../../core/errors.js";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
export declare const MigrationId: Schema.String;
|
|
4
|
+
export declare const MigrationRequest: Schema.Struct<{
|
|
5
|
+
readonly id: Schema.optional<Schema.String>;
|
|
6
|
+
readonly inventoryId: Schema.optional<Schema.NonEmptyString>;
|
|
7
|
+
readonly prefix: Schema.String;
|
|
8
|
+
readonly destinationPrefix: Schema.optional<Schema.String>;
|
|
9
|
+
readonly conflict: Schema.Literals<readonly ["fail", "skip", "replace-if-unchanged"]>;
|
|
10
|
+
readonly deleteSource: Schema.Boolean;
|
|
11
|
+
readonly deleteExtraneous: Schema.optional<Schema.Boolean>;
|
|
12
|
+
}>;
|
|
13
|
+
export type MigrationRequest = typeof MigrationRequest.Type;
|
|
14
|
+
export declare const MigrationPlan: Schema.Struct<{
|
|
15
|
+
readonly id: Schema.String;
|
|
16
|
+
readonly binding: Schema.String;
|
|
17
|
+
readonly request: Schema.Struct<{
|
|
18
|
+
readonly id: Schema.optional<Schema.String>;
|
|
19
|
+
readonly inventoryId: Schema.optional<Schema.NonEmptyString>;
|
|
20
|
+
readonly prefix: Schema.String;
|
|
21
|
+
readonly destinationPrefix: Schema.optional<Schema.String>;
|
|
22
|
+
readonly conflict: Schema.Literals<readonly ["fail", "skip", "replace-if-unchanged"]>;
|
|
23
|
+
readonly deleteSource: Schema.Boolean;
|
|
24
|
+
readonly deleteExtraneous: Schema.optional<Schema.Boolean>;
|
|
25
|
+
}>;
|
|
26
|
+
readonly state: Schema.Literals<readonly ["planning", "planned", "applying", "completed", "partial"]>;
|
|
27
|
+
readonly count: Schema.Natural;
|
|
28
|
+
readonly createdAt: Schema.Number;
|
|
29
|
+
}>;
|
|
30
|
+
export type MigrationPlan = typeof MigrationPlan.Type;
|
|
31
|
+
export declare const MigrationEntry: Schema.Struct<{
|
|
32
|
+
readonly index: Schema.Natural;
|
|
33
|
+
readonly action: Schema.Literals<readonly ["copy", "delete"]>;
|
|
34
|
+
readonly source: Schema.Struct<{
|
|
35
|
+
readonly contentType: Schema.optional<Schema.String>;
|
|
36
|
+
readonly contentEncoding: Schema.optional<Schema.String>;
|
|
37
|
+
readonly contentLanguage: Schema.optional<Schema.String>;
|
|
38
|
+
readonly contentDisposition: Schema.optional<Schema.String>;
|
|
39
|
+
readonly cacheControl: Schema.optional<Schema.String>;
|
|
40
|
+
readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
41
|
+
readonly ref: Schema.Struct<{
|
|
42
|
+
readonly storeId: Schema.NonEmptyString;
|
|
43
|
+
readonly key: Schema.NonEmptyString;
|
|
44
|
+
readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
45
|
+
readonly id: Schema.NonEmptyString;
|
|
46
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
47
|
+
readonly id: Schema.NonEmptyString;
|
|
48
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
49
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
50
|
+
readonly id: Schema.NonEmptyString;
|
|
51
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
52
|
+
readonly id: Schema.NonEmptyString;
|
|
53
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
54
|
+
readonly provider: Schema.NonEmptyString;
|
|
55
|
+
readonly id: Schema.NonEmptyString;
|
|
56
|
+
}>]>>;
|
|
57
|
+
}>;
|
|
58
|
+
readonly size: Schema.optional<Schema.Natural>;
|
|
59
|
+
readonly etag: Schema.optional<Schema.String>;
|
|
60
|
+
readonly lastModified: Schema.optional<Schema.DateTimeUtcFromString>;
|
|
61
|
+
readonly checksums: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
62
|
+
readonly algorithm: Schema.NonEmptyString;
|
|
63
|
+
readonly encoding: Schema.Literals<readonly ["hex", "base64"]>;
|
|
64
|
+
readonly scope: Schema.Literals<readonly ["full-object", "composite"]>;
|
|
65
|
+
readonly value: Schema.NonEmptyString;
|
|
66
|
+
readonly partCount: Schema.optional<Schema.Int>;
|
|
67
|
+
}>>>;
|
|
68
|
+
readonly storageClass: Schema.optional<Schema.NonEmptyString>;
|
|
69
|
+
}>;
|
|
70
|
+
readonly destinationKey: Schema.String;
|
|
71
|
+
readonly previous: Schema.optional<Schema.Struct<{
|
|
72
|
+
readonly contentType: Schema.optional<Schema.String>;
|
|
73
|
+
readonly contentEncoding: Schema.optional<Schema.String>;
|
|
74
|
+
readonly contentLanguage: Schema.optional<Schema.String>;
|
|
75
|
+
readonly contentDisposition: Schema.optional<Schema.String>;
|
|
76
|
+
readonly cacheControl: Schema.optional<Schema.String>;
|
|
77
|
+
readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
78
|
+
readonly ref: Schema.Struct<{
|
|
79
|
+
readonly storeId: Schema.NonEmptyString;
|
|
80
|
+
readonly key: Schema.NonEmptyString;
|
|
81
|
+
readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
82
|
+
readonly id: Schema.NonEmptyString;
|
|
83
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
84
|
+
readonly id: Schema.NonEmptyString;
|
|
85
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
86
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
87
|
+
readonly id: Schema.NonEmptyString;
|
|
88
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
89
|
+
readonly id: Schema.NonEmptyString;
|
|
90
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
91
|
+
readonly provider: Schema.NonEmptyString;
|
|
92
|
+
readonly id: Schema.NonEmptyString;
|
|
93
|
+
}>]>>;
|
|
94
|
+
}>;
|
|
95
|
+
readonly size: Schema.optional<Schema.Natural>;
|
|
96
|
+
readonly etag: Schema.optional<Schema.String>;
|
|
97
|
+
readonly lastModified: Schema.optional<Schema.DateTimeUtcFromString>;
|
|
98
|
+
readonly checksums: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
99
|
+
readonly algorithm: Schema.NonEmptyString;
|
|
100
|
+
readonly encoding: Schema.Literals<readonly ["hex", "base64"]>;
|
|
101
|
+
readonly scope: Schema.Literals<readonly ["full-object", "composite"]>;
|
|
102
|
+
readonly value: Schema.NonEmptyString;
|
|
103
|
+
readonly partCount: Schema.optional<Schema.Int>;
|
|
104
|
+
}>>>;
|
|
105
|
+
readonly storageClass: Schema.optional<Schema.NonEmptyString>;
|
|
106
|
+
}>>;
|
|
107
|
+
readonly sha256: Schema.String;
|
|
108
|
+
readonly state: Schema.Literals<readonly ["planned", "skipped", "copying", "copied", "deleting", "completed", "conflict", "unknown", "failed"]>;
|
|
109
|
+
readonly destination: Schema.optional<Schema.Struct<{
|
|
110
|
+
readonly contentType: Schema.optional<Schema.String>;
|
|
111
|
+
readonly contentEncoding: Schema.optional<Schema.String>;
|
|
112
|
+
readonly contentLanguage: Schema.optional<Schema.String>;
|
|
113
|
+
readonly contentDisposition: Schema.optional<Schema.String>;
|
|
114
|
+
readonly cacheControl: Schema.optional<Schema.String>;
|
|
115
|
+
readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
116
|
+
readonly ref: Schema.Struct<{
|
|
117
|
+
readonly storeId: Schema.NonEmptyString;
|
|
118
|
+
readonly key: Schema.NonEmptyString;
|
|
119
|
+
readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
|
|
120
|
+
readonly id: Schema.NonEmptyString;
|
|
121
|
+
}>, Schema.TaggedStruct<"GcsGeneration", {
|
|
122
|
+
readonly id: Schema.NonEmptyString;
|
|
123
|
+
readonly metageneration: Schema.optional<Schema.NonEmptyString>;
|
|
124
|
+
}>, Schema.TaggedStruct<"AzureVersion", {
|
|
125
|
+
readonly id: Schema.NonEmptyString;
|
|
126
|
+
}>, Schema.TaggedStruct<"AzureSnapshot", {
|
|
127
|
+
readonly id: Schema.NonEmptyString;
|
|
128
|
+
}>, Schema.TaggedStruct<"OpaqueVersion", {
|
|
129
|
+
readonly provider: Schema.NonEmptyString;
|
|
130
|
+
readonly id: Schema.NonEmptyString;
|
|
131
|
+
}>]>>;
|
|
132
|
+
}>;
|
|
133
|
+
readonly size: Schema.optional<Schema.Natural>;
|
|
134
|
+
readonly etag: Schema.optional<Schema.String>;
|
|
135
|
+
readonly lastModified: Schema.optional<Schema.DateTimeUtcFromString>;
|
|
136
|
+
readonly checksums: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
137
|
+
readonly algorithm: Schema.NonEmptyString;
|
|
138
|
+
readonly encoding: Schema.Literals<readonly ["hex", "base64"]>;
|
|
139
|
+
readonly scope: Schema.Literals<readonly ["full-object", "composite"]>;
|
|
140
|
+
readonly value: Schema.NonEmptyString;
|
|
141
|
+
readonly partCount: Schema.optional<Schema.Int>;
|
|
142
|
+
}>>>;
|
|
143
|
+
readonly storageClass: Schema.optional<Schema.NonEmptyString>;
|
|
144
|
+
}>>;
|
|
145
|
+
readonly strategy: Schema.optional<Schema.String>;
|
|
146
|
+
readonly error: Schema.optional<typeof StorageError>;
|
|
147
|
+
}>;
|
|
148
|
+
export type MigrationEntry = typeof MigrationEntry.Type;
|
|
149
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ObjectMetadata } from "../../core/object.js";
|
|
2
|
+
import { StorageError } from "../../core/errors.js";
|
|
3
|
+
import { Schema } from "effect";
|
|
4
|
+
|
|
5
|
+
// src/workflows/migrations/schema.ts
|
|
6
|
+
const MigrationId = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_-]{1,128}$/u));
|
|
7
|
+
const MigrationRequest = Schema.Struct({
|
|
8
|
+
id: Schema.optional(MigrationId),
|
|
9
|
+
inventoryId: Schema.optional(Schema.NonEmptyString),
|
|
10
|
+
prefix: Schema.String,
|
|
11
|
+
destinationPrefix: Schema.optional(Schema.String),
|
|
12
|
+
conflict: Schema.Literals([
|
|
13
|
+
"fail",
|
|
14
|
+
"skip",
|
|
15
|
+
"replace-if-unchanged"
|
|
16
|
+
]),
|
|
17
|
+
deleteSource: Schema.Boolean,
|
|
18
|
+
deleteExtraneous: Schema.optional(Schema.Boolean)
|
|
19
|
+
});
|
|
20
|
+
const MigrationPlan = Schema.Struct({
|
|
21
|
+
id: MigrationId,
|
|
22
|
+
binding: Schema.String,
|
|
23
|
+
request: MigrationRequest,
|
|
24
|
+
state: Schema.Literals([
|
|
25
|
+
"planning",
|
|
26
|
+
"planned",
|
|
27
|
+
"applying",
|
|
28
|
+
"completed",
|
|
29
|
+
"partial"
|
|
30
|
+
]),
|
|
31
|
+
count: Schema.Natural,
|
|
32
|
+
createdAt: Schema.Number
|
|
33
|
+
});
|
|
34
|
+
const MigrationEntry = Schema.Struct({
|
|
35
|
+
index: Schema.Natural,
|
|
36
|
+
action: Schema.Literals(["copy", "delete"]),
|
|
37
|
+
source: ObjectMetadata,
|
|
38
|
+
destinationKey: Schema.String,
|
|
39
|
+
previous: Schema.optional(ObjectMetadata),
|
|
40
|
+
sha256: Schema.String,
|
|
41
|
+
state: Schema.Literals([
|
|
42
|
+
"planned",
|
|
43
|
+
"skipped",
|
|
44
|
+
"copying",
|
|
45
|
+
"copied",
|
|
46
|
+
"deleting",
|
|
47
|
+
"completed",
|
|
48
|
+
"conflict",
|
|
49
|
+
"unknown",
|
|
50
|
+
"failed"
|
|
51
|
+
]),
|
|
52
|
+
destination: Schema.optional(ObjectMetadata),
|
|
53
|
+
strategy: Schema.optional(Schema.String),
|
|
54
|
+
error: Schema.optional(StorageError)
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export { MigrationEntry, MigrationId, MigrationPlan, MigrationRequest };
|
|
58
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../src/workflows/migrations/schema.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nimport { StorageError } from \"../../core/errors.js\";\nimport { ObjectMetadata } from \"../../core/object.js\";\n\nexport const MigrationId = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_-]{1,128}$/u));\nexport const MigrationRequest = Schema.Struct({\n id: Schema.optional(MigrationId),\n inventoryId: Schema.optional(Schema.NonEmptyString),\n prefix: Schema.String,\n destinationPrefix: Schema.optional(Schema.String),\n conflict: Schema.Literals([\"fail\", \"skip\", \"replace-if-unchanged\"]),\n deleteSource: Schema.Boolean,\n deleteExtraneous: Schema.optional(Schema.Boolean),\n});\nexport type MigrationRequest = typeof MigrationRequest.Type;\nexport const MigrationPlan = Schema.Struct({\n id: MigrationId,\n binding: Schema.String,\n request: MigrationRequest,\n state: Schema.Literals([\"planning\", \"planned\", \"applying\", \"completed\", \"partial\"]),\n count: Schema.Natural,\n createdAt: Schema.Number,\n});\nexport type MigrationPlan = typeof MigrationPlan.Type;\nexport const MigrationEntry = Schema.Struct({\n index: Schema.Natural,\n action: Schema.Literals([\"copy\", \"delete\"]),\n source: ObjectMetadata,\n destinationKey: Schema.String,\n previous: Schema.optional(ObjectMetadata),\n sha256: Schema.String,\n state: Schema.Literals([\n \"planned\",\n \"skipped\",\n \"copying\",\n \"copied\",\n \"deleting\",\n \"completed\",\n \"conflict\",\n \"unknown\",\n \"failed\",\n ]),\n destination: Schema.optional(ObjectMetadata),\n strategy: Schema.optional(Schema.String),\n error: Schema.optional(StorageError),\n});\nexport type MigrationEntry = typeof MigrationEntry.Type;\n"],"mappings":";;;;;AAKA,MAAa,cAAc,OAAO,OAAO,MAAM,OAAO,UAAU,yBAAyB,CAAC;AAC1F,MAAa,mBAAmB,OAAO,OAAO;CAC5C,IAAI,OAAO,SAAS,WAAW;CAC/B,aAAa,OAAO,SAAS,OAAO,cAAc;CAClD,QAAQ,OAAO;CACf,mBAAmB,OAAO,SAAS,OAAO,MAAM;CAChD,UAAU,OAAO,SAAS;EAAC;EAAQ;EAAQ;CAAsB,CAAC;CAClE,cAAc,OAAO;CACrB,kBAAkB,OAAO,SAAS,OAAO,OAAO;AAClD,CAAC;AAED,MAAa,gBAAgB,OAAO,OAAO;CACzC,IAAI;CACJ,SAAS,OAAO;CAChB,SAAS;CACT,OAAO,OAAO,SAAS;EAAC;EAAY;EAAW;EAAY;EAAa;CAAS,CAAC;CAClF,OAAO,OAAO;CACd,WAAW,OAAO;AACpB,CAAC;AAED,MAAa,iBAAiB,OAAO,OAAO;CAC1C,OAAO,OAAO;CACd,QAAQ,OAAO,SAAS,CAAC,QAAQ,QAAQ,CAAC;CAC1C,QAAQ;CACR,gBAAgB,OAAO;CACvB,UAAU,OAAO,SAAS,cAAc;CACxC,QAAQ,OAAO;CACf,OAAO,OAAO,SAAS;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,aAAa,OAAO,SAAS,cAAc;CAC3C,UAAU,OAAO,SAAS,OAAO,MAAM;CACvC,OAAO,OAAO,SAAS,YAAY;AACrC,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { digestText } from "../../runtime/portable-hash.js";
|
|
2
|
+
import { workflowError } from "../store.js";
|
|
3
|
+
import { deletePinned, hashObject, headOptional } from "../objects.js";
|
|
4
|
+
import { MirrorOperation, MirrorPointer } from "./schema.js";
|
|
5
|
+
import { Clock, Effect, Schema } from "effect";
|
|
6
|
+
|
|
7
|
+
// src/workflows/mirror/operations.ts
|
|
8
|
+
const marker = "effect-storage-mirror";
|
|
9
|
+
const pointerKey = (key) => `key:${digestText(key)}`;
|
|
10
|
+
const makeOperations = (store, binding, endpoints) => {
|
|
11
|
+
const load = Effect.fnUntraced(function* (id) {
|
|
12
|
+
const operation = yield* store.read(`operation:${id}`, MirrorOperation);
|
|
13
|
+
if (!operation || operation.binding !== binding) return yield* workflowError("MirrorOperationNotFound");
|
|
14
|
+
return operation;
|
|
15
|
+
});
|
|
16
|
+
const save = (operation) => store.write(`operation:${operation.id}`, MirrorOperation, operation);
|
|
17
|
+
const next = Effect.gen(function* () {
|
|
18
|
+
const count = (yield* store.read("sequence", Schema.Natural)) ?? 0;
|
|
19
|
+
yield* store.write("sequence", Schema.Natural, count + 1);
|
|
20
|
+
return count + 1;
|
|
21
|
+
});
|
|
22
|
+
const owned = Effect.fnUntraced(function* (metadata) {
|
|
23
|
+
const id = metadata.customMetadata?.[marker];
|
|
24
|
+
if (!id) return yield* workflowError("ForeignMirrorObject");
|
|
25
|
+
const operation = yield* load(id);
|
|
26
|
+
if (operation.key !== metadata.ref.key) return yield* workflowError("ForeignMirrorObject");
|
|
27
|
+
return operation;
|
|
28
|
+
});
|
|
29
|
+
const activate = Effect.fnUntraced(function* (operation) {
|
|
30
|
+
const previous = yield* store.read(pointerKey(operation.key), MirrorPointer);
|
|
31
|
+
if (previous && previous.generation > operation.generation) return false;
|
|
32
|
+
yield* store.write(pointerKey(operation.key), MirrorPointer, {
|
|
33
|
+
id: operation.id,
|
|
34
|
+
kind: operation.kind,
|
|
35
|
+
generation: operation.generation
|
|
36
|
+
});
|
|
37
|
+
return true;
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
load,
|
|
41
|
+
save,
|
|
42
|
+
owned,
|
|
43
|
+
activate,
|
|
44
|
+
repair: Effect.fnUntraced(function* (input) {
|
|
45
|
+
let operation = input;
|
|
46
|
+
const pointer = yield* store.read(pointerKey(operation.key), MirrorPointer);
|
|
47
|
+
if (pointer && pointer.generation > operation.generation) {
|
|
48
|
+
operation = {
|
|
49
|
+
...operation,
|
|
50
|
+
state: "superseded"
|
|
51
|
+
};
|
|
52
|
+
yield* save(operation);
|
|
53
|
+
return operation;
|
|
54
|
+
}
|
|
55
|
+
const primary = endpoints[0];
|
|
56
|
+
if (!primary) return yield* workflowError("MissingPrimary");
|
|
57
|
+
let authoritative;
|
|
58
|
+
if (operation.kind === "put") {
|
|
59
|
+
authoritative = yield* headOptional(primary.endpoint.storage, operation.key);
|
|
60
|
+
if (!authoritative) for (const replica of endpoints.slice(1)) {
|
|
61
|
+
const candidate = yield* headOptional(replica.endpoint.storage, operation.key);
|
|
62
|
+
if (!candidate || candidate.customMetadata?.["effect-storage-mirror"] !== operation.id) continue;
|
|
63
|
+
if ((yield* hashObject(replica.endpoint.storage, candidate)).sha256 !== operation.sha256) continue;
|
|
64
|
+
authoritative = (yield* primary.transfers.copy({
|
|
65
|
+
source: replica.endpoint,
|
|
66
|
+
ref: candidate.ref,
|
|
67
|
+
destinationKey: operation.key,
|
|
68
|
+
condition: { _tag: "CreateOnly" }
|
|
69
|
+
})).metadata;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
if (!authoritative || authoritative.customMetadata?.["effect-storage-mirror"] !== operation.id) {
|
|
73
|
+
operation = {
|
|
74
|
+
...operation,
|
|
75
|
+
state: "partial"
|
|
76
|
+
};
|
|
77
|
+
yield* save(operation);
|
|
78
|
+
return operation;
|
|
79
|
+
}
|
|
80
|
+
const verified = yield* hashObject(primary.endpoint.storage, authoritative);
|
|
81
|
+
if (verified.sha256 !== operation.sha256 || verified.size !== operation.size) return yield* workflowError("PrimaryVerificationFailed");
|
|
82
|
+
if (!(yield* activate(operation))) return operation;
|
|
83
|
+
operation = {
|
|
84
|
+
...operation,
|
|
85
|
+
outcomes: operation.outcomes.map((outcome, index) => index === 0 ? {
|
|
86
|
+
...outcome,
|
|
87
|
+
state: "succeeded",
|
|
88
|
+
metadata: authoritative
|
|
89
|
+
} : outcome)
|
|
90
|
+
};
|
|
91
|
+
yield* save(operation);
|
|
92
|
+
} else if (!(yield* activate(operation))) return operation;
|
|
93
|
+
for (let index = operation.kind === "put" ? 1 : 0; index < endpoints.length; index++) {
|
|
94
|
+
const selected = endpoints[index];
|
|
95
|
+
const outcome = operation.outcomes[index];
|
|
96
|
+
if (!selected || !outcome) continue;
|
|
97
|
+
const attempt = yield* Effect.result(Effect.gen(function* () {
|
|
98
|
+
const current = yield* headOptional(selected.endpoint.storage, operation.key);
|
|
99
|
+
if (operation.kind === "delete") {
|
|
100
|
+
if (current) {
|
|
101
|
+
if ((yield* owned(current)).generation > operation.generation) return yield* workflowError("NewerMirrorObject");
|
|
102
|
+
yield* deletePinned(selected.endpoint.storage, current);
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (!authoritative) return yield* workflowError("MissingPrimaryReceipt");
|
|
107
|
+
if (current) {
|
|
108
|
+
const owner = yield* owned(current);
|
|
109
|
+
if (owner.generation > operation.generation) return yield* workflowError("NewerMirrorObject");
|
|
110
|
+
if (owner.id === operation.id) {
|
|
111
|
+
if ((yield* hashObject(selected.endpoint.storage, current)).sha256 !== operation.sha256) return yield* workflowError("ReplicaVerificationFailed");
|
|
112
|
+
return current;
|
|
113
|
+
}
|
|
114
|
+
if (!current.etag) return yield* workflowError("UnconditionalReplicaOverwriteRejected");
|
|
115
|
+
}
|
|
116
|
+
return (yield* selected.transfers.copy({
|
|
117
|
+
source: primary.endpoint,
|
|
118
|
+
ref: authoritative.ref,
|
|
119
|
+
destinationKey: operation.key,
|
|
120
|
+
condition: current?.etag ? {
|
|
121
|
+
_tag: "IfMatch",
|
|
122
|
+
etag: current.etag
|
|
123
|
+
} : { _tag: "CreateOnly" }
|
|
124
|
+
})).metadata;
|
|
125
|
+
}));
|
|
126
|
+
operation = {
|
|
127
|
+
...operation,
|
|
128
|
+
outcomes: operation.outcomes.map((previous, position) => position !== index ? previous : attempt._tag === "Success" ? {
|
|
129
|
+
storeId: previous.storeId,
|
|
130
|
+
required: previous.required,
|
|
131
|
+
state: "succeeded",
|
|
132
|
+
...attempt.success ? { metadata: attempt.success } : {}
|
|
133
|
+
} : {
|
|
134
|
+
...previous,
|
|
135
|
+
state: "unknown",
|
|
136
|
+
error: attempt.failure
|
|
137
|
+
})
|
|
138
|
+
};
|
|
139
|
+
yield* save(operation);
|
|
140
|
+
}
|
|
141
|
+
operation = {
|
|
142
|
+
...operation,
|
|
143
|
+
state: operation.outcomes.every((outcome) => outcome.state === "succeeded") ? "completed" : "partial"
|
|
144
|
+
};
|
|
145
|
+
yield* save(operation);
|
|
146
|
+
return operation;
|
|
147
|
+
}),
|
|
148
|
+
create: Effect.fnUntraced(function* (id, key, kind, size, sha256, requestHash) {
|
|
149
|
+
const generation = yield* next;
|
|
150
|
+
const operation = {
|
|
151
|
+
id,
|
|
152
|
+
binding,
|
|
153
|
+
generation,
|
|
154
|
+
key,
|
|
155
|
+
kind,
|
|
156
|
+
size,
|
|
157
|
+
sha256,
|
|
158
|
+
state: "pending",
|
|
159
|
+
createdAt: yield* Clock.currentTimeMillis,
|
|
160
|
+
...requestHash ? { requestHash } : {},
|
|
161
|
+
outcomes: endpoints.map((selected) => ({
|
|
162
|
+
storeId: selected.endpoint.storage.storeId,
|
|
163
|
+
required: selected.required,
|
|
164
|
+
state: "pending"
|
|
165
|
+
}))
|
|
166
|
+
};
|
|
167
|
+
yield* save(operation);
|
|
168
|
+
yield* store.write(`index:${generation}`, Schema.String, id);
|
|
169
|
+
return operation;
|
|
170
|
+
})
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export { makeOperations, marker, pointerKey };
|
|
175
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","names":[],"sources":["../../../src/workflows/mirror/operations.ts"],"sourcesContent":["import { Clock, Effect, Schema } from \"effect\";\n\nimport type { ObjectMetadata } from \"../../core/object.js\";\nimport { digestText } from \"../../runtime/portable-hash.js\";\nimport type { TransfersService, TransferEndpoint } from \"../../transfers/models.js\";\nimport { deletePinned, hashObject, headOptional } from \"../objects.js\";\nimport { workflowError } from \"../store.js\";\nimport type { RecordStore } from \"../store.js\";\nimport { MirrorOperation, MirrorPointer } from \"./schema.js\";\n\nexport interface MirrorEndpoint {\n readonly endpoint: TransferEndpoint;\n readonly required: boolean;\n readonly transfers: TransfersService;\n}\nexport const marker = \"effect-storage-mirror\";\nexport const pointerKey = (key: string) => `key:${digestText(key)}`;\nexport const makeOperations = (\n store: RecordStore,\n binding: string,\n endpoints: ReadonlyArray<MirrorEndpoint>,\n) => {\n const load = Effect.fnUntraced(function* (id: string) {\n const operation = yield* store.read(`operation:${id}`, MirrorOperation);\n if (!operation || operation.binding !== binding)\n return yield* workflowError(\"MirrorOperationNotFound\");\n return operation;\n });\n const save = (operation: MirrorOperation) =>\n store.write(`operation:${operation.id}`, MirrorOperation, operation);\n const next = Effect.gen(function* () {\n const count = (yield* store.read(\"sequence\", Schema.Natural)) ?? 0;\n yield* store.write(\"sequence\", Schema.Natural, count + 1);\n return count + 1;\n });\n const owned = Effect.fnUntraced(function* (metadata: ObjectMetadata) {\n const id = metadata.customMetadata?.[marker];\n if (!id) return yield* workflowError(\"ForeignMirrorObject\");\n const operation = yield* load(id);\n if (operation.key !== metadata.ref.key) return yield* workflowError(\"ForeignMirrorObject\");\n return operation;\n });\n const activate = Effect.fnUntraced(function* (operation: MirrorOperation) {\n const previous = yield* store.read(pointerKey(operation.key), MirrorPointer);\n if (previous && previous.generation > operation.generation) return false;\n yield* store.write(pointerKey(operation.key), MirrorPointer, {\n id: operation.id,\n kind: operation.kind,\n generation: operation.generation,\n });\n return true;\n });\n const repair = Effect.fnUntraced(function* (input: MirrorOperation) {\n let operation = input;\n const pointer = yield* store.read(pointerKey(operation.key), MirrorPointer);\n if (pointer && pointer.generation > operation.generation) {\n operation = { ...operation, state: \"superseded\" };\n yield* save(operation);\n return operation;\n }\n const primary = endpoints[0];\n if (!primary) return yield* workflowError(\"MissingPrimary\");\n let authoritative: ObjectMetadata | undefined;\n if (operation.kind === \"put\") {\n authoritative = yield* headOptional(primary.endpoint.storage, operation.key);\n if (!authoritative) {\n for (const replica of endpoints.slice(1)) {\n const candidate = yield* headOptional(replica.endpoint.storage, operation.key);\n if (!candidate || candidate.customMetadata?.[marker] !== operation.id) continue;\n if ((yield* hashObject(replica.endpoint.storage, candidate)).sha256 !== operation.sha256)\n continue;\n authoritative = (yield* primary.transfers.copy({\n source: replica.endpoint,\n ref: candidate.ref,\n destinationKey: operation.key,\n condition: { _tag: \"CreateOnly\" },\n })).metadata;\n break;\n }\n }\n if (!authoritative || authoritative.customMetadata?.[marker] !== operation.id) {\n operation = { ...operation, state: \"partial\" };\n yield* save(operation);\n return operation;\n }\n const verified = yield* hashObject(primary.endpoint.storage, authoritative);\n if (verified.sha256 !== operation.sha256 || verified.size !== operation.size)\n return yield* workflowError(\"PrimaryVerificationFailed\");\n if (!(yield* activate(operation))) return operation;\n operation = {\n ...operation,\n outcomes: operation.outcomes.map((outcome, index) =>\n index === 0 ? { ...outcome, state: \"succeeded\", metadata: authoritative } : outcome,\n ),\n };\n yield* save(operation);\n } else if (!(yield* activate(operation))) return operation;\n\n for (let index = operation.kind === \"put\" ? 1 : 0; index < endpoints.length; index++) {\n const selected = endpoints[index];\n const outcome = operation.outcomes[index];\n if (!selected || !outcome) continue;\n const attempt = yield* Effect.result(\n Effect.gen(function* () {\n const current = yield* headOptional(selected.endpoint.storage, operation.key);\n if (operation.kind === \"delete\") {\n if (current) {\n const owner = yield* owned(current);\n if (owner.generation > operation.generation)\n return yield* workflowError(\"NewerMirrorObject\");\n yield* deletePinned(selected.endpoint.storage, current);\n }\n return undefined;\n }\n if (!authoritative) return yield* workflowError(\"MissingPrimaryReceipt\");\n if (current) {\n const owner = yield* owned(current);\n if (owner.generation > operation.generation)\n return yield* workflowError(\"NewerMirrorObject\");\n if (owner.id === operation.id) {\n if (\n (yield* hashObject(selected.endpoint.storage, current)).sha256 !== operation.sha256\n )\n return yield* workflowError(\"ReplicaVerificationFailed\");\n return current;\n }\n if (!current.etag) return yield* workflowError(\"UnconditionalReplicaOverwriteRejected\");\n }\n return (yield* selected.transfers.copy({\n source: primary.endpoint,\n ref: authoritative.ref,\n destinationKey: operation.key,\n condition: current?.etag\n ? { _tag: \"IfMatch\", etag: current.etag }\n : { _tag: \"CreateOnly\" },\n })).metadata;\n }),\n );\n operation = {\n ...operation,\n outcomes: operation.outcomes.map((previous, position) =>\n position !== index\n ? previous\n : attempt._tag === \"Success\"\n ? {\n storeId: previous.storeId,\n required: previous.required,\n state: \"succeeded\",\n ...(attempt.success ? { metadata: attempt.success } : {}),\n }\n : { ...previous, state: \"unknown\", error: attempt.failure },\n ),\n };\n yield* save(operation);\n }\n operation = {\n ...operation,\n state: operation.outcomes.every((outcome) => outcome.state === \"succeeded\")\n ? \"completed\"\n : \"partial\",\n };\n yield* save(operation);\n return operation;\n });\n const create = Effect.fnUntraced(function* (\n id: string,\n key: string,\n kind: MirrorOperation[\"kind\"],\n size: number,\n sha256: string,\n requestHash?: string,\n ) {\n const generation = yield* next;\n const operation: MirrorOperation = {\n id,\n binding,\n generation,\n key,\n kind,\n size,\n sha256,\n state: \"pending\",\n createdAt: yield* Clock.currentTimeMillis,\n ...(requestHash ? { requestHash } : {}),\n outcomes: endpoints.map((selected) => ({\n storeId: selected.endpoint.storage.storeId,\n required: selected.required,\n state: \"pending\",\n })),\n };\n yield* save(operation);\n yield* store.write(`index:${generation}`, Schema.String, id);\n return operation;\n });\n return { load, save, owned, activate, repair, create };\n};\n"],"mappings":"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"}
|