@nestm/storage 0.1.0-alpha.2 → 0.1.0-alpha.20

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