@aws-sdk/middleware-bucket-endpoint 3.30.0 → 3.35.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 (38) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist-cjs/bucketEndpointMiddleware.js +82 -0
  3. package/dist-cjs/bucketHostname.js +117 -0
  4. package/dist-cjs/bucketHostnameUtils.js +158 -0
  5. package/dist-cjs/configurations.js +65 -0
  6. package/{dist/cjs → dist-cjs}/index.js +4 -4
  7. package/dist-es/bucketEndpointMiddleware.js +101 -0
  8. package/dist-es/bucketHostname.js +119 -0
  9. package/dist-es/bucketHostnameUtils.js +145 -0
  10. package/dist-es/configurations.js +54 -0
  11. package/dist-es/index.js +5 -0
  12. package/{dist/types → dist-types}/bucketEndpointMiddleware.d.ts +0 -0
  13. package/{dist/types → dist-types}/bucketHostname.d.ts +0 -0
  14. package/{dist/types → dist-types}/bucketHostnameUtils.d.ts +13 -2
  15. package/{dist/types → dist-types}/configurations.d.ts +13 -1
  16. package/{dist/types → dist-types}/index.d.ts +0 -0
  17. package/{dist/types → dist-types}/ts3.4/bucketEndpointMiddleware.d.ts +0 -0
  18. package/{dist/types → dist-types}/ts3.4/bucketHostname.d.ts +0 -0
  19. package/{dist/types → dist-types}/ts3.4/bucketHostnameUtils.d.ts +13 -2
  20. package/{dist/types → dist-types}/ts3.4/configurations.d.ts +13 -1
  21. package/{dist/types → dist-types}/ts3.4/index.d.ts +0 -0
  22. package/package.json +15 -14
  23. package/src/bucketEndpointMiddleware.ts +63 -68
  24. package/src/bucketHostname.ts +148 -72
  25. package/src/bucketHostnameUtils.ts +33 -6
  26. package/src/configurations.ts +39 -1
  27. package/tsconfig.cjs.json +3 -4
  28. package/tsconfig.es.json +3 -4
  29. package/tsconfig.types.json +9 -0
  30. package/dist/cjs/bucketEndpointMiddleware.js +0 -83
  31. package/dist/cjs/bucketHostname.js +0 -92
  32. package/dist/cjs/bucketHostnameUtils.js +0 -199
  33. package/dist/cjs/configurations.js +0 -44
  34. package/dist/es/bucketEndpointMiddleware.js +0 -101
  35. package/dist/es/bucketHostname.js +0 -90
  36. package/dist/es/bucketHostnameUtils.js +0 -188
  37. package/dist/es/configurations.js +0 -34
  38. package/dist/es/index.js +0 -5
