@hanzo/s3 0.6.3 → 8.0.7

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 (119) hide show
  1. package/LICENSE +202 -0
  2. package/MAINTAINERS.md +62 -0
  3. package/README.md +262 -0
  4. package/README_zh_CN.md +192 -0
  5. package/dist/esm/AssumeRoleProvider.d.mts +86 -0
  6. package/dist/esm/AssumeRoleProvider.mjs +183 -0
  7. package/dist/esm/CredentialProvider.d.mts +22 -0
  8. package/dist/esm/CredentialProvider.mjs +48 -0
  9. package/dist/esm/Credentials.d.mts +22 -0
  10. package/dist/esm/Credentials.mjs +38 -0
  11. package/dist/esm/IamAwsProvider.d.mts +27 -0
  12. package/dist/esm/IamAwsProvider.mjs +189 -0
  13. package/dist/esm/errors.d.mts +82 -0
  14. package/dist/esm/errors.mjs +117 -0
  15. package/dist/esm/helpers.d.mts +156 -0
  16. package/dist/esm/helpers.mjs +218 -0
  17. package/dist/esm/internal/async.d.mts +9 -0
  18. package/dist/esm/internal/async.mjs +14 -0
  19. package/dist/esm/internal/callbackify.d.mts +1 -0
  20. package/dist/esm/internal/callbackify.mjs +15 -0
  21. package/dist/esm/internal/client.d.mts +394 -0
  22. package/dist/esm/internal/client.mjs +3007 -0
  23. package/dist/esm/internal/copy-conditions.d.mts +10 -0
  24. package/dist/esm/internal/copy-conditions.mjs +25 -0
  25. package/dist/esm/internal/extensions.d.mts +18 -0
  26. package/dist/esm/internal/extensions.mjs +114 -0
  27. package/dist/esm/internal/helper.d.mts +177 -0
  28. package/dist/esm/internal/helper.mjs +552 -0
  29. package/dist/esm/internal/join-host-port.d.mts +11 -0
  30. package/dist/esm/internal/join-host-port.mjs +23 -0
  31. package/dist/esm/internal/post-policy.d.mts +17 -0
  32. package/dist/esm/internal/post-policy.mjs +98 -0
  33. package/dist/esm/internal/request.d.mts +11 -0
  34. package/dist/esm/internal/request.mjs +75 -0
  35. package/dist/esm/internal/response.d.mts +8 -0
  36. package/dist/esm/internal/response.mjs +16 -0
  37. package/dist/esm/internal/s3-endpoints.d.mts +38 -0
  38. package/dist/esm/internal/s3-endpoints.mjs +68 -0
  39. package/dist/esm/internal/type.d.mts +482 -0
  40. package/dist/esm/internal/type.mjs +30 -0
  41. package/dist/esm/internal/xml-parser.d.mts +93 -0
  42. package/dist/esm/internal/xml-parser.mjs +819 -0
  43. package/dist/esm/notification.d.mts +58 -0
  44. package/dist/esm/notification.mjs +209 -0
  45. package/dist/esm/s3.d.mts +40 -0
  46. package/dist/esm/s3.mjs +86 -0
  47. package/dist/esm/signing.d.mts +5 -0
  48. package/dist/esm/signing.mjs +258 -0
  49. package/dist/main/AssumeRoleProvider.d.ts +86 -0
  50. package/dist/main/AssumeRoleProvider.js +191 -0
  51. package/dist/main/CredentialProvider.d.ts +22 -0
  52. package/dist/main/CredentialProvider.js +55 -0
  53. package/dist/main/Credentials.d.ts +22 -0
  54. package/dist/main/Credentials.js +45 -0
  55. package/dist/main/IamAwsProvider.d.ts +27 -0
  56. package/dist/main/IamAwsProvider.js +198 -0
  57. package/dist/main/errors.d.ts +82 -0
  58. package/dist/main/errors.js +138 -0
  59. package/dist/main/helpers.d.ts +156 -0
  60. package/dist/main/helpers.js +233 -0
  61. package/dist/main/internal/async.d.ts +9 -0
  62. package/dist/main/internal/async.js +24 -0
  63. package/dist/main/internal/callbackify.d.ts +1 -0
  64. package/dist/main/internal/callbackify.js +21 -0
  65. package/dist/main/internal/client.d.ts +394 -0
  66. package/dist/main/internal/client.js +3014 -0
  67. package/dist/main/internal/copy-conditions.d.ts +10 -0
  68. package/dist/main/internal/copy-conditions.js +31 -0
  69. package/dist/main/internal/extensions.d.ts +18 -0
  70. package/dist/main/internal/extensions.js +122 -0
  71. package/dist/main/internal/helper.d.ts +177 -0
  72. package/dist/main/internal/helper.js +608 -0
  73. package/dist/main/internal/join-host-port.d.ts +11 -0
  74. package/dist/main/internal/join-host-port.js +29 -0
  75. package/dist/main/internal/post-policy.d.ts +17 -0
  76. package/dist/main/internal/post-policy.js +107 -0
  77. package/dist/main/internal/request.d.ts +11 -0
  78. package/dist/main/internal/request.js +83 -0
  79. package/dist/main/internal/response.d.ts +8 -0
  80. package/dist/main/internal/response.js +24 -0
  81. package/dist/main/internal/s3-endpoints.d.ts +38 -0
  82. package/dist/main/internal/s3-endpoints.js +73 -0
  83. package/dist/main/internal/type.d.ts +482 -0
  84. package/dist/main/internal/type.js +42 -0
  85. package/dist/main/internal/xml-parser.d.ts +93 -0
  86. package/dist/main/internal/xml-parser.js +849 -0
  87. package/dist/main/notification.d.ts +58 -0
  88. package/dist/main/notification.js +230 -0
  89. package/dist/main/s3.d.ts +40 -0
  90. package/dist/main/s3.js +117 -0
  91. package/dist/main/signing.d.ts +5 -0
  92. package/dist/main/signing.js +269 -0
  93. package/package.json +146 -39
  94. package/src/AssumeRoleProvider.ts +262 -0
  95. package/src/CredentialProvider.ts +54 -0
  96. package/src/Credentials.ts +44 -0
  97. package/src/IamAwsProvider.ts +234 -0
  98. package/src/errors.ts +120 -0
  99. package/src/helpers.ts +354 -0
  100. package/src/internal/async.ts +14 -0
  101. package/src/internal/callbackify.ts +19 -0
  102. package/src/internal/client.ts +3412 -0
  103. package/src/internal/copy-conditions.ts +30 -0
  104. package/src/internal/extensions.ts +140 -0
  105. package/src/internal/helper.ts +606 -0
  106. package/src/internal/join-host-port.ts +23 -0
  107. package/src/internal/post-policy.ts +99 -0
  108. package/src/internal/request.ts +102 -0
  109. package/src/internal/response.ts +26 -0
  110. package/src/internal/s3-endpoints.ts +70 -0
  111. package/src/internal/type.ts +577 -0
  112. package/src/internal/xml-parser.ts +871 -0
  113. package/src/notification.ts +254 -0
  114. package/src/s3.ts +155 -0
  115. package/src/signing.ts +325 -0
  116. package/lib/index.js +0 -450
  117. package/lib/index.js.map +0 -7
  118. package/lib/perfTest.js +0 -91
  119. package/lib/perfTest.js.map +0 -7
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.postPresignSignatureV4 = postPresignSignatureV4;
7
+ exports.presignSignatureV4 = presignSignatureV4;
8
+ exports.signV4 = signV4;
9
+ exports.signV4ByServiceName = signV4ByServiceName;
10
+ var crypto = _interopRequireWildcard(require("crypto"), true);
11
+ var errors = _interopRequireWildcard(require("./errors.js"), true);
12
+ var _helpers = require("./helpers.js");
13
+ var _helper = require("./internal/helper.js");
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ /*
17
+ * Hanzo S3 Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2016 Hanzo AI, Inc.
18
+ *
19
+ * Licensed under the Apache License, Version 2.0 (the "License");
20
+ * you may not use this file except in compliance with the License.
21
+ * You may obtain a copy of the License at
22
+ *
23
+ * http://www.apache.org/licenses/LICENSE-2.0
24
+ *
25
+ * Unless required by applicable law or agreed to in writing, software
26
+ * distributed under the License is distributed on an "AS IS" BASIS,
27
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28
+ * See the License for the specific language governing permissions and
29
+ * limitations under the License.
30
+ */
31
+
32
+ const signV4Algorithm = 'AWS4-HMAC-SHA256';
33
+
34
+ // getCanonicalRequest generate a canonical request of style.
35
+ //
36
+ // canonicalRequest =
37
+ // <HTTPMethod>\n
38
+ // <CanonicalURI>\n
39
+ // <CanonicalQueryString>\n
40
+ // <CanonicalHeaders>\n
41
+ // <SignedHeaders>\n
42
+ // <HashedPayload>
43
+ //
44
+ function getCanonicalRequest(method, path, headers, signedHeaders, hashedPayload) {
45
+ if (!(0, _helper.isString)(method)) {
46
+ throw new TypeError('method should be of type "string"');
47
+ }
48
+ if (!(0, _helper.isString)(path)) {
49
+ throw new TypeError('path should be of type "string"');
50
+ }
51
+ if (!(0, _helper.isObject)(headers)) {
52
+ throw new TypeError('headers should be of type "object"');
53
+ }
54
+ if (!Array.isArray(signedHeaders)) {
55
+ throw new TypeError('signedHeaders should be of type "array"');
56
+ }
57
+ if (!(0, _helper.isString)(hashedPayload)) {
58
+ throw new TypeError('hashedPayload should be of type "string"');
59
+ }
60
+ const headersArray = signedHeaders.reduce((acc, i) => {
61
+ // Trim spaces from the value (required by V4 spec)
62
+ const val = `${headers[i]}`.replace(/ +/g, ' ');
63
+ acc.push(`${i.toLowerCase()}:${val}`);
64
+ return acc;
65
+ }, []);
66
+ const requestResource = path.split('?')[0];
67
+ let requestQuery = path.split('?')[1];
68
+ if (!requestQuery) {
69
+ requestQuery = '';
70
+ }
71
+ if (requestQuery) {
72
+ requestQuery = requestQuery.split('&').sort().map(element => !element.includes('=') ? element + '=' : element).join('&');
73
+ }
74
+ return [method.toUpperCase(), requestResource, requestQuery, headersArray.join('\n') + '\n', signedHeaders.join(';').toLowerCase(), hashedPayload].join('\n');
75
+ }
76
+
77
+ // generate a credential string
78
+ function getCredential(accessKey, region, requestDate, serviceName = 's3') {
79
+ if (!(0, _helper.isString)(accessKey)) {
80
+ throw new TypeError('accessKey should be of type "string"');
81
+ }
82
+ if (!(0, _helper.isString)(region)) {
83
+ throw new TypeError('region should be of type "string"');
84
+ }
85
+ if (!(0, _helper.isObject)(requestDate)) {
86
+ throw new TypeError('requestDate should be of type "object"');
87
+ }
88
+ return `${accessKey}/${(0, _helper.getScope)(region, requestDate, serviceName)}`;
89
+ }
90
+
91
+ // Returns signed headers array - alphabetically sorted
92
+ function getSignedHeaders(headers) {
93
+ if (!(0, _helper.isObject)(headers)) {
94
+ throw new TypeError('request should be of type "object"');
95
+ }
96
+ // Excerpts from @lsegal - https://github.com/aws/aws-sdk-js/issues/659#issuecomment-120477258
97
+ //
98
+ // User-Agent:
99
+ //
100
+ // This is ignored from signing because signing this causes problems with generating pre-signed URLs
101
+ // (that are executed by other agents) or when customers pass requests through proxies, which may
102
+ // modify the user-agent.
103
+ //
104
+ // Content-Length:
105
+ //
106
+ // This is ignored from signing because generating a pre-signed URL should not provide a content-length
107
+ // constraint, specifically when vending a S3 pre-signed PUT URL. The corollary to this is that when
108
+ // sending regular requests (non-pre-signed), the signature contains a checksum of the body, which
109
+ // implicitly validates the payload length (since changing the number of bytes would change the checksum)
110
+ // and therefore this header is not valuable in the signature.
111
+ //
112
+ // Content-Type:
113
+ //
114
+ // Signing this header causes quite a number of problems in browser environments, where browsers
115
+ // like to modify and normalize the content-type header in different ways. There is more information
116
+ // on this in https://github.com/aws/aws-sdk-js/issues/244. Avoiding this field simplifies logic
117
+ // and reduces the possibility of future bugs
118
+ //
119
+ // Authorization:
120
+ //
121
+ // Is skipped for obvious reasons
122
+
123
+ const ignoredHeaders = ['authorization', 'content-length', 'content-type', 'user-agent'];
124
+ return Object.keys(headers).filter(header => !ignoredHeaders.includes(header)).sort();
125
+ }
126
+
127
+ // returns the key used for calculating signature
128
+ function getSigningKey(date, region, secretKey, serviceName = 's3') {
129
+ if (!(0, _helper.isObject)(date)) {
130
+ throw new TypeError('date should be of type "object"');
131
+ }
132
+ if (!(0, _helper.isString)(region)) {
133
+ throw new TypeError('region should be of type "string"');
134
+ }
135
+ if (!(0, _helper.isString)(secretKey)) {
136
+ throw new TypeError('secretKey should be of type "string"');
137
+ }
138
+ const dateLine = (0, _helper.makeDateShort)(date);
139
+ const hmac1 = crypto.createHmac('sha256', 'AWS4' + secretKey).update(dateLine).digest(),
140
+ hmac2 = crypto.createHmac('sha256', hmac1).update(region).digest(),
141
+ hmac3 = crypto.createHmac('sha256', hmac2).update(serviceName).digest();
142
+ return crypto.createHmac('sha256', hmac3).update('aws4_request').digest();
143
+ }
144
+
145
+ // returns the string that needs to be signed
146
+ function getStringToSign(canonicalRequest, requestDate, region, serviceName = 's3') {
147
+ if (!(0, _helper.isString)(canonicalRequest)) {
148
+ throw new TypeError('canonicalRequest should be of type "string"');
149
+ }
150
+ if (!(0, _helper.isObject)(requestDate)) {
151
+ throw new TypeError('requestDate should be of type "object"');
152
+ }
153
+ if (!(0, _helper.isString)(region)) {
154
+ throw new TypeError('region should be of type "string"');
155
+ }
156
+ const hash = crypto.createHash('sha256').update(canonicalRequest).digest('hex');
157
+ const scope = (0, _helper.getScope)(region, requestDate, serviceName);
158
+ const stringToSign = [signV4Algorithm, (0, _helper.makeDateLong)(requestDate), scope, hash];
159
+ return stringToSign.join('\n');
160
+ }
161
+
162
+ // calculate the signature of the POST policy
163
+ function postPresignSignatureV4(region, date, secretKey, policyBase64) {
164
+ if (!(0, _helper.isString)(region)) {
165
+ throw new TypeError('region should be of type "string"');
166
+ }
167
+ if (!(0, _helper.isObject)(date)) {
168
+ throw new TypeError('date should be of type "object"');
169
+ }
170
+ if (!(0, _helper.isString)(secretKey)) {
171
+ throw new TypeError('secretKey should be of type "string"');
172
+ }
173
+ if (!(0, _helper.isString)(policyBase64)) {
174
+ throw new TypeError('policyBase64 should be of type "string"');
175
+ }
176
+ const signingKey = getSigningKey(date, region, secretKey);
177
+ return crypto.createHmac('sha256', signingKey).update(policyBase64).digest('hex').toLowerCase();
178
+ }
179
+
180
+ // Returns the authorization header
181
+ function signV4(request, accessKey, secretKey, region, requestDate, sha256sum, serviceName = 's3') {
182
+ if (!(0, _helper.isObject)(request)) {
183
+ throw new TypeError('request should be of type "object"');
184
+ }
185
+ if (!(0, _helper.isString)(accessKey)) {
186
+ throw new TypeError('accessKey should be of type "string"');
187
+ }
188
+ if (!(0, _helper.isString)(secretKey)) {
189
+ throw new TypeError('secretKey should be of type "string"');
190
+ }
191
+ if (!(0, _helper.isString)(region)) {
192
+ throw new TypeError('region should be of type "string"');
193
+ }
194
+ if (!accessKey) {
195
+ throw new errors.AccessKeyRequiredError('accessKey is required for signing');
196
+ }
197
+ if (!secretKey) {
198
+ throw new errors.SecretKeyRequiredError('secretKey is required for signing');
199
+ }
200
+ const signedHeaders = getSignedHeaders(request.headers);
201
+ const canonicalRequest = getCanonicalRequest(request.method, request.path, request.headers, signedHeaders, sha256sum);
202
+ const serviceIdentifier = serviceName || 's3';
203
+ const stringToSign = getStringToSign(canonicalRequest, requestDate, region, serviceIdentifier);
204
+ const signingKey = getSigningKey(requestDate, region, secretKey, serviceIdentifier);
205
+ const credential = getCredential(accessKey, region, requestDate, serviceIdentifier);
206
+ const signature = crypto.createHmac('sha256', signingKey).update(stringToSign).digest('hex').toLowerCase();
207
+ return `${signV4Algorithm} Credential=${credential}, SignedHeaders=${signedHeaders.join(';').toLowerCase()}, Signature=${signature}`;
208
+ }
209
+ function signV4ByServiceName(request, accessKey, secretKey, region, requestDate, contentSha256, serviceName = 's3') {
210
+ return signV4(request, accessKey, secretKey, region, requestDate, contentSha256, serviceName);
211
+ }
212
+
213
+ // returns a presigned URL string
214
+ function presignSignatureV4(request, accessKey, secretKey, sessionToken, region, requestDate, expires) {
215
+ if (!(0, _helper.isObject)(request)) {
216
+ throw new TypeError('request should be of type "object"');
217
+ }
218
+ if (!(0, _helper.isString)(accessKey)) {
219
+ throw new TypeError('accessKey should be of type "string"');
220
+ }
221
+ if (!(0, _helper.isString)(secretKey)) {
222
+ throw new TypeError('secretKey should be of type "string"');
223
+ }
224
+ if (!(0, _helper.isString)(region)) {
225
+ throw new TypeError('region should be of type "string"');
226
+ }
227
+ if (!accessKey) {
228
+ throw new errors.AccessKeyRequiredError('accessKey is required for presigning');
229
+ }
230
+ if (!secretKey) {
231
+ throw new errors.SecretKeyRequiredError('secretKey is required for presigning');
232
+ }
233
+ if (expires && !(0, _helper.isNumber)(expires)) {
234
+ throw new TypeError('expires should be of type "number"');
235
+ }
236
+ if (expires && expires < 1) {
237
+ throw new errors.ExpiresParamError('expires param cannot be less than 1 seconds');
238
+ }
239
+ if (expires && expires > _helpers.PRESIGN_EXPIRY_DAYS_MAX) {
240
+ throw new errors.ExpiresParamError('expires param cannot be greater than 7 days');
241
+ }
242
+ const iso8601Date = (0, _helper.makeDateLong)(requestDate);
243
+ const signedHeaders = getSignedHeaders(request.headers);
244
+ const credential = getCredential(accessKey, region, requestDate);
245
+ const hashedPayload = 'UNSIGNED-PAYLOAD';
246
+ const requestQuery = [];
247
+ requestQuery.push(`X-Amz-Algorithm=${signV4Algorithm}`);
248
+ requestQuery.push(`X-Amz-Credential=${(0, _helper.uriEscape)(credential)}`);
249
+ requestQuery.push(`X-Amz-Date=${iso8601Date}`);
250
+ requestQuery.push(`X-Amz-Expires=${expires}`);
251
+ requestQuery.push(`X-Amz-SignedHeaders=${(0, _helper.uriEscape)(signedHeaders.join(';').toLowerCase())}`);
252
+ if (sessionToken) {
253
+ requestQuery.push(`X-Amz-Security-Token=${(0, _helper.uriEscape)(sessionToken)}`);
254
+ }
255
+ const resource = request.path.split('?')[0];
256
+ let query = request.path.split('?')[1];
257
+ if (query) {
258
+ query = query + '&' + requestQuery.join('&');
259
+ } else {
260
+ query = requestQuery.join('&');
261
+ }
262
+ const path = resource + '?' + query;
263
+ const canonicalRequest = getCanonicalRequest(request.method, path, request.headers, signedHeaders, hashedPayload);
264
+ const stringToSign = getStringToSign(canonicalRequest, requestDate, region);
265
+ const signingKey = getSigningKey(requestDate, region, secretKey);
266
+ const signature = crypto.createHmac('sha256', signingKey).update(stringToSign).digest('hex').toLowerCase();
267
+ return request.protocol + '//' + request.headers.host + path + `&X-Amz-Signature=${signature}`;
268
+ }
269
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJlcnJvcnMiLCJfaGVscGVycyIsIl9oZWxwZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0Iiwic2lnblY0QWxnb3JpdGhtIiwiZ2V0Q2Fub25pY2FsUmVxdWVzdCIsIm1ldGhvZCIsInBhdGgiLCJoZWFkZXJzIiwic2lnbmVkSGVhZGVycyIsImhhc2hlZFBheWxvYWQiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyc0FycmF5IiwicmVkdWNlIiwiYWNjIiwiaSIsInZhbCIsInJlcGxhY2UiLCJwdXNoIiwidG9Mb3dlckNhc2UiLCJyZXF1ZXN0UmVzb3VyY2UiLCJzcGxpdCIsInJlcXVlc3RRdWVyeSIsInNvcnQiLCJtYXAiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJqb2luIiwidG9VcHBlckNhc2UiLCJnZXRDcmVkZW50aWFsIiwiYWNjZXNzS2V5IiwicmVnaW9uIiwicmVxdWVzdERhdGUiLCJzZXJ2aWNlTmFtZSIsImdldFNjb3BlIiwiZ2V0U2lnbmVkSGVhZGVycyIsImlnbm9yZWRIZWFkZXJzIiwia2V5cyIsImZpbHRlciIsImhlYWRlciIsImdldFNpZ25pbmdLZXkiLCJkYXRlIiwic2VjcmV0S2V5IiwiZGF0ZUxpbmUiLCJtYWtlRGF0ZVNob3J0IiwiaG1hYzEiLCJjcmVhdGVIbWFjIiwidXBkYXRlIiwiZGlnZXN0IiwiaG1hYzIiLCJobWFjMyIsImdldFN0cmluZ1RvU2lnbiIsImNhbm9uaWNhbFJlcXVlc3QiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInNjb3BlIiwic3RyaW5nVG9TaWduIiwibWFrZURhdGVMb25nIiwicG9zdFByZXNpZ25TaWduYXR1cmVWNCIsInBvbGljeUJhc2U2NCIsInNpZ25pbmdLZXkiLCJzaWduVjQiLCJyZXF1ZXN0Iiwic2hhMjU2c3VtIiwiQWNjZXNzS2V5UmVxdWlyZWRFcnJvciIsIlNlY3JldEtleVJlcXVpcmVkRXJyb3IiLCJzZXJ2aWNlSWRlbnRpZmllciIsImNyZWRlbnRpYWwiLCJzaWduYXR1cmUiLCJzaWduVjRCeVNlcnZpY2VOYW1lIiwiY29udGVudFNoYTI1NiIsInByZXNpZ25TaWduYXR1cmVWNCIsInNlc3Npb25Ub2tlbiIsImV4cGlyZXMiLCJpc051bWJlciIsIkV4cGlyZXNQYXJhbUVycm9yIiwiUFJFU0lHTl9FWFBJUllfREFZU19NQVgiLCJpc284NjAxRGF0ZSIsInVyaUVzY2FwZSIsInJlc291cmNlIiwicXVlcnkiLCJwcm90b2NvbCIsImhvc3QiXSwic291cmNlcyI6WyJzaWduaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBIYW56byBTMyBKYXZhc2NyaXB0IExpYnJhcnkgZm9yIEFtYXpvbiBTMyBDb21wYXRpYmxlIENsb3VkIFN0b3JhZ2UsIChDKSAyMDE2IEhhbnpvIEFJLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdub2RlOmNyeXB0bydcblxuaW1wb3J0ICogYXMgZXJyb3JzIGZyb20gJy4vZXJyb3JzLnRzJ1xuaW1wb3J0IHsgUFJFU0lHTl9FWFBJUllfREFZU19NQVggfSBmcm9tICcuL2hlbHBlcnMudHMnXG5pbXBvcnQgeyBnZXRTY29wZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgbWFrZURhdGVMb25nLCBtYWtlRGF0ZVNob3J0LCB1cmlFc2NhcGUgfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCB0eXBlIHsgSUNhbm9uaWNhbFJlcXVlc3QsIElSZXF1ZXN0LCBSZXF1ZXN0SGVhZGVycyB9IGZyb20gJy4vaW50ZXJuYWwvdHlwZS50cydcblxuY29uc3Qgc2lnblY0QWxnb3JpdGhtID0gJ0FXUzQtSE1BQy1TSEEyNTYnXG5cbi8vIGdldENhbm9uaWNhbFJlcXVlc3QgZ2VuZXJhdGUgYSBjYW5vbmljYWwgcmVxdWVzdCBvZiBzdHlsZS5cbi8vXG4vLyBjYW5vbmljYWxSZXF1ZXN0ID1cbi8vICA8SFRUUE1ldGhvZD5cXG5cbi8vICA8Q2Fub25pY2FsVVJJPlxcblxuLy8gIDxDYW5vbmljYWxRdWVyeVN0cmluZz5cXG5cbi8vICA8Q2Fub25pY2FsSGVhZGVycz5cXG5cbi8vICA8U2lnbmVkSGVhZGVycz5cXG5cbi8vICA8SGFzaGVkUGF5bG9hZD5cbi8vXG5mdW5jdGlvbiBnZXRDYW5vbmljYWxSZXF1ZXN0KFxuICBtZXRob2Q6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyxcbiAgc2lnbmVkSGVhZGVyczogc3RyaW5nW10sXG4gIGhhc2hlZFBheWxvYWQ6IHN0cmluZyxcbik6IElDYW5vbmljYWxSZXF1ZXN0IHtcbiAgaWYgKCFpc1N0cmluZyhtZXRob2QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWV0aG9kIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXRoIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNPYmplY3QoaGVhZGVycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoZWFkZXJzIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShzaWduZWRIZWFkZXJzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpZ25lZEhlYWRlcnMgc2hvdWxkIGJlIG9mIHR5cGUgXCJhcnJheVwiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKGhhc2hlZFBheWxvYWQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaGFzaGVkUGF5bG9hZCBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnNBcnJheSA9IHNpZ25lZEhlYWRlcnMucmVkdWNlKChhY2MsIGkpID0+IHtcbiAgICAvLyBUcmltIHNwYWNlcyBmcm9tIHRoZSB2YWx1ZSAocmVxdWlyZWQgYnkgVjQgc3BlYylcbiAgICBjb25zdCB2YWwgPSBgJHtoZWFkZXJzW2ldfWAucmVwbGFjZSgvICsvZywgJyAnKVxuICAgIGFjYy5wdXNoKGAke2kudG9Mb3dlckNhc2UoKX06JHt2YWx9YClcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdIGFzIHN0cmluZ1tdKVxuXG4gIGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHBhdGguc3BsaXQoJz8nKVswXVxuICBsZXQgcmVxdWVzdFF1ZXJ5ID0gcGF0aC5zcGxpdCgnPycpWzFdXG4gIGlmICghcmVxdWVzdFF1ZXJ5KSB7XG4gICAgcmVxdWVzdFF1ZXJ5ID0gJydcbiAgfVxuXG4gIGlmIChyZXF1ZXN0UXVlcnkpIHtcbiAgICByZXF1ZXN0UXVlcnkgPSByZXF1ZXN0UXVlcnlcbiAgICAgIC5zcGxpdCgnJicpXG4gICAgICAuc29ydCgpXG4gICAgICAubWFwKChlbGVtZW50KSA9PiAoIWVsZW1lbnQuaW5jbHVkZXMoJz0nKSA/IGVsZW1lbnQgKyAnPScgOiBlbGVtZW50KSlcbiAgICAgIC5qb2luKCcmJylcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgcmVxdWVzdFJlc291cmNlLFxuICAgIHJlcXVlc3RRdWVyeSxcbiAgICBoZWFkZXJzQXJyYXkuam9pbignXFxuJykgKyAnXFxuJyxcbiAgICBzaWduZWRIZWFkZXJzLmpvaW4oJzsnKS50b0xvd2VyQ2FzZSgpLFxuICAgIGhhc2hlZFBheWxvYWQsXG4gIF0uam9pbignXFxuJylcbn1cblxuLy8gZ2VuZXJhdGUgYSBjcmVkZW50aWFsIHN0cmluZ1xuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbChhY2Nlc3NLZXk6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcsIHJlcXVlc3REYXRlPzogRGF0ZSwgc2VydmljZU5hbWUgPSAnczMnKSB7XG4gIGlmICghaXNTdHJpbmcoYWNjZXNzS2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FjY2Vzc0tleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0RGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXF1ZXN0RGF0ZSBzaG91bGQgYmUgb2YgdHlwZSBcIm9iamVjdFwiJylcbiAgfVxuICByZXR1cm4gYCR7YWNjZXNzS2V5fS8ke2dldFNjb3BlKHJlZ2lvbiwgcmVxdWVzdERhdGUsIHNlcnZpY2VOYW1lKX1gXG59XG5cbi8vIFJldHVybnMgc2lnbmVkIGhlYWRlcnMgYXJyYXkgLSBhbHBoYWJldGljYWxseSBzb3J0ZWRcbmZ1bmN0aW9uIGdldFNpZ25lZEhlYWRlcnMoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpOiBzdHJpbmdbXSB7XG4gIGlmICghaXNPYmplY3QoaGVhZGVycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXF1ZXN0IHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIC8vIEV4Y2VycHRzIGZyb20gQGxzZWdhbCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9pc3N1ZXMvNjU5I2lzc3VlY29tbWVudC0xMjA0NzcyNThcbiAgLy9cbiAgLy8gIFVzZXItQWdlbnQ6XG4gIC8vXG4gIC8vICAgICAgVGhpcyBpcyBpZ25vcmVkIGZyb20gc2lnbmluZyBiZWNhdXNlIHNpZ25pbmcgdGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBnZW5lcmF0aW5nIHByZS1zaWduZWQgVVJMc1xuICAvLyAgICAgICh0aGF0IGFyZSBleGVjdXRlZCBieSBvdGhlciBhZ2VudHMpIG9yIHdoZW4gY3VzdG9tZXJzIHBhc3MgcmVxdWVzdHMgdGhyb3VnaCBwcm94aWVzLCB3aGljaCBtYXlcbiAgLy8gICAgICBtb2RpZnkgdGhlIHVzZXItYWdlbnQuXG4gIC8vXG4gIC8vICBDb250ZW50LUxlbmd0aDpcbiAgLy9cbiAgLy8gICAgICBUaGlzIGlzIGlnbm9yZWQgZnJvbSBzaWduaW5nIGJlY2F1c2UgZ2VuZXJhdGluZyBhIHByZS1zaWduZWQgVVJMIHNob3VsZCBub3QgcHJvdmlkZSBhIGNvbnRlbnQtbGVuZ3RoXG4gIC8vICAgICAgY29uc3RyYWludCwgc3BlY2lmaWNhbGx5IHdoZW4gdmVuZGluZyBhIFMzIHByZS1zaWduZWQgUFVUIFVSTC4gVGhlIGNvcm9sbGFyeSB0byB0aGlzIGlzIHRoYXQgd2hlblxuICAvLyAgICAgIHNlbmRpbmcgcmVndWxhciByZXF1ZXN0cyAobm9uLXByZS1zaWduZWQpLCB0aGUgc2lnbmF0dXJlIGNvbnRhaW5zIGEgY2hlY2tzdW0gb2YgdGhlIGJvZHksIHdoaWNoXG4gIC8vICAgICAgaW1wbGljaXRseSB2YWxpZGF0ZXMgdGhlIHBheWxvYWQgbGVuZ3RoIChzaW5jZSBjaGFuZ2luZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdvdWxkIGNoYW5nZSB0aGUgY2hlY2tzdW0pXG4gIC8vICAgICAgYW5kIHRoZXJlZm9yZSB0aGlzIGhlYWRlciBpcyBub3QgdmFsdWFibGUgaW4gdGhlIHNpZ25hdHVyZS5cbiAgLy9cbiAgLy8gIENvbnRlbnQtVHlwZTpcbiAgLy9cbiAgLy8gICAgICBTaWduaW5nIHRoaXMgaGVhZGVyIGNhdXNlcyBxdWl0ZSBhIG51bWJlciBvZiBwcm9ibGVtcyBpbiBicm93c2VyIGVudmlyb25tZW50cywgd2hlcmUgYnJvd3NlcnNcbiAgLy8gICAgICBsaWtlIHRvIG1vZGlmeSBhbmQgbm9ybWFsaXplIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGluIGRpZmZlcmVudCB3YXlzLiBUaGVyZSBpcyBtb3JlIGluZm9ybWF0aW9uXG4gIC8vICAgICAgb24gdGhpcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzI0NC4gQXZvaWRpbmcgdGhpcyBmaWVsZCBzaW1wbGlmaWVzIGxvZ2ljXG4gIC8vICAgICAgYW5kIHJlZHVjZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBidWdzXG4gIC8vXG4gIC8vICBBdXRob3JpemF0aW9uOlxuICAvL1xuICAvLyAgICAgIElzIHNraXBwZWQgZm9yIG9idmlvdXMgcmVhc29uc1xuXG4gIGNvbnN0IGlnbm9yZWRIZWFkZXJzID0gWydhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICd1c2VyLWFnZW50J11cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbHRlcigoaGVhZGVyKSA9PiAhaWdub3JlZEhlYWRlcnMuaW5jbHVkZXMoaGVhZGVyKSlcbiAgICAuc29ydCgpXG59XG5cbi8vIHJldHVybnMgdGhlIGtleSB1c2VkIGZvciBjYWxjdWxhdGluZyBzaWduYXR1cmVcbmZ1bmN0aW9uIGdldFNpZ25pbmdLZXkoZGF0ZTogRGF0ZSwgcmVnaW9uOiBzdHJpbmcsIHNlY3JldEtleTogc3RyaW5nLCBzZXJ2aWNlTmFtZSA9ICdzMycpIHtcbiAgaWYgKCFpc09iamVjdChkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGUgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaW9uIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBjb25zdCBkYXRlTGluZSA9IG1ha2VEYXRlU2hvcnQoZGF0ZSlcbiAgY29uc3QgaG1hYzEgPSBjcnlwdG9cbiAgICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCAnQVdTNCcgKyBzZWNyZXRLZXkpXG4gICAgICAudXBkYXRlKGRhdGVMaW5lKVxuICAgICAgLmRpZ2VzdCgpLFxuICAgIGhtYWMyID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGhtYWMxKS51cGRhdGUocmVnaW9uKS5kaWdlc3QoKSxcbiAgICBobWFjMyA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBobWFjMikudXBkYXRlKHNlcnZpY2VOYW1lKS5kaWdlc3QoKVxuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGhtYWMzKS51cGRhdGUoJ2F3czRfcmVxdWVzdCcpLmRpZ2VzdCgpXG59XG5cbi8vIHJldHVybnMgdGhlIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHNpZ25lZFxuZnVuY3Rpb24gZ2V0U3RyaW5nVG9TaWduKGNhbm9uaWNhbFJlcXVlc3Q6IElDYW5vbmljYWxSZXF1ZXN0LCByZXF1ZXN0RGF0ZTogRGF0ZSwgcmVnaW9uOiBzdHJpbmcsIHNlcnZpY2VOYW1lID0gJ3MzJykge1xuICBpZiAoIWlzU3RyaW5nKGNhbm9uaWNhbFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fub25pY2FsUmVxdWVzdCBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHJlcXVlc3REYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3REYXRlIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcocmVnaW9uKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZ2lvbiBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShjYW5vbmljYWxSZXF1ZXN0KS5kaWdlc3QoJ2hleCcpXG4gIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUocmVnaW9uLCByZXF1ZXN0RGF0ZSwgc2VydmljZU5hbWUpXG4gIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtzaWduVjRBbGdvcml0aG0sIG1ha2VEYXRlTG9uZyhyZXF1ZXN0RGF0ZSksIHNjb3BlLCBoYXNoXVxuXG4gIHJldHVybiBzdHJpbmdUb1NpZ24uam9pbignXFxuJylcbn1cblxuLy8gY2FsY3VsYXRlIHRoZSBzaWduYXR1cmUgb2YgdGhlIFBPU1QgcG9saWN5XG5leHBvcnQgZnVuY3Rpb24gcG9zdFByZXNpZ25TaWduYXR1cmVWNChyZWdpb246IHN0cmluZywgZGF0ZTogRGF0ZSwgc2VjcmV0S2V5OiBzdHJpbmcsIHBvbGljeUJhc2U2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1N0cmluZyhyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaW9uIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNPYmplY3QoZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRlIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHBvbGljeUJhc2U2NCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwb2xpY3lCYXNlNjQgc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cbiAgY29uc3Qgc2lnbmluZ0tleSA9IGdldFNpZ25pbmdLZXkoZGF0ZSwgcmVnaW9uLCBzZWNyZXRLZXkpXG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2Jywgc2lnbmluZ0tleSkudXBkYXRlKHBvbGljeUJhc2U2NCkuZGlnZXN0KCdoZXgnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8vIFJldHVybnMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyXG5leHBvcnQgZnVuY3Rpb24gc2lnblY0KFxuICByZXF1ZXN0OiBJUmVxdWVzdCxcbiAgYWNjZXNzS2V5OiBzdHJpbmcsXG4gIHNlY3JldEtleTogc3RyaW5nLFxuICByZWdpb246IHN0cmluZyxcbiAgcmVxdWVzdERhdGU6IERhdGUsXG4gIHNoYTI1NnN1bTogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZSA9ICdzMycsXG4pIHtcbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3Qgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhhY2Nlc3NLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5IHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cblxuICBpZiAoIWFjY2Vzc0tleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuQWNjZXNzS2V5UmVxdWlyZWRFcnJvcignYWNjZXNzS2V5IGlzIHJlcXVpcmVkIGZvciBzaWduaW5nJylcbiAgfVxuICBpZiAoIXNlY3JldEtleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2VjcmV0S2V5UmVxdWlyZWRFcnJvcignc2VjcmV0S2V5IGlzIHJlcXVpcmVkIGZvciBzaWduaW5nJylcbiAgfVxuXG4gIGNvbnN0IHNpZ25lZEhlYWRlcnMgPSBnZXRTaWduZWRIZWFkZXJzKHJlcXVlc3QuaGVhZGVycylcbiAgY29uc3QgY2Fub25pY2FsUmVxdWVzdCA9IGdldENhbm9uaWNhbFJlcXVlc3QocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QucGF0aCwgcmVxdWVzdC5oZWFkZXJzLCBzaWduZWRIZWFkZXJzLCBzaGEyNTZzdW0pXG4gIGNvbnN0IHNlcnZpY2VJZGVudGlmaWVyID0gc2VydmljZU5hbWUgfHwgJ3MzJ1xuICBjb25zdCBzdHJpbmdUb1NpZ24gPSBnZXRTdHJpbmdUb1NpZ24oY2Fub25pY2FsUmVxdWVzdCwgcmVxdWVzdERhdGUsIHJlZ2lvbiwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBnZXRTaWduaW5nS2V5KHJlcXVlc3REYXRlLCByZWdpb24sIHNlY3JldEtleSwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGFjY2Vzc0tleSwgcmVnaW9uLCByZXF1ZXN0RGF0ZSwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBzaWduaW5nS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpLnRvTG93ZXJDYXNlKClcblxuICByZXR1cm4gYCR7c2lnblY0QWxnb3JpdGhtfSBDcmVkZW50aWFsPSR7Y3JlZGVudGlhbH0sIFNpZ25lZEhlYWRlcnM9JHtzaWduZWRIZWFkZXJzXG4gICAgLmpvaW4oJzsnKVxuICAgIC50b0xvd2VyQ2FzZSgpfSwgU2lnbmF0dXJlPSR7c2lnbmF0dXJlfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25WNEJ5U2VydmljZU5hbWUoXG4gIHJlcXVlc3Q6IElSZXF1ZXN0LFxuICBhY2Nlc3NLZXk6IHN0cmluZyxcbiAgc2VjcmV0S2V5OiBzdHJpbmcsXG4gIHJlZ2lvbjogc3RyaW5nLFxuICByZXF1ZXN0RGF0ZTogRGF0ZSxcbiAgY29udGVudFNoYTI1Njogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZSA9ICdzMycsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gc2lnblY0KHJlcXVlc3QsIGFjY2Vzc0tleSwgc2VjcmV0S2V5LCByZWdpb24sIHJlcXVlc3REYXRlLCBjb250ZW50U2hhMjU2LCBzZXJ2aWNlTmFtZSlcbn1cblxuLy8gcmV0dXJucyBhIHByZXNpZ25lZCBVUkwgc3RyaW5nXG5leHBvcnQgZnVuY3Rpb24gcHJlc2lnblNpZ25hdHVyZVY0KFxuICByZXF1ZXN0OiBJUmVxdWVzdCxcbiAgYWNjZXNzS2V5OiBzdHJpbmcsXG4gIHNlY3JldEtleTogc3RyaW5nLFxuICBzZXNzaW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcmVnaW9uOiBzdHJpbmcsXG4gIHJlcXVlc3REYXRlOiBEYXRlLFxuICBleHBpcmVzOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3Qgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhhY2Nlc3NLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5IHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cblxuICBpZiAoIWFjY2Vzc0tleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuQWNjZXNzS2V5UmVxdWlyZWRFcnJvcignYWNjZXNzS2V5IGlzIHJlcXVpcmVkIGZvciBwcmVzaWduaW5nJylcbiAgfVxuICBpZiAoIXNlY3JldEtleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2VjcmV0S2V5UmVxdWlyZWRFcnJvcignc2VjcmV0S2V5IGlzIHJlcXVpcmVkIGZvciBwcmVzaWduaW5nJylcbiAgfVxuXG4gIGlmIChleHBpcmVzICYmICFpc051bWJlcihleHBpcmVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGlyZXMgc2hvdWxkIGJlIG9mIHR5cGUgXCJudW1iZXJcIicpXG4gIH1cbiAgaWYgKGV4cGlyZXMgJiYgZXhwaXJlcyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkV4cGlyZXNQYXJhbUVycm9yKCdleHBpcmVzIHBhcmFtIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSBzZWNvbmRzJylcbiAgfVxuICBpZiAoZXhwaXJlcyAmJiBleHBpcmVzID4gUFJFU0lHTl9FWFBJUllfREFZU19NQVgpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkV4cGlyZXNQYXJhbUVycm9yKCdleHBpcmVzIHBhcmFtIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gNyBkYXlzJylcbiAgfVxuXG4gIGNvbnN0IGlzbzg2MDFEYXRlID0gbWFrZURhdGVMb25nKHJlcXVlc3REYXRlKVxuICBjb25zdCBzaWduZWRIZWFkZXJzID0gZ2V0U2lnbmVkSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpXG4gIGNvbnN0IGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGFjY2Vzc0tleSwgcmVnaW9uLCByZXF1ZXN0RGF0ZSlcbiAgY29uc3QgaGFzaGVkUGF5bG9hZCA9ICdVTlNJR05FRC1QQVlMT0FEJ1xuXG4gIGNvbnN0IHJlcXVlc3RRdWVyeTogc3RyaW5nW10gPSBbXVxuICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotQWxnb3JpdGhtPSR7c2lnblY0QWxnb3JpdGhtfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1DcmVkZW50aWFsPSR7dXJpRXNjYXBlKGNyZWRlbnRpYWwpfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1EYXRlPSR7aXNvODYwMURhdGV9YClcbiAgcmVxdWVzdFF1ZXJ5LnB1c2goYFgtQW16LUV4cGlyZXM9JHtleHBpcmVzfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1TaWduZWRIZWFkZXJzPSR7dXJpRXNjYXBlKHNpZ25lZEhlYWRlcnMuam9pbignOycpLnRvTG93ZXJDYXNlKCkpfWApXG4gIGlmIChzZXNzaW9uVG9rZW4pIHtcbiAgICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotU2VjdXJpdHktVG9rZW49JHt1cmlFc2NhcGUoc2Vzc2lvblRva2VuKX1gKVxuICB9XG5cbiAgY29uc3QgcmVzb3VyY2UgPSByZXF1ZXN0LnBhdGguc3BsaXQoJz8nKVswXVxuICBsZXQgcXVlcnkgPSByZXF1ZXN0LnBhdGguc3BsaXQoJz8nKVsxXVxuICBpZiAocXVlcnkpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5ICsgJyYnICsgcmVxdWVzdFF1ZXJ5LmpvaW4oJyYnKVxuICB9IGVsc2Uge1xuICAgIHF1ZXJ5ID0gcmVxdWVzdFF1ZXJ5LmpvaW4oJyYnKVxuICB9XG5cbiAgY29uc3QgcGF0aCA9IHJlc291cmNlICsgJz8nICsgcXVlcnlcblxuICBjb25zdCBjYW5vbmljYWxSZXF1ZXN0ID0gZ2V0Q2Fub25pY2FsUmVxdWVzdChyZXF1ZXN0Lm1ldGhvZCwgcGF0aCwgcmVxdWVzdC5oZWFkZXJzLCBzaWduZWRIZWFkZXJzLCBoYXNoZWRQYXlsb2FkKVxuXG4gIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGdldFN0cmluZ1RvU2lnbihjYW5vbmljYWxSZXF1ZXN0LCByZXF1ZXN0RGF0ZSwgcmVnaW9uKVxuICBjb25zdCBzaWduaW5nS2V5ID0gZ2V0U2lnbmluZ0tleShyZXF1ZXN0RGF0ZSwgcmVnaW9uLCBzZWNyZXRLZXkpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBzaWduaW5nS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIHJlcXVlc3QucHJvdG9jb2wgKyAnLy8nICsgcmVxdWVzdC5oZWFkZXJzLmhvc3QgKyBwYXRoICsgYCZYLUFtei1TaWduYXR1cmU9JHtz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
package/package.json CHANGED
@@ -1,46 +1,153 @@
1
1
  {
2
2
  "name": "@hanzo/s3",
3
- "version": "0.6.3",
4
- "main": "lib/index.js",
5
- "svelte": "src/index.ts",
6
- "types": "types/index.d.ts",
7
- "author": "Hanzo <dev@hanzo.ai>",
8
- "template": "@hanzo/node-package",
9
- "license": "EPL-2.0",
3
+ "version": "8.0.7",
4
+ "description": "Hanzo S3 - S3 Compatible Cloud Storage client",
5
+ "main": "./dist/main/s3.js",
6
+ "module": "./dist/esm/s3.mjs",
10
7
  "scripts": {
11
- "build": "compile",
12
- "build:watch": "compile",
13
- "test": "jest --passWithNoTests --silent --forceExit",
14
- "format": "format src",
15
- "_phase:build": "compile transpile src",
16
- "_phase:test": "jest --passWithNoTests --silent --forceExit",
17
- "_phase:format": "format src",
18
- "_phase:validate": "compile validate"
8
+ "prepare": "husky install",
9
+ "tsc": "tsc",
10
+ "type-check": "tsc --noEmit --emitDeclarationOnly false",
11
+ "build": "node build.mjs",
12
+ "test": "mocha",
13
+ "lint": "eslint --ext js,mjs,cjs,ts ./",
14
+ "lint-fix": "eslint --ext js,mjs,cjs,ts ./ --fix",
15
+ "prepublishOnly": "npm run build",
16
+ "functional": "mocha tests/functional/functional-tests.js",
17
+ "format": "prettier -w .",
18
+ "format-check": "prettier --list-different .",
19
+ "lint-staged": "lint-staged"
19
20
  },
20
- "devDependencies": {
21
- "@hanzo/platform-rig": "^0.6.0",
22
- "@typescript-eslint/eslint-plugin": "^6.11.0",
23
- "eslint-plugin-import": "^2.26.0",
24
- "eslint-plugin-promise": "^6.1.1",
25
- "eslint-plugin-n": "^15.4.0",
26
- "eslint": "^8.54.0",
27
- "@typescript-eslint/parser": "^6.11.0",
28
- "eslint-config-standard-with-typescript": "^40.0.0",
29
- "prettier": "^3.1.0",
30
- "typescript": "^5.3.3",
31
- "@types/node": "~20.11.16",
32
- "jest": "^29.7.0",
33
- "ts-jest": "^29.1.1",
34
- "@types/jest": "^29.5.5"
21
+ "exports": {
22
+ ".": {
23
+ "require": "./dist/main/s3.js",
24
+ "types": "./dist/main/s3.d.ts",
25
+ "default": "./dist/esm/s3.mjs"
26
+ },
27
+ "./dist/main/internal/*": null,
28
+ "./dist/main/*": {
29
+ "require": "./dist/main/*",
30
+ "default": null
31
+ },
32
+ "./dist/esm/internal/*": null,
33
+ "./dist/esm/*": {
34
+ "import": "./dist/esm/*",
35
+ "default": null
36
+ },
37
+ "./package.json": "./package.json"
38
+ },
39
+ "files": [
40
+ "package.json",
41
+ "./dist/",
42
+ "./src/",
43
+ "./types/",
44
+ "LICENSE",
45
+ "README.md",
46
+ "README_zh_CN.md",
47
+ "MAINTAINERS.md"
48
+ ],
49
+ "prettier": {
50
+ "printWidth": 120,
51
+ "singleQuote": true,
52
+ "endOfLine": "lf",
53
+ "trailingComma": "all",
54
+ "semi": false
55
+ },
56
+ "lint-staged": {
57
+ "*.json": [
58
+ "prettier --write"
59
+ ],
60
+ "*.{js,cjs,mjs,ts}": [
61
+ "eslint --fix",
62
+ "prettier --write"
63
+ ],
64
+ "*.md": [
65
+ "prettier --write"
66
+ ]
67
+ },
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "git+https://github.com/hanzos3/js-sdk.git"
71
+ },
72
+ "author": {
73
+ "name": "Hanzo AI, Inc.",
74
+ "url": "https://hanzo.ai"
35
75
  },
76
+ "engines": {
77
+ "node": "^16 || ^18 || >=20"
78
+ },
79
+ "license": "Apache-2.0",
80
+ "bugs": {
81
+ "url": "https://github.com/hanzos3/js-sdk/issues",
82
+ "mail": ""
83
+ },
84
+ "homepage": "https://github.com/hanzos3/js-sdk#readme",
36
85
  "dependencies": {
37
- "@hanzo/core": "^0.6.37",
38
- "@hanzo/platform": "^0.6.15",
39
- "@hanzo/server-core": "^0.6.4",
40
- "@hanzo/storage": "^0.6.3",
41
- "@aws-sdk/client-s3": "^3.738.0",
42
- "@aws-sdk/s3-request-presigner": "^3.738.0",
43
- "@aws-sdk/lib-storage": "^3.738.0",
44
- "@smithy/node-http-handler": "^4.0.2"
45
- }
86
+ "async": "^3.2.4",
87
+ "block-stream2": "^2.1.0",
88
+ "browser-or-node": "^2.1.1",
89
+ "buffer-crc32": "^1.0.0",
90
+ "eventemitter3": "^5.0.1",
91
+ "fast-xml-parser": "^5.3.4",
92
+ "ipaddr.js": "^2.0.1",
93
+ "lodash": "^4.17.21",
94
+ "mime-types": "^2.1.35",
95
+ "query-string": "^7.1.3",
96
+ "stream-json": "^1.8.0",
97
+ "through2": "^4.0.2",
98
+ "xml2js": "^0.5.0 || ^0.6.2"
99
+ },
100
+ "devDependencies": {
101
+ "@babel/core": "^7.21.8",
102
+ "@babel/plugin-transform-modules-commonjs": "^7.21.5",
103
+ "@babel/preset-env": "^7.21.5",
104
+ "@babel/preset-typescript": "^7.21.5",
105
+ "@babel/register": "^7.21.0",
106
+ "@nodelib/fs.walk": "^1.2.8",
107
+ "@types/async": "^3.2.20",
108
+ "@types/block-stream2": "^2.1.2",
109
+ "@types/chai": "^4.3.11",
110
+ "@types/chai-as-promised": "^7.1.8",
111
+ "@types/lodash": "^4.14.194",
112
+ "@types/mime-types": "^2.1.1",
113
+ "@types/node": "^20.1.0",
114
+ "@types/stream-json": "^1.7.5",
115
+ "@types/through2": "^2.0.38",
116
+ "@types/xml2js": "^0.4.11",
117
+ "@typescript-eslint/eslint-plugin": "^5.59.2",
118
+ "@typescript-eslint/parser": "^5.59.2",
119
+ "@upleveled/babel-plugin-remove-node-prefix": "^1.0.5",
120
+ "babel-plugin-replace-import-extension": "^1.1.3",
121
+ "babel-plugin-transform-replace-expressions": "^0.2.0",
122
+ "chai": "^4.3.7",
123
+ "chai-as-promised": "^7.1.1",
124
+ "dotenv": "^16.0.3",
125
+ "eslint": "^8.40.0",
126
+ "eslint-config-prettier": "^8.8.0",
127
+ "eslint-import-resolver-typescript": "^3.5.5",
128
+ "eslint-plugin-import": "^2.27.5",
129
+ "eslint-plugin-simple-import-sort": "^10.0.0",
130
+ "eslint-plugin-unicorn": "^47.0.0",
131
+ "eslint-plugin-unused-imports": "^2.0.0",
132
+ "husky": "^8.0.3",
133
+ "lint-staged": "^13.2.2",
134
+ "mocha": "^10.2.0",
135
+ "mocha-steps": "^1.3.0",
136
+ "nock": "^13.3.1",
137
+ "prettier": "^2.8.8",
138
+ "source-map-support": "^0.5.21",
139
+ "split-file": "^2.3.0",
140
+ "superagent": "^8.0.1",
141
+ "typescript": "^5.0.4",
142
+ "uuid": "^9.0.0"
143
+ },
144
+ "keywords": [
145
+ "api",
146
+ "amazon",
147
+ "hanzo",
148
+ "hanzo-s3",
149
+ "cloud",
150
+ "s3",
151
+ "storage"
152
+ ]
46
153
  }