@gomomento/sdk-core 1.37.0 → 1.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/auth/credential-provider.d.ts +21 -48
- package/dist/src/auth/credential-provider.js +61 -44
- package/dist/src/auth/tokens/disposable-token-scope.d.ts +24 -0
- package/dist/src/auth/tokens/disposable-token-scope.js +55 -0
- package/dist/src/auth/tokens/disposable-token-scopes.d.ts +3 -2
- package/dist/src/auth/tokens/disposable-token-scopes.js +9 -9
- package/dist/src/auth/tokens/{token-scope.d.ts → permission-scope.d.ts} +7 -26
- package/dist/src/auth/tokens/permission-scope.js +82 -0
- package/dist/src/auth/tokens/{token-scopes.d.ts → permission-scopes.d.ts} +7 -7
- package/dist/src/auth/tokens/permission-scopes.js +59 -0
- package/dist/src/clients/IAuthClient.d.ts +12 -4
- package/dist/src/clients/IAuthClient.js +1 -1
- package/dist/src/index.d.ts +22 -5
- package/dist/src/index.js +27 -19
- package/dist/src/internal/clients/auth/AbstractAuthClient.d.ts +26 -18
- package/dist/src/internal/clients/auth/AbstractAuthClient.js +29 -17
- package/dist/src/internal/utils/auth.d.ts +8 -1
- package/dist/src/internal/utils/auth.js +14 -8
- package/dist/src/messages/responses/{generate-auth-token.d.ts → generate-api-key.d.ts} +5 -1
- package/dist/src/messages/responses/generate-api-key.js +49 -0
- package/dist/src/messages/responses/{refresh-auth-token.d.ts → refresh-api-key.d.ts} +6 -1
- package/dist/src/messages/responses/refresh-api-key.js +50 -0
- package/package.json +1 -1
- package/dist/src/auth/tokens/token-scope.js +0 -132
- package/dist/src/auth/tokens/token-scopes.js +0 -59
- package/dist/src/messages/responses/generate-auth-token.js +0 -43
- package/dist/src/messages/responses/refresh-auth-token.js +0 -43
@@ -1,23 +1,13 @@
|
|
1
|
+
import { AllEndpoints } from '../internal/utils';
|
2
|
+
export interface BaseEndpointOverride {
|
3
|
+
baseEndpoint: string;
|
4
|
+
}
|
5
|
+
export type EndpointOverrides = BaseEndpointOverride | AllEndpoints;
|
1
6
|
/**
|
2
7
|
* Encapsulates arguments for instantiating an EnvMomentoTokenProvider
|
3
8
|
*/
|
4
9
|
interface CredentialProviderProps {
|
5
|
-
|
6
|
-
* optionally overrides the default controlEndpoint
|
7
|
-
*/
|
8
|
-
controlEndpoint?: string;
|
9
|
-
/**
|
10
|
-
* optionally overrides the default cacheEndpoint
|
11
|
-
*/
|
12
|
-
cacheEndpoint?: string;
|
13
|
-
/**
|
14
|
-
* optionally overrides the default vectorEndpoint
|
15
|
-
*/
|
16
|
-
tokenEndpoint?: string;
|
17
|
-
/**
|
18
|
-
* optionally overrides the default vectorEndpoint
|
19
|
-
*/
|
20
|
-
vectorEndpoint?: string;
|
10
|
+
endpointOverrides?: EndpointOverrides;
|
21
11
|
}
|
22
12
|
/**
|
23
13
|
* Provides information that the CacheClient needs in order to establish a connection to and authenticate with
|
@@ -47,21 +37,9 @@ export declare abstract class CredentialProvider {
|
|
47
37
|
*/
|
48
38
|
abstract getVectorEndpoint(): string;
|
49
39
|
/**
|
50
|
-
* @returns {boolean} true if the
|
40
|
+
* @returns {boolean} true if the endpoints were manually overridden at construction time; false otherwise
|
51
41
|
*/
|
52
|
-
abstract
|
53
|
-
/**
|
54
|
-
* @returns {boolean} true if the control endpoint was manually overridden at construction time; false otherwise
|
55
|
-
*/
|
56
|
-
abstract isControlEndpointOverridden(): boolean;
|
57
|
-
/**
|
58
|
-
* @returns {boolean} true if the token endpoint was manually overridden at construction time; false otherwise
|
59
|
-
*/
|
60
|
-
abstract isTokenEndpointOverridden(): boolean;
|
61
|
-
/**
|
62
|
-
* @returns {boolean} true if the vector endpoint was manually overridden at construction time; false otherwise
|
63
|
-
*/
|
64
|
-
abstract isVectorEndpointOverridden(): boolean;
|
42
|
+
abstract areEndpointsOverridden(): boolean;
|
65
43
|
static fromEnvironmentVariable(props: EnvMomentoTokenProviderProps): CredentialProvider;
|
66
44
|
static fromString(props: StringMomentoTokenProviderProps): CredentialProvider;
|
67
45
|
}
|
@@ -71,33 +49,31 @@ declare abstract class CredentialProviderBase implements CredentialProvider {
|
|
71
49
|
abstract getControlEndpoint(): string;
|
72
50
|
abstract getTokenEndpoint(): string;
|
73
51
|
abstract getVectorEndpoint(): string;
|
74
|
-
abstract
|
75
|
-
abstract isControlEndpointOverridden(): boolean;
|
76
|
-
abstract isTokenEndpointOverridden(): boolean;
|
77
|
-
abstract isVectorEndpointOverridden(): boolean;
|
52
|
+
abstract areEndpointsOverridden(): boolean;
|
78
53
|
valueOf(): object;
|
79
54
|
}
|
80
|
-
export interface
|
55
|
+
export interface StringMomentoApiKeyProviderProps extends CredentialProviderProps {
|
56
|
+
/**
|
57
|
+
* apiKey the momento API key
|
58
|
+
*/
|
59
|
+
apiKey: string;
|
60
|
+
}
|
61
|
+
export interface StringMomentoAuthTokenProviderProps extends CredentialProviderProps {
|
81
62
|
/**
|
82
63
|
* authToken the momento auth token
|
83
64
|
*/
|
84
65
|
authToken: string;
|
85
66
|
}
|
67
|
+
export type StringMomentoTokenProviderProps = StringMomentoApiKeyProviderProps | StringMomentoAuthTokenProviderProps;
|
86
68
|
/**
|
87
69
|
* Reads and parses a momento auth token stored in a String
|
88
70
|
* @export
|
89
71
|
* @class StringMomentoTokenProvider
|
90
72
|
*/
|
91
73
|
export declare class StringMomentoTokenProvider extends CredentialProviderBase {
|
92
|
-
private readonly
|
93
|
-
private readonly
|
94
|
-
private readonly
|
95
|
-
private readonly tokenEndpoint;
|
96
|
-
private readonly vectorEndpoint;
|
97
|
-
private readonly controlEndpointOverridden;
|
98
|
-
private readonly cacheEndpointOverridden;
|
99
|
-
private readonly tokenEndpointOverridden;
|
100
|
-
private readonly vectorEndpointOverridden;
|
74
|
+
private readonly apiKey;
|
75
|
+
private readonly allEndpoints;
|
76
|
+
private readonly endpointsOverridden;
|
101
77
|
/**
|
102
78
|
* @param {StringMomentoTokenProviderProps} props configuration options for the token provider
|
103
79
|
*/
|
@@ -107,10 +83,7 @@ export declare class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
107
83
|
getControlEndpoint(): string;
|
108
84
|
getTokenEndpoint(): string;
|
109
85
|
getVectorEndpoint(): string;
|
110
|
-
|
111
|
-
isCacheEndpointOverridden(): boolean;
|
112
|
-
isTokenEndpointOverridden(): boolean;
|
113
|
-
isVectorEndpointOverridden(): boolean;
|
86
|
+
areEndpointsOverridden(): boolean;
|
114
87
|
}
|
115
88
|
export interface EnvMomentoTokenProviderProps extends CredentialProviderProps {
|
116
89
|
/**
|
@@ -2,6 +2,16 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.EnvMomentoTokenProvider = exports.StringMomentoTokenProvider = exports.CredentialProvider = void 0;
|
4
4
|
const utils_1 = require("../internal/utils");
|
5
|
+
function isBaseEndpointOverride(endpointOverrides) {
|
6
|
+
return endpointOverrides.baseEndpoint !== undefined;
|
7
|
+
}
|
8
|
+
function isAllEndpoints(endpointOverrides) {
|
9
|
+
const allEndpoints = endpointOverrides;
|
10
|
+
return (allEndpoints.cacheEndpoint !== undefined &&
|
11
|
+
allEndpoints.controlEndpoint !== undefined &&
|
12
|
+
allEndpoints.tokenEndpoint !== undefined &&
|
13
|
+
allEndpoints.vectorEndpoint !== undefined);
|
14
|
+
}
|
5
15
|
/**
|
6
16
|
* Provides information that the CacheClient needs in order to establish a connection to and authenticate with
|
7
17
|
* the Momento service.
|
@@ -35,61 +45,71 @@ class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
35
45
|
* @param {StringMomentoTokenProviderProps} props configuration options for the token provider
|
36
46
|
*/
|
37
47
|
constructor(props) {
|
38
|
-
var _a, _b, _c, _d;
|
39
48
|
super();
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
if (
|
45
|
-
|
49
|
+
let key;
|
50
|
+
if ('authToken' in props) {
|
51
|
+
key = props.authToken;
|
52
|
+
}
|
53
|
+
else if ('apiKey' in props) {
|
54
|
+
key = props.apiKey;
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
throw new Error('Missing required property: authToken or apiKey');
|
46
58
|
}
|
47
|
-
|
48
|
-
|
49
|
-
if (
|
50
|
-
|
59
|
+
const decodedToken = (0, utils_1.decodeAuthToken)(key);
|
60
|
+
this.apiKey = decodedToken.authToken;
|
61
|
+
if (props.endpointOverrides === undefined) {
|
62
|
+
this.endpointsOverridden = false;
|
63
|
+
if (decodedToken.controlEndpoint === undefined) {
|
64
|
+
throw new Error('Malformed token; unable to determine control endpoint. Depending on the type of token you are using, you may need to specify the controlEndpoint explicitly.');
|
65
|
+
}
|
66
|
+
if (decodedToken.cacheEndpoint === undefined) {
|
67
|
+
throw new Error('Malformed token; unable to determine cache endpoint. Depending on the type of token you are using, you may need to specify the cacheEndpoint explicitly.');
|
68
|
+
}
|
69
|
+
if (decodedToken.tokenEndpoint === undefined) {
|
70
|
+
throw new Error('Malformed token; unable to determine token endpoint. Depending on the type of token you are using, you may need to specify the tokenEndpoint explicitly.');
|
71
|
+
}
|
72
|
+
if (decodedToken.vectorEndpoint === undefined) {
|
73
|
+
throw new Error('Malformed token; unable to determine vector endpoint. Depending on the type of token you are using, you may need to specify the vectorEndpoint explicitly.');
|
74
|
+
}
|
75
|
+
this.allEndpoints = {
|
76
|
+
controlEndpoint: decodedToken.controlEndpoint,
|
77
|
+
cacheEndpoint: decodedToken.cacheEndpoint,
|
78
|
+
tokenEndpoint: decodedToken.tokenEndpoint,
|
79
|
+
vectorEndpoint: decodedToken.vectorEndpoint,
|
80
|
+
};
|
51
81
|
}
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
throw new Error('Malformed token; unable to determine token endpoint. Depending on the type of token you are using, you may need to specify the tokenEndpoint explicitly.');
|
82
|
+
else if (isAllEndpoints(props.endpointOverrides)) {
|
83
|
+
this.endpointsOverridden = true;
|
84
|
+
this.allEndpoints = props.endpointOverrides;
|
56
85
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
86
|
+
else if (isBaseEndpointOverride(props.endpointOverrides)) {
|
87
|
+
this.endpointsOverridden = true;
|
88
|
+
this.allEndpoints = (0, utils_1.populateAllEndpointsFromBaseEndpoint)(props.endpointOverrides.baseEndpoint);
|
89
|
+
}
|
90
|
+
else {
|
91
|
+
throw new Error(
|
92
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
93
|
+
`Unsupported endpointOverrides: ${props.endpointOverrides}`);
|
61
94
|
}
|
62
|
-
this.controlEndpoint = controlEndpoint;
|
63
|
-
this.cacheEndpoint = cacheEndpoint;
|
64
|
-
this.tokenEndpoint = decodedToken.tokenEndpoint || cacheEndpoint;
|
65
|
-
this.vectorEndpoint = vectorEndpoint;
|
66
95
|
}
|
67
96
|
getAuthToken() {
|
68
|
-
return this.
|
97
|
+
return this.apiKey;
|
69
98
|
}
|
70
99
|
getCacheEndpoint() {
|
71
|
-
return this.cacheEndpoint;
|
100
|
+
return this.allEndpoints.cacheEndpoint;
|
72
101
|
}
|
73
102
|
getControlEndpoint() {
|
74
|
-
return this.controlEndpoint;
|
103
|
+
return this.allEndpoints.controlEndpoint;
|
75
104
|
}
|
76
105
|
getTokenEndpoint() {
|
77
|
-
return this.tokenEndpoint;
|
106
|
+
return this.allEndpoints.tokenEndpoint;
|
78
107
|
}
|
79
108
|
getVectorEndpoint() {
|
80
|
-
return this.vectorEndpoint;
|
81
|
-
}
|
82
|
-
isControlEndpointOverridden() {
|
83
|
-
return this.controlEndpointOverridden;
|
84
|
-
}
|
85
|
-
isCacheEndpointOverridden() {
|
86
|
-
return this.cacheEndpointOverridden;
|
87
|
-
}
|
88
|
-
isTokenEndpointOverridden() {
|
89
|
-
return this.tokenEndpointOverridden;
|
109
|
+
return this.allEndpoints.vectorEndpoint;
|
90
110
|
}
|
91
|
-
|
92
|
-
return this.
|
111
|
+
areEndpointsOverridden() {
|
112
|
+
return this.endpointsOverridden;
|
93
113
|
}
|
94
114
|
}
|
95
115
|
exports.StringMomentoTokenProvider = StringMomentoTokenProvider;
|
@@ -109,13 +129,10 @@ class EnvMomentoTokenProvider extends StringMomentoTokenProvider {
|
|
109
129
|
}
|
110
130
|
super({
|
111
131
|
authToken: authToken,
|
112
|
-
|
113
|
-
cacheEndpoint: props.cacheEndpoint,
|
114
|
-
tokenEndpoint: props.tokenEndpoint,
|
115
|
-
vectorEndpoint: props.vectorEndpoint,
|
132
|
+
endpointOverrides: props.endpointOverrides,
|
116
133
|
});
|
117
134
|
this.environmentVariableName = props.environmentVariableName;
|
118
135
|
}
|
119
136
|
}
|
120
137
|
exports.EnvMomentoTokenProvider = EnvMomentoTokenProvider;
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBd0IvRDs7Ozs7R0FLRztBQUNILE1BQXNCLGtCQUFrQjtJQThDdEMsTUFBTSxDQUFDLHVCQUF1QixDQUM1QixLQUFtQztRQUVuQyxPQUFPLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2YsS0FBc0M7UUFFdEMsT0FBTyxJQUFJLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQXpERCxnREF5REM7QUFFRCxNQUFlLHNCQUFzQjtJQWdCbkMsT0FBTztRQUNMLDZEQUE2RDtRQUM3RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQztRQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFBLG1CQUFXLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBVUQ7Ozs7R0FJRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsc0JBQXNCO0lBV3BFOztPQUVHO0lBQ0gsWUFBWSxLQUFzQzs7UUFDaEQsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLFlBQVksR0FBRyxJQUFBLHVCQUFlLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUN4QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLGVBQWUsS0FBSyxT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LENBQUMsYUFBYTtZQUNsQyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7U0FDckMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUFyQkQsMERBcUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWNvZGVBdXRoVG9rZW4sIGZyb21FbnRyaWVzfSBmcm9tICcuLi9pbnRlcm5hbC91dGlscyc7XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGFyZ3VtZW50cyBmb3IgaW5zdGFudGlhdGluZyBhbiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclxuICovXG5pbnRlcmZhY2UgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogb3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGRlZmF1bHQgY29udHJvbEVuZHBvaW50XG4gICAqL1xuICBjb250cm9sRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBvcHRpb25hbGx5IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBjYWNoZUVuZHBvaW50XG4gICAqL1xuICBjYWNoZUVuZHBvaW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogb3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGRlZmF1bHQgdmVjdG9yRW5kcG9pbnRcbiAgICovXG4gIHRva2VuRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBvcHRpb25hbGx5IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCB2ZWN0b3JFbmRwb2ludFxuICAgKi9cbiAgdmVjdG9yRW5kcG9pbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCB0aGUgQ2FjaGVDbGllbnQgbmVlZHMgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhbmQgYXV0aGVudGljYXRlIHdpdGhcbiAqIHRoZSBNb21lbnRvIHNlcnZpY2UuXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEF1dGggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciwgcmVxdWlyZWQgdG8gYXV0aGVudGljYXRlIHdpdGggdGhlIHNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IGdldEF1dGhUb2tlbigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gY29udHJvbCBwbGFuZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIGRhdGEgcGxhbmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gdG9rZW4gb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gdmVjdG9yIGluZGV4IG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldFZlY3RvckVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNhY2hlIGVuZHBvaW50IHdhcyBtYW51YWxseSBvdmVycmlkZGVuIGF0IGNvbnN0cnVjdGlvbiB0aW1lOyBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludE92ZXJyaWRkZW4oKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbnRyb2wgZW5kcG9pbnQgd2FzIG1hbnVhbGx5IG92ZXJyaWRkZW4gYXQgY29uc3RydWN0aW9uIHRpbWU7IGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0b2tlbiBlbmRwb2ludCB3YXMgbWFudWFsbHkgb3ZlcnJpZGRlbiBhdCBjb25zdHJ1Y3Rpb24gdGltZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB2ZWN0b3IgZW5kcG9pbnQgd2FzIG1hbnVhbGx5IG92ZXJyaWRkZW4gYXQgY29uc3RydWN0aW9uIHRpbWU7IGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYWJzdHJhY3QgaXNWZWN0b3JFbmRwb2ludE92ZXJyaWRkZW4oKTogYm9vbGVhbjtcblxuICBzdGF0aWMgZnJvbUVudmlyb25tZW50VmFyaWFibGUoXG4gICAgcHJvcHM6IEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHNcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IEVudk1vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nKFxuICAgIHByb3BzOiBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgQ3JlZGVudGlhbFByb3ZpZGVyQmFzZSBpbXBsZW1lbnRzIENyZWRlbnRpYWxQcm92aWRlciB7XG4gIGFic3RyYWN0IGdldEF1dGhUb2tlbigpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBnZXRWZWN0b3JFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNDYWNoZUVuZHBvaW50T3ZlcnJpZGRlbigpOiBib29sZWFuO1xuICBhYnN0cmFjdCBpc0NvbnRyb2xFbmRwb2ludE92ZXJyaWRkZW4oKTogYm9vbGVhbjtcbiAgYWJzdHJhY3QgaXNUb2tlbkVuZHBvaW50T3ZlcnJpZGRlbigpOiBib29sZWFuO1xuICBhYnN0cmFjdCBpc1ZlY3RvckVuZHBvaW50T3ZlcnJpZGRlbigpOiBib29sZWFuO1xuXG4gIHZhbHVlT2YoKTogb2JqZWN0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnYXV0aFRva2VuJyk7XG4gICAgY29uc3QgY2xvbmUgPSBmcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xvbmUudmFsdWVPZigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wc1xuICBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIGF1dGhUb2tlbiB0aGUgbW9tZW50byBhdXRoIHRva2VuXG4gICAqL1xuICBhdXRoVG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGEgbW9tZW50byBhdXRoIHRva2VuIHN0b3JlZCBpbiBhIFN0cmluZ1xuICogQGV4cG9ydFxuICogQGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlciBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlckJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhUb2tlbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xFbmRwb2ludDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlRW5kcG9pbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVjdG9yRW5kcG9pbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sRW5kcG9pbnRPdmVycmlkZGVuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlRW5kcG9pbnRPdmVycmlkZGVuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuRW5kcG9pbnRPdmVycmlkZGVuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHZlY3RvckVuZHBvaW50T3ZlcnJpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGRlY29kZUF1dGhUb2tlbihwcm9wcy5hdXRoVG9rZW4pO1xuICAgIHRoaXMuYXV0aFRva2VuID0gZGVjb2RlZFRva2VuLmF1dGhUb2tlbjtcbiAgICB0aGlzLmNvbnRyb2xFbmRwb2ludE92ZXJyaWRkZW4gPSBwcm9wcy5jb250cm9sRW5kcG9pbnQgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb250cm9sRW5kcG9pbnQgPVxuICAgICAgcHJvcHMuY29udHJvbEVuZHBvaW50ID8/IGRlY29kZWRUb2tlbi5jb250cm9sRW5kcG9pbnQ7XG4gICAgaWYgKGNvbnRyb2xFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY29udHJvbCBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udHJvbEVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jYWNoZUVuZHBvaW50T3ZlcnJpZGRlbiA9IHByb3BzLmNhY2hlRW5kcG9pbnQgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjYWNoZUVuZHBvaW50ID0gcHJvcHMuY2FjaGVFbmRwb2ludCA/PyBkZWNvZGVkVG9rZW4uY2FjaGVFbmRwb2ludDtcbiAgICBpZiAoY2FjaGVFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY2FjaGUgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNhY2hlRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudG9rZW5FbmRwb2ludE92ZXJyaWRkZW4gPSBwcm9wcy50b2tlbkVuZHBvaW50ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgdG9rZW5FbmRwb2ludCA9IHByb3BzLnRva2VuRW5kcG9pbnQgPz8gZGVjb2RlZFRva2VuLnRva2VuRW5kcG9pbnQ7XG4gICAgaWYgKHRva2VuRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIHRva2VuIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSB0b2tlbkVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnZlY3RvckVuZHBvaW50T3ZlcnJpZGRlbiA9IHByb3BzLnZlY3RvckVuZHBvaW50ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmVjdG9yRW5kcG9pbnQgPSBwcm9wcy52ZWN0b3JFbmRwb2ludCA/PyBkZWNvZGVkVG9rZW4udmVjdG9yRW5kcG9pbnQ7XG4gICAgaWYgKHZlY3RvckVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSB2ZWN0b3IgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIHZlY3RvckVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRyb2xFbmRwb2ludCA9IGNvbnRyb2xFbmRwb2ludDtcbiAgICB0aGlzLmNhY2hlRW5kcG9pbnQgPSBjYWNoZUVuZHBvaW50O1xuICAgIHRoaXMudG9rZW5FbmRwb2ludCA9IGRlY29kZWRUb2tlbi50b2tlbkVuZHBvaW50IHx8IGNhY2hlRW5kcG9pbnQ7XG4gICAgdGhpcy52ZWN0b3JFbmRwb2ludCA9IHZlY3RvckVuZHBvaW50O1xuICB9XG5cbiAgZ2V0QXV0aFRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFRva2VuO1xuICB9XG5cbiAgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhY2hlRW5kcG9pbnQ7XG4gIH1cblxuICBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sRW5kcG9pbnQ7XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGdldFZlY3RvckVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmVjdG9yRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NvbnRyb2xFbmRwb2ludE92ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbEVuZHBvaW50T3ZlcnJpZGRlbjtcbiAgfVxuXG4gIGlzQ2FjaGVFbmRwb2ludE92ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVFbmRwb2ludE92ZXJyaWRkZW47XG4gIH1cblxuICBpc1Rva2VuRW5kcG9pbnRPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRva2VuRW5kcG9pbnRPdmVycmlkZGVuO1xuICB9XG5cbiAgaXNWZWN0b3JFbmRwb2ludE92ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmVjdG9yRW5kcG9pbnRPdmVycmlkZGVuO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmcm9tIHdoaWNoIHRoZSBhdXRoIHRva2VuIHdpbGwgYmUgcmVhZFxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGEgbW9tZW50byBhdXRoIHRva2VuIHN0b3JlZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclxuICovXG5leHBvcnQgY2xhc3MgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlciB7XG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcykge1xuICAgIGNvbnN0IGF1dGhUb2tlbiA9IHByb2Nlc3MuZW52W3Byb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lXTtcbiAgICBpZiAoIWF1dGhUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAke3Byb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHN1cGVyKHtcbiAgICAgIGF1dGhUb2tlbjogYXV0aFRva2VuLFxuICAgICAgY29udHJvbEVuZHBvaW50OiBwcm9wcy5jb250cm9sRW5kcG9pbnQsXG4gICAgICBjYWNoZUVuZHBvaW50OiBwcm9wcy5jYWNoZUVuZHBvaW50LFxuICAgICAgdG9rZW5FbmRwb2ludDogcHJvcHMudG9rZW5FbmRwb2ludCxcbiAgICAgIHZlY3RvckVuZHBvaW50OiBwcm9wcy52ZWN0b3JFbmRwb2ludCxcbiAgICB9KTtcbiAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGVOYW1lID0gcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU7XG4gIH1cbn1cbiJdfQ==
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSzJCO0FBUTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTO1FBQ3hDLFlBQVksQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQVNEOzs7OztHQUtHO0FBQ0gsTUFBc0Isa0JBQWtCO0lBK0J0QyxNQUFNLENBQUMsdUJBQXVCLENBQzVCLEtBQW1DO1FBRW5DLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUFzQztRQUV0QyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBMUNELGdEQTBDQztBQUVELE1BQWUsc0JBQXNCO0lBYW5DLE9BQU87UUFDTCw2REFBNkQ7UUFDN0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FB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LE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQXZGRCxnRUF1RkM7QUFTRDs7OztHQUlHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSwwQkFBMEI7SUFFckU7O09BRUc7SUFDSCxZQUFZLEtBQW1DO1FBQzdDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IseUNBQXlDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUN6RSxDQUFDO1NBQ0g7UUFDRCxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsU0FBUztZQUNwQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1NBQzNDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBbEJELDBEQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFsbEVuZHBvaW50cyxcbiAgZGVjb2RlQXV0aFRva2VuLFxuICBmcm9tRW50cmllcyxcbiAgcG9wdWxhdGVBbGxFbmRwb2ludHNGcm9tQmFzZUVuZHBvaW50LFxufSBmcm9tICcuLi9pbnRlcm5hbC91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVuZHBvaW50T3ZlcnJpZGUge1xuICBiYXNlRW5kcG9pbnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRW5kcG9pbnRPdmVycmlkZXMgPSBCYXNlRW5kcG9pbnRPdmVycmlkZSB8IEFsbEVuZHBvaW50cztcblxuZnVuY3Rpb24gaXNCYXNlRW5kcG9pbnRPdmVycmlkZShcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBCYXNlRW5kcG9pbnRPdmVycmlkZSB7XG4gIHJldHVybiAoZW5kcG9pbnRPdmVycmlkZXMgYXMgQmFzZUVuZHBvaW50T3ZlcnJpZGUpLmJhc2VFbmRwb2ludCAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FsbEVuZHBvaW50cyhcbiAgZW5kcG9pbnRPdmVycmlkZXM6IEVuZHBvaW50T3ZlcnJpZGVzXG4pOiBlbmRwb2ludE92ZXJyaWRlcyBpcyBBbGxFbmRwb2ludHMge1xuICBjb25zdCBhbGxFbmRwb2ludHMgPSBlbmRwb2ludE92ZXJyaWRlcyBhcyBBbGxFbmRwb2ludHM7XG4gIHJldHVybiAoXG4gICAgYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGFsbEVuZHBvaW50cy50b2tlbkVuZHBvaW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICBhbGxFbmRwb2ludHMudmVjdG9yRW5kcG9pbnQgIT09IHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhcmd1bWVudHMgZm9yIGluc3RhbnRpYXRpbmcgYW4gRW52TW9tZW50b1Rva2VuUHJvdmlkZXJcbiAqL1xuaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgZW5kcG9pbnRPdmVycmlkZXM/OiBFbmRwb2ludE92ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IHRoZSBDYWNoZUNsaWVudCBuZWVkcyBpbiBvcmRlciB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGFuZCBhdXRoZW50aWNhdGUgd2l0aFxuICogdGhlIE1vbWVudG8gc2VydmljZS5cbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgQ3JlZGVudGlhbFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gQXV0aCB0b2tlbiBwcm92aWRlZCBieSB1c2VyLCByZXF1aXJlZCB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgc2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0QXV0aFRva2VuKCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gZGF0YSBwbGFuZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byB0b2tlbiBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byB2ZWN0b3IgaW5kZXggb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0VmVjdG9yRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZW5kcG9pbnRzIHdlcmUgbWFudWFsbHkgb3ZlcnJpZGRlbiBhdCBjb25zdHJ1Y3Rpb24gdGltZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgc3RhdGljIGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0cmluZyhcbiAgICBwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wc1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgZ2V0VmVjdG9yRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGFyZUVuZHBvaW50c092ZXJyaWRkZW4oKTogYm9vbGVhbjtcblxuICB2YWx1ZU9mKCk6IG9iamVjdCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzKS5maWx0ZXIoKFtrXSkgPT4gayAhPT0gJ2F1dGhUb2tlbicpO1xuICAgIGNvbnN0IGNsb25lID0gZnJvbUVudHJpZXMoZW50cmllcyk7XG4gICAgcmV0dXJuIGNsb25lLnZhbHVlT2YoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogYXBpS2V5IHRoZSBtb21lbnRvIEFQSSBrZXlcbiAgICovXG4gIGFwaUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ01vbWVudG9BdXRoVG9rZW5Qcm92aWRlclByb3BzXG4gIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogYXV0aFRva2VuIHRoZSBtb21lbnRvIGF1dGggdG9rZW5cbiAgICovXG4gIGF1dGhUb2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzID1cbiAgfCBTdHJpbmdNb21lbnRvQXBpS2V5UHJvdmlkZXJQcm9wc1xuICB8IFN0cmluZ01vbWVudG9BdXRoVG9rZW5Qcm92aWRlclByb3BzO1xuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgYSBtb21lbnRvIGF1dGggdG9rZW4gc3RvcmVkIGluIGEgU3RyaW5nXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsRW5kcG9pbnRzOiBBbGxFbmRwb2ludHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzT3ZlcnJpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcigpO1xuICAgIGxldCBrZXk6IHN0cmluZztcbiAgICBpZiAoJ2F1dGhUb2tlbicgaW4gcHJvcHMpIHtcbiAgICAgIGtleSA9IHByb3BzLmF1dGhUb2tlbjtcbiAgICB9IGVsc2UgaWYgKCdhcGlLZXknIGluIHByb3BzKSB7XG4gICAgICBrZXkgPSBwcm9wcy5hcGlLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogYXV0aFRva2VuIG9yIGFwaUtleScpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBkZWNvZGVBdXRoVG9rZW4oa2V5KTtcbiAgICB0aGlzLmFwaUtleSA9IGRlY29kZWRUb2tlbi5hdXRoVG9rZW47XG4gICAgaWYgKHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgaWYgKGRlY29kZWRUb2tlbi5jb250cm9sRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSBjb250cm9sIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250cm9sRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLmNhY2hlRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSBjYWNoZSBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgY2FjaGVFbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVkVG9rZW4udG9rZW5FbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIHRva2VuIGVuZHBvaW50LiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRva2VuIHlvdSBhcmUgdXNpbmcsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSB0b2tlbkVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZWRUb2tlbi52ZWN0b3JFbmRwb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWFsZm9ybWVkIHRva2VuOyB1bmFibGUgdG8gZGV0ZXJtaW5lIHZlY3RvciBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgdmVjdG9yRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgICAgY29udHJvbEVuZHBvaW50OiBkZWNvZGVkVG9rZW4uY29udHJvbEVuZHBvaW50LFxuICAgICAgICBjYWNoZUVuZHBvaW50OiBkZWNvZGVkVG9rZW4uY2FjaGVFbmRwb2ludCxcbiAgICAgICAgdG9rZW5FbmRwb2ludDogZGVjb2RlZFRva2VuLnRva2VuRW5kcG9pbnQsXG4gICAgICAgIHZlY3RvckVuZHBvaW50OiBkZWNvZGVkVG9rZW4udmVjdG9yRW5kcG9pbnQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNBbGxFbmRwb2ludHMocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcztcbiAgICB9IGVsc2UgaWYgKGlzQmFzZUVuZHBvaW50T3ZlcnJpZGUocHJvcHMuZW5kcG9pbnRPdmVycmlkZXMpKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSB0cnVlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSBwb3B1bGF0ZUFsbEVuZHBvaW50c0Zyb21CYXNlRW5kcG9pbnQoXG4gICAgICAgIHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzLmJhc2VFbmRwb2ludFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgIGBVbnN1cHBvcnRlZCBlbmRwb2ludE92ZXJyaWRlczogJHtwcm9wcy5lbmRwb2ludE92ZXJyaWRlc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEF1dGhUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludDtcbiAgfVxuXG4gIGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQ7XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQ7XG4gIH1cblxuICBnZXRWZWN0b3JFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy52ZWN0b3JFbmRwb2ludDtcbiAgfVxuXG4gIGFyZUVuZHBvaW50c092ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSB3aGljaCB0aGUgYXV0aCB0b2tlbiB3aWxsIGJlIHJlYWRcbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBhIG1vbWVudG8gYXV0aCB0b2tlbiBzdG9yZWQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgRW52TW9tZW50b1Rva2VuUHJvdmlkZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyIGV4dGVuZHMgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIge1xuICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQHBhcmFtIHtFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMpIHtcbiAgICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudltwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZV07XG4gICAgaWYgKCFhdXRoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgJHtwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlcih7XG4gICAgICBhdXRoVG9rZW46IGF1dGhUb2tlbixcbiAgICAgIGVuZHBvaW50T3ZlcnJpZGVzOiBwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyxcbiAgICB9KTtcbiAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGVOYW1lID0gcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { AllCacheItems, CachePermission, Permission, Permissions, PredefinedScope } from './permission-scope';
|
2
|
+
export interface CacheItemKey {
|
3
|
+
key: string;
|
4
|
+
}
|
5
|
+
export interface CacheItemKeyPrefix {
|
6
|
+
keyPrefix: string;
|
7
|
+
}
|
8
|
+
export declare function isCacheItemKey(cacheItem: CacheItemSelector): cacheItem is CacheItemKey;
|
9
|
+
export declare function isCacheItemKeyPrefix(cacheItem: CacheItemSelector): cacheItem is CacheItemKeyPrefix;
|
10
|
+
export type CacheItemSelector = typeof AllCacheItems | CacheItemKey | CacheItemKeyPrefix | string;
|
11
|
+
export interface DisposableTokenCachePermission extends CachePermission {
|
12
|
+
/**
|
13
|
+
* Scope the token permissions to select cache items
|
14
|
+
*/
|
15
|
+
item: CacheItemSelector;
|
16
|
+
}
|
17
|
+
export declare function isDisposableTokenCachePermission(p: Permission): boolean;
|
18
|
+
export declare function asDisposableTokenCachePermission(p: Permission): DisposableTokenCachePermission;
|
19
|
+
export interface DisposableTokenCachePermissions {
|
20
|
+
permissions: Array<DisposableTokenCachePermission>;
|
21
|
+
}
|
22
|
+
export type DisposableTokenScope = Permissions | PredefinedScope | DisposableTokenCachePermissions;
|
23
|
+
export declare function isDisposableTokenPermissionsObject(scope: DisposableTokenScope): boolean;
|
24
|
+
export declare function asDisposableTokenPermissionsObject(scope: DisposableTokenScope): DisposableTokenCachePermissions;
|
@@ -0,0 +1,55 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.asDisposableTokenPermissionsObject = exports.isDisposableTokenPermissionsObject = exports.asDisposableTokenCachePermission = exports.isDisposableTokenCachePermission = exports.isCacheItemKeyPrefix = exports.isCacheItemKey = void 0;
|
4
|
+
const permission_scope_1 = require("./permission-scope");
|
5
|
+
function isCacheItemKey(cacheItem) {
|
6
|
+
if (cacheItem === permission_scope_1.AllCacheItems) {
|
7
|
+
return false;
|
8
|
+
}
|
9
|
+
if (typeof cacheItem === 'string') {
|
10
|
+
return true;
|
11
|
+
}
|
12
|
+
return 'key' in cacheItem;
|
13
|
+
}
|
14
|
+
exports.isCacheItemKey = isCacheItemKey;
|
15
|
+
function isCacheItemKeyPrefix(cacheItem) {
|
16
|
+
if (cacheItem === permission_scope_1.AllCacheItems) {
|
17
|
+
return false;
|
18
|
+
}
|
19
|
+
if (typeof cacheItem === 'string') {
|
20
|
+
return false;
|
21
|
+
}
|
22
|
+
return 'keyPrefix' in cacheItem;
|
23
|
+
}
|
24
|
+
exports.isCacheItemKeyPrefix = isCacheItemKeyPrefix;
|
25
|
+
function isDisposableTokenCachePermission(p) {
|
26
|
+
return 'role' in p && 'cache' in p && 'item' in p && !('topic' in p);
|
27
|
+
}
|
28
|
+
exports.isDisposableTokenCachePermission = isDisposableTokenCachePermission;
|
29
|
+
function asDisposableTokenCachePermission(p) {
|
30
|
+
if (!isDisposableTokenCachePermission(p)) {
|
31
|
+
throw new Error(`permission is not a DisposableTokenCachePermission object: ${JSON.stringify(p)}`);
|
32
|
+
}
|
33
|
+
return p;
|
34
|
+
}
|
35
|
+
exports.asDisposableTokenCachePermission = asDisposableTokenCachePermission;
|
36
|
+
function isDisposableTokenPermissionObject(p) {
|
37
|
+
return isDisposableTokenCachePermission(p);
|
38
|
+
}
|
39
|
+
function isDisposableTokenPermissionsObject(scope) {
|
40
|
+
if (!('permissions' in scope)) {
|
41
|
+
return false;
|
42
|
+
}
|
43
|
+
const permissions = scope.permissions;
|
44
|
+
return permissions.every(p => isDisposableTokenPermissionObject(p));
|
45
|
+
}
|
46
|
+
exports.isDisposableTokenPermissionsObject = isDisposableTokenPermissionsObject;
|
47
|
+
function asDisposableTokenPermissionsObject(scope) {
|
48
|
+
console.log(`AS_DISPOSABLE_TOKEN_PERMISSIONS_OBJECT: ${JSON.stringify(scope)}`);
|
49
|
+
if (!isDisposableTokenPermissionsObject(scope)) {
|
50
|
+
throw new Error(`Token scope is not a DisposableTokenCachePermissions object: ${JSON.stringify(scope)}`);
|
51
|
+
}
|
52
|
+
return scope;
|
53
|
+
}
|
54
|
+
exports.asDisposableTokenPermissionsObject = asDisposableTokenPermissionsObject;
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcG9zYWJsZS10b2tlbi1zY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL3Rva2Vucy9kaXNwb3NhYmxlLXRva2VuLXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQU00QjtBQVU1QixTQUFnQixjQUFjLENBQzVCLFNBQTRCO0lBRTVCLElBQUksU0FBUyxLQUFLLGdDQUFhLEVBQUU7UUFDL0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxPQUFPLEtBQUssSUFBSSxTQUFTLENBQUM7QUFDNUIsQ0FBQztBQVZELHdDQVVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLFNBQTRCO0lBRTVCLElBQUksU0FBUyxLQUFLLGdDQUFhLEVBQUU7UUFDL0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFO1FBQ2pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLFdBQVcsSUFBSSxTQUFTLENBQUM7QUFDbEMsQ0FBQztBQVZELG9EQVVDO0FBZUQsU0FBZ0IsZ0NBQWdDLENBQUMsQ0FBYTtJQUM1RCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUZELDRFQUVDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQzlDLENBQWE7SUFFYixJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FDYiw4REFBOEQsSUFBSSxDQUFDLFNBQVMsQ0FDMUUsQ0FBQyxDQUNGLEVBQUUsQ0FDSixDQUFDO0tBQ0g7SUFDRCxPQUFPLENBQW1DLENBQUM7QUFDN0MsQ0FBQztBQVhELDRFQVdDO0FBV0QsU0FBUyxpQ0FBaUMsQ0FBQyxDQUFhO0lBQ3RELE9BQU8sZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQWdCLGtDQUFrQyxDQUNoRCxLQUEyQjtJQUUzQixJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDdEMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBUkQsZ0ZBUUM7QUFFRCxTQUFnQixrQ0FBa0MsQ0FDaEQsS0FBMkI7SUFFM0IsT0FBTyxDQUFDLEdBQUcsQ0FDVCwyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNuRSxDQUFDO0lBQ0YsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLElBQUksQ0FBQyxTQUFTLENBQzVFLEtBQUssQ0FDTixFQUFFLENBQ0osQ0FBQztLQUNIO0lBQ0QsT0FBTyxLQUF3QyxDQUFDO0FBQ2xELENBQUM7QUFkRCxnRkFjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFsbENhY2hlSXRlbXMsXG4gIENhY2hlUGVybWlzc2lvbixcbiAgUGVybWlzc2lvbixcbiAgUGVybWlzc2lvbnMsXG4gIFByZWRlZmluZWRTY29wZSxcbn0gZnJvbSAnLi9wZXJtaXNzaW9uLXNjb3BlJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUl0ZW1LZXkge1xuICBrZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUl0ZW1LZXlQcmVmaXgge1xuICBrZXlQcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FjaGVJdGVtS2V5KFxuICBjYWNoZUl0ZW06IENhY2hlSXRlbVNlbGVjdG9yXG4pOiBjYWNoZUl0ZW0gaXMgQ2FjaGVJdGVtS2V5IHtcbiAgaWYgKGNhY2hlSXRlbSA9PT0gQWxsQ2FjaGVJdGVtcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGNhY2hlSXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gJ2tleScgaW4gY2FjaGVJdGVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZUl0ZW1LZXlQcmVmaXgoXG4gIGNhY2hlSXRlbTogQ2FjaGVJdGVtU2VsZWN0b3Jcbik6IGNhY2hlSXRlbSBpcyBDYWNoZUl0ZW1LZXlQcmVmaXgge1xuICBpZiAoY2FjaGVJdGVtID09PSBBbGxDYWNoZUl0ZW1zKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgY2FjaGVJdGVtID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gJ2tleVByZWZpeCcgaW4gY2FjaGVJdGVtO1xufVxuXG5leHBvcnQgdHlwZSBDYWNoZUl0ZW1TZWxlY3RvciA9XG4gIHwgdHlwZW9mIEFsbENhY2hlSXRlbXNcbiAgfCBDYWNoZUl0ZW1LZXlcbiAgfCBDYWNoZUl0ZW1LZXlQcmVmaXhcbiAgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZVRva2VuQ2FjaGVQZXJtaXNzaW9uIGV4dGVuZHMgQ2FjaGVQZXJtaXNzaW9uIHtcbiAgLyoqXG4gICAqIFNjb3BlIHRoZSB0b2tlbiBwZXJtaXNzaW9ucyB0byBzZWxlY3QgY2FjaGUgaXRlbXNcbiAgICovXG4gIGl0ZW06IENhY2hlSXRlbVNlbGVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb24ocDogUGVybWlzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gJ3JvbGUnIGluIHAgJiYgJ2NhY2hlJyBpbiBwICYmICdpdGVtJyBpbiBwICYmICEoJ3RvcGljJyBpbiBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzRGlzcG9zYWJsZVRva2VuQ2FjaGVQZXJtaXNzaW9uKFxuICBwOiBQZXJtaXNzaW9uXG4pOiBEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb24ge1xuICBpZiAoIWlzRGlzcG9zYWJsZVRva2VuQ2FjaGVQZXJtaXNzaW9uKHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHBlcm1pc3Npb24gaXMgbm90IGEgRGlzcG9zYWJsZVRva2VuQ2FjaGVQZXJtaXNzaW9uIG9iamVjdDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcFxuICAgICAgKX1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcCBhcyBEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZVRva2VuQ2FjaGVQZXJtaXNzaW9ucyB7XG4gIHBlcm1pc3Npb25zOiBBcnJheTxEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb24+O1xufVxuXG5leHBvcnQgdHlwZSBEaXNwb3NhYmxlVG9rZW5TY29wZSA9XG4gIHwgUGVybWlzc2lvbnNcbiAgfCBQcmVkZWZpbmVkU2NvcGVcbiAgfCBEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb25zO1xuXG5mdW5jdGlvbiBpc0Rpc3Bvc2FibGVUb2tlblBlcm1pc3Npb25PYmplY3QocDogUGVybWlzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb24ocCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVUb2tlblBlcm1pc3Npb25zT2JqZWN0KFxuICBzY29wZTogRGlzcG9zYWJsZVRva2VuU2NvcGVcbik6IGJvb2xlYW4ge1xuICBpZiAoISgncGVybWlzc2lvbnMnIGluIHNjb3BlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwZXJtaXNzaW9ucyA9IHNjb3BlLnBlcm1pc3Npb25zO1xuICByZXR1cm4gcGVybWlzc2lvbnMuZXZlcnkocCA9PiBpc0Rpc3Bvc2FibGVUb2tlblBlcm1pc3Npb25PYmplY3QocCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNEaXNwb3NhYmxlVG9rZW5QZXJtaXNzaW9uc09iamVjdChcbiAgc2NvcGU6IERpc3Bvc2FibGVUb2tlblNjb3BlXG4pOiBEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb25zIHtcbiAgY29uc29sZS5sb2coXG4gICAgYEFTX0RJU1BPU0FCTEVfVE9LRU5fUEVSTUlTU0lPTlNfT0JKRUNUOiAke0pTT04uc3RyaW5naWZ5KHNjb3BlKX1gXG4gICk7XG4gIGlmICghaXNEaXNwb3NhYmxlVG9rZW5QZXJtaXNzaW9uc09iamVjdChzY29wZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVG9rZW4gc2NvcGUgaXMgbm90IGEgRGlzcG9zYWJsZVRva2VuQ2FjaGVQZXJtaXNzaW9ucyBvYmplY3Q6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHNjb3BlXG4gICAgICApfWBcbiAgICApO1xuICB9XG4gIHJldHVybiBzY29wZSBhcyBEaXNwb3NhYmxlVG9rZW5DYWNoZVBlcm1pc3Npb25zO1xufVxuIl19
|
@@ -1,5 +1,6 @@
|
|
1
|
-
import { CacheSelector
|
2
|
-
|
1
|
+
import { CacheSelector } from './permission-scope';
|
2
|
+
import { DisposableTokenScope } from './disposable-token-scope';
|
3
|
+
export * from './permission-scopes';
|
3
4
|
export declare function cacheKeyReadWrite(cacheSelector: CacheSelector, key: string): DisposableTokenScope;
|
4
5
|
export declare function cacheKeyPrefixReadWrite(cacheSelector: CacheSelector, keyPrefix: string): DisposableTokenScope;
|
5
6
|
export declare function cacheKeyReadOnly(cacheSelector: CacheSelector, key: string): DisposableTokenScope;
|
@@ -15,11 +15,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
exports.cacheKeyPrefixWriteOnly = exports.cacheKeyWriteOnly = exports.cacheKeyPrefixReadOnly = exports.cacheKeyReadOnly = exports.cacheKeyPrefixReadWrite = exports.cacheKeyReadWrite = void 0;
|
18
|
-
const
|
19
|
-
__exportStar(require("./
|
18
|
+
const permission_scope_1 = require("./permission-scope");
|
19
|
+
__exportStar(require("./permission-scopes"), exports);
|
20
20
|
function cacheKeyReadWrite(cacheSelector, key) {
|
21
21
|
return {
|
22
|
-
permissions: [{ role:
|
22
|
+
permissions: [{ role: permission_scope_1.CacheRole.ReadWrite, cache: cacheSelector, item: key }],
|
23
23
|
};
|
24
24
|
}
|
25
25
|
exports.cacheKeyReadWrite = cacheKeyReadWrite;
|
@@ -27,7 +27,7 @@ function cacheKeyPrefixReadWrite(cacheSelector, keyPrefix) {
|
|
27
27
|
return {
|
28
28
|
permissions: [
|
29
29
|
{
|
30
|
-
role:
|
30
|
+
role: permission_scope_1.CacheRole.ReadWrite,
|
31
31
|
cache: cacheSelector,
|
32
32
|
item: { keyPrefix: keyPrefix },
|
33
33
|
},
|
@@ -37,7 +37,7 @@ function cacheKeyPrefixReadWrite(cacheSelector, keyPrefix) {
|
|
37
37
|
exports.cacheKeyPrefixReadWrite = cacheKeyPrefixReadWrite;
|
38
38
|
function cacheKeyReadOnly(cacheSelector, key) {
|
39
39
|
return {
|
40
|
-
permissions: [{ role:
|
40
|
+
permissions: [{ role: permission_scope_1.CacheRole.ReadOnly, cache: cacheSelector, item: key }],
|
41
41
|
};
|
42
42
|
}
|
43
43
|
exports.cacheKeyReadOnly = cacheKeyReadOnly;
|
@@ -45,7 +45,7 @@ function cacheKeyPrefixReadOnly(cacheSelector, keyPrefix) {
|
|
45
45
|
return {
|
46
46
|
permissions: [
|
47
47
|
{
|
48
|
-
role:
|
48
|
+
role: permission_scope_1.CacheRole.ReadOnly,
|
49
49
|
cache: cacheSelector,
|
50
50
|
item: { keyPrefix: keyPrefix },
|
51
51
|
},
|
@@ -55,7 +55,7 @@ function cacheKeyPrefixReadOnly(cacheSelector, keyPrefix) {
|
|
55
55
|
exports.cacheKeyPrefixReadOnly = cacheKeyPrefixReadOnly;
|
56
56
|
function cacheKeyWriteOnly(cacheSelector, key) {
|
57
57
|
return {
|
58
|
-
permissions: [{ role:
|
58
|
+
permissions: [{ role: permission_scope_1.CacheRole.WriteOnly, cache: cacheSelector, item: key }],
|
59
59
|
};
|
60
60
|
}
|
61
61
|
exports.cacheKeyWriteOnly = cacheKeyWriteOnly;
|
@@ -63,7 +63,7 @@ function cacheKeyPrefixWriteOnly(cacheSelector, keyPrefix) {
|
|
63
63
|
return {
|
64
64
|
permissions: [
|
65
65
|
{
|
66
|
-
role:
|
66
|
+
role: permission_scope_1.CacheRole.WriteOnly,
|
67
67
|
cache: cacheSelector,
|
68
68
|
item: { keyPrefix: keyPrefix },
|
69
69
|
},
|
@@ -71,4 +71,4 @@ function cacheKeyPrefixWriteOnly(cacheSelector, keyPrefix) {
|
|
71
71
|
};
|
72
72
|
}
|
73
73
|
exports.cacheKeyPrefixWriteOnly = cacheKeyPrefixWriteOnly;
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcG9zYWJsZS10b2tlbi1zY29wZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC90b2tlbnMvZGlzcG9zYWJsZS10b2tlbi1zY29wZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBNEQ7QUFHNUQsc0RBQW9DO0FBRXBDLFNBQWdCLGlCQUFpQixDQUMvQixhQUE0QixFQUM1QixHQUFXO0lBRVgsT0FBTztRQUNMLFdBQVcsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFFLDRCQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxDQUFDO0tBQzVFLENBQUM7QUFDSixDQUFDO0FBUEQsOENBT0M7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsYUFBNEIsRUFDNUIsU0FBaUI7SUFFakIsT0FBTztRQUNMLFdBQVcsRUFBRTtZQUNYO2dCQUNFLElBQUksRUFBRSw0QkFBUyxDQUFDLFNBQVM7Z0JBQ3pCLEtBQUssRUFBRSxhQUFhO2dCQUNwQixJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDO2FBQzdCO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQWJELDBEQWFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLGFBQTRCLEVBQzVCLEdBQVc7SUFFWCxPQUFPO1FBQ0wsV0FBVyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUUsNEJBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLENBQUM7S0FDM0UsQ0FBQztBQUNKLENBQUM7QUFQRCw0Q0FPQztBQUVELFNBQWdCLHNCQUFzQixDQUNwQyxhQUE0QixFQUM1QixTQUFpQjtJQUVqQixPQUFPO1FBQ0wsV0FBVyxFQUFFO1lBQ1g7Z0JBQ0UsSUFBSSxFQUFFLDRCQUFTLENBQUMsUUFBUTtnQkFDeEIsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUM7YUFDN0I7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBYkQsd0RBYUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FDL0IsYUFBNEIsRUFDNUIsR0FBVztJQUVYLE9BQU87UUFDTCxXQUFXLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBRSw0QkFBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsQ0FBQztLQUM1RSxDQUFDO0FBQ0osQ0FBQztBQVBELDhDQU9DO0FBRUQsU0FBZ0IsdUJBQXVCLENBQ3JDLGFBQTRCLEVBQzVCLFNBQWlCO0lBRWpCLE9BQU87UUFDTCxXQUFXLEVBQUU7WUFDWDtnQkFDRSxJQUFJLEVBQUUsNEJBQVMsQ0FBQyxTQUFTO2dCQUN6QixLQUFLLEVBQUUsYUFBYTtnQkFDcEIsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQzthQUM3QjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFiRCwwREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2FjaGVSb2xlLCBDYWNoZVNlbGVjdG9yfSBmcm9tICcuL3Blcm1pc3Npb24tc2NvcGUnO1xuaW1wb3J0IHtEaXNwb3NhYmxlVG9rZW5TY29wZX0gZnJvbSAnLi9kaXNwb3NhYmxlLXRva2VuLXNjb3BlJztcblxuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9uLXNjb3Blcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUtleVJlYWRXcml0ZShcbiAgY2FjaGVTZWxlY3RvcjogQ2FjaGVTZWxlY3RvcixcbiAga2V5OiBzdHJpbmdcbik6IERpc3Bvc2FibGVUb2tlblNjb3BlIHtcbiAgcmV0dXJuIHtcbiAgICBwZXJtaXNzaW9uczogW3tyb2xlOiBDYWNoZVJvbGUuUmVhZFdyaXRlLCBjYWNoZTogY2FjaGVTZWxlY3RvciwgaXRlbToga2V5fV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUtleVByZWZpeFJlYWRXcml0ZShcbiAgY2FjaGVTZWxlY3RvcjogQ2FjaGVTZWxlY3RvcixcbiAga2V5UHJlZml4OiBzdHJpbmdcbik6IERpc3Bvc2FibGVUb2tlblNjb3BlIHtcbiAgcmV0dXJuIHtcbiAgICBwZXJtaXNzaW9uczogW1xuICAgICAge1xuICAgICAgICByb2xlOiBDYWNoZVJvbGUuUmVhZFdyaXRlLFxuICAgICAgICBjYWNoZTogY2FjaGVTZWxlY3RvcixcbiAgICAgICAgaXRlbToge2tleVByZWZpeDoga2V5UHJlZml4fSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlS2V5UmVhZE9ubHkoXG4gIGNhY2hlU2VsZWN0b3I6IENhY2hlU2VsZWN0b3IsXG4gIGtleTogc3RyaW5nXG4pOiBEaXNwb3NhYmxlVG9rZW5TY29wZSB7XG4gIHJldHVybiB7XG4gICAgcGVybWlzc2lvbnM6IFt7cm9sZTogQ2FjaGVSb2xlLlJlYWRPbmx5LCBjYWNoZTogY2FjaGVTZWxlY3RvciwgaXRlbToga2V5fV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUtleVByZWZpeFJlYWRPbmx5KFxuICBjYWNoZVNlbGVjdG9yOiBDYWNoZVNlbGVjdG9yLFxuICBrZXlQcmVmaXg6IHN0cmluZ1xuKTogRGlzcG9zYWJsZVRva2VuU2NvcGUge1xuICByZXR1cm4ge1xuICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICB7XG4gICAgICAgIHJvbGU6IENhY2hlUm9sZS5SZWFkT25seSxcbiAgICAgICAgY2FjaGU6IGNhY2hlU2VsZWN0b3IsXG4gICAgICAgIGl0ZW06IHtrZXlQcmVmaXg6IGtleVByZWZpeH0sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUtleVdyaXRlT25seShcbiAgY2FjaGVTZWxlY3RvcjogQ2FjaGVTZWxlY3RvcixcbiAga2V5OiBzdHJpbmdcbik6IERpc3Bvc2FibGVUb2tlblNjb3BlIHtcbiAgcmV0dXJuIHtcbiAgICBwZXJtaXNzaW9uczogW3tyb2xlOiBDYWNoZVJvbGUuV3JpdGVPbmx5LCBjYWNoZTogY2FjaGVTZWxlY3RvciwgaXRlbToga2V5fV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUtleVByZWZpeFdyaXRlT25seShcbiAgY2FjaGVTZWxlY3RvcjogQ2FjaGVTZWxlY3RvcixcbiAga2V5UHJlZml4OiBzdHJpbmdcbik6IERpc3Bvc2FibGVUb2tlblNjb3BlIHtcbiAgcmV0dXJuIHtcbiAgICBwZXJtaXNzaW9uczogW1xuICAgICAge1xuICAgICAgICByb2xlOiBDYWNoZVJvbGUuV3JpdGVPbmx5LFxuICAgICAgICBjYWNoZTogY2FjaGVTZWxlY3RvcixcbiAgICAgICAgaXRlbToge2tleVByZWZpeDoga2V5UHJlZml4fSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cbiJdfQ==
|
@@ -48,31 +48,12 @@ export interface Permissions {
|
|
48
48
|
permissions: Array<Permission>;
|
49
49
|
}
|
50
50
|
export declare const AllDataReadWrite: Permissions;
|
51
|
-
export declare function isPermissionsObject(scope:
|
52
|
-
export declare function asPermissionsObject(scope:
|
51
|
+
export declare function isPermissionsObject(scope: PermissionScope): boolean;
|
52
|
+
export declare function asPermissionsObject(scope: PermissionScope): Permissions;
|
53
53
|
export declare abstract class PredefinedScope {
|
54
54
|
}
|
55
|
-
export type
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
export
|
60
|
-
keyPrefix: string;
|
61
|
-
}
|
62
|
-
export declare function isCacheItemKey(cacheItem: CacheItemSelector): cacheItem is CacheItemKey;
|
63
|
-
export declare function isCacheItemKeyPrefix(cacheItem: CacheItemSelector): cacheItem is CacheItemKeyPrefix;
|
64
|
-
export type CacheItemSelector = typeof AllCacheItems | CacheItemKey | CacheItemKeyPrefix | string;
|
65
|
-
export interface DisposableTokenCachePermission extends CachePermission {
|
66
|
-
/**
|
67
|
-
* Scope the token permissions to select cache items
|
68
|
-
*/
|
69
|
-
item: CacheItemSelector;
|
70
|
-
}
|
71
|
-
export declare function isDisposableTokenCachePermission(p: Permission): boolean;
|
72
|
-
export declare function asDisposableTokenCachePermission(p: Permission): DisposableTokenCachePermission;
|
73
|
-
export interface DisposableTokenCachePermissions {
|
74
|
-
permissions: Array<DisposableTokenCachePermission>;
|
75
|
-
}
|
76
|
-
export type DisposableTokenScope = Permissions | PredefinedScope | DisposableTokenCachePermissions;
|
77
|
-
export declare function isDisposableTokenPermissionsObject(scope: DisposableTokenScope): boolean;
|
78
|
-
export declare function asDisposableTokenPermissionsObject(scope: DisposableTokenScope): DisposableTokenCachePermissions;
|
55
|
+
export type PermissionScope = typeof AllDataReadWrite | Permissions | PredefinedScope;
|
56
|
+
/**
|
57
|
+
* @deprecated please use PermissionScope instead
|
58
|
+
*/
|
59
|
+
export type TokenScope = PermissionScope;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.PredefinedScope = exports.asPermissionsObject = exports.isPermissionsObject = exports.AllDataReadWrite = exports.asTopicPermission = exports.isTopicPermission = exports.isTopicName = exports.TopicRole = exports.asCachePermission = exports.isCachePermission = exports.isCacheName = exports.AllCacheItems = exports.AllTopics = exports.AllCaches = exports.CacheRole = void 0;
|
4
|
+
var CacheRole;
|
5
|
+
(function (CacheRole) {
|
6
|
+
CacheRole["ReadWrite"] = "readwrite";
|
7
|
+
CacheRole["ReadOnly"] = "readonly";
|
8
|
+
CacheRole["WriteOnly"] = "writeonly";
|
9
|
+
})(CacheRole = exports.CacheRole || (exports.CacheRole = {}));
|
10
|
+
exports.AllCaches = Symbol();
|
11
|
+
exports.AllTopics = Symbol();
|
12
|
+
exports.AllCacheItems = Symbol();
|
13
|
+
function isCacheName(cache) {
|
14
|
+
if (cache === exports.AllCaches) {
|
15
|
+
return false;
|
16
|
+
}
|
17
|
+
return 'name' in cache;
|
18
|
+
}
|
19
|
+
exports.isCacheName = isCacheName;
|
20
|
+
function isCachePermission(p) {
|
21
|
+
return 'role' in p && 'cache' in p && !('topic' in p);
|
22
|
+
}
|
23
|
+
exports.isCachePermission = isCachePermission;
|
24
|
+
function asCachePermission(p) {
|
25
|
+
if (!isCachePermission(p)) {
|
26
|
+
throw new Error(`permission is not a CachePermission object: ${JSON.stringify(p)}`);
|
27
|
+
}
|
28
|
+
return p;
|
29
|
+
}
|
30
|
+
exports.asCachePermission = asCachePermission;
|
31
|
+
var TopicRole;
|
32
|
+
(function (TopicRole) {
|
33
|
+
TopicRole["PublishSubscribe"] = "publishsubscribe";
|
34
|
+
TopicRole["SubscribeOnly"] = "subscribeonly";
|
35
|
+
TopicRole["PublishOnly"] = "publishonly";
|
36
|
+
})(TopicRole = exports.TopicRole || (exports.TopicRole = {}));
|
37
|
+
function isTopicName(topic) {
|
38
|
+
if (topic === exports.AllTopics) {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
return 'name' in topic;
|
42
|
+
}
|
43
|
+
exports.isTopicName = isTopicName;
|
44
|
+
function isTopicPermission(p) {
|
45
|
+
return 'role' in p && 'cache' in p && 'topic' in p;
|
46
|
+
}
|
47
|
+
exports.isTopicPermission = isTopicPermission;
|
48
|
+
function asTopicPermission(p) {
|
49
|
+
if (!isTopicPermission(p)) {
|
50
|
+
throw new Error(`permission is not a TopicPermission object: ${JSON.stringify(p)}`);
|
51
|
+
}
|
52
|
+
return p;
|
53
|
+
}
|
54
|
+
exports.asTopicPermission = asTopicPermission;
|
55
|
+
exports.AllDataReadWrite = {
|
56
|
+
permissions: [
|
57
|
+
{ role: CacheRole.ReadWrite, cache: exports.AllCaches },
|
58
|
+
{ role: TopicRole.PublishSubscribe, cache: exports.AllCaches, topic: exports.AllTopics },
|
59
|
+
],
|
60
|
+
};
|
61
|
+
function isPermissionObject(p) {
|
62
|
+
return isCachePermission(p) || isTopicPermission(p);
|
63
|
+
}
|
64
|
+
function isPermissionsObject(scope) {
|
65
|
+
if (!('permissions' in scope)) {
|
66
|
+
return false;
|
67
|
+
}
|
68
|
+
const permissions = scope.permissions;
|
69
|
+
return permissions.every(p => isPermissionObject(p));
|
70
|
+
}
|
71
|
+
exports.isPermissionsObject = isPermissionsObject;
|
72
|
+
function asPermissionsObject(scope) {
|
73
|
+
if (!isPermissionsObject(scope)) {
|
74
|
+
throw new Error(`Token scope is not a Permissions object: ${JSON.stringify(scope)}`);
|
75
|
+
}
|
76
|
+
return scope;
|
77
|
+
}
|
78
|
+
exports.asPermissionsObject = asPermissionsObject;
|
79
|
+
class PredefinedScope {
|
80
|
+
}
|
81
|
+
exports.PredefinedScope = PredefinedScope;
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1zY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL3Rva2Vucy9wZXJtaXNzaW9uLXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQixvQ0FBdUIsQ0FBQTtJQUN2QixrQ0FBcUIsQ0FBQTtJQUNyQixvQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFJcEI7QUFFWSxRQUFBLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNyQixRQUFBLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNyQixRQUFBLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUt0QyxTQUFnQixXQUFXLENBQ3pCLEtBQW1DO0lBRW5DLElBQUksS0FBSyxLQUFLLGlCQUFTLEVBQUU7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN6QixDQUFDO0FBUEQsa0NBT0M7QUFXRCxTQUFnQixpQkFBaUIsQ0FBQyxDQUFhO0lBQzdDLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUZELDhDQUVDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsQ0FBYTtJQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQ0FBK0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNuRSxDQUFDO0tBQ0g7SUFDRCxPQUFPLENBQW9CLENBQUM7QUFDOUIsQ0FBQztBQVBELDhDQU9DO0FBRUQsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLGtEQUFxQyxDQUFBO0lBQ3JDLDRDQUErQixDQUFBO0lBQy9CLHdDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFKVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUlwQjtBQUtELFNBQWdCLFdBQVcsQ0FDekIsS0FBbUM7SUFFbkMsSUFBSSxLQUFLLEtBQUssaUJBQVMsRUFBRTtRQUN2QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3pCLENBQUM7QUFQRCxrQ0FPQztBQWVELFNBQWdCLGlCQUFpQixDQUFDLENBQWE7SUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRkQsOENBRUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxDQUFhO0lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLCtDQUErQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ25FLENBQUM7S0FDSDtJQUNELE9BQU8sQ0FBb0IsQ0FBQztBQUM5QixDQUFDO0FBUEQsOENBT0M7QUFRWSxRQUFBLGdCQUFnQixHQUFnQjtJQUMzQyxXQUFXLEVBQUU7UUFDWCxFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBUyxFQUFDO1FBQzdDLEVBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsaUJBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQVMsRUFBQztLQUN2RTtDQUNGLENBQUM7QUFFRixTQUFTLGtCQUFrQixDQUFDLENBQWE7SUFDdkMsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBc0I7SUFDeEQsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQU5ELGtEQU1DO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBc0I7SUFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2IsNENBQTRDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDcEUsQ0FBQztLQUNIO0lBQ0QsT0FBTyxLQUFvQixDQUFDO0FBQzlCLENBQUM7QUFQRCxrREFPQztBQUVELE1BQXNCLGVBQWU7Q0FBRztBQUF4QywwQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBDYWNoZVJvbGUge1xuICBSZWFkV3JpdGUgPSAncmVhZHdyaXRlJyxcbiAgUmVhZE9ubHkgPSAncmVhZG9ubHknLFxuICBXcml0ZU9ubHkgPSAnd3JpdGVvbmx5Jyxcbn1cblxuZXhwb3J0IGNvbnN0IEFsbENhY2hlcyA9IFN5bWJvbCgpO1xuZXhwb3J0IGNvbnN0IEFsbFRvcGljcyA9IFN5bWJvbCgpO1xuZXhwb3J0IGNvbnN0IEFsbENhY2hlSXRlbXMgPSBTeW1ib2woKTtcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZU5hbWUge1xuICBuYW1lOiBzdHJpbmc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZU5hbWUoXG4gIGNhY2hlOiBDYWNoZU5hbWUgfCB0eXBlb2YgQWxsQ2FjaGVzXG4pOiBjYWNoZSBpcyBDYWNoZU5hbWUge1xuICBpZiAoY2FjaGUgPT09IEFsbENhY2hlcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gJ25hbWUnIGluIGNhY2hlO1xufVxuZXhwb3J0IHR5cGUgQ2FjaGVTZWxlY3RvciA9IHR5cGVvZiBBbGxDYWNoZXMgfCBDYWNoZU5hbWUgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVQZXJtaXNzaW9uIHtcbiAgcm9sZTogQ2FjaGVSb2xlO1xuICAvKipcbiAgICogU2NvcGUgdGhlIHRva2VuIHBlcm1pc3Npb25zIHRvIHNlbGVjdCBjYWNoZXNcbiAgICovXG4gIGNhY2hlOiBDYWNoZVNlbGVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZVBlcm1pc3Npb24ocDogUGVybWlzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gJ3JvbGUnIGluIHAgJiYgJ2NhY2hlJyBpbiBwICYmICEoJ3RvcGljJyBpbiBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzQ2FjaGVQZXJtaXNzaW9uKHA6IFBlcm1pc3Npb24pOiBDYWNoZVBlcm1pc3Npb24ge1xuICBpZiAoIWlzQ2FjaGVQZXJtaXNzaW9uKHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHBlcm1pc3Npb24gaXMgbm90IGEgQ2FjaGVQZXJtaXNzaW9uIG9iamVjdDogJHtKU09OLnN0cmluZ2lmeShwKX1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcCBhcyBDYWNoZVBlcm1pc3Npb247XG59XG5cbmV4cG9ydCBlbnVtIFRvcGljUm9sZSB7XG4gIFB1Ymxpc2hTdWJzY3JpYmUgPSAncHVibGlzaHN1YnNjcmliZScsXG4gIFN1YnNjcmliZU9ubHkgPSAnc3Vic2NyaWJlb25seScsXG4gIFB1Ymxpc2hPbmx5ID0gJ3B1Ymxpc2hvbmx5Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BpY05hbWUge1xuICBuYW1lOiBzdHJpbmc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUb3BpY05hbWUoXG4gIHRvcGljOiBUb3BpY05hbWUgfCB0eXBlb2YgQWxsVG9waWNzXG4pOiB0b3BpYyBpcyBUb3BpY05hbWUge1xuICBpZiAodG9waWMgPT09IEFsbFRvcGljcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gJ25hbWUnIGluIHRvcGljO1xufVxuZXhwb3J0IHR5cGUgVG9waWNTZWxlY3RvciA9IHR5cGVvZiBBbGxUb3BpY3MgfCBUb3BpY05hbWUgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9waWNQZXJtaXNzaW9uIHtcbiAgcm9sZTogVG9waWNSb2xlO1xuICAvKipcbiAgICogU2NvcGUgdGhlIHRva2VuIHBlcm1pc3Npb25zIHRvIHNlbGVjdCBjYWNoZXNcbiAgICovXG4gIGNhY2hlOiBDYWNoZVNlbGVjdG9yO1xuICAvKipcbiAgICogU2NvcGUgdGhlIHRva2VuIHBlcm1pc3Npb25zIHRvIHNlbGVjdCB0b3BpY3NcbiAgICovXG4gIHRvcGljOiBUb3BpY1NlbGVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUb3BpY1Blcm1pc3Npb24ocDogUGVybWlzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gJ3JvbGUnIGluIHAgJiYgJ2NhY2hlJyBpbiBwICYmICd0b3BpYycgaW4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzVG9waWNQZXJtaXNzaW9uKHA6IFBlcm1pc3Npb24pOiBUb3BpY1Blcm1pc3Npb24ge1xuICBpZiAoIWlzVG9waWNQZXJtaXNzaW9uKHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHBlcm1pc3Npb24gaXMgbm90IGEgVG9waWNQZXJtaXNzaW9uIG9iamVjdDogJHtKU09OLnN0cmluZ2lmeShwKX1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcCBhcyBUb3BpY1Blcm1pc3Npb247XG59XG5cbmV4cG9ydCB0eXBlIFBlcm1pc3Npb24gPSBDYWNoZVBlcm1pc3Npb24gfCBUb3BpY1Blcm1pc3Npb247XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbnMge1xuICBwZXJtaXNzaW9uczogQXJyYXk8UGVybWlzc2lvbj47XG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXRhUmVhZFdyaXRlOiBQZXJtaXNzaW9ucyA9IHtcbiAgcGVybWlzc2lvbnM6IFtcbiAgICB7cm9sZTogQ2FjaGVSb2xlLlJlYWRXcml0ZSwgY2FjaGU6IEFsbENhY2hlc30sXG4gICAge3JvbGU6IFRvcGljUm9sZS5QdWJsaXNoU3Vic2NyaWJlLCBjYWNoZTogQWxsQ2FjaGVzLCB0b3BpYzogQWxsVG9waWNzfSxcbiAgXSxcbn07XG5cbmZ1bmN0aW9uIGlzUGVybWlzc2lvbk9iamVjdChwOiBQZXJtaXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0NhY2hlUGVybWlzc2lvbihwKSB8fCBpc1RvcGljUGVybWlzc2lvbihwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVybWlzc2lvbnNPYmplY3Qoc2NvcGU6IFBlcm1pc3Npb25TY29wZSk6IGJvb2xlYW4ge1xuICBpZiAoISgncGVybWlzc2lvbnMnIGluIHNjb3BlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwZXJtaXNzaW9ucyA9IHNjb3BlLnBlcm1pc3Npb25zO1xuICByZXR1cm4gcGVybWlzc2lvbnMuZXZlcnkocCA9PiBpc1Blcm1pc3Npb25PYmplY3QocCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNQZXJtaXNzaW9uc09iamVjdChzY29wZTogUGVybWlzc2lvblNjb3BlKTogUGVybWlzc2lvbnMge1xuICBpZiAoIWlzUGVybWlzc2lvbnNPYmplY3Qoc2NvcGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRva2VuIHNjb3BlIGlzIG5vdCBhIFBlcm1pc3Npb25zIG9iamVjdDogJHtKU09OLnN0cmluZ2lmeShzY29wZSl9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNjb3BlIGFzIFBlcm1pc3Npb25zO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJlZGVmaW5lZFNjb3BlIHt9XG5cbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25TY29wZSA9XG4gIHwgdHlwZW9mIEFsbERhdGFSZWFkV3JpdGVcbiAgfCBQZXJtaXNzaW9uc1xuICB8IFByZWRlZmluZWRTY29wZTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIFBlcm1pc3Npb25TY29wZSBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuU2NvcGUgPSBQZXJtaXNzaW9uU2NvcGU7XG4iXX0=
|