@sylvesterllc/aws-constructs 1.1.37 → 1.1.39

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 (186) hide show
  1. package/.github/workflows/publish.yml +56 -56
  2. package/__tests__/app-config.test.ts +32 -32
  3. package/__tests__/data/testConfig.ts +146 -146
  4. package/__tests__/mocks/ResourceMock.ts +9 -9
  5. package/__tests__/router.test.ts +194 -194
  6. package/dist/config/AppConfig.js +1 -1
  7. package/dist/config/Constants.js +1 -1
  8. package/dist/config/Environments.js +1 -1
  9. package/dist/config/MicroserviceAppConfig.js +1 -1
  10. package/dist/config/ServiceBundleConfig.js +1 -1
  11. package/dist/config/bishopConfig.js +1 -1
  12. package/dist/config/customConfigs/ApiAppConfig.js +1 -1
  13. package/dist/config/customConfigs/GlobalAppConfig.js +1 -1
  14. package/dist/config/customConfigs/IAppConfig.js +1 -1
  15. package/dist/config/customConfigs/ResourceAppConfig.js +1 -1
  16. package/dist/config/microServiceConfig.js +1 -1
  17. package/dist/config/types/LogDuration.js +1 -1
  18. package/dist/config/types/TsgAuthorizerProp.js +1 -1
  19. package/dist/config/types/TsgAuthorizerType.js +1 -1
  20. package/dist/config/types/TsgCdkConfigType.js +1 -1
  21. package/dist/config/types/TsgCognitoConfig.js +1 -1
  22. package/dist/config/types/TsgDnsConfig.js +1 -1
  23. package/dist/config/types/TsgDynamoDbProp.js +1 -1
  24. package/dist/config/types/TsgDynamoIndex.js +1 -1
  25. package/dist/config/types/TsgDynamoProp.js +1 -1
  26. package/dist/config/types/TsgDynamoTable.js +1 -1
  27. package/dist/config/types/TsgDynamoTableRef.js +1 -1
  28. package/dist/config/types/TsgEc2Prop.js +1 -1
  29. package/dist/config/types/TsgKeyPair.js +1 -1
  30. package/dist/config/types/TsgLambda.js +1 -1
  31. package/dist/config/types/TsgLambdaLayerProp.js +1 -1
  32. package/dist/config/types/TsgLambdaMap.js +1 -1
  33. package/dist/config/types/TsgLambdaName.js +1 -1
  34. package/dist/config/types/TsgLambdaNode.js +1 -1
  35. package/dist/config/types/TsgLambdaProp.js +1 -1
  36. package/dist/config/types/TsgLambdaProps.js +1 -1
  37. package/dist/config/types/TsgLambdaRoutable.js +1 -1
  38. package/dist/config/types/index.js +1 -1
  39. package/dist/constants/aws-service-principal-constants.js +1 -1
  40. package/dist/constructs/BasicLambda.js +1 -1
  41. package/dist/constructs/DynamoDbSingleTable.js +4 -2
  42. package/dist/constructs/MicroService.js +1 -1
  43. package/dist/constructs/basic-queue.d.ts +9 -0
  44. package/dist/constructs/basic-queue.js +16 -0
  45. package/dist/constructs/index.d.ts +1 -0
  46. package/dist/constructs/index.js +16 -1
  47. package/dist/constructs/timer-job.js +1 -1
  48. package/dist/helpers/logger.js +1 -1
  49. package/dist/helpers/util-helper.js +1 -1
  50. package/dist/index.js +1 -1
  51. package/dist/interfaces/ApiLambdaResult.js +1 -1
  52. package/dist/interfaces/BaseResourceProps.js +1 -1
  53. package/dist/interfaces/CreateLambdaFunctionInput.js +1 -1
  54. package/dist/interfaces/MicroserviceProps.js +1 -1
  55. package/dist/interfaces/lambda/index.js +1 -1
  56. package/dist/interfaces/lambda/lambda-props.js +1 -1
  57. package/dist/interfaces/timer-job/timer-job-props.js +1 -1
  58. package/dist/resources/base/baseResource.js +1 -1
  59. package/dist/resources/base/tsgBaseResource.js +1 -1
  60. package/dist/resources/certificate/createCertificate.js +1 -1
  61. package/dist/resources/cognito/createCognito.js +1 -1
  62. package/dist/resources/cognito/createCognitoProps.js +1 -1
  63. package/dist/resources/customResource/createSeedDatabaseCustomResource.js +1 -1
  64. package/dist/resources/dynamodb/CreateDynamo.js +1 -1
  65. package/dist/resources/dynamodb/CreateDynamoSingleTableDesign.d.ts +2 -1
  66. package/dist/resources/dynamodb/CreateDynamoSingleTableDesign.js +29 -28
  67. package/dist/resources/ec2/create-ec2-instance.js +3 -3
  68. package/dist/resources/ecr/CreateEcr.js +2 -2
  69. package/dist/resources/gateway/CreateApiAndAttachLambdas.js +1 -1
  70. package/dist/resources/gateway/createApi.js +1 -1
  71. package/dist/resources/gateway/createApiKey.js +1 -1
  72. package/dist/resources/helpers/createCommonLayer.js +1 -1
  73. package/dist/resources/helpers/createRoutes.js +1 -1
  74. package/dist/resources/index.js +1 -1
  75. package/dist/resources/lambda/create-basic-lambda-helper.js +11 -24
  76. package/dist/resources/lambda/create-basic-lambda.js +8 -21
  77. package/dist/resources/lambda/createLambda.js +1 -1
  78. package/dist/resources/lambda/lambdaHelper.js +1 -1
  79. package/dist/resources/lambda-authorizer/TsgJwtTokenAuthorizer.js +1 -1
  80. package/dist/resources/lambda-authorizer/TsgRequestAuthorizer.js +1 -1
  81. package/dist/resources/lambda-authorizer/createAuthorizerHelpers.js +1 -1
  82. package/dist/resources/lambda-layer/createLambdaLayer.js +1 -1
  83. package/dist/resources/layers/common/src/nodejs/api-response/responses.js +1 -1
  84. package/dist/resources/layers/common/src/nodejs/index.js +1 -1
  85. package/dist/resources/layers/common/src/nodejs/logger/IContext.js +1 -1
  86. package/dist/resources/layers/common/src/nodejs/logger/index.js +1 -1
  87. package/dist/resources/layers/common/src/nodejs/logger/logger.js +1 -1
  88. package/dist/resources/resources/iam/policyDocuments/cognitoPolicy.js +1 -1
  89. package/dist/resources/resources/iam/roles/createRole.js +1 -1
  90. package/dist/resources/route53/CreateZone.js +1 -1
  91. package/dist/resources/route53/create-zones.js +1 -1
  92. package/dist/resources/securityManager/index.js +1 -1
  93. package/dist/resources/sqs/create-sqs-resource.d.ts +3 -0
  94. package/dist/resources/sqs/create-sqs-resource.js +21 -0
  95. package/jest.config.js +8 -8
  96. package/jest.config.ts.old +20 -20
  97. package/package.json +57 -55
  98. package/readme.md +147 -147
  99. package/src/config/AppConfig.ts +106 -106
  100. package/src/config/Constants.ts +26 -26
  101. package/src/config/Environments.ts +1 -1
  102. package/src/config/MicroserviceAppConfig.ts +8 -8
  103. package/src/config/ServiceBundleConfig.ts +17 -17
  104. package/src/config/bishopConfig.ts +82 -82
  105. package/src/config/customConfigs/ApiAppConfig.ts +5 -5
  106. package/src/config/customConfigs/GlobalAppConfig.ts +10 -10
  107. package/src/config/customConfigs/IAppConfig.ts +12 -12
  108. package/src/config/customConfigs/ResourceAppConfig.ts +15 -15
  109. package/src/config/microServiceConfig.ts +83 -83
  110. package/src/config/types/LogDuration.ts +7 -7
  111. package/src/config/types/TsgAuthorizerProp.ts +8 -8
  112. package/src/config/types/TsgAuthorizerType.ts +4 -4
  113. package/src/config/types/TsgCdkConfigType.ts +2 -2
  114. package/src/config/types/TsgCognitoConfig.ts +5 -5
  115. package/src/config/types/TsgDnsConfig.ts +10 -10
  116. package/src/config/types/TsgDynamoDbProp.ts +9 -9
  117. package/src/config/types/TsgDynamoIndex.ts +15 -15
  118. package/src/config/types/TsgDynamoProp.ts +16 -16
  119. package/src/config/types/TsgDynamoTable.ts +4 -4
  120. package/src/config/types/TsgDynamoTableRef.ts +3 -3
  121. package/src/config/types/TsgEc2Prop.ts +8 -8
  122. package/src/config/types/TsgKeyPair.ts +5 -5
  123. package/src/config/types/TsgLambda.ts +5 -5
  124. package/src/config/types/TsgLambdaLayerProp.ts +4 -4
  125. package/src/config/types/TsgLambdaMap.ts +3 -3
  126. package/src/config/types/TsgLambdaName.ts +3 -3
  127. package/src/config/types/TsgLambdaNode.ts +3 -3
  128. package/src/config/types/TsgLambdaProp.ts +19 -19
  129. package/src/config/types/TsgLambdaProps.ts +17 -17
  130. package/src/config/types/TsgLambdaRoutable.ts +8 -8
  131. package/src/config/types/index.ts +11 -11
  132. package/src/constants/aws-service-principal-constants.ts +2 -2
  133. package/src/constructs/BasicLambda.ts +19 -19
  134. package/src/constructs/DynamoDbSingleTable.ts +13 -12
  135. package/src/constructs/MicroService.ts +131 -131
  136. package/src/constructs/basic-queue.ts +19 -0
  137. package/src/constructs/index.ts +6 -5
  138. package/src/constructs/timer-job.ts +19 -19
  139. package/src/helpers/logger.ts +12 -12
  140. package/src/helpers/util-helper.ts +19 -19
  141. package/src/index.ts +8 -8
  142. package/src/interfaces/ApiLambdaResult.ts +6 -6
  143. package/src/interfaces/BaseResourceProps.ts +6 -6
  144. package/src/interfaces/CreateLambdaFunctionInput.ts +10 -10
  145. package/src/interfaces/MicroserviceProps.ts +10 -10
  146. package/src/interfaces/lambda/index.ts +1 -1
  147. package/src/interfaces/lambda/lambda-props.ts +15 -15
  148. package/src/interfaces/timer-job/timer-job-props.ts +6 -6
  149. package/src/resources/base/baseResource.ts +14 -14
  150. package/src/resources/base/tsgBaseResource.ts +21 -21
  151. package/src/resources/certificate/createCertificate.ts +57 -57
  152. package/src/resources/cognito/createCognito.ts +47 -47
  153. package/src/resources/cognito/createCognitoProps.ts +46 -46
  154. package/src/resources/customResource/createSeedDatabaseCustomResource.ts +36 -36
  155. package/src/resources/dynamodb/CreateDynamo.ts +110 -110
  156. package/src/resources/dynamodb/CreateDynamoSingleTableDesign.ts +112 -118
  157. package/src/resources/ec2/create-ec2-instance.ts +52 -52
  158. package/src/resources/ecr/CreateEcr.ts +57 -57
  159. package/src/resources/gateway/CreateApiAndAttachLambdas.ts +161 -161
  160. package/src/resources/gateway/createApi.ts +173 -173
  161. package/src/resources/gateway/createApiKey.ts +88 -88
  162. package/src/resources/helpers/createCommonLayer.ts +18 -18
  163. package/src/resources/helpers/createRoutes.ts +74 -74
  164. package/src/resources/index.ts +1 -1
  165. package/src/resources/lambda/create-basic-lambda-helper.ts +124 -146
  166. package/src/resources/lambda/create-basic-lambda.ts +159 -173
  167. package/src/resources/lambda/createLambda.ts +203 -203
  168. package/src/resources/lambda/lambdaHelper.ts +133 -133
  169. package/src/resources/lambda-authorizer/TsgJwtTokenAuthorizer.ts +107 -107
  170. package/src/resources/lambda-authorizer/TsgRequestAuthorizer.ts +44 -44
  171. package/src/resources/lambda-authorizer/createAuthorizerHelpers.ts +76 -76
  172. package/src/resources/lambda-layer/createLambdaLayer.ts +39 -39
  173. package/src/resources/layers/common/package.json +22 -22
  174. package/src/resources/layers/common/src/nodejs/api-response/responses.ts +41 -41
  175. package/src/resources/layers/common/src/nodejs/index.ts +3 -3
  176. package/src/resources/layers/common/src/nodejs/logger/IContext.ts +6 -6
  177. package/src/resources/layers/common/src/nodejs/logger/index.ts +1 -1
  178. package/src/resources/layers/common/src/nodejs/logger/logger.ts +10 -10
  179. package/src/resources/layers/common/tsconfig.json +7 -7
  180. package/src/resources/resources/iam/policyDocuments/cognitoPolicy.ts +54 -54
  181. package/src/resources/resources/iam/roles/createRole.ts +29 -29
  182. package/src/resources/route53/CreateZone.ts +61 -61
  183. package/src/resources/route53/create-zones.ts +40 -40
  184. package/src/resources/securityManager/index.ts +23 -23
  185. package/src/resources/sqs/create-sqs-resource.ts +22 -0
  186. package/tsconfig.json +44 -44
