serverless-simple-middleware 0.0.52 → 0.0.56

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.
@@ -20,8 +20,10 @@ export declare class SimpleAWS {
20
20
  retainMessage: (queueName: string, handle: string, seconds: number) => Promise<string>;
21
21
  completeMessage: (queueName: string, handle: string) => Promise<string>;
22
22
  completeMessages: (queueName: string, handles: string[]) => Promise<string[]>;
23
- download: (bucketName: string, key: string, localPath: string) => Promise<string>;
24
- upload: (bucketName: string, localPath: string, key: string) => Promise<string>;
23
+ download: (bucket: string, key: string, localPath: string) => Promise<string>;
24
+ readFile: (bucket: string, key: string) => Promise<string>;
25
+ upload: (bucket: string, localPath: string, key: string) => Promise<string>;
26
+ writeFile: (bucket: string, key: string, content: string) => Promise<void>;
25
27
  getSignedUrl: (bucketName: string, key: string, operation?: "getObject" | "putObject", params?: S3SignedUrlParams | undefined) => S3SignedUrlResult;
26
28
  getSignedCookie: (keyPairId: string, privateKey: string, url: string, expires: number) => AWS.CloudFront.Signer.CustomPolicy;
27
29
  getAttachmentUrl: (bucketName: string, key: string, fileName: string, params?: S3SignedUrlParams | undefined) => S3SignedUrlResult;
@@ -48,6 +48,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  Object.defineProperty(exports, "__esModule", { value: true });
49
49
  var AWS = require("aws-sdk"); // tslint:disable-line
50
50
  var fs = require("fs");
51
+ var os = require("os");
52
+ var non_secure_1 = require("nanoid/non-secure");
51
53
  var utils_1 = require("../utils");
52
54
  var config_1 = require("./config");
53
55
  var define_1 = require("./define");
@@ -283,15 +285,12 @@ var SimpleAWS = /** @class */ (function () {
283
285
  }
284
286
  });
285
287
  }); };
