@streetjs/storage 1.0.0 → 1.0.1

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 (225) hide show
  1. package/dist/drivers/local.d.ts +8 -0
  2. package/dist/drivers/local.d.ts.map +1 -1
  3. package/dist/drivers/local.js +18 -3
  4. package/dist/drivers/local.js.map +1 -1
  5. package/package.json +12 -6
  6. package/dist/tests/access.test.d.ts +0 -2
  7. package/dist/tests/access.test.d.ts.map +0 -1
  8. package/dist/tests/access.test.js +0 -270
  9. package/dist/tests/access.test.js.map +0 -1
  10. package/dist/tests/azure-driver.test.d.ts +0 -2
  11. package/dist/tests/azure-driver.test.d.ts.map +0 -1
  12. package/dist/tests/azure-driver.test.js +0 -183
  13. package/dist/tests/azure-driver.test.js.map +0 -1
  14. package/dist/tests/backblaze-driver.test.d.ts +0 -2
  15. package/dist/tests/backblaze-driver.test.d.ts.map +0 -1
  16. package/dist/tests/backblaze-driver.test.js +0 -185
  17. package/dist/tests/backblaze-driver.test.js.map +0 -1
  18. package/dist/tests/bridge-degradation.test.d.ts +0 -2
  19. package/dist/tests/bridge-degradation.test.d.ts.map +0 -1
  20. package/dist/tests/bridge-degradation.test.js +0 -138
  21. package/dist/tests/bridge-degradation.test.js.map +0 -1
  22. package/dist/tests/cli.test.d.ts +0 -2
  23. package/dist/tests/cli.test.d.ts.map +0 -1
  24. package/dist/tests/cli.test.js +0 -127
  25. package/dist/tests/cli.test.js.map +0 -1
  26. package/dist/tests/contract.d.ts +0 -131
  27. package/dist/tests/contract.d.ts.map +0 -1
  28. package/dist/tests/contract.js +0 -222
  29. package/dist/tests/contract.js.map +0 -1
  30. package/dist/tests/contract.test.d.ts +0 -2
  31. package/dist/tests/contract.test.d.ts.map +0 -1
  32. package/dist/tests/contract.test.js +0 -110
  33. package/dist/tests/contract.test.js.map +0 -1
  34. package/dist/tests/directory.test.d.ts +0 -2
  35. package/dist/tests/directory.test.d.ts.map +0 -1
  36. package/dist/tests/directory.test.js +0 -125
  37. package/dist/tests/directory.test.js.map +0 -1
  38. package/dist/tests/errors.test.d.ts +0 -2
  39. package/dist/tests/errors.test.d.ts.map +0 -1
  40. package/dist/tests/errors.test.js +0 -93
  41. package/dist/tests/errors.test.js.map +0 -1
  42. package/dist/tests/events-bridge.test.d.ts +0 -2
  43. package/dist/tests/events-bridge.test.d.ts.map +0 -1
  44. package/dist/tests/events-bridge.test.js +0 -228
  45. package/dist/tests/events-bridge.test.js.map +0 -1
  46. package/dist/tests/example-smoke.test.d.ts +0 -2
  47. package/dist/tests/example-smoke.test.d.ts.map +0 -1
  48. package/dist/tests/example-smoke.test.js +0 -34
  49. package/dist/tests/example-smoke.test.js.map +0 -1
  50. package/dist/tests/gcs-driver.test.d.ts +0 -2
  51. package/dist/tests/gcs-driver.test.d.ts.map +0 -1
  52. package/dist/tests/gcs-driver.test.js +0 -197
  53. package/dist/tests/gcs-driver.test.js.map +0 -1
  54. package/dist/tests/image.test.d.ts +0 -2
  55. package/dist/tests/image.test.d.ts.map +0 -1
  56. package/dist/tests/image.test.js +0 -102
  57. package/dist/tests/image.test.js.map +0 -1
  58. package/dist/tests/lifecycle.test.d.ts +0 -2
  59. package/dist/tests/lifecycle.test.d.ts.map +0 -1
  60. package/dist/tests/lifecycle.test.js +0 -171
  61. package/dist/tests/lifecycle.test.js.map +0 -1
  62. package/dist/tests/local-driver.test.d.ts +0 -2
  63. package/dist/tests/local-driver.test.d.ts.map +0 -1
  64. package/dist/tests/local-driver.test.js +0 -153
  65. package/dist/tests/local-driver.test.js.map +0 -1
  66. package/dist/tests/local-streaming.test.d.ts +0 -2
  67. package/dist/tests/local-streaming.test.d.ts.map +0 -1
  68. package/dist/tests/local-streaming.test.js +0 -121
  69. package/dist/tests/local-streaming.test.js.map +0 -1
  70. package/dist/tests/memory-driver.test.d.ts +0 -2
  71. package/dist/tests/memory-driver.test.d.ts.map +0 -1
  72. package/dist/tests/memory-driver.test.js +0 -180
  73. package/dist/tests/memory-driver.test.js.map +0 -1
  74. package/dist/tests/memory-streaming.test.d.ts +0 -2
  75. package/dist/tests/memory-streaming.test.d.ts.map +0 -1
  76. package/dist/tests/memory-streaming.test.js +0 -92
  77. package/dist/tests/memory-streaming.test.js.map +0 -1
  78. package/dist/tests/minio-driver.test.d.ts +0 -2
  79. package/dist/tests/minio-driver.test.d.ts.map +0 -1
  80. package/dist/tests/minio-driver.test.js +0 -146
  81. package/dist/tests/minio-driver.test.js.map +0 -1
  82. package/dist/tests/non-s3-integration.test.d.ts +0 -2
  83. package/dist/tests/non-s3-integration.test.d.ts.map +0 -1
  84. package/dist/tests/non-s3-integration.test.js +0 -201
  85. package/dist/tests/non-s3-integration.test.js.map +0 -1
  86. package/dist/tests/observability.registration.test.d.ts +0 -2
  87. package/dist/tests/observability.registration.test.d.ts.map +0 -1
  88. package/dist/tests/observability.registration.test.js +0 -103
  89. package/dist/tests/observability.registration.test.js.map +0 -1
  90. package/dist/tests/observability.test.d.ts +0 -2
  91. package/dist/tests/observability.test.d.ts.map +0 -1
  92. package/dist/tests/observability.test.js +0 -240
  93. package/dist/tests/observability.test.js.map +0 -1
  94. package/dist/tests/plugin.test.d.ts +0 -2
  95. package/dist/tests/plugin.test.d.ts.map +0 -1
  96. package/dist/tests/plugin.test.js +0 -112
  97. package/dist/tests/plugin.test.js.map +0 -1
  98. package/dist/tests/prop-concurrent.test.d.ts +0 -2
  99. package/dist/tests/prop-concurrent.test.d.ts.map +0 -1
  100. package/dist/tests/prop-concurrent.test.js +0 -59
  101. package/dist/tests/prop-concurrent.test.js.map +0 -1
  102. package/dist/tests/prop-copy.test.d.ts +0 -2
  103. package/dist/tests/prop-copy.test.d.ts.map +0 -1
  104. package/dist/tests/prop-copy.test.js +0 -63
  105. package/dist/tests/prop-copy.test.js.map +0 -1
  106. package/dist/tests/prop-delete.test.d.ts +0 -2
  107. package/dist/tests/prop-delete.test.d.ts.map +0 -1
  108. package/dist/tests/prop-delete.test.js +0 -35
  109. package/dist/tests/prop-delete.test.js.map +0 -1
  110. package/dist/tests/prop-directory.test.d.ts +0 -2
  111. package/dist/tests/prop-directory.test.d.ts.map +0 -1
  112. package/dist/tests/prop-directory.test.js +0 -118
  113. package/dist/tests/prop-directory.test.js.map +0 -1
  114. package/dist/tests/prop-driver-conformance.test.d.ts +0 -2
  115. package/dist/tests/prop-driver-conformance.test.d.ts.map +0 -1
  116. package/dist/tests/prop-driver-conformance.test.js +0 -110
  117. package/dist/tests/prop-driver-conformance.test.js.map +0 -1
  118. package/dist/tests/prop-driver-equivalence.test.d.ts +0 -2
  119. package/dist/tests/prop-driver-equivalence.test.d.ts.map +0 -1
  120. package/dist/tests/prop-driver-equivalence.test.js +0 -163
  121. package/dist/tests/prop-driver-equivalence.test.js.map +0 -1
  122. package/dist/tests/prop-lifecycle.test.d.ts +0 -2
  123. package/dist/tests/prop-lifecycle.test.d.ts.map +0 -1
  124. package/dist/tests/prop-lifecycle.test.js +0 -83
  125. package/dist/tests/prop-lifecycle.test.js.map +0 -1
  126. package/dist/tests/prop-list.test.d.ts +0 -2
  127. package/dist/tests/prop-list.test.d.ts.map +0 -1
  128. package/dist/tests/prop-list.test.js +0 -53
  129. package/dist/tests/prop-list.test.js.map +0 -1
  130. package/dist/tests/prop-metadata.test.d.ts +0 -2
  131. package/dist/tests/prop-metadata.test.d.ts.map +0 -1
  132. package/dist/tests/prop-metadata.test.js +0 -87
  133. package/dist/tests/prop-metadata.test.js.map +0 -1
  134. package/dist/tests/prop-move.test.d.ts +0 -2
  135. package/dist/tests/prop-move.test.d.ts.map +0 -1
  136. package/dist/tests/prop-move.test.js +0 -67
  137. package/dist/tests/prop-move.test.js.map +0 -1
  138. package/dist/tests/prop-multipart-abort.test.d.ts +0 -2
  139. package/dist/tests/prop-multipart-abort.test.d.ts.map +0 -1
  140. package/dist/tests/prop-multipart-abort.test.js +0 -48
  141. package/dist/tests/prop-multipart-abort.test.js.map +0 -1
  142. package/dist/tests/prop-multipart.test.d.ts +0 -2
  143. package/dist/tests/prop-multipart.test.d.ts.map +0 -1
  144. package/dist/tests/prop-multipart.test.js +0 -65
  145. package/dist/tests/prop-multipart.test.js.map +0 -1
  146. package/dist/tests/prop-resumable.test.d.ts +0 -2
  147. package/dist/tests/prop-resumable.test.d.ts.map +0 -1
  148. package/dist/tests/prop-resumable.test.js +0 -78
  149. package/dist/tests/prop-resumable.test.js.map +0 -1
  150. package/dist/tests/prop-search.test.d.ts +0 -2
  151. package/dist/tests/prop-search.test.d.ts.map +0 -1
  152. package/dist/tests/prop-search.test.js +0 -120
  153. package/dist/tests/prop-search.test.js.map +0 -1
  154. package/dist/tests/prop-signed-url.test.d.ts +0 -2
  155. package/dist/tests/prop-signed-url.test.d.ts.map +0 -1
  156. package/dist/tests/prop-signed-url.test.js +0 -74
  157. package/dist/tests/prop-signed-url.test.js.map +0 -1
  158. package/dist/tests/prop-streaming.test.d.ts +0 -2
  159. package/dist/tests/prop-streaming.test.d.ts.map +0 -1
  160. package/dist/tests/prop-streaming.test.js +0 -34
  161. package/dist/tests/prop-streaming.test.js.map +0 -1
  162. package/dist/tests/prop-upload-download.test.d.ts +0 -2
  163. package/dist/tests/prop-upload-download.test.d.ts.map +0 -1
  164. package/dist/tests/prop-upload-download.test.js +0 -30
  165. package/dist/tests/prop-upload-download.test.js.map +0 -1
  166. package/dist/tests/prop-validation.test.d.ts +0 -2
  167. package/dist/tests/prop-validation.test.d.ts.map +0 -1
  168. package/dist/tests/prop-validation.test.js +0 -50
  169. package/dist/tests/prop-validation.test.js.map +0 -1
  170. package/dist/tests/prop-versioning.test.d.ts +0 -2
  171. package/dist/tests/prop-versioning.test.d.ts.map +0 -1
  172. package/dist/tests/prop-versioning.test.js +0 -74
  173. package/dist/tests/prop-versioning.test.js.map +0 -1
  174. package/dist/tests/queue-bridge.test.d.ts +0 -2
  175. package/dist/tests/queue-bridge.test.d.ts.map +0 -1
  176. package/dist/tests/queue-bridge.test.js +0 -111
  177. package/dist/tests/queue-bridge.test.js.map +0 -1
  178. package/dist/tests/r2-driver.test.d.ts +0 -2
  179. package/dist/tests/r2-driver.test.d.ts.map +0 -1
  180. package/dist/tests/r2-driver.test.js +0 -143
  181. package/dist/tests/r2-driver.test.js.map +0 -1
  182. package/dist/tests/realtime-bridge.test.d.ts +0 -2
  183. package/dist/tests/realtime-bridge.test.d.ts.map +0 -1
  184. package/dist/tests/realtime-bridge.test.js +0 -106
  185. package/dist/tests/realtime-bridge.test.js.map +0 -1
  186. package/dist/tests/resumable.test.d.ts +0 -2
  187. package/dist/tests/resumable.test.d.ts.map +0 -1
  188. package/dist/tests/resumable.test.js +0 -104
  189. package/dist/tests/resumable.test.js.map +0 -1
  190. package/dist/tests/s3-base.test.d.ts +0 -2
  191. package/dist/tests/s3-base.test.d.ts.map +0 -1
  192. package/dist/tests/s3-base.test.js +0 -289
  193. package/dist/tests/s3-base.test.js.map +0 -1
  194. package/dist/tests/s3-integration.test.d.ts +0 -2
  195. package/dist/tests/s3-integration.test.d.ts.map +0 -1
  196. package/dist/tests/s3-integration.test.js +0 -270
  197. package/dist/tests/s3-integration.test.js.map +0 -1
  198. package/dist/tests/s3.test.d.ts +0 -2
  199. package/dist/tests/s3.test.d.ts.map +0 -1
  200. package/dist/tests/s3.test.js +0 -203
  201. package/dist/tests/s3.test.js.map +0 -1
  202. package/dist/tests/scaffold.test.d.ts +0 -2
  203. package/dist/tests/scaffold.test.d.ts.map +0 -1
  204. package/dist/tests/scaffold.test.js +0 -13
  205. package/dist/tests/scaffold.test.js.map +0 -1
  206. package/dist/tests/search.test.d.ts +0 -2
  207. package/dist/tests/search.test.d.ts.map +0 -1
  208. package/dist/tests/search.test.js +0 -106
  209. package/dist/tests/search.test.js.map +0 -1
  210. package/dist/tests/supabase-driver.test.d.ts +0 -2
  211. package/dist/tests/supabase-driver.test.d.ts.map +0 -1
  212. package/dist/tests/supabase-driver.test.js +0 -196
  213. package/dist/tests/supabase-driver.test.js.map +0 -1
  214. package/dist/tests/testing-utilities.test.d.ts +0 -2
  215. package/dist/tests/testing-utilities.test.d.ts.map +0 -1
  216. package/dist/tests/testing-utilities.test.js +0 -138
  217. package/dist/tests/testing-utilities.test.js.map +0 -1
  218. package/dist/tests/validation.test.d.ts +0 -2
  219. package/dist/tests/validation.test.d.ts.map +0 -1
  220. package/dist/tests/validation.test.js +0 -135
  221. package/dist/tests/validation.test.js.map +0 -1
  222. package/dist/tests/versioning.test.d.ts +0 -2
  223. package/dist/tests/versioning.test.d.ts.map +0 -1
  224. package/dist/tests/versioning.test.js +0 -128
  225. package/dist/tests/versioning.test.js.map +0 -1