@@ -1,108 +1,108 @@
1
- import { CfnOutput, Duration } from "aws-cdk-lib";
2
- import { IdentitySource, TokenAuthorizer, TokenAuthorizerProps } from "aws-cdk-lib/aws-apigateway";
3
- import { ManagedPolicy, ServicePrincipal } from "aws-cdk-lib/aws-iam";
4
- import { NodejsFunction, NodejsFunctionProps, SourceMapMode } from "aws-cdk-lib/aws-lambda-nodejs";
5
- import { Construct } from "constructs";
6
- import * as path from 'path';
7
- import { AppConfig } from "../../config/AppConfig";
8
-
9
- import { TsgLambdaProp } from "../../config/types";
10
- import { MicroserviceProps } from "../../interfaces/MicroserviceProps";
11
- import { BaseResource } from "../base/baseResource";
12
- import { CreateLambda } from "../lambda/createLambda";
13
-
14
- export class TsgJwtTokenAuthorizer extends BaseResource<TokenAuthorizer> {
15
-
16
- get JwtAuthorizer() {
17
- return this.createdResources[0];
18
- }
19
-
20
- constructor(scope: Construct, props: AppConfig) {
21
-
22
- super(scope, props);
23
-
24
- this.createdResources = this.createResource(scope)!;
25
-
26
- if (this.createdResources) {
27
- this.createOutput<TokenAuthorizer>(scope, this.createdResources);
28
- }
29
-
30
- }
31
-
32
- protected createResource(scope: Construct): TokenAuthorizer[] | null {
33
- return [this.createLambdaAuthorizer(scope, this.config.RESOURCES.AUTHORIZER!)];
34
- }
35
-
36
- private createLambdaAuthorizer(scope: Construct, lambdaConfig: TsgLambdaProp) {
37
- //console.log("ENTER createLambdaAuthorizer");
38
-
39
- const authorizerProps = this.createLambdaFunctionProps(lambdaConfig!);
40
-
41
- const lambdaId = CreateLambda.getIdForLambda(lambdaConfig, this.config);
42
- const lambda = new NodejsFunction(scope, lambdaId, authorizerProps);
43
-
44
- lambda.grantInvoke(new ServicePrincipal('apigateway.amazonaws.com'));
45
-
46
- if (lambdaConfig?.managedPolicies && lambdaConfig.managedPolicies.length > 0) {
47
- this.assignManagedPolicies(lambda, lambdaConfig.managedPolicies);
48
- }
49
-
50
- const props: TokenAuthorizerProps = {
51
- handler: lambda,
52
- authorizerName: lambdaConfig.name,
53
- resultsCacheTtl: Duration.seconds(0),
54
- identitySource: IdentitySource.header('Authorization'),
55
-
56
- };
57
-
58
- const lambdaAuthorizer = new TokenAuthorizer(scope, `${lambdaConfig.name}-authorizer`, props);
59
-
60
- return lambdaAuthorizer;
61
- }
62
-
63
- protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
64
-
65
- const entity = createdAssets[0];
66
-
67
- // new CfnOutput(scope, `authorizer`, {
68
- // value: (entity as TokenAuthorizer).authorizerArn
69
- // });
70
-
71
- }
72
-
73
- private createLambdaFunctionProps(prop: TsgLambdaProp) {
74
-
75
- const lambdaProp: NodejsFunctionProps = {
76
- entry: path.join(prop.codePath),
77
- functionName: prop.name,
78
- handler: prop.handler,
79
- runtime: prop.runtime || this.config.GLOBALS.stackRuntime,
80
- timeout: prop.duration || Duration.minutes(2),
81
- memorySize: prop.memory || 512,
82
- environment: {
83
- "VERBOSE_LOGGING": "true",
84
- ...prop.environment
85
- },
86
- bundling: {
87
- minify: false,
88
- target: 'es2020',
89
- sourceMap: true,
90
- sourceMapMode: SourceMapMode.INLINE,
91
- environment: prop.environment || prop.environment,
92
- },
93
- }
94
- return lambdaProp;
95
- };
96
-
97
- private assignManagedPolicies(lambda: NodejsFunction, managedPolicyNames: string[]) {
98
-
99
- managedPolicyNames.forEach((managedPolicyName: string) => {
100
-
101
- let policy = ManagedPolicy.fromAwsManagedPolicyName(managedPolicyName);
102
-
103
- lambda.role?.addManagedPolicy(policy);
104
- });
105
-
106
- }
107
-
1
+ import { CfnOutput, Duration } from "aws-cdk-lib";
2
+ import { IdentitySource, TokenAuthorizer, TokenAuthorizerProps } from "aws-cdk-lib/aws-apigateway";
3
+ import { ManagedPolicy, ServicePrincipal } from "aws-cdk-lib/aws-iam";
4
+ import { NodejsFunction, NodejsFunctionProps, SourceMapMode } from "aws-cdk-lib/aws-lambda-nodejs";
5
+ import { Construct } from "constructs";
6
+ import * as path from 'path';
7
+ import { AppConfig } from "../../config/AppConfig";
8
+
9
+ import { TsgLambdaProp } from "../../config/types";
10
+ import { MicroserviceProps } from "../../interfaces/MicroserviceProps";
11
+ import { BaseResource } from "../base/baseResource";
12
+ import { CreateLambda } from "../lambda/createLambda";
13
+
14
+ export class TsgJwtTokenAuthorizer extends BaseResource<TokenAuthorizer> {
15
+
16
+ get JwtAuthorizer() {
17
+ return this.createdResources[0];
18
+ }
19
+
20
+ constructor(scope: Construct, props: AppConfig) {
21
+
22
+ super(scope, props);
23
+
24
+ this.createdResources = this.createResource(scope)!;
25
+
26
+ if (this.createdResources) {
27
+ this.createOutput<TokenAuthorizer>(scope, this.createdResources);
28
+ }
29
+
30
+ }
31
+
32
+ protected createResource(scope: Construct): TokenAuthorizer[] | null {
33
+ return [this.createLambdaAuthorizer(scope, this.config.RESOURCES.AUTHORIZER!)];
34
+ }
35
+
36
+ private createLambdaAuthorizer(scope: Construct, lambdaConfig: TsgLambdaProp) {
37
+ //console.log("ENTER createLambdaAuthorizer");
38
+
39
+ const authorizerProps = this.createLambdaFunctionProps(lambdaConfig!);
40
+
41
+ const lambdaId = CreateLambda.getIdForLambda(lambdaConfig, this.config);
42
+ const lambda = new NodejsFunction(scope, lambdaId, authorizerProps);
43
+
44
+ lambda.grantInvoke(new ServicePrincipal('apigateway.amazonaws.com'));
45
+
46
+ if (lambdaConfig?.managedPolicies && lambdaConfig.managedPolicies.length > 0) {
47
+ this.assignManagedPolicies(lambda, lambdaConfig.managedPolicies);
48
+ }
49
+
50
+ const props: TokenAuthorizerProps = {
51
+ handler: lambda,
52
+ authorizerName: lambdaConfig.name,
53
+ resultsCacheTtl: Duration.seconds(0),
54
+ identitySource: IdentitySource.header('Authorization'),
55
+
56
+ };
57
+
58
+ const lambdaAuthorizer = new TokenAuthorizer(scope, `${lambdaConfig.name}-authorizer`, props);
59
+
60
+ return lambdaAuthorizer;
61
+ }
62
+
63
+ protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
64
+
65
+ const entity = createdAssets[0];
66
+
67
+ // new CfnOutput(scope, `authorizer`, {
68
+ // value: (entity as TokenAuthorizer).authorizerArn
69
+ // });
70
+
71
+ }
72
+
73
+ private createLambdaFunctionProps(prop: TsgLambdaProp) {
74
+
75
+ const lambdaProp: NodejsFunctionProps = {
76
+ entry: path.join(prop.codePath),
77
+ functionName: prop.name,
78
+ handler: prop.handler,
79
+ runtime: prop.runtime || this.config.GLOBALS.stackRuntime,
80
+ timeout: prop.duration || Duration.minutes(2),
81
+ memorySize: prop.memory || 512,
82
+ environment: {
83
+ "VERBOSE_LOGGING": "true",
84
+ ...prop.environment
85
+ },
86
+ bundling: {
87
+ minify: false,
88
+ target: 'es2020',
89
+ sourceMap: true,
90
+ sourceMapMode: SourceMapMode.INLINE,
91
+ environment: prop.environment || prop.environment,
92
+ },
93
+ }
94
+ return lambdaProp;
95
+ };
96
+
97
+ private assignManagedPolicies(lambda: NodejsFunction, managedPolicyNames: string[]) {
98
+
99
+ managedPolicyNames.forEach((managedPolicyName: string) => {
100
+
101
+ let policy = ManagedPolicy.fromAwsManagedPolicyName(managedPolicyName);
102
+
103
+ lambda.role?.addManagedPolicy(policy);
104
+ });
105
+
106
+ }
107
+
108
108
  }
