1 | ;
|
2 | var _a, _b, _c;
|
3 | Object.defineProperty(exports, "__esModule", { value: true });
|
4 | exports.HttpMethod = exports.Connection = exports.HttpParameter = exports.Authorization = void 0;
|
5 | const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
6 | const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
7 | const core_1 = require("@aws-cdk/core");
|
8 | const events_generated_1 = require("./events.generated");
|
9 | /**
|
10 | * Authorization type for an API Destination Connection
|
11 | */
|
12 | class Authorization {
|
13 | /**
|
14 | * Use API key authorization
|
15 | *
|
16 | * API key authorization has two components: an API key name and an API key value.
|
17 | * What these are depends on the target of your connection.
|
18 | */
|
19 | static apiKey(apiKeyName, apiKeyValue) {
|
20 | return new class extends Authorization {
|
21 | _bind() {
|
22 | return {
|
23 | authorizationType: AuthorizationType.API_KEY,
|
24 | authParameters: {
|
25 | apiKeyAuthParameters: {
|
26 | apiKeyName: apiKeyName,
|
27 | apiKeyValue: apiKeyValue.unsafeUnwrap(),
|
28 | },
|
29 | },
|
30 | };
|
31 | }
|
32 | }();
|
33 | }
|
34 | /**
|
35 | * Use username and password authorization
|
36 | */
|
37 | static basic(username, password) {
|
38 | return new class extends Authorization {
|
39 | _bind() {
|
40 | return {
|
41 | authorizationType: AuthorizationType.BASIC,
|
42 | authParameters: {
|
43 | basicAuthParameters: {
|
44 | username: username,
|
45 | password: password.unsafeUnwrap(),
|
46 | },
|
47 | },
|
48 | };
|
49 | }
|
50 | }();
|
51 | }
|
52 | /**
|
53 | * Use OAuth authorization
|
54 | */
|
55 | static oauth(props) {
|
56 | try {
|
57 | jsiiDeprecationWarnings._aws_cdk_aws_events_OAuthAuthorizationProps(props);
|
58 | }
|
59 | catch (error) {
|
60 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
61 | Error.captureStackTrace(error, this.oauth);
|
62 | }
|
63 | throw error;
|
64 | }
|
65 | if (![HttpMethod.POST, HttpMethod.GET, HttpMethod.PUT].includes(props.httpMethod)) {
|
66 | throw new Error('httpMethod must be one of GET, POST, PUT');
|
67 | }
|
68 | return new class extends Authorization {
|
69 | _bind() {
|
70 | return {
|
71 | authorizationType: AuthorizationType.OAUTH_CLIENT_CREDENTIALS,
|
72 | authParameters: {
|
73 | oAuthParameters: {
|
74 | authorizationEndpoint: props.authorizationEndpoint,
|
75 | clientParameters: {
|
76 | clientId: props.clientId,
|
77 | clientSecret: props.clientSecret.unsafeUnwrap(),
|
78 | },
|
79 | httpMethod: props.httpMethod,
|
80 | oAuthHttpParameters: {
|
81 | bodyParameters: renderHttpParameters(props.bodyParameters),
|
82 | headerParameters: renderHttpParameters(props.headerParameters),
|
83 | queryStringParameters: renderHttpParameters(props.queryStringParameters),
|
84 | },
|
85 | },
|
86 | },
|
87 | };
|
88 | }
|
89 | }();
|
90 | }
|
91 | }
|
92 | exports.Authorization = Authorization;
|
93 | _a = JSII_RTTI_SYMBOL_1;
|
94 | Authorization[_a] = { fqn: "@aws-cdk/aws-events.Authorization", version: "1.191.0" };
|
95 | /**
|
96 | * An additional HTTP parameter to send along with the OAuth request
|
97 | */
|
98 | class HttpParameter {
|
99 | /**
|
100 | * Make an OAuthParameter from a string value
|
101 | *
|
102 | * The value is not treated as a secret.
|
103 | */
|
104 | static fromString(value) {
|
105 | return new class extends HttpParameter {
|
106 | _render(name) {
|
107 | return {
|
108 | key: name,
|
109 | value,
|
110 | };
|
111 | }
|
112 | }();
|
113 | }
|
114 | /**
|
115 | * Make an OAuthParameter from a secret
|
116 | */
|
117 | static fromSecret(value) {
|
118 | return new class extends HttpParameter {
|
119 | _render(name) {
|
120 | return {
|
121 | key: name,
|
122 | value: value.unsafeUnwrap(),
|
123 | isValueSecret: true,
|
124 | };
|
125 | }
|
126 | }();
|
127 | }
|
128 | }
|
129 | exports.HttpParameter = HttpParameter;
|
130 | _b = JSII_RTTI_SYMBOL_1;
|
131 | HttpParameter[_b] = { fqn: "@aws-cdk/aws-events.HttpParameter", version: "1.191.0" };
|
132 | /**
|
133 | * Define an EventBridge Connection
|
134 | *
|
135 | * @resource AWS::Events::Connection
|
136 | */
|
137 | class Connection extends core_1.Resource {
|
138 | constructor(scope, id, props) {
|
139 | super(scope, id, {
|
140 | physicalName: props.connectionName,
|
141 | });
|
142 | try {
|
143 | jsiiDeprecationWarnings._aws_cdk_aws_events_ConnectionProps(props);
|
144 | }
|
145 | catch (error) {
|
146 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
147 | Error.captureStackTrace(error, Connection);
|
148 | }
|
149 | throw error;
|
150 | }
|
151 | const authBind = props.authorization._bind();
|
152 | const invocationHttpParameters = !!props.headerParameters || !!props.queryStringParameters || !!props.bodyParameters ? {
|
153 | bodyParameters: renderHttpParameters(props.bodyParameters),
|
154 | headerParameters: renderHttpParameters(props.headerParameters),
|
155 | queryStringParameters: renderHttpParameters(props.queryStringParameters),
|
156 | } : undefined;
|
157 | let connection = new events_generated_1.CfnConnection(this, 'Connection', {
|
158 | authorizationType: authBind.authorizationType,
|
159 | authParameters: {
|
160 | ...authBind.authParameters,
|
161 | invocationHttpParameters: invocationHttpParameters,
|
162 | },
|
163 | description: props.description,
|
164 | name: this.physicalName,
|
165 | });
|
166 | this.connectionName = this.getResourceNameAttribute(connection.ref);
|
167 | this.connectionArn = connection.attrArn;
|
168 | this.connectionSecretArn = connection.attrSecretArn;
|
169 | }
|
170 | /**
|
171 | * Import an existing connection resource
|
172 | * @param scope Parent construct
|
173 | * @param id Construct ID
|
174 | * @param connectionArn ARN of imported connection
|
175 | */
|
176 | static fromEventBusArn(scope, id, connectionArn, connectionSecretArn) {
|
177 | const parts = core_1.Stack.of(scope).parseArn(connectionArn);
|
178 | return new ImportedConnection(scope, id, {
|
179 | connectionArn: connectionArn,
|
180 | connectionName: parts.resourceName || '',
|
181 | connectionSecretArn: connectionSecretArn,
|
182 | });
|
183 | }
|
184 | /**
|
185 | * Import an existing connection resource
|
186 | * @param scope Parent construct
|
187 | * @param id Construct ID
|
188 | * @param attrs Imported connection properties
|
189 | */
|
190 | static fromConnectionAttributes(scope, id, attrs) {
|
191 | try {
|
192 | jsiiDeprecationWarnings._aws_cdk_aws_events_ConnectionAttributes(attrs);
|
193 | }
|
194 | catch (error) {
|
195 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
196 | Error.captureStackTrace(error, this.fromConnectionAttributes);
|
197 | }
|
198 | throw error;
|
199 | }
|
200 | return new ImportedConnection(scope, id, attrs);
|
201 | }
|
202 | }
|
203 | exports.Connection = Connection;
|
204 | _c = JSII_RTTI_SYMBOL_1;
|
205 | Connection[_c] = { fqn: "@aws-cdk/aws-events.Connection", version: "1.191.0" };
|
206 | class ImportedConnection extends core_1.Resource {
|
207 | constructor(scope, id, attrs) {
|
208 | const arnParts = core_1.Stack.of(scope).parseArn(attrs.connectionArn);
|
209 | super(scope, id, {
|
210 | account: arnParts.account,
|
211 | region: arnParts.region,
|
212 | });
|
213 | this.connectionArn = attrs.connectionArn;
|
214 | this.connectionName = attrs.connectionName;
|
215 | this.connectionSecretArn = attrs.connectionSecretArn;
|
216 | }
|
217 | }
|
218 | /**
|
219 | * Supported HTTP operations.
|
220 | */
|
221 | var HttpMethod;
|
222 | (function (HttpMethod) {
|
223 | /** POST */
|
224 | HttpMethod["POST"] = "POST";
|
225 | /** GET */
|
226 | HttpMethod["GET"] = "GET";
|
227 | /** HEAD */
|
228 | HttpMethod["HEAD"] = "HEAD";
|
229 | /** OPTIONS */
|
230 | HttpMethod["OPTIONS"] = "OPTIONS";
|
231 | /** PUT */
|
232 | HttpMethod["PUT"] = "PUT";
|
233 | /** PATCH */
|
234 | HttpMethod["PATCH"] = "PATCH";
|
235 | /** DELETE */
|
236 | HttpMethod["DELETE"] = "DELETE";
|
237 | })(HttpMethod = exports.HttpMethod || (exports.HttpMethod = {}));
|
238 | /**
|
239 | * Supported Authorization Types.
|
240 | */
|
241 | var AuthorizationType;
|
242 | (function (AuthorizationType) {
|
243 | /** API_KEY */
|
244 | AuthorizationType["API_KEY"] = "API_KEY";
|
245 | /** BASIC */
|
246 | AuthorizationType["BASIC"] = "BASIC";
|
247 | /** OAUTH_CLIENT_CREDENTIALS */
|
248 | AuthorizationType["OAUTH_CLIENT_CREDENTIALS"] = "OAUTH_CLIENT_CREDENTIALS";
|
249 | })(AuthorizationType || (AuthorizationType = {}));
|
250 | function renderHttpParameters(ps) {
|
251 | if (!ps || Object.keys(ps).length === 0) {
|
252 | return undefined;
|
253 | }
|
254 | return Object.entries(ps).map(([name, p]) => p._render(name));
|
255 | }
|
256 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0NBQXdFO0FBRXhFLHlEQUFtRDtBQWlEbkQ7O0dBRUc7QUFDSCxNQUFzQixhQUFhO0lBQ2pDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFrQixFQUFFLFdBQXdCO1FBQy9ELE9BQU8sSUFBSSxLQUFNLFNBQVEsYUFBYTtZQUM3QixLQUFLO2dCQUNWLE9BQU87b0JBQ0wsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsT0FBTztvQkFDNUMsY0FBYyxFQUFFO3dCQUNkLG9CQUFvQixFQUFFOzRCQUNwQixVQUFVLEVBQUUsVUFBVTs0QkFDdEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUU7eUJBQ3hDO3FCQUNzQztpQkFDMUMsQ0FBQztZQUNKLENBQUM7U0FDRixFQUFFLENBQUM7S0FDTDtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFnQixFQUFFLFFBQXFCO1FBQ3pELE9BQU8sSUFBSSxLQUFNLFNBQVEsYUFBYTtZQUM3QixLQUFLO2dCQUNWLE9BQU87b0JBQ0wsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsS0FBSztvQkFDMUMsY0FBYyxFQUFFO3dCQUNkLG1CQUFtQixFQUFFOzRCQUNuQixRQUFRLEVBQUUsUUFBUTs0QkFDbEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUFZLEVBQUU7eUJBQ2xDO3FCQUNzQztpQkFDMUMsQ0FBQztZQUNKLENBQUM7U0FDRixFQUFFLENBQUM7S0FDTDtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUE4Qjs7Ozs7Ozs7OztRQUNoRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFL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LEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXNvdXJjZSwgUmVzb3VyY2UsIFN0YWNrLCBTZWNyZXRWYWx1ZSB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDZm5Db25uZWN0aW9uIH0gZnJvbSAnLi9ldmVudHMuZ2VuZXJhdGVkJztcblxuLyoqXG4gKiBBbiBBUEkgRGVzdGluYXRpb24gQ29ubmVjdGlvblxuICpcbiAqIEEgY29ubmVjdGlvbiBkZWZpbmVzIHRoZSBhdXRob3JpemF0aW9uIHR5cGUgYW5kIGNyZWRlbnRpYWxzIHRvIHVzZSBmb3IgYXV0aG9yaXphdGlvbiB3aXRoIGFuIEFQSSBkZXN0aW5hdGlvbiBIVFRQIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIG5hbWUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gdHlwZSBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uOiBBdXRob3JpemF0aW9uO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHN0cmluZyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgaW52b2NhdGlvbiBib2RpZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGJvZHlQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSHR0cFBhcmFtZXRlcj47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc3RyaW5nIHBhcmFtZXRlcnMgdG8gYWRkIHRvIHRoZSBpbnZvY2F0aW9uIGhlYWRlcnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlclBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBIdHRwUGFyYW1ldGVyPjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBzdHJpbmcgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIGludm9jYXRpb24gcXVlcnkgc3RyaW5nc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSHR0cFBhcmFtZXRlcj47XG59XG5cbi8qKlxuICogQXV0aG9yaXphdGlvbiB0eXBlIGZvciBhbiBBUEkgRGVzdGluYXRpb24gQ29ubmVjdGlvblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXV0aG9yaXphdGlvbiB7XG4gIC8qKlxuICAgKiBVc2UgQVBJIGtleSBhdXRob3JpemF0aW9uXG4gICAqXG4gICAqIEFQSSBrZXkgYXV0aG9yaXphdGlvbiBoYXMgdHdvIGNvbXBvbmVudHM6IGFuIEFQSSBrZXkgbmFtZSBhbmQgYW4gQVBJIGtleSB2YWx1ZS5cbiAgICogV2hhdCB0aGVzZSBhcmUgZGVwZW5kcyBvbiB0aGUgdGFyZ2V0IG9mIHlvdXIgY29ubmVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXBpS2V5KGFwaUtleU5hbWU6IHN0cmluZywgYXBpS2V5VmFsdWU6IFNlY3JldFZhbHVlKTogQXV0aG9yaXphdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBjbGFzcyBleHRlbmRzIEF1dGhvcml6YXRpb24ge1xuICAgICAgcHVibGljIF9iaW5kKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBBdXRob3JpemF0aW9uVHlwZS5BUElfS0VZLFxuICAgICAgICAgIGF1dGhQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBhcGlLZXlBdXRoUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBhcGlLZXlOYW1lOiBhcGlLZXlOYW1lLFxuICAgICAgICAgICAgICBhcGlLZXlWYWx1ZTogYXBpS2V5VmFsdWUudW5zYWZlVW53cmFwKCksIC8vIFNhZmUgdXNhZ2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDZm5Db25uZWN0aW9uLkF1dGhQYXJhbWV0ZXJzUHJvcGVydHksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXV0aG9yaXphdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBiYXNpYyh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogU2VjcmV0VmFsdWUpOiBBdXRob3JpemF0aW9uIHtcbiAgICByZXR1cm4gbmV3IGNsYXNzIGV4dGVuZHMgQXV0aG9yaXphdGlvbiB7XG4gICAgICBwdWJsaWMgX2JpbmQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvblR5cGU6IEF1dGhvcml6YXRpb25UeXBlLkJBU0lDLFxuICAgICAgICAgIGF1dGhQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBiYXNpY0F1dGhQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLnVuc2FmZVVud3JhcCgpLCAvLyBTYWZlIHVzYWdlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2ZuQ29ubmVjdGlvbi5BdXRoUGFyYW1ldGVyc1Byb3BlcnR5LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgT0F1dGggYXV0aG9yaXphdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvYXV0aChwcm9wczogT0F1dGhBdXRob3JpemF0aW9uUHJvcHMpOiBBdXRob3JpemF0aW9uIHtcbiAgICBpZiAoIVtIdHRwTWV0aG9kLlBPU1QsIEh0dHBNZXRob2QuR0VULCBIdHRwTWV0aG9kLlBVVF0uaW5jbHVkZXMocHJvcHMuaHR0cE1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaHR0cE1ldGhvZCBtdXN0IGJlIG9uZSBvZiBHRVQsIFBPU1QsIFBVVCcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyBBdXRob3JpemF0aW9uIHtcbiAgICAgIHB1YmxpYyBfYmluZCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uVHlwZTogQXV0aG9yaXphdGlvblR5cGUuT0FVVEhfQ0xJRU5UX0NSRURFTlRJQUxTLFxuICAgICAgICAgIGF1dGhQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBvQXV0aFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbkVuZHBvaW50OiBwcm9wcy5hdXRob3JpemF0aW9uRW5kcG9pbnQsXG4gICAgICAgICAgICAgIGNsaWVudFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCksIC8vIFNhZmUgdXNhZ2VcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHR0cE1ldGhvZDogcHJvcHMuaHR0cE1ldGhvZCxcbiAgICAgICAgICAgICAgb0F1dGhIdHRwUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIGJvZHlQYXJhbWV0ZXJzOiByZW5kZXJIdHRwUGFyYW1ldGVycyhwcm9wcy5ib2R5UGFyYW1ldGVycyksXG4gICAgICAgICAgICAgICAgaGVhZGVyUGFyYW1ldGVyczogcmVuZGVySHR0cFBhcmFtZXRlcnMocHJvcHMuaGVhZGVyUGFyYW1ldGVycyksXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiByZW5kZXJIdHRwUGFyYW1ldGVycyhwcm9wcy5xdWVyeVN0cmluZ1BhcmFtZXRlcnMpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENmbkNvbm5lY3Rpb24uQXV0aFBhcmFtZXRlcnNQcm9wZXJ0eSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KCk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRoZSBhdXRob3JpemF0aW9uIHRvIHRoZSBjb25zdHJ1Y3QgYW5kIHJldHVybiB0aGUgYXV0aG9yaXphdGlvbiBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKCk6IEF1dGhvcml6YXRpb25CaW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBBdXRob3JpemF0aW9uLm9hdXRoKClgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhBdXRob3JpemF0aW9uUHJvcHMge1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50XG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCB0byB1c2UgZm9yIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqXG4gICAqIChDYW4gb25seSBjaG9vc2UgUE9TVCwgR0VUIG9yIFBVVCkuXG4gICAqL1xuICByZWFkb25seSBodHRwTWV0aG9kOiBIdHRwTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IElEIHRvIHVzZSBmb3IgT0F1dGggYXV0aG9yaXphdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBjbGllbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHNlY3JldCBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudCBJRCB0byB1c2UgZm9yIE9BdXRoIGF1dGhvcml6YXRpb24gZm9yIHRoZSBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50U2VjcmV0OiBTZWNyZXRWYWx1ZTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBzdHJpbmcgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIE9BdXRoIHJlcXVlc3QgYm9keVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgYm9keVBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBIdHRwUGFyYW1ldGVyPjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBzdHJpbmcgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIE9BdXRoIHJlcXVlc3QgaGVhZGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSHR0cFBhcmFtZXRlcj47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc3RyaW5nIHBhcmFtZXRlcnMgdG8gYWRkIHRvIHRoZSBPQXV0aCByZXF1ZXN0IHF1ZXJ5IHN0cmluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSHR0cFBhcmFtZXRlcj47XG59XG5cbi8qKlxuICogQW4gYWRkaXRpb25hbCBIVFRQIHBhcmFtZXRlciB0byBzZW5kIGFsb25nIHdpdGggdGhlIE9BdXRoIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEh0dHBQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTWFrZSBhbiBPQXV0aFBhcmFtZXRlciBmcm9tIGEgc3RyaW5nIHZhbHVlXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBpcyBub3QgdHJlYXRlZCBhcyBhIHNlY3JldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogSHR0cFBhcmFtZXRlciB7XG4gICAgcmV0dXJuIG5ldyBjbGFzcyBleHRlbmRzIEh0dHBQYXJhbWV0ZXIge1xuICAgICAgcHVibGljIF9yZW5kZXIobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2V5OiBuYW1lLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9IGFzIENmbkNvbm5lY3Rpb24uUGFyYW1ldGVyUHJvcGVydHk7XG4gICAgICB9XG4gICAgfSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gT0F1dGhQYXJhbWV0ZXIgZnJvbSBhIHNlY3JldFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VjcmV0KHZhbHVlOiBTZWNyZXRWYWx1ZSk6IEh0dHBQYXJhbWV0ZXIge1xuICAgIHJldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyBIdHRwUGFyYW1ldGVyIHtcbiAgICAgIHB1YmxpYyBfcmVuZGVyKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUudW5zYWZlVW53cmFwKCksIC8vIFNhZmUgdXNhZ2VcbiAgICAgICAgICBpc1ZhbHVlU2VjcmV0OiB0cnVlLFxuICAgICAgICB9IGFzIENmbkNvbm5lY3Rpb24uUGFyYW1ldGVyUHJvcGVydHk7XG4gICAgICB9XG4gICAgfSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcGFyYW10ZXIgdmFsdWVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX3JlbmRlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHRoZSAnYmluZCcgb3BlcmF0aW9uIG9mIHRoZSAnQXV0aG9yaXphdGlvbicgY2xhc3NcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRob3JpemF0aW9uQmluZFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXphdGlvbiB0eXBlXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uVHlwZTogQXV0aG9yaXphdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemF0aW9uIHBhcmFtZXRlcnMgKGRlcGVuZHMgb24gdGhlIHR5cGUpXG4gICAqL1xuICByZWFkb25seSBhdXRoUGFyYW1ldGVyczogYW55O1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgRXZlbnRCdXMgQ29ubmVjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdGlvbiBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgTmFtZSBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbm5lY3Rpb24gY3JlYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIGZvciB0aGUgc2VjcmV0IGNyZWF0ZWQgZm9yIHRoZSBjb25uZWN0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uU2VjcmV0QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHdpdGggcHJvcGVydGllcyBuZWNlc3NhcnkgdG8gaW1wb3J0IGEgcmV1c2FibGUgQ29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25BdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBOYW1lIGZvciB0aGUgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbm5lY3Rpb24gY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBmb3IgdGhlIHNlY3JldCBjcmVhdGVkIGZvciB0aGUgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25TZWNyZXRBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmUgYW4gRXZlbnRCcmlkZ2UgQ29ubmVjdGlvblxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkV2ZW50czo6Q29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUNvbm5lY3Rpb24ge1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gcmVzb3VyY2VcbiAgICogQHBhcmFtIHNjb3BlIFBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIENvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gY29ubmVjdGlvbkFybiBBUk4gb2YgaW1wb3J0ZWQgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRXZlbnRCdXNBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29ubmVjdGlvbkFybjogc3RyaW5nLCBjb25uZWN0aW9uU2VjcmV0QXJuOiBzdHJpbmcpOiBJQ29ubmVjdGlvbiB7XG4gICAgY29uc3QgcGFydHMgPSBTdGFjay5vZihzY29wZSkucGFyc2VBcm4oY29ubmVjdGlvbkFybik7XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQ29ubmVjdGlvbihzY29wZSwgaWQsIHtcbiAgICAgIGNvbm5lY3Rpb25Bcm46IGNvbm5lY3Rpb25Bcm4sXG4gICAgICBjb25uZWN0aW9uTmFtZTogcGFydHMucmVzb3VyY2VOYW1lIHx8ICcnLFxuICAgICAgY29ubmVjdGlvblNlY3JldEFybjogY29ubmVjdGlvblNlY3JldEFybixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiByZXNvdXJjZVxuICAgKiBAcGFyYW0gc2NvcGUgUGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgQ29uc3RydWN0IElEXG4gICAqIEBwYXJhbSBhdHRycyBJbXBvcnRlZCBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbm5lY3Rpb25BdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBDb25uZWN0aW9uQXR0cmlidXRlcyk6IElDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQ29ubmVjdGlvbihzY29wZSwgaWQsIGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTmFtZSBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb25uZWN0aW9uIGNyZWF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gZm9yIHRoZSBzZWNyZXQgY3JlYXRlZCBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uU2VjcmV0QXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbm5lY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5jb25uZWN0aW9uTmFtZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhCaW5kID0gcHJvcHMuYXV0aG9yaXphdGlvbi5fYmluZCgpO1xuXG4gICAgY29uc3QgaW52b2NhdGlvbkh0dHBQYXJhbWV0ZXJzID0gISFwcm9wcy5oZWFkZXJQYXJhbWV0ZXJzIHx8ICEhcHJvcHMucXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHx8ICEhcHJvcHMuYm9keVBhcmFtZXRlcnMgPyB7XG4gICAgICBib2R5UGFyYW1ldGVyczogcmVuZGVySHR0cFBhcmFtZXRlcnMocHJvcHMuYm9keVBhcmFtZXRlcnMpLFxuICAgICAgaGVhZGVyUGFyYW1ldGVyczogcmVuZGVySHR0cFBhcmFtZXRlcnMocHJvcHMuaGVhZGVyUGFyYW1ldGVycyksXG4gICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHJlbmRlckh0dHBQYXJhbWV0ZXJzKHByb3BzLnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyksXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGxldCBjb25uZWN0aW9uID0gbmV3IENmbkNvbm5lY3Rpb24odGhpcywgJ0Nvbm5lY3Rpb24nLCB7XG4gICAgICBhdXRob3JpemF0aW9uVHlwZTogYXV0aEJpbmQuYXV0aG9yaXphdGlvblR5cGUsXG4gICAgICBhdXRoUGFyYW1ldGVyczoge1xuICAgICAgICAuLi5hdXRoQmluZC5hdXRoUGFyYW1ldGVycyxcbiAgICAgICAgaW52b2NhdGlvbkh0dHBQYXJhbWV0ZXJzOiBpbnZvY2F0aW9uSHR0cFBhcmFtZXRlcnMsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25OYW1lID0gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUoY29ubmVjdGlvbi5yZWYpO1xuICAgIHRoaXMuY29ubmVjdGlvbkFybiA9IGNvbm5lY3Rpb24uYXR0ckFybjtcbiAgICB0aGlzLmNvbm5lY3Rpb25TZWNyZXRBcm4gPSBjb25uZWN0aW9uLmF0dHJTZWNyZXRBcm47XG4gIH1cbn1cblxuY2xhc3MgSW1wb3J0ZWRDb25uZWN0aW9uIGV4dGVuZHMgUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbkFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25TZWNyZXRBcm46IHN0cmluZztcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IENvbm5lY3Rpb25BdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgYXJuUGFydHMgPSBTdGFjay5vZihzY29wZSkucGFyc2VBcm4oYXR0cnMuY29ubmVjdGlvbkFybik7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBhY2NvdW50OiBhcm5QYXJ0cy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiBhcm5QYXJ0cy5yZWdpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25Bcm4gPSBhdHRycy5jb25uZWN0aW9uQXJuO1xuICAgIHRoaXMuY29ubmVjdGlvbk5hbWUgPSBhdHRycy5jb25uZWN0aW9uTmFtZTtcbiAgICB0aGlzLmNvbm5lY3Rpb25TZWNyZXRBcm4gPSBhdHRycy5jb25uZWN0aW9uU2VjcmV0QXJuO1xuICB9XG59XG5cbi8qKlxuICogU3VwcG9ydGVkIEhUVFAgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gSHR0cE1ldGhvZCB7XG4gIC8qKiBQT1NUICovXG4gIFBPU1QgPSAnUE9TVCcsXG4gIC8qKiBHRVQgKi9cbiAgR0VUID0gJ0dFVCcsXG4gIC8qKiBIRUFEICovXG4gIEhFQUQgPSAnSEVBRCcsXG4gIC8qKiBPUFRJT05TICovXG4gIE9QVElPTlMgPSAnT1BUSU9OUycsXG4gIC8qKiBQVVQgKi9cbiAgUFVUID0gJ1BVVCcsXG4gIC8qKiBQQVRDSCAqL1xuICBQQVRDSCA9ICdQQVRDSCcsXG4gIC8qKiBERUxFVEUgKi9cbiAgREVMRVRFID0gJ0RFTEVURScsXG59XG5cbi8qKlxuICogU3VwcG9ydGVkIEF1dGhvcml6YXRpb24gVHlwZXMuXG4gKi9cbmVudW0gQXV0aG9yaXphdGlvblR5cGUge1xuICAvKiogQVBJX0tFWSAqL1xuICBBUElfS0VZID0gJ0FQSV9LRVknLFxuICAvKiogQkFTSUMgKi9cbiAgQkFTSUMgPSAnQkFTSUMnLFxuICAvKiogT0FVVEhfQ0xJRU5UX0NSRURFTlRJQUxTICovXG4gIE9BVVRIX0NMSUVOVF9DUkVERU5USUFMUyA9ICdPQVVUSF9DTElFTlRfQ1JFREVOVElBTFMnLFxufVxuXG5mdW5jdGlvbiByZW5kZXJIdHRwUGFyYW1ldGVycyhwcz86IFJlY29yZDxzdHJpbmcsIEh0dHBQYXJhbWV0ZXI+KTogQ2ZuQ29ubmVjdGlvbi5QYXJhbWV0ZXJQcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFwcyB8fCBPYmplY3Qua2V5cyhwcykubGVuZ3RoID09PSAwKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocHMpLm1hcCgoW25hbWUsIHBdKSA9PiBwLl9yZW5kZXIobmFtZSkpO1xufSJdfQ== |
\ | No newline at end of file |