@kensio/yulin 1.10.3 → 1.10.5
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/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.d.ts.map +1 -1
- package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +7 -1
- package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js.map +1 -1
- package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +16 -0
- package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts.map +1 -1
- package/dist/service/s3/bucket/sim-s3-bucket-access.js +22 -1
- package/dist/service/s3/bucket/sim-s3-bucket-access.js.map +1 -1
- package/dist/service/s3/command/get-object/get-object-loader.d.ts +2 -1
- package/dist/service/s3/command/get-object/get-object-loader.d.ts.map +1 -1
- package/dist/service/s3/command/get-object/get-object-loader.js +5 -1
- package/dist/service/s3/command/get-object/get-object-loader.js.map +1 -1
- package/dist/service/s3/command/get-object/get-object.command.d.ts +5 -0
- package/dist/service/s3/command/get-object/get-object.command.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +3 -3
- package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects-page-builder.js +13 -17
- package/dist/service/s3/command/list-objects/list-objects-page-builder.js.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.command.d.ts +3 -8
- package/dist/service/s3/command/list-objects/list-objects.command.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts +3 -0
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.handler.js +6 -2
- package/dist/service/s3/command/list-objects/list-objects.handler.js.map +1 -1
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.d.ts +20 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.js +29 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.js.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +31 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +48 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +41 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.js +2 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.js.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts +41 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +64 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js.map +1 -0
- package/dist/service/s3/command/object/sim-s3-object-commands.d.ts +8 -0
- package/dist/service/s3/command/object/sim-s3-object-commands.d.ts.map +1 -1
- package/dist/service/s3/command/object/sim-s3-object-commands.js +13 -0
- package/dist/service/s3/command/object/sim-s3-object-commands.js.map +1 -1
- package/dist/service/s3/command/put-object/put-object-builder.d.ts +10 -0
- package/dist/service/s3/command/put-object/put-object-builder.d.ts.map +1 -1
- package/dist/service/s3/command/put-object/put-object-builder.js +8 -0
- package/dist/service/s3/command/put-object/put-object-builder.js.map +1 -1
- package/dist/service/s3/command/put-object/put-object.command.d.ts +4 -0
- package/dist/service/s3/command/put-object/put-object.command.d.ts.map +1 -1
- package/dist/service/s3/command/put-object/put-object.handler.d.ts.map +1 -1
- package/dist/service/s3/command/put-object/put-object.handler.js +4 -1
- package/dist/service/s3/command/put-object/put-object.handler.js.map +1 -1
- package/dist/service/s3/command/sim-s3-bucket-command-state.d.ts +4 -1
- package/dist/service/s3/command/sim-s3-bucket-command-state.d.ts.map +1 -1
- package/dist/service/s3/command/sim-s3-command.types.d.ts +2 -1
- package/dist/service/s3/command/sim-s3-command.types.d.ts.map +1 -1
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts.map +1 -1
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +1 -2
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.js.map +1 -1
- package/dist/service/s3/object/s3-object-etag.d.ts +20 -0
- package/dist/service/s3/object/s3-object-etag.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-etag.js +25 -0
- package/dist/service/s3/object/s3-object-etag.js.map +1 -0
- package/dist/service/s3/object/s3-object-listing-limits.d.ts +26 -0
- package/dist/service/s3/object/s3-object-listing-limits.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-listing-limits.js +46 -0
- package/dist/service/s3/object/s3-object-listing-limits.js.map +1 -0
- package/dist/service/s3/object/s3-object-listing.d.ts +51 -0
- package/dist/service/s3/object/s3-object-listing.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-listing.js +64 -0
- package/dist/service/s3/object/s3-object-listing.js.map +1 -0
- package/dist/service/s3/object/s3-object-response-headers.d.ts +23 -6
- package/dist/service/s3/object/s3-object-response-headers.d.ts.map +1 -1
- package/dist/service/s3/object/s3-object-response-headers.js +18 -8
- package/dist/service/s3/object/s3-object-response-headers.js.map +1 -1
- package/dist/service/s3/object/s3-object-summary.d.ts +33 -0
- package/dist/service/s3/object/s3-object-summary.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-summary.js +40 -0
- package/dist/service/s3/object/s3-object-summary.js.map +1 -0
- package/dist/service/s3/object/s3-object.d.ts +25 -0
- package/dist/service/s3/object/s3-object.d.ts.map +1 -1
- package/dist/service/s3/object/s3-object.js +31 -1
- package/dist/service/s3/object/s3-object.js.map +1 -1
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.d.ts.map +1 -1
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +4 -0
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.js.map +1 -1
- package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts.map +1 -1
- package/dist/service/s3/serve/sim-s3-rest-object-reader.js +6 -1
- package/dist/service/s3/serve/sim-s3-rest-object-reader.js.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.d.ts.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +6 -1
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.js.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +13 -4
- package/dist/service/s3/serve/website/sim-s3-website-object.d.ts.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object.js +15 -6
- package/dist/service/s3/serve/website/sim-s3-website-object.js.map +1 -1
- package/dist/service/s3/sim-s3-commands.d.ts +6 -0
- package/dist/service/s3/sim-s3-commands.d.ts.map +1 -1
- package/dist/service/s3/sim-s3-commands.js +2 -0
- package/dist/service/s3/sim-s3-commands.js.map +1 -1
- package/dist/service/s3/sim-s3.d.ts +24 -34
- package/dist/service/s3/sim-s3.d.ts.map +1 -1
- package/dist/service/s3/sim-s3.js +32 -40
- package/dist/service/s3/sim-s3.js.map +1 -1
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.d.ts +8 -0
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.d.ts.map +1 -1
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.js +11 -1
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.js.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.d.ts +19 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.d.ts.map +1 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.js +55 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.js.map +1 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.d.ts +14 -4
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.d.ts.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.js +27 -5
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.js.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +1 -2
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +10 -36
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js.map +1 -1
- package/package.json +2 -2
- package/dist/service/s3/notification/event/sim-s3-object-etag.d.ts +0 -8
- package/dist/service/s3/notification/event/sim-s3-object-etag.d.ts.map +0 -1
- package/dist/service/s3/notification/event/sim-s3-object-etag.js +0 -11
- package/dist/service/s3/notification/event/sim-s3-object-etag.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-cf-s3-origin-responses.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-cf-s3-origin-responses.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAQnE;;;;;;GAMG;AACH,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAvC,YAA6B,UAAU,EAAE,eAAe,EAAI;IAE5D;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAa3D;IAED;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAKpC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAKxC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKzC;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { simS3ObjectResponseHeaders } from "../../../s3/object/s3-object-response-headers.js";
|
|
2
|
+
import { simS3QuotedETag } from "../../../s3/object/s3-object-etag.js";
|
|
2
3
|
const plainTextHeaders = {
|
|
3
4
|
"content-type": "text/plain; charset=utf-8",
|
|
4
5
|
};
|
|
@@ -18,7 +19,12 @@ export class SimCfS3OriginResponses {
|
|
|
18
19
|
* Serve an Object, with no body when the request was a HEAD.
|
|
19
20
|
*/
|
|
20
21
|
foundObject(object, request) {
|
|
21
|
-
const headers = simS3ObjectResponseHeaders(
|
|
22
|
+
const headers = simS3ObjectResponseHeaders({
|
|
23
|
+
metadata: object.metadata.values,
|
|
24
|
+
bodyLength: object.body.length,
|
|
25
|
+
etag: simS3QuotedETag(object.etag),
|
|
26
|
+
lastModified: object.lastModified,
|
|
27
|
+
});
|
|
22
28
|
if (request.method === "HEAD") {
|
|
23
29
|
return new Response(undefined, { status: 200, headers });
|
|
24
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-cf-s3-origin-responses.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-cf-s3-origin-responses.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,MAAM,gBAAgB,GAAG;IACvB,cAAc,EAAE,2BAA2B;CACnC,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IACJ,UAAU;IAAvC,YAA6B,UAA2B;0BAA3B,UAAU;IAAoB,CAAC;IAE5D;;OAEG;IACH,WAAW,CAAC,MAAmB,EAAE,OAAgB;QAC/C,MAAM,OAAO,GAAG,0BAA0B,CAAC;YACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAChC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC9B,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;YAClC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,QAAQ,CACjB,UAAU,SAAS,+BAA+B,IAAI,CAAC,UAAU,EAAE,EACnE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAC3C,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,QAAQ,CACjB,gCAAgC,SAAS,uBAAuB,IAAI,CAAC,UAAU,EAAE,EACjF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAc;QAC7B,OAAO,IAAI,QAAQ,CAAC,UAAU,MAAM,cAAc,EAAE;YAClD,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { SimAwsAccountRegionScope } from "../../aws/sim-aws-account-region-scope.js";
|
|
2
2
|
import type { SimS3Bucket, SimS3BucketName } from "./sim-s3-bucket.js";
|
|
3
|
+
import type { SimS3GlobalRegistry } from "../sim-s3-global-registry.js";
|
|
3
4
|
import type { SimS3MountFilesystemOptions } from "../mount/sim-s3-mount.type.js";
|
|
4
5
|
interface SimS3BucketAccessProperties {
|
|
5
6
|
readonly buckets: ReadonlyMap<SimS3BucketName, SimS3Bucket>;
|
|
6
7
|
readonly accountRegionScope: SimAwsAccountRegionScope;
|
|
8
|
+
readonly s3GlobalRegistry: SimS3GlobalRegistry;
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
9
11
|
* Reaching a Bucket in one simulated S3 scope by name.
|
|
@@ -16,8 +18,22 @@ interface SimS3BucketAccessProperties {
|
|
|
16
18
|
export declare class SimS3BucketAccess {
|
|
17
19
|
private readonly buckets;
|
|
18
20
|
private readonly accountRegionScope;
|
|
21
|
+
private readonly s3GlobalRegistry;
|
|
19
22
|
private readonly mountWatches;
|
|
20
23
|
constructor(properties: SimS3BucketAccessProperties);
|
|
24
|
+
/**
|
|
25
|
+
* A Bucket held in this scope, or nothing when this scope holds no such name.
|
|
26
|
+
*/
|
|
27
|
+
find(bucketName: SimS3BucketName | string): SimS3Bucket | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* The Account Region scope holding a globally registered Bucket, whichever
|
|
30
|
+
* scope of the simulation that is.
|
|
31
|
+
*/
|
|
32
|
+
scopeOf(bucketName: SimS3BucketName | string): SimAwsAccountRegionScope | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* The simulated S3 REST API endpoint URL for this scope's Region.
|
|
35
|
+
*/
|
|
36
|
+
serviceUrl(): URL;
|
|
21
37
|
/**
|
|
22
38
|
* Get a Bucket by name, or fail naming the Bucket that is not there.
|
|
23
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-bucket-access.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAG1F,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,UAAU,2BAA2B;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-bucket-access.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAG1F,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,UAAU,2BAA2B;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;IACtD,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;CAChD;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IAExD,YAAY,UAAU,EAAE,2BAA2B,EAIlD;IAED;;OAEG;IACH,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAElE;IAED;;;OAGG;IACH,OAAO,CACL,UAAU,EAAE,eAAe,GAAG,MAAM,GACnC,wBAAwB,GAAG,SAAS,CAEtC;IAED;;OAEG;IACH,UAAU,IAAI,GAAG,CAEhB;IAED;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,WAAW,CAK1D;IAED;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,GAAG,CAK7C;IAED;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,GAAG,CAEpD;IAED;;;;;;;;;;;;;OAaG;IACH,eAAe,CACb,UAAU,EAAE,eAAe,GAAG,MAAM,EACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,2BAAgC,GACxC,IAAI,CAiBN;IAED;;OAEG;IACH,aAAa,IAAI,SAAS,MAAM,EAAE,CAEjC;IAED;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAEzB;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assertDefined } from "../../../util/type-guard/defined.js";
|
|
2
2
|
import { FilesystemS3BucketStorage } from "../storage/filesystem/s3-filesystem-storage.js";
|
|
3
|
-
import { simS3BucketUrl } from "./sim-s3-endpoint-url.js";
|
|
3
|
+
import { simS3BucketUrl, simS3ServiceUrl } from "./sim-s3-endpoint-url.js";
|
|
4
4
|
import { SimS3DeclaredSystemMetadata } from "../object/s3-declared-system-metadata.js";
|
|
5
5
|
import { SimS3MountWatches } from "../mount/sim-s3-mount-watches.js";
|
|
6
6
|
/**
|
|
@@ -14,10 +14,31 @@ import { SimS3MountWatches } from "../mount/sim-s3-mount-watches.js";
|
|
|
14
14
|
export class SimS3BucketAccess {
|
|
15
15
|
buckets;
|
|
16
16
|
accountRegionScope;
|
|
17
|
+
s3GlobalRegistry;
|
|
17
18
|
mountWatches = new SimS3MountWatches();
|
|
18
19
|
constructor(properties) {
|
|
19
20
|
this.buckets = properties.buckets;
|
|
20
21
|
this.accountRegionScope = properties.accountRegionScope;
|
|
22
|
+
this.s3GlobalRegistry = properties.s3GlobalRegistry;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A Bucket held in this scope, or nothing when this scope holds no such name.
|
|
26
|
+
*/
|
|
27
|
+
find(bucketName) {
|
|
28
|
+
return this.buckets.get(bucketName);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The Account Region scope holding a globally registered Bucket, whichever
|
|
32
|
+
* scope of the simulation that is.
|
|
33
|
+
*/
|
|
34
|
+
scopeOf(bucketName) {
|
|
35
|
+
return this.s3GlobalRegistry.findBucketScope(bucketName);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The simulated S3 REST API endpoint URL for this scope's Region.
|
|
39
|
+
*/
|
|
40
|
+
serviceUrl() {
|
|
41
|
+
return simS3ServiceUrl(this.accountRegionScope.regionName);
|
|
21
42
|
}
|
|
22
43
|
/**
|
|
23
44
|
* Get a Bucket by name, or fail naming the Bucket that is not there.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-bucket-access.js","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-bucket-access.js","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAUrE;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACX,OAAO,CAA4C;IACnD,kBAAkB,CAA2B;IAC7C,gBAAgB,CAAsB;IACtC,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAExD,YAAY,UAAuC;QACjD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,UAAoC;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAA6B,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,OAAO,CACL,UAAoC;QAEpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,UAA6B,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAoC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAA6B,CAAC,CAAC;QAC/D,aAAa,CAAC,MAAM,EAAE,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAE3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,UAAoC;QACtC,OAAO,cAAc,CACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,EACpC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,UAAoC;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,eAAe,CACb,UAAoC,EACpC,aAAqB,EACrB,OAAO,GAAgC,EAAE;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,2BAA2B,CAAC;YACrD,SAAS,EAAE,MAAM,CAAC,yBAAyB,EAAE;YAC7C,YAAY,EAAE,OAAO,CAAC,cAAc;SACrC,CAAC,CAAC;QAEH,MAAM,CAAC,mBAAmB,CACxB,IAAI,yBAAyB,CAAC;YAC5B,aAAa;YACb,GAAG,CAAC,OAAO,CAAC,wBAAwB,KAAK,SAAS,IAAI;gBACpD,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;aAC3D,CAAC;YACF,cAAc;SACf,CAAC,CACH,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -12,7 +12,8 @@ import type { SimGetObjectCommandOutput } from "./get-object.command.js";
|
|
|
12
12
|
*
|
|
13
13
|
* - a missing storage entry becomes the S3 NoSuchKey error;
|
|
14
14
|
* - the stored Buffer becomes the readable response body;
|
|
15
|
-
* - stored metadata becomes SDK response metadata
|
|
15
|
+
* - stored metadata becomes SDK response metadata;
|
|
16
|
+
* - the Object's content hash and write time become its ETag and LastModified.
|
|
16
17
|
*
|
|
17
18
|
* Bucket resolution remains in the command handler because AWS request ordering
|
|
18
19
|
* requires a missing Bucket to be reported before Object authorization.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-object-loader.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-object-loader.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,yBAAyB,CAAC,CAapC;CACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Readable } from "node:stream";
|
|
2
2
|
import { SimS3NoSuchKey } from "../../error/sim-s3.error.js";
|
|
3
|
+
import { simS3QuotedETag } from "../../object/s3-object-etag.js";
|
|
3
4
|
/**
|
|
4
5
|
* Loads an authorized S3 Object and converts it to a GetObject response.
|
|
5
6
|
*
|
|
@@ -12,7 +13,8 @@ import { SimS3NoSuchKey } from "../../error/sim-s3.error.js";
|
|
|
12
13
|
*
|
|
13
14
|
* - a missing storage entry becomes the S3 NoSuchKey error;
|
|
14
15
|
* - the stored Buffer becomes the readable response body;
|
|
15
|
-
* - stored metadata becomes SDK response metadata
|
|
16
|
+
* - stored metadata becomes SDK response metadata;
|
|
17
|
+
* - the Object's content hash and write time become its ETag and LastModified.
|
|
16
18
|
*
|
|
17
19
|
* Bucket resolution remains in the command handler because AWS request ordering
|
|
18
20
|
* requires a missing Bucket to be reported before Object authorization.
|
|
@@ -29,6 +31,8 @@ export class GetObjectLoader {
|
|
|
29
31
|
return {
|
|
30
32
|
Body: Readable.from([object.body]),
|
|
31
33
|
Metadata: object.metadata.values,
|
|
34
|
+
ETag: simS3QuotedETag(object.etag),
|
|
35
|
+
LastModified: object.lastModified,
|
|
32
36
|
$metadata: {},
|
|
33
37
|
};
|
|
34
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-object-loader.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-object-loader.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,eAAe;IAC1B;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,MAAmB,EACnB,GAAW;QAEX,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,cAAc,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAChC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;YAClC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -15,10 +15,15 @@ export interface SimGetObjectCommandInput {
|
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Minimal structural sim S3 GetObject output.
|
|
18
|
+
*
|
|
19
|
+
* `ETag` is quoted, as real S3 and the SDK give it. `LastModified` is when the
|
|
20
|
+
* Object was written, by the simulation's clock.
|
|
18
21
|
*/
|
|
19
22
|
export interface SimGetObjectCommandOutput {
|
|
20
23
|
readonly Body?: Readable;
|
|
21
24
|
readonly Metadata?: Record<string, string>;
|
|
25
|
+
readonly ETag?: string;
|
|
26
|
+
readonly LastModified?: Date;
|
|
22
27
|
readonly $metadata: SimResponseMetadata;
|
|
23
28
|
}
|
|
24
29
|
//# sourceMappingURL=get-object.command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-object.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED
|
|
1
|
+
{"version":3,"file":"get-object.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
|
|
@@ -13,9 +13,9 @@ interface ListObjectsPageInput {
|
|
|
13
13
|
* called. Keeping storage access here, behind that boundary, prevents a denied
|
|
14
14
|
* request from examining Object keys or sizes.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* Ordering and page selection are shared with ListObjectsV2, since the two
|
|
17
|
+
* operations differ in how a caller names where to resume rather than in which
|
|
18
|
+
* keys a page holds. The marker is exclusive, so a page begins after it.
|
|
19
19
|
*
|
|
20
20
|
* NextMarker is returned only when another page exists and identifies the final
|
|
21
21
|
* key in the current page.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-objects-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"list-objects-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE7E,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,2BAA2B,CAAC,CAiBtC;CACF"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { simS3ObjectPage } from "../../object/s3-object-listing.js";
|
|
2
|
+
import { simS3ObjectSummaries } from "../../object/s3-object-summary.js";
|
|
1
3
|
/**
|
|
2
4
|
* Reads, orders, and paginates Objects for a ListObjects response.
|
|
3
5
|
*
|
|
@@ -5,9 +7,9 @@
|
|
|
5
7
|
* called. Keeping storage access here, behind that boundary, prevents a denied
|
|
6
8
|
* request from examining Object keys or sizes.
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
10
|
+
* Ordering and page selection are shared with ListObjectsV2, since the two
|
|
11
|
+
* operations differ in how a caller names where to resume rather than in which
|
|
12
|
+
* keys a page holds. The marker is exclusive, so a page begins after it.
|
|
11
13
|
*
|
|
12
14
|
* NextMarker is returned only when another page exists and identifies the final
|
|
13
15
|
* key in the current page.
|
|
@@ -17,25 +19,19 @@ export class ListObjectsPageBuilder {
|
|
|
17
19
|
* Build one response page from the authorized Bucket listing.
|
|
18
20
|
*/
|
|
19
21
|
async build(input) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const page = objects.slice(startIndex, startIndex + input.maxKeys);
|
|
26
|
-
const lastObject = page.at(-1);
|
|
27
|
-
const isTruncated = startIndex + page.length < objects.length;
|
|
22
|
+
const page = simS3ObjectPage({
|
|
23
|
+
objects: await input.bucket.listObjects(input.prefix),
|
|
24
|
+
startAfter: input.marker,
|
|
25
|
+
maxKeys: input.maxKeys,
|
|
26
|
+
});
|
|
28
27
|
return {
|
|
29
|
-
Contents: page.
|
|
30
|
-
Key: object.key,
|
|
31
|
-
Size: object.body.length,
|
|
32
|
-
})),
|
|
28
|
+
Contents: simS3ObjectSummaries(page.objects),
|
|
33
29
|
Name: input.bucket.bucketName,
|
|
34
30
|
Prefix: input.prefix,
|
|
35
31
|
Marker: input.marker,
|
|
36
32
|
MaxKeys: input.maxKeys,
|
|
37
|
-
IsTruncated: isTruncated,
|
|
38
|
-
NextMarker:
|
|
33
|
+
IsTruncated: page.isTruncated,
|
|
34
|
+
NextMarker: page.resumeAfter,
|
|
39
35
|
$metadata: {},
|
|
40
36
|
};
|
|
41
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-objects-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-objects-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAUzE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAA2B;QAE3B,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { SimResponseMetadata } from "../../../aws/metadata/response-metadata.type.js";
|
|
2
|
+
import type { SimS3ObjectSummary } from "../../object/s3-object-summary.js";
|
|
3
|
+
export type { SimS3ObjectSummary } from "../../object/s3-object-summary.js";
|
|
2
4
|
/**
|
|
3
5
|
* Minimal structural sim S3 ListObjects command.
|
|
4
6
|
*/
|
|
@@ -18,7 +20,7 @@ export interface SimListObjectsCommandInput {
|
|
|
18
20
|
* Minimal structural sim S3 ListObjects output.
|
|
19
21
|
*/
|
|
20
22
|
export interface SimListObjectsCommandOutput {
|
|
21
|
-
readonly Contents?: SimS3ObjectSummary[];
|
|
23
|
+
readonly Contents?: SimS3ObjectSummary[] | undefined;
|
|
22
24
|
readonly Name?: string;
|
|
23
25
|
readonly Prefix?: string | undefined;
|
|
24
26
|
readonly Marker?: string | undefined;
|
|
@@ -27,11 +29,4 @@ export interface SimListObjectsCommandOutput {
|
|
|
27
29
|
readonly NextMarker?: string | undefined;
|
|
28
30
|
readonly $metadata: SimResponseMetadata;
|
|
29
31
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Minimal structural sim S3 object summary.
|
|
32
|
-
*/
|
|
33
|
-
export interface SimS3ObjectSummary {
|
|
34
|
-
readonly Key?: string;
|
|
35
|
-
readonly Size?: number;
|
|
36
|
-
}
|
|
37
32
|
//# sourceMappingURL=list-objects.command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-objects.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"list-objects.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
|
|
@@ -3,11 +3,13 @@ import type { SimListObjectsCommand, SimListObjectsCommandOutput } from "./list-
|
|
|
3
3
|
import type { SimS3Bucket, SimS3BucketName } from "../../bucket/sim-s3-bucket.js";
|
|
4
4
|
import { type BackgroundScheduler } from "../../../../util/background/background.js";
|
|
5
5
|
import { type SimIamInterServiceAuthZ } from "../../../iam/authorize/sim-iam-inter-service-auth-z.js";
|
|
6
|
+
import { SimS3ObjectListingLimits } from "../../object/s3-object-listing-limits.js";
|
|
6
7
|
import type { SimS3RequestOptions } from "../sim-s3-request-options.js";
|
|
7
8
|
interface ListObjectsCommandHandlerProperties {
|
|
8
9
|
readonly buckets: Map<SimS3BucketName, SimS3Bucket>;
|
|
9
10
|
readonly iam?: SimIamInterServiceAuthZ;
|
|
10
11
|
readonly background?: BackgroundScheduler;
|
|
12
|
+
readonly listing?: SimS3ObjectListingLimits;
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* Simulated S3 ListObjectsCommand handler.
|
|
@@ -19,6 +21,7 @@ export declare class ListObjectsCommandHandler implements CommandHandler<SimList
|
|
|
19
21
|
private readonly authorizer;
|
|
20
22
|
private readonly pageBuilder;
|
|
21
23
|
private readonly background;
|
|
24
|
+
private readonly listing;
|
|
22
25
|
constructor(properties: ListObjectsCommandHandlerProperties);
|
|
23
26
|
/**
|
|
24
27
|
* Coordinate validation, Bucket resolution, authorization, and pagination.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-objects.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;
|
|
1
|
+
{"version":3,"file":"list-objects.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,UAAU,EAAE,mCAAmC,EAY1D;IAED;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,2BAA2B,CAAC,CA8BtC;CACF"}
|
|
@@ -2,6 +2,8 @@ import { assertDefined } from "../../../../util/type-guard/defined.js";
|
|
|
2
2
|
import { SimS3NoSuchBucket } from "../../error/sim-s3.error.js";
|
|
3
3
|
import { BackgroundTasks, } from "../../../../util/background/background.js";
|
|
4
4
|
import { SimIamAllowAllAuth, } from "../../../iam/authorize/sim-iam-inter-service-auth-z.js";
|
|
5
|
+
import { simS3EffectiveMaxKeys } from "../../object/s3-object-listing.js";
|
|
6
|
+
import { SimS3ObjectListingLimits } from "../../object/s3-object-listing-limits.js";
|
|
5
7
|
import { ListObjectsAuthorizer } from "./list-objects-authorizer.js";
|
|
6
8
|
import { ListObjectsPageBuilder } from "./list-objects-page-builder.js";
|
|
7
9
|
/**
|
|
@@ -14,11 +16,13 @@ export class ListObjectsCommandHandler {
|
|
|
14
16
|
authorizer;
|
|
15
17
|
pageBuilder = new ListObjectsPageBuilder();
|
|
16
18
|
background;
|
|
19
|
+
listing;
|
|
17
20
|
constructor(properties) {
|
|
18
|
-
const { buckets, iam = new SimIamAllowAllAuth(), background = new BackgroundTasks(), } = properties;
|
|
21
|
+
const { buckets, iam = new SimIamAllowAllAuth(), background = new BackgroundTasks(), listing = new SimS3ObjectListingLimits(), } = properties;
|
|
19
22
|
this.buckets = buckets;
|
|
20
23
|
this.authorizer = new ListObjectsAuthorizer({ iam });
|
|
21
24
|
this.background = background;
|
|
25
|
+
this.listing = listing;
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
28
|
* Coordinate validation, Bucket resolution, authorization, and pagination.
|
|
@@ -36,7 +40,7 @@ export class ListObjectsCommandHandler {
|
|
|
36
40
|
}
|
|
37
41
|
// Complete request sequencing before authorization and storage access.
|
|
38
42
|
await this.background.sequence();
|
|
39
|
-
const maxKeys = command.input.MaxKeys
|
|
43
|
+
const maxKeys = simS3EffectiveMaxKeys(command.input.MaxKeys, this.listing.maxKeysPerPage);
|
|
40
44
|
this.authorizer.authorize({
|
|
41
45
|
bucket,
|
|
42
46
|
prefix: command.input.Prefix,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-objects.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;
|
|
1
|
+
{"version":3,"file":"list-objects.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAInB,OAAO,CAAoC;IAC3C,UAAU,CAAwB;IAClC,WAAW,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC3C,UAAU,CAAsB;IAChC,OAAO,CAA2B;IAEnD,YAAY,UAA+C;QACzD,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,OAAO,GAAG,IAAI,wBAAwB,EAAE,GACzC,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,OAA8B,EAC9B,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAEvE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAyB,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,uEAAuE;QACvE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,qBAAqB,CACnC,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5B,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAClC,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The token a truncated ListObjectsV2 page hands back to resume from.
|
|
3
|
+
*
|
|
4
|
+
* Real S3 treats this as opaque and so should a caller, so the simulation makes
|
|
5
|
+
* it look opaque rather than handing back the key it stands for. What it
|
|
6
|
+
* actually holds is that key, encoded, which is all a listing needs to carry on
|
|
7
|
+
* from where it stopped.
|
|
8
|
+
*/
|
|
9
|
+
export declare function simS3ContinuationToken(lastKey: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Read the key a continuation token resumes after.
|
|
12
|
+
*
|
|
13
|
+
* A token that was not one this simulation issued is refused rather than
|
|
14
|
+
* quietly listing from somewhere arbitrary, since a caller inventing one has a
|
|
15
|
+
* bug that a plausible-looking page would hide. The check is a round trip,
|
|
16
|
+
* because base64 decoding accepts a good deal that never encodes to the same
|
|
17
|
+
* thing again.
|
|
18
|
+
*/
|
|
19
|
+
export declare function simS3ContinuationTokenKey(token: string): string;
|
|
20
|
+
//# sourceMappingURL=list-objects-v2-continuation-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2-continuation-token.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SimS3InvalidArgument } from "../../error/sim-s3.error.js";
|
|
2
|
+
/**
|
|
3
|
+
* The token a truncated ListObjectsV2 page hands back to resume from.
|
|
4
|
+
*
|
|
5
|
+
* Real S3 treats this as opaque and so should a caller, so the simulation makes
|
|
6
|
+
* it look opaque rather than handing back the key it stands for. What it
|
|
7
|
+
* actually holds is that key, encoded, which is all a listing needs to carry on
|
|
8
|
+
* from where it stopped.
|
|
9
|
+
*/
|
|
10
|
+
export function simS3ContinuationToken(lastKey) {
|
|
11
|
+
return Buffer.from(lastKey, "utf8").toString("base64");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Read the key a continuation token resumes after.
|
|
15
|
+
*
|
|
16
|
+
* A token that was not one this simulation issued is refused rather than
|
|
17
|
+
* quietly listing from somewhere arbitrary, since a caller inventing one has a
|
|
18
|
+
* bug that a plausible-looking page would hide. The check is a round trip,
|
|
19
|
+
* because base64 decoding accepts a good deal that never encodes to the same
|
|
20
|
+
* thing again.
|
|
21
|
+
*/
|
|
22
|
+
export function simS3ContinuationTokenKey(token) {
|
|
23
|
+
const key = Buffer.from(token, "base64").toString("utf8");
|
|
24
|
+
if (key === "" || simS3ContinuationToken(key) !== token) {
|
|
25
|
+
throw new SimS3InvalidArgument(`Not a continuation token simulated S3 issued: ${token}`);
|
|
26
|
+
}
|
|
27
|
+
return key;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=list-objects-v2-continuation-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2-continuation-token.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,GAAG,KAAK,EAAE,IAAI,sBAAsB,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,oBAAoB,CAC5B,iDAAiD,KAAK,EAAE,CACzD,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { SimS3Bucket } from "../../bucket/sim-s3-bucket.js";
|
|
2
|
+
import type { SimListObjectsV2CommandOutput } from "./list-objects-v2.command.js";
|
|
3
|
+
interface ListObjectsV2PageInput {
|
|
4
|
+
readonly bucket: SimS3Bucket;
|
|
5
|
+
readonly prefix?: string | undefined;
|
|
6
|
+
readonly continuationToken?: string | undefined;
|
|
7
|
+
readonly startAfter?: string | undefined;
|
|
8
|
+
readonly maxKeys: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Reads, orders, and paginates Objects for a ListObjectsV2 response.
|
|
12
|
+
*
|
|
13
|
+
* Authorization is completed by the command handler before this class is
|
|
14
|
+
* called, as it is for the first version of the operation, so a denied request
|
|
15
|
+
* cannot examine Object keys or sizes.
|
|
16
|
+
*
|
|
17
|
+
* The keys on a page are chosen exactly as ListObjects chooses them. What
|
|
18
|
+
* differs is how a caller says where to carry on from: a continuation token
|
|
19
|
+
* from the previous page, which wins, or a StartAfter key that positions the
|
|
20
|
+
* first page only. That is why real S3 ignores StartAfter once a listing is
|
|
21
|
+
* under way, and so does this.
|
|
22
|
+
*/
|
|
23
|
+
export declare class ListObjectsV2PageBuilder {
|
|
24
|
+
/**
|
|
25
|
+
* Build one response page from the authorized Bucket listing.
|
|
26
|
+
*/
|
|
27
|
+
build(input: ListObjectsV2PageInput): Promise<SimListObjectsV2CommandOutput>;
|
|
28
|
+
private resumeAfter;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=list-objects-v2-page-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAOjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAElF,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,6BAA6B,CAAC,CAsBxC;IAED,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { simS3ObjectPage } from "../../object/s3-object-listing.js";
|
|
2
|
+
import { simS3ObjectSummaries } from "../../object/s3-object-summary.js";
|
|
3
|
+
import { simS3ContinuationToken, simS3ContinuationTokenKey, } from "./list-objects-v2-continuation-token.js";
|
|
4
|
+
/**
|
|
5
|
+
* Reads, orders, and paginates Objects for a ListObjectsV2 response.
|
|
6
|
+
*
|
|
7
|
+
* Authorization is completed by the command handler before this class is
|
|
8
|
+
* called, as it is for the first version of the operation, so a denied request
|
|
9
|
+
* cannot examine Object keys or sizes.
|
|
10
|
+
*
|
|
11
|
+
* The keys on a page are chosen exactly as ListObjects chooses them. What
|
|
12
|
+
* differs is how a caller says where to carry on from: a continuation token
|
|
13
|
+
* from the previous page, which wins, or a StartAfter key that positions the
|
|
14
|
+
* first page only. That is why real S3 ignores StartAfter once a listing is
|
|
15
|
+
* under way, and so does this.
|
|
16
|
+
*/
|
|
17
|
+
export class ListObjectsV2PageBuilder {
|
|
18
|
+
/**
|
|
19
|
+
* Build one response page from the authorized Bucket listing.
|
|
20
|
+
*/
|
|
21
|
+
async build(input) {
|
|
22
|
+
const page = simS3ObjectPage({
|
|
23
|
+
objects: await input.bucket.listObjects(input.prefix),
|
|
24
|
+
startAfter: this.resumeAfter(input),
|
|
25
|
+
maxKeys: input.maxKeys,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
Contents: simS3ObjectSummaries(page.objects),
|
|
29
|
+
Name: input.bucket.bucketName,
|
|
30
|
+
Prefix: input.prefix,
|
|
31
|
+
MaxKeys: input.maxKeys,
|
|
32
|
+
KeyCount: page.objects.length,
|
|
33
|
+
IsTruncated: page.isTruncated,
|
|
34
|
+
ContinuationToken: input.continuationToken,
|
|
35
|
+
NextContinuationToken: page.resumeAfter === undefined
|
|
36
|
+
? undefined
|
|
37
|
+
: simS3ContinuationToken(page.resumeAfter),
|
|
38
|
+
StartAfter: input.startAfter,
|
|
39
|
+
$metadata: {},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
resumeAfter(input) {
|
|
43
|
+
return input.continuationToken === undefined
|
|
44
|
+
? input.startAfter
|
|
45
|
+
: simS3ContinuationTokenKey(input.continuationToken);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=list-objects-v2-page-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-page-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AAWjD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IACnC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAA6B;QAE7B,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,qBAAqB,EACnB,IAAI,CAAC,WAAW,KAAK,SAAS;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,KAA6B;QAC/C,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;YAC1C,CAAC,CAAC,KAAK,CAAC,UAAU;YAClB,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { SimResponseMetadata } from "../../../aws/metadata/response-metadata.type.js";
|
|
2
|
+
import type { SimS3ObjectSummary } from "../../object/s3-object-summary.js";
|
|
3
|
+
/**
|
|
4
|
+
* Minimal structural sim S3 ListObjectsV2 command.
|
|
5
|
+
*/
|
|
6
|
+
export interface SimListObjectsV2Command {
|
|
7
|
+
readonly input: SimListObjectsV2CommandInput;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Minimal structural sim S3 ListObjectsV2 input.
|
|
11
|
+
*
|
|
12
|
+
* `ContinuationToken` resumes a truncated listing and takes precedence over
|
|
13
|
+
* `StartAfter`, which only positions the first page.
|
|
14
|
+
*/
|
|
15
|
+
export interface SimListObjectsV2CommandInput {
|
|
16
|
+
readonly Bucket?: string | undefined;
|
|
17
|
+
readonly Prefix?: string | undefined;
|
|
18
|
+
readonly MaxKeys?: number | undefined;
|
|
19
|
+
readonly ContinuationToken?: string | undefined;
|
|
20
|
+
readonly StartAfter?: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Minimal structural sim S3 ListObjectsV2 output.
|
|
24
|
+
*
|
|
25
|
+
* `KeyCount` is what makes this version worth using over the first: it says how
|
|
26
|
+
* many keys came back without the caller having to measure `Contents`, which
|
|
27
|
+
* may be absent rather than empty.
|
|
28
|
+
*/
|
|
29
|
+
export interface SimListObjectsV2CommandOutput {
|
|
30
|
+
readonly Contents?: SimS3ObjectSummary[] | undefined;
|
|
31
|
+
readonly Name?: string;
|
|
32
|
+
readonly Prefix?: string | undefined;
|
|
33
|
+
readonly MaxKeys?: number;
|
|
34
|
+
readonly KeyCount?: number;
|
|
35
|
+
readonly IsTruncated?: boolean;
|
|
36
|
+
readonly ContinuationToken?: string | undefined;
|
|
37
|
+
readonly NextContinuationToken?: string | undefined;
|
|
38
|
+
readonly StartAfter?: string | undefined;
|
|
39
|
+
readonly $metadata: SimResponseMetadata;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=list-objects-v2.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;CAC9C;AAED;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2.command.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.command.ts"],"names":[],"mappings":""}
|