@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
@@ -1 +1 @@
1
- {"version":3,"file":"files-sdk.driver.js","sourceRoot":"","sources":["../../src/files-sdk/files-sdk.driver.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\n\nimport {\n Files,\n FilesError,\n type Adapter,\n type Body,\n type DownloadOptions,\n type FilesOptions,\n type ListOptions,\n type OperationOptions,\n type RetryOptions,\n type SearchOptions,\n type SignUploadOptions,\n type StoredFile,\n type UploadOptions,\n type UploadResult,\n type UrlOptions,\n} from 'files-sdk';\n\nimport { StorageError, StorageErrorCode } from '../storage.error.js';\nimport type { StorageDriver } from '../storage.driver.js';\nimport type {\n StorageBody,\n StorageDownloadOptions,\n StorageListOptions,\n StorageListResult,\n StorageObject,\n StorageObjectMetadata,\n StorageOperationOptions,\n StorageRetryOptions,\n StorageSearchOptions,\n StorageSignedDownloadOptions,\n StorageSignedUpload,\n StorageSignedUploadOptions,\n StorageUploadOptions,\n StorageUploadResult,\n} from '../storage.types.js';\nimport { getFilesSdkUploadControl } from '../storage-upload-control.js';\n\nexport type FilesSdkDriverOptions<AdapterType extends Adapter> =\n FilesOptions<AdapterType>;\n\nfunction mapFilesError(error: unknown): StorageError {\n if (error instanceof StorageError) {\n return error;\n }\n if (!(error instanceof FilesError)) {\n return new StorageError(\n error instanceof Error ? error.message : String(error),\n {\n cause: error,\n code: StorageErrorCode.PROVIDER,\n },\n );\n }\n\n if (error.cause instanceof StorageError) {\n return error.cause;\n }\n\n let code: StorageErrorCode;\n if (error.timedOut) {\n code = StorageErrorCode.TIMEOUT;\n } else if (error.aborted) {\n code = StorageErrorCode.ABORTED;\n } else {\n switch (error.code) {\n case 'NotFound':\n code = StorageErrorCode.NOT_FOUND;\n break;\n case 'Unauthorized':\n code = StorageErrorCode.UNAUTHORIZED;\n break;\n case 'Conflict':\n code = StorageErrorCode.CONFLICT;\n break;\n case 'ReadOnly':\n code = StorageErrorCode.READ_ONLY;\n break;\n case 'Provider':\n code = /(?:not supported|does not support|unsupported)/iu.test(\n error.message,\n )\n ? StorageErrorCode.NOT_SUPPORTED\n : StorageErrorCode.PROVIDER;\n break;\n }\n }\n\n return new StorageError(error.message, {\n aborted: error.aborted,\n cause: error.cause ?? error,\n code,\n permanent: error.permanent,\n timedOut: error.timedOut,\n });\n}\n\nfunction mapRetryOptions(\n retries: StorageRetryOptions | undefined,\n): RetryOptions | undefined {\n if (retries === undefined || typeof retries === 'number') {\n return retries;\n }\n\n return {\n max: retries.max,\n ...(retries.backoff !== undefined && {\n backoff: ({ attempt, error }) =>\n retries.backoff?.({\n attempt,\n error: mapFilesError(error),\n }) ?? 0,\n }),\n };\n}\n\nfunction operationOptions(\n options?: StorageOperationOptions,\n): OperationOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n\n const retries = mapRetryOptions(options.retries);\n return {\n ...(retries !== undefined && { retries }),\n ...(options.signal !== undefined && { signal: options.signal }),\n ...(options.timeout !== undefined && { timeout: options.timeout }),\n };\n}\n\nasync function* normalizeNodeChunks(\n source: Readable,\n): AsyncGenerator<Uint8Array> {\n for await (const chunk of source) {\n if (typeof chunk === 'string') {\n yield new TextEncoder().encode(chunk);\n continue;\n }\n if (chunk instanceof Uint8Array) {\n yield chunk;\n continue;\n }\n throw new StorageError(\n 'Node upload streams must yield strings or Uint8Array chunks.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n}\n\nfunction mapBody(body: StorageBody): Body {\n if (body instanceof Readable) {\n return Readable.toWeb(\n Readable.from(normalizeNodeChunks(body)),\n ) as ReadableStream<Uint8Array>;\n }\n return body;\n}\n\nfunction normalizeDownloadStream(\n source: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined =\n source.getReader();\n\n const release = (): void => {\n reader?.releaseLock();\n reader = undefined;\n };\n\n return new ReadableStream<Uint8Array>({\n async cancel(reason) {\n const activeReader = reader;\n if (activeReader === undefined) {\n return;\n }\n try {\n await activeReader.cancel(reason);\n } catch (error) {\n throw mapFilesError(error);\n } finally {\n release();\n }\n },\n async pull(controller) {\n const activeReader = reader;\n if (activeReader === undefined) {\n controller.close();\n return;\n }\n try {\n const result = await activeReader.read();\n if (result.done) {\n release();\n controller.close();\n return;\n }\n controller.enqueue(result.value);\n } catch (error) {\n release();\n controller.error(mapFilesError(error));\n }\n },\n });\n}\n\nfunction uploadOptions(\n options?: StorageUploadOptions,\n): UploadOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.cacheControl !== undefined && {\n cacheControl: options.cacheControl,\n }),\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.control !== undefined && {\n control: getFilesSdkUploadControl(options.control),\n }),\n ...(options.metadata !== undefined && { metadata: options.metadata }),\n ...(options.multipart !== undefined && {\n multipart: options.multipart,\n }),\n ...(options.onProgress !== undefined && {\n onProgress: options.onProgress,\n }),\n };\n}\n\nfunction downloadOptions(options?: StorageDownloadOptions): DownloadOptions {\n return {\n ...operationOptions(options),\n as: 'stream',\n ...(options?.range !== undefined && { range: options.range }),\n };\n}\n\nfunction listOptions(options?: StorageListOptions): ListOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.cursor !== undefined && { cursor: options.cursor }),\n ...(options.delimiter !== undefined && { delimiter: options.delimiter }),\n ...(options.limit !== undefined && { limit: options.limit }),\n ...(options.prefix !== undefined && { prefix: options.prefix }),\n };\n}\n\nfunction searchOptions(\n options?: StorageSearchOptions,\n): SearchOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.caseInsensitive !== undefined && {\n caseInsensitive: options.caseInsensitive,\n }),\n ...(options.limit !== undefined && { limit: options.limit }),\n ...(options.match !== undefined && { match: options.match }),\n ...(options.maxResults !== undefined && {\n maxResults: options.maxResults,\n }),\n ...(options.prefix !== undefined && { prefix: options.prefix }),\n };\n}\n\nfunction signedDownloadOptions(\n options?: StorageSignedDownloadOptions,\n): UrlOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.expiresIn !== undefined && {\n expiresIn: options.expiresIn,\n }),\n ...(options.responseContentDisposition !== undefined && {\n responseContentDisposition: options.responseContentDisposition,\n }),\n };\n}\n\nfunction signedUploadOptions(\n options: StorageSignedUploadOptions,\n): SignUploadOptions {\n return {\n ...operationOptions(options),\n expiresIn: options.expiresIn,\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.maxSize !== undefined && { maxSize: options.maxSize }),\n ...(options.minSize !== undefined && { minSize: options.minSize }),\n };\n}\n\nfunction metadataOf(file: StoredFile): StorageObjectMetadata {\n return {\n contentType: file.type,\n ...(file.etag !== undefined && { etag: file.etag }),\n key: file.key,\n ...(file.lastModified !== undefined && {\n lastModified: new Date(file.lastModified),\n }),\n ...(file.metadata !== undefined && {\n metadata: { ...file.metadata },\n }),\n name: file.name,\n size: file.size,\n };\n}\n\nfunction uploadResultOf(result: UploadResult): StorageUploadResult {\n return {\n contentType: result.contentType,\n ...(result.etag !== undefined && { etag: result.etag }),\n key: result.key,\n ...(result.lastModified !== undefined && {\n lastModified: new Date(result.lastModified),\n }),\n size: result.size,\n };\n}\n\nexport class FilesSdkStorageDriver<\n AdapterType extends Adapter = Adapter,\n> implements StorageDriver {\n readonly #files: Files<AdapterType>;\n readonly #name: string;\n\n constructor(options: FilesSdkDriverOptions<AdapterType>) {\n this.#files = new Files(options);\n this.#name = options.adapter.name;\n }\n\n get name(): string {\n return this.#name;\n }\n\n get capabilities() {\n const capabilities = this.#files.capabilities;\n return {\n cacheControl: capabilities.cacheControl,\n delimiter: capabilities.delimiter,\n metadata: capabilities.metadata,\n rangeRead: capabilities.rangeRead,\n resumableUpload: capabilities.multipart,\n serverSideCopy: capabilities.serverSideCopy,\n signedDownload: { ...capabilities.signedUrl },\n signedUpload: 'runtime' as const,\n nativeUploadProgress: capabilities.uploadProgress,\n };\n }\n\n async upload(\n key: string,\n body: StorageBody,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n return this.#call(async () =>\n uploadResultOf(\n await this.#files.upload(key, mapBody(body), uploadOptions(options)),\n ),\n );\n }\n\n async download(\n key: string,\n options?: StorageDownloadOptions,\n ): Promise<StorageObject> {\n return this.#call(async () => {\n const file = await this.#files.download(key, downloadOptions(options));\n return {\n ...metadataOf(file),\n body: normalizeDownloadStream(file.stream()),\n };\n });\n }\n\n async head(\n key: string,\n options?: StorageOperationOptions,\n ): Promise<StorageObjectMetadata> {\n return this.#call(async () =>\n metadataOf(await this.#files.head(key, operationOptions(options))),\n );\n }\n\n exists(key: string, options?: StorageOperationOptions): Promise<boolean> {\n return this.#call(() => this.#files.exists(key, operationOptions(options)));\n }\n\n delete(key: string, options?: StorageOperationOptions): Promise<void> {\n return this.#call(async () => {\n await this.#files.delete(key, operationOptions(options));\n });\n }\n\n copy(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n return this.#call(() =>\n this.#files.copy(sourceKey, destinationKey, operationOptions(options)),\n );\n }\n\n move(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n return this.#call(() =>\n this.#files.move(sourceKey, destinationKey, operationOptions(options)),\n );\n }\n\n async list(options?: StorageListOptions): Promise<StorageListResult> {\n return this.#call(async () => {\n const result = await this.#files.list(listOptions(options));\n return {\n items: result.items.map(metadataOf),\n ...(result.cursor !== undefined && { cursor: result.cursor }),\n ...(result.prefixes !== undefined && {\n prefixes: [...result.prefixes],\n }),\n };\n });\n }\n\n search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncIterable<StorageObjectMetadata> {\n return this.#search(pattern, options);\n }\n\n async *#search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncGenerator<StorageObjectMetadata, void> {\n try {\n for await (const file of this.#files.search(\n pattern,\n searchOptions(options),\n )) {\n yield metadataOf(file);\n }\n } catch (error) {\n throw mapFilesError(error);\n }\n }\n\n signDownload(\n key: string,\n options?: StorageSignedDownloadOptions,\n ): Promise<string> {\n return this.#call(() =>\n this.#files.url(key, signedDownloadOptions(options)),\n );\n }\n\n signUpload(\n key: string,\n options: StorageSignedUploadOptions,\n ): Promise<StorageSignedUpload> {\n return this.#call(() =>\n this.#files.signedUploadUrl(key, signedUploadOptions(options)),\n );\n }\n\n async #call<Result>(operation: () => Promise<Result>): Promise<Result> {\n try {\n return await operation();\n } catch (error) {\n throw mapFilesError(error);\n }\n }\n}\n\nexport function createFilesSdkDriver<AdapterType extends Adapter>(\n options: FilesSdkDriverOptions<AdapterType>,\n): FilesSdkStorageDriver<AdapterType> {\n return new FilesSdkStorageDriver(options);\n}\n"]}
1
+ {"version":3,"file":"files-sdk.driver.js","sourceRoot":"","sources":["../../src/files-sdk/files-sdk.driver.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\n\nimport {\n Files,\n FilesError,\n handlers,\n type Adapter,\n type Body,\n type ConditionalUploadOptions,\n type DownloadOptions,\n type FilesOptions,\n type FilesPlugin,\n type ListOptions,\n type OperationOptions,\n type RetryOptions,\n type SearchOptions,\n type SignUploadOptions,\n type StoredFile,\n type UploadOptions,\n type UploadResult,\n type UrlOptions,\n} from 'files-sdk';\n\nimport {\n StorageError,\n StorageErrorCode,\n isStorageError,\n} from '../storage.error.js';\nimport {\n isCanonicalStorageEtag,\n normalizeProviderStorageEtag,\n} from '../storage-etag.js';\nimport type { StorageDriver } from '../storage.driver.js';\nimport type {\n StorageBody,\n StorageConditionalCopyDestinationCapability,\n StorageConditionalCopySourceCapability,\n StorageConditionalDeleteCapability,\n StorageConditionalDeleteOptions,\n StorageConditionalMultipartCompletionCapability,\n StorageConditionalReadCapability,\n StorageConditionalReadOptions,\n StorageConditionalUploadOptions,\n StorageConditionalWriteCapability,\n StorageDownloadOptions,\n StorageListOptions,\n StorageListResult,\n StorageObject,\n StorageObjectMetadata,\n StorageOperationOptions,\n StoragePhysicalKeyCapability,\n StoragePromotionOptions,\n StorageRetryOptions,\n StorageSearchOptions,\n StorageSignedUploadPolicyCapability,\n StorageSignedDownloadPolicyCapability,\n StorageSignedDownloadOptions,\n StorageSignedUpload,\n StorageSignedUploadOptions,\n StorageUploadOptions,\n StorageUploadResult,\n} from '../storage.types.js';\nimport { getFilesSdkUploadControl } from '../storage-upload-control.js';\n\nexport type FilesSdkDriverOptions<AdapterType extends Adapter> =\n FilesOptions<AdapterType>;\n\n/**\n * Detects caller policy that must not be bypassed by NestM-only conditional\n * fallbacks that Files SDK cannot represent (versions, multipart completion,\n * or a copy with only one side conditioned).\n */\nfunction hasCallerFilesOperationPolicy<AdapterType extends Adapter>(\n options: FilesSdkDriverOptions<AdapterType>,\n): boolean {\n const hooks = options.hooks;\n return (\n (options.plugins?.length ?? 0) > 0 ||\n typeof hooks?.onAction === 'function' ||\n typeof hooks?.onError === 'function' ||\n typeof hooks?.onRetry === 'function' ||\n (options.receipts !== undefined && options.receipts !== false)\n );\n}\n\nexport type FilesSdkS3AdapterProvenance = 'native' | 'verified' | 'unverified';\n\nconst FILES_SDK_S3_RESERVED_EXTENSION_KEYS = [\n 'conditionalCopyDestination',\n 'conditionalCopySource',\n 'conditionalCreate',\n 'conditionalDelete',\n 'conditionalMultipartCompletion',\n 'conditionalRead',\n 'conditionalReplace',\n 'deleteConditional',\n 'downloadConditional',\n 'physicalKey',\n 'promote',\n 'signedDownloadPolicy',\n 'signedUploadPolicy',\n 'uploadConditional',\n] as const;\n\nconst FILES_SDK_S3_AUTHORITY_KEYS = [\n ...FILES_SDK_S3_RESERVED_EXTENSION_KEYS,\n 'bucket',\n 'conditional',\n 'copy',\n 'delete',\n 'deleteMany',\n 'download',\n 'exists',\n 'head',\n 'list',\n 'move',\n 'reportsUploadProgress',\n 'resumableUpload',\n 'signedUploadUrl',\n 'signedUrl',\n 'supportsCacheControl',\n 'supportsDelimiter',\n 'supportsMetadata',\n 'supportsRange',\n 'supportsServerSideCopy',\n 'upload',\n 'url',\n] as const;\n\ntype FilesSdkS3AuthorityKey = (typeof FILES_SDK_S3_AUTHORITY_KEYS)[number];\n\ninterface FilesSdkS3AuthoritySnapshotEntry {\n readonly present: boolean;\n readonly value: unknown;\n}\n\ntype FilesSdkS3AuthoritySnapshot = Readonly<\n Record<FilesSdkS3AuthorityKey, FilesSdkS3AuthoritySnapshotEntry>\n>;\n\ninterface FilesSdkS3AdapterProvenanceRecord {\n readonly provenance: FilesSdkS3AdapterProvenance;\n readonly surface: FilesSdkS3AuthoritySnapshot;\n}\n\nconst s3AdapterProvenance = new WeakMap<\n object,\n FilesSdkS3AdapterProvenanceRecord\n>();\nconst undecoratedS3Adapters = new WeakSet<object>();\nconst s3AdapterAuthority = new WeakMap<object, object>();\nconst s3MethodAuthority = new WeakMap<Function, object>();\nconst s3AuthorityState = new WeakMap<\n object,\n {\n readonly raw: object;\n readonly record?: FilesSdkS3AdapterProvenanceRecord;\n }\n>();\nconst conflictingS3Authority = Symbol('conflictingS3Authority');\n\nfunction adapterRawObject(adapter: Adapter): object | undefined {\n try {\n const raw = adapter.raw;\n return (typeof raw === 'object' && raw !== null) ||\n typeof raw === 'function'\n ? raw\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction s3AdapterAuthorityTokenOf(\n adapter: Adapter,\n): object | typeof conflictingS3Authority | undefined {\n let resolved = s3AdapterAuthority.get(adapter);\n const consider = (token: object | undefined): boolean => {\n if (token === undefined) return true;\n if (resolved !== undefined && resolved !== token) return false;\n resolved = token;\n return true;\n };\n try {\n const candidate = adapter as unknown as Record<PropertyKey, unknown>;\n for (const key of FILES_SDK_S3_AUTHORITY_KEYS) {\n if (!(key in candidate)) continue;\n const value = candidate[key];\n if (\n typeof value === 'function' &&\n !consider(s3MethodAuthority.get(value))\n ) {\n return conflictingS3Authority;\n }\n }\n return resolved;\n } catch {\n return conflictingS3Authority;\n }\n}\n\nfunction bindS3AdapterAuthorityMethods(adapter: Adapter, token: object): void {\n const candidate = adapter as unknown as Record<PropertyKey, unknown>;\n for (const key of FILES_SDK_S3_AUTHORITY_KEYS) {\n if (!(key in candidate)) continue;\n const value = candidate[key];\n if (typeof value !== 'function') continue;\n const existing = s3MethodAuthority.get(value);\n if (existing !== undefined && existing !== token) {\n throw new TypeError('S3 adapter methods have conflicting authority.');\n }\n s3MethodAuthority.set(value, token);\n }\n}\n\nfunction attachS3AdapterAuthority(adapter: Adapter, raw: object): object {\n const existing = s3AdapterAuthorityTokenOf(adapter);\n if (existing === conflictingS3Authority) {\n throw new TypeError('S3 adapter authority is inconsistent.');\n }\n const token = existing ?? Object.freeze({});\n const state = s3AuthorityState.get(token);\n if (state !== undefined && state.raw !== raw) {\n throw new TypeError('S3 adapter authority raw client cannot be changed.');\n }\n if (state === undefined) s3AuthorityState.set(token, { raw });\n s3AdapterAuthority.set(adapter, token);\n bindS3AdapterAuthorityMethods(adapter, token);\n return token;\n}\n\nfunction setS3AdapterProvenance(\n target: object,\n adapter: Adapter,\n provenance: FilesSdkS3AdapterProvenance,\n): FilesSdkS3AdapterProvenanceRecord {\n const existing = s3AdapterProvenanceOfRaw(target);\n if (existing !== undefined) {\n if (\n existing.provenance !== provenance ||\n mismatchedS3Authority(adapter, existing.surface) !== undefined\n ) {\n throw new TypeError('S3 adapter provenance cannot be changed.');\n }\n s3AdapterProvenance.set(target, existing);\n return existing;\n }\n const record = Object.freeze({\n provenance,\n surface: s3AuthoritySnapshot(adapter),\n });\n s3AdapterProvenance.set(target, record);\n return record;\n}\n\nfunction s3AdapterProvenanceOfRaw(\n raw: object,\n): FilesSdkS3AdapterProvenanceRecord | undefined {\n return s3AdapterProvenance.get(raw);\n}\n\nfunction s3AuthoritySnapshot(adapter: Adapter): FilesSdkS3AuthoritySnapshot {\n const candidate = adapter as unknown as Record<PropertyKey, unknown>;\n return Object.freeze(\n Object.fromEntries(\n FILES_SDK_S3_AUTHORITY_KEYS.map((key) => {\n const present = key in candidate;\n return [\n key,\n Object.freeze({\n present,\n value: present ? candidate[key] : undefined,\n }),\n ];\n }),\n ) as Record<FilesSdkS3AuthorityKey, FilesSdkS3AuthoritySnapshotEntry>,\n );\n}\n\nfunction mismatchedS3Authority(\n adapter: Adapter,\n snapshot: FilesSdkS3AuthoritySnapshot,\n): FilesSdkS3AuthorityKey | undefined {\n const candidate = adapter as unknown as Record<PropertyKey, unknown>;\n try {\n return FILES_SDK_S3_AUTHORITY_KEYS.find((key) => {\n const present = key in candidate;\n const expected = snapshot[key];\n return (\n present !== expected.present ||\n !Object.is(present ? candidate[key] : undefined, expected.value)\n );\n });\n } catch {\n return FILES_SDK_S3_AUTHORITY_KEYS[0];\n }\n}\n\n/** Rejects adapters already carrying reserved storage S3 extensions. */\nexport function assertFilesSdkS3AdapterHasNoReservedExtensions(\n adapter: Adapter,\n): void {\n const reserved = filesSdkS3ReservedExtensionOf(adapter);\n if (reserved !== undefined) {\n throw new TypeError(\n `S3 adapter already defines reserved extension \"${reserved}\".`,\n );\n }\n}\n\nfunction filesSdkS3ReservedExtensionOf(\n adapter: Adapter,\n): (typeof FILES_SDK_S3_RESERVED_EXTENSION_KEYS)[number] | undefined {\n const candidate = adapter as unknown as Record<PropertyKey, unknown>;\n try {\n return FILES_SDK_S3_RESERVED_EXTENSION_KEYS.find((key) => key in candidate);\n } catch {\n return FILES_SDK_S3_RESERVED_EXTENSION_KEYS[0];\n }\n}\n\n/** Records that an S3 adapter was constructed but not provider-decorated. */\nexport function markFilesSdkS3AdapterUndecorated(adapter: Adapter): void {\n const raw = adapterRawObject(adapter);\n if (raw === undefined) {\n throw new TypeError('S3 adapter must expose an object raw client.');\n }\n attachS3AdapterAuthority(adapter, raw);\n undecoratedS3Adapters.add(raw);\n}\n\n/** Records the provider verification state of one decorated S3 adapter. */\nexport function markFilesSdkS3AdapterProvenance(\n adapter: Adapter,\n provenance: FilesSdkS3AdapterProvenance,\n): void {\n const raw = adapterRawObject(adapter);\n if (raw === undefined) {\n throw new TypeError('S3 adapter must expose an object raw client.');\n }\n markFilesSdkS3RawClientProvenance(raw, adapter, provenance);\n}\n\n/** Records final provider verification state on one stable raw S3 client. */\nexport function markFilesSdkS3RawClientProvenance(\n raw: object,\n adapter: Adapter,\n provenance: FilesSdkS3AdapterProvenance,\n): void {\n const authority = attachS3AdapterAuthority(adapter, raw);\n const record = setS3AdapterProvenance(raw, adapter, provenance);\n s3AuthorityState.set(authority, { raw, record });\n bindS3AdapterAuthorityMethods(adapter, authority);\n}\n\nfunction isUndecoratedS3Raw(raw: object): boolean {\n return undecoratedS3Adapters.has(raw);\n}\n\nfunction isStructuralS3Raw(raw: object): boolean {\n try {\n const candidate = raw as {\n readonly config?: unknown;\n readonly send?: unknown;\n };\n return (\n typeof candidate.send === 'function' &&\n typeof candidate.config === 'object' &&\n candidate.config !== null &&\n (candidate.config as { readonly serviceId?: unknown }).serviceId === 'S3'\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Optional adapter extension for providers that can conditionally copy an\n * immutable source identity. Plain files-sdk adapters remain fully supported.\n */\nexport interface FilesSdkConditionalCopyAdapter {\n readonly conditionalCopySource?: StorageConditionalCopySourceCapability;\n readonly conditionalCopyDestination?: StorageConditionalCopyDestinationCapability;\n promote(\n sourceKey: string,\n destinationKey: string,\n options: StoragePromotionOptions,\n ): Promise<void>;\n}\n\n/** Optional adapter extension for native compare-and-set uploads. */\nexport interface FilesSdkConditionalUploadAdapter {\n readonly conditionalCreate?: StorageConditionalWriteCapability;\n readonly conditionalReplace?: StorageConditionalWriteCapability;\n readonly conditionalMultipartCompletion?: StorageConditionalMultipartCompletionCapability;\n uploadConditional(\n key: string,\n body: Body,\n options: StorageConditionalUploadOptions,\n ): Promise<StorageUploadResult>;\n}\n\n/** Optional adapter extension for native compare-and-delete. */\nexport interface FilesSdkConditionalDeleteAdapter {\n readonly conditionalDelete: StorageConditionalDeleteCapability;\n deleteConditional(\n key: string,\n options: StorageConditionalDeleteOptions,\n ): Promise<void>;\n}\n\n/** Optional adapter extension for an exact observed-identity read. */\nexport interface FilesSdkConditionalReadAdapter {\n readonly conditionalRead: StorageConditionalReadCapability;\n downloadConditional(\n key: string,\n options: StorageConditionalReadOptions,\n ): Promise<StorageObject>;\n}\n\n/** Optional provider key budget, measured after the driver prefix is applied. */\nexport interface FilesSdkPhysicalKeyAdapter {\n readonly physicalKey: StoragePhysicalKeyCapability;\n}\n\nexport interface FilesSdkSignedUploadPolicyAdapter {\n readonly signedUploadPolicy: StorageSignedUploadPolicyCapability;\n}\n\nexport interface FilesSdkSignedDownloadPolicyAdapter {\n readonly signedDownloadPolicy: StorageSignedDownloadPolicyCapability;\n}\n\nfunction conditionalCopyAdapterOf(\n adapter: Adapter,\n): FilesSdkConditionalCopyAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('promote' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter &\n Partial<FilesSdkConditionalCopyAdapter>;\n const source = candidate.conditionalCopySource;\n const destination = candidate.conditionalCopyDestination;\n if (\n (source === undefined && destination === undefined) ||\n (source !== undefined &&\n (typeof source.etag !== 'boolean' ||\n typeof source.version !== 'boolean' ||\n (source.requiresDestinationPredicate !== undefined &&\n typeof source.requiresDestinationPredicate !== 'boolean'))) ||\n (destination !== undefined &&\n (typeof destination.create !== 'boolean' ||\n typeof destination.replace !== 'boolean' ||\n (destination.requiresSourcePredicate !== undefined &&\n typeof destination.requiresSourcePredicate !== 'boolean') ||\n typeof destination.atomicWithSource !== 'boolean')) ||\n typeof candidate.promote !== 'function'\n ) {\n return undefined;\n }\n return candidate as Adapter & FilesSdkConditionalCopyAdapter;\n}\n\ninterface FilesConditionalCopyCapability {\n readonly atomicSourceDestination: boolean;\n readonly destinationCreate: boolean;\n readonly destinationReplace: boolean;\n readonly sourceEtag: boolean;\n}\n\ninterface ConditionalCopyCapabilities {\n readonly source?: StorageConditionalCopySourceCapability;\n readonly destination?: StorageConditionalCopyDestinationCapability;\n}\n\nfunction conditionalCopyCapabilities(\n direct: FilesSdkConditionalCopyAdapter | undefined,\n pipeline: FilesConditionalCopyCapability,\n): ConditionalCopyCapabilities {\n const directSource =\n direct?.conditionalCopySource !== undefined &&\n (direct.conditionalCopySource.etag || direct.conditionalCopySource.version)\n ? direct.conditionalCopySource\n : undefined;\n const directDestination =\n direct?.conditionalCopyDestination !== undefined &&\n (direct.conditionalCopyDestination.create ||\n direct.conditionalCopyDestination.replace)\n ? direct.conditionalCopyDestination\n : undefined;\n const pipelineSupported =\n pipeline.sourceEtag &&\n pipeline.atomicSourceDestination &&\n (pipeline.destinationCreate || pipeline.destinationReplace);\n const pipelineCapabilities: ConditionalCopyCapabilities = pipelineSupported\n ? {\n source: {\n etag: true,\n requiresDestinationPredicate: true,\n version: false,\n },\n destination: {\n atomicWithSource: true,\n create: pipeline.destinationCreate,\n replace: pipeline.destinationReplace,\n requiresSourcePredicate: true,\n },\n }\n : {};\n\n if (directSource === undefined && directDestination === undefined) {\n return pipelineCapabilities;\n }\n if (!pipelineSupported) {\n return {\n ...(directSource !== undefined && { source: { ...directSource } }),\n ...(directDestination !== undefined && {\n destination: { ...directDestination },\n }),\n };\n }\n // Never splice unrelated one-sided direct declarations onto the paired\n // Files surface. Without both direct halves there is no coherent route for\n // the cross-product the public capability model would otherwise imply.\n if (directSource === undefined || directDestination === undefined) {\n return {\n ...(directSource !== undefined && { source: { ...directSource } }),\n ...(directDestination !== undefined && {\n destination: { ...directDestination },\n }),\n };\n }\n\n const sourcePredicates = [\n ...(directSource.etag || pipeline.sourceEtag ? (['etag'] as const) : []),\n ...(directSource.version ? (['version'] as const) : []),\n ];\n const destinationPredicates = [\n ...(directDestination.create || pipeline.destinationCreate\n ? (['create'] as const)\n : []),\n ...(directDestination.replace || pipeline.destinationReplace\n ? (['replace'] as const)\n : []),\n ];\n const supportsDirectSourceAlone = (\n predicate: (typeof sourcePredicates)[number],\n ): boolean =>\n directSource[predicate] &&\n directSource.requiresDestinationPredicate !== true;\n const supportsDirectDestinationAlone = (\n predicate: (typeof destinationPredicates)[number],\n ): boolean =>\n directDestination[predicate] &&\n directDestination.requiresSourcePredicate !== true;\n const sourceAlone = sourcePredicates.map(supportsDirectSourceAlone);\n const destinationAlone = destinationPredicates.map(\n supportsDirectDestinationAlone,\n );\n // One shared dependency flag cannot express a union where only some source\n // or destination predicate kinds require their counterpart.\n if (\n (sourceAlone.some(Boolean) && !sourceAlone.every(Boolean)) ||\n (destinationAlone.some(Boolean) && !destinationAlone.every(Boolean))\n ) {\n return {\n source: { ...directSource },\n destination: { ...directDestination },\n };\n }\n\n const everyPairIsAtomic = sourcePredicates.every((source) =>\n destinationPredicates.every((destination) => {\n const throughPipeline =\n source === 'etag' &&\n (destination === 'create'\n ? pipeline.destinationCreate\n : pipeline.destinationReplace);\n const throughDirect =\n directSource[source] &&\n directDestination[destination] &&\n directDestination.atomicWithSource;\n return throughPipeline || throughDirect;\n }),\n );\n if (!everyPairIsAtomic) {\n return {\n source: { ...directSource },\n destination: { ...directDestination },\n };\n }\n\n return {\n source: {\n etag: sourcePredicates.includes('etag'),\n ...(sourceAlone.every((supported) => !supported) && {\n requiresDestinationPredicate: true,\n }),\n version: sourcePredicates.includes('version'),\n },\n destination: {\n atomicWithSource: true,\n create: destinationPredicates.includes('create'),\n replace: destinationPredicates.includes('replace'),\n ...(destinationAlone.every((supported) => !supported) && {\n requiresSourcePredicate: true,\n }),\n },\n };\n}\n\nfunction conditionalUploadAdapterOf(\n adapter: Adapter,\n): FilesSdkConditionalUploadAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('uploadConditional' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter &\n Partial<FilesSdkConditionalUploadAdapter>;\n const create = candidate.conditionalCreate;\n const replace = candidate.conditionalReplace;\n const multipart = candidate.conditionalMultipartCompletion;\n if (\n (create === undefined && replace === undefined) ||\n (create !== undefined && typeof create.resultEtag !== 'boolean') ||\n (replace !== undefined && typeof replace.resultEtag !== 'boolean') ||\n (multipart !== undefined &&\n (typeof multipart.create !== 'boolean' ||\n typeof multipart.replace !== 'boolean')) ||\n typeof candidate.uploadConditional !== 'function'\n ) {\n return undefined;\n }\n return candidate as Adapter & FilesSdkConditionalUploadAdapter;\n}\n\nfunction conditionalDeleteAdapterOf(\n adapter: Adapter,\n): FilesSdkConditionalDeleteAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('conditionalDelete' in adapter) ||\n !('deleteConditional' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter &\n Partial<FilesSdkConditionalDeleteAdapter>;\n if (\n candidate.conditionalDelete === undefined ||\n typeof candidate.conditionalDelete.etag !== 'boolean' ||\n typeof candidate.deleteConditional !== 'function'\n ) {\n return undefined;\n }\n return candidate as Adapter & FilesSdkConditionalDeleteAdapter;\n}\n\nfunction conditionalReadAdapterOf(\n adapter: Adapter,\n): FilesSdkConditionalReadAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('conditionalRead' in adapter) ||\n !('downloadConditional' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter &\n Partial<FilesSdkConditionalReadAdapter>;\n if (\n candidate.conditionalRead === undefined ||\n typeof candidate.conditionalRead.etag !== 'boolean' ||\n typeof candidate.conditionalRead.version !== 'boolean' ||\n typeof candidate.downloadConditional !== 'function'\n ) {\n return undefined;\n }\n return candidate as Adapter & FilesSdkConditionalReadAdapter;\n}\n\nfunction physicalKeyAdapterOf(\n adapter: Adapter,\n): FilesSdkPhysicalKeyAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('physicalKey' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter & Partial<FilesSdkPhysicalKeyAdapter>;\n const maxBytes = candidate.physicalKey?.maxBytes;\n if (!Number.isSafeInteger(maxBytes) || (maxBytes ?? 0) <= 0) {\n return undefined;\n }\n return candidate as Adapter & FilesSdkPhysicalKeyAdapter;\n}\n\nfunction signedUploadPolicyAdapterOf(\n adapter: Adapter,\n): FilesSdkSignedUploadPolicyAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('signedUploadPolicy' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter &\n Partial<FilesSdkSignedUploadPolicyAdapter>;\n const capability = candidate.signedUploadPolicy;\n if (\n capability === undefined ||\n typeof capability.contentType !== 'boolean' ||\n typeof capability.sizeRange !== 'boolean'\n ) {\n return undefined;\n }\n return candidate as Adapter & FilesSdkSignedUploadPolicyAdapter;\n}\n\nfunction signedDownloadPolicyAdapterOf(\n adapter: Adapter,\n): FilesSdkSignedDownloadPolicyAdapter | undefined {\n if (\n typeof adapter !== 'object' ||\n adapter === null ||\n !('signedDownloadPolicy' in adapter)\n ) {\n return undefined;\n }\n const candidate = adapter as Adapter &\n Partial<FilesSdkSignedDownloadPolicyAdapter>;\n const capability = candidate.signedDownloadPolicy;\n if (capability === undefined || typeof capability.expiresIn !== 'boolean') {\n return undefined;\n }\n return candidate as Adapter & FilesSdkSignedDownloadPolicyAdapter;\n}\n\ninterface FilesErrorLike {\n readonly name: string;\n readonly message: string;\n readonly code: FilesError['code'];\n readonly aborted: boolean;\n readonly timedOut: boolean;\n readonly permanent: boolean;\n readonly applied?: boolean;\n readonly appliedEtag?: string;\n readonly cause?: unknown;\n}\n\nfunction isFilesErrorCode(value: unknown): value is FilesError['code'] {\n return (\n value === 'NotFound' ||\n value === 'Unauthorized' ||\n value === 'Conflict' ||\n value === 'ReadOnly' ||\n value === 'Provider'\n );\n}\n\nfunction isFilesErrorLike(error: unknown): error is FilesErrorLike {\n if (error instanceof FilesError) {\n return true;\n }\n if (!(error instanceof Error)) {\n return false;\n }\n\n try {\n return (\n error.name === 'FilesError' &&\n typeof error.message === 'string' &&\n 'code' in error &&\n isFilesErrorCode(error.code) &&\n 'aborted' in error &&\n typeof error.aborted === 'boolean' &&\n 'timedOut' in error &&\n typeof error.timedOut === 'boolean' &&\n 'permanent' in error &&\n typeof error.permanent === 'boolean' &&\n (!('applied' in error) || typeof error.applied === 'boolean') &&\n (!('appliedEtag' in error) || typeof error.appliedEtag === 'string')\n );\n } catch {\n return false;\n }\n}\n\nfunction unwrapFilesError(error: FilesErrorLike): FilesErrorLike {\n const seen = new Set<FilesErrorLike>();\n let current = error;\n\n while (\n current.code === 'Provider' &&\n !current.aborted &&\n !current.timedOut &&\n !current.permanent &&\n current.applied !== true &&\n isFilesErrorLike(current.cause) &&\n current.message === current.cause.message &&\n !seen.has(current.cause)\n ) {\n seen.add(current);\n current = current.cause;\n }\n\n return current;\n}\n\nconst PUBLIC_PROVIDER_ERROR_MESSAGES: Readonly<\n Record<StorageErrorCode, string>\n> = Object.freeze({\n [StorageErrorCode.NOT_FOUND]: 'Storage provider object was not found.',\n [StorageErrorCode.UNAUTHORIZED]:\n 'Storage provider operation was unauthorized.',\n [StorageErrorCode.CONFLICT]:\n 'Storage provider operation conflicted with current state.',\n [StorageErrorCode.READ_ONLY]: 'Storage provider is read-only.',\n [StorageErrorCode.INVALID_ARGUMENT]:\n 'Storage provider rejected an invalid argument.',\n [StorageErrorCode.NOT_SUPPORTED]:\n 'Storage provider operation is not supported.',\n [StorageErrorCode.ABORTED]: 'Storage provider operation was aborted.',\n [StorageErrorCode.TIMEOUT]: 'Storage provider operation timed out.',\n [StorageErrorCode.LIMIT_EXCEEDED]:\n 'Storage provider operation exceeded a limit.',\n [StorageErrorCode.PROVIDER]: 'Storage provider operation failed.',\n});\n\nfunction sanitizedStorageError(error: StorageError): StorageError {\n return new StorageError(PUBLIC_PROVIDER_ERROR_MESSAGES[error.code], {\n aborted: error.aborted,\n applied: error.applied,\n ...(isCanonicalStorageEtag(error.appliedEtag) && {\n appliedEtag: error.appliedEtag,\n }),\n code: error.code,\n permanent: error.permanent,\n timedOut: error.timedOut,\n });\n}\n\nfunction filesErrorCodeOfStorage(error: StorageError): FilesError['code'] {\n switch (error.code) {\n case StorageErrorCode.NOT_FOUND:\n return 'NotFound';\n case StorageErrorCode.UNAUTHORIZED:\n return 'Unauthorized';\n case StorageErrorCode.CONFLICT:\n return error.permanent ? 'Conflict' : 'Provider';\n case StorageErrorCode.READ_ONLY:\n return 'ReadOnly';\n default:\n return 'Provider';\n }\n}\n\n/** Converts NestM adapter failures before they enter the Files retry pipeline. */\nexport function mapStorageErrorToFilesSdkError(error: unknown): FilesError {\n if (error instanceof FilesError) return error;\n if (!isStorageError(error)) return FilesError.wrap(error);\n\n const sanitized = sanitizedStorageError(error);\n return new FilesError(\n filesErrorCodeOfStorage(sanitized),\n sanitized.message,\n sanitized,\n {\n aborted: sanitized.aborted,\n applied: sanitized.applied,\n ...(isCanonicalStorageEtag(sanitized.appliedEtag) && {\n appliedEtag: sanitized.appliedEtag,\n }),\n permanent: sanitized.permanent,\n timedOut: sanitized.timedOut,\n },\n );\n}\n\nexport function mapFilesSdkError(error: unknown): StorageError {\n if (isStorageError(error)) return sanitizedStorageError(error);\n if (!isFilesErrorLike(error)) {\n return new StorageError('Storage provider operation failed.', {\n code: StorageErrorCode.PROVIDER,\n });\n }\n\n const filesError = unwrapFilesError(error);\n\n if (\n filesError.code === 'Provider' &&\n !filesError.aborted &&\n !filesError.timedOut &&\n isStorageError(filesError.cause) &&\n filesError.message === filesError.cause.message\n ) {\n const storageCause = filesError.cause;\n return new StorageError(PUBLIC_PROVIDER_ERROR_MESSAGES[storageCause.code], {\n aborted: filesError.aborted || storageCause.aborted,\n applied: filesError.applied === true || storageCause.applied,\n ...(isCanonicalStorageEtag(filesError.appliedEtag)\n ? { appliedEtag: filesError.appliedEtag }\n : isCanonicalStorageEtag(storageCause.appliedEtag)\n ? { appliedEtag: storageCause.appliedEtag }\n : {}),\n code: storageCause.code,\n permanent: filesError.permanent || storageCause.permanent,\n timedOut: filesError.timedOut || storageCause.timedOut,\n });\n }\n\n let code: StorageErrorCode;\n if (filesError.timedOut) {\n code = StorageErrorCode.TIMEOUT;\n } else if (filesError.aborted) {\n code = StorageErrorCode.ABORTED;\n } else {\n switch (filesError.code) {\n case 'NotFound':\n code = StorageErrorCode.NOT_FOUND;\n break;\n case 'Unauthorized':\n code = StorageErrorCode.UNAUTHORIZED;\n break;\n case 'Conflict':\n code = StorageErrorCode.CONFLICT;\n break;\n case 'ReadOnly':\n code = StorageErrorCode.READ_ONLY;\n break;\n case 'Provider':\n code = /(?:not supported|does not support|unsupported)/iu.test(\n filesError.message,\n )\n ? StorageErrorCode.NOT_SUPPORTED\n : StorageErrorCode.PROVIDER;\n break;\n }\n }\n\n return new StorageError(PUBLIC_PROVIDER_ERROR_MESSAGES[code], {\n aborted: filesError.aborted,\n applied: filesError.applied === true,\n ...(isCanonicalStorageEtag(filesError.appliedEtag) && {\n appliedEtag: filesError.appliedEtag,\n }),\n code,\n permanent: filesError.permanent,\n timedOut: filesError.timedOut,\n });\n}\n\nfunction mapRetryOptions(\n retries: StorageRetryOptions | undefined,\n): RetryOptions | undefined {\n if (retries === undefined || typeof retries === 'number') {\n return retries;\n }\n\n return {\n max: retries.max,\n ...(retries.backoff !== undefined && {\n backoff: ({ attempt, error }) =>\n retries.backoff?.({\n attempt,\n error: mapFilesSdkError(error),\n }) ?? 0,\n }),\n };\n}\n\nfunction storageRetryOptions(\n retries: RetryOptions | undefined,\n): StorageRetryOptions | undefined {\n if (retries === undefined || typeof retries === 'number') {\n return retries;\n }\n return {\n max: retries.max,\n ...(retries.backoff !== undefined && {\n backoff: ({ attempt, error }) =>\n retries.backoff?.({\n attempt,\n error: new FilesError(\n error.code === StorageErrorCode.NOT_FOUND\n ? 'NotFound'\n : error.code === StorageErrorCode.UNAUTHORIZED\n ? 'Unauthorized'\n : error.code === StorageErrorCode.CONFLICT\n ? 'Conflict'\n : error.code === StorageErrorCode.READ_ONLY\n ? 'ReadOnly'\n : 'Provider',\n error.message,\n error,\n {\n aborted: error.aborted,\n applied: error.applied,\n ...(isCanonicalStorageEtag(error.appliedEtag) && {\n appliedEtag: error.appliedEtag,\n }),\n permanent: error.permanent,\n timedOut: error.timedOut,\n },\n ),\n }) ?? 0,\n }),\n };\n}\n\nfunction operationOptions(\n options?: StorageOperationOptions,\n): OperationOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n\n const retries = mapRetryOptions(options.retries);\n return {\n ...(retries !== undefined && { retries }),\n ...(options.signal !== undefined && { signal: options.signal }),\n ...(options.timeout !== undefined && { timeout: options.timeout }),\n };\n}\n\nasync function* normalizeNodeChunks(\n source: Readable,\n): AsyncGenerator<Uint8Array> {\n for await (const chunk of source) {\n if (typeof chunk === 'string') {\n yield new TextEncoder().encode(chunk);\n continue;\n }\n if (chunk instanceof Uint8Array) {\n yield chunk;\n continue;\n }\n throw new StorageError(\n 'Node upload streams must yield strings or Uint8Array chunks.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n}\n\nfunction mapBody(body: StorageBody): Body {\n if (body instanceof Readable) {\n return Readable.toWeb(\n Readable.from(normalizeNodeChunks(body)),\n ) as ReadableStream<Uint8Array>;\n }\n return body;\n}\n\nfunction normalizeDownloadStream(\n source: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined =\n source.getReader();\n\n const release = (): void => {\n reader?.releaseLock();\n reader = undefined;\n };\n\n return new ReadableStream<Uint8Array>({\n async cancel(reason) {\n const activeReader = reader;\n if (activeReader === undefined) {\n return;\n }\n try {\n await activeReader.cancel(reason);\n } catch (error) {\n throw mapFilesSdkError(error);\n } finally {\n release();\n }\n },\n async pull(controller) {\n const activeReader = reader;\n if (activeReader === undefined) {\n controller.close();\n return;\n }\n try {\n const result = await activeReader.read();\n if (result.done) {\n release();\n controller.close();\n return;\n }\n controller.enqueue(result.value);\n } catch (error) {\n release();\n controller.error(mapFilesSdkError(error));\n }\n },\n });\n}\n\nfunction uploadOptions(\n options?: StorageUploadOptions,\n): UploadOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.cacheControl !== undefined && {\n cacheControl: options.cacheControl,\n }),\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.control !== undefined && {\n control: getFilesSdkUploadControl(options.control),\n }),\n ...(options.metadata !== undefined && { metadata: options.metadata }),\n ...(options.multipart !== undefined && {\n multipart: options.multipart,\n }),\n ...(options.onProgress !== undefined && {\n onProgress: options.onProgress,\n }),\n };\n}\n\nfunction conditionalUploadOptions(\n options: StorageConditionalUploadOptions,\n): ConditionalUploadOptions {\n return {\n ...operationOptions(options),\n ...(options.cacheControl !== undefined && {\n cacheControl: options.cacheControl,\n }),\n condition: options.condition,\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.metadata !== undefined && { metadata: options.metadata }),\n ...(options.onProgress !== undefined && {\n onProgress: options.onProgress,\n }),\n };\n}\n\nfunction downloadOptions(options?: StorageDownloadOptions): DownloadOptions {\n return {\n ...operationOptions(options),\n as: 'stream',\n ...(options?.range !== undefined && { range: options.range }),\n };\n}\n\nfunction listOptions(options?: StorageListOptions): ListOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.cursor !== undefined && { cursor: options.cursor }),\n ...(options.delimiter !== undefined && { delimiter: options.delimiter }),\n ...(options.limit !== undefined && { limit: options.limit }),\n ...(options.prefix !== undefined && { prefix: options.prefix }),\n };\n}\n\nfunction searchOptions(\n options?: StorageSearchOptions,\n): SearchOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.caseInsensitive !== undefined && {\n caseInsensitive: options.caseInsensitive,\n }),\n ...(options.limit !== undefined && { limit: options.limit }),\n ...(options.match !== undefined && { match: options.match }),\n ...(options.maxResults !== undefined && {\n maxResults: options.maxResults,\n }),\n ...(options.prefix !== undefined && { prefix: options.prefix }),\n };\n}\n\nfunction signedDownloadOptions(\n options?: StorageSignedDownloadOptions,\n): UrlOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.expiresIn !== undefined && {\n expiresIn: options.expiresIn,\n }),\n ...(options.responseContentDisposition !== undefined && {\n responseContentDisposition: options.responseContentDisposition,\n }),\n };\n}\n\nfunction signedUploadOptions(\n options: StorageSignedUploadOptions,\n): SignUploadOptions {\n return {\n ...operationOptions(options),\n expiresIn: options.expiresIn,\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.maxSize !== undefined && { maxSize: options.maxSize }),\n ...(options.minSize !== undefined && { minSize: options.minSize }),\n };\n}\n\nfunction providerEtag(\n value: unknown,\n key: string,\n operation: 'download' | 'head' | 'list' | 'search' | 'upload',\n): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n const etag = normalizeProviderStorageEtag(value);\n if (etag === undefined) {\n throw new StorageError('Storage adapter returned an invalid ETag.', {\n code: StorageErrorCode.PROVIDER,\n key,\n operation,\n permanent: true,\n });\n }\n return etag;\n}\n\nfunction invalidConditionalEtag(\n label: string,\n key: string,\n operation: 'delete' | 'download' | 'promote' | 'upload',\n): StorageError {\n return new StorageError(`${label} must be a canonical storage ETag.`, {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n operation,\n permanent: true,\n });\n}\n\nfunction invalidConditionalArgument(\n message: string,\n key: string,\n operation: 'delete' | 'download' | 'promote' | 'upload',\n): StorageError {\n return new StorageError(message, {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n operation,\n permanent: true,\n });\n}\n\nfunction metadataOf(\n file: StoredFile,\n operation: 'download' | 'head' | 'list' | 'search',\n): StorageObjectMetadata {\n const etag = providerEtag(file.etag, file.key, operation);\n return {\n contentType: file.type,\n ...(etag !== undefined && { etag }),\n key: file.key,\n ...(file.lastModified !== undefined && {\n lastModified: new Date(file.lastModified),\n }),\n ...(file.metadata !== undefined && {\n metadata: { ...file.metadata },\n }),\n name: file.name,\n size: file.size,\n };\n}\n\nfunction uploadResultOf(result: UploadResult): StorageUploadResult {\n const etag = providerEtag(result.etag, result.key, 'upload');\n return {\n contentType: result.contentType,\n ...(etag !== undefined && { etag }),\n key: result.key,\n ...(result.lastModified !== undefined && {\n lastModified: new Date(result.lastModified),\n }),\n size: result.size,\n };\n}\n\nfunction conditionalUploadResultOf(result: UploadResult): StorageUploadResult {\n try {\n return uploadResultOf(result);\n } catch (error) {\n if (!isStorageError(error)) throw error;\n throw new StorageError(error.message, {\n applied: true,\n code: error.code,\n permanent: error.permanent,\n });\n }\n}\n\nfunction directConditionalUploadResultOf(\n result: StorageUploadResult,\n logicalKey: string,\n physicalKey: string,\n): StorageUploadResult {\n let etag: string | undefined;\n try {\n etag = providerEtag(result.etag, logicalKey, 'upload');\n } catch (error) {\n if (!isStorageError(error)) throw error;\n throw new StorageError(error.message, {\n applied: true,\n code: error.code,\n key: logicalKey,\n operation: 'upload',\n permanent: true,\n });\n }\n if (result.key !== physicalKey) {\n throw new StorageError(\n 'Storage adapter returned an unexpected conditional upload key.',\n {\n applied: true,\n ...(etag !== undefined && { appliedEtag: etag }),\n code: StorageErrorCode.PROVIDER,\n key: logicalKey,\n operation: 'upload',\n permanent: true,\n },\n );\n }\n return {\n ...result,\n ...(etag === undefined ? {} : { etag }),\n key: logicalKey,\n };\n}\n\nfunction storageObjectOf(file: StoredFile): StorageObject {\n return {\n ...metadataOf(file, 'download'),\n body: normalizeDownloadStream(file.stream()),\n };\n}\n\nfunction normalizeFilesSdkPrefix(prefix: unknown): string {\n if (prefix === undefined) return '';\n if (typeof prefix !== 'string') {\n throw new StorageError('prefix must be a string.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n const normalized = prefix.replaceAll(/^\\/+|(?<!\\/)\\/+$/gu, '');\n if (normalized.length === 0 || normalized.includes('\\0')) {\n throw new StorageError(\n 'prefix must be a non-empty string without null bytes.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n if (\n normalized.split('/').some((segment) => segment === '.' || segment === '..')\n ) {\n throw new StorageError('prefix must not contain . or .. path segments.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n return normalized;\n}\n\nfunction physicalPluginKey(\n prefix: string,\n key: unknown,\n): { readonly logicalKey: string; readonly physicalKey: string } {\n if (typeof key !== 'string' || key.length === 0) {\n throw new StorageError('The final plugin key must be a non-empty string.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n if (key.includes('\\0')) {\n throw new StorageError(\n 'The final plugin key must not contain null bytes.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n permanent: true,\n },\n );\n }\n const normalized = key.replace(/^\\/+/u, '');\n if (\n normalized.split('/').some((segment) => segment === '.' || segment === '..')\n ) {\n throw new StorageError(\n 'The final plugin key must not contain . or .. path segments.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n permanent: true,\n },\n );\n }\n return {\n logicalKey: key,\n physicalKey: prefix.length === 0 ? key : `${prefix}/${normalized}`,\n };\n}\n\nfunction assertPhysicalPluginBudget(\n physicalKey: string,\n maxBytes: number | undefined,\n logicalKey?: string,\n): void {\n if (\n maxBytes === undefined ||\n new TextEncoder().encode(physicalKey).byteLength <= maxBytes\n ) {\n return;\n }\n throw new StorageError(\n `The combined storage prefix and key exceed the provider's ${maxBytes}-byte physical-key limit.`,\n {\n code: StorageErrorCode.LIMIT_EXCEEDED,\n ...(logicalKey !== undefined && { key: logicalKey }),\n permanent: true,\n },\n );\n}\n\nfunction physicalKeyGuardPlugin(\n prefix: string,\n maxBytes: number | undefined,\n): FilesPlugin {\n const assertKey = (key: unknown): string => {\n const resolved = physicalPluginKey(prefix, key);\n assertPhysicalPluginBudget(\n resolved.physicalKey,\n maxBytes,\n resolved.logicalKey,\n );\n return resolved.logicalKey;\n };\n const assertListOptions = (options: unknown): ListOptions | undefined => {\n if (\n options !== undefined &&\n (typeof options !== 'object' || options === null)\n ) {\n throw new StorageError(\n 'The final plugin list options must be an object.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n const listPrefix = (options as { readonly prefix?: unknown } | undefined)\n ?.prefix;\n if (listPrefix === undefined || listPrefix === '') {\n if (prefix.length > 0) {\n assertPhysicalPluginBudget(`${prefix}/`, maxBytes);\n }\n return options === undefined\n ? undefined\n : (() => {\n const { prefix: _prefix, ...rest } = options as ListOptions;\n return Object.freeze({\n ...rest,\n ...(listPrefix === '' && { prefix: listPrefix }),\n });\n })();\n }\n if (typeof listPrefix !== 'string') {\n throw new StorageError('The final plugin list prefix must be a string.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n const resolved = physicalPluginKey(prefix, listPrefix);\n assertPhysicalPluginBudget(\n resolved.physicalKey,\n maxBytes,\n resolved.logicalKey,\n );\n return Object.freeze({\n ...(options as ListOptions),\n prefix: resolved.logicalKey,\n });\n };\n return {\n name: '@nestm/storage/physical-key-guard',\n wrap: handlers({\n copy: (operation, next) => {\n const from = assertKey(operation.from);\n const to = assertKey(operation.to);\n return next(Object.freeze({ ...operation, from, to }));\n },\n delete: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n download: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n exists: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n head: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n list: (operation, next) => {\n const options = assertListOptions(operation.options);\n return next(\n Object.freeze({\n ...operation,\n ...(options !== undefined && { options }),\n }),\n );\n },\n move: (operation, next) => {\n const from = assertKey(operation.from);\n const to = assertKey(operation.to);\n return next(Object.freeze({ ...operation, from, to }));\n },\n signedUploadUrl: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n upload: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n url: (operation, next) => {\n const key = assertKey(operation.key);\n return next(Object.freeze({ ...operation, key }));\n },\n }),\n };\n}\n\nexport class FilesSdkStorageDriver<\n AdapterType extends Adapter = Adapter,\n> implements StorageDriver {\n readonly #files: Files<AdapterType>;\n readonly #name: string;\n readonly #conditionalCopy: FilesSdkConditionalCopyAdapter | undefined;\n readonly #conditionalDelete: FilesSdkConditionalDeleteAdapter | undefined;\n readonly #conditionalRead: FilesSdkConditionalReadAdapter | undefined;\n readonly #conditionalUpload: FilesSdkConditionalUploadAdapter | undefined;\n readonly #directConditionalFallbackBlocked: boolean;\n readonly #physicalKey: FilesSdkPhysicalKeyAdapter | undefined;\n readonly #prefix: string;\n readonly #readOnly: boolean;\n readonly #retries: StorageRetryOptions | undefined;\n readonly #signal: AbortSignal | undefined;\n readonly #timeout: number | undefined;\n readonly #signedUploadPolicy: FilesSdkSignedUploadPolicyAdapter | undefined;\n readonly #signedDownloadPolicy:\n FilesSdkSignedDownloadPolicyAdapter | undefined;\n\n constructor(options: FilesSdkDriverOptions<AdapterType>) {\n const raw = adapterRawObject(options.adapter);\n const rawProvenance =\n raw === undefined ? undefined : s3AdapterProvenanceOfRaw(raw);\n const authorityToken = s3AdapterAuthorityTokenOf(options.adapter);\n const authorityState =\n typeof authorityToken === 'object'\n ? s3AuthorityState.get(authorityToken)\n : undefined;\n const authorityInvalid =\n authorityToken === conflictingS3Authority ||\n (authorityState !== undefined &&\n (authorityState.record === undefined ||\n raw === undefined ||\n (raw !== authorityState.raw &&\n rawProvenance !== authorityState.record)));\n const s3Provenance = authorityState?.record ?? rawProvenance;\n if (\n authorityInvalid ||\n (s3Provenance === undefined &&\n raw !== undefined &&\n (isUndecoratedS3Raw(raw) || isStructuralS3Raw(raw)))\n ) {\n throw new StorageError(\n 'Raw S3 adapters must be configured with withS3Capabilities() or createS3StorageDriver().',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n const mismatchedAuthority =\n s3Provenance === undefined\n ? undefined\n : mismatchedS3Authority(options.adapter, s3Provenance.surface);\n if (mismatchedAuthority !== undefined) {\n throw new StorageError(\n `S3 adapter authority \"${mismatchedAuthority}\" does not match its verified provider profile.`,\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n const adapterForFiles =\n s3Provenance === undefined\n ? options.adapter\n : (Object.freeze({ ...options.adapter }) as AdapterType);\n const copiedAuthorityMismatch =\n s3Provenance === undefined\n ? undefined\n : mismatchedS3Authority(adapterForFiles, s3Provenance.surface);\n if (copiedAuthorityMismatch !== undefined) {\n throw new StorageError(\n `S3 adapter authority \"${copiedAuthorityMismatch}\" changed while it was being bound.`,\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n const readOnly =\n options.readonly === true || s3Provenance?.provenance === 'unverified';\n // Evaluate caller policy before appending NestM's internal key guard below.\n this.#directConditionalFallbackBlocked =\n hasCallerFilesOperationPolicy(options);\n // Files retains the hooks object by reference. Snapshot it so an initially\n // inactive object cannot be mutated after this compatibility decision and\n // start observing only ordinary operations.\n const hooks =\n options.hooks === undefined\n ? undefined\n : Object.freeze({ ...options.hooks });\n this.#physicalKey = physicalKeyAdapterOf(adapterForFiles);\n const guardedPrefix = normalizeFilesSdkPrefix(options.prefix);\n const plugins = [\n ...(options.plugins ?? []),\n physicalKeyGuardPlugin(\n guardedPrefix,\n this.#physicalKey?.physicalKey.maxBytes,\n ),\n ];\n this.#files = new Files({\n ...options,\n adapter: adapterForFiles,\n ...(hooks !== undefined && { hooks }),\n plugins,\n readonly: readOnly,\n });\n this.#name = adapterForFiles.name;\n this.#conditionalCopy = conditionalCopyAdapterOf(adapterForFiles);\n this.#conditionalDelete = conditionalDeleteAdapterOf(adapterForFiles);\n this.#conditionalRead = conditionalReadAdapterOf(adapterForFiles);\n this.#conditionalUpload = conditionalUploadAdapterOf(adapterForFiles);\n this.#prefix = this.#files.prefix;\n if (guardedPrefix !== this.#prefix) {\n throw new StorageError('Storage prefix normalization was inconsistent.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n this.#assertPhysicalKeyBudget(this.#prefix);\n this.#readOnly = readOnly;\n this.#retries = storageRetryOptions(options.retries);\n this.#signal = options.signal;\n this.#timeout = options.timeout;\n this.#signedUploadPolicy = signedUploadPolicyAdapterOf(adapterForFiles);\n this.#signedDownloadPolicy = signedDownloadPolicyAdapterOf(adapterForFiles);\n }\n\n get name(): string {\n return this.#name;\n }\n\n get capabilities() {\n const capabilities = this.#files.capabilities;\n const conditional = capabilities.conditional;\n const directFallbackAllowed = !this.#directConditionalFallbackBlocked;\n const directCopy = directFallbackAllowed\n ? this.#conditionalCopy\n : undefined;\n const pipelineCopy = conditional.copy;\n const copyCapabilities = conditionalCopyCapabilities(\n directCopy,\n pipelineCopy,\n );\n const conditionalCopySource = copyCapabilities.source;\n const conditionalCopyDestination = copyCapabilities.destination;\n const directDelete = directFallbackAllowed\n ? this.#conditionalDelete\n : undefined;\n const directRead = directFallbackAllowed\n ? this.#conditionalRead\n : undefined;\n const directUpload = directFallbackAllowed\n ? this.#conditionalUpload\n : undefined;\n const conditionalReadEtag =\n conditional.exactRead || directRead?.conditionalRead.etag === true;\n const conditionalReadVersion = directRead?.conditionalRead.version === true;\n return {\n cacheControl: capabilities.cacheControl,\n delimiter: capabilities.delimiter,\n metadata: capabilities.metadata,\n rangeRead: capabilities.rangeRead,\n resumableUpload: !this.#readOnly && capabilities.multipart,\n serverSideCopy: !this.#readOnly && capabilities.serverSideCopy,\n ...(!this.#readOnly &&\n conditionalCopySource !== undefined && {\n conditionalCopySource,\n }),\n ...(!this.#readOnly &&\n conditionalCopyDestination !== undefined && {\n conditionalCopyDestination,\n }),\n ...(!this.#readOnly &&\n (conditional.delete ||\n directDelete?.conditionalDelete.etag === true) && {\n conditionalDelete: { etag: true },\n }),\n ...((conditionalReadEtag || conditionalReadVersion) && {\n conditionalRead: {\n etag: conditionalReadEtag,\n version: conditionalReadVersion,\n },\n }),\n ...(!this.#readOnly &&\n (conditional.create ||\n directUpload?.conditionalCreate !== undefined) && {\n conditionalCreate: {\n resultEtag:\n conditional.create ||\n directUpload?.conditionalCreate?.resultEtag === true,\n },\n }),\n ...(!this.#readOnly &&\n (conditional.replace ||\n directUpload?.conditionalReplace !== undefined) && {\n conditionalReplace: {\n resultEtag:\n conditional.replace ||\n directUpload?.conditionalReplace?.resultEtag === true,\n },\n }),\n ...(!this.#readOnly &&\n directUpload?.conditionalMultipartCompletion !== undefined && {\n conditionalMultipartCompletion: {\n ...directUpload.conditionalMultipartCompletion,\n },\n }),\n ...(this.#physicalKey !== undefined && {\n physicalKey: { ...this.#physicalKey.physicalKey },\n }),\n signedDownload: { ...capabilities.signedUrl },\n ...(this.#signedDownloadPolicy !== undefined && {\n signedDownloadPolicy: {\n ...this.#signedDownloadPolicy.signedDownloadPolicy,\n },\n }),\n signedUpload: this.#readOnly ? false : ('runtime' as const),\n ...(this.#signedUploadPolicy !== undefined &&\n !this.#readOnly && {\n signedUploadPolicy: {\n ...this.#signedUploadPolicy.signedUploadPolicy,\n },\n }),\n nativeUploadProgress: !this.#readOnly && capabilities.uploadProgress,\n };\n }\n\n async upload(\n key: string,\n body: StorageBody,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n this.#assertLogicalKey(key);\n return this.#call(async () =>\n uploadResultOf(\n await this.#files.upload(key, mapBody(body), uploadOptions(options)),\n ),\n );\n }\n\n uploadConditional(\n key: string,\n body: StorageBody,\n options: StorageConditionalUploadOptions,\n ): Promise<StorageUploadResult> {\n const condition = (options as { readonly condition?: unknown } | undefined)\n ?.condition;\n if (\n typeof condition !== 'object' ||\n condition === null ||\n !('type' in condition) ||\n (condition.type !== 'create' && condition.type !== 'replace')\n ) {\n return Promise.reject(\n invalidConditionalArgument(\n 'condition.type must be \"create\" or \"replace\".',\n key,\n 'upload',\n ),\n );\n }\n if (\n condition.type === 'replace' &&\n !isCanonicalStorageEtag('etag' in condition ? condition.etag : undefined)\n ) {\n return Promise.reject(\n invalidConditionalEtag('condition.etag', key, 'upload'),\n );\n }\n this.#assertLogicalKey(key);\n if (this.#readOnly) {\n return Promise.reject(\n new StorageError(\n `Cannot call uploadConditional() on a read-only storage adapter.`,\n {\n code: StorageErrorCode.READ_ONLY,\n key,\n operation: 'upload',\n permanent: true,\n },\n ),\n );\n }\n const adapter = this.#conditionalUpload;\n const capability =\n condition.type === 'create'\n ? adapter?.conditionalCreate\n : adapter?.conditionalReplace;\n const multipartRequested =\n options.multipart !== undefined && options.multipart !== false;\n const controlRequested = options.control !== undefined;\n const pipelineSupported =\n !multipartRequested &&\n !controlRequested &&\n (condition.type === 'create'\n ? this.#files.capabilities.conditional.create\n : this.#files.capabilities.conditional.replace);\n if (pipelineSupported) {\n return this.#call(async () =>\n conditionalUploadResultOf(\n await this.#files.upload(\n key,\n mapBody(body),\n conditionalUploadOptions(options),\n ),\n ),\n );\n }\n const multipartSupported =\n !multipartRequested ||\n (condition.type === 'create'\n ? adapter?.conditionalMultipartCompletion?.create === true\n : adapter?.conditionalMultipartCompletion?.replace === true);\n const directFallbackSupported =\n adapter !== undefined && capability !== undefined && multipartSupported;\n if (directFallbackSupported && this.#directConditionalFallbackBlocked) {\n return Promise.reject(\n this.#conditionalFallbackPolicyError(key, 'upload'),\n );\n }\n if (!directFallbackSupported) {\n return Promise.reject(\n new StorageError(\n `Storage adapter \"${this.#name}\" does not support conditional upload.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'upload',\n permanent: true,\n },\n ),\n );\n }\n const mergedOptions = this.#conditionalOptions(options);\n return this.#call(async () => {\n const physicalKey = this.#path(key);\n const result = await adapter.uploadConditional(\n physicalKey,\n mapBody(body),\n mergedOptions,\n );\n return directConditionalUploadResultOf(result, key, physicalKey);\n });\n }\n\n async download(\n key: string,\n options?: StorageDownloadOptions,\n ): Promise<StorageObject> {\n this.#assertLogicalKey(key);\n return this.#call(async () => {\n const file = await this.#files.download(key, downloadOptions(options));\n return {\n ...metadataOf(file, 'download'),\n body: normalizeDownloadStream(file.stream()),\n };\n });\n }\n\n downloadConditional(\n key: string,\n options: StorageConditionalReadOptions,\n ): Promise<StorageObject> {\n const condition = (options as { readonly condition?: unknown } | undefined)\n ?.condition;\n if (typeof condition !== 'object' || condition === null) {\n return Promise.reject(\n invalidConditionalArgument(\n 'conditional read requires a condition object.',\n key,\n 'download',\n ),\n );\n }\n const etag = 'etag' in condition ? condition.etag : undefined;\n const version = 'version' in condition ? condition.version : undefined;\n if (etag !== undefined && !isCanonicalStorageEtag(etag)) {\n return Promise.reject(\n invalidConditionalEtag('condition.etag', key, 'download'),\n );\n }\n if (\n version !== undefined &&\n (typeof version !== 'string' || version.length === 0)\n ) {\n return Promise.reject(\n invalidConditionalArgument(\n 'condition.version must be a non-empty string.',\n key,\n 'download',\n ),\n );\n }\n if (etag === undefined && version === undefined) {\n return Promise.reject(\n invalidConditionalArgument(\n 'conditional read requires an etag, version, or both.',\n key,\n 'download',\n ),\n );\n }\n this.#assertLogicalKey(key);\n const pipelineSupported =\n etag !== undefined &&\n version === undefined &&\n this.#files.capabilities.conditional.exactRead;\n if (pipelineSupported) {\n return this.#call(async () =>\n storageObjectOf(\n await this.#files.download(key, {\n ...downloadOptions(options),\n condition: { etag },\n }),\n ),\n );\n }\n const adapter = this.#conditionalRead;\n const directFallbackSupported =\n adapter !== undefined &&\n (etag === undefined || adapter.conditionalRead.etag) &&\n (version === undefined || adapter.conditionalRead.version);\n if (directFallbackSupported && this.#directConditionalFallbackBlocked) {\n return Promise.reject(\n this.#conditionalFallbackPolicyError(key, 'download'),\n );\n }\n if (!directFallbackSupported) {\n return Promise.reject(\n new StorageError(\n `Storage adapter \"${this.#name}\" does not support conditional read.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'download',\n permanent: true,\n },\n ),\n );\n }\n return this.#call(async () => {\n const physicalKey = this.#path(key);\n const object = await adapter.downloadConditional(\n physicalKey,\n this.#conditionalOptions(options),\n );\n if (object.key !== physicalKey) {\n await object.body.cancel().catch(() => undefined);\n throw new StorageError(\n 'Storage adapter returned an unexpected conditional download key.',\n {\n code: StorageErrorCode.PROVIDER,\n key,\n operation: 'download',\n permanent: true,\n },\n );\n }\n let etag: string | undefined;\n try {\n etag = providerEtag(object.etag, key, 'download');\n } catch (error) {\n await object.body.cancel(error).catch(() => undefined);\n throw error;\n }\n return {\n ...object,\n body: normalizeDownloadStream(object.body),\n ...(etag === undefined ? {} : { etag }),\n key,\n name: key.split('/').at(-1) ?? key,\n };\n });\n }\n\n async head(\n key: string,\n options?: StorageOperationOptions,\n ): Promise<StorageObjectMetadata> {\n this.#assertLogicalKey(key);\n return this.#call(async () =>\n metadataOf(\n await this.#files.head(key, operationOptions(options)),\n 'head',\n ),\n );\n }\n\n exists(key: string, options?: StorageOperationOptions): Promise<boolean> {\n this.#assertLogicalKey(key);\n return this.#call(() => this.#files.exists(key, operationOptions(options)));\n }\n\n delete(key: string, options?: StorageOperationOptions): Promise<void> {\n this.#assertLogicalKey(key);\n return this.#call(async () => {\n await this.#files.delete(key, operationOptions(options));\n });\n }\n\n deleteConditional(\n key: string,\n options: StorageConditionalDeleteOptions,\n ): Promise<void> {\n const condition = (options as { readonly condition?: unknown } | undefined)\n ?.condition;\n if (typeof condition !== 'object' || condition === null) {\n return Promise.reject(\n invalidConditionalArgument(\n 'conditional delete requires a condition object.',\n key,\n 'delete',\n ),\n );\n }\n const etag = 'etag' in condition ? condition.etag : undefined;\n if (!isCanonicalStorageEtag(etag)) {\n return Promise.reject(\n invalidConditionalEtag('condition.etag', key, 'delete'),\n );\n }\n this.#assertLogicalKey(key);\n if (this.#readOnly) {\n return Promise.reject(\n new StorageError(\n `Cannot call deleteConditional() on a read-only storage adapter.`,\n {\n code: StorageErrorCode.READ_ONLY,\n key,\n operation: 'delete',\n permanent: true,\n },\n ),\n );\n }\n if (this.#files.capabilities.conditional.delete) {\n return this.#call(() =>\n this.#files.delete(key, {\n ...operationOptions(options),\n condition: options.condition,\n }),\n );\n }\n const adapter = this.#conditionalDelete;\n const directFallbackSupported =\n adapter !== undefined && adapter.conditionalDelete.etag;\n if (directFallbackSupported && this.#directConditionalFallbackBlocked) {\n return Promise.reject(\n this.#conditionalFallbackPolicyError(key, 'delete'),\n );\n }\n if (!directFallbackSupported) {\n return Promise.reject(\n new StorageError(\n `Storage adapter \"${this.#name}\" does not support conditional delete.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation: 'delete',\n permanent: true,\n },\n ),\n );\n }\n const mergedOptions = this.#conditionalOptions(options);\n return this.#call(() =>\n adapter.deleteConditional(this.#path(key), mergedOptions),\n );\n }\n\n copy(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n this.#assertLogicalKey(sourceKey);\n this.#assertLogicalKey(destinationKey);\n return this.#call(() =>\n this.#files.copy(sourceKey, destinationKey, operationOptions(options)),\n );\n }\n\n move(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n this.#assertLogicalKey(sourceKey);\n this.#assertLogicalKey(destinationKey);\n return this.#call(() =>\n this.#files.move(sourceKey, destinationKey, operationOptions(options)),\n );\n }\n\n promote(\n sourceKey: string,\n destinationKey: string,\n options: StoragePromotionOptions,\n ): Promise<void> {\n if (typeof options !== 'object' || options === null) {\n return Promise.reject(\n invalidConditionalArgument(\n 'promote requires an options object with a precondition.',\n sourceKey,\n 'promote',\n ),\n );\n }\n const destination = options.destination;\n if (\n destination !== undefined &&\n (typeof destination !== 'object' ||\n destination === null ||\n (destination.type !== 'create' && destination.type !== 'replace'))\n ) {\n return Promise.reject(\n new StorageError('destination.type must be \"create\" or \"replace\".', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key: destinationKey,\n operation: 'promote',\n permanent: true,\n }),\n );\n }\n if (\n options.sourceVersion !== undefined &&\n (typeof options.sourceVersion !== 'string' ||\n options.sourceVersion.length === 0)\n ) {\n return Promise.reject(\n invalidConditionalArgument(\n 'sourceVersion must be a non-empty string.',\n sourceKey,\n 'promote',\n ),\n );\n }\n if (\n options.sourceEtag === undefined &&\n options.sourceVersion === undefined &&\n destination === undefined\n ) {\n return Promise.reject(\n invalidConditionalArgument(\n 'promote requires a source or destination precondition.',\n sourceKey,\n 'promote',\n ),\n );\n }\n if (\n options.sourceEtag !== undefined &&\n !isCanonicalStorageEtag(options.sourceEtag)\n ) {\n return Promise.reject(\n invalidConditionalEtag('sourceEtag', sourceKey, 'promote'),\n );\n }\n if (\n destination?.type === 'replace' &&\n !isCanonicalStorageEtag(destination.etag)\n ) {\n return Promise.reject(\n invalidConditionalEtag('destination.etag', destinationKey, 'promote'),\n );\n }\n this.#assertLogicalKey(sourceKey);\n this.#assertLogicalKey(destinationKey);\n if (this.#readOnly) {\n return Promise.reject(\n new StorageError(\n `Cannot call promote() on a read-only storage adapter.`,\n {\n code: StorageErrorCode.READ_ONLY,\n key: sourceKey,\n operation: 'promote',\n permanent: true,\n },\n ),\n );\n }\n const pipelineCopy = this.#files.capabilities.conditional.copy;\n const pipelineDestinationSupported =\n destination?.type === 'create'\n ? pipelineCopy.destinationCreate\n : destination?.type === 'replace'\n ? pipelineCopy.destinationReplace\n : false;\n const pipelineSupported =\n options.sourceEtag !== undefined &&\n options.sourceVersion === undefined &&\n destination !== undefined &&\n pipelineCopy.sourceEtag &&\n pipelineCopy.atomicSourceDestination &&\n pipelineDestinationSupported;\n if (pipelineSupported) {\n return this.#call(() =>\n this.#files.copy(sourceKey, destinationKey, {\n ...operationOptions(options),\n condition: {\n destination,\n source: { etag: options.sourceEtag as string },\n },\n }),\n );\n }\n const adapter = this.#conditionalCopy;\n const directFallbackSupported =\n adapter !== undefined &&\n (options.sourceEtag === undefined ||\n adapter.conditionalCopySource?.etag === true) &&\n (options.sourceVersion === undefined ||\n adapter.conditionalCopySource?.version === true) &&\n (options.sourceEtag === undefined && options.sourceVersion === undefined\n ? true\n : options.destination !== undefined ||\n adapter.conditionalCopySource?.requiresDestinationPredicate !==\n true) &&\n (options.destination?.type !== 'create' ||\n adapter.conditionalCopyDestination?.create === true) &&\n (options.destination?.type !== 'replace' ||\n adapter.conditionalCopyDestination?.replace === true) &&\n (options.destination === undefined ||\n options.sourceEtag !== undefined ||\n options.sourceVersion !== undefined ||\n adapter.conditionalCopyDestination?.requiresSourcePredicate !== true) &&\n (options.destination === undefined ||\n (options.sourceEtag === undefined &&\n options.sourceVersion === undefined) ||\n adapter.conditionalCopyDestination?.atomicWithSource === true);\n if (directFallbackSupported && this.#directConditionalFallbackBlocked) {\n return Promise.reject(\n this.#conditionalFallbackPolicyError(sourceKey, 'promote'),\n );\n }\n if (!directFallbackSupported) {\n return Promise.reject(\n new StorageError(\n `Storage adapter \"${this.#name}\" does not support conditional promotion.`,\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key: sourceKey,\n operation: 'promote',\n permanent: true,\n },\n ),\n );\n }\n return this.#call(() =>\n adapter.promote(\n this.#path(sourceKey),\n this.#path(destinationKey),\n this.#conditionalOptions(options),\n ),\n );\n }\n\n async list(options?: StorageListOptions): Promise<StorageListResult> {\n this.#assertListPhysicalPrefix(options?.prefix);\n return this.#call(async () => {\n const result = await this.#files.list(listOptions(options));\n return {\n items: result.items.map((file) => metadataOf(file, 'list')),\n ...(result.cursor !== undefined && { cursor: result.cursor }),\n ...(result.prefixes !== undefined && {\n prefixes: [...result.prefixes],\n }),\n };\n });\n }\n\n search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncIterable<StorageObjectMetadata> {\n return this.#search(pattern, options);\n }\n\n async *#search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncGenerator<StorageObjectMetadata, void> {\n try {\n for await (const file of this.#files.search(\n pattern,\n searchOptions(options),\n )) {\n yield metadataOf(file, 'search');\n }\n } catch (error) {\n throw mapFilesSdkError(error);\n }\n }\n\n signDownload(\n key: string,\n options?: StorageSignedDownloadOptions,\n ): Promise<string> {\n this.#assertLogicalKey(key);\n return this.#call(() =>\n this.#files.url(key, signedDownloadOptions(options)),\n );\n }\n\n signUpload(\n key: string,\n options: StorageSignedUploadOptions,\n ): Promise<StorageSignedUpload> {\n this.#assertLogicalKey(key);\n return this.#call(() =>\n this.#files.signedUploadUrl(key, signedUploadOptions(options)),\n );\n }\n\n async #call<Result>(operation: () => Promise<Result>): Promise<Result> {\n try {\n return await operation();\n } catch (error) {\n throw mapFilesSdkError(error);\n }\n }\n\n #path(key: string): string {\n if (typeof key !== 'string' || key.length === 0) {\n throw new StorageError('key must be a non-empty string.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n if (key.includes('\\0')) {\n throw new StorageError('key must not contain null bytes.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n permanent: true,\n });\n }\n const normalized = key.replace(/^\\/+/u, '');\n if (\n normalized\n .split('/')\n .some((segment) => segment === '.' || segment === '..')\n ) {\n throw new StorageError('key must not contain . or .. path segments.', {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n permanent: true,\n });\n }\n const physicalKey =\n this.#prefix.length === 0 ? key : `${this.#prefix}/${normalized}`;\n this.#assertPhysicalKeyBudget(physicalKey, key);\n return physicalKey;\n }\n\n #assertLogicalKey(key: string): void {\n this.#path(key);\n }\n\n #assertListPhysicalPrefix(prefix: string | undefined): void {\n if (prefix !== undefined && prefix.length > 0) {\n this.#assertLogicalKey(prefix);\n return;\n }\n if (this.#prefix.length > 0) {\n this.#assertPhysicalKeyBudget(`${this.#prefix}/`);\n }\n }\n\n #physicalKeyExceedsBudget(physicalKey: string): boolean {\n const maxBytes = this.#physicalKey?.physicalKey.maxBytes;\n return (\n maxBytes !== undefined &&\n new TextEncoder().encode(physicalKey).byteLength > maxBytes\n );\n }\n\n #assertPhysicalKeyBudget(physicalKey: string, logicalKey?: string): void {\n const maxBytes = this.#physicalKey?.physicalKey.maxBytes;\n if (maxBytes === undefined || !this.#physicalKeyExceedsBudget(physicalKey))\n return;\n throw new StorageError(\n `The combined storage prefix and key exceed the provider's ${maxBytes}-byte physical-key limit.`,\n {\n code: StorageErrorCode.LIMIT_EXCEEDED,\n ...(logicalKey !== undefined && { key: logicalKey }),\n permanent: true,\n },\n );\n }\n\n #conditionalFallbackPolicyError(\n key: string,\n operation: 'delete' | 'download' | 'promote' | 'upload',\n ): StorageError {\n return new StorageError(\n 'This conditional form requires a NestM adapter fallback and is unavailable while Files SDK plugins, hooks, or receipts are configured.',\n {\n code: StorageErrorCode.NOT_SUPPORTED,\n key,\n operation,\n permanent: true,\n },\n );\n }\n\n #conditionalOptions<\n Options extends\n | StorageConditionalUploadOptions\n | StorageConditionalDeleteOptions\n | StorageConditionalReadOptions\n | StoragePromotionOptions,\n >(options: Options): Options {\n return {\n ...options,\n ...(options.retries === undefined &&\n this.#retries !== undefined && { retries: this.#retries }),\n ...(options.signal === undefined &&\n this.#signal !== undefined && { signal: this.#signal }),\n ...(options.timeout === undefined &&\n this.#timeout !== undefined && { timeout: this.#timeout }),\n };\n }\n}\n\nexport function createFilesSdkDriver<AdapterType extends Adapter>(\n options: FilesSdkDriverOptions<AdapterType>,\n): FilesSdkStorageDriver<AdapterType> {\n return new FilesSdkStorageDriver(options);\n}\n"]}
@@ -0,0 +1,42 @@
1
+ import { type FsAdapter, type FsAdapterOptions } from 'files-sdk/fs';
2
+ import { type FilesSdkConditionalCopyAdapter, type FilesSdkConditionalDeleteAdapter, type FilesSdkConditionalReadAdapter, type FilesSdkConditionalUploadAdapter, type FilesSdkDriverOptions, type FilesSdkPhysicalKeyAdapter, type FilesSdkStorageDriver } from '../files-sdk.driver.js';
3
+ export interface FsStorageDriverOptions extends Omit<FilesSdkDriverOptions<FsAdapter>, 'adapter'> {
4
+ adapter: FsAdapterOptions;
5
+ }
6
+ export type FsStorageAdapter = FsAdapter & FilesSdkConditionalCopyAdapter & FilesSdkConditionalDeleteAdapter & FilesSdkConditionalReadAdapter & FilesSdkConditionalUploadAdapter & FilesSdkPhysicalKeyAdapter;
7
+ /**
8
+ * Adds symlink-defended reads and process-local exact conditional operations
9
+ * to a files-sdk fs adapter.
10
+ *
11
+ * The configured root must be dedicated to this decorated adapter: no other
12
+ * process, unwrapped adapter, or direct filesystem writer may mutate it
13
+ * concurrently. Ordinary adapter mutations and conditional operations share
14
+ * one process-local lock domain. Each call rejects symlinks in the existing key
15
+ * path and uses exclusive same-directory temporary files plus atomic renames,
16
+ * but Node has no portable `openat2` equivalent that could make those checks
17
+ * safe against a hostile concurrent tree rewrite. This is a CAS implementation
18
+ * for an exclusively-owned local workspace, not a host-filesystem sandbox.
19
+ * Body and metadata sidecars are two files, so a process crash between their
20
+ * renames can still require cleanup.
21
+ */
22
+ export declare function withFsConditionalMutation(base: FsAdapter): FsStorageAdapter;
23
+ /**
24
+ * Creates the files-sdk filesystem driver from the storage package's own
25
+ * dependency context. The adapter reaches only `node:fs`, so this entry point
26
+ * adds no native SDK to the install — unlike every object-store provider, it is
27
+ * always available.
28
+ *
29
+ * The adapter keeps a `<key>.meta.json` sidecar beside each body to carry the
30
+ * content type, ETag, and custom metadata that a filesystem has nowhere else to
31
+ * put. Sidecars never surface as keys: `list` and `search` skip them, and
32
+ * uploading a key that ends in `.meta.json` fails closed rather than colliding
33
+ * with one.
34
+ *
35
+ * Conditional mutations additionally require an exclusively-owned root. See
36
+ * {@link withFsConditionalMutation}; use an OS sandbox as well when running an
37
+ * agent that has direct shell or filesystem tools.
38
+ */
39
+ export declare function createFsStorageDriver(options: FsStorageDriverOptions): FilesSdkStorageDriver<FsStorageAdapter>;
40
+ export { fs, mapFsError } from 'files-sdk/fs';
41
+ export type { FsAdapter, FsAdapterOptions } from 'files-sdk/fs';
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/files-sdk/fs/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAM,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgBzE,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,qBAAqB,CAAC,SAAS,CAAC,EAChC,SAAS,CACV;IACC,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GACtC,8BAA8B,GAC9B,gCAAgC,GAChC,8BAA8B,GAC9B,gCAAgC,GAChC,0BAA0B,CAAC;AA2nB7B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAszB3E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAAC,gBAAgB,CAAC,CAMzC;AAED,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}