@aws-cdk/aws-bedrock-agentcore-alpha 2.225.0-alpha.0 → 2.227.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 (54) hide show
  1. package/.jsii +14021 -5792
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +343 -1
  4. package/README.md +880 -19
  5. package/agentcore/gateway/gateway-base.d.ts +292 -0
  6. package/agentcore/gateway/gateway-base.js +171 -0
  7. package/agentcore/gateway/gateway.d.ts +383 -0
  8. package/agentcore/gateway/gateway.js +521 -0
  9. package/agentcore/gateway/inbound-auth/authorizer.d.ts +121 -0
  10. package/agentcore/gateway/inbound-auth/authorizer.js +133 -0
  11. package/agentcore/gateway/outbound-auth/api-key.d.ts +117 -0
  12. package/agentcore/gateway/outbound-auth/api-key.js +141 -0
  13. package/agentcore/gateway/outbound-auth/credential-provider.d.ts +70 -0
  14. package/agentcore/gateway/outbound-auth/credential-provider.js +80 -0
  15. package/agentcore/gateway/outbound-auth/iam-role.d.ts +28 -0
  16. package/agentcore/gateway/outbound-auth/iam-role.js +40 -0
  17. package/agentcore/gateway/outbound-auth/oauth.d.ts +80 -0
  18. package/agentcore/gateway/outbound-auth/oauth.js +76 -0
  19. package/agentcore/gateway/perms.d.ts +75 -0
  20. package/agentcore/gateway/perms.js +112 -0
  21. package/agentcore/gateway/protocol.d.ts +121 -0
  22. package/agentcore/gateway/protocol.js +120 -0
  23. package/agentcore/gateway/targets/schema/api-schema.d.ts +110 -0
  24. package/agentcore/gateway/targets/schema/api-schema.js +207 -0
  25. package/agentcore/gateway/targets/schema/base-schema.d.ts +24 -0
  26. package/agentcore/gateway/targets/schema/base-schema.js +12 -0
  27. package/agentcore/gateway/targets/schema/tool-schema.d.ts +198 -0
  28. package/agentcore/gateway/targets/schema/tool-schema.js +213 -0
  29. package/agentcore/gateway/targets/target-base.d.ts +153 -0
  30. package/agentcore/gateway/targets/target-base.js +81 -0
  31. package/agentcore/gateway/targets/target-configuration.d.ts +230 -0
  32. package/agentcore/gateway/targets/target-configuration.js +407 -0
  33. package/agentcore/gateway/targets/target.d.ts +345 -0
  34. package/agentcore/gateway/targets/target.js +444 -0
  35. package/agentcore/gateway/validation-helpers.d.ts +65 -0
  36. package/agentcore/gateway/validation-helpers.js +333 -0
  37. package/agentcore/index.d.ts +15 -0
  38. package/agentcore/index.js +32 -1
  39. package/agentcore/memory/memory-strategy.js +1 -1
  40. package/agentcore/memory/memory.js +6 -3
  41. package/agentcore/memory/strategies/managed-strategy.js +1 -1
  42. package/agentcore/memory/strategies/self-managed-strategy.js +1 -1
  43. package/agentcore/network/network-configuration.js +4 -4
  44. package/agentcore/runtime/runtime-artifact.js +1 -1
  45. package/agentcore/runtime/runtime-authorizer-configuration.d.ts +1 -1
  46. package/agentcore/runtime/runtime-authorizer-configuration.js +6 -5
  47. package/agentcore/runtime/runtime-base.js +1 -1
  48. package/agentcore/runtime/runtime-endpoint-base.js +1 -1
  49. package/agentcore/runtime/runtime-endpoint.js +1 -1
  50. package/agentcore/runtime/runtime.js +1 -1
  51. package/agentcore/tools/browser.js +2 -2
  52. package/agentcore/tools/code-interpreter.js +2 -2
  53. package/package.json +9 -9
  54. package/rosetta/default.ts-fixture +15 -6
