@aws-sdk/middleware-sdk-s3-control 3.34.0 → 3.38.0

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 (59) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist-cjs/configurations.js +14 -0
  3. package/dist-cjs/constants.js +8 -0
  4. package/{dist/cjs → dist-cjs}/index.js +0 -1
  5. package/{dist/cjs → dist-cjs}/process-arnables-plugin/index.js +0 -1
  6. package/dist-cjs/process-arnables-plugin/parse-outpost-arnables.js +94 -0
  7. package/dist-cjs/process-arnables-plugin/plugin.js +12 -0
  8. package/dist-cjs/process-arnables-plugin/update-arnables-request.js +38 -0
  9. package/dist-cjs/redirect-from-postid.js +29 -0
  10. package/dist-es/configurations.js +6 -0
  11. package/dist-es/constants.js +5 -0
  12. package/{dist/types/index.d.ts → dist-es/index.js} +0 -0
  13. package/{dist/types/process-arnables-plugin/index.d.ts → dist-es/process-arnables-plugin/index.js} +0 -0
  14. package/dist-es/process-arnables-plugin/parse-outpost-arnables.js +107 -0
  15. package/dist-es/process-arnables-plugin/plugin.js +8 -0
  16. package/dist-es/process-arnables-plugin/update-arnables-request.js +40 -0
  17. package/dist-es/redirect-from-postid.js +29 -0
  18. package/{dist/types → dist-types}/configurations.d.ts +0 -0
  19. package/{dist/types → dist-types}/constants.d.ts +0 -0
  20. package/dist-types/index.d.ts +3 -0
  21. package/{src/process-arnables-plugin/index.ts → dist-types/process-arnables-plugin/index.d.ts} +1 -5
  22. package/{dist/types → dist-types}/process-arnables-plugin/parse-outpost-arnables.d.ts +0 -0
  23. package/{dist/types → dist-types}/process-arnables-plugin/plugin.d.ts +0 -0
  24. package/{dist/types → dist-types}/process-arnables-plugin/update-arnables-request.d.ts +0 -0
  25. package/{dist/types → dist-types}/redirect-from-postid.d.ts +0 -0
  26. package/dist-types/ts3.4/configurations.d.ts +26 -0
  27. package/{dist/types → dist-types}/ts3.4/constants.d.ts +0 -0
  28. package/{dist/types → dist-types}/ts3.4/index.d.ts +0 -0
  29. package/{dist/types → dist-types}/ts3.4/process-arnables-plugin/index.d.ts +0 -0
  30. package/{dist/types → dist-types}/ts3.4/process-arnables-plugin/parse-outpost-arnables.d.ts +1 -5
  31. package/{dist/types → dist-types}/ts3.4/process-arnables-plugin/plugin.d.ts +0 -0
  32. package/{dist/types → dist-types}/ts3.4/process-arnables-plugin/update-arnables-request.d.ts +1 -4
  33. package/{dist/types → dist-types}/ts3.4/redirect-from-postid.d.ts +1 -4
  34. package/package.json +15 -12
  35. package/dist/cjs/configurations.js +0 -15
  36. package/dist/cjs/constants.js +0 -9
  37. package/dist/cjs/process-arnables-plugin/parse-outpost-arnables.js +0 -95
  38. package/dist/cjs/process-arnables-plugin/plugin.js +0 -13
  39. package/dist/cjs/process-arnables-plugin/update-arnables-request.js +0 -39
  40. package/dist/cjs/redirect-from-postid.js +0 -30
  41. package/dist/es/configurations.js +0 -7
  42. package/dist/es/constants.js +0 -6
  43. package/dist/es/index.js +0 -4
  44. package/dist/es/process-arnables-plugin/index.js +0 -4
  45. package/dist/es/process-arnables-plugin/parse-outpost-arnables.js +0 -121
  46. package/dist/es/process-arnables-plugin/plugin.js +0 -9
  47. package/dist/es/process-arnables-plugin/update-arnables-request.js +0 -46
  48. package/dist/es/redirect-from-postid.js +0 -34
  49. package/dist/types/ts3.4/configurations.d.ts +0 -42
  50. package/src/configurations.ts +0 -55
  51. package/src/constants.ts +0 -5
  52. package/src/index.ts +0 -9
  53. package/src/process-arnables-plugin/parse-outpost-arnables.ts +0 -152
  54. package/src/process-arnables-plugin/plugin.ts +0 -12
  55. package/src/process-arnables-plugin/update-arnables-request.ts +0 -49
  56. package/src/redirect-from-postid.ts +0 -40
  57. package/tsconfig.cjs.json +0 -9
  58. package/tsconfig.es.json +0 -10
  59. package/tsconfig.types.json +0 -9
