serverless-simple-middleware 0.0.60 → 0.0.61

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 (44) hide show
  1. package/.nvmrc +1 -0
  2. package/README.md +0 -1
  3. package/dist/aws/config.d.ts +2 -2
  4. package/dist/aws/config.js +6 -4
  5. package/dist/aws/define.d.ts +0 -12
  6. package/dist/aws/define.js +2 -1
  7. package/dist/aws/index.js +17 -6
  8. package/dist/aws/simple.d.ts +18 -15
  9. package/dist/aws/simple.js +317 -225
  10. package/dist/index.js +17 -6
  11. package/dist/internal/AwsError.d.ts +5 -0
  12. package/dist/internal/AwsError.js +33 -0
  13. package/dist/internal/s3.d.ts +38 -0
  14. package/dist/internal/s3.js +2 -0
  15. package/dist/middleware/aws.d.ts +2 -2
  16. package/dist/middleware/aws.js +12 -9
  17. package/dist/middleware/base.d.ts +8 -8
  18. package/dist/middleware/base.js +9 -8
  19. package/dist/middleware/build.d.ts +1 -1
  20. package/dist/middleware/build.js +68 -45
  21. package/dist/middleware/index.d.ts +2 -2
  22. package/dist/middleware/index.js +20 -8
  23. package/dist/middleware/logger.js +8 -4
  24. package/dist/middleware/mysql.d.ts +3 -3
  25. package/dist/middleware/mysql.js +17 -13
  26. package/dist/middleware/trace.d.ts +2 -2
  27. package/dist/middleware/trace.js +21 -21
  28. package/dist/utils/index.js +16 -5
  29. package/dist/utils/logger.d.ts +3 -3
  30. package/dist/utils/logger.js +9 -7
  31. package/dist/utils/misc.d.ts +1 -1
  32. package/dist/utils/misc.js +10 -3
  33. package/package.json +18 -10
  34. package/src/aws/config.ts +1 -1
  35. package/src/aws/define.ts +0 -19
  36. package/src/aws/simple.ts +306 -204
  37. package/src/internal/AwsError.ts +13 -0
  38. package/src/internal/s3.ts +75 -0
  39. package/src/middleware/aws.ts +1 -1
  40. package/src/middleware/base.ts +5 -4
  41. package/src/middleware/build.ts +31 -31
  42. package/src/middleware/mysql.ts +11 -7
  43. package/src/middleware/trace.ts +15 -19
  44. package/src/utils/misc.ts +11 -2
@@ -11,10 +11,11 @@ var __assign = (this && this.__assign) || function () {
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
15
  return new (P || (P = Promise))(function (resolve, reject) {
15
16
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
17
  function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
19
  step((generator = generator.apply(thisArg, _arguments || [])).next());
19
20
  });
20
21
  };
@@ -24,7 +25,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
24
25
  function verb(n) { return function (v) { return step([n, v]); }; }