@@ -0,0 +1,198 @@
1
+ import { IRole } from 'aws-cdk-lib/aws-iam';
2
+ import { IBucket, Location } from 'aws-cdk-lib/aws-s3';
3
+ import * as s3_assets from 'aws-cdk-lib/aws-s3-assets';
4
+ import { Construct } from 'constructs';
5
+ import { TargetSchema } from './base-schema';
6
+ /******************************************************************************
7
+ * Tool Schema Configuration
8
+ *****************************************************************************/
9
+ /**
10
+ * Abstract interface for tool schema configuration
11
+ * @internal
12
+ */
13
+ export interface IToolSchemaConfiguration {
14
+ /**
15
+ * The tool schema configuration type
16
+ */
17
+ readonly toolSchemaType: string;
18
+ /**
19
+ * The tool schema configuration object
20
+ */
21
+ readonly configuration: any;
22
+ }
23
+ /**
24
+ * Schema definition types
25
+ */
26
+ export declare enum SchemaDefinitionType {
27
+ /** String type */
28
+ STRING = "string",
29
+ /** Number type */
30
+ NUMBER = "number",
31
+ /** Object type */
32
+ OBJECT = "object",
33
+ /** Array type */
34
+ ARRAY = "array",
35
+ /** Boolean type */
36
+ BOOLEAN = "boolean",
37
+ /** Integer type */
38
+ INTEGER = "integer"
39
+ }
40
+ /**
41
+ * Schema definition for tool input/output
42
+ */
43
+ export interface SchemaDefinition {
44
+ /**
45
+ * The type of the schema definition. This field specifies the data type of the schema.
46
+ */
47
+ readonly type: SchemaDefinitionType;
48
+ /**
49
+ * The description of the schema definition. This description provides information about the purpose and usage of the schema.
50
+ */
51
+ /**
52
+ * The description of the schema definition. This description provides information about the purpose and usage of the schema.
53
+ * @default - No description
54
+ */
55
+ readonly description?: string;
56
+ /**
57
+ * The items in the schema definition. This field is used for array types to define the structure of the array elements.
58
+ */
59
+ /**
60
+ * The items in the schema definition. This field is used for array types to define the structure of the array elements.
61
+ * @default - No items definition
62
+ */
63
+ readonly items?: SchemaDefinition;
64
+ /**
65
+ * The properties of the schema definition. These properties define the fields in the schema.
66
+ */
67
+ /**
68
+ * The properties of the schema definition. These properties define the fields in the schema.
69
+ * @default - No properties
70
+ */
71
+ readonly properties?: Record<string, SchemaDefinition>;
72
+ /**
73
+ * The required fields in the schema definition. These fields must be provided when using the schema.
74
+ * @default - No required fields
75
+ */
76
+ readonly required?: string[];
77
+ }
78
+ /**
79
+ * Tool definition for inline payload
80
+ */
81
+ export interface ToolDefinition {
82
+ /**
83
+ * The name of the tool. This name identifies the tool in the Model Context Protocol.
84
+ */
85
+ readonly name: string;
86
+ /**
87
+ * The description of the tool. This description provides information about the purpose and usage of the tool.
88
+ */
89
+ readonly description: string;
90
+ /**
91
+ * The input schema for the tool. This schema defines the structure of the input that the tool accepts.
92
+ */
93
+ readonly inputSchema: SchemaDefinition;
94
+ /**
95
+ * The output schema for the tool. This schema defines the structure of the output that the tool produces.
96
+ */
97
+ /**
98
+ * The output schema for the tool. This schema defines the structure of the output that the tool produces.
99
+ * @default - No output schema
100
+ */
101
+ readonly outputSchema?: SchemaDefinition;
102
+ }
103
+ /******************************************************************************
104
+ * TOOL SCHEMA CLASS
105
+ *****************************************************************************/
106
+ export declare abstract class ToolSchema extends TargetSchema {
107
+ /**
108
+ * Creates a tool Schema from a local file.
109
+ * @param path - the path to the local file containing the function schema for the tool
110
+ */
111
+ static fromLocalAsset(path: string): ToolSchema;
112
+ /**
113
+ * Creates a Tool Schema from an inline string.
114
+ * @param schema - the JSON or YAML payload defining the OpenAPI schema for the action group
115
+ */
116
+ static fromInline(schema: ToolDefinition[]): InlineToolSchema;
117
+ /**
118
+ * Creates a Tool Schema from an S3 File
119
+ * @param bucket - the bucket containing the local file containing the OpenAPI schema for the action group
120
+ * @param objectKey - object key in the bucket
121
+ * @param bucketOwnerAccountId - optional The account ID of the Amazon S3 bucket owner. This ID is used for cross-account access to the bucket.
122
+ */
123
+ static fromS3File(bucket: IBucket, objectKey: string, bucketOwnerAccountId?: string): S3ToolSchema;
124
+ /**
125
+ * The S3 location of the tool schema file, if using an S3-based schema.
126
+ * Contains the bucket name and object key information.
127
+ */
128
+ readonly s3File?: Location;
129
+ /**
130
+ * The inline tool schema definition as a string, if using an inline schema.
131
+ * Can be in JSON or YAML format.
132
+ */
133
+ readonly inlineSchema?: ToolDefinition[];
134
+ /**
135
+ * The account ID of the S3 bucket owner for cross-account access
136
+ */
137
+ readonly bucketOwnerAccountId?: string;
138
+ protected constructor(s3File?: Location, bucketOwnerAccountId?: string, inlineSchema?: ToolDefinition[]);
139
+ /**
140
+ * Format as CFN properties
141
+ * @internal This is an internal core function and should not be called directly.
142
+ */
143
+ abstract _render(): any;
144
+ }
145
+ /**
146
+ * Tool Schema from a local asset.
147
+ *
148
+ * The asset is uploaded to an S3 staging bucket, then moved to its final location
149
+ * by CloudFormation during deployment.
150
+ */
151
+ export declare class AssetToolSchema extends ToolSchema {
152
+ private readonly path;
153
+ private readonly options;
154
+ private asset?;
155
+ constructor(path: string, options?: s3_assets.AssetOptions);
156
+ /**
157
+ * Binds this tool schema to a construct scope.
158
+ * This method initializes the S3 asset if it hasn't been initialized yet.
159
+ * Must be called before rendering the schema as CFN properties.
160
+ *
161
+ * @param scope - The construct scope to bind to
162
+ */
163
+ bind(scope: Construct): void;
164
+ /**
165
+ * Format as CFN properties
166
+ * @internal This is an internal core function and should not be called directly.
167
+ */
168
+ _render(): any;
169
+ grantPermissionsToRole(role: IRole): void;
170
+ }
171
+ /**
172
+ * Class to define a Tool Schema from an inline string.
173
+ * The schema can be provided directly as a string in either JSON or YAML format.
174
+ */
175
+ export declare class InlineToolSchema extends ToolSchema {
176
+ private readonly schema;
177
+ constructor(schema: ToolDefinition[]);
178
+ /**
179
+ * @internal This is an internal core function and should not be called directly.
180
+ */
181
+ _render(): any;
182
+ bind(scope: Construct): void;
183
+ grantPermissionsToRole(_role: IRole): void;
184
+ }
185
+ /**
186
+ * Class to define a Tool Schema from an S3 object.
187
+ */
188
+ export declare class S3ToolSchema extends ToolSchema {
189
+ private readonly location;
190
+ readonly bucketOwnerAccountId?: string | undefined;
191
+ constructor(location: Location, bucketOwnerAccountId?: string | undefined);
192
+ /**
193
+ * @internal This is an internal core function and should not be called directly.
194
+ */
195
+ _render(): any;
196
+ bind(scope: Construct): void;
197
+ grantPermissionsToRole(role: IRole): void;
198
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3ToolSchema = exports.InlineToolSchema = exports.AssetToolSchema = exports.ToolSchema = exports.SchemaDefinitionType = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
+ const s3_assets = require("aws-cdk-lib/aws-s3-assets");
8
+ const base_schema_1 = require("./base-schema");
9
+ /**
10
+ * Schema definition types
11
+ */
12
+ var SchemaDefinitionType;
13
+ (function (SchemaDefinitionType) {
14
+ /** String type */
15
+ SchemaDefinitionType["STRING"] = "string";
16
+ /** Number type */
17
+ SchemaDefinitionType["NUMBER"] = "number";
18
+ /** Object type */
19
+ SchemaDefinitionType["OBJECT"] = "object";
20
+ /** Array type */
21
+ SchemaDefinitionType["ARRAY"] = "array";
22
+ /** Boolean type */
23
+ SchemaDefinitionType["BOOLEAN"] = "boolean";
24
+ /** Integer type */
25
+ SchemaDefinitionType["INTEGER"] = "integer";
26
+ })(SchemaDefinitionType || (exports.SchemaDefinitionType = SchemaDefinitionType = {}));
27
+ /**
28
+ * Error thrown when a ToolSchema is not properly initialized.
29
+ */
30
+ class ToolSchemaError extends Error {
31
+ cause;
32
+ constructor(message, cause) {
33
+ super(message);
34
+ this.cause = cause;
35
+ this.name = 'ToolSchemaError';
36
+ }
37
+ }
38
+ /******************************************************************************
39
+ * TOOL SCHEMA CLASS
40
+ *****************************************************************************/
41
+ class ToolSchema extends base_schema_1.TargetSchema {
42
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ToolSchema", version: "2.227.0-alpha.0" };
43
+ /**
44
+ * Creates a tool Schema from a local file.
45
+ * @param path - the path to the local file containing the function schema for the tool
46
+ */
47
+ static fromLocalAsset(path) {
48
+ return new AssetToolSchema(path);
49
+ }
50
+ /**
51
+ * Creates a Tool Schema from an inline string.
52
+ * @param schema - the JSON or YAML payload defining the OpenAPI schema for the action group
53
+ */
54
+ static fromInline(schema) {
55
+ return new InlineToolSchema(schema);
56
+ }
57
+ /**
58
+ * Creates a Tool Schema from an S3 File
59
+ * @param bucket - the bucket containing the local file containing the OpenAPI schema for the action group
60
+ * @param objectKey - object key in the bucket
61
+ * @param bucketOwnerAccountId - optional The account ID of the Amazon S3 bucket owner. This ID is used for cross-account access to the bucket.
62
+ */
63
+ static fromS3File(bucket, objectKey, bucketOwnerAccountId) {
64
+ return new S3ToolSchema({
65
+ bucketName: bucket.bucketName,
66
+ objectKey: objectKey,
67
+ }, bucketOwnerAccountId);
68
+ }
69
+ /**
70
+ * The S3 location of the tool schema file, if using an S3-based schema.
71
+ * Contains the bucket name and object key information.
72
+ */
73
+ s3File;
74
+ /**
75
+ * The inline tool schema definition as a string, if using an inline schema.
76
+ * Can be in JSON or YAML format.
77
+ */
78
+ inlineSchema;
79
+ /**
80
+ * The account ID of the S3 bucket owner for cross-account access
81
+ */
82
+ bucketOwnerAccountId;
83
+ constructor(s3File, bucketOwnerAccountId, inlineSchema) {
84
+ super();
85
+ this.s3File = s3File;
86
+ this.inlineSchema = inlineSchema;
87
+ this.bucketOwnerAccountId = bucketOwnerAccountId;
88
+ }
89
+ }
90
+ exports.ToolSchema = ToolSchema;
91
+ /**
92
+ * Tool Schema from a local asset.
93
+ *
94
+ * The asset is uploaded to an S3 staging bucket, then moved to its final location
95
+ * by CloudFormation during deployment.
96
+ */
97
+ class AssetToolSchema extends ToolSchema {
98
+ path;
99
+ options;
100
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetToolSchema", version: "2.227.0-alpha.0" };
101
+ asset;
102
+ constructor(path, options = {}) {
103
+ super();
104
+ this.path = path;
105
+ this.options = options;
106
+ }
107
+ /**
108
+ * Binds this tool schema to a construct scope.
109
+ * This method initializes the S3 asset if it hasn't been initialized yet.
110
+ * Must be called before rendering the schema as CFN properties.
111
+ *
112
+ * @param scope - The construct scope to bind to
113
+ */
114
+ bind(scope) {
115
+ // If the same AssetToolSchema is used multiple times, retain only the first instantiation
116
+ if (!this.asset) {
117
+ this.asset = new s3_assets.Asset(scope, 'Schema', {
118
+ path: this.path,
119
+ ...this.options,
120
+ });
121
+ // Note: Permissions will be granted by the Gateway target construct when adding the target
122
+ }
123
+ }
124
+ /**
125
+ * Format as CFN properties
126
+ * @internal This is an internal core function and should not be called directly.
127
+ */
128
+ _render() {
129
+ if (!this.asset) {
130
+ throw new ToolSchemaError('ToolSchema must be bound to a scope before rendering. Call bind() first.', 'Asset not initialized');
131
+ }
132
+ return {
133
+ s3: {
134
+ uri: `s3://${this.asset.s3BucketName}/${this.asset.s3ObjectKey}`,
135
+ },
136
+ };
137
+ }
138
+ grantPermissionsToRole(role) {
139
+ if (!this.asset) {
140
+ throw new ToolSchemaError('ToolSchema must be bound to a scope before rendering. Call bind() first.', 'Asset not initialized');
141
+ }
142
+ this.asset.grantRead(role);
143
+ }
144
+ }
145
+ exports.AssetToolSchema = AssetToolSchema;
146
+ // ------------------------------------------------------
147
+ /**
148
+ * Class to define a Tool Schema from an inline string.
149
+ * The schema can be provided directly as a string in either JSON or YAML format.
150
+ */
151
+ class InlineToolSchema extends ToolSchema {
152
+ schema;
153
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineToolSchema", version: "2.227.0-alpha.0" };
154
+ constructor(schema) {
155
+ super(undefined, undefined, schema);
156
+ this.schema = schema;
157
+ }
158
+ /**
159
+ * @internal This is an internal core function and should not be called directly.
160
+ */
161
+ _render() {
162
+ return {
163
+ inlinePayload: this.schema,
164
+ };
165
+ }
166
+ bind(scope) {
167
+ if (scope) {
168
+ }
169
+ }
170
+ grantPermissionsToRole(_role) {
171
+ }
172
+ }
173
+ exports.InlineToolSchema = InlineToolSchema;
174
+ // ------------------------------------------------------
175
+ // S3 File
176
+ // ------------------------------------------------------
177
+ /**
178
+ * Class to define a Tool Schema from an S3 object.
179
+ */
180
+ class S3ToolSchema extends ToolSchema {
181
+ location;
182
+ bucketOwnerAccountId;
183
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ToolSchema", version: "2.227.0-alpha.0" };
184
+ constructor(location, bucketOwnerAccountId) {
185
+ super(location, bucketOwnerAccountId, undefined);
186
+ this.location = location;
187
+ this.bucketOwnerAccountId = bucketOwnerAccountId;
188
+ }
189
+ /**
190
+ * @internal This is an internal core function and should not be called directly.
191
+ */
192
+ _render() {
193
+ return {
194
+ s3: {
195
+ uri: `s3://${this.location.bucketName}/${this.location.objectKey}`,
196
+ ...(this.bucketOwnerAccountId && { bucketOwnerAccountId: this.bucketOwnerAccountId }),
197
+ },
198
+ };
199
+ }
200
+ bind(scope) {
201
+ if (scope) {
202
+ }
203
+ }
204
+ grantPermissionsToRole(role) {
205
+ aws_iam_1.Grant.addToPrincipal({
206
+ grantee: role,
207
+ actions: ['s3:GetObject'],
208
+ resourceArns: [`arn:${aws_cdk_lib_1.Aws.PARTITION}:s3:::${this.location.bucketName}/${this.location.objectKey}`],
209
+ });
210
+ }
211
+ }
212
+ exports.S3ToolSchema = S3ToolSchema;
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQWtDO0FBQ2xDLGlEQUFtRDtBQUVuRCx1REFBdUQ7QUFFdkQsK0NBQTZDO0FBc0I3Qzs7R0FFRztBQUNILElBQVksb0JBYVg7QUFiRCxXQUFZLG9CQUFvQjtJQUM5QixrQkFBa0I7SUFDbEIseUNBQWlCLENBQUE7SUFDakIsa0JBQWtCO0lBQ2xCLHlDQUFpQixDQUFBO0lBQ2pCLGtCQUFrQjtJQUNsQix5Q0FBaUIsQ0FBQTtJQUNqQixpQkFBaUI7SUFDakIsdUNBQWUsQ0FBQTtJQUNmLG1CQUFtQjtJQUNuQiwyQ0FBbUIsQ0FBQTtJQUNuQixtQkFBbUI7SUFDbkIsMkNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQWJXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBYS9CO0FBMEVEOztHQUVHO0FBQ0gsTUFBTSxlQUFnQixTQUFRLEtBQUs7SUFDWTtJQUE3QyxZQUFZLE9BQWUsRUFBa0IsS0FBYztRQUN6RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFENEIsVUFBSyxHQUFMLEtBQUssQ0FBUztRQUV6RCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0tBQy9CO0NBQ0Y7QUFFRDs7K0VBRStFO0FBQy9FLE1BQXNCLFVBQVcsU0FBUSwwQkFBWTs7SUFDbkQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFZO1FBQ3ZDLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQy9DLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFlLEVBQUUsU0FBaUIsRUFBRSxvQkFBNkI7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QUFDO1FBRHRCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBa0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFTO0tBRTdGO0lBQ0Q7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTztZQUNMLEVBQUUsRUFBRTtnQkFDRixHQUFHLEVBQUUsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQ3RGO1NBQ0YsQ0FBQztLQUNIO0lBRU0sSUFBSSxDQUFDLEtBQWdCO1FBQzFCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDWixDQUFDO0tBRUY7SUFFTSxzQkFBc0IsQ0FBQyxJQUFXO1FBQ3ZDLGVBQUssQ0FBQyxjQUFjLENBQUM7WUFDbkIsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDekIsWUFBWSxFQUFFLENBQUMsT0FBTyxpQkFBRyxDQUFDLFNBQVMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ25HLENBQUMsQ0FBQztLQUNKOztBQTVCSCxvQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBHcmFudCwgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQsIExvY2F0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzX2Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVGFyZ2V0U2NoZW1hIH0gZnJvbSAnLi9iYXNlLXNjaGVtYSc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb29sIFNjaGVtYSBDb25maWd1cmF0aW9uXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQWJzdHJhY3QgaW50ZXJmYWNlIGZvciB0b29sIHNjaGVtYSBjb25maWd1cmF0aW9uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9vbFNjaGVtYUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIHRvb2wgc2NoZW1hIGNvbmZpZ3VyYXRpb24gdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbFNjaGVtYVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRvb2wgc2NoZW1hIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uOiBhbnk7XG59XG5cbi8qKlxuICogU2NoZW1hIGRlZmluaXRpb24gdHlwZXNcbiAqL1xuZXhwb3J0IGVudW0gU2NoZW1hRGVmaW5pdGlvblR5cGUge1xuICAvKiogU3RyaW5nIHR5cGUgKi9cbiAgU1RSSU5HID0gJ3N0cmluZycsXG4gIC8qKiBOdW1iZXIgdHlwZSAqL1xuICBOVU1CRVIgPSAnbnVtYmVyJyxcbiAgLyoqIE9iamVjdCB0eXBlICovXG4gIE9CSkVDVCA9ICdvYmplY3QnLFxuICAvKiogQXJyYXkgdHlwZSAqL1xuICBBUlJBWSA9ICdhcnJheScsXG4gIC8qKiBCb29sZWFuIHR5cGUgKi9cbiAgQk9PTEVBTiA9ICdib29sZWFuJyxcbiAgLyoqIEludGVnZXIgdHlwZSAqL1xuICBJTlRFR0VSID0gJ2ludGVnZXInLFxufVxuXG4vKipcbiAqIFNjaGVtYSBkZWZpbml0aW9uIGZvciB0b29sIGlucHV0L291dHB1dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYURlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHNjaGVtYSBkZWZpbml0aW9uLiBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBzY2hlbWEuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBTY2hlbWFEZWZpbml0aW9uVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBkZXNjcmlwdGlvbiBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHVycG9zZSBhbmQgdXNhZ2Ugb2YgdGhlIHNjaGVtYS5cbiAgICovXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHNjaGVtYSBkZWZpbml0aW9uLiBUaGlzIGRlc2NyaXB0aW9uIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwdXJwb3NlIGFuZCB1c2FnZSBvZiB0aGUgc2NoZW1hLlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGl0ZW1zIGluIHRoZSBzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBhcnJheSB0eXBlcyB0byBkZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXkgZWxlbWVudHMuXG4gICAqL1xuICAvKipcbiAgICogVGhlIGl0ZW1zIGluIHRoZSBzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBhcnJheSB0eXBlcyB0byBkZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXkgZWxlbWVudHMuXG4gICAqIEBkZWZhdWx0IC0gTm8gaXRlbXMgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM/OiBTY2hlbWFEZWZpbml0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgc2NoZW1hIGRlZmluaXRpb24uIFRoZXNlIHByb3BlcnRpZXMgZGVmaW5lIHRoZSBmaWVsZHMgaW4gdGhlIHNjaGVtYS5cbiAgICovXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgc2NoZW1hIGRlZmluaXRpb24uIFRoZXNlIHByb3BlcnRpZXMgZGVmaW5lIHRoZSBmaWVsZHMgaW4gdGhlIHNjaGVtYS5cbiAgICogQGRlZmF1bHQgLSBObyBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgU2NoZW1hRGVmaW5pdGlvbj47XG5cbiAgLyoqXG4gICAqIFRoZSByZXF1aXJlZCBmaWVsZHMgaW4gdGhlIHNjaGVtYSBkZWZpbml0aW9uLiBUaGVzZSBmaWVsZHMgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHVzaW5nIHRoZSBzY2hlbWEuXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVxdWlyZWQgZmllbGRzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRvb2wgZGVmaW5pdGlvbiBmb3IgaW5saW5lIHBheWxvYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdG9vbC4gVGhpcyBuYW1lIGlkZW50aWZpZXMgdGhlIHRvb2wgaW4gdGhlIE1vZGVsIENvbnRleHQgUHJvdG9jb2wuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdG9vbC4gVGhpcyBkZXNjcmlwdGlvbiBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHVycG9zZSBhbmQgdXNhZ2Ugb2YgdGhlIHRvb2wuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgc2NoZW1hIGZvciB0aGUgdG9vbC4gVGhpcyBzY2hlbWEgZGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBpbnB1dCB0aGF0IHRoZSB0b29sIGFjY2VwdHMuXG4gICAqL1xuICByZWFkb25seSBpbnB1dFNjaGVtYTogU2NoZW1hRGVmaW5pdGlvbjtcblxuICAvKipcbiAgICogVGhlIG91dHB1dCBzY2hlbWEgZm9yIHRoZSB0b29sLiBUaGlzIHNjaGVtYSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG91dHB1dCB0aGF0IHRoZSB0b29sIHByb2R1Y2VzLlxuICAgKi9cbiAgLyoqXG4gICAqIFRoZSBvdXRwdXQgc2NoZW1hIGZvciB0aGUgdG9vbC4gVGhpcyBzY2hlbWEgZGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvdXRwdXQgdGhhdCB0aGUgdG9vbCBwcm9kdWNlcy5cbiAgICogQGRlZmF1bHQgLSBObyBvdXRwdXQgc2NoZW1hXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRTY2hlbWE/OiBTY2hlbWFEZWZpbml0aW9uO1xufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGEgVG9vbFNjaGVtYSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG4gKi9cbmNsYXNzIFRvb2xTY2hlbWFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgY2F1c2U/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVG9vbFNjaGVtYUVycm9yJztcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgVE9PTCBTQ0hFTUEgQ0xBU1NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUb29sU2NoZW1hIGV4dGVuZHMgVGFyZ2V0U2NoZW1hIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0b29sIFNjaGVtYSBmcm9tIGEgbG9jYWwgZmlsZS5cbiAgICogQHBhcmFtIHBhdGggLSB0aGUgcGF0aCB0byB0aGUgbG9jYWwgZmlsZSBjb250YWluaW5nIHRoZSBmdW5jdGlvbiBzY2hlbWEgZm9yIHRoZSB0b29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb2NhbEFzc2V0KHBhdGg6IHN0cmluZyk6IFRvb2xTY2hlbWEge1xuICAgIHJldHVybiBuZXcgQXNzZXRUb29sU2NoZW1hKHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUb29sIFNjaGVtYSBmcm9tIGFuIGlubGluZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBzY2hlbWEgLSB0aGUgSlNPTiBvciBZQU1MIHBheWxvYWQgZGVmaW5pbmcgdGhlIE9wZW5BUEkgc2NoZW1hIGZvciB0aGUgYWN0aW9uIGdyb3VwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbmxpbmUoc2NoZW1hOiBUb29sRGVmaW5pdGlvbltdKTogSW5saW5lVG9vbFNjaGVtYSB7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVUb29sU2NoZW1hKHNjaGVtYSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRvb2wgU2NoZW1hIGZyb20gYW4gUzMgRmlsZVxuICAgKiBAcGFyYW0gYnVja2V0IC0gdGhlIGJ1Y2tldCBjb250YWluaW5nIHRoZSBsb2NhbCBmaWxlIGNvbnRhaW5pbmcgdGhlIE9wZW5BUEkgc2NoZW1hIGZvciB0aGUgYWN0aW9uIGdyb3VwXG4gICAqIEBwYXJhbSBvYmplY3RLZXkgLSBvYmplY3Qga2V5IGluIHRoZSBidWNrZXRcbiAgICogQHBhcmFtIGJ1Y2tldE93bmVyQWNjb3VudElkIC0gb3B0aW9uYWwgVGhlIGFjY291bnQgSUQgb2YgdGhlIEFtYXpvbiBTMyBidWNrZXQgb3duZXIuIFRoaXMgSUQgaXMgdXNlZCBmb3IgY3Jvc3MtYWNjb3VudCBhY2Nlc3MgdG8gdGhlIGJ1Y2tldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVMzRmlsZShidWNrZXQ6IElCdWNrZXQsIG9iamVjdEtleTogc3RyaW5nLCBidWNrZXRPd25lckFjY291bnRJZD86IHN0cmluZyk6IFMzVG9vbFNjaGVtYSB7XG4gICAgcmV0dXJuIG5ldyBTM1Rvb2xTY2hlbWEoXG4gICAgICB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IG9iamVjdEtleSxcbiAgICAgIH0sXG4gICAgICBidWNrZXRPd25lckFjY291bnRJZCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBTMyBsb2NhdGlvbiBvZiB0aGUgdG9vbCBzY2hlbWEgZmlsZSwgaWYgdXNpbmcgYW4gUzMtYmFzZWQgc2NoZW1hLlxuICAgKiBDb250YWlucyB0aGUgYnVja2V0IG5hbWUgYW5kIG9iamVjdCBrZXkgaW5mb3JtYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgczNGaWxlPzogTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBpbmxpbmUgdG9vbCBzY2hlbWEgZGVmaW5pdGlvbiBhcyBhIHN0cmluZywgaWYgdXNpbmcgYW4gaW5saW5lIHNjaGVtYS5cbiAgICogQ2FuIGJlIGluIEpTT04gb3IgWUFNTCBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5saW5lU2NoZW1hPzogVG9vbERlZmluaXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGFjY291bnQgSUQgb2YgdGhlIFMzIGJ1Y2tldCBvd25lciBmb3IgY3Jvc3MtYWNjb3VudCBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXRPd25lckFjY291bnRJZD86IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoczNGaWxlPzogTG9jYXRpb24sIGJ1Y2tldE93bmVyQWNjb3VudElkPzogc3RyaW5nLCBpbmxpbmVTY2hlbWE/OiBUb29sRGVmaW5pdGlvbltdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnMzRmlsZSA9IHMzRmlsZTtcbiAgICB0aGlzLmlubGluZVNjaGVtYSA9IGlubGluZVNjaGVtYTtcbiAgICB0aGlzLmJ1Y2tldE93bmVyQWNjb3VudElkID0gYnVja2V0T3duZXJBY2NvdW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGFzIENGTiBwcm9wZXJ0aWVzXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9yZW5kZXIoKTogYW55O1xufVxuXG4vKipcbiAqIFRvb2wgU2NoZW1hIGZyb20gYSBsb2NhbCBhc3NldC5cbiAqXG4gKiBUaGUgYXNzZXQgaXMgdXBsb2FkZWQgdG8gYW4gUzMgc3RhZ2luZyBidWNrZXQsIHRoZW4gbW92ZWQgdG8gaXRzIGZpbmFsIGxvY2F0aW9uXG4gKiBieSBDbG91ZEZvcm1hdGlvbiBkdXJpbmcgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0VG9vbFNjaGVtYSBleHRlbmRzIFRvb2xTY2hlbWEge1xuICBwcml2YXRlIGFzc2V0PzogczNfYXNzZXRzLkFzc2V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcGF0aDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgdGhpcyB0b29sIHNjaGVtYSB0byBhIGNvbnN0cnVjdCBzY29wZS5cbiAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFMzIGFzc2V0IGlmIGl0IGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldC5cbiAgICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHJlbmRlcmluZyB0aGUgc2NoZW1hIGFzIENGTiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIHRvIGJpbmQgdG9cbiAgICovXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBJZiB0aGUgc2FtZSBBc3NldFRvb2xTY2hlbWEgaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgcmV0YWluIG9ubHkgdGhlIGZpcnN0IGluc3RhbnRpYXRpb25cbiAgICBpZiAoIXRoaXMuYXNzZXQpIHtcbiAgICAgIHRoaXMuYXNzZXQgPSBuZXcgczNfYXNzZXRzLkFzc2V0KHNjb3BlLCAnU2NoZW1hJywge1xuICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgLy8gTm90ZTogUGVybWlzc2lvbnMgd2lsbCBiZSBncmFudGVkIGJ5IHRoZSBHYXRld2F5IHRhcmdldCBjb25zdHJ1Y3Qgd2hlbiBhZGRpbmcgdGhlIHRhcmdldFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYXMgQ0ZOIHByb3BlcnRpZXNcbiAgICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWMgX3JlbmRlcigpOiBhbnkge1xuICAgIGlmICghdGhpcy5hc3NldCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xTY2hlbWFFcnJvcihcbiAgICAgICAgJ1Rvb2xTY2hlbWEgbXVzdCBiZSBib3VuZCB0byBhIHNjb3BlIGJlZm9yZSByZW5kZXJpbmcuIENhbGwgYmluZCgpIGZpcnN0LicsXG4gICAgICAgICdBc3NldCBub3QgaW5pdGlhbGl6ZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgczM6IHtcbiAgICAgICAgdXJpOiBgczM6Ly8ke3RoaXMuYXNzZXQuczNCdWNrZXROYW1lfS8ke3RoaXMuYXNzZXQuczNPYmplY3RLZXl9YCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBncmFudFBlcm1pc3Npb25zVG9Sb2xlKHJvbGU6IElSb2xlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFzc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbFNjaGVtYUVycm9yKFxuICAgICAgICAnVG9vbFNjaGVtYSBtdXN0IGJlIGJvdW5kIHRvIGEgc2NvcGUgYmVmb3JlIHJlbmRlcmluZy4gQ2FsbCBiaW5kKCkgZmlyc3QuJyxcbiAgICAgICAgJ0Fzc2V0IG5vdCBpbml0aWFsaXplZCcsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmFzc2V0LmdyYW50UmVhZChyb2xlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogQ2xhc3MgdG8gZGVmaW5lIGEgVG9vbCBTY2hlbWEgZnJvbSBhbiBpbmxpbmUgc3RyaW5nLlxuICogVGhlIHNjaGVtYSBjYW4gYmUgcHJvdmlkZWQgZGlyZWN0bHkgYXMgYSBzdHJpbmcgaW4gZWl0aGVyIEpTT04gb3IgWUFNTCBmb3JtYXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmxpbmVUb29sU2NoZW1hIGV4dGVuZHMgVG9vbFNjaGVtYSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBUb29sRGVmaW5pdGlvbltdKSB7XG4gICAgc3VwZXIodW5kZWZpbmVkLCB1bmRlZmluZWQsIHNjaGVtYSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWMgX3JlbmRlcigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmxpbmVQYXlsb2FkOiB0aGlzLnNjaGVtYSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChzY29wZSkge1xuICAgIH1cbiAgICAvLyBOby1vcFxuICB9XG5cbiAgcHVibGljIGdyYW50UGVybWlzc2lvbnNUb1JvbGUoX3JvbGU6IElSb2xlKTogdm9pZCB7XG4gICAgLy8gTm8tb3AgLSBJbmxpbmVUb29sU2NoZW1hIGRvZXNuJ3QgbmVlZCBwZXJtaXNzaW9uc1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUzMgRmlsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIENsYXNzIHRvIGRlZmluZSBhIFRvb2wgU2NoZW1hIGZyb20gYW4gUzMgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgUzNUb29sU2NoZW1hIGV4dGVuZHMgVG9vbFNjaGVtYSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb246IExvY2F0aW9uLCBwdWJsaWMgcmVhZG9ubHkgYnVja2V0T3duZXJBY2NvdW50SWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihsb2NhdGlvbiwgYnVja2V0T3duZXJBY2NvdW50SWQsIHVuZGVmaW5lZCk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljIF9yZW5kZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgczM6IHtcbiAgICAgICAgdXJpOiBgczM6Ly8ke3RoaXMubG9jYXRpb24uYnVja2V0TmFtZX0vJHt0aGlzLmxvY2F0aW9uLm9iamVjdEtleX1gLFxuICAgICAgICAuLi4odGhpcy5idWNrZXRPd25lckFjY291bnRJZCAmJiB7IGJ1Y2tldE93bmVyQWNjb3VudElkOiB0aGlzLmJ1Y2tldE93bmVyQWNjb3VudElkIH0pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChzY29wZSkge1xuICAgIH1cbiAgICAvLyBOby1vcFxuICB9XG5cbiAgcHVibGljIGdyYW50UGVybWlzc2lvbnNUb1JvbGUocm9sZTogSVJvbGUpOiB2b2lkIHtcbiAgICBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiByb2xlLFxuICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnXSxcbiAgICAgIHJlc291cmNlQXJuczogW2Bhcm46JHtBd3MuUEFSVElUSU9OfTpzMzo6OiR7dGhpcy5sb2NhdGlvbi5idWNrZXROYW1lfS8ke3RoaXMubG9jYXRpb24ub2JqZWN0S2V5fWBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,153 @@
1
+ import { Resource, IResource } from 'aws-cdk-lib';
2
+ import * as iam from 'aws-cdk-lib/aws-iam';
3
+ import { IGateway } from '../gateway-base';
4
+ import { ICredentialProviderConfig } from '../outbound-auth/credential-provider';
5
+ /******************************************************************************
6
+ * ENUM
7
+ *****************************************************************************/
8
+ /**
9
+ * Protocol types supported by gateway targets
10
+ */
11
+ export declare enum GatewayTargetProtocolType {
12
+ /** Model Context Protocol type */
13
+ MCP = "MCP"
14
+ }
15
+ /**
16
+ * MCP target types
17
+ */
18
+ export declare enum McpTargetType {
19
+ /** OpenAPI schema target type */
20
+ OPENAPI_SCHEMA = "OPENAPI_SCHEMA",
21
+ /** Smithy model target type */
22
+ SMITHY_MODEL = "SMITHY_MODEL",
23
+ /** Lambda function target type */
24
+ LAMBDA = "LAMBDA",
25
+ /** MCP server target type */
26
+ MCP_SERVER = "MCP_SERVER"
27
+ }
28
+ /******************************************************************************
29
+ * Interface
30
+ *****************************************************************************/
31
+ /**
32
+ * Interface for GatewayTarget resources
33
+ *
34
+ * Represents a target that hosts tools for the gateway.
35
+ * Targets can be Lambda functions, OpenAPI schemas, or Smithy models.
36
+ */
37
+ export interface IGatewayTarget extends IResource {
38
+ /**
39
+ * The ARN of the gateway target resource
40
+ * @attribute
41
+ */
42
+ readonly targetArn: string;
43
+ /**
44
+ * The id of the gateway target
45
+ * @attribute
46
+ */
47
+ readonly targetId: string;
48
+ /**
49
+ * The name of the gateway target
50
+ */
51
+ readonly name: string;
52
+ /**
53
+ * The description of the gateway target
54
+ */
55
+ readonly description?: string;
56
+ /**
57
+ * The gateway that this target belongs to
58
+ */
59
+ readonly gateway: IGateway;
60
+ /**
61
+ * The target protocol
62
+ */
63
+ readonly targetProtocolType: GatewayTargetProtocolType;
64
+ /**
65
+ * The credential provider configuration for the target
66
+ */
67
+ readonly credentialProviderConfigurations: ICredentialProviderConfig[] | undefined;
68
+ /**
69
+ * The status of the gateway target
70
+ * @attribute
71
+ */
72
+ readonly status?: string;
73
+ /**
74
+ * The status reasons for the gateway target
75
+ * @attribute
76
+ */
77
+ readonly statusReasons?: string[];
78
+ /**
79
+ * Timestamp when the gateway target was created
80
+ * @attribute
81
+ */
82
+ readonly createdAt?: string;
83
+ /**
84
+ * Timestamp when the gateway target was last updated
85
+ * @attribute
86
+ */
87
+ readonly updatedAt?: string;
88
+ /**
89
+ * Grants IAM actions to the IAM Principal
90
+ */
91
+ grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
92
+ /**
93
+ * Grants `Get` and `List` actions on the Gateway Target
94
+ */
95
+ grantRead(grantee: iam.IGrantable): iam.Grant;
96
+ /**
97
+ * Grants `Create`, `Update`, and `Delete` actions on the Gateway Target
98
+ */
99
+ grantManage(grantee: iam.IGrantable): iam.Grant;
100
+ }
101
+ /**
102
+ * Interface for MCP gateway targets
103
+ *
104
+ * Extends the base gateway target interface with MCP-specific properties.
105
+ * MCP targets expose tools using the Model Context Protocol.
106
+ */
107
+ export interface IMcpGatewayTarget extends IGatewayTarget {
108
+ /**
109
+ * The type of target (Lambda, OpenAPI, or Smithy)
110
+ */
111
+ readonly targetType: McpTargetType;
112
+ }
113
+ /******************************************************************************
114
+ * Base Class
115
+ *****************************************************************************/
116
+ /**
117
+ * Base class for gateway target implementations
118
+ *
119
+ * Provides common functionality for all gateway target types including
120
+ * permission management and property definitions.
121
+ */
122
+ export declare abstract class GatewayTargetBase extends Resource implements IGatewayTarget {
123
+ abstract readonly targetArn: string;
124
+ abstract readonly targetId: string;
125
+ abstract readonly name: string;
126
+ abstract readonly description?: string;
127
+ abstract readonly gateway: IGateway;
128
+ abstract readonly credentialProviderConfigurations: ICredentialProviderConfig[] | undefined;
129
+ abstract readonly status?: string;
130
+ abstract readonly statusReasons?: string[];
131
+ abstract readonly createdAt?: string;
132
+ abstract readonly updatedAt?: string;
133
+ abstract readonly targetProtocolType: GatewayTargetProtocolType;
134
+ /**
135
+ * Grants IAM actions to the IAM Principal
136
+ *
137
+ * @param grantee The principal to grant permissions to
138
+ * @param actions The IAM actions to grant
139
+ */
140
+ grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
141
+ /**
142
+ * Grants `Get` and `List` actions on the Gateway Target
143
+ *
144
+ * @param grantee The principal to grant read permissions to
145
+ */
146
+ grantRead(grantee: iam.IGrantable): iam.Grant;
147
+ /**
148
+ * Grants `Create`, `Update`, and `Delete` actions on the Gateway Target
149
+ *
150
+ * @param grantee The principal to grant manage permissions to
151
+ */
152
+ grantManage(grantee: iam.IGrantable): iam.Grant;
153
+ }