@nestm/storage 0.1.0-alpha.1 → 0.1.0-alpha.11

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 (162) hide show
  1. package/CHANGELOG.md +271 -0
  2. package/README.md +877 -25
  3. package/SECURITY.md +128 -0
  4. package/dist/ai-sdk/ai-sdk-file-workflow-tools.d.ts +37 -0
  5. package/dist/ai-sdk/ai-sdk-file-workflow-tools.d.ts.map +1 -0
  6. package/dist/ai-sdk/ai-sdk-file-workflow-tools.js +258 -0
  7. package/dist/ai-sdk/ai-sdk-file-workflow-tools.js.map +1 -0
  8. package/dist/ai-sdk/ai-sdk-workspace-tools.d.ts +91 -0
  9. package/dist/ai-sdk/ai-sdk-workspace-tools.d.ts.map +1 -0
  10. package/dist/ai-sdk/ai-sdk-workspace-tools.js +491 -0
  11. package/dist/ai-sdk/ai-sdk-workspace-tools.js.map +1 -0
  12. package/dist/ai-sdk/index.d.ts +3 -0
  13. package/dist/ai-sdk/index.d.ts.map +1 -0
  14. package/dist/ai-sdk/index.js +3 -0
  15. package/dist/ai-sdk/index.js.map +1 -0
  16. package/dist/bytes/index.d.ts +30 -0
  17. package/dist/bytes/index.d.ts.map +1 -0
  18. package/dist/bytes/index.js +96 -0
  19. package/dist/bytes/index.js.map +1 -0
  20. package/dist/core/index.d.ts +9 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/core/index.js +7 -0
  23. package/dist/core/index.js.map +1 -0
  24. package/dist/core/storage-staged-content.d.ts +37 -0
  25. package/dist/core/storage-staged-content.d.ts.map +1 -0
  26. package/dist/core/storage-staged-content.js +94 -0
  27. package/dist/core/storage-staged-content.js.map +1 -0
  28. package/dist/core/storage-streams.d.ts +19 -0
  29. package/dist/core/storage-streams.d.ts.map +1 -0
  30. package/dist/core/storage-streams.js +95 -0
  31. package/dist/core/storage-streams.js.map +1 -0
  32. package/dist/core/storage-text.d.ts +33 -0
  33. package/dist/core/storage-text.d.ts.map +1 -0
  34. package/dist/core/storage-text.js +98 -0
  35. package/dist/core/storage-text.js.map +1 -0
  36. package/dist/files-sdk/files-sdk.driver.d.ts +85 -3
  37. package/dist/files-sdk/files-sdk.driver.d.ts.map +1 -1
  38. package/dist/files-sdk/files-sdk.driver.js +1437 -37
  39. package/dist/files-sdk/files-sdk.driver.js.map +1 -1
  40. package/dist/files-sdk/fs/index.d.ts +42 -0
  41. package/dist/files-sdk/fs/index.d.ts.map +1 -0
  42. package/dist/files-sdk/fs/index.js +1117 -0
  43. package/dist/files-sdk/fs/index.js.map +1 -0
  44. package/dist/files-sdk/index.d.ts +1 -1
  45. package/dist/files-sdk/index.d.ts.map +1 -1
  46. package/dist/files-sdk/index.js.map +1 -1
  47. package/dist/files-sdk/memory.d.ts +7 -0
  48. package/dist/files-sdk/memory.d.ts.map +1 -0
  49. package/dist/files-sdk/memory.js +72 -0
  50. package/dist/files-sdk/memory.js.map +1 -0
  51. package/dist/files-sdk/provider/index.d.ts +58 -0
  52. package/dist/files-sdk/provider/index.d.ts.map +1 -0
  53. package/dist/files-sdk/provider/index.js +151 -0
  54. package/dist/files-sdk/provider/index.js.map +1 -0
  55. package/dist/files-sdk/s3/construction-metadata.d.ts +9 -0
  56. package/dist/files-sdk/s3/construction-metadata.d.ts.map +1 -0
  57. package/dist/files-sdk/s3/construction-metadata.js +24 -0
  58. package/dist/files-sdk/s3/construction-metadata.js.map +1 -0
  59. package/dist/files-sdk/s3/index.d.ts +54 -0
  60. package/dist/files-sdk/s3/index.d.ts.map +1 -0
  61. package/dist/files-sdk/s3/index.js +1505 -0
  62. package/dist/files-sdk/s3/index.js.map +1 -0
  63. package/dist/gateway/index.d.ts +1 -1
  64. package/dist/gateway/index.d.ts.map +1 -1
  65. package/dist/gateway/index.js.map +1 -1
  66. package/dist/gateway/storage-gateway-fastify-parser.d.ts.map +1 -1
  67. package/dist/gateway/storage-gateway-fastify-parser.js.map +1 -1
  68. package/dist/gateway/storage-gateway.controller.d.ts +12 -11
  69. package/dist/gateway/storage-gateway.controller.d.ts.map +1 -1
  70. package/dist/gateway/storage-gateway.controller.js +240 -70
  71. package/dist/gateway/storage-gateway.controller.js.map +1 -1
  72. package/dist/gateway/storage-gateway.guard.d.ts.map +1 -1
  73. package/dist/gateway/storage-gateway.guard.js.map +1 -1
  74. package/dist/gateway/storage-gateway.module.d.ts.map +1 -1
  75. package/dist/gateway/storage-gateway.module.js +60 -1
  76. package/dist/gateway/storage-gateway.module.js.map +1 -1
  77. package/dist/gateway/storage-gateway.tokens.d.ts +1 -0
  78. package/dist/gateway/storage-gateway.tokens.d.ts.map +1 -1
  79. package/dist/gateway/storage-gateway.tokens.js +1 -0
  80. package/dist/gateway/storage-gateway.tokens.js.map +1 -1
  81. package/dist/gateway/storage-gateway.types.d.ts +53 -10
  82. package/dist/gateway/storage-gateway.types.d.ts.map +1 -1
  83. package/dist/gateway/storage-gateway.types.js.map +1 -1
  84. package/dist/index.d.ts +1 -5
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -3
  87. package/dist/index.js.map +1 -1
  88. package/dist/inject-storage.decorator.js.map +1 -1
  89. package/dist/storage-etag.d.ts +13 -0
  90. package/dist/storage-etag.d.ts.map +1 -0
  91. package/dist/storage-etag.js +31 -0
  92. package/dist/storage-etag.js.map +1 -0
  93. package/dist/storage-upload-control.d.ts.map +1 -1
  94. package/dist/storage.client.d.ts +15 -3
  95. package/dist/storage.client.d.ts.map +1 -1
  96. package/dist/storage.client.js +204 -2
  97. package/dist/storage.client.js.map +1 -1
  98. package/dist/storage.driver.d.ts +28 -1
  99. package/dist/storage.driver.d.ts.map +1 -1
  100. package/dist/storage.driver.js.map +1 -1
  101. package/dist/storage.error.d.ts +17 -10
  102. package/dist/storage.error.d.ts.map +1 -1
  103. package/dist/storage.error.js +47 -1
  104. package/dist/storage.error.js.map +1 -1
  105. package/dist/storage.module.d.ts.map +1 -1
  106. package/dist/storage.module.js.map +1 -1
  107. package/dist/storage.service.d.ts.map +1 -1
  108. package/dist/storage.service.js +28 -3
  109. package/dist/storage.service.js.map +1 -1
  110. package/dist/storage.tokens.js.map +1 -1
  111. package/dist/storage.types.d.ts +150 -1
  112. package/dist/storage.types.d.ts.map +1 -1
  113. package/dist/storage.types.js.map +1 -1
  114. package/dist/testing/index.d.ts +1 -0
  115. package/dist/testing/index.d.ts.map +1 -1
  116. package/dist/testing/index.js +3 -1
  117. package/dist/testing/index.js.map +1 -1
  118. package/dist/testing/provider-conformance.d.ts +65 -0
  119. package/dist/testing/provider-conformance.d.ts.map +1 -0
  120. package/dist/testing/provider-conformance.js +869 -0
  121. package/dist/testing/provider-conformance.js.map +1 -0
  122. package/dist/workspace/index.d.ts +10 -0
  123. package/dist/workspace/index.d.ts.map +1 -0
  124. package/dist/workspace/index.js +8 -0
  125. package/dist/workspace/index.js.map +1 -0
  126. package/dist/workspace/storage-file-catalog.types.d.ts +65 -0
  127. package/dist/workspace/storage-file-catalog.types.d.ts.map +1 -0
  128. package/dist/workspace/storage-file-catalog.types.js +2 -0
  129. package/dist/workspace/storage-file-catalog.types.js.map +1 -0
  130. package/dist/workspace/storage-file-workflow.d.ts +7 -0
  131. package/dist/workspace/storage-file-workflow.d.ts.map +1 -0
  132. package/dist/workspace/storage-file-workflow.js +440 -0
  133. package/dist/workspace/storage-file-workflow.js.map +1 -0
  134. package/dist/workspace/storage-file-workflow.protection.d.ts +31 -0
  135. package/dist/workspace/storage-file-workflow.protection.d.ts.map +1 -0
  136. package/dist/workspace/storage-file-workflow.protection.js +258 -0
  137. package/dist/workspace/storage-file-workflow.protection.js.map +1 -0
  138. package/dist/workspace/storage-file-workflow.types.d.ts +128 -0
  139. package/dist/workspace/storage-file-workflow.types.d.ts.map +1 -0
  140. package/dist/workspace/storage-file-workflow.types.js +8 -0
  141. package/dist/workspace/storage-file-workflow.types.js.map +1 -0
  142. package/dist/workspace/storage-workspace.cursor.d.ts +71 -0
  143. package/dist/workspace/storage-workspace.cursor.d.ts.map +1 -0
  144. package/dist/workspace/storage-workspace.cursor.js +408 -0
  145. package/dist/workspace/storage-workspace.cursor.js.map +1 -0
  146. package/dist/workspace/storage-workspace.d.ts +6 -0
  147. package/dist/workspace/storage-workspace.d.ts.map +1 -0
  148. package/dist/workspace/storage-workspace.error.d.ts +32 -0
  149. package/dist/workspace/storage-workspace.error.d.ts.map +1 -0
  150. package/dist/workspace/storage-workspace.error.js +75 -0
  151. package/dist/workspace/storage-workspace.error.js.map +1 -0
  152. package/dist/workspace/storage-workspace.js +849 -0
  153. package/dist/workspace/storage-workspace.js.map +1 -0
  154. package/dist/workspace/storage-workspace.path.d.ts +9 -0
  155. package/dist/workspace/storage-workspace.path.d.ts.map +1 -0
  156. package/dist/workspace/storage-workspace.path.js +68 -0
  157. package/dist/workspace/storage-workspace.path.js.map +1 -0
  158. package/dist/workspace/storage-workspace.types.d.ts +123 -0
  159. package/dist/workspace/storage-workspace.types.d.ts.map +1 -0
  160. package/dist/workspace/storage-workspace.types.js +22 -0
  161. package/dist/workspace/storage-workspace.types.js.map +1 -0
  162. package/package.json +94 -20