package/CHANGELOG.md CHANGED
@@ -3,6 +3,41 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.38.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.37.0...v3.38.0) (2021-10-22)
7
+
8
+ **Note:** Version bump only for package @aws-sdk/middleware-sdk-s3-control
9
+
10
+
11
+
12
+
13
+
14
+ # [3.37.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.36.1...v3.37.0) (2021-10-15)
15
+
16
+ **Note:** Version bump only for package @aws-sdk/middleware-sdk-s3-control
17
+
18
+
19
+
20
+
21
+
22
+ # [3.36.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.35.0...v3.36.0) (2021-10-08)
23
+
24
+
25
+ ### Features
26
+
27
+ * publish files in dist-* only ([#2873](https://github.com/aws/aws-sdk-js-v3/issues/2873)) ([53b4243](https://github.com/aws/aws-sdk-js-v3/commit/53b4243b066f25ff2412d5f0dea1036054b2df32))
28
+
29
+
30
+
31
+
32
+
33
+ # [3.35.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.34.0...v3.35.0) (2021-10-04)
34
+
35
+ **Note:** Version bump only for package @aws-sdk/middleware-sdk-s3-control
36
+
37
+
38
+
39
+
40
+
6
41
  # [3.34.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.33.0...v3.34.0) (2021-09-24)
7
42
 
8
43
 
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveS3ControlConfig = exports.NODE_USE_ARN_REGION_CONFIG_OPTIONS = void 0;
4
+ var middleware_bucket_endpoint_1 = require("@aws-sdk/middleware-bucket-endpoint");
5
+ Object.defineProperty(exports, "NODE_USE_ARN_REGION_CONFIG_OPTIONS", { enumerable: true, get: function () { return middleware_bucket_endpoint_1.NODE_USE_ARN_REGION_CONFIG_OPTIONS; } });
6
+ function resolveS3ControlConfig(input) {
7
+ const { useDualstackEndpoint = false, useArnRegion = false } = input;
8
+ return {
9
+ ...input,
10
+ useDualstackEndpoint,
11
+ useArnRegion: typeof useArnRegion === "function" ? useArnRegion : () => Promise.resolve(useArnRegion),
12
+ };
13
+ }
14
+ exports.resolveS3ControlConfig = resolveS3ControlConfig;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONTEXT_SIGNING_REGION = exports.CONTEXT_SIGNING_SERVICE = exports.CONTEXT_ARN_REGION = exports.CONTEXT_ACCOUNT_ID = exports.CONTEXT_OUTPOST_ID = void 0;
4
+ exports.CONTEXT_OUTPOST_ID = "outpost_id";
5
+ exports.CONTEXT_ACCOUNT_ID = "account_id";
6
+ exports.CONTEXT_ARN_REGION = "outpost_arn_region";
7
+ exports.CONTEXT_SIGNING_SERVICE = "signing_service";
8
+ exports.CONTEXT_SIGNING_REGION = "signing_region";
@@ -10,4 +10,3 @@ Object.defineProperty(exports, "updateArnablesRequestMiddleware", { enumerable:
10
10
  Object.defineProperty(exports, "updateArnablesRequestMiddlewareOptions", { enumerable: true, get: function () { return process_arnables_plugin_1.updateArnablesRequestMiddlewareOptions; } });
11
11
  Object.defineProperty(exports, "getProcessArnablesPlugin", { enumerable: true, get: function () { return process_arnables_plugin_1.getProcessArnablesPlugin; } });
12
12
  tslib_1.__exportStar(require("./redirect-from-postid"), exports);
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDJEQUFpQztBQUNqQyxxRUFNbUM7QUFMakMsMElBQUEsK0JBQStCLE9BQUE7QUFDL0IsaUpBQUEsc0NBQXNDLE9BQUE7QUFDdEMsMElBQUEsK0JBQStCLE9BQUE7QUFDL0IsaUpBQUEsc0NBQXNDLE9BQUE7QUFDdEMsbUlBQUEsd0JBQXdCLE9BQUE7QUFFMUIsaUVBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29uZmlndXJhdGlvbnNcIjtcbmV4cG9ydCB7XG4gIHBhcnNlT3V0cG9zdEFybmFibGVzTWlkZGxlYXdhcmUsXG4gIHBhcnNlT3V0cG9zdEFybmFibGVzTWlkZGxlYXdhcmVPcHRpb25zLFxuICB1cGRhdGVBcm5hYmxlc1JlcXVlc3RNaWRkbGV3YXJlLFxuICB1cGRhdGVBcm5hYmxlc1JlcXVlc3RNaWRkbGV3YXJlT3B0aW9ucyxcbiAgZ2V0UHJvY2Vzc0FybmFibGVzUGx1Z2luLFxufSBmcm9tIFwiLi9wcm9jZXNzLWFybmFibGVzLXBsdWdpblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVkaXJlY3QtZnJvbS1wb3N0aWRcIjtcbiJdfQ==
@@ -10,4 +10,3 @@ var update_arnables_request_1 = require("./update-arnables-request");
10
10
  Object.defineProperty(exports, "updateArnablesRequestMiddleware", { enumerable: true, get: function () { return update_arnables_request_1.updateArnablesRequestMiddleware; } });
11
11
  Object.defineProperty(exports, "updateArnablesRequestMiddlewareOptions", { enumerable: true, get: function () { return update_arnables_request_1.updateArnablesRequestMiddlewareOptions; } });
12
12
  Object.defineProperty(exports, "getOutpostEndpoint", { enumerable: true, get: function () { return update_arnables_request_1.getOutpostEndpoint; } });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvY2Vzcy1hcm5hYmxlcy1wbHVnaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW9EO0FBQTNDLGtIQUFBLHdCQUF3QixPQUFBO0FBQ2pDLG1FQUFtSDtBQUExRyx5SUFBQSwrQkFBK0IsT0FBQTtBQUFFLGdKQUFBLHNDQUFzQyxPQUFBO0FBQ2hGLHFFQUltQztBQUhqQywwSUFBQSwrQkFBK0IsT0FBQTtBQUMvQixpSkFBQSxzQ0FBc0MsT0FBQTtBQUN0Qyw2SEFBQSxrQkFBa0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGdldFByb2Nlc3NBcm5hYmxlc1BsdWdpbiB9IGZyb20gXCIuL3BsdWdpblwiO1xuZXhwb3J0IHsgcGFyc2VPdXRwb3N0QXJuYWJsZXNNaWRkbGVhd2FyZSwgcGFyc2VPdXRwb3N0QXJuYWJsZXNNaWRkbGVhd2FyZU9wdGlvbnMgfSBmcm9tIFwiLi9wYXJzZS1vdXRwb3N0LWFybmFibGVzXCI7XG5leHBvcnQge1xuICB1cGRhdGVBcm5hYmxlc1JlcXVlc3RNaWRkbGV3YXJlLFxuICB1cGRhdGVBcm5hYmxlc1JlcXVlc3RNaWRkbGV3YXJlT3B0aW9ucyxcbiAgZ2V0T3V0cG9zdEVuZHBvaW50LFxufSBmcm9tIFwiLi91cGRhdGUtYXJuYWJsZXMtcmVxdWVzdFwiO1xuIl19
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseOutpostArnablesMiddleawareOptions = exports.parseOutpostArnablesMiddleaware = void 0;
4
+ const middleware_bucket_endpoint_1 = require("@aws-sdk/middleware-bucket-endpoint");
5
+ const util_arn_parser_1 = require("@aws-sdk/util-arn-parser");
6
+ const constants_1 = require("../constants");
7
+ const parseOutpostArnablesMiddleaware = (options) => (next, context) => async (args) => {
8
+ const { input } = args;
9
+ const parameter = input.Name && util_arn_parser_1.validate(input.Name) ? "Name" : input.Bucket && util_arn_parser_1.validate(input.Bucket) ? "Bucket" : undefined;
10
+ if (!parameter)
11
+ return next(args);
12
+ const clientRegion = await options.region();
13
+ const { regionInfoProvider } = options;
14
+ const useArnRegion = await options.useArnRegion();
15
+ const baseRegion = middleware_bucket_endpoint_1.getPseudoRegion(clientRegion);
16
+ const { partition: clientPartition, signingRegion = baseRegion } = (await regionInfoProvider(baseRegion));
17
+ const validatorOptions = {
18
+ useDualstackEndpoint: options.useDualstackEndpoint,
19
+ clientRegion,
20
+ clientPartition,
21
+ signingRegion,
22
+ useArnRegion,
23
+ };
24
+ let arn;
25
+ if (parameter === "Name") {
26
+ arn = util_arn_parser_1.parse(input.Name);
27
+ validateOutpostsArn(arn, validatorOptions);
28
+ const { outpostId, accesspointName } = parseOutpostsAccessPointArnResource(arn.resource);
29
+ input.Name = accesspointName;
30
+ context[constants_1.CONTEXT_OUTPOST_ID] = outpostId;
31
+ }
32
+ else {
33
+ arn = util_arn_parser_1.parse(input.Bucket);
34
+ validateOutpostsArn(arn, validatorOptions);
35
+ const { outpostId, bucketName } = parseOutpostBucketArnResource(arn.resource);
36
+ input.Bucket = bucketName;
37
+ context[constants_1.CONTEXT_OUTPOST_ID] = outpostId;
38
+ }
39
+ context[constants_1.CONTEXT_SIGNING_SERVICE] = arn.service;
40
+ context[constants_1.CONTEXT_SIGNING_REGION] = useArnRegion ? arn.region : signingRegion;
41
+ if (!input.AccountId) {
42
+ input.AccountId = arn.accountId;
43
+ }
44
+ else if (input.AccountId !== arn.accountId) {
45
+ throw new Error(`AccountId is incompatible with account id inferred from ${parameter}`);
46
+ }
47
+ if (useArnRegion)
48
+ context[constants_1.CONTEXT_ARN_REGION] = arn.region;
49
+ return next(args);
50
+ };
51
+ exports.parseOutpostArnablesMiddleaware = parseOutpostArnablesMiddleaware;
52
+ exports.parseOutpostArnablesMiddleawareOptions = {
53
+ step: "initialize",
54
+ tags: ["CONVERT_ARN", "OUTPOST_BUCKET_ARN", "OUTPOST_ACCESS_POINT_ARN", "OUTPOST"],
55
+ name: "parseOutpostArnablesMiddleaware",
56
+ };
57
+ const validateOutpostsArn = (arn, { clientRegion, signingRegion, clientPartition, useArnRegion, useDualstackEndpoint }) => {
58
+ const { service, partition, accountId, region } = arn;
59
+ middleware_bucket_endpoint_1.validateOutpostService(service);
60
+ middleware_bucket_endpoint_1.validatePartition(partition, { clientPartition });
61
+ middleware_bucket_endpoint_1.validateAccountId(accountId);
62
+ middleware_bucket_endpoint_1.validateRegion(region, {
63
+ useArnRegion,
64
+ clientRegion,
65
+ clientSigningRegion: signingRegion,
66
+ });
67
+ middleware_bucket_endpoint_1.validateNoDualstack(useDualstackEndpoint);
68
+ if (!useArnRegion)
69
+ middleware_bucket_endpoint_1.validateNoFIPS(clientRegion);
70
+ };
71
+ const parseOutpostsAccessPointArnResource = (resource) => {
72
+ const { outpostId, accesspointName } = middleware_bucket_endpoint_1.getArnResources(resource);
73
+ if (!outpostId) {
74
+ throw new Error("ARN resource should begin with 'outpost'");
75
+ }
76
+ return {
77
+ outpostId,
78
+ accesspointName,
79
+ };
80
+ };
81
+ const parseOutpostBucketArnResource = (resource) => {
82
+ const delimiter = resource.includes(":") ? ":" : "/";
83
+ const [resourceType, ...rest] = resource.split(delimiter);
84
+ if (resourceType === "outpost") {
85
+ if (!rest[0] || rest[1] !== "bucket" || !rest[2] || rest.length !== 3) {
86
+ throw new Error(`Outpost Bucket ARN should have resource outpost${delimiter}{outpostId}${delimiter}bucket${delimiter}{bucketName}`);
87
+ }
88
+ const [outpostId, _, bucketName] = rest;
89
+ return { outpostId, bucketName };
90
+ }
91
+ else {
92
+ throw new Error(`ARN resource should begin with 'outpost${delimiter}'`);
93
+ }
94
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProcessArnablesPlugin = void 0;
4
+ const parse_outpost_arnables_1 = require("./parse-outpost-arnables");
5
+ const update_arnables_request_1 = require("./update-arnables-request");
6
+ const getProcessArnablesPlugin = (options) => ({
7
+ applyToStack: (clientStack) => {
8
+ clientStack.add(parse_outpost_arnables_1.parseOutpostArnablesMiddleaware(options), parse_outpost_arnables_1.parseOutpostArnablesMiddleawareOptions);
9
+ clientStack.add(update_arnables_request_1.updateArnablesRequestMiddleware(options), update_arnables_request_1.updateArnablesRequestMiddlewareOptions);
10
+ },
11
+ });
12
+ exports.getProcessArnablesPlugin = getProcessArnablesPlugin;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateArnablesRequestMiddlewareOptions = exports.getOutpostEndpoint = exports.updateArnablesRequestMiddleware = void 0;
4
+ const protocol_http_1 = require("@aws-sdk/protocol-http");
5
+ const constants_1 = require("../constants");
6
+ const ACCOUNT_ID_HEADER = "x-amz-account-id";
7
+ const OUTPOST_ID_HEADER = "x-amz-outpost-id";
8
+ const REGEX_S3CONTROL_HOSTNAME = /^(.+\.)?s3-control[.-]([a-z0-9-]+)\./;
9
+ const updateArnablesRequestMiddleware = ({ isCustomEndpoint }) => (next, context) => (args) => {
10
+ const { request } = args;
11
+ if (!protocol_http_1.HttpRequest.isInstance(request))
12
+ return next(args);
13
+ if (context[constants_1.CONTEXT_ACCOUNT_ID])
14
+ request.headers[ACCOUNT_ID_HEADER] = context[constants_1.CONTEXT_ACCOUNT_ID];
15
+ if (context[constants_1.CONTEXT_OUTPOST_ID]) {
16
+ request.headers[OUTPOST_ID_HEADER] = context[constants_1.CONTEXT_OUTPOST_ID];
17
+ request.hostname = exports.getOutpostEndpoint(request.hostname, {
18
+ isCustomEndpoint,
19
+ regionOverride: context[constants_1.CONTEXT_ARN_REGION],
20
+ });
21
+ }
22
+ return next(args);
23
+ };
24
+ exports.updateArnablesRequestMiddleware = updateArnablesRequestMiddleware;
25
+ const getOutpostEndpoint = (hostname, { isCustomEndpoint, regionOverride } = {}) => {
26
+ const [matched, prefix, region] = hostname.match(REGEX_S3CONTROL_HOSTNAME);
27
+ return isCustomEndpoint
28
+ ? hostname
29
+ : ["s3-outposts", regionOverride || region, hostname.replace(new RegExp(`^${matched}`), "")]
30
+ .filter((part) => part !== undefined)
31
+ .join(".");
32
+ };
33
+ exports.getOutpostEndpoint = getOutpostEndpoint;
34
+ exports.updateArnablesRequestMiddlewareOptions = {
35
+ step: "build",
36
+ name: "updateArnablesRequestMiddleware",
37
+ tags: ["ACCOUNT_ID", "OUTPOST_ID", "OUTPOST"],
38
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRedirectFromPostIdPlugin = exports.redirectFromPostIdMiddlewareOptions = exports.redirectFromPostIdMiddleware = void 0;
4
+ const protocol_http_1 = require("@aws-sdk/protocol-http");
5
+ const constants_1 = require("./constants");
6
+ const process_arnables_plugin_1 = require("./process-arnables-plugin");
7
+ const redirectFromPostIdMiddleware = ({ isCustomEndpoint }) => (next, context) => (args) => {
8
+ const { input, request } = args;
9
+ if (!protocol_http_1.HttpRequest.isInstance(request))
10
+ return next(args);
11
+ if (input.OutpostId) {
12
+ request.hostname = process_arnables_plugin_1.getOutpostEndpoint(request.hostname, { isCustomEndpoint });
13
+ context[constants_1.CONTEXT_SIGNING_SERVICE] = "s3-outposts";
14
+ }
15
+ return next(args);
16
+ };
17
+ exports.redirectFromPostIdMiddleware = redirectFromPostIdMiddleware;
18
+ exports.redirectFromPostIdMiddlewareOptions = {
19
+ step: "build",
20
+ name: "redirectFromPostIdMiddleware",
21
+ tags: ["OUTPOST"],
22
+ override: true,
23
+ };
24
+ const getRedirectFromPostIdPlugin = (options) => ({
25
+ applyToStack: (clientStack) => {
26
+ clientStack.add(exports.redirectFromPostIdMiddleware(options), exports.redirectFromPostIdMiddlewareOptions);
27
+ },
28
+ });
29
+ exports.getRedirectFromPostIdPlugin = getRedirectFromPostIdPlugin;
@@ -0,0 +1,6 @@
1
+ import { __assign } from "tslib";
2
+ export { NODE_USE_ARN_REGION_CONFIG_OPTIONS } from "@aws-sdk/middleware-bucket-endpoint";
3
+ export function resolveS3ControlConfig(input) {
4
+ var _a = input.useDualstackEndpoint, useDualstackEndpoint = _a === void 0 ? false : _a, _b = input.useArnRegion, useArnRegion = _b === void 0 ? false : _b;
5
+ return __assign(__assign({}, input), { useDualstackEndpoint: useDualstackEndpoint, useArnRegion: typeof useArnRegion === "function" ? useArnRegion : function () { return Promise.resolve(useArnRegion); } });
6
+ }
@@ -0,0 +1,5 @@
1
+ export var CONTEXT_OUTPOST_ID = "outpost_id";
2
+ export var CONTEXT_ACCOUNT_ID = "account_id";
3
+ export var CONTEXT_ARN_REGION = "outpost_arn_region";
4
+ export var CONTEXT_SIGNING_SERVICE = "signing_service";
5
+ export var CONTEXT_SIGNING_REGION = "signing_region";
File without changes
@@ -0,0 +1,107 @@
1
+ import { __awaiter, __generator, __read } from "tslib";
2
+ import { getArnResources as getS3AccesspointArnResources, getPseudoRegion, validateAccountId, validateNoDualstack, validateNoFIPS, validateOutpostService, validatePartition, validateRegion, } from "@aws-sdk/middleware-bucket-endpoint";
3
+ import { parse as parseArn, validate as validateArn } from "@aws-sdk/util-arn-parser";
4
+ import { CONTEXT_ARN_REGION, CONTEXT_OUTPOST_ID, CONTEXT_SIGNING_REGION, CONTEXT_SIGNING_SERVICE } from "../constants";
5
+ export var parseOutpostArnablesMiddleaware = function (options) {
6
+ return function (next, context) {
7
+ return function (args) { return __awaiter(void 0, void 0, void 0, function () {
8
+ var input, parameter, clientRegion, regionInfoProvider, useArnRegion, baseRegion, _a, clientPartition, _b, signingRegion, validatorOptions, arn, _c, outpostId, accesspointName, _d, outpostId, bucketName;
9
+ return __generator(this, function (_e) {
10
+ switch (_e.label) {
11
+ case 0:
12
+ input = args.input;
13
+ parameter = input.Name && validateArn(input.Name) ? "Name" : input.Bucket && validateArn(input.Bucket) ? "Bucket" : undefined;
14
+ if (!parameter)
15
+ return [2, next(args)];
16
+ return [4, options.region()];
17
+ case 1:
18
+ clientRegion = _e.sent();
19
+ regionInfoProvider = options.regionInfoProvider;
20
+ return [4, options.useArnRegion()];
21
+ case 2:
22
+ useArnRegion = _e.sent();
23
+ baseRegion = getPseudoRegion(clientRegion);
24
+ return [4, regionInfoProvider(baseRegion)];
25
+ case 3:
26
+ _a = (_e.sent()), clientPartition = _a.partition, _b = _a.signingRegion, signingRegion = _b === void 0 ? baseRegion : _b;
27
+ validatorOptions = {
28
+ useDualstackEndpoint: options.useDualstackEndpoint,
29
+ clientRegion: clientRegion,
30
+ clientPartition: clientPartition,
31
+ signingRegion: signingRegion,
32
+ useArnRegion: useArnRegion,
33
+ };
34
+ if (parameter === "Name") {
35
+ arn = parseArn(input.Name);
36
+ validateOutpostsArn(arn, validatorOptions);
37
+ _c = parseOutpostsAccessPointArnResource(arn.resource), outpostId = _c.outpostId, accesspointName = _c.accesspointName;
38
+ input.Name = accesspointName;
39
+ context[CONTEXT_OUTPOST_ID] = outpostId;
40
+ }
41
+ else {
42
+ arn = parseArn(input.Bucket);
43
+ validateOutpostsArn(arn, validatorOptions);
44
+ _d = parseOutpostBucketArnResource(arn.resource), outpostId = _d.outpostId, bucketName = _d.bucketName;
45
+ input.Bucket = bucketName;
46
+ context[CONTEXT_OUTPOST_ID] = outpostId;
47
+ }
48
+ context[CONTEXT_SIGNING_SERVICE] = arn.service;
49
+ context[CONTEXT_SIGNING_REGION] = useArnRegion ? arn.region : signingRegion;
50
+ if (!input.AccountId) {
51
+ input.AccountId = arn.accountId;
52
+ }
53
+ else if (input.AccountId !== arn.accountId) {
54
+ throw new Error("AccountId is incompatible with account id inferred from " + parameter);
55
+ }
56
+ if (useArnRegion)
57
+ context[CONTEXT_ARN_REGION] = arn.region;
58
+ return [2, next(args)];
59
+ }
60
+ });
61
+ }); };
62
+ };
63
+ };
64
+ export var parseOutpostArnablesMiddleawareOptions = {
65
+ step: "initialize",
66
+ tags: ["CONVERT_ARN", "OUTPOST_BUCKET_ARN", "OUTPOST_ACCESS_POINT_ARN", "OUTPOST"],
67
+ name: "parseOutpostArnablesMiddleaware",
68
+ };
69
+ var validateOutpostsArn = function (arn, _a) {
70
+ var clientRegion = _a.clientRegion, signingRegion = _a.signingRegion, clientPartition = _a.clientPartition, useArnRegion = _a.useArnRegion, useDualstackEndpoint = _a.useDualstackEndpoint;
71
+ var service = arn.service, partition = arn.partition, accountId = arn.accountId, region = arn.region;
72
+ validateOutpostService(service);
73
+ validatePartition(partition, { clientPartition: clientPartition });
74
+ validateAccountId(accountId);
75
+ validateRegion(region, {
76
+ useArnRegion: useArnRegion,
77
+ clientRegion: clientRegion,
78
+ clientSigningRegion: signingRegion,
79
+ });
80
+ validateNoDualstack(useDualstackEndpoint);
81
+ if (!useArnRegion)
82
+ validateNoFIPS(clientRegion);
83
+ };
84
+ var parseOutpostsAccessPointArnResource = function (resource) {
85
+ var _a = getS3AccesspointArnResources(resource), outpostId = _a.outpostId, accesspointName = _a.accesspointName;
86
+ if (!outpostId) {
87
+ throw new Error("ARN resource should begin with 'outpost'");
88
+ }
89
+ return {
90
+ outpostId: outpostId,
91
+ accesspointName: accesspointName,
92
+ };
93
+ };
94
+ var parseOutpostBucketArnResource = function (resource) {
95
+ var delimiter = resource.includes(":") ? ":" : "/";
96
+ var _a = __read(resource.split(delimiter)), resourceType = _a[0], rest = _a.slice(1);
97
+ if (resourceType === "outpost") {
98
+ if (!rest[0] || rest[1] !== "bucket" || !rest[2] || rest.length !== 3) {
99
+ throw new Error("Outpost Bucket ARN should have resource outpost" + delimiter + "{outpostId}" + delimiter + "bucket" + delimiter + "{bucketName}");
100
+ }
101
+ var _b = __read(rest, 3), outpostId = _b[0], _1 = _b[1], bucketName = _b[2];
102
+ return { outpostId: outpostId, bucketName: bucketName };
103
+ }
104
+ else {
105
+ throw new Error("ARN resource should begin with 'outpost" + delimiter + "'");
106
+ }
107
+ };
@@ -0,0 +1,8 @@
1
+ import { parseOutpostArnablesMiddleaware, parseOutpostArnablesMiddleawareOptions } from "./parse-outpost-arnables";
2
+ import { updateArnablesRequestMiddleware, updateArnablesRequestMiddlewareOptions } from "./update-arnables-request";
3
+ export var getProcessArnablesPlugin = function (options) { return ({
4
+ applyToStack: function (clientStack) {
5
+ clientStack.add(parseOutpostArnablesMiddleaware(options), parseOutpostArnablesMiddleawareOptions);
6
+ clientStack.add(updateArnablesRequestMiddleware(options), updateArnablesRequestMiddlewareOptions);
7
+ },
8
+ }); };
@@ -0,0 +1,40 @@
1
+ import { __read } from "tslib";
2
+ import { HttpRequest } from "@aws-sdk/protocol-http";
3
+ import { CONTEXT_ACCOUNT_ID, CONTEXT_ARN_REGION, CONTEXT_OUTPOST_ID } from "../constants";
4
+ var ACCOUNT_ID_HEADER = "x-amz-account-id";
5
+ var OUTPOST_ID_HEADER = "x-amz-outpost-id";
6
+ var REGEX_S3CONTROL_HOSTNAME = /^(.+\.)?s3-control[.-]([a-z0-9-]+)\./;
7
+ export var updateArnablesRequestMiddleware = function (_a) {
8
+ var isCustomEndpoint = _a.isCustomEndpoint;
9
+ return function (next, context) {
10
+ return function (args) {
11
+ var request = args.request;
12
+ if (!HttpRequest.isInstance(request))
13
+ return next(args);
14
+ if (context[CONTEXT_ACCOUNT_ID])
15
+ request.headers[ACCOUNT_ID_HEADER] = context[CONTEXT_ACCOUNT_ID];
16
+ if (context[CONTEXT_OUTPOST_ID]) {
17
+ request.headers[OUTPOST_ID_HEADER] = context[CONTEXT_OUTPOST_ID];
18
+ request.hostname = getOutpostEndpoint(request.hostname, {
19
+ isCustomEndpoint: isCustomEndpoint,
20
+ regionOverride: context[CONTEXT_ARN_REGION],
21
+ });
22
+ }
23
+ return next(args);
24
+ };
25
+ };
26
+ };
27
+ export var getOutpostEndpoint = function (hostname, _a) {
28
+ var _b = _a === void 0 ? {} : _a, isCustomEndpoint = _b.isCustomEndpoint, regionOverride = _b.regionOverride;
29
+ var _c = __read(hostname.match(REGEX_S3CONTROL_HOSTNAME), 3), matched = _c[0], prefix = _c[1], region = _c[2];
30
+ return isCustomEndpoint
31
+ ? hostname
32
+ : ["s3-outposts", regionOverride || region, hostname.replace(new RegExp("^" + matched), "")]
33
+ .filter(function (part) { return part !== undefined; })
34
+ .join(".");
35
+ };
36
+ export var updateArnablesRequestMiddlewareOptions = {
37
+ step: "build",
38
+ name: "updateArnablesRequestMiddleware",
39
+ tags: ["ACCOUNT_ID", "OUTPOST_ID", "OUTPOST"],
40
+ };
@@ -0,0 +1,29 @@
1
+ import { HttpRequest } from "@aws-sdk/protocol-http";
2
+ import { CONTEXT_SIGNING_SERVICE } from "./constants";
3
+ import { getOutpostEndpoint } from "./process-arnables-plugin";
4
+ export var redirectFromPostIdMiddleware = function (_a) {
5
+ var isCustomEndpoint = _a.isCustomEndpoint;
6
+ return function (next, context) {
7
+ return function (args) {
8
+ var input = args.input, request = args.request;
9
+ if (!HttpRequest.isInstance(request))
10
+ return next(args);
11
+ if (input.OutpostId) {
12
+ request.hostname = getOutpostEndpoint(request.hostname, { isCustomEndpoint: isCustomEndpoint });
13
+ context[CONTEXT_SIGNING_SERVICE] = "s3-outposts";
14
+ }
15
+ return next(args);
16
+ };
17
+ };
18
+ };
19
+ export var redirectFromPostIdMiddlewareOptions = {
20
+ step: "build",
21
+ name: "redirectFromPostIdMiddleware",
22
+ tags: ["OUTPOST"],
23
+ override: true,
24
+ };
25
+ export var getRedirectFromPostIdPlugin = function (options) { return ({
26
+ applyToStack: function (clientStack) {
27
+ clientStack.add(redirectFromPostIdMiddleware(options), redirectFromPostIdMiddlewareOptions);
28
+ },
29
+ }); };
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ export * from "./configurations";
2
+ export { parseOutpostArnablesMiddleaware, parseOutpostArnablesMiddleawareOptions, updateArnablesRequestMiddleware, updateArnablesRequestMiddlewareOptions, getProcessArnablesPlugin, } from "./process-arnables-plugin";
3
+ export * from "./redirect-from-postid";
@@ -1,7 +1,3 @@
1
1
  export { getProcessArnablesPlugin } from "./plugin";
2
2
  export { parseOutpostArnablesMiddleaware, parseOutpostArnablesMiddleawareOptions } from "./parse-outpost-arnables";
3
- export {
4
- updateArnablesRequestMiddleware,
5
- updateArnablesRequestMiddlewareOptions,
6
- getOutpostEndpoint,
7
- } from "./update-arnables-request";
3
+ export { updateArnablesRequestMiddleware, updateArnablesRequestMiddlewareOptions, getOutpostEndpoint, } from "./update-arnables-request";
@@ -0,0 +1,26 @@
1
+ import { Provider, RegionInfoProvider } from "@aws-sdk/types";
2
+ export { NODE_USE_ARN_REGION_CONFIG_OPTIONS } from "@aws-sdk/middleware-bucket-endpoint";
3
+ export interface S3ControlInputConfig {
4
+
5
+ useDualstackEndpoint?: boolean;
6
+
7
+ useArnRegion?: boolean | Provider<boolean>;
8
+ }
9
+ interface PreviouslyResolved {
10
+ isCustomEndpoint: boolean;
11
+ region: Provider<string>;
12
+ regionInfoProvider: RegionInfoProvider;
13
+ }
14
+ export interface S3ControlResolvedConfig {
15
+
16
+ isCustomEndpoint: boolean;
17
+
18
+ useDualstackEndpoint: boolean;
19
+
20
+ useArnRegion: Provider<boolean>;
21
+
22
+ region: Provider<string>;
23
+
24
+ regionInfoProvider: RegionInfoProvider;
25
+ }
26
+ export declare function resolveS3ControlConfig<T>(input: T & PreviouslyResolved & S3ControlInputConfig): T & S3ControlResolvedConfig;
File without changes
File without changes
@@ -5,11 +5,7 @@ declare type ArnableInput = {
5
5
  Bucket?: string;
6
6
  AccountId?: string;
7
7
  };
8
- /**
9
- * Validate input `Name` or `Bucket` parameter is acceptable ARN format. If so, modify the input ARN to inferred
10
- * resource identifier, notify later middleware to redirect request to Outpost endpoint, signing service and signing
11
- * region.
12
- */
8
+
13
9
  export declare const parseOutpostArnablesMiddleaware: (options: S3ControlResolvedConfig) => InitializeMiddleware<ArnableInput, any>;
14
10
  export declare const parseOutpostArnablesMiddleawareOptions: InitializeHandlerOptions;
15
11
  export {};
@@ -1,8 +1,5 @@
1
1
  import { BuildHandlerOptions, BuildMiddleware } from "@aws-sdk/types";
2
- /**
3
- * After outpost request is constructed, redirect request to outpost endpoint and set `x-amz-account-id` and
4
- * `x-amz-outpost-id` headers.
5
- */
2
+
6
3
  export declare const updateArnablesRequestMiddleware: ({ isCustomEndpoint }: {
7
4
  isCustomEndpoint: boolean;
8
5
  }) => BuildMiddleware<any, any>;
@@ -3,10 +3,7 @@ import { S3ControlResolvedConfig } from "./configurations";
3
3
  declare type InputType = {
4
4
  OutpostId?: string;
5
5
  };
6
- /**
7
- * If OutpostId is set, redirect hostname to Outpost one, and change signing service to `s3-outposts`.
8
- * Applied to S3Control.CreateBucket and S3Control.ListRegionalBuckets
9
- */
6
+
10
7
  export declare const redirectFromPostIdMiddleware: ({ isCustomEndpoint }: {
11
8
  isCustomEndpoint: boolean;
12
9
  }) => BuildMiddleware<InputType, any>;
package/package.json CHANGED
@@ -1,31 +1,31 @@
1
1
  {
2
2
  "name": "@aws-sdk/middleware-sdk-s3-control",
3
- "version": "3.34.0",
3
+ "version": "3.38.0",
4
4
  "scripts": {
5
5
  "build": "yarn build:cjs && yarn build:es && yarn build:types",
6
6
  "build:cjs": "tsc -p tsconfig.cjs.json",
7
7
  "build:es": "tsc -p tsconfig.es.json",
8
8
  "build:types": "tsc -p tsconfig.types.json",
9
- "downlevel-dts": "downlevel-dts dist/types dist/types/ts3.4",
9
+ "downlevel-dts": "downlevel-dts dist-types dist-types/ts3.4",
10
10
  "test": "jest"
11
11
  },
12
- "main": "./dist/cjs/index.js",
13
- "module": "./dist/es/index.js",
14
- "types": "./dist/types/index.d.ts",
12
+ "main": "./dist-cjs/index.js",
13
+ "module": "./dist-es/index.js",
14
+ "types": "./dist-types/index.d.ts",
15
15
  "author": {
16
16
  "name": "AWS SDK for JavaScript Team",
17
17
  "url": "https://aws.amazon.com/javascript/"
18
18
  },
19
19
  "license": "Apache-2.0",
20
20
  "dependencies": {
21
- "@aws-sdk/middleware-bucket-endpoint": "3.34.0",
22
- "@aws-sdk/protocol-http": "3.34.0",
23
- "@aws-sdk/types": "3.34.0",
24
- "@aws-sdk/util-arn-parser": "3.34.0",
21
+ "@aws-sdk/middleware-bucket-endpoint": "3.38.0",
22
+ "@aws-sdk/protocol-http": "3.38.0",
23
+ "@aws-sdk/types": "3.38.0",
24
+ "@aws-sdk/util-arn-parser": "3.37.0",
25
25
  "tslib": "^2.3.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@aws-sdk/middleware-stack": "3.34.0",
28
+ "@aws-sdk/middleware-stack": "3.38.0",
29
29
  "@types/jest": "^26.0.4",
30
30
  "jest": "^26.1.0",
31
31
  "typescript": "~4.3.5"
@@ -35,11 +35,14 @@
35
35
  },
36
36
  "typesVersions": {
37
37
  "<4.0": {
38
- "dist/types/*": [
39
- "dist/types/ts3.4/*"
38
+ "dist-types/*": [
39
+ "dist-types/ts3.4/*"
40
40
  ]
41
41
  }
42
42
  },
43
+ "files": [
44
+ "dist-*"
45
+ ],
43
46
  "homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/packages/middleware-sdk-s3-control",
44
47
  "repository": {
45
48
  "type": "git",