quidproquo-actionprocessor-awslambda 0.0.234 → 0.0.235

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.
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getFileIsColdStorageActionProcessor: ActionProcessorListResolver;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getFileIsColdStorageActionProcessor = void 0;
13
+ const quidproquo_config_aws_1 = require("quidproquo-config-aws");
14
+ const quidproquo_core_1 = require("quidproquo-core");
15
+ const getObjectStorageClass_1 = require("../../../logic/s3/getObjectStorageClass");
16
+ const utils_1 = require("./utils");
17
+ const getProcessFileIsColdStorage = (qpqConfig) => {
18
+ return ({ drive, filepath }) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const s3BucketName = (0, utils_1.resolveStorageDriveBucketName)(drive, qpqConfig);
20
+ const isColdStorage = (yield (0, getObjectStorageClass_1.getObjectStorageClass)(s3BucketName, filepath, quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';
21
+ return (0, quidproquo_core_1.actionResult)(isColdStorage);
22
+ });
23
+ };
24
+ const getFileIsColdStorageActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
25
+ return ({
26
+ [quidproquo_core_1.FileActionType.IsColdStorage]: getProcessFileIsColdStorage(qpqConfig),
27
+ });
28
+ });
29
+ exports.getFileIsColdStorageActionProcessor = getFileIsColdStorageActionProcessor;
@@ -16,8 +16,15 @@ const s3Utils_1 = require("../../../logic/s3/s3Utils");
16
16
  const utils_1 = require("./utils");
17
17
  const getProcessFileReadTextContents = (qpqConfig) => {
18
18
  return ({ drive, filepath }) => __awaiter(void 0, void 0, void 0, function* () {
19
- const s3BucketName = (0, utils_1.resolveStorageDriveBucketName)(drive, qpqConfig);
20
- return (0, quidproquo_core_1.actionResult)(yield (0, s3Utils_1.readTextFile)(s3BucketName, filepath, quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
19
+ try {
20
+ const s3BucketName = (0, utils_1.resolveStorageDriveBucketName)(drive, qpqConfig);
21
+ return (0, quidproquo_core_1.actionResult)(yield (0, s3Utils_1.readTextFile)(s3BucketName, filepath, quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
22
+ }
23
+ catch (error) {
24
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
25
+ InvalidObjectState: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.FileReadTextContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
26
+ });
27
+ }
21
28
  });
22
29
  };
23
30
  const getFileReadTextContentsActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
@@ -13,12 +13,13 @@ exports.getFileActionProcessor = void 0;
13
13
  const getFileDeleteActionProcessor_1 = require("./getFileDeleteActionProcessor");
14
14
  const getFileExistsActionProcessor_1 = require("./getFileExistsActionProcessor");
15
15
  const getFileGenerateTemporarySecureUrlActionProcessor_1 = require("./getFileGenerateTemporarySecureUrlActionProcessor");
16
+ const getFileIsColdStorageActionProcessor_1 = require("./getFileIsColdStorageActionProcessor");
16
17
  const getFileListDirectoryActionProcessor_1 = require("./getFileListDirectoryActionProcessor");
17
18
  const getFileReadBinaryContentsActionProcessor_1 = require("./getFileReadBinaryContentsActionProcessor");
18
19
  const getFileReadTextContentsActionProcessor_1 = require("./getFileReadTextContentsActionProcessor");
19
20
  const getFileWriteBinaryContentsActionProcessor_1 = require("./getFileWriteBinaryContentsActionProcessor");
20
21
  const getFileWriteTextContentsActionProcessor_1 = require("./getFileWriteTextContentsActionProcessor");
21
22
  const getFileActionProcessor = (qpqConfig, dynamicModuleLoader) => __awaiter(void 0, void 0, void 0, function* () {
22
- return (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, getFileDeleteActionProcessor_1.getFileDeleteActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileExistsActionProcessor_1.getFileExistsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileGenerateTemporarySecureUrlActionProcessor_1.getFileGenerateTemporarySecureUrlActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileListDirectoryActionProcessor_1.getFileListDirectoryActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileReadTextContentsActionProcessor_1.getFileReadTextContentsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileWriteTextContentsActionProcessor_1.getFileWriteTextContentsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileReadBinaryContentsActionProcessor_1.getFileReadBinaryContentsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileWriteBinaryContentsActionProcessor_1.getFileWriteBinaryContentsActionProcessor)(qpqConfig, dynamicModuleLoader))));
23
+ return (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, getFileDeleteActionProcessor_1.getFileDeleteActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileExistsActionProcessor_1.getFileExistsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileGenerateTemporarySecureUrlActionProcessor_1.getFileGenerateTemporarySecureUrlActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileIsColdStorageActionProcessor_1.getFileIsColdStorageActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileListDirectoryActionProcessor_1.getFileListDirectoryActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileReadTextContentsActionProcessor_1.getFileReadTextContentsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileWriteTextContentsActionProcessor_1.getFileWriteTextContentsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileReadBinaryContentsActionProcessor_1.getFileReadBinaryContentsActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getFileWriteBinaryContentsActionProcessor_1.getFileWriteBinaryContentsActionProcessor)(qpqConfig, dynamicModuleLoader))));
23
24
  });
