@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,189 @@
1
+ import * as fs from "fs/promises";
2
+ import * as http from "http";
3
+ import * as https from "https";
4
+ import { URL, URLSearchParams } from "url";
5
+ import { CredentialProvider } from "./CredentialProvider.mjs";
6
+ import { Credentials } from "./Credentials.mjs";
7
+ import { parseXml } from "./internal/helper.mjs";
8
+ import { request } from "./internal/request.mjs";
9
+ import { readAsString } from "./internal/response.mjs";
10
+ export class IamAwsProvider extends CredentialProvider {
11
+ accessExpiresAt = '';
12
+ constructor({
13
+ customEndpoint = undefined,
14
+ transportAgent = undefined
15
+ }) {
16
+ super({
17
+ accessKey: '',
18
+ secretKey: ''
19
+ });
20
+ this.customEndpoint = customEndpoint;
21
+ this.transportAgent = transportAgent;
22
+
23
+ /**
24
+ * Internal Tracking variables
25
+ */
26
+ this._credentials = null;
27
+ }
28
+ async getCredentials() {
29
+ if (!this._credentials || this.isAboutToExpire()) {
30
+ this._credentials = await this.fetchCredentials();
31
+ }
32
+ return this._credentials;
33
+ }
34
+ async fetchCredentials() {
35
+ try {
36
+ // check for IRSA (https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)
37
+ const tokenFile = process.env.AWS_WEB_IDENTITY_TOKEN_FILE;
38
+ if (tokenFile) {
39
+ return await this.fetchCredentialsUsingTokenFile(tokenFile);
40
+ }
41
+
42
+ // try with IAM role for EC2 instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
43
+ let tokenHeader = 'Authorization';
44
+ let token = process.env.AWS_CONTAINER_AUTHORIZATION_TOKEN;
45
+ const relativeUri = process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI;
46
+ const fullUri = process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI;
47
+ let url;
48
+ if (relativeUri) {
49
+ url = new URL(relativeUri, 'http://169.254.170.2');
50
+ } else if (fullUri) {
51
+ url = new URL(fullUri);
52
+ } else {
53
+ token = await this.fetchImdsToken();
54
+ tokenHeader = 'X-aws-ec2-metadata-token';
55
+ url = await this.getIamRoleNamedUrl(token);
56
+ }
57
+ return this.requestCredentials(url, tokenHeader, token);
58
+ } catch (err) {
59
+ throw new Error(`Failed to get Credentials: ${err}`, {
60
+ cause: err
61
+ });
62
+ }
63
+ }
64
+ async fetchCredentialsUsingTokenFile(tokenFile) {
65
+ const token = await fs.readFile(tokenFile, {
66
+ encoding: 'utf8'
67
+ });
68
+ const region = process.env.AWS_REGION;
69
+ const stsEndpoint = new URL(region ? `https://sts.${region}.amazonaws.com` : 'https://sts.amazonaws.com');
70
+ const hostValue = stsEndpoint.hostname;
71
+ const portValue = stsEndpoint.port;
72
+ const qryParams = new URLSearchParams({
73
+ Action: 'AssumeRoleWithWebIdentity',
74
+ Version: '2011-06-15'
75
+ });
76
+ const roleArn = process.env.AWS_ROLE_ARN;
77
+ if (roleArn) {
78
+ qryParams.set('RoleArn', roleArn);
79
+ const roleSessionName = process.env.AWS_ROLE_SESSION_NAME;
80
+ qryParams.set('RoleSessionName', roleSessionName ? roleSessionName : Date.now().toString());
81
+ }
82
+ qryParams.set('WebIdentityToken', token);
83
+ qryParams.sort();
84
+ const requestOptions = {
85
+ hostname: hostValue,
86
+ port: portValue,
87
+ path: `${stsEndpoint.pathname}?${qryParams.toString()}`,
88
+ protocol: stsEndpoint.protocol,
89
+ method: 'POST',
90
+ headers: {},
91
+ agent: this.transportAgent
92
+ };
93
+ const transport = stsEndpoint.protocol === 'http:' ? http : https;
94
+ const res = await request(transport, requestOptions, null);
95
+ const body = await readAsString(res);
96
+ const assumeRoleResponse = parseXml(body);
97
+ const creds = assumeRoleResponse.AssumeRoleWithWebIdentityResponse.AssumeRoleWithWebIdentityResult.Credentials;
98
+ this.accessExpiresAt = creds.Expiration;
99
+ return new Credentials({
100
+ accessKey: creds.AccessKeyId,
101
+ secretKey: creds.SecretAccessKey,
102
+ sessionToken: creds.SessionToken
103
+ });
104
+ }
105
+ async fetchImdsToken() {
106
+ const endpoint = this.customEndpoint ? this.customEndpoint : 'http://169.254.169.254';
107
+ const url = new URL('/latest/api/token', endpoint);
108
+ const requestOptions = {
109
+ hostname: url.hostname,
110
+ port: url.port,
111
+ path: `${url.pathname}${url.search}`,
112
+ protocol: url.protocol,
113
+ method: 'PUT',
114
+ headers: {
115
+ 'X-aws-ec2-metadata-token-ttl-seconds': '21600'
116
+ },
117
+ agent: this.transportAgent
118
+ };
119
+ const transport = url.protocol === 'http:' ? http : https;
120
+ const res = await request(transport, requestOptions, null);
121
+ return await readAsString(res);
122
+ }
123
+ async getIamRoleNamedUrl(token) {
124
+ const endpoint = this.customEndpoint ? this.customEndpoint : 'http://169.254.169.254';
125
+ const url = new URL('latest/meta-data/iam/security-credentials/', endpoint);
126
+ const roleName = await this.getIamRoleName(url, token);
127
+ return new URL(`${url.pathname}/${encodeURIComponent(roleName)}`, url.origin);
128
+ }
129
+ async getIamRoleName(url, token) {
130
+ const requestOptions = {
131
+ hostname: url.hostname,
132
+ port: url.port,
133
+ path: `${url.pathname}${url.search}`,
134
+ protocol: url.protocol,
135
+ method: 'GET',
136
+ headers: {
137
+ 'X-aws-ec2-metadata-token': token
138
+ },
139
+ agent: this.transportAgent
140
+ };
141
+ const transport = url.protocol === 'http:' ? http : https;
142
+ const res = await request(transport, requestOptions, null);
143
+ const body = await readAsString(res);
144
+ const roleNames = body.split(/\r\n|[\n\r\u2028\u2029]/);
145
+ if (roleNames.length === 0) {
146
+ throw new Error(`No IAM roles attached to EC2 service ${url}`);
147
+ }
148
+ return roleNames[0];
149
+ }
150
+ async requestCredentials(url, tokenHeader, token) {
151
+ const headers = {};
152
+ if (token) {
153
+ headers[tokenHeader] = token;
154
+ }
155
+ const requestOptions = {
156
+ hostname: url.hostname,
157
+ port: url.port,
158
+ path: `${url.pathname}${url.search}`,
159
+ protocol: url.protocol,
160
+ method: 'GET',
161
+ headers: headers,
162
+ agent: this.transportAgent
163
+ };
164
+ const transport = url.protocol === 'http:' ? http : https;
165
+ const res = await request(transport, requestOptions, null);
166
+ const body = await readAsString(res);
167
+ const ecsCredentials = JSON.parse(body);
168
+ if (!ecsCredentials.Code || ecsCredentials.Code != 'Success') {
169
+ throw new Error(`${url} failed with code ${ecsCredentials.Code} and message ${ecsCredentials.Message}`);
170
+ }
171
+ this.accessExpiresAt = ecsCredentials.Expiration;
172
+ return new Credentials({
173
+ accessKey: ecsCredentials.AccessKeyID,
174
+ secretKey: ecsCredentials.SecretAccessKey,
175
+ sessionToken: ecsCredentials.Token
176
+ });
177
+ }
178
+ isAboutToExpire() {
179
+ const expiresAt = new Date(this.accessExpiresAt);
180
+ const provisionalExpiry = new Date(Date.now() + 1000 * 10); // 10 seconds leeway
181
+ return provisionalExpiry > expiresAt;
182
+ }
183
+ }
184
+
185
+ // deprecated default export, please use named exports.
186
+ // keep for backward compatibility.
187
+ // eslint-disable-next-line import/no-default-export
188
+ export default IamAwsProvider;
189
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImh0dHAiLCJodHRwcyIsIlVSTCIsIlVSTFNlYXJjaFBhcmFtcyIsIkNyZWRlbnRpYWxQcm92aWRlciIsIkNyZWRlbnRpYWxzIiwicGFyc2VYbWwiLCJyZXF1ZXN0IiwicmVhZEFzU3RyaW5nIiwiSWFtQXdzUHJvdmlkZXIiLCJhY2Nlc3NFeHBpcmVzQXQiLCJjb25zdHJ1Y3RvciIsImN1c3RvbUVuZHBvaW50IiwidW5kZWZpbmVkIiwidHJhbnNwb3J0QWdlbnQiLCJhY2Nlc3NLZXkiLCJzZWNyZXRLZXkiLCJfY3JlZGVudGlhbHMiLCJnZXRDcmVkZW50aWFscyIsImlzQWJvdXRUb0V4cGlyZSIsImZldGNoQ3JlZGVudGlhbHMiLCJ0b2tlbkZpbGUiLCJwcm9jZXNzIiwiZW52IiwiQVdTX1dFQl9JREVOVElUWV9UT0tFTl9GSUxFIiwiZmV0Y2hDcmVkZW50aWFsc1VzaW5nVG9rZW5GaWxlIiwidG9rZW5IZWFkZXIiLCJ0b2tlbiIsIkFXU19DT05UQUlORVJfQVVUSE9SSVpBVElPTl9UT0tFTiIsInJlbGF0aXZlVXJpIiwiQVdTX0NPTlRBSU5FUl9DUkVERU5USUFMU19SRUxBVElWRV9VUkkiLCJmdWxsVXJpIiwiQVdTX0NPTlRBSU5FUl9DUkVERU5USUFMU19GVUxMX1VSSSIsInVybCIsImZldGNoSW1kc1Rva2VuIiwiZ2V0SWFtUm9sZU5hbWVkVXJsIiwicmVxdWVzdENyZWRlbnRpYWxzIiwiZXJyIiwiRXJyb3IiLCJjYXVzZSIsInJlYWRGaWxlIiwiZW5jb2RpbmciLCJyZWdpb24iLCJBV1NfUkVHSU9OIiwic3RzRW5kcG9pbnQiLCJob3N0VmFsdWUiLCJob3N0bmFtZSIsInBvcnRWYWx1ZSIsInBvcnQiLCJxcnlQYXJhbXMiLCJBY3Rpb24iLCJWZXJzaW9uIiwicm9sZUFybiIsIkFXU19ST0xFX0FSTiIsInNldCIsInJvbGVTZXNzaW9uTmFtZSIsIkFXU19ST0xFX1NFU1NJT05fTkFNRSIsIkRhdGUiLCJub3ciLCJ0b1N0cmluZyIsInNvcnQiLCJyZXF1ZXN0T3B0aW9ucyIsInBhdGgiLCJwYXRobmFtZSIsInByb3RvY29sIiwibWV0aG9kIiwiaGVhZGVycyIsImFnZW50IiwidHJhbnNwb3J0IiwicmVzIiwiYm9keSIsImFzc3VtZVJvbGVSZXNwb25zZSIsImNyZWRzIiwiQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3BvbnNlIiwiQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3VsdCIsIkV4cGlyYXRpb24iLCJBY2Nlc3NLZXlJZCIsIlNlY3JldEFjY2Vzc0tleSIsInNlc3Npb25Ub2tlbiIsIlNlc3Npb25Ub2tlbiIsImVuZHBvaW50Iiwic2VhcmNoIiwicm9sZU5hbWUiLCJnZXRJYW1Sb2xlTmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIm9yaWdpbiIsInJvbGVOYW1lcyIsInNwbGl0IiwibGVuZ3RoIiwiZWNzQ3JlZGVudGlhbHMiLCJKU09OIiwicGFyc2UiLCJDb2RlIiwiTWVzc2FnZSIsIkFjY2Vzc0tleUlEIiwiVG9rZW4iLCJleHBpcmVzQXQiLCJwcm92aXNpb25hbEV4cGlyeSJdLCJzb3VyY2VzIjpbIklhbUF3c1Byb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ25vZGU6aHR0cCdcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ25vZGU6aHR0cHMnXG5pbXBvcnQgeyBVUkwsIFVSTFNlYXJjaFBhcmFtcyB9IGZyb20gJ25vZGU6dXJsJ1xuXG5pbXBvcnQgeyBDcmVkZW50aWFsUHJvdmlkZXIgfSBmcm9tICcuL0NyZWRlbnRpYWxQcm92aWRlci50cydcbmltcG9ydCB7IENyZWRlbnRpYWxzIH0gZnJvbSAnLi9DcmVkZW50aWFscy50cydcbmltcG9ydCB7IHBhcnNlWG1sIH0gZnJvbSAnLi9pbnRlcm5hbC9oZWxwZXIudHMnXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi9pbnRlcm5hbC9yZXF1ZXN0LnRzJ1xuaW1wb3J0IHsgcmVhZEFzU3RyaW5nIH0gZnJvbSAnLi9pbnRlcm5hbC9yZXNwb25zZS50cydcblxuaW50ZXJmYWNlIEFzc3VtZVJvbGVSZXNwb25zZSB7XG4gIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXNwb25zZToge1xuICAgIEFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXN1bHQ6IHtcbiAgICAgIENyZWRlbnRpYWxzOiB7XG4gICAgICAgIEFjY2Vzc0tleUlkOiBzdHJpbmdcbiAgICAgICAgU2VjcmV0QWNjZXNzS2V5OiBzdHJpbmdcbiAgICAgICAgU2Vzc2lvblRva2VuOiBzdHJpbmdcbiAgICAgICAgRXhwaXJhdGlvbjogc3RyaW5nXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBFY3NDcmVkZW50aWFscyB7XG4gIEFjY2Vzc0tleUlEOiBzdHJpbmdcbiAgU2VjcmV0QWNjZXNzS2V5OiBzdHJpbmdcbiAgVG9rZW46IHN0cmluZ1xuICBFeHBpcmF0aW9uOiBzdHJpbmdcbiAgQ29kZTogc3RyaW5nXG4gIE1lc3NhZ2U6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElhbUF3c1Byb3ZpZGVyT3B0aW9ucyB7XG4gIGN1c3RvbUVuZHBvaW50Pzogc3RyaW5nXG4gIHRyYW5zcG9ydEFnZW50PzogaHR0cC5BZ2VudFxufVxuXG5leHBvcnQgY2xhc3MgSWFtQXdzUHJvdmlkZXIgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUVuZHBvaW50Pzogc3RyaW5nXG5cbiAgcHJpdmF0ZSBfY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgbnVsbFxuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zcG9ydEFnZW50PzogaHR0cC5BZ2VudFxuICBwcml2YXRlIGFjY2Vzc0V4cGlyZXNBdCA9ICcnXG5cbiAgY29uc3RydWN0b3IoeyBjdXN0b21FbmRwb2ludCA9IHVuZGVmaW5lZCwgdHJhbnNwb3J0QWdlbnQgPSB1bmRlZmluZWQgfTogSWFtQXdzUHJvdmlkZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoeyBhY2Nlc3NLZXk6ICcnLCBzZWNyZXRLZXk6ICcnIH0pXG5cbiAgICB0aGlzLmN1c3RvbUVuZHBvaW50ID0gY3VzdG9tRW5kcG9pbnRcbiAgICB0aGlzLnRyYW5zcG9ydEFnZW50ID0gdHJhbnNwb3J0QWdlbnRcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIFRyYWNraW5nIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHRoaXMuX2NyZWRlbnRpYWxzID0gbnVsbFxuICB9XG5cbiAgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGlmICghdGhpcy5fY3JlZGVudGlhbHMgfHwgdGhpcy5pc0Fib3V0VG9FeHBpcmUoKSkge1xuICAgICAgdGhpcy5fY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmZldGNoQ3JlZGVudGlhbHMoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlZGVudGlhbHNcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGNoZWNrIGZvciBJUlNBIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWtzL2xhdGVzdC91c2VyZ3VpZGUvaWFtLXJvbGVzLWZvci1zZXJ2aWNlLWFjY291bnRzLmh0bWwpXG4gICAgICBjb25zdCB0b2tlbkZpbGUgPSBwcm9jZXNzLmVudi5BV1NfV0VCX0lERU5USVRZX1RPS0VOX0ZJTEVcbiAgICAgIGlmICh0b2tlbkZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hDcmVkZW50aWFsc1VzaW5nVG9rZW5GaWxlKHRva2VuRmlsZSlcbiAgICAgIH1cblxuICAgICAgLy8gdHJ5IHdpdGggSUFNIHJvbGUgZm9yIEVDMiBpbnN0YW5jZXMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pYW0tcm9sZXMtZm9yLWFtYXpvbi1lYzIuaHRtbClcbiAgICAgIGxldCB0b2tlbkhlYWRlciA9ICdBdXRob3JpemF0aW9uJ1xuICAgICAgbGV0IHRva2VuID0gcHJvY2Vzcy5lbnYuQVdTX0NPTlRBSU5FUl9BVVRIT1JJWkFUSU9OX1RPS0VOXG4gICAgICBjb25zdCByZWxhdGl2ZVVyaSA9IHByb2Nlc3MuZW52LkFXU19DT05UQUlORVJfQ1JFREVOVElBTFNfUkVMQVRJVkVfVVJJXG4gICAgICBjb25zdCBmdWxsVXJpID0gcHJvY2Vzcy5lbnYuQVdTX0NPTlRBSU5FUl9DUkVERU5USUFMU19GVUxMX1VSSVxuICAgICAgbGV0IHVybDogVVJMXG4gICAgICBpZiAocmVsYXRpdmVVcmkpIHtcbiAgICAgICAgdXJsID0gbmV3IFVSTChyZWxhdGl2ZVVyaSwgJ2h0dHA6Ly8xNjkuMjU0LjE3MC4yJylcbiAgICAgIH0gZWxzZSBpZiAoZnVsbFVyaSkge1xuICAgICAgICB1cmwgPSBuZXcgVVJMKGZ1bGxVcmkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiA9IGF3YWl0IHRoaXMuZmV0Y2hJbWRzVG9rZW4oKVxuICAgICAgICB0b2tlbkhlYWRlciA9ICdYLWF3cy1lYzItbWV0YWRhdGEtdG9rZW4nXG4gICAgICAgIHVybCA9IGF3YWl0IHRoaXMuZ2V0SWFtUm9sZU5hbWVkVXJsKHRva2VuKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Q3JlZGVudGlhbHModXJsLCB0b2tlbkhlYWRlciwgdG9rZW4pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZXQgQ3JlZGVudGlhbHM6ICR7ZXJyfWAsIHsgY2F1c2U6IGVyciB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hDcmVkZW50aWFsc1VzaW5nVG9rZW5GaWxlKHRva2VuRmlsZTogc3RyaW5nKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZnMucmVhZEZpbGUodG9rZW5GaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSlcbiAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OXG4gICAgY29uc3Qgc3RzRW5kcG9pbnQgPSBuZXcgVVJMKHJlZ2lvbiA/IGBodHRwczovL3N0cy4ke3JlZ2lvbn0uYW1hem9uYXdzLmNvbWAgOiAnaHR0cHM6Ly9zdHMuYW1hem9uYXdzLmNvbScpXG5cbiAgICBjb25zdCBob3N0VmFsdWUgPSBzdHNFbmRwb2ludC5ob3N0bmFtZVxuICAgIGNvbnN0IHBvcnRWYWx1ZSA9IHN0c0VuZHBvaW50LnBvcnRcbiAgICBjb25zdCBxcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIEFjdGlvbjogJ0Fzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHknLFxuICAgICAgVmVyc2lvbjogJzIwMTEtMDYtMTUnLFxuICAgIH0pXG5cbiAgICBjb25zdCByb2xlQXJuID0gcHJvY2Vzcy5lbnYuQVdTX1JPTEVfQVJOXG4gICAgaWYgKHJvbGVBcm4pIHtcbiAgICAgIHFyeVBhcmFtcy5zZXQoJ1JvbGVBcm4nLCByb2xlQXJuKVxuICAgICAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gcHJvY2Vzcy5lbnYuQVdTX1JPTEVfU0VTU0lPTl9OQU1FXG4gICAgICBxcnlQYXJhbXMuc2V0KCdSb2xlU2Vzc2lvbk5hbWUnLCByb2xlU2Vzc2lvbk5hbWUgPyByb2xlU2Vzc2lvbk5hbWUgOiBEYXRlLm5vdygpLnRvU3RyaW5nKCkpXG4gICAgfVxuXG4gICAgcXJ5UGFyYW1zLnNldCgnV2ViSWRlbnRpdHlUb2tlbicsIHRva2VuKVxuICAgIHFyeVBhcmFtcy5zb3J0KClcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgaG9zdG5hbWU6IGhvc3RWYWx1ZSxcbiAgICAgIHBvcnQ6IHBvcnRWYWx1ZSxcbiAgICAgIHBhdGg6IGAke3N0c0VuZHBvaW50LnBhdGhuYW1lfT8ke3FyeVBhcmFtcy50b1N0cmluZygpfWAsXG4gICAgICBwcm90b2NvbDogc3RzRW5kcG9pbnQucHJvdG9jb2wsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgYWdlbnQ6IHRoaXMudHJhbnNwb3J0QWdlbnQsXG4gICAgfSBzYXRpc2ZpZXMgaHR0cC5SZXF1ZXN0T3B0aW9uc1xuXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gc3RzRW5kcG9pbnQucHJvdG9jb2wgPT09ICdodHRwOicgPyBodHRwIDogaHR0cHNcbiAgICBjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0KHRyYW5zcG9ydCwgcmVxdWVzdE9wdGlvbnMsIG51bGwpXG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRBc1N0cmluZyhyZXMpXG5cbiAgICBjb25zdCBhc3N1bWVSb2xlUmVzcG9uc2U6IEFzc3VtZVJvbGVSZXNwb25zZSA9IHBhcnNlWG1sKGJvZHkpXG4gICAgY29uc3QgY3JlZHMgPSBhc3N1bWVSb2xlUmVzcG9uc2UuQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVJlc3BvbnNlLkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlSZXN1bHQuQ3JlZGVudGlhbHNcbiAgICB0aGlzLmFjY2Vzc0V4cGlyZXNBdCA9IGNyZWRzLkV4cGlyYXRpb25cbiAgICByZXR1cm4gbmV3IENyZWRlbnRpYWxzKHtcbiAgICAgIGFjY2Vzc0tleTogY3JlZHMuQWNjZXNzS2V5SWQsXG4gICAgICBzZWNyZXRLZXk6IGNyZWRzLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHNlc3Npb25Ub2tlbjogY3JlZHMuU2Vzc2lvblRva2VuLFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoSW1kc1Rva2VuKCkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jdXN0b21FbmRwb2ludCA/IHRoaXMuY3VzdG9tRW5kcG9pbnQgOiAnaHR0cDovLzE2OS4yNTQuMTY5LjI1NCdcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCcvbGF0ZXN0L2FwaS90b2tlbicsIGVuZHBvaW50KVxuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdXJsLnBvcnQsXG4gICAgICBwYXRoOiBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAsXG4gICAgICBwcm90b2NvbDogdXJsLnByb3RvY29sLFxuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbi10dGwtc2Vjb25kcyc6ICcyMTYwMCcsXG4gICAgICB9LFxuICAgICAgYWdlbnQ6IHRoaXMudHJhbnNwb3J0QWdlbnQsXG4gICAgfSBzYXRpc2ZpZXMgaHR0cC5SZXF1ZXN0T3B0aW9uc1xuXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdXJsLnByb3RvY29sID09PSAnaHR0cDonID8gaHR0cCA6IGh0dHBzXG4gICAgY29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdCh0cmFuc3BvcnQsIHJlcXVlc3RPcHRpb25zLCBudWxsKVxuICAgIHJldHVybiBhd2FpdCByZWFkQXNTdHJpbmcocmVzKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRJYW1Sb2xlTmFtZWRVcmwodG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jdXN0b21FbmRwb2ludCA/IHRoaXMuY3VzdG9tRW5kcG9pbnQgOiAnaHR0cDovLzE2OS4yNTQuMTY5LjI1NCdcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCdsYXRlc3QvbWV0YS1kYXRhL2lhbS9zZWN1cml0eS1jcmVkZW50aWFscy8nLCBlbmRwb2ludClcblxuICAgIGNvbnN0IHJvbGVOYW1lID0gYXdhaXQgdGhpcy5nZXRJYW1Sb2xlTmFtZSh1cmwsIHRva2VuKVxuICAgIHJldHVybiBuZXcgVVJMKGAke3VybC5wYXRobmFtZX0vJHtlbmNvZGVVUklDb21wb25lbnQocm9sZU5hbWUpfWAsIHVybC5vcmlnaW4pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldElhbVJvbGVOYW1lKHVybDogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB1cmwucG9ydCxcbiAgICAgIHBhdGg6IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCxcbiAgICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsXG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnWC1hd3MtZWMyLW1ldGFkYXRhLXRva2VuJzogdG9rZW4sXG4gICAgICB9LFxuICAgICAgYWdlbnQ6IHRoaXMudHJhbnNwb3J0QWdlbnQsXG4gICAgfSBzYXRpc2ZpZXMgaHR0cC5SZXF1ZXN0T3B0aW9uc1xuXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdXJsLnByb3RvY29sID09PSAnaHR0cDonID8gaHR0cCA6IGh0dHBzXG4gICAgY29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdCh0cmFuc3BvcnQsIHJlcXVlc3RPcHRpb25zLCBudWxsKVxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkQXNTdHJpbmcocmVzKVxuICAgIGNvbnN0IHJvbGVOYW1lcyA9IGJvZHkuc3BsaXQoL1xcclxcbnxbXFxuXFxyXFx1MjAyOFxcdTIwMjldLylcbiAgICBpZiAocm9sZU5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBJQU0gcm9sZXMgYXR0YWNoZWQgdG8gRUMyIHNlcnZpY2UgJHt1cmx9YClcbiAgICB9XG4gICAgcmV0dXJuIHJvbGVOYW1lc1swXSBhcyBzdHJpbmdcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdENyZWRlbnRpYWxzKHVybDogVVJMLCB0b2tlbkhlYWRlcjogc3RyaW5nLCB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICAgIGlmICh0b2tlbikge1xuICAgICAgaGVhZGVyc1t0b2tlbkhlYWRlcl0gPSB0b2tlblxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB1cmwucG9ydCxcbiAgICAgIHBhdGg6IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCxcbiAgICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsXG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiB0aGlzLnRyYW5zcG9ydEFnZW50LFxuICAgIH0gc2F0aXNmaWVzIGh0dHAuUmVxdWVzdE9wdGlvbnNcblxuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHVybC5wcm90b2NvbCA9PT0gJ2h0dHA6JyA/IGh0dHAgOiBodHRwc1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlcXVlc3QodHJhbnNwb3J0LCByZXF1ZXN0T3B0aW9ucywgbnVsbClcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZEFzU3RyaW5nKHJlcylcbiAgICBjb25zdCBlY3NDcmVkZW50aWFscyA9IEpTT04ucGFyc2UoYm9keSkgYXMgRWNzQ3JlZGVudGlhbHNcbiAgICBpZiAoIWVjc0NyZWRlbnRpYWxzLkNvZGUgfHwgZWNzQ3JlZGVudGlhbHMuQ29kZSAhPSAnU3VjY2VzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt1cmx9IGZhaWxlZCB3aXRoIGNvZGUgJHtlY3NDcmVkZW50aWFscy5Db2RlfSBhbmQgbWVzc2FnZSAke2Vjc0NyZWRlbnRpYWxzLk1lc3NhZ2V9YClcbiAgICB9XG5cbiAgICB0aGlzLmFjY2Vzc0V4cGlyZXNBdCA9IGVjc0NyZWRlbnRpYWxzLkV4cGlyYXRpb25cbiAgICByZXR1cm4gbmV3IENyZWRlbnRpYWxzKHtcbiAgICAgIGFjY2Vzc0tleTogZWNzQ3JlZGVudGlhbHMuQWNjZXNzS2V5SUQsXG4gICAgICBzZWNyZXRLZXk6IGVjc0NyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHNlc3Npb25Ub2tlbjogZWNzQ3JlZGVudGlhbHMuVG9rZW4sXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaXNBYm91dFRvRXhwaXJlKCkge1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKHRoaXMuYWNjZXNzRXhwaXJlc0F0KVxuICAgIGNvbnN0IHByb3Zpc2lvbmFsRXhwaXJ5ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDEwMDAgKiAxMCkgLy8gMTAgc2Vjb25kcyBsZWV3YXlcbiAgICByZXR1cm4gcHJvdmlzaW9uYWxFeHBpcnkgPiBleHBpcmVzQXRcbiAgfVxufVxuXG4vLyBkZXByZWNhdGVkIGRlZmF1bHQgZXhwb3J0LCBwbGVhc2UgdXNlIG5hbWVkIGV4cG9ydHMuXG4vLyBrZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1kZWZhdWx0LWV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgSWFtQXdzUHJvdmlkZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLQSxFQUFFO0FBQ2QsT0FBTyxLQUFLQyxJQUFJO0FBQ2hCLE9BQU8sS0FBS0MsS0FBSztBQUNqQixTQUFTQyxHQUFHLEVBQUVDLGVBQWU7QUFFN0IsU0FBU0Msa0JBQWtCLFFBQVEsMEJBQXlCO0FBQzVELFNBQVNDLFdBQVcsUUFBUSxtQkFBa0I7QUFDOUMsU0FBU0MsUUFBUSxRQUFRLHVCQUFzQjtBQUMvQyxTQUFTQyxPQUFPLFFBQVEsd0JBQXVCO0FBQy9DLFNBQVNDLFlBQVksUUFBUSx5QkFBd0I7QUE2QnJELE9BQU8sTUFBTUMsY0FBYyxTQUFTTCxrQkFBa0IsQ0FBQztF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
@@ -0,0 +1,82 @@
1
+ /// <reference lib="es2022.error" />
2
+ declare class ExtendableError extends Error {
3
+ constructor(message?: string, opt?: ErrorOptions);
4
+ }
5
+ /**
6
+ * AnonymousRequestError is generated for anonymous keys on specific
7
+ * APIs. NOTE: PresignedURL generation always requires access keys.
8
+ */
9
+ export declare class AnonymousRequestError extends ExtendableError {}
10
+ /**
11
+ * InvalidArgumentError is generated for all invalid arguments.
12
+ */
13
+ export declare class InvalidArgumentError extends ExtendableError {}
14
+ /**
15
+ * InvalidPortError is generated when a non integer value is provided
16
+ * for ports.
17
+ */
18
+ export declare class InvalidPortError extends ExtendableError {}
19
+ /**
20
+ * InvalidEndpointError is generated when an invalid end point value is
21
+ * provided which does not follow domain standards.
22
+ */
23
+ export declare class InvalidEndpointError extends ExtendableError {}
24
+ /**
25
+ * InvalidBucketNameError is generated when an invalid bucket name is
26
+ * provided which does not follow AWS S3 specifications.
27
+ * http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
28
+ */
29
+ export declare class InvalidBucketNameError extends ExtendableError {}
30
+ /**
31
+ * InvalidObjectNameError is generated when an invalid object name is
32
+ * provided which does not follow AWS S3 specifications.
33
+ * http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
34
+ */
35
+ export declare class InvalidObjectNameError extends ExtendableError {}
36
+ /**
37
+ * AccessKeyRequiredError generated by signature methods when access
38
+ * key is not found.
39
+ */
40
+ export declare class AccessKeyRequiredError extends ExtendableError {}
41
+ /**
42
+ * SecretKeyRequiredError generated by signature methods when secret
43
+ * key is not found.
44
+ */
45
+ export declare class SecretKeyRequiredError extends ExtendableError {}
46
+ /**
47
+ * ExpiresParamError generated when expires parameter value is not
48
+ * well within stipulated limits.
49
+ */
50
+ export declare class ExpiresParamError extends ExtendableError {}
51
+ /**
52
+ * InvalidDateError generated when invalid date is found.
53
+ */
54
+ export declare class InvalidDateError extends ExtendableError {}
55
+ /**
56
+ * InvalidPrefixError generated when object prefix provided is invalid
57
+ * or does not conform to AWS S3 object key restrictions.
58
+ */
59
+ export declare class InvalidPrefixError extends ExtendableError {}
60
+ /**
61
+ * InvalidBucketPolicyError generated when the given bucket policy is invalid.
62
+ */
63
+ export declare class InvalidBucketPolicyError extends ExtendableError {}
64
+ /**
65
+ * IncorrectSizeError generated when total data read mismatches with
66
+ * the input size.
67
+ */
68
+ export declare class IncorrectSizeError extends ExtendableError {}
69
+ /**
70
+ * InvalidXMLError generated when an unknown XML is found.
71
+ */
72
+ export declare class InvalidXMLError extends ExtendableError {}
73
+ /**
74
+ * S3Error is generated for errors returned from S3 server.
75
+ * see getErrorTransformer for details
76
+ */
77
+ export declare class S3Error extends ExtendableError {
78
+ code?: string;
79
+ region?: string;
80
+ }
81
+ export declare class IsValidBucketNameError extends ExtendableError {}
82
+ export {};
@@ -0,0 +1,117 @@
1
+ /*
2
+ * Hanzo S3 Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2015 Hanzo AI, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /// <reference lib="ES2022.Error" />
18
+
19
+ class ExtendableError extends Error {
20
+ constructor(message, opt) {
21
+ // error Option {cause?: unknown} is a 'nice to have',
22
+ // don't use it internally
23
+ super(message, opt);
24
+ // set error name, otherwise it's always 'Error'
25
+ this.name = this.constructor.name;
26
+ }
27
+ }
28
+
29
+ /**
30
+ * AnonymousRequestError is generated for anonymous keys on specific
31
+ * APIs. NOTE: PresignedURL generation always requires access keys.
32
+ */
33
+ export class AnonymousRequestError extends ExtendableError {}
34
+
35
+ /**
36
+ * InvalidArgumentError is generated for all invalid arguments.
37
+ */
38
+ export class InvalidArgumentError extends ExtendableError {}
39
+
40
+ /**
41
+ * InvalidPortError is generated when a non integer value is provided
42
+ * for ports.
43
+ */
44
+ export class InvalidPortError extends ExtendableError {}
45
+
46
+ /**
47
+ * InvalidEndpointError is generated when an invalid end point value is
48
+ * provided which does not follow domain standards.
49
+ */
50
+ export class InvalidEndpointError extends ExtendableError {}
51
+
52
+ /**
53
+ * InvalidBucketNameError is generated when an invalid bucket name is
54
+ * provided which does not follow AWS S3 specifications.
55
+ * http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
56
+ */
57
+ export class InvalidBucketNameError extends ExtendableError {}
58
+
59
+ /**
60
+ * InvalidObjectNameError is generated when an invalid object name is
61
+ * provided which does not follow AWS S3 specifications.
62
+ * http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
63
+ */
64
+ export class InvalidObjectNameError extends ExtendableError {}
65
+
66
+ /**
67
+ * AccessKeyRequiredError generated by signature methods when access
68
+ * key is not found.
69
+ */
70
+ export class AccessKeyRequiredError extends ExtendableError {}
71
+
72
+ /**
73
+ * SecretKeyRequiredError generated by signature methods when secret
74
+ * key is not found.
75
+ */
76
+ export class SecretKeyRequiredError extends ExtendableError {}
77
+
78
+ /**
79
+ * ExpiresParamError generated when expires parameter value is not
80
+ * well within stipulated limits.
81
+ */
82
+ export class ExpiresParamError extends ExtendableError {}
83
+
84
+ /**
85
+ * InvalidDateError generated when invalid date is found.
86
+ */
87
+ export class InvalidDateError extends ExtendableError {}
88
+
89
+ /**
90
+ * InvalidPrefixError generated when object prefix provided is invalid
91
+ * or does not conform to AWS S3 object key restrictions.
92
+ */
93
+ export class InvalidPrefixError extends ExtendableError {}
94
+
95
+ /**
96
+ * InvalidBucketPolicyError generated when the given bucket policy is invalid.
97
+ */
98
+ export class InvalidBucketPolicyError extends ExtendableError {}
99
+
100
+ /**
101
+ * IncorrectSizeError generated when total data read mismatches with
102
+ * the input size.
103
+ */
104
+ export class IncorrectSizeError extends ExtendableError {}
105
+
106
+ /**
107
+ * InvalidXMLError generated when an unknown XML is found.
108
+ */
109
+ export class InvalidXMLError extends ExtendableError {}
110
+
111
+ /**
112
+ * S3Error is generated for errors returned from S3 server.
113
+ * see getErrorTransformer for details
114
+ */
115
+ export class S3Error extends ExtendableError {}
116
+ export class IsValidBucketNameError extends ExtendableError {}
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbmRhYmxlRXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsIm9wdCIsIm5hbWUiLCJBbm9ueW1vdXNSZXF1ZXN0RXJyb3IiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkludmFsaWRQb3J0RXJyb3IiLCJJbnZhbGlkRW5kcG9pbnRFcnJvciIsIkludmFsaWRCdWNrZXROYW1lRXJyb3IiLCJJbnZhbGlkT2JqZWN0TmFtZUVycm9yIiwiQWNjZXNzS2V5UmVxdWlyZWRFcnJvciIsIlNlY3JldEtleVJlcXVpcmVkRXJyb3IiLCJFeHBpcmVzUGFyYW1FcnJvciIsIkludmFsaWREYXRlRXJyb3IiLCJJbnZhbGlkUHJlZml4RXJyb3IiLCJJbnZhbGlkQnVja2V0UG9saWN5RXJyb3IiLCJJbmNvcnJlY3RTaXplRXJyb3IiLCJJbnZhbGlkWE1MRXJyb3IiLCJTM0Vycm9yIiwiSXNWYWxpZEJ1Y2tldE5hbWVFcnJvciJdLCJzb3VyY2VzIjpbImVycm9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogSGFuem8gUzMgSmF2YXNjcmlwdCBMaWJyYXJ5IGZvciBBbWF6b24gUzMgQ29tcGF0aWJsZSBDbG91ZCBTdG9yYWdlLCAoQykgMjAxNSBIYW56byBBSSwgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLy8gPHJlZmVyZW5jZSBsaWI9XCJFUzIwMjIuRXJyb3JcIiAvPlxuXG5jbGFzcyBFeHRlbmRhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcsIG9wdD86IEVycm9yT3B0aW9ucykge1xuICAgIC8vIGVycm9yIE9wdGlvbiB7Y2F1c2U/OiB1bmtub3dufSBpcyBhICduaWNlIHRvIGhhdmUnLFxuICAgIC8vIGRvbid0IHVzZSBpdCBpbnRlcm5hbGx5XG4gICAgc3VwZXIobWVzc2FnZSwgb3B0KVxuICAgIC8vIHNldCBlcnJvciBuYW1lLCBvdGhlcndpc2UgaXQncyBhbHdheXMgJ0Vycm9yJ1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZVxuICB9XG59XG5cbi8qKlxuICogQW5vbnltb3VzUmVxdWVzdEVycm9yIGlzIGdlbmVyYXRlZCBmb3IgYW5vbnltb3VzIGtleXMgb24gc3BlY2lmaWNcbiAqIEFQSXMuIE5PVEU6IFByZXNpZ25lZFVSTCBnZW5lcmF0aW9uIGFsd2F5cyByZXF1aXJlcyBhY2Nlc3Mga2V5cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFub255bW91c1JlcXVlc3RFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGlzIGdlbmVyYXRlZCBmb3IgYWxsIGludmFsaWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkUG9ydEVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uIGludGVnZXIgdmFsdWUgaXMgcHJvdmlkZWRcbiAqIGZvciBwb3J0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRQb3J0RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkRW5kcG9pbnRFcnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBpbnZhbGlkIGVuZCBwb2ludCB2YWx1ZSBpc1xuICogcHJvdmlkZWQgd2hpY2ggZG9lcyBub3QgZm9sbG93IGRvbWFpbiBzdGFuZGFyZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRW5kcG9pbnRFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEludmFsaWRCdWNrZXROYW1lRXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gaW52YWxpZCBidWNrZXQgbmFtZSBpc1xuICogcHJvdmlkZWQgd2hpY2ggZG9lcyBub3QgZm9sbG93IEFXUyBTMyBzcGVjaWZpY2F0aW9ucy5cbiAqIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvQnVja2V0UmVzdHJpY3Rpb25zLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRCdWNrZXROYW1lRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkT2JqZWN0TmFtZUVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGFuIGludmFsaWQgb2JqZWN0IG5hbWUgaXNcbiAqIHByb3ZpZGVkIHdoaWNoIGRvZXMgbm90IGZvbGxvdyBBV1MgUzMgc3BlY2lmaWNhdGlvbnMuXG4gKiBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1VzaW5nTWV0YWRhdGEuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZE9iamVjdE5hbWVFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEFjY2Vzc0tleVJlcXVpcmVkRXJyb3IgZ2VuZXJhdGVkIGJ5IHNpZ25hdHVyZSBtZXRob2RzIHdoZW4gYWNjZXNzXG4gKiBrZXkgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzS2V5UmVxdWlyZWRFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIFNlY3JldEtleVJlcXVpcmVkRXJyb3IgZ2VuZXJhdGVkIGJ5IHNpZ25hdHVyZSBtZXRob2RzIHdoZW4gc2VjcmV0XG4gKiBrZXkgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgU2VjcmV0S2V5UmVxdWlyZWRFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEV4cGlyZXNQYXJhbUVycm9yIGdlbmVyYXRlZCB3aGVuIGV4cGlyZXMgcGFyYW1ldGVyIHZhbHVlIGlzIG5vdFxuICogd2VsbCB3aXRoaW4gc3RpcHVsYXRlZCBsaW1pdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHBpcmVzUGFyYW1FcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEludmFsaWREYXRlRXJyb3IgZ2VuZXJhdGVkIHdoZW4gaW52YWxpZCBkYXRlIGlzIGZvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZERhdGVFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEludmFsaWRQcmVmaXhFcnJvciBnZW5lcmF0ZWQgd2hlbiBvYmplY3QgcHJlZml4IHByb3ZpZGVkIGlzIGludmFsaWRcbiAqIG9yIGRvZXMgbm90IGNvbmZvcm0gdG8gQVdTIFMzIG9iamVjdCBrZXkgcmVzdHJpY3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFByZWZpeEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZEJ1Y2tldFBvbGljeUVycm9yIGdlbmVyYXRlZCB3aGVuIHRoZSBnaXZlbiBidWNrZXQgcG9saWN5IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQnVja2V0UG9saWN5RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbmNvcnJlY3RTaXplRXJyb3IgZ2VuZXJhdGVkIHdoZW4gdG90YWwgZGF0YSByZWFkIG1pc21hdGNoZXMgd2l0aFxuICogdGhlIGlucHV0IHNpemUuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmNvcnJlY3RTaXplRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkWE1MRXJyb3IgZ2VuZXJhdGVkIHdoZW4gYW4gdW5rbm93biBYTUwgaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkWE1MRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBTM0Vycm9yIGlzIGdlbmVyYXRlZCBmb3IgZXJyb3JzIHJldHVybmVkIGZyb20gUzMgc2VydmVyLlxuICogc2VlIGdldEVycm9yVHJhbnNmb3JtZXIgZm9yIGRldGFpbHNcbiAqL1xuZXhwb3J0IGNsYXNzIFMzRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige1xuICBjb2RlPzogc3RyaW5nXG4gIHJlZ2lvbj86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgSXNWYWxpZEJ1Y2tldE5hbWVFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsTUFBTUEsZUFBZSxTQUFTQyxLQUFLLENBQUM7RUFDbENDLFdBQVdBLENBQUNDLE9BQWdCLEVBQUVDLEdBQWtCLEVBQUU7SUFDaEQ7SUFDQTtJQUNBLEtBQUssQ0FBQ0QsT0FBTyxFQUFFQyxHQUFHLENBQUM7SUFDbkI7SUFDQSxJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJLENBQUNILFdBQVcsQ0FBQ0csSUFBSTtFQUNuQztBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNQyxxQkFBcUIsU0FBU04sZUFBZSxDQUFDOztBQUUzRDtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1PLG9CQUFvQixTQUFTUCxlQUFlLENBQUM7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNUSxnQkFBZ0IsU0FBU1IsZUFBZSxDQUFDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTVMsb0JBQW9CLFNBQVNULGVBQWUsQ0FBQzs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTVUsc0JBQXNCLFNBQVNWLGVBQWUsQ0FBQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTVcsc0JBQXNCLFNBQVNYLGVBQWUsQ0FBQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1ZLHNCQUFzQixTQUFTWixlQUFlLENBQUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNYSxzQkFBc0IsU0FBU2IsZUFBZSxDQUFDOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTWMsaUJBQWlCLFNBQVNkLGVBQWUsQ0FBQzs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNZSxnQkFBZ0IsU0FBU2YsZUFBZSxDQUFDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTWdCLGtCQUFrQixTQUFTaEIsZUFBZSxDQUFDOztBQUV4RDtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1pQix3QkFBd0IsU0FBU2pCLGVBQWUsQ0FBQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1rQixrQkFBa0IsU0FBU2xCLGVBQWUsQ0FBQzs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNbUIsZUFBZSxTQUFTbkIsZUFBZSxDQUFDOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTW9CLE9BQU8sU0FBU3BCLGVBQWUsQ0FBQztBQUs3QyxPQUFPLE1BQU1xQixzQkFBc0IsU0FBU3JCLGVBQWUsQ0FBQyJ9
@@ -0,0 +1,156 @@
1
+ import type { Encryption, ObjectMetaData, RequestHeaders } from "./internal/type.mjs";
2
+ import { RETENTION_MODES } from "./internal/type.mjs";
3
+ export { ENCRYPTION_TYPES, LEGAL_HOLD_STATUS, RETENTION_MODES, RETENTION_VALIDITY_UNITS } from "./internal/type.mjs";
4
+ export declare const DEFAULT_REGION = "us-east-1";
5
+ export declare const PRESIGN_EXPIRY_DAYS_MAX: number;
6
+ export interface ICopySourceOptions {
7
+ Bucket: string;
8
+ Object: string;
9
+ /**
10
+ * Valid versionId
11
+ */
12
+ VersionID?: string;
13
+ /**
14
+ * Etag to match
15
+ */
16
+ MatchETag?: string;
17
+ /**
18
+ * Etag to exclude
19
+ */
20
+ NoMatchETag?: string;
21
+ /**
22
+ * Modified Date of the object/part. UTC Date in string format
23
+ */
24
+ MatchModifiedSince?: string | null;
25
+ /**
26
+ * Modified Date of the object/part to exclude UTC Date in string format
27
+ */
28
+ MatchUnmodifiedSince?: string | null;
29
+ /**
30
+ * true or false Object range to match
31
+ */
32
+ MatchRange?: boolean;
33
+ Start?: number;
34
+ End?: number;
35
+ Encryption?: Encryption;
36
+ }
37
+ export declare class CopySourceOptions {
38
+ readonly Bucket: string;
39
+ readonly Object: string;
40
+ readonly VersionID: string;
41
+ MatchETag: string;
42
+ private readonly NoMatchETag;
43
+ private readonly MatchModifiedSince;
44
+ private readonly MatchUnmodifiedSince;
45
+ readonly MatchRange: boolean;
46
+ readonly Start: number;
47
+ readonly End: number;
48
+ private readonly Encryption?;
49
+ constructor({
50
+ Bucket,
51
+ Object,
52
+ VersionID,
53
+ MatchETag,
54
+ NoMatchETag,
55
+ MatchModifiedSince,
56
+ MatchUnmodifiedSince,
57
+ MatchRange,
58
+ Start,
59
+ End,
60
+ Encryption
61
+ }: ICopySourceOptions);
62
+ validate(): boolean;
63
+ getHeaders(): RequestHeaders;
64
+ }
65
+ /**
66
+ * @deprecated use nodejs fs module
67
+ */
68
+ export declare function removeDirAndFiles(dirPath: string, removeSelf?: boolean): void;
69
+ export interface ICopyDestinationOptions {
70
+ /**
71
+ * Bucket name
72
+ */
73
+ Bucket: string;
74
+ /**
75
+ * Object Name for the destination (composed/copied) object defaults
76
+ */
77
+ Object: string;
78
+ /**
79
+ * Encryption configuration defaults to {}
80
+ * @default {}
81
+ */
82
+ Encryption?: Encryption;
83
+ UserMetadata?: ObjectMetaData;
84
+ /**
85
+ * query-string encoded string or Record<string, string> Object
86
+ */
87
+ UserTags?: Record<string, string> | string;
88
+ LegalHold?: 'on' | 'off';
89
+ /**
90
+ * UTC Date String
91
+ */
92
+ RetainUntilDate?: string;
93
+ Mode?: RETENTION_MODES;
94
+ MetadataDirective?: 'COPY' | 'REPLACE';
95
+ /**
96
+ * Extra headers for the target object
97
+ */
98
+ Headers?: Record<string, string>;
99
+ }
100
+ export declare class CopyDestinationOptions {
101
+ readonly Bucket: string;
102
+ readonly Object: string;
103
+ private readonly Encryption?;
104
+ private readonly UserMetadata?;
105
+ private readonly UserTags?;
106
+ private readonly LegalHold?;
107
+ private readonly RetainUntilDate?;
108
+ private readonly Mode?;
109
+ private readonly MetadataDirective?;
110
+ private readonly Headers?;
111
+ constructor({
112
+ Bucket,
113
+ Object,
114
+ Encryption,
115
+ UserMetadata,
116
+ UserTags,
117
+ LegalHold,
118
+ RetainUntilDate,
119
+ Mode,
120
+ MetadataDirective,
121
+ Headers
122
+ }: ICopyDestinationOptions);
123
+ getHeaders(): RequestHeaders;
124
+ validate(): boolean;
125
+ }
126
+ /**
127
+ * maybe this should be a generic type for Records, leave it for later refactor
128
+ */
129
+ export declare class SelectResults {
130
+ private records?;
131
+ private response?;
132
+ private stats?;
133
+ private progress?;
134
+ constructor({
135
+ records,
136
+ // parsed data as stream
137
+ response,
138
+ // original response stream
139
+ stats,
140
+ // stats as xml
141
+ progress
142
+ }: {
143
+ records?: unknown;
144
+ response?: unknown;
145
+ stats?: string;
146
+ progress?: unknown;
147
+ });
148
+ setStats(stats: string): void;
149
+ getStats(): string | undefined;
150
+ setProgress(progress: unknown): void;
151
+ getProgress(): unknown;
152
+ setResponse(response: unknown): void;
153
+ getResponse(): unknown;
154
+ setRecords(records: unknown): void;
155
+ getRecords(): unknown;
156
+ }