@streetjs/storage 1.0.0 → 1.0.2
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.
- package/dist/drivers/local.d.ts +8 -0
- package/dist/drivers/local.d.ts.map +1 -1
- package/dist/drivers/local.js +18 -3
- package/dist/drivers/local.js.map +1 -1
- package/dist/tests/contract.d.ts +19 -0
- package/dist/tests/contract.d.ts.map +1 -1
- package/dist/tests/contract.js +28 -0
- package/dist/tests/contract.js.map +1 -1
- package/package.json +10 -6
- package/dist/tests/access.test.d.ts +0 -2
- package/dist/tests/access.test.d.ts.map +0 -1
- package/dist/tests/access.test.js +0 -270
- package/dist/tests/access.test.js.map +0 -1
- package/dist/tests/azure-driver.test.d.ts +0 -2
- package/dist/tests/azure-driver.test.d.ts.map +0 -1
- package/dist/tests/azure-driver.test.js +0 -183
- package/dist/tests/azure-driver.test.js.map +0 -1
- package/dist/tests/backblaze-driver.test.d.ts +0 -2
- package/dist/tests/backblaze-driver.test.d.ts.map +0 -1
- package/dist/tests/backblaze-driver.test.js +0 -185
- package/dist/tests/backblaze-driver.test.js.map +0 -1
- package/dist/tests/bridge-degradation.test.d.ts +0 -2
- package/dist/tests/bridge-degradation.test.d.ts.map +0 -1
- package/dist/tests/bridge-degradation.test.js +0 -138
- package/dist/tests/bridge-degradation.test.js.map +0 -1
- package/dist/tests/cli.test.d.ts +0 -2
- package/dist/tests/cli.test.d.ts.map +0 -1
- package/dist/tests/cli.test.js +0 -127
- package/dist/tests/cli.test.js.map +0 -1
- package/dist/tests/contract.test.d.ts +0 -2
- package/dist/tests/contract.test.d.ts.map +0 -1
- package/dist/tests/contract.test.js +0 -110
- package/dist/tests/contract.test.js.map +0 -1
- package/dist/tests/directory.test.d.ts +0 -2
- package/dist/tests/directory.test.d.ts.map +0 -1
- package/dist/tests/directory.test.js +0 -125
- package/dist/tests/directory.test.js.map +0 -1
- package/dist/tests/errors.test.d.ts +0 -2
- package/dist/tests/errors.test.d.ts.map +0 -1
- package/dist/tests/errors.test.js +0 -93
- package/dist/tests/errors.test.js.map +0 -1
- package/dist/tests/events-bridge.test.d.ts +0 -2
- package/dist/tests/events-bridge.test.d.ts.map +0 -1
- package/dist/tests/events-bridge.test.js +0 -228
- package/dist/tests/events-bridge.test.js.map +0 -1
- package/dist/tests/example-smoke.test.d.ts +0 -2
- package/dist/tests/example-smoke.test.d.ts.map +0 -1
- package/dist/tests/example-smoke.test.js +0 -34
- package/dist/tests/example-smoke.test.js.map +0 -1
- package/dist/tests/gcs-driver.test.d.ts +0 -2
- package/dist/tests/gcs-driver.test.d.ts.map +0 -1
- package/dist/tests/gcs-driver.test.js +0 -197
- package/dist/tests/gcs-driver.test.js.map +0 -1
- package/dist/tests/image.test.d.ts +0 -2
- package/dist/tests/image.test.d.ts.map +0 -1
- package/dist/tests/image.test.js +0 -102
- package/dist/tests/image.test.js.map +0 -1
- package/dist/tests/lifecycle.test.d.ts +0 -2
- package/dist/tests/lifecycle.test.d.ts.map +0 -1
- package/dist/tests/lifecycle.test.js +0 -171
- package/dist/tests/lifecycle.test.js.map +0 -1
- package/dist/tests/local-driver.test.d.ts +0 -2
- package/dist/tests/local-driver.test.d.ts.map +0 -1
- package/dist/tests/local-driver.test.js +0 -153
- package/dist/tests/local-driver.test.js.map +0 -1
- package/dist/tests/local-streaming.test.d.ts +0 -2
- package/dist/tests/local-streaming.test.d.ts.map +0 -1
- package/dist/tests/local-streaming.test.js +0 -121
- package/dist/tests/local-streaming.test.js.map +0 -1
- package/dist/tests/memory-driver.test.d.ts +0 -2
- package/dist/tests/memory-driver.test.d.ts.map +0 -1
- package/dist/tests/memory-driver.test.js +0 -180
- package/dist/tests/memory-driver.test.js.map +0 -1
- package/dist/tests/memory-streaming.test.d.ts +0 -2
- package/dist/tests/memory-streaming.test.d.ts.map +0 -1
- package/dist/tests/memory-streaming.test.js +0 -92
- package/dist/tests/memory-streaming.test.js.map +0 -1
- package/dist/tests/minio-driver.test.d.ts +0 -2
- package/dist/tests/minio-driver.test.d.ts.map +0 -1
- package/dist/tests/minio-driver.test.js +0 -146
- package/dist/tests/minio-driver.test.js.map +0 -1
- package/dist/tests/non-s3-integration.test.d.ts +0 -2
- package/dist/tests/non-s3-integration.test.d.ts.map +0 -1
- package/dist/tests/non-s3-integration.test.js +0 -201
- package/dist/tests/non-s3-integration.test.js.map +0 -1
- package/dist/tests/observability.registration.test.d.ts +0 -2
- package/dist/tests/observability.registration.test.d.ts.map +0 -1
- package/dist/tests/observability.registration.test.js +0 -103
- package/dist/tests/observability.registration.test.js.map +0 -1
- package/dist/tests/observability.test.d.ts +0 -2
- package/dist/tests/observability.test.d.ts.map +0 -1
- package/dist/tests/observability.test.js +0 -240
- package/dist/tests/observability.test.js.map +0 -1
- package/dist/tests/plugin.test.d.ts +0 -2
- package/dist/tests/plugin.test.d.ts.map +0 -1
- package/dist/tests/plugin.test.js +0 -112
- package/dist/tests/plugin.test.js.map +0 -1
- package/dist/tests/prop-concurrent.test.d.ts +0 -2
- package/dist/tests/prop-concurrent.test.d.ts.map +0 -1
- package/dist/tests/prop-concurrent.test.js +0 -59
- package/dist/tests/prop-concurrent.test.js.map +0 -1
- package/dist/tests/prop-copy.test.d.ts +0 -2
- package/dist/tests/prop-copy.test.d.ts.map +0 -1
- package/dist/tests/prop-copy.test.js +0 -63
- package/dist/tests/prop-copy.test.js.map +0 -1
- package/dist/tests/prop-delete.test.d.ts +0 -2
- package/dist/tests/prop-delete.test.d.ts.map +0 -1
- package/dist/tests/prop-delete.test.js +0 -35
- package/dist/tests/prop-delete.test.js.map +0 -1
- package/dist/tests/prop-directory.test.d.ts +0 -2
- package/dist/tests/prop-directory.test.d.ts.map +0 -1
- package/dist/tests/prop-directory.test.js +0 -118
- package/dist/tests/prop-directory.test.js.map +0 -1
- package/dist/tests/prop-driver-conformance.test.d.ts +0 -2
- package/dist/tests/prop-driver-conformance.test.d.ts.map +0 -1
- package/dist/tests/prop-driver-conformance.test.js +0 -110
- package/dist/tests/prop-driver-conformance.test.js.map +0 -1
- package/dist/tests/prop-driver-equivalence.test.d.ts +0 -2
- package/dist/tests/prop-driver-equivalence.test.d.ts.map +0 -1
- package/dist/tests/prop-driver-equivalence.test.js +0 -163
- package/dist/tests/prop-driver-equivalence.test.js.map +0 -1
- package/dist/tests/prop-lifecycle.test.d.ts +0 -2
- package/dist/tests/prop-lifecycle.test.d.ts.map +0 -1
- package/dist/tests/prop-lifecycle.test.js +0 -83
- package/dist/tests/prop-lifecycle.test.js.map +0 -1
- package/dist/tests/prop-list.test.d.ts +0 -2
- package/dist/tests/prop-list.test.d.ts.map +0 -1
- package/dist/tests/prop-list.test.js +0 -53
- package/dist/tests/prop-list.test.js.map +0 -1
- package/dist/tests/prop-metadata.test.d.ts +0 -2
- package/dist/tests/prop-metadata.test.d.ts.map +0 -1
- package/dist/tests/prop-metadata.test.js +0 -87
- package/dist/tests/prop-metadata.test.js.map +0 -1
- package/dist/tests/prop-move.test.d.ts +0 -2
- package/dist/tests/prop-move.test.d.ts.map +0 -1
- package/dist/tests/prop-move.test.js +0 -67
- package/dist/tests/prop-move.test.js.map +0 -1
- package/dist/tests/prop-multipart-abort.test.d.ts +0 -2
- package/dist/tests/prop-multipart-abort.test.d.ts.map +0 -1
- package/dist/tests/prop-multipart-abort.test.js +0 -48
- package/dist/tests/prop-multipart-abort.test.js.map +0 -1
- package/dist/tests/prop-multipart.test.d.ts +0 -2
- package/dist/tests/prop-multipart.test.d.ts.map +0 -1
- package/dist/tests/prop-multipart.test.js +0 -65
- package/dist/tests/prop-multipart.test.js.map +0 -1
- package/dist/tests/prop-resumable.test.d.ts +0 -2
- package/dist/tests/prop-resumable.test.d.ts.map +0 -1
- package/dist/tests/prop-resumable.test.js +0 -78
- package/dist/tests/prop-resumable.test.js.map +0 -1
- package/dist/tests/prop-search.test.d.ts +0 -2
- package/dist/tests/prop-search.test.d.ts.map +0 -1
- package/dist/tests/prop-search.test.js +0 -120
- package/dist/tests/prop-search.test.js.map +0 -1
- package/dist/tests/prop-signed-url.test.d.ts +0 -2
- package/dist/tests/prop-signed-url.test.d.ts.map +0 -1
- package/dist/tests/prop-signed-url.test.js +0 -74
- package/dist/tests/prop-signed-url.test.js.map +0 -1
- package/dist/tests/prop-streaming.test.d.ts +0 -2
- package/dist/tests/prop-streaming.test.d.ts.map +0 -1
- package/dist/tests/prop-streaming.test.js +0 -34
- package/dist/tests/prop-streaming.test.js.map +0 -1
- package/dist/tests/prop-upload-download.test.d.ts +0 -2
- package/dist/tests/prop-upload-download.test.d.ts.map +0 -1
- package/dist/tests/prop-upload-download.test.js +0 -30
- package/dist/tests/prop-upload-download.test.js.map +0 -1
- package/dist/tests/prop-validation.test.d.ts +0 -2
- package/dist/tests/prop-validation.test.d.ts.map +0 -1
- package/dist/tests/prop-validation.test.js +0 -50
- package/dist/tests/prop-validation.test.js.map +0 -1
- package/dist/tests/prop-versioning.test.d.ts +0 -2
- package/dist/tests/prop-versioning.test.d.ts.map +0 -1
- package/dist/tests/prop-versioning.test.js +0 -74
- package/dist/tests/prop-versioning.test.js.map +0 -1
- package/dist/tests/queue-bridge.test.d.ts +0 -2
- package/dist/tests/queue-bridge.test.d.ts.map +0 -1
- package/dist/tests/queue-bridge.test.js +0 -111
- package/dist/tests/queue-bridge.test.js.map +0 -1
- package/dist/tests/r2-driver.test.d.ts +0 -2
- package/dist/tests/r2-driver.test.d.ts.map +0 -1
- package/dist/tests/r2-driver.test.js +0 -143
- package/dist/tests/r2-driver.test.js.map +0 -1
- package/dist/tests/realtime-bridge.test.d.ts +0 -2
- package/dist/tests/realtime-bridge.test.d.ts.map +0 -1
- package/dist/tests/realtime-bridge.test.js +0 -106
- package/dist/tests/realtime-bridge.test.js.map +0 -1
- package/dist/tests/resumable.test.d.ts +0 -2
- package/dist/tests/resumable.test.d.ts.map +0 -1
- package/dist/tests/resumable.test.js +0 -104
- package/dist/tests/resumable.test.js.map +0 -1
- package/dist/tests/s3-base.test.d.ts +0 -2
- package/dist/tests/s3-base.test.d.ts.map +0 -1
- package/dist/tests/s3-base.test.js +0 -289
- package/dist/tests/s3-base.test.js.map +0 -1
- package/dist/tests/s3-integration.test.d.ts +0 -2
- package/dist/tests/s3-integration.test.d.ts.map +0 -1
- package/dist/tests/s3-integration.test.js +0 -270
- package/dist/tests/s3-integration.test.js.map +0 -1
- package/dist/tests/s3.test.d.ts +0 -2
- package/dist/tests/s3.test.d.ts.map +0 -1
- package/dist/tests/s3.test.js +0 -203
- package/dist/tests/s3.test.js.map +0 -1
- package/dist/tests/scaffold.test.d.ts +0 -2
- package/dist/tests/scaffold.test.d.ts.map +0 -1
- package/dist/tests/scaffold.test.js +0 -13
- package/dist/tests/scaffold.test.js.map +0 -1
- package/dist/tests/search.test.d.ts +0 -2
- package/dist/tests/search.test.d.ts.map +0 -1
- package/dist/tests/search.test.js +0 -106
- package/dist/tests/search.test.js.map +0 -1
- package/dist/tests/supabase-driver.test.d.ts +0 -2
- package/dist/tests/supabase-driver.test.d.ts.map +0 -1
- package/dist/tests/supabase-driver.test.js +0 -196
- package/dist/tests/supabase-driver.test.js.map +0 -1
- package/dist/tests/testing-utilities.test.d.ts +0 -2
- package/dist/tests/testing-utilities.test.d.ts.map +0 -1
- package/dist/tests/testing-utilities.test.js +0 -138
- package/dist/tests/testing-utilities.test.js.map +0 -1
- package/dist/tests/validation.test.d.ts +0 -2
- package/dist/tests/validation.test.d.ts.map +0 -1
- package/dist/tests/validation.test.js +0 -135
- package/dist/tests/validation.test.js.map +0 -1
- package/dist/tests/versioning.test.d.ts +0 -2
- package/dist/tests/versioning.test.d.ts.map +0 -1
- package/dist/tests/versioning.test.js +0 -128
- package/dist/tests/versioning.test.js.map +0 -1
package/dist/drivers/local.d.ts
CHANGED
|
@@ -108,6 +108,14 @@ export declare class LocalStorageDriver implements StorageDriver {
|
|
|
108
108
|
* Throws {@link NotFoundError} when the key is missing (Requirement 5.5).
|
|
109
109
|
*/
|
|
110
110
|
getStream(key: string): Promise<NodeReadable>;
|
|
111
|
+
/**
|
|
112
|
+
* Resolve `key` to an absolute path guaranteed to stay within `this.root`.
|
|
113
|
+
* Rejects any key whose resolved path escapes the configured root (e.g. via
|
|
114
|
+
* `../` segments or an absolute path), which would otherwise let a caller
|
|
115
|
+
* read or write arbitrary filesystem locations reachable by the process
|
|
116
|
+
* (path traversal). Both `objectPath` and `metaPath` route through this.
|
|
117
|
+
*/
|
|
118
|
+
private resolveContained;
|
|
111
119
|
/** Absolute filesystem path to the object bytes for `key`. */
|
|
112
120
|
private objectPath;
|
|
113
121
|
/** Absolute filesystem path to the metadata sidecar for `key`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/drivers/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAQH,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7E,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAKD;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,WAAW;IAExB,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,OAAO,EAAE,yBAAyB;IAO9C;;;;;OAKG;IACG,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,qBAAqB,CAAC;IA2BjC;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiB5C,wEAAwE;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;;OAGG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAI9D;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgD7E;;;;;;;;;OASG;IACG,SAAS,CACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,qBAAqB,CAAC;IA+CjC;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAenD,8DAA8D;IAC9D,OAAO,CAAC,UAAU;IAIlB,kEAAkE;IAClE,OAAO,CAAC,QAAQ;IAIhB,4EAA4E;YAC9D,QAAQ;IAatB,gEAAgE;YAClD,cAAc;IAU5B;;;;OAIG;YACW,WAAW;CAoB1B"}
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/drivers/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAQH,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7E,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAKD;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,WAAW;IAExB,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,OAAO,EAAE,yBAAyB;IAO9C;;;;;OAKG;IACG,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,qBAAqB,CAAC;IA2BjC;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiB5C,wEAAwE;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;;OAGG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAI9D;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgD7E;;;;;;;;;OASG;IACG,SAAS,CACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,qBAAqB,CAAC;IA+CjC;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAenD;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IASxB,8DAA8D;IAC9D,OAAO,CAAC,UAAU;IAIlB,kEAAkE;IAClE,OAAO,CAAC,QAAQ;IAIhB,4EAA4E;YAC9D,QAAQ;IAatB,gEAAgE;YAClD,cAAc;IAU5B;;;;OAIG;YACW,WAAW;CAoB1B"}
|
package/dist/drivers/local.js
CHANGED
|
@@ -39,7 +39,7 @@ import * as fs from "node:fs/promises";
|
|
|
39
39
|
import * as path from "node:path";
|
|
40
40
|
import { pipeline } from "node:stream/promises";
|
|
41
41
|
import { systemClock } from "streetjs";
|
|
42
|
-
import { NotFoundError } from "../errors.js";
|
|
42
|
+
import { NotFoundError, ValidationError } from "../errors.js";
|
|
43
43
|
import { buildObjectMetadata } from "../metadata.js";
|
|
44
44
|
/** Suffix identifying the metadata sidecar file for an object. */
|
|
45
45
|
const META_SUFFIX = ".meta.json";
|
|
@@ -248,13 +248,28 @@ export class LocalStorageDriver {
|
|
|
248
248
|
return createReadStream(objectPath);
|
|
249
249
|
}
|
|
250
250
|
// ── Internal helpers ────────────────────────────────────────────────────────
|
|
251
|
+
/**
|
|
252
|
+
* Resolve `key` to an absolute path guaranteed to stay within `this.root`.
|
|
253
|
+
* Rejects any key whose resolved path escapes the configured root (e.g. via
|
|
254
|
+
* `../` segments or an absolute path), which would otherwise let a caller
|
|
255
|
+
* read or write arbitrary filesystem locations reachable by the process
|
|
256
|
+
* (path traversal). Both `objectPath` and `metaPath` route through this.
|
|
257
|
+
*/
|
|
258
|
+
resolveContained(key, suffix = "") {
|
|
259
|
+
const resolved = path.resolve(this.root, key + suffix);
|
|
260
|
+
const rootWithSep = this.root.endsWith(path.sep) ? this.root : this.root + path.sep;
|
|
261
|
+
if (resolved !== this.root && !resolved.startsWith(rootWithSep)) {
|
|
262
|
+
throw new ValidationError("key resolves outside the storage root (path traversal)", { key });
|
|
263
|
+
}
|
|
264
|
+
return resolved;
|
|
265
|
+
}
|
|
251
266
|
/** Absolute filesystem path to the object bytes for `key`. */
|
|
252
267
|
objectPath(key) {
|
|
253
|
-
return
|
|
268
|
+
return this.resolveContained(key);
|
|
254
269
|
}
|
|
255
270
|
/** Absolute filesystem path to the metadata sidecar for `key`. */
|
|
256
271
|
metaPath(key) {
|
|
257
|
-
return
|
|
272
|
+
return this.resolveContained(key, META_SUFFIX);
|
|
258
273
|
}
|
|
259
274
|
/** Read and parse the metadata sidecar for `key`, or `null` when absent. */
|
|
260
275
|
async readMeta(key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/drivers/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAc,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/drivers/local.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/contract.d.ts
CHANGED
|
@@ -43,6 +43,25 @@
|
|
|
43
43
|
* _Requirements: 2.1, 2.3, 2.4_
|
|
44
44
|
*/
|
|
45
45
|
import type { StorageDriver } from "../driver.js";
|
|
46
|
+
/**
|
|
47
|
+
* Report whether an optional provider SDK module specifier can be resolved in
|
|
48
|
+
* this process, without importing/evaluating it as a side effect.
|
|
49
|
+
*
|
|
50
|
+
* Several driver unit test suites (Supabase, GCS, Azure) assert that
|
|
51
|
+
* `connectXDriver` throws `StorageConfigError` specifically *because* the
|
|
52
|
+
* optional peer SDK is absent. That assertion's precondition — the SDK is
|
|
53
|
+
* unresolvable — holds by default, but Node module resolution is process-wide,
|
|
54
|
+
* not test-file-scoped: a live-integration test run that installs the SDKs (to
|
|
55
|
+
* exercise genuine round-trips; see non-s3-integration.test.ts) makes the SDK
|
|
56
|
+
* resolvable for every test file sharing that `node --test` process. Callers use
|
|
57
|
+
* this probe to honestly skip that specific guard test in that situation, rather
|
|
58
|
+
* than reporting a false failure, matching this package's established
|
|
59
|
+
* honest-skip convention (Requirement 27.3/27.4).
|
|
60
|
+
*
|
|
61
|
+
* @param {string} specifier The module specifier to probe (e.g. `"@supabase/supabase-js"`).
|
|
62
|
+
* @returns {Promise<boolean>} `true` when the specifier resolves to an installed module.
|
|
63
|
+
*/
|
|
64
|
+
export declare function isSdkResolvable(specifier: string): boolean;
|
|
46
65
|
/**
|
|
47
66
|
* A single named conformance check. {@link run} performs the check against the
|
|
48
67
|
* supplied driver and throws (via `node:assert`) when the driver violates the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/tests/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;AAmEnF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,aAAa,EAuE/D,CAAC;AAIF,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,UAAU,EAClB,MAAM,GAAE,SAAS,aAAa,EAAgC,GAC7D,IAAI,CAON"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/tests/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO1D;AAID;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;AAmEnF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,aAAa,EAuE/D,CAAC;AAIF,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,UAAU,EAClB,MAAM,GAAE,SAAS,aAAa,EAAgC,GAC7D,IAAI,CAON"}
|
package/dist/tests/contract.js
CHANGED
|
@@ -44,6 +44,34 @@
|
|
|
44
44
|
*/
|
|
45
45
|
import assert from "node:assert/strict";
|
|
46
46
|
import { STORAGE_METADATA_FIELDS } from "../metadata.js";
|
|
47
|
+
// ── Optional-SDK resolvability probe ──────────────────────────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* Report whether an optional provider SDK module specifier can be resolved in
|
|
50
|
+
* this process, without importing/evaluating it as a side effect.
|
|
51
|
+
*
|
|
52
|
+
* Several driver unit test suites (Supabase, GCS, Azure) assert that
|
|
53
|
+
* `connectXDriver` throws `StorageConfigError` specifically *because* the
|
|
54
|
+
* optional peer SDK is absent. That assertion's precondition — the SDK is
|
|
55
|
+
* unresolvable — holds by default, but Node module resolution is process-wide,
|
|
56
|
+
* not test-file-scoped: a live-integration test run that installs the SDKs (to
|
|
57
|
+
* exercise genuine round-trips; see non-s3-integration.test.ts) makes the SDK
|
|
58
|
+
* resolvable for every test file sharing that `node --test` process. Callers use
|
|
59
|
+
* this probe to honestly skip that specific guard test in that situation, rather
|
|
60
|
+
* than reporting a false failure, matching this package's established
|
|
61
|
+
* honest-skip convention (Requirement 27.3/27.4).
|
|
62
|
+
*
|
|
63
|
+
* @param {string} specifier The module specifier to probe (e.g. `"@supabase/supabase-js"`).
|
|
64
|
+
* @returns {Promise<boolean>} `true` when the specifier resolves to an installed module.
|
|
65
|
+
*/
|
|
66
|
+
export function isSdkResolvable(specifier) {
|
|
67
|
+
try {
|
|
68
|
+
import.meta.resolve(specifier);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
47
75
|
// ── Test fixtures ─────────────────────────────────────────────────────────────
|
|
48
76
|
/** Encode a UTF-8 string into a Uint8Array for storage. */
|
|
49
77
|
function bytesOf(str) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/tests/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAGxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/tests/contract.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streetjs/storage",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "StreetJS unified storage framework: a strongly-typed, plugin-first, driver-based object storage layer with zero-dependency in-memory and filesystem drivers, streaming, validation, metadata, multipart, resumable uploads, signed URLs, versioning, lifecycle, access control, and optional cloud provider integrations (S3, R2, Supabase, GCS, Azure, MinIO, Backblaze) isolated behind optional submodules.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -48,6 +48,10 @@
|
|
|
48
48
|
"dist/**/*.js.map",
|
|
49
49
|
"dist/**/*.d.ts",
|
|
50
50
|
"dist/**/*.d.ts.map",
|
|
51
|
+
"!dist/**/*.test.js",
|
|
52
|
+
"!dist/**/*.test.js.map",
|
|
53
|
+
"!dist/**/*.test.d.ts",
|
|
54
|
+
"!dist/**/*.test.d.ts.map",
|
|
51
55
|
"README.md",
|
|
52
56
|
"CHANGELOG.md",
|
|
53
57
|
"LICENSE"
|
|
@@ -92,18 +96,18 @@
|
|
|
92
96
|
"streetjs": "^1.0.25"
|
|
93
97
|
},
|
|
94
98
|
"devDependencies": {
|
|
95
|
-
"@types/node": "^
|
|
99
|
+
"@types/node": "^26.1.0",
|
|
96
100
|
"fast-check": "^4.8.0",
|
|
97
101
|
"typescript": "^6.0.3"
|
|
98
102
|
},
|
|
99
103
|
"peerDependencies": {
|
|
100
|
-
"typescript": ">=5.0.0",
|
|
101
104
|
"@aws-sdk/client-s3": ">=3.0.0",
|
|
102
105
|
"@aws-sdk/s3-request-presigner": ">=3.0.0",
|
|
103
|
-
"@supabase/supabase-js": ">=2.0.0",
|
|
104
|
-
"@google-cloud/storage": ">=7.0.0",
|
|
105
106
|
"@azure/storage-blob": ">=12.0.0",
|
|
106
|
-
"
|
|
107
|
+
"@google-cloud/storage": ">=7.0.0",
|
|
108
|
+
"@supabase/supabase-js": ">=2.0.0",
|
|
109
|
+
"minio": ">=8.0.0",
|
|
110
|
+
"typescript": ">=5.0.0"
|
|
107
111
|
},
|
|
108
112
|
"peerDependenciesMeta": {
|
|
109
113
|
"typescript": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.test.d.ts","sourceRoot":"","sources":["../../src/tests/access.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
// Unit tests for the provider-agnostic access controller of @streetjs/storage.
|
|
2
|
-
//
|
|
3
|
-
// Covers the AccessController decision rules directly (permissive default,
|
|
4
|
-
// public-read allowance, bridge-governed deny/permit for every access level)
|
|
5
|
-
// and the facade wiring: with a configured `config.auth` bridge, a denied
|
|
6
|
-
// operation throws an AuthorizationError and performs no persistence/read;
|
|
7
|
-
// with NO bridge configured the facade stays fully permissive (Requirements
|
|
8
|
-
// 11.1, 11.2, 11.3, 11.4).
|
|
9
|
-
//
|
|
10
|
-
// Uses the Node.js built-in test runner (node:test), executed via
|
|
11
|
-
// `node --test dist/tests/*.test.js`.
|
|
12
|
-
//
|
|
13
|
-
// Requirements: 11.1, 11.2, 11.3, 11.4
|
|
14
|
-
import test from "node:test";
|
|
15
|
-
import assert from "node:assert/strict";
|
|
16
|
-
import { AccessController } from "../access.js";
|
|
17
|
-
import { createStorage } from "../facade.js";
|
|
18
|
-
import { AuthorizationError } from "../errors.js";
|
|
19
|
-
// A tiny structural AuthLike bridge whose `can` is driven by an injected fn.
|
|
20
|
-
function makeAuth(decision) {
|
|
21
|
-
const calls = [];
|
|
22
|
-
return {
|
|
23
|
-
calls,
|
|
24
|
-
can(context) {
|
|
25
|
-
calls.push(context);
|
|
26
|
-
return typeof decision === "function" ? decision(context) : decision;
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
// ── Controller-level tests ────────────────────────────────────────────────────
|
|
31
|
-
test("controller with no auth bridge is permissive and not enforced", async () => {
|
|
32
|
-
const access = new AccessController();
|
|
33
|
-
assert.equal(access.enforced, false);
|
|
34
|
-
// Even a normally-restricted level is permitted when nothing is configured.
|
|
35
|
-
await access.authorize({ key: "k", operation: "write", accessLevel: "private" });
|
|
36
|
-
await access.authorize({ key: "k", operation: "read", accessLevel: "role-based" });
|
|
37
|
-
});
|
|
38
|
-
test("controller reports enforced when an auth bridge is configured", () => {
|
|
39
|
-
const access = new AccessController({ auth: makeAuth(true) });
|
|
40
|
-
assert.equal(access.enforced, true);
|
|
41
|
-
});
|
|
42
|
-
test("controller supports every access level and denies when the bridge says false", async () => {
|
|
43
|
-
const levels = ["public", "private", "signed", "authenticated", "role-based", "tenant-aware"];
|
|
44
|
-
for (const accessLevel of levels) {
|
|
45
|
-
const access = new AccessController({ auth: makeAuth(false) });
|
|
46
|
-
// A write is denied for every level when the bridge returns false (11.1/11.3).
|
|
47
|
-
await assert.rejects(() => access.authorize({ key: "k", operation: "write", accessLevel }), (err) => err instanceof AuthorizationError && err.accessLevel === accessLevel);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
test("controller permits when the bridge returns true", async () => {
|
|
51
|
-
const auth = makeAuth(true);
|
|
52
|
-
const access = new AccessController({ auth });
|
|
53
|
-
await access.authorize({
|
|
54
|
-
key: "docs/a.txt",
|
|
55
|
-
operation: "read",
|
|
56
|
-
accessLevel: "authenticated",
|
|
57
|
-
owner: "alice",
|
|
58
|
-
tenant: "acme",
|
|
59
|
-
});
|
|
60
|
-
// The full context is forwarded to the bridge (11.2).
|
|
61
|
-
assert.deepEqual(auth.calls[0], {
|
|
62
|
-
key: "docs/a.txt",
|
|
63
|
-
operation: "read",
|
|
64
|
-
accessLevel: "authenticated",
|
|
65
|
-
owner: "alice",
|
|
66
|
-
tenant: "acme",
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
test("public reads are permitted without authentication (bridge returns false)", async () => {
|
|
70
|
-
// Even when the bridge denies by default, a public READ is still allowed
|
|
71
|
-
// unless the bridge is treating public as the blocking factor. Here the
|
|
72
|
-
// bridge only blocks writes; public reads pass (Requirement 11.4).
|
|
73
|
-
const access = new AccessController({
|
|
74
|
-
auth: makeAuth((ctx) => ctx.operation !== "write"),
|
|
75
|
-
});
|
|
76
|
-
await access.authorize({ key: "p", operation: "read", accessLevel: "public" });
|
|
77
|
-
});
|
|
78
|
-
test("public reads can still be blocked by a configured factor", async () => {
|
|
79
|
-
// A bridge that explicitly returns false blocks even a public read
|
|
80
|
-
// ("unless another configured factor blocks", Requirement 11.4).
|
|
81
|
-
const access = new AccessController({ auth: makeAuth(false) });
|
|
82
|
-
await assert.rejects(() => access.authorize({ key: "p", operation: "read", accessLevel: "public" }), (err) => err instanceof AuthorizationError);
|
|
83
|
-
});
|
|
84
|
-
test("controller awaits an async bridge decision", async () => {
|
|
85
|
-
const access = new AccessController({ auth: makeAuth(async () => false) });
|
|
86
|
-
await assert.rejects(() => access.authorize({ key: "k", operation: "read", accessLevel: "private" }), (err) => err instanceof AuthorizationError);
|
|
87
|
-
});
|
|
88
|
-
// ── Facade wiring tests ─────────────────────────────────────────────────────
|
|
89
|
-
test("facade stays permissive when no auth bridge is configured", async () => {
|
|
90
|
-
const storage = createStorage({ provider: "memory" });
|
|
91
|
-
const meta = await storage.put("a.txt", "hello", { accessLevel: "private" });
|
|
92
|
-
assert.equal(meta.key, "a.txt");
|
|
93
|
-
const got = await storage.get("a.txt");
|
|
94
|
-
assert.equal(got.found, true);
|
|
95
|
-
await storage.delete("a.txt");
|
|
96
|
-
assert.equal(await storage.exists("a.txt"), false);
|
|
97
|
-
});
|
|
98
|
-
test("facade put denial throws AuthorizationError and persists nothing", async () => {
|
|
99
|
-
const storage = createStorage({
|
|
100
|
-
provider: "memory",
|
|
101
|
-
auth: makeAuth((ctx) => ctx.operation !== "write"),
|
|
102
|
-
});
|
|
103
|
-
await assert.rejects(() => storage.put("secret.txt", "top secret", { accessLevel: "private" }), (err) => err instanceof AuthorizationError && err.operation === "write");
|
|
104
|
-
// Nothing was written.
|
|
105
|
-
assert.equal(await storage.exists("secret.txt"), false);
|
|
106
|
-
});
|
|
107
|
-
test("facade get denial throws AuthorizationError and returns no bytes", async () => {
|
|
108
|
-
// The bridge permits the initial write but denies reads.
|
|
109
|
-
let allowRead = true;
|
|
110
|
-
const storage = createStorage({
|
|
111
|
-
provider: "memory",
|
|
112
|
-
auth: makeAuth((ctx) => (ctx.operation === "read" ? allowRead : true)),
|
|
113
|
-
});
|
|
114
|
-
await storage.put("doc.txt", "content", { accessLevel: "authenticated" });
|
|
115
|
-
allowRead = false;
|
|
116
|
-
await assert.rejects(() => storage.get("doc.txt"), (err) => err instanceof AuthorizationError && err.operation === "read");
|
|
117
|
-
});
|
|
118
|
-
test("facade get of a public object is permitted without authentication", async () => {
|
|
119
|
-
// The bridge permits the seeding write and any public read, but denies every
|
|
120
|
-
// non-public read. A public object must remain readable (Requirement 11.4).
|
|
121
|
-
const storage = createStorage({
|
|
122
|
-
provider: "memory",
|
|
123
|
-
auth: makeAuth((ctx) => ctx.operation === "write" || ctx.accessLevel === "public"),
|
|
124
|
-
});
|
|
125
|
-
await storage.put("pub.txt", "hello", { accessLevel: "public" });
|
|
126
|
-
const got = await storage.get("pub.txt");
|
|
127
|
-
assert.equal(got.found, true);
|
|
128
|
-
assert.equal(new TextDecoder().decode(got.bytes), "hello");
|
|
129
|
-
});
|
|
130
|
-
test("facade delete denial throws AuthorizationError and keeps the object", async () => {
|
|
131
|
-
let allowDelete = true;
|
|
132
|
-
const storage = createStorage({
|
|
133
|
-
provider: "memory",
|
|
134
|
-
auth: makeAuth((ctx) => (ctx.operation === "delete" ? allowDelete : true)),
|
|
135
|
-
});
|
|
136
|
-
await storage.put("keep.txt", "content", { accessLevel: "private" });
|
|
137
|
-
allowDelete = false;
|
|
138
|
-
await assert.rejects(() => storage.delete("keep.txt"), (err) => err instanceof AuthorizationError && err.operation === "delete");
|
|
139
|
-
assert.equal(await storage.exists("keep.txt"), true);
|
|
140
|
-
});
|
|
141
|
-
// ── Task 16.2: exhaustive per-level allow/deny + auth-bridge integration ─────
|
|
142
|
-
//
|
|
143
|
-
// The cases above prove the permissive default, the public-read allowance, and
|
|
144
|
-
// a single deny path per level (write). The block below rounds out the access
|
|
145
|
-
// decision matrix required by this task: an explicit ALLOW *and* an explicit
|
|
146
|
-
// DENY for EACH access level, across read/write/delete, plus context-driven
|
|
147
|
-
// role-based and tenant-aware decisions and an async bridge that permits.
|
|
148
|
-
//
|
|
149
|
-
// Requirements: 11.1, 11.3, 11.4
|
|
150
|
-
const ALL_LEVELS = [
|
|
151
|
-
"public",
|
|
152
|
-
"private",
|
|
153
|
-
"signed",
|
|
154
|
-
"authenticated",
|
|
155
|
-
"role-based",
|
|
156
|
-
"tenant-aware",
|
|
157
|
-
];
|
|
158
|
-
const ALL_OPERATIONS = ["read", "write", "delete"];
|
|
159
|
-
test("controller permits every access level across every operation when the bridge allows", async () => {
|
|
160
|
-
for (const accessLevel of ALL_LEVELS) {
|
|
161
|
-
for (const operation of ALL_OPERATIONS) {
|
|
162
|
-
const auth = makeAuth(true);
|
|
163
|
-
const access = new AccessController({ auth });
|
|
164
|
-
// Should resolve without throwing for allow (11.1).
|
|
165
|
-
await access.authorize({ key: `k/${accessLevel}`, operation, accessLevel });
|
|
166
|
-
// The bridge was consulted with the exact context (11.2 wiring).
|
|
167
|
-
assert.deepEqual(auth.calls.at(-1), {
|
|
168
|
-
key: `k/${accessLevel}`,
|
|
169
|
-
operation,
|
|
170
|
-
accessLevel,
|
|
171
|
-
owner: undefined,
|
|
172
|
-
tenant: undefined,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
test("controller denies every access level across write/delete when the bridge blocks", async () => {
|
|
178
|
-
// Read is validated separately below because `public` reads have a distinct
|
|
179
|
-
// rule; here we cover the uniformly-denied write and delete operations for
|
|
180
|
-
// EACH level (11.3).
|
|
181
|
-
for (const accessLevel of ALL_LEVELS) {
|
|
182
|
-
for (const operation of ["write", "delete"]) {
|
|
183
|
-
const access = new AccessController({ auth: makeAuth(false) });
|
|
184
|
-
await assert.rejects(() => access.authorize({ key: "k", operation, accessLevel }), (err) => err instanceof AuthorizationError &&
|
|
185
|
-
err.accessLevel === accessLevel &&
|
|
186
|
-
err.operation === operation);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
test("controller denies non-public reads for every restricted level when the bridge blocks", async () => {
|
|
191
|
-
// A `read` is denied for every NON-public level when the bridge returns false
|
|
192
|
-
// (public reads are covered by the dedicated 11.4 cases above).
|
|
193
|
-
for (const accessLevel of ALL_LEVELS.filter((l) => l !== "public")) {
|
|
194
|
-
const access = new AccessController({ auth: makeAuth(false) });
|
|
195
|
-
await assert.rejects(() => access.authorize({ key: "k", operation: "read", accessLevel }), (err) => err instanceof AuthorizationError && err.accessLevel === accessLevel);
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
test("signed access level allows and denies strictly per the bridge decision", async () => {
|
|
199
|
-
const allow = new AccessController({ auth: makeAuth(true) });
|
|
200
|
-
await allow.authorize({ key: "s", operation: "read", accessLevel: "signed" });
|
|
201
|
-
const deny = new AccessController({ auth: makeAuth(false) });
|
|
202
|
-
await assert.rejects(() => deny.authorize({ key: "s", operation: "read", accessLevel: "signed" }), (err) => err instanceof AuthorizationError && err.accessLevel === "signed");
|
|
203
|
-
});
|
|
204
|
-
test("authenticated access level allows and denies strictly per the bridge decision", async () => {
|
|
205
|
-
const allow = new AccessController({ auth: makeAuth(true) });
|
|
206
|
-
await allow.authorize({ key: "a", operation: "write", accessLevel: "authenticated" });
|
|
207
|
-
const deny = new AccessController({ auth: makeAuth(false) });
|
|
208
|
-
await assert.rejects(() => deny.authorize({ key: "a", operation: "write", accessLevel: "authenticated" }), (err) => err instanceof AuthorizationError && err.accessLevel === "authenticated");
|
|
209
|
-
});
|
|
210
|
-
test("role-based decisions key on the bridge's view of the context", async () => {
|
|
211
|
-
// A structural bridge modelling roles: only the owner "admin" may write a
|
|
212
|
-
// role-based object; everyone else is denied. This exercises the bridge
|
|
213
|
-
// integration for role-based access (11.1/11.2/11.3).
|
|
214
|
-
const roleBridge = makeAuth((ctx) => ctx.owner === "admin");
|
|
215
|
-
const access = new AccessController({ auth: roleBridge });
|
|
216
|
-
await access.authorize({
|
|
217
|
-
key: "r",
|
|
218
|
-
operation: "write",
|
|
219
|
-
accessLevel: "role-based",
|
|
220
|
-
owner: "admin",
|
|
221
|
-
});
|
|
222
|
-
await assert.rejects(() => access.authorize({
|
|
223
|
-
key: "r",
|
|
224
|
-
operation: "write",
|
|
225
|
-
accessLevel: "role-based",
|
|
226
|
-
owner: "guest",
|
|
227
|
-
}), (err) => err instanceof AuthorizationError && err.accessLevel === "role-based");
|
|
228
|
-
});
|
|
229
|
-
test("tenant-aware decisions isolate access to the matching tenant", async () => {
|
|
230
|
-
// A structural bridge modelling tenant isolation: access is granted only when
|
|
231
|
-
// the context tenant matches the bridge's expected tenant (11.1/11.2/11.3).
|
|
232
|
-
const expectedTenant = "acme";
|
|
233
|
-
const tenantBridge = makeAuth((ctx) => ctx.tenant === expectedTenant);
|
|
234
|
-
const access = new AccessController({ auth: tenantBridge });
|
|
235
|
-
await access.authorize({
|
|
236
|
-
key: "t",
|
|
237
|
-
operation: "read",
|
|
238
|
-
accessLevel: "tenant-aware",
|
|
239
|
-
tenant: "acme",
|
|
240
|
-
});
|
|
241
|
-
await assert.rejects(() => access.authorize({
|
|
242
|
-
key: "t",
|
|
243
|
-
operation: "read",
|
|
244
|
-
accessLevel: "tenant-aware",
|
|
245
|
-
tenant: "other-corp",
|
|
246
|
-
}), (err) => err instanceof AuthorizationError && err.accessLevel === "tenant-aware");
|
|
247
|
-
});
|
|
248
|
-
test("controller permits when an async bridge resolves true", async () => {
|
|
249
|
-
// Complements the existing async-deny case: an async bridge that resolves
|
|
250
|
-
// true must be awaited and permit the operation.
|
|
251
|
-
const access = new AccessController({ auth: makeAuth(async () => true) });
|
|
252
|
-
await access.authorize({ key: "k", operation: "write", accessLevel: "private" });
|
|
253
|
-
});
|
|
254
|
-
test("private access level allows and denies strictly per the bridge decision", async () => {
|
|
255
|
-
const allow = new AccessController({ auth: makeAuth(true) });
|
|
256
|
-
await allow.authorize({ key: "pv", operation: "delete", accessLevel: "private" });
|
|
257
|
-
const deny = new AccessController({ auth: makeAuth(false) });
|
|
258
|
-
await assert.rejects(() => deny.authorize({ key: "pv", operation: "delete", accessLevel: "private" }), (err) => err instanceof AuthorizationError && err.accessLevel === "private");
|
|
259
|
-
});
|
|
260
|
-
test("facade put of a role-based object is denied for a non-owner and persists nothing", async () => {
|
|
261
|
-
// End-to-end auth-bridge integration through the facade for a role-based
|
|
262
|
-
// level: a non-admin writer is denied and no object is persisted (11.3).
|
|
263
|
-
const storage = createStorage({
|
|
264
|
-
provider: "memory",
|
|
265
|
-
auth: makeAuth((ctx) => ctx.owner === "admin"),
|
|
266
|
-
});
|
|
267
|
-
await assert.rejects(() => storage.put("role.txt", "data", { accessLevel: "role-based", owner: "guest" }), (err) => err instanceof AuthorizationError && err.operation === "write");
|
|
268
|
-
assert.equal(await storage.exists("role.txt"), false);
|
|
269
|
-
});
|
|
270
|
-
//# sourceMappingURL=access.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.test.js","sourceRoot":"","sources":["../../src/tests/access.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"azure-driver.test.d.ts","sourceRoot":"","sources":["../../src/tests/azure-driver.test.ts"],"names":[],"mappings":""}
|