@@ -1,45 +1,45 @@
1
- import { RequestAuthorizer } from "aws-cdk-lib/aws-apigateway";
2
- import { Construct } from "constructs";
3
- import { AppConfig } from "../../config/AppConfig";
4
- import { BaseResource } from "../base/baseResource";
5
-
6
- import { CfnOutput } from "aws-cdk-lib";
7
- import { createAuthorizer } from "./createAuthorizerHelpers";
8
- import { LayerVersion } from "aws-cdk-lib/aws-lambda";
9
- import { ITableV2 } from "aws-cdk-lib/aws-dynamodb";
10
-
11
-
12
- export class TsgRequestAuthorizer extends BaseResource<RequestAuthorizer> {
13
-
14
- get TsgRequestAuthorizer() {
15
- return this.createdResources[0];
16
- }
17
-
18
- constructor(scope: Construct,
19
- config: AppConfig,
20
- private layers?: LayerVersion[],
21
- private tables?: ITableV2[]) {
22
- super(scope, config);
23
-
24
- this.createdResources = this.createResource(scope)!;
25
- }
26
-
27
- protected createResource(scope: Construct): RequestAuthorizer[] | null {
28
-
29
- const authorizer = createAuthorizer(scope, this.config, this.layers, this.tables);
30
-
31
- return [authorizer];
32
-
33
- }
34
-
35
- protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
36
- createdAssets?.forEach((asset) => {
37
- if (asset instanceof RequestAuthorizer) {
38
- // Output the ARN of the authorizer
39
- new CfnOutput(scope, "RequestAuthorizerArn", {
40
- value: `${asset.authorizationType}:${asset.authorizerArn}`
41
- });
42
- }
43
- });
44
- }
1
+ import { RequestAuthorizer } from "aws-cdk-lib/aws-apigateway";
2
+ import { Construct } from "constructs";
3
+ import { AppConfig } from "../../config/AppConfig";
4
+ import { BaseResource } from "../base/baseResource";
5
+
6
+ import { CfnOutput } from "aws-cdk-lib";
7
+ import { createAuthorizer } from "./createAuthorizerHelpers";
8
+ import { LayerVersion } from "aws-cdk-lib/aws-lambda";
9
+ import { ITableV2 } from "aws-cdk-lib/aws-dynamodb";
10
+
11
+
12
+ export class TsgRequestAuthorizer extends BaseResource<RequestAuthorizer> {
13
+
14
+ get TsgRequestAuthorizer() {
15
+ return this.createdResources[0];
16
+ }
17
+
18
+ constructor(scope: Construct,
19
+ config: AppConfig,
20
+ private layers?: LayerVersion[],
21
+ private tables?: ITableV2[]) {
22
+ super(scope, config);
23
+
24
+ this.createdResources = this.createResource(scope)!;
25
+ }
26
+
27
+ protected createResource(scope: Construct): RequestAuthorizer[] | null {
28
+
29
+ const authorizer = createAuthorizer(scope, this.config, this.layers, this.tables);
30
+
31
+ return [authorizer];
32
+
33
+ }
34
+
35
+ protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
36
+ createdAssets?.forEach((asset) => {
37
+ if (asset instanceof RequestAuthorizer) {
38
+ // Output the ARN of the authorizer
39
+ new CfnOutput(scope, "RequestAuthorizerArn", {
40
+ value: `${asset.authorizationType}:${asset.authorizerArn}`
41
+ });
42
+ }
43
+ });
44
+ }
45
45
  }
@@ -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
+ };