package/CHANGELOG.md CHANGED
@@ -1,5 +1,276 @@
1
1
  # @nestm/storage
2
2
 
3
+ ## 0.1.0-alpha.11
4
+
5
+ ### Minor Changes
6
+
7
+ - 9c5f230: Add framework-neutral durable file workflows with immutable integrity-checked
8
+ staged bodies, bounded UTF-8 reads/search, idempotent chunk appends, and explicit
9
+ host transaction ports for atomic multi-file head commits. Add protected catalog
10
+ and draft capabilities and generic tools in the existing optional AI SDK entrypoint.
11
+
12
+ Add a browser-safe bytes entrypoint for verified upload resumption and UTF-8
13
+ chunk boundaries. Preserve the default memory driver with native conditional
14
+ create/replace/read/delete, evaluated atomically after body consumption, and
15
+ canonical SHA-256 ETags. Memory remains volatile and process-local.
16
+
17
+ ## 0.1.0-alpha.10
18
+
19
+ ### Minor Changes
20
+
21
+ - 0d6cf3c: Delegate conditional create, replace, exact ETag read, delete, and paired copy
22
+ to the Files SDK 2.3 operation pipeline so plugins, hooks, retries, and receipts
23
+ apply without bypassing native provider preconditions. Keep the direct NestM
24
+ fallback only for version predicates, conditional multipart/resumable
25
+ completion, and one-sided conditional copies, and fail those shapes closed when
26
+ caller Files policy is configured.
27
+
28
+ Expose paired-copy dependency flags in provider capabilities and preserve
29
+ `StorageError.applied` plus `appliedEtag` so callers can reconcile a conditional
30
+ mutation that committed before a post-operation failure. Preserve the same
31
+ bounded reconciliation signal through workspace, AI-tool, and gateway error
32
+ boundaries.
33
+
34
+ ### Patch Changes
35
+
36
+ - 0d6cf3c: Replace the NestJS 12 prerelease peer range and test matrix with the stable NestJS 12 line, and refresh the package toolchain and optional integration dependencies.
37
+
38
+ ## 0.1.0-alpha.9
39
+
40
+ ### Minor Changes
41
+
42
+ - aec25d6: Add explicit last-write-wins workspace write, copy, and unconditional-delete
43
+ operations that traverse the ordinary Files SDK plugin, hook, and receipt
44
+ pipeline while retaining the existing native conditional create, replace,
45
+ copy, move, and delete variants. Unconditional delete requires both `write` and
46
+ `delete`; move remains conditional-only because a non-atomic
47
+ download/upload/delete sequence could delete a newer source generation. Add a
48
+ separate `write` permission and an AI tool factory mutation-mode switch whose
49
+ default remains conditional.
50
+
51
+ Add bounded binary workspace reads through `readBytes`, alongside the existing
52
+ UTF-8 `readText` API. `readBytes` is a required `StorageWorkspace` member, so
53
+ custom interface implementations and typed test doubles must add it when
54
+ upgrading; workspaces returned by `mountStorageWorkspace` need no changes.
55
+
56
+ ### Patch Changes
57
+
58
+ - 37e0d8d: Fail conditional storage operations closed when caller-configured Files SDK
59
+ plugins, hooks, or receipts would be bypassed by native adapter extensions.
60
+ Ordinary operations continue through Files SDK while incompatible conditional
61
+ capabilities are hidden until Files SDK exposes one shared interception boundary.
62
+
63
+ ## 0.1.0-alpha.8
64
+
65
+ ### Minor Changes
66
+
67
+ - d81c6f4: Add a typed `mapCreateConflict` hook to the AI SDK workspace adapter so
68
+ applications can represent atomic create collisions as domain results without
69
+ mutating generated tools. Keep replace/ETag conflicts fail-closed and sanitize
70
+ mapper failures at the tool boundary.
71
+
72
+ Mark workspace tools with optional inputs or a combined create/replace union as
73
+ non-strict for provider schema generation while retaining strict Zod runtime
74
+ validation.
75
+
76
+ - a0ea392: Add injectable, replica-safe workspace pagination cursors. The workspace now
77
+ binds versioned cursor payloads to stable store, mount, tenant/workspace, prefix,
78
+ operation, query, limit, and expiry context; authorizes non-consuming replay
79
+ before that expiry; and rejects altered or cross-context continuations.
80
+ Successful continuation still depends on the embedded provider cursor remaining
81
+ valid and available.
82
+
83
+ Export an AES-256-GCM key-ring codec for stateless multi-replica deployments and
84
+ an asynchronous byte-payload codec contract for shared durable opaque-token
85
+ stores. Cursor payloads and tokens are bounded, provider continuations remain
86
+ opaque, and pagination fails closed when no cursor mechanism is configured.
87
+ Compatible replicas rely on the universal driver contract for non-consuming,
88
+ instance-portable provider cursors whose position is independent of page size
89
+ while the provider token remains valid. Cursor expiry is not a provider-token
90
+ retention, snapshot-isolation, or uptime promise; provider invalidation remains
91
+ an operational list failure.
92
+
93
+ - d996b92: Split the aggregate S3 conditional-mutation and copy declarations into exact
94
+ create, replace, delete, read, source-copy, destination-copy, atomic-promotion,
95
+ and multipart-completion capabilities. Add independent AWS S3, Cloudflare R2,
96
+ and fail-closed custom-endpoint profiles that force unverified drivers
97
+ read-only; enforce complete physical-key byte budgets; normalize provider
98
+ errors without retaining raw provider payloads or causes; and publish a reusable
99
+ provider conformance contract with gated filesystem, AWS, R2, and custom suites.
100
+
101
+ Normalize every provider ETag to a canonical bare 1–1024-byte visible ASCII
102
+ token and serialize exactly one HTTP quote pair at S3 request boundaries.
103
+ Quoted, weak, wildcard, list-shaped, control-bearing, non-ASCII, and otherwise
104
+ unsafe values now fail closed instead of being accepted as arbitrary non-empty
105
+ strings. Applications that persisted quoted ETags must refresh them from
106
+ provider metadata before conditional mutation; this prevents wildcard/list and
107
+ header-ambiguity inputs from widening an exact-match precondition.
108
+
109
+ Specify and test provider list cursors as non-consuming replayable tokens for
110
+ unchanged provider state, so higher-level replayable pagination can fail closed
111
+ when a provider cannot meet that contract.
112
+
113
+ Exercise the complete advertised source-condition by destination-condition
114
+ promotion matrix, including stale-state preservation and competing stale/valid
115
+ requests. Provider documentation or audited implementation evidence remains
116
+ required for the internal one-linearization-point claim.
117
+
118
+ Ordinary and conditional provider failures now expose stable public messages
119
+ and preserve only normalized codes and retry flags; raw provider bodies,
120
+ request metadata, and nested causes are not retained in loggable error shapes.
121
+
122
+ Raise the `@aws-sdk/client-s3` peer floor to 3.919.0, the first release that
123
+ serializes destination conditions for `CopyObject`, and verify the real wire
124
+ headers in the packed minimum-peer consumer. Native AWS construction now
125
+ disables environment and shared-config endpoint URL overrides, while the public
126
+ capability helper derives custom-endpoint provenance from the actual SDK client
127
+ instead of a duplicated caller hint. Capability decoration is now single-use
128
+ per raw S3 adapter, preventing broader operations from surviving a later
129
+ narrower profile application.
130
+
131
+ Bind S3 provider authority to package-private raw-client and adapter-method
132
+ identity plus the exact surface snapshot installed by capability decoration.
133
+ Structurally S3-backed raw adapters are rejected until they pass through the
134
+ package helper, regardless of adapter name, proxying, or forged global symbols;
135
+ same-client aliases cannot replace their raw client, ordinary methods, policies,
136
+ or conditional operations. Unverified custom endpoints and noncanonical
137
+ S3-backed provider slugs are forced read-only, while an explicit branded profile
138
+ unlocks only its declared conditional operations. Endpoint and public-URL
139
+ provenance now follows the adapter actually produced by the provider loader,
140
+ including `configJson`.
141
+
142
+ Retain `publicBaseUrl` construction policy in the package-owned `s3()` helper
143
+ so omitted decorator hints cannot re-enable an expiring-download claim. Unknown
144
+ foreign S3 construction conservatively disables that claim. Validate the exact
145
+ physical adapter key without stripping leading slashes, and include configured
146
+ separators plus list/search-derived prefixes in the provider byte budget before
147
+ dispatch. Search uses files-sdk's own inferred glob-prefix and zero-result
148
+ semantics instead of duplicating its matcher logic. The innermost dispatch guard
149
+ repeats these checks after supported in-process plugins have transformed an
150
+ operation; adapters and plugins remain trusted code rather than a sandbox
151
+ boundary.
152
+
153
+ Derive signed-upload policy claims from the branded provider profile instead
154
+ of granting them to every S3-compatible endpoint. Native AWS proves content
155
+ type and POST size-range enforcement; Cloudflare R2 proves content type but not
156
+ POST form size ranges; omitted custom declarations normalize to false/false so
157
+ the gateway fails closed. Profile authority is backed by a package-private
158
+ WeakSet after deep freezing, so reflecting and copying the nominal brand symbol
159
+ cannot forge conformance evidence.
160
+
161
+ Treat the built-in AWS profile as an immutable ceiling for every SDK client
162
+ with native endpoint provenance, independent of mutable adapter display names.
163
+ Explicit profiles may narrow its operations, policy bits, and key limit but
164
+ cannot raise the 1,024-byte physical-key budget or add unsupported claims.
165
+
166
+ Enforce every requested signed-upload constraint at URL creation time.
167
+ Content-type-constrained PUT URLs now sign the `content-type` header; bounded
168
+ AWS uploads use exact POST MIME and byte-range conditions; unsupported profile
169
+ constraints and lower-only S3 ranges fail before signing. Bounded POST uploads
170
+ also reject physical keys ending in AWS's `${filename}` template so an exact
171
+ authorized key cannot be widened into a prefix policy.
172
+
173
+ ## 0.1.0-alpha.7
174
+
175
+ ### Minor Changes
176
+
177
+ - 842ff34: Add a backend-neutral `StorageWorkspace` capability and optional AI SDK 7 tool
178
+ adapter. Workspaces expose only canonical mount-relative paths, enforce
179
+ permissions and resource limits, hide provider coordinates and cursors, and use
180
+ atomic create/ETag mutation preconditions. S3 now advertises and implements the
181
+ conditional mutation primitives used by writable workspaces.
182
+
183
+ Harden local filesystem workspace reads and conditional mutations against
184
+ symlink aliases. Moves retain their create-only destination whenever source
185
+ deletion cannot be confirmed, avoiding data loss after provider or
186
+ post-operation hook ambiguity.
187
+
188
+ Fix cross-store sync so `destinationPrefix` is applied to uploaded keys as well
189
+ as pruning, keeping every mutation inside the selected destination scope.
190
+
191
+ ## 0.1.0-alpha.6
192
+
193
+ ### Minor Changes
194
+
195
+ - 5bb646e: Remove the product-specific artifact protocol, encryption codec, and Nest composition entry
196
+ points. `@nestm/storage` remains a generic storage library; applications should compose domain
197
+ protocols over its clients and provider drivers in their own packages.
198
+
199
+ ## 0.1.0-alpha.5
200
+
201
+ ### Minor Changes
202
+
203
+ - 227df5b: Add byte-compatible encrypted artifact storage through the
204
+ `@nestm/storage/artifacts` and `@nestm/storage/artifacts/nest` entry points.
205
+
206
+ The framework-neutral facade stores self-contained CAE1 AES-256-GCM envelopes,
207
+ binds ciphertext to its tenant, artifact, version, and path context, supports
208
+ local and AWS KMS key providers, and preserves authenticated content types,
209
+ bounded reads, versioned bundles, legacy migration reads, and encrypted generic
210
+ objects. The Nest entry point composes artifact and object adapters over two
211
+ named storage clients and clears cached data keys on shutdown.
212
+
213
+ The public protocol keeps the deployed filesystem and object-provider layouts,
214
+ reserves configurable ObjectStore namespaces from artifact ids, validates all
215
+ artifact/version paths, and bounds ZIP entry count and expansion before any
216
+ write. CAE1 now rejects unauthenticated empty content types and writer-side
217
+ oversized headers, KMS verifies the stored key id, DEK cache lifetimes are
218
+ capped at five minutes, filesystem `.ct` collisions are rejected, and sweepers
219
+ skip objects without trustworthy timestamps.
220
+
221
+ ## 0.1.0-alpha.4
222
+
223
+ ### Minor Changes
224
+
225
+ - 79ad3af: Add runtime provider selection and a package-owned filesystem driver.
226
+
227
+ `@nestm/storage/files-sdk/provider` builds a driver from a provider slug carried
228
+ as data — `createProviderStorageDriver({ provider: 's3' | 'gcs' | 'azure' | 'r2'
229
+ | 'fs' | … })` — importing that provider's adapter, and only that one, on
230
+ demand. A deployment now selects its store with an environment variable and
231
+ installs a single native SDK instead of the application hard-coding a driver per
232
+ backend. The same entry point exposes the provider catalog (`listStorageProviders`,
233
+ `getStorageProvider`, `listStorageProviderEnvVars`,
234
+ `listStorageProviderSecretEnvVars`, `isStorageProvider`) as pure data, so config
235
+ validation and health checks can read a provider's env contract without loading
236
+ an adapter. An unknown slug fails closed with `INVALID_ARGUMENT` before anything
237
+ is imported.
238
+
239
+ `@nestm/storage/files-sdk/fs` adds `createFsStorageDriver` for local filesystem
240
+ storage, mirroring the S3 factory. Its adapter reaches only `node:fs`, so it adds
241
+ no native SDK to an install.
242
+
243
+ `@nestm/storage/files-sdk/s3` additionally exports `withS3Capabilities`, which
244
+ applies S3's conditional-copy promotion and signed-policy declarations to an
245
+ adapter built by `s3(...)`. The provider factory uses it so the `s3` slug keeps
246
+ those capabilities without re-deriving `S3AdapterOptions` from flat config.
247
+ `EnhancedS3Adapter` is now `S3StorageAdapter`; the type was not previously
248
+ exported.
249
+
250
+ ## 0.1.0-alpha.3
251
+
252
+ ### Minor Changes
253
+
254
+ - b947634: Harden storage integration boundaries with cross-copy-safe `StorageError`
255
+ detection, a package-owned S3 driver factory, conditional staged-object
256
+ promotion, and a mandatory parsed key policy plus signed-transfer limits for
257
+ the optional HTTP gateway.
258
+
259
+ ### Patch Changes
260
+
261
+ - b947634: Map structurally branded `files-sdk` errors, including errors wrapped across
262
+ duplicate package copies, so missing objects retain the `NOT_FOUND` storage
263
+ error code.
264
+
265
+ ## 0.1.0-alpha.2
266
+
267
+ ### Minor Changes
268
+
269
+ - c4b54e7: Add a framework-neutral `@nestm/storage/core` entry point for the storage
270
+ client, driver contract, errors, operation types, and upload controls. NestJS
271
+ peers are now optional so non-Nest consumers can install and use the core API
272
+ without pulling in the framework.
273
+
3
274
  ## 0.1.0-alpha.1
4
275
 
5
276
  ### Minor Changes