25
26
  function step(op) {
26
27
  if (f) throw new TypeError("Generator is already executing.");
27
- while (_) try {
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
29
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
30
  if (y = 0, t) op = [op[0] & 2, t.value];
30
31
  switch (op[0]) {
@@ -45,18 +46,35 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
46
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
47
  }
47
48
  };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
48
58
  Object.defineProperty(exports, "__esModule", { value: true });
49
- var AWS = require("aws-sdk"); // tslint:disable-line
59
+ exports.SimpleAWS = void 0;
60
+ var cloudfront_signer_1 = require("@aws-sdk/cloudfront-signer");
50
61
  var fs = require("fs");
51
62
  var os = require("os");
52
63
  var non_secure_1 = require("nanoid/non-secure");
53
64
  var utils_1 = require("../utils");
54
65
  var config_1 = require("./config");
55
66
  var define_1 = require("./define");
56
- var logger = utils_1.getLogger(__filename);
67
+ var client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
68
+ var client_s3_1 = require("@aws-sdk/client-s3");
69
+ var client_sqs_1 = require("@aws-sdk/client-sqs");
70
+ var lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
71
+ var s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
72
+ var lib_storage_1 = require("@aws-sdk/lib-storage");
73
+ var logger = (0, utils_1.getLogger)(__filename);
57
74
  var SimpleAWS = /** @class */ (function () {
58
75
  function SimpleAWS(config) {
59
76
  var _this = this;
77
+ this.queueUrls = {};
60
78
  this.getQueueUrl = function (queueName) { return __awaiter(_this, void 0, void 0, function () {
61
79
  var urlResult;
62
80
  return __generator(this, function (_a) {
@@ -65,16 +83,14 @@ var SimpleAWS = /** @class */ (function () {
65
83
  if (this.queueUrls[queueName] !== undefined) {
66
84
  return [2 /*return*/, this.queueUrls[queueName]];
67
85
  }
68
- return [4 /*yield*/, this.sqs
69
- .getQueueUrl({
86
+ return [4 /*yield*/, this.sqs.getQueueUrl({
70
87
  QueueName: queueName,
71
- })
72
- .promise()];
88
+ })];
73
89
  case 1:
74
90
  urlResult = _a.sent();
75
91
  logger.stupid("urlResult", urlResult);
76
92
  if (!urlResult.QueueUrl) {
77
- throw new Error("No queue url with name[" + queueName + "]");
93
+ throw new Error("No queue url with name[".concat(queueName, "]"));
78
94
  }
79
95
  return [2 /*return*/, (this.queueUrls[queueName] = urlResult.QueueUrl)];
80
96
  }
@@ -82,73 +98,72 @@ var SimpleAWS = /** @class */ (function () {
82
98
  }); };
83
99
  this.enqueue = function (queueName, data) { return __awaiter(_this, void 0, void 0, function () {
84
100
  var queueUrl, sendResult, attrResult;
85
- return __generator(this, function (_a) {
86
- switch (_a.label) {
101
+ var _a;
102
+ return __generator(this, function (_b) {
103
+ switch (_b.label) {
87
104
  case 0:
88
- logger.debug("Send message[" + data.key + "] to queue.");
105
+ logger.debug("Send message[".concat(data.key, "] to queue."));
89
106
  logger.stupid("data", data);
90
107
  return [4 /*yield*/, this.getQueueUrl(queueName)];
91
108
  case 1:
92
- queueUrl = _a.sent();
93
- return [4 /*yield*/, this.sqs
94
- .sendMessage({
109
+ queueUrl = _b.sent();
110
+ return [4 /*yield*/, this.sqs.sendMessage({
95
111
  QueueUrl: queueUrl,
96
112
  MessageBody: JSON.stringify(data),
97
113
  DelaySeconds: 0,
98
- })
99
- .promise()];
114
+ })];
100
115
  case 2:
101
- sendResult = _a.sent();
116
+ sendResult = _b.sent();
102
117
  logger.stupid("sendResult", sendResult);
103
- return [4 /*yield*/, this.sqs
104
- .getQueueAttributes({
118
+ return [4 /*yield*/, this.sqs.getQueueAttributes({
105
119
  QueueUrl: queueUrl,
106
120
  AttributeNames: ['ApproximateNumberOfMessages'],
107
- })
108
- .promise()];
121
+ })];
109
122
  case 3:
110
- attrResult = _a.sent();
123
+ attrResult = _b.sent();
111
124
  logger.stupid("attrResult", attrResult);
112
125
  if (!attrResult.Attributes) {
113
126
  return [2 /*return*/, 0];
114
127
  }
115
- return [2 /*return*/, +attrResult.Attributes.ApproximateNumberOfMessages];
128
+ return [2 /*return*/, +(((_a = attrResult.Attributes) === null || _a === void 0 ? void 0 : _a.ApproximateNumberOfMessages) || 0)];
116
129
  }
117
130
  });
118
131
  }); };
119
- this.dequeue = function (queueName, fetchSize, waitSeconds, visibilityTimeout) {
120
- if (fetchSize === void 0) { fetchSize = 1; }
121
- if (waitSeconds === void 0) { waitSeconds = 1; }
122
- if (visibilityTimeout === void 0) { visibilityTimeout = 15; }
123
- return __awaiter(_this, void 0, void 0, function () {
124
- var queueUrl, receiveResult, data, _i, _a, each, message;
125
- return __generator(this, function (_b) {
126
- switch (_b.label) {
132
+ this.dequeue = function (queueName_1) {
133
+ var args_1 = [];
134
+ for (var _i = 1; _i < arguments.length; _i++) {
135
+ args_1[_i - 1] = arguments[_i];
136
+ }
137
+ return __awaiter(_this, __spreadArray([queueName_1], args_1, true), void 0, function (queueName, fetchSize, waitSeconds, visibilityTimeout) {
138
+ var queueUrl, receiveResult, data, _a, _b, each, message;
139
+ if (fetchSize === void 0) { fetchSize = 1; }
140
+ if (waitSeconds === void 0) { waitSeconds = 1; }
141
+ if (visibilityTimeout === void 0) { visibilityTimeout = 15; }
142
+ return __generator(this, function (_c) {
143
+ switch (_c.label) {
127
144
  case 0:
128
- logger.debug("Receive message from queue[" + queueName + "].");
145
+ logger.debug("Receive message from queue[".concat(queueName, "]."));
129
146
  return [4 /*yield*/, this.getQueueUrl(queueName)];
130
147
  case 1:
131
- queueUrl = _b.sent();
132
- return [4 /*yield*/, this.sqs
133
- .receiveMessage({
148
+ queueUrl = _c.sent();
149
+ return [4 /*yield*/, this.sqs.receiveMessage({
134
150
  QueueUrl: queueUrl,
135
151
  MaxNumberOfMessages: fetchSize,
136
152
  WaitTimeSeconds: waitSeconds,
137
153
  VisibilityTimeout: visibilityTimeout,
138
- })
139
- .promise()];
154
+ })];
140
155
  case 2:
141
- receiveResult = _b.sent();
156
+ receiveResult = _c.sent();
142
157
  logger.stupid("receiveResult", receiveResult);
143
158
  if (receiveResult.Messages === undefined ||
144
159
  receiveResult.Messages.length === 0) {
145
160
  return [2 /*return*/, []];
146
161
  }
147
162
  data = [];
148
- for (_i = 0, _a = receiveResult.Messages; _i < _a.length; _i++) {
149
- each = _a[_i];
163
+ for (_a = 0, _b = receiveResult.Messages; _a < _b.length; _a++) {
164
+ each = _b[_a];
150
165
  if (!each.ReceiptHandle) {
151
- logger.warn("No receipt handler: " + JSON.stringify(each));
166
+ logger.warn("No receipt handler: ".concat(JSON.stringify(each)));
152
167
  continue;
153
168
  }
154
169
  message = {
@@ -157,33 +172,37 @@ var SimpleAWS = /** @class */ (function () {
157
172
  };
158
173
  data.push(message);
159
174
  }
160
- logger.verbose("Receive a message[" + JSON.stringify(data) + "] from queue");
175
+ logger.verbose("Receive a message[".concat(JSON.stringify(data), "] from queue"));
161
176
  return [2 /*return*/, data];
162
177
  }
163
178
  });
164
179
  });
165
180
  };
166
- this.dequeueAll = function (queueName, limitSize, visibilityTimeout) {
167
- if (limitSize === void 0) { limitSize = Number.MAX_VALUE; }
168
- if (visibilityTimeout === void 0) { visibilityTimeout = 15; }
169
- return __awaiter(_this, void 0, void 0, function () {
170
- var messages, maxFetchSize, eachOfMessages, _i, eachOfMessages_1, each;
171
- return __generator(this, function (_a) {
172
- switch (_a.label) {
181
+ this.dequeueAll = function (queueName_1) {
182
+ var args_1 = [];
183
+ for (var _i = 1; _i < arguments.length; _i++) {
184
+ args_1[_i - 1] = arguments[_i];
185
+ }
186
+ return __awaiter(_this, __spreadArray([queueName_1], args_1, true), void 0, function (queueName, limitSize, visibilityTimeout) {
187
+ var messages, maxFetchSize, eachOfMessages, _a, eachOfMessages_1, each;
188
+ if (limitSize === void 0) { limitSize = Number.MAX_VALUE; }
189
+ if (visibilityTimeout === void 0) { visibilityTimeout = 15; }
190
+ return __generator(this, function (_b) {
191
+ switch (_b.label) {
173
192
  case 0:
174
193
  messages = [];
175
194
  maxFetchSize = 10;
176
- _a.label = 1;
195
+ _b.label = 1;
177
196
  case 1:
178
197
  if (!(messages.length < limitSize)) return [3 /*break*/, 3];
179
198
  return [4 /*yield*/, this.dequeue(queueName, Math.min(limitSize - messages.length, maxFetchSize), 0, visibilityTimeout)];
180
199
  case 2:
181
- eachOfMessages = _a.sent();
200
+ eachOfMessages = _b.sent();
182
201
  if (!eachOfMessages || eachOfMessages.length === 0) {
183
202
  return [3 /*break*/, 3];
184
203
  }
185
- for (_i = 0, eachOfMessages_1 = eachOfMessages; _i < eachOfMessages_1.length; _i++) {
186
- each = eachOfMessages_1[_i];
204
+ for (_a = 0, eachOfMessages_1 = eachOfMessages; _a < eachOfMessages_1.length; _a++) {
205
+ each = eachOfMessages_1[_a];
187
206
  messages.push(each);
188
207
  }
189
208
  return [3 /*break*/, 1];
@@ -195,32 +214,23 @@ var SimpleAWS = /** @class */ (function () {
195
214
  });
196
215
  };
197
216
  this.retainMessage = function (queueName, handle, seconds) { return __awaiter(_this, void 0, void 0, function () {
198
- var _this = this;
217
+ var queueUrl;
199
218
  return __generator(this, function (_a) {
200
- return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
201
- var _this = this;
202
- return __generator(this, function (_a) {
203
- logger.debug("Change visibilityTimeout of " + handle + " to " + seconds + "secs.");
204
- this.getQueueUrl(queueName)
205
- .then(function (queueUrl) {
206
- _this.sqs.changeMessageVisibility({
207
- QueueUrl: queueUrl,
208
- ReceiptHandle: handle,
209
- VisibilityTimeout: seconds,
210
- }, function (err, changeResult) {
211
- if (err) {
212
- reject(err);
213
- }
214
- else {
215
- logger.stupid("changeResult", changeResult);
216
- resolve(handle);
217
- }
218
- });
219
- })
220
- .catch(reject);
221
- return [2 /*return*/];
222
- });
223
- }); })];
219
+ switch (_a.label) {
220
+ case 0:
221
+ logger.debug("Change visibilityTimeout of ".concat(handle, " to ").concat(seconds, "secs."));
222
+ return [4 /*yield*/, this.getQueueUrl(queueName)];
223
+ case 1:
224
+ queueUrl = _a.sent();
225
+ return [4 /*yield*/, this.sqs.changeMessageVisibility({
226
+ QueueUrl: queueUrl,
227
+ ReceiptHandle: handle,
228
+ VisibilityTimeout: seconds,
229
+ })];
230
+ case 2:
231
+ _a.sent();
232
+ return [2 /*return*/, handle];
233
+ }
224
234
  });
225
235
  }); };
226
236
  this.completeMessage = function (queueName, handle) { return __awaiter(_this, void 0, void 0, function () {
@@ -228,16 +238,14 @@ var SimpleAWS = /** @class */ (function () {
228
238
  return __generator(this, function (_a) {
229
239
  switch (_a.label) {
230
240
  case 0:
231
- logger.debug("Complete a message with handle[" + handle + "]");
241
+ logger.debug("Complete a message with handle[".concat(handle, "]"));
232
242
  return [4 /*yield*/, this.getQueueUrl(queueName)];
233
243
  case 1:
234
244
  queueUrl = _a.sent();
235
- return [4 /*yield*/, this.sqs
236
- .deleteMessage({
245
+ return [4 /*yield*/, this.sqs.deleteMessage({
237
246
  QueueUrl: queueUrl,
238
247
  ReceiptHandle: handle,
239
- })
240
- .promise()];
248
+ })];
241
249
  case 2:
242
250
  deleteResult = _a.sent();
243
251
  logger.stupid("deleteResult", deleteResult);
@@ -250,7 +258,7 @@ var SimpleAWS = /** @class */ (function () {
250
258
  return __generator(this, function (_a) {
251
259
  switch (_a.label) {
252
260
  case 0:
253
- logger.debug("Complete a message with handle[" + handles + "]");
261
+ logger.debug("Complete a message with handle[".concat(handles, "]"));
254
262
  if (!handles) {
255
263
  return [2 /*return*/, handles];
256
264
  }
@@ -265,15 +273,13 @@ var SimpleAWS = /** @class */ (function () {
265
273
  return [4 /*yield*/, this.getQueueUrl(queueName)];
266
274
  case 2:
267
275
  queueUrl = _a.sent();
268
- return [4 /*yield*/, this.sqs
269
- .deleteMessageBatch({
276
+ return [4 /*yield*/, this.sqs.deleteMessageBatch({
270
277
  QueueUrl: queueUrl,
271
278
  Entries: sublist.map(function (handle) { return ({
272
279
  Id: (++index).toString(),
273
280
  ReceiptHandle: handle,
274
281
  }); }),
275
- })
276
- .promise()];
282
+ })];
277
283
  case 3:
278
284
  deletesResult = _a.sent();
279
285
  logger.stupid("deleteResult", deletesResult);
@@ -286,19 +292,22 @@ var SimpleAWS = /** @class */ (function () {
286
292
  });
287
293
  }); };
288
294
  this.download = function (bucket, key, localPath) { return __awaiter(_this, void 0, void 0, function () {
289
- var stream;
295
+ var Body;
290
296
  return __generator(this, function (_a) {
291
- logger.debug("Get a stream of item[" + key + "] from bucket[" + bucket + "]");
292
- stream = this.s3
293
- .getObject({ Bucket: bucket, Key: key })
294
- .createReadStream();
295
- return [2 /*return*/, new Promise(function (resolve, reject) {
296
- return stream
297
- .on('error', function (error) { return reject(error); })
298
- .pipe(fs.createWriteStream(localPath))
299
- .on('finish', function () { return resolve(localPath); })
300
- .on('error', function (error) { return reject(error); });
301
- })];
297
+ switch (_a.label) {
298
+ case 0:
299
+ logger.debug("Get a stream of item[".concat(key, "] from bucket[").concat(bucket, "]"));
300
+ return [4 /*yield*/, this.s3.getObject({ Bucket: bucket, Key: key })];
301
+ case 1:
302
+ Body = (_a.sent()).Body;
303
+ return [2 /*return*/, new Promise(function (resolve, reject) {
304
+ return Body
305
+ .on('error', function (error) { return reject(error); })
306
+ .pipe(fs.createWriteStream(localPath))
307
+ .on('finish', function () { return resolve(localPath); })
308
+ .on('error', function (error) { return reject(error); });
309
+ })];
310
+ }
302
311
  });
303
312
  }); };
304
313
  this.readFile = function (bucket, key) { return __awaiter(_this, void 0, void 0, function () {
@@ -306,8 +315,8 @@ var SimpleAWS = /** @class */ (function () {
306
315
  return __generator(this, function (_a) {
307
316
  switch (_a.label) {
308
317
  case 0:
309
- logger.debug("Read item[" + key + "] from bucket[" + bucket + "]");
310
- tempFile = os.tmpdir() + "/" + non_secure_1.nanoid();
318
+ logger.debug("Read item[".concat(key, "] from bucket[").concat(bucket, "]"));
319
+ tempFile = "".concat(os.tmpdir(), "/").concat((0, non_secure_1.nanoid)());
311
320
  _a.label = 1;
312
321
  case 1:
313
322
  _a.trys.push([1, , 4, 9]);
@@ -331,7 +340,7 @@ var SimpleAWS = /** @class */ (function () {
331
340
  return [3 /*break*/, 8];
332
341
  case 7:
333
342
  error_1 = _a.sent();
334
- logger.error("Failed to delete temp file " + tempFile + ": " + utils_1.stringifyError(error_1));
343
+ logger.error("Failed to delete temp file ".concat(tempFile, ": ").concat((0, utils_1.stringifyError)(error_1)));
335
344
  return [3 /*break*/, 8];
336
345
  case 8: return [7 /*endfinally*/];
337
346
  case 9: return [2 /*return*/];
@@ -339,111 +348,110 @@ var SimpleAWS = /** @class */ (function () {
339
348
  });
340
349
  }); };
341
350
  this.readFileBuffer = function (bucket, key) { return __awaiter(_this, void 0, void 0, function () {
342
- var params, data;
351
+ var Body, buffer;
343
352
  return __generator(this, function (_a) {
344
353
  switch (_a.label) {
345
354
  case 0:
346
- logger.debug("Read item[" + key + "] from bucket[" + bucket + "]");
347
- params = {
348
- Bucket: bucket,
349
- Key: key,
350
- };
351
- return [4 /*yield*/, this.s3.getObject(params).promise()];
355
+ logger.debug("Read item[".concat(key, "] from bucket[").concat(bucket, "]"));
356
+ return [4 /*yield*/, this.s3.getObject({ Bucket: bucket, Key: key })];
352
357
  case 1:
353
- data = _a.sent();
354
- if (data.Body) {
355
- return [2 /*return*/, data.Body];
356
- }
357
- else {
358
- throw new Error("Failed to read file " + key + " from bucket " + bucket);
358
+ Body = (_a.sent()).Body;
359
+ return [4 /*yield*/, (Body === null || Body === void 0 ? void 0 : Body.transformToByteArray())];
360
+ case 2:
361
+ buffer = _a.sent();
362
+ if (!buffer) {
363
+ throw new Error("Failed to read file ".concat(key, " from bucket ").concat(bucket));
359
364
  }
360
- return [2 /*return*/];
365
+ return [2 /*return*/, Buffer.from(buffer)];
361
366
  }
362
367
  });
363
368
  }); };
364
369
  this.upload = function (bucket, localPath, key) { return __awaiter(_this, void 0, void 0, function () {
365
- var putResult;
370
+ var upload;
366
371
  return __generator(this, function (_a) {
367
372
  switch (_a.label) {
368
373
  case 0:
369
- logger.debug("Upload item[" + key + "] into bucket[" + bucket + "]");
370
- return [4 /*yield*/, this.s3
371
- .upload({
374
+ logger.debug("Upload item[".concat(key, "] into bucket[").concat(bucket, "]"));
375
+ upload = new lib_storage_1.Upload({
376
+ client: this.s3,
377
+ params: {
372
378
  Bucket: bucket,
373
379
  Key: key,
374
380
  Body: fs.createReadStream(localPath),
375
- })
376
- .promise()];
381
+ },
382
+ partSize: 5 * 1024 * 1024, // 5MB
383
+ queueSize: 4,
384
+ });
385
+ return [4 /*yield*/, upload.done()];
377
386
  case 1:
378
- putResult = _a.sent();
379
- logger.stupid("putResult", putResult);
387
+ _a.sent();
380
388
  return [2 /*return*/, key];
381
389
  }
382
390
  });
383
391
  }); };
384
392
  this.uploadFromBuffer = function (bucket, key, buffer) { return __awaiter(_this, void 0, void 0, function () {
385
- var putResult;
393
+ var upload;
386
394
  return __generator(this, function (_a) {
387
395
  switch (_a.label) {
388
396
  case 0:
389
- logger.debug("Upload item[" + key + "] into bucket[" + bucket + "]");
390
- return [4 /*yield*/, this.s3
391
- .upload({
397
+ logger.debug("Upload item[".concat(key, "] into bucket[").concat(bucket, "]"));
398
+ upload = new lib_storage_1.Upload({
399
+ client: this.s3,
400
+ params: {
392
401
  Bucket: bucket,
393
402
  Key: key,
394
403
  Body: buffer,
395
- })
396
- .promise()];
404
+ },
405
+ partSize: 5 * 1024 * 1024, // 5MB
406
+ queueSize: 4,
407
+ });
408
+ return [4 /*yield*/, upload.done()];
397
409
  case 1:
398
- putResult = _a.sent();
399
- logger.stupid("putResult", putResult);
410
+ _a.sent();
400
411
  return [2 /*return*/, key];
401
412
  }
402
413
  });
403
414
  }); };
404
415
  this.writeFile = function (bucket, key, content) { return __awaiter(_this, void 0, void 0, function () {
405
- var tempFile;
416
+ var tempFile, error_2, msg;
406
417
  return __generator(this, function (_a) {
407
418
  switch (_a.label) {
408
419
  case 0:
409
- logger.debug("Write item[" + key + "] into bucket[" + bucket + "]");
410
- tempFile = os.tmpdir() + "/" + non_secure_1.nanoid();
420
+ logger.debug("Write item[".concat(key, "] into bucket[").concat(bucket, "]"));
421
+ tempFile = "".concat(os.tmpdir(), "/").concat((0, non_secure_1.nanoid)());
411
422
  _a.label = 1;
412
423
  case 1:
413
- _a.trys.push([1, , 4, 5]);
424
+ _a.trys.push([1, , 4, 9]);
414
425
  return [4 /*yield*/, fs.promises.writeFile(tempFile, content, 'utf-8')];
415
426
  case 2:
416
427
  _a.sent();
417
428
  return [4 /*yield*/, this.upload(bucket, tempFile, key)];
418
429
  case 3:
419
430
  _a.sent();
420
- return [3 /*break*/, 5];
431
+ return [3 /*break*/, 9];
421
432
  case 4:
422
433
  if (!fs.existsSync(tempFile)) {
423
434
  return [2 /*return*/];
424
435
  }
425
- fs.unlink(tempFile, function (error) {
426
- if (!error) {
427
- return;
428
- }
429
- var msg = "Error during writeFile: unlink file " + tempFile + ": " + utils_1.stringifyError(error);
430
- logger.error(msg);
431
- });
432
- return [7 /*endfinally*/];
433
- case 5: return [2 /*return*/];
436
+ _a.label = 5;
437
+ case 5:
438
+ _a.trys.push([5, 7, , 8]);
439
+ return [4 /*yield*/, fs.promises.unlink(tempFile)];
440
+ case 6:
441
+ _a.sent();
442
+ return [3 /*break*/, 8];
443
+ case 7:
444
+ error_2 = _a.sent();
445
+ msg = "Error during writeFile: unlink file ".concat(tempFile, ": ").concat((0, utils_1.stringifyError)(error_2));
446
+ logger.error(msg);
447
+ return [3 /*break*/, 8];
448
+ case 8: return [7 /*endfinally*/];
449
+ case 9: return [2 /*return*/];
434
450
  }
435
451
  });
436
452
  }); };
437
- this.getSignedUrl = function (bucketName, key, operation, params) {
438
- if (operation === void 0) { operation = 'getObject'; }
439
- return {
440
- key: key,
441
- url: _this.s3.getSignedUrl(operation, __assign({ Bucket: bucketName, Key: key, Expires: 60 * 10 }, (params || {}))),
442
- };
443
- };
444
453
  this.getSignedCookie = function (keyPairId, privateKey, url, expires) {
445
- var signer = new AWS.CloudFront.Signer(keyPairId, privateKey);
446
- var policy = {
454
+ var policy = JSON.stringify({
447
455
  Statement: [
448
456
  {
449
457
  Resource: url,
@@ -452,25 +460,23 @@ var SimpleAWS = /** @class */ (function () {
452
460
  },
453
461
  },
454
462
  ],
455
- };
456
- var ret = signer.getSignedCookie({ policy: JSON.stringify(policy) });
457
- return ret;
458
- };
459
- this.getAttachmentUrl = function (bucketName, key, fileName, params) {
460
- return _this.getSignedUrl(bucketName, key, 'getObject', __assign({}, params, { ResponseContentDisposition: "attachment; filename=\"" + fileName + "\"" }));
463
+ });
464
+ return (0, cloudfront_signer_1.getSignedCookies)({
465
+ keyPairId: keyPairId,
466
+ privateKey: privateKey,
467
+ policy: policy,
468
+ });
461
469
  };
462
470
  this.getDynamoDbItem = function (tableName, key, defaultValue) { return __awaiter(_this, void 0, void 0, function () {
463
471
  var getResult, item;
464
472
  return __generator(this, function (_a) {
465
473
  switch (_a.label) {
466
474
  case 0:
467
- logger.debug("Read an item with key[" + JSON.stringify(key) + "] from " + tableName + ".");
468
- return [4 /*yield*/, this.dynamodb
469
- .get({
475
+ logger.debug("Read an item with key[".concat(JSON.stringify(key), "] from ").concat(tableName, "."));
476
+ return [4 /*yield*/, this.dynamodb.get({
470
477
  TableName: tableName,
471
478
  Key: key,
472
- })
473
- .promise()];
479
+ })];
474
480
  case 1:
475
481
  getResult = _a.sent();
476
482
  logger.stupid("getResult", getResult);
@@ -487,27 +493,25 @@ var SimpleAWS = /** @class */ (function () {
487
493
  return __generator(this, function (_a) {
488
494
  switch (_a.label) {
489
495
  case 0:
490
- logger.debug("Update an item with key[" + JSON.stringify(key) + "] to " + tableName);
496
+ logger.debug("Update an item with key[".concat(JSON.stringify(key), "] to ").concat(tableName));
491
497
  logger.stupid("keyValues", columnValues);
492
498
  expressions = Object.keys(columnValues)
493
- .map(function (column) { return column + " = :" + column; })
499
+ .map(function (column) { return "".concat(column, " = :").concat(column); })
494
500
  .join(', ');
495
501
  attributeValues = Object.keys(columnValues)
496
- .map(function (column) { return [":" + column, columnValues[column]]; })
502
+ .map(function (column) { return [":".concat(column), columnValues[column]]; })
497
503
  .reduce(function (obj, pair) {
498
504
  var _a;
499
- return (__assign({}, obj, (_a = {}, _a[pair[0]] = pair[1], _a)));
505
+ return (__assign(__assign({}, obj), (_a = {}, _a[pair[0]] = pair[1], _a)));
500
506
  }, {});
501
507
  logger.stupid("expressions", expressions);
502
508
  logger.stupid("attributeValues", attributeValues);
503
- return [4 /*yield*/, this.dynamodb
504
- .update({
509
+ return [4 /*yield*/, this.dynamodb.update({
505
510
  TableName: tableName,
506
511
  Key: key,
507
- UpdateExpression: "set " + expressions,
512
+ UpdateExpression: "set ".concat(expressions),
508
513
  ExpressionAttributeValues: attributeValues,
509
- })
510
- .promise()];
514
+ })];
511
515
  case 1:
512
516
  updateResult = _a.sent();
513
517
  logger.stupid("updateResult", updateResult);
@@ -517,39 +521,35 @@ var SimpleAWS = /** @class */ (function () {
517
521
  }); };
518
522
  // Setup
519
523
  this.setupQueue = function (queueName) { return __awaiter(_this, void 0, void 0, function () {
520
- var listResult, _i, _a, queueUrl, error_2, createResult;
524
+ var listResult, _i, _a, queueUrl, error_3, createResult;
521
525
  return __generator(this, function (_b) {
522
526
  switch (_b.label) {
523
527
  case 0:
524
528
  _b.trys.push([0, 2, , 3]);
525
- return [4 /*yield*/, this.sqs
526
- .listQueues({
529
+ return [4 /*yield*/, this.sqs.listQueues({
527
530
  QueueNamePrefix: queueName,
528
- })
529
- .promise()];
531
+ })];
530
532
  case 1:
531
533
  listResult = _b.sent();
532
534
  if (listResult.QueueUrls) {
533
535
  for (_i = 0, _a = listResult.QueueUrls; _i < _a.length; _i++) {
534
536
  queueUrl = _a[_i];
535
537
  if (queueUrl.endsWith(queueName)) {
536
- logger.debug("Queue[" + queueName + " => " + queueUrl + "] already exists.");
538
+ logger.debug("Queue[".concat(queueName, " => ").concat(queueUrl, "] already exists."));
537
539
  return [2 /*return*/, true];
538
540
  }
539
541
  }
540
542
  }
541
543
  return [3 /*break*/, 3];
542
544
  case 2:
543
- error_2 = _b.sent();
544
- logger.debug("No Queue[" + queueName + "] exists due to " + error_2);
545
+ error_3 = _b.sent();
546
+ logger.debug("No Queue[".concat(queueName, "] exists due to ").concat(error_3));
545
547
  return [3 /*break*/, 3];
546
548
  case 3:
547
- logger.debug("Create a queue[" + queueName + "] newly.");
548
- return [4 /*yield*/, this.sqs
549
- .createQueue({
549
+ logger.debug("Create a queue[".concat(queueName, "] newly."));
550
+ return [4 /*yield*/, this.sqs.createQueue({
550
551
  QueueName: queueName,
551
- })
552
- .promise()];
552
+ })];
553
553
  case 4:
554
554
  createResult = _b.sent();
555
555
  logger.stupid("createResult", createResult);
@@ -558,37 +558,34 @@ var SimpleAWS = /** @class */ (function () {
558
558
  });
559
559
  }); };
560
560
  this.setupStorage = function (bucketName, cors) { return __awaiter(_this, void 0, void 0, function () {
561
- var listResult, error_3, createResult, corsResult;
561
+ var listResult, error_4, createResult, corsResult;
562
562
  return __generator(this, function (_a) {
563
563
  switch (_a.label) {
564
564
  case 0:
565
565
  _a.trys.push([0, 2, , 3]);
566
- return [4 /*yield*/, this.s3.listBuckets().promise()];
566
+ return [4 /*yield*/, this.s3.listBuckets()];
567
567
  case 1:
568
568
  listResult = _a.sent();
569
569
  if (listResult.Buckets &&
570
570
  listResult.Buckets.map(function (each) { return each.Name; }).includes(bucketName)) {
571
- logger.debug("Bucket[" + bucketName + "] already exists.");
571
+ logger.debug("Bucket[".concat(bucketName, "] already exists."));
572
572
  return [2 /*return*/, true];
573
573
  }
574
574
  return [3 /*break*/, 3];
575
575
  case 2:
576
- error_3 = _a.sent();
577
- logger.debug("No bucket[" + bucketName + "] exists due to " + error_3);
576
+ error_4 = _a.sent();
577
+ logger.debug("No bucket[".concat(bucketName, "] exists due to ").concat(error_4));
578
578
  return [3 /*break*/, 3];
579
579
  case 3:
580
- logger.debug("Create a bucket[" + bucketName + "] newly.");
581
- return [4 /*yield*/, this.s3
582
- .createBucket({
580
+ logger.debug("Create a bucket[".concat(bucketName, "] newly."));
581
+ return [4 /*yield*/, this.s3.createBucket({
583
582
  Bucket: bucketName,
584
- })
585
- .promise()];
583
+ })];
586
584
  case 4:
587
585
  createResult = _a.sent();
588
586
  logger.stupid("createResult", createResult);
589
587
  if (!cors) return [3 /*break*/, 6];
590
- return [4 /*yield*/, this.s3
591
- .putBucketCors({
588
+ return [4 /*yield*/, this.s3.putBucketCors({
592
589
  Bucket: bucketName,
593
590
  CORSConfiguration: {
594
591
  CORSRules: [
@@ -599,8 +596,7 @@ var SimpleAWS = /** @class */ (function () {
599
596
  },
600
597
  ],
601
598
  },
602
- })
603
- .promise()];
599
+ })];
604
600
  case 5:
605
601
  corsResult = _a.sent();
606
602
  logger.stupid("corsResult", corsResult);
@@ -610,38 +606,34 @@ var SimpleAWS = /** @class */ (function () {
610
606
  });
611
607
  }); };
612
608
  this.setupDynamoDb = function (tableName, keyColumn) { return __awaiter(_this, void 0, void 0, function () {
613
- var listResult, error_4, createResult;
609
+ var listResult, error_5, createResult;
614
610
  return __generator(this, function (_a) {
615
611
  switch (_a.label) {
616
612
  case 0:
617
613
  _a.trys.push([0, 2, , 3]);
618
- return [4 /*yield*/, this.dynamodbAdmin.listTables().promise()];
614
+ return [4 /*yield*/, this.dynamodbAdmin.listTables()];
619
615
  case 1:
620
616
  listResult = _a.sent();
621
617
  if (listResult.TableNames && listResult.TableNames.includes(tableName)) {
622
- logger.debug("Table[" + tableName + "] already exists.");
618
+ logger.debug("Table[".concat(tableName, "] already exists."));
623
619
  return [2 /*return*/, true];
624
620
  }
625
621
  return [3 /*break*/, 3];
626
622
  case 2:
627
- error_4 = _a.sent();
628
- logger.debug("No table[" + tableName + "] exists due to " + error_4);
623
+ error_5 = _a.sent();
624
+ logger.debug("No table[".concat(tableName, "] exists due to ").concat(error_5));
629
625
  return [3 /*break*/, 3];
630
626
  case 3:
631
- logger.debug("Create a table[" + tableName + "] newly.");
632
- return [4 /*yield*/, this.dynamodbAdmin
633
- .createTable({
627
+ logger.debug("Create a table[".concat(tableName, "] newly."));
628
+ return [4 /*yield*/, this.dynamodbAdmin.createTable({
634
629
  TableName: tableName,
635
630
  KeySchema: [{ AttributeName: keyColumn, KeyType: 'HASH' }],
636
- AttributeDefinitions: [
637
- { AttributeName: keyColumn, AttributeType: 'S' },
638
- ],
631
+ AttributeDefinitions: [{ AttributeName: keyColumn, AttributeType: 'S' }],
639
632
  ProvisionedThroughput: {
640
633
  ReadCapacityUnits: 30,
641
634
  WriteCapacityUnits: 10,
642
635
  },
643
- })
644
- .promise()];
636
+ })];
645
637
  case 4:
646
638
  createResult = _a.sent();
647
639
  logger.stupid("createResult", createResult);
@@ -660,43 +652,143 @@ var SimpleAWS = /** @class */ (function () {
660
652
  Object.defineProperty(SimpleAWS.prototype, "s3", {
661
653
  get: function () {
662
654
  if (this.lazyS3 === undefined) {
663
- this.lazyS3 = new AWS.S3(this.config.get(define_1.AWSComponent.s3));
655
+ this.lazyS3 = new client_s3_1.S3(this.config.get(define_1.AWSComponent.s3) || {});
664
656
  }
665
657
  return this.lazyS3;
666
658
  },
667
- enumerable: true,
659
+ enumerable: false,
668
660
  configurable: true
669
661
  });
670
662
  Object.defineProperty(SimpleAWS.prototype, "sqs", {
671
663
  get: function () {
672
664
  if (this.lazySqs === undefined) {
673
- this.lazySqs = new AWS.SQS(this.config.get(define_1.AWSComponent.sqs));
665
+ this.lazySqs = new client_sqs_1.SQS(this.config.get(define_1.AWSComponent.sqs) || {});
674
666
  }
675
667
  return this.lazySqs;
676
668
  },
677
- enumerable: true,
669
+ enumerable: false,
678
670
  configurable: true
679
671
  });
680
672
  Object.defineProperty(SimpleAWS.prototype, "dynamodb", {
681
673
  get: function () {
682
674
  if (this.lazyDynamodb === undefined) {
683
- this.lazyDynamodb = new AWS.DynamoDB.DocumentClient(this.config.get(define_1.AWSComponent.dynamodb));
675
+ this.lazyDynamodb = lib_dynamodb_1.DynamoDBDocument.from(new client_dynamodb_1.DynamoDBClient(this.config.get(define_1.AWSComponent.dynamodb) || {}), {
676
+ marshallOptions: {
677
+ convertEmptyValues: true,
678
+ removeUndefinedValues: true,
679
+ },
680
+ });
684
681
  }
685
682
  return this.lazyDynamodb;
686
683
  },
687
- enumerable: true,
684
+ enumerable: false,
688
685
  configurable: true
689
686
  });
690
687
  Object.defineProperty(SimpleAWS.prototype, "dynamodbAdmin", {
691
688
  get: function () {
692
689
  if (this.lazyDynamodbAdmin === undefined) {
693
- this.lazyDynamodbAdmin = new AWS.DynamoDB(this.config.get(define_1.AWSComponent.dynamodb));
690
+ this.lazyDynamodbAdmin = new client_dynamodb_1.DynamoDB(this.config.get(define_1.AWSComponent.dynamodb) || {});
694
691
  }
695
692
  return this.lazyDynamodbAdmin;
696
693
  },
697
- enumerable: true,
694
+ enumerable: false,
698
695
  configurable: true
699
696
  });
697
+ SimpleAWS.prototype.getSignedUrl = function (options) {
698
+ return __awaiter(this, void 0, void 0, function () {
699
+ var _a, expiresIn, unhoistableHeaders, cmd, cmd, cmd, cmd, cmd, cmd, cmd, cmd, cmd, cmd, cmd, cmd;
700
+ return __generator(this, function (_b) {
701
+ _a = options.expiresIn, expiresIn = _a === void 0 ? 600 : _a, unhoistableHeaders = options.unhoistableHeaders;
702
+ switch (options.operation) {
703
+ case 'putObject': {
704
+ cmd = new client_s3_1.PutObjectCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
705
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
706
+ expiresIn: expiresIn,
707
+ unhoistableHeaders: unhoistableHeaders,
708
+ })];
709
+ }
710
+ case 'getObject': {
711
+ cmd = new client_s3_1.GetObjectCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
712
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
713
+ expiresIn: expiresIn,
714
+ unhoistableHeaders: unhoistableHeaders,
715
+ })];
716
+ }
717
+ case 'deleteObject': {
718
+ cmd = new client_s3_1.DeleteObjectCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
719
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
720
+ expiresIn: expiresIn,
721
+ unhoistableHeaders: unhoistableHeaders,
722
+ })];
723
+ }
724
+ case 'headObject': {
725
+ cmd = new client_s3_1.HeadObjectCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
726
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
727
+ expiresIn: expiresIn,
728
+ unhoistableHeaders: unhoistableHeaders,
729
+ })];
730
+ }
731
+ case 'copyObject': {
732
+ cmd = new client_s3_1.CopyObjectCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
733
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
734
+ expiresIn: expiresIn,
735
+ unhoistableHeaders: unhoistableHeaders,
736
+ })];
737
+ }
738
+ case 'uploadPart': {
739
+ cmd = new client_s3_1.UploadPartCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
740
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
741
+ expiresIn: expiresIn,
742
+ unhoistableHeaders: unhoistableHeaders,
743
+ })];
744
+ }
745
+ case 'uploadPartCopy': {
746
+ cmd = new client_s3_1.UploadPartCopyCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
747
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
748
+ expiresIn: expiresIn,
749
+ unhoistableHeaders: unhoistableHeaders,
750
+ })];
751
+ }
752
+ case 'listObjectsV2': {
753
+ cmd = new client_s3_1.ListObjectsV2Command(__assign({ Bucket: options.bucket }, options.params));
754
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
755
+ expiresIn: expiresIn,
756
+ unhoistableHeaders: unhoistableHeaders,
757
+ })];
758
+ }
759
+ case 'createMultipartUpload': {
760
+ cmd = new client_s3_1.CreateMultipartUploadCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
761
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
762
+ expiresIn: expiresIn,
763
+ unhoistableHeaders: unhoistableHeaders,
764
+ })];
765
+ }
766
+ case 'completeMultipartUpload': {
767
+ cmd = new client_s3_1.CompleteMultipartUploadCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
768
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
769
+ expiresIn: expiresIn,
770
+ unhoistableHeaders: unhoistableHeaders,
771
+ })];
772
+ }
773
+ case 'abortMultipartUpload': {
774
+ cmd = new client_s3_1.AbortMultipartUploadCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
775
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
776
+ expiresIn: expiresIn,
777
+ unhoistableHeaders: unhoistableHeaders,
778
+ })];
779
+ }
780
+ case 'listParts': {
781
+ cmd = new client_s3_1.ListPartsCommand(__assign({ Bucket: options.bucket, Key: options.key }, options.params));
782
+ return [2 /*return*/, (0, s3_request_presigner_1.getSignedUrl)(this.s3, cmd, {
783
+ expiresIn: expiresIn,
784
+ unhoistableHeaders: unhoistableHeaders,
785
+ })];
786
+ }
787
+ }
788
+ return [2 /*return*/];
789
+ });
790
+ });
791
+ };
700
792
  return SimpleAWS;
701
793
  }());
702
794
  exports.SimpleAWS = SimpleAWS;