@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.
Files changed (125) hide show
  1. package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.d.ts.map +1 -1
  2. package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +7 -1
  3. package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js.map +1 -1
  4. package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +16 -0
  5. package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts.map +1 -1
  6. package/dist/service/s3/bucket/sim-s3-bucket-access.js +22 -1
  7. package/dist/service/s3/bucket/sim-s3-bucket-access.js.map +1 -1
  8. package/dist/service/s3/command/get-object/get-object-loader.d.ts +2 -1
  9. package/dist/service/s3/command/get-object/get-object-loader.d.ts.map +1 -1
  10. package/dist/service/s3/command/get-object/get-object-loader.js +5 -1
  11. package/dist/service/s3/command/get-object/get-object-loader.js.map +1 -1
  12. package/dist/service/s3/command/get-object/get-object.command.d.ts +5 -0
  13. package/dist/service/s3/command/get-object/get-object.command.d.ts.map +1 -1
  14. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +3 -3
  15. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts.map +1 -1
  16. package/dist/service/s3/command/list-objects/list-objects-page-builder.js +13 -17
  17. package/dist/service/s3/command/list-objects/list-objects-page-builder.js.map +1 -1
  18. package/dist/service/s3/command/list-objects/list-objects.command.d.ts +3 -8
  19. package/dist/service/s3/command/list-objects/list-objects.command.d.ts.map +1 -1
  20. package/dist/service/s3/command/list-objects/list-objects.handler.d.ts +3 -0
  21. package/dist/service/s3/command/list-objects/list-objects.handler.d.ts.map +1 -1
  22. package/dist/service/s3/command/list-objects/list-objects.handler.js +6 -2
  23. package/dist/service/s3/command/list-objects/list-objects.handler.js.map +1 -1
  24. package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.d.ts +20 -0
  25. package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.d.ts.map +1 -0
  26. package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.js +29 -0
  27. package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.js.map +1 -0
  28. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +31 -0
  29. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts.map +1 -0
  30. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +48 -0
  31. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js.map +1 -0
  32. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +41 -0
  33. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts.map +1 -0
  34. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.js +2 -0
  35. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.js.map +1 -0
  36. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts +41 -0
  37. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts.map +1 -0
  38. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +64 -0
  39. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js.map +1 -0
  40. package/dist/service/s3/command/object/sim-s3-object-commands.d.ts +8 -0
  41. package/dist/service/s3/command/object/sim-s3-object-commands.d.ts.map +1 -1
  42. package/dist/service/s3/command/object/sim-s3-object-commands.js +13 -0
  43. package/dist/service/s3/command/object/sim-s3-object-commands.js.map +1 -1
  44. package/dist/service/s3/command/put-object/put-object-builder.d.ts +10 -0
  45. package/dist/service/s3/command/put-object/put-object-builder.d.ts.map +1 -1
  46. package/dist/service/s3/command/put-object/put-object-builder.js +8 -0
  47. package/dist/service/s3/command/put-object/put-object-builder.js.map +1 -1
  48. package/dist/service/s3/command/put-object/put-object.command.d.ts +4 -0
  49. package/dist/service/s3/command/put-object/put-object.command.d.ts.map +1 -1
  50. package/dist/service/s3/command/put-object/put-object.handler.d.ts.map +1 -1
  51. package/dist/service/s3/command/put-object/put-object.handler.js +4 -1
  52. package/dist/service/s3/command/put-object/put-object.handler.js.map +1 -1
  53. package/dist/service/s3/command/sim-s3-bucket-command-state.d.ts +4 -1
  54. package/dist/service/s3/command/sim-s3-bucket-command-state.d.ts.map +1 -1
  55. package/dist/service/s3/command/sim-s3-command.types.d.ts +2 -1
  56. package/dist/service/s3/command/sim-s3-command.types.d.ts.map +1 -1
  57. package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts.map +1 -1
  58. package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +1 -2
  59. package/dist/service/s3/notification/event/sim-s3-object-event-builder.js.map +1 -1
  60. package/dist/service/s3/object/s3-object-etag.d.ts +20 -0
  61. package/dist/service/s3/object/s3-object-etag.d.ts.map +1 -0
  62. package/dist/service/s3/object/s3-object-etag.js +25 -0
  63. package/dist/service/s3/object/s3-object-etag.js.map +1 -0
  64. package/dist/service/s3/object/s3-object-listing-limits.d.ts +26 -0
  65. package/dist/service/s3/object/s3-object-listing-limits.d.ts.map +1 -0
  66. package/dist/service/s3/object/s3-object-listing-limits.js +46 -0
  67. package/dist/service/s3/object/s3-object-listing-limits.js.map +1 -0
  68. package/dist/service/s3/object/s3-object-listing.d.ts +51 -0
  69. package/dist/service/s3/object/s3-object-listing.d.ts.map +1 -0
  70. package/dist/service/s3/object/s3-object-listing.js +64 -0
  71. package/dist/service/s3/object/s3-object-listing.js.map +1 -0
  72. package/dist/service/s3/object/s3-object-response-headers.d.ts +23 -6
  73. package/dist/service/s3/object/s3-object-response-headers.d.ts.map +1 -1
  74. package/dist/service/s3/object/s3-object-response-headers.js +18 -8
  75. package/dist/service/s3/object/s3-object-response-headers.js.map +1 -1
  76. package/dist/service/s3/object/s3-object-summary.d.ts +33 -0
  77. package/dist/service/s3/object/s3-object-summary.d.ts.map +1 -0
  78. package/dist/service/s3/object/s3-object-summary.js +40 -0
  79. package/dist/service/s3/object/s3-object-summary.js.map +1 -0
  80. package/dist/service/s3/object/s3-object.d.ts +25 -0
  81. package/dist/service/s3/object/s3-object.d.ts.map +1 -1
  82. package/dist/service/s3/object/s3-object.js +31 -1
  83. package/dist/service/s3/object/s3-object.js.map +1 -1
  84. package/dist/service/s3/sdk/sim-s3-sdk-command-router.d.ts.map +1 -1
  85. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +4 -0
  86. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js.map +1 -1
  87. package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts.map +1 -1
  88. package/dist/service/s3/serve/sim-s3-rest-object-reader.js +6 -1
  89. package/dist/service/s3/serve/sim-s3-rest-object-reader.js.map +1 -1
  90. package/dist/service/s3/serve/website/sim-s3-website-object-loader.d.ts.map +1 -1
  91. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +6 -1
  92. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js.map +1 -1
  93. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +13 -4
  94. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts.map +1 -1
  95. package/dist/service/s3/serve/website/sim-s3-website-object.js +15 -6
  96. package/dist/service/s3/serve/website/sim-s3-website-object.js.map +1 -1
  97. package/dist/service/s3/sim-s3-commands.d.ts +6 -0
  98. package/dist/service/s3/sim-s3-commands.d.ts.map +1 -1
  99. package/dist/service/s3/sim-s3-commands.js +2 -0
  100. package/dist/service/s3/sim-s3-commands.js.map +1 -1
  101. package/dist/service/s3/sim-s3.d.ts +24 -34
  102. package/dist/service/s3/sim-s3.d.ts.map +1 -1
  103. package/dist/service/s3/sim-s3.js +32 -40
  104. package/dist/service/s3/sim-s3.js.map +1 -1
  105. package/dist/service/s3/storage/filesystem/filesystem-path-exists.d.ts +8 -0
  106. package/dist/service/s3/storage/filesystem/filesystem-path-exists.d.ts.map +1 -1
  107. package/dist/service/s3/storage/filesystem/filesystem-path-exists.js +11 -1
  108. package/dist/service/s3/storage/filesystem/filesystem-path-exists.js.map +1 -1
  109. package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.d.ts +19 -0
  110. package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.d.ts.map +1 -0
  111. package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.js +55 -0
  112. package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.js.map +1 -0
  113. package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.d.ts +14 -4
  114. package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.d.ts.map +1 -1
  115. package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.js +27 -5
  116. package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.js.map +1 -1
  117. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +1 -2
  118. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts.map +1 -1
  119. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +10 -36
  120. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js.map +1 -1
  121. package/package.json +1 -1
  122. package/dist/service/s3/notification/event/sim-s3-object-etag.d.ts +0 -8
  123. package/dist/service/s3/notification/event/sim-s3-object-etag.d.ts.map +0 -1
  124. package/dist/service/s3/notification/event/sim-s3-object-etag.js +0 -11
  125. 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":"AAKA,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;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;CACF"}
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;AAGnE;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,CAO/C;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAclB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;CAiBjB"}
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;AAEvE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;;;OAMG;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;SAC5D,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"}
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;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,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
+ {"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;AAExF,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,CAA0B;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IAEpD,YAAY,UAAU,EAAE,iCAAiC,EAUxD;IAED;;;;;;;;;;;OAWG;IACG,MAAM,CACV,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,yBAAyB,CAAC,CA6BpC;CACF"}
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 = new PutObjectBuilder();
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;AAU3D;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAIjB,OAAO,CAAoC;IAC3C,UAAU,CAAsB;IAChC,aAAa,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACvC,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,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,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
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;AAErF;;;;;;;;;GASG;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;CAC7C"}
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,GAC5B,MAAM,wCAAwC,CAAC;AAChD,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
+ {"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;AAI7D,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
+ {"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: simS3ObjectETag(input.object.body),
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,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,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,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;SACzC,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"}
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"}