@@ -0,0 +1,101 @@
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
+ import { HttpRequest } from "@aws-sdk/protocol-http";
3
+ import { parse as parseArn, validate as validateArn } from "@aws-sdk/util-arn-parser";
4
+ import { bucketHostname } from "./bucketHostname";
5
+ import { getPseudoRegion } from "./bucketHostnameUtils";
6
+ export var bucketEndpointMiddleware = function (options) { return function (next, context) { return function (args) { return __awaiter(void 0, void 0, void 0, function () {
7
+ var bucketName, replaceBucketInPath, request, bucketArn, clientRegion, _a, _b, partition, _c, signingRegion, useArnRegion, _d, hostname, bucketEndpoint, modifiedSigningRegion, signingService, _e, clientRegion, _f, _g, hostname, bucketEndpoint;
8
+ var _h;
9
+ return __generator(this, function (_j) {
10
+ switch (_j.label) {
11
+ case 0:
12
+ bucketName = args.input.Bucket;
13
+ replaceBucketInPath = options.bucketEndpoint;
14
+ request = args.request;
15
+ if (!HttpRequest.isInstance(request)) return [3, 9];
16
+ if (!options.bucketEndpoint) return [3, 1];
17
+ request.hostname = bucketName;
18
+ return [3, 8];
19
+ case 1:
20
+ if (!validateArn(bucketName)) return [3, 6];
21
+ bucketArn = parseArn(bucketName);
22
+ _a = getPseudoRegion;
23
+ return [4, options.region()];
24
+ case 2:
25
+ clientRegion = _a.apply(void 0, [_j.sent()]);
26
+ return [4, options.regionInfoProvider(clientRegion)];
27
+ case 3:
28
+ _b = (_j.sent()) || {}, partition = _b.partition, _c = _b.signingRegion, signingRegion = _c === void 0 ? clientRegion : _c;
29
+ return [4, options.useArnRegion()];
30
+ case 4:
31
+ useArnRegion = _j.sent();
32
+ _e = bucketHostname;
33
+ _h = {
34
+ bucketName: bucketArn,
35
+ baseHostname: request.hostname,
36
+ accelerateEndpoint: options.useAccelerateEndpoint,
37
+ dualstackEndpoint: options.useDualstackEndpoint,
38
+ pathStyleEndpoint: options.forcePathStyle,
39
+ tlsCompatible: request.protocol === "https:",
40
+ useArnRegion: useArnRegion,
41
+ clientPartition: partition,
42
+ clientSigningRegion: signingRegion,
43
+ clientRegion: clientRegion,
44
+ isCustomEndpoint: options.isCustomEndpoint
45
+ };
46
+ return [4, options.disableMultiregionAccessPoints()];
47
+ case 5:
48
+ _d = _e.apply(void 0, [(_h.disableMultiregionAccessPoints = _j.sent(),
49
+ _h)]), hostname = _d.hostname, bucketEndpoint = _d.bucketEndpoint, modifiedSigningRegion = _d.signingRegion, signingService = _d.signingService;
50
+ if (modifiedSigningRegion && modifiedSigningRegion !== signingRegion) {
51
+ context["signing_region"] = modifiedSigningRegion;
52
+ }
53
+ if (signingService && signingService !== "s3") {
54
+ context["signing_service"] = signingService;
55
+ }
56
+ request.hostname = hostname;
57
+ replaceBucketInPath = bucketEndpoint;
58
+ return [3, 8];
59
+ case 6:
60
+ _f = getPseudoRegion;
61
+ return [4, options.region()];
62
+ case 7:
63
+ clientRegion = _f.apply(void 0, [_j.sent()]);
64
+ _g = bucketHostname({
65
+ bucketName: bucketName,
66
+ clientRegion: clientRegion,
67
+ baseHostname: request.hostname,
68
+ accelerateEndpoint: options.useAccelerateEndpoint,
69
+ dualstackEndpoint: options.useDualstackEndpoint,
70
+ pathStyleEndpoint: options.forcePathStyle,
71
+ tlsCompatible: request.protocol === "https:",
72
+ isCustomEndpoint: options.isCustomEndpoint,
73
+ }), hostname = _g.hostname, bucketEndpoint = _g.bucketEndpoint;
74
+ request.hostname = hostname;
75
+ replaceBucketInPath = bucketEndpoint;
76
+ _j.label = 8;
77
+ case 8:
78
+ if (replaceBucketInPath) {
79
+ request.path = request.path.replace(/^(\/)?[^\/]+/, "");
80
+ if (request.path === "") {
81
+ request.path = "/";
82
+ }
83
+ }
84
+ _j.label = 9;
85
+ case 9: return [2, next(__assign(__assign({}, args), { request: request }))];
86
+ }
87
+ });
88
+ }); }; }; };
89
+ export var bucketEndpointMiddlewareOptions = {
90
+ tags: ["BUCKET_ENDPOINT"],
91
+ name: "bucketEndpointMiddleware",
92
+ relation: "before",
93
+ toMiddleware: "hostHeaderMiddleware",
94
+ override: true,
95
+ };
96
+ export var getBucketEndpointPlugin = function (options) { return ({
97
+ applyToStack: function (clientStack) {
98
+ clientStack.addRelativeTo(bucketEndpointMiddleware(options), bucketEndpointMiddlewareOptions);
99
+ },
100
+ }); };
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0RW5kcG9pbnRNaWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1Y2tldEVuZHBvaW50TWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV3JELE9BQU8sRUFBRSxLQUFLLElBQUksUUFBUSxFQUFFLFFBQVEsSUFBSSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3hELE1BQU0sQ0FBQyxJQUFNLHdCQUF3QixHQUFHLFVBQUMsT0FBcUMsSUFBZ0MsT0FBQSxVQUc1RyxJQUErQixFQUMvQixPQUFnQyxJQUNGLE9BQUEsVUFBTyxJQUFnQzs7Ozs7O2dCQUNyRCxVQUFVLEdBQUssSUFBSSxDQUFDLEtBQTJCLE9BQXJDLENBQXNDO2dCQUM1RCxtQkFBbUIsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO2dCQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDekIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBL0IsY0FBK0I7cUJBQzdCLE9BQU8sQ0FBQyxjQUFjLEVBQXRCLGNBQXNCO2dCQUN4QixPQUFPLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQzs7O3FCQUNyQixXQUFXLENBQUMsVUFBVSxDQUFDLEVBQXZCLGNBQXVCO2dCQUMxQixTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsQixLQUFBLGVBQWUsQ0FBQTtnQkFBQyxXQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBQTs7Z0JBQXJELFlBQVksR0FBRyxrQkFBZ0IsU0FBc0IsRUFBQztnQkFDUCxXQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZ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UUFBUTtJQUNsQixZQUFZLEVBQUUsc0JBQXNCO0lBQ3BDLFFBQVEsRUFBRSxJQUFJO0NBQ2YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxJQUFNLHVCQUF1QixHQUFHLFVBQUMsT0FBcUMsSUFBMEIsT0FBQSxDQUFDO0lBQ3RHLFlBQVksRUFBRSxVQUFDLFdBQVc7UUFDeEIsV0FBVyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7Q0FDRixDQUFDLEVBSnFHLENBSXJHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVxdWVzdCB9IGZyb20gXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCI7XG5pbXBvcnQge1xuICBCdWlsZEhhbmRsZXIsXG4gIEJ1aWxkSGFuZGxlckFyZ3VtZW50cyxcbiAgQnVpbGRIYW5kbGVyT3V0cHV0LFxuICBCdWlsZE1pZGRsZXdhcmUsXG4gIEhhbmRsZXJFeGVjdXRpb25Db250ZXh0LFxuICBNZXRhZGF0YUJlYXJlcixcbiAgUGx1Z2dhYmxlLFxuICBSZWxhdGl2ZU1pZGRsZXdhcmVPcHRpb25zLFxufSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlQXJuLCB2YWxpZGF0ZSBhcyB2YWxpZGF0ZUFybiB9IGZyb20gXCJAYXdzLXNkay91dGlsLWFybi1wYXJzZXJcIjtcblxuaW1wb3J0IHsgYnVja2V0SG9zdG5hbWUgfSBmcm9tIFwiLi9idWNrZXRIb3N0bmFtZVwiO1xuaW1wb3J0IHsgZ2V0UHNldWRvUmVnaW9uIH0gZnJvbSBcIi4vYnVja2V0SG9zdG5hbWVVdGlsc1wiO1xuaW1wb3J0IHsgQnVja2V0RW5kcG9pbnRSZXNvbHZlZENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25zXCI7XG5cbmV4cG9ydCBjb25zdCBidWNrZXRFbmRwb2ludE1pZGRsZXdhcmUgPSAob3B0aW9uczogQnVja2V0RW5kcG9pbnRSZXNvbHZlZENvbmZpZyk6IEJ1aWxkTWlkZGxld2FyZTxhbnksIGFueT4gPT4gPFxuICBPdXRwdXQgZXh0ZW5kcyBNZXRhZGF0YUJlYXJlclxuPihcbiAgbmV4dDogQnVpbGRIYW5kbGVyPGFueSwgT3V0cHV0PixcbiAgY29udGV4dDogSGFuZGxlckV4ZWN1dGlvbkNvbnRleHRcbik6IEJ1aWxkSGFuZGxlcjxhbnksIE91dHB1dD4gPT4gYXN5bmMgKGFyZ3M6IEJ1aWxkSGFuZGxlckFyZ3VtZW50czxhbnk+KTogUHJvbWlzZTxCdWlsZEhhbmRsZXJPdXRwdXQ8T3V0cHV0Pj4gPT4ge1xuICBjb25zdCB7IEJ1Y2tldDogYnVja2V0TmFtZSB9ID0gYXJncy5pbnB1dCBhcyB7IEJ1Y2tldDogc3RyaW5nIH07XG4gIGxldCByZXBsYWNlQnVja2V0SW5QYXRoID0gb3B0aW9ucy5idWNrZXRFbmRwb2ludDtcbiAgY29uc3QgcmVxdWVzdCA9IGFyZ3MucmVxdWVzdDtcbiAgaWYgKEh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UocmVxdWVzdCkpIHtcbiAgICBpZiAob3B0aW9ucy5idWNrZXRFbmRwb2ludCkge1xuICAgICAgcmVxdWVzdC5ob3N0bmFtZSA9IGJ1Y2tldE5hbWU7XG4gICAgfSBlbHNlIGlmICh2YWxpZGF0ZUFybihidWNrZXROYW1lKSkge1xuICAgICAgY29uc3QgYnVja2V0QXJuID0gcGFyc2VBcm4oYnVja2V0TmFtZSk7XG4gICAgICBjb25zdCBjbGllbnRSZWdpb24gPSBnZXRQc2V1ZG9SZWdpb24oYXdhaXQgb3B0aW9ucy5yZWdpb24oKSk7XG4gICAgICBjb25zdCB7IHBhcnRpdGlvbiwgc2lnbmluZ1JlZ2lvbiA9IGNsaWVudFJlZ2lvbiB9ID0gKGF3YWl0IG9wdGlvbnMucmVnaW9uSW5mb1Byb3ZpZGVyKGNsaWVudFJlZ2lvbikpIHx8IHt9O1xuICAgICAgY29uc3QgdXNlQXJuUmVnaW9uID0gYXdhaXQgb3B0aW9ucy51c2VBcm5SZWdpb24oKTtcbiAgICAgIGNvbnN0IHsgaG9zdG5hbWUsIGJ1Y2tldEVuZHBvaW50LCBzaWduaW5nUmVnaW9uOiBtb2RpZmllZFNpZ25pbmdSZWdpb24sIHNpZ25pbmdTZXJ2aWNlIH0gPSBidWNrZXRIb3N0bmFtZSh7XG4gICAgICAgIGJ1Y2tldE5hbWU6IGJ1Y2tldEFybixcbiAgICAgICAgYmFzZUhvc3RuYW1lOiByZXF1ZXN0Lmhvc3RuYW1lLFxuICAgICAgICBhY2NlbGVyYXRlRW5kcG9pbnQ6IG9wdGlvbnMudXNlQWNjZWxlcmF0ZUVuZHBvaW50LFxuICAgICAgICBkdWFsc3RhY2tFbmRwb2ludDogb3B0aW9ucy51c2VEdWFsc3RhY2tFbmRwb2ludCxcbiAgICAgICAgcGF0aFN0eWxlRW5kcG9pbnQ6IG9wdGlvbnMuZm9yY2VQYXRoU3R5bGUsXG4gICAgICAgIHRsc0NvbXBhdGlibGU6IHJlcXVlc3QucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIsXG4gICAgICAgIHVzZUFyblJlZ2lvbixcbiAgICAgICAgY2xpZW50UGFydGl0aW9uOiBwYXJ0aXRpb24sXG4gICAgICAgIGNsaWVudFNpZ25pbmdSZWdpb246IHNpZ25pbmdSZWdpb24sXG4gICAgICAgIGNsaWVudFJlZ2lvbjogY2xpZW50UmVnaW9uLFxuICAgICAgICBpc0N1c3RvbUVuZHBvaW50OiBvcHRpb25zLmlzQ3VzdG9tRW5kcG9pbnQsXG4gICAgICAgIGRpc2FibGVNdWx0aXJlZ2lvbkFjY2Vzc1BvaW50czogYXdhaXQgb3B0aW9ucy5kaXNhYmxlTXVsdGlyZWdpb25BY2Nlc3NQb2ludHMoKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiB0aGUgcmVxdWVzdCBuZWVkcyB0byB1c2UgYSByZWdpb24gb3Igc2VydmljZSBuYW1lIGluZmVycmVkIGZyb20gQVJOIHRoYXQgZGlmZmVyZW50IGZyb20gY2xpZW50IHJlZ2lvbiwgd2VcbiAgICAgIC8vIG5lZWQgdG8gc2V0IHRoZW0gaW4gdGhlIGhhbmRsZXIgY29udGV4dCBzbyB0aGUgc2lnbmVyIHdpbGwgdXNlIHRoZW1cbiAgICAgIGlmIChtb2RpZmllZFNpZ25pbmdSZWdpb24gJiYgbW9kaWZpZWRTaWduaW5nUmVnaW9uICE9PSBzaWduaW5nUmVnaW9uKSB7XG4gICAgICAgIGNvbnRleHRbXCJzaWduaW5nX3JlZ2lvblwiXSA9IG1vZGlmaWVkU2lnbmluZ1JlZ2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduaW5nU2VydmljZSAmJiBzaWduaW5nU2VydmljZSAhPT0gXCJzM1wiKSB7XG4gICAgICAgIGNvbnRleHRbXCJzaWduaW5nX3NlcnZpY2VcIl0gPSBzaWduaW5nU2VydmljZTtcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdC5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuICAgICAgcmVwbGFjZUJ1Y2tldEluUGF0aCA9IGJ1Y2tldEVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGllbnRSZWdpb24gPSBnZXRQc2V1ZG9SZWdpb24oYXdhaXQgb3B0aW9ucy5yZWdpb24oKSk7XG4gICAgICBjb25zdCB7IGhvc3RuYW1lLCBidWNrZXRFbmRwb2ludCB9ID0gYnVja2V0SG9zdG5hbWUoe1xuICAgICAgICBidWNrZXROYW1lLFxuICAgICAgICBjbGllbnRSZWdpb24sXG4gICAgICAgIGJhc2VIb3N0bmFtZTogcmVxdWVzdC5ob3N0bmFtZSxcbiAgICAgICAgYWNjZWxlcmF0ZUVuZHBvaW50OiBvcHRpb25zLnVzZUFjY2VsZXJhdGVFbmRwb2ludCxcbiAgICAgICAgZHVhbHN0YWNrRW5kcG9pbnQ6IG9wdGlvbnMudXNlRHVhbHN0YWNrRW5kcG9pbnQsXG4gICAgICAgIHBhdGhTdHlsZUVuZHBvaW50OiBvcHRpb25zLmZvcmNlUGF0aFN0eWxlLFxuICAgICAgICB0bHNDb21wYXRpYmxlOiByZXF1ZXN0LnByb3RvY29sID09PSBcImh0dHBzOlwiLFxuICAgICAgICBpc0N1c3RvbUVuZHBvaW50OiBvcHRpb25zLmlzQ3VzdG9tRW5kcG9pbnQsXG4gICAgICB9KTtcblxuICAgICAgcmVxdWVzdC5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuICAgICAgcmVwbGFjZUJ1Y2tldEluUGF0aCA9IGJ1Y2tldEVuZHBvaW50O1xuICAgIH1cblxuICAgIGlmIChyZXBsYWNlQnVja2V0SW5QYXRoKSB7XG4gICAgICByZXF1ZXN0LnBhdGggPSByZXF1ZXN0LnBhdGgucmVwbGFjZSgvXihcXC8pP1teXFwvXSsvLCBcIlwiKTtcbiAgICAgIGlmIChyZXF1ZXN0LnBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgcmVxdWVzdC5wYXRoID0gXCIvXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHQoeyAuLi5hcmdzLCByZXF1ZXN0IH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1Y2tldEVuZHBvaW50TWlkZGxld2FyZU9wdGlvbnM6IFJlbGF0aXZlTWlkZGxld2FyZU9wdGlvbnMgPSB7XG4gIHRhZ3M6IFtcIkJVQ0tFVF9FTkRQT0lOVFwiXSxcbiAgbmFtZTogXCJidWNrZXRFbmRwb2ludE1pZGRsZXdhcmVcIixcbiAgcmVsYXRpb246IFwiYmVmb3JlXCIsXG4gIHRvTWlkZGxld2FyZTogXCJob3N0SGVhZGVyTWlkZGxld2FyZVwiLFxuICBvdmVycmlkZTogdHJ1ZSxcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCdWNrZXRFbmRwb2ludFBsdWdpbiA9IChvcHRpb25zOiBCdWNrZXRFbmRwb2ludFJlc29sdmVkQ29uZmlnKTogUGx1Z2dhYmxlPGFueSwgYW55PiA9PiAoe1xuICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgIGNsaWVudFN0YWNrLmFkZFJlbGF0aXZlVG8oYnVja2V0RW5kcG9pbnRNaWRkbGV3YXJlKG9wdGlvbnMpLCBidWNrZXRFbmRwb2ludE1pZGRsZXdhcmVPcHRpb25zKTtcbiAgfSxcbn0pO1xuIl19
@@ -0,0 +1,119 @@
1
+ import { __assign, __read } from "tslib";
2
+ import { DOT_PATTERN, getArnResources, getPseudoRegion, getSuffix, getSuffixForArnEndpoint, isBucketNameOptions, isDnsCompatibleBucketName, isFipsRegion, validateAccountId, validateArnEndpointOptions, validateCustomEndpoint, validateDNSHostLabel, validateMrapAlias, validateNoDualstack, validateNoFIPS, validateOutpostService, validatePartition, validateRegion, validateRegionalClient, validateS3Service, validateService, } from "./bucketHostnameUtils";
3
+ export var bucketHostname = function (options) {
4
+ validateCustomEndpoint(options);
5
+ return isBucketNameOptions(options)
6
+ ?
7
+ getEndpointFromBucketName(options)
8
+ :
9
+ getEndpointFromArn(options);
10
+ };
11
+ var getEndpointFromBucketName = function (_a) {
12
+ var _b = _a.accelerateEndpoint, accelerateEndpoint = _b === void 0 ? false : _b, region = _a.clientRegion, baseHostname = _a.baseHostname, bucketName = _a.bucketName, _c = _a.dualstackEndpoint, dualstackEndpoint = _c === void 0 ? false : _c, _d = _a.pathStyleEndpoint, pathStyleEndpoint = _d === void 0 ? false : _d, _e = _a.tlsCompatible, tlsCompatible = _e === void 0 ? true : _e, _f = _a.isCustomEndpoint, isCustomEndpoint = _f === void 0 ? false : _f;
13
+ var _g = __read(isCustomEndpoint ? [region, baseHostname] : getSuffix(baseHostname), 2), clientRegion = _g[0], hostnameSuffix = _g[1];
14
+ if (pathStyleEndpoint || !isDnsCompatibleBucketName(bucketName) || (tlsCompatible && DOT_PATTERN.test(bucketName))) {
15
+ return {
16
+ bucketEndpoint: false,
17
+ hostname: dualstackEndpoint ? "s3.dualstack." + clientRegion + "." + hostnameSuffix : baseHostname,
18
+ };
19
+ }
20
+ if (accelerateEndpoint) {
21
+ baseHostname = "s3-accelerate" + (dualstackEndpoint ? ".dualstack" : "") + "." + hostnameSuffix;
22
+ }
23
+ else if (dualstackEndpoint) {
24
+ baseHostname = "s3.dualstack." + clientRegion + "." + hostnameSuffix;
25
+ }
26
+ return {
27
+ bucketEndpoint: true,
28
+ hostname: bucketName + "." + baseHostname,
29
+ };
30
+ };
31
+ var getEndpointFromArn = function (options) {
32
+ var isCustomEndpoint = options.isCustomEndpoint, baseHostname = options.baseHostname, clientRegion = options.clientRegion;
33
+ var hostnameSuffix = isCustomEndpoint ? baseHostname : getSuffixForArnEndpoint(baseHostname)[1];
34
+ var pathStyleEndpoint = options.pathStyleEndpoint, _a = options.accelerateEndpoint, accelerateEndpoint = _a === void 0 ? false : _a, _b = options.tlsCompatible, tlsCompatible = _b === void 0 ? true : _b, bucketName = options.bucketName, _c = options.clientPartition, clientPartition = _c === void 0 ? "aws" : _c;
35
+ validateArnEndpointOptions({ pathStyleEndpoint: pathStyleEndpoint, accelerateEndpoint: accelerateEndpoint, tlsCompatible: tlsCompatible });
36
+ var service = bucketName.service, partition = bucketName.partition, accountId = bucketName.accountId, region = bucketName.region, resource = bucketName.resource;
37
+ validateService(service);
38
+ validatePartition(partition, { clientPartition: clientPartition });
39
+ validateAccountId(accountId);
40
+ var _d = getArnResources(resource), accesspointName = _d.accesspointName, outpostId = _d.outpostId;
41
+ if (service === "s3-object-lambda") {
42
+ return getEndpointFromObjectLambdaArn(__assign(__assign({}, options), { tlsCompatible: tlsCompatible, bucketName: bucketName, accesspointName: accesspointName, hostnameSuffix: hostnameSuffix }));
43
+ }
44
+ if (region === "") {
45
+ return getEndpointFromMRAPArn(__assign(__assign({}, options), { clientRegion: clientRegion, mrapAlias: accesspointName, hostnameSuffix: hostnameSuffix }));
46
+ }
47
+ if (outpostId) {
48
+ return getEndpointFromOutpostArn(__assign(__assign({}, options), { clientRegion: clientRegion, outpostId: outpostId, accesspointName: accesspointName, hostnameSuffix: hostnameSuffix }));
49
+ }
50
+ return getEndpointFromAccessPointArn(__assign(__assign({}, options), { clientRegion: clientRegion, accesspointName: accesspointName, hostnameSuffix: hostnameSuffix }));
51
+ };
52
+ var getEndpointFromObjectLambdaArn = function (_a) {
53
+ var _b = _a.dualstackEndpoint, dualstackEndpoint = _b === void 0 ? false : _b, _c = _a.tlsCompatible, tlsCompatible = _c === void 0 ? true : _c, useArnRegion = _a.useArnRegion, clientRegion = _a.clientRegion, _d = _a.clientSigningRegion, clientSigningRegion = _d === void 0 ? clientRegion : _d, accesspointName = _a.accesspointName, bucketName = _a.bucketName, hostnameSuffix = _a.hostnameSuffix;
54
+ var accountId = bucketName.accountId, region = bucketName.region, service = bucketName.service;
55
+ validateRegionalClient(clientRegion);
56
+ validateRegion(region, { useArnRegion: useArnRegion, clientRegion: clientRegion, clientSigningRegion: clientSigningRegion, allowFipsRegion: true });
57
+ validateNoDualstack(dualstackEndpoint);
58
+ var DNSHostLabel = accesspointName + "-" + accountId;
59
+ validateDNSHostLabel(DNSHostLabel, { tlsCompatible: tlsCompatible });
60
+ var endpointRegion = useArnRegion ? region : clientRegion;
61
+ var signingRegion = useArnRegion ? region : clientSigningRegion;
62
+ return {
63
+ bucketEndpoint: true,
64
+ hostname: DNSHostLabel + "." + service + (isFipsRegion(clientRegion) ? "-fips" : "") + "." + getPseudoRegion(endpointRegion) + "." + hostnameSuffix,
65
+ signingRegion: signingRegion,
66
+ signingService: service,
67
+ };
68
+ };
69
+ var getEndpointFromMRAPArn = function (_a) {
70
+ var disableMultiregionAccessPoints = _a.disableMultiregionAccessPoints, _b = _a.dualstackEndpoint, dualstackEndpoint = _b === void 0 ? false : _b, isCustomEndpoint = _a.isCustomEndpoint, mrapAlias = _a.mrapAlias, hostnameSuffix = _a.hostnameSuffix;
71
+ if (disableMultiregionAccessPoints === true) {
72
+ throw new Error("SDK is attempting to use a MRAP ARN. Please enable to feature.");
73
+ }
74
+ validateMrapAlias(mrapAlias);
75
+ validateNoDualstack(dualstackEndpoint);
76
+ return {
77
+ bucketEndpoint: true,
78
+ hostname: "" + mrapAlias + (isCustomEndpoint ? "" : ".accesspoint.s3-global") + "." + hostnameSuffix,
79
+ signingRegion: "*",
80
+ };
81
+ };
82
+ var getEndpointFromOutpostArn = function (_a) {
83
+ var useArnRegion = _a.useArnRegion, clientRegion = _a.clientRegion, _b = _a.clientSigningRegion, clientSigningRegion = _b === void 0 ? clientRegion : _b, bucketName = _a.bucketName, outpostId = _a.outpostId, _c = _a.dualstackEndpoint, dualstackEndpoint = _c === void 0 ? false : _c, _d = _a.tlsCompatible, tlsCompatible = _d === void 0 ? true : _d, accesspointName = _a.accesspointName, isCustomEndpoint = _a.isCustomEndpoint, hostnameSuffix = _a.hostnameSuffix;
84
+ validateRegionalClient(clientRegion);
85
+ validateRegion(bucketName.region, { useArnRegion: useArnRegion, clientRegion: clientRegion, clientSigningRegion: clientSigningRegion });
86
+ var DNSHostLabel = accesspointName + "-" + bucketName.accountId;
87
+ validateDNSHostLabel(DNSHostLabel, { tlsCompatible: tlsCompatible });
88
+ var endpointRegion = useArnRegion ? bucketName.region : clientRegion;
89
+ var signingRegion = useArnRegion ? bucketName.region : clientSigningRegion;
90
+ validateOutpostService(bucketName.service);
91
+ validateDNSHostLabel(outpostId, { tlsCompatible: tlsCompatible });
92
+ validateNoDualstack(dualstackEndpoint);
93
+ validateNoFIPS(endpointRegion);
94
+ var hostnamePrefix = DNSHostLabel + "." + outpostId;
95
+ return {
96
+ bucketEndpoint: true,
97
+ hostname: "" + hostnamePrefix + (isCustomEndpoint ? "" : ".s3-outposts." + endpointRegion) + "." + hostnameSuffix,
98
+ signingRegion: signingRegion,
99
+ signingService: "s3-outposts",
100
+ };
101
+ };
102
+ var getEndpointFromAccessPointArn = function (_a) {
103
+ var useArnRegion = _a.useArnRegion, clientRegion = _a.clientRegion, _b = _a.clientSigningRegion, clientSigningRegion = _b === void 0 ? clientRegion : _b, bucketName = _a.bucketName, _c = _a.dualstackEndpoint, dualstackEndpoint = _c === void 0 ? false : _c, _d = _a.tlsCompatible, tlsCompatible = _d === void 0 ? true : _d, accesspointName = _a.accesspointName, isCustomEndpoint = _a.isCustomEndpoint, hostnameSuffix = _a.hostnameSuffix;
104
+ validateRegionalClient(clientRegion);
105
+ validateRegion(bucketName.region, { useArnRegion: useArnRegion, clientRegion: clientRegion, clientSigningRegion: clientSigningRegion, allowFipsRegion: true });
106
+ var hostnamePrefix = accesspointName + "-" + bucketName.accountId;
107
+ validateDNSHostLabel(hostnamePrefix, { tlsCompatible: tlsCompatible });
108
+ var endpointRegion = useArnRegion ? bucketName.region : clientRegion;
109
+ var signingRegion = useArnRegion ? bucketName.region : clientSigningRegion;
110
+ validateS3Service(bucketName.service);
111
+ return {
112
+ bucketEndpoint: true,
113
+ hostname: "" + hostnamePrefix + (isCustomEndpoint
114
+ ? ""
115
+ : ".s3-accesspoint" + (isFipsRegion(clientRegion) ? "-fips" : "") + (dualstackEndpoint ? ".dualstack" : "") + "." + getPseudoRegion(endpointRegion)) + "." + hostnameSuffix,
116
+ signingRegion: signingRegion,
117
+ };
118
+ };
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0SG9zdG5hbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnVja2V0SG9zdG5hbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFHTCxXQUFXLEVBQ1gsZUFBZSxFQUNmLGVBQWUsRUFDZixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGVBQWUsR0FDaEIsTUFBTSx1QkFBdUIsQ0FBQztBQVMvQixNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUcsVUFBQyxPQUFpRDtJQUM5RSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztRQUNqQyxDQUFDO1lBQ0MseUJBQXlCLENBQUMsT0FBTyxDQUFDO1FBQ3BDLENBQUM7WUFDQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRixJQUFNLHlCQUF5QixHQUFHLFVBQUMsRUFTWjtRQVJyQiwwQkFBMEIsRUFBMUIsa0JBQWtCLG1CQUFHLEtBQUssS0FBQSxFQUNaLE1BQU0sa0JBQUEsRUFDcEIsWUFBWSxrQkFBQSxFQUNaLFVBQVUsZ0JBQUEsRUFDVix5QkFBeUIsRUFBekIsaUJBQWlCLG1CQUFHLEtBQUssS0FBQSxFQUN6Qix5QkFBeUIsRUFBekIsaUJBQWlCLG1CQUFHLEtBQUssS0FBQSxFQUN6QixxQkFBb0IsRUFBcEIsYUFBYSxtQkFBRyxJQUFJLEtBQUEsRUFDcEIsd0JBQXdCLEVBQXhCLGdCQUFnQixtQkFBRyxLQUFLLEtBQUE7SUFFbEIs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QyxDQUFDLENBQUMsRUFBRSxLQUN6RCxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQ25DLGVBQWUsQ0FBQyxjQUFjLENBQUcsVUFDdkMsY0FBZ0I7UUFDcEIsYUFBYSxlQUFBO0tBQ2QsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFSTiB9IGZyb20gXCJAYXdzLXNkay91dGlsLWFybi1wYXJzZXJcIjtcblxuaW1wb3J0IHtcbiAgQXJuSG9zdG5hbWVQYXJhbXMsXG4gIEJ1Y2tldEhvc3RuYW1lUGFyYW1zLFxuICBET1RfUEFUVEVSTixcbiAgZ2V0QXJuUmVzb3VyY2VzLFxuICBnZXRQc2V1ZG9SZWdpb24sXG4gIGdldFN1ZmZpeCxcbiAgZ2V0U3VmZml4Rm9yQXJuRW5kcG9pbnQsXG4gIGlzQnVja2V0TmFtZU9wdGlvbnMsXG4gIGlzRG5zQ29tcGF0aWJsZUJ1Y2tldE5hbWUsXG4gIGlzRmlwc1JlZ2lvbixcbiAgdmFsaWRhdGVBY2NvdW50SWQsXG4gIHZhbGlkYXRlQXJuRW5kcG9pbnRPcHRpb25zLFxuICB2YWxpZGF0ZUN1c3RvbUVuZHBvaW50LFxuICB2YWxpZGF0ZUROU0hvc3RMYWJlbCxcbiAgdmFsaWRhdGVNcmFwQWxpYXMsXG4gIHZhbGlkYXRlTm9EdWFsc3RhY2ssXG4gIHZhbGlkYXRlTm9GSVBTLFxuICB2YWxpZGF0ZU91dHBvc3RTZXJ2aWNlLFxuICB2YWxpZGF0ZVBhcnRpdGlvbixcbiAgdmFsaWRhdGVSZWdpb24sXG4gIHZhbGlkYXRlUmVnaW9uYWxDbGllbnQsXG4gIHZhbGlkYXRlUzNTZXJ2aWNlLFxuICB2YWxpZGF0ZVNlcnZpY2UsXG59IGZyb20gXCIuL2J1Y2tldEhvc3RuYW1lVXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRIb3N0bmFtZSB7XG4gIGhvc3RuYW1lOiBzdHJpbmc7XG4gIGJ1Y2tldEVuZHBvaW50OiBib29sZWFuO1xuICBzaWduaW5nUmVnaW9uPzogc3RyaW5nO1xuICBzaWduaW5nU2VydmljZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGJ1Y2tldEhvc3RuYW1lID0gKG9wdGlvbnM6IEJ1Y2tldEhvc3RuYW1lUGFyYW1zIHwgQXJuSG9zdG5hbWVQYXJhbXMpOiBCdWNrZXRIb3N0bmFtZSA9PiB7XG4gIHZhbGlkYXRlQ3VzdG9tRW5kcG9pbnQob3B0aW9ucyk7XG4gIHJldHVybiBpc0J1Y2tldE5hbWVPcHRpb25zKG9wdGlvbnMpXG4gICAgPyAvLyBDb25zdHJ1Y3QgZW5kcG9pbnQgd2hlbiBidWNrZXROYW1lIGlzIGEgc3RyaW5nIHJlZmVycmluZyB0byBhIGJ1Y2tldCBuYW1lXG4gICAgICBnZXRFbmRwb2ludEZyb21CdWNrZXROYW1lKG9wdGlvbnMpXG4gICAgOiAvLyBDb25zdHJ1Y3QgZW5kcG9pbnQgd2hlbiBidWNrZXROYW1lIGlzIGFuIEFSTiByZWZlcnJpbmcgdG8gYW4gUzMgcmVzb3VyY2UgbGlrZSBBY2Nlc3MgUG9pbnRcbiAgICAgIGdldEVuZHBvaW50RnJvbUFybihvcHRpb25zKTtcbn07XG5cbmNvbnN0IGdldEVuZHBvaW50RnJvbUJ1Y2tldE5hbWUgPSAoe1xuICBhY2NlbGVyYXRlRW5kcG9pbnQgPSBmYWxzZSxcbiAgY2xpZW50UmVnaW9uOiByZWdpb24sXG4gIGJhc2VIb3N0bmFtZSxcbiAgYnVja2V0TmFtZSxcbiAgZHVhbHN0YWNrRW5kcG9pbnQgPSBmYWxzZSxcbiAgcGF0aFN0eWxlRW5kcG9pbnQgPSBmYWxzZSxcbiAgdGxzQ29tcGF0aWJsZSA9IHRydWUsXG4gIGlzQ3VzdG9tRW5kcG9pbnQgPSBmYWxzZSxcbn06IEJ1Y2tldEhvc3RuYW1lUGFyYW1zKTogQnVja2V0SG9zdG5hbWUgPT4ge1xuICBjb25zdCBbY2xpZW50UmVnaW9uLCBob3N0bmFtZVN1ZmZpeF0gPSBpc0N1c3RvbUVuZHBvaW50ID8gW3JlZ2lvbiwgYmFzZUhvc3RuYW1lXSA6IGdldFN1ZmZpeChiYXNlSG9zdG5hbWUpO1xuICBpZiAocGF0aFN0eWxlRW5kcG9pbnQgfHwgIWlzRG5zQ29tcGF0aWJsZUJ1Y2tldE5hbWUoYnVja2V0TmFtZSkgfHwgKHRsc0NvbXBhdGlibGUgJiYgRE9UX1BBVFRFUk4udGVzdChidWNrZXROYW1lKSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0RW5kcG9pbnQ6IGZhbHNlLFxuICAgICAgaG9zdG5hbWU6IGR1YWxzdGFja0VuZHBvaW50ID8gYHMzLmR1YWxzdGFjay4ke2NsaWVudFJlZ2lvbn0uJHtob3N0bmFtZVN1ZmZpeH1gIDogYmFzZUhvc3RuYW1lLFxuICAgIH07XG4gIH1cblxuICBpZiAoYWNjZWxlcmF0ZUVuZHBvaW50KSB7XG4gICAgYmFzZUhvc3RuYW1lID0gYHMzLWFjY2VsZXJhdGUke2R1YWxzdGFja0VuZHBvaW50ID8gXCIuZHVhbHN0YWNrXCIgOiBcIlwifS4ke2hvc3RuYW1lU3VmZml4fWA7XG4gIH0gZWxzZSBpZiAoZHVhbHN0YWNrRW5kcG9pbnQpIHtcbiAgICBiYXNlSG9zdG5hbWUgPSBgczMuZHVhbHN0YWNrLiR7Y2xpZW50UmVnaW9ufS4ke2hvc3RuYW1lU3VmZml4fWA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJ1Y2tldEVuZHBvaW50OiB0cnVlLFxuICAgIGhvc3RuYW1lOiBgJHtidWNrZXROYW1lfS4ke2Jhc2VIb3N0bmFtZX1gLFxuICB9O1xufTtcblxuY29uc3QgZ2V0RW5kcG9pbnRGcm9tQXJuID0gKG9wdGlvbnM6IEFybkhvc3RuYW1lUGFyYW1zKTogQnVja2V0SG9zdG5hbWUgPT4ge1xuICBjb25zdCB7IGlzQ3VzdG9tRW5kcG9pbnQsIGJhc2VIb3N0bmFtZSwgY2xpZW50UmVnaW9uIH0gPSBvcHRpb25zO1xuICBjb25zdCBob3N0bmFtZVN1ZmZpeCA9IGlzQ3VzdG9tRW5kcG9pbnQgPyBiYXNlSG9zdG5hbWUgOiBnZXRTdWZmaXhGb3JBcm5FbmRwb2ludChiYXNlSG9zdG5hbWUpWzFdO1xuXG4gIGNvbnN0IHtcbiAgICBwYXRoU3R5bGVFbmRwb2ludCxcbiAgICBhY2NlbGVyYXRlRW5kcG9pbnQgPSBmYWxzZSxcbiAgICB0bHNDb21wYXRpYmxlID0gdHJ1ZSxcbiAgICBidWNrZXROYW1lLFxuICAgIGNsaWVudFBhcnRpdGlvbiA9IFwiYXdzXCIsXG4gIH0gPSBvcHRpb25zO1xuXG4gIHZhbGlkYXRlQXJuRW5kcG9pbnRPcHRpb25zKHsgcGF0aFN0eWxlRW5kcG9pbnQsIGFjY2VsZXJhdGVFbmRwb2ludCwgdGxzQ29tcGF0aWJsZSB9KTtcblxuICAvLyBWYWxpZGF0ZSBhbmQgcGFyc2UgdGhlIEFSTiBzdXBwbGllZCBhcyBhIGJ1Y2tldCBuYW1lXG4gIGNvbnN0IHsgc2VydmljZSwgcGFydGl0aW9uLCBhY2NvdW50SWQsIHJlZ2lvbiwgcmVzb3VyY2UgfSA9IGJ1Y2tldE5hbWU7XG4gIHZhbGlkYXRlU2VydmljZShzZXJ2aWNlKTtcbiAgdmFsaWRhdGVQYXJ0aXRpb24ocGFydGl0aW9uLCB7IGNsaWVudFBhcnRpdGlvbiB9KTtcbiAgdmFsaWRhdGVBY2NvdW50SWQoYWNjb3VudElkKTtcbiAgY29uc3QgeyBhY2Nlc3Nwb2ludE5hbWUsIG91dHBvc3RJZCB9ID0gZ2V0QXJuUmVzb3VyY2VzKHJlc291cmNlKTtcbiAgaWYgKHNlcnZpY2UgPT09IFwiczMtb2JqZWN0LWxhbWJkYVwiKSB7XG4gICAgcmV0dXJuIGdldEVuZHBvaW50RnJvbU9iamVjdExhbWJkYUFybih7IC4uLm9wdGlvbnMsIHRsc0NvbXBhdGlibGUsIGJ1Y2tldE5hbWUsIGFjY2Vzc3BvaW50TmFtZSwgaG9zdG5hbWVTdWZmaXggfSk7XG4gIH1cbiAgaWYgKHJlZ2lvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiBnZXRFbmRwb2ludEZyb21NUkFQQXJuKHsgLi4ub3B0aW9ucywgY2xpZW50UmVnaW9uLCBtcmFwQWxpYXM6IGFjY2Vzc3BvaW50TmFtZSwgaG9zdG5hbWVTdWZmaXggfSk7XG4gIH1cbiAgaWYgKG91dHBvc3RJZCkge1xuICAgIHJldHVybiBnZXRFbmRwb2ludEZyb21PdXRwb3N0QXJuKHsgLi4ub3B0aW9ucywgY2xpZW50UmVnaW9uLCBvdXRwb3N0SWQsIGFjY2Vzc3BvaW50TmFtZSwgaG9zdG5hbWVTdWZmaXggfSk7XG4gIH1cbiAgcmV0dXJuIGdldEVuZHBvaW50RnJvbUFjY2Vzc1BvaW50QXJuKHsgLi4ub3B0aW9ucywgY2xpZW50UmVnaW9uLCBhY2Nlc3Nwb2ludE5hbWUsIGhvc3RuYW1lU3VmZml4IH0pO1xufTtcblxuY29uc3QgZ2V0RW5kcG9pbnRGcm9tT2JqZWN0TGFtYmRhQXJuID0gKHtcbiAgZHVhbHN0YWNrRW5kcG9pbnQgPSBmYWxzZSxcbiAgdGxzQ29tcGF0aWJsZSA9IHRydWUsXG4gIHVzZUFyblJlZ2lvbixcbiAgY2xpZW50UmVnaW9uLFxuICBjbGllbnRTaWduaW5nUmVnaW9uID0gY2xpZW50UmVnaW9uLFxuICBhY2Nlc3Nwb2ludE5hbWUsXG4gIGJ1Y2tldE5hbWUsXG4gIGhvc3RuYW1lU3VmZml4LFxufTogQXJuSG9zdG5hbWVQYXJhbXMgJiB7XG4gIGFjY2Vzc3BvaW50TmFtZTogc3RyaW5nO1xuICBidWNrZXROYW1lOiBBUk47XG4gIGhvc3RuYW1lU3VmZml4OiBzdHJpbmc7XG59KTogQnVja2V0SG9zdG5hbWUgPT4ge1xuICBjb25zdCB7IGFjY291bnRJZCwgcmVnaW9uLCBzZXJ2aWNlIH0gPSBidWNrZXROYW1lO1xuICB2YWxpZGF0ZVJlZ2lvbmFsQ2xpZW50KGNsaWVudFJlZ2lvbik7XG4gIHZhbGlkYXRlUmVnaW9uKHJlZ2lvbiwgeyB1c2VBcm5SZWdpb24sIGNsaWVudFJlZ2lvbiwgY2xpZW50U2lnbmluZ1JlZ2lvbiwgYWxsb3dGaXBzUmVnaW9uOiB0cnVlIH0pO1xuICB2YWxpZGF0ZU5vRHVhbHN0YWNrKGR1YWxzdGFja0VuZHBvaW50KTtcbiAgY29uc3QgRE5TSG9zdExhYmVsID0gYCR7YWNjZXNzcG9pbnROYW1lfS0ke2FjY291bnRJZH1gO1xuICB2YWxpZGF0ZUROU0hvc3RMYWJlbChETlNIb3N0TGFiZWwsIHsgdGxzQ29tcGF0aWJsZSB9KTtcblxuICBjb25zdCBlbmRwb2ludFJlZ2lvbiA9IHVzZUFyblJlZ2lvbiA/IHJlZ2lvbiA6IGNsaWVudFJlZ2lvbjtcbiAgY29uc3Qgc2lnbmluZ1JlZ2lvbiA9IHVzZUFyblJlZ2lvbiA/IHJlZ2lvbiA6IGNsaWVudFNpZ25pbmdSZWdpb247XG5cbiAgcmV0dXJuIHtcbiAgICBidWNrZXRFbmRwb2ludDogdHJ1ZSxcbiAgICBob3N0bmFtZTogYCR7RE5TSG9zdExhYmVsfS4ke3NlcnZpY2V9JHtpc0ZpcHNSZWdpb24oY2xpZW50UmVnaW9uKSA/IFwiLWZpcHNcIiA6IFwiXCJ9LiR7Z2V0UHNldWRvUmVnaW9uKFxuICAgICAgZW5kcG9pbnRSZWdpb25cbiAgICApfS4ke2hvc3RuYW1lU3VmZml4fWAsXG4gICAgc2lnbmluZ1JlZ2lvbixcbiAgICBzaWduaW5nU2VydmljZTogc2VydmljZSxcbiAgfTtcbn07XG5cbmNvbnN0IGdldEVuZHBvaW50RnJvbU1SQVBBcm4gPSAoe1xuICBkaXNhYmxlTXVsdGlyZWdpb25BY2Nlc3NQb2ludHMsXG4gIGR1YWxzdGFja0VuZHBvaW50ID0gZmFsc2UsXG4gIGlzQ3VzdG9tRW5kcG9pbnQsXG4gIG1yYXBBbGlhcyxcbiAgaG9zdG5hbWVTdWZmaXgsXG59OiBBcm5Ib3N0bmFtZVBhcmFtcyAmIHsgbXJhcEFsaWFzOiBzdHJpbmc7IGhvc3RuYW1lU3VmZml4OiBzdHJpbmcgfSk6IEJ1Y2tldEhvc3RuYW1lID0+IHtcbiAgLy8gSWYgdGhpcyBpcyBhIG11bHRpLXJlZ2lvbmFsIGFjY2VzcyBwb2ludCwgYW5kIG5vdCBleHBsaWNpdGx5IG9wdGVkIG91dC5cbiAgaWYgKGRpc2FibGVNdWx0aXJlZ2lvbkFjY2Vzc1BvaW50cyA9PT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNESyBpcyBhdHRlbXB0aW5nIHRvIHVzZSBhIE1SQVAgQVJOLiBQbGVhc2UgZW5hYmxlIHRvIGZlYXR1cmUuXCIpO1xuICB9XG4gIHZhbGlkYXRlTXJhcEFsaWFzKG1yYXBBbGlhcyk7XG4gIHZhbGlkYXRlTm9EdWFsc3RhY2soZHVhbHN0YWNrRW5kcG9pbnQpO1xuICByZXR1cm4ge1xuICAgIGJ1Y2tldEVuZHBvaW50OiB0cnVlLFxuICAgIGhvc3RuYW1lOiBgJHttcmFwQWxpYXN9JHtpc0N1c3RvbUVuZHBvaW50ID8gXCJcIiA6IGAuYWNjZXNzcG9pbnQuczMtZ2xvYmFsYH0uJHtob3N0bmFtZVN1ZmZpeH1gLFxuICAgIHNpZ25pbmdSZWdpb246IFwiKlwiLFxuICB9O1xufTtcblxuY29uc3QgZ2V0RW5kcG9pbnRGcm9tT3V0cG9zdEFybiA9ICh7XG4gIHVzZUFyblJlZ2lvbixcbiAgY2xpZW50UmVnaW9uLFxuICBjbGllbnRTaWduaW5nUmVnaW9uID0gY2xpZW50UmVnaW9uLFxuICBidWNrZXROYW1lLFxuICBvdXRwb3N0SWQsXG4gIGR1YWxzdGFja0VuZHBvaW50ID0gZmFsc2UsXG4gIHRsc0NvbXBhdGlibGUgPSB0cnVlLFxuICBhY2Nlc3Nwb2ludE5hbWUsXG4gIGlzQ3VzdG9tRW5kcG9pbnQsXG4gIGhvc3RuYW1lU3VmZml4LFxufTogQXJuSG9zdG5hbWVQYXJhbXMgJiB7IG91dHBvc3RJZDogc3RyaW5nOyBhY2Nlc3Nwb2ludE5hbWU6IHN0cmluZzsgaG9zdG5hbWVTdWZmaXg6IHN0cmluZyB9KTogQnVja2V0SG9zdG5hbWUgPT4ge1xuICAvLyBpZiB0aGlzIGlzIGFuIE91dHBvc3QgQVJOXG4gIHZhbGlkYXRlUmVnaW9uYWxDbGllbnQoY2xpZW50UmVnaW9uKTtcbiAgdmFsaWRhdGVSZWdpb24oYnVja2V0TmFtZS5yZWdpb24sIHsgdXNlQXJuUmVnaW9uLCBjbGllbnRSZWdpb24sIGNsaWVudFNpZ25pbmdSZWdpb24gfSk7XG4gIGNvbnN0IEROU0hvc3RMYWJlbCA9IGAke2FjY2Vzc3BvaW50TmFtZX0tJHtidWNrZXROYW1lLmFjY291bnRJZH1gO1xuICB2YWxpZGF0ZUROU0hvc3RMYWJlbChETlNIb3N0TGFiZWwsIHsgdGxzQ29tcGF0aWJsZSB9KTtcbiAgY29uc3QgZW5kcG9pbnRSZWdpb24gPSB1c2VBcm5SZWdpb24gPyBidWNrZXROYW1lLnJlZ2lvbiA6IGNsaWVudFJlZ2lvbjtcbiAgY29uc3Qgc2lnbmluZ1JlZ2lvbiA9IHVzZUFyblJlZ2lvbiA/IGJ1Y2tldE5hbWUucmVnaW9uIDogY2xpZW50U2lnbmluZ1JlZ2lvbjtcbiAgdmFsaWRhdGVPdXRwb3N0U2VydmljZShidWNrZXROYW1lLnNlcnZpY2UpO1xuICB2YWxpZGF0ZUROU0hvc3RMYWJlbChvdXRwb3N0SWQsIHsgdGxzQ29tcGF0aWJsZSB9KTtcbiAgdmFsaWRhdGVOb0R1YWxzdGFjayhkdWFsc3RhY2tFbmRwb2ludCk7XG4gIHZhbGlkYXRlTm9GSVBTKGVuZHBvaW50UmVnaW9uKTtcbiAgY29uc3QgaG9zdG5hbWVQcmVmaXggPSBgJHtETlNIb3N0TGFiZWx9LiR7b3V0cG9zdElkfWA7XG4gIHJldHVybiB7XG4gICAgYnVja2V0RW5kcG9pbnQ6IHRydWUsXG4gICAgaG9zdG5hbWU6IGAke2hvc3RuYW1lUHJlZml4fSR7aXNDdXN0b21FbmRwb2ludCA/IFwiXCIgOiBgLnMzLW91dHBvc3RzLiR7ZW5kcG9pbnRSZWdpb259YH0uJHtob3N0bmFtZVN1ZmZpeH1gLFxuICAgIHNpZ25pbmdSZWdpb24sXG4gICAgc2lnbmluZ1NlcnZpY2U6IFwiczMtb3V0cG9zdHNcIixcbiAgfTtcbn07XG5cbmNvbnN0IGdldEVuZHBvaW50RnJvbUFjY2Vzc1BvaW50QXJuID0gKHtcbiAgdXNlQXJuUmVnaW9uLFxuICBjbGllbnRSZWdpb24sXG4gIGNsaWVudFNpZ25pbmdSZWdpb24gPSBjbGllbnRSZWdpb24sXG4gIGJ1Y2tldE5hbWUsXG4gIGR1YWxzdGFja0VuZHBvaW50ID0gZmFsc2UsXG4gIHRsc0NvbXBhdGlibGUgPSB0cnVlLFxuICBhY2Nlc3Nwb2ludE5hbWUsXG4gIGlzQ3VzdG9tRW5kcG9pbnQsXG4gIGhvc3RuYW1lU3VmZml4LFxufTogQXJuSG9zdG5hbWVQYXJhbXMgJiB7IGFjY2Vzc3BvaW50TmFtZTogc3RyaW5nOyBob3N0bmFtZVN1ZmZpeDogc3RyaW5nIH0pOiBCdWNrZXRIb3N0bmFtZSA9PiB7XG4gIC8vIGNvbnN0cnVjdCBlbmRwb2ludCBmcm9tIEFjY2Vzc3BvaW50IEFSTlxuICB2YWxpZGF0ZVJlZ2lvbmFsQ2xpZW50KGNsaWVudFJlZ2lvbik7XG4gIHZhbGlkYXRlUmVnaW9uKGJ1Y2tldE5hbWUucmVnaW9uLCB7IHVzZUFyblJlZ2lvbiwgY2xpZW50UmVnaW9uLCBjbGllbnRTaWduaW5nUmVnaW9uLCBhbGxvd0ZpcHNSZWdpb246IHRydWUgfSk7XG4gIGNvbnN0IGhvc3RuYW1lUHJlZml4ID0gYCR7YWNjZXNzcG9pbnROYW1lfS0ke2J1Y2tldE5hbWUuYWNjb3VudElkfWA7XG4gIHZhbGlkYXRlRE5TSG9zdExhYmVsKGhvc3RuYW1lUHJlZml4LCB7IHRsc0NvbXBhdGlibGUgfSk7XG4gIGNvbnN0IGVuZHBvaW50UmVnaW9uID0gdXNlQXJuUmVnaW9uID8gYnVja2V0TmFtZS5yZWdpb24gOiBjbGllbnRSZWdpb247XG4gIGNvbnN0IHNpZ25pbmdSZWdpb24gPSB1c2VBcm5SZWdpb24gPyBidWNrZXROYW1lLnJlZ2lvbiA6IGNsaWVudFNpZ25pbmdSZWdpb247XG4gIHZhbGlkYXRlUzNTZXJ2aWNlKGJ1Y2tldE5hbWUuc2VydmljZSk7XG4gIHJldHVybiB7XG4gICAgYnVja2V0RW5kcG9pbnQ6IHRydWUsXG4gICAgaG9zdG5hbWU6IGAke2hvc3RuYW1lUHJlZml4fSR7XG4gICAgICBpc0N1c3RvbUVuZHBvaW50XG4gICAgICAgID8gXCJcIlxuICAgICAgICA6IGAuczMtYWNjZXNzcG9pbnQke2lzRmlwc1JlZ2lvbihjbGllbnRSZWdpb24pID8gXCItZmlwc1wiIDogXCJcIn0ke1xuICAgICAgICAgICAgZHVhbHN0YWNrRW5kcG9pbnQgPyBcIi5kdWFsc3RhY2tcIiA6IFwiXCJcbiAgICAgICAgICB9LiR7Z2V0UHNldWRvUmVnaW9uKGVuZHBvaW50UmVnaW9uKX1gXG4gICAgfS4ke2hvc3RuYW1lU3VmZml4fWAsXG4gICAgc2lnbmluZ1JlZ2lvbixcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,145 @@
1
+ import { __read } from "tslib";
2
+ var DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/;
3
+ var IP_ADDRESS_PATTERN = /(\d+\.){3}\d+/;
4
+ var DOTS_PATTERN = /\.\./;
5
+ export var DOT_PATTERN = /\./;
6
+ export var S3_HOSTNAME_PATTERN = /^(.+\.)?s3[.-]([a-z0-9-]+)\./;
7
+ var S3_US_EAST_1_ALTNAME_PATTERN = /^s3(-external-1)?\.amazonaws\.com$/;
8
+ var AWS_PARTITION_SUFFIX = "amazonaws.com";
9
+ export var isBucketNameOptions = function (options) { return typeof options.bucketName === "string"; };
10
+ export var getPseudoRegion = function (region) { return (isFipsRegion(region) ? region.replace(/fips-|-fips/, "") : region); };
11
+ export var isDnsCompatibleBucketName = function (bucketName) {
12
+ return DOMAIN_PATTERN.test(bucketName) && !IP_ADDRESS_PATTERN.test(bucketName) && !DOTS_PATTERN.test(bucketName);
13
+ };
14
+ var getRegionalSuffix = function (hostname) {
15
+ var parts = hostname.match(S3_HOSTNAME_PATTERN);
16
+ return [parts[2], hostname.replace(new RegExp("^" + parts[0]), "")];
17
+ };
18
+ export var getSuffix = function (hostname) {
19
+ return S3_US_EAST_1_ALTNAME_PATTERN.test(hostname) ? ["us-east-1", AWS_PARTITION_SUFFIX] : getRegionalSuffix(hostname);
20
+ };
21
+ export var getSuffixForArnEndpoint = function (hostname) {
22
+ return S3_US_EAST_1_ALTNAME_PATTERN.test(hostname)
23
+ ? [hostname.replace("." + AWS_PARTITION_SUFFIX, ""), AWS_PARTITION_SUFFIX]
24
+ : getRegionalSuffix(hostname);
25
+ };
26
+ export var validateArnEndpointOptions = function (options) {
27
+ if (options.pathStyleEndpoint) {
28
+ throw new Error("Path-style S3 endpoint is not supported when bucket is an ARN");
29
+ }
30
+ if (options.accelerateEndpoint) {
31
+ throw new Error("Accelerate endpoint is not supported when bucket is an ARN");
32
+ }
33
+ if (!options.tlsCompatible) {
34
+ throw new Error("HTTPS is required when bucket is an ARN");
35
+ }
36
+ };
37
+ export var validateService = function (service) {
38
+ if (service !== "s3" && service !== "s3-outposts" && service !== "s3-object-lambda") {
39
+ throw new Error("Expect 's3' or 's3-outposts' or 's3-object-lambda' in ARN service component");
40
+ }
41
+ };
42
+ export var validateS3Service = function (service) {
43
+ if (service !== "s3") {
44
+ throw new Error("Expect 's3' in Accesspoint ARN service component");
45
+ }
46
+ };
47
+ export var validateOutpostService = function (service) {
48
+ if (service !== "s3-outposts") {
49
+ throw new Error("Expect 's3-posts' in Outpost ARN service component");
50
+ }
51
+ };
52
+ export var validatePartition = function (partition, options) {
53
+ if (partition !== options.clientPartition) {
54
+ throw new Error("Partition in ARN is incompatible, got \"" + partition + "\" but expected \"" + options.clientPartition + "\"");
55
+ }
56
+ };
57
+ export var validateRegion = function (region, options) {
58
+ if (region === "") {
59
+ throw new Error("ARN region is empty");
60
+ }
61
+ if (isFipsRegion(options.clientRegion)) {
62
+ if (!options.allowFipsRegion) {
63
+ throw new Error("FIPS region is not supported");
64
+ }
65
+ else if (!isEqualRegions(region, options.clientRegion)) {
66
+ throw new Error("Client FIPS region " + options.clientRegion + " doesn't match region " + region + " in ARN");
67
+ }
68
+ }
69
+ if (!options.useArnRegion &&
70
+ !isEqualRegions(region, options.clientRegion || "") &&
71
+ !isEqualRegions(region, options.clientSigningRegion || "")) {
72
+ throw new Error("Region in ARN is incompatible, got " + region + " but expected " + options.clientRegion);
73
+ }
74
+ };
75
+ export var validateRegionalClient = function (region) {
76
+ if (["s3-external-1", "aws-global"].includes(getPseudoRegion(region))) {
77
+ throw new Error("Client region " + region + " is not regional");
78
+ }
79
+ };
80
+ export var isFipsRegion = function (region) { return region.startsWith("fips-") || region.endsWith("-fips"); };
81
+ var isEqualRegions = function (regionA, regionB) {
82
+ return regionA === regionB || getPseudoRegion(regionA) === regionB || regionA === getPseudoRegion(regionB);
83
+ };
84
+ export var validateAccountId = function (accountId) {
85
+ if (!/[0-9]{12}/.exec(accountId)) {
86
+ throw new Error("Access point ARN accountID does not match regex '[0-9]{12}'");
87
+ }
88
+ };
89
+ export var validateDNSHostLabel = function (label, options) {
90
+ if (options === void 0) { options = { tlsCompatible: true }; }
91
+ if (label.length >= 64 ||
92
+ !/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/.test(label) ||
93
+ /(\d+\.){3}\d+/.test(label) ||
94
+ /[.-]{2}/.test(label) ||
95
+ ((options === null || options === void 0 ? void 0 : options.tlsCompatible) && DOT_PATTERN.test(label))) {
96
+ throw new Error("Invalid DNS label " + label);
97
+ }
98
+ };
99
+ export var validateCustomEndpoint = function (options) {
100
+ if (options.isCustomEndpoint) {
101
+ if (options.dualstackEndpoint)
102
+ throw new Error("Dualstack endpoint is not supported with custom endpoint");
103
+ if (options.accelerateEndpoint)
104
+ throw new Error("Accelerate endpoint is not supported with custom endpoint");
105
+ }
106
+ };
107
+ export var getArnResources = function (resource) {
108
+ var delimiter = resource.includes(":") ? ":" : "/";
109
+ var _a = __read(resource.split(delimiter)), resourceType = _a[0], rest = _a.slice(1);
110
+ if (resourceType === "accesspoint") {
111
+ if (rest.length !== 1 || rest[0] === "") {
112
+ throw new Error("Access Point ARN should have one resource accesspoint" + delimiter + "{accesspointname}");
113
+ }
114
+ return { accesspointName: rest[0] };
115
+ }
116
+ else if (resourceType === "outpost") {
117
+ if (!rest[0] || rest[1] !== "accesspoint" || !rest[2] || rest.length !== 3) {
118
+ throw new Error("Outpost ARN should have resource outpost" + delimiter + "{outpostId}" + delimiter + "accesspoint" + delimiter + "{accesspointName}");
119
+ }
120
+ var _b = __read(rest, 3), outpostId = _b[0], _1 = _b[1], accesspointName = _b[2];
121
+ return { outpostId: outpostId, accesspointName: accesspointName };
122
+ }
123
+ else {
124
+ throw new Error("ARN resource should begin with 'accesspoint" + delimiter + "' or 'outpost" + delimiter + "'");
125
+ }
126
+ };
127
+ export var validateNoDualstack = function (dualstackEndpoint) {
128
+ if (dualstackEndpoint)
129
+ throw new Error("Dualstack endpoint is not supported with Outpost or Multi-region Access Point ARN.");
130
+ };
131
+ export var validateNoFIPS = function (region) {
132
+ if (isFipsRegion(region !== null && region !== void 0 ? region : ""))
133
+ throw new Error("FIPS region is not supported with Outpost, got " + region);
134
+ };
135
+ export var validateMrapAlias = function (name) {
136
+ try {
137
+ name.split(".").forEach(function (label) {
138
+ validateDNSHostLabel(label);
139
+ });
140
+ }
141
+ catch (e) {
142
+ throw new Error("\"" + name + "\" is not a DNS compatible name.");
143
+ }
144
+ };
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0SG9zdG5hbWVVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWNrZXRIb3N0bmFtZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxJQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQztBQUM5RCxJQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUMzQyxJQUFNLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDNUIsTUFBTSxDQUFDLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLENBQUMsSUFBTSxtQkFBbUIsR0FBRyw4QkFBOEIsQ0FBQztBQUNsRSxJQUFNLDRCQUE0QixHQUFHLG9DQUFvQyxDQUFDO0FBQzFFLElBQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0FBeUI3QyxNQUFNLENBQUMsSUFBTSxtQkFBbUIsR0FBRyxVQUNqQyxPQUFpRCxJQUNiLE9BQUEsT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBdEMsQ0FBc0MsQ0FBQztBQU03RSxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQUcsVUFBQyxNQUFjLElBQUssT0FBQSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFuRSxDQUFtRSxDQUFDO0FBVXZILE1BQU0sQ0FBQyxJQUFNLHlCQUF5QixHQUFHLFVBQUMsVUFBa0I7SUFDMUQsT0FBQSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFBekcsQ0FBeUcsQ0FBQztBQUU1RyxJQUFNLGlCQUFpQixHQUFHLFVBQUMsUUFBZ0I7SUFDekMsSUFBTSxLQUFLLEdBQUcsUUFBUSxD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QUFLLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztBQUMxRyxDQUFDLENBQUM7QUFNRixNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUcsVUFBQyxNQUFlO0lBQzVDLElBQUksWUFBWSxDQUFDLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUUsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQWtELE1BQVEsQ0FBQyxDQUFDO0FBQzlHLENBQUMsQ0FBQztBQU1GLE1BQU0sQ0FBQyxJQUFNLGlCQUFpQixHQUFHLFVBQUMsSUFBWTtJQUM1QyxJQUFJO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO1lBQzVCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBSSxJQUFJLHFDQUFpQyxDQUFDLENBQUM7S0FDNUQ7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUk4gfSBmcm9tIFwiQGF3cy1zZGsvdXRpbC1hcm4tcGFyc2VyXCI7XG5cbmNvbnN0IERPTUFJTl9QQVRURVJOID0gL15bYS16MC05XVthLXowLTlcXC5cXC1dezEsNjF9W2EtejAtOV0kLztcbmNvbnN0IElQX0FERFJFU1NfUEFUVEVSTiA9IC8oXFxkK1xcLil7M31cXGQrLztcbmNvbnN0IERPVFNfUEFUVEVSTiA9IC9cXC5cXC4vO1xuZXhwb3J0IGNvbnN0IERPVF9QQVRURVJOID0gL1xcLi87XG5leHBvcnQgY29uc3QgUzNfSE9TVE5BTUVfUEFUVEVSTiA9IC9eKC4rXFwuKT9zM1suLV0oW2EtejAtOS1dKylcXC4vO1xuY29uc3QgUzNfVVNfRUFTVF8xX0FMVE5BTUVfUEFUVEVSTiA9IC9eczMoLWV4dGVybmFsLTEpP1xcLmFtYXpvbmF3c1xcLmNvbSQvO1xuY29uc3QgQVdTX1BBUlRJVElPTl9TVUZGSVggPSBcImFtYXpvbmF3cy5jb21cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NQb2ludEFybiBleHRlbmRzIEFSTiB7XG4gIGFjY2Vzc1BvaW50TmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEhvc3RuYW1lUGFyYW1zIHtcbiAgaXNDdXN0b21FbmRwb2ludDogYm9vbGVhbjtcbiAgYmFzZUhvc3RuYW1lOiBzdHJpbmc7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgY2xpZW50UmVnaW9uOiBzdHJpbmc7XG4gIGFjY2VsZXJhdGVFbmRwb2ludD86IGJvb2xlYW47XG4gIGR1YWxzdGFja0VuZHBvaW50PzogYm9vbGVhbjtcbiAgcGF0aFN0eWxlRW5kcG9pbnQ/OiBib29sZWFuO1xuICB0bHNDb21wYXRpYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcm5Ib3N0bmFtZVBhcmFtcyBleHRlbmRzIE9taXQ8QnVja2V0SG9zdG5hbWVQYXJhbXMsIFwiYnVja2V0TmFtZVwiPiB7XG4gIGJ1Y2tldE5hbWU6IEFSTjtcbiAgY2xpZW50U2lnbmluZ1JlZ2lvbj86IHN0cmluZztcbiAgY2xpZW50UGFydGl0aW9uPzogc3RyaW5nO1xuICB1c2VBcm5SZWdpb24/OiBib29sZWFuO1xuICBkaXNhYmxlTXVsdGlyZWdpb25BY2Nlc3NQb2ludHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgaXNCdWNrZXROYW1lT3B0aW9ucyA9IChcbiAgb3B0aW9uczogQnVja2V0SG9zdG5hbWVQYXJhbXMgfCBBcm5Ib3N0bmFtZVBhcmFtc1xuKTogb3B0aW9ucyBpcyBCdWNrZXRIb3N0bmFtZVBhcmFtcyA9PiB0eXBlb2Ygb3B0aW9ucy5idWNrZXROYW1lID09PSBcInN0cmluZ1wiO1xuXG4vKipcbiAqIEdldCBwc2V1ZG8gcmVnaW9uIGZyb20gc3VwcGxpZWQgcmVnaW9uLiBGb3IgZXhhbXBsZSwgaWYgc3VwcGxpZWQgd2l0aCBgZmlwcy11cy13ZXN0LTJgLCBpdCByZXR1cm5zIGB1cy13ZXN0LTJgLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQc2V1ZG9SZWdpb24gPSAocmVnaW9uOiBzdHJpbmcpID0+IChpc0ZpcHNSZWdpb24ocmVnaW9uKSA/IHJlZ2lvbi5yZXBsYWNlKC9maXBzLXwtZmlwcy8sIFwiXCIpIDogcmVnaW9uKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBzdHJpbmcgaXMgRE5TIGNvbXBsaWFudCBwZXIgdGhlIHJ1bGVzIG91dGxpbmVkIGJ5XG4gKiBTMy4gTGVuZ3RoLCBjYXBpdGFpemF0aW9uLCBhbmQgbGVhZGluZyBkb3QgcmVzdHJpY3Rpb25zIGFyZSBlbmZvcmNlZCBieSB0aGVcbiAqIERPTUFJTl9QQVRURVJOIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvQnVja2V0UmVzdHJpY3Rpb25zLmh0bWxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRG5zQ29tcGF0aWJsZUJ1Y2tldE5hbWUgPSAoYnVja2V0TmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBET01BSU5fUEFUVEVSTi50ZXN0KGJ1Y2tldE5hbWUpICYmICFJUF9BRERSRVNTX1BBVFRFUk4udGVzdChidWNrZXROYW1lKSAmJiAhRE9UU19QQVRURVJOLnRlc3QoYnVja2V0TmFtZSk7XG5cbmNvbnN0IGdldFJlZ2lvbmFsU3VmZml4ID0gKGhvc3RuYW1lOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddID0+IHtcbiAgY29uc3QgcGFydHMgPSBob3N0bmFtZS5tYXRjaChTM19IT1NUTkFNRV9QQVRURVJOKSE7XG4gIHJldHVybiBbcGFydHNbMl0sIGhvc3RuYW1lLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cGFydHNbMF19YCksIFwiXCIpXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdWZmaXggPSAoaG9zdG5hbWU6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10gPT5cbiAgUzNfVVNfRUFTVF8xX0FMVE5BTUVfUEFUVEVSTi50ZXN0KGhvc3RuYW1lKSA/IFtcInVzLWVhc3QtMVwiLCBBV1NfUEFSVElUSU9OX1NVRkZJWF0gOiBnZXRSZWdpb25hbFN1ZmZpeChob3N0bmFtZSk7XG5cbi8qKlxuICogSW5mZXIgcmVnaW9uIGFuZCBob3N0bmFtZSBzdWZmaXggZnJvbSBhIGNvbXBsZXRlIGhvc3RuYW1lXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBob3N0bmFtZSAtIEhvc3RuYW1lXG4gKiBAcmV0dXJucyBbUmVnaW9uLCBIb3N0bmFtZSBzdWZmaXhdXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdWZmaXhGb3JBcm5FbmRwb2ludCA9IChob3N0bmFtZTogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSA9PlxuICBTM19VU19FQVNUXzFfQUxUTkFNRV9QQVRURVJOLnRlc3QoaG9zdG5hbWUpXG4gICAgPyBbaG9zdG5hbWUucmVwbGFjZShgLiR7QVdTX1BBUlRJVElPTl9TVUZGSVh9YCwgXCJcIiksIEFXU19QQVJUSVRJT05fU1VGRklYXVxuICAgIDogZ2V0UmVnaW9uYWxTdWZmaXgoaG9zdG5hbWUpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBcm5FbmRwb2ludE9wdGlvbnMgPSAob3B0aW9uczoge1xuICBhY2NlbGVyYXRlRW5kcG9pbnQ/OiBib29sZWFuO1xuICB0bHNDb21wYXRpYmxlPzogYm9vbGVhbjtcbiAgcGF0aFN0eWxlRW5kcG9pbnQ/OiBib29sZWFuO1xufSkgPT4ge1xuICBpZiAob3B0aW9ucy5wYXRoU3R5bGVFbmRwb2ludCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGgtc3R5bGUgUzMgZW5kcG9pbnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIGJ1Y2tldCBpcyBhbiBBUk5cIik7XG4gIH1cbiAgaWYgKG9wdGlvbnMuYWNjZWxlcmF0ZUVuZHBvaW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZWxlcmF0ZSBlbmRwb2ludCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gYnVja2V0IGlzIGFuIEFSTlwiKTtcbiAgfVxuICBpZiAoIW9wdGlvbnMudGxzQ29tcGF0aWJsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFBTIGlzIHJlcXVpcmVkIHdoZW4gYnVja2V0IGlzIGFuIEFSTlwiKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU2VydmljZSA9IChzZXJ2aWNlOiBzdHJpbmcpID0+IHtcbiAgaWYgKHNlcnZpY2UgIT09IFwiczNcIiAmJiBzZXJ2aWNlICE9PSBcInMzLW91dHBvc3RzXCIgJiYgc2VydmljZSAhPT0gXCJzMy1vYmplY3QtbGFtYmRhXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3QgJ3MzJyBvciAnczMtb3V0cG9zdHMnIG9yICdzMy1vYmplY3QtbGFtYmRhJyBpbiBBUk4gc2VydmljZSBjb21wb25lbnRcIik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVMzU2VydmljZSA9IChzZXJ2aWNlOiBzdHJpbmcpID0+IHtcbiAgaWYgKHNlcnZpY2UgIT09IFwiczNcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdCAnczMnIGluIEFjY2Vzc3BvaW50IEFSTiBzZXJ2aWNlIGNvbXBvbmVudFwiKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlT3V0cG9zdFNlcnZpY2UgPSAoc2VydmljZTogc3RyaW5nKSA9PiB7XG4gIGlmIChzZXJ2aWNlICE9PSBcInMzLW91dHBvc3RzXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3QgJ3MzLXBvc3RzJyBpbiBPdXRwb3N0IEFSTiBzZXJ2aWNlIGNvbXBvbmVudFwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBwYXJ0aXRpb24gaW5mZXJyZWQgZnJvbSBBUk4gaXMgdGhlIHNhbWUgdG8gYG9wdGlvbnMuY2xpZW50UGFydGl0aW9uYC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQYXJ0aXRpb24gPSAocGFydGl0aW9uOiBzdHJpbmcsIG9wdGlvbnM6IHsgY2xpZW50UGFydGl0aW9uOiBzdHJpbmcgfSkgPT4ge1xuICBpZiAocGFydGl0aW9uICE9PSBvcHRpb25zLmNsaWVudFBhcnRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGFydGl0aW9uIGluIEFSTiBpcyBpbmNvbXBhdGlibGUsIGdvdCBcIiR7cGFydGl0aW9ufVwiIGJ1dCBleHBlY3RlZCBcIiR7b3B0aW9ucy5jbGllbnRQYXJ0aXRpb259XCJgKTtcbiAgfVxufTtcblxuLyoqXG4gKiB2YWxpZGF0ZSByZWdpb24gdmFsdWUgaW5mZXJyZWQgZnJvbSBBUk4uIElmIGBvcHRpb25zLnVzZUFyblJlZ2lvbmAgaXMgc2V0LCBpdCB2YWxpZGF0ZXMgdGhlIHJlZ2lvbiBpcyBub3QgYSBGSVBTXG4gKiByZWdpb24uIElmIGBvcHRpb25zLnVzZUFyblJlZ2lvbmAgaXMgdW5zZXQsIGl0IHZhbGlkYXRlcyB0aGUgcmVnaW9uIGlzIGVxdWFsIHRvIGBvcHRpb25zLmNsaWVudFJlZ2lvbmAgb3JcbiAqIGBvcHRpb25zLmNsaWVudFNpZ25pbmdSZWdpb25gLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVJlZ2lvbiA9IChcbiAgcmVnaW9uOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICB1c2VBcm5SZWdpb24/OiBib29sZWFuO1xuICAgIGFsbG93Rmlwc1JlZ2lvbj86IGJvb2xlYW47XG4gICAgY2xpZW50UmVnaW9uOiBzdHJpbmc7XG4gICAgY2xpZW50U2lnbmluZ1JlZ2lvbjogc3RyaW5nO1xuICB9XG4pID0+IHtcbiAgaWYgKHJlZ2lvbiA9PT0gXCJcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkFSTiByZWdpb24gaXMgZW1wdHlcIik7XG4gIH1cbiAgaWYgKGlzRmlwc1JlZ2lvbihvcHRpb25zLmNsaWVudFJlZ2lvbikpIHtcbiAgICBpZiAoIW9wdGlvbnMuYWxsb3dGaXBzUmVnaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGSVBTIHJlZ2lvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWlzRXF1YWxSZWdpb25zKHJlZ2lvbiwgb3B0aW9ucy5jbGllbnRSZWdpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENsaWVudCBGSVBTIHJlZ2lvbiAke29wdGlvbnMuY2xpZW50UmVnaW9ufSBkb2Vzbid0IG1hdGNoIHJlZ2lvbiAke3JlZ2lvbn0gaW4gQVJOYCk7XG4gICAgfVxuICB9XG4gIGlmIChcbiAgICAhb3B0aW9ucy51c2VBcm5SZWdpb24gJiZcbiAgICAhaXNFcXVhbFJlZ2lvbnMocmVnaW9uLCBvcHRpb25zLmNsaWVudFJlZ2lvbiB8fCBcIlwiKSAmJlxuICAgICFpc0VxdWFsUmVnaW9ucyhyZWdpb24sIG9wdGlvbnMuY2xpZW50U2lnbmluZ1JlZ2lvbiB8fCBcIlwiKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlZ2lvbiBpbiBBUk4gaXMgaW5jb21wYXRpYmxlLCBnb3QgJHtyZWdpb259IGJ1dCBleHBlY3RlZCAke29wdGlvbnMuY2xpZW50UmVnaW9ufWApO1xuICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gcmVnaW9uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVJlZ2lvbmFsQ2xpZW50ID0gKHJlZ2lvbjogc3RyaW5nKSA9PiB7XG4gIGlmIChbXCJzMy1leHRlcm5hbC0xXCIsIFwiYXdzLWdsb2JhbFwiXS5pbmNsdWRlcyhnZXRQc2V1ZG9SZWdpb24ocmVnaW9uKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENsaWVudCByZWdpb24gJHtyZWdpb259IGlzIG5vdCByZWdpb25hbGApO1xuICB9XG59O1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgaXNGaXBzUmVnaW9uID0gKHJlZ2lvbjogc3RyaW5nKSA9PiByZWdpb24uc3RhcnRzV2l0aChcImZpcHMtXCIpIHx8IHJlZ2lvbi5lbmRzV2l0aChcIi1maXBzXCIpO1xuXG5jb25zdCBpc0VxdWFsUmVnaW9ucyA9IChyZWdpb25BOiBzdHJpbmcsIHJlZ2lvbkI6IHN0cmluZykgPT5cbiAgcmVnaW9uQSA9PT0gcmVnaW9uQiB8fCBnZXRQc2V1ZG9SZWdpb24ocmVnaW9uQSkgPT09IHJlZ2lvbkIgfHwgcmVnaW9uQSA9PT0gZ2V0UHNldWRvUmVnaW9uKHJlZ2lvbkIpO1xuXG4vKipcbiAqIFZhbGlkYXRlIGFuIGFjY291bnQgSURcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY2NvdW50SWQgPSAoYWNjb3VudElkOiBzdHJpbmcpID0+IHtcbiAgaWYgKCEvWzAtOV17MTJ9Ly5leGVjKGFjY291bnRJZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2Nlc3MgcG9pbnQgQVJOIGFjY291bnRJRCBkb2VzIG5vdCBtYXRjaCByZWdleCAnWzAtOV17MTJ9J1wiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGhvc3QgbGFiZWwgYWNjb3JkaW5nIHRvIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVETlNIb3N0TGFiZWwgPSAobGFiZWw6IHN0cmluZywgb3B0aW9uczogeyB0bHNDb21wYXRpYmxlPzogYm9vbGVhbiB9ID0geyB0bHNDb21wYXRpYmxlOiB0cnVlIH0pID0+IHtcbiAgLy8gcmVmZXJlbmNlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yXG4gIGlmIChcbiAgICBsYWJlbC5sZW5ndGggPj0gNjQgfHxcbiAgICAhL15bYS16MC05XVthLXowLTkuLV0qW2EtejAtOV0kLy50ZXN0KGxhYmVsKSB8fFxuICAgIC8oXFxkK1xcLil7M31cXGQrLy50ZXN0KGxhYmVsKSB8fFxuICAgIC9bLi1dezJ9Ly50ZXN0KGxhYmVsKSB8fFxuICAgIChvcHRpb25zPy50bHNDb21wYXRpYmxlICYmIERPVF9QQVRURVJOLnRlc3QobGFiZWwpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRE5TIGxhYmVsICR7bGFiZWx9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUN1c3RvbUVuZHBvaW50ID0gKG9wdGlvbnM6IHtcbiAgaXNDdXN0b21FbmRwb2ludD86IGJvb2xlYW47XG4gIGR1YWxzdGFja0VuZHBvaW50PzogYm9vbGVhbjtcbiAgYWNjZWxlcmF0ZUVuZHBvaW50PzogYm9vbGVhbjtcbn0pID0+IHtcbiAgaWYgKG9wdGlvbnMuaXNDdXN0b21FbmRwb2ludCkge1xuICAgIGlmIChvcHRpb25zLmR1YWxzdGFja0VuZHBvaW50KSB0aHJvdyBuZXcgRXJyb3IoXCJEdWFsc3RhY2sgZW5kcG9pbnQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGN1c3RvbSBlbmRwb2ludFwiKTtcbiAgICBpZiAob3B0aW9ucy5hY2NlbGVyYXRlRW5kcG9pbnQpIHRocm93IG5ldyBFcnJvcihcIkFjY2VsZXJhdGUgZW5kcG9pbnQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGN1c3RvbSBlbmRwb2ludFwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgcGFyc2UgYW4gQWNjZXNzIFBvaW50IEFSTiBvciBPdXRwb3N0cyBBUk5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIEBwYXJhbSByZXNvdXJjZSAtIFRoZSByZXNvdXJjZSBzZWN0aW9uIG9mIGFuIEFSTlxuICogQHJldHVybnMgQWNjZXNzIFBvaW50IE5hbWUgYW5kIG9wdGlvbmFsIE91dHBvc3QgSUQuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBcm5SZXNvdXJjZXMgPSAoXG4gIHJlc291cmNlOiBzdHJpbmdcbik6IHtcbiAgYWNjZXNzcG9pbnROYW1lOiBzdHJpbmc7XG4gIG91dHBvc3RJZD86IHN0cmluZztcbn0gPT4ge1xuICBjb25zdCBkZWxpbWl0ZXIgPSByZXNvdXJjZS5pbmNsdWRlcyhcIjpcIikgPyBcIjpcIiA6IFwiL1wiO1xuICBjb25zdCBbcmVzb3VyY2VUeXBlLCAuLi5yZXN0XSA9IHJlc291cmNlLnNwbGl0KGRlbGltaXRlcik7XG4gIGlmIChyZXNvdXJjZVR5cGUgPT09IFwiYWNjZXNzcG9pbnRcIikge1xuICAgIC8vIFBhcnNlIGFjY2Vzc3BvaW50IEFSTlxuICAgIGlmIChyZXN0Lmxlbmd0aCAhPT0gMSB8fCByZXN0WzBdID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjY2VzcyBQb2ludCBBUk4gc2hvdWxkIGhhdmUgb25lIHJlc291cmNlIGFjY2Vzc3BvaW50JHtkZWxpbWl0ZXJ9e2FjY2Vzc3BvaW50bmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWNjZXNzcG9pbnROYW1lOiByZXN0WzBdIH07XG4gIH0gZWxzZSBpZiAocmVzb3VyY2VUeXBlID09PSBcIm91dHBvc3RcIikge1xuICAgIC8vIFBhcnNlIG91dHBvc3QgQVJOXG4gICAgaWYgKCFyZXN0WzBdIHx8IHJlc3RbMV0gIT09IFwiYWNjZXNzcG9pbnRcIiB8fCAhcmVzdFsyXSB8fCByZXN0Lmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgT3V0cG9zdCBBUk4gc2hvdWxkIGhhdmUgcmVzb3VyY2Ugb3V0cG9zdCR7ZGVsaW1pdGVyfXtvdXRwb3N0SWR9JHtkZWxpbWl0ZXJ9YWNjZXNzcG9pbnQke2RlbGltaXRlcn17YWNjZXNzcG9pbnROYW1lfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IFtvdXRwb3N0SWQsIF8sIGFjY2Vzc3BvaW50TmFtZV0gPSByZXN0O1xuICAgIHJldHVybiB7IG91dHBvc3RJZCwgYWNjZXNzcG9pbnROYW1lIH07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBUk4gcmVzb3VyY2Ugc2hvdWxkIGJlZ2luIHdpdGggJ2FjY2Vzc3BvaW50JHtkZWxpbWl0ZXJ9JyBvciAnb3V0cG9zdCR7ZGVsaW1pdGVyfSdgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaHJvdyBpZiBkdWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIHRydWUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTm9EdWFsc3RhY2sgPSAoZHVhbHN0YWNrRW5kcG9pbnQ/OiBib29sZWFuKSA9PiB7XG4gIGlmIChkdWFsc3RhY2tFbmRwb2ludClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEdWFsc3RhY2sgZW5kcG9pbnQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIE91dHBvc3Qgb3IgTXVsdGktcmVnaW9uIEFjY2VzcyBQb2ludCBBUk4uXCIpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSByZWdpb24gaXMgbm90IGFwcGVuZGVkIG9yIHByZXBlbmRlZCB3aXRoIGEgYGZpcHMtYFxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU5vRklQUyA9IChyZWdpb24/OiBzdHJpbmcpID0+IHtcbiAgaWYgKGlzRmlwc1JlZ2lvbihyZWdpb24gPz8gXCJcIikpIHRocm93IG5ldyBFcnJvcihgRklQUyByZWdpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRoIE91dHBvc3QsIGdvdCAke3JlZ2lvbn1gKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIG11bHRpLXJlZ2lvbiBhY2Nlc3MgcG9pbnQgYWxpYXMuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVNcmFwQWxpYXMgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgbmFtZS5zcGxpdChcIi5cIikuZm9yRWFjaCgobGFiZWwpID0+IHtcbiAgICAgIHZhbGlkYXRlRE5TSG9zdExhYmVsKGxhYmVsKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXCIke25hbWV9XCIgaXMgbm90IGEgRE5TIGNvbXBhdGlibGUgbmFtZS5gKTtcbiAgfVxufTtcbiJdfQ==
@@ -0,0 +1,54 @@
1
+ import { __assign } from "tslib";
2
+ export function resolveBucketEndpointConfig(input) {
3
+ var _a = input.bucketEndpoint, bucketEndpoint = _a === void 0 ? false : _a, _b = input.forcePathStyle, forcePathStyle = _b === void 0 ? false : _b, _c = input.useAccelerateEndpoint, useAccelerateEndpoint = _c === void 0 ? false : _c, _d = input.useDualstackEndpoint, useDualstackEndpoint = _d === void 0 ? false : _d, _e = input.useArnRegion, useArnRegion = _e === void 0 ? false : _e, _f = input.disableMultiregionAccessPoints, disableMultiregionAccessPoints = _f === void 0 ? false : _f;
4
+ return __assign(__assign({}, input), { bucketEndpoint: bucketEndpoint, forcePathStyle: forcePathStyle, useAccelerateEndpoint: useAccelerateEndpoint, useDualstackEndpoint: useDualstackEndpoint, useArnRegion: typeof useArnRegion === "function" ? useArnRegion : function () { return Promise.resolve(useArnRegion); }, disableMultiregionAccessPoints: typeof disableMultiregionAccessPoints === "function"
5
+ ? disableMultiregionAccessPoints
6
+ : function () { return Promise.resolve(disableMultiregionAccessPoints); } });
7
+ }
8
+ export var NODE_USE_ARN_REGION_ENV_NAME = "AWS_S3_USE_ARN_REGION";
9
+ export var NODE_USE_ARN_REGION_INI_NAME = "s3_use_arn_region";
10
+ export var NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME = "AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS";
11
+ export var NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME = "s3_disable_multiregion_access_points";
12
+ export var NODE_USE_ARN_REGION_CONFIG_OPTIONS = {
13
+ environmentVariableSelector: function (env) {
14
+ if (!Object.prototype.hasOwnProperty.call(env, NODE_USE_ARN_REGION_ENV_NAME))
15
+ return undefined;
16
+ if (env[NODE_USE_ARN_REGION_ENV_NAME] === "true")
17
+ return true;
18
+ if (env[NODE_USE_ARN_REGION_ENV_NAME] === "false")
19
+ return false;
20
+ throw new Error("Cannot load env " + NODE_USE_ARN_REGION_ENV_NAME + ". Expected \"true\" or \"false\", got " + env[NODE_USE_ARN_REGION_ENV_NAME] + ".");
21
+ },
22
+ configFileSelector: function (profile) {
23
+ if (!Object.prototype.hasOwnProperty.call(profile, NODE_USE_ARN_REGION_INI_NAME))
24
+ return undefined;
25
+ if (profile[NODE_USE_ARN_REGION_INI_NAME] === "true")
26
+ return true;
27
+ if (profile[NODE_USE_ARN_REGION_INI_NAME] === "false")
28
+ return false;
29
+ throw new Error("Cannot load shared config entry " + NODE_USE_ARN_REGION_INI_NAME + ". Expected \"true\" or \"false\", got " + profile[NODE_USE_ARN_REGION_INI_NAME] + ".");
30
+ },
31
+ default: false,
32
+ };
33
+ export var NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS = {
34
+ environmentVariableSelector: function (env) {
35
+ if (!Object.prototype.hasOwnProperty.call(env, NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME))
36
+ return undefined;
37
+ if (env[NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME] === "true")
38
+ return true;
39
+ if (env[NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME] === "false")
40
+ return false;
41
+ throw new Error("Cannot load env " + NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME + ". Expected \"true\" or \"false\", got " + env[NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME] + ".");
42
+ },
43
+ configFileSelector: function (profile) {
44
+ if (!Object.prototype.hasOwnProperty.call(profile, NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME))
45
+ return undefined;
46
+ if (profile[NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME] === "true")
47
+ return true;
48
+ if (profile[NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME] === "false")
49
+ return false;
50
+ throw new Error("Cannot load shared config entry " + NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME + ". Expected \"true\" or \"false\", got " + profile[NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME] + ".");
51
+ },
52
+ default: false,
53
+ };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlndXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQThFQSxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLEtBQXlEO0lBR3ZELElBQUEsS0FNRSxLQUFLLGVBTmUsRUFBdEIsY0FBYyxtQkFBRyxLQUFLLEtBQUEsRUFDdEIsS0FLRSxLQUFLLGVBTGUsRUFBdEIsY0FBYyxtQkFBRyxLQUFLLEtBQUEsRUFDdEIsS0FJRSxLQUFLLHNCQUpzQixFQUE3QixxQkFBcUIsbUJBQUcsS0FBSyxLQUFBLEVBQzdCLEtBR0UsS0FBSyxxQkFIcUIsRUFBNUIsb0JBQW9CLG1CQUFHLEtBQUssS0FBQSxFQUM1QixLQUVFLEtBQUssYUFGYSxFQUFwQixZQUFZLG1CQUFHLEtBQUssS0FBQSxFQUNwQixLQUNFLEtBQUssK0JBRCtCLEVBQXRDLDhCQUE4QixtQkFBRyxLQUFLLEtBQUEsQ0FDOUI7SUFDViw2QkFDSyxLQUFLLEtBQ1IsY0FBYyxnQkFBQSxFQUNkLGNBQWMsZ0JBQUEsRUFDZCxxQkFBcUIsdUJBQUEsRUFDckIsb0JBQW9CLHNCQUFBLEVBQ3BCLFlBQVksRUFBRSxPQUFPLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBTSxPQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQTdCLENBQTZCLEVBQ3JHLDhCQUE4QixFQUM1QixPQUFPLDhCQUE4QixLQUFLLFVBQVU7WUFDbEQsQ0FBQyxDQUFDLDhCQUE4QjtZQUNoQyxDQUFDLENBQUMsY0FBTSxPQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsRUFBL0MsQ0FBK0MsSUFDM0Q7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLElBQU0sNEJBQTRCLEdBQUcsdUJBQXVCLENBQUM7QUFDcEUsTUFBTSxDQUFDLElBQU0sNEJBQTRCLEdBQUcsbUJBQW1CLENBQUM7QUFFaEUsTUFBTSxDQUFDLElBQU0sOENBQThDLEdBQUcsMENBQTBDLENBQUM7QUFDekcsTUFBTSxDQUFDLElBQU0sOENBQThDLEdBQUcsc0NBQXNDLENBQUM7QUFPckcsTUFBTSxDQUFDLElBQU0sa0NBQWtDLEdBQW1DO0lBQ2hGLDJCQUEyQixFQUFFLFVBQUMsR0FBc0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMvRixJQUFJLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUM5RCxJQUFJLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoRSxNQUFNLElBQUksS0FBSyxDQUNiLHFCQUFtQiw0QkFBNEIsOENBQXFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxNQUFHLENBQ3pILENBQUM7SUFDSixDQUFDO0lBQ0Qsa0JBQWtCLEVBQUUsVUFBQyxPQUFPO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDbkcsSUFBSSxPQUFPLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEUsSUFBSSxPQUFPLENBQUMsNEJBQTRCLENBQUMsS0FBSyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FDYixxQ0FBbUMsNEJBQTRCLDhDQUFxQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsTUFBRyxDQUM3SSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sRUFBRSxLQUFLO0NBQ2YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxJQUFNLG9EQUFvRCxHQUFtQztJQUNsRywyQkFBMkIsRUFBRSxVQUFDLEdBQXNCO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLDhDQUE4QyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDakgsSUFBSSxHQUFHLENBQUMsOENBQThDLENBQUMsS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEYsSUFBSSxHQUFHLENBQUMsOENBQThDLENBQUMsS0FBSyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbEYsTUFBTSxJQUFJLEtBQUssQ0FDYixxQkFBbUIsOENBQThDLDhDQUFxQyxHQUFHLENBQUMsOENBQThDLENBQUMsTUFBRyxDQUM3SixDQUFDO0lBQ0osQ0FBQztJQUNELGtCQUFrQixFQUFFLFVBQUMsT0FBTztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw4Q0FBOEMsQ0FBQztZQUNoRyxPQUFPLFNBQVMsQ0FBQztRQUNuQixJQUFJLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQyxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNwRixJQUFJLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQyxLQUFLLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RixNQUFNLElBQUksS0FBSyxDQUNiLHFDQUFtQyw4Q0FBOEMsOENBQXFDLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQyxNQUFHLENBQ2pMLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9hZGVkQ29uZmlnU2VsZWN0b3JzIH0gZnJvbSBcIkBhd3Mtc2RrL25vZGUtY29uZmlnLXByb3ZpZGVyXCI7XG5pbXBvcnQgeyBQcm92aWRlciwgUmVnaW9uSW5mb1Byb3ZpZGVyIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0RW5kcG9pbnRJbnB1dENvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm92aWRlZCBlbmRwb2ludCBhZGRyZXNzZXMgYW4gaW5kaXZpZHVhbCBidWNrZXQuXG4gICAqL1xuICBidWNrZXRFbmRwb2ludD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIHBhdGggc3R5bGUgVVJMcyBmb3IgUzMgb2JqZWN0cyAoZS5nLiwgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLzxidWNrZXROYW1lPi88a2V5PiBpbnN0ZWFkIG9mIGh0dHBzOi8vPGJ1Y2tldE5hbWU+LnMzLmFtYXpvbmF3cy5jb20vPGtleT5cbiAgICovXG4gIGZvcmNlUGF0aFN0eWxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIHRoZSBTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZW5kcG9pbnQgYnkgZGVmYXVsdFxuICAgKi9cbiAgdXNlQWNjZWxlcmF0ZUVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZXMgSVB2Ni9JUHY0IGR1YWxzdGFjayBlbmRwb2ludC4gV2hlbiBhIEROUyBsb29rdXAgaXMgcGVyZm9ybWVkIG9uIGFuIGVuZHBvaW50IG9mIHRoaXMgdHlwZSwgaXQgcmV0dXJucyBhbiDigJxB4oCdXG4gICAqIHJlY29yZCB3aXRoIGFuIElQdjQgYWRkcmVzcyBhbmQgYW4g4oCcQUFBQeKAnSByZWNvcmQgd2l0aCBhbiBJUHY2IGFkZHJlc3MuIEluIG1vc3QgY2FzZXMgdGhlIG5ldHdvcmsgc3RhY2sgaW4gdGhlXG4gICAqIGNsaWVudCBlbnZpcm9ubWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZmVyIHRoZSBBQUFBIHJlY29yZCBhbmQgbWFrZSBhIGNvbm5lY3Rpb24gdXNpbmcgdGhlIElQdjYgYWRkcmVzcy4gTm90ZSxcbiAgICogaG93ZXZlciwgdGhhdCBjdXJyZW50bHkgb24gV2luZG93cywgdGhlIElQdjQgYWRkcmVzcyB3aWxsIGJlIHByZWZlcnJlZC5cbiAgICovXG4gIHVzZUR1YWxzdGFja0VuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gb3ZlcnJpZGUgdGhlIHJlcXVlc3QgcmVnaW9uIHdpdGggdGhlIHJlZ2lvbiBpbmZlcnJlZCBmcm9tIHJlcXVlc3RlZCByZXNvdXJjZSdzIEFSTi4gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICovXG4gIHVzZUFyblJlZ2lvbj86IGJvb2xlYW4gfCBQcm92aWRlcjxib29sZWFuPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJldmVudCBTREsgZnJvbSBtYWtpbmcgY3Jvc3MtcmVnaW9uIHJlcXVlc3Qgd2hlbiBzdXBwbGllZCBidWNrZXQgaXMgYSBtdWx0aS1yZWdpb24gYWNjZXNzIHBvaW50IEFSTi5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2VcbiAgICovXG4gIGRpc2FibGVNdWx0aXJlZ2lvbkFjY2Vzc1BvaW50cz86IGJvb2xlYW4gfCBQcm92aWRlcjxib29sZWFuPjtcbn1cblxuaW50ZXJmYWNlIFByZXZpb3VzbHlSZXNvbHZlZCB7XG4gIGlzQ3VzdG9tRW5kcG9pbnQ6IGJvb2xlYW47XG4gIHJlZ2lvbjogUHJvdmlkZXI8c3RyaW5nPjtcbiAgcmVnaW9uSW5mb1Byb3ZpZGVyOiBSZWdpb25JbmZvUHJvdmlkZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0RW5kcG9pbnRSZXNvbHZlZENvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbmRwb2ludCBpcyBzcGVjaWZpZWQgYnkgY2FsbGVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGlzQ3VzdG9tRW5kcG9pbnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXNvbHZlZCB2YWx1ZSBmb3IgaW5wdXQgY29uZmlnIHtAbGluayBCdWNrZXRFbmRwb2ludElucHV0Q29uZmlnLmJ1Y2tldEVuZHBvaW50fVxuICAgKi9cbiAgYnVja2V0RW5kcG9pbnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXNvbHZlZCB2YWx1ZSBmb3IgaW5wdXQgY29uZmlnIHtAbGluayBCdWNrZXRFbmRwb2ludElucHV0Q29uZmlnLmZvcmNlUGF0aFN0eWxlfVxuICAgKi9cbiAgZm9yY2VQYXRoU3R5bGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXNvbHZlZCB2YWx1ZSBmb3IgaW5wdXQgY29uZmlnIHtAbGluayBCdWNrZXRFbmRwb2ludElucHV0Q29uZmlnLnVzZUFjY2VsZXJhdGVFbmRwb2ludH1cbiAgICovXG4gIHVzZUFjY2VsZXJhdGVFbmRwb2ludDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlc29sdmVkIHZhbHVlIGZvciBpbnB1dCBjb25maWcge0BsaW5rIEJ1Y2tldEVuZHBvaW50SW5wdXRDb25maWcudXNlRHVhbHN0YWNrRW5kcG9pbnR9XG4gICAqL1xuICB1c2VEdWFsc3RhY2tFbmRwb2ludDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlc29sdmVkIHZhbHVlIGZvciBpbnB1dCBjb25maWcge0BsaW5rIEJ1Y2tldEVuZHBvaW50SW5wdXRDb25maWcudXNlQXJuUmVnaW9ufVxuICAgKi9cbiAgdXNlQXJuUmVnaW9uOiBQcm92aWRlcjxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlc29sdmVkIHZhbHVlIGZvciBpbnB1dCBjb25maWcge0BsaW5rIFJlZ2lvbklucHV0Q29uZmlnLnJlZ2lvbn1cbiAgICovXG4gIHJlZ2lvbjogUHJvdmlkZXI8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEZldGNoIHJlbGF0ZWQgaG9zdG5hbWUsIHNpZ25pbmcgbmFtZSBvciBzaWduaW5nIHJlZ2lvbiB3aXRoIGdpdmVuIHJlZ2lvbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWdpb25JbmZvUHJvdmlkZXI6IFJlZ2lvbkluZm9Qcm92aWRlcjtcbiAgZGlzYWJsZU11bHRpcmVnaW9uQWNjZXNzUG9pbnRzOiBQcm92aWRlcjxib29sZWFuPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCdWNrZXRFbmRwb2ludENvbmZpZzxUPihcbiAgaW5wdXQ6IFQgJiBQcmV2aW91c2x5UmVzb2x2ZWQgJiBCdWNrZXRFbmRwb2ludElucHV0Q29uZmlnXG4pOiBUICYgQnVja2V0RW5kcG9pbnRSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IHtcbiAgICBidWNrZXRFbmRwb2ludCA9IGZhbHNlLFxuICAgIGZvcmNlUGF0aFN0eWxlID0gZmFsc2UsXG4gICAgdXNlQWNjZWxlcmF0ZUVuZHBvaW50ID0gZmFsc2UsXG4gICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQgPSBmYWxzZSxcbiAgICB1c2VBcm5SZWdpb24gPSBmYWxzZSxcbiAgICBkaXNhYmxlTXVsdGlyZWdpb25BY2Nlc3NQb2ludHMgPSBmYWxzZSxcbiAgfSA9IGlucHV0O1xuICByZXR1cm4ge1xuICAgIC4uLmlucHV0LFxuICAgIGJ1Y2tldEVuZHBvaW50LFxuICAgIGZvcmNlUGF0aFN0eWxlLFxuICAgIHVzZUFjY2VsZXJhdGVFbmRwb2ludCxcbiAgICB1c2VEdWFsc3RhY2tFbmRwb2ludCxcbiAgICB1c2VBcm5SZWdpb246IHR5cGVvZiB1c2VBcm5SZWdpb24gPT09IFwiZnVuY3Rpb25cIiA/IHVzZUFyblJlZ2lvbiA6ICgpID0+IFByb21pc2UucmVzb2x2ZSh1c2VBcm5SZWdpb24pLFxuICAgIGRpc2FibGVNdWx0aXJlZ2lvbkFjY2Vzc1BvaW50czpcbiAgICAgIHR5cGVvZiBkaXNhYmxlTXVsdGlyZWdpb25BY2Nlc3NQb2ludHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IGRpc2FibGVNdWx0aXJlZ2lvbkFjY2Vzc1BvaW50c1xuICAgICAgICA6ICgpID0+IFByb21pc2UucmVzb2x2ZShkaXNhYmxlTXVsdGlyZWdpb25BY2Nlc3NQb2ludHMpLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgTk9ERV9VU0VfQVJOX1JFR0lPTl9FTlZfTkFNRSA9IFwiQVdTX1MzX1VTRV9BUk5fUkVHSU9OXCI7XG5leHBvcnQgY29uc3QgTk9ERV9VU0VfQVJOX1JFR0lPTl9JTklfTkFNRSA9IFwiczNfdXNlX2Fybl9yZWdpb25cIjtcblxuZXhwb3J0IGNvbnN0IE5PREVfRElTQUJMRV9NVUxUSVJFR0lPTl9BQ0NFU1NfUE9JTlRfRU5WX05BTUUgPSBcIkFXU19TM19ESVNBQkxFX01VTFRJUkVHSU9OX0FDQ0VTU19QT0lOVFNcIjtcbmV4cG9ydCBjb25zdCBOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0lOSV9OQU1FID0gXCJzM19kaXNhYmxlX211bHRpcmVnaW9uX2FjY2Vzc19wb2ludHNcIjtcblxuLyoqXG4gKiBDb25maWcgdG8gbG9hZCB1c2VBcm5SZWdpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHNoYXJlZCBJTkkgZmlsZXNcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IE5PREVfVVNFX0FSTl9SRUdJT05fQ09ORklHX09QVElPTlM6IExvYWRlZENvbmZpZ1NlbGVjdG9yczxib29sZWFuPiA9IHtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZVNlbGVjdG9yOiAoZW52OiBOb2RlSlMuUHJvY2Vzc0VudikgPT4ge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudiwgTk9ERV9VU0VfQVJOX1JFR0lPTl9FTlZfTkFNRSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKGVudltOT0RFX1VTRV9BUk5fUkVHSU9OX0VOVl9OQU1FXSA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xuICAgIGlmIChlbnZbTk9ERV9VU0VfQVJOX1JFR0lPTl9FTlZfTkFNRV0gPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3QgbG9hZCBlbnYgJHtOT0RFX1VTRV9BUk5fUkVHSU9OX0VOVl9OQU1FfS4gRXhwZWN0ZWQgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLCBnb3QgJHtlbnZbTk9ERV9VU0VfQVJOX1JFR0lPTl9FTlZfTkFNRV19LmBcbiAgICApO1xuICB9LFxuICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvZmlsZSwgTk9ERV9VU0VfQVJOX1JFR0lPTl9JTklfTkFNRSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHByb2ZpbGVbTk9ERV9VU0VfQVJOX1JFR0lPTl9JTklfTkFNRV0gPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocHJvZmlsZVtOT0RFX1VTRV9BUk5fUkVHSU9OX0lOSV9OQU1FXSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBsb2FkIHNoYXJlZCBjb25maWcgZW50cnkgJHtOT0RFX1VTRV9BUk5fUkVHSU9OX0lOSV9OQU1FfS4gRXhwZWN0ZWQgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLCBnb3QgJHtwcm9maWxlW05PREVfVVNFX0FSTl9SRUdJT05fSU5JX05BTUVdfS5gXG4gICAgKTtcbiAgfSxcbiAgZGVmYXVsdDogZmFsc2UsXG59O1xuXG5leHBvcnQgY29uc3QgTk9ERV9ESVNBQkxFX01VTFRJUkVHSU9OX0FDQ0VTU19QT0lOVF9DT05GSUdfT1BUSU9OUzogTG9hZGVkQ29uZmlnU2VsZWN0b3JzPGJvb2xlYW4+ID0ge1xuICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3I6IChlbnY6IE5vZGVKUy5Qcm9jZXNzRW52KSA9PiB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW52LCBOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0VOVl9OQU1FKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoZW52W05PREVfRElTQUJMRV9NVUxUSVJFR0lPTl9BQ0NFU1NfUE9JTlRfRU5WX05BTUVdID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKGVudltOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0VOVl9OQU1FXSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBsb2FkIGVudiAke05PREVfRElTQUJMRV9NVUxUSVJFR0lPTl9BQ0NFU1NfUE9JTlRfRU5WX05BTUV9LiBFeHBlY3RlZCBcInRydWVcIiBvciBcImZhbHNlXCIsIGdvdCAke2VudltOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0VOVl9OQU1FXX0uYFxuICAgICk7XG4gIH0sXG4gIGNvbmZpZ0ZpbGVTZWxlY3RvcjogKHByb2ZpbGUpID0+IHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9maWxlLCBOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0lOSV9OQU1FKSlcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHByb2ZpbGVbTk9ERV9ESVNBQkxFX01VTFRJUkVHSU9OX0FDQ0VTU19QT0lOVF9JTklfTkFNRV0gPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocHJvZmlsZVtOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0lOSV9OQU1FXSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBsb2FkIHNoYXJlZCBjb25maWcgZW50cnkgJHtOT0RFX0RJU0FCTEVfTVVMVElSRUdJT05fQUNDRVNTX1BPSU5UX0lOSV9OQU1FfS4gRXhwZWN0ZWQgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLCBnb3QgJHtwcm9maWxlW05PREVfRElTQUJMRV9NVUxUSVJFR0lPTl9BQ0NFU1NfUE9JTlRfSU5JX05BTUVdfS5gXG4gICAgKTtcbiAgfSxcbiAgZGVmYXVsdDogZmFsc2UsXG59O1xuIl19
@@ -0,0 +1,5 @@
1
+ export * from "./bucketEndpointMiddleware";
2
+ export * from "./bucketHostname";
3
+ export * from "./configurations";
4
+ export { getArnResources, getPseudoRegion, getSuffixForArnEndpoint, validateOutpostService, validatePartition, validateAccountId, validateRegion, validateDNSHostLabel, validateNoDualstack, validateNoFIPS, } from "./bucketHostnameUtils";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGNBQWMsR0FDZixNQUFNLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYnVja2V0RW5kcG9pbnRNaWRkbGV3YXJlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9idWNrZXRIb3N0bmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uZmlndXJhdGlvbnNcIjtcbmV4cG9ydCB7XG4gIGdldEFyblJlc291cmNlcyxcbiAgZ2V0UHNldWRvUmVnaW9uLFxuICBnZXRTdWZmaXhGb3JBcm5FbmRwb2ludCxcbiAgdmFsaWRhdGVPdXRwb3N0U2VydmljZSxcbiAgdmFsaWRhdGVQYXJ0aXRpb24sXG4gIHZhbGlkYXRlQWNjb3VudElkLFxuICB2YWxpZGF0ZVJlZ2lvbixcbiAgdmFsaWRhdGVETlNIb3N0TGFiZWwsXG4gIHZhbGlkYXRlTm9EdWFsc3RhY2ssXG4gIHZhbGlkYXRlTm9GSVBTLFxufSBmcm9tIFwiLi9idWNrZXRIb3N0bmFtZVV0aWxzXCI7XG4iXX0=
File without changes
@@ -19,6 +19,7 @@ export interface ArnHostnameParams extends Omit<BucketHostnameParams, "bucketNam
19
19
  clientSigningRegion?: string;
