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.
- package/dist/aws/simple.d.ts +4 -2
- package/dist/aws/simple.js +87 -18
- package/package.json +3 -2
- package/src/aws/simple.ts +57 -10
package/dist/aws/simple.d.ts
CHANGED
|
@@ -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: (
|
|
24
|
-
|
|
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;
|
package/dist/aws/simple.js
CHANGED
|
@@ -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 (
|
|
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[" +
|
|
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.
|
|
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[" +
|
|
346
|
+
logger.debug("Upload item[" + key + "] into bucket[" + bucket + "]");
|
|
311
347
|
return [4 /*yield*/, this.s3
|
|
312
348
|
.upload({
|
|
313
|
-
Bucket:
|
|
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,
|
|
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
|
-
|
|
432
|
-
logger.debug("No Queue[" + queueName + "] exists due to " +
|
|
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,
|
|
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
|
-
|
|
465
|
-
logger.debug("No bucket[" + bucketName + "] exists due to " +
|
|
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,
|
|
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
|
-
|
|
516
|
-
logger.debug("No table[" + tableName + "] exists due to " +
|
|
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.
|
|
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": "
|
|
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
|
-
|
|
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[${
|
|
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
|
-
|
|
282
|
+
bucket: string,
|
|
262
283
|
localPath: string,
|
|
263
284
|
key: string,
|
|
264
285
|
): Promise<string> => {
|
|
265
|
-
logger.debug(`Upload item[${key}] into bucket[${
|
|
286
|
+
logger.debug(`Upload item[${key}] into bucket[${bucket}]`);
|
|
266
287
|
const putResult = await this.s3
|
|
267
288
|
.upload({
|
|
268
|
-
Bucket:
|
|
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,
|