@nestm/storage 0.1.0-alpha.0 → 0.1.0-alpha.10

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.
Files changed (122) hide show
  1. package/CHANGELOG.md +264 -0
  2. package/README.md +724 -25
  3. package/SECURITY.md +101 -0
  4. package/dist/ai-sdk/ai-sdk-workspace-tools.d.ts +91 -0
  5. package/dist/ai-sdk/ai-sdk-workspace-tools.d.ts.map +1 -0
  6. package/dist/ai-sdk/ai-sdk-workspace-tools.js +491 -0
  7. package/dist/ai-sdk/ai-sdk-workspace-tools.js.map +1 -0
  8. package/dist/ai-sdk/index.d.ts +2 -0
  9. package/dist/ai-sdk/index.d.ts.map +1 -0
  10. package/dist/ai-sdk/index.js +2 -0
  11. package/dist/ai-sdk/index.js.map +1 -0
  12. package/dist/core/index.d.ts +6 -0
  13. package/dist/core/index.d.ts.map +1 -0
  14. package/dist/core/index.js +4 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/files-sdk/files-sdk.driver.d.ts +85 -3
  17. package/dist/files-sdk/files-sdk.driver.d.ts.map +1 -1
  18. package/dist/files-sdk/files-sdk.driver.js +1437 -37
  19. package/dist/files-sdk/files-sdk.driver.js.map +1 -1
  20. package/dist/files-sdk/fs/index.d.ts +42 -0
  21. package/dist/files-sdk/fs/index.d.ts.map +1 -0
  22. package/dist/files-sdk/fs/index.js +1117 -0
  23. package/dist/files-sdk/fs/index.js.map +1 -0
  24. package/dist/files-sdk/index.d.ts +1 -1
  25. package/dist/files-sdk/index.d.ts.map +1 -1
  26. package/dist/files-sdk/index.js.map +1 -1
  27. package/dist/files-sdk/provider/index.d.ts +58 -0
  28. package/dist/files-sdk/provider/index.d.ts.map +1 -0
  29. package/dist/files-sdk/provider/index.js +147 -0
  30. package/dist/files-sdk/provider/index.js.map +1 -0
  31. package/dist/files-sdk/s3/construction-metadata.d.ts +9 -0
  32. package/dist/files-sdk/s3/construction-metadata.d.ts.map +1 -0
  33. package/dist/files-sdk/s3/construction-metadata.js +24 -0
  34. package/dist/files-sdk/s3/construction-metadata.js.map +1 -0
  35. package/dist/files-sdk/s3/index.d.ts +54 -0
  36. package/dist/files-sdk/s3/index.d.ts.map +1 -0
  37. package/dist/files-sdk/s3/index.js +1505 -0
  38. package/dist/files-sdk/s3/index.js.map +1 -0
  39. package/dist/gateway/index.d.ts +1 -1
  40. package/dist/gateway/index.d.ts.map +1 -1
  41. package/dist/gateway/index.js.map +1 -1
  42. package/dist/gateway/storage-gateway-fastify-parser.d.ts.map +1 -1
  43. package/dist/gateway/storage-gateway-fastify-parser.js.map +1 -1
  44. package/dist/gateway/storage-gateway.controller.d.ts +12 -11
  45. package/dist/gateway/storage-gateway.controller.d.ts.map +1 -1
  46. package/dist/gateway/storage-gateway.controller.js +240 -70
  47. package/dist/gateway/storage-gateway.controller.js.map +1 -1
  48. package/dist/gateway/storage-gateway.guard.d.ts.map +1 -1
  49. package/dist/gateway/storage-gateway.guard.js.map +1 -1
  50. package/dist/gateway/storage-gateway.module.d.ts.map +1 -1
  51. package/dist/gateway/storage-gateway.module.js +60 -1
  52. package/dist/gateway/storage-gateway.module.js.map +1 -1
  53. package/dist/gateway/storage-gateway.tokens.d.ts +1 -0
  54. package/dist/gateway/storage-gateway.tokens.d.ts.map +1 -1
  55. package/dist/gateway/storage-gateway.tokens.js +1 -0
  56. package/dist/gateway/storage-gateway.tokens.js.map +1 -1
  57. package/dist/gateway/storage-gateway.types.d.ts +53 -10
  58. package/dist/gateway/storage-gateway.types.d.ts.map +1 -1
  59. package/dist/gateway/storage-gateway.types.js.map +1 -1
  60. package/dist/index.d.ts +1 -5
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +1 -3
  63. package/dist/index.js.map +1 -1
  64. package/dist/inject-storage.decorator.js.map +1 -1
  65. package/dist/storage-etag.d.ts +13 -0
  66. package/dist/storage-etag.d.ts.map +1 -0
  67. package/dist/storage-etag.js +31 -0
  68. package/dist/storage-etag.js.map +1 -0
  69. package/dist/storage-upload-control.d.ts.map +1 -1
  70. package/dist/storage.client.d.ts +15 -3
  71. package/dist/storage.client.d.ts.map +1 -1
  72. package/dist/storage.client.js +204 -2
  73. package/dist/storage.client.js.map +1 -1
  74. package/dist/storage.driver.d.ts +28 -1
  75. package/dist/storage.driver.d.ts.map +1 -1
  76. package/dist/storage.driver.js.map +1 -1
  77. package/dist/storage.error.d.ts +17 -10
  78. package/dist/storage.error.d.ts.map +1 -1
  79. package/dist/storage.error.js +47 -1
  80. package/dist/storage.error.js.map +1 -1
  81. package/dist/storage.module.d.ts.map +1 -1
  82. package/dist/storage.module.js.map +1 -1
  83. package/dist/storage.service.d.ts.map +1 -1
  84. package/dist/storage.service.js +28 -3
  85. package/dist/storage.service.js.map +1 -1
  86. package/dist/storage.tokens.js.map +1 -1
  87. package/dist/storage.types.d.ts +150 -1
  88. package/dist/storage.types.d.ts.map +1 -1
  89. package/dist/storage.types.js.map +1 -1
  90. package/dist/testing/index.d.ts +1 -0
  91. package/dist/testing/index.d.ts.map +1 -1
  92. package/dist/testing/index.js +1 -0
  93. package/dist/testing/index.js.map +1 -1
  94. package/dist/testing/provider-conformance.d.ts +65 -0
  95. package/dist/testing/provider-conformance.d.ts.map +1 -0
  96. package/dist/testing/provider-conformance.js +869 -0
  97. package/dist/testing/provider-conformance.js.map +1 -0
  98. package/dist/workspace/index.d.ts +5 -0
  99. package/dist/workspace/index.d.ts.map +1 -0
  100. package/dist/workspace/index.js +5 -0
  101. package/dist/workspace/index.js.map +1 -0
  102. package/dist/workspace/storage-workspace.cursor.d.ts +71 -0
  103. package/dist/workspace/storage-workspace.cursor.d.ts.map +1 -0
  104. package/dist/workspace/storage-workspace.cursor.js +408 -0
  105. package/dist/workspace/storage-workspace.cursor.js.map +1 -0
  106. package/dist/workspace/storage-workspace.d.ts +6 -0
  107. package/dist/workspace/storage-workspace.d.ts.map +1 -0
  108. package/dist/workspace/storage-workspace.error.d.ts +32 -0
  109. package/dist/workspace/storage-workspace.error.d.ts.map +1 -0
  110. package/dist/workspace/storage-workspace.error.js +75 -0
  111. package/dist/workspace/storage-workspace.error.js.map +1 -0
  112. package/dist/workspace/storage-workspace.js +849 -0
  113. package/dist/workspace/storage-workspace.js.map +1 -0
  114. package/dist/workspace/storage-workspace.path.d.ts +9 -0
  115. package/dist/workspace/storage-workspace.path.d.ts.map +1 -0
  116. package/dist/workspace/storage-workspace.path.js +68 -0
  117. package/dist/workspace/storage-workspace.path.js.map +1 -0
  118. package/dist/workspace/storage-workspace.types.d.ts +123 -0
  119. package/dist/workspace/storage-workspace.types.d.ts.map +1 -0
  120. package/dist/workspace/storage-workspace.types.js +22 -0
  121. package/dist/workspace/storage-workspace.types.js.map +1 -0
  122. package/package.json +103 -35
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/files-sdk/s3/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CopyObjectCommand,\n CreateMultipartUploadCommand,\n DeleteObjectCommand,\n GetObjectCommand,\n PutObjectCommand,\n UploadPartCommand,\n} from '@aws-sdk/client-s3';\nimport {\n createPresignedPost,\n type PresignedPostOptions,\n} from '@aws-sdk/s3-presigned-post';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport { Readable } from 'node:stream';\nimport {\n createStoredFile,\n type AdapterConditionalOperations,\n type ConditionalUploadResult,\n type CopyCondition,\n type OperationOptions as FilesOperationOptions,\n type StoredFile,\n} from 'files-sdk';\nimport {\n mapS3Error,\n s3 as createFilesSdkS3Adapter,\n type S3Adapter,\n type S3AdapterOptions,\n} from 'files-sdk/s3';\n\nimport type {\n StorageBody,\n StorageCapabilities,\n StorageConditionalDeleteOptions,\n StorageConditionalReadOptions,\n StorageConditionalUploadOptions,\n StorageObject,\n StorageOperationOptions,\n StoragePromotionOptions,\n StorageUploadResult,\n} from '../../storage.types.js';\nimport {\n StorageError,\n StorageErrorCode,\n isStorageError,\n} from '../../storage.error.js';\nimport {\n normalizeProviderStorageEtag,\n storageEtagHeader,\n} from '../../storage-etag.js';\nimport {\n assertFilesSdkS3AdapterHasNoReservedExtensions,\n createFilesSdkDriver,\n markFilesSdkS3AdapterUndecorated,\n markFilesSdkS3RawClientProvenance,\n type FilesSdkConditionalCopyAdapter,\n type FilesSdkConditionalDeleteAdapter,\n type FilesSdkConditionalReadAdapter,\n type FilesSdkConditionalUploadAdapter,\n type FilesSdkDriverOptions,\n type FilesSdkPhysicalKeyAdapter,\n type FilesSdkSignedUploadPolicyAdapter,\n type FilesSdkSignedDownloadPolicyAdapter,\n type FilesSdkStorageDriver,\n mapFilesSdkError,\n mapStorageErrorToFilesSdkError,\n} from '../files-sdk.driver.js';\nimport {\n getS3ConstructionMetadata,\n getS3ConditionalRequestPermission,\n recordS3ConstructionMetadata,\n recordS3ConditionalRequestPermission,\n} from './construction-metadata.js';\n\nexport interface S3StorageDriverOptions extends Omit<\n FilesSdkDriverOptions<S3Adapter>,\n 'adapter'\n> {\n adapter: S3AdapterOptions;\n /**\n * Exact, conformance-verified provider behavior. Native AWS S3 uses the\n * built-in AWS profile when no endpoint override is present; an explicit\n * native profile may only narrow that immutable ceiling. Endpoint overrides\n * without an explicit profile force the whole driver read-only.\n */\n providerProfile?: S3ProviderProfile;\n}\n\ntype S3ProfileCapabilities = Pick<\n StorageCapabilities,\n | 'conditionalCreate'\n | 'conditionalReplace'\n | 'conditionalDelete'\n | 'conditionalRead'\n | 'conditionalCopySource'\n | 'conditionalCopyDestination'\n | 'conditionalMultipartCompletion'\n | 'physicalKey'\n | 'signedUploadPolicy'\n>;\n\nconst verifiedS3ProviderProfile = Symbol('verifiedS3ProviderProfile');\nconst verifiedS3ProviderProfiles = new WeakSet<object>();\n\nexport interface S3ProviderProfileInput extends S3ProfileCapabilities {\n /** Stable profile identity for configuration, diagnostics, and audit. */\n readonly name: string;\n /** Every S3-compatible profile must declare its complete-key byte budget. */\n readonly physicalKey: NonNullable<S3ProfileCapabilities['physicalKey']>;\n /** Constraints the provider proves; omission defaults both claims to false. */\n readonly signedUploadPolicy?: NonNullable<\n S3ProfileCapabilities['signedUploadPolicy']\n >;\n}\n\n/** A validated profile created by {@link defineS3ProviderProfile}. */\nexport type S3ProviderProfile = Readonly<\n Omit<S3ProviderProfileInput, 'signedUploadPolicy'> & {\n readonly signedUploadPolicy: NonNullable<\n S3ProfileCapabilities['signedUploadPolicy']\n >;\n }\n> & {\n readonly [verifiedS3ProviderProfile]: true;\n};\n\nfunction assertCapabilityBoolean(\n value: unknown,\n label: string,\n): asserts value is boolean {\n if (typeof value !== 'boolean') {\n throw new TypeError(`${label} must be a boolean.`);\n }\n}\n\n/** Validates and deeply freezes an explicitly verified S3-compatible profile. */\nexport function defineS3ProviderProfile(\n profile: S3ProviderProfileInput,\n): S3ProviderProfile {\n if (typeof profile.name !== 'string' || profile.name.trim().length === 0) {\n throw new TypeError('S3 provider profile name must be a non-empty string.');\n }\n if (\n !Number.isSafeInteger(profile.physicalKey.maxBytes) ||\n profile.physicalKey.maxBytes <= 0\n ) {\n throw new TypeError(\n 'S3 provider profile physicalKey.maxBytes must be a positive safe integer.',\n );\n }\n\n const booleanFields = [\n [\n profile.signedUploadPolicy !== undefined,\n 'signedUploadPolicy.contentType',\n profile.signedUploadPolicy?.contentType,\n ],\n [\n profile.signedUploadPolicy !== undefined,\n 'signedUploadPolicy.sizeRange',\n profile.signedUploadPolicy?.sizeRange,\n ],\n [\n profile.conditionalCreate !== undefined,\n 'conditionalCreate.resultEtag',\n profile.conditionalCreate?.resultEtag,\n ],\n [\n profile.conditionalReplace !== undefined,\n 'conditionalReplace.resultEtag',\n profile.conditionalReplace?.resultEtag,\n ],\n [\n profile.conditionalDelete !== undefined,\n 'conditionalDelete.etag',\n profile.conditionalDelete?.etag,\n ],\n [\n profile.conditionalRead !== undefined,\n 'conditionalRead.etag',\n profile.conditionalRead?.etag,\n ],\n [\n profile.conditionalRead !== undefined,\n 'conditionalRead.version',\n profile.conditionalRead?.version,\n ],\n [\n profile.conditionalCopySource !== undefined,\n 'conditionalCopySource.etag',\n profile.conditionalCopySource?.etag,\n ],\n [\n profile.conditionalCopySource !== undefined,\n 'conditionalCopySource.version',\n profile.conditionalCopySource?.version,\n ],\n [\n profile.conditionalCopySource?.requiresDestinationPredicate !== undefined,\n 'conditionalCopySource.requiresDestinationPredicate',\n profile.conditionalCopySource?.requiresDestinationPredicate,\n ],\n [\n profile.conditionalCopyDestination !== undefined,\n 'conditionalCopyDestination.create',\n profile.conditionalCopyDestination?.create,\n ],\n [\n profile.conditionalCopyDestination !== undefined,\n 'conditionalCopyDestination.replace',\n profile.conditionalCopyDestination?.replace,\n ],\n [\n profile.conditionalCopyDestination !== undefined,\n 'conditionalCopyDestination.atomicWithSource',\n profile.conditionalCopyDestination?.atomicWithSource,\n ],\n [\n profile.conditionalCopyDestination?.requiresSourcePredicate !== undefined,\n 'conditionalCopyDestination.requiresSourcePredicate',\n profile.conditionalCopyDestination?.requiresSourcePredicate,\n ],\n [\n profile.conditionalMultipartCompletion !== undefined,\n 'conditionalMultipartCompletion.create',\n profile.conditionalMultipartCompletion?.create,\n ],\n [\n profile.conditionalMultipartCompletion !== undefined,\n 'conditionalMultipartCompletion.replace',\n profile.conditionalMultipartCompletion?.replace,\n ],\n ] as const;\n for (const [declared, label, value] of booleanFields) {\n if (declared) assertCapabilityBoolean(value, label);\n }\n if (\n profile.conditionalCopyDestination?.atomicWithSource === true &&\n profile.conditionalCopySource?.etag !== true &&\n profile.conditionalCopySource?.version !== true\n ) {\n throw new TypeError(\n 'An atomic destination-copy profile must enable at least one source-copy condition.',\n );\n }\n if (\n profile.conditionalCopyDestination?.atomicWithSource === true &&\n profile.conditionalCopyDestination.create !== true &&\n profile.conditionalCopyDestination.replace !== true\n ) {\n throw new TypeError(\n 'An atomic destination-copy profile must declare create or replace support.',\n );\n }\n if (\n profile.conditionalMultipartCompletion?.create === true &&\n profile.conditionalCreate === undefined\n ) {\n throw new TypeError(\n 'Conditional multipart create requires conditional create support.',\n );\n }\n if (\n profile.conditionalMultipartCompletion?.replace === true &&\n profile.conditionalReplace === undefined\n ) {\n throw new TypeError(\n 'Conditional multipart replace requires conditional replace support.',\n );\n }\n\n const clone: Omit<S3ProviderProfileInput, 'signedUploadPolicy'> & {\n readonly signedUploadPolicy: NonNullable<\n S3ProfileCapabilities['signedUploadPolicy']\n >;\n } = {\n name: profile.name.trim(),\n physicalKey: Object.freeze({ ...profile.physicalKey }),\n signedUploadPolicy: Object.freeze(\n profile.signedUploadPolicy === undefined\n ? { contentType: false, sizeRange: false }\n : { ...profile.signedUploadPolicy },\n ),\n ...(profile.conditionalCreate !== undefined && {\n conditionalCreate: Object.freeze({ ...profile.conditionalCreate }),\n }),\n ...(profile.conditionalReplace !== undefined && {\n conditionalReplace: Object.freeze({ ...profile.conditionalReplace }),\n }),\n ...(profile.conditionalDelete !== undefined && {\n conditionalDelete: Object.freeze({ ...profile.conditionalDelete }),\n }),\n ...(profile.conditionalRead !== undefined && {\n conditionalRead: Object.freeze({ ...profile.conditionalRead }),\n }),\n ...(profile.conditionalCopySource !== undefined && {\n conditionalCopySource: Object.freeze({\n ...profile.conditionalCopySource,\n }),\n }),\n ...(profile.conditionalCopyDestination !== undefined && {\n conditionalCopyDestination: Object.freeze({\n ...profile.conditionalCopyDestination,\n }),\n }),\n ...(profile.conditionalMultipartCompletion !== undefined && {\n conditionalMultipartCompletion: Object.freeze({\n ...profile.conditionalMultipartCompletion,\n }),\n }),\n };\n Object.defineProperty(clone, verifiedS3ProviderProfile, {\n configurable: false,\n enumerable: false,\n value: true,\n writable: false,\n });\n const verified = Object.freeze(clone) as S3ProviderProfile;\n verifiedS3ProviderProfiles.add(verified);\n return verified;\n}\n\nfunction assertVerifiedS3ProviderProfile(profile: S3ProviderProfile): void {\n if (\n typeof profile !== 'object' ||\n profile === null ||\n !verifiedS3ProviderProfiles.has(profile)\n ) {\n throw new TypeError(\n 'providerProfile must be created with defineS3ProviderProfile().',\n );\n }\n}\n\nfunction assertS3ProviderProfileContainedBy(\n profile: S3ProviderProfile,\n ceiling: S3ProviderProfile,\n): void {\n if (profile.physicalKey.maxBytes > ceiling.physicalKey.maxBytes) {\n throw new TypeError(\n `S3 provider profile \"${profile.name}\" cannot widen ${ceiling.name} physicalKey.maxBytes beyond ${ceiling.physicalKey.maxBytes}.`,\n );\n }\n\n const operationCapabilities = [\n ['conditionalCreate', profile.conditionalCreate, ceiling.conditionalCreate],\n [\n 'conditionalReplace',\n profile.conditionalReplace,\n ceiling.conditionalReplace,\n ],\n ['conditionalDelete', profile.conditionalDelete, ceiling.conditionalDelete],\n ['conditionalRead', profile.conditionalRead, ceiling.conditionalRead],\n [\n 'conditionalCopySource',\n profile.conditionalCopySource,\n ceiling.conditionalCopySource,\n ],\n [\n 'conditionalCopyDestination',\n profile.conditionalCopyDestination,\n ceiling.conditionalCopyDestination,\n ],\n [\n 'conditionalMultipartCompletion',\n profile.conditionalMultipartCompletion,\n ceiling.conditionalMultipartCompletion,\n ],\n ] as const;\n for (const [name, declared, supported] of operationCapabilities) {\n if (declared !== undefined && supported === undefined) {\n throw new TypeError(\n `S3 provider profile \"${profile.name}\" cannot widen ${ceiling.name} with ${name}.`,\n );\n }\n }\n\n const booleanClaims = [\n [\n 'signedUploadPolicy.contentType',\n profile.signedUploadPolicy.contentType,\n ceiling.signedUploadPolicy.contentType,\n ],\n [\n 'signedUploadPolicy.sizeRange',\n profile.signedUploadPolicy.sizeRange,\n ceiling.signedUploadPolicy.sizeRange,\n ],\n [\n 'conditionalCreate.resultEtag',\n profile.conditionalCreate?.resultEtag,\n ceiling.conditionalCreate?.resultEtag,\n ],\n [\n 'conditionalReplace.resultEtag',\n profile.conditionalReplace?.resultEtag,\n ceiling.conditionalReplace?.resultEtag,\n ],\n [\n 'conditionalDelete.etag',\n profile.conditionalDelete?.etag,\n ceiling.conditionalDelete?.etag,\n ],\n [\n 'conditionalRead.etag',\n profile.conditionalRead?.etag,\n ceiling.conditionalRead?.etag,\n ],\n [\n 'conditionalRead.version',\n profile.conditionalRead?.version,\n ceiling.conditionalRead?.version,\n ],\n [\n 'conditionalCopySource.etag',\n profile.conditionalCopySource?.etag,\n ceiling.conditionalCopySource?.etag,\n ],\n [\n 'conditionalCopySource.version',\n profile.conditionalCopySource?.version,\n ceiling.conditionalCopySource?.version,\n ],\n [\n 'conditionalCopyDestination.create',\n profile.conditionalCopyDestination?.create,\n ceiling.conditionalCopyDestination?.create,\n ],\n [\n 'conditionalCopyDestination.replace',\n profile.conditionalCopyDestination?.replace,\n ceiling.conditionalCopyDestination?.replace,\n ],\n [\n 'conditionalCopyDestination.atomicWithSource',\n profile.conditionalCopyDestination?.atomicWithSource,\n ceiling.conditionalCopyDestination?.atomicWithSource,\n ],\n [\n 'conditionalMultipartCompletion.create',\n profile.conditionalMultipartCompletion?.create,\n ceiling.conditionalMultipartCompletion?.create,\n ],\n [\n 'conditionalMultipartCompletion.replace',\n profile.conditionalMultipartCompletion?.replace,\n ceiling.conditionalMultipartCompletion?.replace,\n ],\n ] as const;\n for (const [name, declared, supported] of booleanClaims) {\n if (declared === true && supported !== true) {\n throw new TypeError(\n `S3 provider profile \"${profile.name}\" cannot widen ${ceiling.name} with ${name}.`,\n );\n }\n }\n\n if (\n profile.conditionalCopySource !== undefined &&\n (profile.conditionalCopySource.etag ||\n profile.conditionalCopySource.version) &&\n ceiling.conditionalCopySource?.requiresDestinationPredicate === true &&\n profile.conditionalCopySource.requiresDestinationPredicate !== true\n ) {\n throw new TypeError(\n `S3 provider profile \"${profile.name}\" cannot remove ${ceiling.name} conditionalCopySource.requiresDestinationPredicate.`,\n );\n }\n if (\n profile.conditionalCopyDestination !== undefined &&\n (profile.conditionalCopyDestination.create ||\n profile.conditionalCopyDestination.replace) &&\n ceiling.conditionalCopyDestination?.requiresSourcePredicate === true &&\n profile.conditionalCopyDestination.requiresSourcePredicate !== true\n ) {\n throw new TypeError(\n `S3 provider profile \"${profile.name}\" cannot remove ${ceiling.name} conditionalCopyDestination.requiresSourcePredicate.`,\n );\n }\n}\n\nexport const AWS_S3_PROVIDER_PROFILE = defineS3ProviderProfile({\n name: 'aws-s3-general-purpose',\n physicalKey: { maxBytes: 1024 },\n signedUploadPolicy: { contentType: true, sizeRange: true },\n conditionalCreate: { resultEtag: true },\n conditionalReplace: { resultEtag: true },\n conditionalDelete: { etag: true },\n conditionalRead: { etag: true, version: true },\n conditionalCopySource: { etag: true, version: true },\n conditionalCopyDestination: {\n atomicWithSource: true,\n create: true,\n replace: true,\n },\n conditionalMultipartCompletion: { create: true, replace: true },\n});\n\nexport const CLOUDFLARE_R2_PROVIDER_PROFILE = defineS3ProviderProfile({\n name: 'cloudflare-r2-stable',\n physicalKey: { maxBytes: 1024 },\n signedUploadPolicy: { contentType: true, sizeRange: false },\n conditionalCreate: { resultEtag: true },\n conditionalReplace: { resultEtag: true },\n conditionalRead: { etag: true, version: false },\n conditionalCopySource: { etag: true, version: false },\n});\n\nconst UNVERIFIED_S3_PROVIDER_PROFILE = defineS3ProviderProfile({\n name: 'unverified-s3-compatible',\n physicalKey: { maxBytes: 1024 },\n signedUploadPolicy: { contentType: false, sizeRange: false },\n});\n\ntype S3StorageAdapterBase = S3Adapter &\n FilesSdkPhysicalKeyAdapter &\n FilesSdkSignedDownloadPolicyAdapter &\n FilesSdkSignedUploadPolicyAdapter;\n\nexport type S3StorageAdapter = S3StorageAdapterBase &\n Partial<\n FilesSdkConditionalCopyAdapter &\n FilesSdkConditionalDeleteAdapter &\n FilesSdkConditionalReadAdapter &\n FilesSdkConditionalUploadAdapter\n >;\n\nfunction filesAttemptOptions<Options extends FilesOperationOptions>(\n options: Options | undefined,\n): Omit<Options, 'retries'> | undefined {\n if (options === undefined) return undefined;\n // Files owns retry settlement. Its adapter primitives receive a single\n // merged attempt signal and must not start a second retry loop.\n const { retries: _retries, ...attempt } = options;\n return attempt;\n}\n\nasync function throughFilesConditionalBoundary<Result>(\n operationName: 'copy' | 'delete' | 'download' | 'upload',\n operation: () => Promise<Result>,\n): Promise<Result> {\n try {\n return await operation();\n } catch (error: unknown) {\n throw mapStorageErrorToFilesSdkError(\n mapS3ConditionalError(error, operationName),\n );\n }\n}\n\nfunction storedFileOfStorageObject(object: StorageObject): StoredFile {\n return createStoredFile(\n {\n ...(object.etag !== undefined && { etag: object.etag }),\n key: object.key,\n ...(object.lastModified !== undefined && {\n lastModified: object.lastModified.getTime(),\n }),\n ...(object.metadata !== undefined && {\n metadata: { ...object.metadata },\n }),\n size: object.size,\n type: object.contentType,\n },\n { factory: () => object.body, kind: 'stream' },\n );\n}\n\nfunction copySource(\n bucket: string,\n key: string,\n version: string | undefined,\n): string {\n const source = `${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`;\n return version === undefined\n ? source\n : `${source}?versionId=${encodeURIComponent(version)}`;\n}\n\nfunction operationSignal(\n options: StorageOperationOptions,\n): AbortSignal | undefined {\n const timeoutSignal =\n options.timeout === undefined || options.timeout <= 0\n ? undefined\n : AbortSignal.timeout(options.timeout);\n if (options.signal === undefined) {\n return timeoutSignal;\n }\n return timeoutSignal === undefined\n ? options.signal\n : AbortSignal.any([options.signal, timeoutSignal]);\n}\n\nfunction maxRetries(options: StorageOperationOptions): number {\n const configured =\n typeof options.retries === 'number'\n ? options.retries\n : options.retries?.max;\n return Math.max(0, Math.floor(configured ?? 0));\n}\n\nfunction invalidS3Argument(\n message: string,\n operation: 'copy' | 'delete' | 'download' | 'upload',\n key?: unknown,\n): never {\n throw new StorageError(message, {\n code: StorageErrorCode.INVALID_ARGUMENT,\n ...(typeof key === 'string' && { key }),\n operation,\n permanent: true,\n });\n}\n\nfunction assertS3Key(\n key: unknown,\n label: string,\n operation: 'copy' | 'delete' | 'download' | 'upload',\n): asserts key is string {\n if (typeof key !== 'string' || key.length === 0) {\n invalidS3Argument(`${label} must be a non-empty string.`, operation, key);\n }\n}\n\nfunction etagHeader(\n etag: unknown,\n key: string,\n operation: 'copy' | 'delete' | 'download' | 'upload',\n label: string,\n): string {\n const header = storageEtagHeader(etag);\n if (header === undefined) {\n throw new StorageError(`${label} must be a canonical storage ETag.`, {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n operation,\n permanent: true,\n });\n }\n return header;\n}\n\nfunction assertConditionalReadInput(\n key: string,\n options: StorageConditionalReadOptions,\n): void {\n const candidate = options as unknown;\n if (typeof candidate !== 'object' || candidate === null) {\n invalidS3Argument(\n 'Conditional read options must be an object.',\n 'download',\n key,\n );\n }\n const condition = (candidate as { readonly condition?: unknown }).condition;\n if (typeof condition !== 'object' || condition === null) {\n invalidS3Argument(\n 'Conditional read requires an ETag or version predicate.',\n 'download',\n key,\n );\n }\n const { etag, version } = condition as {\n readonly etag?: unknown;\n readonly version?: unknown;\n };\n if (etag === undefined && version === undefined) {\n invalidS3Argument(\n 'Conditional read requires an ETag or version predicate.',\n 'download',\n key,\n );\n }\n if (etag !== undefined) {\n etagHeader(etag, key, 'download', 'condition.etag');\n }\n if (\n version !== undefined &&\n (typeof version !== 'string' || version.length === 0)\n ) {\n invalidS3Argument(\n 'condition.version must be a non-empty string.',\n 'download',\n key,\n );\n }\n\n const range = (candidate as { readonly range?: unknown }).range;\n if (range === undefined) return;\n if (typeof range !== 'object' || range === null) {\n invalidS3Argument('range must be an object.', 'download', key);\n }\n const { end, start } = range as {\n readonly end?: unknown;\n readonly start?: unknown;\n };\n if (!Number.isSafeInteger(start) || (start as number) < 0) {\n invalidS3Argument(\n 'range.start must be a non-negative safe integer.',\n 'download',\n key,\n );\n }\n if (\n end !== undefined &&\n (!Number.isSafeInteger(end) || (end as number) < (start as number))\n ) {\n invalidS3Argument(\n 'range.end must be a safe integer greater than or equal to range.start.',\n 'download',\n key,\n );\n }\n}\n\nfunction assertPromotionInput(\n sourceKey: string,\n destinationKey: string,\n promotion: StoragePromotionOptions,\n): void {\n const candidate = promotion as unknown;\n if (typeof candidate !== 'object' || candidate === null) {\n invalidS3Argument(\n 'Promotion options must be an object.',\n 'copy',\n sourceKey,\n );\n }\n const { destination, sourceEtag, sourceVersion } = candidate as {\n readonly destination?: unknown;\n readonly sourceEtag?: unknown;\n readonly sourceVersion?: unknown;\n };\n if (sourceEtag !== undefined) {\n etagHeader(sourceEtag, sourceKey, 'copy', 'sourceEtag');\n }\n if (\n sourceVersion !== undefined &&\n (typeof sourceVersion !== 'string' || sourceVersion.length === 0)\n ) {\n invalidS3Argument(\n 'sourceVersion must be a non-empty string.',\n 'copy',\n sourceKey,\n );\n }\n if (\n destination !== undefined &&\n (typeof destination !== 'object' ||\n destination === null ||\n ((destination as { readonly type?: unknown }).type !== 'create' &&\n (destination as { readonly type?: unknown }).type !== 'replace'))\n ) {\n invalidS3Argument(\n 'destination.type must be \"create\" or \"replace\".',\n 'copy',\n destinationKey,\n );\n }\n if (\n typeof destination === 'object' &&\n destination !== null &&\n (destination as { readonly type?: unknown }).type === 'replace'\n ) {\n etagHeader(\n (destination as { readonly etag?: unknown }).etag,\n destinationKey,\n 'copy',\n 'destination.etag',\n );\n }\n if (\n sourceEtag === undefined &&\n sourceVersion === undefined &&\n destination === undefined\n ) {\n invalidS3Argument(\n 'promote requires a source or destination precondition.',\n 'copy',\n sourceKey,\n );\n }\n}\n\nfunction assertConditionalUploadInput(\n key: string,\n conditional: StorageConditionalUploadOptions,\n): void {\n const candidate = conditional as unknown;\n if (typeof candidate !== 'object' || candidate === null) {\n invalidS3Argument(\n 'Conditional upload options must be an object.',\n 'upload',\n key,\n );\n }\n const condition = (candidate as { readonly condition?: unknown }).condition;\n if (\n typeof condition !== 'object' ||\n condition === null ||\n ((condition as { readonly type?: unknown }).type !== 'create' &&\n (condition as { readonly type?: unknown }).type !== 'replace')\n ) {\n invalidS3Argument(\n 'condition.type must be \"create\" or \"replace\".',\n 'upload',\n key,\n );\n }\n if ((condition as { readonly type: unknown }).type === 'replace') {\n etagHeader(\n (condition as { readonly etag?: unknown }).etag,\n key,\n 'upload',\n 'condition.etag',\n );\n }\n}\n\nfunction providerEtag(\n etag: unknown,\n key: string,\n operation: 'download' | 'upload',\n): string | undefined {\n if (etag === undefined) {\n return undefined;\n }\n const normalized = normalizeProviderStorageEtag(etag);\n if (normalized === undefined) {\n throw new StorageError('S3 returned an invalid ETag.', {\n code: StorageErrorCode.PROVIDER,\n key,\n operation,\n permanent: true,\n });\n }\n return normalized;\n}\n\nfunction contentTypeOf(\n body: StorageBody,\n override: string | undefined,\n): string {\n if (override !== undefined) {\n return override;\n }\n if (typeof body === 'string') {\n return 'text/plain; charset=utf-8';\n }\n if (body instanceof Blob && body.type.length > 0) {\n return body.type;\n }\n return 'application/octet-stream';\n}\n\nfunction assertBufferedFilesConditionalS3Body(\n body: StorageBody,\n key: string,\n): void {\n if (body instanceof ReadableStream || body instanceof Readable) {\n throw new StorageError(\n 'Conditional S3 uploads through Files require a buffered body.',\n {\n code: StorageErrorCode.PROVIDER,\n key,\n operation: 'upload',\n permanent: true,\n },\n );\n }\n}\n\nasync function normalizeConditionalBody(\n body: StorageBody,\n onProgress: StorageConditionalUploadOptions['onProgress'],\n): Promise<{\n body: Uint8Array | ReadableStream<Uint8Array>;\n size: () => number;\n contentLength?: number;\n}> {\n let bytes: Uint8Array | undefined;\n if (typeof body === 'string') {\n bytes = new TextEncoder().encode(body);\n } else if (body instanceof Uint8Array) {\n bytes = body;\n } else if (body instanceof ArrayBuffer) {\n bytes = new Uint8Array(body);\n } else if (ArrayBuffer.isView(body)) {\n bytes = new Uint8Array(body.buffer, body.byteOffset, body.byteLength);\n } else if (body instanceof Blob) {\n bytes = new Uint8Array(await body.arrayBuffer());\n }\n\n if (bytes !== undefined) {\n const total = bytes.byteLength;\n onProgress?.({ loaded: 0, total });\n return { body: bytes, contentLength: total, size: () => total };\n }\n\n const stream =\n body instanceof Readable\n ? (Readable.toWeb(body) as ReadableStream<Uint8Array>)\n : body;\n if (!(stream instanceof ReadableStream)) {\n throw new StorageError('Unsupported conditional upload body.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n operation: 'upload',\n permanent: true,\n });\n }\n const reader = stream.getReader();\n let loaded = 0;\n return {\n body: new ReadableStream<Uint8Array>({\n cancel(reason) {\n return reader.cancel(reason);\n },\n async pull(controller) {\n const result = await reader.read();\n if (result.done) {\n controller.close();\n return;\n }\n loaded += result.value.byteLength;\n controller.enqueue(result.value);\n onProgress?.({ loaded });\n },\n }),\n size: () => loaded,\n };\n}\n\nfunction s3ErrorIdentity(error: unknown): {\n code: string | undefined;\n status: number | undefined;\n} {\n let current = error;\n const seen = new Set<object>();\n for (let depth = 0; depth < 8; depth += 1) {\n if (typeof current !== 'object' || current === null || seen.has(current)) {\n break;\n }\n seen.add(current);\n const candidate = current as {\n readonly name?: unknown;\n readonly Code?: unknown;\n readonly code?: unknown;\n readonly cause?: unknown;\n readonly $metadata?: { readonly httpStatusCode?: unknown };\n };\n const serviceCode = candidate.name ?? candidate.Code ?? candidate.code;\n const status = candidate.$metadata?.httpStatusCode;\n if (\n typeof status === 'number' ||\n (typeof serviceCode === 'string' && serviceCode !== 'FilesError')\n ) {\n return {\n code: typeof serviceCode === 'string' ? serviceCode : undefined,\n status: typeof status === 'number' ? status : undefined,\n };\n }\n current = candidate.cause;\n }\n return { code: undefined, status: undefined };\n}\n\nfunction mapS3ConditionalError(\n error: unknown,\n operation: 'copy' | 'delete' | 'download' | 'upload',\n): StorageError {\n if (isStorageError(error)) {\n return error;\n }\n const identity = s3ErrorIdentity(error);\n const provider = mapFilesSdkError(mapS3Error(error));\n const precondition =\n identity.status === 412 || identity.code === 'PreconditionFailed';\n const conditionalConflict =\n identity.status === 409 || identity.code === 'ConditionalRequestConflict';\n const mappedPrecondition =\n provider.code === StorageErrorCode.CONFLICT && !conditionalConflict;\n const notFound =\n identity.status === 404 ||\n identity.code === 'NoSuchKey' ||\n identity.code === 'NoSuchUpload' ||\n provider.code === StorageErrorCode.NOT_FOUND;\n const code =\n precondition || mappedPrecondition || conditionalConflict\n ? StorageErrorCode.CONFLICT\n : notFound\n ? StorageErrorCode.NOT_FOUND\n : provider.code;\n return new StorageError(`Conditional S3 ${operation} failed.`, {\n aborted: provider.aborted,\n applied: provider.applied,\n ...(provider.appliedEtag !== undefined && {\n appliedEtag: provider.appliedEtag,\n }),\n code,\n operation,\n permanent:\n precondition || mappedPrecondition || notFound\n ? true\n : conditionalConflict\n ? false\n : provider.permanent,\n timedOut: provider.timedOut,\n });\n}\n\nfunction s3InterruptionError(\n options: StorageOperationOptions,\n signal: AbortSignal | undefined,\n operation: 'copy' | 'delete' | 'download' | 'upload',\n): StorageError | undefined {\n if (signal?.aborted !== true) return undefined;\n const timedOut = options.signal?.aborted !== true;\n return new StorageError(\n timedOut\n ? `Conditional S3 ${operation} timed out.`\n : `Conditional S3 ${operation} was aborted.`,\n {\n aborted: !timedOut,\n code: timedOut ? StorageErrorCode.TIMEOUT : StorageErrorCode.ABORTED,\n operation,\n timedOut,\n },\n );\n}\n\nasync function withS3Retry<Result>(\n options: StorageOperationOptions,\n operationName: 'copy' | 'delete' | 'download' | 'upload',\n operation: (signal: AbortSignal | undefined) => Promise<Result>,\n): Promise<Result> {\n const retries = maxRetries(options);\n for (let attempt = 0; ; attempt += 1) {\n const signal = operationSignal(options);\n try {\n return await operation(signal);\n } catch (error) {\n const interrupted = s3InterruptionError(options, signal, operationName);\n if (interrupted !== undefined) throw interrupted;\n const mapped = mapS3ConditionalError(error, operationName);\n const retryableCode =\n mapped.code === StorageErrorCode.PROVIDER ||\n mapped.code === StorageErrorCode.CONFLICT;\n if (\n attempt >= retries ||\n !retryableCode ||\n mapped.aborted ||\n mapped.permanent ||\n signal?.aborted === true\n ) {\n throw mapped;\n }\n const delay =\n typeof options.retries === 'object' &&\n options.retries.backoff !== undefined\n ? options.retries.backoff({\n attempt: attempt + 1,\n error: mapped,\n })\n : Math.min(1000, 100 * 2 ** attempt);\n try {\n await waitForRetry(delay, signal);\n } catch (waitError) {\n throw (\n s3InterruptionError(options, signal, operationName) ??\n mapS3ConditionalError(waitError, operationName)\n );\n }\n }\n }\n}\n\nasync function waitForRetry(\n milliseconds: number,\n signal: AbortSignal | undefined,\n): Promise<void> {\n if (signal?.aborted === true) {\n throw signal.reason;\n }\n await new Promise<void>((resolve, reject) => {\n const cleanup = (): void => signal?.removeEventListener('abort', abort);\n const timer = setTimeout(\n () => {\n cleanup();\n resolve();\n },\n Math.max(0, milliseconds),\n );\n const abort = (): void => {\n clearTimeout(timer);\n cleanup();\n reject(signal?.reason);\n };\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted === true) abort();\n });\n}\n\nconst S3_MIN_MULTIPART_PART_BYTES = 5 * 1024 * 1024;\nconst S3_MAX_MULTIPART_PARTS = 10_000;\nconst S3_MULTIPART_CLEANUP_TIMEOUT_MS = 5_000;\n\nasync function waitForS3Cleanup<Result>(\n request: Promise<Result>,\n signal: AbortSignal,\n): Promise<Result> {\n return new Promise<Result>((resolve, reject) => {\n const cleanup = (): void => signal.removeEventListener('abort', abort);\n const abort = (): void => {\n cleanup();\n reject(signal.reason);\n };\n signal.addEventListener('abort', abort, { once: true });\n void request.then(\n (result) => {\n cleanup();\n resolve(result);\n },\n (error: unknown) => {\n cleanup();\n reject(error);\n },\n );\n if (signal.aborted) abort();\n });\n}\n\nasync function abortMultipartUpload(\n base: S3RequestAdapter,\n key: string,\n uploadId: string,\n callerSignal: AbortSignal | undefined,\n): Promise<void> {\n const cleanupController = new AbortController();\n const cleanupTimeout = setTimeout(\n () => cleanupController.abort(),\n S3_MULTIPART_CLEANUP_TIMEOUT_MS,\n );\n const cleanupSignal =\n callerSignal === undefined\n ? cleanupController.signal\n : AbortSignal.any([callerSignal, cleanupController.signal]);\n try {\n await waitForS3Cleanup(\n base.raw.send(\n new AbortMultipartUploadCommand({\n Bucket: base.bucket,\n Key: key,\n UploadId: uploadId,\n }),\n { abortSignal: cleanupSignal },\n ),\n cleanupSignal,\n );\n } finally {\n clearTimeout(cleanupTimeout);\n }\n}\n\nfunction conditionalHeaders(\n condition: StorageConditionalUploadOptions['condition'],\n key: string,\n): { IfMatch?: string; IfNoneMatch?: string } {\n return condition.type === 'create'\n ? { IfNoneMatch: '*' }\n : {\n IfMatch: etagHeader(condition.etag, key, 'upload', 'condition.etag'),\n };\n}\n\nfunction rangeHeader(\n range: StorageConditionalReadOptions['range'],\n): string | undefined {\n if (range === undefined) return undefined;\n return `bytes=${range.start}-${range.end ?? ''}`;\n}\n\nfunction s3ResponseStream(body: unknown): ReadableStream<Uint8Array> {\n let stream: ReadableStream<Uint8Array>;\n if (body instanceof ReadableStream) {\n stream = body;\n } else if (body instanceof Readable) {\n stream = Readable.toWeb(body) as ReadableStream<Uint8Array>;\n } else if (\n typeof body === 'object' &&\n body !== null &&\n 'transformToWebStream' in body &&\n typeof body.transformToWebStream === 'function'\n ) {\n stream = body.transformToWebStream() as ReadableStream<Uint8Array>;\n } else {\n throw new StorageError('Conditional S3 download returned no body stream.', {\n code: StorageErrorCode.PROVIDER,\n operation: 'download',\n permanent: true,\n });\n }\n\n const reader = stream.getReader();\n return new ReadableStream<Uint8Array>({\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } catch (error) {\n throw mapS3ConditionalError(error, 'download');\n } finally {\n reader.releaseLock();\n }\n },\n async pull(controller) {\n try {\n const result = await reader.read();\n if (result.done) {\n reader.releaseLock();\n controller.close();\n return;\n }\n controller.enqueue(result.value);\n } catch (error) {\n reader.releaseLock();\n controller.error(mapS3ConditionalError(error, 'download'));\n }\n },\n });\n}\n\nasync function* multipartParts(\n source: Uint8Array | ReadableStream<Uint8Array>,\n partSize: number,\n): AsyncGenerator<Uint8Array> {\n if (source instanceof Uint8Array) {\n for (let offset = 0; offset < source.byteLength; offset += partSize) {\n yield source.subarray(\n offset,\n Math.min(offset + partSize, source.byteLength),\n );\n }\n return;\n }\n\n const reader = source.getReader();\n let buffered = new Uint8Array(0);\n try {\n for (;;) {\n const result = await reader.read();\n if (result.done) break;\n const combined = new Uint8Array(\n buffered.byteLength + result.value.byteLength,\n );\n combined.set(buffered);\n combined.set(result.value, buffered.byteLength);\n buffered = combined;\n while (buffered.byteLength >= partSize) {\n yield buffered.slice(0, partSize);\n buffered = buffered.slice(partSize);\n }\n }\n if (buffered.byteLength > 0) yield buffered;\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction missingResultEtag(key: string): StorageError {\n return new StorageError(\n 'S3 committed a conditional upload without returning the ETag required to identify its result; reconcile the destination before retrying.',\n {\n applied: true,\n code: StorageErrorCode.PROVIDER,\n key,\n operation: 'upload',\n permanent: true,\n },\n );\n}\n\nfunction conditionalResultEtag(etag: unknown, key: string): string {\n try {\n const normalized = providerEtag(etag, key, 'upload');\n if (normalized === undefined) throw missingResultEtag(key);\n return normalized;\n } catch (error) {\n if (!isStorageError(error) || error.applied) throw error;\n throw new StorageError(error.message, {\n aborted: error.aborted,\n applied: true,\n code: error.code,\n key,\n operation: 'upload',\n permanent: true,\n timedOut: error.timedOut,\n });\n }\n}\n\nfunction filesConditionalUploadResultOf(\n result: StorageUploadResult,\n): ConditionalUploadResult {\n const etag = conditionalResultEtag(result.etag, result.key);\n return {\n contentType: result.contentType,\n etag,\n key: result.key,\n ...(result.lastModified !== undefined && {\n lastModified: result.lastModified.getTime(),\n }),\n size: result.size,\n };\n}\n\ntype S3RequestAdapter = Pick<S3Adapter, 'bucket' | 'raw'>;\n\nasync function uploadConditionalSingle(\n base: S3RequestAdapter,\n key: string,\n body: StorageBody,\n conditional: StorageConditionalUploadOptions,\n): Promise<StorageUploadResult> {\n const normalized = await normalizeConditionalBody(\n body,\n conditional.onProgress,\n );\n const contentType = contentTypeOf(body, conditional.contentType);\n const retryOptions: StorageOperationOptions =\n normalized.contentLength === undefined\n ? { ...conditional, retries: 0 }\n : conditional;\n const result = await withS3Retry(retryOptions, 'upload', (signal) =>\n base.raw.send(\n new PutObjectCommand({\n Body: normalized.body,\n Bucket: base.bucket,\n ...(conditional.cacheControl !== undefined && {\n CacheControl: conditional.cacheControl,\n }),\n ...(normalized.contentLength !== undefined && {\n ContentLength: normalized.contentLength,\n }),\n ContentType: contentType,\n ...conditionalHeaders(conditional.condition, key),\n Key: key,\n ...(conditional.metadata !== undefined && {\n Metadata: conditional.metadata,\n }),\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n ),\n );\n const size = normalized.size();\n conditional.onProgress?.({\n loaded: size,\n ...(normalized.contentLength !== undefined && {\n total: normalized.contentLength,\n }),\n });\n const etag = conditionalResultEtag(result.ETag, key);\n return { contentType, etag, key, size };\n}\n\nasync function uploadConditionalMultipart(\n base: S3RequestAdapter,\n key: string,\n body: StorageBody,\n conditional: StorageConditionalUploadOptions,\n): Promise<StorageUploadResult> {\n const configuredPartSize =\n typeof conditional.multipart === 'object'\n ? conditional.multipart.partSize\n : undefined;\n if (\n configuredPartSize !== undefined &&\n (!Number.isSafeInteger(configuredPartSize) || configuredPartSize <= 0)\n ) {\n throw new StorageError(\n 'multipart.partSize must be a positive safe integer.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n operation: 'upload',\n permanent: true,\n },\n );\n }\n const partSize = Math.max(\n S3_MIN_MULTIPART_PART_BYTES,\n configuredPartSize ?? S3_MIN_MULTIPART_PART_BYTES,\n );\n const cleanupSignal = operationSignal(conditional);\n const normalized = await normalizeConditionalBody(body, undefined);\n if (normalized.contentLength === 0) {\n return uploadConditionalSingle(base, key, new Uint8Array(), {\n ...conditional,\n multipart: false,\n });\n }\n const contentType = contentTypeOf(body, conditional.contentType);\n let uploadId: string | undefined;\n let size = 0;\n try {\n const created = await withS3Retry(conditional, 'upload', (signal) =>\n base.raw.send(\n new CreateMultipartUploadCommand({\n Bucket: base.bucket,\n ...(conditional.cacheControl !== undefined && {\n CacheControl: conditional.cacheControl,\n }),\n ContentType: contentType,\n Key: key,\n ...(conditional.metadata !== undefined && {\n Metadata: conditional.metadata,\n }),\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n ),\n );\n uploadId = created.UploadId;\n if (uploadId === undefined || uploadId.length === 0) {\n throw new StorageError('S3 did not return a multipart upload ID.', {\n code: StorageErrorCode.PROVIDER,\n key,\n operation: 'upload',\n permanent: true,\n });\n }\n\n const completedParts: Array<{ ETag: string; PartNumber: number }> = [];\n let partNumber = 0;\n for await (const part of multipartParts(normalized.body, partSize)) {\n partNumber += 1;\n if (partNumber > S3_MAX_MULTIPART_PARTS) {\n throw new StorageError(\n `Conditional multipart upload exceeds the ${S3_MAX_MULTIPART_PARTS}-part S3 limit.`,\n {\n code: StorageErrorCode.LIMIT_EXCEEDED,\n key,\n operation: 'upload',\n permanent: true,\n },\n );\n }\n const uploaded = await withS3Retry(conditional, 'upload', (signal) =>\n base.raw.send(\n new UploadPartCommand({\n Body: part,\n Bucket: base.bucket,\n ContentLength: part.byteLength,\n Key: key,\n PartNumber: partNumber,\n UploadId: uploadId,\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n ),\n );\n const partEtag = providerEtag(uploaded.ETag, key, 'upload');\n if (partEtag === undefined) {\n throw new StorageError('S3 upload part returned no ETag.', {\n code: StorageErrorCode.PROVIDER,\n key,\n operation: 'upload',\n permanent: true,\n });\n }\n completedParts.push({\n ETag: storageEtagHeader(partEtag)!,\n PartNumber: partNumber,\n });\n size += part.byteLength;\n conditional.onProgress?.({\n loaded: size,\n ...(normalized.contentLength !== undefined && {\n total: normalized.contentLength,\n }),\n });\n }\n if (completedParts.length === 0) {\n const emptyUploadId = uploadId;\n uploadId = undefined;\n await abortMultipartUpload(base, key, emptyUploadId, cleanupSignal);\n return uploadConditionalSingle(base, key, new Uint8Array(), {\n ...conditional,\n multipart: false,\n });\n }\n\n const completed = await withS3Retry(conditional, 'upload', (signal) =>\n base.raw.send(\n new CompleteMultipartUploadCommand({\n Bucket: base.bucket,\n ...conditionalHeaders(conditional.condition, key),\n Key: key,\n MultipartUpload: { Parts: completedParts },\n UploadId: uploadId,\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n ),\n );\n const etag = conditionalResultEtag(completed.ETag, key);\n uploadId = undefined;\n return { contentType, etag, key, size };\n } catch (error) {\n if (uploadId !== undefined) {\n await abortMultipartUpload(base, key, uploadId, cleanupSignal).catch(\n () => undefined,\n );\n }\n throw error;\n }\n}\n\nfunction profileUsesConditionalHeaders(profile: S3ProviderProfile): boolean {\n return (\n profile.conditionalCreate !== undefined ||\n profile.conditionalReplace !== undefined ||\n profile.conditionalDelete?.etag === true ||\n profile.conditionalRead?.etag === true ||\n profile.conditionalCopySource?.etag === true ||\n profile.conditionalCopyDestination?.create === true ||\n profile.conditionalCopyDestination?.replace === true ||\n profile.conditionalMultipartCompletion?.create === true ||\n profile.conditionalMultipartCompletion?.replace === true\n );\n}\n\nfunction conditionalOperationsForProfile(\n profile: S3ProviderProfile,\n adapter: S3StorageAdapter,\n upstream: AdapterConditionalOperations | undefined,\n): AdapterConditionalOperations | undefined {\n const conditional: AdapterConditionalOperations = {};\n const legacyUpload = adapter.uploadConditional;\n const legacyRead = adapter.downloadConditional;\n const legacyDelete = adapter.deleteConditional;\n const legacyCopy = adapter.promote;\n\n if (profile.conditionalCreate?.resultEtag === true) {\n if (legacyUpload !== undefined) {\n conditional.create = (key, body, options) =>\n throughFilesConditionalBoundary('upload', async () => {\n assertBufferedFilesConditionalS3Body(body, key);\n return filesConditionalUploadResultOf(\n await legacyUpload(key, body, {\n ...filesAttemptOptions(options),\n condition: { type: 'create' },\n }),\n );\n });\n }\n }\n\n if (profile.conditionalReplace?.resultEtag === true) {\n if (legacyUpload !== undefined) {\n conditional.replace = (key, body, etag, options) =>\n throughFilesConditionalBoundary('upload', async () => {\n assertBufferedFilesConditionalS3Body(body, key);\n return filesConditionalUploadResultOf(\n await legacyUpload(key, body, {\n ...filesAttemptOptions(options),\n condition: { etag, type: 'replace' },\n }),\n );\n });\n }\n }\n\n if (profile.conditionalRead?.etag === true) {\n const nativeExactRead = upstream?.exactRead;\n if (nativeExactRead !== undefined) {\n conditional.exactRead = (key, etag, options) =>\n throughFilesConditionalBoundary('download', () =>\n nativeExactRead.call(upstream, key, etag, options),\n );\n } else if (legacyRead !== undefined) {\n conditional.exactRead = (key, etag, options) =>\n throughFilesConditionalBoundary('download', async () =>\n storedFileOfStorageObject(\n await legacyRead(key, {\n ...filesAttemptOptions(options),\n condition: { etag },\n }),\n ),\n );\n }\n }\n\n if (profile.conditionalDelete?.etag === true) {\n const nativeDelete = upstream?.delete;\n if (nativeDelete !== undefined) {\n conditional.delete = (key, etag, options) =>\n throughFilesConditionalBoundary('delete', () =>\n nativeDelete.call(upstream, key, etag, options),\n );\n } else if (legacyDelete !== undefined) {\n conditional.delete = (key, etag, options) =>\n throughFilesConditionalBoundary('delete', () =>\n legacyDelete(key, {\n ...filesAttemptOptions(options),\n condition: { etag },\n }),\n );\n }\n }\n\n const destinationCreate =\n profile.conditionalCopyDestination?.atomicWithSource === true &&\n profile.conditionalCopyDestination.create === true;\n const destinationReplace =\n profile.conditionalCopyDestination?.atomicWithSource === true &&\n profile.conditionalCopyDestination.replace === true;\n if (\n profile.conditionalCopySource?.etag === true &&\n (destinationCreate || destinationReplace) &&\n legacyCopy !== undefined\n ) {\n const nativeCopy = upstream?.copy;\n conditional.copy = Object.freeze({\n atomicSourceDestination: true,\n destinationCreate,\n destinationReplace,\n async run(\n sourceKey: string,\n destinationKey: string,\n condition: CopyCondition,\n options?: FilesOperationOptions,\n ): Promise<void> {\n const destinationSupported =\n condition.destination.type === 'create'\n ? destinationCreate\n : destinationReplace;\n if (!destinationSupported) {\n throw mapStorageErrorToFilesSdkError(\n new StorageError(\n `S3 provider profile \"${profile.name}\" does not support the requested conditional copy.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key: destinationKey,\n operation: 'copy',\n permanent: true,\n },\n ),\n );\n }\n const nativeDestinationSupported =\n condition.destination.type === 'create'\n ? nativeCopy?.destinationCreate === true\n : nativeCopy?.destinationReplace === true;\n if (\n nativeCopy?.sourceEtag === true &&\n nativeCopy.atomicSourceDestination === true &&\n nativeDestinationSupported\n ) {\n return throughFilesConditionalBoundary('copy', () =>\n nativeCopy.run.call(\n nativeCopy,\n sourceKey,\n destinationKey,\n condition,\n options,\n ),\n );\n }\n return throughFilesConditionalBoundary('copy', () =>\n legacyCopy(sourceKey, destinationKey, {\n ...filesAttemptOptions(options),\n destination: condition.destination,\n sourceEtag: condition.source.etag,\n }),\n );\n },\n sourceEtag: true,\n });\n }\n\n return Object.keys(conditional).length === 0\n ? undefined\n : Object.freeze(conditional);\n}\n\nconst configuredS3Clients = new WeakSet<S3Adapter['raw']>();\nconst withheldCustomConditionalOperations = new WeakMap<\n S3Adapter['raw'],\n AdapterConditionalOperations\n>();\n\n/** Constructs the upstream S3 adapter while retaining security-relevant metadata. */\nexport function s3(options: S3AdapterOptions): S3Adapter {\n // A verified provider profile is applied only by withS3Capabilities, after\n // construction. Opt the raw custom-endpoint client into upstream's wire\n // header guard here, but hide its broad conditional surface until that\n // profile has narrowed the exact operations below.\n const implicitCustomConditional =\n options.endpoint !== undefined && options.conditional === undefined;\n const adapter = createFilesSdkS3Adapter(\n implicitCustomConditional ? { ...options, conditional: true } : options,\n );\n if (options.endpoint !== undefined && adapter.conditional !== undefined) {\n if (options.conditional === true) {\n withheldCustomConditionalOperations.set(adapter.raw, adapter.conditional);\n }\n if (!Reflect.deleteProperty(adapter, 'conditional')) {\n adapter.raw.destroy();\n throw new TypeError(\n 'The custom-endpoint S3 conditional surface could not be withheld before provider verification.',\n );\n }\n }\n recordS3ConditionalRequestPermission(\n adapter.raw,\n options.conditional !== false,\n );\n markFilesSdkS3AdapterUndecorated(adapter);\n recordS3ConstructionMetadata(adapter.raw, {\n publicBaseUrlConfigured: options.publicBaseUrl !== undefined,\n });\n return adapter;\n}\n\n/**\n * Adds only the exact operations declared by one verified provider profile.\n * Each raw adapter may be decorated once so capability state cannot depend on\n * profile application order. A native AWS SDK endpoint also bounds every\n * explicit profile by the built-in AWS capability ceiling.\n */\nexport function withS3Capabilities(\n base: S3Adapter,\n options: Pick<S3AdapterOptions, 'endpoint' | 'publicBaseUrl'> & {\n providerProfile?: S3ProviderProfile;\n } = {},\n): S3StorageAdapter {\n const raw = base.raw;\n if (configuredS3Clients.has(raw)) {\n throw new TypeError(\n 'withS3Capabilities may only be applied once to an S3 adapter.',\n );\n }\n assertFilesSdkS3AdapterHasNoReservedExtensions(base);\n const sdkHasCustomEndpoint = raw.config.isCustomEndpoint === true;\n if (options.endpoint !== undefined && !sdkHasCustomEndpoint) {\n throw new TypeError(\n 'The declared S3 endpoint does not match the SDK client endpoint provenance.',\n );\n }\n if (!sdkHasCustomEndpoint) {\n // files-sdk does not expose this S3Client constructor option. Endpoint\n // resolution is lazy, so fixing the resolved SDK config before the adapter\n // is exposed prevents environment and shared-config endpoint redirection.\n raw.config.ignoreConfiguredEndpointUrls = true;\n }\n const inferredNativeAws = base.name === 's3' && !sdkHasCustomEndpoint;\n const profile =\n options.providerProfile ??\n (inferredNativeAws\n ? AWS_S3_PROVIDER_PROFILE\n : UNVERIFIED_S3_PROVIDER_PROFILE);\n assertVerifiedS3ProviderProfile(profile);\n const upstreamConditional =\n base.conditional ?? withheldCustomConditionalOperations.get(raw);\n if (\n profileUsesConditionalHeaders(profile) &&\n upstreamConditional === undefined &&\n getS3ConditionalRequestPermission(raw) !== true\n ) {\n throw new TypeError(\n `S3 provider profile \"${profile.name}\" requires conditional request headers, but the adapter was not constructed with conditional requests enabled.`,\n );\n }\n if (!sdkHasCustomEndpoint) {\n assertS3ProviderProfileContainedBy(profile, AWS_S3_PROVIDER_PROFILE);\n }\n const provenance =\n options.providerProfile === undefined\n ? inferredNativeAws\n ? 'native'\n : 'unverified'\n : inferredNativeAws\n ? 'native'\n : 'verified';\n const constructionMetadata = getS3ConstructionMetadata(raw);\n const publicBaseUrlConfigured =\n options.publicBaseUrl !== undefined ||\n constructionMetadata?.publicBaseUrlConfigured === true;\n const bucket = base.bucket;\n const requestAdapter: S3RequestAdapter = { bucket, raw };\n const signedUploadUrl: S3Adapter['signedUploadUrl'] = async (\n key,\n signOptions,\n ) => {\n if (\n signOptions.minSize !== undefined &&\n signOptions.maxSize === undefined\n ) {\n throw new StorageError(\n 'S3 signed uploads cannot enforce minSize without maxSize.',\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'signUpload',\n permanent: true,\n },\n );\n }\n if (signOptions.maxSize !== undefined && key.endsWith('${filename}')) {\n throw new StorageError(\n 'Signed POST keys must not end with the AWS ${filename} template.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n operation: 'signUpload',\n permanent: true,\n },\n );\n }\n if (\n signOptions.contentType !== undefined &&\n profile.signedUploadPolicy.contentType !== true\n ) {\n throw new StorageError(\n `S3 provider profile \"${profile.name}\" cannot enforce signed-upload contentType.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'signUpload',\n permanent: true,\n },\n );\n }\n if (\n signOptions.maxSize !== undefined &&\n profile.signedUploadPolicy.sizeRange !== true\n ) {\n throw new StorageError(\n `S3 provider profile \"${profile.name}\" cannot enforce signed-upload sizeRange.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'signUpload',\n permanent: true,\n },\n );\n }\n\n try {\n if (signOptions.maxSize !== undefined) {\n const conditions: NonNullable<PresignedPostOptions['Conditions']> = [\n [\n 'content-length-range',\n signOptions.minSize ?? 1,\n signOptions.maxSize,\n ],\n ];\n if (signOptions.contentType !== undefined) {\n conditions.push(['eq', '$Content-Type', signOptions.contentType]);\n }\n const post = await createPresignedPost(raw, {\n Bucket: bucket,\n Conditions: conditions,\n Expires: signOptions.expiresIn,\n Key: key,\n ...(signOptions.contentType !== undefined && {\n Fields: { 'Content-Type': signOptions.contentType },\n }),\n });\n return { fields: post.fields, method: 'POST', url: post.url };\n }\n\n const url = await getSignedUrl(\n raw,\n new PutObjectCommand({\n Bucket: bucket,\n Key: key,\n ...(signOptions.contentType !== undefined && {\n ContentType: signOptions.contentType,\n }),\n }),\n {\n expiresIn: signOptions.expiresIn,\n ...(signOptions.contentType !== undefined && {\n signableHeaders: new Set(['content-type']),\n }),\n },\n );\n return {\n ...(signOptions.contentType !== undefined && {\n headers: { 'Content-Type': signOptions.contentType },\n }),\n method: 'PUT',\n url,\n };\n } catch (error: unknown) {\n throw mapS3Error(error);\n }\n };\n const adapter = Object.assign(base, {\n physicalKey: profile.physicalKey,\n signedUploadPolicy: profile.signedUploadPolicy,\n signedUploadUrl,\n signedDownloadPolicy: Object.freeze({\n expiresIn: constructionMetadata !== undefined && !publicBaseUrlConfigured,\n }),\n } satisfies FilesSdkPhysicalKeyAdapter &\n FilesSdkSignedDownloadPolicyAdapter &\n FilesSdkSignedUploadPolicyAdapter &\n Pick<S3Adapter, 'signedUploadUrl'>) as S3StorageAdapter;\n\n if (\n profile.conditionalCopySource !== undefined ||\n profile.conditionalCopyDestination !== undefined\n ) {\n Object.assign(adapter, {\n ...(profile.conditionalCopySource !== undefined && {\n conditionalCopySource: profile.conditionalCopySource,\n }),\n ...(profile.conditionalCopyDestination !== undefined && {\n conditionalCopyDestination: profile.conditionalCopyDestination,\n }),\n async promote(\n sourceKey: string,\n destinationKey: string,\n promotion: StoragePromotionOptions,\n ): Promise<void> {\n assertS3Key(sourceKey, 'source key', 'copy');\n assertS3Key(destinationKey, 'destination key', 'copy');\n assertPromotionInput(sourceKey, destinationKey, promotion);\n if (\n (promotion.sourceEtag !== undefined &&\n profile.conditionalCopySource?.etag !== true) ||\n (promotion.sourceVersion !== undefined &&\n profile.conditionalCopySource?.version !== true) ||\n ((promotion.sourceEtag !== undefined ||\n promotion.sourceVersion !== undefined) &&\n promotion.destination === undefined &&\n profile.conditionalCopySource?.requiresDestinationPredicate ===\n true) ||\n (promotion.destination?.type === 'create' &&\n profile.conditionalCopyDestination?.create !== true) ||\n (promotion.destination?.type === 'replace' &&\n profile.conditionalCopyDestination?.replace !== true) ||\n (promotion.destination !== undefined &&\n promotion.sourceEtag === undefined &&\n promotion.sourceVersion === undefined &&\n profile.conditionalCopyDestination?.requiresSourcePredicate ===\n true) ||\n (promotion.destination !== undefined &&\n (promotion.sourceEtag !== undefined ||\n promotion.sourceVersion !== undefined) &&\n profile.conditionalCopyDestination?.atomicWithSource !== true)\n ) {\n throw new StorageError(\n `S3 provider profile \"${profile.name}\" does not support the requested conditional promotion.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key: sourceKey,\n operation: 'promote',\n permanent: true,\n },\n );\n }\n await withS3Retry(promotion, 'copy', async (signal) => {\n await raw.send(\n new CopyObjectCommand({\n Bucket: bucket,\n CopySource: copySource(\n bucket,\n sourceKey,\n promotion.sourceVersion,\n ),\n ...(promotion.sourceEtag !== undefined && {\n CopySourceIfMatch: etagHeader(\n promotion.sourceEtag,\n sourceKey,\n 'copy',\n 'sourceEtag',\n ),\n }),\n ...(promotion.destination?.type === 'create'\n ? { IfNoneMatch: '*' }\n : promotion.destination?.type === 'replace'\n ? {\n IfMatch: etagHeader(\n promotion.destination.etag,\n destinationKey,\n 'copy',\n 'destination.etag',\n ),\n }\n : {}),\n Key: destinationKey,\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n );\n });\n },\n } satisfies FilesSdkConditionalCopyAdapter);\n }\n\n if (profile.conditionalRead !== undefined) {\n Object.assign(adapter, {\n conditionalRead: profile.conditionalRead,\n async downloadConditional(\n key: string,\n options: StorageConditionalReadOptions,\n ): Promise<StorageObject> {\n assertS3Key(key, 'key', 'download');\n assertConditionalReadInput(key, options);\n if (\n (options.condition.etag !== undefined &&\n profile.conditionalRead?.etag !== true) ||\n (options.condition.version !== undefined &&\n profile.conditionalRead?.version !== true)\n ) {\n throw new StorageError(\n `S3 provider profile \"${profile.name}\" does not support the requested conditional read.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'download',\n permanent: true,\n },\n );\n }\n const result = await withS3Retry(options, 'download', (signal) =>\n raw.send(\n new GetObjectCommand({\n Bucket: bucket,\n ...(options.condition.etag !== undefined && {\n IfMatch: etagHeader(\n options.condition.etag,\n key,\n 'download',\n 'condition.etag',\n ),\n }),\n Key: key,\n ...(rangeHeader(options.range) !== undefined && {\n Range: rangeHeader(options.range),\n }),\n ...(options.condition.version !== undefined && {\n VersionId: options.condition.version,\n }),\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n ),\n );\n const etag = providerEtag(result.ETag, key, 'download');\n return {\n body: s3ResponseStream(result.Body),\n contentType: result.ContentType ?? 'application/octet-stream',\n ...(etag !== undefined && { etag }),\n key,\n ...(result.LastModified !== undefined && {\n lastModified: result.LastModified,\n }),\n ...(result.Metadata !== undefined && { metadata: result.Metadata }),\n name: key.split('/').at(-1) ?? key,\n size: Number(result.ContentLength ?? 0),\n };\n },\n } satisfies FilesSdkConditionalReadAdapter);\n }\n\n if (profile.conditionalDelete?.etag === true) {\n Object.assign(adapter, {\n conditionalDelete: profile.conditionalDelete,\n async deleteConditional(\n key: string,\n options: StorageConditionalDeleteOptions,\n ): Promise<void> {\n assertS3Key(key, 'key', 'delete');\n etagHeader(options?.condition?.etag, key, 'delete', 'condition.etag');\n await withS3Retry(options, 'delete', async (signal) => {\n await raw.send(\n new DeleteObjectCommand({\n Bucket: bucket,\n IfMatch: etagHeader(\n options.condition.etag,\n key,\n 'delete',\n 'condition.etag',\n ),\n Key: key,\n }),\n signal === undefined ? undefined : { abortSignal: signal },\n );\n });\n },\n } satisfies FilesSdkConditionalDeleteAdapter);\n }\n\n if (\n profile.conditionalCreate !== undefined ||\n profile.conditionalReplace !== undefined\n ) {\n Object.assign(adapter, {\n ...(profile.conditionalCreate !== undefined && {\n conditionalCreate: profile.conditionalCreate,\n }),\n ...(profile.conditionalReplace !== undefined && {\n conditionalReplace: profile.conditionalReplace,\n }),\n ...(profile.conditionalMultipartCompletion !== undefined && {\n conditionalMultipartCompletion: profile.conditionalMultipartCompletion,\n }),\n async uploadConditional(\n key: string,\n body: StorageBody,\n conditional: StorageConditionalUploadOptions,\n ): Promise<StorageUploadResult> {\n assertS3Key(key, 'key', 'upload');\n assertConditionalUploadInput(key, conditional);\n const supported =\n conditional.condition.type === 'create'\n ? profile.conditionalCreate !== undefined\n : profile.conditionalReplace !== undefined;\n const multipartRequested =\n conditional.multipart !== undefined &&\n conditional.multipart !== false;\n const multipartSupported =\n !multipartRequested ||\n (conditional.condition.type === 'create'\n ? profile.conditionalMultipartCompletion?.create === true\n : profile.conditionalMultipartCompletion?.replace === true);\n if (!supported || !multipartSupported) {\n throw new StorageError(\n `S3 provider profile \"${profile.name}\" does not support the requested conditional upload.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'upload',\n permanent: true,\n },\n );\n }\n if (conditional.control !== undefined) {\n throw new StorageError(\n 'Conditional S3 uploads do not support resumable control.',\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'upload',\n permanent: true,\n },\n );\n }\n return multipartRequested\n ? uploadConditionalMultipart(requestAdapter, key, body, conditional)\n : uploadConditionalSingle(requestAdapter, key, body, conditional);\n },\n } satisfies FilesSdkConditionalUploadAdapter);\n }\n\n Object.assign(adapter, {\n conditional: conditionalOperationsForProfile(\n profile,\n adapter,\n upstreamConditional,\n ),\n });\n\n Object.freeze(adapter);\n markFilesSdkS3RawClientProvenance(raw, adapter, provenance);\n configuredS3Clients.add(raw);\n return adapter;\n}\n\n/**\n * Creates the files-sdk S3 driver from the storage package's own dependency\n * context and exposes only the operations in its verified provider profile.\n */\nexport function createS3StorageDriver(\n options: S3StorageDriverOptions,\n): FilesSdkStorageDriver<S3StorageAdapter> {\n const { adapter: adapterOptions, ...filesOptions } = options;\n const { providerProfile, ...plainFilesOptions } = filesOptions;\n const unverifiedCustomEndpoint =\n adapterOptions.endpoint !== undefined && providerProfile === undefined;\n return createFilesSdkDriver({\n ...plainFilesOptions,\n ...(unverifiedCustomEndpoint && { readonly: true }),\n adapter: withS3Capabilities(s3(adapterOptions), {\n ...adapterOptions,\n ...(providerProfile !== undefined && { providerProfile }),\n }),\n });\n}\n\nexport { mapS3Error };\nexport type { S3Adapter, S3AdapterOptions, S3Sdk } from 'files-sdk/s3';\n"]}
@@ -1,3 +1,3 @@
1
1
  export { StorageGatewayModule } from './storage-gateway.module.js';
2
- export { StorageGatewayOperation, type StorageGatewayMode, type StorageGatewayOperation as StorageGatewayOperationName, type StorageGatewayOptions, } from './storage-gateway.types.js';
2
+ export { StorageGatewayOperation, type ParsedStorageGatewayKey, type StorageGatewayKeyPolicy, type StorageGatewayKeyPolicyContext, type StorageGatewayKeyTarget, type StorageGatewayMode, type StorageGatewayOperation as StorageGatewayOperationName, type StorageGatewayOptions, } from './storage-gateway.types.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,IAAI,2BAA2B,EAC3D,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,IAAI,2BAA2B,EAC3D,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,uBAAuB,GAIxB,MAAM,4BAA4B,CAAC","sourcesContent":["export { StorageGatewayModule } from './storage-gateway.module.js';\nexport {\n StorageGatewayOperation,\n type StorageGatewayMode,\n type StorageGatewayOperation as StorageGatewayOperationName,\n type StorageGatewayOptions,\n} from './storage-gateway.types.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,uBAAuB,GAQxB,MAAM,4BAA4B,CAAC","sourcesContent":["export { StorageGatewayModule } from './storage-gateway.module.js';\nexport {\n StorageGatewayOperation,\n type ParsedStorageGatewayKey,\n type StorageGatewayKeyPolicy,\n type StorageGatewayKeyPolicyContext,\n type StorageGatewayKeyTarget,\n type StorageGatewayMode,\n type StorageGatewayOperation as StorageGatewayOperationName,\n type StorageGatewayOptions,\n} from './storage-gateway.types.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"storage-gateway-fastify-parser.d.ts","sourceRoot":"","sources":["../../src/gateway/storage-gateway-fastify-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/C,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAqBzE,qBACa,2BAA4B,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAEzD,YAAY,IAAI,IAAI;CAyBrB"}
1
+ {"version":3,"file":"storage-gateway-fastify-parser.d.ts","sourceRoot":"","sources":["../../src/gateway/storage-gateway-fastify-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/C,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAqBzE,qBACa,2BAA4B,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAxC,YAA6B,WAAW,EAAE,eAAe,EAAI;IAE7D,YAAY,IAAI,IAAI,CAwBnB;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage-gateway-fastify-parser.js","sourceRoot":"","sources":["../../src/gateway/storage-gateway-fastify-parser.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,6BAA6B,GAE9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/C,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAC;AAEzE,SAAS,oBAAoB;IAC3B,OAAO,IAAI,6BAA6B,CACtC,kDAAkD,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAuC,CAAC;IAC1D,OAAO,CACL,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU;QACpD,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU,CACrD,CAAC;AACJ,CAAC;AAGM,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACT;IAA7B,YAA6B,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IAAG,CAAC;IAE7D,YAAY;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5D,IACE,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YAClC,QAAQ,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,EACzD,CAAC;YACD,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,oBAAoB,CAC3B,0BAA0B,EAC1B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,OAA+B,CAAC;YACtD,IACE,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,CAClC,6BAA6B,CAC9B,KAAK,IAAI,EACV,CAAC;gBACD,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtB,CAAC,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5BY,2BAA2B;IADvC,UAAU,EAAE;qCAE+B,eAAe;GAD9C,2BAA2B,CA4BvC","sourcesContent":["import {\n Injectable,\n UnsupportedMediaTypeException,\n type OnModuleInit,\n} from '@nestjs/common';\nimport { HttpAdapterHost } from '@nestjs/core';\nimport type { Readable } from 'node:stream';\n\ninterface FastifyParserInstance {\n hasContentTypeParser(contentType: string): boolean;\n addContentTypeParser(\n contentType: string,\n parser: (\n request: unknown,\n payload: Readable,\n done: (error: Error | null, body?: unknown) => void,\n ) => void,\n ): void;\n}\n\ninterface FastifyParserRequest {\n routeOptions?: {\n config?: Record<string, unknown>;\n };\n}\n\nexport const FASTIFY_STORAGE_UPLOAD_CONFIG = 'nestmStorageGatewayUpload';\n\nfunction unsupportedMediaType(): Error {\n return new UnsupportedMediaTypeException(\n 'Unsupported Media Type: application/octet-stream',\n );\n}\n\nfunction isFastifyParserInstance(\n value: unknown,\n): value is FastifyParserInstance {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const candidate = value as Partial<FastifyParserInstance>;\n return (\n typeof candidate.addContentTypeParser === 'function' &&\n typeof candidate.hasContentTypeParser === 'function'\n );\n}\n\n@Injectable()\nexport class StorageGatewayFastifyParser implements OnModuleInit {\n constructor(private readonly adapterHost: HttpAdapterHost) {}\n\n onModuleInit(): void {\n const instance = this.adapterHost.httpAdapter.getInstance();\n if (\n !isFastifyParserInstance(instance) ||\n instance.hasContentTypeParser('application/octet-stream')\n ) {\n return;\n }\n\n instance.addContentTypeParser(\n 'application/octet-stream',\n (request, payload, done) => {\n const parserRequest = request as FastifyParserRequest;\n if (\n parserRequest.routeOptions?.config?.[\n FASTIFY_STORAGE_UPLOAD_CONFIG\n ] !== true\n ) {\n done(unsupportedMediaType());\n return;\n }\n done(null, payload);\n },\n );\n }\n}\n"]}
1
+ {"version":3,"file":"storage-gateway-fastify-parser.js","sourceRoot":"","sources":["../../src/gateway/storage-gateway-fastify-parser.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,6BAA6B,GAE9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/C,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAC;AAEzE,SAAS,oBAAoB;IAC3B,OAAO,IAAI,6BAA6B,CACtC,kDAAkD,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAuC,CAAC;IAC1D,OAAO,CACL,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU;QACpD,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU,CACrD,CAAC;AACJ,CAAC;AAGM,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACT,WAAW;IAAxC,YAA6B,WAA4B;2BAA5B,WAAW;IAAoB,CAAC;IAE7D,YAAY;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5D,IACE,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YAClC,QAAQ,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,EACzD,CAAC;YACD,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,oBAAoB,CAC3B,0BAA0B,EAC1B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,OAA+B,CAAC;YACtD,IACE,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,CAClC,6BAA6B,CAC9B,KAAK,IAAI,EACV,CAAC;gBACD,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtB,CAAC,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5BY,2BAA2B;IADvC,UAAU,EAAE;qCAE+B,eAAe;GAD9C,2BAA2B,CA4BvC","sourcesContent":["import {\n Injectable,\n UnsupportedMediaTypeException,\n type OnModuleInit,\n} from '@nestjs/common';\nimport { HttpAdapterHost } from '@nestjs/core';\nimport type { Readable } from 'node:stream';\n\ninterface FastifyParserInstance {\n hasContentTypeParser(contentType: string): boolean;\n addContentTypeParser(\n contentType: string,\n parser: (\n request: unknown,\n payload: Readable,\n done: (error: Error | null, body?: unknown) => void,\n ) => void,\n ): void;\n}\n\ninterface FastifyParserRequest {\n routeOptions?: {\n config?: Record<string, unknown>;\n };\n}\n\nexport const FASTIFY_STORAGE_UPLOAD_CONFIG = 'nestmStorageGatewayUpload';\n\nfunction unsupportedMediaType(): Error {\n return new UnsupportedMediaTypeException(\n 'Unsupported Media Type: application/octet-stream',\n );\n}\n\nfunction isFastifyParserInstance(\n value: unknown,\n): value is FastifyParserInstance {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const candidate = value as Partial<FastifyParserInstance>;\n return (\n typeof candidate.addContentTypeParser === 'function' &&\n typeof candidate.hasContentTypeParser === 'function'\n );\n}\n\n@Injectable()\nexport class StorageGatewayFastifyParser implements OnModuleInit {\n constructor(private readonly adapterHost: HttpAdapterHost) {}\n\n onModuleInit(): void {\n const instance = this.adapterHost.httpAdapter.getInstance();\n if (\n !isFastifyParserInstance(instance) ||\n instance.hasContentTypeParser('application/octet-stream')\n ) {\n return;\n }\n\n instance.addContentTypeParser(\n 'application/octet-stream',\n (request, payload, done) => {\n const parserRequest = request as FastifyParserRequest;\n if (\n parserRequest.routeOptions?.config?.[\n FASTIFY_STORAGE_UPLOAD_CONFIG\n ] !== true\n ) {\n done(unsupportedMediaType());\n return;\n }\n done(null, payload);\n },\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { StorageService } from '../storage.service.js';
2
- import { type ResolvedStorageGatewayOptions } from './storage-gateway.types.js';
2
+ import { type ResolvedStorageGatewayOptions, type StorageGatewayKeyPolicy } from './storage-gateway.types.js';
3
3
  interface ResponseEnvelope<Result> {
4
4
  data: Result;
5
5
  }
@@ -7,23 +7,24 @@ export declare class StorageGatewayController {
7
7
  #private;
8
8
  private readonly storage;
9
9
  private readonly options;
10
- constructor(storage: StorageService, options: ResolvedStorageGatewayOptions);
11
- download(key: string | undefined, proxy: string | undefined, rangeStart: string | undefined, rangeEnd: string | undefined, disposition: string | undefined, response: unknown): Promise<void>;
10
+ private readonly keyPolicy;
11
+ constructor(storage: StorageService, options: ResolvedStorageGatewayOptions, keyPolicy: StorageGatewayKeyPolicy);
12
+ download(key: string | undefined, proxy: string | undefined, rangeStart: string | undefined, rangeEnd: string | undefined, disposition: string | undefined, request: unknown, response: unknown): Promise<void>;
12
13
  upload(key: string | undefined, request: unknown): Promise<ResponseEnvelope<unknown>>;
13
- head(key: string | undefined, response: unknown): Promise<void>;
14
- delete(key: string | undefined): Promise<ResponseEnvelope<{
14
+ head(key: string | undefined, request: unknown, response: unknown): Promise<void>;
15
+ delete(key: string | undefined, request: unknown): Promise<ResponseEnvelope<{
15
16
  deleted: true;
16
17
  }>>;
17
- list(prefix: string | undefined, cursor: string | undefined, limit: string | undefined, delimiter: string | undefined): Promise<ResponseEnvelope<unknown>>;
18
- search(pattern: string | undefined, prefix: string | undefined, limit: string | undefined, maxResults: string | undefined, match: string | undefined, caseInsensitive: string | undefined): Promise<ResponseEnvelope<unknown>>;
19
- signDownload(body: unknown): Promise<ResponseEnvelope<{
18
+ list(prefix: string | undefined, cursor: string | undefined, limit: string | undefined, delimiter: string | undefined, request: unknown): Promise<ResponseEnvelope<unknown>>;
19
+ search(pattern: string | undefined, prefix: string | undefined, limit: string | undefined, maxResults: string | undefined, match: string | undefined, caseInsensitive: string | undefined, request: unknown): Promise<ResponseEnvelope<unknown>>;
20
+ signDownload(body: unknown, request: unknown): Promise<ResponseEnvelope<{
20
21
  url: string;
21
22
  }>>;
22
- signUpload(body: unknown): Promise<ResponseEnvelope<unknown>>;
23
- copy(body: unknown): Promise<ResponseEnvelope<{
23
+ signUpload(body: unknown, request: unknown): Promise<ResponseEnvelope<unknown>>;
24
+ copy(body: unknown, request: unknown): Promise<ResponseEnvelope<{
24
25
  copied: true;
25
26
  }>>;
26
- move(body: unknown): Promise<ResponseEnvelope<{
27
+ move(body: unknown, request: unknown): Promise<ResponseEnvelope<{
27
28
  moved: true;
28
29
  }>>;
29
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage-gateway.controller.d.ts","sourceRoot":"","sources":["../../src/gateway/storage-gateway.controller.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAWvD,OAAO,EAEL,KAAK,6BAA6B,EAEnC,MAAM,4BAA4B,CAAC;AAEpC,UAAU,gBAAgB,CAAC,MAAM;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAgQD,qBAEa,wBAAwB;;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,OAAO,EAAE,cAAc,EAEvB,OAAO,EAAE,6BAA6B;IAInD,QAAQ,CACE,GAAG,EAAE,MAAM,GAAG,SAAS,EACrB,KAAK,EAAE,MAAM,GAAG,SAAS,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC9C,QAAQ,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IA0GV,MAAM,CACI,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAuD/B,IAAI,CACM,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IAcV,MAAM,CACI,GAAG,EAAE,MAAM,GAAG,SAAS,GACpC,OAAO,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IASzC,IAAI,CACS,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACrB,SAAS,EAAE,MAAM,GAAG,SAAS,GAChD,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAqB/B,MAAM,CACQ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,EACf,eAAe,EAAE,MAAM,GAAG,SAAS,GAC5D,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAuD/B,YAAY,CACR,IAAI,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAiCvC,UAAU,CAAS,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAqCrE,IAAI,CACA,IAAI,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC;QAAE,MAAM,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAYxC,IAAI,CACA,IAAI,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;CAuC9C"}
1
+ {"version":3,"file":"storage-gateway.controller.d.ts","sourceRoot":"","sources":["../../src/gateway/storage-gateway.controller.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAcvD,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAG7B,MAAM,4BAA4B,CAAC;AAEpC,UAAU,gBAAgB,CAAC,MAAM;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAyXD,qBAEa,wBAAwB;;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,YACmB,OAAO,EAAE,cAAc,EAEvB,OAAO,EAAE,6BAA6B,EAEtC,SAAS,EAAE,uBAAuB,EACjD;IAGE,QAAQ,CACE,GAAG,EAAE,MAAM,GAAG,SAAS,EACrB,KAAK,EAAE,MAAM,GAAG,SAAS,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC9C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC,CAwHf;IAMK,MAAM,CACI,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CA2DpC;IAGK,IAAI,CACM,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC,CAkBf;IAGK,MAAM,CACI,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC,CAY9C;IAGK,IAAI,CACS,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACrB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC1C,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAwBpC;IAGK,MAAM,CACQ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,EACf,eAAe,EAAE,MAAM,GAAG,SAAS,EACtD,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CA+DpC;IAGK,YAAY,CACR,IAAI,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CA2C5C;IAGK,UAAU,CACN,IAAI,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CA4EpC;IAGK,IAAI,CACA,IAAI,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC;QAAE,MAAM,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC,CAqB7C;IAGK,IAAI,CACA,IAAI,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC,CAqB5C;CA8DF"}