20
20
  clientPartition?: string;
21
21
  useArnRegion?: boolean;
22
+ disableMultiregionAccessPoints?: boolean;
22
23
  }
23
24
  export declare const isBucketNameOptions: (options: BucketHostnameParams | ArnHostnameParams) => options is BucketHostnameParams;
24
25
  /**
@@ -91,6 +92,11 @@ export declare const validateAccountId: (accountId: string) => void;
91
92
  export declare const validateDNSHostLabel: (label: string, options?: {
92
93
  tlsCompatible?: boolean;
93
94
  }) => void;
95
+ export declare const validateCustomEndpoint: (options: {
96
+ isCustomEndpoint?: boolean;
97
+ dualstackEndpoint?: boolean;
98
+ accelerateEndpoint?: boolean;
99
+ }) => void;
94
100
  /**
95
101
  * Validate and parse an Access Point ARN or Outposts ARN
96
102
  * @internal
@@ -106,9 +112,14 @@ export declare const getArnResources: (resource: string) => {
106
112
  * Throw if dual stack configuration is set to true.
107
113
  * @internal
108
114
  */
109
- export declare const validateNoDualstack: (dualstackEndpoint: boolean) => void;
115
+ export declare const validateNoDualstack: (dualstackEndpoint?: boolean | undefined) => void;
110
116
  /**
111
117
  * Validate region is not appended or prepended with a `fips-`
112
118
  * @internal
113
119
  */
114
- export declare const validateNoFIPS: (region: string) => void;
120
+ export declare const validateNoFIPS: (region?: string | undefined) => void;
121
+ /**
122
+ * Validate the multi-region access point alias.
123
+ * @private
124
+ */
125
+ export declare const validateMrapAlias: (name: string) => void;