24
25
  exports.getFileActionProcessor = getFileActionProcessor;
@@ -0,0 +1 @@
1
+ export declare const getObjectStorageClass: (bucketName: string, key: string, region: string) => Promise<'cold_storage' | 'standard'>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getObjectStorageClass = void 0;
13
+ const client_s3_1 = require("@aws-sdk/client-s3");
14
+ const createAwsClient_1 = require("../createAwsClient");
15
+ const getObjectStorageClass = (bucketName, key, region) => __awaiter(void 0, void 0, void 0, function* () {
16
+ const s3Client = (0, createAwsClient_1.createAwsClient)(client_s3_1.S3Client, { region });
17
+ const response = yield s3Client.send(new client_s3_1.HeadObjectCommand({
18
+ Key: key,
19
+ Bucket: bucketName,
20
+ }));
21
+ // Map AWS StorageClass to our custom labels
22
+ switch (response.StorageClass) {
23
+ case 'GLACIER':
24
+ case 'GLACIER_IR':
25
+ case 'DEEP_ARCHIVE':
26
+ case 'ONEZONE_IA':
27
+ case 'EXPRESS_ONEZONE':
28
+ case 'OUTPOSTS':
29
+ case 'SNOW':
30
+ return 'cold_storage';
31
+ case 'STANDARD_IA':
32
+ case 'STANDARD':
33
+ case 'INTELLIGENT_TIERING':
34
+ case 'REDUCED_REDUNDANCY':
35
+ default:
36
+ return 'standard';
37
+ }
38
+ });
39
+ exports.getObjectStorageClass = getObjectStorageClass;
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getFileIsColdStorageActionProcessor: ActionProcessorListResolver;
@@ -0,0 +1,14 @@
1
+ import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
+ import { actionResult, FileActionType, } from 'quidproquo-core';
3
+ import { getObjectStorageClass } from '../../../logic/s3/getObjectStorageClass';
4
+ import { resolveStorageDriveBucketName } from './utils';
5
+ const getProcessFileIsColdStorage = (qpqConfig) => {
6
+ return async ({ drive, filepath }) => {
7
+ const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
8
+ const isColdStorage = (await getObjectStorageClass(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';
9
+ return actionResult(isColdStorage);
10
+ };
11
+ };
12
+ export const getFileIsColdStorageActionProcessor = async (qpqConfig) => ({
13
+ [FileActionType.IsColdStorage]: getProcessFileIsColdStorage(qpqConfig),
14
+ });
@@ -1,11 +1,18 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, FileActionType, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileReadTextContentsErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { readTextFile } from '../../../logic/s3/s3Utils';
4
4
  import { resolveStorageDriveBucketName } from './utils';
5
5
  const getProcessFileReadTextContents = (qpqConfig) => {
6
6
  return async ({ drive, filepath }) => {
7
- const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
8
- return actionResult(await readTextFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
7
+ try {
8
+ const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
+ return actionResult(await readTextFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
10
+ }
11
+ catch (error) {
12
+ return actionResultErrorFromCaughtError(error, {
13
+ InvalidObjectState: () => actionResultError(FileReadTextContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
14
+ });
15
+ }
9
16
  };
10
17
  };
11
18
  export const getFileReadTextContentsActionProcessor = async (qpqConfig) => ({
@@ -1,6 +1,7 @@
1
1
  import { getFileDeleteActionProcessor } from './getFileDeleteActionProcessor';
2
2
  import { getFileExistsActionProcessor } from './getFileExistsActionProcessor';
3
3
  import { getFileGenerateTemporarySecureUrlActionProcessor } from './getFileGenerateTemporarySecureUrlActionProcessor';
4
+ import { getFileIsColdStorageActionProcessor } from './getFileIsColdStorageActionProcessor';
4
5
  import { getFileListDirectoryActionProcessor } from './getFileListDirectoryActionProcessor';
5
6
  import { getFileReadBinaryContentsActionProcessor } from './getFileReadBinaryContentsActionProcessor';
6
7
  import { getFileReadTextContentsActionProcessor } from './getFileReadTextContentsActionProcessor';
@@ -10,6 +11,7 @@ export const getFileActionProcessor = async (qpqConfig, dynamicModuleLoader) =>
10
11
  ...(await getFileDeleteActionProcessor(qpqConfig, dynamicModuleLoader)),
11
12
  ...(await getFileExistsActionProcessor(qpqConfig, dynamicModuleLoader)),
12
13
  ...(await getFileGenerateTemporarySecureUrlActionProcessor(qpqConfig, dynamicModuleLoader)),
14
+ ...(await getFileIsColdStorageActionProcessor(qpqConfig, dynamicModuleLoader)),
13
15
  ...(await getFileListDirectoryActionProcessor(qpqConfig, dynamicModuleLoader)),
14
16
  ...(await getFileReadTextContentsActionProcessor(qpqConfig, dynamicModuleLoader)),
15
17
  ...(await getFileWriteTextContentsActionProcessor(qpqConfig, dynamicModuleLoader)),
@@ -0,0 +1 @@
1
+ export declare const getObjectStorageClass: (bucketName: string, key: string, region: string) => Promise<'cold_storage' | 'standard'>;
@@ -0,0 +1,26 @@
1
+ import { HeadObjectCommand, S3Client } from '@aws-sdk/client-s3';
2
+ import { createAwsClient } from '../createAwsClient';
3
+ export const getObjectStorageClass = async (bucketName, key, region) => {
4
+ const s3Client = createAwsClient(S3Client, { region });
5
+ const response = await s3Client.send(new HeadObjectCommand({
6
+ Key: key,
7
+ Bucket: bucketName,
8
+ }));
9
+ // Map AWS StorageClass to our custom labels
10
+ switch (response.StorageClass) {
11
+ case 'GLACIER':
12
+ case 'GLACIER_IR':
13
+ case 'DEEP_ARCHIVE':
14
+ case 'ONEZONE_IA':
15
+ case 'EXPRESS_ONEZONE':
16
+ case 'OUTPOSTS':
17
+ case 'SNOW':
18
+ return 'cold_storage';
19
+ case 'STANDARD_IA':
20
+ case 'STANDARD':
21
+ case 'INTELLIGENT_TIERING':
22
+ case 'REDUCED_REDUNDANCY':
23
+ default:
24
+ return 'standard';
25
+ }
26
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quidproquo-actionprocessor-awslambda",
3
- "version": "0.0.234",
3
+ "version": "0.0.235",
4
4
  "description": "",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -55,9 +55,9 @@
55
55
  "lodash": "^4.17.21",
56
56
  "node-cache": "^5.1.2",
57
57
  "node-match-path": "^0.6.3",
58
- "quidproquo-config-aws": "0.0.234",
59
- "quidproquo-core": "0.0.234",
60
- "quidproquo-webserver": "0.0.234"
58
+ "quidproquo-config-aws": "0.0.235",
59
+ "quidproquo-core": "0.0.235",
60
+ "quidproquo-webserver": "0.0.235"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/aws-lambda": "^8.10.109",
@@ -65,7 +65,7 @@
65
65
  "@types/jsonwebtoken": "^9.0.2",
66
66
  "@types/lodash": "^4.14.194",
67
67
  "@types/node": "^18.11.9",
68
- "quidproquo-tsconfig": "0.0.234",
68
+ "quidproquo-tsconfig": "0.0.235",
69
69
  "typescript": "^4.9.3"
70
70
  }
71
71
  }