@openhi/constructs 0.0.0
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/README.md +3 -0
- package/lib/app/index.d.ts +4 -0
- package/lib/app/index.js +21 -0
- package/lib/app/open-hi-app.d.ts +85 -0
- package/lib/app/open-hi-app.js +127 -0
- package/lib/app/open-hi-environment.d.ts +59 -0
- package/lib/app/open-hi-environment.js +72 -0
- package/lib/app/open-hi-service.d.ts +169 -0
- package/lib/app/open-hi-service.js +195 -0
- package/lib/app/open-hi-stage.d.ts +71 -0
- package/lib/app/open-hi-stage.js +70 -0
- package/lib/components/acm/root-wildcard-certificate.d.ts +15 -0
- package/lib/components/acm/root-wildcard-certificate.js +35 -0
- package/lib/components/api-gateway/core-http-api.d.ts +10 -0
- package/lib/components/api-gateway/core-http-api.js +44 -0
- package/lib/components/api-gateway/http-lambda-integration-no-permissions.d.ts +18 -0
- package/lib/components/api-gateway/http-lambda-integration-no-permissions.js +26 -0
- package/lib/components/app-sync/core-graphql-api.d.ts +12 -0
- package/lib/components/app-sync/core-graphql-api.js +54 -0
- package/lib/components/auth.d.ts +75 -0
- package/lib/components/auth.js +100 -0
- package/lib/components/cognito/core-user-pool-client.d.ts +10 -0
- package/lib/components/cognito/core-user-pool-client.js +47 -0
- package/lib/components/cognito/core-user-pool-domain.d.ts +10 -0
- package/lib/components/cognito/core-user-pool-domain.js +41 -0
- package/lib/components/cognito/core-user-pool-kms-key.d.ts +10 -0
- package/lib/components/cognito/core-user-pool-kms-key.js +37 -0
- package/lib/components/cognito/core-user-pool.d.ts +10 -0
- package/lib/components/cognito/core-user-pool.js +54 -0
- package/lib/components/core.d.ts +102 -0
- package/lib/components/core.js +79 -0
- package/lib/components/dynamodb/dynamo-db-data-store.d.ts +33 -0
- package/lib/components/dynamodb/dynamo-db-data-store.js +107 -0
- package/lib/components/event-bridge/data-event-bus.d.ts +19 -0
- package/lib/components/event-bridge/data-event-bus.js +34 -0
- package/lib/components/event-bridge/ops-event-bus.d.ts +19 -0
- package/lib/components/event-bridge/ops-event-bus.js +34 -0
- package/lib/components/global.d.ts +36 -0
- package/lib/components/global.js +63 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +18 -0
- package/lib/components/route-53/child-hosted-zone.d.ts +20 -0
- package/lib/components/route-53/child-hosted-zone.js +48 -0
- package/lib/components/route-53/root-hosted-zone.d.ts +10 -0
- package/lib/components/route-53/root-hosted-zone.js +20 -0
- package/lib/components/ssm/discoverable-string-parameter.d.ts +59 -0
- package/lib/components/ssm/discoverable-string-parameter.js +50 -0
- package/lib/components/ssm/index.d.ts +1 -0
- package/lib/components/ssm/index.js +18 -0
- package/lib/data/dynamo/ehr/r4/Patient.d.ts +180 -0
- package/lib/data/dynamo/ehr/r4/Patient.js +192 -0
- package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.d.ts +162 -0
- package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.js +37 -0
- package/lib/data/hello-world.d.ts +39 -0
- package/lib/data/hello-world.js +59 -0
- package/lib/data/import-patient-with-dynalite.d.ts +1 -0
- package/lib/data/import-patient-with-dynalite.js +87 -0
- package/lib/data/import-patient.d.ts +47 -0
- package/lib/data/import-patient.js +158 -0
- package/lib/data/lambda/rest-api-lambda.d.ts +13 -0
- package/lib/data/lambda/rest-api-lambda.handler.d.ts +1 -0
- package/lib/data/lambda/rest-api-lambda.handler.js +10 -0
- package/lib/data/lambda/rest-api-lambda.js +22 -0
- package/lib/data/middleware/open-hi-context.d.ts +13 -0
- package/lib/data/middleware/open-hi-context.js +31 -0
- package/lib/data/rest-api/ehr/r4/Patient.d.ts +16 -0
- package/lib/data/rest-api/ehr/r4/Patient.js +234 -0
- package/lib/data/rest-api/rest-api-local.d.ts +1 -0
- package/lib/data/rest-api/rest-api-local.js +8 -0
- package/lib/data/rest-api/rest-api-mockdata.d.ts +7 -0
- package/lib/data/rest-api/rest-api-mockdata.js +585 -0
- package/lib/data/rest-api/rest-api.d.ts +3 -0
- package/lib/data/rest-api/rest-api.js +26 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +20 -0
- package/lib/lib/compression.d.ts +27 -0
- package/lib/lib/compression.js +87 -0
- package/lib/services/index.d.ts +5 -0
- package/lib/services/index.js +22 -0
- package/lib/services/open-hi-auth-service.d.ts +31 -0
- package/lib/services/open-hi-auth-service.js +31 -0
- package/lib/services/open-hi-core-service.d.ts +15 -0
- package/lib/services/open-hi-core-service.js +38 -0
- package/lib/services/open-hi-data-service.d.ts +18 -0
- package/lib/services/open-hi-data-service.js +18 -0
- package/lib/services/open-hi-global-service.d.ts +15 -0
- package/lib/services/open-hi-global-service.js +44 -0
- package/lib/services/open-hi-rest-api-service.d.ts +17 -0
- package/lib/services/open-hi-rest-api-service.js +107 -0
- package/package.json +67 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { IUserPool, IUserPoolClient, IUserPoolDomain, UserPoolProps } from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { IKey } from "aws-cdk-lib/aws-kms";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export interface AuthProps {
|
|
5
|
+
/**
|
|
6
|
+
* Optional props for creating the user pool.
|
|
7
|
+
*/
|
|
8
|
+
readonly userPoolProps?: UserPoolProps;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Auth construct that manages Cognito authentication resources.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* The Auth construct provides authentication infrastructure including:
|
|
15
|
+
* - Cognito User Pool for user management and authentication
|
|
16
|
+
* - User Pool Client for application integration
|
|
17
|
+
* - User Pool Domain for hosting the Cognito hosted UI
|
|
18
|
+
* - KMS Key for Cognito User Pool encryption
|
|
19
|
+
*
|
|
20
|
+
* When created in the Auth service (`serviceType === OPEN_HI_SERVICE_TYPE.AUTH`),
|
|
21
|
+
* it creates concrete resources. Otherwise, it imports existing resources
|
|
22
|
+
* from SSM Parameter Store.
|
|
23
|
+
*
|
|
24
|
+
* Use {@link Auth.fromConstruct} to obtain an Auth instance (with resources
|
|
25
|
+
* imported from AUTH SSM parameters) when not in the Auth service, e.g. from
|
|
26
|
+
* the Core construct.
|
|
27
|
+
*
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export declare class Auth extends Construct {
|
|
31
|
+
/**
|
|
32
|
+
* Returns an Auth instance that uses resources imported from AUTH SSM
|
|
33
|
+
* parameters. Use this when creating Core or other stacks that consume
|
|
34
|
+
* auth resources; the Auth stack must be deployed first.
|
|
35
|
+
*
|
|
36
|
+
* @param scope - Construct scope (e.g. Core); must be in a stack that has
|
|
37
|
+
* access to the same account/region as the deployed Auth stack.
|
|
38
|
+
*/
|
|
39
|
+
static fromConstruct(scope: Construct): Auth;
|
|
40
|
+
/**
|
|
41
|
+
* Is this construct being created in the auth service or elsewhere?
|
|
42
|
+
*/
|
|
43
|
+
readonly isAuthService: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* KMS Key used to encrypt the Cognito User Pool. We need a custom key so that
|
|
46
|
+
* we can decrypt tokens when sending emails using something other than SES.
|
|
47
|
+
*/
|
|
48
|
+
readonly userPoolKmsKey: IKey;
|
|
49
|
+
/**
|
|
50
|
+
* Cognito User Pool for user management and authentication.
|
|
51
|
+
*/
|
|
52
|
+
readonly userPool: IUserPool;
|
|
53
|
+
/**
|
|
54
|
+
* Cognito User Pool Client for application integration with the User Pool.
|
|
55
|
+
*/
|
|
56
|
+
readonly userPoolClient: IUserPoolClient;
|
|
57
|
+
/**
|
|
58
|
+
* Cognito User Pool Domain for hosting the Cognito hosted UI.
|
|
59
|
+
*/
|
|
60
|
+
readonly userPoolDomain: IUserPoolDomain;
|
|
61
|
+
constructor(scope: Construct, props?: AuthProps);
|
|
62
|
+
/*****************************************************************************
|
|
63
|
+
*
|
|
64
|
+
* Auth Support
|
|
65
|
+
*
|
|
66
|
+
****************************************************************************/
|
|
67
|
+
protected createUserPoolKmsKey(): IKey;
|
|
68
|
+
protected createUserPool(props?: UserPoolProps): IUserPool;
|
|
69
|
+
protected createUserPoolClient(props: {
|
|
70
|
+
userPool: IUserPool;
|
|
71
|
+
}): IUserPoolClient;
|
|
72
|
+
protected createUserPoolDomain(props: {
|
|
73
|
+
userPool: IUserPool;
|
|
74
|
+
}): IUserPoolDomain;
|
|
75
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Auth = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const open_hi_service_1 = require("../app/open-hi-service");
|
|
6
|
+
const core_user_pool_1 = require("./cognito/core-user-pool");
|
|
7
|
+
const core_user_pool_client_1 = require("./cognito/core-user-pool-client");
|
|
8
|
+
const core_user_pool_domain_1 = require("./cognito/core-user-pool-domain");
|
|
9
|
+
const core_user_pool_kms_key_1 = require("./cognito/core-user-pool-kms-key");
|
|
10
|
+
/**
|
|
11
|
+
* Auth construct that manages Cognito authentication resources.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* The Auth construct provides authentication infrastructure including:
|
|
15
|
+
* - Cognito User Pool for user management and authentication
|
|
16
|
+
* - User Pool Client for application integration
|
|
17
|
+
* - User Pool Domain for hosting the Cognito hosted UI
|
|
18
|
+
* - KMS Key for Cognito User Pool encryption
|
|
19
|
+
*
|
|
20
|
+
* When created in the Auth service (`serviceType === OPEN_HI_SERVICE_TYPE.AUTH`),
|
|
21
|
+
* it creates concrete resources. Otherwise, it imports existing resources
|
|
22
|
+
* from SSM Parameter Store.
|
|
23
|
+
*
|
|
24
|
+
* Use {@link Auth.fromConstruct} to obtain an Auth instance (with resources
|
|
25
|
+
* imported from AUTH SSM parameters) when not in the Auth service, e.g. from
|
|
26
|
+
* the Core construct.
|
|
27
|
+
*
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
class Auth extends constructs_1.Construct {
|
|
31
|
+
/**
|
|
32
|
+
* Returns an Auth instance that uses resources imported from AUTH SSM
|
|
33
|
+
* parameters. Use this when creating Core or other stacks that consume
|
|
34
|
+
* auth resources; the Auth stack must be deployed first.
|
|
35
|
+
*
|
|
36
|
+
* @param scope - Construct scope (e.g. Core); must be in a stack that has
|
|
37
|
+
* access to the same account/region as the deployed Auth stack.
|
|
38
|
+
*/
|
|
39
|
+
static fromConstruct(scope) {
|
|
40
|
+
return new Auth(scope, {});
|
|
41
|
+
}
|
|
42
|
+
constructor(scope, props = {}) {
|
|
43
|
+
super(scope, "auth");
|
|
44
|
+
/**
|
|
45
|
+
* Reference to parent stack this belongs to.
|
|
46
|
+
*/
|
|
47
|
+
const service = open_hi_service_1.OpenHiService.of(this);
|
|
48
|
+
/**
|
|
49
|
+
* Determine if we are in the auth service or not.
|
|
50
|
+
*/
|
|
51
|
+
this.isAuthService = service.serviceType === open_hi_service_1.OPEN_HI_SERVICE_TYPE.AUTH;
|
|
52
|
+
/**
|
|
53
|
+
* Auth Support
|
|
54
|
+
*/
|
|
55
|
+
this.userPoolKmsKey = this.createUserPoolKmsKey();
|
|
56
|
+
this.userPool = this.createUserPool({
|
|
57
|
+
...props.userPoolProps,
|
|
58
|
+
customSenderKmsKey: this.userPoolKmsKey,
|
|
59
|
+
});
|
|
60
|
+
this.userPoolClient = this.createUserPoolClient({
|
|
61
|
+
userPool: this.userPool,
|
|
62
|
+
});
|
|
63
|
+
this.userPoolDomain = this.createUserPoolDomain({
|
|
64
|
+
userPool: this.userPool,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/*****************************************************************************
|
|
68
|
+
*
|
|
69
|
+
* Auth Support
|
|
70
|
+
*
|
|
71
|
+
****************************************************************************/
|
|
72
|
+
createUserPoolKmsKey() {
|
|
73
|
+
return this.isAuthService
|
|
74
|
+
? new core_user_pool_kms_key_1.CoreUserPoolKmsKey(this)
|
|
75
|
+
: core_user_pool_kms_key_1.CoreUserPoolKmsKey.fromConstruct(this);
|
|
76
|
+
}
|
|
77
|
+
createUserPool(props) {
|
|
78
|
+
return this.isAuthService
|
|
79
|
+
? new core_user_pool_1.CoreUserPool(this, props)
|
|
80
|
+
: core_user_pool_1.CoreUserPool.fromConstruct(this);
|
|
81
|
+
}
|
|
82
|
+
createUserPoolClient(props) {
|
|
83
|
+
return this.isAuthService
|
|
84
|
+
? new core_user_pool_client_1.CoreUserPoolClient(this, { userPool: props.userPool })
|
|
85
|
+
: core_user_pool_client_1.CoreUserPoolClient.fromConstruct(this);
|
|
86
|
+
}
|
|
87
|
+
createUserPoolDomain(props) {
|
|
88
|
+
const service = open_hi_service_1.OpenHiService.of(this);
|
|
89
|
+
return this.isAuthService
|
|
90
|
+
? new core_user_pool_domain_1.CoreUserPoolDomain(this, {
|
|
91
|
+
userPool: props.userPool,
|
|
92
|
+
cognitoDomain: {
|
|
93
|
+
domainPrefix: `auth-${service.branchHash}`,
|
|
94
|
+
},
|
|
95
|
+
})
|
|
96
|
+
: core_user_pool_domain_1.CoreUserPoolDomain.fromConstruct(this);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.Auth = Auth;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsMkNBQXVDO0FBQ3ZDLDREQUE2RTtBQUM3RSw2REFBd0Q7QUFDeEQsMkVBQXFFO0FBQ3JFLDJFQUFxRTtBQUNyRSw2RUFBc0U7QUFTdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLElBQUssU0FBUSxzQkFBUztJQUNqQzs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFnQjtRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBNEJELFlBQVksS0FBZ0IsRUFBRSxRQUFtQixFQUFFO1FBQ2pELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckI7O1dBRUc7UUFDSCxNQUFNLE9BQU8sR0FBRywrQkFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQWtCLENBQUM7UUFFeEQ7O1dBRUc7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEtBQUssc0NBQW9CLENBQUMsSUFBSSxDQUFDO1FBRXZFOztXQUVHO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbEMsR0FBRyxLQUFLLENBQUMsYUFBYTtZQUN0QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsY0FBYztTQUN4QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUM5QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDOUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztrRkFJOEU7SUFFcEUsb0JBQW9CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGFBQWE7WUFDdkIsQ0FBQyxDQUFDLElBQUksMkNBQWtCLENBQUMsSUFBSSxDQUFDO1lBQzlCLENBQUMsQ0FBQywyQ0FBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUFxQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxhQUFhO1lBQ3ZCLENBQUMsQ0FBQyxJQUFJLDZCQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUMvQixDQUFDLENBQUMsNkJBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVTLG9CQUFvQixDQUFDLEtBRTlCO1FBQ0MsT0FBTyxJQUFJLENBQUMsYUFBYTtZQUN2QixDQUFDLENBQUMsSUFBSSwwQ0FBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVELENBQUMsQ0FBQywwQ0FBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVTLG9CQUFvQixDQUFDLEtBRTlCO1FBQ0MsTUFBTSxPQUFPLEdBQUcsK0JBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFrQixDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGFBQWE7WUFDdkIsQ0FBQyxDQUFDLElBQUksMENBQWtCLENBQUMsSUFBSSxFQUFFO2dCQUMzQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLGFBQWEsRUFBRTtvQkFDYixZQUFZLEVBQUUsUUFBUSxPQUFPLENBQUMsVUFBVSxFQUFFO2lCQUMzQzthQUNGLENBQUM7WUFDSixDQUFDLENBQUMsMENBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQTNHRCxvQkEyR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJVXNlclBvb2wsXG4gIElVc2VyUG9vbENsaWVudCxcbiAgSVVzZXJQb29sRG9tYWluLFxuICBVc2VyUG9vbFByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIjtcbmltcG9ydCB7IElLZXkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9QRU5fSElfU0VSVklDRV9UWVBFLCBPcGVuSGlTZXJ2aWNlIH0gZnJvbSBcIi4uL2FwcC9vcGVuLWhpLXNlcnZpY2VcIjtcbmltcG9ydCB7IENvcmVVc2VyUG9vbCB9IGZyb20gXCIuL2NvZ25pdG8vY29yZS11c2VyLXBvb2xcIjtcbmltcG9ydCB7IENvcmVVc2VyUG9vbENsaWVudCB9IGZyb20gXCIuL2NvZ25pdG8vY29yZS11c2VyLXBvb2wtY2xpZW50XCI7XG5pbXBvcnQgeyBDb3JlVXNlclBvb2xEb21haW4gfSBmcm9tIFwiLi9jb2duaXRvL2NvcmUtdXNlci1wb29sLWRvbWFpblwiO1xuaW1wb3J0IHsgQ29yZVVzZXJQb29sS21zS2V5IH0gZnJvbSBcIi4vY29nbml0by9jb3JlLXVzZXItcG9vbC1rbXMta2V5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFByb3BzIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHByb3BzIGZvciBjcmVhdGluZyB0aGUgdXNlciBwb29sLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xQcm9wcz86IFVzZXJQb29sUHJvcHM7XG59XG5cbi8qKlxuICogQXV0aCBjb25zdHJ1Y3QgdGhhdCBtYW5hZ2VzIENvZ25pdG8gYXV0aGVudGljYXRpb24gcmVzb3VyY2VzLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgQXV0aCBjb25zdHJ1Y3QgcHJvdmlkZXMgYXV0aGVudGljYXRpb24gaW5mcmFzdHJ1Y3R1cmUgaW5jbHVkaW5nOlxuICogLSBDb2duaXRvIFVzZXIgUG9vbCBmb3IgdXNlciBtYW5hZ2VtZW50IGFuZCBhdXRoZW50aWNhdGlvblxuICogLSBVc2VyIFBvb2wgQ2xpZW50IGZvciBhcHBsaWNhdGlvbiBpbnRlZ3JhdGlvblxuICogLSBVc2VyIFBvb2wgRG9tYWluIGZvciBob3N0aW5nIHRoZSBDb2duaXRvIGhvc3RlZCBVSVxuICogLSBLTVMgS2V5IGZvciBDb2duaXRvIFVzZXIgUG9vbCBlbmNyeXB0aW9uXG4gKlxuICogV2hlbiBjcmVhdGVkIGluIHRoZSBBdXRoIHNlcnZpY2UgKGBzZXJ2aWNlVHlwZSA9PT0gT1BFTl9ISV9TRVJWSUNFX1RZUEUuQVVUSGApLFxuICogaXQgY3JlYXRlcyBjb25jcmV0ZSByZXNvdXJjZXMuIE90aGVyd2lzZSwgaXQgaW1wb3J0cyBleGlzdGluZyByZXNvdXJjZXNcbiAqIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqXG4gKiBVc2Uge0BsaW5rIEF1dGguZnJvbUNvbnN0cnVjdH0gdG8gb2J0YWluIGFuIEF1dGggaW5zdGFuY2UgKHdpdGggcmVzb3VyY2VzXG4gKiBpbXBvcnRlZCBmcm9tIEFVVEggU1NNIHBhcmFtZXRlcnMpIHdoZW4gbm90IGluIHRoZSBBdXRoIHNlcnZpY2UsIGUuZy4gZnJvbVxuICogdGhlIENvcmUgY29uc3RydWN0LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGggZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogUmV0dXJucyBhbiBBdXRoIGluc3RhbmNlIHRoYXQgdXNlcyByZXNvdXJjZXMgaW1wb3J0ZWQgZnJvbSBBVVRIIFNTTVxuICAgKiBwYXJhbWV0ZXJzLiBVc2UgdGhpcyB3aGVuIGNyZWF0aW5nIENvcmUgb3Igb3RoZXIgc3RhY2tzIHRoYXQgY29uc3VtZVxuICAgKiBhdXRoIHJlc291cmNlczsgdGhlIEF1dGggc3RhY2sgbXVzdCBiZSBkZXBsb3llZCBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gQ29uc3RydWN0IHNjb3BlIChlLmcuIENvcmUpOyBtdXN0IGJlIGluIGEgc3RhY2sgdGhhdCBoYXNcbiAgICogICBhY2Nlc3MgdG8gdGhlIHNhbWUgYWNjb3VudC9yZWdpb24gYXMgdGhlIGRlcGxveWVkIEF1dGggc3RhY2suXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db25zdHJ1Y3Qoc2NvcGU6IENvbnN0cnVjdCk6IEF1dGgge1xuICAgIHJldHVybiBuZXcgQXV0aChzY29wZSwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgY29uc3RydWN0IGJlaW5nIGNyZWF0ZWQgaW4gdGhlIGF1dGggc2VydmljZSBvciBlbHNld2hlcmU/XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNBdXRoU2VydmljZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogS01TIEtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIENvZ25pdG8gVXNlciBQb29sLiBXZSBuZWVkIGEgY3VzdG9tIGtleSBzbyB0aGF0XG4gICAqIHdlIGNhbiBkZWNyeXB0IHRva2VucyB3aGVuIHNlbmRpbmcgZW1haWxzIHVzaW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIFNFUy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbEttc0tleTogSUtleTtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgZm9yIHVzZXIgbWFuYWdlbWVudCBhbmQgYXV0aGVudGljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2w6IElVc2VyUG9vbDtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgQ2xpZW50IGZvciBhcHBsaWNhdGlvbiBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBVc2VyIFBvb2wuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnQ6IElVc2VyUG9vbENsaWVudDtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgRG9tYWluIGZvciBob3N0aW5nIHRoZSBDb2duaXRvIGhvc3RlZCBVSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbERvbWFpbjogSVVzZXJQb29sRG9tYWluO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBdXRoUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBcImF1dGhcIik7XG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gcGFyZW50IHN0YWNrIHRoaXMgYmVsb25ncyB0by5cbiAgICAgKi9cbiAgICBjb25zdCBzZXJ2aWNlID0gT3BlbkhpU2VydmljZS5vZih0aGlzKSBhcyBPcGVuSGlTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIHdlIGFyZSBpbiB0aGUgYXV0aCBzZXJ2aWNlIG9yIG5vdC5cbiAgICAgKi9cbiAgICB0aGlzLmlzQXV0aFNlcnZpY2UgPSBzZXJ2aWNlLnNlcnZpY2VUeXBlID09PSBPUEVOX0hJX1NFUlZJQ0VfVFlQRS5BVVRIO1xuXG4gICAgLyoqXG4gICAgICogQXV0aCBTdXBwb3J0XG4gICAgICovXG4gICAgdGhpcy51c2VyUG9vbEttc0tleSA9IHRoaXMuY3JlYXRlVXNlclBvb2xLbXNLZXkoKTtcbiAgICB0aGlzLnVzZXJQb29sID0gdGhpcy5jcmVhdGVVc2VyUG9vbCh7XG4gICAgICAuLi5wcm9wcy51c2VyUG9vbFByb3BzLFxuICAgICAgY3VzdG9tU2VuZGVyS21zS2V5OiB0aGlzLnVzZXJQb29sS21zS2V5LFxuICAgIH0pO1xuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSB0aGlzLmNyZWF0ZVVzZXJQb29sQ2xpZW50KHtcbiAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgIH0pO1xuICAgIHRoaXMudXNlclBvb2xEb21haW4gPSB0aGlzLmNyZWF0ZVVzZXJQb29sRG9tYWluKHtcbiAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXG4gICAqIEF1dGggU3VwcG9ydFxuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcm90ZWN0ZWQgY3JlYXRlVXNlclBvb2xLbXNLZXkoKTogSUtleSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoU2VydmljZVxuICAgICAgPyBuZXcgQ29yZVVzZXJQb29sS21zS2V5KHRoaXMpXG4gICAgICA6IENvcmVVc2VyUG9vbEttc0tleS5mcm9tQ29uc3RydWN0KHRoaXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVVzZXJQb29sKHByb3BzPzogVXNlclBvb2xQcm9wcyk6IElVc2VyUG9vbCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoU2VydmljZVxuICAgICAgPyBuZXcgQ29yZVVzZXJQb29sKHRoaXMsIHByb3BzKVxuICAgICAgOiBDb3JlVXNlclBvb2wuZnJvbUNvbnN0cnVjdCh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVVc2VyUG9vbENsaWVudChwcm9wczoge1xuICAgIHVzZXJQb29sOiBJVXNlclBvb2w7XG4gIH0pOiBJVXNlclBvb2xDbGllbnQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aFNlcnZpY2VcbiAgICAgID8gbmV3IENvcmVVc2VyUG9vbENsaWVudCh0aGlzLCB7IHVzZXJQb29sOiBwcm9wcy51c2VyUG9vbCB9KVxuICAgICAgOiBDb3JlVXNlclBvb2xDbGllbnQuZnJvbUNvbnN0cnVjdCh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVVc2VyUG9vbERvbWFpbihwcm9wczoge1xuICAgIHVzZXJQb29sOiBJVXNlclBvb2w7XG4gIH0pOiBJVXNlclBvb2xEb21haW4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBPcGVuSGlTZXJ2aWNlLm9mKHRoaXMpIGFzIE9wZW5IaVNlcnZpY2U7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoU2VydmljZVxuICAgICAgPyBuZXcgQ29yZVVzZXJQb29sRG9tYWluKHRoaXMsIHtcbiAgICAgICAgICB1c2VyUG9vbDogcHJvcHMudXNlclBvb2wsXG4gICAgICAgICAgY29nbml0b0RvbWFpbjoge1xuICAgICAgICAgICAgZG9tYWluUHJlZml4OiBgYXV0aC0ke3NlcnZpY2UuYnJhbmNoSGFzaH1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IENvcmVVc2VyUG9vbERvbWFpbi5mcm9tQ29uc3RydWN0KHRoaXMpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IUserPoolClient, UserPoolClient, UserPoolClientProps } from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export declare class CoreUserPoolClient extends UserPoolClient {
|
|
4
|
+
/**
|
|
5
|
+
* Used when storing the User Pool Client ID in SSM.
|
|
6
|
+
*/
|
|
7
|
+
static readonly SSM_PARAM_NAME = "CORE_USER_POOL_CLIENT";
|
|
8
|
+
static fromConstruct(scope: Construct): IUserPoolClient;
|
|
9
|
+
constructor(scope: Construct, props: UserPoolClientProps);
|
|
10
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoreUserPoolClient = void 0;
|
|
4
|
+
const aws_cognito_1 = require("aws-cdk-lib/aws-cognito");
|
|
5
|
+
const open_hi_service_1 = require("../../app/open-hi-service");
|
|
6
|
+
const ssm_1 = require("../ssm");
|
|
7
|
+
class CoreUserPoolClient extends aws_cognito_1.UserPoolClient {
|
|
8
|
+
static fromConstruct(scope) {
|
|
9
|
+
const userPoolClientId = ssm_1.DiscoverableStringParameter.valueForLookupName(scope, {
|
|
10
|
+
ssmParamName: CoreUserPoolClient.SSM_PARAM_NAME,
|
|
11
|
+
serviceType: open_hi_service_1.OPEN_HI_SERVICE_TYPE.AUTH,
|
|
12
|
+
});
|
|
13
|
+
return aws_cognito_1.UserPoolClient.fromUserPoolClientId(scope, "user-pool-client", userPoolClientId);
|
|
14
|
+
}
|
|
15
|
+
constructor(scope, props) {
|
|
16
|
+
super(scope, "user-pool-client", {
|
|
17
|
+
/**
|
|
18
|
+
* Defaults
|
|
19
|
+
*/
|
|
20
|
+
generateSecret: false,
|
|
21
|
+
oAuth: {
|
|
22
|
+
flows: {
|
|
23
|
+
authorizationCodeGrant: true,
|
|
24
|
+
implicitCodeGrant: true,
|
|
25
|
+
},
|
|
26
|
+
callbackUrls: [`https://localhost:3000/oauth/callback`],
|
|
27
|
+
},
|
|
28
|
+
/**
|
|
29
|
+
* Overrideable props
|
|
30
|
+
*/
|
|
31
|
+
...props,
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Generate the SSM Parameter used to store this User Pool's ID.
|
|
35
|
+
*/
|
|
36
|
+
new ssm_1.DiscoverableStringParameter(this, "user-pool-client-param", {
|
|
37
|
+
ssmParamName: CoreUserPoolClient.SSM_PARAM_NAME,
|
|
38
|
+
stringValue: this.userPoolClientId,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.CoreUserPoolClient = CoreUserPoolClient;
|
|
43
|
+
/**
|
|
44
|
+
* Used when storing the User Pool Client ID in SSM.
|
|
45
|
+
*/
|
|
46
|
+
CoreUserPoolClient.SSM_PARAM_NAME = "CORE_USER_POOL_CLIENT";
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS11c2VyLXBvb2wtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29nbml0by9jb3JlLXVzZXItcG9vbC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBSWlDO0FBRWpDLCtEQUFpRTtBQUNqRSxnQ0FBcUQ7QUFFckQsTUFBYSxrQkFBbUIsU0FBUSw0QkFBYztJQU03QyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWdCO1FBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsaUNBQTJCLENBQUMsa0JBQWtCLENBQ3JFLEtBQUssRUFDTDtZQUNFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxjQUFjO1lBQy9DLFdBQVcsRUFBRSxzQ0FBb0IsQ0FBQyxJQUFJO1NBQ3ZDLENBQ0YsQ0FBQztRQUVGLE9BQU8sNEJBQWMsQ0FBQyxvQkFBb0IsQ0FDeEMsS0FBSyxFQUNMLGtCQUFrQixFQUNsQixnQkFBZ0IsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLEtBQWdCLEVBQUUsS0FBMEI7UUFDdEQsS0FBSyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtZQUMvQjs7ZUFFRztZQUNILGNBQWMsRUFBRSxLQUFLO1lBQ3JCLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUU7b0JBQ0wsc0JBQXNCLEVBQUUsSUFBSTtvQkFDNUIsaUJBQWlCLEVBQUUsSUFBSTtpQkFDeEI7Z0JBQ0QsWUFBWSxFQUFFLENBQUMsdUNBQXVDLENBQUM7YUFDeEQ7WUFFRDs7ZUFFRztZQUNILEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsSUFBSSxpQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDOUQsWUFBWSxFQUFFLGtCQUFrQixDQUFDLGNBQWM7WUFDL0MsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFqREgsZ0RBa0RDO0FBakRDOztHQUVHO0FBQ29CLGlDQUFjLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJVXNlclBvb2xDbGllbnQsXG4gIFVzZXJQb29sQ2xpZW50LFxuICBVc2VyUG9vbENsaWVudFByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBPUEVOX0hJX1NFUlZJQ0VfVFlQRSB9IGZyb20gXCIuLi8uLi9hcHAvb3Blbi1oaS1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vc3NtXCI7XG5cbmV4cG9ydCBjbGFzcyBDb3JlVXNlclBvb2xDbGllbnQgZXh0ZW5kcyBVc2VyUG9vbENsaWVudCB7XG4gIC8qKlxuICAgKiBVc2VkIHdoZW4gc3RvcmluZyB0aGUgVXNlciBQb29sIENsaWVudCBJRCBpbiBTU00uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNTTV9QQVJBTV9OQU1FID0gXCJDT1JFX1VTRVJfUE9PTF9DTElFTlRcIjtcblxuICBwdWJsaWMgc3RhdGljIGZyb21Db25zdHJ1Y3Qoc2NvcGU6IENvbnN0cnVjdCk6IElVc2VyUG9vbENsaWVudCB7XG4gICAgY29uc3QgdXNlclBvb2xDbGllbnRJZCA9IERpc2NvdmVyYWJsZVN0cmluZ1BhcmFtZXRlci52YWx1ZUZvckxvb2t1cE5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIHtcbiAgICAgICAgc3NtUGFyYW1OYW1lOiBDb3JlVXNlclBvb2xDbGllbnQuU1NNX1BBUkFNX05BTUUsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBPUEVOX0hJX1NFUlZJQ0VfVFlQRS5BVVRILFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIFVzZXJQb29sQ2xpZW50LmZyb21Vc2VyUG9vbENsaWVudElkKFxuICAgICAgc2NvcGUsXG4gICAgICBcInVzZXItcG9vbC1jbGllbnRcIixcbiAgICAgIHVzZXJQb29sQ2xpZW50SWQsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBVc2VyUG9vbENsaWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIFwidXNlci1wb29sLWNsaWVudFwiLCB7XG4gICAgICAvKipcbiAgICAgICAqIERlZmF1bHRzXG4gICAgICAgKi9cbiAgICAgIGdlbmVyYXRlU2VjcmV0OiBmYWxzZSxcbiAgICAgIG9BdXRoOiB7XG4gICAgICAgIGZsb3dzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbkNvZGVHcmFudDogdHJ1ZSxcbiAgICAgICAgICBpbXBsaWNpdENvZGVHcmFudDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2tVcmxzOiBbYGh0dHBzOi8vbG9jYWxob3N0OjMwMDAvb2F1dGgvY2FsbGJhY2tgXSxcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogT3ZlcnJpZGVhYmxlIHByb3BzXG4gICAgICAgKi9cbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGUgdGhlIFNTTSBQYXJhbWV0ZXIgdXNlZCB0byBzdG9yZSB0aGlzIFVzZXIgUG9vbCdzIElELlxuICAgICAqL1xuICAgIG5ldyBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJ1c2VyLXBvb2wtY2xpZW50LXBhcmFtXCIsIHtcbiAgICAgIHNzbVBhcmFtTmFtZTogQ29yZVVzZXJQb29sQ2xpZW50LlNTTV9QQVJBTV9OQU1FLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMudXNlclBvb2xDbGllbnRJZCxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IUserPoolDomain, UserPoolDomain, UserPoolDomainProps } from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export declare class CoreUserPoolDomain extends UserPoolDomain {
|
|
4
|
+
/**
|
|
5
|
+
* Used when storing the User Pool Domain in SSM.
|
|
6
|
+
*/
|
|
7
|
+
static readonly SSM_PARAM_NAME = "CORE_USER_POOL_DOMAIN";
|
|
8
|
+
static fromConstruct(scope: Construct): IUserPoolDomain;
|
|
9
|
+
constructor(scope: Construct, props: UserPoolDomainProps);
|
|
10
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoreUserPoolDomain = void 0;
|
|
4
|
+
const aws_cognito_1 = require("aws-cdk-lib/aws-cognito");
|
|
5
|
+
const open_hi_service_1 = require("../../app/open-hi-service");
|
|
6
|
+
const ssm_1 = require("../ssm");
|
|
7
|
+
class CoreUserPoolDomain extends aws_cognito_1.UserPoolDomain {
|
|
8
|
+
static fromConstruct(scope) {
|
|
9
|
+
const userPoolDomain = ssm_1.DiscoverableStringParameter.valueForLookupName(scope, {
|
|
10
|
+
ssmParamName: CoreUserPoolDomain.SSM_PARAM_NAME,
|
|
11
|
+
serviceType: open_hi_service_1.OPEN_HI_SERVICE_TYPE.AUTH,
|
|
12
|
+
});
|
|
13
|
+
return aws_cognito_1.UserPoolDomain.fromDomainName(scope, "user-pool-domain", userPoolDomain);
|
|
14
|
+
}
|
|
15
|
+
constructor(scope, props) {
|
|
16
|
+
/**
|
|
17
|
+
* This supports both custom and native Cognito domains, but we need to
|
|
18
|
+
* name them uniquely so that swap outs work and don't cause conflicts
|
|
19
|
+
* when cloudformation does it's deploy.
|
|
20
|
+
*/
|
|
21
|
+
const id = props.cognitoDomain?.domainPrefix
|
|
22
|
+
? "cognito-domain"
|
|
23
|
+
: "custom-domain";
|
|
24
|
+
super(scope, id, {
|
|
25
|
+
...props,
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Generate the SSM Parameter used to store this User Pool's Domain.
|
|
29
|
+
*/
|
|
30
|
+
new ssm_1.DiscoverableStringParameter(this, "user-pool-domain-param", {
|
|
31
|
+
ssmParamName: CoreUserPoolDomain.SSM_PARAM_NAME,
|
|
32
|
+
stringValue: this.domainName,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.CoreUserPoolDomain = CoreUserPoolDomain;
|
|
37
|
+
/**
|
|
38
|
+
* Used when storing the User Pool Domain in SSM.
|
|
39
|
+
*/
|
|
40
|
+
CoreUserPoolDomain.SSM_PARAM_NAME = "CORE_USER_POOL_DOMAIN";
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS11c2VyLXBvb2wtZG9tYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29nbml0by9jb3JlLXVzZXItcG9vbC1kb21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBSWlDO0FBRWpDLCtEQUFpRTtBQUNqRSxnQ0FBcUQ7QUFFckQsTUFBYSxrQkFBbUIsU0FBUSw0QkFBYztJQU03QyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWdCO1FBQzFDLE1BQU0sY0FBYyxHQUFHLGlDQUEyQixDQUFDLGtCQUFrQixDQUNuRSxLQUFLLEVBQ0w7WUFDRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsY0FBYztZQUMvQyxXQUFXLEVBQUUsc0NBQW9CLENBQUMsSUFBSTtTQUN2QyxDQUNGLENBQUM7UUFFRixPQUFPLDRCQUFjLENBQUMsY0FBYyxDQUNsQyxLQUFLLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxLQUEwQjtRQUN0RDs7OztXQUlHO1FBQ0gsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxZQUFZO1lBQzFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFDbEIsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUVwQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsSUFBSSxpQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDOUQsWUFBWSxFQUFFLGtCQUFrQixDQUFDLGNBQWM7WUFDL0MsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBM0NILGdEQTRDQztBQTNDQzs7R0FFRztBQUNvQixpQ0FBYyxHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSVVzZXJQb29sRG9tYWluLFxuICBVc2VyUG9vbERvbWFpbixcbiAgVXNlclBvb2xEb21haW5Qcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2duaXRvXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgT1BFTl9ISV9TRVJWSUNFX1RZUEUgfSBmcm9tIFwiLi4vLi4vYXBwL29wZW4taGktc2VydmljZVwiO1xuaW1wb3J0IHsgRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcIi4uL3NzbVwiO1xuXG5leHBvcnQgY2xhc3MgQ29yZVVzZXJQb29sRG9tYWluIGV4dGVuZHMgVXNlclBvb2xEb21haW4ge1xuICAvKipcbiAgICogVXNlZCB3aGVuIHN0b3JpbmcgdGhlIFVzZXIgUG9vbCBEb21haW4gaW4gU1NNLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTU01fUEFSQU1fTkFNRSA9IFwiQ09SRV9VU0VSX1BPT0xfRE9NQUlOXCI7XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29uc3RydWN0KHNjb3BlOiBDb25zdHJ1Y3QpOiBJVXNlclBvb2xEb21haW4ge1xuICAgIGNvbnN0IHVzZXJQb29sRG9tYWluID0gRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yTG9va3VwTmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAge1xuICAgICAgICBzc21QYXJhbU5hbWU6IENvcmVVc2VyUG9vbERvbWFpbi5TU01fUEFSQU1fTkFNRSxcbiAgICAgICAgc2VydmljZVR5cGU6IE9QRU5fSElfU0VSVklDRV9UWVBFLkFVVEgsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gVXNlclBvb2xEb21haW4uZnJvbURvbWFpbk5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIFwidXNlci1wb29sLWRvbWFpblwiLFxuICAgICAgdXNlclBvb2xEb21haW4sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBVc2VyUG9vbERvbWFpblByb3BzKSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBzdXBwb3J0cyBib3RoIGN1c3RvbSBhbmQgbmF0aXZlIENvZ25pdG8gZG9tYWlucywgYnV0IHdlIG5lZWQgdG9cbiAgICAgKiBuYW1lIHRoZW0gdW5pcXVlbHkgc28gdGhhdCBzd2FwIG91dHMgd29yayBhbmQgZG9uJ3QgY2F1c2UgY29uZmxpY3RzXG4gICAgICogd2hlbiBjbG91ZGZvcm1hdGlvbiBkb2VzIGl0J3MgZGVwbG95LlxuICAgICAqL1xuICAgIGNvbnN0IGlkID0gcHJvcHMuY29nbml0b0RvbWFpbj8uZG9tYWluUHJlZml4XG4gICAgICA/IFwiY29nbml0by1kb21haW5cIlxuICAgICAgOiBcImN1c3RvbS1kb21haW5cIjtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSB0aGUgU1NNIFBhcmFtZXRlciB1c2VkIHRvIHN0b3JlIHRoaXMgVXNlciBQb29sJ3MgRG9tYWluLlxuICAgICAqL1xuICAgIG5ldyBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJ1c2VyLXBvb2wtZG9tYWluLXBhcmFtXCIsIHtcbiAgICAgIHNzbVBhcmFtTmFtZTogQ29yZVVzZXJQb29sRG9tYWluLlNTTV9QQVJBTV9OQU1FLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMuZG9tYWluTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IKey, Key, KeyProps } from "aws-cdk-lib/aws-kms";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export declare class CoreUserPoolKmsKey extends Key {
|
|
4
|
+
/**
|
|
5
|
+
* Used when storing the KMS Key in SSM.
|
|
6
|
+
*/
|
|
7
|
+
static readonly SSM_PARAM_NAME = "CORE_USER_POOL_KMS_KEY";
|
|
8
|
+
static fromConstruct(scope: Construct): IKey;
|
|
9
|
+
constructor(scope: Construct, props?: KeyProps);
|
|
10
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoreUserPoolKmsKey = void 0;
|
|
4
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
5
|
+
const open_hi_service_1 = require("../../app/open-hi-service");
|
|
6
|
+
const ssm_1 = require("../ssm");
|
|
7
|
+
class CoreUserPoolKmsKey extends aws_kms_1.Key {
|
|
8
|
+
static fromConstruct(scope) {
|
|
9
|
+
const keyArn = ssm_1.DiscoverableStringParameter.valueForLookupName(scope, {
|
|
10
|
+
ssmParamName: CoreUserPoolKmsKey.SSM_PARAM_NAME,
|
|
11
|
+
serviceType: open_hi_service_1.OPEN_HI_SERVICE_TYPE.AUTH,
|
|
12
|
+
});
|
|
13
|
+
return aws_kms_1.Key.fromKeyArn(scope, "kms-key", keyArn);
|
|
14
|
+
}
|
|
15
|
+
constructor(scope, props = {}) {
|
|
16
|
+
const service = open_hi_service_1.OpenHiService.of(scope);
|
|
17
|
+
super(scope, "kms-key", {
|
|
18
|
+
...props,
|
|
19
|
+
// alias: ["alias", "cognito", service.branchHash].join("/"),
|
|
20
|
+
description: `KMS Key for Cognito User Pool - ${service.branchHash}`,
|
|
21
|
+
removalPolicy: props.removalPolicy ?? service.removalPolicy,
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Generate the SSM Parameter used to store this KMS Key.
|
|
25
|
+
*/
|
|
26
|
+
new ssm_1.DiscoverableStringParameter(this, "kms-key-param", {
|
|
27
|
+
ssmParamName: CoreUserPoolKmsKey.SSM_PARAM_NAME,
|
|
28
|
+
stringValue: this.keyArn,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.CoreUserPoolKmsKey = CoreUserPoolKmsKey;
|
|
33
|
+
/**
|
|
34
|
+
* Used when storing the KMS Key in SSM.
|
|
35
|
+
*/
|
|
36
|
+
CoreUserPoolKmsKey.SSM_PARAM_NAME = "CORE_USER_POOL_KMS_KEY";
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS11c2VyLXBvb2wta21zLWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvZ25pdG8vY29yZS11c2VyLXBvb2wta21zLWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMEQ7QUFFMUQsK0RBQWdGO0FBQ2hGLGdDQUFxRDtBQUVyRCxNQUFhLGtCQUFtQixTQUFRLGFBQUc7SUFNbEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFnQjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxpQ0FBMkIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7WUFDbkUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLGNBQWM7WUFDL0MsV0FBVyxFQUFFLHNDQUFvQixDQUFDLElBQUk7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxhQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxRQUFrQixFQUFFO1FBQ2hELE1BQU0sT0FBTyxHQUFHLCtCQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBa0IsQ0FBQztRQUV6RCxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUN0QixHQUFHLEtBQUs7WUFDUiw2REFBNkQ7WUFDN0QsV0FBVyxFQUFFLG1DQUFtQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3BFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxhQUFhO1NBQzVELENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsSUFBSSxpQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3JELFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxjQUFjO1lBQy9DLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWhDSCxnREFpQ0M7QUFoQ0M7O0dBRUc7QUFDb0IsaUNBQWMsR0FBRyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElLZXksIEtleSwgS2V5UHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9QRU5fSElfU0VSVklDRV9UWVBFLCBPcGVuSGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2FwcC9vcGVuLWhpLXNlcnZpY2VcIjtcbmltcG9ydCB7IERpc2NvdmVyYWJsZVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi9zc21cIjtcblxuZXhwb3J0IGNsYXNzIENvcmVVc2VyUG9vbEttc0tleSBleHRlbmRzIEtleSB7XG4gIC8qKlxuICAgKiBVc2VkIHdoZW4gc3RvcmluZyB0aGUgS01TIEtleSBpbiBTU00uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNTTV9QQVJBTV9OQU1FID0gXCJDT1JFX1VTRVJfUE9PTF9LTVNfS0VZXCI7XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29uc3RydWN0KHNjb3BlOiBDb25zdHJ1Y3QpOiBJS2V5IHtcbiAgICBjb25zdCBrZXlBcm4gPSBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JMb29rdXBOYW1lKHNjb3BlLCB7XG4gICAgICBzc21QYXJhbU5hbWU6IENvcmVVc2VyUG9vbEttc0tleS5TU01fUEFSQU1fTkFNRSxcbiAgICAgIHNlcnZpY2VUeXBlOiBPUEVOX0hJX1NFUlZJQ0VfVFlQRS5BVVRILFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEtleS5mcm9tS2V5QXJuKHNjb3BlLCBcImttcy1rZXlcIiwga2V5QXJuKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBLZXlQcm9wcyA9IHt9KSB7XG4gICAgY29uc3Qgc2VydmljZSA9IE9wZW5IaVNlcnZpY2Uub2Yoc2NvcGUpIGFzIE9wZW5IaVNlcnZpY2U7XG5cbiAgICBzdXBlcihzY29wZSwgXCJrbXMta2V5XCIsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgLy8gYWxpYXM6IFtcImFsaWFzXCIsIFwiY29nbml0b1wiLCBzZXJ2aWNlLmJyYW5jaEhhc2hdLmpvaW4oXCIvXCIpLFxuICAgICAgZGVzY3JpcHRpb246IGBLTVMgS2V5IGZvciBDb2duaXRvIFVzZXIgUG9vbCAtICR7c2VydmljZS5icmFuY2hIYXNofWAsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IHNlcnZpY2UucmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIHRoZSBTU00gUGFyYW1ldGVyIHVzZWQgdG8gc3RvcmUgdGhpcyBLTVMgS2V5LlxuICAgICAqL1xuICAgIG5ldyBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJrbXMta2V5LXBhcmFtXCIsIHtcbiAgICAgIHNzbVBhcmFtTmFtZTogQ29yZVVzZXJQb29sS21zS2V5LlNTTV9QQVJBTV9OQU1FLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMua2V5QXJuLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IUserPool, UserPool, UserPoolProps } from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export declare class CoreUserPool extends UserPool {
|
|
4
|
+
/**
|
|
5
|
+
* Used when storing the User Pool ID in SSM.
|
|
6
|
+
*/
|
|
7
|
+
static readonly SSM_PARAM_NAME = "CORE_USER_POOL";
|
|
8
|
+
static fromConstruct(scope: Construct): IUserPool;
|
|
9
|
+
constructor(scope: Construct, props?: UserPoolProps);
|
|
10
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoreUserPool = void 0;
|
|
4
|
+
const aws_cognito_1 = require("aws-cdk-lib/aws-cognito");
|
|
5
|
+
const open_hi_service_1 = require("../../app/open-hi-service");
|
|
6
|
+
const ssm_1 = require("../ssm");
|
|
7
|
+
class CoreUserPool extends aws_cognito_1.UserPool {
|
|
8
|
+
static fromConstruct(scope) {
|
|
9
|
+
const userPoolId = ssm_1.DiscoverableStringParameter.valueForLookupName(scope, {
|
|
10
|
+
ssmParamName: CoreUserPool.SSM_PARAM_NAME,
|
|
11
|
+
serviceType: open_hi_service_1.OPEN_HI_SERVICE_TYPE.AUTH,
|
|
12
|
+
});
|
|
13
|
+
return aws_cognito_1.UserPool.fromUserPoolId(scope, "user-pool", userPoolId);
|
|
14
|
+
}
|
|
15
|
+
constructor(scope, props = {}) {
|
|
16
|
+
const service = open_hi_service_1.OpenHiService.of(scope);
|
|
17
|
+
super(scope, "user-pool", {
|
|
18
|
+
/**
|
|
19
|
+
* Defaults
|
|
20
|
+
*/
|
|
21
|
+
selfSignUpEnabled: true,
|
|
22
|
+
signInAliases: {
|
|
23
|
+
email: true,
|
|
24
|
+
},
|
|
25
|
+
userVerification: {
|
|
26
|
+
emailSubject: "Verify your email!",
|
|
27
|
+
emailBody: "Your verification code is {####}.",
|
|
28
|
+
emailStyle: aws_cognito_1.VerificationEmailStyle.CODE,
|
|
29
|
+
},
|
|
30
|
+
removalPolicy: props.removalPolicy ?? service.removalPolicy,
|
|
31
|
+
/**
|
|
32
|
+
* Over-rideable props
|
|
33
|
+
*/
|
|
34
|
+
...props,
|
|
35
|
+
/**
|
|
36
|
+
* Required
|
|
37
|
+
*/
|
|
38
|
+
userPoolName: ["core", "user", "pool", service.branchHash].join("-"),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Generate the SSM Parameter used to store this User Pool's ID.
|
|
42
|
+
*/
|
|
43
|
+
new ssm_1.DiscoverableStringParameter(this, "user-pool-param", {
|
|
44
|
+
ssmParamName: CoreUserPool.SSM_PARAM_NAME,
|
|
45
|
+
stringValue: this.userPoolId,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.CoreUserPool = CoreUserPool;
|
|
50
|
+
/**
|
|
51
|
+
* Used when storing the User Pool ID in SSM.
|
|
52
|
+
*/
|
|
53
|
+
CoreUserPool.SSM_PARAM_NAME = "CORE_USER_POOL";
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS11c2VyLXBvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jb2duaXRvL2NvcmUtdXNlci1wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQUtpQztBQUVqQywrREFBZ0Y7QUFDaEYsZ0NBQXFEO0FBRXJELE1BQWEsWUFBYSxTQUFRLHNCQUFRO0lBTWpDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBZ0I7UUFDMUMsTUFBTSxVQUFVLEdBQUcsaUNBQTJCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO1lBQ3ZFLFlBQVksRUFBRSxZQUFZLENBQUMsY0FBYztZQUN6QyxXQUFXLEVBQUUsc0NBQW9CLENBQUMsSUFBSTtTQUN2QyxDQUFDLENBQUM7UUFFSCxPQUFPLHNCQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxRQUF1QixFQUFFO1FBQ3JELE1BQU0sT0FBTyxHQUFHLCtCQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBa0IsQ0FBQztRQUV6RCxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtZQUN4Qjs7ZUFFRztZQUNILGlCQUFpQixFQUFFLElBQUk7WUFDdkIsYUFBYSxFQUFFO2dCQUNiLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCxnQkFBZ0IsRUFBRTtnQkFDaEIsWUFBWSxFQUFFLG9CQUFvQjtnQkFDbEMsU0FBUyxFQUFFLG1DQUFtQztnQkFDOUMsVUFBVSxFQUFFLG9DQUFzQixDQUFDLElBQUk7YUFDeEM7WUFDRCxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsYUFBYTtZQUUzRDs7ZUFFRztZQUNILEdBQUcsS0FBSztZQUVSOztlQUVHO1lBQ0gsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDckUsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDSCxJQUFJLGlDQUEyQixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUN2RCxZQUFZLEVBQUUsWUFBWSxDQUFDLGNBQWM7WUFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBbkRILG9DQW9EQztBQW5EQzs7R0FFRztBQUNvQiwyQkFBYyxHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSVVzZXJQb29sLFxuICBVc2VyUG9vbCxcbiAgVXNlclBvb2xQcm9wcyxcbiAgVmVyaWZpY2F0aW9uRW1haWxTdHlsZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2duaXRvXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgT1BFTl9ISV9TRVJWSUNFX1RZUEUsIE9wZW5IaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vYXBwL29wZW4taGktc2VydmljZVwiO1xuaW1wb3J0IHsgRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcIi4uL3NzbVwiO1xuXG5leHBvcnQgY2xhc3MgQ29yZVVzZXJQb29sIGV4dGVuZHMgVXNlclBvb2wge1xuICAvKipcbiAgICogVXNlZCB3aGVuIHN0b3JpbmcgdGhlIFVzZXIgUG9vbCBJRCBpbiBTU00uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNTTV9QQVJBTV9OQU1FID0gXCJDT1JFX1VTRVJfUE9PTFwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbnN0cnVjdChzY29wZTogQ29uc3RydWN0KTogSVVzZXJQb29sIHtcbiAgICBjb25zdCB1c2VyUG9vbElkID0gRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yTG9va3VwTmFtZShzY29wZSwge1xuICAgICAgc3NtUGFyYW1OYW1lOiBDb3JlVXNlclBvb2wuU1NNX1BBUkFNX05BTUUsXG4gICAgICBzZXJ2aWNlVHlwZTogT1BFTl9ISV9TRVJWSUNFX1RZUEUuQVVUSCxcbiAgICB9KTtcblxuICAgIHJldHVybiBVc2VyUG9vbC5mcm9tVXNlclBvb2xJZChzY29wZSwgXCJ1c2VyLXBvb2xcIiwgdXNlclBvb2xJZCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBwcm9wczogVXNlclBvb2xQcm9wcyA9IHt9KSB7XG4gICAgY29uc3Qgc2VydmljZSA9IE9wZW5IaVNlcnZpY2Uub2Yoc2NvcGUpIGFzIE9wZW5IaVNlcnZpY2U7XG5cbiAgICBzdXBlcihzY29wZSwgXCJ1c2VyLXBvb2xcIiwge1xuICAgICAgLyoqXG4gICAgICAgKiBEZWZhdWx0c1xuICAgICAgICovXG4gICAgICBzZWxmU2lnblVwRW5hYmxlZDogdHJ1ZSxcbiAgICAgIHNpZ25JbkFsaWFzZXM6IHtcbiAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICB9LFxuICAgICAgdXNlclZlcmlmaWNhdGlvbjoge1xuICAgICAgICBlbWFpbFN1YmplY3Q6IFwiVmVyaWZ5IHlvdXIgZW1haWwhXCIsXG4gICAgICAgIGVtYWlsQm9keTogXCJZb3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzIHsjIyMjfS5cIixcbiAgICAgICAgZW1haWxTdHlsZTogVmVyaWZpY2F0aW9uRW1haWxTdHlsZS5DT0RFLFxuICAgICAgfSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gc2VydmljZS5yZW1vdmFsUG9saWN5LFxuXG4gICAgICAvKipcbiAgICAgICAqIE92ZXItcmlkZWFibGUgcHJvcHNcbiAgICAgICAqL1xuICAgICAgLi4ucHJvcHMsXG5cbiAgICAgIC8qKlxuICAgICAgICogUmVxdWlyZWRcbiAgICAgICAqL1xuICAgICAgdXNlclBvb2xOYW1lOiBbXCJjb3JlXCIsIFwidXNlclwiLCBcInBvb2xcIiwgc2VydmljZS5icmFuY2hIYXNoXS5qb2luKFwiLVwiKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIHRoZSBTU00gUGFyYW1ldGVyIHVzZWQgdG8gc3RvcmUgdGhpcyBVc2VyIFBvb2wncyBJRC5cbiAgICAgKi9cbiAgICBuZXcgRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwidXNlci1wb29sLXBhcmFtXCIsIHtcbiAgICAgIHNzbVBhcmFtTmFtZTogQ29yZVVzZXJQb29sLlNTTV9QQVJBTV9OQU1FLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMudXNlclBvb2xJZCxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { HttpApiProps } from "aws-cdk-lib/aws-apigatewayv2";
|
|
2
|
+
import { GraphqlApiProps } from "aws-cdk-lib/aws-appsync";
|
|
3
|
+
import { IUserPool, IUserPoolClient, IUserPoolDomain } from "aws-cdk-lib/aws-cognito";
|
|
4
|
+
import { EventBusProps, IEventBus } from "aws-cdk-lib/aws-events";
|
|
5
|
+
import { IKey } from "aws-cdk-lib/aws-kms";
|
|
6
|
+
import { Construct } from "constructs";
|
|
7
|
+
import { OpenHiService } from "../app";
|
|
8
|
+
export interface CoreProps {
|
|
9
|
+
/**
|
|
10
|
+
* Pass in options for an event bus, optional.
|
|
11
|
+
*/
|
|
12
|
+
readonly dataEventBusProps?: EventBusProps;
|
|
13
|
+
/**
|
|
14
|
+
* Pass in options for an event bus, optional.
|
|
15
|
+
*/
|
|
16
|
+
readonly opsEventBusProps?: EventBusProps;
|
|
17
|
+
/**
|
|
18
|
+
* Optional args for creating HTTP API.
|
|
19
|
+
*/
|
|
20
|
+
readonly httpApiProps?: HttpApiProps;
|
|
21
|
+
/**
|
|
22
|
+
* Optional args for creating the core GraphQL API.
|
|
23
|
+
*/
|
|
24
|
+
readonly graphqlApiProps?: GraphqlApiProps;
|
|
25
|
+
}
|
|
26
|
+
export declare class Core extends Construct {
|
|
27
|
+
/**
|
|
28
|
+
* Is this construct being created in the core service or elsewhere?
|
|
29
|
+
*/
|
|
30
|
+
readonly isCoreService: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Reference to the stack this core construct is part of.
|
|
33
|
+
*/
|
|
34
|
+
readonly service: OpenHiService;
|
|
35
|
+
/*****************************************************************************
|
|
36
|
+
*
|
|
37
|
+
* Event Bus
|
|
38
|
+
*
|
|
39
|
+
* These are the event bus constructs used across all services in an OpenHI
|
|
40
|
+
* application.
|
|
41
|
+
*
|
|
42
|
+
****************************************************************************/
|
|
43
|
+
/**
|
|
44
|
+
* Event bus that handles data events. This bus is used for events related to
|
|
45
|
+
* data processing, such as data ingestion, transformation, and storage.
|
|
46
|
+
*/
|
|
47
|
+
readonly dataEventBus: IEventBus;
|
|
48
|
+
/**
|
|
49
|
+
* Event bus that handles operational events. This bus is used for events
|
|
50
|
+
* related to system operations, such as monitoring, alerting, and system
|
|
51
|
+
* health.
|
|
52
|
+
*/
|
|
53
|
+
readonly opsEventBus: IEventBus;
|
|
54
|
+
/*****************************************************************************
|
|
55
|
+
*
|
|
56
|
+
* Auth Support
|
|
57
|
+
*
|
|
58
|
+
* These are the authentication constructs used across all services in an
|
|
59
|
+
* OpenHI application.
|
|
60
|
+
*
|
|
61
|
+
****************************************************************************/
|
|
62
|
+
/**
|
|
63
|
+
* KMS Key used to encrypt the Cognito User Pool. We need a custom key so that
|
|
64
|
+
* we can decrypt tokens when sending emails using something other than SES.
|
|
65
|
+
*/
|
|
66
|
+
readonly userPoolKmsKey: IKey;
|
|
67
|
+
/**
|
|
68
|
+
* Cognito User Pool for user management and authentication.
|
|
69
|
+
*/
|
|
70
|
+
readonly userPool: IUserPool;
|
|
71
|
+
/**
|
|
72
|
+
* Cognito User Pool Client for application integration with the User Pool.
|
|
73
|
+
*/
|
|
74
|
+
readonly userPoolClient: IUserPoolClient;
|
|
75
|
+
/**
|
|
76
|
+
* Cognito User Pool Domain for hosting the Cognito hosted UI.
|
|
77
|
+
*/
|
|
78
|
+
readonly userPoolDomain: IUserPoolDomain;
|
|
79
|
+
/*****************************************************************************
|
|
80
|
+
*
|
|
81
|
+
* API Support
|
|
82
|
+
*
|
|
83
|
+
* Global endpoints for both App Sync and API Gateway are defined here. These
|
|
84
|
+
* endpoints can be used/attached to globally by any service.
|
|
85
|
+
*
|
|
86
|
+
****************************************************************************/
|
|
87
|
+
/**
|
|
88
|
+
* API Gateway HTTP API for inbound endpoint traffic.
|
|
89
|
+
*/
|
|
90
|
+
/**
|
|
91
|
+
* App Sync GraphQL API for inbound endpoint traffic. This is the primary
|
|
92
|
+
* entrypoint for all subgraphs.
|
|
93
|
+
*/
|
|
94
|
+
constructor(scope: Construct, props?: CoreProps);
|
|
95
|
+
/*****************************************************************************
|
|
96
|
+
*
|
|
97
|
+
* Event Bus Support
|
|
98
|
+
*
|
|
99
|
+
****************************************************************************/
|
|
100
|
+
protected createDataEventBus(props?: EventBusProps): IEventBus;
|
|
101
|
+
protected createOpsEventBus(props?: EventBusProps): IEventBus;
|
|
102
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Core = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const app_1 = require("../app");
|
|
6
|
+
const auth_1 = require("./auth");
|
|
7
|
+
const data_event_bus_1 = require("./event-bridge/data-event-bus");
|
|
8
|
+
const ops_event_bus_1 = require("./event-bridge/ops-event-bus");
|
|
9
|
+
class Core extends constructs_1.Construct {
|
|
10
|
+
/*****************************************************************************
|
|
11
|
+
*
|
|
12
|
+
* API Support
|
|
13
|
+
*
|
|
14
|
+
* Global endpoints for both App Sync and API Gateway are defined here. These
|
|
15
|
+
* endpoints can be used/attached to globally by any service.
|
|
16
|
+
*
|
|
17
|
+
****************************************************************************/
|
|
18
|
+
/**
|
|
19
|
+
* API Gateway HTTP API for inbound endpoint traffic.
|
|
20
|
+
*/
|
|
21
|
+
// public readonly httpApi: IHttpApi;
|
|
22
|
+
/**
|
|
23
|
+
* App Sync GraphQL API for inbound endpoint traffic. This is the primary
|
|
24
|
+
* entrypoint for all subgraphs.
|
|
25
|
+
*/
|
|
26
|
+
// public readonly graphqlApi: IGraphqlApi;
|
|
27
|
+
constructor(scope, props = {}) {
|
|
28
|
+
super(scope, "core");
|
|
29
|
+
/**
|
|
30
|
+
* Determine if we are in the core service or not.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Reference to parent stack this belongs to.
|
|
34
|
+
*/
|
|
35
|
+
this.service = app_1.OpenHiService.of(this);
|
|
36
|
+
this.isCoreService = this.service.serviceType === app_1.OPEN_HI_SERVICE_TYPE.CORE;
|
|
37
|
+
/**
|
|
38
|
+
* Event Bus Support
|
|
39
|
+
*/
|
|
40
|
+
this.dataEventBus = this.createDataEventBus(props.dataEventBusProps);
|
|
41
|
+
this.opsEventBus = this.createOpsEventBus(props.opsEventBusProps);
|
|
42
|
+
/**
|
|
43
|
+
* Auth Support
|
|
44
|
+
*/
|
|
45
|
+
const auth = auth_1.Auth.fromConstruct(this);
|
|
46
|
+
this.userPoolKmsKey = auth.userPoolKmsKey;
|
|
47
|
+
this.userPool = auth.userPool;
|
|
48
|
+
this.userPoolClient = auth.userPoolClient;
|
|
49
|
+
this.userPoolDomain = auth.userPoolDomain;
|
|
50
|
+
/**
|
|
51
|
+
* API Support
|
|
52
|
+
*/
|
|
53
|
+
// this.httpApi = this.createHttpApi(props.httpApiProps);
|
|
54
|
+
// this.graphqlApi = this.createGraphQlApi(props.graphqlApiProps);
|
|
55
|
+
}
|
|
56
|
+
/*****************************************************************************
|
|
57
|
+
*
|
|
58
|
+
* Event Bus Support
|
|
59
|
+
*
|
|
60
|
+
****************************************************************************/
|
|
61
|
+
createDataEventBus(props) {
|
|
62
|
+
if (!this.dataEventBus) {
|
|
63
|
+
return this.isCoreService
|
|
64
|
+
? new data_event_bus_1.DataEventBus(this, props)
|
|
65
|
+
: data_event_bus_1.DataEventBus.fromConstruct(this);
|
|
66
|
+
}
|
|
67
|
+
return this.dataEventBus;
|
|
68
|
+
}
|
|
69
|
+
createOpsEventBus(props) {
|
|
70
|
+
if (!this.opsEventBus) {
|
|
71
|
+
return this.isCoreService
|
|
72
|
+
? new ops_event_bus_1.OpsEventBus(this, props)
|
|
73
|
+
: ops_event_bus_1.OpsEventBus.fromConstruct(this);
|
|
74
|
+
}
|
|
75
|
+
return this.opsEventBus;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.Core = Core;
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0EsMkNBQXVDO0FBQ3ZDLGdDQUE2RDtBQUM3RCxpQ0FBOEI7QUFDOUIsa0VBQTZEO0FBQzdELGdFQUEyRDtBQXdCM0QsTUFBYSxJQUFLLFNBQVEsc0JBQVM7SUErRGpDOzs7Ozs7O2tGQU84RTtJQUU5RTs7T0FFRztJQUNILHFDQUFxQztJQUVyQzs7O09BR0c7SUFDSCwyQ0FBMkM7SUFFM0MsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUU7UUFDakQsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVyQjs7V0FFRztRQUNIOztXQUVHO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxtQkFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQWtCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSywwQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFFNUU7O1dBRUc7UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVsRTs7V0FFRztRQUNILE1BQU0sSUFBSSxHQUFHLFdBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDOztXQUVHO1FBQ0gseURBQXlEO1FBQ3pELGtFQUFrRTtJQUNwRSxDQUFDO0lBRUQ7Ozs7a0ZBSThFO0lBRXBFLGtCQUFrQixDQUFDLEtBQXFCO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUMsYUFBYTtnQkFDdkIsQ0FBQyxDQUFDLElBQUksNkJBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dCQUMvQixDQUFDLENBQUMsNkJBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRVMsaUJBQWlCLENBQUMsS0FBcUI7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhO2dCQUN2QixDQUFDLENBQUMsSUFBSSwyQkFBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQzlCLENBQUMsQ0FBQywyQkFBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0F5REY7QUFwTUQsb0JBb01DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEFwaVByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcbmltcG9ydCB7IEdyYXBocWxBcGlQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBwc3luY1wiO1xuaW1wb3J0IHtcbiAgSVVzZXJQb29sLFxuICBJVXNlclBvb2xDbGllbnQsXG4gIElVc2VyUG9vbERvbWFpbixcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2duaXRvXCI7XG5pbXBvcnQgeyBFdmVudEJ1c1Byb3BzLCBJRXZlbnRCdXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgSUtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgT1BFTl9ISV9TRVJWSUNFX1RZUEUsIE9wZW5IaVNlcnZpY2UgfSBmcm9tIFwiLi4vYXBwXCI7XG5pbXBvcnQgeyBBdXRoIH0gZnJvbSBcIi4vYXV0aFwiO1xuaW1wb3J0IHsgRGF0YUV2ZW50QnVzIH0gZnJvbSBcIi4vZXZlbnQtYnJpZGdlL2RhdGEtZXZlbnQtYnVzXCI7XG5pbXBvcnQgeyBPcHNFdmVudEJ1cyB9IGZyb20gXCIuL2V2ZW50LWJyaWRnZS9vcHMtZXZlbnQtYnVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29yZVByb3BzIHtcbiAgLyoqXG4gICAqIFBhc3MgaW4gb3B0aW9ucyBmb3IgYW4gZXZlbnQgYnVzLCBvcHRpb25hbC5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFFdmVudEJ1c1Byb3BzPzogRXZlbnRCdXNQcm9wcztcblxuICAvKipcbiAgICogUGFzcyBpbiBvcHRpb25zIGZvciBhbiBldmVudCBidXMsIG9wdGlvbmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BzRXZlbnRCdXNQcm9wcz86IEV2ZW50QnVzUHJvcHM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFyZ3MgZm9yIGNyZWF0aW5nIEhUVFAgQVBJLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEFwaVByb3BzPzogSHR0cEFwaVByb3BzO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhcmdzIGZvciBjcmVhdGluZyB0aGUgY29yZSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWxBcGlQcm9wcz86IEdyYXBocWxBcGlQcm9wcztcbn1cblxuZXhwb3J0IGNsYXNzIENvcmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogSXMgdGhpcyBjb25zdHJ1Y3QgYmVpbmcgY3JlYXRlZCBpbiB0aGUgY29yZSBzZXJ2aWNlIG9yIGVsc2V3aGVyZT9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0NvcmVTZXJ2aWNlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHN0YWNrIHRoaXMgY29yZSBjb25zdHJ1Y3QgaXMgcGFydCBvZi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBPcGVuSGlTZXJ2aWNlO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBFdmVudCBCdXNcbiAgICpcbiAgICogVGhlc2UgYXJlIHRoZSBldmVudCBidXMgY29uc3RydWN0cyB1c2VkIGFjcm9zcyBhbGwgc2VydmljZXMgaW4gYW4gT3BlbkhJXG4gICAqIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRXZlbnQgYnVzIHRoYXQgaGFuZGxlcyBkYXRhIGV2ZW50cy4gVGhpcyBidXMgaXMgdXNlZCBmb3IgZXZlbnRzIHJlbGF0ZWQgdG9cbiAgICogZGF0YSBwcm9jZXNzaW5nLCBzdWNoIGFzIGRhdGEgaW5nZXN0aW9uLCB0cmFuc2Zvcm1hdGlvbiwgYW5kIHN0b3JhZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YUV2ZW50QnVzOiBJRXZlbnRCdXM7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGJ1cyB0aGF0IGhhbmRsZXMgb3BlcmF0aW9uYWwgZXZlbnRzLiBUaGlzIGJ1cyBpcyB1c2VkIGZvciBldmVudHNcbiAgICogcmVsYXRlZCB0byBzeXN0ZW0gb3BlcmF0aW9ucywgc3VjaCBhcyBtb25pdG9yaW5nLCBhbGVydGluZywgYW5kIHN5c3RlbVxuICAgKiBoZWFsdGguXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3BzRXZlbnRCdXM6IElFdmVudEJ1cztcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogQXV0aCBTdXBwb3J0XG4gICAqXG4gICAqIFRoZXNlIGFyZSB0aGUgYXV0aGVudGljYXRpb24gY29uc3RydWN0cyB1c2VkIGFjcm9zcyBhbGwgc2VydmljZXMgaW4gYW5cbiAgICogT3BlbkhJIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogS01TIEtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIENvZ25pdG8gVXNlciBQb29sLiBXZSBuZWVkIGEgY3VzdG9tIGtleSBzbyB0aGF0XG4gICAqIHdlIGNhbiBkZWNyeXB0IHRva2VucyB3aGVuIHNlbmRpbmcgZW1haWxzIHVzaW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIFNFUy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbEttc0tleTogSUtleTtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgZm9yIHVzZXIgbWFuYWdlbWVudCBhbmQgYXV0aGVudGljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2w6IElVc2VyUG9vbDtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgQ2xpZW50IGZvciBhcHBsaWNhdGlvbiBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBVc2VyIFBvb2wuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnQ6IElVc2VyUG9vbENsaWVudDtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgRG9tYWluIGZvciBob3N0aW5nIHRoZSBDb2duaXRvIGhvc3RlZCBVSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbERvbWFpbjogSVVzZXJQb29sRG9tYWluO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBBUEkgU3VwcG9ydFxuICAgKlxuICAgKiBHbG9iYWwgZW5kcG9pbnRzIGZvciBib3RoIEFwcCBTeW5jIGFuZCBBUEkgR2F0ZXdheSBhcmUgZGVmaW5lZCBoZXJlLiBUaGVzZVxuICAgKiBlbmRwb2ludHMgY2FuIGJlIHVzZWQvYXR0YWNoZWQgdG8gZ2xvYmFsbHkgYnkgYW55IHNlcnZpY2UuXG4gICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBIVFRQIEFQSSBmb3IgaW5ib3VuZCBlbmRwb2ludCB0cmFmZmljLlxuICAgKi9cbiAgLy8gcHVibGljIHJlYWRvbmx5IGh0dHBBcGk6IElIdHRwQXBpO1xuXG4gIC8qKlxuICAgKiBBcHAgU3luYyBHcmFwaFFMIEFQSSBmb3IgaW5ib3VuZCBlbmRwb2ludCB0cmFmZmljLiBUaGlzIGlzIHRoZSBwcmltYXJ5XG4gICAqIGVudHJ5cG9pbnQgZm9yIGFsbCBzdWJncmFwaHMuXG4gICAqL1xuICAvLyBwdWJsaWMgcmVhZG9ubHkgZ3JhcGhxbEFwaTogSUdyYXBocWxBcGk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IENvcmVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIFwiY29yZVwiKTtcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB3ZSBhcmUgaW4gdGhlIGNvcmUgc2VydmljZSBvciBub3QuXG4gICAgICovXG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHBhcmVudCBzdGFjayB0aGlzIGJlbG9uZ3MgdG8uXG4gICAgICovXG4gICAgdGhpcy5zZXJ2aWNlID0gT3BlbkhpU2VydmljZS5vZih0aGlzKSBhcyBPcGVuSGlTZXJ2aWNlO1xuICAgIHRoaXMuaXNDb3JlU2VydmljZSA9IHRoaXMuc2VydmljZS5zZXJ2aWNlVHlwZSA9PT0gT1BFTl9ISV9TRVJWSUNFX1RZUEUuQ09SRTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IEJ1cyBTdXBwb3J0XG4gICAgICovXG4gICAgdGhpcy5kYXRhRXZlbnRCdXMgPSB0aGlzLmNyZWF0ZURhdGFFdmVudEJ1cyhwcm9wcy5kYXRhRXZlbnRCdXNQcm9wcyk7XG4gICAgdGhpcy5vcHNFdmVudEJ1cyA9IHRoaXMuY3JlYXRlT3BzRXZlbnRCdXMocHJvcHMub3BzRXZlbnRCdXNQcm9wcyk7XG5cbiAgICAvKipcbiAgICAgKiBBdXRoIFN1cHBvcnRcbiAgICAgKi9cbiAgICBjb25zdCBhdXRoID0gQXV0aC5mcm9tQ29uc3RydWN0KHRoaXMpO1xuICAgIHRoaXMudXNlclBvb2xLbXNLZXkgPSBhdXRoLnVzZXJQb29sS21zS2V5O1xuICAgIHRoaXMudXNlclBvb2wgPSBhdXRoLnVzZXJQb29sO1xuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSBhdXRoLnVzZXJQb29sQ2xpZW50O1xuICAgIHRoaXMudXNlclBvb2xEb21haW4gPSBhdXRoLnVzZXJQb29sRG9tYWluO1xuXG4gICAgLyoqXG4gICAgICogQVBJIFN1cHBvcnRcbiAgICAgKi9cbiAgICAvLyB0aGlzLmh0dHBBcGkgPSB0aGlzLmNyZWF0ZUh0dHBBcGkocHJvcHMuaHR0cEFwaVByb3BzKTtcbiAgICAvLyB0aGlzLmdyYXBocWxBcGkgPSB0aGlzLmNyZWF0ZUdyYXBoUWxBcGkocHJvcHMuZ3JhcGhxbEFwaVByb3BzKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBFdmVudCBCdXMgU3VwcG9ydFxuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcm90ZWN0ZWQgY3JlYXRlRGF0YUV2ZW50QnVzKHByb3BzPzogRXZlbnRCdXNQcm9wcyk6IElFdmVudEJ1cyB7XG4gICAgaWYgKCF0aGlzLmRhdGFFdmVudEJ1cykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDb3JlU2VydmljZVxuICAgICAgICA/IG5ldyBEYXRhRXZlbnRCdXModGhpcywgcHJvcHMpXG4gICAgICAgIDogRGF0YUV2ZW50QnVzLmZyb21Db25zdHJ1Y3QodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGFFdmVudEJ1cztcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPcHNFdmVudEJ1cyhwcm9wcz86IEV2ZW50QnVzUHJvcHMpOiBJRXZlbnRCdXMge1xuICAgIGlmICghdGhpcy5vcHNFdmVudEJ1cykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDb3JlU2VydmljZVxuICAgICAgICA/IG5ldyBPcHNFdmVudEJ1cyh0aGlzLCBwcm9wcylcbiAgICAgICAgOiBPcHNFdmVudEJ1cy5mcm9tQ29uc3RydWN0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHNFdmVudEJ1cztcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBBUEkgRW5kcG9pbnRzIFN1cHBvcnRcbiAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLy8gcHJvdGVjdGVkIGNyZWF0ZUh0dHBBcGkocHJvcHM/OiBIdHRwQXBpUHJvcHMpOiBJSHR0cEFwaSB7XG4gIC8vICAgaWYgKCF0aGlzLmh0dHBBcGkpIHtcbiAgLy8gICAgIHJldHVybiB0aGlzLmlzQ29yZVNlcnZpY2VcbiAgLy8gICAgICAgPyBuZXcgQ29yZUh0dHBBcGkodGhpcywge1xuICAvLyAgICAgICAgICAgLyoqXG4gIC8vICAgICAgICAgICAgKiBVc2VyIHByb3ZpZGVkIHByb3BzXG4gIC8vICAgICAgICAgICAgKi9cbiAgLy8gICAgICAgICAgIC4uLnByb3BzLFxuXG4gIC8vICAgICAgICAgICAvKipcbiAgLy8gICAgICAgICAgICAqIFJlcXVpcmVkXG4gIC8vICAgICAgICAgICAgKi9cbiAgLy8gICAgICAgICAgIGRlZmF1bHRBdXRob3JpemVyOiBuZXcgSHR0cFVzZXJQb29sQXV0aG9yaXplcihcbiAgLy8gICAgICAgICAgICAgXCJjb2duaXRvLWF1dGhvcml6ZXJcIixcbiAgLy8gICAgICAgICAgICAgdGhpcy51c2VyUG9vbCxcbiAgLy8gICAgICAgICAgICksXG4gIC8vICAgICAgICAgfSlcbiAgLy8gICAgICAgOiBDb3JlSHR0cEFwaS5mcm9tQ29uc3RydWN0KHRoaXMpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gdGhpcy5odHRwQXBpO1xuICAvLyB9XG5cbiAgLy8gcHJvdGVjdGVkIGNyZWF0ZUdyYXBoUWxBcGkoXG4gIC8vICAgcHJvcHM/OiBPbWl0PEdyYXBocWxBcGlQcm9wcywgXCJuYW1lXCI+LFxuICAvLyApOiBJR3JhcGhxbEFwaSB7XG4gIC8vICAgaWYgKCF0aGlzLmdyYXBocWxBcGkpIHtcbiAgLy8gICAgIHJldHVybiB0aGlzLmlzQ29yZVNlcnZpY2VcbiAgLy8gICAgICAgPyBuZXcgQ29yZUdyYXBocWxBcGkodGhpcywge1xuICAvLyAgICAgICAgICAgLyoqXG4gIC8vICAgICAgICAgICAgKiBVc2VyIGFyZ3NcbiAgLy8gICAgICAgICAgICAqL1xuICAvLyAgICAgICAgICAgLi4ucHJvcHMsXG5cbiAgLy8gICAgICAgICAgIC8qKlxuICAvLyAgICAgICAgICAgICogUmVxdWlyZWQgYXJnc1xuICAvLyAgICAgICAgICAgICovXG4gIC8vICAgICAgICAgICBhdXRob3JpemF0aW9uQ29uZmlnOiB7XG4gIC8vICAgICAgICAgICAgIGRlZmF1bHRBdXRob3JpemF0aW9uOiB7XG4gIC8vICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvblR5cGU6IEF1dGhvcml6YXRpb25UeXBlLlVTRVJfUE9PTCxcbiAgLy8gICAgICAgICAgICAgICB1c2VyUG9vbENvbmZpZzoge1xuICAvLyAgICAgICAgICAgICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gIC8vICAgICAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgfSlcbiAgLy8gICAgICAgOiBDb3JlR3JhcGhxbEFwaS5mcm9tQ29uc3RydWN0KHRoaXMpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gdGhpcy5ncmFwaHFsQXBpO1xuICAvLyB9XG59XG4iXX0=
|