@liflig/cdk-vy 1.0.0 → 2.1.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 CHANGED
@@ -10,11 +10,19 @@ This is based on https://github.com/nsbno/terraform-provider-vy
10
10
  npm install @liflig/cdk-vy
11
11
  ```
12
12
 
13
+ ### Create a VyCognitoProvider
14
+
15
+ ```typescript
16
+ const vyCognitoProvider = new VyCognitoProvider(this, "MyProvider", {
17
+ environment: VyEnvironment.TEST,
18
+ });
19
+ ```
20
+
13
21
  ### Create a resource server
14
22
 
15
23
  ```typescript
16
24
  const resourceServer = new CognitoResourceServer(this, "ApiResourceServer", {
17
- environment: VyEnvironment.PROD,
25
+ resourceServerProvider: vyCognitoProvider.resourceServerProvider,
18
26
  name: "my-api",
19
27
  identifier: "https://my-api.vydev.io",
20
28
  scopes: [
@@ -24,15 +32,15 @@ const resourceServer = new CognitoResourceServer(this, "ApiResourceServer", {
24
32
  });
25
33
  ```
26
34
 
27
- ### Create an app clients
35
+ ### Create app clients
28
36
 
29
37
  ```typescript
30
38
  // Backend app client for M2M authentication
31
- const backendClient = new CognitoAppClient(this, 'BackendClient', {
32
- environment: VyEnvironment.TEST,
33
- name: 'my-backend-service',
39
+ const backendClient = new CognitoAppClient(this, "BackendClient", {
40
+ appClientProvider: vyCognitoProvider.appClientProvider,
41
+ name: "my-backend-service",
34
42
  type: AppClientType.BACKEND,
35
- scopes: ['https://api.vydev.io/read', 'https://api.vydev.io/write']
43
+ scopes: ["https://api.vydev.io/read", "https://api.vydev.io/write"]
36
44
  });
37
45
 
38
46
  // Access credentials
@@ -41,12 +49,12 @@ const clientSecret = backendClient.clientSecret; // Stored in Secrets Manager
41
49
 
42
50
  @example
43
51
  // Frontend app client for user authentication
44
- const frontendClient = new CognitoAppClient(this, 'FrontendClient', {
45
- environment: VyEnvironment.PROD,
46
- name: 'my-web-app',
52
+ const frontendClient = new CognitoAppClient(this, "FrontendClient", {
53
+ appClientProvider: vyCognitoProvider.appClientProvider,
54
+ name: "my-web-app",
47
55
  type: AppClientType.FRONTEND,
48
- scopes: ['email', 'openid', 'profile'],
49
- callbackUrls: ['https://my-app.vydev.io/auth/callback'],
50
- logoutUrls: ['https://my-app.vydev.io/logout']
56
+ scopes: ["email", "openid", "profile"],
57
+ callbackUrls: ["https://my-app.vydev.io/auth/callback"],
58
+ logoutUrls: ["https://my-app.vydev.io/logout"]
51
59
  });
52
60
  ```
@@ -0,0 +1 @@
1
+ import "jest-cdk-snapshot";
@@ -0,0 +1,46 @@
1
+ import { App, Stack } from "aws-cdk-lib";
2
+ import "jest-cdk-snapshot";
3
+ import { VyCognitoProvider } from "../";
4
+ import { VyEnvironment } from "../shared/types";
5
+ test("vyCognitoProvider in TEST", () => {
6
+ const app = new App();
7
+ const stack = new Stack(app, "Stack");
8
+ new VyCognitoProvider(stack, "VyCognitoProvider", {
9
+ environment: VyEnvironment.TEST,
10
+ });
11
+ expect(stack).toMatchCdkSnapshot({
12
+ ignoreAssets: true,
13
+ });
14
+ });
15
+ test("vyCognitoProvider in STAGE", () => {
16
+ const app = new App();
17
+ const stack = new Stack(app, "Stack");
18
+ new VyCognitoProvider(stack, "VyCognitoProvider", {
19
+ environment: VyEnvironment.STAGE,
20
+ });
21
+ expect(stack).toMatchCdkSnapshot({
22
+ ignoreAssets: true,
23
+ });
24
+ });
25
+ test("vyCognitoProvider in PROD", () => {
26
+ const app = new App();
27
+ const stack = new Stack(app, "Stack");
28
+ new VyCognitoProvider(stack, "VyCognitoProvider", {
29
+ environment: VyEnvironment.PROD,
30
+ });
31
+ expect(stack).toMatchCdkSnapshot({
32
+ ignoreAssets: true,
33
+ });
34
+ });
35
+ test("vyCognitoProvider with custom domain", () => {
36
+ const app = new App();
37
+ const stack = new Stack(app, "Stack");
38
+ new VyCognitoProvider(stack, "VyCognitoProvider", {
39
+ environment: VyEnvironment.TEST,
40
+ cognitoBaseDomain: "example.com",
41
+ });
42
+ expect(stack).toMatchCdkSnapshot({
43
+ ignoreAssets: true,
44
+ });
45
+ });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnktY29nbml0by1wcm92aWRlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdF9fL3Z5LWNvZ25pdG8tcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFL0MsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUNoRCxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUk7S0FDaEMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtJQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUNoRCxXQUFXLEVBQUUsYUFBYSxDQUFDLEtBQUs7S0FDakMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUNoRCxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUk7S0FDaEMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUNoRCxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUk7UUFDL0IsaUJBQWlCLEVBQUUsYUFBYTtLQUNqQyxDQUFDLENBQUE7SUFFRixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDL0IsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCBcImplc3QtY2RrLXNuYXBzaG90XCJcbmltcG9ydCB7IFZ5Q29nbml0b1Byb3ZpZGVyIH0gZnJvbSBcIi4uL1wiXG5pbXBvcnQgeyBWeUVudmlyb25tZW50IH0gZnJvbSBcIi4uL3NoYXJlZC90eXBlc1wiXG5cbnRlc3QoXCJ2eUNvZ25pdG9Qcm92aWRlciBpbiBURVNUXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIG5ldyBWeUNvZ25pdG9Qcm92aWRlcihzdGFjaywgXCJWeUNvZ25pdG9Qcm92aWRlclwiLCB7XG4gICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuVEVTVCxcbiAgfSlcblxuICBleHBlY3Qoc3RhY2spLnRvTWF0Y2hDZGtTbmFwc2hvdCh7XG4gICAgaWdub3JlQXNzZXRzOiB0cnVlLFxuICB9KVxufSlcblxudGVzdChcInZ5Q29nbml0b1Byb3ZpZGVyIGluIFNUQUdFXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIG5ldyBWeUNvZ25pdG9Qcm92aWRlcihzdGFjaywgXCJWeUNvZ25pdG9Qcm92aWRlclwiLCB7XG4gICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuU1RBR0UsXG4gIH0pXG5cbiAgZXhwZWN0KHN0YWNrKS50b01hdGNoQ2RrU25hcHNob3Qoe1xuICAgIGlnbm9yZUFzc2V0czogdHJ1ZSxcbiAgfSlcbn0pXG5cbnRlc3QoXCJ2eUNvZ25pdG9Qcm92aWRlciBpbiBQUk9EXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIG5ldyBWeUNvZ25pdG9Qcm92aWRlcihzdGFjaywgXCJWeUNvZ25pdG9Qcm92aWRlclwiLCB7XG4gICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuUFJPRCxcbiAgfSlcblxuICBleHBlY3Qoc3RhY2spLnRvTWF0Y2hDZGtTbmFwc2hvdCh7XG4gICAgaWdub3JlQXNzZXRzOiB0cnVlLFxuICB9KVxufSlcblxudGVzdChcInZ5Q29nbml0b1Byb3ZpZGVyIHdpdGggY3VzdG9tIGRvbWFpblwiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBBcHAoKVxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIFwiU3RhY2tcIilcblxuICBuZXcgVnlDb2duaXRvUHJvdmlkZXIoc3RhY2ssIFwiVnlDb2duaXRvUHJvdmlkZXJcIiwge1xuICAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlRFU1QsXG4gICAgY29nbml0b0Jhc2VEb21haW46IFwiZXhhbXBsZS5jb21cIixcbiAgfSlcblxuICBleHBlY3Qoc3RhY2spLnRvTWF0Y2hDZGtTbmFwc2hvdCh7XG4gICAgaWdub3JlQXNzZXRzOiB0cnVlLFxuICB9KVxufSlcbiJdfQ==
@@ -5,8 +5,13 @@ import { AppClientType, CognitoAppClient } from "../cognito-app-client";
5
5
  test("cognito frontend app client", () => {
6
6
  const app = new App();
7
7
  const stack = new Stack(app, "Stack");
8
+ const mockAppClientProvider = {
9
+ environment: VyEnvironment.TEST,
10
+ serviceToken: "serviceToken",
11
+ auth_url: "auth_url",
12
+ };
8
13
  new CognitoAppClient(stack, "CognitoAppClient", {
9
- environment: VyEnvironment.PROD,
14
+ appClientProvider: mockAppClientProvider,
10
15
  name: "my-web-app",
11
16
  type: AppClientType.FRONTEND,
12
17
  scopes: ["email", "openid", "profile"],
@@ -20,8 +25,13 @@ test("cognito frontend app client", () => {
20
25
  test("cognito backend app client", () => {
21
26
  const app = new App();
22
27
  const stack = new Stack(app, "Stack");
28
+ const mockAppClientProvider = {
29
+ environment: VyEnvironment.STAGE,
30
+ serviceToken: "serviceToken",
31
+ auth_url: "auth_url",
32
+ };
23
33
  new CognitoAppClient(stack, "CognitoAppClient", {
24
- environment: VyEnvironment.TEST,
34
+ appClientProvider: mockAppClientProvider,
25
35
  name: "my-backend-service",
26
36
  type: AppClientType.BACKEND,
27
37
  scopes: ["https://api.vydev.io/read", "https://api.vydev.io/write"],
@@ -33,8 +43,13 @@ test("cognito backend app client", () => {
33
43
  test("cognito frontend app client with custom secretName", () => {
34
44
  const app = new App();
35
45
  const stack = new Stack(app, "Stack");
46
+ const mockAppClientProvider = {
47
+ environment: VyEnvironment.PROD,
48
+ serviceToken: "serviceToken",
49
+ auth_url: "auth_url",
50
+ };
36
51
  new CognitoAppClient(stack, "CognitoAppClient", {
37
- environment: VyEnvironment.STAGE,
52
+ appClientProvider: mockAppClientProvider,
38
53
  name: "my-backend-service",
39
54
  type: AppClientType.BACKEND,
40
55
  scopes: ["https://api.vydev.io/read", "https://api.vydev.io/write"],
@@ -44,4 +59,4 @@ test("cognito frontend app client with custom secretName", () => {
44
59
  ignoreAssets: true,
45
60
  });
46
61
  });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2duaXRvLWFwcC1jbGllbnQvX190ZXN0X18vaW5kZXgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFdkUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtRQUM5QyxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUk7UUFDL0IsSUFBSSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1FBQzVCLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3RDLFlBQVksRUFBRSxDQUFDLHVDQUF1QyxDQUFDO1FBQ3ZELFVBQVUsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0tBQy9DLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDdEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFckMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7UUFDOUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxJQUFJO1FBQy9CLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixFQUFFLDRCQUE0QixDQUFDO0tBQ3BFLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7SUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFckMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7UUFDOUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxLQUFLO1FBQ2hDLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixFQUFFLDRCQUE0QixDQUFDO1FBQ25FLFVBQVUsRUFBRSxXQUFXO0tBQ3hCLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IFwiamVzdC1jZGstc25hcHNob3RcIlxuaW1wb3J0IHsgVnlFbnZpcm9ubWVudCB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXNcIlxuaW1wb3J0IHsgQXBwQ2xpZW50VHlwZSwgQ29nbml0b0FwcENsaWVudCB9IGZyb20gXCIuLi9jb2duaXRvLWFwcC1jbGllbnRcIlxuXG50ZXN0KFwiY29nbml0byBmcm9udGVuZCBhcHAgY2xpZW50XCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIG5ldyBDb2duaXRvQXBwQ2xpZW50KHN0YWNrLCBcIkNvZ25pdG9BcHBDbGllbnRcIiwge1xuICAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlBST0QsXG4gICAgbmFtZTogXCJteS13ZWItYXBwXCIsXG4gICAgdHlwZTogQXBwQ2xpZW50VHlwZS5GUk9OVEVORCxcbiAgICBzY29wZXM6IFtcImVtYWlsXCIsIFwib3BlbmlkXCIsIFwicHJvZmlsZVwiXSxcbiAgICBjYWxsYmFja1VybHM6IFtcImh0dHBzOi8vbXktYXBwLnZ5ZGV2LmlvL2F1dGgvY2FsbGJhY2tcIl0sXG4gICAgbG9nb3V0VXJsczogW1wiaHR0cHM6Ly9teS1hcHAudnlkZXYuaW8vbG9nb3V0XCJdLFxuICB9KVxuXG4gIGV4cGVjdChzdGFjaykudG9NYXRjaENka1NuYXBzaG90KHtcbiAgICBpZ25vcmVBc3NldHM6IHRydWUsXG4gIH0pXG59KVxuXG50ZXN0KFwiY29nbml0byBiYWNrZW5kIGFwcCBjbGllbnRcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgQXBwKClcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBcIlN0YWNrXCIpXG5cbiAgbmV3IENvZ25pdG9BcHBDbGllbnQoc3RhY2ssIFwiQ29nbml0b0FwcENsaWVudFwiLCB7XG4gICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuVEVTVCxcbiAgICBuYW1lOiBcIm15LWJhY2tlbmQtc2VydmljZVwiLFxuICAgIHR5cGU6IEFwcENsaWVudFR5cGUuQkFDS0VORCxcbiAgICBzY29wZXM6IFtcImh0dHBzOi8vYXBpLnZ5ZGV2LmlvL3JlYWRcIiwgXCJodHRwczovL2FwaS52eWRldi5pby93cml0ZVwiXSxcbiAgfSlcblxuICBleHBlY3Qoc3RhY2spLnRvTWF0Y2hDZGtTbmFwc2hvdCh7XG4gICAgaWdub3JlQXNzZXRzOiB0cnVlLFxuICB9KVxufSlcblxudGVzdChcImNvZ25pdG8gZnJvbnRlbmQgYXBwIGNsaWVudCB3aXRoIGN1c3RvbSBzZWNyZXROYW1lXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIG5ldyBDb2duaXRvQXBwQ2xpZW50KHN0YWNrLCBcIkNvZ25pdG9BcHBDbGllbnRcIiwge1xuICAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlNUQUdFLFxuICAgIG5hbWU6IFwibXktYmFja2VuZC1zZXJ2aWNlXCIsXG4gICAgdHlwZTogQXBwQ2xpZW50VHlwZS5CQUNLRU5ELFxuICAgIHNjb3BlczogW1wiaHR0cHM6Ly9hcGkudnlkZXYuaW8vcmVhZFwiLCBcImh0dHBzOi8vYXBpLnZ5ZGV2LmlvL3dyaXRlXCJdLFxuICAgIHNlY3JldE5hbWU6IFwibXktc2VjcmV0XCIsXG4gIH0pXG5cbiAgZXhwZWN0KHN0YWNrKS50b01hdGNoQ2RrU25hcHNob3Qoe1xuICAgIGlnbm9yZUFzc2V0czogdHJ1ZSxcbiAgfSlcbn0pXG4iXX0=
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2duaXRvLWFwcC1jbGllbnQvX190ZXN0X18vaW5kZXgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFdkUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxNQUFNLHFCQUFxQixHQUFzQjtRQUMvQyxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUk7UUFDL0IsWUFBWSxFQUFFLGNBQWM7UUFDNUIsUUFBUSxFQUFFLFVBQVU7S0FDckIsQ0FBQTtJQUVELElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1FBQzlDLGlCQUFpQixFQUFFLHFCQUFxQjtRQUN4QyxJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVE7UUFDNUIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDdEMsWUFBWSxFQUFFLENBQUMsdUNBQXVDLENBQUM7UUFDdkQsVUFBVSxFQUFFLENBQUMsZ0NBQWdDLENBQUM7S0FDL0MsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtJQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVyQyxNQUFNLHFCQUFxQixHQUFzQjtRQUMvQyxXQUFXLEVBQUUsYUFBYSxDQUFDLEtBQUs7UUFDaEMsWUFBWSxFQUFFLGNBQWM7UUFDNUIsUUFBUSxFQUFFLFVBQVU7S0FDckIsQ0FBQTtJQUVELElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1FBQzlDLGlCQUFpQixFQUFFLHFCQUFxQjtRQUN4QyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLElBQUksRUFBRSxhQUFhLENBQUMsT0FBTztRQUMzQixNQUFNLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSw0QkFBNEIsQ0FBQztLQUNwRSxDQUFDLENBQUE7SUFFRixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDL0IsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO0lBQzlELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXJDLE1BQU0scUJBQXFCLEdBQXNCO1FBQy9DLFdBQVcsRUFBRSxhQUFhLENBQUMsSUFBSTtRQUMvQixZQUFZLEVBQUUsY0FBYztRQUM1QixRQUFRLEVBQUUsVUFBVTtLQUNyQixDQUFBO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7UUFDOUMsaUJBQWlCLEVBQUUscUJBQXFCO1FBQ3hDLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixFQUFFLDRCQUE0QixDQUFDO1FBQ25FLFVBQVUsRUFBRSxXQUFXO0tBQ3hCLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IFwiamVzdC1jZGstc25hcHNob3RcIlxuaW1wb3J0IHsgVnlFbnZpcm9ubWVudCB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBBcHBDbGllbnRQcm92aWRlciB9IGZyb20gXCIuLi8uLi92eS1jb2duaXRvLXByb3ZpZGVyXCJcbmltcG9ydCB7IEFwcENsaWVudFR5cGUsIENvZ25pdG9BcHBDbGllbnQgfSBmcm9tIFwiLi4vY29nbml0by1hcHAtY2xpZW50XCJcblxudGVzdChcImNvZ25pdG8gZnJvbnRlbmQgYXBwIGNsaWVudFwiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBBcHAoKVxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIFwiU3RhY2tcIilcblxuICBjb25zdCBtb2NrQXBwQ2xpZW50UHJvdmlkZXI6IEFwcENsaWVudFByb3ZpZGVyID0ge1xuICAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlRFU1QsXG4gICAgc2VydmljZVRva2VuOiBcInNlcnZpY2VUb2tlblwiLFxuICAgIGF1dGhfdXJsOiBcImF1dGhfdXJsXCIsXG4gIH1cblxuICBuZXcgQ29nbml0b0FwcENsaWVudChzdGFjaywgXCJDb2duaXRvQXBwQ2xpZW50XCIsIHtcbiAgICBhcHBDbGllbnRQcm92aWRlcjogbW9ja0FwcENsaWVudFByb3ZpZGVyLFxuICAgIG5hbWU6IFwibXktd2ViLWFwcFwiLFxuICAgIHR5cGU6IEFwcENsaWVudFR5cGUuRlJPTlRFTkQsXG4gICAgc2NvcGVzOiBbXCJlbWFpbFwiLCBcIm9wZW5pZFwiLCBcInByb2ZpbGVcIl0sXG4gICAgY2FsbGJhY2tVcmxzOiBbXCJodHRwczovL215LWFwcC52eWRldi5pby9hdXRoL2NhbGxiYWNrXCJdLFxuICAgIGxvZ291dFVybHM6IFtcImh0dHBzOi8vbXktYXBwLnZ5ZGV2LmlvL2xvZ291dFwiXSxcbiAgfSlcblxuICBleHBlY3Qoc3RhY2spLnRvTWF0Y2hDZGtTbmFwc2hvdCh7XG4gICAgaWdub3JlQXNzZXRzOiB0cnVlLFxuICB9KVxufSlcblxudGVzdChcImNvZ25pdG8gYmFja2VuZCBhcHAgY2xpZW50XCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIGNvbnN0IG1vY2tBcHBDbGllbnRQcm92aWRlcjogQXBwQ2xpZW50UHJvdmlkZXIgPSB7XG4gICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuU1RBR0UsXG4gICAgc2VydmljZVRva2VuOiBcInNlcnZpY2VUb2tlblwiLFxuICAgIGF1dGhfdXJsOiBcImF1dGhfdXJsXCIsXG4gIH1cblxuICBuZXcgQ29nbml0b0FwcENsaWVudChzdGFjaywgXCJDb2duaXRvQXBwQ2xpZW50XCIsIHtcbiAgICBhcHBDbGllbnRQcm92aWRlcjogbW9ja0FwcENsaWVudFByb3ZpZGVyLFxuICAgIG5hbWU6IFwibXktYmFja2VuZC1zZXJ2aWNlXCIsXG4gICAgdHlwZTogQXBwQ2xpZW50VHlwZS5CQUNLRU5ELFxuICAgIHNjb3BlczogW1wiaHR0cHM6Ly9hcGkudnlkZXYuaW8vcmVhZFwiLCBcImh0dHBzOi8vYXBpLnZ5ZGV2LmlvL3dyaXRlXCJdLFxuICB9KVxuXG4gIGV4cGVjdChzdGFjaykudG9NYXRjaENka1NuYXBzaG90KHtcbiAgICBpZ25vcmVBc3NldHM6IHRydWUsXG4gIH0pXG59KVxuXG50ZXN0KFwiY29nbml0byBmcm9udGVuZCBhcHAgY2xpZW50IHdpdGggY3VzdG9tIHNlY3JldE5hbWVcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgQXBwKClcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBcIlN0YWNrXCIpXG5cbiAgY29uc3QgbW9ja0FwcENsaWVudFByb3ZpZGVyOiBBcHBDbGllbnRQcm92aWRlciA9IHtcbiAgICBlbnZpcm9ubWVudDogVnlFbnZpcm9ubWVudC5QUk9ELFxuICAgIHNlcnZpY2VUb2tlbjogXCJzZXJ2aWNlVG9rZW5cIixcbiAgICBhdXRoX3VybDogXCJhdXRoX3VybFwiLFxuICB9XG5cbiAgbmV3IENvZ25pdG9BcHBDbGllbnQoc3RhY2ssIFwiQ29nbml0b0FwcENsaWVudFwiLCB7XG4gICAgYXBwQ2xpZW50UHJvdmlkZXI6IG1vY2tBcHBDbGllbnRQcm92aWRlcixcbiAgICBuYW1lOiBcIm15LWJhY2tlbmQtc2VydmljZVwiLFxuICAgIHR5cGU6IEFwcENsaWVudFR5cGUuQkFDS0VORCxcbiAgICBzY29wZXM6IFtcImh0dHBzOi8vYXBpLnZ5ZGV2LmlvL3JlYWRcIiwgXCJodHRwczovL2FwaS52eWRldi5pby93cml0ZVwiXSxcbiAgICBzZWNyZXROYW1lOiBcIm15LXNlY3JldFwiLFxuICB9KVxuXG4gIGV4cGVjdChzdGFjaykudG9NYXRjaENka1NuYXBzaG90KHtcbiAgICBpZ25vcmVBc3NldHM6IHRydWUsXG4gIH0pXG59KVxuIl19
@@ -2,11 +2,11 @@
2
2
  * CDK Construct for Cognito App Client
3
3
  */
4
4
  import * as cdk from "aws-cdk-lib";
5
- import * as iam from "aws-cdk-lib/aws-iam";
6
- import * as logs from "aws-cdk-lib/aws-logs";
5
+ import type * as iam from "aws-cdk-lib/aws-iam";
6
+ import type * as logs from "aws-cdk-lib/aws-logs";
7
7
  import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager";
8
8
  import { Construct } from "constructs";
9
- import type { VyEnvironment } from "../shared/types";
9
+ import type { AppClientProvider } from "../vy-cognito-provider";
10
10
  /**
11
11
  * Type of app client
12
12
  */
@@ -26,9 +26,9 @@ export declare enum AppClientType {
26
26
  }
27
27
  export interface CognitoAppClientProps {
28
28
  /**
29
- * The Vy environment to provision in (e.g., VyEnvironment.PROD, VyEnvironment.STAGE, VyEnvironment.TEST)
29
+ * An AppClientProvider provided from a VyCognitoProvider
30
30
  */
31
- readonly environment: VyEnvironment;
31
+ readonly appClientProvider: AppClientProvider;
32
32
  /**
33
33
  * The name of the app client
34
34
  * Must be unique within the environment
@@ -70,13 +70,6 @@ export interface CognitoAppClientProps {
70
70
  * @default - true for backend, false for frontend
71
71
  */
72
72
  readonly generateSecret?: boolean;
73
- /**
74
- * Whether to store the client secret in AWS Secrets Manager
75
- * Only applicable if generateSecret is true
76
- *
77
- * @default true
78
- */
79
- readonly storeSecretInSecretsManager?: boolean;
80
73
  /**
81
74
  * Name of the secret in AWS Secrets Manager
82
75
  * Only applicable if generateSecret is true
@@ -103,9 +96,15 @@ export interface CognitoAppClientProps {
103
96
  * - **Frontend**: User authentication using OAuth 2.0 Authorization Code or Implicit Grant
104
97
  *
105
98
  * @example
99
+ * ```typescript
100
+ * // Create a VyCognitoProvider
101
+ * const vyCognitoProvider = new VyCognitoProvider(this, 'MyProvider', {
102
+ * environment: VyEnvironment.TEST,
103
+ * });
104
+ *
106
105
  * // Backend app client for M2M authentication
107
106
  * const backendClient = new CognitoAppClient(this, 'BackendClient', {
108
- * environment: VyEnvironment.TEST,
107
+ * appClientProvider: vyCognitoProvider.appClientProvider,
109
108
  * name: 'my-backend-service',
110
109
  * type: AppClientType.BACKEND,
111
110
  * scopes: ['https://api.vydev.io/read', 'https://api.vydev.io/write']
@@ -114,17 +113,25 @@ export interface CognitoAppClientProps {
114
113
  * // Access credentials
115
114
  * const clientId = backendClient.clientId;
116
115
  * const clientSecret = backendClient.clientSecret; // Stored in Secrets Manager
116
+ * ```
117
117
  *
118
118
  * @example
119
+ * ```typescript
120
+ * // Create a VyCognitoProvider
121
+ * const vyCognitoProvider = new VyCognitoProvider(this, 'MyProvider', {
122
+ * environment: VyEnvironment.TEST,
123
+ * });
124
+ *
119
125
  * // Frontend app client for user authentication
120
126
  * const frontendClient = new CognitoAppClient(this, 'FrontendClient', {
121
- * environment: VyEnvironment.PROD,
127
+ * appClientProvider: vyCognitoProvider.appClientProvider,
122
128
  * name: 'my-web-app',
123
129
  * type: AppClientType.FRONTEND,
124
130
  * scopes: ['email', 'openid', 'profile'],
125
131
  * callbackUrls: ['https://my-app.vydev.io/auth/callback'],
126
132
  * logoutUrls: ['https://my-app.vydev.io/logout']
127
133
  * });
134
+ * ```
128
135
  */
129
136
  export declare class CognitoAppClient extends Construct {
130
137
  /**
@@ -135,26 +142,16 @@ export declare class CognitoAppClient extends Construct {
135
142
  * The underlying custom resource
136
143
  */
137
144
  readonly resource: cdk.CustomResource;
138
- /**
139
- * The logGroup for the event handler lambda
140
- */
141
- readonly lambdaLogGroup: logs.LogGroup;
142
- /**
143
- * The logGroup for the custom resource provider
144
- */
145
- readonly providerLogGroup: logs.LogGroup;
146
145
  /**
147
146
  * The client ID for authentication
148
147
  */
149
148
  readonly clientId: string;
150
149
  /**
151
- * The client secret (only for backend clients)
152
- * If storeSecretInSecretsManager is true, this returns a reference to the secret value
150
+ * A reference to the client secret
153
151
  */
154
- readonly clientSecret?: string;
152
+ readonly clientSecretArn?: string;
155
153
  /**
156
154
  * The Secrets Manager secret containing the client secret
157
- * Only available if storeSecretInSecretsManager is true and type is backend
158
155
  */
159
156
  readonly clientSecretSecret?: secretsmanager.ISecret;
160
157
  constructor(scope: Construct, id: string, props: CognitoAppClientProps);
@@ -5,12 +5,8 @@ import { createRequire } from "node:module";
5
5
  import * as path from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import * as cdk from "aws-cdk-lib";
8
- import * as iam from "aws-cdk-lib/aws-iam";
9
- import * as lambda from "aws-cdk-lib/aws-lambda";
10
- import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
11
- import * as logs from "aws-cdk-lib/aws-logs";
8
+ import { SecretValue } from "aws-cdk-lib";
12
9
  import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager";
13
- import * as cr from "aws-cdk-lib/custom-resources";
14
10
  import { Construct } from "constructs";
15
11
  const require = createRequire(import.meta.url);
16
12
  const __filename = fileURLToPath(import.meta.url);
@@ -44,9 +40,15 @@ export var AppClientType;
44
40
  * - **Frontend**: User authentication using OAuth 2.0 Authorization Code or Implicit Grant
45
41
  *
46
42
  * @example
43
+ * ```typescript
44
+ * // Create a VyCognitoProvider
45
+ * const vyCognitoProvider = new VyCognitoProvider(this, 'MyProvider', {
46
+ * environment: VyEnvironment.TEST,
47
+ * });
48
+ *
47
49
  * // Backend app client for M2M authentication
48
50
  * const backendClient = new CognitoAppClient(this, 'BackendClient', {
49
- * environment: VyEnvironment.TEST,
51
+ * appClientProvider: vyCognitoProvider.appClientProvider,
50
52
  * name: 'my-backend-service',
51
53
  * type: AppClientType.BACKEND,
52
54
  * scopes: ['https://api.vydev.io/read', 'https://api.vydev.io/write']
@@ -55,17 +57,25 @@ export var AppClientType;
55
57
  * // Access credentials
56
58
  * const clientId = backendClient.clientId;
57
59
  * const clientSecret = backendClient.clientSecret; // Stored in Secrets Manager
60
+ * ```
58
61
  *
59
62
  * @example
63
+ * ```typescript
64
+ * // Create a VyCognitoProvider
65
+ * const vyCognitoProvider = new VyCognitoProvider(this, 'MyProvider', {
66
+ * environment: VyEnvironment.TEST,
67
+ * });
68
+ *
60
69
  * // Frontend app client for user authentication
61
70
  * const frontendClient = new CognitoAppClient(this, 'FrontendClient', {
62
- * environment: VyEnvironment.PROD,
71
+ * appClientProvider: vyCognitoProvider.appClientProvider,
63
72
  * name: 'my-web-app',
64
73
  * type: AppClientType.FRONTEND,
65
74
  * scopes: ['email', 'openid', 'profile'],
66
75
  * callbackUrls: ['https://my-app.vydev.io/auth/callback'],
67
76
  * logoutUrls: ['https://my-app.vydev.io/logout']
68
77
  * });
78
+ * ```
69
79
  */
70
80
  export class CognitoAppClient extends Construct {
71
81
  /**
@@ -76,26 +86,16 @@ export class CognitoAppClient extends Construct {
76
86
  * The underlying custom resource
77
87
  */
78
88
  resource;
79
- /**
80
- * The logGroup for the event handler lambda
81
- */
82
- lambdaLogGroup;
83
- /**
84
- * The logGroup for the custom resource provider
85
- */
86
- providerLogGroup;
87
89
  /**
88
90
  * The client ID for authentication
89
91
  */
90
92
  clientId;
91
93
  /**
92
- * The client secret (only for backend clients)
93
- * If storeSecretInSecretsManager is true, this returns a reference to the secret value
94
+ * A reference to the client secret
94
95
  */
95
- clientSecret;
96
+ clientSecretArn;
96
97
  /**
97
98
  * The Secrets Manager secret containing the client secret
98
- * Only available if storeSecretInSecretsManager is true and type is backend
99
99
  */
100
100
  clientSecretSecret;
101
101
  constructor(scope, id, props) {
@@ -106,68 +106,41 @@ export class CognitoAppClient extends Construct {
106
106
  props.callbackUrls.length === 0) {
107
107
  cdk.Annotations.of(this).addWarning("Frontend app clients typically require callbackUrls for OAuth flows");
108
108
  }
109
- this.lambdaLogGroup = new logs.LogGroup(this, "LambdaLogGroup", {
110
- retention: props.logsRetention ?? logs.RetentionDays.ONE_WEEK,
111
- });
112
- const onEventHandler = new NodejsFunction(this, "OnEventHandler", {
113
- runtime: lambda.Runtime.NODEJS_22_X,
114
- handler: "handler",
115
- entry: require.resolve(`${__dirname}/handler`),
116
- timeout: cdk.Duration.minutes(2),
117
- memorySize: 256,
118
- logGroup: this.lambdaLogGroup,
119
- environment: props.cognitoBaseDomain
120
- ? {
121
- COGNITO_BASE_DOMAIN: props.cognitoBaseDomain,
122
- }
123
- : undefined,
124
- bundling: {
125
- minify: true,
126
- sourceMap: true,
127
- target: "es2020",
128
- externalModules: ["aws-sdk"],
129
- },
130
- });
131
- onEventHandler.addToRolePolicy(new iam.PolicyStatement({
132
- effect: iam.Effect.ALLOW,
133
- actions: ["execute-api:Invoke"],
134
- resources: ["*"], // Can be scoped down if API Gateway ARN is known
135
- }));
136
- this.providerLogGroup = new logs.LogGroup(this, "ProviderLogGroup", {
137
- retention: props.logsRetention ?? logs.RetentionDays.ONE_WEEK,
138
- });
139
- const provider = new cr.Provider(this, "Provider", {
140
- onEventHandler,
141
- logGroup: this.providerLogGroup,
142
- });
109
+ // props.generateSecret overrides type-specific defaults
110
+ // Default for backend clients is true; for frontend clients false
111
+ const generateSecret = props.generateSecret ?? props.type === AppClientType.BACKEND;
143
112
  this.resource = new cdk.CustomResource(this, "Resource", {
144
- serviceToken: provider.serviceToken,
113
+ serviceToken: props.appClientProvider.serviceToken,
145
114
  properties: {
146
- Environment: props.environment,
115
+ Environment: props.appClientProvider.environment,
147
116
  Name: props.name,
148
117
  Type: props.type,
149
118
  Scopes: props.scopes || [],
150
119
  CallbackUrls: props.callbackUrls || [],
151
120
  LogoutUrls: props.logoutUrls || [],
152
- GenerateSecret: props.generateSecret,
121
+ GenerateSecret: generateSecret,
153
122
  },
154
123
  // Force replacement if type changes
155
124
  resourceType: "Custom::VyCognitoAppClient",
156
125
  });
157
- this.clientId = this.resource.getAttString("ClientId");
158
- const shouldStoreSecret = props.storeSecretInSecretsManager !== false;
159
- if (props.type === AppClientType.BACKEND && shouldStoreSecret) {
160
- const secretValue = this.resource.getAttString("ClientSecret");
126
+ const client_id = this.resource.getAttString("ClientId");
127
+ this.clientId = client_id;
128
+ if (generateSecret) {
129
+ const client_secret = this.resource.getAttString("ClientSecret");
130
+ const auth_url = props.appClientProvider.auth_url;
131
+ // For convenience, store auth_url, client_id, and client_secret in a single JSON secret
132
+ const secretString = JSON.stringify({
133
+ auth_url,
134
+ client_id,
135
+ client_secret,
136
+ });
161
137
  this.clientSecretSecret = new secretsmanager.Secret(this, "ClientSecret", {
162
138
  secretName: props.secretName ??
163
- `vy/${props.environment}/cognito/app-client/${props.name}`,
164
- description: `Client secret for Vy Cognito app client ${props.name}`,
165
- secretStringValue: cdk.SecretValue.unsafePlainText(secretValue),
139
+ `/vy/${props.appClientProvider.environment}/cognito/app-client/${props.name}`,
140
+ description: `auth_url, client_id and client_secret for Vy Cognito app client ${props.name}`,
141
+ secretStringValue: SecretValue.unsafePlainText(secretString),
166
142
  });
167
- this.clientSecret = this.clientSecretSecret.secretValue.unsafeUnwrap();
168
- }
169
- else if (props.type === AppClientType.BACKEND) {
170
- this.clientSecret = this.resource.getAttString("ClientSecret");
143
+ this.clientSecretArn = this.clientSecretSecret.secretFullArn;
171
144
  }
172
145
  }
173
146
  /**
@@ -180,4 +153,4 @@ export class CognitoAppClient extends Construct {
180
153
  return this.clientSecretSecret.grantRead(grantee);
181
154
  }
182
155
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1hcHAtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvZ25pdG8tYXBwLWNsaWVudC9jb2duaXRvLWFwcC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLHdCQUF3QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0NBQWdDLENBQUE7QUFDaEUsT0FBTyxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3RDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzlDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFMUM7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxhQWNYO0FBZEQsV0FBWSxhQUFhO0lBQ3ZCOzs7O09BSUc7SUFDSCxvQ0FBbUIsQ0FBQTtJQUVuQjs7OztPQUlHO0lBQ0gsc0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQWRXLGFBQWEsS0FBYixhQUFhLFFBY3hCO0FBaUZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsU0FBUztJQUM3Qzs7T0FFRztJQUNhLElBQUksQ0FBUTtJQUU1Qjs7T0FFRztJQUNhLFFBQVEsQ0FBb0I7SUFFNUM7O09BRUc7SUFDYSxjQUFjLENBQWU7SUFFN0M7O09BRUc7SUFDYSxnQkFBZ0IsQ0FBZTtJQUUvQzs7T0FFRztJQUNhLFFBQVEsQ0FBUTtJQUVoQzs7O09BR0c7SUFDYSxZQUFZLENBQVM7SUFFckM7OztPQUdHO0lBQ2Esa0JBQWtCLENBQXlCO0lBRTNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7UUFFdEIsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRO1lBQ3JDLEtBQUssQ0FBQyxZQUFZO1lBQ2xCLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDL0IsQ0FBQztZQUNELEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDakMscUVBQXFFLENBQ3RFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzlELFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUTtTQUM5RCxDQUFDLENBQUE7UUFFRixNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNuQyxPQUFPLEVBQUUsU0FBUztZQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsVUFBVSxDQUFDO1lBQzlDLE9BQU8sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEMsVUFBVSxFQUFFLEdBQUc7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDN0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ2xDLENBQUMsQ0FBQztvQkFDRSxtQkFBbUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO2lCQUM3QztnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDO2FBQzdCO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsY0FBYyxDQUFDLGVBQWUsQ0FDNUIsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7WUFDL0IsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsaURBQWlEO1NBQ3BFLENBQUMsQ0FDSCxDQUFBO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDbEUsU0FBUyxFQUFFLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1NBQzlELENBQUMsQ0FBQTtRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2pELGNBQWM7WUFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUNoQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDMUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRTtnQkFDdEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRTtnQkFDbEMsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2FBQ3JDO1lBQ0Qsb0NBQW9DO1lBQ3BDLFlBQVksRUFBRSw0QkFBNEI7U0FDM0MsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV0RCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxLQUFLLENBQUE7UUFDckUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUU5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUNqRCxJQUFJLEVBQ0osY0FBYyxFQUNkO2dCQUNFLFVBQVUsRUFDUixLQUFLLENBQUMsVUFBVTtvQkFDaEIsTUFBTSxLQUFLLENBQUMsV0FBVyx1QkFBdUIsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDNUQsV0FBVyxFQUFFLDJDQUEyQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNwRSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7YUFDaEUsQ0FDRixDQUFBO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3hFLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUF1QjtRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO1FBQ25FLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDREsgQ29uc3RydWN0IGZvciBDb2duaXRvIEFwcCBDbGllbnRcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiXG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGNyIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB0eXBlIHsgVnlFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIlxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoX19maWxlbmFtZSlcblxuLyoqXG4gKiBUeXBlIG9mIGFwcCBjbGllbnRcbiAqL1xuZXhwb3J0IGVudW0gQXBwQ2xpZW50VHlwZSB7XG4gIC8qKlxuICAgKiBCYWNrZW5kIGFwcCBjbGllbnQgZm9yIG1hY2hpbmUtdG8tbWFjaGluZSAoTTJNKSBhdXRoZW50aWNhdGlvblxuICAgKiBVc2VzIE9BdXRoIDIuMCBDbGllbnQgQ3JlZGVudGlhbHMgZ3JhbnQgdHlwZVxuICAgKiBHZW5lcmF0ZXMgYSBjbGllbnQgc2VjcmV0IGZvciBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgQkFDS0VORCA9IFwiYmFja2VuZFwiLFxuXG4gIC8qKlxuICAgKiBGcm9udGVuZCBhcHAgY2xpZW50IGZvciB1c2VyIGF1dGhlbnRpY2F0aW9uXG4gICAqIFVzZXMgT0F1dGggMi4wIEF1dGhvcml6YXRpb24gQ29kZSBvciBJbXBsaWNpdCBncmFudCB0eXBlc1xuICAgKiBTdXBwb3J0cyBjYWxsYmFjayBVUkxzIGFuZCBsb2dvdXQgVVJMcyBmb3IgYnJvd3Nlci1iYXNlZCBmbG93c1xuICAgKi9cbiAgRlJPTlRFTkQgPSBcImZyb250ZW5kXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0FwcENsaWVudFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBWeSBlbnZpcm9ubWVudCB0byBwcm92aXNpb24gaW4gKGUuZy4sIFZ5RW52aXJvbm1lbnQuUFJPRCwgVnlFbnZpcm9ubWVudC5TVEFHRSwgVnlFbnZpcm9ubWVudC5URVNUKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnRcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFwcCBjbGllbnRcbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGFwcCBjbGllbnRcbiAgICogLSBiYWNrZW5kOiBNYWNoaW5lLXRvLW1hY2hpbmUgYXV0aGVudGljYXRpb24gd2l0aCBjbGllbnQgY3JlZGVudGlhbHNcbiAgICogLSBmcm9udGVuZDogVXNlciBhdXRoZW50aWNhdGlvbiB3aXRoIGF1dGhvcml6YXRpb24gY29kZSBvciBpbXBsaWNpdCBncmFudFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQXBwQ2xpZW50VHlwZVxuXG4gIC8qKlxuICAgKiBPQXV0aCBzY29wZXMgZm9yIHRoaXMgY2xpZW50XG4gICAqXG4gICAqIEZvciBiYWNrZW5kIGNsaWVudHM6IFVzZSByZXNvdXJjZSBzZXJ2ZXIgc2NvcGVzIChlLmcuLCAnaHR0cHM6Ly9hcGkudnlkZXYuaW8vcmVhZCcpXG4gICAqIEZvciBmcm9udGVuZCBjbGllbnRzOiBVc2UgT0lEQyBzY29wZXMgKGUuZy4sICdlbWFpbCcsICdvcGVuaWQnLCAncHJvZmlsZScpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgYXJyYXlcbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blcz86IHN0cmluZ1tdXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIFVSTHMgZm9yIE9BdXRoIGZsb3dzXG4gICAqIE9ubHkgdXNlZCB3aXRoIGZyb250ZW5kIGNsaWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjYWxsYmFjayBVUkxzXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFja1VybHM/OiBzdHJpbmdbXVxuXG4gIC8qKlxuICAgKiBMb2dvdXQgVVJMcyBmb3IgT0F1dGggZmxvd3NcbiAgICogT25seSB1c2VkIHdpdGggZnJvbnRlbmQgY2xpZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGxvZ291dCBVUkxzXG4gICAqL1xuICByZWFkb25seSBsb2dvdXRVcmxzPzogc3RyaW5nW11cblxuICAvKipcbiAgICogV2hldGhlciB0byBnZW5lcmF0ZSBhIGNsaWVudCBzZWNyZXRcbiAgICogQXV0b21hdGljYWxseSBzZXQgYmFzZWQgb24gdHlwZSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBmb3IgYmFja2VuZCwgZmFsc2UgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBnZW5lcmF0ZVNlY3JldD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBzdG9yZSB0aGUgY2xpZW50IHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyXG4gICAqIE9ubHkgYXBwbGljYWJsZSBpZiBnZW5lcmF0ZVNlY3JldCBpcyB0cnVlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlU2VjcmV0SW5TZWNyZXRzTWFuYWdlcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXJcbiAgICogT25seSBhcHBsaWNhYmxlIGlmIGdlbmVyYXRlU2VjcmV0IGlzIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldE5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogQmFzZSBkb21haW4gZm9yIENvZ25pdG8gc2VydmljZVxuICAgKiBAZGVmYXVsdCAnY29nbml0by52eWRldi5pbydcbiAgICovXG4gIHJlYWRvbmx5IGNvZ25pdG9CYXNlRG9tYWluPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nc1JldGVudGlvbj86IGxvZ3MuUmV0ZW50aW9uRGF5c1xufVxuXG4vKipcbiAqIEEgQ29nbml0byBBcHAgQ2xpZW50IG1hbmFnZWQgdGhyb3VnaCBWeSdzIGNlbnRyYWwgQ29nbml0byBzZXJ2aWNlXG4gKlxuICogQXBwIGNsaWVudHMgYXJlIHRoZSB1c2VyIHBvb2wgYXV0aGVudGljYXRpb24gcmVzb3VyY2VzIGF0dGFjaGVkIHRvIHlvdXIgYXBwLlxuICogVXNlIGFuIGFwcCBjbGllbnQgdG8gY29uZmlndXJlIHRoZSBwZXJtaXR0ZWQgYXV0aGVudGljYXRpb24gYWN0aW9ucyBmb3IgYW4gYXBwLlxuICpcbiAqIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgYXBwIGNsaWVudHM6XG4gKiAtICoqQmFja2VuZCoqOiBNYWNoaW5lLXRvLW1hY2hpbmUgYXV0aGVudGljYXRpb24gdXNpbmcgT0F1dGggMi4wIENsaWVudCBDcmVkZW50aWFsc1xuICogLSAqKkZyb250ZW5kKio6IFVzZXIgYXV0aGVudGljYXRpb24gdXNpbmcgT0F1dGggMi4wIEF1dGhvcml6YXRpb24gQ29kZSBvciBJbXBsaWNpdCBHcmFudFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYWNrZW5kIGFwcCBjbGllbnQgZm9yIE0yTSBhdXRoZW50aWNhdGlvblxuICogY29uc3QgYmFja2VuZENsaWVudCA9IG5ldyBDb2duaXRvQXBwQ2xpZW50KHRoaXMsICdCYWNrZW5kQ2xpZW50Jywge1xuICogICBlbnZpcm9ubWVudDogVnlFbnZpcm9ubWVudC5URVNULFxuICogICBuYW1lOiAnbXktYmFja2VuZC1zZXJ2aWNlJyxcbiAqICAgdHlwZTogQXBwQ2xpZW50VHlwZS5CQUNLRU5ELFxuICogICBzY29wZXM6IFsnaHR0cHM6Ly9hcGkudnlkZXYuaW8vcmVhZCcsICdodHRwczovL2FwaS52eWRldi5pby93cml0ZSddXG4gKiB9KTtcbiAqXG4gKiAvLyBBY2Nlc3MgY3JlZGVudGlhbHNcbiAqIGNvbnN0IGNsaWVudElkID0gYmFja2VuZENsaWVudC5jbGllbnRJZDtcbiAqIGNvbnN0IGNsaWVudFNlY3JldCA9IGJhY2tlbmRDbGllbnQuY2xpZW50U2VjcmV0OyAvLyBTdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZyb250ZW5kIGFwcCBjbGllbnQgZm9yIHVzZXIgYXV0aGVudGljYXRpb25cbiAqIGNvbnN0IGZyb250ZW5kQ2xpZW50ID0gbmV3IENvZ25pdG9BcHBDbGllbnQodGhpcywgJ0Zyb250ZW5kQ2xpZW50Jywge1xuICogICBlbnZpcm9ubWVudDogVnlFbnZpcm9ubWVudC5QUk9ELFxuICogICBuYW1lOiAnbXktd2ViLWFwcCcsXG4gKiAgIHR5cGU6IEFwcENsaWVudFR5cGUuRlJPTlRFTkQsXG4gKiAgIHNjb3BlczogWydlbWFpbCcsICdvcGVuaWQnLCAncHJvZmlsZSddLFxuICogICBjYWxsYmFja1VybHM6IFsnaHR0cHM6Ly9teS1hcHAudnlkZXYuaW8vYXV0aC9jYWxsYmFjayddLFxuICogICBsb2dvdXRVcmxzOiBbJ2h0dHBzOi8vbXktYXBwLnZ5ZGV2LmlvL2xvZ291dCddXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9BcHBDbGllbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFwcCBjbGllbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgY3VzdG9tIHJlc291cmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IGNkay5DdXN0b21SZXNvdXJjZVxuXG4gIC8qKlxuICAgKiBUaGUgbG9nR3JvdXAgZm9yIHRoZSBldmVudCBoYW5kbGVyIGxhbWJkYVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUxvZ0dyb3VwOiBsb2dzLkxvZ0dyb3VwXG5cbiAgLyoqXG4gICAqIFRoZSBsb2dHcm91cCBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyTG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBJRCBmb3IgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbGllbnRJZDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc2VjcmV0IChvbmx5IGZvciBiYWNrZW5kIGNsaWVudHMpXG4gICAqIElmIHN0b3JlU2VjcmV0SW5TZWNyZXRzTWFuYWdlciBpcyB0cnVlLCB0aGlzIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNlY3JldCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudFNlY3JldD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIHRoZSBjbGllbnQgc2VjcmV0XG4gICAqIE9ubHkgYXZhaWxhYmxlIGlmIHN0b3JlU2VjcmV0SW5TZWNyZXRzTWFuYWdlciBpcyB0cnVlIGFuZCB0eXBlIGlzIGJhY2tlbmRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbGllbnRTZWNyZXRTZWNyZXQ/OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9BcHBDbGllbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubmFtZSA9IHByb3BzLm5hbWVcblxuICAgIGlmIChcbiAgICAgIHByb3BzLnR5cGUgPT09IEFwcENsaWVudFR5cGUuRlJPTlRFTkQgJiZcbiAgICAgIHByb3BzLmNhbGxiYWNrVXJscyAmJlxuICAgICAgcHJvcHMuY2FsbGJhY2tVcmxzLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgY2RrLkFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIFwiRnJvbnRlbmQgYXBwIGNsaWVudHMgdHlwaWNhbGx5IHJlcXVpcmUgY2FsbGJhY2tVcmxzIGZvciBPQXV0aCBmbG93c1wiLFxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMubGFtYmRhTG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkxhbWJkYUxvZ0dyb3VwXCIsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nc1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgfSlcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiT25FdmVudEhhbmRsZXJcIiwge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgIGVudHJ5OiByZXF1aXJlLnJlc29sdmUoYCR7X19kaXJuYW1lfS9oYW5kbGVyYCksXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygyKSxcbiAgICAgIG1lbW9yeVNpemU6IDI1NixcbiAgICAgIGxvZ0dyb3VwOiB0aGlzLmxhbWJkYUxvZ0dyb3VwLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmNvZ25pdG9CYXNlRG9tYWluXG4gICAgICAgID8ge1xuICAgICAgICAgICAgQ09HTklUT19CQVNFX0RPTUFJTjogcHJvcHMuY29nbml0b0Jhc2VEb21haW4sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICB0YXJnZXQ6IFwiZXMyMDIwXCIsXG4gICAgICAgIGV4dGVybmFsTW9kdWxlczogW1wiYXdzLXNka1wiXSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIG9uRXZlbnRIYW5kbGVyLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJleGVjdXRlLWFwaTpJbnZva2VcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSwgLy8gQ2FuIGJlIHNjb3BlZCBkb3duIGlmIEFQSSBHYXRld2F5IEFSTiBpcyBrbm93blxuICAgICAgfSksXG4gICAgKVxuXG4gICAgdGhpcy5wcm92aWRlckxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJQcm92aWRlckxvZ0dyb3VwXCIsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nc1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgfSlcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGNyLlByb3ZpZGVyKHRoaXMsIFwiUHJvdmlkZXJcIiwge1xuICAgICAgb25FdmVudEhhbmRsZXIsXG4gICAgICBsb2dHcm91cDogdGhpcy5wcm92aWRlckxvZ0dyb3VwLFxuICAgIH0pXG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBFbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICAgIE5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgIFR5cGU6IHByb3BzLnR5cGUsXG4gICAgICAgIFNjb3BlczogcHJvcHMuc2NvcGVzIHx8IFtdLFxuICAgICAgICBDYWxsYmFja1VybHM6IHByb3BzLmNhbGxiYWNrVXJscyB8fCBbXSxcbiAgICAgICAgTG9nb3V0VXJsczogcHJvcHMubG9nb3V0VXJscyB8fCBbXSxcbiAgICAgICAgR2VuZXJhdGVTZWNyZXQ6IHByb3BzLmdlbmVyYXRlU2VjcmV0LFxuICAgICAgfSxcbiAgICAgIC8vIEZvcmNlIHJlcGxhY2VtZW50IGlmIHR5cGUgY2hhbmdlc1xuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6VnlDb2duaXRvQXBwQ2xpZW50XCIsXG4gICAgfSlcblxuICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLnJlc291cmNlLmdldEF0dFN0cmluZyhcIkNsaWVudElkXCIpXG5cbiAgICBjb25zdCBzaG91bGRTdG9yZVNlY3JldCA9IHByb3BzLnN0b3JlU2VjcmV0SW5TZWNyZXRzTWFuYWdlciAhPT0gZmFsc2VcbiAgICBpZiAocHJvcHMudHlwZSA9PT0gQXBwQ2xpZW50VHlwZS5CQUNLRU5EICYmIHNob3VsZFN0b3JlU2VjcmV0KSB7XG4gICAgICBjb25zdCBzZWNyZXRWYWx1ZSA9IHRoaXMucmVzb3VyY2UuZ2V0QXR0U3RyaW5nKFwiQ2xpZW50U2VjcmV0XCIpXG5cbiAgICAgIHRoaXMuY2xpZW50U2VjcmV0U2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDbGllbnRTZWNyZXRcIixcbiAgICAgICAge1xuICAgICAgICAgIHNlY3JldE5hbWU6XG4gICAgICAgICAgICBwcm9wcy5zZWNyZXROYW1lID8/XG4gICAgICAgICAgICBgdnkvJHtwcm9wcy5lbnZpcm9ubWVudH0vY29nbml0by9hcHAtY2xpZW50LyR7cHJvcHMubmFtZX1gLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQ2xpZW50IHNlY3JldCBmb3IgVnkgQ29nbml0byBhcHAgY2xpZW50ICR7cHJvcHMubmFtZX1gLFxuICAgICAgICAgIHNlY3JldFN0cmluZ1ZhbHVlOiBjZGsuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHNlY3JldFZhbHVlKSxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgdGhpcy5jbGllbnRTZWNyZXQgPSB0aGlzLmNsaWVudFNlY3JldFNlY3JldC5zZWNyZXRWYWx1ZS51bnNhZmVVbndyYXAoKVxuICAgIH0gZWxzZSBpZiAocHJvcHMudHlwZSA9PT0gQXBwQ2xpZW50VHlwZS5CQUNLRU5EKSB7XG4gICAgICB0aGlzLmNsaWVudFNlY3JldCA9IHRoaXMucmVzb3VyY2UuZ2V0QXR0U3RyaW5nKFwiQ2xpZW50U2VjcmV0XCIpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBjbGllbnQgc2VjcmV0IChpZiBpdCBleGlzdHMgaW4gU2VjcmV0cyBNYW5hZ2VyKVxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZFNlY3JldChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgaWYgKCF0aGlzLmNsaWVudFNlY3JldFNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IHNlY3JldCBpcyBub3Qgc3RvcmVkIGluIFNlY3JldHMgTWFuYWdlclwiKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnRTZWNyZXRTZWNyZXQuZ3JhbnRSZWFkKGdyYW50ZWUpXG4gIH1cbn1cbiJdfQ==
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1hcHAtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvZ25pdG8tYXBwLWNsaWVudC9jb2duaXRvLWFwcC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUd6QyxPQUFPLEtBQUssY0FBYyxNQUFNLGdDQUFnQyxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHdEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDOUMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUUxQzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBY1g7QUFkRCxXQUFZLGFBQWE7SUFDdkI7Ozs7T0FJRztJQUNILG9DQUFtQixDQUFBO0lBRW5COzs7O09BSUc7SUFDSCxzQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBZFcsYUFBYSxLQUFiLGFBQWEsUUFjeEI7QUF5RUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFDN0M7O09BRUc7SUFDYSxJQUFJLENBQVE7SUFFNUI7O09BRUc7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LENBQUE7UUFDbkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENESyBDb25zdHJ1Y3QgZm9yIENvZ25pdG8gQXBwIENsaWVudFxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBTZWNyZXRWYWx1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgdHlwZSAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHR5cGUgeyBBcHBDbGllbnRQcm92aWRlciB9IGZyb20gXCIuLi92eS1jb2duaXRvLXByb3ZpZGVyXCJcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG5cbi8qKlxuICogVHlwZSBvZiBhcHAgY2xpZW50XG4gKi9cbmV4cG9ydCBlbnVtIEFwcENsaWVudFR5cGUge1xuICAvKipcbiAgICogQmFja2VuZCBhcHAgY2xpZW50IGZvciBtYWNoaW5lLXRvLW1hY2hpbmUgKE0yTSkgYXV0aGVudGljYXRpb25cbiAgICogVXNlcyBPQXV0aCAyLjAgQ2xpZW50IENyZWRlbnRpYWxzIGdyYW50IHR5cGVcbiAgICogR2VuZXJhdGVzIGEgY2xpZW50IHNlY3JldCBmb3IgYXV0aGVudGljYXRpb25cbiAgICovXG4gIEJBQ0tFTkQgPSBcImJhY2tlbmRcIixcblxuICAvKipcbiAgICogRnJvbnRlbmQgYXBwIGNsaWVudCBmb3IgdXNlciBhdXRoZW50aWNhdGlvblxuICAgKiBVc2VzIE9BdXRoIDIuMCBBdXRob3JpemF0aW9uIENvZGUgb3IgSW1wbGljaXQgZ3JhbnQgdHlwZXNcbiAgICogU3VwcG9ydHMgY2FsbGJhY2sgVVJMcyBhbmQgbG9nb3V0IFVSTHMgZm9yIGJyb3dzZXItYmFzZWQgZmxvd3NcbiAgICovXG4gIEZST05URU5EID0gXCJmcm9udGVuZFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BcHBDbGllbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBBbiBBcHBDbGllbnRQcm92aWRlciBwcm92aWRlZCBmcm9tIGEgVnlDb2duaXRvUHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGFwcENsaWVudFByb3ZpZGVyOiBBcHBDbGllbnRQcm92aWRlclxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBwIGNsaWVudFxuICAgKiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgYXBwIGNsaWVudFxuICAgKiAtIGJhY2tlbmQ6IE1hY2hpbmUtdG8tbWFjaGluZSBhdXRoZW50aWNhdGlvbiB3aXRoIGNsaWVudCBjcmVkZW50aWFsc1xuICAgKiAtIGZyb250ZW5kOiBVc2VyIGF1dGhlbnRpY2F0aW9uIHdpdGggYXV0aG9yaXphdGlvbiBjb2RlIG9yIGltcGxpY2l0IGdyYW50XG4gICAqL1xuICByZWFkb25seSB0eXBlOiBBcHBDbGllbnRUeXBlXG5cbiAgLyoqXG4gICAqIE9BdXRoIHNjb3BlcyBmb3IgdGhpcyBjbGllbnRcbiAgICpcbiAgICogRm9yIGJhY2tlbmQgY2xpZW50czogVXNlIHJlc291cmNlIHNlcnZlciBzY29wZXMgKGUuZy4sICdodHRwczovL2FwaS52eWRldi5pby9yZWFkJylcbiAgICogRm9yIGZyb250ZW5kIGNsaWVudHM6IFVzZSBPSURDIHNjb3BlcyAoZS5nLiwgJ2VtYWlsJywgJ29wZW5pZCcsICdwcm9maWxlJylcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFbXB0eSBhcnJheVxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVzPzogc3RyaW5nW11cblxuICAvKipcbiAgICogQ2FsbGJhY2sgVVJMcyBmb3IgT0F1dGggZmxvd3NcbiAgICogT25seSB1c2VkIHdpdGggZnJvbnRlbmQgY2xpZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNhbGxiYWNrIFVSTHNcbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrVXJscz86IHN0cmluZ1tdXG5cbiAgLyoqXG4gICAqIExvZ291dCBVUkxzIGZvciBPQXV0aCBmbG93c1xuICAgKiBPbmx5IHVzZWQgd2l0aCBmcm9udGVuZCBjbGllbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbG9nb3V0IFVSTHNcbiAgICovXG4gIHJlYWRvbmx5IGxvZ291dFVybHM/OiBzdHJpbmdbXVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGdlbmVyYXRlIGEgY2xpZW50IHNlY3JldFxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBiYXNlZCBvbiB0eXBlLCBidXQgY2FuIGJlIG92ZXJyaWRkZW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlIGZvciBiYWNrZW5kLCBmYWxzZSBmb3IgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlU2VjcmV0PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzZWNyZXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlclxuICAgKiBPbmx5IGFwcGxpY2FibGUgaWYgZ2VuZXJhdGVTZWNyZXQgaXMgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0TmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBCYXNlIGRvbWFpbiBmb3IgQ29nbml0byBzZXJ2aWNlXG4gICAqIEBkZWZhdWx0ICdjb2duaXRvLnZ5ZGV2LmlvJ1xuICAgKi9cbiAgcmVhZG9ubHkgY29nbml0b0Jhc2VEb21haW4/OiBzdHJpbmdcblxuICAvKipcbiAgICogQGRlZmF1bHQgbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLXG4gICAqL1xuICByZWFkb25seSBsb2dzUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzXG59XG5cbi8qKlxuICogQSBDb2duaXRvIEFwcCBDbGllbnQgbWFuYWdlZCB0aHJvdWdoIFZ5J3MgY2VudHJhbCBDb2duaXRvIHNlcnZpY2VcbiAqXG4gKiBBcHAgY2xpZW50cyBhcmUgdGhlIHVzZXIgcG9vbCBhdXRoZW50aWNhdGlvbiByZXNvdXJjZXMgYXR0YWNoZWQgdG8geW91ciBhcHAuXG4gKiBVc2UgYW4gYXBwIGNsaWVudCB0byBjb25maWd1cmUgdGhlIHBlcm1pdHRlZCBhdXRoZW50aWNhdGlvbiBhY3Rpb25zIGZvciBhbiBhcHAuXG4gKlxuICogVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBhcHAgY2xpZW50czpcbiAqIC0gKipCYWNrZW5kKio6IE1hY2hpbmUtdG8tbWFjaGluZSBhdXRoZW50aWNhdGlvbiB1c2luZyBPQXV0aCAyLjAgQ2xpZW50IENyZWRlbnRpYWxzXG4gKiAtICoqRnJvbnRlbmQqKjogVXNlciBhdXRoZW50aWNhdGlvbiB1c2luZyBPQXV0aCAyLjAgQXV0aG9yaXphdGlvbiBDb2RlIG9yIEltcGxpY2l0IEdyYW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICAvLyBDcmVhdGUgYSBWeUNvZ25pdG9Qcm92aWRlclxuICogY29uc3QgdnlDb2duaXRvUHJvdmlkZXIgPSBuZXcgVnlDb2duaXRvUHJvdmlkZXIodGhpcywgJ015UHJvdmlkZXInLCB7XG4gKiAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlRFU1QsXG4gKiB9KTtcbiAqXG4gKiAvLyBCYWNrZW5kIGFwcCBjbGllbnQgZm9yIE0yTSBhdXRoZW50aWNhdGlvblxuICogY29uc3QgYmFja2VuZENsaWVudCA9IG5ldyBDb2duaXRvQXBwQ2xpZW50KHRoaXMsICdCYWNrZW5kQ2xpZW50Jywge1xuICogICBhcHBDbGllbnRQcm92aWRlcjogdnlDb2duaXRvUHJvdmlkZXIuYXBwQ2xpZW50UHJvdmlkZXIsXG4gKiAgIG5hbWU6ICdteS1iYWNrZW5kLXNlcnZpY2UnLFxuICogICB0eXBlOiBBcHBDbGllbnRUeXBlLkJBQ0tFTkQsXG4gKiAgIHNjb3BlczogWydodHRwczovL2FwaS52eWRldi5pby9yZWFkJywgJ2h0dHBzOi8vYXBpLnZ5ZGV2LmlvL3dyaXRlJ11cbiAqIH0pO1xuICpcbiAqIC8vIEFjY2VzcyBjcmVkZW50aWFsc1xuICogY29uc3QgY2xpZW50SWQgPSBiYWNrZW5kQ2xpZW50LmNsaWVudElkO1xuICogY29uc3QgY2xpZW50U2VjcmV0ID0gYmFja2VuZENsaWVudC5jbGllbnRTZWNyZXQ7IC8vIFN0b3JlZCBpbiBTZWNyZXRzIE1hbmFnZXJcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSBWeUNvZ25pdG9Qcm92aWRlclxuICogY29uc3QgdnlDb2duaXRvUHJvdmlkZXIgPSBuZXcgVnlDb2duaXRvUHJvdmlkZXIodGhpcywgJ015UHJvdmlkZXInLCB7XG4gKiAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlRFU1QsXG4gKiB9KTtcbiAqXG4gKiAvLyBGcm9udGVuZCBhcHAgY2xpZW50IGZvciB1c2VyIGF1dGhlbnRpY2F0aW9uXG4gKiBjb25zdCBmcm9udGVuZENsaWVudCA9IG5ldyBDb2duaXRvQXBwQ2xpZW50KHRoaXMsICdGcm9udGVuZENsaWVudCcsIHtcbiAqICAgYXBwQ2xpZW50UHJvdmlkZXI6IHZ5Q29nbml0b1Byb3ZpZGVyLmFwcENsaWVudFByb3ZpZGVyLFxuICogICBuYW1lOiAnbXktd2ViLWFwcCcsXG4gKiAgIHR5cGU6IEFwcENsaWVudFR5cGUuRlJPTlRFTkQsXG4gKiAgIHNjb3BlczogWydlbWFpbCcsICdvcGVuaWQnLCAncHJvZmlsZSddLFxuICogICBjYWxsYmFja1VybHM6IFsnaHR0cHM6Ly9teS1hcHAudnlkZXYuaW8vYXV0aC9jYWxsYmFjayddLFxuICogICBsb2dvdXRVcmxzOiBbJ2h0dHBzOi8vbXktYXBwLnZ5ZGV2LmlvL2xvZ291dCddXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0FwcENsaWVudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBwIGNsaWVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBjdXN0b20gcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogY2RrLkN1c3RvbVJlc291cmNlXG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgSUQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50SWQ6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50IHNlY3JldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudFNlY3JldEFybj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIHRoZSBjbGllbnQgc2VjcmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50U2VjcmV0U2VjcmV0Pzogc2VjcmV0c21hbmFnZXIuSVNlY3JldFxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvQXBwQ2xpZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5uYW1lXG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy50eXBlID09PSBBcHBDbGllbnRUeXBlLkZST05URU5EICYmXG4gICAgICBwcm9wcy5jYWxsYmFja1VybHMgJiZcbiAgICAgIHByb3BzLmNhbGxiYWNrVXJscy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGNkay5Bbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBcIkZyb250ZW5kIGFwcCBjbGllbnRzIHR5cGljYWxseSByZXF1aXJlIGNhbGxiYWNrVXJscyBmb3IgT0F1dGggZmxvd3NcIixcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBwcm9wcy5nZW5lcmF0ZVNlY3JldCBvdmVycmlkZXMgdHlwZS1zcGVjaWZpYyBkZWZhdWx0c1xuICAgIC8vIERlZmF1bHQgZm9yIGJhY2tlbmQgY2xpZW50cyBpcyB0cnVlOyBmb3IgZnJvbnRlbmQgY2xpZW50cyBmYWxzZVxuICAgIGNvbnN0IGdlbmVyYXRlU2VjcmV0ID1cbiAgICAgIHByb3BzLmdlbmVyYXRlU2VjcmV0ID8/IHByb3BzLnR5cGUgPT09IEFwcENsaWVudFR5cGUuQkFDS0VORFxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLmFwcENsaWVudFByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHByb3BzLmFwcENsaWVudFByb3ZpZGVyLmVudmlyb25tZW50LFxuICAgICAgICBOYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICBUeXBlOiBwcm9wcy50eXBlLFxuICAgICAgICBTY29wZXM6IHByb3BzLnNjb3BlcyB8fCBbXSxcbiAgICAgICAgQ2FsbGJhY2tVcmxzOiBwcm9wcy5jYWxsYmFja1VybHMgfHwgW10sXG4gICAgICAgIExvZ291dFVybHM6IHByb3BzLmxvZ291dFVybHMgfHwgW10sXG4gICAgICAgIEdlbmVyYXRlU2VjcmV0OiBnZW5lcmF0ZVNlY3JldCxcbiAgICAgIH0sXG4gICAgICAvLyBGb3JjZSByZXBsYWNlbWVudCBpZiB0eXBlIGNoYW5nZXNcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlZ5Q29nbml0b0FwcENsaWVudFwiLFxuICAgIH0pXG5cbiAgICBjb25zdCBjbGllbnRfaWQgPSB0aGlzLnJlc291cmNlLmdldEF0dFN0cmluZyhcIkNsaWVudElkXCIpXG4gICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudF9pZFxuXG4gICAgaWYgKGdlbmVyYXRlU2VjcmV0KSB7XG4gICAgICBjb25zdCBjbGllbnRfc2VjcmV0ID0gdGhpcy5yZXNvdXJjZS5nZXRBdHRTdHJpbmcoXCJDbGllbnRTZWNyZXRcIilcbiAgICAgIGNvbnN0IGF1dGhfdXJsID0gcHJvcHMuYXBwQ2xpZW50UHJvdmlkZXIuYXV0aF91cmxcblxuICAgICAgLy8gRm9yIGNvbnZlbmllbmNlLCBzdG9yZSBhdXRoX3VybCwgY2xpZW50X2lkLCBhbmQgY2xpZW50X3NlY3JldCBpbiBhIHNpbmdsZSBKU09OIHNlY3JldFxuICAgICAgY29uc3Qgc2VjcmV0U3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBhdXRoX3VybCxcbiAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgfSlcblxuICAgICAgdGhpcy5jbGllbnRTZWNyZXRTZWNyZXQgPSBuZXcgc2VjcmV0c21hbmFnZXIuU2VjcmV0KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkNsaWVudFNlY3JldFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc2VjcmV0TmFtZTpcbiAgICAgICAgICAgIHByb3BzLnNlY3JldE5hbWUgPz9cbiAgICAgICAgICAgIGAvdnkvJHtwcm9wcy5hcHBDbGllbnRQcm92aWRlci5lbnZpcm9ubWVudH0vY29nbml0by9hcHAtY2xpZW50LyR7cHJvcHMubmFtZX1gLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgYXV0aF91cmwsIGNsaWVudF9pZCBhbmQgY2xpZW50X3NlY3JldCBmb3IgVnkgQ29nbml0byBhcHAgY2xpZW50ICR7cHJvcHMubmFtZX1gLFxuICAgICAgICAgIHNlY3JldFN0cmluZ1ZhbHVlOiBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoc2VjcmV0U3RyaW5nKSxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgdGhpcy5jbGllbnRTZWNyZXRBcm4gPSB0aGlzLmNsaWVudFNlY3JldFNlY3JldC5zZWNyZXRGdWxsQXJuXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBjbGllbnQgc2VjcmV0IChpZiBpdCBleGlzdHMgaW4gU2VjcmV0cyBNYW5hZ2VyKVxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZFNlY3JldChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgaWYgKCF0aGlzLmNsaWVudFNlY3JldFNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IHNlY3JldCBpcyBub3Qgc3RvcmVkIGluIFNlY3JldHMgTWFuYWdlclwiKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnRTZWNyZXRTZWNyZXQuZ3JhbnRSZWFkKGdyYW50ZWUpXG4gIH1cbn1cbiJdfQ==
@@ -5,8 +5,12 @@ import { CognitoResourceServer } from "../cognito-resource-server";
5
5
  test("cognito resource server", () => {
6
6
  const app = new App();
7
7
  const stack = new Stack(app, "Stack");
8
- new CognitoResourceServer(stack, "CognitoResourceServer", {
8
+ const mockResourceServerProvider = {
9
9
  environment: VyEnvironment.TEST,
10
+ serviceToken: "serviceToken",
11
+ };
12
+ new CognitoResourceServer(stack, "CognitoResourceServer", {
13
+ resourceServerProvider: mockResourceServerProvider,
10
14
  name: "testName",
11
15
  identifier: "testIdentifier",
12
16
  scopes: [
@@ -20,4 +24,4 @@ test("cognito resource server", () => {
20
24
  ignoreAssets: true,
21
25
  });
22
26
  });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2duaXRvLXJlc291cmNlLXNlcnZlci9fX3Rlc3RfXy9pbmRleC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRWxFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7SUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFckMsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7UUFDeEQsV0FBVyxFQUFFLGFBQWEsQ0FBQyxJQUFJO1FBQy9CLElBQUksRUFBRSxVQUFVO1FBQ2hCLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLFdBQVcsRUFBRSxzQkFBc0I7YUFDcEM7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IFwiamVzdC1jZGstc25hcHNob3RcIlxuaW1wb3J0IHsgVnlFbnZpcm9ubWVudCB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXNcIlxuaW1wb3J0IHsgQ29nbml0b1Jlc291cmNlU2VydmVyIH0gZnJvbSBcIi4uL2NvZ25pdG8tcmVzb3VyY2Utc2VydmVyXCJcblxudGVzdChcImNvZ25pdG8gcmVzb3VyY2Ugc2VydmVyXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgXCJTdGFja1wiKVxuXG4gIG5ldyBDb2duaXRvUmVzb3VyY2VTZXJ2ZXIoc3RhY2ssIFwiQ29nbml0b1Jlc291cmNlU2VydmVyXCIsIHtcbiAgICBlbnZpcm9ubWVudDogVnlFbnZpcm9ubWVudC5URVNULFxuICAgIG5hbWU6IFwidGVzdE5hbWVcIixcbiAgICBpZGVudGlmaWVyOiBcInRlc3RJZGVudGlmaWVyXCIsXG4gICAgc2NvcGVzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwidGVzdFNjb3BlTmFtZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJ0ZXN0U2NvcGVEZXNjcmlwdGlvblwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9KVxuXG4gIGV4cGVjdChzdGFjaykudG9NYXRjaENka1NuYXBzaG90KHtcbiAgICBpZ25vcmVBc3NldHM6IHRydWUsXG4gIH0pXG59KVxuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2duaXRvLXJlc291cmNlLXNlcnZlci9fX3Rlc3RfXy9pbmRleC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRWxELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRWxFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7SUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFckMsTUFBTSwwQkFBMEIsR0FBMkI7UUFDekQsV0FBVyxFQUFFLGFBQWEsQ0FBQyxJQUFJO1FBQy9CLFlBQVksRUFBRSxjQUFjO0tBQzdCLENBQUE7SUFFRCxJQUFJLHFCQUFxQixDQUFDLEtBQUssRUFBRSx1QkFBdUIsRUFBRTtRQUN4RCxzQkFBc0IsRUFBRSwwQkFBMEI7UUFDbEQsSUFBSSxFQUFFLFVBQVU7UUFDaEIsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixNQUFNLEVBQUU7WUFDTjtnQkFDRSxJQUFJLEVBQUUsZUFBZTtnQkFDckIsV0FBVyxFQUFFLHNCQUFzQjthQUNwQztTQUNGO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgXCJqZXN0LWNkay1zbmFwc2hvdFwiXG5pbXBvcnQgeyBWeUVudmlyb25tZW50IH0gZnJvbSBcIi4uLy4uL3NoYXJlZC90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlU2VydmVyUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vdnktY29nbml0by1wcm92aWRlclwiXG5pbXBvcnQgeyBDb2duaXRvUmVzb3VyY2VTZXJ2ZXIgfSBmcm9tIFwiLi4vY29nbml0by1yZXNvdXJjZS1zZXJ2ZXJcIlxuXG50ZXN0KFwiY29nbml0byByZXNvdXJjZSBzZXJ2ZXJcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgQXBwKClcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBcIlN0YWNrXCIpXG5cbiAgY29uc3QgbW9ja1Jlc291cmNlU2VydmVyUHJvdmlkZXI6IFJlc291cmNlU2VydmVyUHJvdmlkZXIgPSB7XG4gICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuVEVTVCxcbiAgICBzZXJ2aWNlVG9rZW46IFwic2VydmljZVRva2VuXCIsXG4gIH1cblxuICBuZXcgQ29nbml0b1Jlc291cmNlU2VydmVyKHN0YWNrLCBcIkNvZ25pdG9SZXNvdXJjZVNlcnZlclwiLCB7XG4gICAgcmVzb3VyY2VTZXJ2ZXJQcm92aWRlcjogbW9ja1Jlc291cmNlU2VydmVyUHJvdmlkZXIsXG4gICAgbmFtZTogXCJ0ZXN0TmFtZVwiLFxuICAgIGlkZW50aWZpZXI6IFwidGVzdElkZW50aWZpZXJcIixcbiAgICBzY29wZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0U2NvcGVOYW1lXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInRlc3RTY29wZURlc2NyaXB0aW9uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pXG5cbiAgZXhwZWN0KHN0YWNrKS50b01hdGNoQ2RrU25hcHNob3Qoe1xuICAgIGlnbm9yZUFzc2V0czogdHJ1ZSxcbiAgfSlcbn0pXG4iXX0=
@@ -2,9 +2,8 @@
2
2
  * CDK Construct for Cognito Resource Server
3
3
  */
4
4
  import * as cdk from "aws-cdk-lib";
5
- import * as logs from "aws-cdk-lib/aws-logs";
6
5
  import { Construct } from "constructs";
7
- import type { VyEnvironment } from "../shared/types";
6
+ import type { ResourceServerProvider } from "../vy-cognito-provider";
8
7
  export interface Scope {
9
8
  /**
10
9
  * The name of the scope
@@ -17,9 +16,9 @@ export interface Scope {
17
16
  }
18
17
  export interface CognitoResourceServerProps {
19
18
  /**
20
- * The Vy environment to provision in (e.g., VyEnvironment.PROD, VyEnvironment.STAGE, VyEnvironment.TEST)
19
+ * An ResourceServerProvider provided from a VyCognitoProvider
21
20
  */
22
- readonly environment: VyEnvironment;
21
+ readonly resourceServerProvider: ResourceServerProvider;
23
22
  /**
24
23
  * The name of the resource server
25
24
  */
@@ -39,10 +38,6 @@ export interface CognitoResourceServerProps {
39
38
  * @default 'cognito.vydev.io'
40
39
  */
41
40
  readonly cognitoBaseDomain?: string;
42
- /**
43
- * @default logs.RetentionDays.ONE_WEEK
44
- */
45
- readonly logsRetention?: logs.RetentionDays;
46
41
  }
47
42
  /**
48
43
  * A Cognito Resource Server managed through Vy's central Cognito service
@@ -54,8 +49,13 @@ export interface CognitoResourceServerProps {
54
49
  *
55
50
  * @example
56
51
  * ```typescript
52
+ * // Create a VyCognitoProvider
53
+ * const vyCognitoProvider = new VyCognitoProvider(this, 'MyProvider', {
54
+ * environment: VyEnvironment.TEST,
55
+ * });
56
+ *
57
57
  * const resourceServer = new CognitoResourceServer(this, 'ApiResourceServer', {
58
- * environment: VyEnvironment.PROD,
58
+ * resourceServerProvider: vyCognitoProvider.resourceServerProvider,
59
59
  * name: 'my-api',
60
60
  * identifier: 'https://my-api.vydev.io',
61
61
  * scopes: [
@@ -78,14 +78,6 @@ export declare class CognitoResourceServer extends Construct {
78
78
  * The underlying custom resource
79
79
  */
80
80
  readonly resource: cdk.CustomResource;
81
- /**
82
- * The logGroup for the event handler lambda
83
- */
84
- readonly lambdaLogGroup: logs.LogGroup;
85
- /**
86
- * The logGroup for the custom resource provider
87
- */
88
- readonly providerLogGroup: logs.LogGroup;
89
81
  constructor(scope: Construct, id: string, props: CognitoResourceServerProps);
90
82
  /**
91
83
  * Get a reference to a scope in the format expected by app clients
@@ -5,11 +5,6 @@ import { createRequire } from "node:module";
5
5
  import * as path from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import * as cdk from "aws-cdk-lib";
8
- import * as iam from "aws-cdk-lib/aws-iam";
9
- import * as lambda from "aws-cdk-lib/aws-lambda";
10
- import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
11
- import * as logs from "aws-cdk-lib/aws-logs";
12
- import * as cr from "aws-cdk-lib/custom-resources";
13
8
  import { Construct } from "constructs";
14
9
  const require = createRequire(import.meta.url);
15
10
  const __filename = fileURLToPath(import.meta.url);
@@ -24,8 +19,13 @@ const __dirname = path.dirname(__filename);
24
19
  *
25
20
  * @example
26
21
  * ```typescript
22
+ * // Create a VyCognitoProvider
23
+ * const vyCognitoProvider = new VyCognitoProvider(this, 'MyProvider', {
24
+ * environment: VyEnvironment.TEST,
25
+ * });
26
+ *
27
27
  * const resourceServer = new CognitoResourceServer(this, 'ApiResourceServer', {
28
- * environment: VyEnvironment.PROD,
28
+ * resourceServerProvider: vyCognitoProvider.resourceServerProvider,
29
29
  * name: 'my-api',
30
30
  * identifier: 'https://my-api.vydev.io',
31
31
  * scopes: [
@@ -48,56 +48,14 @@ export class CognitoResourceServer extends Construct {
48
48
  * The underlying custom resource
49
49
  */
50
50
  resource;
51
- /**
52
- * The logGroup for the event handler lambda
53
- */
54
- lambdaLogGroup;
55
- /**
56
- * The logGroup for the custom resource provider
57
- */
58
- providerLogGroup;
59
51
  constructor(scope, id, props) {
60
52
  super(scope, id);
61
53
  this.identifier = props.identifier;
62
54
  this.name = props.name;
63
- this.lambdaLogGroup = new logs.LogGroup(this, "LambdaLogGroup", {
64
- retention: props.logsRetention ?? logs.RetentionDays.ONE_WEEK,
65
- });
66
- const onEventHandler = new NodejsFunction(this, "OnEventHandler", {
67
- runtime: lambda.Runtime.NODEJS_22_X,
68
- handler: "handler",
69
- entry: require.resolve(`${__dirname}/handler`),
70
- timeout: cdk.Duration.minutes(2),
71
- memorySize: 256,
72
- logGroup: this.lambdaLogGroup,
73
- environment: props.cognitoBaseDomain
74
- ? {
75
- COGNITO_BASE_DOMAIN: props.cognitoBaseDomain,
76
- }
77
- : undefined,
78
- bundling: {
79
- minify: true,
80
- sourceMap: true,
81
- target: "es2020",
82
- externalModules: ["aws-sdk"],
83
- },
84
- });
85
- onEventHandler.addToRolePolicy(new iam.PolicyStatement({
86
- effect: iam.Effect.ALLOW,
87
- actions: ["execute-api:Invoke"],
88
- resources: ["*"], // Can be scoped down if API Gateway ARN is known
89
- }));
90
- this.providerLogGroup = new logs.LogGroup(this, "ProviderLogGroup", {
91
- retention: props.logsRetention ?? logs.RetentionDays.ONE_WEEK,
92
- });
93
- const provider = new cr.Provider(this, "Provider", {
94
- onEventHandler,
95
- logGroup: this.providerLogGroup,
96
- });
97
55
  this.resource = new cdk.CustomResource(this, "Resource", {
98
- serviceToken: provider.serviceToken,
56
+ serviceToken: props.resourceServerProvider.serviceToken,
99
57
  properties: {
100
- Environment: props.environment,
58
+ Environment: props.resourceServerProvider.environment,
101
59
  Name: props.name,
102
60
  Identifier: props.identifier,
103
61
  Scopes: props.scopes?.map((s) => ({
@@ -117,4 +75,4 @@ export class CognitoResourceServer extends Construct {
117
75
  return `${this.identifier}/${scopeName}`;
118
76
  }
119
77
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1yZXNvdXJjZS1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29nbml0by1yZXNvdXJjZS1zZXJ2ZXIvY29nbml0by1yZXNvdXJjZS1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLHdCQUF3QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUd0QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM5QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBaUQxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsU0FBUztJQUNsRDs7T0FFRztJQUNhLFVBQVUsQ0FBUTtJQUVsQzs7T0FFRztJQUNhLElBQUksQ0FBUTtJQUU1Qjs7T0FFRztJQUNhLFFBQVEsQ0FBb0I7SUFFNUM7O09BRUc7SUFDYSxjQUFjLENBQWU7SUFFN0M7O09BRUc7SUFDYSxnQkFBZ0IsQ0FBZTtJQUUvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUV0QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDOUQsU0FBUyxFQUFFLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1NBQzlELENBQUMsQ0FBQTtRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxVQUFVLENBQUM7WUFDOUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoQyxVQUFVLEVBQUUsR0FBRztZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtnQkFDbEMsQ0FBQyxDQUFDO29CQUNFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7aUJBQzdDO2dCQUNILENBQUMsQ0FBQyxTQUFTO1lBQ2IsUUFBUSxFQUFFO2dCQUNSLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDN0I7U0FDRixDQUFDLENBQUE7UUFFRixjQUFjLENBQUMsZUFBZSxDQUM1QixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztZQUMvQixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxpREFBaUQ7U0FDcEUsQ0FBQyxDQUNILENBQUE7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNsRSxTQUFTLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVE7U0FDOUQsQ0FBQyxDQUFBO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDakQsY0FBYztZQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ2hDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdkQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLFVBQVUsRUFBRTtnQkFDVixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzlCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDWixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7aUJBQzNCLENBQUMsQ0FBQzthQUNKO1lBQ0QsWUFBWSxFQUFFLGlDQUFpQztTQUNoRCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWUsQ0FBQyxTQUFpQjtRQUN0QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQTtJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENESyBDb25zdHJ1Y3QgZm9yIENvZ25pdG8gUmVzb3VyY2UgU2VydmVyXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgY3IgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHR5cGUgeyBWeUVudmlyb25tZW50IH0gZnJvbSBcIi4uL3NoYXJlZC90eXBlc1wiXG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzY29wZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHNjb3BlIGlzIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9SZXNvdXJjZVNlcnZlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBWeSBlbnZpcm9ubWVudCB0byBwcm92aXNpb24gaW4gKGUuZy4sIFZ5RW52aXJvbm1lbnQuUFJPRCwgVnlFbnZpcm9ubWVudC5TVEFHRSwgVnlFbnZpcm9ubWVudC5URVNUKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnRcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHNlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlc291cmNlIHNlcnZlciAodXN1YWxseSBhIFVSTClcbiAgICogQGV4YW1wbGUgJ2h0dHBzOi8vYXBpLnZ5ZGV2LmlvJ1xuICAgKi9cbiAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEN1c3RvbSBzY29wZXMgZm9yIHRoaXMgcmVzb3VyY2Ugc2VydmVyXG4gICAqIEBkZWZhdWx0IC0gTm8gc2NvcGVzXG4gICAqL1xuICByZWFkb25seSBzY29wZXM/OiBTY29wZVtdXG5cbiAgLyoqXG4gICAqIEJhc2UgZG9tYWluIGZvciBDb2duaXRvIHNlcnZpY2VcbiAgICogQGRlZmF1bHQgJ2NvZ25pdG8udnlkZXYuaW8nXG4gICAqL1xuICByZWFkb25seSBjb2duaXRvQmFzZURvbWFpbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUtcbiAgICovXG4gIHJlYWRvbmx5IGxvZ3NSZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXNcbn1cblxuLyoqXG4gKiBBIENvZ25pdG8gUmVzb3VyY2UgU2VydmVyIG1hbmFnZWQgdGhyb3VnaCBWeSdzIGNlbnRyYWwgQ29nbml0byBzZXJ2aWNlXG4gKlxuICogQSByZXNvdXJjZSBzZXJ2ZXIgaXMgYW4gaW50ZWdyYXRpb24gYmV0d2VlbiBhIHVzZXIgcG9vbCBhbmQgYW4gQVBJLlxuICogRWFjaCByZXNvdXJjZSBzZXJ2ZXIgaGFzIGN1c3RvbSBzY29wZXMgdGhhdCB5b3UgbXVzdCBhY3RpdmF0ZSBpbiB5b3VyIGFwcCBjbGllbnQuXG4gKiBXaGVuIHlvdSBjb25maWd1cmUgYSByZXNvdXJjZSBzZXJ2ZXIsIHlvdXIgYXBwIGNhbiBnZW5lcmF0ZSBhY2Nlc3MgdG9rZW5zIHdpdGhcbiAqIE9BdXRoIHNjb3BlcyB0aGF0IGF1dGhvcml6ZSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIHRvIGFuIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc291cmNlU2VydmVyID0gbmV3IENvZ25pdG9SZXNvdXJjZVNlcnZlcih0aGlzLCAnQXBpUmVzb3VyY2VTZXJ2ZXInLCB7XG4gKiAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlBST0QsXG4gKiAgIG5hbWU6ICdteS1hcGknLFxuICogICBpZGVudGlmaWVyOiAnaHR0cHM6Ly9teS1hcGkudnlkZXYuaW8nLFxuICogICBzY29wZXM6IFtcbiAqICAgICB7IG5hbWU6ICdyZWFkJywgZGVzY3JpcHRpb246ICdSZWFkIGFjY2VzcyB0byB0aGUgQVBJJyB9LFxuICogICAgIHsgbmFtZTogJ3dyaXRlJywgZGVzY3JpcHRpb246ICdXcml0ZSBhY2Nlc3MgdG8gdGhlIEFQSScgfVxuICogICBdXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b1Jlc291cmNlU2VydmVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSByZXNvdXJjZSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHNlcnZlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBjdXN0b20gcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogY2RrLkN1c3RvbVJlc291cmNlXG5cbiAgLyoqXG4gICAqIFRoZSBsb2dHcm91cCBmb3IgdGhlIGV2ZW50IGhhbmRsZXIgbGFtYmRhXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhTG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICAvKipcbiAgICogVGhlIGxvZ0dyb3VwIGZvciB0aGUgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXJMb2dHcm91cDogbG9ncy5Mb2dHcm91cFxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvUmVzb3VyY2VTZXJ2ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuaWRlbnRpZmllciA9IHByb3BzLmlkZW50aWZpZXJcbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5uYW1lXG5cbiAgICB0aGlzLmxhbWJkYUxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJMYW1iZGFMb2dHcm91cFwiLCB7XG4gICAgICByZXRlbnRpb246IHByb3BzLmxvZ3NSZXRlbnRpb24gPz8gbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgIH0pXG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCBcIk9uRXZlbnRIYW5kbGVyXCIsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICBlbnRyeTogcmVxdWlyZS5yZXNvbHZlKGAke19fZGlybmFtZX0vaGFuZGxlcmApLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgICBsb2dHcm91cDogdGhpcy5sYW1iZGFMb2dHcm91cCxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5jb2duaXRvQmFzZURvbWFpblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIENPR05JVE9fQkFTRV9ET01BSU46IHByb3BzLmNvZ25pdG9CYXNlRG9tYWluLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgdGFyZ2V0OiBcImVzMjAyMFwiLFxuICAgICAgICBleHRlcm5hbE1vZHVsZXM6IFtcImF3cy1zZGtcIl0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBvbkV2ZW50SGFuZGxlci5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wiZXhlY3V0ZS1hcGk6SW52b2tlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sIC8vIENhbiBiZSBzY29wZWQgZG93biBpZiBBUEkgR2F0ZXdheSBBUk4gaXMga25vd25cbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMucHJvdmlkZXJMb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiUHJvdmlkZXJMb2dHcm91cFwiLCB7XG4gICAgICByZXRlbnRpb246IHByb3BzLmxvZ3NSZXRlbnRpb24gPz8gbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjci5Qcm92aWRlcih0aGlzLCBcIlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXA6IHRoaXMucHJvdmlkZXJMb2dHcm91cCxcbiAgICB9KVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgICBOYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICBJZGVudGlmaWVyOiBwcm9wcy5pZGVudGlmaWVyLFxuICAgICAgICBTY29wZXM6IHByb3BzLnNjb3Blcz8ubWFwKChzKSA9PiAoe1xuICAgICAgICAgIE5hbWU6IHMubmFtZSxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbixcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlZ5Q29nbml0b1Jlc291cmNlU2VydmVyXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBzY29wZSBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IGFwcCBjbGllbnRzXG4gICAqIEBwYXJhbSBzY29wZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjb3BlXG4gICAqIEByZXR1cm5zIFRoZSBmdWxsIHNjb3BlIGlkZW50aWZpZXIgKGUuZy4sICdodHRwczovL2FwaS52eWRldi5pby9yZWFkJylcbiAgICovXG4gIHB1YmxpYyBzY29wZUlkZW50aWZpZXIoc2NvcGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmlkZW50aWZpZXJ9LyR7c2NvcGVOYW1lfWBcbiAgfVxufVxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1yZXNvdXJjZS1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29nbml0by1yZXNvdXJjZS1zZXJ2ZXIvY29nbml0by1yZXNvdXJjZS1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUd0QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM5QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBNEMxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxTQUFTO0lBQ2xEOztPQUVHO0lBQ2EsVUFBVSxDQUFRO0lBRWxDOztPQUVHO0lBQ2EsSUFBSSxDQUFRO0lBRTVCOztPQUVHO0lBQ2EsUUFBUSxDQUFvQjtJQUU1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUV0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFlBQVksRUFBRSxLQUFLLENBQUMsc0JBQXNCLENBQUMsWUFBWTtZQUN2RCxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXO2dCQUNyRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDNUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7b0JBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO2lCQUMzQixDQUFDLENBQUM7YUFDSjtZQUNELFlBQVksRUFBRSxpQ0FBaUM7U0FDaEQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsU0FBaUI7UUFDdEMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLENBQUE7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDREsgQ29uc3RydWN0IGZvciBDb2duaXRvIFJlc291cmNlIFNlcnZlclxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlU2VydmVyUHJvdmlkZXIgfSBmcm9tIFwiLi4vdnktY29nbml0by1wcm92aWRlclwiXG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzY29wZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHNjb3BlIGlzIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9SZXNvdXJjZVNlcnZlclByb3BzIHtcbiAgLyoqXG4gICAqIEFuIFJlc291cmNlU2VydmVyUHJvdmlkZXIgcHJvdmlkZWQgZnJvbSBhIFZ5Q29nbml0b1Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZVNlcnZlclByb3ZpZGVyOiBSZXNvdXJjZVNlcnZlclByb3ZpZGVyXG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBzZXJ2ZXJcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBmb3IgdGhpcyByZXNvdXJjZSBzZXJ2ZXIgKHVzdWFsbHkgYSBVUkwpXG4gICAqIEBleGFtcGxlICdodHRwczovL2FwaS52eWRldi5pbydcbiAgICovXG4gIHJlYWRvbmx5IGlkZW50aWZpZXI6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDdXN0b20gc2NvcGVzIGZvciB0aGlzIHJlc291cmNlIHNlcnZlclxuICAgKiBAZGVmYXVsdCAtIE5vIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVzPzogU2NvcGVbXVxuXG4gIC8qKlxuICAgKiBCYXNlIGRvbWFpbiBmb3IgQ29nbml0byBzZXJ2aWNlXG4gICAqIEBkZWZhdWx0ICdjb2duaXRvLnZ5ZGV2LmlvJ1xuICAgKi9cbiAgcmVhZG9ubHkgY29nbml0b0Jhc2VEb21haW4/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBBIENvZ25pdG8gUmVzb3VyY2UgU2VydmVyIG1hbmFnZWQgdGhyb3VnaCBWeSdzIGNlbnRyYWwgQ29nbml0byBzZXJ2aWNlXG4gKlxuICogQSByZXNvdXJjZSBzZXJ2ZXIgaXMgYW4gaW50ZWdyYXRpb24gYmV0d2VlbiBhIHVzZXIgcG9vbCBhbmQgYW4gQVBJLlxuICogRWFjaCByZXNvdXJjZSBzZXJ2ZXIgaGFzIGN1c3RvbSBzY29wZXMgdGhhdCB5b3UgbXVzdCBhY3RpdmF0ZSBpbiB5b3VyIGFwcCBjbGllbnQuXG4gKiBXaGVuIHlvdSBjb25maWd1cmUgYSByZXNvdXJjZSBzZXJ2ZXIsIHlvdXIgYXBwIGNhbiBnZW5lcmF0ZSBhY2Nlc3MgdG9rZW5zIHdpdGhcbiAqIE9BdXRoIHNjb3BlcyB0aGF0IGF1dGhvcml6ZSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIHRvIGFuIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICAvLyBDcmVhdGUgYSBWeUNvZ25pdG9Qcm92aWRlclxuICogY29uc3QgdnlDb2duaXRvUHJvdmlkZXIgPSBuZXcgVnlDb2duaXRvUHJvdmlkZXIodGhpcywgJ015UHJvdmlkZXInLCB7XG4gKiAgIGVudmlyb25tZW50OiBWeUVudmlyb25tZW50LlRFU1QsXG4gKiB9KTtcbiAqXG4gKiBjb25zdCByZXNvdXJjZVNlcnZlciA9IG5ldyBDb2duaXRvUmVzb3VyY2VTZXJ2ZXIodGhpcywgJ0FwaVJlc291cmNlU2VydmVyJywge1xuICogICByZXNvdXJjZVNlcnZlclByb3ZpZGVyOiB2eUNvZ25pdG9Qcm92aWRlci5yZXNvdXJjZVNlcnZlclByb3ZpZGVyLFxuICogICBuYW1lOiAnbXktYXBpJyxcbiAqICAgaWRlbnRpZmllcjogJ2h0dHBzOi8vbXktYXBpLnZ5ZGV2LmlvJyxcbiAqICAgc2NvcGVzOiBbXG4gKiAgICAgeyBuYW1lOiAncmVhZCcsIGRlc2NyaXB0aW9uOiAnUmVhZCBhY2Nlc3MgdG8gdGhlIEFQSScgfSxcbiAqICAgICB7IG5hbWU6ICd3cml0ZScsIGRlc2NyaXB0aW9uOiAnV3JpdGUgYWNjZXNzIHRvIHRoZSBBUEknIH1cbiAqICAgXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9SZXNvdXJjZVNlcnZlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcmVzb3VyY2Ugc2VydmVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgY3VzdG9tIHJlc291cmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IGNkay5DdXN0b21SZXNvdXJjZVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvUmVzb3VyY2VTZXJ2ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuaWRlbnRpZmllciA9IHByb3BzLmlkZW50aWZpZXJcbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5uYW1lXG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucmVzb3VyY2VTZXJ2ZXJQcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIEVudmlyb25tZW50OiBwcm9wcy5yZXNvdXJjZVNlcnZlclByb3ZpZGVyLmVudmlyb25tZW50LFxuICAgICAgICBOYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICBJZGVudGlmaWVyOiBwcm9wcy5pZGVudGlmaWVyLFxuICAgICAgICBTY29wZXM6IHByb3BzLnNjb3Blcz8ubWFwKChzKSA9PiAoe1xuICAgICAgICAgIE5hbWU6IHMubmFtZSxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbixcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlZ5Q29nbml0b1Jlc291cmNlU2VydmVyXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBzY29wZSBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IGFwcCBjbGllbnRzXG4gICAqIEBwYXJhbSBzY29wZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjb3BlXG4gICAqIEByZXR1cm5zIFRoZSBmdWxsIHNjb3BlIGlkZW50aWZpZXIgKGUuZy4sICdodHRwczovL2FwaS52eWRldi5pby9yZWFkJylcbiAgICovXG4gIHB1YmxpYyBzY29wZUlkZW50aWZpZXIoc2NvcGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmlkZW50aWZpZXJ9LyR7c2NvcGVOYW1lfWBcbiAgfVxufVxuIl19
package/lib/index.d.ts CHANGED
@@ -5,5 +5,5 @@
5
5
  * This library provides CDK equivalents to the Terraform provider `terraform-provider-vy`.
6
6
  */
7
7
  export * from "./cognito-app-client/cognito-app-client";
8
- export * from "./cognito-info";
9
8
  export * from "./cognito-resource-server/cognito-resource-server";
9
+ export * from "./vy-cognito-provider";
package/lib/index.js CHANGED
@@ -4,9 +4,7 @@
4
4
  *
5
5
  * This library provides CDK equivalents to the Terraform provider `terraform-provider-vy`.
6
6
  */
7
- // Resources
8
7
  export * from "./cognito-app-client/cognito-app-client";
9
- // Data Sources
10
- export * from "./cognito-info";
11
8
  export * from "./cognito-resource-server/cognito-resource-server";
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxZQUFZO0FBQ1osY0FBYyx5Q0FBeUMsQ0FBQTtBQUN2RCxlQUFlO0FBQ2YsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLG1EQUFtRCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdnkvY2RrLXJlc291cmNlc1xuICogQ0RLIGNvbnN0cnVjdHMgZm9yIFZ5IGludGVybmFsIHNlcnZpY2VzXG4gKlxuICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIENESyBlcXVpdmFsZW50cyB0byB0aGUgVGVycmFmb3JtIHByb3ZpZGVyIGB0ZXJyYWZvcm0tcHJvdmlkZXItdnlgLlxuICovXG5cbi8vIFJlc291cmNlc1xuZXhwb3J0ICogZnJvbSBcIi4vY29nbml0by1hcHAtY2xpZW50L2NvZ25pdG8tYXBwLWNsaWVudFwiXG4vLyBEYXRhIFNvdXJjZXNcbmV4cG9ydCAqIGZyb20gXCIuL2NvZ25pdG8taW5mb1wiXG5leHBvcnQgKiBmcm9tIFwiLi9jb2duaXRvLXJlc291cmNlLXNlcnZlci9jb2duaXRvLXJlc291cmNlLXNlcnZlclwiXG4iXX0=
9
+ export * from "./vy-cognito-provider";
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxjQUFjLHlDQUF5QyxDQUFBO0FBQ3ZELGNBQWMsbURBQW1ELENBQUE7QUFDakUsY0FBYyx1QkFBdUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHZ5L2Nkay1yZXNvdXJjZXNcbiAqIENESyBjb25zdHJ1Y3RzIGZvciBWeSBpbnRlcm5hbCBzZXJ2aWNlc1xuICpcbiAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBDREsgZXF1aXZhbGVudHMgdG8gdGhlIFRlcnJhZm9ybSBwcm92aWRlciBgdGVycmFmb3JtLXByb3ZpZGVyLXZ5YC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb2duaXRvLWFwcC1jbGllbnQvY29nbml0by1hcHAtY2xpZW50XCJcbmV4cG9ydCAqIGZyb20gXCIuL2NvZ25pdG8tcmVzb3VyY2Utc2VydmVyL2NvZ25pdG8tcmVzb3VyY2Utc2VydmVyXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Z5LWNvZ25pdG8tcHJvdmlkZXJcIlxuIl19
@@ -63,10 +63,26 @@ export interface ArtifactVersion {
63
63
  version: string;
64
64
  }
65
65
  export interface CognitoDetails {
66
+ /**
67
+ * The URL where users can authenticate
68
+ */
66
69
  authUrl: string;
70
+ /**
71
+ * The URL for the /.well-known/jwks.json endpoint
72
+ */
67
73
  jwksUrl: string;
74
+ /**
75
+ * The URL for the /.well-known/openid-configuration endpoint
76
+ */
68
77
  openIdUrl: string;
78
+ /**
79
+ * The URI for the issuer
80
+ */
69
81
  issuer: string;
82
+ /**
83
+ * The Vy Cognito Userpool Id
84
+ */
85
+ userPoolId: string;
70
86
  }
71
87
  /**
72
88
  * Custom Resource event types
@@ -19,4 +19,4 @@ export var VyEnvironment;
19
19
  */
20
20
  VyEnvironment["PROD"] = "prod";
21
21
  })(VyEnvironment || (VyEnvironment = {}));
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxhQWVYO0FBZkQsV0FBWSxhQUFhO0lBQ3ZCOztPQUVHO0lBQ0gsOEJBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsZ0NBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFmVyxhQUFhLEtBQWIsYUFBYSxRQWV4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkIHR5cGUgZGVmaW5pdGlvbnMgZm9yIFZ5IGN1c3RvbSByZXNvdXJjZXNcbiAqL1xuXG4vKipcbiAqIFRoZSBkaWZmZXJlbnQgVnkgZW52aXJvbm1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFZ5RW52aXJvbm1lbnQge1xuICAvKipcbiAgICogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcbiAgICovXG4gIFRFU1QgPSBcInRlc3RcIixcblxuICAvKipcbiAgICogUHJvZHVjdGlvbi1saWtlIGVudmlyb25tZW50XG4gICAqL1xuICBTVEFHRSA9IFwic3RhZ2VcIixcblxuICAvKipcbiAgICogUHJvZHVjdGlvbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgUFJPRCA9IFwicHJvZFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVNlcnZlciB7XG4gIGlkZW50aWZpZXI6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2NvcGVzPzogU2NvcGVbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlU2VydmVyVXBkYXRlUmVxdWVzdCB7XG4gIGlkZW50aWZpZXI6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2NvcGVzPzogU2NvcGVbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcENsaWVudCB7XG4gIG5hbWU6IHN0cmluZ1xuICBzY29wZXM6IHN0cmluZ1tdXG4gIHR5cGU6IFwiZnJvbnRlbmRcIiB8IFwiYmFja2VuZFwiXG4gIGNhbGxiYWNrX3VybHM6IHN0cmluZ1tdXG4gIGxvZ291dF91cmxzOiBzdHJpbmdbXVxuICBnZW5lcmF0ZV9zZWNyZXQ/OiBib29sZWFuXG4gIGNsaWVudF9pZD86IHN0cmluZ1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQ2xpZW50VXBkYXRlUmVxdWVzdCB7XG4gIG5hbWU6IHN0cmluZ1xuICBzY29wZXM6IHN0cmluZ1tdXG4gIGNhbGxiYWNrX3VybHM6IHN0cmluZ1tdXG4gIGxvZ291dF91cmxzOiBzdHJpbmdbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBY2NvdW50IHtcbiAgYWNjb3VudElkOiBzdHJpbmdcbiAgc2xhY2tDaGFubmVsOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudEFjY291bnQge1xuICBhY2NvdW50SWQ6IHN0cmluZ1xuICBvd25lckFjY291bnRJZDogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJ0aWZhY3RWZXJzaW9uIHtcbiAgdXJpOiBzdHJpbmdcbiAgc3RvcmU6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0RldGFpbHMge1xuICBhdXRoVXJsOiBzdHJpbmdcbiAgandrc1VybDogc3RyaW5nXG4gIG9wZW5JZFVybDogc3RyaW5nXG4gIGlzc3Vlcjogc3RyaW5nXG59XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IHR5cGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VSZXF1ZXN0IHtcbiAgUmVxdWVzdFR5cGU6IFwiQ3JlYXRlXCIgfCBcIlVwZGF0ZVwiIHwgXCJEZWxldGVcIlxuICBSZXF1ZXN0SWQ6IHN0cmluZ1xuICBSZXNwb25zZVVSTDogc3RyaW5nXG4gIFJlc291cmNlVHlwZTogc3RyaW5nXG4gIExvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmdcbiAgU3RhY2tJZDogc3RyaW5nXG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZ1xuICBSZXNvdXJjZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgT2xkUmVzb3VyY2VQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgYW55PlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUmVzcG9uc2Uge1xuICBTdGF0dXM6IFwiU1VDQ0VTU1wiIHwgXCJGQUlMRURcIlxuICBSZWFzb24/OiBzdHJpbmdcbiAgUGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmdcbiAgU3RhY2tJZDogc3RyaW5nXG4gIFJlcXVlc3RJZDogc3RyaW5nXG4gIExvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmdcbiAgRGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxhQWVYO0FBZkQsV0FBWSxhQUFhO0lBQ3ZCOztPQUVHO0lBQ0gsOEJBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsZ0NBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFmVyxhQUFhLEtBQWIsYUFBYSxRQWV4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkIHR5cGUgZGVmaW5pdGlvbnMgZm9yIFZ5IGN1c3RvbSByZXNvdXJjZXNcbiAqL1xuXG4vKipcbiAqIFRoZSBkaWZmZXJlbnQgVnkgZW52aXJvbm1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFZ5RW52aXJvbm1lbnQge1xuICAvKipcbiAgICogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcbiAgICovXG4gIFRFU1QgPSBcInRlc3RcIixcblxuICAvKipcbiAgICogUHJvZHVjdGlvbi1saWtlIGVudmlyb25tZW50XG4gICAqL1xuICBTVEFHRSA9IFwic3RhZ2VcIixcblxuICAvKipcbiAgICogUHJvZHVjdGlvbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgUFJPRCA9IFwicHJvZFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVNlcnZlciB7XG4gIGlkZW50aWZpZXI6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2NvcGVzPzogU2NvcGVbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlU2VydmVyVXBkYXRlUmVxdWVzdCB7XG4gIGlkZW50aWZpZXI6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2NvcGVzPzogU2NvcGVbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcENsaWVudCB7XG4gIG5hbWU6IHN0cmluZ1xuICBzY29wZXM6IHN0cmluZ1tdXG4gIHR5cGU6IFwiZnJvbnRlbmRcIiB8IFwiYmFja2VuZFwiXG4gIGNhbGxiYWNrX3VybHM6IHN0cmluZ1tdXG4gIGxvZ291dF91cmxzOiBzdHJpbmdbXVxuICBnZW5lcmF0ZV9zZWNyZXQ/OiBib29sZWFuXG4gIGNsaWVudF9pZD86IHN0cmluZ1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQ2xpZW50VXBkYXRlUmVxdWVzdCB7XG4gIG5hbWU6IHN0cmluZ1xuICBzY29wZXM6IHN0cmluZ1tdXG4gIGNhbGxiYWNrX3VybHM6IHN0cmluZ1tdXG4gIGxvZ291dF91cmxzOiBzdHJpbmdbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBY2NvdW50IHtcbiAgYWNjb3VudElkOiBzdHJpbmdcbiAgc2xhY2tDaGFubmVsOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudEFjY291bnQge1xuICBhY2NvdW50SWQ6IHN0cmluZ1xuICBvd25lckFjY291bnRJZDogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJ0aWZhY3RWZXJzaW9uIHtcbiAgdXJpOiBzdHJpbmdcbiAgc3RvcmU6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0RldGFpbHMge1xuICAvKipcbiAgICogVGhlIFVSTCB3aGVyZSB1c2VycyBjYW4gYXV0aGVudGljYXRlXG4gICAqL1xuICBhdXRoVXJsOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIFVSTCBmb3IgdGhlIC8ud2VsbC1rbm93bi9qd2tzLmpzb24gZW5kcG9pbnRcbiAgICovXG4gIGp3a3NVcmw6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIGZvciB0aGUgLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIGVuZHBvaW50XG4gICAqL1xuICBvcGVuSWRVcmw6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVVJJIGZvciB0aGUgaXNzdWVyXG4gICAqL1xuICBpc3N1ZXI6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVnkgQ29nbml0byBVc2VycG9vbCBJZFxuICAgKi9cbiAgdXNlclBvb2xJZDogc3RyaW5nXG59XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IHR5cGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VSZXF1ZXN0IHtcbiAgUmVxdWVzdFR5cGU6IFwiQ3JlYXRlXCIgfCBcIlVwZGF0ZVwiIHwgXCJEZWxldGVcIlxuICBSZXF1ZXN0SWQ6IHN0cmluZ1xuICBSZXNwb25zZVVSTDogc3RyaW5nXG4gIFJlc291cmNlVHlwZTogc3RyaW5nXG4gIExvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmdcbiAgU3RhY2tJZDogc3RyaW5nXG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZ1xuICBSZXNvdXJjZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgT2xkUmVzb3VyY2VQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgYW55PlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUmVzcG9uc2Uge1xuICBTdGF0dXM6IFwiU1VDQ0VTU1wiIHwgXCJGQUlMRURcIlxuICBSZWFzb24/OiBzdHJpbmdcbiAgUGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmdcbiAgU3RhY2tJZDogc3RyaW5nXG4gIFJlcXVlc3RJZDogc3RyaW5nXG4gIExvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmdcbiAgRGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import * as logs from "aws-cdk-lib/aws-logs";
2
+ import { Construct } from "constructs";
3
+ import type { CognitoDetails, VyEnvironment } from "./shared/types";
4
+ export interface VyCognitoProviderProps {
5
+ /**
6
+ * The Vy Cognito environment to connect to (e.g., VyEnvironment.PROD, VyEnvironment.STAGE, VyEnvironment.TEST)
7
+ */
8
+ readonly environment: VyEnvironment;
9
+ /**
10
+ * Base domain for Cognito service
11
+ * @default 'cognito.vydev.io'
12
+ */
13
+ readonly cognitoBaseDomain?: string;
14
+ /**
15
+ * @default logs.RetentionDays.ONE_WEEK
16
+ */
17
+ readonly logsRetention?: logs.RetentionDays;
18
+ }
19
+ export interface AppClientProvider {
20
+ environment: VyEnvironment;
21
+ serviceToken: string;
22
+ auth_url: string;
23
+ }
24
+ export interface ResourceServerProvider {
25
+ environment: VyEnvironment;
26
+ serviceToken: string;
27
+ }
28
+ export declare class VyCognitoProvider extends Construct {
29
+ readonly environment: VyEnvironment;
30
+ readonly cognitoBaseDomain: string;
31
+ readonly details: CognitoDetails;
32
+ readonly appClientProvider: AppClientProvider;
33
+ readonly resourceServerProvider: ResourceServerProvider;
34
+ constructor(scope: Construct, id: string, props: VyCognitoProviderProps);
35
+ }
36
+ export declare function getCognitoDetailsForEnvironment(environment: VyEnvironment): CognitoDetails;
@@ -0,0 +1,131 @@
1
+ import { createRequire } from "node:module";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import * as cdk from "aws-cdk-lib";
5
+ import * as iam from "aws-cdk-lib/aws-iam";
6
+ import * as lambda from "aws-cdk-lib/aws-lambda";
7
+ import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
8
+ import * as logs from "aws-cdk-lib/aws-logs";
9
+ import * as cr from "aws-cdk-lib/custom-resources";
10
+ import { Construct } from "constructs";
11
+ const require = createRequire(import.meta.url);
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ export class VyCognitoProvider extends Construct {
15
+ environment;
16
+ cognitoBaseDomain;
17
+ details;
18
+ appClientProvider;
19
+ resourceServerProvider;
20
+ constructor(scope, id, props) {
21
+ super(scope, id);
22
+ this.environment = props.environment;
23
+ this.cognitoBaseDomain = props.cognitoBaseDomain ?? "cognito.vydev.io";
24
+ this.details = getCognitoDetailsForEnvironment(this.environment);
25
+ const appClientProvider = new LambdaProvider(this, "AppClientProvider", {
26
+ cognitoBaseDomain: this.cognitoBaseDomain,
27
+ runtime: lambda.Runtime.NODEJS_22_X,
28
+ handler: "handler",
29
+ entry: require.resolve(`${__dirname}/cognito-app-client/handler`),
30
+ logRetention: props.logsRetention,
31
+ });
32
+ this.appClientProvider = {
33
+ environment: this.environment,
34
+ serviceToken: appClientProvider.serviceToken,
35
+ auth_url: this.details.authUrl,
36
+ };
37
+ const resourceServerProvider = new LambdaProvider(this, "ResourceServerProvider", {
38
+ cognitoBaseDomain: this.cognitoBaseDomain,
39
+ runtime: lambda.Runtime.NODEJS_22_X,
40
+ handler: "handler",
41
+ entry: require.resolve(`${__dirname}/cognito-resource-server/handler`),
42
+ logRetention: props.logsRetention,
43
+ });
44
+ this.resourceServerProvider = {
45
+ environment: this.environment,
46
+ serviceToken: resourceServerProvider.serviceToken,
47
+ };
48
+ }
49
+ }
50
+ class LambdaProvider extends Construct {
51
+ /**
52
+ * The logGroup for the event handler lambda
53
+ */
54
+ lambdaLogGroup;
55
+ /**
56
+ * The logGroup for the custom resource provider
57
+ */
58
+ providerLogGroup;
59
+ /**
60
+ * The service token for the provider
61
+ */
62
+ serviceToken;
63
+ constructor(scope, id, props) {
64
+ super(scope, id);
65
+ this.lambdaLogGroup = new logs.LogGroup(this, "LambdaLogGroup", {
66
+ retention: props.logRetention ?? logs.RetentionDays.ONE_WEEK,
67
+ });
68
+ this.providerLogGroup = new logs.LogGroup(this, "ProviderLogGroup", {
69
+ retention: props.logRetention ?? logs.RetentionDays.ONE_WEEK,
70
+ });
71
+ const onEventHandler = new NodejsFunction(this, "OnEventHandler", {
72
+ runtime: props.runtime,
73
+ handler: props.handler,
74
+ entry: props.entry,
75
+ timeout: props.timeout ?? cdk.Duration.minutes(2),
76
+ memorySize: props.memorySize ?? 256,
77
+ logGroup: this.lambdaLogGroup,
78
+ environment: {
79
+ COGNITO_BASE_DOMAIN: props.cognitoBaseDomain,
80
+ },
81
+ bundling: {
82
+ minify: true,
83
+ sourceMap: true,
84
+ target: "es2020",
85
+ externalModules: ["aws-sdk"],
86
+ },
87
+ });
88
+ onEventHandler.addToRolePolicy(new iam.PolicyStatement({
89
+ effect: iam.Effect.ALLOW,
90
+ actions: ["execute-api:Invoke"],
91
+ resources: ["*"], // Can be scoped down if API Gateway ARN is known
92
+ }));
93
+ const provider = new cr.Provider(this, "Provider", {
94
+ onEventHandler,
95
+ logGroup: this.providerLogGroup,
96
+ });
97
+ this.serviceToken = provider.serviceToken;
98
+ }
99
+ }
100
+ export function getCognitoDetailsForEnvironment(environment) {
101
+ const config = envConfigs[environment];
102
+ if (!config) {
103
+ throw new Error(`Unknown environment: ${environment}. Valid values are: prod, stage, test`);
104
+ }
105
+ return config;
106
+ }
107
+ // Static config for each environment
108
+ const envConfigs = {
109
+ prod: {
110
+ authUrl: "https://auth.cognito.vydev.io",
111
+ jwksUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_e6o46c1oE/.well-known/jwks.json",
112
+ openIdUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_e6o46c1oE/.well-known/openid-configuration",
113
+ issuer: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_e6o46c1oE",
114
+ userPoolId: "eu-west-1_e6o46c1oE",
115
+ },
116
+ stage: {
117
+ authUrl: "https://auth.stage.cognito.vydev.io",
118
+ jwksUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_AUYQ679zW/.well-known/jwks.json",
119
+ openIdUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_AUYQ679zW/.well-known/openid-configuration",
120
+ issuer: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_AUYQ679zW",
121
+ userPoolId: "eu-west-1_AUYQ679zW",
122
+ },
123
+ test: {
124
+ authUrl: "https://auth.test.cognito.vydev.io",
125
+ jwksUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Z53b9AbeT/.well-known/jwks.json",
126
+ openIdUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Z53b9AbeT/.well-known/openid-configuration",
127
+ issuer: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Z53b9AbeT",
128
+ userPoolId: "eu-west-1_Z53b9AbeT",
129
+ },
130
+ };
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnktY29nbml0by1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92eS1jb2duaXRvLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLHdCQUF3QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUd0QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM5QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBK0IxQyxNQUFNLE9BQU8saUJBQWtCLFNBQVEsU0FBUztJQUM5QixXQUFXLENBQWU7SUFDMUIsaUJBQWlCLENBQVE7SUFDekIsT0FBTyxDQUFnQjtJQUN2QixpQkFBaUIsQ0FBbUI7SUFDcEMsc0JBQXNCLENBQXdCO0lBRTlELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FB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TCxPQUFPLEVBQUUscUNBQXFDO1FBQzlDLE9BQU8sRUFDTCx1RkFBdUY7UUFDekYsU0FBUyxFQUNQLGtHQUFrRztRQUNwRyxNQUFNLEVBQUUsaUVBQWlFO1FBQ3pFLFVBQVUsRUFBRSxxQkFBcUI7S0FDbEM7SUFDRCxJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUUsb0NBQW9DO1FBQzdDLE9BQU8sRUFDTCx1RkFBdUY7UUFDekYsU0FBUyxFQUNQLGtHQUFrRztRQUNwRyxNQUFNLEVBQUUsaUVBQWlFO1FBQ3pFLFVBQVUsRUFBRSxxQkFBcUI7S0FDbEM7Q0FDRixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIGNyIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB0eXBlIHsgQ29nbml0b0RldGFpbHMsIFZ5RW52aXJvbm1lbnQgfSBmcm9tIFwiLi9zaGFyZWQvdHlwZXNcIlxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoX19maWxlbmFtZSlcblxuZXhwb3J0IGludGVyZmFjZSBWeUNvZ25pdG9Qcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBWeSBDb2duaXRvIGVudmlyb25tZW50IHRvIGNvbm5lY3QgdG8gKGUuZy4sIFZ5RW52aXJvbm1lbnQuUFJPRCwgVnlFbnZpcm9ubWVudC5TVEFHRSwgVnlFbnZpcm9ubWVudC5URVNUKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnRcblxuICAvKipcbiAgICogQmFzZSBkb21haW4gZm9yIENvZ25pdG8gc2VydmljZVxuICAgKiBAZGVmYXVsdCAnY29nbml0by52eWRldi5pbydcbiAgICovXG4gIHJlYWRvbmx5IGNvZ25pdG9CYXNlRG9tYWluPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nc1JldGVudGlvbj86IGxvZ3MuUmV0ZW50aW9uRGF5c1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcENsaWVudFByb3ZpZGVyIHtcbiAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnRcbiAgc2VydmljZVRva2VuOiBzdHJpbmdcbiAgYXV0aF91cmw6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlU2VydmVyUHJvdmlkZXIge1xuICBlbnZpcm9ubWVudDogVnlFbnZpcm9ubWVudFxuICBzZXJ2aWNlVG9rZW46IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgVnlDb2duaXRvUHJvdmlkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnRcbiAgcHVibGljIHJlYWRvbmx5IGNvZ25pdG9CYXNlRG9tYWluOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM6IENvZ25pdG9EZXRhaWxzXG4gIHB1YmxpYyByZWFkb25seSBhcHBDbGllbnRQcm92aWRlcjogQXBwQ2xpZW50UHJvdmlkZXJcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlU2VydmVyUHJvdmlkZXI6IFJlc291cmNlU2VydmVyUHJvdmlkZXJcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVnlDb2duaXRvUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBwcm9wcy5lbnZpcm9ubWVudFxuICAgIHRoaXMuY29nbml0b0Jhc2VEb21haW4gPSBwcm9wcy5jb2duaXRvQmFzZURvbWFpbiA/PyBcImNvZ25pdG8udnlkZXYuaW9cIlxuICAgIHRoaXMuZGV0YWlscyA9IGdldENvZ25pdG9EZXRhaWxzRm9yRW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudClcblxuICAgIGNvbnN0IGFwcENsaWVudFByb3ZpZGVyID0gbmV3IExhbWJkYVByb3ZpZGVyKHRoaXMsIFwiQXBwQ2xpZW50UHJvdmlkZXJcIiwge1xuICAgICAgY29nbml0b0Jhc2VEb21haW46IHRoaXMuY29nbml0b0Jhc2VEb21haW4sXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgZW50cnk6IHJlcXVpcmUucmVzb2x2ZShgJHtfX2Rpcm5hbWV9L2NvZ25pdG8tYXBwLWNsaWVudC9oYW5kbGVyYCksXG4gICAgICBsb2dSZXRlbnRpb246IHByb3BzLmxvZ3NSZXRlbnRpb24sXG4gICAgfSlcblxuICAgIHRoaXMuYXBwQ2xpZW50UHJvdmlkZXIgPSB7XG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgIHNlcnZpY2VUb2tlbjogYXBwQ2xpZW50UHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgYXV0aF91cmw6IHRoaXMuZGV0YWlscy5hdXRoVXJsLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlU2VydmVyUHJvdmlkZXIgPSBuZXcgTGFtYmRhUHJvdmlkZXIoXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVNlcnZlclByb3ZpZGVyXCIsXG4gICAgICB7XG4gICAgICAgIGNvZ25pdG9CYXNlRG9tYWluOiB0aGlzLmNvZ25pdG9CYXNlRG9tYWluLFxuICAgICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICAgIGVudHJ5OiByZXF1aXJlLnJlc29sdmUoYCR7X19kaXJuYW1lfS9jb2duaXRvLXJlc291cmNlLXNlcnZlci9oYW5kbGVyYCksXG4gICAgICAgIGxvZ1JldGVudGlvbjogcHJvcHMubG9nc1JldGVudGlvbixcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgdGhpcy5yZXNvdXJjZVNlcnZlclByb3ZpZGVyID0ge1xuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52aXJvbm1lbnQsXG4gICAgICBzZXJ2aWNlVG9rZW46IHJlc291cmNlU2VydmVyUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgIH1cbiAgfVxufVxuXG5pbnRlcmZhY2UgTGFtYmRhUHJvdmlkZXJQcm9wcyB7XG4gIHJlYWRvbmx5IGNvZ25pdG9CYXNlRG9tYWluOiBzdHJpbmdcbiAgcmVhZG9ubHkgcnVudGltZTogbGFtYmRhLlJ1bnRpbWVcbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nXG4gIHJlYWRvbmx5IGVudHJ5OiBzdHJpbmdcblxuICAvKipcbiAgICogQGRlZmF1bHQgY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMilcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBjZGsuRHVyYXRpb25cblxuICAvKipcbiAgICogQGRlZmF1bHQgMjU2XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyXG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzXG59XG5cbmNsYXNzIExhbWJkYVByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBsb2dHcm91cCBmb3IgdGhlIGV2ZW50IGhhbmRsZXIgbGFtYmRhXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhTG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICAvKipcbiAgICogVGhlIGxvZ0dyb3VwIGZvciB0aGUgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXJMb2dHcm91cDogbG9ncy5Mb2dHcm91cFxuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSB0b2tlbiBmb3IgdGhlIHByb3ZpZGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGFtYmRhUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhTG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkxhbWJkYUxvZ0dyb3VwXCIsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uID8/IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICB9KVxuXG4gICAgdGhpcy5wcm92aWRlckxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJQcm92aWRlckxvZ0dyb3VwXCIsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uID8/IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICB9KVxuXG4gICAgY29uc3Qgb25FdmVudEhhbmRsZXIgPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgXCJPbkV2ZW50SGFuZGxlclwiLCB7XG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lLFxuICAgICAgaGFuZGxlcjogcHJvcHMuaGFuZGxlcixcbiAgICAgIGVudHJ5OiBwcm9wcy5lbnRyeSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQgPz8gY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplID8/IDI1NixcbiAgICAgIGxvZ0dyb3VwOiB0aGlzLmxhbWJkYUxvZ0dyb3VwLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ09HTklUT19CQVNFX0RPTUFJTjogcHJvcHMuY29nbml0b0Jhc2VEb21haW4sXG4gICAgICB9LFxuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgIHRhcmdldDogXCJlczIwMjBcIixcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbXCJhd3Mtc2RrXCJdLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgb25FdmVudEhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcImV4ZWN1dGUtYXBpOkludm9rZVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLCAvLyBDYW4gYmUgc2NvcGVkIGRvd24gaWYgQVBJIEdhdGV3YXkgQVJOIGlzIGtub3duXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjci5Qcm92aWRlcih0aGlzLCBcIlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXA6IHRoaXMucHJvdmlkZXJMb2dHcm91cCxcbiAgICB9KVxuXG4gICAgdGhpcy5zZXJ2aWNlVG9rZW4gPSBwcm92aWRlci5zZXJ2aWNlVG9rZW5cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29nbml0b0RldGFpbHNGb3JFbnZpcm9ubWVudChcbiAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQsXG4pOiBDb2duaXRvRGV0YWlscyB7XG4gIGNvbnN0IGNvbmZpZyA9IGVudkNvbmZpZ3NbZW52aXJvbm1lbnRdXG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5rbm93biBlbnZpcm9ubWVudDogJHtlbnZpcm9ubWVudH0uIFZhbGlkIHZhbHVlcyBhcmU6IHByb2QsIHN0YWdlLCB0ZXN0YCxcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29uZmlnXG59XG5cbi8vIFN0YXRpYyBjb25maWcgZm9yIGVhY2ggZW52aXJvbm1lbnRcbmNvbnN0IGVudkNvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIENvZ25pdG9EZXRhaWxzPiA9IHtcbiAgcHJvZDoge1xuICAgIGF1dGhVcmw6IFwiaHR0cHM6Ly9hdXRoLmNvZ25pdG8udnlkZXYuaW9cIixcbiAgICBqd2tzVXJsOlxuICAgICAgXCJodHRwczovL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2V1LXdlc3QtMV9lNm80NmMxb0UvLndlbGwta25vd24vandrcy5qc29uXCIsXG4gICAgb3BlbklkVXJsOlxuICAgICAgXCJodHRwczovL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2V1LXdlc3QtMV9lNm80NmMxb0UvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25cIixcbiAgICBpc3N1ZXI6IFwiaHR0cHM6Ly9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ldS13ZXN0LTFfZTZvNDZjMW9FXCIsXG4gICAgdXNlclBvb2xJZDogXCJldS13ZXN0LTFfZTZvNDZjMW9FXCIsXG4gIH0sXG4gIHN0YWdlOiB7XG4gICAgYXV0aFVybDogXCJodHRwczovL2F1dGguc3RhZ2UuY29nbml0by52eWRldi5pb1wiLFxuICAgIGp3a3NVcmw6XG4gICAgICBcImh0dHBzOi8vY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vZXUtd2VzdC0xX0FVWVE2Nzl6Vy8ud2VsbC1rbm93bi9qd2tzLmpzb25cIixcbiAgICBvcGVuSWRVcmw6XG4gICAgICBcImh0dHBzOi8vY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vZXUtd2VzdC0xX0FVWVE2Nzl6Vy8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvblwiLFxuICAgIGlzc3VlcjogXCJodHRwczovL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2V1LXdlc3QtMV9BVVlRNjc5eldcIixcbiAgICB1c2VyUG9vbElkOiBcImV1LXdlc3QtMV9BVVlRNjc5eldcIixcbiAgfSxcbiAgdGVzdDoge1xuICAgIGF1dGhVcmw6IFwiaHR0cHM6Ly9hdXRoLnRlc3QuY29nbml0by52eWRldi5pb1wiLFxuICAgIGp3a3NVcmw6XG4gICAgICBcImh0dHBzOi8vY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vZXUtd2VzdC0xX1o1M2I5QWJlVC8ud2VsbC1rbm93bi9qd2tzLmpzb25cIixcbiAgICBvcGVuSWRVcmw6XG4gICAgICBcImh0dHBzOi8vY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vZXUtd2VzdC0xX1o1M2I5QWJlVC8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvblwiLFxuICAgIGlzc3VlcjogXCJodHRwczovL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2V1LXdlc3QtMV9aNTNiOUFiZVRcIixcbiAgICB1c2VyUG9vbElkOiBcImV1LXdlc3QtMV9aNTNiOUFiZVRcIixcbiAgfSxcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liflig/cdk-vy",
3
- "version": "1.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "CDK constructs for the Vy internal services, based on nsbno/terraform-provider-vy",
5
5
  "keywords": [
6
6
  "aws-cdk",
@@ -47,7 +47,7 @@
47
47
  "@types/aws-lambda": "8.10.157",
48
48
  "@types/jest": "30.0.0",
49
49
  "@types/node": "24.9.2",
50
- "aws-cdk-lib": "2.221.0",
50
+ "aws-cdk-lib": "2.221.1",
51
51
  "constructs": "10.4.2",
52
52
  "jest": "30.2.0",
53
53
  "jest-cdk-snapshot": "2.3.6",
@@ -60,7 +60,7 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@aws-crypto/sha256-js": "5.2.0",
63
- "@aws-sdk/client-sts": "3.919.0",
63
+ "@aws-sdk/client-sts": "3.920.0",
64
64
  "@smithy/protocol-http": "5.3.3",
65
65
  "@smithy/signature-v4": "5.3.3"
66
66
  },
@@ -1,49 +0,0 @@
1
- /**
2
- * CDK Construct for Cognito Info data source
3
- */
4
- import { Construct } from "constructs";
5
- import type { VyEnvironment } from "./shared/types";
6
- export interface CognitoInfoProps {
7
- /**
8
- * The environment to get Cognito info for (e.g., VyEnvironment.PROD, VyEnvironment.STAGE, VyEnvironment.TEST)
9
- */
10
- readonly environment: VyEnvironment;
11
- }
12
- /**
13
- * Holds information about the centralized Cognito User Pool
14
- *
15
- * Use this to reference the shared Cognito User Pool in your CDK applications without
16
- * hardcoding values.
17
- *
18
- * @example
19
- * ```typescript
20
- * const cognitoInfo = new CognitoInfo(this, 'CognitoInfo', {
21
- * environment: VyEnvironment.PROD
22
- * });
23
- *
24
- * // Access authentication endpoints
25
- * console.log('Auth URL:', cognitoInfo.authUrl);
26
- * console.log('JWKS URL:', cognitoInfo.jwksUrl);
27
- * console.log('OpenID URL:', cognitoInfo.openIdUrl);
28
- * console.log('Issuer:', cognitoInfo.issuer);
29
- * ```
30
- */
31
- export declare class CognitoInfo extends Construct {
32
- /**
33
- * The URL where users can authenticate
34
- */
35
- readonly authUrl: string;
36
- /**
37
- * The URL for the /.well-known/jwks.json endpoint
38
- */
39
- readonly jwksUrl: string;
40
- /**
41
- * The URL for the /.well-known/openid-configuration endpoint
42
- */
43
- readonly openIdUrl: string;
44
- /**
45
- * The URI for the issuer
46
- */
47
- readonly issuer: string;
48
- constructor(scope: Construct, id: string, props: CognitoInfoProps);
49
- }
@@ -1,76 +0,0 @@
1
- /**
2
- * CDK Construct for Cognito Info data source
3
- */
4
- import { Construct } from "constructs";
5
- /**
6
- * Holds information about the centralized Cognito User Pool
7
- *
8
- * Use this to reference the shared Cognito User Pool in your CDK applications without
9
- * hardcoding values.
10
- *
11
- * @example
12
- * ```typescript
13
- * const cognitoInfo = new CognitoInfo(this, 'CognitoInfo', {
14
- * environment: VyEnvironment.PROD
15
- * });
16
- *
17
- * // Access authentication endpoints
18
- * console.log('Auth URL:', cognitoInfo.authUrl);
19
- * console.log('JWKS URL:', cognitoInfo.jwksUrl);
20
- * console.log('OpenID URL:', cognitoInfo.openIdUrl);
21
- * console.log('Issuer:', cognitoInfo.issuer);
22
- * ```
23
- */
24
- export class CognitoInfo extends Construct {
25
- /**
26
- * The URL where users can authenticate
27
- */
28
- authUrl;
29
- /**
30
- * The URL for the /.well-known/jwks.json endpoint
31
- */
32
- jwksUrl;
33
- /**
34
- * The URL for the /.well-known/openid-configuration endpoint
35
- */
36
- openIdUrl;
37
- /**
38
- * The URI for the issuer
39
- */
40
- issuer;
41
- constructor(scope, id, props) {
42
- super(scope, id);
43
- this.authUrl = getCognitoInfo(props.environment).authUrl;
44
- this.jwksUrl = getCognitoInfo(props.environment).jwksUrl;
45
- this.openIdUrl = getCognitoInfo(props.environment).openIdUrl;
46
- this.issuer = getCognitoInfo(props.environment).issuer;
47
- }
48
- }
49
- function getCognitoInfo(environment) {
50
- const envConfigs = {
51
- prod: {
52
- authUrl: "https://auth.cognito.vydev.io",
53
- jwksUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_e6o46c1oE/.well-known/jwks.json",
54
- openIdUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_e6o46c1oE/.well-known/openid-configuration",
55
- issuer: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_e6o46c1oE",
56
- },
57
- stage: {
58
- authUrl: "https://auth.stage.cognito.vydev.io",
59
- jwksUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_AUYQ679zW/.well-known/jwks.json",
60
- openIdUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_AUYQ679zW/.well-known/openid-configuration",
61
- issuer: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_AUYQ679zW",
62
- },
63
- test: {
64
- authUrl: "https://auth.test.cognito.vydev.io",
65
- jwksUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Z53b9AbeT/.well-known/jwks.json",
66
- openIdUrl: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Z53b9AbeT/.well-known/openid-configuration",
67
- issuer: "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Z53b9AbeT",
68
- },
69
- };
70
- const config = envConfigs[environment];
71
- if (!config) {
72
- throw new Error(`Unknown environment: ${environment}. Valid values are: prod, stage, test, dev`);
73
- }
74
- return config;
75
- }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvZ25pdG8taW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFVdEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsU0FBUztJQUN4Qzs7T0FFRztJQUNhLE9BQU8sQ0FBUTtJQUUvQjs7T0FFRztJQUNhLE9BQU8sQ0FBUTtJQUUvQjs7T0FFRztJQUNhLFNBQVMsQ0FBUTtJQUVqQzs7T0FFRztJQUNhLE1BQU0sQ0FBUTtJQUU5QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtJQUN4RCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLGNBQWMsQ0FBQyxXQUFtQjtJQUN6QyxNQUFNLFVBQVUsR0FBbUM7UUFDakQsSUFBSSxFQUFFO1lBQ0osT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxPQUFPLEVBQ0wsdUZBQXVGO1lBQ3pGLFNBQVMsRUFDUCxrR0FBa0c7WUFDcEcsTUFBTSxFQUFFLGlFQUFpRTtTQUMxRTtRQUNELEtBQUssRUFBRTtZQUNMLE9BQU8sRUFBRSxxQ0FBcUM7WUFDOUMsT0FBTyxFQUNMLHVGQUF1RjtZQUN6RixTQUFTLEVBQ1Asa0dBQWtHO1lBQ3BHLE1BQU0sRUFBRSxpRUFBaUU7U0FDMUU7UUFDRCxJQUFJLEVBQUU7WUFDSixPQUFPLEVBQUUsb0NBQW9DO1lBQzdDLE9BQU8sRUFDTCx1RkFBdUY7WUFDekYsU0FBUyxFQUNQLGtHQUFrRztZQUNwRyxNQUFNLEVBQUUsaUVBQWlFO1NBQzFFO0tBQ0YsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN0QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUNiLHdCQUF3QixXQUFXLDRDQUE0QyxDQUNoRixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIENvbnN0cnVjdCBmb3IgQ29nbml0byBJbmZvIGRhdGEgc291cmNlXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHR5cGUgeyBDb2duaXRvRGV0YWlscywgVnlFbnZpcm9ubWVudCB9IGZyb20gXCIuL3NoYXJlZC90eXBlc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0luZm9Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdG8gZ2V0IENvZ25pdG8gaW5mbyBmb3IgKGUuZy4sIFZ5RW52aXJvbm1lbnQuUFJPRCwgVnlFbnZpcm9ubWVudC5TVEFHRSwgVnlFbnZpcm9ubWVudC5URVNUKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnRcbn1cblxuLyoqXG4gKiBIb2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2VudHJhbGl6ZWQgQ29nbml0byBVc2VyIFBvb2xcbiAqXG4gKiBVc2UgdGhpcyB0byByZWZlcmVuY2UgdGhlIHNoYXJlZCBDb2duaXRvIFVzZXIgUG9vbCBpbiB5b3VyIENESyBhcHBsaWNhdGlvbnMgd2l0aG91dFxuICogaGFyZGNvZGluZyB2YWx1ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvZ25pdG9JbmZvID0gbmV3IENvZ25pdG9JbmZvKHRoaXMsICdDb2duaXRvSW5mbycsIHtcbiAqICAgZW52aXJvbm1lbnQ6IFZ5RW52aXJvbm1lbnQuUFJPRFxuICogfSk7XG4gKlxuICogLy8gQWNjZXNzIGF1dGhlbnRpY2F0aW9uIGVuZHBvaW50c1xuICogY29uc29sZS5sb2coJ0F1dGggVVJMOicsIGNvZ25pdG9JbmZvLmF1dGhVcmwpO1xuICogY29uc29sZS5sb2coJ0pXS1MgVVJMOicsIGNvZ25pdG9JbmZvLmp3a3NVcmwpO1xuICogY29uc29sZS5sb2coJ09wZW5JRCBVUkw6JywgY29nbml0b0luZm8ub3BlbklkVXJsKTtcbiAqIGNvbnNvbGUubG9nKCdJc3N1ZXI6JywgY29nbml0b0luZm8uaXNzdWVyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0luZm8gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIFVSTCB3aGVyZSB1c2VycyBjYW4gYXV0aGVudGljYXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aFVybDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgZm9yIHRoZSAvLndlbGwta25vd24vandrcy5qc29uIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgandrc1VybDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgZm9yIHRoZSAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24gZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcGVuSWRVcmw6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVVJJIGZvciB0aGUgaXNzdWVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNzdWVyOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29nbml0b0luZm9Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuYXV0aFVybCA9IGdldENvZ25pdG9JbmZvKHByb3BzLmVudmlyb25tZW50KS5hdXRoVXJsXG4gICAgdGhpcy5qd2tzVXJsID0gZ2V0Q29nbml0b0luZm8ocHJvcHMuZW52aXJvbm1lbnQpLmp3a3NVcmxcbiAgICB0aGlzLm9wZW5JZFVybCA9IGdldENvZ25pdG9JbmZvKHByb3BzLmVudmlyb25tZW50KS5vcGVuSWRVcmxcbiAgICB0aGlzLmlzc3VlciA9IGdldENvZ25pdG9JbmZvKHByb3BzLmVudmlyb25tZW50KS5pc3N1ZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb2duaXRvSW5mbyhlbnZpcm9ubWVudDogc3RyaW5nKTogQ29nbml0b0RldGFpbHMge1xuICBjb25zdCBlbnZDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBDb2duaXRvRGV0YWlscz4gPSB7XG4gICAgcHJvZDoge1xuICAgICAgYXV0aFVybDogXCJodHRwczovL2F1dGguY29nbml0by52eWRldi5pb1wiLFxuICAgICAgandrc1VybDpcbiAgICAgICAgXCJodHRwczovL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2V1LXdlc3QtMV9lNm80NmMxb0UvLndlbGwta25vd24vandrcy5qc29uXCIsXG4gICAgICBvcGVuSWRVcmw6XG4gICAgICAgIFwiaHR0cHM6Ly9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ldS13ZXN0LTFfZTZvNDZjMW9FLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uXCIsXG4gICAgICBpc3N1ZXI6IFwiaHR0cHM6Ly9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ldS13ZXN0LTFfZTZvNDZjMW9FXCIsXG4gICAgfSxcbiAgICBzdGFnZToge1xuICAgICAgYXV0aFVybDogXCJodHRwczovL2F1dGguc3RhZ2UuY29nbml0by52eWRldi5pb1wiLFxuICAgICAgandrc1VybDpcbiAgICAgICAgXCJodHRwczovL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2V1LXdlc3QtMV9BVVlRNjc5elcvLndlbGwta25vd24vandrcy5qc29uXCIsXG4gICAgICBvcGVuSWRVcmw6XG4gICAgICAgIFwiaHR0cHM6Ly9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ldS13ZXN0LTFfQVVZUTY3OXpXLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uXCIsXG4gICAgICBpc3N1ZXI6IFwiaHR0cHM6Ly9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ldS13ZXN0LTFfQVVZUTY3OXpXXCIsXG4gICAgfSxcbiAgICB0ZXN0OiB7XG4gICAgICBhdXRoVXJsOiBcImh0dHBzOi8vYXV0aC50ZXN0LmNvZ25pdG8udnlkZXYuaW9cIixcbiAgICAgIGp3a3NVcmw6XG4gICAgICAgIFwiaHR0cHM6Ly9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ldS13ZXN0LTFfWjUzYjlBYmVULy53ZWxsLWtub3duL2p3a3MuanNvblwiLFxuICAgICAgb3BlbklkVXJsOlxuICAgICAgICBcImh0dHBzOi8vY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vZXUtd2VzdC0xX1o1M2I5QWJlVC8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvblwiLFxuICAgICAgaXNzdWVyOiBcImh0dHBzOi8vY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vZXUtd2VzdC0xX1o1M2I5QWJlVFwiLFxuICAgIH0sXG4gIH1cblxuICBjb25zdCBjb25maWcgPSBlbnZDb25maWdzW2Vudmlyb25tZW50XVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbmtub3duIGVudmlyb25tZW50OiAke2Vudmlyb25tZW50fS4gVmFsaWQgdmFsdWVzIGFyZTogcHJvZCwgc3RhZ2UsIHRlc3QsIGRldmAsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZ1xufVxuIl19