@aws-amplify/storage 4.4.3 → 4.4.4-in-app-messaging.35
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.
- package/CHANGELOG.md +28 -352
- package/dist/aws-amplify-storage.js +6523 -5062
- package/dist/aws-amplify-storage.js.map +1 -1
- package/dist/aws-amplify-storage.min.js +5 -5
- package/dist/aws-amplify-storage.min.js.map +1 -1
- package/lib/Storage.d.ts +3 -1
- package/lib/Storage.js +25 -21
- package/lib/Storage.js.map +1 -1
- package/lib/common/S3ClientUtils.d.ts +33 -0
- package/lib/common/S3ClientUtils.js +179 -0
- package/lib/common/S3ClientUtils.js.map +1 -0
- package/lib/common/StorageConstants.d.ts +4 -0
- package/lib/common/StorageConstants.js +10 -0
- package/lib/common/StorageConstants.js.map +1 -0
- package/lib/common/StorageErrorStrings.d.ts +5 -1
- package/lib/common/StorageErrorStrings.js +5 -0
- package/lib/common/StorageErrorStrings.js.map +1 -1
- package/lib/common/StorageUtils.d.ts +4 -0
- package/lib/common/StorageUtils.js +41 -0
- package/lib/common/StorageUtils.js.map +1 -0
- package/lib/providers/AWSS3Provider.d.ts +9 -6
- package/lib/providers/AWSS3Provider.js +197 -149
- package/lib/providers/AWSS3Provider.js.map +1 -1
- package/lib/providers/AWSS3ProviderManagedUpload.d.ts +3 -10
- package/lib/providers/AWSS3ProviderManagedUpload.js +41 -109
- package/lib/providers/AWSS3ProviderManagedUpload.js.map +1 -1
- package/lib/providers/AWSS3UploadTask.d.ts +107 -0
- package/lib/providers/AWSS3UploadTask.js +610 -0
- package/lib/providers/AWSS3UploadTask.js.map +1 -0
- package/lib/providers/axios-http-handler.d.ts +5 -1
- package/lib/providers/axios-http-handler.js +28 -5
- package/lib/providers/axios-http-handler.js.map +1 -1
- package/lib/types/AWSS3Provider.d.ts +24 -4
- package/lib/types/Provider.d.ts +7 -1
- package/lib/types/Storage.d.ts +8 -8
- package/lib-esm/Storage.d.ts +3 -1
- package/lib-esm/Storage.js +25 -21
- package/lib-esm/Storage.js.map +1 -1
- package/lib-esm/common/S3ClientUtils.d.ts +33 -0
- package/lib-esm/common/S3ClientUtils.js +177 -0
- package/lib-esm/common/S3ClientUtils.js.map +1 -0
- package/lib-esm/common/StorageConstants.d.ts +4 -0
- package/lib-esm/common/StorageConstants.js +8 -0
- package/lib-esm/common/StorageConstants.js.map +1 -0
- package/lib-esm/common/StorageErrorStrings.d.ts +5 -1
- package/lib-esm/common/StorageErrorStrings.js +5 -0
- package/lib-esm/common/StorageErrorStrings.js.map +1 -1
- package/lib-esm/common/StorageUtils.d.ts +4 -0
- package/lib-esm/common/StorageUtils.js +39 -0
- package/lib-esm/common/StorageUtils.js.map +1 -0
- package/lib-esm/providers/AWSS3Provider.d.ts +9 -6
- package/lib-esm/providers/AWSS3Provider.js +192 -144
- package/lib-esm/providers/AWSS3Provider.js.map +1 -1
- package/lib-esm/providers/AWSS3ProviderManagedUpload.d.ts +3 -10
- package/lib-esm/providers/AWSS3ProviderManagedUpload.js +44 -112
- package/lib-esm/providers/AWSS3ProviderManagedUpload.js.map +1 -1
- package/lib-esm/providers/AWSS3UploadTask.d.ts +107 -0
- package/lib-esm/providers/AWSS3UploadTask.js +605 -0
- package/lib-esm/providers/AWSS3UploadTask.js.map +1 -0
- package/lib-esm/providers/axios-http-handler.d.ts +5 -1
- package/lib-esm/providers/axios-http-handler.js +28 -5
- package/lib-esm/providers/axios-http-handler.js.map +1 -1
- package/lib-esm/types/AWSS3Provider.d.ts +24 -4
- package/lib-esm/types/Provider.d.ts +7 -1
- package/lib-esm/types/Storage.d.ts +8 -8
- package/package.json +3 -3
- package/src/Storage.ts +85 -27
- package/src/common/S3ClientUtils.ts +168 -0
- package/src/common/StorageConstants.ts +10 -0
- package/src/common/StorageErrorStrings.ts +5 -0
- package/src/common/StorageUtils.ts +51 -0
- package/src/providers/AWSS3Provider.ts +251 -88
- package/src/providers/AWSS3ProviderManagedUpload.ts +346 -397
- package/src/providers/AWSS3UploadTask.ts +543 -0
- package/src/providers/axios-http-handler.ts +221 -186
- package/src/types/AWSS3Provider.ts +48 -7
- package/src/types/Provider.ts +18 -3
- package/src/types/Storage.ts +9 -9
|
@@ -3,6 +3,7 @@ export var StorageErrorStrings;
|
|
|
3
3
|
StorageErrorStrings["NO_CREDENTIALS"] = "No credentials";
|
|
4
4
|
StorageErrorStrings["NO_SRC_KEY"] = "source param should be an object with the property \"key\" with value of type string";
|
|
5
5
|
StorageErrorStrings["NO_DEST_KEY"] = "destination param should be an object with the property \"key\" with value of type string";
|
|
6
|
+
StorageErrorStrings["INVALID_BLOB"] = "Object must be an instance of Blob";
|
|
6
7
|
})(StorageErrorStrings || (StorageErrorStrings = {}));
|
|
7
8
|
export var AWSS3ProviderMultipartCopierErrors;
|
|
8
9
|
(function (AWSS3ProviderMultipartCopierErrors) {
|
|
@@ -12,4 +13,8 @@ export var AWSS3ProviderMultipartCopierErrors;
|
|
|
12
13
|
AWSS3ProviderMultipartCopierErrors["NO_COPYSOURCE"] = "You must specify a copy source";
|
|
13
14
|
AWSS3ProviderMultipartCopierErrors["MAX_NUM_PARTS_EXCEEDED"] = "Only a maximum of 10000 parts are allowed";
|
|
14
15
|
})(AWSS3ProviderMultipartCopierErrors || (AWSS3ProviderMultipartCopierErrors = {}));
|
|
16
|
+
export var AWSS3ProviderUploadErrorStrings;
|
|
17
|
+
(function (AWSS3ProviderUploadErrorStrings) {
|
|
18
|
+
AWSS3ProviderUploadErrorStrings["UPLOAD_PAUSED_MESSAGE"] = "paused";
|
|
19
|
+
})(AWSS3ProviderUploadErrorStrings || (AWSS3ProviderUploadErrorStrings = {}));
|
|
15
20
|
//# sourceMappingURL=StorageErrorStrings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageErrorStrings.js","sourceRoot":"","sources":["../../src/common/StorageErrorStrings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"StorageErrorStrings.js","sourceRoot":"","sources":["../../src/common/StorageErrorStrings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC9B,wDAAiC,CAAA;IACjC,0HAAiG,CAAA;IACjG,gIAAuG,CAAA;IACvG,0EAAmD,CAAA;AACpD,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;AAED,MAAM,CAAN,IAAY,kCAMX;AAND,WAAY,kCAAkC;IAC7C,uFAAiD,CAAA;IACjD,+EAAyC,CAAA;IACzC,gGAA0D,CAAA;IAC1D,sFAAgD,CAAA;IAChD,0GAAoE,CAAA;AACrE,CAAC,EANW,kCAAkC,KAAlC,kCAAkC,QAM7C;AAED,MAAM,CAAN,IAAY,+BAEX;AAFD,WAAY,+BAA+B;IAC1C,mEAAgC,CAAA;AACjC,CAAC,EAFW,+BAA+B,KAA/B,+BAA+B,QAE1C"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const byteLength: (x: unknown) => number;
|
|
2
|
+
export declare const dispatchStorageEvent: (track: boolean, event: string, attrs: any, metrics: any, message: string) => void;
|
|
3
|
+
export declare const isFile: (x: unknown) => x is File;
|
|
4
|
+
export declare const isBlob: (x: unknown) => x is Blob;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Hub } from '@aws-amplify/core';
|
|
2
|
+
import { AMPLIFY_SYMBOL } from './StorageConstants';
|
|
3
|
+
export var byteLength = function (x) {
|
|
4
|
+
if (typeof x === 'string') {
|
|
5
|
+
return x.length;
|
|
6
|
+
}
|
|
7
|
+
else if (isArrayBuffer(x)) {
|
|
8
|
+
return x.byteLength;
|
|
9
|
+
}
|
|
10
|
+
else if (isBlob(x)) {
|
|
11
|
+
return x.size;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new Error('Cannot determine byte length of ' + x);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export var dispatchStorageEvent = function (track, event, attrs, metrics, message) {
|
|
18
|
+
if (track) {
|
|
19
|
+
var data = { attrs: attrs };
|
|
20
|
+
if (metrics) {
|
|
21
|
+
data['metrics'] = metrics;
|
|
22
|
+
}
|
|
23
|
+
Hub.dispatch('storage', {
|
|
24
|
+
event: event,
|
|
25
|
+
data: data,
|
|
26
|
+
message: message,
|
|
27
|
+
}, 'Storage', AMPLIFY_SYMBOL);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export var isFile = function (x) {
|
|
31
|
+
return typeof x !== 'undefined' && x instanceof File;
|
|
32
|
+
};
|
|
33
|
+
export var isBlob = function (x) {
|
|
34
|
+
return typeof x !== 'undefined' && x instanceof Blob;
|
|
35
|
+
};
|
|
36
|
+
var isArrayBuffer = function (x) {
|
|
37
|
+
return typeof x !== 'undefined' && x instanceof ArrayBuffer;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=StorageUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageUtils.js","sourceRoot":"","sources":["../../src/common/StorageUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,IAAM,UAAU,GAAG,UAAC,CAAU;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAC1B,OAAO,CAAC,CAAC,MAAM,CAAC;KAChB;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;QAC5B,OAAO,CAAC,CAAC,UAAU,CAAC;KACpB;SAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC;KACd;SAAM;QACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,CAAC,CAAC;KACxD;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,oBAAoB,GAAG,UACnC,KAAc,EACd,KAAa,EACb,KAAU,EACV,OAAY,EACZ,OAAe;IAEf,IAAI,KAAK,EAAE;QACV,IAAM,IAAI,GAAG,EAAE,KAAK,OAAA,EAAE,CAAC;QACvB,IAAI,OAAO,EAAE;YACZ,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;SAC1B;QACD,GAAG,CAAC,QAAQ,CACX,SAAS,EACT;YACC,KAAK,OAAA;YACL,IAAI,MAAA;YACJ,OAAO,SAAA;SACP,EACD,SAAS,EACT,cAAc,CACd,CAAC;KACF;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,MAAM,GAAG,UAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,MAAM,GAAG,UAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC;AACtD,CAAC,CAAC;AAEF,IAAM,aAAa,GAAG,UAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,YAAY,WAAW,CAAC;AAC7D,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PutObjectCommandInput } from '@aws-sdk/client-s3';
|
|
2
|
-
import { StorageOptions, StorageProvider, S3ProviderGetConfig, S3ProviderGetOuput, S3ProviderPutConfig, S3ProviderRemoveConfig, S3ProviderListOutput, S3ProviderListConfig,
|
|
2
|
+
import { StorageOptions, StorageProvider, S3ProviderGetConfig, S3ProviderGetOuput, S3ProviderPutConfig, S3ProviderRemoveConfig, S3ProviderListOutput, S3ProviderListConfig, S3ProviderCopyConfig, S3ProviderCopyOutput, S3CopySource, S3CopyDestination, S3ProviderRemoveOutput, S3ProviderPutOutput } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Provide storage methods to use AWS S3
|
|
5
5
|
*/
|
|
@@ -7,6 +7,7 @@ export declare class AWSS3Provider implements StorageProvider {
|
|
|
7
7
|
static readonly CATEGORY = "Storage";
|
|
8
8
|
static readonly PROVIDER_NAME = "AWSS3";
|
|
9
9
|
private _config;
|
|
10
|
+
private _storage;
|
|
10
11
|
/**
|
|
11
12
|
* Initialize Storage with AWS configurations
|
|
12
13
|
* @param {Object} config - Configuration object for storage
|
|
@@ -26,6 +27,7 @@ export declare class AWSS3Provider implements StorageProvider {
|
|
|
26
27
|
* @return {Object} - Current configuration
|
|
27
28
|
*/
|
|
28
29
|
configure(config?: any): object;
|
|
30
|
+
private startResumableUpload;
|
|
29
31
|
/**
|
|
30
32
|
* Copy an object from a source object to a new object within the same bucket. Can optionally copy files across
|
|
31
33
|
* different level or identityId (if source object's level is 'protected').
|
|
@@ -48,12 +50,13 @@ export declare class AWSS3Provider implements StorageProvider {
|
|
|
48
50
|
get<T extends S3ProviderGetConfig & StorageOptions>(key: string, config?: T): Promise<S3ProviderGetOuput<T>>;
|
|
49
51
|
/**
|
|
50
52
|
* Put a file in S3 bucket specified to configure method
|
|
51
|
-
* @param
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
54
|
-
* @return
|
|
53
|
+
* @param key - key of the object
|
|
54
|
+
* @param object - File to be put in Amazon S3 bucket
|
|
55
|
+
* @param [config] - Optional configuration for the underlying S3 command
|
|
56
|
+
* @return an instance of AWSS3UploadTask or a promise that resolves to an object with the new object's key on
|
|
57
|
+
* success.
|
|
55
58
|
*/
|
|
56
|
-
put(key: string, object: PutObjectCommandInput['Body'], config?:
|
|
59
|
+
put<T extends S3ProviderPutConfig>(key: string, object: PutObjectCommandInput['Body'], config?: T): S3ProviderPutOutput<T>;
|
|
57
60
|
/**
|
|
58
61
|
* Remove the object for specified key
|
|
59
62
|
* @param {string} key - key of the object
|
|
@@ -57,36 +57,22 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
57
57
|
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
|
|
58
58
|
* and limitations under the License.
|
|
59
59
|
*/
|
|
60
|
-
import { ConsoleLogger as Logger,
|
|
61
|
-
import {
|
|
60
|
+
import { ConsoleLogger as Logger, Credentials, Parser, StorageHelper, Hub, } from '@aws-amplify/core';
|
|
61
|
+
import { GetObjectCommand, DeleteObjectCommand, ListObjectsCommand, CopyObjectCommand, } from '@aws-sdk/client-s3';
|
|
62
62
|
import { formatUrl } from '@aws-sdk/util-format-url';
|
|
63
63
|
import { createRequest } from '@aws-sdk/util-create-request';
|
|
64
64
|
import { S3RequestPresigner } from '@aws-sdk/s3-request-presigner';
|
|
65
|
-
import {
|
|
65
|
+
import { SEND_DOWNLOAD_PROGRESS_EVENT, SEND_UPLOAD_PROGRESS_EVENT, } from './axios-http-handler';
|
|
66
66
|
import { StorageErrorStrings } from '../common/StorageErrorStrings';
|
|
67
|
+
import { dispatchStorageEvent } from '../common/StorageUtils';
|
|
68
|
+
import { createPrefixMiddleware, prefixMiddlewareOptions, getPrefix, autoAdjustClockskewMiddleware, autoAdjustClockskewMiddlewareOptions, createS3Client, } from '../common/S3ClientUtils';
|
|
67
69
|
import { AWSS3ProviderManagedUpload } from './AWSS3ProviderManagedUpload';
|
|
70
|
+
import { AWSS3UploadTask, TaskEvents } from './AWSS3UploadTask';
|
|
71
|
+
import { UPLOADS_STORAGE_KEY } from '../common/StorageConstants';
|
|
68
72
|
import * as events from 'events';
|
|
69
73
|
var logger = new Logger('AWSS3Provider');
|
|
70
|
-
var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function'
|
|
71
|
-
? Symbol.for('amplify_default')
|
|
72
|
-
: '@@amplify_default');
|
|
73
|
-
var SET_CONTENT_LENGTH_HEADER = 'contentLengthMiddleware';
|
|
74
74
|
var DEFAULT_STORAGE_LEVEL = 'public';
|
|
75
75
|
var DEFAULT_PRESIGN_EXPIRATION = 900;
|
|
76
|
-
var dispatchStorageEvent = function (track, event, attrs, metrics, message) {
|
|
77
|
-
if (track) {
|
|
78
|
-
var data = { attrs: attrs };
|
|
79
|
-
if (metrics) {
|
|
80
|
-
data['metrics'] = metrics;
|
|
81
|
-
}
|
|
82
|
-
Hub.dispatch('storage', {
|
|
83
|
-
event: event,
|
|
84
|
-
data: data,
|
|
85
|
-
message: message,
|
|
86
|
-
}, 'Storage', AMPLIFY_SYMBOL);
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
var localTestingStorageEndpoint = 'http://localhost:20005';
|
|
90
76
|
/**
|
|
91
77
|
* Provide storage methods to use AWS S3
|
|
92
78
|
*/
|
|
@@ -96,7 +82,15 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
96
82
|
* @param {Object} config - Configuration object for storage
|
|
97
83
|
*/
|
|
98
84
|
function AWSS3Provider(config) {
|
|
85
|
+
var _this = this;
|
|
99
86
|
this._config = config ? config : {};
|
|
87
|
+
this._storage = new StorageHelper().getStorage();
|
|
88
|
+
Hub.listen('auth', function (data) {
|
|
89
|
+
var payload = data.payload;
|
|
90
|
+
if (payload.event === 'signOut' || payload.event === 'signIn') {
|
|
91
|
+
_this._storage.removeItem(UPLOADS_STORAGE_KEY);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
100
94
|
logger.debug('Storage Options', this._config);
|
|
101
95
|
}
|
|
102
96
|
/**
|
|
@@ -127,6 +121,64 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
127
121
|
}
|
|
128
122
|
return this._config;
|
|
129
123
|
};
|
|
124
|
+
AWSS3Provider.prototype.startResumableUpload = function (addTaskInput, config) {
|
|
125
|
+
var s3Client = addTaskInput.s3Client, emitter = addTaskInput.emitter, key = addTaskInput.key, file = addTaskInput.file, params = addTaskInput.params;
|
|
126
|
+
var progressCallback = config.progressCallback, completeCallback = config.completeCallback, errorCallback = config.errorCallback, _a = config.track, track = _a === void 0 ? false : _a;
|
|
127
|
+
if (!(file instanceof Blob)) {
|
|
128
|
+
throw new Error(StorageErrorStrings.INVALID_BLOB);
|
|
129
|
+
}
|
|
130
|
+
emitter.on(TaskEvents.UPLOAD_PROGRESS, function (event) {
|
|
131
|
+
if (progressCallback) {
|
|
132
|
+
if (typeof progressCallback === 'function') {
|
|
133
|
+
progressCallback(event);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
logger.warn('progressCallback should be a function, not a ' +
|
|
137
|
+
typeof progressCallback);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
emitter.on(TaskEvents.UPLOAD_COMPLETE, function (event) {
|
|
142
|
+
if (completeCallback) {
|
|
143
|
+
if (typeof completeCallback === 'function') {
|
|
144
|
+
completeCallback(event);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
logger.warn('completeCallback should be a function, not a ' +
|
|
148
|
+
typeof completeCallback);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
emitter.on(TaskEvents.ERROR, function (err) {
|
|
153
|
+
if (errorCallback) {
|
|
154
|
+
if (typeof errorCallback === 'function') {
|
|
155
|
+
errorCallback(err);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
logger.warn('errorCallback should be a function, not a ' + typeof errorCallback);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// we want to keep this function sync so we defer this promise to AWSS3UploadTask to resolve when it's needed
|
|
163
|
+
// when its doing a final check with _listSingleFile function
|
|
164
|
+
var prefixPromise = Credentials.get().then(function (credentials) {
|
|
165
|
+
var cred = Credentials.shear(credentials);
|
|
166
|
+
return getPrefix(__assign(__assign({}, config), { credentials: cred }));
|
|
167
|
+
});
|
|
168
|
+
var task = new AWSS3UploadTask({
|
|
169
|
+
s3Client: s3Client,
|
|
170
|
+
file: file,
|
|
171
|
+
emitter: emitter,
|
|
172
|
+
level: config.level,
|
|
173
|
+
storage: this._storage,
|
|
174
|
+
params: params,
|
|
175
|
+
prefixPromise: prefixPromise,
|
|
176
|
+
});
|
|
177
|
+
dispatchStorageEvent(track, 'upload', { method: 'put', result: 'success' }, null, "Upload Task created successfully for " + key);
|
|
178
|
+
// automatically start the upload task
|
|
179
|
+
task.resume();
|
|
180
|
+
return task;
|
|
181
|
+
};
|
|
130
182
|
/**
|
|
131
183
|
* Copy an object from a source object to a new object within the same bucket. Can optionally copy files across
|
|
132
184
|
* different level or identityId (if source object's level is 'protected').
|
|
@@ -195,7 +247,6 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
195
247
|
if (acl)
|
|
196
248
|
params.ACL = acl;
|
|
197
249
|
s3 = this._createNewS3Client(opt);
|
|
198
|
-
s3.middlewareStack.remove(SET_CONTENT_LENGTH_HEADER);
|
|
199
250
|
_c.label = 2;
|
|
200
251
|
case 2:
|
|
201
252
|
_c.trys.push([2, 4, , 5]);
|
|
@@ -275,7 +326,8 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
275
326
|
});
|
|
276
327
|
}
|
|
277
328
|
else {
|
|
278
|
-
logger.warn('progressCallback should be a function, not a ' +
|
|
329
|
+
logger.warn('progressCallback should be a function, not a ' +
|
|
330
|
+
typeof progressCallback);
|
|
279
331
|
}
|
|
280
332
|
}
|
|
281
333
|
return [4 /*yield*/, s3.send(getObjectCommand)];
|
|
@@ -300,7 +352,9 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
300
352
|
case 6:
|
|
301
353
|
request = _b.sent();
|
|
302
354
|
_a = formatUrl;
|
|
303
|
-
return [4 /*yield*/, signer.presign(request, {
|
|
355
|
+
return [4 /*yield*/, signer.presign(request, {
|
|
356
|
+
expiresIn: expires || DEFAULT_PRESIGN_EXPIRATION,
|
|
357
|
+
})];
|
|
304
358
|
case 7:
|
|
305
359
|
url = _a.apply(void 0, [_b.sent()]);
|
|
306
360
|
dispatchStorageEvent(track, 'getSignedUrl', { method: 'get', result: 'success' }, null, "Signed URL: " + url);
|
|
@@ -317,104 +371,102 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
317
371
|
};
|
|
318
372
|
/**
|
|
319
373
|
* Put a file in S3 bucket specified to configure method
|
|
320
|
-
* @param
|
|
321
|
-
* @param
|
|
322
|
-
* @param
|
|
323
|
-
* @return
|
|
374
|
+
* @param key - key of the object
|
|
375
|
+
* @param object - File to be put in Amazon S3 bucket
|
|
376
|
+
* @param [config] - Optional configuration for the underlying S3 command
|
|
377
|
+
* @return an instance of AWSS3UploadTask or a promise that resolves to an object with the new object's key on
|
|
378
|
+
* success.
|
|
324
379
|
*/
|
|
325
380
|
AWSS3Provider.prototype.put = function (key, object, config) {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
case 3:
|
|
403
|
-
response = _a.sent();
|
|
404
|
-
logger.debug('upload result', response);
|
|
405
|
-
dispatchStorageEvent(track, 'upload', { method: 'put', result: 'success' }, null, "Upload success for " + key);
|
|
406
|
-
return [2 /*return*/, {
|
|
407
|
-
key: key,
|
|
408
|
-
}];
|
|
409
|
-
case 4:
|
|
410
|
-
error_4 = _a.sent();
|
|
411
|
-
logger.warn('error uploading', error_4);
|
|
412
|
-
dispatchStorageEvent(track, 'upload', { method: 'put', result: 'failed' }, null, "Error uploading " + key);
|
|
413
|
-
throw error_4;
|
|
414
|
-
case 5: return [2 /*return*/];
|
|
381
|
+
var opt = Object.assign({}, this._config, config);
|
|
382
|
+
var bucket = opt.bucket, track = opt.track, progressCallback = opt.progressCallback, level = opt.level, resumable = opt.resumable;
|
|
383
|
+
var contentType = opt.contentType, contentDisposition = opt.contentDisposition, contentEncoding = opt.contentEncoding, cacheControl = opt.cacheControl, expires = opt.expires, metadata = opt.metadata, tagging = opt.tagging, acl = opt.acl;
|
|
384
|
+
var serverSideEncryption = opt.serverSideEncryption, SSECustomerAlgorithm = opt.SSECustomerAlgorithm, SSECustomerKey = opt.SSECustomerKey, SSECustomerKeyMD5 = opt.SSECustomerKeyMD5, SSEKMSKeyId = opt.SSEKMSKeyId;
|
|
385
|
+
var type = contentType ? contentType : 'binary/octet-stream';
|
|
386
|
+
var params = {
|
|
387
|
+
Bucket: bucket,
|
|
388
|
+
Key: key,
|
|
389
|
+
Body: object,
|
|
390
|
+
ContentType: type,
|
|
391
|
+
};
|
|
392
|
+
if (cacheControl) {
|
|
393
|
+
params.CacheControl = cacheControl;
|
|
394
|
+
}
|
|
395
|
+
if (contentDisposition) {
|
|
396
|
+
params.ContentDisposition = contentDisposition;
|
|
397
|
+
}
|
|
398
|
+
if (contentEncoding) {
|
|
399
|
+
params.ContentEncoding = contentEncoding;
|
|
400
|
+
}
|
|
401
|
+
if (expires) {
|
|
402
|
+
params.Expires = expires;
|
|
403
|
+
}
|
|
404
|
+
if (metadata) {
|
|
405
|
+
params.Metadata = metadata;
|
|
406
|
+
}
|
|
407
|
+
if (tagging) {
|
|
408
|
+
params.Tagging = tagging;
|
|
409
|
+
}
|
|
410
|
+
if (serverSideEncryption) {
|
|
411
|
+
params.ServerSideEncryption = serverSideEncryption;
|
|
412
|
+
}
|
|
413
|
+
if (SSECustomerAlgorithm) {
|
|
414
|
+
params.SSECustomerAlgorithm = SSECustomerAlgorithm;
|
|
415
|
+
}
|
|
416
|
+
if (SSECustomerKey) {
|
|
417
|
+
params.SSECustomerKey = SSECustomerKey;
|
|
418
|
+
}
|
|
419
|
+
if (SSECustomerKeyMD5) {
|
|
420
|
+
params.SSECustomerKeyMD5 = SSECustomerKeyMD5;
|
|
421
|
+
}
|
|
422
|
+
if (SSEKMSKeyId) {
|
|
423
|
+
params.SSEKMSKeyId = SSEKMSKeyId;
|
|
424
|
+
}
|
|
425
|
+
var emitter = new events.EventEmitter();
|
|
426
|
+
var uploader = new AWSS3ProviderManagedUpload(params, opt, emitter);
|
|
427
|
+
if (acl) {
|
|
428
|
+
params.ACL = acl;
|
|
429
|
+
}
|
|
430
|
+
if (resumable === true) {
|
|
431
|
+
var s3Client = this._createNewS3Client(opt);
|
|
432
|
+
// we are using aws sdk middleware to inject the prefix to key, this way we don't have to call
|
|
433
|
+
// this._ensureCredentials() which allows us to make this function sync so we can return non-Promise like UploadTask
|
|
434
|
+
s3Client.middlewareStack.add(createPrefixMiddleware(opt, key), prefixMiddlewareOptions);
|
|
435
|
+
var addTaskInput = {
|
|
436
|
+
bucket: bucket,
|
|
437
|
+
key: key,
|
|
438
|
+
s3Client: s3Client,
|
|
439
|
+
file: object,
|
|
440
|
+
emitter: emitter,
|
|
441
|
+
accessLevel: level,
|
|
442
|
+
params: params,
|
|
443
|
+
};
|
|
444
|
+
// explicitly asserting the type here as Typescript could not infer that resumable is of type true
|
|
445
|
+
return this.startResumableUpload(addTaskInput, config);
|
|
446
|
+
}
|
|
447
|
+
try {
|
|
448
|
+
if (progressCallback) {
|
|
449
|
+
if (typeof progressCallback === 'function') {
|
|
450
|
+
emitter.on(SEND_UPLOAD_PROGRESS_EVENT, function (progress) {
|
|
451
|
+
progressCallback(progress);
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
logger.warn('progressCallback should be a function, not a ' +
|
|
456
|
+
typeof progressCallback);
|
|
415
457
|
}
|
|
458
|
+
}
|
|
459
|
+
return uploader.upload().then(function (response) {
|
|
460
|
+
logger.debug('upload result', response);
|
|
461
|
+
dispatchStorageEvent(track, 'upload', { method: 'put', result: 'success' }, null, "Upload success for " + key);
|
|
462
|
+
return { key: key };
|
|
416
463
|
});
|
|
417
|
-
}
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
logger.warn('error uploading', error);
|
|
467
|
+
dispatchStorageEvent(track, 'upload', { method: 'put', result: 'failed' }, null, "Error uploading " + key);
|
|
468
|
+
throw error;
|
|
469
|
+
}
|
|
418
470
|
};
|
|
419
471
|
/**
|
|
420
472
|
* Remove the object for specified key
|
|
@@ -424,7 +476,7 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
424
476
|
*/
|
|
425
477
|
AWSS3Provider.prototype.remove = function (key, config) {
|
|
426
478
|
return __awaiter(this, void 0, void 0, function () {
|
|
427
|
-
var credentialsOK, opt, bucket, track, prefix, final_key, s3, params, deleteObjectCommand, response,
|
|
479
|
+
var credentialsOK, opt, bucket, track, prefix, final_key, s3, params, deleteObjectCommand, response, error_4;
|
|
428
480
|
return __generator(this, function (_a) {
|
|
429
481
|
switch (_a.label) {
|
|
430
482
|
case 0: return [4 /*yield*/, this._ensureCredentials()];
|
|
@@ -453,9 +505,9 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
453
505
|
dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'success' }, null, "Deleted " + key + " successfully");
|
|
454
506
|
return [2 /*return*/, response];
|
|
455
507
|
case 4:
|
|
456
|
-
|
|
457
|
-
dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'failed' }, null, "Deletion of " + key + " failed with " +
|
|
458
|
-
throw
|
|
508
|
+
error_4 = _a.sent();
|
|
509
|
+
dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'failed' }, null, "Deletion of " + key + " failed with " + error_4);
|
|
510
|
+
throw error_4;
|
|
459
511
|
case 5: return [2 /*return*/];
|
|
460
512
|
}
|
|
461
513
|
});
|
|
@@ -470,7 +522,7 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
470
522
|
*/
|
|
471
523
|
AWSS3Provider.prototype.list = function (path, config) {
|
|
472
524
|
return __awaiter(this, void 0, void 0, function () {
|
|
473
|
-
var credentialsOK, opt, bucket, track, maxKeys, prefix, final_path, s3, params, listObjectsCommand, response, list,
|
|
525
|
+
var credentialsOK, opt, bucket, track, maxKeys, prefix, final_path, s3, params, listObjectsCommand, response, list, error_5;
|
|
474
526
|
return __generator(this, function (_a) {
|
|
475
527
|
switch (_a.label) {
|
|
476
528
|
case 0: return [4 /*yield*/, this._ensureCredentials()];
|
|
@@ -512,10 +564,10 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
512
564
|
logger.debug('list', list);
|
|
513
565
|
return [2 /*return*/, list];
|
|
514
566
|
case 4:
|
|
515
|
-
|
|
516
|
-
logger.warn('list error',
|
|
517
|
-
dispatchStorageEvent(track, 'list', { method: 'list', result: 'failed' }, null, "Listing items failed: " +
|
|
518
|
-
throw
|
|
567
|
+
error_5 = _a.sent();
|
|
568
|
+
logger.warn('list error', error_5);
|
|
569
|
+
dispatchStorageEvent(track, 'list', { method: 'list', result: 'failed' }, null, "Listing items failed: " + error_5.message);
|
|
570
|
+
throw error_5;
|
|
519
571
|
case 5: return [2 /*return*/];
|
|
520
572
|
}
|
|
521
573
|
});
|
|
@@ -523,7 +575,7 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
523
575
|
};
|
|
524
576
|
AWSS3Provider.prototype._ensureCredentials = function () {
|
|
525
577
|
return __awaiter(this, void 0, void 0, function () {
|
|
526
|
-
var credentials, cred,
|
|
578
|
+
var credentials, cred, error_6;
|
|
527
579
|
return __generator(this, function (_a) {
|
|
528
580
|
switch (_a.label) {
|
|
529
581
|
case 0:
|
|
@@ -538,8 +590,8 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
538
590
|
this._config.credentials = cred;
|
|
539
591
|
return [2 /*return*/, true];
|
|
540
592
|
case 2:
|
|
541
|
-
|
|
542
|
-
logger.warn('ensure credentials error',
|
|
593
|
+
error_6 = _a.sent();
|
|
594
|
+
logger.warn('ensure credentials error', error_6);
|
|
543
595
|
return [2 /*return*/, false];
|
|
544
596
|
case 3: return [2 /*return*/];
|
|
545
597
|
}
|
|
@@ -553,8 +605,14 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
553
605
|
var credentials = config.credentials, level = config.level;
|
|
554
606
|
var customPrefix = config.customPrefix || {};
|
|
555
607
|
var identityId = config.identityId || credentials.identityId;
|
|
556
|
-
var privatePath = (customPrefix.private !== undefined ? customPrefix.private : 'private/') +
|
|
557
|
-
|
|
608
|
+
var privatePath = (customPrefix.private !== undefined ? customPrefix.private : 'private/') +
|
|
609
|
+
identityId +
|
|
610
|
+
'/';
|
|
611
|
+
var protectedPath = (customPrefix.protected !== undefined
|
|
612
|
+
? customPrefix.protected
|
|
613
|
+
: 'protected/') +
|
|
614
|
+
identityId +
|
|
615
|
+
'/';
|
|
558
616
|
var publicPath = customPrefix.public !== undefined ? customPrefix.public : 'public/';
|
|
559
617
|
switch (level) {
|
|
560
618
|
case 'private':
|
|
@@ -569,18 +627,8 @@ var AWSS3Provider = /** @class */ (function () {
|
|
|
569
627
|
* Creates an S3 client with new V3 aws sdk
|
|
570
628
|
*/
|
|
571
629
|
AWSS3Provider.prototype._createNewS3Client = function (config, emitter) {
|
|
572
|
-
var
|
|
573
|
-
|
|
574
|
-
if (dangerouslyConnectToHttpEndpointForTesting) {
|
|
575
|
-
localTestingConfig = {
|
|
576
|
-
endpoint: localTestingStorageEndpoint,
|
|
577
|
-
tls: false,
|
|
578
|
-
bucketEndpoint: false,
|
|
579
|
-
forcePathStyle: true,
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
var s3client = new S3Client(__assign(__assign({ region: region,
|
|
583
|
-
credentials: credentials, customUserAgent: getAmplifyUserAgent() }, localTestingConfig), { requestHandler: new AxiosHttpHandler({}, emitter, cancelTokenSource) }));
|
|
630
|
+
var s3client = createS3Client(config, emitter);
|
|
631
|
+
s3client.middlewareStack.add(autoAdjustClockskewMiddleware(s3client.config), autoAdjustClockskewMiddlewareOptions);
|
|
584
632
|
return s3client;
|
|
585
633
|
};
|
|
586
634
|
AWSS3Provider.CATEGORY = 'Storage';
|