@sylvesterllc/aws-constructs 1.1.11 → 1.1.13
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/.github/workflows/publish.yml +58 -38
- package/__tests__/app-config.test.ts +32 -32
- package/__tests__/data/testConfig.ts +146 -146
- package/__tests__/mocks/ResourceMock.ts +9 -9
- package/__tests__/router.test.ts +194 -194
- package/dist/config/AppConfig.js +1 -1
- package/dist/config/Constants.js +1 -1
- package/dist/config/Environments.js +1 -1
- package/dist/config/MicroserviceAppConfig.js +1 -1
- package/dist/config/ServiceBundleConfig.js +1 -1
- package/dist/config/bishopConfig.js +1 -1
- package/dist/config/customConfigs/ApiAppConfig.js +1 -1
- package/dist/config/customConfigs/GlobalAppConfig.js +1 -1
- package/dist/config/customConfigs/IAppConfig.js +1 -1
- package/dist/config/customConfigs/ResourceAppConfig.js +1 -1
- package/dist/config/microServiceConfig.js +1 -1
- package/dist/config/types/LogDuration.js +1 -1
- package/dist/config/types/TsgAuthorizerProp.js +1 -1
- package/dist/config/types/TsgAuthorizerType.js +1 -1
- package/dist/config/types/TsgCdkConfigType.js +1 -1
- package/dist/config/types/TsgCognitoConfig.js +1 -1
- package/dist/config/types/TsgDnsConfig.js +1 -1
- package/dist/config/types/TsgDynamoDbProp.js +1 -1
- package/dist/config/types/TsgDynamoIndex.js +1 -1
- package/dist/config/types/TsgDynamoProp.js +1 -1
- package/dist/config/types/TsgDynamoTable.js +1 -1
- package/dist/config/types/TsgDynamoTableRef.js +1 -1
- package/dist/config/types/TsgEc2Prop.js +1 -1
- package/dist/config/types/TsgKeyPair.js +1 -1
- package/dist/config/types/TsgLambda.js +1 -1
- package/dist/config/types/TsgLambdaLayerProp.js +1 -1
- package/dist/config/types/TsgLambdaMap.js +1 -1
- package/dist/config/types/TsgLambdaName.js +1 -1
- package/dist/config/types/TsgLambdaNode.js +1 -1
- package/dist/config/types/TsgLambdaProp.js +1 -1
- package/dist/config/types/TsgLambdaProps.js +1 -1
- package/dist/config/types/TsgLambdaRoutable.js +1 -1
- package/dist/config/types/index.js +1 -1
- package/dist/constants/aws-service-principal-constants.d.ts +3 -0
- package/dist/constants/aws-service-principal-constants.js +7 -0
- package/dist/constructs/DynamoDbSingleTable.js +1 -1
- package/dist/constructs/MicroService.js +1 -1
- package/dist/constructs/index.d.ts +1 -0
- package/dist/constructs/index.js +4 -2
- package/dist/constructs/timer-job.d.ts +6 -0
- package/dist/constructs/timer-job.js +15 -0
- package/dist/helpers/logger.js +1 -1
- package/dist/helpers/util-helper.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +18 -4
- package/dist/interfaces/ApiLambdaResult.js +1 -1
- package/dist/interfaces/BaseResourceProps.js +1 -1
- package/dist/interfaces/CreateLambdaFunctionInput.js +1 -1
- package/dist/interfaces/MicroserviceProps.js +1 -1
- package/dist/interfaces/timer-job/index.d.ts +1 -0
- package/dist/interfaces/timer-job/index.js +18 -0
- package/dist/interfaces/timer-job/timer-job-props.d.ts +14 -0
- package/dist/interfaces/timer-job/timer-job-props.js +3 -0
- package/dist/resources/base/baseResource.js +1 -1
- package/dist/resources/base/tsgBaseResource.js +1 -1
- package/dist/resources/certificate/createCertificate.js +1 -1
- package/dist/resources/cognito/createCognito.js +1 -1
- package/dist/resources/cognito/createCognitoProps.js +1 -1
- package/dist/resources/customResource/createSeedDatabaseCustomResource.js +1 -1
- package/dist/resources/dynamodb/CreateDynamo.js +1 -1
- package/dist/resources/dynamodb/CreateDynamoSingleTableDesign.js +1 -1
- package/dist/resources/ec2/create-ec2-instance.js +3 -3
- package/dist/resources/ecr/CreateEcr.js +2 -2
- package/dist/resources/gateway/CreateApiAndAttachLambdas.js +1 -1
- package/dist/resources/gateway/createApi.js +1 -1
- package/dist/resources/gateway/createApiKey.js +1 -1
- package/dist/resources/helpers/createCommonLayer.js +1 -1
- package/dist/resources/helpers/createRoutes.js +1 -1
- package/dist/resources/index.js +1 -1
- package/dist/resources/lambda/create-basic-lambda.d.ts +3 -0
- package/dist/resources/lambda/create-basic-lambda.js +77 -0
- package/dist/resources/lambda/createLambda.js +1 -1
- package/dist/resources/lambda/lambdaHelper.js +1 -1
- package/dist/resources/lambda-authorizer/TsgJwtTokenAuthorizer.js +1 -1
- package/dist/resources/lambda-authorizer/TsgRequestAuthorizer.js +1 -1
- package/dist/resources/lambda-authorizer/createAuthorizerHelpers.js +1 -1
- package/dist/resources/lambda-layer/createLambdaLayer.js +1 -1
- package/dist/resources/layers/common/src/nodejs/api-response/responses.js +1 -1
- package/dist/resources/layers/common/src/nodejs/index.js +1 -1
- package/dist/resources/layers/common/src/nodejs/logger/IContext.js +1 -1
- package/dist/resources/layers/common/src/nodejs/logger/index.js +1 -1
- package/dist/resources/layers/common/src/nodejs/logger/logger.js +1 -1
- package/dist/resources/resources/iam/policyDocuments/cognitoPolicy.js +1 -1
- package/dist/resources/resources/iam/roles/createRole.js +1 -1
- package/dist/resources/route53/CreateZone.js +1 -1
- package/dist/resources/route53/create-zones.js +1 -1
- package/dist/resources/securityManager/index.js +1 -1
- package/jest.config.js +8 -8
- package/jest.config.ts.old +20 -20
- package/package.json +55 -56
- package/readme.md +147 -147
- package/src/config/AppConfig.ts +106 -106
- package/src/config/Constants.ts +26 -26
- package/src/config/Environments.ts +1 -1
- package/src/config/MicroserviceAppConfig.ts +8 -8
- package/src/config/ServiceBundleConfig.ts +17 -17
- package/src/config/bishopConfig.ts +82 -82
- package/src/config/customConfigs/ApiAppConfig.ts +5 -5
- package/src/config/customConfigs/GlobalAppConfig.ts +10 -10
- package/src/config/customConfigs/IAppConfig.ts +12 -12
- package/src/config/customConfigs/ResourceAppConfig.ts +15 -15
- package/src/config/microServiceConfig.ts +83 -83
- package/src/config/types/LogDuration.ts +7 -7
- package/src/config/types/TsgAuthorizerProp.ts +8 -8
- package/src/config/types/TsgAuthorizerType.ts +4 -4
- package/src/config/types/TsgCdkConfigType.ts +2 -2
- package/src/config/types/TsgCognitoConfig.ts +5 -5
- package/src/config/types/TsgDnsConfig.ts +10 -10
- package/src/config/types/TsgDynamoDbProp.ts +9 -9
- package/src/config/types/TsgDynamoIndex.ts +15 -15
- package/src/config/types/TsgDynamoProp.ts +16 -16
- package/src/config/types/TsgDynamoTable.ts +4 -4
- package/src/config/types/TsgDynamoTableRef.ts +3 -3
- package/src/config/types/TsgEc2Prop.ts +8 -8
- package/src/config/types/TsgKeyPair.ts +5 -5
- package/src/config/types/TsgLambda.ts +5 -5
- package/src/config/types/TsgLambdaLayerProp.ts +4 -4
- package/src/config/types/TsgLambdaMap.ts +3 -3
- package/src/config/types/TsgLambdaName.ts +3 -3
- package/src/config/types/TsgLambdaNode.ts +3 -3
- package/src/config/types/TsgLambdaProp.ts +19 -19
- package/src/config/types/TsgLambdaProps.ts +17 -17
- package/src/config/types/TsgLambdaRoutable.ts +8 -8
- package/src/config/types/index.ts +11 -11
- package/src/constants/aws-service-principal-constants.ts +3 -0
- package/src/constructs/DynamoDbSingleTable.ts +12 -12
- package/src/constructs/MicroService.ts +131 -132
- package/src/constructs/index.ts +4 -3
- package/src/constructs/timer-job.ts +17 -0
- package/src/helpers/logger.ts +12 -12
- package/src/helpers/util-helper.ts +19 -19
- package/src/index.ts +6 -5
- package/src/interfaces/ApiLambdaResult.ts +6 -6
- package/src/interfaces/BaseResourceProps.ts +6 -6
- package/src/interfaces/CreateLambdaFunctionInput.ts +10 -10
- package/src/interfaces/MicroserviceProps.ts +10 -10
- package/src/interfaces/timer-job/index.ts +1 -0
- package/src/interfaces/timer-job/timer-job-props.ts +17 -0
- package/src/resources/base/baseResource.ts +14 -14
- package/src/resources/base/tsgBaseResource.ts +21 -21
- package/src/resources/certificate/createCertificate.ts +57 -57
- package/src/resources/cognito/createCognito.ts +47 -47
- package/src/resources/cognito/createCognitoProps.ts +46 -46
- package/src/resources/customResource/createSeedDatabaseCustomResource.ts +36 -36
- package/src/resources/dynamodb/CreateDynamo.ts +110 -110
- package/src/resources/dynamodb/CreateDynamoSingleTableDesign.ts +111 -111
- package/src/resources/ec2/create-ec2-instance.ts +52 -52
- package/src/resources/ecr/CreateEcr.ts +57 -57
- package/src/resources/gateway/CreateApiAndAttachLambdas.ts +161 -161
- package/src/resources/gateway/createApi.ts +173 -173
- package/src/resources/gateway/createApiKey.ts +88 -88
- package/src/resources/helpers/createCommonLayer.ts +18 -18
- package/src/resources/helpers/createRoutes.ts +74 -74
- package/src/resources/index.ts +1 -1
- package/src/resources/lambda/create-basic-lambda.ts +104 -0
- package/src/resources/lambda/createLambda.ts +203 -200
- package/src/resources/lambda/lambdaHelper.ts +133 -133
- package/src/resources/lambda-authorizer/TsgJwtTokenAuthorizer.ts +107 -107
- package/src/resources/lambda-authorizer/TsgRequestAuthorizer.ts +44 -44
- package/src/resources/lambda-authorizer/createAuthorizerHelpers.ts +76 -76
- package/src/resources/lambda-layer/createLambdaLayer.ts +39 -39
- package/src/resources/layers/common/package.json +22 -22
- package/src/resources/layers/common/src/nodejs/api-response/responses.ts +41 -41
- package/src/resources/layers/common/src/nodejs/index.ts +3 -3
- package/src/resources/layers/common/src/nodejs/logger/IContext.ts +6 -6
- package/src/resources/layers/common/src/nodejs/logger/index.ts +1 -1
- package/src/resources/layers/common/src/nodejs/logger/logger.ts +10 -10
- package/src/resources/layers/common/tsconfig.json +7 -7
- package/src/resources/resources/iam/policyDocuments/cognitoPolicy.ts +54 -54
- package/src/resources/resources/iam/roles/createRole.ts +29 -29
- package/src/resources/route53/CreateZone.ts +61 -61
- package/src/resources/route53/create-zones.ts +40 -40
- package/src/resources/securityManager/index.ts +23 -23
- package/tsconfig.json +44 -42
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
import { Duration } from "aws-cdk-lib";
|
|
2
|
-
import { IdentitySource, RequestAuthorizer } from "aws-cdk-lib/aws-apigateway";
|
|
3
|
-
import { IFunction, LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
|
-
import { Construct } from "constructs";
|
|
5
|
-
import { AppConfig } from "../../config/AppConfig";
|
|
6
|
-
import { NodejsFunction, NodejsFunctionProps, SourceMapMode } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
7
|
-
import path = require("path");
|
|
8
|
-
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
9
|
-
import { ITableV2 } from "aws-cdk-lib/aws-dynamodb";
|
|
10
|
-
|
|
11
|
-
export const createAuthorizer = (scope: Construct, config: AppConfig, layers?: LayerVersion[],
|
|
12
|
-
tables?: ITableV2[]) => {
|
|
13
|
-
|
|
14
|
-
const lambda = createLambdaForAuthorizer(scope, config, layers, tables);
|
|
15
|
-
|
|
16
|
-
const lambdaAuthroizer = new RequestAuthorizer(
|
|
17
|
-
scope,
|
|
18
|
-
`lambdaAuthorizer`,
|
|
19
|
-
{
|
|
20
|
-
handler: lambda,
|
|
21
|
-
identitySources: [IdentitySource.header(config.RESOURCES.AUTHORIZER?.headerName!)],
|
|
22
|
-
authorizerName: `${config.AppPrefix}-authorizer`,
|
|
23
|
-
resultsCacheTtl: Duration.seconds(0),
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
return lambdaAuthroizer;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const createLambdaForAuthorizer = (scope: Construct, config: AppConfig, layers?: LayerVersion[], tables?: ITableV2[]) => {
|
|
31
|
-
|
|
32
|
-
const props = createLambdaProps(config, layers);
|
|
33
|
-
|
|
34
|
-
const lambda = new NodejsFunction(
|
|
35
|
-
scope,
|
|
36
|
-
`${config.AppPrefix}-authorizer`,
|
|
37
|
-
props
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
if (tables && tables.length > 0) {
|
|
41
|
-
tables.forEach((table) => {
|
|
42
|
-
table.grantReadData(lambda);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return lambda;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const createLambdaProps = (appConfig: AppConfig, layers?: LayerVersion[]) => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const prop = appConfig.RESOURCES.AUTHORIZER!;
|
|
53
|
-
|
|
54
|
-
const lambdaProp: NodejsFunctionProps = {
|
|
55
|
-
entry: path.join(prop.codePath),
|
|
56
|
-
functionName: `${appConfig.AppPrefix}-${prop.name}`,
|
|
57
|
-
handler: prop.handler,
|
|
58
|
-
logRetention: (!prop.logDuration) ? RetentionDays.FIVE_DAYS : RetentionDays.ONE_MONTH,
|
|
59
|
-
runtime: prop.runtime || appConfig.GLOBALS.stackRuntime,
|
|
60
|
-
timeout: prop.duration || Duration.minutes(2),
|
|
61
|
-
memorySize: prop.memory || 512,
|
|
62
|
-
environment: {
|
|
63
|
-
"VERBOSE_LOGGING": "true",
|
|
64
|
-
...prop.environment
|
|
65
|
-
},
|
|
66
|
-
bundling: {
|
|
67
|
-
minify: false,
|
|
68
|
-
target: 'esNext',
|
|
69
|
-
sourceMap: true,
|
|
70
|
-
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
71
|
-
environment: prop.environment || prop.environment,
|
|
72
|
-
},
|
|
73
|
-
layers
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return lambdaProp;
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { IdentitySource, RequestAuthorizer } from "aws-cdk-lib/aws-apigateway";
|
|
3
|
+
import { IFunction, LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
|
+
import { Construct } from "constructs";
|
|
5
|
+
import { AppConfig } from "../../config/AppConfig";
|
|
6
|
+
import { NodejsFunction, NodejsFunctionProps, SourceMapMode } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
7
|
+
import path = require("path");
|
|
8
|
+
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
9
|
+
import { ITableV2 } from "aws-cdk-lib/aws-dynamodb";
|
|
10
|
+
|
|
11
|
+
export const createAuthorizer = (scope: Construct, config: AppConfig, layers?: LayerVersion[],
|
|
12
|
+
tables?: ITableV2[]) => {
|
|
13
|
+
|
|
14
|
+
const lambda = createLambdaForAuthorizer(scope, config, layers, tables);
|
|
15
|
+
|
|
16
|
+
const lambdaAuthroizer = new RequestAuthorizer(
|
|
17
|
+
scope,
|
|
18
|
+
`lambdaAuthorizer`,
|
|
19
|
+
{
|
|
20
|
+
handler: lambda,
|
|
21
|
+
identitySources: [IdentitySource.header(config.RESOURCES.AUTHORIZER?.headerName!)],
|
|
22
|
+
authorizerName: `${config.AppPrefix}-authorizer`,
|
|
23
|
+
resultsCacheTtl: Duration.seconds(0),
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
return lambdaAuthroizer;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const createLambdaForAuthorizer = (scope: Construct, config: AppConfig, layers?: LayerVersion[], tables?: ITableV2[]) => {
|
|
31
|
+
|
|
32
|
+
const props = createLambdaProps(config, layers);
|
|
33
|
+
|
|
34
|
+
const lambda = new NodejsFunction(
|
|
35
|
+
scope,
|
|
36
|
+
`${config.AppPrefix}-authorizer`,
|
|
37
|
+
props
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
if (tables && tables.length > 0) {
|
|
41
|
+
tables.forEach((table) => {
|
|
42
|
+
table.grantReadData(lambda);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return lambda;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const createLambdaProps = (appConfig: AppConfig, layers?: LayerVersion[]) => {
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const prop = appConfig.RESOURCES.AUTHORIZER!;
|
|
53
|
+
|
|
54
|
+
const lambdaProp: NodejsFunctionProps = {
|
|
55
|
+
entry: path.join(prop.codePath),
|
|
56
|
+
functionName: `${appConfig.AppPrefix}-${prop.name}`,
|
|
57
|
+
handler: prop.handler,
|
|
58
|
+
logRetention: (!prop.logDuration) ? RetentionDays.FIVE_DAYS : RetentionDays.ONE_MONTH,
|
|
59
|
+
runtime: prop.runtime || appConfig.GLOBALS.stackRuntime,
|
|
60
|
+
timeout: prop.duration || Duration.minutes(2),
|
|
61
|
+
memorySize: prop.memory || 512,
|
|
62
|
+
environment: {
|
|
63
|
+
"VERBOSE_LOGGING": "true",
|
|
64
|
+
...prop.environment
|
|
65
|
+
},
|
|
66
|
+
bundling: {
|
|
67
|
+
minify: false,
|
|
68
|
+
target: 'esNext',
|
|
69
|
+
sourceMap: true,
|
|
70
|
+
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
71
|
+
environment: prop.environment || prop.environment,
|
|
72
|
+
},
|
|
73
|
+
layers
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return lambdaProp;
|
|
77
77
|
};
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { Code, LayerVersion, LayerVersionProps, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
2
|
-
import { Construct } from "constructs";
|
|
3
|
-
import { TsgLambdaLayerProp } from "../../config/types/TsgLambdaLayerProp";
|
|
4
|
-
import { MicroserviceProps } from "../../interfaces/MicroserviceProps";
|
|
5
|
-
import * as path from "path";
|
|
6
|
-
|
|
7
|
-
export const createLambdaLayer = (scope: Construct, globalProps: MicroserviceProps, prop: TsgLambdaLayerProp) => {
|
|
8
|
-
|
|
9
|
-
const propResult = createLambdaLayerProps(prop, globalProps);
|
|
10
|
-
|
|
11
|
-
const layer = new LayerVersion(scope, `${globalProps.GLOBALS.name}-common-layer`, propResult);
|
|
12
|
-
|
|
13
|
-
return layer;
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const createLambdaLayerProps = (prop: TsgLambdaLayerProp, props: MicroserviceProps) => {
|
|
18
|
-
|
|
19
|
-
const baseProps = baseLayerProps(props, prop.description);
|
|
20
|
-
|
|
21
|
-
const baseLayer: LayerVersionProps = {
|
|
22
|
-
...baseProps,
|
|
23
|
-
code: Code.fromAsset(path.join(prop.codePath),),
|
|
24
|
-
description: prop.description,
|
|
25
|
-
layerVersionName: `${prop.name}`
|
|
26
|
-
};
|
|
27
|
-
return baseLayer;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const baseLayerProps = (prop: MicroserviceProps, desc: string) => {
|
|
31
|
-
|
|
32
|
-
const baseLayerProps: LayerVersionProps = {
|
|
33
|
-
code: Code.fromAsset(path.join(''),),
|
|
34
|
-
compatibleRuntimes: [prop.GLOBALS.stackRuntime, Runtime.NODEJS_LATEST, Runtime.NODEJS_16_X],
|
|
35
|
-
license: 'Apache-2.0',
|
|
36
|
-
description: desc,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
return baseLayerProps;
|
|
1
|
+
import { Code, LayerVersion, LayerVersionProps, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { TsgLambdaLayerProp } from "../../config/types/TsgLambdaLayerProp";
|
|
4
|
+
import { MicroserviceProps } from "../../interfaces/MicroserviceProps";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
|
|
7
|
+
export const createLambdaLayer = (scope: Construct, globalProps: MicroserviceProps, prop: TsgLambdaLayerProp) => {
|
|
8
|
+
|
|
9
|
+
const propResult = createLambdaLayerProps(prop, globalProps);
|
|
10
|
+
|
|
11
|
+
const layer = new LayerVersion(scope, `${globalProps.GLOBALS.name}-common-layer`, propResult);
|
|
12
|
+
|
|
13
|
+
return layer;
|
|
14
|
+
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const createLambdaLayerProps = (prop: TsgLambdaLayerProp, props: MicroserviceProps) => {
|
|
18
|
+
|
|
19
|
+
const baseProps = baseLayerProps(props, prop.description);
|
|
20
|
+
|
|
21
|
+
const baseLayer: LayerVersionProps = {
|
|
22
|
+
...baseProps,
|
|
23
|
+
code: Code.fromAsset(path.join(prop.codePath),),
|
|
24
|
+
description: prop.description,
|
|
25
|
+
layerVersionName: `${prop.name}`
|
|
26
|
+
};
|
|
27
|
+
return baseLayer;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const baseLayerProps = (prop: MicroserviceProps, desc: string) => {
|
|
31
|
+
|
|
32
|
+
const baseLayerProps: LayerVersionProps = {
|
|
33
|
+
code: Code.fromAsset(path.join(''),),
|
|
34
|
+
compatibleRuntimes: [prop.GLOBALS.stackRuntime, Runtime.NODEJS_LATEST, Runtime.NODEJS_16_X],
|
|
35
|
+
license: 'Apache-2.0',
|
|
36
|
+
description: desc,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return baseLayerProps;
|
|
40
40
|
};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@davissylvester/bishop-common",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "Common Layers for Lambdas",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"test": "jest && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"keywords": [],
|
|
10
|
-
"author": "Davis Sylvester <Davis@sylvesterllc.com>",
|
|
11
|
-
"license": "ISC",
|
|
12
|
-
"dependencies": {
|
|
13
|
-
"@aws-sdk/client-dynamodb": "^3.137.0",
|
|
14
|
-
"@aws-sdk/lib-dynamodb": "^3.145.0",
|
|
15
|
-
"@aws-sdk/util-dynamodb": "^3.137.0",
|
|
16
|
-
"luxon": "^3.0.4",
|
|
17
|
-
"uuidv4": "^6.2.13"
|
|
18
|
-
},
|
|
19
|
-
"devDependencies": {
|
|
20
|
-
"@types/aws-lambda": "^8.10.111"
|
|
21
|
-
}
|
|
22
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@davissylvester/bishop-common",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Common Layers for Lambdas",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "jest && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [],
|
|
10
|
+
"author": "Davis Sylvester <Davis@sylvesterllc.com>",
|
|
11
|
+
"license": "ISC",
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@aws-sdk/client-dynamodb": "^3.137.0",
|
|
14
|
+
"@aws-sdk/lib-dynamodb": "^3.145.0",
|
|
15
|
+
"@aws-sdk/util-dynamodb": "^3.137.0",
|
|
16
|
+
"luxon": "^3.0.4",
|
|
17
|
+
"uuidv4": "^6.2.13"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/aws-lambda": "^8.10.111"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
export const badResponse = (errorMessage: string) => {
|
|
2
|
-
return {
|
|
3
|
-
statusCode: 400,
|
|
4
|
-
body: JSON.stringify({
|
|
5
|
-
message: errorMessage
|
|
6
|
-
}),
|
|
7
|
-
headers: {
|
|
8
|
-
"Access-Control-Allow-Origin": "*",
|
|
9
|
-
"Access-Control-Allow-Credentials": true,
|
|
10
|
-
},
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const okResponse = (data: Object) => {
|
|
16
|
-
return {
|
|
17
|
-
statusCode: 200,
|
|
18
|
-
body: JSON.stringify({
|
|
19
|
-
data
|
|
20
|
-
}),
|
|
21
|
-
headers: {
|
|
22
|
-
"Access-Control-Allow-Origin": "*",
|
|
23
|
-
"Access-Control-Allow-Credentials": true,
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const unauthorizedResponse = (data: object) => {
|
|
30
|
-
return {
|
|
31
|
-
statusCode: 401,
|
|
32
|
-
body: JSON.stringify({
|
|
33
|
-
data
|
|
34
|
-
}),
|
|
35
|
-
headers: {
|
|
36
|
-
"Access-Control-Allow-Origin": "*",
|
|
37
|
-
"Access-Control-Allow-Credentials": true,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
};
|
|
1
|
+
export const badResponse = (errorMessage: string) => {
|
|
2
|
+
return {
|
|
3
|
+
statusCode: 400,
|
|
4
|
+
body: JSON.stringify({
|
|
5
|
+
message: errorMessage
|
|
6
|
+
}),
|
|
7
|
+
headers: {
|
|
8
|
+
"Access-Control-Allow-Origin": "*",
|
|
9
|
+
"Access-Control-Allow-Credentials": true,
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const okResponse = (data: Object) => {
|
|
16
|
+
return {
|
|
17
|
+
statusCode: 200,
|
|
18
|
+
body: JSON.stringify({
|
|
19
|
+
data
|
|
20
|
+
}),
|
|
21
|
+
headers: {
|
|
22
|
+
"Access-Control-Allow-Origin": "*",
|
|
23
|
+
"Access-Control-Allow-Credentials": true,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const unauthorizedResponse = (data: object) => {
|
|
30
|
+
return {
|
|
31
|
+
statusCode: 401,
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
data
|
|
34
|
+
}),
|
|
35
|
+
headers: {
|
|
36
|
+
"Access-Control-Allow-Origin": "*",
|
|
37
|
+
"Access-Control-Allow-Credentials": true,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from "./logger/index";
|
|
2
|
-
export * from "./api-response/index";
|
|
3
|
-
|
|
1
|
+
export * from "./logger/index";
|
|
2
|
+
export * from "./api-response/index";
|
|
3
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface ILoggerContext {
|
|
2
|
-
|
|
3
|
-
functionName?: string;
|
|
4
|
-
name: string;
|
|
5
|
-
message: string;
|
|
6
|
-
|
|
1
|
+
export interface ILoggerContext {
|
|
2
|
+
|
|
3
|
+
functionName?: string;
|
|
4
|
+
name: string;
|
|
5
|
+
message: string;
|
|
6
|
+
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./IContext";
|
|
1
|
+
export * from "./IContext";
|
|
2
2
|
export * from "./logger";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ILoggerContext } from "./IContext";
|
|
2
|
-
|
|
3
|
-
export function logger(context: ILoggerContext) {
|
|
4
|
-
|
|
5
|
-
const showLogs = Boolean(process.env.VERBOSE_LOGGING || false);
|
|
6
|
-
|
|
7
|
-
if (showLogs) {
|
|
8
|
-
console.log(`### ${(context.functionName) ? `${context.functionName} :: ` : ''} ${(context.name) ? `${context.name} :: ` : ''} ${(context.message) ? `${context.message} :: ` : ''}`);
|
|
9
|
-
}
|
|
10
|
-
// ### run() ::
|
|
1
|
+
import { ILoggerContext } from "./IContext";
|
|
2
|
+
|
|
3
|
+
export function logger(context: ILoggerContext) {
|
|
4
|
+
|
|
5
|
+
const showLogs = Boolean(process.env.VERBOSE_LOGGING || false);
|
|
6
|
+
|
|
7
|
+
if (showLogs) {
|
|
8
|
+
console.log(`### ${(context.functionName) ? `${context.functionName} :: ` : ''} ${(context.name) ? `${context.name} :: ` : ''} ${(context.message) ? `${context.message} :: ` : ''}`);
|
|
9
|
+
}
|
|
10
|
+
// ### run() ::
|
|
11
11
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../../../tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "./dist/nodejs/node_modules/@davissylvester/bishop-common",
|
|
5
|
-
"skipLibCheck": true
|
|
6
|
-
}
|
|
7
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../../../tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "./dist/nodejs/node_modules/@davissylvester/bishop-common",
|
|
5
|
+
"skipLibCheck": true
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { IUserPool } from "aws-cdk-lib/aws-cognito";
|
|
2
|
-
import { Effect, PolicyDocument, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
3
|
-
import { MicroserviceProps } from "../../../../interfaces/MicroserviceProps";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export const cognitoPolicyDocument = (userPool: IUserPool, config: MicroserviceProps) => {
|
|
7
|
-
|
|
8
|
-
const cpd: PolicyDocument = new PolicyDocument({
|
|
9
|
-
|
|
10
|
-
statements: [
|
|
11
|
-
new PolicyStatement({
|
|
12
|
-
resources: [userPool.userPoolArn],
|
|
13
|
-
actions: [
|
|
14
|
-
"cognito:*",
|
|
15
|
-
"cognito-idp:ListUsers"
|
|
16
|
-
],
|
|
17
|
-
effect: Effect.ALLOW,
|
|
18
|
-
}),
|
|
19
|
-
new PolicyStatement({
|
|
20
|
-
effect: Effect.ALLOW,
|
|
21
|
-
actions: [
|
|
22
|
-
"logs:CreateLogGroup",
|
|
23
|
-
"logs:CreateLogStream",
|
|
24
|
-
"logs:DescribeLogGroups",
|
|
25
|
-
"logs:DescribeLogStreams",
|
|
26
|
-
"logs:PutLogEvents",
|
|
27
|
-
"logs:GetLogEvents",
|
|
28
|
-
"logs:FilterLogEvents"
|
|
29
|
-
],
|
|
30
|
-
resources: ["*"]
|
|
31
|
-
}),
|
|
32
|
-
new PolicyStatement({
|
|
33
|
-
resources: [`arn:aws:dynamodb:${config.GLOBALS.region}:${config.GLOBALS.accountNumber}:table/*`],
|
|
34
|
-
actions: [
|
|
35
|
-
"dynamodb:BatchGetItem",
|
|
36
|
-
"dynamodb:BatchWriteItem",
|
|
37
|
-
"dynamodb:ConditionCheckItem",
|
|
38
|
-
"dynamodb:DeleteItem",
|
|
39
|
-
"dynamodb:DescribeTable",
|
|
40
|
-
"dynamodb:GetItem",
|
|
41
|
-
"dynamodb:GetRecords",
|
|
42
|
-
"dynamodb:GetShardIterator",
|
|
43
|
-
"dynamodb:PutItem",
|
|
44
|
-
"dynamodb:Query",
|
|
45
|
-
"dynamodb:Scan",
|
|
46
|
-
"dynamodb:UpdateItem",
|
|
47
|
-
|
|
48
|
-
],
|
|
49
|
-
effect: Effect.ALLOW,
|
|
50
|
-
}),
|
|
51
|
-
],
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
return cpd;
|
|
1
|
+
import { IUserPool } from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { Effect, PolicyDocument, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { MicroserviceProps } from "../../../../interfaces/MicroserviceProps";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export const cognitoPolicyDocument = (userPool: IUserPool, config: MicroserviceProps) => {
|
|
7
|
+
|
|
8
|
+
const cpd: PolicyDocument = new PolicyDocument({
|
|
9
|
+
|
|
10
|
+
statements: [
|
|
11
|
+
new PolicyStatement({
|
|
12
|
+
resources: [userPool.userPoolArn],
|
|
13
|
+
actions: [
|
|
14
|
+
"cognito:*",
|
|
15
|
+
"cognito-idp:ListUsers"
|
|
16
|
+
],
|
|
17
|
+
effect: Effect.ALLOW,
|
|
18
|
+
}),
|
|
19
|
+
new PolicyStatement({
|
|
20
|
+
effect: Effect.ALLOW,
|
|
21
|
+
actions: [
|
|
22
|
+
"logs:CreateLogGroup",
|
|
23
|
+
"logs:CreateLogStream",
|
|
24
|
+
"logs:DescribeLogGroups",
|
|
25
|
+
"logs:DescribeLogStreams",
|
|
26
|
+
"logs:PutLogEvents",
|
|
27
|
+
"logs:GetLogEvents",
|
|
28
|
+
"logs:FilterLogEvents"
|
|
29
|
+
],
|
|
30
|
+
resources: ["*"]
|
|
31
|
+
}),
|
|
32
|
+
new PolicyStatement({
|
|
33
|
+
resources: [`arn:aws:dynamodb:${config.GLOBALS.region}:${config.GLOBALS.accountNumber}:table/*`],
|
|
34
|
+
actions: [
|
|
35
|
+
"dynamodb:BatchGetItem",
|
|
36
|
+
"dynamodb:BatchWriteItem",
|
|
37
|
+
"dynamodb:ConditionCheckItem",
|
|
38
|
+
"dynamodb:DeleteItem",
|
|
39
|
+
"dynamodb:DescribeTable",
|
|
40
|
+
"dynamodb:GetItem",
|
|
41
|
+
"dynamodb:GetRecords",
|
|
42
|
+
"dynamodb:GetShardIterator",
|
|
43
|
+
"dynamodb:PutItem",
|
|
44
|
+
"dynamodb:Query",
|
|
45
|
+
"dynamodb:Scan",
|
|
46
|
+
"dynamodb:UpdateItem",
|
|
47
|
+
|
|
48
|
+
],
|
|
49
|
+
effect: Effect.ALLOW,
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return cpd;
|
|
55
55
|
};
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { CompositePrincipal, PolicyDocument, Role, RoleProps, ServicePrincipal } from "aws-cdk-lib/aws-iam";
|
|
2
|
-
import { Construct } from "constructs";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export const createRole = (scope: Construct, roleName: string, desc: string, policyDocument: PolicyDocument,
|
|
6
|
-
servicePrincipal: ServicePrincipal) => {
|
|
7
|
-
|
|
8
|
-
const role = new Role(scope, `${roleName}-role`, createRoleProps(roleName, desc,
|
|
9
|
-
policyDocument, servicePrincipal));
|
|
10
|
-
|
|
11
|
-
return role;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export const createRoleProps = (roleName: string, desc: string, policyDocument: PolicyDocument,
|
|
15
|
-
servicePrincipal: ServicePrincipal) => {
|
|
16
|
-
|
|
17
|
-
const roleProp: RoleProps = {
|
|
18
|
-
roleName,
|
|
19
|
-
description: 'Allows access to DynamoDb Client Table',
|
|
20
|
-
inlinePolicies: {
|
|
21
|
-
policyDocument
|
|
22
|
-
},
|
|
23
|
-
assumedBy: new CompositePrincipal(
|
|
24
|
-
servicePrincipal,
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
return roleProp;
|
|
1
|
+
import { CompositePrincipal, PolicyDocument, Role, RoleProps, ServicePrincipal } from "aws-cdk-lib/aws-iam";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export const createRole = (scope: Construct, roleName: string, desc: string, policyDocument: PolicyDocument,
|
|
6
|
+
servicePrincipal: ServicePrincipal) => {
|
|
7
|
+
|
|
8
|
+
const role = new Role(scope, `${roleName}-role`, createRoleProps(roleName, desc,
|
|
9
|
+
policyDocument, servicePrincipal));
|
|
10
|
+
|
|
11
|
+
return role;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const createRoleProps = (roleName: string, desc: string, policyDocument: PolicyDocument,
|
|
15
|
+
servicePrincipal: ServicePrincipal) => {
|
|
16
|
+
|
|
17
|
+
const roleProp: RoleProps = {
|
|
18
|
+
roleName,
|
|
19
|
+
description: 'Allows access to DynamoDb Client Table',
|
|
20
|
+
inlinePolicies: {
|
|
21
|
+
policyDocument
|
|
22
|
+
},
|
|
23
|
+
assumedBy: new CompositePrincipal(
|
|
24
|
+
servicePrincipal,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return roleProp;
|
|
30
30
|
};
|