@sylvesterllc/aws-constructs 1.1.37 → 1.1.38

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 +55 -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,58 +1,58 @@
1
- import { RemovalPolicy } from "aws-cdk-lib";
2
- import { Certificate, CertificateValidation, DnsValidatedCertificate, ICertificate } from "aws-cdk-lib/aws-certificatemanager";
3
- import { HostedZone, IHostedZone } from "aws-cdk-lib/aws-route53";
4
- import { Construct } from "constructs";
5
- import { MicroserviceProps } from "../../interfaces/MicroserviceProps";
6
- import { environmentSuffixForDomain } from "../../helpers/util-helper";
7
- import { Environment } from "../../config/Environments";
8
- import { env } from "process";
9
-
10
-
11
- export class CreateCertificate {
12
-
13
- public certificate: ICertificate;
14
-
15
- constructor(scope: Construct, props: MicroserviceProps, hostedZone: IHostedZone, env: string) {
16
-
17
- // this.certificate = this.generateCertificate(scope, props, hostedZone);
18
-
19
- this.certificate = this.generateApiCertificate(scope, props, env);
20
-
21
- this.certificate.applyRemovalPolicy(RemovalPolicy.DESTROY);
22
-
23
- }
24
-
25
- generateCertificate(scope: Construct, props: MicroserviceProps, hostedZone: IHostedZone, env: string) {
26
-
27
- const devHostedZone = HostedZone.fromHostedZoneId(scope, `api.c1.dev.convergeone.io-hosted-zone`,
28
- 'Z0508834Q8E4TWFVG990');
29
-
30
- const cert = new Certificate(scope, `api-c1-dev-api-certificate`, {
31
- domainName: `c1.api.dev.convergeone.io`,
32
- validation: CertificateValidation.fromDnsMultiZone({
33
- [`dev.convergeone.io`]: devHostedZone
34
- })
35
- });
36
- return cert;
37
- }
38
-
39
- generateApiCertificate(scope: Construct, props: MicroserviceProps, env: string) {
40
-
41
- const hostedZone = HostedZone.fromHostedZoneId(scope, `${props.API.DomainPrefix}-${env}-${props.DNS?.ZoneName}-hosted-zone`,
42
- props.DNS?.ZoneId!);
43
-
44
- const domainName = `${props.API.DomainPrefix}.${env}.${props.DNS?.ZoneName}`;
45
-
46
- const cert = new Certificate(scope, `${props.API.DomainPrefix}-${env}-${props.DNS?.ZoneName}-certificate`, {
47
- certificateName: `${domainName}-certificate`,
48
- domainName: domainName,
49
- // validation: CertificateValidation.fromDnsMultiZone({
50
- // [`${props.API.DomainPrefix}.${env}.${props.DNS?.ZoneName}`]: hostedZone
51
-
52
- // })
53
- validation: CertificateValidation.fromDns(hostedZone)
54
- });
55
-
56
- return cert;
57
- }
1
+ import { RemovalPolicy } from "aws-cdk-lib";
2
+ import { Certificate, CertificateValidation, DnsValidatedCertificate, ICertificate } from "aws-cdk-lib/aws-certificatemanager";
3
+ import { HostedZone, IHostedZone } from "aws-cdk-lib/aws-route53";
4
+ import { Construct } from "constructs";
5
+ import { MicroserviceProps } from "../../interfaces/MicroserviceProps";
6
+ import { environmentSuffixForDomain } from "../../helpers/util-helper";
7
+ import { Environment } from "../../config/Environments";
8
+ import { env } from "process";
9
+
10
+
11
+ export class CreateCertificate {
12
+
13
+ public certificate: ICertificate;
14
+
15
+ constructor(scope: Construct, props: MicroserviceProps, hostedZone: IHostedZone, env: string) {
16
+
17
+ // this.certificate = this.generateCertificate(scope, props, hostedZone);
18
+
19
+ this.certificate = this.generateApiCertificate(scope, props, env);
20
+
21
+ this.certificate.applyRemovalPolicy(RemovalPolicy.DESTROY);
22
+
23
+ }
24
+
25
+ generateCertificate(scope: Construct, props: MicroserviceProps, hostedZone: IHostedZone, env: string) {
26
+
27
+ const devHostedZone = HostedZone.fromHostedZoneId(scope, `api.c1.dev.convergeone.io-hosted-zone`,
28
+ 'Z0508834Q8E4TWFVG990');
29
+
30
+ const cert = new Certificate(scope, `api-c1-dev-api-certificate`, {
31
+ domainName: `c1.api.dev.convergeone.io`,
32
+ validation: CertificateValidation.fromDnsMultiZone({
33
+ [`dev.convergeone.io`]: devHostedZone
34
+ })
35
+ });
36
+ return cert;
37
+ }
38
+
39
+ generateApiCertificate(scope: Construct, props: MicroserviceProps, env: string) {
40
+
41
+ const hostedZone = HostedZone.fromHostedZoneId(scope, `${props.API.DomainPrefix}-${env}-${props.DNS?.ZoneName}-hosted-zone`,
42
+ props.DNS?.ZoneId!);
43
+
44
+ const domainName = `${props.API.DomainPrefix}.${env}.${props.DNS?.ZoneName}`;
45
+
46
+ const cert = new Certificate(scope, `${props.API.DomainPrefix}-${env}-${props.DNS?.ZoneName}-certificate`, {
47
+ certificateName: `${domainName}-certificate`,
48
+ domainName: domainName,
49
+ // validation: CertificateValidation.fromDnsMultiZone({
50
+ // [`${props.API.DomainPrefix}.${env}.${props.DNS?.ZoneName}`]: hostedZone
51
+
52
+ // })
53
+ validation: CertificateValidation.fromDns(hostedZone)
54
+ });
55
+
56
+ return cert;
57
+ }
58
58
  }
@@ -1,47 +1,47 @@
1
- import { IUserPool, UserPool, UserPoolClient, UserPoolClientProps, UserPoolIdentityProviderAmazon, UserPoolIdentityProviderAmazonProps, UserPoolIdentityProviderSaml, UserPoolIdentityProviderSamlMetadataType } from "aws-cdk-lib/aws-cognito";
2
- import { Construct } from "constructs";
3
- import { AppConfig } from "../../config/AppConfig";
4
- import { createUserPoolProps } from "./createCognitoProps";
5
- import { Duration } from "aws-cdk-lib";
6
- import { ClientAppType } from "../../config/Environments";
7
-
8
- export const createCognito = (scope: Construct, appConfig: AppConfig) => {
9
-
10
-
11
- const userPool = createUserPool(scope, appConfig);
12
- const clientPool = createUserPoolClient(scope, userPool, "mobile", appConfig);
13
-
14
- return {
15
- userPool,
16
- clientPool
17
- };
18
- };
19
-
20
- const createUserPool = (scope: Construct, appConfig: AppConfig, userPoolName?: string) => {
21
-
22
- return new UserPool(scope, `${appConfig.AppName}-user-pool`,
23
- createUserPoolProps(`${appConfig.AppName}-user-pool`));
24
-
25
- };
26
-
27
- const createUserPoolClient = (scope: Construct, userPool: IUserPool, appType: ClientAppType,
28
- appConfig: AppConfig) => {
29
-
30
- const client = new UserPoolClient(scope, `${appConfig.AppName}-user-pool-client`,
31
- createUserPoolClientProps(userPool, appConfig, appType));
32
-
33
- return client;
34
- };
35
-
36
- const createUserPoolClientProps = (userpool: IUserPool, config: AppConfig, appType: ClientAppType): UserPoolClientProps => {
37
- const props: UserPoolClientProps = {
38
- userPool: userpool,
39
- accessTokenValidity: Duration.hours(3),
40
- refreshTokenValidity: Duration.days(3),
41
- userPoolClientName: `${config.AppName}-${appType}`,
42
- authFlows: {
43
- userPassword: true,
44
- }
45
- };
46
- return props;
47
- };
1
+ import { IUserPool, UserPool, UserPoolClient, UserPoolClientProps, UserPoolIdentityProviderAmazon, UserPoolIdentityProviderAmazonProps, UserPoolIdentityProviderSaml, UserPoolIdentityProviderSamlMetadataType } from "aws-cdk-lib/aws-cognito";
2
+ import { Construct } from "constructs";
3
+ import { AppConfig } from "../../config/AppConfig";
4
+ import { createUserPoolProps } from "./createCognitoProps";
5
+ import { Duration } from "aws-cdk-lib";
6
+ import { ClientAppType } from "../../config/Environments";
7
+
8
+ export const createCognito = (scope: Construct, appConfig: AppConfig) => {
9
+
10
+
11
+ const userPool = createUserPool(scope, appConfig);
12
+ const clientPool = createUserPoolClient(scope, userPool, "mobile", appConfig);
13
+
14
+ return {
15
+ userPool,
16
+ clientPool
17
+ };
18
+ };
19
+
20
+ const createUserPool = (scope: Construct, appConfig: AppConfig, userPoolName?: string) => {
21
+
22
+ return new UserPool(scope, `${appConfig.AppName}-user-pool`,
23
+ createUserPoolProps(`${appConfig.AppName}-user-pool`));
24
+
25
+ };
26
+
27
+ const createUserPoolClient = (scope: Construct, userPool: IUserPool, appType: ClientAppType,
28
+ appConfig: AppConfig) => {
29
+
30
+ const client = new UserPoolClient(scope, `${appConfig.AppName}-user-pool-client`,
31
+ createUserPoolClientProps(userPool, appConfig, appType));
32
+
33
+ return client;
34
+ };
35
+
36
+ const createUserPoolClientProps = (userpool: IUserPool, config: AppConfig, appType: ClientAppType): UserPoolClientProps => {
37
+ const props: UserPoolClientProps = {
38
+ userPool: userpool,
39
+ accessTokenValidity: Duration.hours(3),
40
+ refreshTokenValidity: Duration.days(3),
41
+ userPoolClientName: `${config.AppName}-${appType}`,
42
+ authFlows: {
43
+ userPassword: true,
44
+ }
45
+ };
46
+ return props;
47
+ };
@@ -1,46 +1,46 @@
1
- import { Duration, RemovalPolicy } from "aws-cdk-lib";
2
- import { AccountRecovery, DateTimeAttribute, NumberAttribute, StringAttribute, UserPoolProps,
3
- VerificationEmailStyle } from "aws-cdk-lib/aws-cognito";
4
-
5
- export const createUserPoolProps = (securityUserPool: string) => {
6
-
7
- const cognitoProps: UserPoolProps = {
8
- userPoolName: securityUserPool.toLowerCase(),
9
- selfSignUpEnabled: true,
10
- userVerification: {
11
- emailSubject: 'Verify your email for Bishop CDK Constructs!',
12
- emailBody: 'Thanks for creating an account with Bishop CDK Constructs! Your verification code is {####}',
13
- emailStyle: VerificationEmailStyle.CODE,
14
- smsMessage: 'Thanks for signing up {username} with Bishop CDK Constructs! Your verification code is {####}',
15
- },
16
- userInvitation: {
17
- emailSubject: 'Invite to join Bishop CDK Constructs!',
18
- emailBody: 'Hello {username}, you have been invited to join Bishop CDK Constructs! Your temporary password is {####}',
19
- smsMessage: 'Your temporary password for {username} with Bishop CDK Constructs is {####}'
20
- },
21
- signInAliases: {
22
- username: true,
23
- email: true,
24
- phone: true
25
- },
26
- customAttributes: {
27
- 'firstName': new StringAttribute({ minLen: 3, maxLen: 30, mutable: true }),
28
- 'lastName': new StringAttribute({ minLen: 3, maxLen: 30, mutable: true }),
29
- 'phoneNumber': new StringAttribute({ minLen: 3, maxLen: 30, mutable: true }),
30
- 'acccountType': new NumberAttribute({ mutable: true }),
31
- 'joinedOn': new DateTimeAttribute(),
32
- },
33
- passwordPolicy: {
34
- minLength: 8,
35
- requireLowercase: true,
36
- requireUppercase: true,
37
- requireDigits: true,
38
- requireSymbols: true,
39
- tempPasswordValidity: Duration.days(1),
40
- },
41
- accountRecovery: AccountRecovery.PHONE_AND_EMAIL,
42
- removalPolicy: RemovalPolicy.DESTROY,
43
- }
44
- return cognitoProps;
45
- };
46
-
1
+ import { Duration, RemovalPolicy } from "aws-cdk-lib";
2
+ import { AccountRecovery, DateTimeAttribute, NumberAttribute, StringAttribute, UserPoolProps,
3
+ VerificationEmailStyle } from "aws-cdk-lib/aws-cognito";
4
+
5
+ export const createUserPoolProps = (securityUserPool: string) => {
6
+
7
+ const cognitoProps: UserPoolProps = {
8
+ userPoolName: securityUserPool.toLowerCase(),
9
+ selfSignUpEnabled: true,
10
+ userVerification: {
11
+ emailSubject: 'Verify your email for Bishop CDK Constructs!',
12
+ emailBody: 'Thanks for creating an account with Bishop CDK Constructs! Your verification code is {####}',
13
+ emailStyle: VerificationEmailStyle.CODE,
14
+ smsMessage: 'Thanks for signing up {username} with Bishop CDK Constructs! Your verification code is {####}',
15
+ },
16
+ userInvitation: {
17
+ emailSubject: 'Invite to join Bishop CDK Constructs!',
18
+ emailBody: 'Hello {username}, you have been invited to join Bishop CDK Constructs! Your temporary password is {####}',
19
+ smsMessage: 'Your temporary password for {username} with Bishop CDK Constructs is {####}'
20
+ },
21
+ signInAliases: {
22
+ username: true,
23
+ email: true,
24
+ phone: true
25
+ },
26
+ customAttributes: {
27
+ 'firstName': new StringAttribute({ minLen: 3, maxLen: 30, mutable: true }),
28
+ 'lastName': new StringAttribute({ minLen: 3, maxLen: 30, mutable: true }),
29
+ 'phoneNumber': new StringAttribute({ minLen: 3, maxLen: 30, mutable: true }),
30
+ 'acccountType': new NumberAttribute({ mutable: true }),
31
+ 'joinedOn': new DateTimeAttribute(),
32
+ },
33
+ passwordPolicy: {
34
+ minLength: 8,
35
+ requireLowercase: true,
36
+ requireUppercase: true,
37
+ requireDigits: true,
38
+ requireSymbols: true,
39
+ tempPasswordValidity: Duration.days(1),
40
+ },
41
+ accountRecovery: AccountRecovery.PHONE_AND_EMAIL,
42
+ removalPolicy: RemovalPolicy.DESTROY,
43
+ }
44
+ return cognitoProps;
45
+ };
46
+
@@ -1,37 +1,37 @@
1
- import { ITableV2 } from "aws-cdk-lib/aws-dynamodb";
2
- import { LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
3
- import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
4
- import { Construct } from "constructs";
5
- import { AppConfig } from "../../config/AppConfig";
6
- import { LambdaHelper } from "../lambda/lambdaHelper";
7
- import { Provider, ProviderProps } from "aws-cdk-lib/custom-resources";
8
- import { RetentionDays } from "aws-cdk-lib/aws-logs";
9
- import { CustomResource, CustomResourceProps } from "aws-cdk-lib";
10
-
11
-
12
- export const createSeedDatabaseCustomResource = (scope: Construct, config: AppConfig,
13
- database: ITableV2, layers?: LayerVersion[]) => {
14
-
15
- const seedLambda = config.RESOURCES.DYNAMO?.SEED_LAMBDA;
16
-
17
- const databaseSeedLambda = LambdaHelper.createLambdaFunctions(scope,
18
- config,
19
- seedLambda!,
20
- undefined,
21
- layers!) as NodejsFunction;
22
-
23
- database.grantReadWriteData(databaseSeedLambda);
24
-
25
- const providerProps: ProviderProps = {
26
- onEventHandler: databaseSeedLambda,
27
- logRetention: RetentionDays.ONE_WEEK,
28
- };
29
-
30
- const provider = new Provider(scope, `${config.AppPrefix}-database-seed-provider`, providerProps);
31
-
32
- const crProps: CustomResourceProps = {
33
- serviceToken: provider.serviceToken,
34
- };
35
-
36
- new CustomResource(scope, `${config.AppPrefix}-database-seed`, crProps);
1
+ import { ITableV2 } from "aws-cdk-lib/aws-dynamodb";
2
+ import { LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
3
+ import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
4
+ import { Construct } from "constructs";
5
+ import { AppConfig } from "../../config/AppConfig";
6
+ import { LambdaHelper } from "../lambda/lambdaHelper";
7
+ import { Provider, ProviderProps } from "aws-cdk-lib/custom-resources";
8
+ import { RetentionDays } from "aws-cdk-lib/aws-logs";
9
+ import { CustomResource, CustomResourceProps } from "aws-cdk-lib";
10
+
11
+
12
+ export const createSeedDatabaseCustomResource = (scope: Construct, config: AppConfig,
13
+ database: ITableV2, layers?: LayerVersion[]) => {
14
+
15
+ const seedLambda = config.RESOURCES.DYNAMO?.SEED_LAMBDA;
16
+
17
+ const databaseSeedLambda = LambdaHelper.createLambdaFunctions(scope,
18
+ config,
19
+ seedLambda!,
20
+ undefined,
21
+ layers!) as NodejsFunction;
22
+
23
+ database.grantReadWriteData(databaseSeedLambda);
24
+
25
+ const providerProps: ProviderProps = {
26
+ onEventHandler: databaseSeedLambda,
27
+ logRetention: RetentionDays.ONE_WEEK,
28
+ };
29
+
30
+ const provider = new Provider(scope, `${config.AppPrefix}-database-seed-provider`, providerProps);
31
+
32
+ const crProps: CustomResourceProps = {
33
+ serviceToken: provider.serviceToken,
34
+ };
35
+
36
+ new CustomResource(scope, `${config.AppPrefix}-database-seed`, crProps);
37
37
  };
@@ -1,111 +1,111 @@
1
- import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
2
- import { GlobalSecondaryIndexProps,Table, TableProps } from "aws-cdk-lib/aws-dynamodb";
3
- import { Construct } from "constructs";
4
- import { AppConfig } from "../../config/AppConfig";
5
- import { BaseResource } from "../base/baseResource";
6
-
7
-
8
- export class CreateDynamoDb extends BaseResource<Table> {
9
-
10
- static ReadWriteActions: string[] = [
11
- "dynamodb:BatchGetItem",
12
- "dynamodb:BatchWriteItem",
13
- "dynamodb:ConditionCheckItem",
14
- "dynamodb:DeleteItem",
15
- "dynamodb:DescribeTable",
16
- "dynamodb:GetItem",
17
- "dynamodb:GetRecords",
18
- "dynamodb:GetShardIterator",
19
- "dynamodb:PutItem",
20
- "dynamodb:Query",
21
- "dynamodb:Scan",
22
- "dynamodb:UpdateItem",
23
- ];
24
-
25
- get CreatedTables() {
26
- return this.createdResources;
27
- }
28
-
29
- constructor(protected scope: Construct, protected config: AppConfig) {
30
- super(scope, config);
31
-
32
- this.createdResources = this.createResource(scope);
33
-
34
- if (this.createdResources) {
35
- this.createOutput(scope, this.createdResources);
36
- }
37
- }
38
-
39
- protected createResource(scope: Construct): Table[] {
40
-
41
- const props = this.createProps();
42
-
43
- const tables = props?.map((prop: any, idx: number) => {
44
- const dbTable = new Table(scope, `${prop.tableName}`, {
45
- ...prop,
46
- removalPolicy: RemovalPolicy.DESTROY,
47
-
48
- });
49
-
50
-
51
-
52
- this.config.RESOURCES.DYNAMO?.TABLES?.[idx].indexes.map((gsi) => {
53
-
54
- const gsiProps: GlobalSecondaryIndexProps = {
55
- indexName: gsi.indexName,
56
- partitionKey: gsi.partitionKey,
57
- sortKey: gsi.sortKey,
58
- projectionType: gsi.projectionType
59
-
60
- };
61
-
62
- dbTable.addGlobalSecondaryIndex(gsiProps);
63
- });
64
- return dbTable;
65
- });
66
-
67
- return tables ?? [];
68
-
69
-
70
-
71
- }
72
-
73
-
74
- protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
75
- this.createdResources!.forEach((x, idx) => {
76
- new CfnOutput(scope, `dynamoTable${idx}`, {
77
- value: x.tableName
78
- });
79
- });
80
- }
81
-
82
- private createProps() {
83
- const props = this.config.RESOURCES?.DYNAMO?.TABLES?.map((x) => {
84
-
85
- const prop: any = {};
86
-
87
- prop.tableName = this.generateDbName(x.tableName);
88
-
89
- prop.partitionKey = {
90
- name: x.primaryKey.name,
91
- type: x.primaryKey.type
92
- };
93
-
94
- prop.billingMode = x.billingMode;
95
-
96
- if (x.sortKey) {
97
- prop.sortKey = {
98
- name: x.sortKey.name,
99
- type: x.sortKey.type,
100
- }
101
- }
102
- return prop as TableProps;
103
- });
104
-
105
- return props;
106
- }
107
-
108
- private generateDbName(tableName: string) {
109
- return `${this.config.AppPrefix}-${tableName}`;
110
- }
1
+ import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
2
+ import { GlobalSecondaryIndexProps,Table, TableProps } from "aws-cdk-lib/aws-dynamodb";
3
+ import { Construct } from "constructs";
4
+ import { AppConfig } from "../../config/AppConfig";
5
+ import { BaseResource } from "../base/baseResource";
6
+
7
+
8
+ export class CreateDynamoDb extends BaseResource<Table> {
9
+
10
+ static ReadWriteActions: string[] = [
11
+ "dynamodb:BatchGetItem",
12
+ "dynamodb:BatchWriteItem",
13
+ "dynamodb:ConditionCheckItem",
14
+ "dynamodb:DeleteItem",
15
+ "dynamodb:DescribeTable",
16
+ "dynamodb:GetItem",
17
+ "dynamodb:GetRecords",
18
+ "dynamodb:GetShardIterator",
19
+ "dynamodb:PutItem",
20
+ "dynamodb:Query",
21
+ "dynamodb:Scan",
22
+ "dynamodb:UpdateItem",
23
+ ];
24
+
25
+ get CreatedTables() {
26
+ return this.createdResources;
27
+ }
28
+
29
+ constructor(protected scope: Construct, protected config: AppConfig) {
30
+ super(scope, config);
31
+
32
+ this.createdResources = this.createResource(scope);
33
+
34
+ if (this.createdResources) {
35
+ this.createOutput(scope, this.createdResources);
36
+ }
37
+ }
38
+
39
+ protected createResource(scope: Construct): Table[] {
40
+
41
+ const props = this.createProps();
42
+
43
+ const tables = props?.map((prop: any, idx: number) => {
44
+ const dbTable = new Table(scope, `${prop.tableName}`, {
45
+ ...prop,
46
+ removalPolicy: RemovalPolicy.DESTROY,
47
+
48
+ });
49
+
50
+
51
+
52
+ this.config.RESOURCES.DYNAMO?.TABLES?.[idx].indexes.map((gsi) => {
53
+
54
+ const gsiProps: GlobalSecondaryIndexProps = {
55
+ indexName: gsi.indexName,
56
+ partitionKey: gsi.partitionKey,
57
+ sortKey: gsi.sortKey,
58
+ projectionType: gsi.projectionType
59
+
60
+ };
61
+
62
+ dbTable.addGlobalSecondaryIndex(gsiProps);
63
+ });
64
+ return dbTable;
65
+ });
66
+
67
+ return tables ?? [];
68
+
69
+
70
+
71
+ }
72
+
73
+
74
+ protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
75
+ this.createdResources!.forEach((x, idx) => {
76
+ new CfnOutput(scope, `dynamoTable${idx}`, {
77
+ value: x.tableName
78
+ });
79
+ });
80
+ }
81
+
82
+ private createProps() {
83
+ const props = this.config.RESOURCES?.DYNAMO?.TABLES?.map((x) => {
84
+
85
+ const prop: any = {};
86
+
87
+ prop.tableName = this.generateDbName(x.tableName);
88
+
89
+ prop.partitionKey = {
90
+ name: x.primaryKey.name,
91
+ type: x.primaryKey.type
92
+ };
93
+
94
+ prop.billingMode = x.billingMode;
95
+
96
+ if (x.sortKey) {
97
+ prop.sortKey = {
98
+ name: x.sortKey.name,
99
+ type: x.sortKey.type,
100
+ }
101
+ }
102
+ return prop as TableProps;
103
+ });
104
+
105
+ return props;
106
+ }
107
+
108
+ private generateDbName(tableName: string) {
109
+ return `${this.config.AppPrefix}-${tableName}`;
110
+ }
111
111
  }