@aws-cdk/aws-bedrock-agentcore-alpha 2.228.0-alpha.0 → 2.229.0-alpha.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/.jsii +1385 -1080
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +15 -1
- package/README.md +119 -15
- package/lib/gateway/gateway-base.js +171 -0
- package/{agentcore → lib}/gateway/gateway.js +4 -4
- package/{agentcore → lib}/gateway/inbound-auth/authorizer.js +3 -3
- package/lib/gateway/outbound-auth/api-key.js +141 -0
- package/{agentcore → lib}/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/outbound-auth/oauth.js +76 -0
- package/lib/gateway/perms.d.ts +73 -0
- package/lib/gateway/perms.js +109 -0
- package/{agentcore → lib}/gateway/protocol.js +2 -2
- package/{agentcore → lib}/gateway/targets/schema/api-schema.js +4 -4
- package/{agentcore → lib}/gateway/targets/schema/tool-schema.js +4 -4
- package/{agentcore → lib}/gateway/targets/target-base.js +1 -1
- package/{agentcore → lib}/gateway/targets/target-configuration.js +5 -5
- package/lib/gateway/targets/target.js +444 -0
- package/lib/index.d.ts +30 -1
- package/lib/index.js +55 -6
- package/{agentcore → lib}/memory/memory-strategy.js +1 -1
- package/{agentcore → lib}/memory/memory.js +2 -2
- package/{agentcore → lib}/memory/strategies/managed-strategy.js +1 -1
- package/{agentcore → lib}/memory/strategies/self-managed-strategy.js +1 -1
- package/{agentcore → lib}/network/network-configuration.js +4 -4
- package/{agentcore → lib}/runtime/runtime-artifact.d.ts +30 -0
- package/lib/runtime/runtime-artifact.js +174 -0
- package/{agentcore → lib}/runtime/runtime-authorizer-configuration.js +1 -1
- package/{agentcore → lib}/runtime/runtime-base.js +1 -1
- package/{agentcore → lib}/runtime/runtime-endpoint-base.js +1 -1
- package/{agentcore → lib}/runtime/runtime-endpoint.js +1 -1
- package/{agentcore → lib}/runtime/runtime.d.ts +32 -1
- package/lib/runtime/runtime.js +694 -0
- package/lib/runtime/types.d.ts +50 -0
- package/lib/runtime/types.js +25 -0
- package/{agentcore → lib}/tools/browser.d.ts +37 -0
- package/lib/tools/browser.js +680 -0
- package/{agentcore → lib}/tools/code-interpreter.js +2 -2
- package/package.json +10 -10
- package/agentcore/gateway/gateway-base.js +0 -171
- package/agentcore/gateway/outbound-auth/api-key.js +0 -141
- package/agentcore/gateway/outbound-auth/oauth.js +0 -76
- package/agentcore/gateway/perms.d.ts +0 -75
- package/agentcore/gateway/perms.js +0 -112
- package/agentcore/gateway/targets/target.js +0 -444
- package/agentcore/index.d.ts +0 -30
- package/agentcore/index.js +0 -71
- package/agentcore/runtime/runtime-artifact.js +0 -90
- package/agentcore/runtime/runtime.js +0 -589
- package/agentcore/runtime/types.d.ts +0 -20
- package/agentcore/runtime/types.js +0 -25
- package/agentcore/tools/browser.js +0 -641
- /package/{agentcore → lib}/gateway/gateway-base.d.ts +0 -0
- /package/{agentcore → lib}/gateway/gateway.d.ts +0 -0
- /package/{agentcore → lib}/gateway/inbound-auth/authorizer.d.ts +0 -0
- /package/{agentcore → lib}/gateway/outbound-auth/api-key.d.ts +0 -0
- /package/{agentcore → lib}/gateway/outbound-auth/credential-provider.d.ts +0 -0
- /package/{agentcore → lib}/gateway/outbound-auth/iam-role.d.ts +0 -0
- /package/{agentcore → lib}/gateway/outbound-auth/iam-role.js +0 -0
- /package/{agentcore → lib}/gateway/outbound-auth/oauth.d.ts +0 -0
- /package/{agentcore → lib}/gateway/protocol.d.ts +0 -0
- /package/{agentcore → lib}/gateway/targets/schema/api-schema.d.ts +0 -0
- /package/{agentcore → lib}/gateway/targets/schema/base-schema.d.ts +0 -0
- /package/{agentcore → lib}/gateway/targets/schema/base-schema.js +0 -0
- /package/{agentcore → lib}/gateway/targets/schema/tool-schema.d.ts +0 -0
- /package/{agentcore → lib}/gateway/targets/target-base.d.ts +0 -0
- /package/{agentcore → lib}/gateway/targets/target-configuration.d.ts +0 -0
- /package/{agentcore → lib}/gateway/targets/target.d.ts +0 -0
- /package/{agentcore → lib}/gateway/validation-helpers.d.ts +0 -0
- /package/{agentcore → lib}/gateway/validation-helpers.js +0 -0
- /package/{agentcore → lib}/memory/memory-strategy.d.ts +0 -0
- /package/{agentcore → lib}/memory/memory.d.ts +0 -0
- /package/{agentcore → lib}/memory/perms.d.ts +0 -0
- /package/{agentcore → lib}/memory/perms.js +0 -0
- /package/{agentcore → lib}/memory/strategies/managed-strategy.d.ts +0 -0
- /package/{agentcore → lib}/memory/strategies/self-managed-strategy.d.ts +0 -0
- /package/{agentcore → lib}/memory/validation-helpers.d.ts +0 -0
- /package/{agentcore → lib}/memory/validation-helpers.js +0 -0
- /package/{agentcore → lib}/network/network-configuration.d.ts +0 -0
- /package/{agentcore → lib}/runtime/perms.d.ts +0 -0
- /package/{agentcore → lib}/runtime/perms.js +0 -0
- /package/{agentcore → lib}/runtime/runtime-authorizer-configuration.d.ts +0 -0
- /package/{agentcore → lib}/runtime/runtime-base.d.ts +0 -0
- /package/{agentcore → lib}/runtime/runtime-endpoint-base.d.ts +0 -0
- /package/{agentcore → lib}/runtime/runtime-endpoint.d.ts +0 -0
- /package/{agentcore → lib}/runtime/validation-helpers.d.ts +0 -0
- /package/{agentcore → lib}/runtime/validation-helpers.js +0 -0
- /package/{agentcore → lib}/tools/code-interpreter.d.ts +0 -0
- /package/{agentcore → lib}/tools/perms.d.ts +0 -0
- /package/{agentcore → lib}/tools/perms.js +0 -0
- /package/{agentcore → lib}/tools/validation-helpers.d.ts +0 -0
- /package/{agentcore → lib}/tools/validation-helpers.js +0 -0
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GatewayPerms = void 0;
|
|
4
|
-
var GatewayPerms;
|
|
5
|
-
(function (GatewayPerms) {
|
|
6
|
-
/******************************************************************************
|
|
7
|
-
* Data Plane Permissions
|
|
8
|
-
*****************************************************************************/
|
|
9
|
-
/**
|
|
10
|
-
* Permissions to invoke the gateway
|
|
11
|
-
* Used by agents or other services that need to call the gateway
|
|
12
|
-
*/
|
|
13
|
-
GatewayPerms.INVOKE_PERMS = ['bedrock-agentcore:InvokeGateway'];
|
|
14
|
-
/******************************************************************************
|
|
15
|
-
* Execution Role Permissions
|
|
16
|
-
*****************************************************************************/
|
|
17
|
-
/**
|
|
18
|
-
* KMS permissions for encryption
|
|
19
|
-
* Required when using KMS keys for encryption
|
|
20
|
-
*/
|
|
21
|
-
GatewayPerms.KMS_KEY_PERMS = [
|
|
22
|
-
'kms:GenerateDataKey',
|
|
23
|
-
'kms:GenerateDataKeyWithoutPlaintext',
|
|
24
|
-
'kms:GenerateDataKeyPair',
|
|
25
|
-
'kms:GenerateDataKeyPairWithoutPlaintext',
|
|
26
|
-
'kms:Decrypt',
|
|
27
|
-
'kms:Encrypt',
|
|
28
|
-
'kms:ReEncryptFrom',
|
|
29
|
-
'kms:ReEncryptTo',
|
|
30
|
-
'kms:CreateGrant',
|
|
31
|
-
'kms:DescribeKey',
|
|
32
|
-
];
|
|
33
|
-
/**
|
|
34
|
-
* Assume role permission
|
|
35
|
-
* Required for the gateway service to assume the execution role
|
|
36
|
-
*/
|
|
37
|
-
GatewayPerms.ASSUME_ROLE = ['sts:AssumeRole'];
|
|
38
|
-
/**
|
|
39
|
-
* Outbound auth - Workload identity permissions
|
|
40
|
-
* Used to obtain access tokens for workload identity
|
|
41
|
-
*/
|
|
42
|
-
GatewayPerms.GATEWAY_WORKLOAD_IDENTITY_PERMS = [
|
|
43
|
-
'bedrock-agentcore:GetWorkloadAccessToken',
|
|
44
|
-
];
|
|
45
|
-
/**
|
|
46
|
-
* Outbound auth - OAuth permissions
|
|
47
|
-
* Used to obtain OAuth tokens for target authentication
|
|
48
|
-
*/
|
|
49
|
-
GatewayPerms.GATEWAY_OAUTH_PERMS = [
|
|
50
|
-
'bedrock-agentcore:GetResourceOauth2Token',
|
|
51
|
-
];
|
|
52
|
-
/**
|
|
53
|
-
* Outbound auth - API Key permissions
|
|
54
|
-
* Used to retrieve API keys for target authentication
|
|
55
|
-
*/
|
|
56
|
-
GatewayPerms.GATEWAY_API_KEY_PERMS = [
|
|
57
|
-
'bedrock-agentcore:GetResourceApiKey',
|
|
58
|
-
];
|
|
59
|
-
/**
|
|
60
|
-
* Secrets Manager permissions
|
|
61
|
-
* Required for storing and retrieving API keys and OAuth credentials
|
|
62
|
-
*/
|
|
63
|
-
GatewayPerms.SECRETS_PERMS = [
|
|
64
|
-
'secretsmanager:GetSecretValue',
|
|
65
|
-
'secretsmanager:DescribeSecret',
|
|
66
|
-
];
|
|
67
|
-
/******************************************************************************
|
|
68
|
-
* Control Plane Permissions
|
|
69
|
-
*****************************************************************************/
|
|
70
|
-
/**
|
|
71
|
-
* Get permissions for gateway resources
|
|
72
|
-
*/
|
|
73
|
-
GatewayPerms.GET_PERMS = ['bedrock-agentcore:GetGatewayTarget', 'bedrock-agentcore:GetGateway'];
|
|
74
|
-
/**
|
|
75
|
-
* List permissions for gateway resources
|
|
76
|
-
*/
|
|
77
|
-
GatewayPerms.LIST_PERMS = [
|
|
78
|
-
'bedrock-agentcore:ListGateways',
|
|
79
|
-
'bedrock-agentcore:ListGatewayTargets',
|
|
80
|
-
];
|
|
81
|
-
/**
|
|
82
|
-
* Create permissions for gateway resources
|
|
83
|
-
*/
|
|
84
|
-
GatewayPerms.CREATE_PERMS = [
|
|
85
|
-
'bedrock-agentcore:CreateGateway',
|
|
86
|
-
'bedrock-agentcore:CreateGatewayTarget',
|
|
87
|
-
];
|
|
88
|
-
/**
|
|
89
|
-
* Update permissions for gateway resources
|
|
90
|
-
*/
|
|
91
|
-
GatewayPerms.UPDATE_PERMS = [
|
|
92
|
-
'bedrock-agentcore:UpdateGateway',
|
|
93
|
-
'bedrock-agentcore:UpdateGatewayTarget',
|
|
94
|
-
];
|
|
95
|
-
/**
|
|
96
|
-
* Delete permissions for gateway resources
|
|
97
|
-
*/
|
|
98
|
-
GatewayPerms.DELETE_PERMS = [
|
|
99
|
-
'bedrock-agentcore:DeleteGateway',
|
|
100
|
-
'bedrock-agentcore:DeleteGatewayTarget',
|
|
101
|
-
];
|
|
102
|
-
/**
|
|
103
|
-
* Combined manage permissions (create, update, delete)
|
|
104
|
-
*/
|
|
105
|
-
GatewayPerms.MANAGE_PERMS = [...new Set([...GatewayPerms.CREATE_PERMS, ...GatewayPerms.UPDATE_PERMS, ...GatewayPerms.DELETE_PERMS])];
|
|
106
|
-
/**
|
|
107
|
-
* Synchronization permissions for MCP server targets
|
|
108
|
-
* Used to refresh tool catalogs when MCP server tools change
|
|
109
|
-
*/
|
|
110
|
-
GatewayPerms.SYNC_PERMS = ['bedrock-agentcore:SynchronizeGatewayTargets'];
|
|
111
|
-
})(GatewayPerms || (exports.GatewayPerms = GatewayPerms = {}));
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFpQixZQUFZLENBMkg1QjtBQTNIRCxXQUFpQixZQUFZO0lBRTNCOzttRkFFK0U7SUFFL0U7OztPQUdHO0lBQ1UseUJBQVksR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFFaEU7O21GQUUrRTtJQUUvRTs7O09BR0c7SUFDVSwwQkFBYSxHQUFHO1FBQzNCLHFCQUFxQjtRQUNyQixxQ0FBcUM7UUFDckMseUJBQXlCO1FBQ3pCLHlDQUF5QztRQUN6QyxhQUFhO1FBQ2IsYUFBYTtRQUNiLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGlCQUFpQjtLQUNsQixDQUFDO0lBRUY7OztPQUdHO0lBQ1Usd0JBQVcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUM7OztPQUdHO0lBQ1UsNENBQStCLEdBQUc7UUFDN0MsMENBQTBDO0tBQzNDLENBQUM7SUFFRjs7O09BR0c7SUFDVSxnQ0FBbUIsR0FBRztRQUNqQywwQ0FBMEM7S0FDM0MsQ0FBQztJQUVGOzs7T0FHRztJQUNVLGtDQUFxQixHQUFHO1FBQ25DLHFDQUFxQztLQUN0QyxDQUFDO0lBRUY7OztPQUdHO0lBQ1UsMEJBQWEsR0FBRztRQUMzQiwrQkFBK0I7UUFDL0IsK0JBQStCO0tBQ2hDLENBQUM7SUFFRjs7bUZBRStFO0lBRS9FOztPQUVHO0lBQ1Usc0JBQVMsR0FBRyxDQUFDLG9DQUFvQyxFQUFFLDhCQUE4QixDQUFDLENBQUM7SUFFaEc7O09BRUc7SUFDVSx1QkFBVSxHQUFHO1FBQ3hCLGdDQUFnQztRQUNoQyxzQ0FBc0M7S0FDdkMsQ0FBQztJQUVGOztPQUVHO0lBQ1UseUJBQVksR0FBRztRQUMxQixpQ0FBaUM7UUFDakMsdUNBQXVDO0tBQ3hDLENBQUM7SUFFRjs7T0FFRztJQUNVLHlCQUFZLEdBQUc7UUFDMUIsaUNBQWlDO1FBQ2pDLHVDQUF1QztLQUN4QyxDQUFDO0lBRUY7O09BRUc7SUFDVSx5QkFBWSxHQUFHO1FBQzFCLGlDQUFpQztRQUNqQyx1Q0FBdUM7S0FDeEMsQ0FBQztJQUVGOztPQUVHO0lBQ1UseUJBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQUEsWUFBWSxFQUFFLEdBQUcsYUFBQSxZQUFZLEVBQUUsR0FBRyxhQUFBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5Rjs7O09BR0c7SUFDVSx1QkFBVSxHQUFHLENBQUMsNkNBQTZDLENBQUMsQ0FBQztBQUM1RSxDQUFDLEVBM0hnQixZQUFZLDRCQUFaLFlBQVksUUEySDVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IG5hbWVzcGFjZSBHYXRld2F5UGVybXMge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogRGF0YSBQbGFuZSBQZXJtaXNzaW9uc1xuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIHRvIGludm9rZSB0aGUgZ2F0ZXdheVxuICAgKiBVc2VkIGJ5IGFnZW50cyBvciBvdGhlciBzZXJ2aWNlcyB0aGF0IG5lZWQgdG8gY2FsbCB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IElOVk9LRV9QRVJNUyA9IFsnYmVkcm9jay1hZ2VudGNvcmU6SW52b2tlR2F0ZXdheSddO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogRXhlY3V0aW9uIFJvbGUgUGVybWlzc2lvbnNcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBLTVMgcGVybWlzc2lvbnMgZm9yIGVuY3J5cHRpb25cbiAgICogUmVxdWlyZWQgd2hlbiB1c2luZyBLTVMga2V5cyBmb3IgZW5jcnlwdGlvblxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IEtNU19LRVlfUEVSTVMgPSBbXG4gICAgJ2ttczpHZW5lcmF0ZURhdGFLZXknLFxuICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5V2l0aG91dFBsYWludGV4dCcsXG4gICAgJ2ttczpHZW5lcmF0ZURhdGFLZXlQYWlyJyxcbiAgICAna21zOkdlbmVyYXRlRGF0YUtleVBhaXJXaXRob3V0UGxhaW50ZXh0JyxcbiAgICAna21zOkRlY3J5cHQnLFxuICAgICdrbXM6RW5jcnlwdCcsXG4gICAgJ2ttczpSZUVuY3J5cHRGcm9tJyxcbiAgICAna21zOlJlRW5jcnlwdFRvJyxcbiAgICAna21zOkNyZWF0ZUdyYW50JyxcbiAgICAna21zOkRlc2NyaWJlS2V5JyxcbiAgXTtcblxuICAvKipcbiAgICogQXNzdW1lIHJvbGUgcGVybWlzc2lvblxuICAgKiBSZXF1aXJlZCBmb3IgdGhlIGdhdGV3YXkgc2VydmljZSB0byBhc3N1bWUgdGhlIGV4ZWN1dGlvbiByb2xlXG4gICAqL1xuICBleHBvcnQgY29uc3QgQVNTVU1FX1JPTEUgPSBbJ3N0czpBc3N1bWVSb2xlJ107XG5cbiAgLyoqXG4gICAqIE91dGJvdW5kIGF1dGggLSBXb3JrbG9hZCBpZGVudGl0eSBwZXJtaXNzaW9uc1xuICAgKiBVc2VkIHRvIG9idGFpbiBhY2Nlc3MgdG9rZW5zIGZvciB3b3JrbG9hZCBpZGVudGl0eVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IEdBVEVXQVlfV09SS0xPQURfSURFTlRJVFlfUEVSTVMgPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldFdvcmtsb2FkQWNjZXNzVG9rZW4nLFxuICBdO1xuXG4gIC8qKlxuICAgKiBPdXRib3VuZCBhdXRoIC0gT0F1dGggcGVybWlzc2lvbnNcbiAgICogVXNlZCB0byBvYnRhaW4gT0F1dGggdG9rZW5zIGZvciB0YXJnZXQgYXV0aGVudGljYXRpb25cbiAgICovXG4gIGV4cG9ydCBjb25zdCBHQVRFV0FZX09BVVRIX1BFUk1TID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRSZXNvdXJjZU9hdXRoMlRva2VuJyxcbiAgXTtcblxuICAvKipcbiAgICogT3V0Ym91bmQgYXV0aCAtIEFQSSBLZXkgcGVybWlzc2lvbnNcbiAgICogVXNlZCB0byByZXRyaWV2ZSBBUEkga2V5cyBmb3IgdGFyZ2V0IGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBleHBvcnQgY29uc3QgR0FURVdBWV9BUElfS0VZX1BFUk1TID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRSZXNvdXJjZUFwaUtleScsXG4gIF07XG5cbiAgLyoqXG4gICAqIFNlY3JldHMgTWFuYWdlciBwZXJtaXNzaW9uc1xuICAgKiBSZXF1aXJlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBBUEkga2V5cyBhbmQgT0F1dGggY3JlZGVudGlhbHNcbiAgICovXG4gIGV4cG9ydCBjb25zdCBTRUNSRVRTX1BFUk1TID0gW1xuICAgICdzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsXG4gICAgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0JyxcbiAgXTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqIENvbnRyb2wgUGxhbmUgUGVybWlzc2lvbnNcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBHZXQgcGVybWlzc2lvbnMgZm9yIGdhdGV3YXkgcmVzb3VyY2VzXG4gICAqL1xuICBleHBvcnQgY29uc3QgR0VUX1BFUk1TID0gWydiZWRyb2NrLWFnZW50Y29yZTpHZXRHYXRld2F5VGFyZ2V0JywgJ2JlZHJvY2stYWdlbnRjb3JlOkdldEdhdGV3YXknXTtcblxuICAvKipcbiAgICogTGlzdCBwZXJtaXNzaW9ucyBmb3IgZ2F0ZXdheSByZXNvdXJjZXNcbiAgICovXG4gIGV4cG9ydCBjb25zdCBMSVNUX1BFUk1TID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0R2F0ZXdheXMnLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0R2F0ZXdheVRhcmdldHMnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgcGVybWlzc2lvbnMgZm9yIGdhdGV3YXkgcmVzb3VyY2VzXG4gICAqL1xuICBleHBvcnQgY29uc3QgQ1JFQVRFX1BFUk1TID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVHYXRld2F5JyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlR2F0ZXdheVRhcmdldCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwZXJtaXNzaW9ucyBmb3IgZ2F0ZXdheSByZXNvdXJjZXNcbiAgICovXG4gIGV4cG9ydCBjb25zdCBVUERBVEVfUEVSTVMgPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZUdhdGV3YXknLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVHYXRld2F5VGFyZ2V0JyxcbiAgXTtcblxuICAvKipcbiAgICogRGVsZXRlIHBlcm1pc3Npb25zIGZvciBnYXRld2F5IHJlc291cmNlc1xuICAgKi9cbiAgZXhwb3J0IGNvbnN0IERFTEVURV9QRVJNUyA9IFtcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlR2F0ZXdheScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUdhdGV3YXlUYXJnZXQnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBDb21iaW5lZCBtYW5hZ2UgcGVybWlzc2lvbnMgKGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUpXG4gICAqL1xuICBleHBvcnQgY29uc3QgTUFOQUdFX1BFUk1TID0gWy4uLm5ldyBTZXQoWy4uLkNSRUFURV9QRVJNUywgLi4uVVBEQVRFX1BFUk1TLCAuLi5ERUxFVEVfUEVSTVNdKV07XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXphdGlvbiBwZXJtaXNzaW9ucyBmb3IgTUNQIHNlcnZlciB0YXJnZXRzXG4gICAqIFVzZWQgdG8gcmVmcmVzaCB0b29sIGNhdGFsb2dzIHdoZW4gTUNQIHNlcnZlciB0b29scyBjaGFuZ2VcbiAgICovXG4gIGV4cG9ydCBjb25zdCBTWU5DX1BFUk1TID0gWydiZWRyb2NrLWFnZW50Y29yZTpTeW5jaHJvbml6ZUdhdGV3YXlUYXJnZXRzJ107XG59XG4iXX0=
|
|
@@ -1,444 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
3
|
-
var useValue = arguments.length > 2;
|
|
4
|
-
for (var i = 0; i < initializers.length; i++) {
|
|
5
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
6
|
-
}
|
|
7
|
-
return useValue ? value : void 0;
|
|
8
|
-
};
|
|
9
|
-
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
10
|
-
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
11
|
-
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
12
|
-
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
13
|
-
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
14
|
-
var _, done = false;
|
|
15
|
-
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
16
|
-
var context = {};
|
|
17
|
-
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
18
|
-
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
19
|
-
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
20
|
-
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
21
|
-
if (kind === "accessor") {
|
|
22
|
-
if (result === void 0) continue;
|
|
23
|
-
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
24
|
-
if (_ = accept(result.get)) descriptor.get = _;
|
|
25
|
-
if (_ = accept(result.set)) descriptor.set = _;
|
|
26
|
-
if (_ = accept(result.init)) initializers.unshift(_);
|
|
27
|
-
}
|
|
28
|
-
else if (_ = accept(result)) {
|
|
29
|
-
if (kind === "field") initializers.unshift(_);
|
|
30
|
-
else descriptor[key] = _;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
34
|
-
done = true;
|
|
35
|
-
};
|
|
36
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
exports.GatewayTarget = void 0;
|
|
38
|
-
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
|
|
39
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
40
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
|
-
const bedrockagentcore = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
42
|
-
const iam = require("aws-cdk-lib/aws-iam");
|
|
43
|
-
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
44
|
-
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
45
|
-
const perms_1 = require("../perms");
|
|
46
|
-
const target_base_1 = require("./target-base");
|
|
47
|
-
const target_configuration_1 = require("./target-configuration");
|
|
48
|
-
const credential_provider_1 = require("../outbound-auth/credential-provider");
|
|
49
|
-
const validation_helpers_1 = require("../validation-helpers");
|
|
50
|
-
/******************************************************************************
|
|
51
|
-
* Class
|
|
52
|
-
*****************************************************************************/
|
|
53
|
-
/**
|
|
54
|
-
*
|
|
55
|
-
* Defines tools that your gateway will host. Supports multiple target types:
|
|
56
|
-
* - Lambda: Wraps a Lambda function as MCP tools
|
|
57
|
-
* - OpenAPI: Exposes an OpenAPI/REST API as MCP tools
|
|
58
|
-
* - Smithy: Exposes a Smithy-modeled API as MCP tools
|
|
59
|
-
*
|
|
60
|
-
* @resource AWS::BedrockAgentCore::GatewayTarget
|
|
61
|
-
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-building-adding-targets.html
|
|
62
|
-
*/
|
|
63
|
-
let GatewayTarget = (() => {
|
|
64
|
-
let _classDecorators = [prop_injectable_1.propertyInjectable];
|
|
65
|
-
let _classDescriptor;
|
|
66
|
-
let _classExtraInitializers = [];
|
|
67
|
-
let _classThis;
|
|
68
|
-
let _classSuper = target_base_1.GatewayTargetBase;
|
|
69
|
-
let _instanceExtraInitializers = [];
|
|
70
|
-
let _grantSync_decorators;
|
|
71
|
-
var GatewayTarget = class extends _classSuper {
|
|
72
|
-
static { _classThis = this; }
|
|
73
|
-
static {
|
|
74
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
75
|
-
_grantSync_decorators = [(0, metadata_resource_1.MethodMetadata)()];
|
|
76
|
-
__esDecorate(this, null, _grantSync_decorators, { kind: "method", name: "grantSync", static: false, private: false, access: { has: obj => "grantSync" in obj, get: obj => obj.grantSync }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
77
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
78
|
-
GatewayTarget = _classThis = _classDescriptor.value;
|
|
79
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
80
|
-
}
|
|
81
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTarget", version: "2.228.0-alpha.0" };
|
|
82
|
-
/** Uniquely identifies this class. */
|
|
83
|
-
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.GatewayTarget';
|
|
84
|
-
/**
|
|
85
|
-
* Import an existing Gateway Target using its attributes
|
|
86
|
-
* This allows you to reference a Gateway Target that was created outside of CDK
|
|
87
|
-
*
|
|
88
|
-
* @param scope The construct scope
|
|
89
|
-
* @param id The construct id
|
|
90
|
-
* @param attrs The attributes of the existing Gateway Target
|
|
91
|
-
* @returns An IGatewayTarget instance representing the imported target
|
|
92
|
-
*/
|
|
93
|
-
static fromGatewayTargetAttributes(scope, id, attrs) {
|
|
94
|
-
try {
|
|
95
|
-
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetAttributes(attrs);
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
99
|
-
Error.captureStackTrace(error, this.fromGatewayTargetAttributes);
|
|
100
|
-
}
|
|
101
|
-
throw error;
|
|
102
|
-
}
|
|
103
|
-
class ImportedGatewayTarget extends target_base_1.GatewayTargetBase {
|
|
104
|
-
targetArn = attrs.targetArn;
|
|
105
|
-
targetId = attrs.targetId;
|
|
106
|
-
name = attrs.gatewayTargetName;
|
|
107
|
-
description = attrs.status;
|
|
108
|
-
gateway = attrs.gateway;
|
|
109
|
-
credentialProviderConfigurations = [];
|
|
110
|
-
targetProtocolType = target_base_1.GatewayTargetProtocolType.MCP;
|
|
111
|
-
status = attrs.status;
|
|
112
|
-
statusReasons = undefined;
|
|
113
|
-
createdAt = attrs.createdAt;
|
|
114
|
-
updatedAt = attrs.updatedAt;
|
|
115
|
-
constructor(s, i) {
|
|
116
|
-
super(s, i);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return new ImportedGatewayTarget(scope, id);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Create a Lambda-based MCP target
|
|
123
|
-
* Convenience method for creating a target that wraps a Lambda function
|
|
124
|
-
*
|
|
125
|
-
* @param scope The construct scope
|
|
126
|
-
* @param id The construct id
|
|
127
|
-
* @param props The properties for the Lambda target
|
|
128
|
-
* @returns A new GatewayTarget instance
|
|
129
|
-
*/
|
|
130
|
-
static forLambda(scope, id, props) {
|
|
131
|
-
try {
|
|
132
|
-
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetLambdaProps(props);
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
136
|
-
Error.captureStackTrace(error, this.forLambda);
|
|
137
|
-
}
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
return new GatewayTarget(scope, id, {
|
|
141
|
-
gateway: props.gateway,
|
|
142
|
-
gatewayTargetName: props.gatewayTargetName,
|
|
143
|
-
description: props.description,
|
|
144
|
-
credentialProviderConfigurations: props.credentialProviderConfigurations,
|
|
145
|
-
targetConfiguration: target_configuration_1.LambdaTargetConfiguration.create(props.lambdaFunction, props.toolSchema),
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Create an OpenAPI-based MCP target
|
|
150
|
-
* Convenience method for creating a target that exposes an OpenAPI/REST API
|
|
151
|
-
*
|
|
152
|
-
* @param scope The construct scope
|
|
153
|
-
* @param id The construct id
|
|
154
|
-
* @param props The properties for the OpenAPI target
|
|
155
|
-
* @returns A new GatewayTarget instance
|
|
156
|
-
*
|
|
157
|
-
*/
|
|
158
|
-
static forOpenApi(scope, id, props) {
|
|
159
|
-
try {
|
|
160
|
-
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetOpenApiProps(props);
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
164
|
-
Error.captureStackTrace(error, this.forOpenApi);
|
|
165
|
-
}
|
|
166
|
-
throw error;
|
|
167
|
-
}
|
|
168
|
-
return new GatewayTarget(scope, id, {
|
|
169
|
-
gateway: props.gateway,
|
|
170
|
-
gatewayTargetName: props.gatewayTargetName,
|
|
171
|
-
description: props.description,
|
|
172
|
-
credentialProviderConfigurations: props.credentialProviderConfigurations,
|
|
173
|
-
targetConfiguration: target_configuration_1.OpenApiTargetConfiguration.create(props.apiSchema, props.validateOpenApiSchema),
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Create a Smithy-based MCP target
|
|
178
|
-
* Convenience method for creating a target that exposes a Smithy-modeled API
|
|
179
|
-
*
|
|
180
|
-
* @param scope The construct scope
|
|
181
|
-
* @param id The construct id
|
|
182
|
-
* @param props The properties for the Smithy target
|
|
183
|
-
* @returns A new GatewayTarget instance
|
|
184
|
-
*/
|
|
185
|
-
static forSmithy(scope, id, props) {
|
|
186
|
-
try {
|
|
187
|
-
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetSmithyProps(props);
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
191
|
-
Error.captureStackTrace(error, this.forSmithy);
|
|
192
|
-
}
|
|
193
|
-
throw error;
|
|
194
|
-
}
|
|
195
|
-
return new GatewayTarget(scope, id, {
|
|
196
|
-
gateway: props.gateway,
|
|
197
|
-
gatewayTargetName: props.gatewayTargetName,
|
|
198
|
-
description: props.description,
|
|
199
|
-
credentialProviderConfigurations: props.credentialProviderConfigurations,
|
|
200
|
-
targetConfiguration: target_configuration_1.SmithyTargetConfiguration.create(props.smithyModel),
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Create an MCP Server-based target
|
|
205
|
-
* Convenience method for creating a target that connects to an external MCP server
|
|
206
|
-
*
|
|
207
|
-
* @param scope The construct scope
|
|
208
|
-
* @param id The construct id
|
|
209
|
-
* @param props The properties for the MCP server target
|
|
210
|
-
* @returns A new GatewayTarget instance
|
|
211
|
-
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-MCPservers.html
|
|
212
|
-
*/
|
|
213
|
-
static forMcpServer(scope, id, props) {
|
|
214
|
-
try {
|
|
215
|
-
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetMcpServerProps(props);
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
219
|
-
Error.captureStackTrace(error, this.forMcpServer);
|
|
220
|
-
}
|
|
221
|
-
throw error;
|
|
222
|
-
}
|
|
223
|
-
return new GatewayTarget(scope, id, {
|
|
224
|
-
gateway: props.gateway,
|
|
225
|
-
gatewayTargetName: props.gatewayTargetName,
|
|
226
|
-
description: props.description,
|
|
227
|
-
credentialProviderConfigurations: props.credentialProviderConfigurations,
|
|
228
|
-
targetConfiguration: target_configuration_1.McpServerTargetConfiguration.create(props.endpoint),
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* The ARN of the gateway target
|
|
233
|
-
* @attribute
|
|
234
|
-
*/
|
|
235
|
-
targetArn = __runInitializers(this, _instanceExtraInitializers);
|
|
236
|
-
/**
|
|
237
|
-
* The unique identifier of the gateway target
|
|
238
|
-
* @attribute
|
|
239
|
-
*/
|
|
240
|
-
targetId;
|
|
241
|
-
/**
|
|
242
|
-
* The name of the gateway target
|
|
243
|
-
*/
|
|
244
|
-
name;
|
|
245
|
-
/**
|
|
246
|
-
* Optional description for the gateway target
|
|
247
|
-
*/
|
|
248
|
-
description;
|
|
249
|
-
/**
|
|
250
|
-
* The gateway this target belongs to
|
|
251
|
-
*/
|
|
252
|
-
gateway;
|
|
253
|
-
/**
|
|
254
|
-
* The credential providers for this target
|
|
255
|
-
*/
|
|
256
|
-
credentialProviderConfigurations;
|
|
257
|
-
/**
|
|
258
|
-
* The protocol type (always MCP for now)
|
|
259
|
-
*/
|
|
260
|
-
targetProtocolType = target_base_1.GatewayTargetProtocolType.MCP;
|
|
261
|
-
/**
|
|
262
|
-
* The specific MCP target type (Lambda, OpenAPI, Smithy, or MCP Server)
|
|
263
|
-
*/
|
|
264
|
-
targetType;
|
|
265
|
-
/**
|
|
266
|
-
* The status of the gateway target
|
|
267
|
-
* @attribute
|
|
268
|
-
*/
|
|
269
|
-
status;
|
|
270
|
-
/**
|
|
271
|
-
* The status reasons for the gateway target
|
|
272
|
-
* @attribute
|
|
273
|
-
*/
|
|
274
|
-
statusReasons;
|
|
275
|
-
/**
|
|
276
|
-
* Timestamp when the gateway target was created
|
|
277
|
-
* @attribute
|
|
278
|
-
*/
|
|
279
|
-
createdAt;
|
|
280
|
-
/**
|
|
281
|
-
* Timestamp when the gateway target was last updated
|
|
282
|
-
* @attribute
|
|
283
|
-
*/
|
|
284
|
-
updatedAt;
|
|
285
|
-
targetResource;
|
|
286
|
-
targetConfiguration;
|
|
287
|
-
constructor(scope, id, props) {
|
|
288
|
-
super(scope, id);
|
|
289
|
-
try {
|
|
290
|
-
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetProps(props);
|
|
291
|
-
}
|
|
292
|
-
catch (error) {
|
|
293
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
294
|
-
Error.captureStackTrace(error, GatewayTarget);
|
|
295
|
-
}
|
|
296
|
-
throw error;
|
|
297
|
-
}
|
|
298
|
-
// Enhanced CDK Analytics Telemetry
|
|
299
|
-
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
300
|
-
// Validate and assign properties
|
|
301
|
-
this.name = props.gatewayTargetName;
|
|
302
|
-
this.validateGatewayTargetName(this.name);
|
|
303
|
-
this.description = props.description;
|
|
304
|
-
if (this.description) {
|
|
305
|
-
this.validateDescription(this.description);
|
|
306
|
-
}
|
|
307
|
-
this.gateway = props.gateway;
|
|
308
|
-
this.targetConfiguration = props.targetConfiguration;
|
|
309
|
-
this.targetType = this.targetConfiguration.targetType;
|
|
310
|
-
// Get target-specific credential configurations
|
|
311
|
-
this.credentialProviderConfigurations = this._getTargetSpecificCredentials(props.credentialProviderConfigurations);
|
|
312
|
-
// Bind the target configuration
|
|
313
|
-
// This sets up permissions and dependencies
|
|
314
|
-
this.targetConfiguration.bind(this, this.gateway);
|
|
315
|
-
// Create the L1 construct
|
|
316
|
-
const cfnProps = {
|
|
317
|
-
gatewayIdentifier: this.gateway.gatewayId,
|
|
318
|
-
name: this.name,
|
|
319
|
-
description: this.description,
|
|
320
|
-
credentialProviderConfigurations: aws_cdk_lib_1.Lazy.any({
|
|
321
|
-
produce: () => this._renderCredentialProviderConfigurations(),
|
|
322
|
-
}),
|
|
323
|
-
targetConfiguration: aws_cdk_lib_1.Lazy.any({
|
|
324
|
-
produce: () => this.targetConfiguration._render(),
|
|
325
|
-
}),
|
|
326
|
-
};
|
|
327
|
-
this.targetResource = new bedrockagentcore.CfnGatewayTarget(this, 'Resource', cfnProps);
|
|
328
|
-
if (this.credentialProviderConfigurations) {
|
|
329
|
-
for (const provider of this.credentialProviderConfigurations) {
|
|
330
|
-
provider
|
|
331
|
-
.grantNeededPermissionsToRole(this.gateway.role)
|
|
332
|
-
?.applyBefore(this.targetResource);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
this.targetId = this.targetResource.attrTargetId;
|
|
336
|
-
this.targetArn = this.targetResource.ref;
|
|
337
|
-
this.status = this.targetResource.attrStatus;
|
|
338
|
-
this.statusReasons = this.targetResource.attrStatusReasons;
|
|
339
|
-
this.createdAt = this.targetResource.attrCreatedAt;
|
|
340
|
-
this.updatedAt = this.targetResource.attrUpdatedAt;
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Grants permission to synchronize this gateway's targets
|
|
344
|
-
*
|
|
345
|
-
* This method grants the `SynchronizeGatewayTargets` permission, which is primarily
|
|
346
|
-
* needed for MCP Server targets when you need to refresh the tool catalog after the
|
|
347
|
-
* MCP server's tools have changed.
|
|
348
|
-
*/
|
|
349
|
-
grantSync(grantee) {
|
|
350
|
-
return iam.Grant.addToPrincipal({
|
|
351
|
-
grantee: grantee,
|
|
352
|
-
actions: perms_1.GatewayPerms.SYNC_PERMS,
|
|
353
|
-
resourceArns: [this.gateway.gatewayArn],
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Determines the credential provider configurations based on target type
|
|
358
|
-
*
|
|
359
|
-
* - Lambda & Smithy: Default to IAM role if not provided
|
|
360
|
-
* - MCP Server: Return undefined if not provided (service handles NoAuth)
|
|
361
|
-
* - OpenAPI: Return as-is (must be explicitly provided)
|
|
362
|
-
*
|
|
363
|
-
* @param providedCredentials The credentials from props
|
|
364
|
-
* @returns The credential configurations to use, or undefined
|
|
365
|
-
* @internal
|
|
366
|
-
*/
|
|
367
|
-
_getTargetSpecificCredentials(providedCredentials) {
|
|
368
|
-
if (providedCredentials && providedCredentials.length > 0) {
|
|
369
|
-
return providedCredentials;
|
|
370
|
-
}
|
|
371
|
-
// Apply target-specific defaults when not provided
|
|
372
|
-
switch (this.targetType) {
|
|
373
|
-
case target_base_1.McpTargetType.LAMBDA:
|
|
374
|
-
case target_base_1.McpTargetType.SMITHY_MODEL:
|
|
375
|
-
return [credential_provider_1.GatewayCredentialProvider.fromIamRole()];
|
|
376
|
-
case target_base_1.McpTargetType.MCP_SERVER:
|
|
377
|
-
// Return empty array, - service handles NoAuth automatically
|
|
378
|
-
return undefined;
|
|
379
|
-
case target_base_1.McpTargetType.OPENAPI_SCHEMA:
|
|
380
|
-
// No default - must be explicitly provided, service handles automatically
|
|
381
|
-
return undefined;
|
|
382
|
-
default:
|
|
383
|
-
return [credential_provider_1.GatewayCredentialProvider.fromIamRole()];
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
/**
|
|
387
|
-
* Renders credential provider configurations for CloudFormation
|
|
388
|
-
* @internal
|
|
389
|
-
*/
|
|
390
|
-
_renderCredentialProviderConfigurations() {
|
|
391
|
-
return this.credentialProviderConfigurations?.map(provider => provider._render());
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* Validates the gateway target name format
|
|
395
|
-
* Pattern: ^([0-9a-zA-Z][-]?){1,100}$
|
|
396
|
-
* Max length: 100 characters
|
|
397
|
-
* @param gatewayTargetName The gateway target name to validate
|
|
398
|
-
* @throws Error if the name is invalid
|
|
399
|
-
* @internal
|
|
400
|
-
*/
|
|
401
|
-
validateGatewayTargetName(gatewayTargetName) {
|
|
402
|
-
if (aws_cdk_lib_1.Token.isUnresolved(gatewayTargetName)) {
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
const lengthErrors = (0, validation_helpers_1.validateStringField)({
|
|
406
|
-
value: gatewayTargetName,
|
|
407
|
-
fieldName: 'Gateway target name',
|
|
408
|
-
minLength: 1,
|
|
409
|
-
maxLength: 100,
|
|
410
|
-
});
|
|
411
|
-
const patternErrors = (0, validation_helpers_1.validateFieldPattern)(gatewayTargetName, 'Gateway target name', /^([0-9a-zA-Z][-]?){1,100}$/, 'Gateway target name must contain only alphanumeric characters and hyphens, with hyphens only between characters');
|
|
412
|
-
const allErrors = [...lengthErrors, ...patternErrors];
|
|
413
|
-
if (allErrors.length > 0) {
|
|
414
|
-
throw new validation_helpers_1.ValidationError(allErrors.join('\n'));
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
/**
|
|
418
|
-
* Validates the description format
|
|
419
|
-
* Must be between 1 and 200 characters
|
|
420
|
-
* @throws Error if validation fails
|
|
421
|
-
* @internal
|
|
422
|
-
*/
|
|
423
|
-
validateDescription(description) {
|
|
424
|
-
if (aws_cdk_lib_1.Token.isUnresolved(description)) {
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
427
|
-
const errors = (0, validation_helpers_1.validateStringField)({
|
|
428
|
-
value: description,
|
|
429
|
-
fieldName: 'Gateway target description',
|
|
430
|
-
minLength: 1,
|
|
431
|
-
maxLength: 200,
|
|
432
|
-
});
|
|
433
|
-
if (errors.length > 0) {
|
|
434
|
-
throw new validation_helpers_1.ValidationError(errors.join('\n'));
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
static {
|
|
438
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
439
|
-
}
|
|
440
|
-
};
|
|
441
|
-
return GatewayTarget = _classThis;
|
|
442
|
-
})();
|
|
443
|
-
exports.GatewayTarget = GatewayTarget;
|
|
444
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEwQztBQUMxQyxxRUFBcUU7QUFDckUsMkNBQTJDO0FBRTNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFHMUUsb0NBQXdDO0FBR3hDLCtDQUErSDtBQUMvSCxpRUFBOEs7QUFDOUssOEVBQTRHO0FBQzVHLDhEQUFtRztBQXNNbkc7OytFQUUrRTtBQUUvRTs7Ozs7Ozs7O0dBU0c7SUFFVSxhQUFhOzRCQUR6QixvQ0FBa0I7Ozs7c0JBQ2dCLCtCQUFpQjs7OzZCQUF6QixTQUFRLFdBQWlCOzs7O3FDQWlSakQsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLDhLQUFPLFNBQVMsNkRBTWY7WUF4UkgsNktBNlhDOzs7OztRQTVYQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLG9EQUFvRCxDQUFDO1FBQzVHOzs7Ozs7OztXQVFHO1FBQ0ksTUFBTSxDQUFDLDJCQUEyQixDQUN2QyxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBOEI7Ozs7Ozs7Ozs7WUFFOUIsTUFBTSxxQkFBc0IsU0FBUSwrQkFBaUI7Z0JBQ25DLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUM1QixRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDMUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUN4QixnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7Z0JBQ3RDLGtCQUFrQixHQUFHLHVDQUF5QixDQUFDLEdBQUcsQ0FBQztnQkFDbkQsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ3RCLGFBQWEsR0FB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RSw0QkFBNEI7Z0JBQ3ZDLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxHQUFHO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksb0NBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztTQUNGOztZQTVYVSx1REFBYTs7Ozs7QUFBYixzQ0FBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhenksIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElHYXRld2F5IH0gZnJvbSAnLi4vZ2F0ZXdheS1iYXNlJztcbmltcG9ydCB7IEdhdGV3YXlQZXJtcyB9IGZyb20gJy4uL3Blcm1zJztcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL2FwaS1zY2hlbWEnO1xuaW1wb3J0IHsgVG9vbFNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3Rvb2wtc2NoZW1hJztcbmltcG9ydCB7IEdhdGV3YXlUYXJnZXRCYXNlLCBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlLCBJR2F0ZXdheVRhcmdldCwgSU1jcEdhdGV3YXlUYXJnZXQsIE1jcFRhcmdldFR5cGUgfSBmcm9tICcuL3RhcmdldC1iYXNlJztcbmltcG9ydCB7IElUYXJnZXRDb25maWd1cmF0aW9uLCBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uLCBNY3BTZXJ2ZXJUYXJnZXRDb25maWd1cmF0aW9uLCBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbiwgU21pdGh5VGFyZ2V0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vdGFyZ2V0LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlciwgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB9IGZyb20gJy4uL291dGJvdW5kLWF1dGgvY3JlZGVudGlhbC1wcm92aWRlcic7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIGFsbCBHYXRld2F5IFRhcmdldCB0eXBlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlUYXJnZXRDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBnYXRld2F5XG4gICAqIFBhdHRlcm46IF4oWzAtOWEtekEtWl1bLV0/KXsxLDEwMH0kXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gaGF2ZSB1cCB0byAyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEdhdGV3YXkgVGFyZ2V0IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldFByb3BzIGV4dGVuZHMgR2F0ZXdheVRhcmdldENvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKExhbWJkYSwgT3BlbkFQSSwgb3IgU21pdGh5KVxuICAgKiBVc2Ugb25lIG9mIHRoZSBjb25maWd1cmF0aW9uIGhlbHBlciBjbGFzc2VzOlxuICAgKiAtIExhbWJkYVRhcmdldENvbmZpZ3VyYXRpb24uY3JlYXRlKClcbiAgICogLSBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbi5jcmVhdGUoKVxuICAgKiAtIFNtaXRoeVRhcmdldENvbmZpZ3VyYXRpb24uY3JlYXRlKClcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldENvbmZpZ3VyYXRpb246IElUYXJnZXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBbR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tSWFtUm9sZSgpXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBMYW1iZGEtYmFzZWQgR2F0ZXdheSBUYXJnZXRcbiAqIENvbnZlbmllbmNlIGludGVyZmFjZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldExhbWJkYVByb3BzIGV4dGVuZHMgR2F0ZXdheVRhcmdldENvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCBzY2hlbWEgZGVmaW5pbmcgdGhlIGF2YWlsYWJsZSB0b29sc1xuICAgKi9cbiAgcmVhZG9ubHkgdG9vbFNjaGVtYTogVG9vbFNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIExhbWJkYSB0YXJnZXRzIG9ubHkgc3VwcG9ydCBJQU0gcm9sZSBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21JYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBPcGVuQVBJLWJhc2VkIEdhdGV3YXkgVGFyZ2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldE9wZW5BcGlQcm9wcyBleHRlbmRzIEdhdGV3YXlUYXJnZXRDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSB0aGlzIHRhcmdldCBiZWxvbmdzIHRvXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5OiBJR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc2NoZW1hIGRlZmluaW5nIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IGFwaVNjaGVtYTogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBPcGVuQVBJIHNjaGVtYSAob25seSBhcHBsaWVzIHRvIGlubGluZSBzY2hlbWFzKVxuICAgKiBOb3RlOiBWYWxpZGF0aW9uIGlzIG9ubHkgcGVyZm9ybWVkIGZvciBpbmxpbmUgc2NoZW1hcyBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICogUzMgYW5kIGFzc2V0LWJhc2VkIHNjaGVtYXMgY2Fubm90IGJlIHZhbGlkYXRlZCBhdCBzeW50aGVzaXMgdGltZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGVPcGVuQXBpU2NoZW1hPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIE9wZW5BUEkgdGFyZ2V0cyBzdXBwb3J0IEFQSSBrZXkgYW5kIE9BdXRoIGF1dGhlbnRpY2F0aW9uIChub3QgSUFNKVxuICAgKiBAZGVmYXVsdDogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byBJQU0gcm9sZSB3aGljaCB3aWxsIGZhaWwgYXQgcnVudGltZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBTbWl0aHktYmFzZWQgR2F0ZXdheSBUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5VGFyZ2V0U21pdGh5UHJvcHMgZXh0ZW5kcyBHYXRld2F5VGFyZ2V0Q29tbW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgdGhpcyB0YXJnZXQgYmVsb25ncyB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheTogSUdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIFRoZSBTbWl0aHkgbW9kZWwgZGVmaW5pbmcgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgc21pdGh5TW9kZWw6IEFwaVNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIFNtaXRoeSB0YXJnZXRzIG9ubHkgc3VwcG9ydCBJQU0gcm9sZSBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21JYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBNQ1AgU2VydmVyLWJhc2VkIEdhdGV3YXkgVGFyZ2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldE1jcFNlcnZlclByb3BzIGV4dGVuZHMgR2F0ZXdheVRhcmdldENvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUFMgZW5kcG9pbnQgVVJMIG9mIHRoZSBNQ1Agc2VydmVyXG4gICAqXG4gICAqIFRoZSBlbmRwb2ludCBtdXN0OlxuICAgKiAtIFVzZSBIVFRQUyBwcm90b2NvbFxuICAgKiAtIEJlIHByb3Blcmx5IFVSTC1lbmNvZGVkXG4gICAqIC0gUG9pbnQgdG8gYW4gTUNQIHNlcnZlciB0aGF0IGltcGxlbWVudHMgdG9vbCBjYXBhYmlsaXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgR2F0ZXdheSBUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5VGFyZ2V0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgdGhpcyB0YXJnZXQgYmVsb25ncyB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheTogSUdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YXR1cyBvZiB0aGUgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNyZWF0aW9uIHRpbWVzdGFtcFxuICAgKiBAZGVmYXVsdCAtIE5vIGNyZWF0aW9uIHRpbWVzdGFtcFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBsYXN0IHVwZGF0ZSB0aW1lc3RhbXBcbiAgICogQGRlZmF1bHQgLSBObyB1cGRhdGUgdGltZXN0YW1wXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqXG4gKiBEZWZpbmVzIHRvb2xzIHRoYXQgeW91ciBnYXRld2F5IHdpbGwgaG9zdC4gU3VwcG9ydHMgbXVsdGlwbGUgdGFyZ2V0IHR5cGVzOlxuICogLSBMYW1iZGE6IFdyYXBzIGEgTGFtYmRhIGZ1bmN0aW9uIGFzIE1DUCB0b29sc1xuICogLSBPcGVuQVBJOiBFeHBvc2VzIGFuIE9wZW5BUEkvUkVTVCBBUEkgYXMgTUNQIHRvb2xzXG4gKiAtIFNtaXRoeTogRXhwb3NlcyBhIFNtaXRoeS1tb2RlbGVkIEFQSSBhcyBNQ1AgdG9vbHNcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5VGFyZ2V0XG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS1idWlsZGluZy1hZGRpbmctdGFyZ2V0cy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBHYXRld2F5VGFyZ2V0IGV4dGVuZHMgR2F0ZXdheVRhcmdldEJhc2UgaW1wbGVtZW50cyBJTWNwR2F0ZXdheVRhcmdldCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkdhdGV3YXlUYXJnZXQnO1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEdhdGV3YXkgVGFyZ2V0IHVzaW5nIGl0cyBhdHRyaWJ1dGVzXG4gICAqIFRoaXMgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYSBHYXRld2F5IFRhcmdldCB0aGF0IHdhcyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgR2F0ZXdheSBUYXJnZXRcbiAgICogQHJldHVybnMgQW4gSUdhdGV3YXlUYXJnZXQgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBpbXBvcnRlZCB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUdhdGV3YXlUYXJnZXRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogR2F0ZXdheVRhcmdldEF0dHJpYnV0ZXMsXG4gICk6IElHYXRld2F5VGFyZ2V0IHtcbiAgICBjbGFzcyBJbXBvcnRlZEdhdGV3YXlUYXJnZXQgZXh0ZW5kcyBHYXRld2F5VGFyZ2V0QmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0QXJuID0gYXR0cnMudGFyZ2V0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhcmdldElkID0gYXR0cnMudGFyZ2V0SWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9IGF0dHJzLmdhdGV3YXlUYXJnZXROYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gYXR0cnMuc3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXkgPSBhdHRycy5nYXRld2F5O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0UHJvdG9jb2xUeXBlID0gR2F0ZXdheVRhcmdldFByb3RvY29sVHlwZS5NQ1A7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzID0gYXR0cnMuc3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c1JlYXNvbnMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IGF0dHJzLnVwZGF0ZWRBdDtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRHYXRld2F5VGFyZ2V0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTGFtYmRhLWJhc2VkIE1DUCB0YXJnZXRcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhIHRhcmdldCB0aGF0IHdyYXBzIGEgTGFtYmRhIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIExhbWJkYSB0YXJnZXRcbiAgICogQHJldHVybnMgQSBuZXcgR2F0ZXdheVRhcmdldCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JMYW1iZGEoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBHYXRld2F5VGFyZ2V0TGFtYmRhUHJvcHMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIHJldHVybiBuZXcgR2F0ZXdheVRhcmdldChzY29wZSwgaWQsIHtcbiAgICAgIGdhdGV3YXk6IHByb3BzLmdhdGV3YXksXG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMsXG4gICAgICB0YXJnZXRDb25maWd1cmF0aW9uOiBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uLmNyZWF0ZShcbiAgICAgICAgcHJvcHMubGFtYmRhRnVuY3Rpb24sXG4gICAgICAgIHByb3BzLnRvb2xTY2hlbWEsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBPcGVuQVBJLWJhc2VkIE1DUCB0YXJnZXRcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhIHRhcmdldCB0aGF0IGV4cG9zZXMgYW4gT3BlbkFQSS9SRVNUIEFQSVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBPcGVuQVBJIHRhcmdldFxuICAgKiBAcmV0dXJucyBBIG5ldyBHYXRld2F5VGFyZ2V0IGluc3RhbmNlXG4gICAqXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvck9wZW5BcGkoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBHYXRld2F5VGFyZ2V0T3BlbkFwaVByb3BzLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlUYXJnZXQoc2NvcGUsIGlkLCB7XG4gICAgICBnYXRld2F5OiBwcm9wcy5nYXRld2F5LFxuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogT3BlbkFwaVRhcmdldENvbmZpZ3VyYXRpb24uY3JlYXRlKHByb3BzLmFwaVNjaGVtYSwgcHJvcHMudmFsaWRhdGVPcGVuQXBpU2NoZW1hKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBTbWl0aHktYmFzZWQgTUNQIHRhcmdldFxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdGFyZ2V0IHRoYXQgZXhwb3NlcyBhIFNtaXRoeS1tb2RlbGVkIEFQSVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBTbWl0aHkgdGFyZ2V0XG4gICAqIEByZXR1cm5zIEEgbmV3IEdhdGV3YXlUYXJnZXQgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yU21pdGh5KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2F0ZXdheVRhcmdldFNtaXRoeVByb3BzLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlUYXJnZXQoc2NvcGUsIGlkLCB7XG4gICAgICBnYXRld2F5OiBwcm9wcy5nYXRld2F5LFxuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogU21pdGh5VGFyZ2V0Q29uZmlndXJhdGlvbi5jcmVhdGUocHJvcHMuc21pdGh5TW9kZWwpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNQ1AgU2VydmVyLWJhc2VkIHRhcmdldFxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdGFyZ2V0IHRoYXQgY29ubmVjdHMgdG8gYW4gZXh0ZXJuYWwgTUNQIHNlcnZlclxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBNQ1Agc2VydmVyIHRhcmdldFxuICAgKiBAcmV0dXJucyBBIG5ldyBHYXRld2F5VGFyZ2V0IGluc3RhbmNlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXRhcmdldC1NQ1BzZXJ2ZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yTWNwU2VydmVyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2F0ZXdheVRhcmdldE1jcFNlcnZlclByb3BzLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlUYXJnZXQoc2NvcGUsIGlkLCB7XG4gICAgICBnYXRld2F5OiBwcm9wcy5nYXRld2F5LFxuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogTWNwU2VydmVyVGFyZ2V0Q29uZmlndXJhdGlvbi5jcmVhdGUocHJvcHMuZW5kcG9pbnQpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRBcm47XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldElkO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgY3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIHRoaXMgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHR5cGUgKGFsd2F5cyBNQ1AgZm9yIG5vdylcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRQcm90b2NvbFR5cGUgPSBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlLk1DUDtcblxuICAvKipcbiAgICogVGhlIHNwZWNpZmljIE1DUCB0YXJnZXQgdHlwZSAoTGFtYmRhLCBPcGVuQVBJLCBTbWl0aHksIG9yIE1DUCBTZXJ2ZXIpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0VHlwZTogTWNwVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz87XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgcmVhc29ucyBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNSZWFzb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHRhcmdldCB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0PztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgdGFyZ2V0IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD87XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5VGFyZ2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldENvbmZpZ3VyYXRpb246IElUYXJnZXRDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5VGFyZ2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gVmFsaWRhdGUgYW5kIGFzc2lnbiBwcm9wZXJ0aWVzXG4gICAgdGhpcy5uYW1lID0gcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZUdhdGV3YXlUYXJnZXROYW1lKHRoaXMubmFtZSk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbih0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmdhdGV3YXkgPSBwcm9wcy5nYXRld2F5O1xuICAgIHRoaXMudGFyZ2V0Q29uZmlndXJhdGlvbiA9IHByb3BzLnRhcmdldENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy50YXJnZXRUeXBlID0gdGhpcy50YXJnZXRDb25maWd1cmF0aW9uLnRhcmdldFR5cGU7XG5cbiAgICAvLyBHZXQgdGFyZ2V0LXNwZWNpZmljIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbnNcbiAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zID0gdGhpcy5fZ2V0VGFyZ2V0U3BlY2lmaWNDcmVkZW50aWFscyhcbiAgICAgIHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICk7XG5cbiAgICAvLyBCaW5kIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvblxuICAgIC8vIFRoaXMgc2V0cyB1cCBwZXJtaXNzaW9ucyBhbmQgZGVwZW5kZW5jaWVzXG4gICAgdGhpcy50YXJnZXRDb25maWd1cmF0aW9uLmJpbmQodGhpcywgdGhpcy5nYXRld2F5KTtcblxuICAgIC8vIENyZWF0ZSB0aGUgTDEgY29uc3RydWN0XG4gICAgY29uc3QgY2ZuUHJvcHM6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuR2F0ZXdheVRhcmdldFByb3BzID0ge1xuICAgICAgZ2F0ZXdheUlkZW50aWZpZXI6IHRoaXMuZ2F0ZXdheS5nYXRld2F5SWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuX3JlbmRlckNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zKCksXG4gICAgICB9KSxcblxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnRhcmdldENvbmZpZ3VyYXRpb24uX3JlbmRlcigpLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHRoaXMudGFyZ2V0UmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5VGFyZ2V0KFxuICAgICAgdGhpcyxcbiAgICAgICdSZXNvdXJjZScsXG4gICAgICBjZm5Qcm9wcyxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucykge1xuICAgICAgICBwcm92aWRlclxuICAgICAgICAgIC5ncmFudE5lZWRlZFBlcm1pc3Npb25zVG9Sb2xlKHRoaXMuZ2F0ZXdheS5yb2xlKVxuICAgICAgICAgID8uYXBwbHlCZWZvcmUodGhpcy50YXJnZXRSZXNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50YXJnZXRJZCA9IHRoaXMudGFyZ2V0UmVzb3VyY2UuYXR0clRhcmdldElkO1xuICAgIHRoaXMudGFyZ2V0QXJuID0gdGhpcy50YXJnZXRSZXNvdXJjZS5yZWY7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLnRhcmdldFJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5zdGF0dXNSZWFzb25zID0gdGhpcy50YXJnZXRSZXNvdXJjZS5hdHRyU3RhdHVzUmVhc29ucztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMudGFyZ2V0UmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IHRoaXMudGFyZ2V0UmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzeW5jaHJvbml6ZSB0aGlzIGdhdGV3YXkncyB0YXJnZXRzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGdyYW50cyB0aGUgYFN5bmNocm9uaXplR2F0ZXdheVRhcmdldHNgIHBlcm1pc3Npb24sIHdoaWNoIGlzIHByaW1hcmlseVxuICAgKiBuZWVkZWQgZm9yIE1DUCBTZXJ2ZXIgdGFyZ2V0cyB3aGVuIHlvdSBuZWVkIHRvIHJlZnJlc2ggdGhlIHRvb2wgY2F0YWxvZyBhZnRlciB0aGVcbiAgICogTUNQIHNlcnZlcidzIHRvb2xzIGhhdmUgY2hhbmdlZC5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBncmFudFN5bmMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IEdhdGV3YXlQZXJtcy5TWU5DX1BFUk1TLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5nYXRld2F5LmdhdGV3YXlBcm5dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gdGFyZ2V0IHR5cGVcbiAgICpcbiAgICogLSBMYW1iZGEgJiBTbWl0aHk6IERlZmF1bHQgdG8gSUFNIHJvbGUgaWYgbm90IHByb3ZpZGVkXG4gICAqIC0gTUNQIFNlcnZlcjogUmV0dXJuIHVuZGVmaW5lZCBpZiBub3QgcHJvdmlkZWQgKHNlcnZpY2UgaGFuZGxlcyBOb0F1dGgpXG4gICAqIC0gT3BlbkFQSTogUmV0dXJuIGFzLWlzIChtdXN0IGJlIGV4cGxpY2l0bHkgcHJvdmlkZWQpXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlZENyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmcm9tIHByb3BzXG4gICAqIEByZXR1cm5zIFRoZSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRvIHVzZSwgb3IgdW5kZWZpbmVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0VGFyZ2V0U3BlY2lmaWNDcmVkZW50aWFscyhcbiAgICBwcm92aWRlZENyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW10gfCB1bmRlZmluZWQsXG4gICk6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3ZpZGVkQ3JlZGVudGlhbHMgJiYgcHJvdmlkZWRDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZWRDcmVkZW50aWFscztcbiAgICB9XG4gICAgLy8gQXBwbHkgdGFyZ2V0LXNwZWNpZmljIGRlZmF1bHRzIHdoZW4gbm90IHByb3ZpZGVkXG4gICAgc3dpdGNoICh0aGlzLnRhcmdldFR5cGUpIHtcbiAgICAgIGNhc2UgTWNwVGFyZ2V0VHlwZS5MQU1CREE6XG4gICAgICBjYXNlIE1jcFRhcmdldFR5cGUuU01JVEhZX01PREVMOlxuICAgICAgICByZXR1cm4gW0dhdGV3YXlDcmVkZW50aWFsUHJvdmlkZXIuZnJvbUlhbVJvbGUoKV07XG5cbiAgICAgIGNhc2UgTWNwVGFyZ2V0VHlwZS5NQ1BfU0VSVkVSOlxuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXksIC0gc2VydmljZSBoYW5kbGVzIE5vQXV0aCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIGNhc2UgTWNwVGFyZ2V0VHlwZS5PUEVOQVBJX1NDSEVNQTpcbiAgICAgICAgLy8gTm8gZGVmYXVsdCAtIG11c3QgYmUgZXhwbGljaXRseSBwcm92aWRlZCwgc2VydmljZSBoYW5kbGVzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21JYW1Sb2xlKCldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbnMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz8ubWFwKHByb3ZpZGVyID0+IHByb3ZpZGVyLl9yZW5kZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBnYXRld2F5IHRhcmdldCBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeKFswLTlhLXpBLVpdWy1dPyl7MSwxMDB9JFxuICAgKiBNYXggbGVuZ3RoOiAxMDAgY2hhcmFjdGVyc1xuICAgKiBAcGFyYW0gZ2F0ZXdheVRhcmdldE5hbWUgVGhlIGdhdGV3YXkgdGFyZ2V0IG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgbmFtZSBpcyBpbnZhbGlkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdhdGV3YXlUYXJnZXROYW1lKGdhdGV3YXlUYXJnZXROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGdhdGV3YXlUYXJnZXROYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IGdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZmllbGROYW1lOiAnR2F0ZXdheSB0YXJnZXQgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgJ0dhdGV3YXkgdGFyZ2V0IG5hbWUnLFxuICAgICAgL14oWzAtOWEtekEtWl1bLV0/KXsxLDEwMH0kLyxcbiAgICAgICdHYXRld2F5IHRhcmdldCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCB3aXRoIGh5cGhlbnMgb25seSBiZXR3ZWVuIGNoYXJhY3RlcnMnLFxuICAgICk7XG5cbiAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYWxsRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiBkZXNjcmlwdGlvbixcbiAgICAgIGZpZWxkTmFtZTogJ0dhdGV3YXkgdGFyZ2V0IGRlc2NyaXB0aW9uJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogMjAwLFxuICAgIH0pO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|