@gomomento/sdk-core 1.117.2 → 1.117.4
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/dist/src/auth/credential-provider.d.ts +34 -8
- package/dist/src/auth/credential-provider.js +32 -8
- package/dist/src/internal/clients/auth/AbstractAuthClient.d.ts +21 -13
- package/dist/src/internal/clients/auth/AbstractAuthClient.js +22 -14
- package/dist/src/internal/utils/auth.d.ts +4 -0
- package/dist/src/internal/utils/auth.js +1 -1
- package/dist/src/messages/responses/generate-api-key.d.ts +1 -1
- package/dist/src/messages/responses/generate-api-key.js +2 -2
- package/package.json +1 -1
|
@@ -19,7 +19,9 @@ interface CredentialProviderProps {
|
|
|
19
19
|
*/
|
|
20
20
|
export declare abstract class CredentialProvider {
|
|
21
21
|
/**
|
|
22
|
-
* @returns {string}
|
|
22
|
+
* @returns {string} The raw credential value used to authenticate with the service. This will be either a
|
|
23
|
+
* v2 API key (for long-lived credentials created via the Momento console) or a disposable token (for
|
|
24
|
+
* short-lived credentials created via AuthClient.generateDisposableToken).
|
|
23
25
|
*/
|
|
24
26
|
abstract getAuthToken(): string;
|
|
25
27
|
/**
|
|
@@ -62,19 +64,38 @@ export declare abstract class CredentialProvider {
|
|
|
62
64
|
*/
|
|
63
65
|
abstract isEndpointSecure(): boolean;
|
|
64
66
|
/**
|
|
65
|
-
* @deprecated use fromEnvVarV2() instead
|
|
67
|
+
* @deprecated use fromEnvVarV2() instead. This method only supports legacy JWT tokens and v1 api keys.
|
|
68
|
+
* Use fromEnvVarV2() for current v2 API keys.
|
|
66
69
|
*/
|
|
67
70
|
static fromEnvironmentVariable(props: EnvMomentoTokenProviderProps | string): CredentialProvider;
|
|
68
71
|
/**
|
|
69
|
-
* @deprecated use fromEnvVarV2() instead
|
|
72
|
+
* @deprecated use fromEnvVarV2() instead. This method only supports legacy JWT tokens and v1 api keys.
|
|
73
|
+
* Use fromEnvVarV2() for current v2 API keys.
|
|
70
74
|
*/
|
|
71
75
|
static fromEnvVar(props: EnvMomentoTokenProviderProps | string): CredentialProvider;
|
|
72
76
|
/**
|
|
73
|
-
* @deprecated use fromApiKeyV2() or fromDisposableToken()
|
|
77
|
+
* @deprecated use fromApiKeyV2() for long-lived v2 API keys or fromDisposableToken() for short-lived
|
|
78
|
+
* disposable tokens instead.
|
|
74
79
|
*/
|
|
75
80
|
static fromString(props: StringMomentoTokenProviderProps | string): CredentialProvider;
|
|
81
|
+
/**
|
|
82
|
+
* Creates a CredentialProvider from a short-lived disposable token string. Disposable tokens are generated
|
|
83
|
+
* via AuthClient.generateDisposableToken() and has a mandatory expiration time. They are intended for browser and
|
|
84
|
+
* client-side use where embedding a long-lived API key would be insecure.
|
|
85
|
+
*
|
|
86
|
+
* Do NOT use this method with a long-lived v2 API key — use fromEnvVarV2() or fromApiKeyV2() instead.
|
|
87
|
+
*/
|
|
76
88
|
static fromDisposableToken(props: StringMomentoTokenProviderProps | string): CredentialProvider;
|
|
89
|
+
/**
|
|
90
|
+
* Creates a CredentialProvider by reading a v2 API key and service endpoint from environment variables
|
|
91
|
+
* MOMENTO_API_KEY and MOMENTO_ENDPOINT, respectively.
|
|
92
|
+
* V2 API keys are created via the Momento console.
|
|
93
|
+
*/
|
|
77
94
|
static fromEnvVarV2(props?: EnvMomentoV2TokenProviderProps): CredentialProvider;
|
|
95
|
+
/**
|
|
96
|
+
* Creates a CredentialProvider from a v2 API key string and service endpoint string.
|
|
97
|
+
* V2 API keys are created via the Momento console.
|
|
98
|
+
*/
|
|
78
99
|
static fromApiKeyV2(props: ApiKeyV2TokenProviderProps): CredentialProvider;
|
|
79
100
|
/**
|
|
80
101
|
* Allow insecure connections to momento-local service for testing purposes.
|
|
@@ -118,10 +139,13 @@ export interface EnvMomentoV2TokenProviderProps {
|
|
|
118
139
|
endpointEnvVar?: string;
|
|
119
140
|
}
|
|
120
141
|
/**
|
|
121
|
-
* Reads and parses a
|
|
142
|
+
* Reads and parses a legacy credential stored as a string. Supports the base64-encoded
|
|
143
|
+
* format used by disposable tokens and legacy v1 api keys. Does NOT
|
|
144
|
+
* support v2 API keys -— use ApiKeyV2TokenProvider for those.
|
|
122
145
|
* @export
|
|
123
146
|
* @class StringMomentoTokenProvider
|
|
124
|
-
* @deprecated use ApiKeyV2TokenProvider
|
|
147
|
+
* @deprecated use ApiKeyV2TokenProvider for v2 API keys; use this class only for disposable tokens
|
|
148
|
+
* via CredentialProvider.fromDisposableToken()
|
|
125
149
|
*/
|
|
126
150
|
export declare class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
127
151
|
private readonly apiKey;
|
|
@@ -150,10 +174,12 @@ export interface EnvMomentoTokenProviderProps extends CredentialProviderProps {
|
|
|
150
174
|
environmentVariableName: string;
|
|
151
175
|
}
|
|
152
176
|
/**
|
|
153
|
-
* Reads
|
|
177
|
+
* Reads a legacy credential from an environment variable. Supports the base64-encoded
|
|
178
|
+
* format used by disposable tokens and the legacy v1 api keys. Does NOT
|
|
179
|
+
* support v2 API keys -— use EnvMomentoV2TokenProvider for those.
|
|
154
180
|
* @export
|
|
155
181
|
* @class EnvMomentoTokenProvider
|
|
156
|
-
* @deprecated use EnvMomentoV2TokenProvider
|
|
182
|
+
* @deprecated use EnvMomentoV2TokenProvider (via CredentialProvider.fromEnvVarV2()) for v2 API keys
|
|
157
183
|
*/
|
|
158
184
|
export declare class EnvMomentoTokenProvider extends StringMomentoTokenProvider {
|
|
159
185
|
environmentVariableName: string;
|
|
@@ -19,29 +19,48 @@ function isAllEndpoints(endpointOverrides) {
|
|
|
19
19
|
*/
|
|
20
20
|
class CredentialProvider {
|
|
21
21
|
/**
|
|
22
|
-
* @deprecated use fromEnvVarV2() instead
|
|
22
|
+
* @deprecated use fromEnvVarV2() instead. This method only supports legacy JWT tokens and v1 api keys.
|
|
23
|
+
* Use fromEnvVarV2() for current v2 API keys.
|
|
23
24
|
*/
|
|
24
25
|
static fromEnvironmentVariable(props) {
|
|
25
26
|
return new EnvMomentoTokenProvider(props);
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
|
-
* @deprecated use fromEnvVarV2() instead
|
|
29
|
+
* @deprecated use fromEnvVarV2() instead. This method only supports legacy JWT tokens and v1 api keys.
|
|
30
|
+
* Use fromEnvVarV2() for current v2 API keys.
|
|
29
31
|
*/
|
|
30
32
|
static fromEnvVar(props) {
|
|
31
33
|
return new EnvMomentoTokenProvider(props);
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
|
-
* @deprecated use fromApiKeyV2() or fromDisposableToken()
|
|
36
|
+
* @deprecated use fromApiKeyV2() for long-lived v2 API keys or fromDisposableToken() for short-lived
|
|
37
|
+
* disposable tokens instead.
|
|
35
38
|
*/
|
|
36
39
|
static fromString(props) {
|
|
37
40
|
return new StringMomentoTokenProvider(props);
|
|
38
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Creates a CredentialProvider from a short-lived disposable token string. Disposable tokens are generated
|
|
44
|
+
* via AuthClient.generateDisposableToken() and has a mandatory expiration time. They are intended for browser and
|
|
45
|
+
* client-side use where embedding a long-lived API key would be insecure.
|
|
46
|
+
*
|
|
47
|
+
* Do NOT use this method with a long-lived v2 API key — use fromEnvVarV2() or fromApiKeyV2() instead.
|
|
48
|
+
*/
|
|
39
49
|
static fromDisposableToken(props) {
|
|
40
50
|
return new StringMomentoTokenProvider(props);
|
|
41
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates a CredentialProvider by reading a v2 API key and service endpoint from environment variables
|
|
54
|
+
* MOMENTO_API_KEY and MOMENTO_ENDPOINT, respectively.
|
|
55
|
+
* V2 API keys are created via the Momento console.
|
|
56
|
+
*/
|
|
42
57
|
static fromEnvVarV2(props) {
|
|
43
58
|
return new EnvMomentoV2TokenProvider(props);
|
|
44
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates a CredentialProvider from a v2 API key string and service endpoint string.
|
|
62
|
+
* V2 API keys are created via the Momento console.
|
|
63
|
+
*/
|
|
45
64
|
static fromApiKeyV2(props) {
|
|
46
65
|
return new ApiKeyV2TokenProvider(props);
|
|
47
66
|
}
|
|
@@ -65,10 +84,13 @@ class CredentialProviderBase {
|
|
|
65
84
|
}
|
|
66
85
|
}
|
|
67
86
|
/**
|
|
68
|
-
* Reads and parses a
|
|
87
|
+
* Reads and parses a legacy credential stored as a string. Supports the base64-encoded
|
|
88
|
+
* format used by disposable tokens and legacy v1 api keys. Does NOT
|
|
89
|
+
* support v2 API keys -— use ApiKeyV2TokenProvider for those.
|
|
69
90
|
* @export
|
|
70
91
|
* @class StringMomentoTokenProvider
|
|
71
|
-
* @deprecated use ApiKeyV2TokenProvider
|
|
92
|
+
* @deprecated use ApiKeyV2TokenProvider for v2 API keys; use this class only for disposable tokens
|
|
93
|
+
* via CredentialProvider.fromDisposableToken()
|
|
72
94
|
*/
|
|
73
95
|
class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
74
96
|
/**
|
|
@@ -161,10 +183,12 @@ class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
|
161
183
|
}
|
|
162
184
|
exports.StringMomentoTokenProvider = StringMomentoTokenProvider;
|
|
163
185
|
/**
|
|
164
|
-
* Reads
|
|
186
|
+
* Reads a legacy credential from an environment variable. Supports the base64-encoded
|
|
187
|
+
* format used by disposable tokens and the legacy v1 api keys. Does NOT
|
|
188
|
+
* support v2 API keys -— use EnvMomentoV2TokenProvider for those.
|
|
165
189
|
* @export
|
|
166
190
|
* @class EnvMomentoTokenProvider
|
|
167
|
-
* @deprecated use EnvMomentoV2TokenProvider
|
|
191
|
+
* @deprecated use EnvMomentoV2TokenProvider (via CredentialProvider.fromEnvVarV2()) for v2 API keys
|
|
168
192
|
*/
|
|
169
193
|
class EnvMomentoTokenProvider extends StringMomentoTokenProvider {
|
|
170
194
|
/**
|
|
@@ -375,4 +399,4 @@ class EnvMomentoV2TokenProvider extends ApiKeyV2TokenProvider {
|
|
|
375
399
|
}
|
|
376
400
|
}
|
|
377
401
|
exports.EnvMomentoV2TokenProvider = EnvMomentoV2TokenProvider;
|
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBTTJCO0FBVTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQixrQkFBa0I7SUFxRHRDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUM1QixLQUE0QztRQUU1QyxPQUFPLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUE0QztRQUU1QyxPQUFPLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUErQztRQUUvQyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FDeEIsS0FBK0M7UUFFL0MsT0FBTyxJQUFJLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUNqQixLQUFzQztRQUV0QyxPQUFPLElBQUkseUJBQXlCLENBQUMsS0FB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RCxJQUFJLENBQUMsSUFBQSxrQkFBVSxFQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOElBQThJLENBQy9JLENBQUM7U0FDSDtRQUNELEtBQUssQ0FBQztZQUNKLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRDRCw4REFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBbGxFbmRwb2ludHMsXG4gIGRlY29kZUF1dGhUb2tlbixcbiAgZnJvbUVudHJpZXMsXG4gIGlzVjJBcGlLZXksXG4gIHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludCxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFbmRwb2ludE92ZXJyaWRlIHtcbiAgYmFzZUVuZHBvaW50OiBzdHJpbmc7XG4gIGVuZHBvaW50UHJlZml4Pzogc3RyaW5nO1xuICBzZWN1cmVDb25uZWN0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW5kcG9pbnRPdmVycmlkZXMgPSBCYXNlRW5kcG9pbnRPdmVycmlkZSB8IEFsbEVuZHBvaW50cztcblxuZnVuY3Rpb24gaXNCYXNlRW5kcG9pbnRPdmVycmlkZShcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBCYXNlRW5kcG9pbnRPdmVycmlkZSB7XG4gIHJldHVybiAoZW5kcG9pbnRPdmVycmlkZXMgYXMgQmFzZUVuZHBvaW50T3ZlcnJpZGUpLmJhc2VFbmRwb2ludCAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FsbEVuZHBvaW50cyhcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBBbGxFbmRwb2ludHMge1xuICBjb25zdCBhbGxFbmRwb2ludHMgPSBlbmRwb2ludE92ZXJyaWRlcyBhcyBBbGxFbmRwb2ludHM7XG4gIHJldHVybiAoXG4gICAgYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy50b2tlbkVuZHBvaW50ICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYXJndW1lbnRzIGZvciBpbnN0YW50aWF0aW5nIGFuIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyXG4gKi9cbmludGVyZmFjZSBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIGVuZHBvaW50T3ZlcnJpZGVzPzogRW5kcG9pbnRPdmVycmlkZXM7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCB0aGUgQ2FjaGVDbGllbnQgbmVlZHMgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhbmQgYXV0aGVudGljYXRlIHdpdGhcbiAqIHRoZSBNb21lbnRvIHNlcnZpY2UuXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEF1dGggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciwgcmVxdWlyZWQgdG8gYXV0aGVudGljYXRlIHdpdGggdGhlIHNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IGdldEF1dGhUb2tlbigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gY29udHJvbCBwbGFuZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNFbmRwb2ludFNlY3VyZSgpIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gZGF0YSBwbGFuZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzRW5kcG9pbnRTZWN1cmUoKSBpbnN0ZWFkXG4gICAqL1xuICBhYnN0cmFjdCBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byB0b2tlbiBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzRW5kcG9pbnRTZWN1cmUoKSBpbnN0ZWFkXG4gICAqL1xuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgdGhlIHN0YXRpYyBtZXRob2QgZm9yTW9tZW50b0xvY2FsIGluc3RlYWRcbiAgICpcbiAgICogTW9kaWZpZXMgdGhlIGluc3RhbmNlIG9mIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHRvIG92ZXJyaWRlIGVuZHBvaW50cyB0b1xuICAgKiBhbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byB0aGUgbW9tZW50by1sb2NhbCBzZXJ2aWNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAqL1xuICBhYnN0cmFjdCB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlcjtcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVuZHBvaW50cyB3ZXJlIG1hbnVhbGx5IG92ZXJyaWRkZW4gYXQgY29uc3RydWN0aW9uIHRpbWU7IGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYWJzdHJhY3QgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuO1xuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29ubmVjdGluZyB0byB0aGUgZW5kcG9pbnQgY29ubmVjdGlvbiB3aXRoIFRMUzsgZmFsc2UgaWYgbm90IHVzaW5nIFRMU1xuICAgKi9cbiAgYWJzdHJhY3QgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUVudlZhclYyKCkgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21FbnZWYXJWMigpIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tRW52VmFyKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21BcGlLZXlWMigpIG9yIGZyb21EaXNwb3NhYmxlVG9rZW4oKSBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyhcbiAgICBwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZ1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21EaXNwb3NhYmxlVG9rZW4oXG4gICAgcHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmdcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW52VmFyVjIoXG4gICAgcHJvcHM/OiBFbnZNb21lbnRvVjJUb2tlblByb3ZpZGVyUHJvcHNcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21BcGlLZXlWMihwcm9wczogQXBpS2V5VjJUb2tlblByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgQXBpS2V5VjJUb2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqIERvZXMgbm90IHJlcXVpcmUgYSBNb21lbnRvIEFQSSBrZXkuXG4gICAqIEBwYXJhbSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gbW9tZW50by1sb2NhbFxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsUHJvdmlkZXJcbiAgICovXG4gIHN0YXRpYyBmb3JNb21lbnRvTG9jYWwocHJvcHM6IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIocHJvcHMpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHZhbHVlT2YoKTogb2JqZWN0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnYXV0aFRva2VuJyk7XG4gICAgY29uc3QgY2xvbmUgPSBmcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xvbmUudmFsdWVPZigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0FwaUtleVByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhcGlLZXkgdGhlIG1vbWVudG8gQVBJIGtleVxuICAgKi9cbiAgYXBpS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhdXRoVG9rZW4gdGhlIG1vbWVudG8gYXV0aCB0b2tlblxuICAgKi9cbiAgYXV0aFRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgPVxuICB8IFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIHwgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHM7XG5cbmV4cG9ydCB0eXBlIEFwaUtleVYyVG9rZW5Qcm92aWRlclByb3BzID0gU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyAmIHtcbiAgZW5kcG9pbnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlclByb3BzIHtcbiAgYXBpS2V5RW52VmFyPzogc3RyaW5nO1xuICBlbmRwb2ludEVudlZhcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGEgbW9tZW50byBhdXRoIHRva2VuIHN0b3JlZCBpbiBhIFN0cmluZ1xuICogQGV4cG9ydFxuICogQGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyXG4gKiBAZGVwcmVjYXRlZCB1c2UgQXBpS2V5VjJUb2tlblByb3ZpZGVyIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsRW5kcG9pbnRzOiBBbGxFbmRwb2ludHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzT3ZlcnJpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvcHMgPSB7YXBpS2V5OiBwcm9wc307XG4gICAgfVxuICAgIHN1cGVyKCk7XG4gICAgbGV0IGtleTogc3RyaW5nO1xuICAgIGlmICgnYXV0aFRva2VuJyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXV0aFRva2VuO1xuICAgIH0gZWxzZSBpZiAoJ2FwaUtleScgaW4gcHJvcHMpIHtcbiAgICAgIGtleSA9IHByb3BzLmFwaUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBhdXRoVG9rZW4gb3IgYXBpS2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGRlY29kZUF1dGhUb2tlbihrZXkpO1xuICAgIHRoaXMuYXBpS2V5ID0gZGVjb2RlZFRva2VuLmF1dGhUb2tlbjtcbiAgICBpZiAocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLmNvbnRyb2xFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIGNvbnRyb2wgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRyb2xFbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVkVG9rZW4uY2FjaGVFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhY2hlIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSBjYWNoZUVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZWRUb2tlbi50b2tlbkVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgdG9rZW4gZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIHRva2VuRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWxsRW5kcG9pbnRzID0ge1xuICAgICAgICBjb250cm9sRW5kcG9pbnQ6IGRlY29kZWRUb2tlbi5jb250cm9sRW5kcG9pbnQsXG4gICAgICAgIGNhY2hlRW5kcG9pbnQ6IGRlY29kZWRUb2tlbi5jYWNoZUVuZHBvaW50LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBkZWNvZGVkVG9rZW4udG9rZW5FbmRwb2ludCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQ7XG4gIH1cbiAgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQ7XG4gIH1cblxuICBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgaXNTdG9yYWdlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuO1xuICB9XG5cbiAgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBNb21lbnRvTG9jYWxQcm92aWRlcigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmcm9tIHdoaWNoIHRoZSBhdXRoIHRva2VuIHdpbGwgYmUgcmVhZFxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGEgbW9tZW50byBhdXRoIHRva2VuIHN0b3JlZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclxuICogQGRlcHJlY2F0ZWQgdXNlIEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXIgaW5zdGVhZFxuICovXG5leHBvcnQgY2xhc3MgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlciB7XG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm9wcyA9IHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogcHJvcHN9O1xuICAgIH1cbiAgICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudltwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZV07XG4gICAgaWYgKCFhdXRoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgJHtwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlcih7XG4gICAgICBhdXRoVG9rZW46IGF1dGhUb2tlbixcbiAgICAgIGVuZHBvaW50T3ZlcnJpZGVzOiBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyxcbiAgICB9KTtcbiAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGVOYW1lID0gcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyIGJhc2VkIG9uIHdoaWNoIGtleSB3YXMgcHJvdmlkZWQgKHYyIG9yIGxlZ2FjeSkuXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJucyB7Q3JlZGVudGlhbFByb3ZpZGVyfSB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIENyZWRlbnRpYWxQcm92aWRlci5mcm9tRW52VmFyVjIoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgIHJldHVybiBDcmVkZW50aWFsUHJvdmlkZXIuZnJvbUVudlZhcignTU9NRU5UT19BUElfS0VZJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb21lbnRvTG9jYWxQcm92aWRlclByb3BzIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGhvc3RuYW1lIG9mIHRoZSBtb21lbnRvLWxvY2FsIHNlcnZpY2VcbiAgICovXG4gIGhvc3RuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBvcnQgb2YgdGhlIG1vbWVudG8tbG9jYWwgc2VydmljZVxuICAgKi9cbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE1vbWVudG9Mb2NhbFByb3ZpZGVyIGltcGxlbWVudHMgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNPdmVycmlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge01vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgY29ubmVjdGluZyB0byBtb21lbnRvLWxvY2FsXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHByb3BzPy5ob3N0bmFtZSB8fCAnMTI3LjAuMC4xJztcbiAgICBjb25zdCBwb3J0ID0gcHJvcHM/LnBvcnQgfHwgODA4MDtcbiAgICBjb25zdCBtb21lbnRvTG9jYWxFbmRwb2ludCA9IGAke2hvc3RuYW1lfToke3BvcnR9YDtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogbW9tZW50b0xvY2FsRW5kcG9pbnQsXG4gICAgICAgIGNhY2hlRW5kcG9pbnQ6IG1vbWVudG9Mb2NhbEVuZHBvaW50LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgICAgc2VjdXJlQ29ubmVjdGlvbjogZmFsc2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNBbGxFbmRwb2ludHMocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcztcbiAgICB9IGVsc2UgaWYgKGlzQmFzZUVuZHBvaW50T3ZlcnJpZGUocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwb3B1bGF0ZUFsbEVuZHBvaW50c0Zyb21CYXNlRW5kcG9pbnQoXG4gICAgICAgIHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgYFVuc3VwcG9ydGVkIGVuZHBvaW50T3ZlcnJpZGVzOiAke3Byb3BzLmVuZHBvaW50T3ZlcnJpZGVzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXV0aFRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50O1xuICB9XG5cbiAgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQ7XG4gIH1cblxuICBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuO1xuICB9XG5cbiAgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBNb21lbnRvTG9jYWxQcm92aWRlcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlLZXlWMlRva2VuUHJvdmlkZXIgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcblxuICAvKipcbiAgICogQHBhcmFtIHtBcGlLZXlWMlRva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBcGlLZXlWMlRva2VuUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgbGV0IGtleTogc3RyaW5nO1xuICAgIGlmICgnYXV0aFRva2VuJyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXV0aFRva2VuO1xuICAgIH0gZWxzZSBpZiAoJ2FwaUtleScgaW4gcHJvcHMpIHtcbiAgICAgIGtleSA9IHByb3BzLmFwaUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBhdXRoVG9rZW4gb3IgYXBpS2V5Jyk7XG4gICAgfVxuICAgIGlmICgha2V5Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBUEkga2V5IGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKCFpc1YyQXBpS2V5KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlY2VpdmVkIGFuIGludmFsaWQgdjIgQVBJIGtleS4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBrZXk/IE9yIGRpZCB5b3UgbWVhbiB0byB1c2UgYGZyb21TdHJpbmcoKWAgd2l0aCBhIGxlZ2FjeSBrZXkgaW5zdGVhZD8nXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBlbmRwb2ludDogc3RyaW5nO1xuICAgIGlmICgnZW5kcG9pbnQnIGluIHByb3BzKSB7XG4gICAgICBlbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGVuZHBvaW50Jyk7XG4gICAgfVxuICAgIGlmICghZW5kcG9pbnQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuZHBvaW50IGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGtleTtcbiAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgIGNvbnRyb2xFbmRwb2ludDogJ2NvbnRyb2wuJyArIGVuZHBvaW50LFxuICAgICAgY2FjaGVFbmRwb2ludDogJ2NhY2hlLicgKyBlbmRwb2ludCxcbiAgICAgIHRva2VuRW5kcG9pbnQ6ICd0b2tlbi4nICsgZW5kcG9pbnQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEF1dGhUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludDtcbiAgfVxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBpc1N0b3JhZ2VFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uO1xuICB9XG5cbiAgd2l0aE1vbWVudG9Mb2NhbCgpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlciBleHRlbmRzIEFwaUtleVYyVG9rZW5Qcm92aWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vudk1vbWVudG9WMlRva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlclByb3BzKSB7XG4gICAgY29uc3QgYXBpS2V5RW52VmFyID0gcHJvcHM/LmFwaUtleUVudlZhciB8fCAnTU9NRU5UT19BUElfS0VZJztcbiAgICBjb25zdCBlbmRwb2ludEVudlZhciA9IHByb3BzPy5lbmRwb2ludEVudlZhciB8fCAnTU9NRU5UT19FTkRQT0lOVCc7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHByb2Nlc3MuZW52W2VuZHBvaW50RW52VmFyXTtcbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVtcHR5IHZhbHVlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2VuZHBvaW50RW52VmFyfWApO1xuICAgIH1cbiAgICBpZiAoIWVuZHBvaW50Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRW5kcG9pbnQgZW52aXJvbm1lbnQgdmFyaWFibGUgJHtlbmRwb2ludEVudlZhcn0gY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0aFRva2VuID0gcHJvY2Vzcy5lbnZbYXBpS2V5RW52VmFyXTtcbiAgICBpZiAoIWF1dGhUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbXB0eSB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgJHthcGlLZXlFbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmICghYXV0aFRva2VuLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQVBJIGtleSBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2FwaUtleUVudlZhcn0gY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1YyQXBpS2V5KGF1dGhUb2tlbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlY2VpdmVkIGFuIGludmFsaWQgdjIgQVBJIGtleS4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBrZXk/IE9yIGRpZCB5b3UgbWVhbiB0byB1c2UgYGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKClgIHdpdGggYSBsZWdhY3kga2V5IGluc3RlYWQ/J1xuICAgICAgKTtcbiAgICB9XG4gICAgc3VwZXIoe1xuICAgICAgYXV0aFRva2VuOiBhdXRoVG9rZW4sXG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBTTJCO0FBVTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQixrQkFBa0I7SUF1RHRDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsS0FBNEM7UUFFNUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUNmLEtBQTRDO1FBRTVDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUErQztRQUUvQyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxtQkFBbUIsQ0FDeEIsS0FBK0M7UUFFL0MsT0FBTyxJQUFJLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FDakIsS0FBc0M7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S0FBSyxDQUNiLGdDQUFnQyxZQUFZLDRCQUE0QixDQUN6RSxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsSUFBQSxrQkFBVSxFQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOElBQThJLENBQy9JLENBQUM7U0FDSDtRQUNELEtBQUssQ0FBQztZQUNKLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRDRCw4REFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBbGxFbmRwb2ludHMsXG4gIGRlY29kZUF1dGhUb2tlbixcbiAgZnJvbUVudHJpZXMsXG4gIGlzVjJBcGlLZXksXG4gIHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludCxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFbmRwb2ludE92ZXJyaWRlIHtcbiAgYmFzZUVuZHBvaW50OiBzdHJpbmc7XG4gIGVuZHBvaW50UHJlZml4Pzogc3RyaW5nO1xuICBzZWN1cmVDb25uZWN0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW5kcG9pbnRPdmVycmlkZXMgPSBCYXNlRW5kcG9pbnRPdmVycmlkZSB8IEFsbEVuZHBvaW50cztcblxuZnVuY3Rpb24gaXNCYXNlRW5kcG9pbnRPdmVycmlkZShcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBCYXNlRW5kcG9pbnRPdmVycmlkZSB7XG4gIHJldHVybiAoZW5kcG9pbnRPdmVycmlkZXMgYXMgQmFzZUVuZHBvaW50T3ZlcnJpZGUpLmJhc2VFbmRwb2ludCAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FsbEVuZHBvaW50cyhcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBBbGxFbmRwb2ludHMge1xuICBjb25zdCBhbGxFbmRwb2ludHMgPSBlbmRwb2ludE92ZXJyaWRlcyBhcyBBbGxFbmRwb2ludHM7XG4gIHJldHVybiAoXG4gICAgYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy50b2tlbkVuZHBvaW50ICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYXJndW1lbnRzIGZvciBpbnN0YW50aWF0aW5nIGFuIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyXG4gKi9cbmludGVyZmFjZSBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIGVuZHBvaW50T3ZlcnJpZGVzPzogRW5kcG9pbnRPdmVycmlkZXM7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCB0aGUgQ2FjaGVDbGllbnQgbmVlZHMgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhbmQgYXV0aGVudGljYXRlIHdpdGhcbiAqIHRoZSBNb21lbnRvIHNlcnZpY2UuXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByYXcgY3JlZGVudGlhbCB2YWx1ZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBzZXJ2aWNlLiBUaGlzIHdpbGwgYmUgZWl0aGVyIGFcbiAgICogdjIgQVBJIGtleSAoZm9yIGxvbmctbGl2ZWQgY3JlZGVudGlhbHMgY3JlYXRlZCB2aWEgdGhlIE1vbWVudG8gY29uc29sZSkgb3IgYSBkaXNwb3NhYmxlIHRva2VuIChmb3JcbiAgICogc2hvcnQtbGl2ZWQgY3JlZGVudGlhbHMgY3JlYXRlZCB2aWEgQXV0aENsaWVudC5nZW5lcmF0ZURpc3Bvc2FibGVUb2tlbikuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzRW5kcG9pbnRTZWN1cmUoKSBpbnN0ZWFkXG4gICAqL1xuICBhYnN0cmFjdCBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIGRhdGEgcGxhbmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBpc0VuZHBvaW50U2VjdXJlKCkgaW5zdGVhZFxuICAgKi9cbiAgYWJzdHJhY3QgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gdG9rZW4gb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBpc0VuZHBvaW50U2VjdXJlKCkgaW5zdGVhZFxuICAgKi9cbiAgYWJzdHJhY3QgaXNUb2tlbkVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIHRoZSBzdGF0aWMgbWV0aG9kIGZvck1vbWVudG9Mb2NhbCBpbnN0ZWFkXG4gICAqXG4gICAqIE1vZGlmaWVzIHRoZSBpbnN0YW5jZSBvZiB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB0byBvdmVycmlkZSBlbmRwb2ludHMgdG9cbiAgICogYWxsb3cgaW5zZWN1cmUgY29ubmVjdGlvbnMgdG8gdGhlIG1vbWVudG8tbG9jYWwgc2VydmljZSBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgKi9cbiAgYWJzdHJhY3Qgd2l0aE1vbWVudG9Mb2NhbCgpOiBDcmVkZW50aWFsUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBlbmRwb2ludHMgd2VyZSBtYW51YWxseSBvdmVycmlkZGVuIGF0IGNvbnN0cnVjdGlvbiB0aW1lOyBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGFic3RyYWN0IGFyZUVuZHBvaW50c092ZXJyaWRkZW4oKTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGNvbm5lY3RpbmcgdG8gdGhlIGVuZHBvaW50IGNvbm5lY3Rpb24gd2l0aCBUTFM7IGZhbHNlIGlmIG5vdCB1c2luZyBUTFNcbiAgICovXG4gIGFic3RyYWN0IGlzRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21FbnZWYXJWMigpIGluc3RlYWQuIFRoaXMgbWV0aG9kIG9ubHkgc3VwcG9ydHMgbGVnYWN5IEpXVCB0b2tlbnMgYW5kIHYxIGFwaSBrZXlzLlxuICAgKiBVc2UgZnJvbUVudlZhclYyKCkgZm9yIGN1cnJlbnQgdjIgQVBJIGtleXMuXG4gICAqL1xuICBzdGF0aWMgZnJvbUVudmlyb25tZW50VmFyaWFibGUoXG4gICAgcHJvcHM6IEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmdcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IEVudk1vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUVudlZhclYyKCkgaW5zdGVhZC4gVGhpcyBtZXRob2Qgb25seSBzdXBwb3J0cyBsZWdhY3kgSldUIHRva2VucyBhbmQgdjEgYXBpIGtleXMuXG4gICAqIFVzZSBmcm9tRW52VmFyVjIoKSBmb3IgY3VycmVudCB2MiBBUEkga2V5cy5cbiAgICovXG4gIHN0YXRpYyBmcm9tRW52VmFyKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21BcGlLZXlWMigpIGZvciBsb25nLWxpdmVkIHYyIEFQSSBrZXlzIG9yIGZyb21EaXNwb3NhYmxlVG9rZW4oKSBmb3Igc2hvcnQtbGl2ZWRcbiAgICogZGlzcG9zYWJsZSB0b2tlbnMgaW5zdGVhZC5cbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nKFxuICAgIHByb3BzOiBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENyZWRlbnRpYWxQcm92aWRlciBmcm9tIGEgc2hvcnQtbGl2ZWQgZGlzcG9zYWJsZSB0b2tlbiBzdHJpbmcuIERpc3Bvc2FibGUgdG9rZW5zIGFyZSBnZW5lcmF0ZWRcbiAgICogdmlhIEF1dGhDbGllbnQuZ2VuZXJhdGVEaXNwb3NhYmxlVG9rZW4oKSBhbmQgaGFzIGEgbWFuZGF0b3J5IGV4cGlyYXRpb24gdGltZS4gVGhleSBhcmUgaW50ZW5kZWQgZm9yIGJyb3dzZXIgYW5kXG4gICAqIGNsaWVudC1zaWRlIHVzZSB3aGVyZSBlbWJlZGRpbmcgYSBsb25nLWxpdmVkIEFQSSBrZXkgd291bGQgYmUgaW5zZWN1cmUuXG4gICAqXG4gICAqIERvIE5PVCB1c2UgdGhpcyBtZXRob2Qgd2l0aCBhIGxvbmctbGl2ZWQgdjIgQVBJIGtleSDigJQgdXNlIGZyb21FbnZWYXJWMigpIG9yIGZyb21BcGlLZXlWMigpIGluc3RlYWQuXG4gICAqL1xuICBzdGF0aWMgZnJvbURpc3Bvc2FibGVUb2tlbihcbiAgICBwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZ1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDcmVkZW50aWFsUHJvdmlkZXIgYnkgcmVhZGluZyBhIHYyIEFQSSBrZXkgYW5kIHNlcnZpY2UgZW5kcG9pbnQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogTU9NRU5UT19BUElfS0VZIGFuZCBNT01FTlRPX0VORFBPSU5ULCByZXNwZWN0aXZlbHkuXG4gICAqIFYyIEFQSSBrZXlzIGFyZSBjcmVhdGVkIHZpYSB0aGUgTW9tZW50byBjb25zb2xlLlxuICAgKi9cbiAgc3RhdGljIGZyb21FbnZWYXJWMihcbiAgICBwcm9wcz86IEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXJQcm9wc1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENyZWRlbnRpYWxQcm92aWRlciBmcm9tIGEgdjIgQVBJIGtleSBzdHJpbmcgYW5kIHNlcnZpY2UgZW5kcG9pbnQgc3RyaW5nLlxuICAgKiBWMiBBUEkga2V5cyBhcmUgY3JlYXRlZCB2aWEgdGhlIE1vbWVudG8gY29uc29sZS5cbiAgICovXG4gIHN0YXRpYyBmcm9tQXBpS2V5VjIocHJvcHM6IEFwaUtleVYyVG9rZW5Qcm92aWRlclByb3BzKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IEFwaUtleVYyVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgaW5zZWN1cmUgY29ubmVjdGlvbnMgdG8gbW9tZW50by1sb2NhbCBzZXJ2aWNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKiBEb2VzIG5vdCByZXF1aXJlIGEgTW9tZW50byBBUEkga2V5LlxuICAgKiBAcGFyYW0gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb25uZWN0aW5nIHRvIG1vbWVudG8tbG9jYWxcbiAgICogQHJldHVybnMgQ3JlZGVudGlhbFByb3ZpZGVyXG4gICAqL1xuICBzdGF0aWMgZm9yTW9tZW50b0xvY2FsKHByb3BzOiBNb21lbnRvTG9jYWxQcm92aWRlclByb3BzKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKHByb3BzKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBDcmVkZW50aWFsUHJvdmlkZXJCYXNlIGltcGxlbWVudHMgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgYWJzdHJhY3QgZ2V0QXV0aFRva2VuKCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNUb2tlbkVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGlzRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlcjtcblxuICB2YWx1ZU9mKCk6IG9iamVjdCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzKS5maWx0ZXIoKFtrXSkgPT4gayAhPT0gJ2F1dGhUb2tlbicpO1xuICAgIGNvbnN0IGNsb25lID0gZnJvbUVudHJpZXMoZW50cmllcyk7XG4gICAgcmV0dXJuIGNsb25lLnZhbHVlT2YoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogYXBpS2V5IHRoZSBtb21lbnRvIEFQSSBrZXlcbiAgICovXG4gIGFwaUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ01vbWVudG9BdXRoVG9rZW5Qcm92aWRlclByb3BzXG4gIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogYXV0aFRva2VuIHRoZSBtb21lbnRvIGF1dGggdG9rZW5cbiAgICovXG4gIGF1dGhUb2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzID1cbiAgfCBTdHJpbmdNb21lbnRvQXBpS2V5UHJvdmlkZXJQcm9wc1xuICB8IFN0cmluZ01vbWVudG9BdXRoVG9rZW5Qcm92aWRlclByb3BzO1xuXG5leHBvcnQgdHlwZSBBcGlLZXlWMlRva2VuUHJvdmlkZXJQcm9wcyA9IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgJiB7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXJQcm9wcyB7XG4gIGFwaUtleUVudlZhcj86IHN0cmluZztcbiAgZW5kcG9pbnRFbnZWYXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBhIGxlZ2FjeSBjcmVkZW50aWFsIHN0b3JlZCBhcyBhIHN0cmluZy4gU3VwcG9ydHMgdGhlIGJhc2U2NC1lbmNvZGVkXG4gKiBmb3JtYXQgdXNlZCBieSBkaXNwb3NhYmxlIHRva2VucyBhbmQgbGVnYWN5IHYxIGFwaSBrZXlzLiBEb2VzIE5PVFxuICogc3VwcG9ydCB2MiBBUEkga2V5cyAt4oCUIHVzZSBBcGlLZXlWMlRva2VuUHJvdmlkZXIgZm9yIHRob3NlLlxuICogQGV4cG9ydFxuICogQGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyXG4gKiBAZGVwcmVjYXRlZCB1c2UgQXBpS2V5VjJUb2tlblByb3ZpZGVyIGZvciB2MiBBUEkga2V5czsgdXNlIHRoaXMgY2xhc3Mgb25seSBmb3IgZGlzcG9zYWJsZSB0b2tlbnNcbiAqIHZpYSBDcmVkZW50aWFsUHJvdmlkZXIuZnJvbURpc3Bvc2FibGVUb2tlbigpXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlciBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlckJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbEVuZHBvaW50czogQWxsRW5kcG9pbnRzO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c092ZXJyaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3BzID0ge2FwaUtleTogcHJvcHN9O1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIGxldCBrZXk6IHN0cmluZztcbiAgICBpZiAoJ2F1dGhUb2tlbicgaW4gcHJvcHMpIHtcbiAgICAgIGtleSA9IHByb3BzLmF1dGhUb2tlbjtcbiAgICB9IGVsc2UgaWYgKCdhcGlLZXknIGluIHByb3BzKSB7XG4gICAgICBrZXkgPSBwcm9wcy5hcGlLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogYXV0aFRva2VuIG9yIGFwaUtleScpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBkZWNvZGVBdXRoVG9rZW4oa2V5KTtcbiAgICB0aGlzLmFwaUtleSA9IGRlY29kZWRUb2tlbi5hdXRoVG9rZW47XG4gICAgaWYgKHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgaWYgKGRlY29kZWRUb2tlbi5jb250cm9sRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSBjb250cm9sIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250cm9sRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLmNhY2hlRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSBjYWNoZSBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgY2FjaGVFbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVkVG9rZW4udG9rZW5FbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIHRva2VuIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSB0b2tlbkVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgICAgY29udHJvbEVuZHBvaW50OiBkZWNvZGVkVG9rZW4uY29udHJvbEVuZHBvaW50LFxuICAgICAgICBjYWNoZUVuZHBvaW50OiBkZWNvZGVkVG9rZW4uY2FjaGVFbmRwb2ludCxcbiAgICAgICAgdG9rZW5FbmRwb2ludDogZGVjb2RlZFRva2VuLnRva2VuRW5kcG9pbnQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNBbGxFbmRwb2ludHMocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcztcbiAgICB9IGVsc2UgaWYgKGlzQmFzZUVuZHBvaW50T3ZlcnJpZGUocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwb3B1bGF0ZUFsbEVuZHBvaW50c0Zyb21CYXNlRW5kcG9pbnQoXG4gICAgICAgIHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgYFVuc3VwcG9ydGVkIGVuZHBvaW50T3ZlcnJpZGVzOiAke3Byb3BzLmVuZHBvaW50T3ZlcnJpZGVzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXV0aFRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5O1xuICB9XG5cbiAgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50O1xuICB9XG4gIGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY29udHJvbEVuZHBvaW50O1xuICB9XG5cbiAgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy50b2tlbkVuZHBvaW50O1xuICB9XG5cbiAgaXNUb2tlbkVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGlzU3RvcmFnZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGFyZUVuZHBvaW50c092ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbjtcbiAgfVxuXG4gIGlzRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uO1xuICB9XG5cbiAgd2l0aE1vbWVudG9Mb2NhbCgpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSB3aGljaCB0aGUgYXV0aCB0b2tlbiB3aWxsIGJlIHJlYWRcbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgYSBsZWdhY3kgY3JlZGVudGlhbCBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBTdXBwb3J0cyB0aGUgYmFzZTY0LWVuY29kZWRcbiAqIGZvcm1hdCB1c2VkIGJ5IGRpc3Bvc2FibGUgdG9rZW5zIGFuZCB0aGUgbGVnYWN5IHYxIGFwaSBrZXlzLiBEb2VzIE5PVFxuICogc3VwcG9ydCB2MiBBUEkga2V5cyAt4oCUIHVzZSBFbnZNb21lbnRvVjJUb2tlblByb3ZpZGVyIGZvciB0aG9zZS5cbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclxuICogQGRlcHJlY2F0ZWQgdXNlIEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXIgKHZpYSBDcmVkZW50aWFsUHJvdmlkZXIuZnJvbUVudlZhclYyKCkpIGZvciB2MiBBUEkga2V5c1xuICovXG5leHBvcnQgY2xhc3MgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlciB7XG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm9wcyA9IHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogcHJvcHN9O1xuICAgIH1cbiAgICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudltwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZV07XG4gICAgaWYgKCFhdXRoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgJHtwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlcih7XG4gICAgICBhdXRoVG9rZW46IGF1dGhUb2tlbixcbiAgICAgIGVuZHBvaW50T3ZlcnJpZGVzOiBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyxcbiAgICB9KTtcbiAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGVOYW1lID0gcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyIGJhc2VkIG9uIHdoaWNoIGtleSB3YXMgcHJvdmlkZWQgKHYyIG9yIGxlZ2FjeSkuXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJucyB7Q3JlZGVudGlhbFByb3ZpZGVyfSB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIENyZWRlbnRpYWxQcm92aWRlci5mcm9tRW52VmFyVjIoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgIHJldHVybiBDcmVkZW50aWFsUHJvdmlkZXIuZnJvbUVudlZhcignTU9NRU5UT19BUElfS0VZJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb21lbnRvTG9jYWxQcm92aWRlclByb3BzIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGhvc3RuYW1lIG9mIHRoZSBtb21lbnRvLWxvY2FsIHNlcnZpY2VcbiAgICovXG4gIGhvc3RuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBvcnQgb2YgdGhlIG1vbWVudG8tbG9jYWwgc2VydmljZVxuICAgKi9cbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE1vbWVudG9Mb2NhbFByb3ZpZGVyIGltcGxlbWVudHMgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNPdmVycmlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge01vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgY29ubmVjdGluZyB0byBtb21lbnRvLWxvY2FsXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHByb3BzPy5ob3N0bmFtZSB8fCAnMTI3LjAuMC4xJztcbiAgICBjb25zdCBwb3J0ID0gcHJvcHM/LnBvcnQgfHwgODA4MDtcbiAgICBjb25zdCBtb21lbnRvTG9jYWxFbmRwb2ludCA9IGAke2hvc3RuYW1lfToke3BvcnR9YDtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogbW9tZW50b0xvY2FsRW5kcG9pbnQsXG4gICAgICAgIGNhY2hlRW5kcG9pbnQ6IG1vbWVudG9Mb2NhbEVuZHBvaW50LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgICAgc2VjdXJlQ29ubmVjdGlvbjogZmFsc2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNBbGxFbmRwb2ludHMocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcztcbiAgICB9IGVsc2UgaWYgKGlzQmFzZUVuZHBvaW50T3ZlcnJpZGUocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwb3B1bGF0ZUFsbEVuZHBvaW50c0Zyb21CYXNlRW5kcG9pbnQoXG4gICAgICAgIHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgYFVuc3VwcG9ydGVkIGVuZHBvaW50T3ZlcnJpZGVzOiAke3Byb3BzLmVuZHBvaW50T3ZlcnJpZGVzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXV0aFRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50O1xuICB9XG5cbiAgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQ7XG4gIH1cblxuICBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuO1xuICB9XG5cbiAgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBNb21lbnRvTG9jYWxQcm92aWRlcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlLZXlWMlRva2VuUHJvdmlkZXIgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcblxuICAvKipcbiAgICogQHBhcmFtIHtBcGlLZXlWMlRva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBcGlLZXlWMlRva2VuUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgbGV0IGtleTogc3RyaW5nO1xuICAgIGlmICgnYXV0aFRva2VuJyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXV0aFRva2VuO1xuICAgIH0gZWxzZSBpZiAoJ2FwaUtleScgaW4gcHJvcHMpIHtcbiAgICAgIGtleSA9IHByb3BzLmFwaUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBhdXRoVG9rZW4gb3IgYXBpS2V5Jyk7XG4gICAgfVxuICAgIGlmICgha2V5Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBUEkga2V5IGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKCFpc1YyQXBpS2V5KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlY2VpdmVkIGFuIGludmFsaWQgdjIgQVBJIGtleS4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBrZXk/IE9yIGRpZCB5b3UgbWVhbiB0byB1c2UgYGZyb21TdHJpbmcoKWAgd2l0aCBhIGxlZ2FjeSBrZXkgaW5zdGVhZD8nXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBlbmRwb2ludDogc3RyaW5nO1xuICAgIGlmICgnZW5kcG9pbnQnIGluIHByb3BzKSB7XG4gICAgICBlbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGVuZHBvaW50Jyk7XG4gICAgfVxuICAgIGlmICghZW5kcG9pbnQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuZHBvaW50IGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGtleTtcbiAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgIGNvbnRyb2xFbmRwb2ludDogJ2NvbnRyb2wuJyArIGVuZHBvaW50LFxuICAgICAgY2FjaGVFbmRwb2ludDogJ2NhY2hlLicgKyBlbmRwb2ludCxcbiAgICAgIHRva2VuRW5kcG9pbnQ6ICd0b2tlbi4nICsgZW5kcG9pbnQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEF1dGhUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludDtcbiAgfVxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBpc1N0b3JhZ2VFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uO1xuICB9XG5cbiAgd2l0aE1vbWVudG9Mb2NhbCgpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlciBleHRlbmRzIEFwaUtleVYyVG9rZW5Qcm92aWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vudk1vbWVudG9WMlRva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlclByb3BzKSB7XG4gICAgY29uc3QgYXBpS2V5RW52VmFyID0gcHJvcHM/LmFwaUtleUVudlZhciB8fCAnTU9NRU5UT19BUElfS0VZJztcbiAgICBjb25zdCBlbmRwb2ludEVudlZhciA9IHByb3BzPy5lbmRwb2ludEVudlZhciB8fCAnTU9NRU5UT19FTkRQT0lOVCc7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHByb2Nlc3MuZW52W2VuZHBvaW50RW52VmFyXTtcbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVtcHR5IHZhbHVlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2VuZHBvaW50RW52VmFyfWApO1xuICAgIH1cbiAgICBpZiAoIWVuZHBvaW50Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRW5kcG9pbnQgZW52aXJvbm1lbnQgdmFyaWFibGUgJHtlbmRwb2ludEVudlZhcn0gY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0aFRva2VuID0gcHJvY2Vzcy5lbnZbYXBpS2V5RW52VmFyXTtcbiAgICBpZiAoIWF1dGhUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbXB0eSB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgJHthcGlLZXlFbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmICghYXV0aFRva2VuLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQVBJIGtleSBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2FwaUtleUVudlZhcn0gY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1YyQXBpS2V5KGF1dGhUb2tlbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlY2VpdmVkIGFuIGludmFsaWQgdjIgQVBJIGtleS4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBrZXk/IE9yIGRpZCB5b3UgbWVhbiB0byB1c2UgYGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKClgIHdpdGggYSBsZWdhY3kga2V5IGluc3RlYWQ/J1xuICAgICAgKTtcbiAgICB9XG4gICAgc3VwZXIoe1xuICAgICAgYXV0aFRva2VuOiBhdXRoVG9rZW4sXG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -9,13 +9,16 @@ export declare abstract class AbstractAuthClient implements IAuthClient {
|
|
|
9
9
|
protected readonly authClient: IAuthClient;
|
|
10
10
|
protected constructor(props: BaseAuthClientProps);
|
|
11
11
|
/**
|
|
12
|
-
* Generates a new API key
|
|
12
|
+
* Generates a new, scoped API key along with a refresh token to refresh it before expiry.
|
|
13
|
+
*
|
|
14
|
+
* **Important:** The API key returned by this method is in the legacy v1 format.
|
|
15
|
+
* V1 are keys are now deprecated and support for them may be removed in a future release.
|
|
13
16
|
*
|
|
14
17
|
* @param {PermissionScope} scope - controls the permissions that the new key will have
|
|
15
|
-
* @param {
|
|
18
|
+
* @param {ExpiresIn} expiresIn - how long the API key should be valid for
|
|
16
19
|
* @returns {Promise<GenerateApiKey.Response>} -
|
|
17
|
-
* {@link GenerateApiKey.Success} containing the API key, refresh token,
|
|
18
|
-
* If the
|
|
20
|
+
* {@link GenerateApiKey.Success} containing the API key, refresh token, endpoint and epoch timestamp when the key expires.
|
|
21
|
+
* If the key never expires, no refresh token will be returned and the expiry timestamp will be infinite.
|
|
19
22
|
* {@link GenerateApiKey.Error} on failure.
|
|
20
23
|
*/
|
|
21
24
|
generateApiKey(scope: PermissionScope, expiresIn: ExpiresIn): Promise<GenerateApiKey.Response>;
|
|
@@ -24,13 +27,17 @@ export declare abstract class AbstractAuthClient implements IAuthClient {
|
|
|
24
27
|
*/
|
|
25
28
|
generateAuthToken(scope: PermissionScope, expiresIn: ExpiresIn): Promise<GenerateApiKey.Response>;
|
|
26
29
|
/**
|
|
27
|
-
* Refreshes an API key
|
|
28
|
-
* The new
|
|
29
|
-
* The original
|
|
30
|
+
* Refreshes an API key generated by `generateApiKey`. Returns a new API key and refresh token.
|
|
31
|
+
* The new key will be valid for the same duration as the original, starting from the time of refresh.
|
|
32
|
+
* The original key remains valid until it expires.
|
|
33
|
+
*
|
|
34
|
+
* **Note:** Only API keys produced by `generateApiKey` (legacy v1 api keys) can be refreshed.
|
|
35
|
+
* Disposable tokens generated by `generateDisposableToken` cannot be refreshed — generate a new one
|
|
36
|
+
* when the old one expires.
|
|
30
37
|
*
|
|
31
|
-
* @param {string} refreshToken -
|
|
38
|
+
* @param {string} refreshToken - the refresh token from a previous `generateApiKey` or `refreshApiKey` response
|
|
32
39
|
* @returns {Promise<RefreshApiKey.Response>} -
|
|
33
|
-
* {@link RefreshApiKey.Success} containing the new API key, refresh token,
|
|
40
|
+
* {@link RefreshApiKey.Success} containing the new API key, refresh token, endpoint and epoch timestamp when the key expires.
|
|
34
41
|
* {@link RefreshApiKey.Error} on failure.
|
|
35
42
|
*/
|
|
36
43
|
refreshApiKey(refreshToken: string): Promise<RefreshApiKey.Response>;
|
|
@@ -39,13 +46,14 @@ export declare abstract class AbstractAuthClient implements IAuthClient {
|
|
|
39
46
|
*/
|
|
40
47
|
refreshAuthToken(refreshToken: string): Promise<RefreshApiKey.Response>;
|
|
41
48
|
/**
|
|
42
|
-
* Generates a new disposable
|
|
49
|
+
* Generates a new disposable token with fine-grained access control.
|
|
50
|
+
* Disposable tokens are short-lived and cannot be refreshed.
|
|
43
51
|
*
|
|
44
52
|
* @param {DisposableTokenScope} scope - controls the permissions that the new token will have
|
|
45
|
-
* @param {
|
|
46
|
-
* @param {DisposableTokenProps} disposableTokenProps -
|
|
53
|
+
* @param {ExpiresIn} expiresIn - how long the token is valid for
|
|
54
|
+
* @param {DisposableTokenProps} disposableTokenProps - additional properties, e.g. a tokenId for audit logging
|
|
47
55
|
* @returns {Promise<GenerateDisposableToken.Response>} -
|
|
48
|
-
* {@link GenerateDisposableToken.Success} containing the
|
|
56
|
+
* {@link GenerateDisposableToken.Success} containing the disposable token, endpoint and epoch timestamp when it expires.
|
|
49
57
|
* {@link GenerateDisposableToken.Error} on failure.
|
|
50
58
|
*/
|
|
51
59
|
generateDisposableToken(scope: DisposableTokenScope, expiresIn: ExpiresIn, disposableTokenProps?: DisposableTokenProps): Promise<GenerateDisposableToken.Response>;
|
|
@@ -6,13 +6,16 @@ class AbstractAuthClient {
|
|
|
6
6
|
this.authClient = props.createAuthClient();
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* Generates a new API key
|
|
9
|
+
* Generates a new, scoped API key along with a refresh token to refresh it before expiry.
|
|
10
|
+
*
|
|
11
|
+
* **Important:** The API key returned by this method is in the legacy v1 format.
|
|
12
|
+
* V1 are keys are now deprecated and support for them may be removed in a future release.
|
|
10
13
|
*
|
|
11
14
|
* @param {PermissionScope} scope - controls the permissions that the new key will have
|
|
12
|
-
* @param {
|
|
15
|
+
* @param {ExpiresIn} expiresIn - how long the API key should be valid for
|
|
13
16
|
* @returns {Promise<GenerateApiKey.Response>} -
|
|
14
|
-
* {@link GenerateApiKey.Success} containing the API key, refresh token,
|
|
15
|
-
* If the
|
|
17
|
+
* {@link GenerateApiKey.Success} containing the API key, refresh token, endpoint and epoch timestamp when the key expires.
|
|
18
|
+
* If the key never expires, no refresh token will be returned and the expiry timestamp will be infinite.
|
|
16
19
|
* {@link GenerateApiKey.Error} on failure.
|
|
17
20
|
*/
|
|
18
21
|
async generateApiKey(scope, expiresIn) {
|
|
@@ -25,13 +28,17 @@ class AbstractAuthClient {
|
|
|
25
28
|
return await this.generateApiKey(scope, expiresIn);
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
28
|
-
* Refreshes an API key
|
|
29
|
-
* The new
|
|
30
|
-
* The original
|
|
31
|
+
* Refreshes an API key generated by `generateApiKey`. Returns a new API key and refresh token.
|
|
32
|
+
* The new key will be valid for the same duration as the original, starting from the time of refresh.
|
|
33
|
+
* The original key remains valid until it expires.
|
|
34
|
+
*
|
|
35
|
+
* **Note:** Only API keys produced by `generateApiKey` (legacy v1 api keys) can be refreshed.
|
|
36
|
+
* Disposable tokens generated by `generateDisposableToken` cannot be refreshed — generate a new one
|
|
37
|
+
* when the old one expires.
|
|
31
38
|
*
|
|
32
|
-
* @param {string} refreshToken -
|
|
39
|
+
* @param {string} refreshToken - the refresh token from a previous `generateApiKey` or `refreshApiKey` response
|
|
33
40
|
* @returns {Promise<RefreshApiKey.Response>} -
|
|
34
|
-
* {@link RefreshApiKey.Success} containing the new API key, refresh token,
|
|
41
|
+
* {@link RefreshApiKey.Success} containing the new API key, refresh token, endpoint and epoch timestamp when the key expires.
|
|
35
42
|
* {@link RefreshApiKey.Error} on failure.
|
|
36
43
|
*/
|
|
37
44
|
async refreshApiKey(refreshToken) {
|
|
@@ -44,13 +51,14 @@ class AbstractAuthClient {
|
|
|
44
51
|
return await this.refreshApiKey(refreshToken);
|
|
45
52
|
}
|
|
46
53
|
/**
|
|
47
|
-
* Generates a new disposable
|
|
54
|
+
* Generates a new disposable token with fine-grained access control.
|
|
55
|
+
* Disposable tokens are short-lived and cannot be refreshed.
|
|
48
56
|
*
|
|
49
57
|
* @param {DisposableTokenScope} scope - controls the permissions that the new token will have
|
|
50
|
-
* @param {
|
|
51
|
-
* @param {DisposableTokenProps} disposableTokenProps -
|
|
58
|
+
* @param {ExpiresIn} expiresIn - how long the token is valid for
|
|
59
|
+
* @param {DisposableTokenProps} disposableTokenProps - additional properties, e.g. a tokenId for audit logging
|
|
52
60
|
* @returns {Promise<GenerateDisposableToken.Response>} -
|
|
53
|
-
* {@link GenerateDisposableToken.Success} containing the
|
|
61
|
+
* {@link GenerateDisposableToken.Success} containing the disposable token, endpoint and epoch timestamp when it expires.
|
|
54
62
|
* {@link GenerateDisposableToken.Error} on failure.
|
|
55
63
|
*/
|
|
56
64
|
async generateDisposableToken(scope, expiresIn, disposableTokenProps) {
|
|
@@ -58,4 +66,4 @@ class AbstractAuthClient {
|
|
|
58
66
|
}
|
|
59
67
|
}
|
|
60
68
|
exports.AbstractAuthClient = AbstractAuthClient;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RBdXRoQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVybmFsL2NsaWVudHMvYXV0aC9BYnN0cmFjdEF1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBY0EsTUFBc0Isa0JBQWtCO0lBSXRDLFlBQXNCLEtBQTBCO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLEtBQUssQ0FBQyxjQUFjLENBQ3pCLEtBQXNCLEVBQ3RCLFNBQW9CO1FBRXBCLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQixDQUM1QixLQUFzQixFQUN0QixTQUFvQjtRQUVwQixPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUN4QixZQUFvQjtRQUVwQixPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUMzQixZQUFvQjtRQUVwQixPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLEtBQUssQ0FBQyx1QkFBdUIsQ0FDbEMsS0FBMkIsRUFDM0IsU0FBb0IsRUFDcEIsb0JBQTJDO1FBRTNDLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUNsRCxLQUFLLEVBQ0wsU0FBUyxFQUNULG9CQUFvQixDQUNyQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBekZELGdEQXlGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEdlbmVyYXRlQXBpS2V5LFxuICBFeHBpcmVzSW4sXG4gIFJlZnJlc2hBcGlLZXksXG4gIEdlbmVyYXRlRGlzcG9zYWJsZVRva2VuLFxuICBEaXNwb3NhYmxlVG9rZW5TY29wZSxcbn0gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHtJQXV0aENsaWVudH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50cy9JQXV0aENsaWVudCc7XG5pbXBvcnQge1Blcm1pc3Npb25TY29wZX0gZnJvbSAnLi4vLi4vLi4vYXV0aC90b2tlbnMvcGVybWlzc2lvbi1zY29wZSc7XG5pbXBvcnQge0Rpc3Bvc2FibGVUb2tlblByb3BzfSBmcm9tICcuLi8uLi8uLi9hdXRoL3Rva2Vucy9kaXNwb3NhYmxlLXRva2VuLXNjb3BlJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQXV0aENsaWVudFByb3BzIHtcbiAgY3JlYXRlQXV0aENsaWVudDogKCkgPT4gSUF1dGhDbGllbnQ7XG59XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RBdXRoQ2xpZW50IGltcGxlbWVudHMgSUF1dGhDbGllbnQge1xuICAvLyBtYWtpbmcgdGhlc2UgcHJvdGVjdGVkIHVudGlsIHdlIGZ1bGx5IGFic3RyYWN0IGF3YXkgdGhlIG5vZGVqcyBjbGllbnRcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhDbGllbnQ6IElBdXRoQ2xpZW50O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm9wczogQmFzZUF1dGhDbGllbnRQcm9wcykge1xuICAgIHRoaXMuYXV0aENsaWVudCA9IHByb3BzLmNyZWF0ZUF1dGhDbGllbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBuZXcsIHNjb3BlZCBBUEkga2V5IGFsb25nIHdpdGggYSByZWZyZXNoIHRva2VuIHRvIHJlZnJlc2ggaXQgYmVmb3JlIGV4cGlyeS5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6KiogVGhlIEFQSSBrZXkgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgaXMgaW4gdGhlIGxlZ2FjeSB2MSBmb3JtYXQuXG4gICAqIFYxIGFyZSBrZXlzIGFyZSBub3cgZGVwcmVjYXRlZCBhbmQgc3VwcG9ydCBmb3IgdGhlbSBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1Blcm1pc3Npb25TY29wZX0gc2NvcGUgLSBjb250cm9scyB0aGUgcGVybWlzc2lvbnMgdGhhdCB0aGUgbmV3IGtleSB3aWxsIGhhdmVcbiAgICogQHBhcmFtIHtFeHBpcmVzSW59IGV4cGlyZXNJbiAtIGhvdyBsb25nIHRoZSBBUEkga2V5IHNob3VsZCBiZSB2YWxpZCBmb3JcbiAgICogQHJldHVybnMge1Byb21pc2U8R2VuZXJhdGVBcGlLZXkuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBHZW5lcmF0ZUFwaUtleS5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBBUEkga2V5LCByZWZyZXNoIHRva2VuLCBlbmRwb2ludCBhbmQgZXBvY2ggdGltZXN0YW1wIHdoZW4gdGhlIGtleSBleHBpcmVzLlxuICAgKiBJZiB0aGUga2V5IG5ldmVyIGV4cGlyZXMsIG5vIHJlZnJlc2ggdG9rZW4gd2lsbCBiZSByZXR1cm5lZCBhbmQgdGhlIGV4cGlyeSB0aW1lc3RhbXAgd2lsbCBiZSBpbmZpbml0ZS5cbiAgICoge0BsaW5rIEdlbmVyYXRlQXBpS2V5LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQXBpS2V5KFxuICAgIHNjb3BlOiBQZXJtaXNzaW9uU2NvcGUsXG4gICAgZXhwaXJlc0luOiBFeHBpcmVzSW5cbiAgKTogUHJvbWlzZTxHZW5lcmF0ZUFwaUtleS5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dGhDbGllbnQuZ2VuZXJhdGVBcGlLZXkoc2NvcGUsIGV4cGlyZXNJbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBgZ2VuZXJhdGVBcGlLZXlgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUF1dGhUb2tlbihcbiAgICBzY29wZTogUGVybWlzc2lvblNjb3BlLFxuICAgIGV4cGlyZXNJbjogRXhwaXJlc0luXG4gICk6IFByb21pc2U8R2VuZXJhdGVBcGlLZXkuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZW5lcmF0ZUFwaUtleShzY29wZSwgZXhwaXJlc0luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgYW4gQVBJIGtleSBnZW5lcmF0ZWQgYnkgYGdlbmVyYXRlQXBpS2V5YC4gUmV0dXJucyBhIG5ldyBBUEkga2V5IGFuZCByZWZyZXNoIHRva2VuLlxuICAgKiBUaGUgbmV3IGtleSB3aWxsIGJlIHZhbGlkIGZvciB0aGUgc2FtZSBkdXJhdGlvbiBhcyB0aGUgb3JpZ2luYWwsIHN0YXJ0aW5nIGZyb20gdGhlIHRpbWUgb2YgcmVmcmVzaC5cbiAgICogVGhlIG9yaWdpbmFsIGtleSByZW1haW5zIHZhbGlkIHVudGlsIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqICoqTm90ZToqKiBPbmx5IEFQSSBrZXlzIHByb2R1Y2VkIGJ5IGBnZW5lcmF0ZUFwaUtleWAgKGxlZ2FjeSB2MSBhcGkga2V5cykgY2FuIGJlIHJlZnJlc2hlZC5cbiAgICogRGlzcG9zYWJsZSB0b2tlbnMgZ2VuZXJhdGVkIGJ5IGBnZW5lcmF0ZURpc3Bvc2FibGVUb2tlbmAgY2Fubm90IGJlIHJlZnJlc2hlZCDigJQgZ2VuZXJhdGUgYSBuZXcgb25lXG4gICAqIHdoZW4gdGhlIG9sZCBvbmUgZXhwaXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlbiAtIHRoZSByZWZyZXNoIHRva2VuIGZyb20gYSBwcmV2aW91cyBgZ2VuZXJhdGVBcGlLZXlgIG9yIGByZWZyZXNoQXBpS2V5YCByZXNwb25zZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWZyZXNoQXBpS2V5LlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgUmVmcmVzaEFwaUtleS5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBuZXcgQVBJIGtleSwgcmVmcmVzaCB0b2tlbiwgZW5kcG9pbnQgYW5kIGVwb2NoIHRpbWVzdGFtcCB3aGVuIHRoZSBrZXkgZXhwaXJlcy5cbiAgICoge0BsaW5rIFJlZnJlc2hBcGlLZXkuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaEFwaUtleShcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZ1xuICApOiBQcm9taXNlPFJlZnJlc2hBcGlLZXkuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRoQ2xpZW50LnJlZnJlc2hBcGlLZXkocmVmcmVzaFRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIGByZWZyZXNoQXBpS2V5YCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaEF1dGhUb2tlbihcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZ1xuICApOiBQcm9taXNlPFJlZnJlc2hBcGlLZXkuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWZyZXNoQXBpS2V5KHJlZnJlc2hUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgbmV3IGRpc3Bvc2FibGUgdG9rZW4gd2l0aCBmaW5lLWdyYWluZWQgYWNjZXNzIGNvbnRyb2wuXG4gICAqIERpc3Bvc2FibGUgdG9rZW5zIGFyZSBzaG9ydC1saXZlZCBhbmQgY2Fubm90IGJlIHJlZnJlc2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtEaXNwb3NhYmxlVG9rZW5TY29wZX0gc2NvcGUgLSBjb250cm9scyB0aGUgcGVybWlzc2lvbnMgdGhhdCB0aGUgbmV3IHRva2VuIHdpbGwgaGF2ZVxuICAgKiBAcGFyYW0ge0V4cGlyZXNJbn0gZXhwaXJlc0luIC0gaG93IGxvbmcgdGhlIHRva2VuIGlzIHZhbGlkIGZvclxuICAgKiBAcGFyYW0ge0Rpc3Bvc2FibGVUb2tlblByb3BzfSBkaXNwb3NhYmxlVG9rZW5Qcm9wcyAtIGFkZGl0aW9uYWwgcHJvcGVydGllcywgZS5nLiBhIHRva2VuSWQgZm9yIGF1ZGl0IGxvZ2dpbmdcbiAgICogQHJldHVybnMge1Byb21pc2U8R2VuZXJhdGVEaXNwb3NhYmxlVG9rZW4uUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBHZW5lcmF0ZURpc3Bvc2FibGVUb2tlbi5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBkaXNwb3NhYmxlIHRva2VuLCBlbmRwb2ludCBhbmQgZXBvY2ggdGltZXN0YW1wIHdoZW4gaXQgZXhwaXJlcy5cbiAgICoge0BsaW5rIEdlbmVyYXRlRGlzcG9zYWJsZVRva2VuLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlRGlzcG9zYWJsZVRva2VuKFxuICAgIHNjb3BlOiBEaXNwb3NhYmxlVG9rZW5TY29wZSxcbiAgICBleHBpcmVzSW46IEV4cGlyZXNJbixcbiAgICBkaXNwb3NhYmxlVG9rZW5Qcm9wcz86IERpc3Bvc2FibGVUb2tlblByb3BzXG4gICk6IFByb21pc2U8R2VuZXJhdGVEaXNwb3NhYmxlVG9rZW4uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRoQ2xpZW50LmdlbmVyYXRlRGlzcG9zYWJsZVRva2VuKFxuICAgICAgc2NvcGUsXG4gICAgICBleHBpcmVzSW4sXG4gICAgICBkaXNwb3NhYmxlVG9rZW5Qcm9wc1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -14,6 +14,10 @@ export interface V2Claims {
|
|
|
14
14
|
/** type of token, 'g' for global api key */
|
|
15
15
|
t: string;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* The decoded structure of a base64-encoded credential. This format is used by both disposable tokens and (now legacy) v1 API keys. The format
|
|
19
|
+
* embeds the raw key and the Momento endpoint together in a single portable string.
|
|
20
|
+
*/
|
|
17
21
|
export interface Base64DecodedV1Token {
|
|
18
22
|
api_key: string;
|
|
19
23
|
endpoint: string;
|
|
@@ -84,4 +84,4 @@ exports.decodeAuthToken = decodeAuthToken;
|
|
|
84
84
|
class InternalSuperUserPermissions extends permission_scope_1.PredefinedScope {
|
|
85
85
|
}
|
|
86
86
|
exports.InternalSuperUserPermissions = InternalSuperUserPermissions;
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbnRlcm5hbC91dGlscy9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFrRDtBQUNsRCwyQ0FBbUM7QUFDbkMsNkNBQXNDO0FBQ3RDLHFDQUEwQztBQUMxQyx5RUFBbUU7QUE0Qm5FLFNBQVMscUJBQXFCLENBQUksU0FBaUI7SUFDakQsT0FBTyxJQUFBLG9CQUFTLEVBQUksU0FBUyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxTQUFpQjtJQUMxQyxJQUFJLElBQUEscUJBQVEsRUFBQyxTQUFTLENBQUMsRUFBRTtRQUN2QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBVyxTQUFTLENBQUMsQ0FBQztJQUN0RSxPQUFPLGtCQUFrQixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDdEMsQ0FBQztBQU5ELGdDQU1DO0FBa0JELFNBQWdCLG9DQUFvQyxDQUNsRCxnQkFBc0M7SUFFdEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksZ0JBQWdCLENBQUMsY0FBYyxFQUFFO1FBQ25DLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsR0FBRyxDQUFDO0tBQ2hEO0lBQ0QsT0FBTztRQUNMLGVBQWUsRUFBRSxHQUFHLE1BQU0sV0FBVyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7UUFDcEUsYUFBYSxFQUFFLEdBQUcsTUFBTSxTQUFTLGdCQUFnQixDQUFDLFlBQVksRUFBRTtRQUNoRSxhQUFhLEVBQUUsR0FBRyxNQUFNLFNBQVMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO1FBQ2hFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLGdCQUFnQjtLQUNwRCxDQUFDO0FBQ0osQ0FBQztBQWJELG9GQWFDO0FBRUQ7OztHQUdHO0FBQ0ksTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFjLEVBQXFCLEVBQUU7SUFDbkUsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE1BQU0sSUFBSSw2QkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsSUFBSTtRQUNGLHlHQUF5RztRQUN6RyxnSEFBZ0g7UUFDaEgscUhBQXFIO1FBQ3JILHlIQUF5SDtRQUN6SCxnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFBLHFCQUFRLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNuQyxJQUFBLHlCQUFnQixFQUFDLEtBQUssQ0FBQyxDQUNBLENBQUM7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtnQkFDL0QsTUFBTSxJQUFJLDZCQUFvQixDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDekQ7WUFDRCxNQUFNLFNBQVMsR0FBRyxvQ0FBb0MsQ0FBQztnQkFDckQsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFFBQVE7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxlQUFlLEVBQUUsU0FBUyxDQUFDLGVBQWU7Z0JBQzFDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtnQkFDdEMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO2dCQUN0QyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTzthQUN0QyxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixNQUFNLElBQUksNkJBQW9CLENBQzVCLDRIQUE0SCxDQUM3SCxDQUFDO2FBQ0g7WUFFRCxrSEFBa0g7WUFDbEgsZ0hBQWdIO1lBQ2hILG9IQUFvSDtZQUNwSCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFlLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE9BQU87Z0JBQ0wsZUFBZSxFQUFFLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ3RDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNuQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDbkMsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQztTQUNIO0tBQ0Y7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLDRFQUE0RTtRQUM1RSxNQUFNLElBQUksNkJBQW9CLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDL0Q7QUFDSCxDQUFDLENBQUM7QUFqRFcsUUFBQSxlQUFlLG1CQWlEMUI7QUFFRixNQUFhLDRCQUE2QixTQUFRLGtDQUFlO0NBQUc7QUFBcEUsb0VBQW9FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbnZhbGlkQXJndW1lbnRFcnJvcn0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQge2lzQmFzZTY0fSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtkZWNvZGVGcm9tQmFzZTY0fSBmcm9tICcuL3N0cmluZyc7XG5pbXBvcnQge1ByZWRlZmluZWRTY29wZX0gZnJvbSAnLi4vLi4vYXV0aC90b2tlbnMvcGVybWlzc2lvbi1zY29wZSc7XG5pbXBvcnQge0Jhc2VFbmRwb2ludE92ZXJyaWRlfSBmcm9tICcuLi8uLi9hdXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDbGFpbXMge1xuICAvKipcbiAgICogY29udHJvbCBwbGFuZSBlbmRwb2ludFxuICAgKi9cbiAgY3A6IHN0cmluZztcbiAgLyoqXG4gICAqIGNhY2hlIGVuZHBvaW50XG4gICAqL1xuICBjOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVjJDbGFpbXMge1xuICAvKiogdHlwZSBvZiB0b2tlbiwgJ2cnIGZvciBnbG9iYWwgYXBpIGtleSAqL1xuICB0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRlY29kZWQgc3RydWN0dXJlIG9mIGEgYmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbC4gVGhpcyBmb3JtYXQgaXMgdXNlZCBieSBib3RoIGRpc3Bvc2FibGUgdG9rZW5zIGFuZCAobm93IGxlZ2FjeSkgdjEgQVBJIGtleXMuIFRoZSBmb3JtYXRcbiAqIGVtYmVkcyB0aGUgcmF3IGtleSBhbmQgdGhlIE1vbWVudG8gZW5kcG9pbnQgdG9nZXRoZXIgaW4gYSBzaW5nbGUgcG9ydGFibGUgc3RyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2U2NERlY29kZWRWMVRva2VuIHtcbiAgYXBpX2tleTogc3RyaW5nO1xuICBlbmRwb2ludDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVBdXRoVG9rZW5DbGFpbXM8VD4oYXV0aFRva2VuOiBzdHJpbmcpOiBUIHtcbiAgcmV0dXJuIGp3dERlY29kZTxUPihhdXRoVG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWMkFwaUtleShhdXRoVG9rZW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoaXNCYXNlNjQoYXV0aFRva2VuKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBkZWNvZGVkTGVnYWN5VG9rZW4gPSBkZWNvZGVBdXRoVG9rZW5DbGFpbXM8VjJDbGFpbXM+KGF1dGhUb2tlbik7XG4gIHJldHVybiBkZWNvZGVkTGVnYWN5VG9rZW4udCA9PT0gJ2cnO1xufVxuXG5pbnRlcmZhY2UgVG9rZW5BbmRFbmRwb2ludHMge1xuICAvLyBJZiB3ZSBkZWNvZGUgYSBKV1QgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IGhhdmUgdGhlIGNvbnRyb2xFbmRwb2ludC9jYWNoZUVuZHBvaW50IGNsYWltcywgdGhlbiB0aGV5IHdpbGwgY29tZSBiYWNrXG4gIC8vIGFzIHVuZGVmaW5lZDsgdGh1cyB3ZSBuZWVkIHRoZSB0eXBlcyBoZXJlIHRvIGJlIGBzdHJpbmcgfCB1bmRlZmluZWRgLlxuICBjb250cm9sRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY2FjaGVFbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0b2tlbkVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGF1dGhUb2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsbEVuZHBvaW50cyB7XG4gIGNvbnRyb2xFbmRwb2ludDogc3RyaW5nO1xuICBjYWNoZUVuZHBvaW50OiBzdHJpbmc7XG4gIHRva2VuRW5kcG9pbnQ6IHN0cmluZztcbiAgc2VjdXJlQ29ubmVjdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUFsbEVuZHBvaW50c0Zyb21CYXNlRW5kcG9pbnQoXG4gIGVuZHBvaW50T3ZlcnJpZGU6IEJhc2VFbmRwb2ludE92ZXJyaWRlXG4pOiBBbGxFbmRwb2ludHMge1xuICBsZXQgcHJlZml4ID0gJyc7XG4gIGlmIChlbmRwb2ludE92ZXJyaWRlLmVuZHBvaW50UHJlZml4KSB7XG4gICAgcHJlZml4ID0gYCR7ZW5kcG9pbnRPdmVycmlkZS5lbmRwb2ludFByZWZpeH0uYDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbnRyb2xFbmRwb2ludDogYCR7cHJlZml4fWNvbnRyb2wuJHtlbmRwb2ludE92ZXJyaWRlLmJhc2VFbmRwb2ludH1gLFxuICAgIGNhY2hlRW5kcG9pbnQ6IGAke3ByZWZpeH1jYWNoZS4ke2VuZHBvaW50T3ZlcnJpZGUuYmFzZUVuZHBvaW50fWAsXG4gICAgdG9rZW5FbmRwb2ludDogYCR7cHJlZml4fXRva2VuLiR7ZW5kcG9pbnRPdmVycmlkZS5iYXNlRW5kcG9pbnR9YCxcbiAgICBzZWN1cmVDb25uZWN0aW9uOiBlbmRwb2ludE92ZXJyaWRlLnNlY3VyZUNvbm5lY3Rpb24sXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJucyBUb2tlbkFuZEVuZHBvaW50c1xuICovXG5leHBvcnQgY29uc3QgZGVjb2RlQXV0aFRva2VuID0gKHRva2VuPzogc3RyaW5nKTogVG9rZW5BbmRFbmRwb2ludHMgPT4ge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYWxmb3JtZWQgYXV0aCB0b2tlbicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyB2MSBhcGkgdG9rZW5zIGRvbid0IGhhdmUgYW4gZW5kcG9pbnQgYXMgcGFydCBvZiB0aGVpciBjbGFpbXMuIEluc3RlYWQsIHdoZW4gdGhlIFNESyByZXR1cm5zIHRva2Vucywgd2VcbiAgICAvLyBnaXZlIGl0IHRvIHRoZW0gYXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgJ3sgXCJhcGlfa2V5XCI6IFwiPHRoZSBrZXk+XCIsIFwiZW5kcG9pbnRcIjogXCJwcm9kLm1vbWVudG9ocS5jb21cIiB9Jy5cbiAgICAvLyBTaW5jZSBpbiB0aGUgbmVhciBmdXR1cmUsIG1vc3QgY3VzdG9tZXJzIGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGVzZSBuZXdlciB0b2tlbnMsIHdlIGFyZSBmaXJzdCBjaGVja2luZyB0byBzZWUgaWZcbiAgICAvLyB0aGV5IGFyZSBiYXNlNjQgZW5jb2RlZCwgd2hpY2ggd2lsbCB0ZWxsIHVzIHRoYXQgdGhleSBhcmUgb3VyIHYxIGFwaSB0b2tlbnMuIElmIGl0cyBub3QsIHdlIHdpbGwgZmFsbCBiYWNrIHRvIGRlY29kaW5nXG4gICAgLy8gaXQgYXMgb25lIG9mIG91ciBsZWdhY3kgand0cy5cbiAgICBpZiAoaXNCYXNlNjQodG9rZW4pKSB7XG4gICAgICBjb25zdCBiYXNlNjREZWNvZGVkVG9rZW4gPSBKU09OLnBhcnNlKFxuICAgICAgICBkZWNvZGVGcm9tQmFzZTY0KHRva2VuKVxuICAgICAgKSBhcyBCYXNlNjREZWNvZGVkVjFUb2tlbjtcbiAgICAgIGlmICghYmFzZTY0RGVjb2RlZFRva2VuLmVuZHBvaW50IHx8ICFiYXNlNjREZWNvZGVkVG9rZW4uYXBpX2tleSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSB0b2tlbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgZW5kcG9pbnRzID0gcG9wdWxhdGVBbGxFbmRwb2ludHNGcm9tQmFzZUVuZHBvaW50KHtcbiAgICAgICAgYmFzZUVuZHBvaW50OiBiYXNlNjREZWNvZGVkVG9rZW4uZW5kcG9pbnQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogZW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludCxcbiAgICAgICAgY2FjaGVFbmRwb2ludDogZW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IGVuZHBvaW50cy50b2tlbkVuZHBvaW50LFxuICAgICAgICBhdXRoVG9rZW46IGJhc2U2NERlY29kZWRUb2tlbi5hcGlfa2V5LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzVjJBcGlLZXkodG9rZW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICAnUmVjZWl2ZWQgYSB2MiBBUEkga2V5LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IGtleT8gT3IgZGlkIHlvdSBtZWFuIHRvIHVzZSBgZnJvbUFwaUtleVYyKClgIG9yIGBmcm9tRW52VmFyVjIoKWAgaW5zdGVhZD8nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZGVjb2RlIGZ1bmN0aW9uIHVzZXMgZ2VuZXJpY3MgdG8gYWR2ZXJ0aXNlIHRoYXQgd2Ugd2lsbCB1c3VhbGx5IGV4cGVjdCB0byBmaW5kIHRoZSBMZWdhY3lDbGFpbXMuICBIb3dldmVyLFxuICAgICAgLy8gaWYgdGhlIHRva2VuIGlzIGEgdmFsaWQgSldUIGJ1dCBub3QgYWN0dWFsbHkgb25lIG9mIG91ciBsZWdhY3kgdG9rZW5zLCB0aGUgZW5kcG9pbnQgY2xhaW1zIHdpbGwgYmUgdW5kZWZpbmVkLFxuICAgICAgLy8gd2hpY2ggaXMgd2h5IHRoZSByZXR1cm4gdHlwZSBmb3IgdGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgY29udHJvbEVuZHBvaW50L2NhY2hlRW5kcG9pbnQgbWF5IGJlIHVuZGVmaW5lZC5cbiAgICAgIGNvbnN0IGRlY29kZWRMZWdhY3lUb2tlbiA9IGRlY29kZUF1dGhUb2tlbkNsYWltczxMZWdhY3lDbGFpbXM+KHRva2VuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogZGVjb2RlZExlZ2FjeVRva2VuLmNwLFxuICAgICAgICBjYWNoZUVuZHBvaW50OiBkZWNvZGVkTGVnYWN5VG9rZW4uYyxcbiAgICAgICAgdG9rZW5FbmRwb2ludDogZGVjb2RlZExlZ2FjeVRva2VuLmMsXG4gICAgICAgIGF1dGhUb2tlbjogdG9rZW4sXG4gICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGZhaWxlZCB0byBwYXJzZSB0b2tlbjogJHtlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxTdXBlclVzZXJQZXJtaXNzaW9ucyBleHRlbmRzIFByZWRlZmluZWRTY29wZSB7fVxuIl19
|
|
@@ -18,7 +18,7 @@ export declare class Success extends BaseResponseSuccess implements IResponse {
|
|
|
18
18
|
constructor(apiKey: string, refreshToken: string, endpoint: string, expiresAt: ExpiresAt);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Indicates that an error occurred during the generate api
|
|
21
|
+
* Indicates that an error occurred during the generate api key request.
|
|
22
22
|
*
|
|
23
23
|
* This response object includes the following fields that you can use to determine
|
|
24
24
|
* how you would like to handle the error:
|
|
@@ -22,7 +22,7 @@ class Success extends response_base_1.BaseResponseSuccess {
|
|
|
22
22
|
}
|
|
23
23
|
exports.Success = Success;
|
|
24
24
|
/**
|
|
25
|
-
* Indicates that an error occurred during the generate api
|
|
25
|
+
* Indicates that an error occurred during the generate api key request.
|
|
26
26
|
*
|
|
27
27
|
* This response object includes the following fields that you can use to determine
|
|
28
28
|
* how you would like to handle the error:
|
|
@@ -38,4 +38,4 @@ class Error extends response_base_1.BaseResponseError {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
exports.Error = Error;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtYXBpLWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tZXNzYWdlcy9yZXNwb25zZXMvZ2VuZXJhdGUtYXBpLWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBdUU7QUFDdkUsbUNBQStDO0FBRS9DLGdEQUFvRDtBQU9wRCxNQUFhLE9BQVEsU0FBUSxtQ0FBbUI7SUFTOUM7O09BRUc7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQ0UsTUFBYyxFQUNkLFlBQW9CLEVBQ3BCLFFBQWdCLEVBQ2hCLFNBQW9CO1FBRXBCLEtBQUssRUFBRSxDQUFDO1FBckJELFNBQUksR0FDWCw4QkFBc0IsQ0FBQyxPQUFPLENBQUM7UUFxQi9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBQSxzQkFBYyxFQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FDdEQsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQTlCRCwwQkE4QkM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQU0sU0FBUSxpQ0FBaUI7SUFDMUMsWUFBWSxjQUF3QjtRQUNsQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFHZixTQUFJLEdBQWlDLDhCQUFzQixDQUFDLEtBQUssQ0FBQztJQUYzRSxDQUFDO0NBR0Y7QUFORCxzQkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmFzZVJlc3BvbnNlU3VjY2VzcywgQmFzZVJlc3BvbnNlRXJyb3J9IGZyb20gJy4vcmVzcG9uc2UtYmFzZSc7XG5pbXBvcnQge0dlbmVyYXRlQXBpS2V5UmVzcG9uc2V9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHtTZGtFcnJvcn0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7ZW5jb2RlVG9CYXNlNjR9IGZyb20gJy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7RXhwaXJlc0F0fSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmludGVyZmFjZSBJUmVzcG9uc2Uge1xuICByZWFkb25seSB0eXBlOiBHZW5lcmF0ZUFwaUtleVJlc3BvbnNlO1xufVxuXG5leHBvcnQgY2xhc3MgU3VjY2VzcyBleHRlbmRzIEJhc2VSZXNwb25zZVN1Y2Nlc3MgaW1wbGVtZW50cyBJUmVzcG9uc2Uge1xuICByZWFkb25seSB0eXBlOiBHZW5lcmF0ZUFwaUtleVJlc3BvbnNlLlN1Y2Nlc3MgPVxuICAgIEdlbmVyYXRlQXBpS2V5UmVzcG9uc2UuU3VjY2VzcztcblxuICByZWFkb25seSBhcGlLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGlyZXNBdDogRXhwaXJlc0F0O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGFwaUtleWAgaW5zdGVhZC5cbiAgICovXG4gIGdldCBhdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBhcGlLZXk6IHN0cmluZyxcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgICBlbmRwb2ludDogc3RyaW5nLFxuICAgIGV4cGlyZXNBdDogRXhwaXJlc0F0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcGlLZXkgPSBlbmNvZGVUb0Jhc2U2NChcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtlbmRwb2ludDogZW5kcG9pbnQsIGFwaV9rZXk6IGFwaUtleX0pXG4gICAgKTtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7XG4gICAgdGhpcy5leHBpcmVzQXQgPSBleHBpcmVzQXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGdlbmVyYXRlIGFwaSBrZXkgcmVxdWVzdC5cbiAqXG4gKiBUaGlzIHJlc3BvbnNlIG9iamVjdCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkcyB0aGF0IHlvdSBjYW4gdXNlIHRvIGRldGVybWluZVxuICogaG93IHlvdSB3b3VsZCBsaWtlIHRvIGhhbmRsZSB0aGUgZXJyb3I6XG4gKlxuICogLSBgZXJyb3JDb2RlKClgIC0gYSB1bmlxdWUgTW9tZW50byBlcnJvciBjb2RlIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJlZC5cbiAqIC0gYG1lc3NhZ2UoKWAgLSBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvclxuICogLSBgaW5uZXJFeGNlcHRpb24oKWAgLSB0aGUgb3JpZ2luYWwgZXJyb3IgdGhhdCBjYXVzZWQgdGhlIGZhaWx1cmU7IGNhbiBiZSByZS10aHJvd24uXG4gKi9cbmV4cG9ydCBjbGFzcyBFcnJvciBleHRlbmRzIEJhc2VSZXNwb25zZUVycm9yIGltcGxlbWVudHMgSVJlc3BvbnNlIHtcbiAgY29uc3RydWN0b3IoaW5uZXJFeGNlcHRpb246IFNka0Vycm9yKSB7XG4gICAgc3VwZXIoaW5uZXJFeGNlcHRpb24pO1xuICB9XG5cbiAgcmVhZG9ubHkgdHlwZTogR2VuZXJhdGVBcGlLZXlSZXNwb25zZS5FcnJvciA9IEdlbmVyYXRlQXBpS2V5UmVzcG9uc2UuRXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0gU3VjY2VzcyB8IEVycm9yO1xuIl19
|