@kensio/yulin 1.10.3 → 1.10.4
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 +1 -1
- 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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CommandHandler } from "../../../../command/command-handler.js";
|
|
2
|
+
import type { SimListObjectsV2Command, SimListObjectsV2CommandOutput } from "./list-objects-v2.command.js";
|
|
3
|
+
import type { SimS3Bucket, SimS3BucketName } from "../../bucket/sim-s3-bucket.js";
|
|
4
|
+
import { type BackgroundScheduler } from "../../../../util/background/background.js";
|
|
5
|
+
import { type SimIamInterServiceAuthZ } from "../../../iam/authorize/sim-iam-inter-service-auth-z.js";
|
|
6
|
+
import { SimS3ObjectListingLimits } from "../../object/s3-object-listing-limits.js";
|
|
7
|
+
import type { SimS3RequestOptions } from "../sim-s3-request-options.js";
|
|
8
|
+
interface ListObjectsV2CommandHandlerProperties {
|
|
9
|
+
readonly buckets: Map<SimS3BucketName, SimS3Bucket>;
|
|
10
|
+
readonly iam?: SimIamInterServiceAuthZ;
|
|
11
|
+
readonly background?: BackgroundScheduler;
|
|
12
|
+
readonly listing?: SimS3ObjectListingLimits;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Simulated S3 ListObjectsV2Command handler.
|
|
16
|
+
*
|
|
17
|
+
* The second version of the operation is the one current tooling reaches for.
|
|
18
|
+
* It authorizes identically to the first, against `s3:ListBucket` on the
|
|
19
|
+
* Bucket, and lists the same keys; the difference is a continuation token in
|
|
20
|
+
* place of a marker, and a response that counts the keys it returned.
|
|
21
|
+
*
|
|
22
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/ListObjectsV2Command/
|
|
23
|
+
*/
|
|
24
|
+
export declare class ListObjectsV2CommandHandler implements CommandHandler<SimListObjectsV2Command, SimListObjectsV2CommandOutput> {
|
|
25
|
+
private readonly buckets;
|
|
26
|
+
private readonly authorizer;
|
|
27
|
+
private readonly pageBuilder;
|
|
28
|
+
private readonly background;
|
|
29
|
+
private readonly listing;
|
|
30
|
+
constructor(properties: ListObjectsV2CommandHandlerProperties);
|
|
31
|
+
/**
|
|
32
|
+
* Coordinate validation, Bucket resolution, authorization, and pagination.
|
|
33
|
+
*
|
|
34
|
+
* Bucket lookup occurs before authorization so missing Buckets retain their
|
|
35
|
+
* existing S3 error behavior. Authorization occurs before storage listing so
|
|
36
|
+
* a denied caller cannot inspect Object keys or sizes.
|
|
37
|
+
*/
|
|
38
|
+
handle(command: SimListObjectsV2Command, options?: SimS3RequestOptions): Promise<SimListObjectsV2CommandOutput>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=list-objects-v2.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,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,qCAAqC;IAC7C,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;;;;;;;;;GASG;AACH,qBAAa,2BAA4B,YAAW,cAAc,CAChE,uBAAuB,EACvB,6BAA6B,CAC9B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,UAAU,EAAE,qCAAqC,EAY5D;IAED;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,6BAA6B,CAAC,CA+BxC;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { assertDefined } from "../../../../util/type-guard/defined.js";
|
|
2
|
+
import { SimS3NoSuchBucket } from "../../error/sim-s3.error.js";
|
|
3
|
+
import { BackgroundTasks, } from "../../../../util/background/background.js";
|
|
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";
|
|
7
|
+
import { ListObjectsAuthorizer } from "../list-objects/list-objects-authorizer.js";
|
|
8
|
+
import { ListObjectsV2PageBuilder } from "./list-objects-v2-page-builder.js";
|
|
9
|
+
/**
|
|
10
|
+
* Simulated S3 ListObjectsV2Command handler.
|
|
11
|
+
*
|
|
12
|
+
* The second version of the operation is the one current tooling reaches for.
|
|
13
|
+
* It authorizes identically to the first, against `s3:ListBucket` on the
|
|
14
|
+
* Bucket, and lists the same keys; the difference is a continuation token in
|
|
15
|
+
* place of a marker, and a response that counts the keys it returned.
|
|
16
|
+
*
|
|
17
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/ListObjectsV2Command/
|
|
18
|
+
*/
|
|
19
|
+
export class ListObjectsV2CommandHandler {
|
|
20
|
+
buckets;
|
|
21
|
+
authorizer;
|
|
22
|
+
pageBuilder = new ListObjectsV2PageBuilder();
|
|
23
|
+
background;
|
|
24
|
+
listing;
|
|
25
|
+
constructor(properties) {
|
|
26
|
+
const { buckets, iam = new SimIamAllowAllAuth(), background = new BackgroundTasks(), listing = new SimS3ObjectListingLimits(), } = properties;
|
|
27
|
+
this.buckets = buckets;
|
|
28
|
+
this.authorizer = new ListObjectsAuthorizer({ iam });
|
|
29
|
+
this.background = background;
|
|
30
|
+
this.listing = listing;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Coordinate validation, Bucket resolution, authorization, and pagination.
|
|
34
|
+
*
|
|
35
|
+
* Bucket lookup occurs before authorization so missing Buckets retain their
|
|
36
|
+
* existing S3 error behavior. Authorization occurs before storage listing so
|
|
37
|
+
* a denied caller cannot inspect Object keys or sizes.
|
|
38
|
+
*/
|
|
39
|
+
async handle(command, options) {
|
|
40
|
+
assertDefined(command.input.Bucket, "ListObjectsV2Command.input.Bucket");
|
|
41
|
+
const bucketName = command.input.Bucket;
|
|
42
|
+
const bucket = this.buckets.get(bucketName);
|
|
43
|
+
if (bucket === undefined) {
|
|
44
|
+
throw new SimS3NoSuchBucket(`No S3 Bucket named ${bucketName}`);
|
|
45
|
+
}
|
|
46
|
+
// Complete request sequencing before authorization and storage access.
|
|
47
|
+
await this.background.sequence();
|
|
48
|
+
const maxKeys = simS3EffectiveMaxKeys(command.input.MaxKeys, this.listing.maxKeysPerPage);
|
|
49
|
+
this.authorizer.authorize({
|
|
50
|
+
bucket,
|
|
51
|
+
prefix: command.input.Prefix,
|
|
52
|
+
maxKeys,
|
|
53
|
+
options,
|
|
54
|
+
});
|
|
55
|
+
return await this.pageBuilder.build({
|
|
56
|
+
bucket,
|
|
57
|
+
prefix: command.input.Prefix,
|
|
58
|
+
continuationToken: command.input.ContinuationToken,
|
|
59
|
+
startAfter: command.input.StartAfter,
|
|
60
|
+
maxKeys,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=list-objects-v2.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects-v2.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.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,4CAA4C,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAS7E;;;;;;;;;GASG;AACH,MAAM,OAAO,2BAA2B;IAIrB,OAAO,CAAoC;IAC3C,UAAU,CAAwB;IAClC,WAAW,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC7C,UAAU,CAAsB;IAChC,OAAO,CAA2B;IAEnD,YAAY,UAAiD;QAC3D,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,OAAgC,EAChC,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAEzE,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,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB;YAClD,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACpC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -7,6 +7,10 @@ import type { SimS3RequestOptions } from "../sim-s3-request-options.js";
|
|
|
7
7
|
export declare class SimS3ObjectCommands {
|
|
8
8
|
private readonly state;
|
|
9
9
|
constructor(state: SimS3BucketCommandState);
|
|
10
|
+
/**
|
|
11
|
+
* Change how many keys one page of a listing holds.
|
|
12
|
+
*/
|
|
13
|
+
configureMaxKeysPerPage(maxKeys: number): void;
|
|
10
14
|
/**
|
|
11
15
|
* Store an Object in a Bucket.
|
|
12
16
|
*/
|
|
@@ -27,5 +31,9 @@ export declare class SimS3ObjectCommands {
|
|
|
27
31
|
* List the Objects in a Bucket.
|
|
28
32
|
*/
|
|
29
33
|
list(command: simS3Commands.SimListObjectsCommand, options?: SimS3RequestOptions): Promise<simS3Commands.SimListObjectsCommandOutput>;
|
|
34
|
+
/**
|
|
35
|
+
* List the Objects in a Bucket, the way current tooling asks.
|
|
36
|
+
*/
|
|
37
|
+
listV2(command: simS3Commands.SimListObjectsV2Command, options?: SimS3RequestOptions): Promise<simS3Commands.SimListObjectsV2CommandOutput>;
|
|
30
38
|
}
|
|
31
39
|
//# sourceMappingURL=sim-s3-object-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-object-commands.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/object/sim-s3-object-commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sim-s3-object-commands.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/object/sim-s3-object-commands.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,KAAK,aAAa,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,YAAY,KAAK,EAAE,uBAAuB,EAEzC;IAED;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;IAED;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,aAAa,CAAC,mBAAmB,EAC1C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAKlD;IAED;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,aAAa,CAAC,mBAAmB,EAC1C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAKlD;IAED;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,aAAa,CAAC,sBAAsB,EAC7C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAKrD;IAED;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,aAAa,CAAC,uBAAuB,EAC9C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAKtD;IAED;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,aAAa,CAAC,qBAAqB,EAC5C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAKpD;IAED;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,aAAa,CAAC,uBAAuB,EAC9C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAKtD;CACF"}
|
|
@@ -2,6 +2,7 @@ import { DeleteObjectCommandHandler } from "../delete-object/delete-object.handl
|
|
|
2
2
|
import { DeleteObjectsCommandHandler } from "../delete-objects/delete-objects.handler.js";
|
|
3
3
|
import { GetObjectCommandHandler } from "../get-object/get-object.handler.js";
|
|
4
4
|
import { ListObjectsCommandHandler } from "../list-objects/list-objects.handler.js";
|
|
5
|
+
import { ListObjectsV2CommandHandler } from "../list-objects-v2/list-objects-v2.handler.js";
|
|
5
6
|
import { PutObjectCommandHandler } from "../put-object/put-object.handler.js";
|
|
6
7
|
/**
|
|
7
8
|
* The Object commands of one simulated S3 scope.
|
|
@@ -11,6 +12,12 @@ export class SimS3ObjectCommands {
|
|
|
11
12
|
constructor(state) {
|
|
12
13
|
this.state = state;
|
|
13
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Change how many keys one page of a listing holds.
|
|
17
|
+
*/
|
|
18
|
+
configureMaxKeysPerPage(maxKeys) {
|
|
19
|
+
this.state.listing.configureMaxKeysPerPage(maxKeys);
|
|
20
|
+
}
|
|
14
21
|
/**
|
|
15
22
|
* Store an Object in a Bucket.
|
|
16
23
|
*/
|
|
@@ -41,5 +48,11 @@ export class SimS3ObjectCommands {
|
|
|
41
48
|
async list(command, options) {
|
|
42
49
|
return await new ListObjectsCommandHandler(this.state).handle(command, options);
|
|
43
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* List the Objects in a Bucket, the way current tooling asks.
|
|
53
|
+
*/
|
|
54
|
+
async listV2(command, options) {
|
|
55
|
+
return await new ListObjectsV2CommandHandler(this.state).handle(command, options);
|
|
56
|
+
}
|
|
44
57
|
}
|
|
45
58
|
//# sourceMappingURL=sim-s3-object-commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-object-commands.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/object/sim-s3-object-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAK9E;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACb,KAAK,CAA0B;IAEhD,YAAY,KAA8B;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,OAA0C,EAC1C,OAA6B;QAE7B,OAAO,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACzD,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,OAA0C,EAC1C,OAA6B;QAE7B,OAAO,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACzD,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAA6C,EAC7C,OAA6B;QAE7B,OAAO,MAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC5D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,OAA8C,EAC9C,OAA6B;QAE7B,OAAO,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC7D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,OAA4C,EAC5C,OAA6B;QAE7B,OAAO,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC3D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"sim-s3-object-commands.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/object/sim-s3-object-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,+CAA+C,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAK9E;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACb,KAAK,CAA0B;IAEhD,YAAY,KAA8B;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,OAAe;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,OAA0C,EAC1C,OAA6B;QAE7B,OAAO,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACzD,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,OAA0C,EAC1C,OAA6B;QAE7B,OAAO,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACzD,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAA6C,EAC7C,OAA6B;QAE7B,OAAO,MAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC5D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,OAA8C,EAC9C,OAA6B;QAE7B,OAAO,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC7D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,OAA4C,EAC5C,OAA6B;QAE7B,OAAO,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC3D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAA8C,EAC9C,OAA6B;QAE7B,OAAO,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC7D,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { SimS3Object } from "../../object/s3-object.js";
|
|
2
2
|
import type { SimPutObjectCommand } from "./put-object.command.js";
|
|
3
|
+
import type { SimClock } from "../../../../util/clock/sim-clock.js";
|
|
4
|
+
interface PutObjectBuilderProperties {
|
|
5
|
+
readonly clock: SimClock;
|
|
6
|
+
}
|
|
3
7
|
/**
|
|
4
8
|
* Converts the supported PutObject request fields into a stored sim S3 Object.
|
|
5
9
|
*
|
|
@@ -15,12 +19,17 @@ import type { SimPutObjectCommand } from "./put-object.command.js";
|
|
|
15
19
|
* added here when the simulation gains support for them.
|
|
16
20
|
*/
|
|
17
21
|
export declare class PutObjectBuilder {
|
|
22
|
+
private readonly clock;
|
|
23
|
+
constructor(properties: PutObjectBuilderProperties);
|
|
18
24
|
/**
|
|
19
25
|
* Build the Object that will be written to Bucket storage.
|
|
20
26
|
*
|
|
21
27
|
* This method performs conversion only. Callers must complete request
|
|
22
28
|
* validation and authorization before invoking it so failed authorization
|
|
23
29
|
* cannot trigger body processing or lead to storage mutation.
|
|
30
|
+
*
|
|
31
|
+
* The Object is dated by the simulation's clock rather than the host's, so a
|
|
32
|
+
* test that freezes time gets a last-modified time it can assert on.
|
|
24
33
|
*/
|
|
25
34
|
build(command: SimPutObjectCommand): SimS3Object;
|
|
26
35
|
/**
|
|
@@ -51,4 +60,5 @@ export declare class PutObjectBuilder {
|
|
|
51
60
|
*/
|
|
52
61
|
private toBuffer;
|
|
53
62
|
}
|
|
63
|
+
export {};
|
|
54
64
|
//# sourceMappingURL=put-object-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put-object-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuB,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"put-object-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuB,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAEpE,UAAU,0BAA0B;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IAEjC,YAAY,UAAU,EAAE,0BAA0B,EAEjD;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,CAQ/C;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAclB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;CAiBjB"}
|
|
@@ -16,12 +16,19 @@ import { assertDefined } from "../../../../util/type-guard/defined.js";
|
|
|
16
16
|
* added here when the simulation gains support for them.
|
|
17
17
|
*/
|
|
18
18
|
export class PutObjectBuilder {
|
|
19
|
+
clock;
|
|
20
|
+
constructor(properties) {
|
|
21
|
+
this.clock = properties.clock;
|
|
22
|
+
}
|
|
19
23
|
/**
|
|
20
24
|
* Build the Object that will be written to Bucket storage.
|
|
21
25
|
*
|
|
22
26
|
* This method performs conversion only. Callers must complete request
|
|
23
27
|
* validation and authorization before invoking it so failed authorization
|
|
24
28
|
* cannot trigger body processing or lead to storage mutation.
|
|
29
|
+
*
|
|
30
|
+
* The Object is dated by the simulation's clock rather than the host's, so a
|
|
31
|
+
* test that freezes time gets a last-modified time it can assert on.
|
|
25
32
|
*/
|
|
26
33
|
build(command) {
|
|
27
34
|
assertDefined(command.input.Key, "PutObjectCommand.input.Key");
|
|
@@ -29,6 +36,7 @@ export class PutObjectBuilder {
|
|
|
29
36
|
key: command.input.Key,
|
|
30
37
|
body: this.toBuffer(command.input.Body),
|
|
31
38
|
metadata: new SimS3ObjectMetadata(this.toMetadata(command)),
|
|
39
|
+
lastModified: this.clock.now(),
|
|
32
40
|
});
|
|
33
41
|
}
|
|
34
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put-object-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"put-object-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAOvE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAW;IAEjC,YAAY,UAAsC;QAChD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAChC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAA4B;QAChC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QAC/D,OAAO,IAAI,WAAW,CAAC;YACrB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;YACtB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACvC,QAAQ,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3D,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACK,UAAU,CAAC,OAA4B;QAC7C,MAAM,QAAQ,GAA2B,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEvE,KAAK,MAAM,MAAM,IAAI,0BAA0B,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAEhE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACK,eAAe,CACrB,KAAgC;QAEhC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACK,QAAQ,CAAC,IAA0C;QACzD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -29,8 +29,12 @@ export interface SimPutObjectCommandInput {
|
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Minimal structural sim S3 PutObject output.
|
|
32
|
+
*
|
|
33
|
+
* `ETag` is the quoted MD5 of the body S3 has just stored, which is what a
|
|
34
|
+
* caller keeps to recognise the same content later without reading it back.
|
|
32
35
|
*/
|
|
33
36
|
export interface SimPutObjectCommandOutput {
|
|
37
|
+
readonly ETag?: string;
|
|
34
38
|
readonly $metadata: SimResponseMetadata;
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put-object.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-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;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACrC;AAED
|
|
1
|
+
{"version":3,"file":"put-object.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-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;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,UAAU,GACV,MAAM,GACN,IAAI,GACJ,QAAQ,GACR,cAAc,CAAC,UAAU,CAAC,GAC1B,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put-object.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"put-object.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAGxF,UAAU,iCAAiC;IACzC,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,aAAa,EAAE,mBAAmB,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,cAAc,CAC5D,mBAAmB,EACnB,yBAAyB,CAC1B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IAEpD,YAAY,UAAU,EAAE,iCAAiC,EAWxD;IAED;;;;;;;;;;;OAWG;IACG,MAAM,CACV,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,yBAAyB,CAAC,CA8BpC;CACF"}
|
|
@@ -4,6 +4,7 @@ import { SimS3NoSuchBucket } from "../../error/sim-s3.error.js";
|
|
|
4
4
|
import { SimIamAllowAllAuth, } from "../../../iam/authorize/sim-iam-inter-service-auth-z.js";
|
|
5
5
|
import { PutObjectAuthorizer } from "./put-object-authorizer.js";
|
|
6
6
|
import { PutObjectBuilder } from "./put-object-builder.js";
|
|
7
|
+
import { simS3QuotedETag } from "../../object/s3-object-etag.js";
|
|
7
8
|
/**
|
|
8
9
|
* Simulated S3 PutObjectCommand handler.
|
|
9
10
|
*
|
|
@@ -12,7 +13,7 @@ import { PutObjectBuilder } from "./put-object-builder.js";
|
|
|
12
13
|
export class PutObjectCommandHandler {
|
|
13
14
|
buckets;
|
|
14
15
|
authorizer;
|
|
15
|
-
objectBuilder
|
|
16
|
+
objectBuilder;
|
|
16
17
|
background;
|
|
17
18
|
notifications;
|
|
18
19
|
constructor(properties) {
|
|
@@ -20,6 +21,7 @@ export class PutObjectCommandHandler {
|
|
|
20
21
|
this.buckets = buckets;
|
|
21
22
|
this.authorizer = new PutObjectAuthorizer({ iam });
|
|
22
23
|
this.background = background;
|
|
24
|
+
this.objectBuilder = new PutObjectBuilder({ clock: background });
|
|
23
25
|
this.notifications = properties.notifications;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
@@ -51,6 +53,7 @@ export class PutObjectCommandHandler {
|
|
|
51
53
|
// an intercepted SDK client and the REST endpoint alike.
|
|
52
54
|
this.notifications.objectCreated({ bucket, object, caller });
|
|
53
55
|
return {
|
|
56
|
+
ETag: simS3QuotedETag(object.etag),
|
|
54
57
|
$metadata: {},
|
|
55
58
|
};
|
|
56
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put-object.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"put-object.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AASjE;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAIjB,OAAO,CAAoC;IAC3C,UAAU,CAAsB;IAChC,aAAa,CAAmB;IAChC,UAAU,CAAsB;IAChC,aAAa,CAAsB;IAEpD,YAAY,UAA6C;QACvD,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,GACnC,GAAG,UAAU,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;IAChD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CACV,OAA4B,EAC5B,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QACrE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QAE/D,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,oEAAoE;QACpE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CACtC,MAAM,EACN,OAAO,CAAC,KAAK,CAAC,GAAG,EACjB,OAAO,CACR,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,0EAA0E;QAC1E,yDAAyD;QACzD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;YAClC,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -3,6 +3,7 @@ import type { SimIamInterServiceAuthZ } from "../../iam/authorize/sim-iam-inter-
|
|
|
3
3
|
import type { SimS3Bucket, SimS3BucketName } from "../bucket/sim-s3-bucket.js";
|
|
4
4
|
import type { SimS3NotificationDestinations } from "../notification/destination/sim-s3-notification-destination.js";
|
|
5
5
|
import type { SimS3ObjectNotifier } from "../notification/sim-s3-object-notifier.js";
|
|
6
|
+
import type { SimS3ObjectListingLimits } from "../object/s3-object-listing-limits.js";
|
|
6
7
|
/**
|
|
7
8
|
* The state and collaborators every Bucket-scoped command handler is built
|
|
8
9
|
* with.
|
|
@@ -11,7 +12,8 @@ import type { SimS3ObjectNotifier } from "../notification/sim-s3-object-notifier
|
|
|
11
12
|
* runs, so the same Bucket map, IAM and background scheduler are shared across
|
|
12
13
|
* every command of one simulated S3 scope. The notifier is shared for the same
|
|
13
14
|
* reason and one more: sequence numbers and the delivery ceiling only mean
|
|
14
|
-
* anything if every Object command counts into the same one.
|
|
15
|
+
* anything if every Object command counts into the same one. So is the page
|
|
16
|
+
* size of a listing, so that both versions of the operation agree on it.
|
|
15
17
|
*/
|
|
16
18
|
export interface SimS3BucketCommandState {
|
|
17
19
|
readonly buckets: Map<SimS3BucketName, SimS3Bucket>;
|
|
@@ -19,5 +21,6 @@ export interface SimS3BucketCommandState {
|
|
|
19
21
|
readonly background: BackgroundScheduler;
|
|
20
22
|
readonly notificationDestinations: SimS3NotificationDestinations;
|
|
21
23
|
readonly notifications: SimS3ObjectNotifier;
|
|
24
|
+
readonly listing: SimS3ObjectListingLimits;
|
|
22
25
|
}
|
|
23
26
|
//# sourceMappingURL=sim-s3-bucket-command-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-bucket-command-state.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/command/sim-s3-bucket-command-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;AACpH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-bucket-command-state.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/command/sim-s3-bucket-command-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;AACpH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEtF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,uBAAuB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;IACjE,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C"}
|
|
@@ -15,7 +15,8 @@ export type { SimGetBucketNotificationConfigurationCommand, SimGetBucketNotifica
|
|
|
15
15
|
export type { SimGetObjectCommand, SimGetObjectCommandOutput, } from "./get-object/get-object.command.js";
|
|
16
16
|
export type { SimGetPublicAccessBlockCommand, SimGetPublicAccessBlockCommandOutput, } from "./get-public-access-block/get-public-access-block.command.js";
|
|
17
17
|
export type { SimListBucketsCommand, SimListBucketsCommandOutput, } from "./list-buckets/list-buckets.command.js";
|
|
18
|
-
export type { SimListObjectsCommand, SimListObjectsCommandOutput, } from "./list-objects/list-objects.command.js";
|
|
18
|
+
export type { SimListObjectsCommand, SimListObjectsCommandOutput, SimS3ObjectSummary, } from "./list-objects/list-objects.command.js";
|
|
19
|
+
export type { SimListObjectsV2Command, SimListObjectsV2CommandOutput, } from "./list-objects-v2/list-objects-v2.command.js";
|
|
19
20
|
export type { SimPutBucketNotificationConfigurationCommand, SimPutBucketNotificationConfigurationCommandOutput, } from "./put-bucket-notification-configuration/put-bucket-notification-configuration.command.js";
|
|
20
21
|
export type { SimPutBucketPolicyCommand, SimPutBucketPolicyCommandOutput, } from "./put-bucket-policy/put-bucket-policy.command.js";
|
|
21
22
|
export type { SimPutBucketWebsiteCommand, SimPutBucketWebsiteCommandOutput, } from "./put-bucket-website/put-bucket-website.command.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-command.types.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/command/sim-s3-command.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,4BAA4B,EAC5B,kCAAkC,GACnC,MAAM,wDAAwD,CAAC;AAChE,YAAY,EACV,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,4CAA4C,CAAC;AACpD,YAAY,EACV,iCAAiC,EACjC,uCAAuC,GACxC,MAAM,oEAAoE,CAAC;AAC5E,YAAY,EACV,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,kDAAkD,CAAC;AAC1D,YAAY,EACV,4CAA4C,EAC5C,kDAAkD,GACnD,MAAM,0FAA0F,CAAC;AAClG,YAAY,EACV,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,8BAA8B,EAC9B,oCAAoC,GACrC,MAAM,8DAA8D,CAAC;AACtE,YAAY,EACV,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,qBAAqB,EACrB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"sim-s3-command.types.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/command/sim-s3-command.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,4BAA4B,EAC5B,kCAAkC,GACnC,MAAM,wDAAwD,CAAC;AAChE,YAAY,EACV,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,4CAA4C,CAAC;AACpD,YAAY,EACV,iCAAiC,EACjC,uCAAuC,GACxC,MAAM,oEAAoE,CAAC;AAC5E,YAAY,EACV,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,kDAAkD,CAAC;AAC1D,YAAY,EACV,4CAA4C,EAC5C,kDAAkD,GACnD,MAAM,0FAA0F,CAAC;AAClG,YAAY,EACV,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,8BAA8B,EAC9B,oCAAoC,GACrC,MAAM,8DAA8D,CAAC;AACtE,YAAY,EACV,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACV,4CAA4C,EAC5C,kDAAkD,GACnD,MAAM,0FAA0F,CAAC;AAClG,YAAY,EACV,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,kDAAkD,CAAC;AAC1D,YAAY,EACV,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,oDAAoD,CAAC;AAC5D,YAAY,EACV,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,8BAA8B,EAC9B,oCAAoC,GACrC,MAAM,8DAA8D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-object-event-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/notification/event/sim-s3-object-event-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AAErG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-object-event-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/notification/event/sim-s3-object-event-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AAErG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,UAAU,iCAAiC;IACzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAE1D,YAAY,UAAU,EAAE,iCAAiC,EAExD;IAED;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,uBAAuB,GAAG,gBAAgB,CAS3D;IAED;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,uBAAuB,GAAG,gBAAgB,CAO3D;IAED,OAAO,CAAC,KAAK;CAmBd"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { simS3BucketArn } from "../../bucket/sim-s3-bucket-arn.js";
|
|
2
2
|
import { SimS3ObjectSequencers } from "../sim-s3-object-sequencers.js";
|
|
3
3
|
import { simS3EventPrincipalId } from "./sim-s3-event-principal.js";
|
|
4
|
-
import { simS3ObjectETag } from "./sim-s3-object-etag.js";
|
|
5
4
|
import { SimS3ObjectEvent } from "./sim-s3-object-event.js";
|
|
6
5
|
/**
|
|
7
6
|
* Turns something that happened to an Object into the event a destination is
|
|
@@ -28,7 +27,7 @@ export class SimS3ObjectEventBuilder {
|
|
|
28
27
|
key: input.object.key,
|
|
29
28
|
caller: input.caller,
|
|
30
29
|
size: input.object.body.length,
|
|
31
|
-
eTag:
|
|
30
|
+
eTag: input.object.etag,
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-object-event-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/notification/event/sim-s3-object-event-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sim-s3-object-event-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/notification/event/sim-s3-object-event-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAqC5D;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAuB;IACjB,KAAK,CAAW;IAChB,UAAU,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAE1D,YAAY,UAA6C;QACvD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,KAA8B;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,sBAAsB;YACjC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;YAC9B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,KAA8B;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,yBAAyB;YACpC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,MAA8B;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QAE5C,OAAO,IAAI,gBAAgB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,uEAAuE;YACvE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YAC3B,UAAU;YACV,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC;YACrC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,cAAc,EAAE,KAAK,CAAC,SAAS;YAC/B,WAAW,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC;YACjD,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC;YACvD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ETag real S3 gives an Object uploaded in one part.
|
|
3
|
+
*
|
|
4
|
+
* It is the MD5 of the bytes, in hex, and stays that under SSE-S3. An Object
|
|
5
|
+
* uploaded in several parts gets `<md5-of-the-part-md5s>-<partCount>` instead,
|
|
6
|
+
* which is why a tool comparing content hashes checks for the `-N` suffix
|
|
7
|
+
* before trusting an ETag. Simulated S3 has no multipart upload, so an ETag
|
|
8
|
+
* here never carries one.
|
|
9
|
+
*/
|
|
10
|
+
export declare function simS3ObjectETag(body: Buffer): string;
|
|
11
|
+
/**
|
|
12
|
+
* The ETag as a response carries it, which real S3 quotes.
|
|
13
|
+
*
|
|
14
|
+
* S3 is inconsistent about this, and deliberately so: on the wire an ETag is an
|
|
15
|
+
* HTTP entity tag and keeps its quotes, which the SDK hands to the caller
|
|
16
|
+
* unchanged, while the `eTag` of an Object event notification record does not.
|
|
17
|
+
* Holding the digest and quoting it on the way out keeps both of them right.
|
|
18
|
+
*/
|
|
19
|
+
export declare function simS3QuotedETag(etag: string): string;
|
|
20
|
+
//# sourceMappingURL=s3-object-etag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-etag.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-etag.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* The ETag real S3 gives an Object uploaded in one part.
|
|
4
|
+
*
|
|
5
|
+
* It is the MD5 of the bytes, in hex, and stays that under SSE-S3. An Object
|
|
6
|
+
* uploaded in several parts gets `<md5-of-the-part-md5s>-<partCount>` instead,
|
|
7
|
+
* which is why a tool comparing content hashes checks for the `-N` suffix
|
|
8
|
+
* before trusting an ETag. Simulated S3 has no multipart upload, so an ETag
|
|
9
|
+
* here never carries one.
|
|
10
|
+
*/
|
|
11
|
+
export function simS3ObjectETag(body) {
|
|
12
|
+
return createHash("md5").update(body).digest("hex");
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The ETag as a response carries it, which real S3 quotes.
|
|
16
|
+
*
|
|
17
|
+
* S3 is inconsistent about this, and deliberately so: on the wire an ETag is an
|
|
18
|
+
* HTTP entity tag and keeps its quotes, which the SDK hands to the caller
|
|
19
|
+
* unchanged, while the `eTag` of an Object event notification record does not.
|
|
20
|
+
* Holding the digest and quoting it on the way out keeps both of them right.
|
|
21
|
+
*/
|
|
22
|
+
export function simS3QuotedETag(etag) {
|
|
23
|
+
return `"${etag}"`;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=s3-object-etag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-etag.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-etag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,IAAI,GAAG,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much of a Bucket one page of an Object listing may return.
|
|
3
|
+
*
|
|
4
|
+
* Real S3 fixes this at a thousand keys and gives nobody a way to change it.
|
|
5
|
+
* The simulation keeps that default and does allow it to be changed, because a
|
|
6
|
+
* caller that never continues a listing is a caller whose pagination has never
|
|
7
|
+
* run, and provoking one honestly would mean storing a thousand and one
|
|
8
|
+
* Objects first.
|
|
9
|
+
*
|
|
10
|
+
* It lives on the shared command state rather than being handed to each
|
|
11
|
+
* listing, so both versions of the operation see the same page size and a
|
|
12
|
+
* change reaches whichever of them the caller uses.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SimS3ObjectListingLimits {
|
|
15
|
+
private maxKeys;
|
|
16
|
+
constructor(maxKeysPerPage?: number);
|
|
17
|
+
/**
|
|
18
|
+
* The most keys a page of a listing will hold.
|
|
19
|
+
*/
|
|
20
|
+
get maxKeysPerPage(): number;
|
|
21
|
+
/**
|
|
22
|
+
* Change how many keys a page of a listing holds from here on.
|
|
23
|
+
*/
|
|
24
|
+
configureMaxKeysPerPage(maxKeys: number): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=s3-object-listing-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-listing-limits.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-listing-limits.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,cAAc,GAAE,MAAmC,EAE9D;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { simS3DefaultMaxKeysPerPage } from "./s3-object-listing.js";
|
|
2
|
+
/**
|
|
3
|
+
* How much of a Bucket one page of an Object listing may return.
|
|
4
|
+
*
|
|
5
|
+
* Real S3 fixes this at a thousand keys and gives nobody a way to change it.
|
|
6
|
+
* The simulation keeps that default and does allow it to be changed, because a
|
|
7
|
+
* caller that never continues a listing is a caller whose pagination has never
|
|
8
|
+
* run, and provoking one honestly would mean storing a thousand and one
|
|
9
|
+
* Objects first.
|
|
10
|
+
*
|
|
11
|
+
* It lives on the shared command state rather than being handed to each
|
|
12
|
+
* listing, so both versions of the operation see the same page size and a
|
|
13
|
+
* change reaches whichever of them the caller uses.
|
|
14
|
+
*/
|
|
15
|
+
export class SimS3ObjectListingLimits {
|
|
16
|
+
maxKeys;
|
|
17
|
+
constructor(maxKeysPerPage = simS3DefaultMaxKeysPerPage) {
|
|
18
|
+
this.maxKeys = usableMaxKeysPerPage(maxKeysPerPage);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The most keys a page of a listing will hold.
|
|
22
|
+
*/
|
|
23
|
+
get maxKeysPerPage() {
|
|
24
|
+
return this.maxKeys;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Change how many keys a page of a listing holds from here on.
|
|
28
|
+
*/
|
|
29
|
+
configureMaxKeysPerPage(maxKeys) {
|
|
30
|
+
this.maxKeys = usableMaxKeysPerPage(maxKeys);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Refuse a page size no listing could return anything from.
|
|
35
|
+
*
|
|
36
|
+
* A cap below one key leaves every listing empty and truncated, which looks
|
|
37
|
+
* like a Bucket problem rather than the configuration mistake it is.
|
|
38
|
+
*/
|
|
39
|
+
function usableMaxKeysPerPage(maxKeys) {
|
|
40
|
+
if (!Number.isSafeInteger(maxKeys) || maxKeys < 1) {
|
|
41
|
+
throw new Error(`Simulated S3 needs a whole number of keys per listing page, ` +
|
|
42
|
+
`of at least one, rather than ${maxKeys}`);
|
|
43
|
+
}
|
|
44
|
+
return maxKeys;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=s3-object-listing-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-listing-limits.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-listing-limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IAC3B,OAAO,CAAS;IAExB,YAAY,cAAc,GAAW,0BAA0B;QAC7D,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,OAAe;QACrC,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,gCAAgC,OAAO,EAAE,CAC5C,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|