@aws-cdk/aws-bedrock-agentcore-alpha 2.226.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.
- package/.jsii +14021 -5792
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +343 -1
- package/README.md +880 -19
- package/agentcore/gateway/gateway-base.d.ts +292 -0
- package/agentcore/gateway/gateway-base.js +171 -0
- package/agentcore/gateway/gateway.d.ts +383 -0
- package/agentcore/gateway/gateway.js +521 -0
- package/agentcore/gateway/inbound-auth/authorizer.d.ts +121 -0
- package/agentcore/gateway/inbound-auth/authorizer.js +133 -0
- package/agentcore/gateway/outbound-auth/api-key.d.ts +117 -0
- package/agentcore/gateway/outbound-auth/api-key.js +141 -0
- package/agentcore/gateway/outbound-auth/credential-provider.d.ts +70 -0
- package/agentcore/gateway/outbound-auth/credential-provider.js +80 -0
- package/agentcore/gateway/outbound-auth/iam-role.d.ts +28 -0
- package/agentcore/gateway/outbound-auth/iam-role.js +40 -0
- package/agentcore/gateway/outbound-auth/oauth.d.ts +80 -0
- package/agentcore/gateway/outbound-auth/oauth.js +76 -0
- package/agentcore/gateway/perms.d.ts +75 -0
- package/agentcore/gateway/perms.js +112 -0
- package/agentcore/gateway/protocol.d.ts +121 -0
- package/agentcore/gateway/protocol.js +120 -0
- package/agentcore/gateway/targets/schema/api-schema.d.ts +110 -0
- package/agentcore/gateway/targets/schema/api-schema.js +207 -0
- package/agentcore/gateway/targets/schema/base-schema.d.ts +24 -0
- package/agentcore/gateway/targets/schema/base-schema.js +12 -0
- package/agentcore/gateway/targets/schema/tool-schema.d.ts +198 -0
- package/agentcore/gateway/targets/schema/tool-schema.js +213 -0
- package/agentcore/gateway/targets/target-base.d.ts +153 -0
- package/agentcore/gateway/targets/target-base.js +81 -0
- package/agentcore/gateway/targets/target-configuration.d.ts +230 -0
- package/agentcore/gateway/targets/target-configuration.js +407 -0
- package/agentcore/gateway/targets/target.d.ts +345 -0
- package/agentcore/gateway/targets/target.js +444 -0
- package/agentcore/gateway/validation-helpers.d.ts +65 -0
- package/agentcore/gateway/validation-helpers.js +333 -0
- package/agentcore/index.d.ts +15 -0
- package/agentcore/index.js +32 -1
- package/agentcore/memory/memory-strategy.js +1 -1
- package/agentcore/memory/memory.js +6 -3
- package/agentcore/memory/strategies/managed-strategy.js +1 -1
- package/agentcore/memory/strategies/self-managed-strategy.js +1 -1
- package/agentcore/network/network-configuration.js +4 -4
- package/agentcore/runtime/runtime-artifact.js +1 -1
- package/agentcore/runtime/runtime-authorizer-configuration.d.ts +1 -1
- package/agentcore/runtime/runtime-authorizer-configuration.js +6 -5
- package/agentcore/runtime/runtime-base.js +1 -1
- package/agentcore/runtime/runtime-endpoint-base.js +1 -1
- package/agentcore/runtime/runtime-endpoint.js +1 -1
- package/agentcore/runtime/runtime.js +1 -1
- package/agentcore/tools/browser.js +2 -2
- package/agentcore/tools/code-interpreter.js +2 -2
- package/package.json +9 -9
- package/rosetta/default.ts-fixture +15 -6
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { IResource, Resource } from 'aws-cdk-lib';
|
|
2
|
+
import { DimensionsMap, Metric, MetricOptions } from 'aws-cdk-lib/aws-cloudwatch';
|
|
3
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
5
|
+
import { Construct } from 'constructs';
|
|
6
|
+
import { IGatewayAuthorizerConfig } from './inbound-auth/authorizer';
|
|
7
|
+
import { IGatewayProtocolConfig } from './protocol';
|
|
8
|
+
/******************************************************************************
|
|
9
|
+
* Enums
|
|
10
|
+
*****************************************************************************/
|
|
11
|
+
/**
|
|
12
|
+
* Exception levels for gateway
|
|
13
|
+
*/
|
|
14
|
+
export declare enum GatewayExceptionLevel {
|
|
15
|
+
/**
|
|
16
|
+
* Debug mode for granular exception messages. Allows the return of
|
|
17
|
+
* specific error messages related to the gateway target configuration
|
|
18
|
+
* to help you with debugging.
|
|
19
|
+
*/
|
|
20
|
+
DEBUG = "DEBUG"
|
|
21
|
+
}
|
|
22
|
+
/******************************************************************************
|
|
23
|
+
* Interface
|
|
24
|
+
*****************************************************************************/
|
|
25
|
+
/**
|
|
26
|
+
* Interface for Gateway resources
|
|
27
|
+
*/
|
|
28
|
+
export interface IGateway extends IResource {
|
|
29
|
+
/**
|
|
30
|
+
* The ARN of the gateway resource
|
|
31
|
+
* @attribute
|
|
32
|
+
*/
|
|
33
|
+
readonly gatewayArn: string;
|
|
34
|
+
/**
|
|
35
|
+
* The id of the gateway
|
|
36
|
+
* @attribute
|
|
37
|
+
*/
|
|
38
|
+
readonly gatewayId: string;
|
|
39
|
+
/**
|
|
40
|
+
* The name of the gateway
|
|
41
|
+
*/
|
|
42
|
+
readonly name: string;
|
|
43
|
+
/**
|
|
44
|
+
* The IAM role that provides permissions for the gateway to access AWS services
|
|
45
|
+
*/
|
|
46
|
+
readonly role: iam.IRole;
|
|
47
|
+
/**
|
|
48
|
+
* The description of the gateway
|
|
49
|
+
*/
|
|
50
|
+
readonly description?: string;
|
|
51
|
+
/**
|
|
52
|
+
* The protocol configuration for the gateway
|
|
53
|
+
*/
|
|
54
|
+
readonly protocolConfiguration: IGatewayProtocolConfig;
|
|
55
|
+
/**
|
|
56
|
+
* The authorizer configuration for the gateway
|
|
57
|
+
*/
|
|
58
|
+
readonly authorizerConfiguration: IGatewayAuthorizerConfig;
|
|
59
|
+
/**
|
|
60
|
+
* The exception level for the gateway
|
|
61
|
+
*/
|
|
62
|
+
readonly exceptionLevel?: GatewayExceptionLevel;
|
|
63
|
+
/**
|
|
64
|
+
* The KMS key used for encryption
|
|
65
|
+
*/
|
|
66
|
+
readonly kmsKey?: kms.IKey;
|
|
67
|
+
/**
|
|
68
|
+
* The URL endpoint for the gateway
|
|
69
|
+
* @attribute
|
|
70
|
+
*/
|
|
71
|
+
readonly gatewayUrl?: string;
|
|
72
|
+
/**
|
|
73
|
+
* The status of the gateway
|
|
74
|
+
* @attribute
|
|
75
|
+
*/
|
|
76
|
+
readonly status?: string;
|
|
77
|
+
/**
|
|
78
|
+
* The status reasons for the gateway.
|
|
79
|
+
* @attribute
|
|
80
|
+
*/
|
|
81
|
+
readonly statusReason?: string[];
|
|
82
|
+
/**
|
|
83
|
+
* Timestamp when the gateway was created
|
|
84
|
+
* @attribute
|
|
85
|
+
*/
|
|
86
|
+
readonly createdAt?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Timestamp when the gateway was last updated
|
|
89
|
+
* @attribute
|
|
90
|
+
*/
|
|
91
|
+
readonly updatedAt?: string;
|
|
92
|
+
/**
|
|
93
|
+
* Grants IAM actions to the IAM Principal
|
|
94
|
+
*/
|
|
95
|
+
grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
|
|
96
|
+
/**
|
|
97
|
+
* Grants `Get` and `List` actions on the Gateway
|
|
98
|
+
*/
|
|
99
|
+
grantRead(grantee: iam.IGrantable): iam.Grant;
|
|
100
|
+
/**
|
|
101
|
+
* Grants `Create`, `Update`, and `Delete` actions on the Gateway
|
|
102
|
+
*/
|
|
103
|
+
grantManage(grantee: iam.IGrantable): iam.Grant;
|
|
104
|
+
/**
|
|
105
|
+
* Grants permission to invoke this Gateway
|
|
106
|
+
*/
|
|
107
|
+
grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
108
|
+
/**
|
|
109
|
+
* Return the given named metric for this gateway.
|
|
110
|
+
*
|
|
111
|
+
* @param metricName The name of the metric
|
|
112
|
+
* @param dimensions Additional dimensions for the metric
|
|
113
|
+
* @param props Optional metric configuration
|
|
114
|
+
*/
|
|
115
|
+
metric(metricName: string, dimensions: DimensionsMap, props?: MetricOptions): Metric;
|
|
116
|
+
/**
|
|
117
|
+
* Return a metric containing the total number of invocations for this gateway.
|
|
118
|
+
*
|
|
119
|
+
* This metric tracks all successful invocations of the gateway.
|
|
120
|
+
*
|
|
121
|
+
* @param props Optional metric configuration
|
|
122
|
+
* @default - Sum statistic over 5 minutes
|
|
123
|
+
*/
|
|
124
|
+
metricInvocations(props?: MetricOptions): Metric;
|
|
125
|
+
/**
|
|
126
|
+
* Return a metric containing the number of throttled requests (429 status code) for this gateway.
|
|
127
|
+
*
|
|
128
|
+
* This metric helps identify when the gateway is rate limiting requests.
|
|
129
|
+
*
|
|
130
|
+
* @param props Optional metric configuration
|
|
131
|
+
* @default - Sum statistic over 5 minutes
|
|
132
|
+
*/
|
|
133
|
+
metricThrottles(props?: MetricOptions): Metric;
|
|
134
|
+
/**
|
|
135
|
+
* Return a metric containing the number of system errors (5xx status code) for this gateway.
|
|
136
|
+
*
|
|
137
|
+
* This metric tracks internal server errors and system failures.
|
|
138
|
+
*
|
|
139
|
+
* @param props Optional metric configuration
|
|
140
|
+
* @default - Sum statistic over 5 minutes
|
|
141
|
+
*/
|
|
142
|
+
metricSystemErrors(props?: MetricOptions): Metric;
|
|
143
|
+
/**
|
|
144
|
+
* Return a metric containing the number of user errors (4xx status code, excluding 429) for this gateway.
|
|
145
|
+
*
|
|
146
|
+
* This metric tracks client errors like bad requests, unauthorized access, etc.
|
|
147
|
+
*
|
|
148
|
+
* @param props Optional metric configuration
|
|
149
|
+
* @default - Sum statistic over 5 minutes
|
|
150
|
+
*/
|
|
151
|
+
metricUserErrors(props?: MetricOptions): Metric;
|
|
152
|
+
/**
|
|
153
|
+
* Return a metric measuring the latency of requests for this gateway.
|
|
154
|
+
*
|
|
155
|
+
* The latency metric represents the time elapsed between when the service receives
|
|
156
|
+
* the request and when it begins sending the first response token.
|
|
157
|
+
*
|
|
158
|
+
* @param props Optional metric configuration
|
|
159
|
+
* @default - Average statistic over 5 minutes
|
|
160
|
+
*/
|
|
161
|
+
metricLatency(props?: MetricOptions): Metric;
|
|
162
|
+
/**
|
|
163
|
+
* Return a metric measuring the duration of requests for this gateway.
|
|
164
|
+
*
|
|
165
|
+
* The duration metric represents the total time elapsed between receiving the request
|
|
166
|
+
* and sending the final response token, representing complete end-to-end processing time.
|
|
167
|
+
*
|
|
168
|
+
* @param props Optional metric configuration
|
|
169
|
+
* @default - Average statistic over 5 minutes
|
|
170
|
+
*/
|
|
171
|
+
metricDuration(props?: MetricOptions): Metric;
|
|
172
|
+
/**
|
|
173
|
+
* Return a metric measuring the target execution time for this gateway.
|
|
174
|
+
*
|
|
175
|
+
* This metric helps determine the contribution of the target (Lambda, OpenAPI, etc.)
|
|
176
|
+
* to the total latency.
|
|
177
|
+
*
|
|
178
|
+
* @param props Optional metric configuration
|
|
179
|
+
* @default - Average statistic over 5 minutes
|
|
180
|
+
*/
|
|
181
|
+
metricTargetExecutionTime(props?: MetricOptions): Metric;
|
|
182
|
+
/**
|
|
183
|
+
* Return a metric containing the number of requests served by each target type for this gateway.
|
|
184
|
+
*
|
|
185
|
+
* @param targetType The type of target (e.g., 'Lambda', 'OpenAPI', 'Smithy')
|
|
186
|
+
* @param props Optional metric configuration
|
|
187
|
+
* @default - Sum statistic over 5 minutes
|
|
188
|
+
*/
|
|
189
|
+
metricTargetType(targetType: string, props?: MetricOptions): Metric;
|
|
190
|
+
}
|
|
191
|
+
/******************************************************************************
|
|
192
|
+
* Base Class
|
|
193
|
+
*****************************************************************************/
|
|
194
|
+
export declare abstract class GatewayBase extends Resource implements IGateway {
|
|
195
|
+
abstract readonly gatewayArn: string;
|
|
196
|
+
abstract readonly gatewayId: string;
|
|
197
|
+
abstract readonly name: string;
|
|
198
|
+
abstract readonly description?: string;
|
|
199
|
+
abstract readonly protocolConfiguration: IGatewayProtocolConfig;
|
|
200
|
+
abstract readonly authorizerConfiguration: IGatewayAuthorizerConfig;
|
|
201
|
+
abstract readonly exceptionLevel?: GatewayExceptionLevel;
|
|
202
|
+
abstract readonly kmsKey?: kms.IKey;
|
|
203
|
+
abstract readonly role: iam.IRole;
|
|
204
|
+
abstract readonly gatewayUrl?: string;
|
|
205
|
+
abstract readonly status?: string;
|
|
206
|
+
abstract readonly statusReason?: string[];
|
|
207
|
+
abstract readonly createdAt?: string;
|
|
208
|
+
abstract readonly updatedAt?: string;
|
|
209
|
+
constructor(scope: Construct, id: string);
|
|
210
|
+
/**
|
|
211
|
+
* Grants IAM actions to the IAM Principal
|
|
212
|
+
*
|
|
213
|
+
* @param grantee The principal to grant permissions to
|
|
214
|
+
* @param actions The actions to grant
|
|
215
|
+
*/
|
|
216
|
+
grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
|
|
217
|
+
/**
|
|
218
|
+
* Grants `Get` and `List` actions on the Gateway
|
|
219
|
+
*
|
|
220
|
+
* @param grantee The principal to grant read permissions to
|
|
221
|
+
*/
|
|
222
|
+
grantRead(grantee: iam.IGrantable): iam.Grant;
|
|
223
|
+
/**
|
|
224
|
+
* Grants `Create`, `Update`, and `Delete` actions on the Gateway
|
|
225
|
+
*
|
|
226
|
+
* @param grantee The principal to grant manage permissions to
|
|
227
|
+
*/
|
|
228
|
+
grantManage(grantee: iam.IGrantable): iam.Grant;
|
|
229
|
+
/**
|
|
230
|
+
* Grants permission to invoke this Gateway
|
|
231
|
+
*
|
|
232
|
+
* @param grantee The principal to grant invoke permissions to
|
|
233
|
+
*/
|
|
234
|
+
grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
235
|
+
/**
|
|
236
|
+
* Return the given named metric for this gateway.
|
|
237
|
+
*
|
|
238
|
+
* By default, the metric will be calculated as a sum over a period of 5 minutes.
|
|
239
|
+
* You can customize this by using the `statistic` and `period` properties.
|
|
240
|
+
*
|
|
241
|
+
* @param metricName The name of the metric
|
|
242
|
+
* @param dimensions Additional dimensions for the metric
|
|
243
|
+
* @param props Optional metric configuration
|
|
244
|
+
*/
|
|
245
|
+
metric(metricName: string, dimensions: DimensionsMap, props?: MetricOptions): Metric;
|
|
246
|
+
/**
|
|
247
|
+
* Return a metric containing the total number of invocations for this gateway.
|
|
248
|
+
*/
|
|
249
|
+
metricInvocations(props?: MetricOptions): Metric;
|
|
250
|
+
/**
|
|
251
|
+
* Return a metric containing the number of throttled requests (429 status code) for this gateway.
|
|
252
|
+
*/
|
|
253
|
+
metricThrottles(props?: MetricOptions): Metric;
|
|
254
|
+
/**
|
|
255
|
+
* Return a metric containing the number of system errors (5xx status code) for this gateway.
|
|
256
|
+
*/
|
|
257
|
+
metricSystemErrors(props?: MetricOptions): Metric;
|
|
258
|
+
/**
|
|
259
|
+
* Return a metric containing the number of user errors (4xx status code, excluding 429) for this gateway.
|
|
260
|
+
*/
|
|
261
|
+
metricUserErrors(props?: MetricOptions): Metric;
|
|
262
|
+
/**
|
|
263
|
+
* Return a metric measuring the latency of requests for this gateway.
|
|
264
|
+
*
|
|
265
|
+
* The latency metric represents the time elapsed between when the service receives
|
|
266
|
+
* the request and when it begins sending the first response token.
|
|
267
|
+
*/
|
|
268
|
+
metricLatency(props?: MetricOptions): Metric;
|
|
269
|
+
/**
|
|
270
|
+
* Return a metric measuring the duration of requests for this gateway.
|
|
271
|
+
*
|
|
272
|
+
* The duration metric represents the total time elapsed between receiving the request
|
|
273
|
+
* and sending the final response token, representing complete end-to-end processing time.
|
|
274
|
+
*/
|
|
275
|
+
metricDuration(props?: MetricOptions): Metric;
|
|
276
|
+
/**
|
|
277
|
+
* Return a metric measuring the target execution time for this gateway.
|
|
278
|
+
*
|
|
279
|
+
* This metric helps determine the contribution of the target (Lambda, OpenAPI, etc.)
|
|
280
|
+
* to the total latency.
|
|
281
|
+
*/
|
|
282
|
+
metricTargetExecutionTime(props?: MetricOptions): Metric;
|
|
283
|
+
/**
|
|
284
|
+
* Return a metric containing the number of requests served by each target type for this gateway.
|
|
285
|
+
*/
|
|
286
|
+
metricTargetType(targetType: string, props?: MetricOptions): Metric;
|
|
287
|
+
/**
|
|
288
|
+
* Internal method to create a metric.
|
|
289
|
+
* @internal
|
|
290
|
+
*/
|
|
291
|
+
private configureMetric;
|
|
292
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GatewayBase = exports.GatewayExceptionLevel = 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_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
7
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
8
|
+
const perms_1 = require("./perms");
|
|
9
|
+
/******************************************************************************
|
|
10
|
+
* Enums
|
|
11
|
+
*****************************************************************************/
|
|
12
|
+
/**
|
|
13
|
+
* Exception levels for gateway
|
|
14
|
+
*/
|
|
15
|
+
var GatewayExceptionLevel;
|
|
16
|
+
(function (GatewayExceptionLevel) {
|
|
17
|
+
/**
|
|
18
|
+
* Debug mode for granular exception messages. Allows the return of
|
|
19
|
+
* specific error messages related to the gateway target configuration
|
|
20
|
+
* to help you with debugging.
|
|
21
|
+
*/
|
|
22
|
+
GatewayExceptionLevel["DEBUG"] = "DEBUG";
|
|
23
|
+
})(GatewayExceptionLevel || (exports.GatewayExceptionLevel = GatewayExceptionLevel = {}));
|
|
24
|
+
/******************************************************************************
|
|
25
|
+
* Base Class
|
|
26
|
+
*****************************************************************************/
|
|
27
|
+
class GatewayBase extends aws_cdk_lib_1.Resource {
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayBase", version: "2.227.0-alpha.0" };
|
|
29
|
+
constructor(scope, id) {
|
|
30
|
+
super(scope, id);
|
|
31
|
+
}
|
|
32
|
+
// ------------------------------------------------------
|
|
33
|
+
// Permission Methods
|
|
34
|
+
// ------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Grants IAM actions to the IAM Principal
|
|
37
|
+
*
|
|
38
|
+
* @param grantee The principal to grant permissions to
|
|
39
|
+
* @param actions The actions to grant
|
|
40
|
+
*/
|
|
41
|
+
grant(grantee, ...actions) {
|
|
42
|
+
return iam.Grant.addToPrincipal({
|
|
43
|
+
grantee: grantee,
|
|
44
|
+
resourceArns: [this.gatewayArn],
|
|
45
|
+
actions: actions,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Grants `Get` and `List` actions on the Gateway
|
|
50
|
+
*
|
|
51
|
+
* @param grantee The principal to grant read permissions to
|
|
52
|
+
*/
|
|
53
|
+
grantRead(grantee) {
|
|
54
|
+
const resourceSpecificGrant = this.grant(grantee, ...perms_1.GatewayPerms.GET_PERMS);
|
|
55
|
+
const allResourceGrant = iam.Grant.addToPrincipal({
|
|
56
|
+
grantee: grantee,
|
|
57
|
+
resourceArns: ['*'],
|
|
58
|
+
actions: [...perms_1.GatewayPerms.LIST_PERMS],
|
|
59
|
+
});
|
|
60
|
+
// Return combined grant
|
|
61
|
+
return resourceSpecificGrant.combine(allResourceGrant);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Grants `Create`, `Update`, and `Delete` actions on the Gateway
|
|
65
|
+
*
|
|
66
|
+
* @param grantee The principal to grant manage permissions to
|
|
67
|
+
*/
|
|
68
|
+
grantManage(grantee) {
|
|
69
|
+
return this.grant(grantee, ...perms_1.GatewayPerms.MANAGE_PERMS);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Grants permission to invoke this Gateway
|
|
73
|
+
*
|
|
74
|
+
* @param grantee The principal to grant invoke permissions to
|
|
75
|
+
*/
|
|
76
|
+
grantInvoke(grantee) {
|
|
77
|
+
return this.grant(grantee, ...perms_1.GatewayPerms.INVOKE_PERMS);
|
|
78
|
+
}
|
|
79
|
+
// ------------------------------------------------------
|
|
80
|
+
// Metric Methods
|
|
81
|
+
// ------------------------------------------------------
|
|
82
|
+
/**
|
|
83
|
+
* Return the given named metric for this gateway.
|
|
84
|
+
*
|
|
85
|
+
* By default, the metric will be calculated as a sum over a period of 5 minutes.
|
|
86
|
+
* You can customize this by using the `statistic` and `period` properties.
|
|
87
|
+
*
|
|
88
|
+
* @param metricName The name of the metric
|
|
89
|
+
* @param dimensions Additional dimensions for the metric
|
|
90
|
+
* @param props Optional metric configuration
|
|
91
|
+
*/
|
|
92
|
+
metric(metricName, dimensions, props) {
|
|
93
|
+
const metricProps = {
|
|
94
|
+
namespace: 'AWS/Bedrock-AgentCore',
|
|
95
|
+
metricName,
|
|
96
|
+
dimensionsMap: { ...dimensions, Resource: this.gatewayArn },
|
|
97
|
+
...props,
|
|
98
|
+
};
|
|
99
|
+
return this.configureMetric(metricProps);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Return a metric containing the total number of invocations for this gateway.
|
|
103
|
+
*/
|
|
104
|
+
metricInvocations(props) {
|
|
105
|
+
return this.metric('Invocations', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Return a metric containing the number of throttled requests (429 status code) for this gateway.
|
|
109
|
+
*/
|
|
110
|
+
metricThrottles(props) {
|
|
111
|
+
return this.metric('Throttles', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Return a metric containing the number of system errors (5xx status code) for this gateway.
|
|
115
|
+
*/
|
|
116
|
+
metricSystemErrors(props) {
|
|
117
|
+
return this.metric('SystemErrors', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Return a metric containing the number of user errors (4xx status code, excluding 429) for this gateway.
|
|
121
|
+
*/
|
|
122
|
+
metricUserErrors(props) {
|
|
123
|
+
return this.metric('UserErrors', {}, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Return a metric measuring the latency of requests for this gateway.
|
|
127
|
+
*
|
|
128
|
+
* The latency metric represents the time elapsed between when the service receives
|
|
129
|
+
* the request and when it begins sending the first response token.
|
|
130
|
+
*/
|
|
131
|
+
metricLatency(props) {
|
|
132
|
+
return this.metric('Latency', {}, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Return a metric measuring the duration of requests for this gateway.
|
|
136
|
+
*
|
|
137
|
+
* The duration metric represents the total time elapsed between receiving the request
|
|
138
|
+
* and sending the final response token, representing complete end-to-end processing time.
|
|
139
|
+
*/
|
|
140
|
+
metricDuration(props) {
|
|
141
|
+
return this.metric('Duration', {}, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Return a metric measuring the target execution time for this gateway.
|
|
145
|
+
*
|
|
146
|
+
* This metric helps determine the contribution of the target (Lambda, OpenAPI, etc.)
|
|
147
|
+
* to the total latency.
|
|
148
|
+
*/
|
|
149
|
+
metricTargetExecutionTime(props) {
|
|
150
|
+
return this.metric('TargetExecutionTime', {}, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Return a metric containing the number of requests served by each target type for this gateway.
|
|
154
|
+
*/
|
|
155
|
+
metricTargetType(targetType, props) {
|
|
156
|
+
return this.metric('TargetType', { TargetType: targetType }, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Internal method to create a metric.
|
|
160
|
+
* @internal
|
|
161
|
+
*/
|
|
162
|
+
configureMetric(props) {
|
|
163
|
+
return new aws_cloudwatch_1.Metric({
|
|
164
|
+
...props,
|
|
165
|
+
region: props?.region ?? this.stack.region,
|
|
166
|
+
account: props?.account ?? this.stack.account,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.GatewayBase = GatewayBase;
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2F0ZXdheS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBa0Q7QUFDbEQsK0RBQXNHO0FBQ3RHLDJDQUEyQztBQUszQyxtQ0FBdUM7QUFHdkM7OytFQUUrRTtBQUMvRTs7R0FFRztBQUNILElBQVkscUJBT1g7QUFQRCxXQUFZLHFCQUFxQjtJQUMvQjs7OztPQUlHO0lBQ0gsd0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFPaEM7QUF5TUQ7OytFQUUrRTtBQUUvRSxNQUFzQixXQUFZLFNBQVEsc0JBQVE7O0lBZ0JoRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2xCO0lBRUQseURBQXlEO0lBQ3pELHFCQUFxQjtJQUNyQix5REFBeUQ7SUFDekQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU87WUFDaEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMvQixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7S0FDSjtJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsT0FBdUI7UUFDdEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLG9CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUNoRCxPQUFPLEVBQUUsT0FBTztZQUNoQixZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDbkIsT0FBTyxFQUFFLENBQUMsR0FBRyxvQkFB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QUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbEc7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQUMsS0FBa0I7UUFDeEMsT0FBTyxJQUFJLHVCQUFNLENBQUM7WUFDaEIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztTQUM5QyxDQUFDLENBQUM7S0FDSjs7QUExS0gsa0NBMktDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlc291cmNlLCBSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IERpbWVuc2lvbnNNYXAsIE1ldHJpYywgTWV0cmljT3B0aW9ucywgTWV0cmljUHJvcHMsIFN0YXRzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG4vLyBJbnRlcm5hbCBpbXBvcnRzXG5pbXBvcnQgeyBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWcgfSBmcm9tICcuL2luYm91bmQtYXV0aC9hdXRob3JpemVyJztcbmltcG9ydCB7IEdhdGV3YXlQZXJtcyB9IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHsgSUdhdGV3YXlQcm90b2NvbENvbmZpZyB9IGZyb20gJy4vcHJvdG9jb2wnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1zXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEV4Y2VwdGlvbiBsZXZlbHMgZm9yIGdhdGV3YXlcbiAqL1xuZXhwb3J0IGVudW0gR2F0ZXdheUV4Y2VwdGlvbkxldmVsIHtcbiAgLyoqXG4gICAqIERlYnVnIG1vZGUgZm9yIGdyYW51bGFyIGV4Y2VwdGlvbiBtZXNzYWdlcy4gQWxsb3dzIHRoZSByZXR1cm4gb2ZcbiAgICogc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgZ2F0ZXdheSB0YXJnZXQgY29uZmlndXJhdGlvblxuICAgKiB0byBoZWxwIHlvdSB3aXRoIGRlYnVnZ2luZy5cbiAgICovXG4gIERFQlVHID0gJ0RFQlVHJyxcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIEdhdGV3YXkgcmVzb3VyY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXkgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZ2F0ZXdheSByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBnYXRld2F5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IElHYXRld2F5UHJvdG9jb2xDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbjogSUdhdGV3YXlBdXRob3JpemVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhjZXB0aW9uIGxldmVsIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjZXB0aW9uTGV2ZWw/OiBHYXRld2F5RXhjZXB0aW9uTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIGVuZHBvaW50IGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyByZWFzb25zIGZvciB0aGUgZ2F0ZXdheS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzUmVhc29uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIFByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgYEdldGAgYW5kIGBMaXN0YCBhY3Rpb25zIG9uIHRoZSBHYXRld2F5XG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgQ3JlYXRlYCwgYFVwZGF0ZWAsIGFuZCBgRGVsZXRlYCBhY3Rpb25zIG9uIHRoZSBHYXRld2F5XG4gICAqL1xuICBncmFudE1hbmFnZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gaW52b2tlIHRoaXMgR2F0ZXdheVxuICAgKi9cbiAgZ3JhbnRJbnZva2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1ldHJpY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBUaGUgbmFtZSBvZiB0aGUgbWV0cmljXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zIEFkZGl0aW9uYWwgZGltZW5zaW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgbWV0cmljIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIHRvdGFsIG51bWJlciBvZiBpbnZvY2F0aW9ucyBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyB0cmFja3MgYWxsIHN1Y2Nlc3NmdWwgaW52b2NhdGlvbnMgb2YgdGhlIGdhdGV3YXkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIFN1bSBzdGF0aXN0aWMgb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIG1ldHJpY0ludm9jYXRpb25zKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0aHJvdHRsZWQgcmVxdWVzdHMgKDQyOSBzdGF0dXMgY29kZSkgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgaGVscHMgaWRlbnRpZnkgd2hlbiB0aGUgZ2F0ZXdheSBpcyByYXRlIGxpbWl0aW5nIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgbWV0cmljIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBTdW0gc3RhdGlzdGljIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNUaHJvdHRsZXMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHN5c3RlbSBlcnJvcnMgKDV4eCBzdGF0dXMgY29kZSkgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgdHJhY2tzIGludGVybmFsIHNlcnZlciBlcnJvcnMgYW5kIHN5c3RlbSBmYWlsdXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIG1ldHJpYyBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gU3VtIHN0YXRpc3RpYyBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgbWV0cmljU3lzdGVtRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB1c2VyIGVycm9ycyAoNHh4IHN0YXR1cyBjb2RlLCBleGNsdWRpbmcgNDI5KSBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyB0cmFja3MgY2xpZW50IGVycm9ycyBsaWtlIGJhZCByZXF1ZXN0cywgdW5hdXRob3JpemVkIGFjY2VzcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgbWV0cmljIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBTdW0gc3RhdGlzdGljIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNVc2VyRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgbGF0ZW5jeSBvZiByZXF1ZXN0cyBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBUaGUgbGF0ZW5jeSBtZXRyaWMgcmVwcmVzZW50cyB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gd2hlbiB0aGUgc2VydmljZSByZWNlaXZlc1xuICAgKiB0aGUgcmVxdWVzdCBhbmQgd2hlbiBpdCBiZWdpbnMgc2VuZGluZyB0aGUgZmlyc3QgcmVzcG9uc2UgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF2ZXJhZ2Ugc3RhdGlzdGljIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNMYXRlbmN5KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgZHVyYXRpb24gb2YgcmVxdWVzdHMgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICpcbiAgICogVGhlIGR1cmF0aW9uIG1ldHJpYyByZXByZXNlbnRzIHRoZSB0b3RhbCB0aW1lIGVsYXBzZWQgYmV0d2VlbiByZWNlaXZpbmcgdGhlIHJlcXVlc3RcbiAgICogYW5kIHNlbmRpbmcgdGhlIGZpbmFsIHJlc3BvbnNlIHRva2VuLCByZXByZXNlbnRpbmcgY29tcGxldGUgZW5kLXRvLWVuZCBwcm9jZXNzaW5nIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF2ZXJhZ2Ugc3RhdGlzdGljIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNEdXJhdGlvbihwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIHRhcmdldCBleGVjdXRpb24gdGltZSBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBoZWxwcyBkZXRlcm1pbmUgdGhlIGNvbnRyaWJ1dGlvbiBvZiB0aGUgdGFyZ2V0IChMYW1iZGEsIE9wZW5BUEksIGV0Yy4pXG4gICAqIHRvIHRoZSB0b3RhbCBsYXRlbmN5LlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgbWV0cmljIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdmVyYWdlIHN0YXRpc3RpYyBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgbWV0cmljVGFyZ2V0RXhlY3V0aW9uVGltZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2VydmVkIGJ5IGVhY2ggdGFyZ2V0IHR5cGUgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldFR5cGUgVGhlIHR5cGUgb2YgdGFyZ2V0IChlLmcuLCAnTGFtYmRhJywgJ09wZW5BUEknLCAnU21pdGh5JylcbiAgICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIG1ldHJpYyBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gU3VtIHN0YXRpc3RpYyBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgbWV0cmljVGFyZ2V0VHlwZSh0YXJnZXRUeXBlOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2UgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhdGV3YXlCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJR2F0ZXdheSB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBnYXRld2F5QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb246IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4Y2VwdGlvbkxldmVsPzogR2F0ZXdheUV4Y2VwdGlvbkxldmVsO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBnYXRld2F5VXJsPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzUmVhc29uPzogc3RyaW5nW107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUGVybWlzc2lvbiBNZXRob2RzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogR3JhbnRzIElBTSBhY3Rpb25zIHRvIHRoZSBJQU0gUHJpbmNpcGFsXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGFjdGlvbnMgdG8gZ3JhbnRcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuZ2F0ZXdheUFybl0sXG4gICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgR2V0YCBhbmQgYExpc3RgIGFjdGlvbnMgb24gdGhlIEdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCByZXNvdXJjZVNwZWNpZmljR3JhbnQgPSB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLkdhdGV3YXlQZXJtcy5HRVRfUEVSTVMpO1xuXG4gICAgY29uc3QgYWxsUmVzb3VyY2VHcmFudCA9IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbJyonXSxcbiAgICAgIGFjdGlvbnM6IFsuLi5HYXRld2F5UGVybXMuTElTVF9QRVJNU10sXG4gICAgfSk7XG4gICAgLy8gUmV0dXJuIGNvbWJpbmVkIGdyYW50XG4gICAgcmV0dXJuIHJlc291cmNlU3BlY2lmaWNHcmFudC5jb21iaW5lKGFsbFJlc291cmNlR3JhbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgQ3JlYXRlYCwgYFVwZGF0ZWAsIGFuZCBgRGVsZXRlYCBhY3Rpb25zIG9uIHRoZSBHYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgbWFuYWdlIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRNYW5hZ2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLkdhdGV3YXlQZXJtcy5NQU5BR0VfUEVSTVMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGludm9rZSB0aGlzIEdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBpbnZva2UgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBncmFudEludm9rZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uR2F0ZXdheVBlcm1zLklOVk9LRV9QRVJNUyk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljIE1ldGhvZHNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbWV0cmljIHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHN1bSBvdmVyIGEgcGVyaW9kIG9mIDUgbWludXRlcy5cbiAgICogWW91IGNhbiBjdXN0b21pemUgdGhpcyBieSB1c2luZyB0aGUgYHN0YXRpc3RpY2AgYW5kIGBwZXJpb2RgIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRyaWNOYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRyaWNcbiAgICogQHBhcmFtIGRpbWVuc2lvbnMgQWRkaXRpb25hbCBkaW1lbnNpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBtZXRyaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgY29uc3QgbWV0cmljUHJvcHM6IE1ldHJpY1Byb3BzID0ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IC4uLmRpbWVuc2lvbnMsIFJlc291cmNlOiB0aGlzLmdhdGV3YXlBcm4gfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJlTWV0cmljKG1ldHJpY1Byb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIGludm9jYXRpb25zIGZvciB0aGlzIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW52b2NhdGlvbnMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0ludm9jYXRpb25zJywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdGhyb3R0bGVkIHJlcXVlc3RzICg0Mjkgc3RhdHVzIGNvZGUpIGZvciB0aGlzIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVGhyb3R0bGVzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUaHJvdHRsZXMnLCB7fSwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzeXN0ZW0gZXJyb3JzICg1eHggc3RhdHVzIGNvZGUpIGZvciB0aGlzIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljU3lzdGVtRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdTeXN0ZW1FcnJvcnMnLCB7fSwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB1c2VyIGVycm9ycyAoNHh4IHN0YXR1cyBjb2RlLCBleGNsdWRpbmcgNDI5KSBmb3IgdGhpcyBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1VzZXJFcnJvcnMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1VzZXJFcnJvcnMnLCB7fSwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgbGF0ZW5jeSBvZiByZXF1ZXN0cyBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBUaGUgbGF0ZW5jeSBtZXRyaWMgcmVwcmVzZW50cyB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gd2hlbiB0aGUgc2VydmljZSByZWNlaXZlc1xuICAgKiB0aGUgcmVxdWVzdCBhbmQgd2hlbiBpdCBiZWdpbnMgc2VuZGluZyB0aGUgZmlyc3QgcmVzcG9uc2UgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTGF0ZW5jeShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnTGF0ZW5jeScsIHt9LCB7IHN0YXRpc3RpYzogU3RhdHMuQVZFUkFHRSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgZHVyYXRpb24gb2YgcmVxdWVzdHMgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICpcbiAgICogVGhlIGR1cmF0aW9uIG1ldHJpYyByZXByZXNlbnRzIHRoZSB0b3RhbCB0aW1lIGVsYXBzZWQgYmV0d2VlbiByZWNlaXZpbmcgdGhlIHJlcXVlc3RcbiAgICogYW5kIHNlbmRpbmcgdGhlIGZpbmFsIHJlc3BvbnNlIHRva2VuLCByZXByZXNlbnRpbmcgY29tcGxldGUgZW5kLXRvLWVuZCBwcm9jZXNzaW5nIHRpbWUuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRHVyYXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0R1cmF0aW9uJywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgbWVhc3VyaW5nIHRoZSB0YXJnZXQgZXhlY3V0aW9uIHRpbWUgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgaGVscHMgZGV0ZXJtaW5lIHRoZSBjb250cmlidXRpb24gb2YgdGhlIHRhcmdldCAoTGFtYmRhLCBPcGVuQVBJLCBldGMuKVxuICAgKiB0byB0aGUgdG90YWwgbGF0ZW5jeS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYXJnZXRFeGVjdXRpb25UaW1lKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUYXJnZXRFeGVjdXRpb25UaW1lJywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHNlcnZlZCBieSBlYWNoIHRhcmdldCB0eXBlIGZvciB0aGlzIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVGFyZ2V0VHlwZSh0YXJnZXRUeXBlOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUYXJnZXRUeXBlJywgeyBUYXJnZXRUeXBlOiB0YXJnZXRUeXBlIH0sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgYSBtZXRyaWMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWd1cmVNZXRyaWMocHJvcHM6IE1ldHJpY1Byb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWdpb246IHByb3BzPy5yZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb24sXG4gICAgICBhY2NvdW50OiBwcm9wcz8uYWNjb3VudCA/PyB0aGlzLnN0YWNrLmFjY291bnQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|