@aws-cdk/aws-bedrock-agentcore-alpha 2.250.0-alpha.0 → 2.252.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.
Files changed (56) hide show
  1. package/.jsii +11883 -7285
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +4 -0
  4. package/README.md +405 -0
  5. package/lib/gateway/gateway-base.js +1 -1
  6. package/lib/gateway/gateway.d.ts +58 -0
  7. package/lib/gateway/gateway.js +46 -3
  8. package/lib/gateway/inbound-auth/authorizer.d.ts +27 -1
  9. package/lib/gateway/inbound-auth/authorizer.js +37 -5
  10. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  11. package/lib/gateway/interceptor.js +1 -1
  12. package/lib/gateway/outbound-auth/api-key.js +1 -1
  13. package/lib/gateway/outbound-auth/credential-provider.js +1 -1
  14. package/lib/gateway/protocol.js +2 -2
  15. package/lib/gateway/targets/schema/api-schema.js +4 -4
  16. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  17. package/lib/gateway/targets/target-base.js +1 -1
  18. package/lib/gateway/targets/target-configuration.js +6 -6
  19. package/lib/gateway/targets/target.js +1 -1
  20. package/lib/index.d.ts +8 -0
  21. package/lib/index.js +13 -1
  22. package/lib/memory/memory-strategy.js +1 -1
  23. package/lib/memory/memory.js +2 -2
  24. package/lib/memory/strategies/managed-strategy.js +1 -1
  25. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  26. package/lib/network/network-configuration.js +4 -4
  27. package/lib/policy/perms.d.ts +50 -0
  28. package/lib/policy/perms.js +62 -0
  29. package/lib/policy/policy-base.d.ts +194 -0
  30. package/lib/policy/policy-base.js +120 -0
  31. package/lib/policy/policy-engine-base.d.ts +260 -0
  32. package/lib/policy/policy-engine-base.js +193 -0
  33. package/lib/policy/policy-engine.d.ts +150 -0
  34. package/lib/policy/policy-engine.js +290 -0
  35. package/lib/policy/policy-statement.d.ts +518 -0
  36. package/lib/policy/policy-statement.js +927 -0
  37. package/lib/policy/policy-types.d.ts +66 -0
  38. package/lib/policy/policy-types.js +30 -0
  39. package/lib/policy/policy.d.ts +127 -0
  40. package/lib/policy/policy.js +225 -0
  41. package/lib/policy/validation-helpers.d.ts +139 -0
  42. package/lib/policy/validation-helpers.js +276 -0
  43. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  44. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  45. package/lib/runtime/observability.d.ts +105 -0
  46. package/lib/runtime/observability.js +317 -0
  47. package/lib/runtime/runtime-artifact.js +1 -1
  48. package/lib/runtime/runtime-base.js +1 -1
  49. package/lib/runtime/runtime-endpoint-base.js +1 -1
  50. package/lib/runtime/runtime-endpoint.js +1 -1
  51. package/lib/runtime/runtime.d.ts +17 -0
  52. package/lib/runtime/runtime.js +10 -2
  53. package/lib/tools/browser.js +2 -2
  54. package/lib/tools/code-interpreter.js +2 -2
  55. package/package.json +9 -9
  56. package/rosetta/default.ts-fixture +2 -0
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PolicyEngineBase = void 0;
4
+ const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
8
+ const iam = require("aws-cdk-lib/aws-iam");
9
+ // Internal imports
10
+ const perms_1 = require("./perms");
11
+ /******************************************************************************
12
+ * ABSTRACT BASE CLASS
13
+ *****************************************************************************/
14
+ /**
15
+ * Abstract base class for a PolicyEngine.
16
+ * Contains methods and attributes valid for PolicyEngines either created with CDK or imported.
17
+ */
18
+ class PolicyEngineBase extends aws_cdk_lib_1.Resource {
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngineBase", version: "2.252.0-alpha.0" };
20
+ /**
21
+ * A reference to this PolicyEngine resource.
22
+ */
23
+ get policyEngineRef() {
24
+ return {
25
+ policyEngineArn: this.policyEngineArn,
26
+ };
27
+ }
28
+ constructor(scope, id, props = {}) {
29
+ super(scope, id, props);
30
+ }
31
+ /**
32
+ * Grants IAM actions to the IAM Principal
33
+ *
34
+ * [disable-awslint:no-grants]
35
+ *
36
+ * @param grantee - The IAM principal to grant permissions to
37
+ * @param actions - The actions to grant
38
+ * @returns An IAM Grant object representing the granted permissions
39
+ */
40
+ grant(grantee, ...actions) {
41
+ return iam.Grant.addToPrincipal({
42
+ grantee,
43
+ actions,
44
+ resourceArns: [this.policyEngineArn],
45
+ });
46
+ }
47
+ /**
48
+ * Grants read permissions on the PolicyEngine (data plane).
49
+ *
50
+ * This grants runtime read access to policy engine configuration. Use this for
51
+ * monitoring, observability, or read-only administrative roles that need to inspect
52
+ * policy engine settings at runtime.
53
+ *
54
+ * [disable-awslint:no-grants]
55
+ *
56
+ * @param grantee - The IAM principal to grant read permissions to
57
+ * @returns An IAM Grant object representing the granted permissions
58
+ */
59
+ grantRead(grantee) {
60
+ return this.grant(grantee, ...perms_1.POLICY_ENGINE_READ_PERMS);
61
+ }
62
+ /**
63
+ * Grants permissions to evaluate policies at runtime (data plane operations).
64
+ *
65
+ * This is the primary permission needed by Gateway execution roles to evaluate
66
+ * authorization decisions during agent requests. Grant this to roles that need
67
+ * to call AuthorizeAction or PartiallyAuthorizeActions at runtime.
68
+ *
69
+ * [disable-awslint:no-grants]
70
+ *
71
+ * @param grantee - The IAM principal to grant evaluation permissions to
72
+ * @returns An IAM Grant object representing the granted permissions
73
+ */
74
+ grantEvaluate(grantee) {
75
+ return this.grant(grantee, ...perms_1.POLICY_ENGINE_EVALUATE_PERMS);
76
+ }
77
+ /**
78
+ * Grants the full set of permissions required for a gateway execution role to use
79
+ * this policy engine, correctly scoped to both the policy engine and gateway ARNs.
80
+ *
81
+ * Per the AWS docs:
82
+ * - `GetPolicyEngine` → policy engine ARN only
83
+ * - `AuthorizeAction` + `PartiallyAuthorizeActions` → policy engine ARN **and** gateway ARN
84
+ *
85
+ * [disable-awslint:no-grants]
86
+ *
87
+ * @param grantee - The IAM principal (gateway execution role) to grant permissions to
88
+ * @param gateway - The gateway that will use this policy engine [disable-awslint:prefer-ref-interface]
89
+ * @returns A combined IAM Grant representing all granted permissions
90
+ */
91
+ grantEvaluateForGateway(grantee, gateway) {
92
+ try {
93
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IGateway(gateway);
94
+ }
95
+ catch (error) {
96
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
97
+ Error.captureStackTrace(error, this.grantEvaluateForGateway);
98
+ }
99
+ throw error;
100
+ }
101
+ const getPolicyEngineGrant = this.grant(grantee, 'bedrock-agentcore:GetPolicyEngine');
102
+ // using gateway.name here to avoid a circular dependency between PolicyEngine and Gateway that
103
+ // arises if we try to reference gateway.gatewayArn.
104
+ // Additionally, BedrockAgentCore appends a random suffix to gateway names at creation time, so the exact ARN
105
+ // is unknowable at synthesis. Using `${gateway.name}-*` allows us to correctly match the actual ARN at runtime.
106
+ const gatewayResourceName = aws_cdk_lib_1.Token.isUnresolved(gateway.name) ? '*' : `${gateway.name}-*`;
107
+ const gatewayArn = aws_cdk_lib_1.Stack.of(this).formatArn({
108
+ service: 'bedrock-agentcore',
109
+ resource: 'gateway',
110
+ resourceName: gatewayResourceName,
111
+ });
112
+ const authorizationGrant = iam.Grant.addToPrincipal({
113
+ grantee,
114
+ actions: [
115
+ 'bedrock-agentcore:AuthorizeAction',
116
+ 'bedrock-agentcore:PartiallyAuthorizeActions',
117
+ ],
118
+ resourceArns: [this.policyEngineArn, gatewayArn],
119
+ });
120
+ return getPolicyEngineGrant.combine(authorizationGrant);
121
+ }
122
+ /**
123
+ * Return the given named metric for this policy engine.
124
+ *
125
+ * By default, the metric will be calculated as a sum over a period of 5 minutes.
126
+ * You can customize this by using the `statistic` and `period` properties.
127
+ *
128
+ * @param metricName The name of the metric
129
+ * @param dimensions Additional dimensions for the metric
130
+ * @param props Optional metric configuration
131
+ */
132
+ metric(metricName, dimensions, props) {
133
+ const metricProps = {
134
+ namespace: 'AWS/Bedrock-AgentCore',
135
+ metricName,
136
+ dimensionsMap: { ...dimensions, Resource: this.policyEngineArn },
137
+ ...props,
138
+ };
139
+ return this.configureMetric(metricProps);
140
+ }
141
+ /**
142
+ * Return a metric containing the total number of authorizations for this policy engine.
143
+ *
144
+ * This metric tracks all authorization requests processed by the policy engine.
145
+ *
146
+ * @param props Optional metric configuration
147
+ */
148
+ metricAuthorizations(props) {
149
+ return this.metric('Authorizations', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
150
+ }
151
+ /**
152
+ * Return a metric measuring the authorization latency for this policy engine.
153
+ *
154
+ * This metric represents the time taken to evaluate authorization policies.
155
+ *
156
+ * @param props Optional metric configuration
157
+ */
158
+ metricAuthorizationLatency(props) {
159
+ return this.metric('AuthorizationLatency', {}, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
160
+ }
161
+ /**
162
+ * Return a metric containing the number of denied authorization requests for this policy engine.
163
+ *
164
+ * This metric tracks authorization requests that were explicitly denied by policies.
165
+ *
166
+ * @param props Optional metric configuration
167
+ */
168
+ metricDeniedRequests(props) {
169
+ return this.metric('DeniedRequests', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
170
+ }
171
+ /**
172
+ * Return a metric containing the number of errors during authorization for this policy engine.
173
+ *
174
+ * This metric tracks errors encountered during policy evaluation.
175
+ *
176
+ * @param props Optional metric configuration
177
+ */
178
+ metricErrors(props) {
179
+ return this.metric('Errors', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
180
+ }
181
+ /**
182
+ * Internal method to create a metric.
183
+ */
184
+ configureMetric(props) {
185
+ return new aws_cloudwatch_1.Metric({
186
+ ...props,
187
+ region: props?.region ?? this.stack.region,
188
+ account: props?.account ?? this.stack.account,
189
+ });
190
+ }
191
+ }
192
+ exports.PolicyEngineBase = PolicyEngineBase;
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWVuZ2luZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicG9saWN5LWVuZ2luZS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBY0EsNkNBQXFEO0FBR3JELCtEQUEyRDtBQUMzRCwyQ0FBMkM7QUFHM0MsbUJBQW1CO0FBQ25CLG1DQUFpRjtBQXlJakY7OytFQUUrRTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFzQixnQkFBaUIsU0FBUSxzQkFBUTs7SUFZckQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtTQUN0QyxDQUFDO0tBQ0g7SUFFRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQXVCLEVBQUU7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekI7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEtBQUssQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDeEQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDckMsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLFNBQVMsQ0FBQyxPQUF1QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsZ0NBQXdCLENBQUMsQ0FBQztLQUN6RDtJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksYUFBYSxDQUFDLE9BQXVCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxvQ0FBNEIsQ0FBQyxDQUFDO0tBQzdEO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLHVCQUF1QixDQUFDLE9BQXVCLEVBQUUsT0FBaUI7Ozs7Ozs7Ozs7UUFDdkUsTUFB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IGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSVJlc291cmNlLCBSZXNvdXJjZVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVBvbGljeUVuZ2luZVJlZiwgUG9saWN5RW5naW5lUmVmZXJlbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHR5cGUgeyBEaW1lbnNpb25zTWFwLCBNZXRyaWNPcHRpb25zLCBNZXRyaWNQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IE1ldHJpYywgU3RhdHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG4vLyBJbnRlcm5hbCBpbXBvcnRzXG5pbXBvcnQgeyBQT0xJQ1lfRU5HSU5FX0VWQUxVQVRFX1BFUk1TLCBQT0xJQ1lfRU5HSU5FX1JFQURfUEVSTVMgfSBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB0eXBlIHsgSUdhdGV3YXkgfSBmcm9tICcuLi9nYXRld2F5L2dhdGV3YXktYmFzZSc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb250YWlucyBhbGwgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBmb3IgYm90aCBjcmVhdGVkIGFuZCBpbXBvcnRlZCBwb2xpY3kgZW5naW5lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUG9saWN5RW5naW5lIGV4dGVuZHMgSVJlc291cmNlLCBJUG9saWN5RW5naW5lUmVmLCBpYW0uSUdyYW50YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBwb2xpY3kgZW5naW5lIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeUVuZ2luZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHBvbGljeSBlbmdpbmVcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RW5naW5lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBvbGljeSBlbmdpbmVcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RW5naW5lTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBvbGljeSBlbmdpbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogR3JhbnRzIElBTSBhY3Rpb25zIHRvIHRoZSBJQU0gUHJpbmNpcGFsXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGFjdGlvbnMgLSBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcmVhZCBwZXJtaXNzaW9ucyBvbiB0aGUgUG9saWN5RW5naW5lLlxuICAgKlxuICAgKiBUaGlzIGdyYW50cyBydW50aW1lIHJlYWQgYWNjZXNzIHRvIHBvbGljeSBlbmdpbmUgY29uZmlndXJhdGlvbi4gVXNlIHRoaXMgZm9yXG4gICAqIG1vbml0b3JpbmcsIG9ic2VydmFiaWxpdHksIG9yIHJlYWQtb25seSBhZG1pbmlzdHJhdGl2ZSByb2xlcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBldmFsdWF0ZSBwb2xpY2llcyBhdCBydW50aW1lIC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcHJpbWFyeSBwZXJtaXNzaW9uIG5lZWRlZCBieSBHYXRld2F5IGV4ZWN1dGlvbiByb2xlcyB0byBldmFsdWF0ZVxuICAgKiBhdXRob3JpemF0aW9uIGRlY2lzaW9ucyBkdXJpbmcgYWdlbnQgcmVxdWVzdHMuIEdyYW50IHRoaXMgdG8gcm9sZXMgdGhhdCBuZWVkXG4gICAqIHRvIGNhbGwgQXV0aG9yaXplQWN0aW9uIG9yIFBhcnRpYWxseUF1dGhvcml6ZUFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgZXZhbHVhdGlvbiBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRFdmFsdWF0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBmdWxsIHNldCBvZiBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgYSBnYXRld2F5IGV4ZWN1dGlvbiByb2xlIHRvIHVzZVxuICAgKiB0aGlzIHBvbGljeSBlbmdpbmUsIGNvcnJlY3RseSBzY29wZWQgdG8gYm90aCB0aGUgcG9saWN5IGVuZ2luZSBhbmQgZ2F0ZXdheSBBUk5zLlxuICAgKlxuICAgKiBQZXIgdGhlIEFXUyBkb2NzLCBgQXV0aG9yaXplQWN0aW9uYCBhbmQgYFBhcnRpYWxseUF1dGhvcml6ZUFjdGlvbnNgIHJlcXVpcmVcbiAgICogYm90aCB0aGUgcG9saWN5IGVuZ2luZSBBUk4gYW5kIHRoZSBnYXRld2F5IEFSTiBhcyByZXNvdXJjZXMsIHdoaWxlXG4gICAqIGBHZXRQb2xpY3lFbmdpbmVgIG9ubHkgbmVlZHMgdGhlIHBvbGljeSBlbmdpbmUgQVJOLlxuICAgKlxuICAgKiBUaGlzIGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBhcyBMYW1iZGEncyBgZ3JhbnRJbnZva2VWZXJzaW9uKGdyYW50ZWUsIHZlcnNpb24pYC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCAoZ2F0ZXdheSBleGVjdXRpb24gcm9sZSkgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGdhdGV3YXkgLSBUaGUgZ2F0ZXdheSB0aGF0IHdpbGwgdXNlIHRoaXMgcG9saWN5IGVuZ2luZSBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICAgKi9cbiAgZ3JhbnRFdmFsdWF0ZUZvckdhdGV3YXkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIGdhdGV3YXk6IElHYXRld2F5KTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBwb2xpY3kgZW5naW5lLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBUaGUgbmFtZSBvZiB0aGUgbWV0cmljXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zIEFkZGl0aW9uYWwgZGltZW5zaW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgbWV0cmljIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgYXV0aG9yaXphdGlvbiBsYXRlbmN5IGZvciB0aGlzIHBvbGljeSBlbmdpbmUuXG4gICAqXG4gICAqIFRoaXMgbWV0cmljIHJlcHJlc2VudHMgdGhlIHRpbWUgdGFrZW4gdG8gZXZhbHVhdGUgYXV0aG9yaXphdGlvbiBwb2xpY2llcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIG1ldHJpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBtZXRyaWNBdXRob3JpemF0aW9uTGF0ZW5jeShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZGVuaWVkIGF1dGhvcml6YXRpb24gcmVxdWVzdHMgZm9yIHRoaXMgcG9saWN5IGVuZ2luZS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgdHJhY2tzIGF1dGhvcml6YXRpb24gcmVxdWVzdHMgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgZGVuaWVkIGJ5IHBvbGljaWVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgbWV0cmljIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIG1ldHJpY0RlbmllZFJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlcnJvcnMgZHVyaW5nIGF1dGhvcml6YXRpb24gZm9yIHRoaXMgcG9saWN5IGVuZ2luZS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgdHJhY2tzIGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgcG9saWN5IGV2YWx1YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgbWV0cmljRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgUG9saWN5RW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RW5naW5lQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBwb2xpY3kgZW5naW5lXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lFbmdpbmVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgQVJOIHVzZWQgZm9yIGVuY3J5cHRpb24gKG9wdGlvbmFsKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIEtNUyBrZXlcbiAgICovXG4gIHJlYWRvbmx5IGttc0tleUFybj86IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBCQVNFIENMQVNTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYSBQb2xpY3lFbmdpbmUuXG4gKiBDb250YWlucyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIHZhbGlkIGZvciBQb2xpY3lFbmdpbmVzIGVpdGhlciBjcmVhdGVkIHdpdGggQ0RLIG9yIGltcG9ydGVkLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9saWN5RW5naW5lQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVBvbGljeUVuZ2luZSB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwb2xpY3lFbmdpbmVBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHBvbGljeUVuZ2luZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwb2xpY3lFbmdpbmVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGlzIFBvbGljeUVuZ2luZSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcG9saWN5RW5naW5lUmVmKCk6IFBvbGljeUVuZ2luZVJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvbGljeUVuZ2luZUFybjogdGhpcy5wb2xpY3lFbmdpbmVBcm4sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZXNvdXJjZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGFjdGlvbnMgLSBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMucG9saWN5RW5naW5lQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcmVhZCBwZXJtaXNzaW9ucyBvbiB0aGUgUG9saWN5RW5naW5lIChkYXRhIHBsYW5lKS5cbiAgICpcbiAgICogVGhpcyBncmFudHMgcnVudGltZSByZWFkIGFjY2VzcyB0byBwb2xpY3kgZW5naW5lIGNvbmZpZ3VyYXRpb24uIFVzZSB0aGlzIGZvclxuICAgKiBtb25pdG9yaW5nLCBvYnNlcnZhYmlsaXR5LCBvciByZWFkLW9ubHkgYWRtaW5pc3RyYXRpdmUgcm9sZXMgdGhhdCBuZWVkIHRvIGluc3BlY3RcbiAgICogcG9saWN5IGVuZ2luZSBzZXR0aW5ncyBhdCBydW50aW1lLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5QT0xJQ1lfRU5HSU5FX1JFQURfUEVSTVMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBldmFsdWF0ZSBwb2xpY2llcyBhdCBydW50aW1lIChkYXRhIHBsYW5lIG9wZXJhdGlvbnMpLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBwcmltYXJ5IHBlcm1pc3Npb24gbmVlZGVkIGJ5IEdhdGV3YXkgZXhlY3V0aW9uIHJvbGVzIHRvIGV2YWx1YXRlXG4gICAqIGF1dGhvcml6YXRpb24gZGVjaXNpb25zIGR1cmluZyBhZ2VudCByZXF1ZXN0cy4gR3JhbnQgdGhpcyB0byByb2xlcyB0aGF0IG5lZWRcbiAgICogdG8gY2FsbCBBdXRob3JpemVBY3Rpb24gb3IgUGFydGlhbGx5QXV0aG9yaXplQWN0aW9ucyBhdCBydW50aW1lLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBldmFsdWF0aW9uIHBlcm1pc3Npb25zIHRvXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRFdmFsdWF0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uUE9MSUNZX0VOR0lORV9FVkFMVUFURV9QRVJNUyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBmdWxsIHNldCBvZiBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgYSBnYXRld2F5IGV4ZWN1dGlvbiByb2xlIHRvIHVzZVxuICAgKiB0aGlzIHBvbGljeSBlbmdpbmUsIGNvcnJlY3RseSBzY29wZWQgdG8gYm90aCB0aGUgcG9saWN5IGVuZ2luZSBhbmQgZ2F0ZXdheSBBUk5zLlxuICAgKlxuICAgKiBQZXIgdGhlIEFXUyBkb2NzOlxuICAgKiAtIGBHZXRQb2xpY3lFbmdpbmVgIOKGkiBwb2xpY3kgZW5naW5lIEFSTiBvbmx5XG4gICAqIC0gYEF1dGhvcml6ZUFjdGlvbmAgKyBgUGFydGlhbGx5QXV0aG9yaXplQWN0aW9uc2Ag4oaSIHBvbGljeSBlbmdpbmUgQVJOICoqYW5kKiogZ2F0ZXdheSBBUk5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgKGdhdGV3YXkgZXhlY3V0aW9uIHJvbGUpIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEBwYXJhbSBnYXRld2F5IC0gVGhlIGdhdGV3YXkgdGhhdCB3aWxsIHVzZSB0aGlzIHBvbGljeSBlbmdpbmUgW2Rpc2FibGUtYXdzbGludDpwcmVmZXItcmVmLWludGVyZmFjZV1cbiAgICogQHJldHVybnMgQSBjb21iaW5lZCBJQU0gR3JhbnQgcmVwcmVzZW50aW5nIGFsbCBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRFdmFsdWF0ZUZvckdhdGV3YXkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIGdhdGV3YXk6IElHYXRld2F5KTogaWFtLkdyYW50IHtcbiAgICBjb25zdCBnZXRQb2xpY3lFbmdpbmVHcmFudCA9IHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2JlZHJvY2stYWdlbnRjb3JlOkdldFBvbGljeUVuZ2luZScpO1xuXG4gICAgLy8gdXNpbmcgIGdhdGV3YXkubmFtZSBoZXJlIHRvIGF2b2lkIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFBvbGljeUVuZ2luZSBhbmQgR2F0ZXdheSB0aGF0XG4gICAgLy8gYXJpc2VzIGlmIHdlIHRyeSB0byByZWZlcmVuY2UgZ2F0ZXdheS5nYXRld2F5QXJuLlxuICAgIC8vIEFkZGl0aW9uYWxseSwgQmVkcm9ja0FnZW50Q29yZSBhcHBlbmRzIGEgcmFuZG9tIHN1ZmZpeCB0byBnYXRld2F5IG5hbWVzIGF0IGNyZWF0aW9uIHRpbWUsIHNvIHRoZSBleGFjdCBBUk5cbiAgICAvLyBpcyB1bmtub3dhYmxlIGF0IHN5bnRoZXNpcy4gVXNpbmcgYCR7Z2F0ZXdheS5uYW1lfS0qYCBhbGxvd3MgdXMgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSBhY3R1YWwgQVJOIGF0IHJ1bnRpbWUuXG4gICAgY29uc3QgZ2F0ZXdheVJlc291cmNlTmFtZSA9IFRva2VuLmlzVW5yZXNvbHZlZChnYXRld2F5Lm5hbWUpID8gJyonIDogYCR7Z2F0ZXdheS5uYW1lfS0qYDtcbiAgICBjb25zdCBnYXRld2F5QXJuID0gU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdiZWRyb2NrLWFnZW50Y29yZScsXG4gICAgICByZXNvdXJjZTogJ2dhdGV3YXknLFxuICAgICAgcmVzb3VyY2VOYW1lOiBnYXRld2F5UmVzb3VyY2VOYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXV0aG9yaXphdGlvbkdyYW50ID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpBdXRob3JpemVBY3Rpb24nLFxuICAgICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UGFydGlhbGx5QXV0aG9yaXplQWN0aW9ucycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5wb2xpY3lFbmdpbmVBcm4sIGdhdGV3YXlBcm5dLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdldFBvbGljeUVuZ2luZUdyYW50LmNvbWJpbmUoYXV0aG9yaXphdGlvbkdyYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBwb2xpY3kgZW5naW5lLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbWV0cmljIHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHN1bSBvdmVyIGEgcGVyaW9kIG9mIDUgbWludXRlcy5cbiAgICogWW91IGNhbiBjdXN0b21pemUgdGhpcyBieSB1c2luZyB0aGUgYHN0YXRpc3RpY2AgYW5kIGBwZXJpb2RgIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRyaWNOYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRyaWNcbiAgICogQHBhcmFtIGRpbWVuc2lvbnMgQWRkaXRpb25hbCBkaW1lbnNpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgY29uc3QgbWV0cmljUHJvcHM6IE1ldHJpY1Byb3BzID0ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IC4uLmRpbWVuc2lvbnMsIFJlc291cmNlOiB0aGlzLnBvbGljeUVuZ2luZUFybiB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmVNZXRyaWMobWV0cmljUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgYXV0aG9yaXphdGlvbnMgZm9yIHRoaXMgcG9saWN5IGVuZ2luZS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgdHJhY2tzIGFsbCBhdXRob3JpemF0aW9uIHJlcXVlc3RzIHByb2Nlc3NlZCBieSB0aGUgcG9saWN5IGVuZ2luZS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIG1ldHJpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQXV0aG9yaXphdGlvbnMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0F1dGhvcml6YXRpb25zJywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGF1dGhvcml6YXRpb24gbGF0ZW5jeSBmb3IgdGhpcyBwb2xpY3kgZW5naW5lLlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyByZXByZXNlbnRzIHRoZSB0aW1lIHRha2VuIHRvIGV2YWx1YXRlIGF1dGhvcml6YXRpb24gcG9saWNpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIG1ldHJpY0F1dGhvcml6YXRpb25MYXRlbmN5KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdBdXRob3JpemF0aW9uTGF0ZW5jeScsIHt9LCB7IHN0YXRpc3RpYzogU3RhdHMuQVZFUkFHRSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBkZW5pZWQgYXV0aG9yaXphdGlvbiByZXF1ZXN0cyBmb3IgdGhpcyBwb2xpY3kgZW5naW5lLlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyB0cmFja3MgYXV0aG9yaXphdGlvbiByZXF1ZXN0cyB0aGF0IHdlcmUgZXhwbGljaXRseSBkZW5pZWQgYnkgcG9saWNpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIG1ldHJpY0RlbmllZFJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdEZW5pZWRSZXF1ZXN0cycsIHt9LCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVycm9ycyBkdXJpbmcgYXV0aG9yaXphdGlvbiBmb3IgdGhpcyBwb2xpY3kgZW5naW5lLlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyB0cmFja3MgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyBwb2xpY3kgZXZhbHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIG1ldHJpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdFcnJvcnMnLCB7fSwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGNyZWF0ZSBhIG1ldHJpYy5cbiAgICovXG4gIHByaXZhdGUgY29uZmlndXJlTWV0cmljKHByb3BzOiBNZXRyaWNQcm9wcykge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcmVnaW9uOiBwcm9wcz8ucmVnaW9uID8/IHRoaXMuc3RhY2sucmVnaW9uLFxuICAgICAgYWNjb3VudDogcHJvcHM/LmFjY291bnQgPz8gdGhpcy5zdGFjay5hY2NvdW50LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ import * as iam from 'aws-cdk-lib/aws-iam';
14
+ import * as kms from 'aws-cdk-lib/aws-kms';
15
+ import type { Construct } from 'constructs';
16
+ import { Policy } from './policy';
17
+ import { PolicyEngineBase } from './policy-engine-base';
18
+ import type { IPolicyEngine, PolicyEngineAttributes } from './policy-engine-base';
19
+ import type { AddPolicyOptions } from './policy-types';
20
+ /**
21
+ * Properties for creating a PolicyEngine resource
22
+ */
23
+ export interface PolicyEngineProps {
24
+ /**
25
+ * The name of the policy engine.
26
+ * Valid characters: a-z, A-Z, 0-9, _ (underscore)
27
+ * Must start with a letter, 1-48 characters
28
+ * Pattern: ^[A-Za-z][A-Za-z0-9_]*$
29
+ *
30
+ * @default - Auto-generated unique name
31
+ */
32
+ readonly policyEngineName?: string;
33
+ /**
34
+ * Optional description for the policy engine.
35
+ * Maximum 4,096 characters.
36
+ *
37
+ * @default - No description
38
+ */
39
+ readonly description?: string;
40
+ /**
41
+ * Custom KMS key for encryption.
42
+ * [disable-awslint:prefer-ref-interface]
43
+ *
44
+ * @default - AWS owned key
45
+ */
46
+ readonly kmsKey?: kms.IKey;
47
+ /**
48
+ * Tags for the policy engine.
49
+ * Maximum 50 tags.
50
+ *
51
+ * @default - No tags
52
+ */
53
+ readonly tags?: {
54
+ [key: string]: string;
55
+ };
56
+ }
57
+ /**
58
+ * Container that manages Cedar authorization policies associated with gateways.
59
+ * PolicyEngine enables deterministic authorization control for Bedrock agents,
60
+ * allowing fine-grained access control to tools and actions via Cedar policy language.
61
+ *
62
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/policy-engine.html
63
+ * @resource AWS::BedrockAgentCore::PolicyEngine
64
+ */
65
+ export declare class PolicyEngine extends PolicyEngineBase {
66
+ /** Uniquely identifies this class. */
67
+ static readonly PROPERTY_INJECTION_ID: string;
68
+ /**
69
+ * Creates a PolicyEngine reference from an existing policy engine's attributes.
70
+ *
71
+ * @param scope - The construct scope
72
+ * @param id - Identifier of the construct
73
+ * @param attrs - Attributes of the existing policy engine
74
+ * @returns An IPolicyEngine reference to the existing policy engine
75
+ */
76
+ static fromPolicyEngineAttributes(scope: Construct, id: string, attrs: PolicyEngineAttributes): IPolicyEngine;
77
+ /**
78
+ * The ARN of the policy engine resource.
79
+ * @attribute
80
+ */
81
+ readonly policyEngineArn: string;
82
+ /**
83
+ * The name of the policy engine.
84
+ *
85
+ * [disable-awslint:attribute-tag]
86
+ */
87
+ readonly policyEngineName: string;
88
+ /**
89
+ * The ID of the policy engine.
90
+ * @attribute
91
+ */
92
+ readonly policyEngineId: string;
93
+ /**
94
+ * The description of the policy engine.
95
+ */
96
+ readonly description?: string;
97
+ /**
98
+ * Tags applied to this policy engine resource.
99
+ * @default - No tags applied
100
+ */
101
+ readonly tags?: {
102
+ [key: string]: string;
103
+ };
104
+ /**
105
+ * The principal to grant permissions to.
106
+ */
107
+ readonly grantPrincipal: iam.IPrincipal;
108
+ /**
109
+ * The KMS key used to encrypt the policy engine.
110
+ */
111
+ readonly kmsKey?: kms.IKey;
112
+ /**
113
+ * List of policies added to this policy engine via addPolicy().
114
+ * @internal
115
+ */
116
+ private readonly _policies;
117
+ /**
118
+ * The last policy added to this engine, used for automatic sequential chaining.
119
+ * @internal
120
+ */
121
+ private _lastPolicy?;
122
+ /**
123
+ * Get the list of policies added to this policy engine.
124
+ *
125
+ * Returns an array of Policy constructs that were added using addPolicy().
126
+ * This allows you to iterate over all policies associated with this engine.
127
+ *
128
+ * @returns A copy of the policies array
129
+ */
130
+ get policies(): Policy[];
131
+ private readonly __resource;
132
+ constructor(scope: Construct, id: string, props?: PolicyEngineProps);
133
+ /**
134
+ * Add a policy to this policy engine.
135
+ * Convenience method that creates a Policy construct with this engine as the parent.
136
+ *
137
+ * **Automatic Sequential Chaining**: By default, policies are automatically chained
138
+ * sequentially to prevent concurrent creation issues with the AWS Bedrock AgentCore
139
+ * service. Each new policy will depend on the previous policy added to this engine.
140
+ *
141
+ * This ensures policies are created one at a time, avoiding "Resource stabilization
142
+ * failed" errors that occur with concurrent policy operations.
143
+ *
144
+ * @param id - Unique identifier for the policy construct
145
+ * @param options - Options for creating the policy
146
+ * @returns The created Policy construct
147
+ *
148
+ */
149
+ addPolicy(id: string, options: AddPolicyOptions): Policy;
150
+ }