@gomomento/sdk-core 1.115.1 → 1.117.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61,9 +61,21 @@ export declare abstract class CredentialProvider {
61
61
  * @returns {boolean} true if connecting to the endpoint connection with TLS; false if not using TLS
62
62
  */
63
63
  abstract isEndpointSecure(): boolean;
64
+ /**
65
+ * @deprecated use fromEnvVarV2() instead
66
+ */
64
67
  static fromEnvironmentVariable(props: EnvMomentoTokenProviderProps | string): CredentialProvider;
68
+ /**
69
+ * @deprecated use fromEnvVarV2() instead
70
+ */
65
71
  static fromEnvVar(props: EnvMomentoTokenProviderProps | string): CredentialProvider;
72
+ /**
73
+ * @deprecated use fromApiKeyV2() or fromDisposableToken() instead
74
+ */
66
75
  static fromString(props: StringMomentoTokenProviderProps | string): CredentialProvider;
76
+ static fromDisposableToken(props: StringMomentoTokenProviderProps | string): CredentialProvider;
77
+ static fromEnvVarV2(props?: EnvMomentoV2TokenProviderProps): CredentialProvider;
78
+ static fromApiKeyV2(props: ApiKeyV2TokenProviderProps): CredentialProvider;
67
79
  /**
68
80
  * Allow insecure connections to momento-local service for testing purposes.
69
81
  * Does not require a Momento API key.
@@ -98,10 +110,18 @@ export interface StringMomentoAuthTokenProviderProps extends CredentialProviderP
98
110
  authToken: string;
99
111
  }
100
112
  export type StringMomentoTokenProviderProps = StringMomentoApiKeyProviderProps | StringMomentoAuthTokenProviderProps;
113
+ export type ApiKeyV2TokenProviderProps = StringMomentoTokenProviderProps & {
114
+ endpoint: string;
115
+ };
116
+ export interface EnvMomentoV2TokenProviderProps {
117
+ apiKeyEnvVar?: string;
118
+ endpointEnvVar?: string;
119
+ }
101
120
  /**
102
121
  * Reads and parses a momento auth token stored in a String
103
122
  * @export
104
123
  * @class StringMomentoTokenProvider
124
+ * @deprecated use ApiKeyV2TokenProvider instead
105
125
  */
106
126
  export declare class StringMomentoTokenProvider extends CredentialProviderBase {
107
127
  private readonly apiKey;
@@ -133,6 +153,7 @@ export interface EnvMomentoTokenProviderProps extends CredentialProviderProps {
133
153
  * Reads and parses a momento auth token stored as an environment variable.
134
154
  * @export
135
155
  * @class EnvMomentoTokenProvider
156
+ * @deprecated use EnvMomentoV2TokenProvider instead
136
157
  */
137
158
  export declare class EnvMomentoTokenProvider extends StringMomentoTokenProvider {
138
159
  environmentVariableName: string;
@@ -170,4 +191,29 @@ export declare class MomentoLocalProvider implements CredentialProvider {
170
191
  isEndpointSecure(): boolean;
171
192
  withMomentoLocal(): CredentialProvider;
172
193
  }
194
+ export declare class ApiKeyV2TokenProvider extends CredentialProviderBase {
195
+ private readonly apiKey;
196
+ private readonly allEndpoints;
197
+ /**
198
+ * @param {ApiKeyV2TokenProviderProps} props configuration options for the token provider
199
+ */
200
+ constructor(props: ApiKeyV2TokenProviderProps);
201
+ getAuthToken(): string;
202
+ getCacheEndpoint(): string;
203
+ isCacheEndpointSecure(): boolean;
204
+ getControlEndpoint(): string;
205
+ isControlEndpointSecure(): boolean;
206
+ getTokenEndpoint(): string;
207
+ isTokenEndpointSecure(): boolean;
208
+ isStorageEndpointSecure(): boolean;
209
+ areEndpointsOverridden(): boolean;
210
+ isEndpointSecure(): boolean;
211
+ withMomentoLocal(): CredentialProvider;
212
+ }
213
+ export declare class EnvMomentoV2TokenProvider extends ApiKeyV2TokenProvider {
214
+ /**
215
+ * @param {EnvMomentoV2TokenProviderProps} props configuration options for the token provider
216
+ */
217
+ constructor(props?: EnvMomentoV2TokenProviderProps);
218
+ }
173
219
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MomentoLocalProvider = exports.getDefaultCredentialProvider = exports.EnvMomentoTokenProvider = exports.StringMomentoTokenProvider = exports.CredentialProvider = void 0;
3
+ exports.EnvMomentoV2TokenProvider = exports.ApiKeyV2TokenProvider = exports.MomentoLocalProvider = exports.getDefaultCredentialProvider = exports.EnvMomentoTokenProvider = exports.StringMomentoTokenProvider = exports.CredentialProvider = void 0;
4
4
  const utils_1 = require("../internal/utils");
5
5
  function isBaseEndpointOverride(endpointOverrides) {
6
6
  return endpointOverrides.baseEndpoint !== undefined;
@@ -18,15 +18,33 @@ function isAllEndpoints(endpointOverrides) {
18
18
  * @interface CredentialProvider
19
19
  */
20
20
  class CredentialProvider {
21
+ /**
22
+ * @deprecated use fromEnvVarV2() instead
23
+ */
21
24
  static fromEnvironmentVariable(props) {
22
25
  return new EnvMomentoTokenProvider(props);
23
26
  }
27
+ /**
28
+ * @deprecated use fromEnvVarV2() instead
29
+ */
24
30
  static fromEnvVar(props) {
25
31
  return new EnvMomentoTokenProvider(props);
26
32
  }
33
+ /**
34
+ * @deprecated use fromApiKeyV2() or fromDisposableToken() instead
35
+ */
27
36
  static fromString(props) {
28
37
  return new StringMomentoTokenProvider(props);
29
38
  }
39
+ static fromDisposableToken(props) {
40
+ return new StringMomentoTokenProvider(props);
41
+ }
42
+ static fromEnvVarV2(props) {
43
+ return new EnvMomentoV2TokenProvider(props);
44
+ }
45
+ static fromApiKeyV2(props) {
46
+ return new ApiKeyV2TokenProvider(props);
47
+ }
30
48
  /**
31
49
  * Allow insecure connections to momento-local service for testing purposes.
32
50
  * Does not require a Momento API key.
@@ -50,6 +68,7 @@ class CredentialProviderBase {
50
68
  * Reads and parses a momento auth token stored in a String
51
69
  * @export
52
70
  * @class StringMomentoTokenProvider
71
+ * @deprecated use ApiKeyV2TokenProvider instead
53
72
  */
54
73
  class StringMomentoTokenProvider extends CredentialProviderBase {
55
74
  /**
@@ -145,6 +164,7 @@ exports.StringMomentoTokenProvider = StringMomentoTokenProvider;
145
164
  * Reads and parses a momento auth token stored as an environment variable.
146
165
  * @export
147
166
  * @class EnvMomentoTokenProvider
167
+ * @deprecated use EnvMomentoV2TokenProvider instead
148
168
  */
149
169
  class EnvMomentoTokenProvider extends StringMomentoTokenProvider {
150
170
  /**
@@ -167,6 +187,7 @@ class EnvMomentoTokenProvider extends StringMomentoTokenProvider {
167
187
  }
168
188
  exports.EnvMomentoTokenProvider = EnvMomentoTokenProvider;
169
189
  function getDefaultCredentialProvider() {
190
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
170
191
  return CredentialProvider.fromEnvVar('MOMENTO_API_KEY');
171
192
  }
172
193
  exports.getDefaultCredentialProvider = getDefaultCredentialProvider;
@@ -236,4 +257,112 @@ class MomentoLocalProvider {
236
257
  }
237
258
  }
238
259
  exports.MomentoLocalProvider = MomentoLocalProvider;
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSzJCO0FBVTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQixrQkFBa0I7SUFxRHRDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsS0FBNEM7UUFFNUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUNmLEtBQTRDO1FBRTVDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUErQztRQUUvQyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFnQztRQUNyRCxPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBaEZELGdEQWdGQztBQUVELE1BQWUsc0JBQXNCO0lBcUJuQyxPQUFPO1FBQ0wsNkRBQTZEO1FBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFzQkQ7Ozs7R0FJRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsc0JBQXNCO0lBS3BFOztPQUVHO0lBQ0gsWUFBWSxLQUErQztRQUN6RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixLQUFLLEdBQUcsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7U0FDekI7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksV0FBVyxJQUFJLEtBQUssRUFBRTtZQUN4QixHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUN2QjthQUFNLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRTtZQUM1QixHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNwQjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBQSx1QkFBZSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7WUFDekMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLFlBQVksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO2dCQUM5QyxNQUFNLElBQUksS0FBSyxDQUNiLCtKQUErSixDQUNoSyxDQUFDO2FBQ0g7WUFDRCxJQUFJLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUNiLDJKQUEySixDQUM1SixDQUFDO2FBQ0g7WUFDRCxJQUFJLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUNiLDJKQUEySixDQUM1SixDQUFDO2FBQ0g7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHO2dCQUNsQixlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7Z0JBQzdDLGFBQWEsRUFBRSxZQUFZLENBQUMsYUFBYTtnQkFDekMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhO2FBQzFDLENBQUM7U0FDSDthQUFNLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7U0FDN0M7YUFBTSxJQUFJLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFBLDRDQUFvQyxFQUN0RCxLQUFLLENBQUMsaUJBQWlCLENBQ3hCLENBQUM7U0FDSDthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUs7WUFDYiw0RUFBNEU7WUFDNUUsa0NBQWtDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUM1RCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBQ0QscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO0lBQzNDLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBM0dELGdFQTJHQztBQVNEOzs7O0dBSUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLDBCQUEwQjtJQUVyRTs7T0FFRztJQUNILFlBQVksS0FBNEM7UUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsS0FBSyxHQUFHLEVBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFDLENBQUM7U0FDMUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUNiLHlDQUF5QyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FDekUsQ0FBQztTQUNIO1FBQ0QsS0FBSyxDQUFDO1lBQ0osU0FBUyxFQUFFLFNBQVM7WUFDcEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDO0lBQy9ELENBQUM7Q0FDRjtBQXJCRCwwREFxQkM7QUFFRCxTQUFnQiw0QkFBNEI7SUFDMUMsT0FBTyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsb0VBRUM7QUFhRCxNQUFhLG9CQUFvQjtJQUkvQjs7T0FFRztJQUNILFlBQVksS0FBaUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxLQUFJLFdBQVcsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxJQUFJLEtBQUksSUFBSSxDQUFDO1FBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbkQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7WUFDaEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHO2dCQUNsQixlQUFlLEVBQUUsb0JBQW9CO2dCQUNyQyxhQUFhLEVBQUUsb0JBQW9CO2dCQUNuQyxhQUFhLEVBQUUsb0JBQW9CO2dCQUNuQyxnQkFBZ0IsRUFBRSxLQUFLO2FBQ3hCLENBQUM7U0FDSDthQUFNLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7U0FDN0M7YUFBTSxJQUFJLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFBLDRDQUFvQyxFQUN0RCxLQUFLLENBQUMsaUJBQWlCLENBQ3hCLENBQUM7U0FDSDthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUs7WUFDYiw0RUFBNEU7WUFDNUUsa0NBQWtDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUM1RCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBOUVELG9EQThFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFsbEVuZHBvaW50cyxcbiAgZGVjb2RlQXV0aFRva2VuLFxuICBmcm9tRW50cmllcyxcbiAgcG9wdWxhdGVBbGxFbmRwb2ludHNGcm9tQmFzZUVuZHBvaW50LFxufSBmcm9tICcuLi9pbnRlcm5hbC91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVuZHBvaW50T3ZlcnJpZGUge1xuICBiYXNlRW5kcG9pbnQ6IHN0cmluZztcbiAgZW5kcG9pbnRQcmVmaXg/OiBzdHJpbmc7XG4gIHNlY3VyZUNvbm5lY3Rpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBFbmRwb2ludE92ZXJyaWRlcyA9IEJhc2VFbmRwb2ludE92ZXJyaWRlIHwgQWxsRW5kcG9pbnRzO1xuXG5mdW5jdGlvbiBpc0Jhc2VFbmRwb2ludE92ZXJyaWRlKFxuICBlbmRwb2ludE92ZXJyaWRlczogRW5kcG9pbnRPdmVycmlkZXNcbik6IGVuZHBvaW50T3ZlcnJpZGVzIGlzIEJhc2VFbmRwb2ludE92ZXJyaWRlIHtcbiAgcmV0dXJuIChlbmRwb2ludE92ZXJyaWRlcyBhcyBCYXNlRW5kcG9pbnRPdmVycmlkZSkuYmFzZUVuZHBvaW50ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQWxsRW5kcG9pbnRzKFxuICBlbmRwb2ludE92ZXJyaWRlczogRW5kcG9pbnRPdmVycmlkZXNcbik6IGVuZHBvaW50T3ZlcnJpZGVzIGlzIEFsbEVuZHBvaW50cyB7XG4gIGNvbnN0IGFsbEVuZHBvaW50cyA9IGVuZHBvaW50T3ZlcnJpZGVzIGFzIEFsbEVuZHBvaW50cztcbiAgcmV0dXJuIChcbiAgICBhbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludCAhPT0gdW5kZWZpbmVkICYmXG4gICAgYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludCAhPT0gdW5kZWZpbmVkICYmXG4gICAgYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQgIT09IHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhcmd1bWVudHMgZm9yIGluc3RhbnRpYXRpbmcgYW4gRW52TW9tZW50b1Rva2VuUHJvdmlkZXJcbiAqL1xuaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgZW5kcG9pbnRPdmVycmlkZXM/OiBFbmRwb2ludE92ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IHRoZSBDYWNoZUNsaWVudCBuZWVkcyBpbiBvcmRlciB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGFuZCBhdXRoZW50aWNhdGUgd2l0aFxuICogdGhlIE1vbWVudG8gc2VydmljZS5cbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgQ3JlZGVudGlhbFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gQXV0aCB0b2tlbiBwcm92aWRlZCBieSB1c2VyLCByZXF1aXJlZCB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgc2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0QXV0aFRva2VuKCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBpc0VuZHBvaW50U2VjdXJlKCkgaW5zdGVhZFxuICAgKi9cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byBkYXRhIHBsYW5lIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNFbmRwb2ludFNlY3VyZSgpIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIHRva2VuIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNFbmRwb2ludFNlY3VyZSgpIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB0aGUgc3RhdGljIG1ldGhvZCBmb3JNb21lbnRvTG9jYWwgaW5zdGVhZFxuICAgKlxuICAgKiBNb2RpZmllcyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdG8gb3ZlcnJpZGUgZW5kcG9pbnRzIHRvXG4gICAqIGFsbG93IGluc2VjdXJlIGNvbm5lY3Rpb25zIHRvIHRoZSBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAgICovXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZW5kcG9pbnRzIHdlcmUgbWFudWFsbHkgb3ZlcnJpZGRlbiBhdCBjb25zdHJ1Y3Rpb24gdGltZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb25uZWN0aW5nIHRvIHRoZSBlbmRwb2ludCBjb25uZWN0aW9uIHdpdGggVExTOyBmYWxzZSBpZiBub3QgdXNpbmcgVExTXG4gICAqL1xuICBhYnN0cmFjdCBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgc3RhdGljIGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudlZhcihcbiAgICBwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZ1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmcoXG4gICAgcHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmdcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqIERvZXMgbm90IHJlcXVpcmUgYSBNb21lbnRvIEFQSSBrZXkuXG4gICAqIEBwYXJhbSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gbW9tZW50by1sb2NhbFxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsUHJvdmlkZXJcbiAgICovXG4gIHN0YXRpYyBmb3JNb21lbnRvTG9jYWwocHJvcHM6IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIocHJvcHMpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHZhbHVlT2YoKTogb2JqZWN0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnYXV0aFRva2VuJyk7XG4gICAgY29uc3QgY2xvbmUgPSBmcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xvbmUudmFsdWVPZigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0FwaUtleVByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhcGlLZXkgdGhlIG1vbWVudG8gQVBJIGtleVxuICAgKi9cbiAgYXBpS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhdXRoVG9rZW4gdGhlIG1vbWVudG8gYXV0aCB0b2tlblxuICAgKi9cbiAgYXV0aFRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgPVxuICB8IFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIHwgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHM7XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBhIG1vbWVudG8gYXV0aCB0b2tlbiBzdG9yZWQgaW4gYSBTdHJpbmdcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclxuICovXG5leHBvcnQgY2xhc3MgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNPdmVycmlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm9wcyA9IHthcGlLZXk6IHByb3BzfTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgaWYgKCdhdXRoVG9rZW4nIGluIHByb3BzKSB7XG4gICAgICBrZXkgPSBwcm9wcy5hdXRoVG9rZW47XG4gICAgfSBlbHNlIGlmICgnYXBpS2V5JyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXBpS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGF1dGhUb2tlbiBvciBhcGlLZXknKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFRva2VuID0gZGVjb2RlQXV0aFRva2VuKGtleSk7XG4gICAgdGhpcy5hcGlLZXkgPSBkZWNvZGVkVG9rZW4uYXV0aFRva2VuO1xuICAgIGlmIChwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSBmYWxzZTtcbiAgICAgIGlmIChkZWNvZGVkVG9rZW4uY29udHJvbEVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY29udHJvbCBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udHJvbEVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZWRUb2tlbi5jYWNoZUVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY2FjaGUgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNhY2hlRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLnRva2VuRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSB0b2tlbiBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgdG9rZW5FbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogZGVjb2RlZFRva2VuLmNvbnRyb2xFbmRwb2ludCxcbiAgICAgICAgY2FjaGVFbmRwb2ludDogZGVjb2RlZFRva2VuLmNhY2hlRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IGRlY29kZWRUb2tlbi50b2tlbkVuZHBvaW50LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzQWxsRW5kcG9pbnRzKHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzKSkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWxsRW5kcG9pbnRzID0gcHJvcHMuZW5kcG9pbnRPdmVycmlkZXM7XG4gICAgfSBlbHNlIGlmIChpc0Jhc2VFbmRwb2ludE92ZXJyaWRlKHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzKSkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWxsRW5kcG9pbnRzID0gcG9wdWxhdGVBbGxFbmRwb2ludHNGcm9tQmFzZUVuZHBvaW50KFxuICAgICAgICBwcm9wcy5lbmRwb2ludE92ZXJyaWRlc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgIGBVbnN1cHBvcnRlZCBlbmRwb2ludE92ZXJyaWRlczogJHtwcm9wcy5lbmRwb2ludE92ZXJyaWRlc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEF1dGhUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludDtcbiAgfVxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBpc1N0b3JhZ2VFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW47XG4gIH1cblxuICBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogdGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGZyb20gd2hpY2ggdGhlIGF1dGggdG9rZW4gd2lsbCBiZSByZWFkXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgYSBtb21lbnRvIGF1dGggdG9rZW4gc3RvcmVkIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQGV4cG9ydFxuICogQGNsYXNzIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlciBleHRlbmRzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyIHtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwYXJhbSB7RW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3BzID0ge2Vudmlyb25tZW50VmFyaWFibGVOYW1lOiBwcm9wc307XG4gICAgfVxuICAgIGNvbnN0IGF1dGhUb2tlbiA9IHByb2Nlc3MuZW52W3Byb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lXTtcbiAgICBpZiAoIWF1dGhUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAke3Byb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHN1cGVyKHtcbiAgICAgIGF1dGhUb2tlbjogYXV0aFRva2VuLFxuICAgICAgZW5kcG9pbnRPdmVycmlkZXM6IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzLFxuICAgIH0pO1xuICAgIHRoaXMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPSBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcigpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gQ3JlZGVudGlhbFByb3ZpZGVyLmZyb21FbnZWYXIoJ01PTUVOVE9fQVBJX0tFWScpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaG9zdG5hbWUgb2YgdGhlIG1vbWVudG8tbG9jYWwgc2VydmljZVxuICAgKi9cbiAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcG9ydCBvZiB0aGUgbW9tZW50by1sb2NhbCBzZXJ2aWNlXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgTW9tZW50b0xvY2FsUHJvdmlkZXIgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbEVuZHBvaW50czogQWxsRW5kcG9pbnRzO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c092ZXJyaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb25uZWN0aW5nIHRvIG1vbWVudG8tbG9jYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogTW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wcykge1xuICAgIGNvbnN0IGhvc3RuYW1lID0gcHJvcHM/Lmhvc3RuYW1lIHx8ICcxMjcuMC4wLjEnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm9wcz8ucG9ydCB8fCA4MDgwO1xuICAgIGNvbnN0IG1vbWVudG9Mb2NhbEVuZHBvaW50ID0gYCR7aG9zdG5hbWV9OiR7cG9ydH1gO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgICAgY29udHJvbEVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgICAgY2FjaGVFbmRwb2ludDogbW9tZW50b0xvY2FsRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IG1vbWVudG9Mb2NhbEVuZHBvaW50LFxuICAgICAgICBzZWN1cmVDb25uZWN0aW9uOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW47XG4gIH1cblxuICBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKCk7XG4gIH1cbn1cbiJdfQ==
260
+ class ApiKeyV2TokenProvider extends CredentialProviderBase {
261
+ /**
262
+ * @param {ApiKeyV2TokenProviderProps} props configuration options for the token provider
263
+ */
264
+ constructor(props) {
265
+ super();
266
+ let key;
267
+ if ('authToken' in props) {
268
+ key = props.authToken;
269
+ }
270
+ else if ('apiKey' in props) {
271
+ key = props.apiKey;
272
+ }
273
+ else {
274
+ throw new Error('Missing required property: authToken or apiKey');
275
+ }
276
+ if (!key.length) {
277
+ throw new Error('API key cannot be an empty string');
278
+ }
279
+ if (!(0, utils_1.isV2ApiKey)(key)) {
280
+ throw new Error('Received an invalid v2 API key. Are you using the correct key? Or did you mean to use `fromString()` with a legacy key instead?');
281
+ }
282
+ let endpoint;
283
+ if ('endpoint' in props) {
284
+ endpoint = props.endpoint;
285
+ }
286
+ else {
287
+ throw new Error('Missing required property: endpoint');
288
+ }
289
+ if (!endpoint.length) {
290
+ throw new Error('Endpoint cannot be an empty string');
291
+ }
292
+ this.apiKey = key;
293
+ this.allEndpoints = {
294
+ controlEndpoint: 'control.' + endpoint,
295
+ cacheEndpoint: 'cache.' + endpoint,
296
+ tokenEndpoint: 'token.' + endpoint,
297
+ };
298
+ }
299
+ getAuthToken() {
300
+ return this.apiKey;
301
+ }
302
+ getCacheEndpoint() {
303
+ return this.allEndpoints.cacheEndpoint;
304
+ }
305
+ isCacheEndpointSecure() {
306
+ return this.isEndpointSecure();
307
+ }
308
+ getControlEndpoint() {
309
+ return this.allEndpoints.controlEndpoint;
310
+ }
311
+ isControlEndpointSecure() {
312
+ return this.isEndpointSecure();
313
+ }
314
+ getTokenEndpoint() {
315
+ return this.allEndpoints.tokenEndpoint;
316
+ }
317
+ isTokenEndpointSecure() {
318
+ return this.isEndpointSecure();
319
+ }
320
+ isStorageEndpointSecure() {
321
+ return this.isEndpointSecure();
322
+ }
323
+ areEndpointsOverridden() {
324
+ return false;
325
+ }
326
+ isEndpointSecure() {
327
+ if (this.allEndpoints.secureConnection === undefined) {
328
+ return true;
329
+ }
330
+ return this.allEndpoints.secureConnection;
331
+ }
332
+ withMomentoLocal() {
333
+ return new MomentoLocalProvider();
334
+ }
335
+ }
336
+ exports.ApiKeyV2TokenProvider = ApiKeyV2TokenProvider;
337
+ class EnvMomentoV2TokenProvider extends ApiKeyV2TokenProvider {
338
+ /**
339
+ * @param {EnvMomentoV2TokenProviderProps} props configuration options for the token provider
340
+ */
341
+ constructor(props) {
342
+ const apiKeyEnvVar = (props === null || props === void 0 ? void 0 : props.apiKeyEnvVar) || 'MOMENTO_API_KEY';
343
+ const endpointEnvVar = (props === null || props === void 0 ? void 0 : props.endpointEnvVar) || 'MOMENTO_ENDPOINT';
344
+ const endpoint = process.env[endpointEnvVar];
345
+ if (!endpoint) {
346
+ throw new Error(`Empty value for environment variable ${endpointEnvVar}`);
347
+ }
348
+ if (!endpoint.length) {
349
+ throw new Error(`Endpoint environment variable ${endpointEnvVar} cannot be an empty string`);
350
+ }
351
+ const authToken = process.env[apiKeyEnvVar];
352
+ if (!authToken) {
353
+ throw new Error(`Empty value for environment variable ${apiKeyEnvVar}`);
354
+ }
355
+ if (!authToken.length) {
356
+ throw new Error(`API key environment variable ${apiKeyEnvVar} cannot be an empty string`);
357
+ }
358
+ if (!(0, utils_1.isV2ApiKey)(authToken)) {
359
+ throw new Error('Received an invalid v2 API key. Are you using the correct key? Or did you mean to use `fromEnvironmentVariable()` with a legacy key instead?');
360
+ }
361
+ super({
362
+ authToken: authToken,
363
+ endpoint: endpoint,
364
+ });
365
+ }
366
+ }
367
+ exports.EnvMomentoV2TokenProvider = EnvMomentoV2TokenProvider;
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBTTJCO0FBVTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQixrQkFBa0I7SUFxRHRDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUM1QixLQUE0QztRQUU1QyxPQUFPLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUE0QztRQUU1QyxPQUFPLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUErQztRQUUvQyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FDeEIsS0FBK0M7UUFFL0MsT0FBTyxJQUFJLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUNqQixLQUFzQztRQUV0QyxPQUFPLElBQUkseUJBQXlCLENBQUMsS0FB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LENBQUM7U0FDSDtRQUNELEtBQUssQ0FBQztZQUNKLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRDRCw4REFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBbGxFbmRwb2ludHMsXG4gIGRlY29kZUF1dGhUb2tlbixcbiAgZnJvbUVudHJpZXMsXG4gIGlzVjJBcGlLZXksXG4gIHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludCxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFbmRwb2ludE92ZXJyaWRlIHtcbiAgYmFzZUVuZHBvaW50OiBzdHJpbmc7XG4gIGVuZHBvaW50UHJlZml4Pzogc3RyaW5nO1xuICBzZWN1cmVDb25uZWN0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW5kcG9pbnRPdmVycmlkZXMgPSBCYXNlRW5kcG9pbnRPdmVycmlkZSB8IEFsbEVuZHBvaW50cztcblxuZnVuY3Rpb24gaXNCYXNlRW5kcG9pbnRPdmVycmlkZShcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBCYXNlRW5kcG9pbnRPdmVycmlkZSB7XG4gIHJldHVybiAoZW5kcG9pbnRPdmVycmlkZXMgYXMgQmFzZUVuZHBvaW50T3ZlcnJpZGUpLmJhc2VFbmRwb2ludCAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FsbEVuZHBvaW50cyhcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBBbGxFbmRwb2ludHMge1xuICBjb25zdCBhbGxFbmRwb2ludHMgPSBlbmRwb2ludE92ZXJyaWRlcyBhcyBBbGxFbmRwb2ludHM7XG4gIHJldHVybiAoXG4gICAgYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy50b2tlbkVuZHBvaW50ICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYXJndW1lbnRzIGZvciBpbnN0YW50aWF0aW5nIGFuIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyXG4gKi9cbmludGVyZmFjZSBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIGVuZHBvaW50T3ZlcnJpZGVzPzogRW5kcG9pbnRPdmVycmlkZXM7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCB0aGUgQ2FjaGVDbGllbnQgbmVlZHMgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhbmQgYXV0aGVudGljYXRlIHdpdGhcbiAqIHRoZSBNb21lbnRvIHNlcnZpY2UuXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEF1dGggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciwgcmVxdWlyZWQgdG8gYXV0aGVudGljYXRlIHdpdGggdGhlIHNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IGdldEF1dGhUb2tlbigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gY29udHJvbCBwbGFuZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNFbmRwb2ludFNlY3VyZSgpIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gZGF0YSBwbGFuZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzRW5kcG9pbnRTZWN1cmUoKSBpbnN0ZWFkXG4gICAqL1xuICBhYnN0cmFjdCBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byB0b2tlbiBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzRW5kcG9pbnRTZWN1cmUoKSBpbnN0ZWFkXG4gICAqL1xuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgdGhlIHN0YXRpYyBtZXRob2QgZm9yTW9tZW50b0xvY2FsIGluc3RlYWRcbiAgICpcbiAgICogTW9kaWZpZXMgdGhlIGluc3RhbmNlIG9mIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHRvIG92ZXJyaWRlIGVuZHBvaW50cyB0b1xuICAgKiBhbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byB0aGUgbW9tZW50by1sb2NhbCBzZXJ2aWNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAqL1xuICBhYnN0cmFjdCB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlcjtcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVuZHBvaW50cyB3ZXJlIG1hbnVhbGx5IG92ZXJyaWRkZW4gYXQgY29uc3RydWN0aW9uIHRpbWU7IGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYWJzdHJhY3QgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuO1xuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29ubmVjdGluZyB0byB0aGUgZW5kcG9pbnQgY29ubmVjdGlvbiB3aXRoIFRMUzsgZmFsc2UgaWYgbm90IHVzaW5nIFRMU1xuICAgKi9cbiAgYWJzdHJhY3QgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUVudlZhclYyKCkgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21FbnZWYXJWMigpIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tRW52VmFyKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21BcGlLZXlWMigpIG9yIGZyb21EaXNwb3NhYmxlVG9rZW4oKSBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyhcbiAgICBwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZ1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21EaXNwb3NhYmxlVG9rZW4oXG4gICAgcHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmdcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW52VmFyVjIoXG4gICAgcHJvcHM/OiBFbnZNb21lbnRvVjJUb2tlblByb3ZpZGVyUHJvcHNcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21BcGlLZXlWMihwcm9wczogQXBpS2V5VjJUb2tlblByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgQXBpS2V5VjJUb2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqIERvZXMgbm90IHJlcXVpcmUgYSBNb21lbnRvIEFQSSBrZXkuXG4gICAqIEBwYXJhbSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gbW9tZW50by1sb2NhbFxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsUHJvdmlkZXJcbiAgICovXG4gIHN0YXRpYyBmb3JNb21lbnRvTG9jYWwocHJvcHM6IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIocHJvcHMpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHZhbHVlT2YoKTogb2JqZWN0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnYXV0aFRva2VuJyk7XG4gICAgY29uc3QgY2xvbmUgPSBmcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xvbmUudmFsdWVPZigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0FwaUtleVByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhcGlLZXkgdGhlIG1vbWVudG8gQVBJIGtleVxuICAgKi9cbiAgYXBpS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhdXRoVG9rZW4gdGhlIG1vbWVudG8gYXV0aCB0b2tlblxuICAgKi9cbiAgYXV0aFRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgPVxuICB8IFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIHwgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHM7XG5cbmV4cG9ydCB0eXBlIEFwaUtleVYyVG9rZW5Qcm92aWRlclByb3BzID0gU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyAmIHtcbiAgZW5kcG9pbnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52TW9tZW50b1YyVG9rZW5Qcm92aWRlclByb3BzIHtcbiAgYXBpS2V5RW52VmFyPzogc3RyaW5nO1xuICBlbmRwb2ludEVudlZhcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGEgbW9tZW50byBhdXRoIHRva2VuIHN0b3JlZCBpbiBhIFN0cmluZ1xuICogQGV4cG9ydFxuICogQGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyXG4gKiBAZGVwcmVjYXRlZCB1c2UgQXBpS2V5VjJUb2tlblByb3ZpZGVyIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsRW5kcG9pbnRzOiBBbGxFbmRwb2ludHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzT3ZlcnJpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvcHMgPSB7YXBpS2V5OiBwcm9wc307XG4gICAgfVxuICAgIHN1cGVyKCk7XG4gICAgbGV0IGtleTogc3RyaW5nO1xuICAgIGlmICgnYXV0aFRva2VuJyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXV0aFRva2VuO1xuICAgIH0gZWxzZSBpZiAoJ2FwaUtleScgaW4gcHJvcHMpIHtcbiAgICAgIGtleSA9IHByb3BzLmFwaUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBhdXRoVG9rZW4gb3IgYXBpS2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGRlY29kZUF1dGhUb2tlbihrZXkpO1xuICAgIHRoaXMuYXBpS2V5ID0gZGVjb2RlZFRva2VuLmF1dGhUb2tlbjtcbiAgICBpZiAocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLmNvbnRyb2xFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIGNvbnRyb2wgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRyb2xFbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVkVG9rZW4uY2FjaGVFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhY2hlIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSBjYWNoZUVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZWRUb2tlbi50b2tlbkVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgdG9rZW4gZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIHRva2VuRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWxsRW5kcG9pbnRzID0ge1xuICAgICAgICBjb250cm9sRW5kcG9pbnQ6IGRlY29kZWRUb2tlbi5jb250cm9sRW5kcG9pbnQsXG4gICAgICAgIGNhY2hlRW5kcG9pbnQ6IGRlY29kZWRUb2tlbi5jYWNoZUVuZHBvaW50LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBkZWNvZGVkVG9rZW4udG9rZW5FbmRwb2ludCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQ7XG4gIH1cbiAgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQ7XG4gIH1cblxuICBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgaXNTdG9yYWdlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuO1xuICB9XG5cbiAgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBNb21lbnRvTG9jYWxQcm92aWRlcigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmcm9tIHdoaWNoIHRoZSBhdXRoIHRva2VuIHdpbGwgYmUgcmVhZFxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGEgbW9tZW50byBhdXRoIHRva2VuIHN0b3JlZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclxuICogQGRlcHJlY2F0ZWQgdXNlIEVudk1vbWVudG9WMlRva2VuUHJvdmlkZXIgaW5zdGVhZFxuICovXG5leHBvcnQgY2xhc3MgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlciB7XG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm9wcyA9IHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogcHJvcHN9O1xuICAgIH1cbiAgICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudltwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZV07XG4gICAgaWYgKCFhdXRoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgJHtwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlcih7XG4gICAgICBhdXRoVG9rZW46IGF1dGhUb2tlbixcbiAgICAgIGVuZHBvaW50T3ZlcnJpZGVzOiBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyxcbiAgICB9KTtcbiAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGVOYW1lID0gcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDcmVkZW50aWFsUHJvdmlkZXIoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICByZXR1cm4gQ3JlZGVudGlhbFByb3ZpZGVyLmZyb21FbnZWYXIoJ01PTUVOVE9fQVBJX0tFWScpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaG9zdG5hbWUgb2YgdGhlIG1vbWVudG8tbG9jYWwgc2VydmljZVxuICAgKi9cbiAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcG9ydCBvZiB0aGUgbW9tZW50by1sb2NhbCBzZXJ2aWNlXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgTW9tZW50b0xvY2FsUHJvdmlkZXIgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbEVuZHBvaW50czogQWxsRW5kcG9pbnRzO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c092ZXJyaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb25uZWN0aW5nIHRvIG1vbWVudG8tbG9jYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogTW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wcykge1xuICAgIGNvbnN0IGhvc3RuYW1lID0gcHJvcHM/Lmhvc3RuYW1lIHx8ICcxMjcuMC4wLjEnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm9wcz8ucG9ydCB8fCA4MDgwO1xuICAgIGNvbnN0IG1vbWVudG9Mb2NhbEVuZHBvaW50ID0gYCR7aG9zdG5hbWV9OiR7cG9ydH1gO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgICAgY29udHJvbEVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgICAgY2FjaGVFbmRwb2ludDogbW9tZW50b0xvY2FsRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IG1vbWVudG9Mb2NhbEVuZHBvaW50LFxuICAgICAgICBzZWN1cmVDb25uZWN0aW9uOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW47XG4gIH1cblxuICBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFwaUtleVYyVG9rZW5Qcm92aWRlciBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlckJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbEVuZHBvaW50czogQWxsRW5kcG9pbnRzO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FwaUtleVYyVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IEFwaUtleVYyVG9rZW5Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgaWYgKCdhdXRoVG9rZW4nIGluIHByb3BzKSB7XG4gICAgICBrZXkgPSBwcm9wcy5hdXRoVG9rZW47XG4gICAgfSBlbHNlIGlmICgnYXBpS2V5JyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXBpS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGF1dGhUb2tlbiBvciBhcGlLZXknKTtcbiAgICB9XG4gICAgaWYgKCFrZXkubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FQSSBrZXkgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAoIWlzVjJBcGlLZXkoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUmVjZWl2ZWQgYW4gaW52YWxpZCB2MiBBUEkga2V5LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IGtleT8gT3IgZGlkIHlvdSBtZWFuIHRvIHVzZSBgZnJvbVN0cmluZygpYCB3aXRoIGEgbGVnYWN5IGtleSBpbnN0ZWFkPydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGVuZHBvaW50OiBzdHJpbmc7XG4gICAgaWYgKCdlbmRwb2ludCcgaW4gcHJvcHMpIHtcbiAgICAgIGVuZHBvaW50ID0gcHJvcHMuZW5kcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogZW5kcG9pbnQnKTtcbiAgICB9XG4gICAgaWYgKCFlbmRwb2ludC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW5kcG9pbnQgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpS2V5ID0ga2V5O1xuICAgIHRoaXMuYWxsRW5kcG9pbnRzID0ge1xuICAgICAgY29udHJvbEVuZHBvaW50OiAnY29udHJvbC4nICsgZW5kcG9pbnQsXG4gICAgICBjYWNoZUVuZHBvaW50OiAnY2FjaGUuJyArIGVuZHBvaW50LFxuICAgICAgdG9rZW5FbmRwb2ludDogJ3Rva2VuLicgKyBlbmRwb2ludCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QXV0aFRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5O1xuICB9XG5cbiAgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50O1xuICB9XG4gIGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY29udHJvbEVuZHBvaW50O1xuICB9XG5cbiAgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy50b2tlbkVuZHBvaW50O1xuICB9XG5cbiAgaXNUb2tlbkVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGlzU3RvcmFnZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGFyZUVuZHBvaW50c092ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICB3aXRoTW9tZW50b0xvY2FsKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBNb21lbnRvTG9jYWxQcm92aWRlcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZNb21lbnRvVjJUb2tlblByb3ZpZGVyIGV4dGVuZHMgQXBpS2V5VjJUb2tlblByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RW52TW9tZW50b1YyVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBFbnZNb21lbnRvVjJUb2tlblByb3ZpZGVyUHJvcHMpIHtcbiAgICBjb25zdCBhcGlLZXlFbnZWYXIgPSBwcm9wcz8uYXBpS2V5RW52VmFyIHx8ICdNT01FTlRPX0FQSV9LRVknO1xuICAgIGNvbnN0IGVuZHBvaW50RW52VmFyID0gcHJvcHM/LmVuZHBvaW50RW52VmFyIHx8ICdNT01FTlRPX0VORFBPSU5UJztcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gcHJvY2Vzcy5lbnZbZW5kcG9pbnRFbnZWYXJdO1xuICAgIGlmICghZW5kcG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgdmFsdWUgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlICR7ZW5kcG9pbnRFbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmICghZW5kcG9pbnQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFbmRwb2ludCBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2VuZHBvaW50RW52VmFyfSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudlthcGlLZXlFbnZWYXJdO1xuICAgIGlmICghYXV0aFRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVtcHR5IHZhbHVlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2FwaUtleUVudlZhcn1gKTtcbiAgICB9XG4gICAgaWYgKCFhdXRoVG9rZW4ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBUEkga2V5IGVudmlyb25tZW50IHZhcmlhYmxlICR7YXBpS2V5RW52VmFyfSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVjJBcGlLZXkoYXV0aFRva2VuKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUmVjZWl2ZWQgYW4gaW52YWxpZCB2MiBBUEkga2V5LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IGtleT8gT3IgZGlkIHlvdSBtZWFuIHRvIHVzZSBgZnJvbUVudmlyb25tZW50VmFyaWFibGUoKWAgd2l0aCBhIGxlZ2FjeSBrZXkgaW5zdGVhZD8nXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlcih7XG4gICAgICBhdXRoVG9rZW46IGF1dGhUb2tlbixcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludCxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { CacheDelete, CacheGet, CacheGetWithHash, CacheIncrement, CacheSet, CacheSetIfNotExists, CacheSetFetch, CacheSetAddElements, CacheSetAddElement, CacheSetContainsElement, CacheSetContainsElements, CacheSetRemoveElements, CacheSetRemoveElement, CacheListFetch, CacheListLength, CacheListPushFront, CacheListPushBack, CacheListConcatenateBack, CacheListConcatenateFront, CacheListPopBack, CacheListPopFront, CacheListRemoveValue, CacheListRetain, CacheDictionarySetField, CacheDictionarySetFields, CacheDictionaryGetField, CacheDictionaryFetch, CacheDictionaryIncrement, CacheDictionaryRemoveField, CacheDictionaryRemoveFields, CacheDictionaryLength, CacheSortedSetFetch, CacheSortedSetPutElement, CacheSortedSetPutElements, CacheSortedSetGetRank, CacheSortedSetGetScore, CacheSortedSetGetScores, CacheSortedSetIncrementScore, CacheSortedSetRemoveElement, CacheSortedSetLength, CacheSortedSetLengthByScore, CacheItemGetType, CacheItemGetTtl, CacheKeyExists, CacheKeysExist, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl, CacheDictionaryGetFields, CacheGetBatch, CacheSetBatch, CacheSetIfAbsent, CacheSetIfPresent, CacheSetIfEqual, CacheSetIfNotEqual, CacheSetIfPresentAndNotEqual, CacheSetIfAbsentOrEqual, CacheSetSample, CacheSortedSetRemoveElements, CacheSetPop, CacheSetLength, CacheSortedSetUnionStore, CacheSetWithHash, CacheSetIfPresentAndHashEqual, CacheSetIfPresentAndHashNotEqual, CacheSetIfAbsentOrHashEqual, CacheSetIfAbsentOrHashNotEqual } from '../index';
2
- import { ScalarCallOptions, ListFetchCallOptions, ListRetainCallOptions, BackTruncatableCallOptions, FrontTruncatableCallOptions, CollectionCallOptions, SortedSetFetchByRankCallOptions, SortedSetFetchByScoreCallOptions, SortedSetLengthByScoreCallOptions, SortedSetGetRankCallOptions, SetCallOptions, GetCallOptions, SetIfAbsentCallOptions, SetBatchItem, SortedSetSource, SortedSetUnionStoreCallOptions, GetWithHashCallOptions, SetWithHashCallOptions } from '../utils';
2
+ import { ListFetchCallOptions, ListRetainCallOptions, BackTruncatableCallOptions, FrontTruncatableCallOptions, CollectionCallOptions, SortedSetFetchByRankCallOptions, SortedSetFetchByScoreCallOptions, SortedSetLengthByScoreCallOptions, SortedSetGetRankCallOptions, SetCallOptions, GetCallOptions, SetIfAbsentCallOptions, SetBatchItem, SortedSetSource, SortedSetUnionStoreCallOptions, GetWithHashCallOptions, SetWithHashCallOptions, CancellationCallOptions, ScalarCallOptions } from '../utils';
3
3
  import { IControlClient, IPingClient } from '../internal/clients';
4
4
  import { IMomentoCache } from './IMomentoCache';
5
5
  export type SetOptions = SetCallOptions;
@@ -37,11 +37,35 @@ export type SetIfPresentAndHashEqualOptions = ScalarCallOptions;
37
37
  export type SetIfPresentAndHashNotEqualOptions = ScalarCallOptions;
38
38
  export type SetIfAbsentOrHashEqualOptions = ScalarCallOptions;
39
39
  export type SetIfAbsentOrHashNotEqualOptions = ScalarCallOptions;
40
+ export type SetFetchOptions = CancellationCallOptions;
41
+ export type DeleteOptions = CancellationCallOptions;
42
+ export type SetContainsElementsOptions = CancellationCallOptions;
43
+ export type SetRemoveElementsOptions = CancellationCallOptions;
44
+ export type SetSampleOptions = CancellationCallOptions;
45
+ export type SetPopOptions = CancellationCallOptions;
46
+ export type SetLengthOptions = CancellationCallOptions;
47
+ export type ListLengthOptions = CancellationCallOptions;
48
+ export type ListPopBackOptions = CancellationCallOptions;
49
+ export type ListPopFrontOptions = CancellationCallOptions;
50
+ export type ListRemoveValueOptions = CancellationCallOptions;
51
+ export type DictionaryGetFieldOptions = CancellationCallOptions;
52
+ export type DictionaryFetchOptions = CancellationCallOptions;
53
+ export type DictionaryRemoveFieldOptions = CancellationCallOptions;
54
+ export type DictionaryLengthOptions = CancellationCallOptions;
55
+ export type SortedSetGetScoreOptions = CancellationCallOptions;
56
+ export type SortedSetRemoveElementOptions = CancellationCallOptions;
57
+ export type SortedSetLengthOptions = CancellationCallOptions;
58
+ export type ItemGetTypeOptions = CancellationCallOptions;
59
+ export type ItemGetTtlOptions = CancellationCallOptions;
60
+ export type KeyExistsOptions = CancellationCallOptions;
61
+ export type UpdateTtlOptions = CancellationCallOptions;
62
+ export type IncreaseTtlOptions = CancellationCallOptions;
63
+ export type DecreaseTtlOptions = CancellationCallOptions;
40
64
  export interface ICacheClient extends IControlClient, IPingClient {
41
65
  cache(cacheName: string): IMomentoCache;
42
66
  get(cacheName: string, key: string | Uint8Array, options?: GetOptions): Promise<CacheGet.Response>;
43
67
  set(cacheName: string, key: string | Uint8Array, value: string | Uint8Array, options?: SetOptions): Promise<CacheSet.Response>;
44
- delete(cacheName: string, key: string | Uint8Array): Promise<CacheDelete.Response>;
68
+ delete(cacheName: string, key: string | Uint8Array, options?: DeleteOptions): Promise<CacheDelete.Response>;
45
69
  increment(cacheName: string, field: string | Uint8Array, amount: number, options?: IncrementOptions): Promise<CacheIncrement.Response>;
46
70
  /**
47
71
  * @deprecated use setIfAbsent instead.
@@ -57,58 +81,58 @@ export interface ICacheClient extends IControlClient, IPingClient {
57
81
  setIfPresentAndHashNotEqual(cacheName: string, key: string | Uint8Array, value: string | Uint8Array, hashNotEqual: Uint8Array, options?: SetIfPresentAndHashNotEqualOptions): Promise<CacheSetIfPresentAndHashNotEqual.Response>;
58
82
  setIfAbsentOrHashEqual(cacheName: string, key: string | Uint8Array, value: string | Uint8Array, hashEqual: Uint8Array, options?: SetIfAbsentOrHashEqualOptions): Promise<CacheSetIfAbsentOrHashEqual.Response>;
59
83
  setIfAbsentOrHashNotEqual(cacheName: string, key: string | Uint8Array, value: string | Uint8Array, hashNotEqual: Uint8Array, options?: SetIfAbsentOrHashNotEqualOptions): Promise<CacheSetIfAbsentOrHashNotEqual.Response>;
60
- getBatch(cacheName: string, keys: Array<string | Uint8Array>): Promise<CacheGetBatch.Response>;
84
+ getBatch(cacheName: string, keys: Array<string | Uint8Array>, options?: GetBatchOptions): Promise<CacheGetBatch.Response>;
61
85
  setBatch(cacheName: string, items: Record<string, string | Uint8Array> | Map<string | Uint8Array, string | Uint8Array> | Array<SetBatchItem>, options?: SetBatchOptions): Promise<CacheSetBatch.Response>;
62
86
  getWithHash(cacheName: string, key: string | Uint8Array, options?: GetWithHashOptions): Promise<CacheGetWithHash.Response>;
63
87
  setWithHash(cacheName: string, key: string | Uint8Array, value: string | Uint8Array, options?: SetWithHashOptions): Promise<CacheSetWithHash.Response>;
64
- setFetch(cacheName: string, setName: string): Promise<CacheSetFetch.Response>;
88
+ setFetch(cacheName: string, setName: string, options?: SetFetchOptions): Promise<CacheSetFetch.Response>;
65
89
  setAddElement(cacheName: string, setName: string, element: string | Uint8Array, options?: SetAddElementsOptions): Promise<CacheSetAddElement.Response>;
66
90
  setAddElements(cacheName: string, setName: string, elements: string[] | Uint8Array[], options?: SetAddElementsOptions): Promise<CacheSetAddElements.Response>;
67
- setContainsElement(cacheName: string, setName: string, element: string | Uint8Array): Promise<CacheSetContainsElement.Response>;
68
- setContainsElements(cacheName: string, setName: string, elements: string[] | Uint8Array[]): Promise<CacheSetContainsElements.Response>;
69
- setRemoveElement(cacheName: string, setName: string, element: string | Uint8Array): Promise<CacheSetRemoveElement.Response>;
70
- setRemoveElements(cacheName: string, setName: string, elements: string[] | Uint8Array[]): Promise<CacheSetRemoveElements.Response>;
71
- setSample(cacheName: string, setName: string, limit: number): Promise<CacheSetSample.Response>;
72
- setPop(cacheName: string, setName: string, count: number): Promise<CacheSetPop.Response>;
73
- setLength(cacheName: string, setName: string): Promise<CacheSetLength.Response>;
91
+ setContainsElement(cacheName: string, setName: string, element: string | Uint8Array, options?: SetContainsElementsOptions): Promise<CacheSetContainsElement.Response>;
92
+ setContainsElements(cacheName: string, setName: string, elements: string[] | Uint8Array[], options?: SetContainsElementsOptions): Promise<CacheSetContainsElements.Response>;
93
+ setRemoveElement(cacheName: string, setName: string, element: string | Uint8Array, options?: SetRemoveElementsOptions): Promise<CacheSetRemoveElement.Response>;
94
+ setRemoveElements(cacheName: string, setName: string, elements: string[] | Uint8Array[], options?: SetRemoveElementsOptions): Promise<CacheSetRemoveElements.Response>;
95
+ setSample(cacheName: string, setName: string, limit: number, options?: SetSampleOptions): Promise<CacheSetSample.Response>;
96
+ setPop(cacheName: string, setName: string, count: number, options?: SetPopOptions): Promise<CacheSetPop.Response>;
97
+ setLength(cacheName: string, setName: string, options?: SetLengthOptions): Promise<CacheSetLength.Response>;
74
98
  listFetch(cacheName: string, listName: string, options?: ListFetchCallOptions): Promise<CacheListFetch.Response>;
75
- listLength(cacheName: string, listName: string): Promise<CacheListLength.Response>;
99
+ listLength(cacheName: string, listName: string, options?: ListLengthOptions): Promise<CacheListLength.Response>;
76
100
  listPushFront(cacheName: string, listName: string, value: string | Uint8Array, options?: ListPushFrontOptions): Promise<CacheListPushFront.Response>;
77
101
  listPushBack(cacheName: string, listName: string, value: string | Uint8Array, options?: ListPushBackOptions): Promise<CacheListPushBack.Response>;
78
102
  listConcatenateBack(cacheName: string, listName: string, values: string[] | Uint8Array[], options?: ListConcatenateBackOptions): Promise<CacheListConcatenateBack.Response>;
79
103
  listConcatenateFront(cacheName: string, listName: string, values: string[] | Uint8Array[], options?: ListConcatenateFrontOptions): Promise<CacheListConcatenateFront.Response>;
80
- listPopBack(cacheName: string, listName: string): Promise<CacheListPopBack.Response>;
81
- listPopFront(cacheName: string, listName: string): Promise<CacheListPopFront.Response>;
82
- listRemoveValue(cacheName: string, listName: string, value: string | Uint8Array): Promise<CacheListRemoveValue.Response>;
104
+ listPopBack(cacheName: string, listName: string, options?: ListPopBackOptions): Promise<CacheListPopBack.Response>;
105
+ listPopFront(cacheName: string, listName: string, options?: ListPopFrontOptions): Promise<CacheListPopFront.Response>;
106
+ listRemoveValue(cacheName: string, listName: string, value: string | Uint8Array, options?: ListRemoveValueOptions): Promise<CacheListRemoveValue.Response>;
83
107
  listRetain(cacheName: string, listName: string, options?: ListRetainCallOptions): Promise<CacheListRetain.Response>;
84
108
  dictionarySetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, value: string | Uint8Array, options?: DictionarySetFieldOptions): Promise<CacheDictionarySetField.Response>;
85
109
  dictionarySetFields(cacheName: string, dictionaryName: string, elements: Map<string | Uint8Array, string | Uint8Array> | Record<string, string | Uint8Array> | Array<[string, string | Uint8Array]>, options?: DictionarySetFieldsOptions): Promise<CacheDictionarySetFields.Response>;
86
- dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array): Promise<CacheDictionaryGetField.Response>;
87
- dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[]): Promise<CacheDictionaryGetFields.Response>;
88
- dictionaryFetch(cacheName: string, dictionaryName: string): Promise<CacheDictionaryFetch.Response>;
110
+ dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, options?: DictionaryGetFieldOptions): Promise<CacheDictionaryGetField.Response>;
111
+ dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[], options?: DictionaryGetFieldOptions): Promise<CacheDictionaryGetFields.Response>;
112
+ dictionaryFetch(cacheName: string, dictionaryName: string, options?: DictionaryFetchOptions): Promise<CacheDictionaryFetch.Response>;
89
113
  dictionaryIncrement(cacheName: string, dictionaryName: string, field: string | Uint8Array, amount?: number, options?: DictionaryIncrementOptions): Promise<CacheDictionaryIncrement.Response>;
90
- dictionaryRemoveField(cacheName: string, dictionaryName: string, field: string | Uint8Array): Promise<CacheDictionaryRemoveField.Response>;
91
- dictionaryRemoveFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[]): Promise<CacheDictionaryRemoveFields.Response>;
92
- dictionaryLength(cacheName: string, dictionaryName: string): Promise<CacheDictionaryLength.Response>;
114
+ dictionaryRemoveField(cacheName: string, dictionaryName: string, field: string | Uint8Array, options?: DictionaryRemoveFieldOptions): Promise<CacheDictionaryRemoveField.Response>;
115
+ dictionaryRemoveFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[], options?: DictionaryRemoveFieldOptions): Promise<CacheDictionaryRemoveFields.Response>;
116
+ dictionaryLength(cacheName: string, dictionaryName: string, options?: DictionaryLengthOptions): Promise<CacheDictionaryLength.Response>;
93
117
  sortedSetFetchByRank(cacheName: string, sortedSetName: string, options?: SortedSetFetchByRankOptions): Promise<CacheSortedSetFetch.Response>;
94
118
  sortedSetFetchByScore(cacheName: string, sortedSetName: string, options?: SortedSetFetchByScoreOptions): Promise<CacheSortedSetFetch.Response>;
95
119
  sortedSetPutElement(cacheName: string, sortedSetName: string, value: string | Uint8Array, score: number, options?: SortedSetPutElementOptions): Promise<CacheSortedSetPutElement.Response>;
96
120
  sortedSetPutElements(cacheName: string, sortedSetName: string, elements: Map<string | Uint8Array, number> | Record<string, number> | Array<[string, number]>, options?: SortedSetPutElementsOptions): Promise<CacheSortedSetPutElements.Response>;
97
121
  sortedSetGetRank(cacheName: string, sortedSetName: string, value: string | Uint8Array, options?: SortedSetGetRankOptions): Promise<CacheSortedSetGetRank.Response>;
98
- sortedSetGetScore(cacheName: string, sortedSetName: string, value: string | Uint8Array): Promise<CacheSortedSetGetScore.Response>;
99
- sortedSetGetScores(cacheName: string, sortedSetName: string, values: string[] | Uint8Array[]): Promise<CacheSortedSetGetScores.Response>;
122
+ sortedSetGetScore(cacheName: string, sortedSetName: string, value: string | Uint8Array, options?: SortedSetGetScoreOptions): Promise<CacheSortedSetGetScore.Response>;
123
+ sortedSetGetScores(cacheName: string, sortedSetName: string, values: string[] | Uint8Array[], options?: SortedSetGetScoreOptions): Promise<CacheSortedSetGetScores.Response>;
100
124
  sortedSetIncrementScore(cacheName: string, sortedSetName: string, value: string | Uint8Array, amount?: number, options?: SortedSetIncrementOptions): Promise<CacheSortedSetIncrementScore.Response>;
101
- sortedSetRemoveElement(cacheName: string, sortedSetName: string, value: string | Uint8Array): Promise<CacheSortedSetRemoveElement.Response>;
102
- sortedSetRemoveElements(cacheName: string, sortedSetName: string, values: string[] | Uint8Array[]): Promise<CacheSortedSetRemoveElements.Response>;
103
- sortedSetLength(cacheName: string, sortedSetName: string): Promise<CacheSortedSetLength.Response>;
125
+ sortedSetRemoveElement(cacheName: string, sortedSetName: string, value: string | Uint8Array, options?: SortedSetRemoveElementOptions): Promise<CacheSortedSetRemoveElement.Response>;
126
+ sortedSetRemoveElements(cacheName: string, sortedSetName: string, values: string[] | Uint8Array[], options?: SortedSetRemoveElementOptions): Promise<CacheSortedSetRemoveElements.Response>;
127
+ sortedSetLength(cacheName: string, sortedSetName: string, options?: SortedSetLengthOptions): Promise<CacheSortedSetLength.Response>;
104
128
  sortedSetLengthByScore(cacheName: string, sortedSetName: string, options?: SortedSetLengthByScoreOptions): Promise<CacheSortedSetLengthByScore.Response>;
105
129
  sortedSetUnionStore(cacheName: string, sortedSetName: string, sources: SortedSetSource[], options?: SortedSetUnionStoreOptions): Promise<CacheSortedSetUnionStore.Response>;
106
- itemGetType(cacheName: string, key: string | Uint8Array): Promise<CacheItemGetType.Response>;
107
- itemGetTtl(cacheName: string, key: string | Uint8Array): Promise<CacheItemGetTtl.Response>;
108
- keyExists(cacheName: string, key: string | Uint8Array): Promise<CacheKeyExists.Response>;
109
- keysExist(cacheName: string, keys: string[] | Uint8Array[]): Promise<CacheKeysExist.Response>;
110
- updateTtl(cacheName: string, key: string | Uint8Array, ttlMilliseconds: number): Promise<CacheUpdateTtl.Response>;
111
- increaseTtl(cacheName: string, key: string | Uint8Array, ttlMilliseconds: number): Promise<CacheIncreaseTtl.Response>;
112
- decreaseTtl(cacheName: string, key: string | Uint8Array, ttlMilliseconds: number): Promise<CacheDecreaseTtl.Response>;
130
+ itemGetType(cacheName: string, key: string | Uint8Array, options?: ItemGetTypeOptions): Promise<CacheItemGetType.Response>;
131
+ itemGetTtl(cacheName: string, key: string | Uint8Array, options?: ItemGetTtlOptions): Promise<CacheItemGetTtl.Response>;
132
+ keyExists(cacheName: string, key: string | Uint8Array, options?: KeyExistsOptions): Promise<CacheKeyExists.Response>;
133
+ keysExist(cacheName: string, keys: string[] | Uint8Array[], options?: KeyExistsOptions): Promise<CacheKeysExist.Response>;
134
+ updateTtl(cacheName: string, key: string | Uint8Array, ttlMilliseconds: number, options?: UpdateTtlOptions): Promise<CacheUpdateTtl.Response>;
135
+ increaseTtl(cacheName: string, key: string | Uint8Array, ttlMilliseconds: number, options?: IncreaseTtlOptions): Promise<CacheIncreaseTtl.Response>;
136
+ decreaseTtl(cacheName: string, key: string | Uint8Array, ttlMilliseconds: number, options?: DecreaseTtlOptions): Promise<CacheDecreaseTtl.Response>;
113
137
  close(): void;
114
138
  }