286
- this.download = function (bucketName, key, localPath) { return __awaiter(_this, void 0, void 0, function () {
288
+ this.download = function (bucket, key, localPath) { return __awaiter(_this, void 0, void 0, function () {
287
289
  var stream;
288
290
  return __generator(this, function (_a) {
289
- logger.debug("Get a stream of item[" + key + "] from bucket[" + bucketName + "]");
291
+ logger.debug("Get a stream of item[" + key + "] from bucket[" + bucket + "]");
290
292
  stream = this.s3
291
- .getObject({
292
- Bucket: bucketName,
293
- Key: key,
294
- })
293
+ .getObject({ Bucket: bucket, Key: key })
295
294
  .createReadStream();
296
295
  return [2 /*return*/, new Promise(function (resolve, reject) {
297
296
  return stream
@@ -302,15 +301,52 @@ var SimpleAWS = /** @class */ (function () {
302
301
  })];
303
302
  });
304
303
  }); };
305
- this.upload = function (bucketName, localPath, key) { return __awaiter(_this, void 0, void 0, function () {
304
+ this.readFile = function (bucket, key) { return __awaiter(_this, void 0, void 0, function () {
305
+ var tempFile, content, error_1;
306
+ return __generator(this, function (_a) {
307
+ switch (_a.label) {
308
+ case 0:
309
+ logger.debug("Read item[" + key + "] from bucket[" + bucket + "]");
310
+ tempFile = os.tmpdir() + "/" + non_secure_1.nanoid();
311
+ _a.label = 1;
312
+ case 1:
313
+ _a.trys.push([1, , 4, 9]);
314
+ return [4 /*yield*/, this.download(bucket, key, tempFile)];
315
+ case 2:
316
+ _a.sent();
317
+ return [4 /*yield*/, fs.promises.readFile(tempFile, {
318
+ encoding: 'utf-8',
319
+ })];
320
+ case 3:
321
+ content = _a.sent();
322
+ return [2 /*return*/, content];
323
+ case 4:
324
+ if (!fs.existsSync(tempFile)) return [3 /*break*/, 8];
325
+ _a.label = 5;
326
+ case 5:
327
+ _a.trys.push([5, 7, , 8]);
328
+ return [4 /*yield*/, fs.promises.unlink(tempFile)];
329
+ case 6:
330
+ _a.sent();
331
+ return [3 /*break*/, 8];
332
+ case 7:
333
+ error_1 = _a.sent();
334
+ logger.error("Failed to delete temp file " + tempFile + ": " + utils_1.stringifyError(error_1));
335
+ return [3 /*break*/, 8];
336
+ case 8: return [7 /*endfinally*/];
337
+ case 9: return [2 /*return*/];
338
+ }
339
+ });
340
+ }); };
341
+ this.upload = function (bucket, localPath, key) { return __awaiter(_this, void 0, void 0, function () {
306
342
  var putResult;
307
343
  return __generator(this, function (_a) {
308
344
  switch (_a.label) {
309
345
  case 0:
310
- logger.debug("Upload item[" + key + "] into bucket[" + bucketName + "]");
346
+ logger.debug("Upload item[" + key + "] into bucket[" + bucket + "]");
311
347
  return [4 /*yield*/, this.s3
312
348
  .upload({
313
- Bucket: bucketName,
349
+ Bucket: bucket,
314
350
  Key: key,
315
351
  Body: fs.createReadStream(localPath),
316
352
  })
@@ -322,6 +358,39 @@ var SimpleAWS = /** @class */ (function () {
322
358
  }
323
359
  });
324
360
  }); };
361
+ this.writeFile = function (bucket, key, content) { return __awaiter(_this, void 0, void 0, function () {
362
+ var tempFile;
363
+ return __generator(this, function (_a) {
364
+ switch (_a.label) {
365
+ case 0:
366
+ logger.debug("Write item[" + key + "] into bucket[" + bucket + "]");
367
+ tempFile = os.tmpdir() + "/" + non_secure_1.nanoid();
368
+ _a.label = 1;
369
+ case 1:
370
+ _a.trys.push([1, , 4, 5]);
371
+ return [4 /*yield*/, fs.promises.writeFile(tempFile, content, 'utf-8')];
372
+ case 2:
373
+ _a.sent();
374
+ return [4 /*yield*/, this.upload(bucket, tempFile, key)];
375
+ case 3:
376
+ _a.sent();
377
+ return [3 /*break*/, 5];
378
+ case 4:
379
+ if (!fs.existsSync(tempFile)) {
380
+ return [2 /*return*/];
381
+ }
382
+ fs.unlink(tempFile, function (error) {
383
+ if (!error) {
384
+ return;
385
+ }
386
+ var msg = "Error during writeFile: unlink file " + tempFile + ": " + utils_1.stringifyError(error);
387
+ logger.error(msg);
388
+ });
389
+ return [7 /*endfinally*/];
390
+ case 5: return [2 /*return*/];
391
+ }
392
+ });
393
+ }); };
325
394
  this.getSignedUrl = function (bucketName, key, operation, params) {
326
395
  if (operation === void 0) { operation = 'getObject'; }
327
396
  return {
@@ -405,7 +474,7 @@ var SimpleAWS = /** @class */ (function () {
405
474
  }); };
406
475
  // Setup
407
476
  this.setupQueue = function (queueName) { return __awaiter(_this, void 0, void 0, function () {
408
- var listResult, _i, _a, queueUrl, error_1, createResult;
477
+ var listResult, _i, _a, queueUrl, error_2, createResult;
409
478
  return __generator(this, function (_b) {
410
479
  switch (_b.label) {
411
480
  case 0:
@@ -428,8 +497,8 @@ var SimpleAWS = /** @class */ (function () {
428
497
  }
429
498
  return [3 /*break*/, 3];
430
499
  case 2:
431
- error_1 = _b.sent();
432
- logger.debug("No Queue[" + queueName + "] exists due to " + error_1);
500
+ error_2 = _b.sent();
501
+ logger.debug("No Queue[" + queueName + "] exists due to " + error_2);
433
502
  return [3 /*break*/, 3];
434
503
  case 3:
435
504
  logger.debug("Create a queue[" + queueName + "] newly.");
@@ -446,7 +515,7 @@ var SimpleAWS = /** @class */ (function () {
446
515
  });
447
516
  }); };
448
517
  this.setupStorage = function (bucketName, cors) { return __awaiter(_this, void 0, void 0, function () {
449
- var listResult, error_2, createResult, corsResult;
518
+ var listResult, error_3, createResult, corsResult;
450
519
  return __generator(this, function (_a) {
451
520
  switch (_a.label) {
452
521
  case 0:
@@ -461,8 +530,8 @@ var SimpleAWS = /** @class */ (function () {
461
530
  }
462
531
  return [3 /*break*/, 3];
463
532
  case 2:
464
- error_2 = _a.sent();
465
- logger.debug("No bucket[" + bucketName + "] exists due to " + error_2);
533
+ error_3 = _a.sent();
534
+ logger.debug("No bucket[" + bucketName + "] exists due to " + error_3);
466
535
  return [3 /*break*/, 3];
467
536
  case 3:
468
537
  logger.debug("Create a bucket[" + bucketName + "] newly.");
@@ -498,7 +567,7 @@ var SimpleAWS = /** @class */ (function () {
498
567
  });
499
568
  }); };
500
569
  this.setupDynamoDb = function (tableName, keyColumn) { return __awaiter(_this, void 0, void 0, function () {
501
- var listResult, error_3, createResult;
570
+ var listResult, error_4, createResult;
502
571
  return __generator(this, function (_a) {
503
572
  switch (_a.label) {
504
573
  case 0:
@@ -512,8 +581,8 @@ var SimpleAWS = /** @class */ (function () {
512
581
  }
513
582
  return [3 /*break*/, 3];
514
583
  case 2:
515
- error_3 = _a.sent();
516
- logger.debug("No table[" + tableName + "] exists due to " + error_3);
584
+ error_4 = _a.sent();
585
+ logger.debug("No table[" + tableName + "] exists due to " + error_4);
517
586
  return [3 /*break*/, 3];
518
587
  case 3:
519
588
  logger.debug("Create a table[" + tableName + "] newly.");
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "serverless-simple-middleware",
3
3
  "description": "Simple middleware to translate the interface of lambda's handler to request => response",
4
- "version": "0.0.52",
4
+ "version": "0.0.56",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "author": "VoyagerX",
@@ -30,6 +30,7 @@
30
30
  "@types/mysql": "^2.15.5",
31
31
  "cross-fetch": "^2.2.2",
32
32
  "mysql": "^2.16.0",
33
+ "nanoid": "4.0.2",
33
34
  "p-limit": "^2.0.0",
34
35
  "simple-staging": "^0.0.12",
35
36
  "ts-enum-util": "^3.1.0",
@@ -41,7 +42,7 @@
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/jest": "^23.3.1",
44
- "@types/node": "8",
45
+ "@types/node": "11",
45
46
  "@types/uuid": "^3.4.4",
46
47
  "babel-core": "6.26.0",
47
48
  "babel-jest": "^23.4.2",
package/src/aws/simple.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import * as AWS from 'aws-sdk'; // tslint:disable-line
2
2
  import * as fs from 'fs';
3
+ import * as os from 'os';
4
+ import { nanoid } from 'nanoid/non-secure';
3
5
 
4
- import { getLogger } from '../utils';
6
+ import { getLogger, stringifyError } from '../utils';
5
7
  import { SimpleAWSConfig } from './config';
6
8
 
7
9
  import {
@@ -237,16 +239,13 @@ export class SimpleAWS {
237
239
  };
238
240
 
239
241
  public download = async (
240
- bucketName: string,
242
+ bucket: string,
241
243
  key: string,
242
244
  localPath: string,
243
245
  ): Promise<string> => {
244
- logger.debug(`Get a stream of item[${key}] from bucket[${bucketName}]`);
246
+ logger.debug(`Get a stream of item[${key}] from bucket[${bucket}]`);
245
247
  const stream = this.s3
246
- .getObject({
247
- Bucket: bucketName,
248
- Key: key,
249
- })
248
+ .getObject({ Bucket: bucket, Key: key })
250
249
  .createReadStream();
251
250
  return new Promise<string>((resolve, reject) =>
252
251
  stream
@@ -257,15 +256,37 @@ export class SimpleAWS {
257
256
  );
258
257
  };
259
258
 
259
+ public readFile = async (bucket: string, key: string): Promise<string> => {
260
+ logger.debug(`Read item[${key}] from bucket[${bucket}]`);
261
+ const tempFile = `${os.tmpdir()}/${nanoid()}`;
262
+ try {
263
+ await this.download(bucket, key, tempFile);
264
+ const content = await fs.promises.readFile(tempFile, {
265
+ encoding: 'utf-8',
266
+ });
267
+ return content;
268
+ } finally {
269
+ if (fs.existsSync(tempFile)) {
270
+ try {
271
+ await fs.promises.unlink(tempFile);
272
+ } catch (error) {
273
+ logger.error(
274
+ `Failed to delete temp file ${tempFile}: ${stringifyError(error)}`,
275
+ );
276
+ }
277
+ }
278
+ }
279
+ };
280
+
260
281
  public upload = async (
261
- bucketName: string,
282
+ bucket: string,
262
283
  localPath: string,
263
284
  key: string,
264
285
  ): Promise<string> => {
265
- logger.debug(`Upload item[${key}] into bucket[${bucketName}]`);
286
+ logger.debug(`Upload item[${key}] into bucket[${bucket}]`);
266
287
  const putResult = await this.s3
267
288
  .upload({
268
- Bucket: bucketName,
289
+ Bucket: bucket,
269
290
  Key: key,
270
291
  Body: fs.createReadStream(localPath),
271
292
  })
@@ -274,6 +295,32 @@ export class SimpleAWS {
274
295
  return key;
275
296
  };
276
297
 
298
+ public writeFile = async (
299
+ bucket: string,
300
+ key: string,
301
+ content: string,
302
+ ): Promise<void> => {
303
+ logger.debug(`Write item[${key}] into bucket[${bucket}]`);
304
+ const tempFile = `${os.tmpdir()}/${nanoid()}`;
305
+ try {
306
+ await fs.promises.writeFile(tempFile, content, 'utf-8');
307
+ await this.upload(bucket, tempFile, key);
308
+ } finally {
309
+ if (!fs.existsSync(tempFile)) {
310
+ return;
311
+ }
312
+ fs.unlink(tempFile, error => {
313
+ if (!error) {
314
+ return;
315
+ }
316
+ const msg = `Error during writeFile: unlink file ${tempFile}: ${stringifyError(
317
+ error,
318
+ )}`;
319
+ logger.error(msg);
320
+ });
321
+ }
322
+ };
323
+
277
324
  public getSignedUrl = (
278
325
  bucketName: string,
279
326
  key: string,