@@ -1,270 +0,0 @@
1
- // Integration tests for the S3-compatible cloud drivers (task 28.6): Amazon S3,
2
- // Cloudflare R2, MinIO, and Backblaze B2. These are *live* provider tests that
3
- // talk to a real bucket, so they follow the "honest external skipping" policy
4
- // from Requirement 27 — they never fabricate provider success and never report a
5
- // skipped provider as passed.
6
- //
7
- // Behavior matrix (Requirements 27.2–27.5):
8
- //
9
- // • Credentials ABSENT → the test is declared with node:test's
10
- // test(name, { skip: reason }, ...) so the runner marks it SKIPPED (not
11
- // passed) and never executes any provider code. This is the normal CI case
12
- // here: with no credentials the file loads and every provider test skips
13
- // cleanly, so `node --test dist/tests/*.test.js` stays green. (27.3)
14
- //
15
- // • Credentials PRESENT → the test runs against the provider: it constructs the
16
- // driver from configuration and performs an upload/download/delete
17
- // round-trip, asserting the downloaded bytes equal the uploaded bytes. (27.2)
18
- //
19
- // • Credentials PRESENT but the run cannot proceed for another reason (for
20
- // example the optional provider SDK is not installed, or the client cannot
21
- // be constructed) → the running test calls t.skip(reason), which reports it
22
- // as skipped with a clear message rather than a failure: "passed with a
23
- // clear skip message". (27.4)
24
- //
25
- // • Runner MISCONFIGURED → when a provider's credentials are only *partially*
26
- // supplied (some required environment variables set, others missing) the
27
- // configuration is inconsistent. That is a misconfigured runner, so the
28
- // test FAILS and fails the build rather than silently skipping. (27.5)
29
- //
30
- // SDK isolation: this file imports no provider SDK and no driver module at import
31
- // time. The driver factories (which themselves resolve any optional SDK lazily)
32
- // are pulled in with a dynamic import() only when credentials are present, so the
33
- // module always loads even though none of the @aws-sdk / minio peers are
34
- // installed in this workspace.
35
- //
36
- // Requirements: 27.2, 27.3, 27.4, 27.5
37
- import test from "node:test";
38
- import assert from "node:assert/strict";
39
- /**
40
- * Read the first non-empty value among a list of candidate environment variable
41
- * names. Returns `undefined` when none are set to a non-empty string.
42
- */
43
- function readEnv(names) {
44
- for (const name of names) {
45
- const value = process.env[name];
46
- if (typeof value === "string" && value.trim() !== "") {
47
- return value;
48
- }
49
- }
50
- return undefined;
51
- }
52
- /**
53
- * Descriptors for every S3-compatible provider under test. Each declares the
54
- * required credential fields (with their accepted environment-variable names),
55
- * any optional fields, and an async `connect(values)` that builds a driver from
56
- * the resolved configuration by lazily importing its submodule.
57
- */
58
- const PROVIDERS = [
59
- {
60
- label: "S3",
61
- required: {
62
- bucket: ["STREETJS_S3_BUCKET"],
63
- region: ["STREETJS_S3_REGION", "AWS_REGION", "AWS_DEFAULT_REGION"],
64
- accessKeyId: ["STREETJS_S3_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID"],
65
- secretAccessKey: ["STREETJS_S3_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY"],
66
- },
67
- optional: {
68
- endpoint: ["STREETJS_S3_ENDPOINT"],
69
- forcePathStyle: ["STREETJS_S3_FORCE_PATH_STYLE"],
70
- },
71
- async connect(v) {
72
- const { createS3StorageDriverFromConfig } = await import("../drivers/s3.js");
73
- return createS3StorageDriverFromConfig({
74
- bucket: v.bucket,
75
- region: v.region,
76
- endpoint: v.endpoint,
77
- // Path-style addressing is required by S3-compatible gateways such as
78
- // MinIO (which do not support virtual-hosted-style bucket subdomains).
79
- // Opt-in via STREETJS_S3_FORCE_PATH_STYLE; unset preserves SDK defaults
80
- // (virtual-hosted-style) for real AWS S3.
81
- forcePathStyle: v.forcePathStyle !== undefined ? v.forcePathStyle !== "false" : undefined,
82
- credentials: {
83
- accessKeyId: v.accessKeyId,
84
- secretAccessKey: v.secretAccessKey,
85
- },
86
- });
87
- },
88
- },
89
- {
90
- label: "R2",
91
- required: {
92
- accountId: ["STREETJS_R2_ACCOUNT_ID", "R2_ACCOUNT_ID"],
93
- bucket: ["STREETJS_R2_BUCKET", "R2_BUCKET"],
94
- accessKeyId: ["STREETJS_R2_ACCESS_KEY_ID", "R2_ACCESS_KEY_ID"],
95
- secretAccessKey: ["STREETJS_R2_SECRET_ACCESS_KEY", "R2_SECRET_ACCESS_KEY"],
96
- },
97
- optional: {
98
- endpoint: ["STREETJS_R2_ENDPOINT", "R2_ENDPOINT"],
99
- },
100
- async connect(v) {
101
- const { connectCloudflareR2Driver } = await import("../drivers/r2.js");
102
- return connectCloudflareR2Driver({
103
- accountId: v.accountId,
104
- bucket: v.bucket,
105
- accessKeyId: v.accessKeyId,
106
- secretAccessKey: v.secretAccessKey,
107
- endpoint: v.endpoint,
108
- });
109
- },
110
- },
111
- {
112
- label: "MinIO",
113
- required: {
114
- endPoint: ["STREETJS_MINIO_ENDPOINT", "MINIO_ENDPOINT"],
115
- bucket: ["STREETJS_MINIO_BUCKET", "MINIO_BUCKET"],
116
- accessKey: ["STREETJS_MINIO_ACCESS_KEY", "MINIO_ACCESS_KEY", "MINIO_ROOT_USER"],
117
- secretKey: ["STREETJS_MINIO_SECRET_KEY", "MINIO_SECRET_KEY", "MINIO_ROOT_PASSWORD"],
118
- },
119
- optional: {
120
- port: ["STREETJS_MINIO_PORT", "MINIO_PORT"],
121
- useSSL: ["STREETJS_MINIO_USE_SSL", "MINIO_USE_SSL"],
122
- region: ["STREETJS_MINIO_REGION", "MINIO_REGION"],
123
- },
124
- async connect(v) {
125
- const { connectMinIODriver } = await import("../drivers/minio.js");
126
- return connectMinIODriver({
127
- endPoint: v.endPoint,
128
- bucket: v.bucket,
129
- accessKey: v.accessKey,
130
- secretKey: v.secretKey,
131
- port: v.port !== undefined ? Number(v.port) : undefined,
132
- useSSL: v.useSSL !== undefined ? v.useSSL !== "false" : undefined,
133
- region: v.region,
134
- });
135
- },
136
- },
137
- {
138
- label: "Backblaze",
139
- required: {
140
- endpoint: ["STREETJS_B2_ENDPOINT", "B2_ENDPOINT"],
141
- bucket: ["STREETJS_B2_BUCKET", "B2_BUCKET"],
142
- accessKeyId: ["STREETJS_B2_KEY_ID", "B2_KEY_ID", "B2_APPLICATION_KEY_ID"],
143
- secretAccessKey: ["STREETJS_B2_APPLICATION_KEY", "B2_APPLICATION_KEY"],
144
- },
145
- optional: {
146
- region: ["STREETJS_B2_REGION", "B2_REGION"],
147
- },
148
- async connect(v) {
149
- const { createBackblazeB2Driver } = await import("../drivers/backblaze.js");
150
- return createBackblazeB2Driver({
151
- endpoint: v.endpoint,
152
- bucket: v.bucket,
153
- region: v.region,
154
- credentials: {
155
- accessKeyId: v.accessKeyId,
156
- secretAccessKey: v.secretAccessKey,
157
- },
158
- });
159
- },
160
- },
161
- ];
162
- /**
163
- * Resolve a provider's configuration from the environment and classify the
164
- * result as one of:
165
- * - "absent" → none of the required fields are set
166
- * - "present" → every required field is set
167
- * - "misconfigured" → some (but not all) required fields are set
168
- *
169
- * Returns the classification, the resolved values (including optional fields),
170
- * and the human-readable list of accepted env-var names used in skip/fail
171
- * messages.
172
- */
173
- function classifyProvider(provider) {
174
- const values = {};
175
- const requiredNames = [];
176
- let resolvedCount = 0;
177
- const total = Object.keys(provider.required).length;
178
- for (const [field, names] of Object.entries(provider.required)) {
179
- requiredNames.push(names[0]);
180
- const value = readEnv(names);
181
- if (value !== undefined) {
182
- values[field] = value;
183
- resolvedCount += 1;
184
- }
185
- }
186
- for (const [field, names] of Object.entries(provider.optional ?? {})) {
187
- const value = readEnv(names);
188
- if (value !== undefined) {
189
- values[field] = value;
190
- }
191
- }
192
- let classification;
193
- if (resolvedCount === 0) {
194
- classification = "absent";
195
- }
196
- else if (resolvedCount === total) {
197
- classification = "present";
198
- }
199
- else {
200
- classification = "misconfigured";
201
- }
202
- return { classification, values, requiredNames, resolvedCount, total };
203
- }
204
- /**
205
- * Upload/download/delete round-trip asserting byte fidelity. Cleans up the test
206
- * object on a best-effort basis so live buckets are not left with test data.
207
- */
208
- async function runRoundTrip(driver) {
209
- const key = `streetjs-integration/${Date.now()}-${Math.random().toString(16).slice(2)}.bin`;
210
- const content = new TextEncoder().encode(`streetjs storage integration round-trip ${new Date().toISOString()}`);
211
- try {
212
- await driver.put(key, content, { contentType: "application/octet-stream" });
213
- const exists = await driver.exists(key);
214
- assert.equal(exists, true, "object must exist after put");
215
- const got = await driver.get(key);
216
- assert.equal(got.found, true, "object must be found after put");
217
- assert.deepEqual(got.bytes, content, "downloaded bytes must equal uploaded bytes");
218
- }
219
- finally {
220
- try {
221
- await driver.delete(key);
222
- }
223
- catch {
224
- // Best-effort cleanup; a delete failure must not mask the assertion result.
225
- }
226
- }
227
- }
228
- // ── Register one integration test per provider, honestly classified ────────────
229
- for (const provider of PROVIDERS) {
230
- const { classification, values, requiredNames } = classifyProvider(provider);
231
- const testName = `[integration] ${provider.label}: upload/download preserves bytes`;
232
- if (classification === "absent") {
233
- // Requirement 27.3 — no credentials: skip with a clear message. Declared via
234
- // the { skip } option so node:test marks it SKIPPED (never passed) and no
235
- // provider code runs.
236
- test(testName, {
237
- skip: `No ${provider.label} credentials present in the environment ` +
238
- `(set ${requiredNames.join(", ")} to run this integration test).`,
239
- }, () => { });
240
- continue;
241
- }
242
- if (classification === "misconfigured") {
243
- // Requirement 27.5 — partial credentials are a misconfigured runner: FAIL so
244
- // the build fails rather than silently skipping an inconsistent setup.
245
- test(testName, () => {
246
- assert.fail(`${provider.label} integration is misconfigured: some but not all required ` +
247
- `credentials are set. Provide all of [${requiredNames.join(", ")}] to run, ` +
248
- `or none to skip.`);
249
- });
250
- continue;
251
- }
252
- // Requirement 27.2 — credentials present: run against the provider.
253
- test(testName, async (t) => {
254
- let driver;
255
- try {
256
- driver = await provider.connect(values);
257
- }
258
- catch (error) {
259
- // Requirement 27.4 — present but cannot run for another reason (e.g. the
260
- // optional SDK is not installed, or the client cannot be constructed):
261
- // report passed-with-skip via t.skip rather than failing the build.
262
- const reason = error instanceof Error ? error.message : String(error);
263
- t.skip(`${provider.label} credentials are present but the driver could not be ` +
264
- `constructed, so the integration test cannot run: ${reason}`);
265
- return;
266
- }
267
- await runRoundTrip(driver);
268
- });
269
- }
270
- //# sourceMappingURL=s3-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"s3-integration.test.js","sourceRoot":"","sources":["../../src/tests/s3-integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=s3.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"s3.test.d.ts","sourceRoot":"","sources":["../../src/tests/s3.test.ts"],"names":[],"mappings":""}
@@ -1,203 +0,0 @@
1
- // Unit tests for the Amazon S3 provider submodule (task 28.2), exercised through
2
- // the built `dist/drivers/s3.js` entry that backs `@streetjs/storage/s3`.
3
- //
4
- // The submodule contributes only client wiring on top of the shared S3-style
5
- // base; its own responsibilities are:
6
- // - createS3StorageDriver wraps an injected S3ClientLike as a name:"s3" driver
7
- // and delegates the whole StorageDriver contract to the base
8
- // - createS3StorageDriver rejects a missing/invalid client with a descriptive
9
- // StorageConfigError (no SDK is ever loaded on the injected path)
10
- // - createS3StorageDriverFromConfig wraps a supplied client without loading any
11
- // SDK, and throws a descriptive StorageConfigError when it must build a
12
- // client but the optional @aws-sdk/client-s3 peer dependency is absent
13
- // - the shared driver contract-conformance suite passes against the wrapper
14
- //
15
- // A fake in-memory S3ClientLike stands in for the AWS SDK so the driver is
16
- // exercised with no external service and no SDK dependency.
17
- //
18
- // Requirements: 2.1, 2.3, 3.3
19
- import test from "node:test";
20
- import assert from "node:assert/strict";
21
- import { createS3StorageDriver, createS3StorageDriverFromConfig, } from "../drivers/s3.js";
22
- import { StorageConfigError } from "../errors.js";
23
- import { registerStorageDriverContractTests } from "./contract.js";
24
- const FIXED_NOW = 1_700_000_000_000;
25
- const fixedClock = () => FIXED_NOW;
26
- function bytes(str) {
27
- return new TextEncoder().encode(str);
28
- }
29
- /** A minimal in-memory S3ClientLike (with native multipart) standing in for the SDK. */
30
- function makeFakeClient() {
31
- const objects = new Map(); // key -> { body, contentType, metadata }
32
- const uploads = new Map(); // uploadId -> { key, contentType, metadata, parts: Map }
33
- let seed = 0;
34
- return {
35
- async putObject({ key, body, contentType, metadata }) {
36
- objects.set(key, {
37
- body: body.slice(),
38
- contentType,
39
- metadata: metadata ? { ...metadata } : undefined,
40
- });
41
- return { etag: `"${key}-etag"` };
42
- },
43
- async getObject({ key }) {
44
- const obj = objects.get(key);
45
- if (obj === undefined)
46
- return null;
47
- return {
48
- body: obj.body.slice(),
49
- contentType: obj.contentType,
50
- etag: `"${key}-etag"`,
51
- size: obj.body.byteLength,
52
- lastModified: FIXED_NOW,
53
- metadata: obj.metadata,
54
- };
55
- },
56
- async headObject({ key }) {
57
- const obj = objects.get(key);
58
- if (obj === undefined)
59
- return null;
60
- return {
61
- contentType: obj.contentType,
62
- etag: `"${key}-etag"`,
63
- size: obj.body.byteLength,
64
- lastModified: FIXED_NOW,
65
- metadata: obj.metadata,
66
- };
67
- },
68
- async deleteObject({ key }) {
69
- objects.delete(key);
70
- },
71
- async listObjects({ prefix }) {
72
- return [...objects.entries()]
73
- .filter(([key]) => key.startsWith(prefix))
74
- .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
75
- .map(([key, obj]) => ({ key, size: obj.body.byteLength, updatedAt: FIXED_NOW }));
76
- },
77
- async createMultipartUpload({ key, contentType, metadata }) {
78
- const uploadId = `upload-${(seed += 1)}`;
79
- uploads.set(uploadId, { key, contentType, metadata, parts: new Map() });
80
- return { uploadId };
81
- },
82
- async uploadPart({ uploadId, partNumber, body }) {
83
- uploads.get(uploadId).parts.set(partNumber, body.slice());
84
- return { etag: `"${uploadId}-${partNumber}"` };
85
- },
86
- async completeMultipartUpload({ uploadId, parts }) {
87
- const session = uploads.get(uploadId);
88
- const ordered = [...parts].sort((a, b) => a.partNumber - b.partNumber);
89
- const buffers = ordered.map((p) => Buffer.from(session.parts.get(p.partNumber)));
90
- objects.set(session.key, {
91
- body: new Uint8Array(Buffer.concat(buffers)),
92
- contentType: session.contentType,
93
- metadata: session.metadata,
94
- });
95
- uploads.delete(uploadId);
96
- return { etag: `"${session.key}-etag"` };
97
- },
98
- async abortMultipartUpload({ uploadId }) {
99
- uploads.delete(uploadId);
100
- },
101
- };
102
- }
103
- // ── createS3StorageDriver: injected client (no SDK) ─────────────────────────────
104
- test("createS3StorageDriver wraps an injected client as a name:s3 driver", () => {
105
- const driver = createS3StorageDriver(makeFakeClient(), { clock: fixedClock });
106
- assert.equal(driver.name, "s3");
107
- });
108
- test("createS3StorageDriver round-trips bytes and typed metadata via the base", async () => {
109
- const driver = createS3StorageDriver(makeFakeClient(), { clock: fixedClock });
110
- const content = bytes("amazon s3 content");
111
- const meta = await driver.put("docs/report.txt", content, {
112
- contentType: "text/plain",
113
- owner: "user-9",
114
- tenant: "tenant-z",
115
- accessLevel: "public",
116
- custom: { label: "q3" },
117
- });
118
- assert.equal(meta.key, "docs/report.txt");
119
- assert.equal(meta.size, content.byteLength);
120
- assert.match(meta.checksum, /^[0-9a-f]{64}$/);
121
- const result = await driver.get("docs/report.txt");
122
- assert.equal(result.found, true);
123
- assert.deepEqual(result.bytes, content);
124
- assert.equal(result.metadata.contentType, "text/plain");
125
- assert.equal(result.metadata.owner, "user-9");
126
- assert.equal(result.metadata.tenant, "tenant-z");
127
- assert.equal(result.metadata.accessLevel, "public");
128
- assert.deepEqual(result.metadata.custom, { label: "q3" });
129
- });
130
- test("createS3StorageDriver reports a missing key as found:false (not an error)", async () => {
131
- const driver = createS3StorageDriver(makeFakeClient(), { clock: fixedClock });
132
- const result = await driver.get("missing");
133
- assert.equal(result.found, false);
134
- });
135
- test("createS3StorageDriver wires native multipart from the injected client", async () => {
136
- const driver = createS3StorageDriver(makeFakeClient(), { clock: fixedClock });
137
- assert.notEqual(driver.multipart, undefined);
138
- assert.ok(driver.multipart);
139
- const uploadId = await driver.multipart.create("big/file.bin", { contentType: "text/plain" });
140
- const p1 = await driver.multipart.uploadPart(uploadId, 1, bytes("part-one-"));
141
- const p2 = await driver.multipart.uploadPart(uploadId, 2, bytes("part-two"));
142
- const meta = await driver.multipart.complete(uploadId, [p1, p2]);
143
- assert.equal(meta.key, "big/file.bin");
144
- const result = await driver.get("big/file.bin");
145
- assert.ok(result.found);
146
- assert.deepEqual(result.bytes, bytes("part-one-part-two"));
147
- });
148
- test("createS3StorageDriver delegates injected native capabilities", () => {
149
- const versioning = {
150
- snapshot: async () => null,
151
- list: async () => [],
152
- restore: async () => ({
153
- key: "",
154
- size: 0,
155
- contentType: "application/octet-stream",
156
- etag: "",
157
- checksum: "",
158
- accessLevel: "private",
159
- createdAt: 0,
160
- updatedAt: 0,
161
- custom: {},
162
- }),
163
- deleteVersion: async () => { },
164
- };
165
- const driver = createS3StorageDriver(makeFakeClient(), { capabilities: { versioning } });
166
- assert.equal(driver.versioning, versioning);
167
- });
168
- // ── createS3StorageDriver: invalid client ───────────────────────────────────────
169
- test("createS3StorageDriver throws StorageConfigError when no client is injected", () => {
170
- assert.throws(() => createS3StorageDriver(undefined), (error) => {
171
- assert.ok(error instanceof StorageConfigError);
172
- assert.equal(error.provider, "s3");
173
- return true;
174
- });
175
- });
176
- test("createS3StorageDriver throws StorageConfigError for a non-conforming client", () => {
177
- assert.throws(() => createS3StorageDriver({ putObject() { } }), (error) => error instanceof StorageConfigError && error.provider === "s3");
178
- });
179
- // ── createS3StorageDriverFromConfig ─────────────────────────────────────────────
180
- test("createS3StorageDriverFromConfig wraps a supplied client without loading any SDK", async () => {
181
- const driver = await createS3StorageDriverFromConfig({
182
- bucket: "my-bucket",
183
- client: makeFakeClient(),
184
- clock: fixedClock,
185
- });
186
- assert.equal(driver.name, "s3");
187
- const meta = await driver.put("k", bytes("v"), {});
188
- assert.equal(meta.key, "k");
189
- const got = await driver.get("k");
190
- assert.ok(got.found);
191
- assert.deepEqual(got.bytes, bytes("v"));
192
- });
193
- test("createS3StorageDriverFromConfig throws a descriptive StorageConfigError when the AWS SDK is absent", async () => {
194
- await assert.rejects(() => createS3StorageDriverFromConfig({ bucket: "my-bucket", region: "us-east-1" }), (error) => {
195
- assert.ok(error instanceof StorageConfigError, "must be a StorageConfigError");
196
- assert.equal(error.provider, "s3");
197
- assert.match(error.message, /@aws-sdk\/client-s3/);
198
- return true;
199
- });
200
- });
201
- // ── shared contract-conformance suite ───────────────────────────────────────────
202
- registerStorageDriverContractTests("s3", () => createS3StorageDriver(makeFakeClient(), { clock: fixedClock }), test);
203
- //# sourceMappingURL=s3.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"s3.test.js","sourceRoot":"","sources":["../../src/tests/s3.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=scaffold.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.test.d.ts","sourceRoot":"","sources":["../../src/tests/scaffold.test.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- // Placeholder scaffold test for @streetjs/storage.
2
- //
3
- // Verifies that the package builds and its compiled entry point can be imported
4
- // and exposes the expected placeholder surface. Uses the Node.js built-in test
5
- // runner (node:test) and is executed via `node --test dist/tests/*.test.js`.
6
- import test from "node:test";
7
- import assert from "node:assert/strict";
8
- import { STORAGE_FRAMEWORK_VERSION, STORAGE_PACKAGE_NAME } from "../index.js";
9
- test("built entry point exposes placeholder exports", () => {
10
- assert.equal(STORAGE_PACKAGE_NAME, "@streetjs/storage");
11
- assert.equal(STORAGE_FRAMEWORK_VERSION, "1.0.0");
12
- });
13
- //# sourceMappingURL=scaffold.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.test.js","sourceRoot":"","sources":["../../src/tests/scaffold.test.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAE7E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE9E,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=search.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../src/tests/search.test.ts"],"names":[],"mappings":""}