@nlabs/metropolisjs 1.0.8 → 1.1.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/README.md +75 -40
- package/docs/ACTIONS.md +61 -1
- package/docs/assets/metropolisjs-logo.png +0 -0
- package/docs/assets/metropolisjs-mark.svg +7 -0
- package/examples/crud-usage.tsx +1 -1
- package/examples/factory-pattern-usage.ts +85 -78
- package/examples/signup-error-handling.ts +25 -24
- package/factoryPatternGuide.md +90 -174
- package/lib/actions/translationActions/translationActions.d.ts +2 -11
- package/lib/actions/translationActions/translationActions.js +2 -2
- package/lib/actions/userActions/userActions.d.ts +7 -5
- package/lib/actions/userActions/userActions.js +111 -64
- package/lib/index.d.ts +3 -8
- package/lib/index.js +4 -9
- package/lib/stores/tagStore.d.ts +1 -0
- package/lib/stores/tagStore.js +1 -1
- package/lib/stores/userStore.d.ts +1 -0
- package/lib/stores/userStore.js +2 -1
- package/lib/utils/actionFactory.d.ts +52 -6
- package/lib/utils/actionFactory.js +8 -6
- package/lib/utils/baseActionFactory.d.ts +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/session.d.ts +1 -1
- package/package.json +16 -14
- package/tsconfig.examples.json +23 -0
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
* Example of handling signup errors in MetropolisJS
|
|
3
3
|
*/
|
|
4
4
|
import {FluxFramework} from '@nlabs/arkhamjs';
|
|
5
|
-
|
|
6
|
-
import {USER_CONSTANTS} from '../src/stores/userStore';
|
|
7
|
-
import {createAction} from '../src/utils/actionFactory';
|
|
5
|
+
|
|
6
|
+
import {USER_CONSTANTS} from '../src/stores/userStore.js';
|
|
7
|
+
import {createAction} from '../src/utils/actionFactory.js';
|
|
8
|
+
|
|
9
|
+
import type {UserActions} from '../src/actions/userActions/userActions.js';
|
|
8
10
|
|
|
9
11
|
// Create a flux instance and user actions
|
|
10
12
|
const flux = new FluxFramework();
|
|
11
|
-
const userActions = createAction('user', flux) as unknown as
|
|
13
|
+
const userActions = createAction('user', flux) as unknown as UserActions;
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* Example 1: Basic error handling with try/catch
|
|
@@ -18,9 +20,9 @@ const handleAddWithTryCatch = async (userData: any) => {
|
|
|
18
20
|
const user = await userActions.addUser(userData);
|
|
19
21
|
console.log('Add successful:', user);
|
|
20
22
|
return {success: true, user};
|
|
21
|
-
} catch
|
|
23
|
+
} catch(error) {
|
|
22
24
|
console.error('Add failed:', error.message);
|
|
23
|
-
return {
|
|
25
|
+
return {error: error.message, success: false};
|
|
24
26
|
}
|
|
25
27
|
};
|
|
26
28
|
|
|
@@ -31,25 +33,25 @@ const handleSignUpWithFlux = async (userData: any) => {
|
|
|
31
33
|
// Set up a listener for signup success
|
|
32
34
|
const onSignUpSuccess = (payload: any) => {
|
|
33
35
|
console.log('Signup successful:', payload.user);
|
|
34
|
-
flux.
|
|
35
|
-
flux.
|
|
36
|
+
flux.off(USER_CONSTANTS.SIGN_UP_SUCCESS, onSignUpSuccess);
|
|
37
|
+
flux.off(USER_CONSTANTS.SIGN_UP_ERROR, onSignUpError);
|
|
36
38
|
};
|
|
37
39
|
|
|
38
40
|
// Set up a listener for signup error
|
|
39
41
|
const onSignUpError = (payload: any) => {
|
|
40
42
|
console.error('Signup failed:', payload.error.message);
|
|
41
|
-
flux.
|
|
42
|
-
flux.
|
|
43
|
+
flux.off(USER_CONSTANTS.SIGN_UP_SUCCESS, onSignUpSuccess);
|
|
44
|
+
flux.off(USER_CONSTANTS.SIGN_UP_ERROR, onSignUpError);
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
// Add listeners
|
|
46
|
-
flux.
|
|
47
|
-
flux.
|
|
48
|
+
flux.on(USER_CONSTANTS.SIGN_UP_SUCCESS, onSignUpSuccess);
|
|
49
|
+
flux.on(USER_CONSTANTS.SIGN_UP_ERROR, onSignUpError);
|
|
48
50
|
|
|
49
51
|
// Attempt signup
|
|
50
52
|
try {
|
|
51
53
|
await userActions.signUp(userData);
|
|
52
|
-
} catch
|
|
54
|
+
} catch(error) {
|
|
53
55
|
// Error is already handled by the flux listener
|
|
54
56
|
// This catch is just to prevent the error from propagating
|
|
55
57
|
}
|
|
@@ -62,39 +64,38 @@ const handleSignUpWithValidation = async (userData: any) => {
|
|
|
62
64
|
// Perform custom validation
|
|
63
65
|
const errors: string[] = [];
|
|
64
66
|
|
|
65
|
-
if
|
|
67
|
+
if(!userData.email || !userData.email.includes('@')) {
|
|
66
68
|
errors.push('Invalid email format');
|
|
67
69
|
}
|
|
68
70
|
|
|
69
|
-
if
|
|
71
|
+
if(!userData.password || userData.password.length < 8) {
|
|
70
72
|
errors.push('Password must be at least 8 characters');
|
|
71
73
|
}
|
|
72
74
|
|
|
73
|
-
if
|
|
75
|
+
if(!userData.username || userData.username.length < 3) {
|
|
74
76
|
errors.push('Username must be at least 3 characters');
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
// If validation fails, return errors
|
|
78
|
-
if
|
|
79
|
-
return {success: false
|
|
80
|
+
if(errors.length > 0) {
|
|
81
|
+
return {errors, success: false};
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
// If validation passes, attempt signup
|
|
83
85
|
try {
|
|
84
86
|
const user = await userActions.signUp(userData);
|
|
85
87
|
return {success: true, user};
|
|
86
|
-
} catch
|
|
88
|
+
} catch(error) {
|
|
87
89
|
// Handle specific error types
|
|
88
|
-
if
|
|
89
|
-
return {
|
|
90
|
+
if(error.message.includes('already exists')) {
|
|
91
|
+
return {errors: ['Username or email already in use'], success: false};
|
|
90
92
|
}
|
|
91
93
|
|
|
92
|
-
return {
|
|
94
|
+
return {errors: [error.message], success: false};
|
|
93
95
|
}
|
|
94
96
|
};
|
|
95
97
|
|
|
96
98
|
// Export examples
|
|
97
99
|
export {
|
|
98
|
-
|
|
100
|
+
handleAddWithTryCatch, handleSignUpWithFlux, handleSignUpWithValidation
|
|
99
101
|
};
|
|
100
|
-
|
package/factoryPatternGuide.md
CHANGED
|
@@ -1,244 +1,160 @@
|
|
|
1
1
|
# MetropolisJS Factory Pattern Guide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
MetropolisJS exposes typed factory functions for creating action families with an ArkhamJS `FluxFramework` instance. Use a direct creator when you need one known family, `createActions()` for a selected set, or `createAllActions()` when an integration genuinely needs every family.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Create One Action Family
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
1. **Functional Programming**: Pure functions instead of classes with side effects
|
|
10
|
-
2. **Better Testability**: Easier to mock and test individual functions
|
|
11
|
-
3. **Composability**: Actions can be easily combined and extended
|
|
12
|
-
4. **Dependency Injection**: Custom adapters can be injected and merged with defaults
|
|
13
|
-
5. **Backward Compatibility**: Legacy class wrappers maintain existing API compatibility
|
|
14
|
-
|
|
15
|
-
## Basic Usage
|
|
16
|
-
|
|
17
|
-
### Before (Class-based)
|
|
7
|
+
Use `createAction()` when the family is selected dynamically or when you want the consolidated factory API:
|
|
18
8
|
|
|
19
9
|
```typescript
|
|
20
|
-
import {
|
|
10
|
+
import {createAction} from '@nlabs/metropolisjs';
|
|
21
11
|
|
|
22
|
-
const userActions =
|
|
23
|
-
const user = await userActions.
|
|
12
|
+
const userActions = createAction('user', flux);
|
|
13
|
+
const user = await userActions.addUser({
|
|
14
|
+
email: 'ada@example.com',
|
|
15
|
+
username: 'ada'
|
|
16
|
+
});
|
|
24
17
|
```
|
|
25
18
|
|
|
26
|
-
|
|
19
|
+
The factory key determines the return type. In this example, `userActions` is inferred as `UserActions`; no cast or manual type annotation is required.
|
|
20
|
+
|
|
21
|
+
Direct creators provide the same action interface:
|
|
27
22
|
|
|
28
23
|
```typescript
|
|
29
|
-
import {createUserActions} from '
|
|
24
|
+
import {createUserActions} from '@nlabs/metropolisjs';
|
|
30
25
|
|
|
31
26
|
const userActions = createUserActions(flux);
|
|
32
|
-
const user = await userActions.
|
|
27
|
+
const user = await userActions.itemById('user-1');
|
|
33
28
|
```
|
|
34
29
|
|
|
35
|
-
##
|
|
30
|
+
## Create a Selected Set
|
|
36
31
|
|
|
37
|
-
|
|
32
|
+
`createActions()` returns an object whose keys and values are inferred from the requested tuple:
|
|
38
33
|
|
|
39
34
|
```typescript
|
|
40
|
-
|
|
41
|
-
const customUserAdapter = (input: unknown, options?: UserAdapterOptions) => {
|
|
42
|
-
// input is already validated by default adapter
|
|
43
|
-
const user = input as any;
|
|
44
|
-
|
|
45
|
-
// Add business-specific validation
|
|
46
|
-
if (user.email && !user.email.includes('@company.com')) {
|
|
47
|
-
throw new Error('Only company emails allowed');
|
|
48
|
-
}
|
|
35
|
+
import {createActions} from '@nlabs/metropolisjs';
|
|
49
36
|
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
...user,
|
|
53
|
-
fullName: `${user.firstName || ''} ${user.lastName || ''}`.trim(),
|
|
54
|
-
isAdmin: user.userAccess >= 3
|
|
55
|
-
};
|
|
56
|
-
};
|
|
37
|
+
const actions = createActions(['user', 'post', 'message'], flux);
|
|
57
38
|
|
|
58
|
-
const
|
|
59
|
-
|
|
39
|
+
const user = await actions.user.addUser({username: 'ada'});
|
|
40
|
+
const post = await actions.post.add({
|
|
41
|
+
content: 'Hello, Metropolis!',
|
|
42
|
+
userId: user.userId
|
|
60
43
|
});
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Configuration-based Adapters
|
|
64
44
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
strict: true,
|
|
69
|
-
environment: 'production',
|
|
70
|
-
customValidation: (input) => {
|
|
71
|
-
// Additional validation logic
|
|
72
|
-
return input;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
45
|
+
await actions.message.sendMessage({
|
|
46
|
+
content: `Created post ${post.postId}`,
|
|
47
|
+
recipientId: user.userId
|
|
75
48
|
});
|
|
76
49
|
```
|
|
77
50
|
|
|
78
|
-
|
|
51
|
+
Only requested keys exist on the returned type. A call such as `actions.video` is therefore a TypeScript error unless `video` was included in the input tuple.
|
|
79
52
|
|
|
80
|
-
|
|
81
|
-
const userActions = createUserActions(flux);
|
|
53
|
+
## Create Every Action Family
|
|
82
54
|
|
|
83
|
-
|
|
84
|
-
userActions.updateUserAdapter(customUserAdapter);
|
|
55
|
+
`createAllActions()` returns the complete `ActionMap`:
|
|
85
56
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
strict: true,
|
|
89
|
-
environment: 'production'
|
|
90
|
-
});
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Available Actions
|
|
94
|
-
|
|
95
|
-
All action files now export factory functions:
|
|
96
|
-
|
|
97
|
-
- `createUserActions(flux, options?)` - User management
|
|
98
|
-
- `createPostActions(flux, options?)` - Post management
|
|
99
|
-
- `createEventActions(flux, options?)` - Event management
|
|
100
|
-
- `createMessageActions(flux, options?)` - Messaging
|
|
101
|
-
- `createImageActions(flux, options?)` - Image handling
|
|
102
|
-
- `createLocationActions(flux, options?)` - Location services
|
|
103
|
-
- `createReactionActions(flux, options?)` - Reactions
|
|
104
|
-
- `createTagActions(flux, options?)` - Tag management
|
|
105
|
-
- `createWebsocketActions(flux)` - WebSocket connections
|
|
106
|
-
|
|
107
|
-
## Adapter Options Interface
|
|
57
|
+
```typescript
|
|
58
|
+
import {createAllActions} from '@nlabs/metropolisjs';
|
|
108
59
|
|
|
109
|
-
|
|
60
|
+
const actions = createAllActions(flux);
|
|
110
61
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
strict?: boolean; // Enable strict validation
|
|
114
|
-
allowPartial?: boolean; // Allow partial data
|
|
115
|
-
environment?: 'development' | 'production' | 'test';
|
|
116
|
-
customValidation?: (input: unknown) => unknown;
|
|
117
|
-
}
|
|
62
|
+
const user = await actions.user.itemById('user-1');
|
|
63
|
+
const posts = await actions.post.listByLatest();
|
|
118
64
|
```
|
|
119
65
|
|
|
120
|
-
|
|
66
|
+
Prefer `createAction()` or `createActions()` when only a few families are needed.
|
|
67
|
+
|
|
68
|
+
## Custom Adapters
|
|
121
69
|
|
|
122
|
-
|
|
70
|
+
Factory options let an application add validation or transformation rules while retaining the standard action interface:
|
|
123
71
|
|
|
124
72
|
```typescript
|
|
125
|
-
|
|
126
|
-
import {userActions} from '../actions/userActions';
|
|
73
|
+
import {createUserActions, type User} from '@nlabs/metropolisjs';
|
|
127
74
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
```
|
|
75
|
+
const companyUserAdapter = (input: unknown): User => {
|
|
76
|
+
const user = input as User;
|
|
131
77
|
|
|
132
|
-
|
|
78
|
+
if(user.email && !user.email.endsWith('@company.com')) {
|
|
79
|
+
throw new Error('A company email is required');
|
|
80
|
+
}
|
|
133
81
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
82
|
+
return {
|
|
83
|
+
...user,
|
|
84
|
+
isAdmin: (user.userAccess || 0) >= 3
|
|
85
|
+
};
|
|
86
|
+
};
|
|
137
87
|
|
|
138
|
-
// New
|
|
139
88
|
const userActions = createUserActions(flux, {
|
|
140
|
-
userAdapter:
|
|
89
|
+
userAdapter: companyUserAdapter,
|
|
90
|
+
userAdapterOptions: {
|
|
91
|
+
environment: 'production',
|
|
92
|
+
strict: true
|
|
93
|
+
}
|
|
141
94
|
});
|
|
142
95
|
```
|
|
143
96
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
The `useMetropolis` hook has been updated to use the factory pattern:
|
|
97
|
+
Adapters can also be replaced at runtime:
|
|
147
98
|
|
|
148
99
|
```typescript
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
userActions: new userActions(flux, UserAdapter),
|
|
152
|
-
postActions: new PostActions(flux, PostAdapter),
|
|
153
|
-
// ...
|
|
154
|
-
}), [flux, UserAdapter, PostAdapter]);
|
|
155
|
-
|
|
156
|
-
// New
|
|
157
|
-
return useMemo(() => ({
|
|
158
|
-
userActions: createUserActions(flux, {
|
|
159
|
-
userAdapter: UserAdapter
|
|
160
|
-
}),
|
|
161
|
-
postActions: createPostActions(flux, {
|
|
162
|
-
postAdapter: PostAdapter
|
|
163
|
-
}),
|
|
164
|
-
// ...
|
|
165
|
-
}), [flux, UserAdapter, PostAdapter]);
|
|
100
|
+
userActions.updateUserAdapter(companyUserAdapter);
|
|
101
|
+
userActions.updateUserAdapterOptions({strict: true});
|
|
166
102
|
```
|
|
167
103
|
|
|
168
|
-
##
|
|
104
|
+
## Request Caching
|
|
169
105
|
|
|
170
|
-
|
|
106
|
+
Read actions that accept `ActionRequestOptions` can cache responses for a number of minutes:
|
|
171
107
|
|
|
172
108
|
```typescript
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
109
|
+
const user = await userActions.itemById(
|
|
110
|
+
'user-1',
|
|
111
|
+
['email', 'username'],
|
|
112
|
+
{cacheTimeout: 5}
|
|
113
|
+
);
|
|
176
114
|
```
|
|
177
115
|
|
|
178
|
-
|
|
116
|
+
Mutations clear the related request caches after successful updates.
|
|
179
117
|
|
|
180
|
-
|
|
118
|
+
## Testing
|
|
119
|
+
|
|
120
|
+
Create actions with a test Flux instance and inject adapters when a test needs to observe validation:
|
|
181
121
|
|
|
182
122
|
```typescript
|
|
183
|
-
import {createUserActions} from '
|
|
123
|
+
import {createUserActions, type UserActions} from '@nlabs/metropolisjs';
|
|
184
124
|
|
|
185
|
-
describe('
|
|
186
|
-
let
|
|
187
|
-
let userActions: userActions;
|
|
125
|
+
describe('user actions', () => {
|
|
126
|
+
let userActions: UserActions;
|
|
188
127
|
|
|
189
128
|
beforeEach(() => {
|
|
190
|
-
|
|
191
|
-
userActions = createUserActions(flux);
|
|
129
|
+
userActions = createUserActions(createMockFlux());
|
|
192
130
|
});
|
|
193
131
|
|
|
194
|
-
it('
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
132
|
+
it('creates a user', async () => {
|
|
133
|
+
const user = await userActions.addUser({
|
|
134
|
+
email: 'test@example.com',
|
|
135
|
+
username: 'test'
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
expect(user.userId).toBeDefined();
|
|
198
139
|
});
|
|
199
140
|
});
|
|
200
141
|
```
|
|
201
142
|
|
|
202
|
-
|
|
143
|
+
The complete runnable examples are in [`examples/factory-pattern-usage.ts`](./examples/factory-pattern-usage.ts).
|
|
203
144
|
|
|
204
|
-
|
|
205
|
-
const mockAdapter = jest.fn((input) => ({
|
|
206
|
-
...input,
|
|
207
|
-
validated: true
|
|
208
|
-
}));
|
|
145
|
+
## Development Checks
|
|
209
146
|
|
|
210
|
-
|
|
211
|
-
userAdapter: mockAdapter
|
|
212
|
-
});
|
|
147
|
+
Run all source, test, lint-input, and example TypeScript configurations with:
|
|
213
148
|
|
|
214
|
-
|
|
149
|
+
```bash
|
|
150
|
+
npm run typecheck
|
|
215
151
|
```
|
|
216
152
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
1. **Use Factory Functions**: Prefer `createXxxActions()` over class constructors
|
|
220
|
-
2. **Leverage Adapter Injection**: Use custom adapters for business logic
|
|
221
|
-
3. **Runtime Updates**: Use update methods for dynamic behavior changes
|
|
222
|
-
4. **Type Safety**: Always use TypeScript interfaces for better type checking
|
|
223
|
-
5. **Error Handling**: Custom adapters should throw meaningful errors
|
|
224
|
-
|
|
225
|
-
## Performance Considerations
|
|
153
|
+
Before publishing a change, run:
|
|
226
154
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
The factory pattern enables future enhancements:
|
|
235
|
-
|
|
236
|
-
- **Middleware Support**: Chain multiple adapters
|
|
237
|
-
- **Plugin System**: Load adapters dynamically
|
|
238
|
-
- **Caching**: Cache validated results
|
|
239
|
-
- **Async Adapters**: Support async validation logic
|
|
240
|
-
- **Schema Evolution**: Handle multiple adapter versions
|
|
241
|
-
|
|
242
|
-
## Conclusion
|
|
243
|
-
|
|
244
|
-
The factory pattern provides a more functional, testable, and flexible approach to action management in MetropolisJS. While maintaining backward compatibility, it opens up new possibilities for customization and extension.
|
|
155
|
+
```bash
|
|
156
|
+
npm run lint
|
|
157
|
+
npm run typecheck
|
|
158
|
+
npm test
|
|
159
|
+
npm run build
|
|
160
|
+
```
|
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
-
*/
|
|
5
1
|
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
import type { TranslationInputType } from '../../adapters/translationAdapter/translationAdapter.js';
|
|
6
3
|
import type { TranslationType } from '../../stores/translationStore.js';
|
|
7
|
-
import type { BaseAdapterOptions } from '../../utils/validatorFactory.js';
|
|
8
4
|
import type { ActionRequestOptions } from '../../utils/requestCache.js';
|
|
9
|
-
|
|
10
|
-
readonly key: string;
|
|
11
|
-
readonly locale: string;
|
|
12
|
-
readonly value: string;
|
|
13
|
-
readonly namespace?: string;
|
|
14
|
-
}
|
|
5
|
+
import type { BaseAdapterOptions } from '../../utils/validatorFactory.js';
|
|
15
6
|
export interface TranslationActionsOptions {
|
|
16
7
|
translationAdapter?: (input: unknown, options?: BaseAdapterOptions) => any;
|
|
17
8
|
translationAdapterOptions?: BaseAdapterOptions;
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*/ import { TRANSLATION_CONSTANTS } from '../../stores/translationStore.js';
|
|
5
5
|
import { appMutation, appQuery } from '../../utils/api.js';
|
|
6
6
|
import { createBaseActions } from '../../utils/baseActionFactory.js';
|
|
7
|
-
import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
|
|
8
7
|
import { initI18n, updateI18nResources } from '../../utils/i18n.js';
|
|
8
|
+
import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
|
|
9
9
|
const DATA_TYPE = 'translations';
|
|
10
10
|
const defaultTranslationValidator = (input, options)=>input;
|
|
11
11
|
export const createTranslationActions = (flux, options)=>{
|
|
@@ -186,4 +186,4 @@ export const createTranslationActions = (flux, options)=>{
|
|
|
186
186
|
};
|
|
187
187
|
};
|
|
188
188
|
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmltcG9ydCB7VFJBTlNMQVRJT05fQ09OU1RBTlRTfSBmcm9tICcuLi8uLi9zdG9yZXMvdHJhbnNsYXRpb25TdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y3JlYXRlQmFzZUFjdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtUcmFuc2xhdGlvblR5cGV9IGZyb20gJy4uLy4uL3N0b3Jlcy90cmFuc2xhdGlvblN0b3JlLmpzJztcbmltcG9ydCB7aW5pdEkxOG4sIHVwZGF0ZUkxOG5SZXNvdXJjZXN9IGZyb20gJy4uLy4uL3V0aWxzL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9yRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmNvbnN0IERBVEFfVFlQRSA9ICd0cmFuc2xhdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uSW5wdXRUeXBlIHtcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvY2FsZTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRpb25BY3Rpb25zT3B0aW9ucyB7XG4gIHRyYW5zbGF0aW9uQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEJhc2VBZGFwdGVyT3B0aW9ucykgPT4gYW55O1xuICB0cmFuc2xhdGlvbkFkYXB0ZXJPcHRpb25zPzogQmFzZUFkYXB0ZXJPcHRpb25zO1xuICBhdXRvU3luY0kxOG4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBUcmFuc2xhdGlvbkFwaVJlc3VsdHNUeXBlID0ge1xuICB0cmFuc2xhdGlvbnM6IHtcbiAgICBhZGRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uVHlwZVtdO1xuICAgIGdldFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25UeXBlW107XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uQWN0aW9ucyB7XG4gIGFkZFRyYW5zbGF0aW9uczogKHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25JbnB1dFR5cGVbXSwgdHJhbnNsYXRpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFRyYW5zbGF0aW9uVHlwZVtdPjtcbiAgZ2V0VHJhbnNsYXRpb246IChrZXk6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgZ2V0VHJhbnNsYXRpb25zOiAoXG4gICAga2V5czogc3RyaW5nW10sXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nLFxuICAgIHRyYW5zbGF0aW9uUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxUcmFuc2xhdGlvblR5cGVbXT47XG4gIGhhc1RyYW5zbGF0aW9uOiAoa2V5OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIHByb2Nlc3NQZW5kaW5nVHJhbnNsYXRpb25zOiAobG9jYWxlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcXVldWVUcmFuc2xhdGlvbktleTogKGtleTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBzeW5jV2l0aEkxOG46ICgpID0+IHZvaWQ7XG4gIHVwZGF0ZVRyYW5zbGF0aW9uQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEJhc2VBZGFwdGVyT3B0aW9ucykgPT4gYW55KSA9PiB2b2lkO1xuICB1cGRhdGVUcmFuc2xhdGlvbkFkYXB0ZXJPcHRpb25zOiAob3B0aW9uczogQmFzZUFkYXB0ZXJPcHRpb25zKSA9PiB2b2lkO1xufVxuXG5jb25zdCBkZWZhdWx0VHJhbnNsYXRpb25WYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBCYXNlQWRhcHRlck9wdGlvbnMpID0+IGlucHV0IGFzIFRyYW5zbGF0aW9uSW5wdXRUeXBlO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVHJhbnNsYXRpb25BY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogVHJhbnNsYXRpb25BY3Rpb25zT3B0aW9uc1xuKTogVHJhbnNsYXRpb25BY3Rpb25zID0+IHtcbiAgY29uc3QgdHJhbnNsYXRpb25CYXNlID0gY3JlYXRlQmFzZUFjdGlvbnMoZmx1eCwgZGVmYXVsdFRyYW5zbGF0aW9uVmFsaWRhdG9yLCB7XG4gICAgLi4uKG9wdGlvbnM/LnRyYW5zbGF0aW9uQWRhcHRlciAmJiB7YWRhcHRlcjogb3B0aW9ucy50cmFuc2xhdGlvbkFkYXB0ZXJ9KSxcbiAgICAuLi4ob3B0aW9ucz8udHJhbnNsYXRpb25BZGFwdGVyT3B0aW9ucyAmJiB7YWRhcHRlck9wdGlvbnM6IG9wdGlvbnMudHJhbnNsYXRpb25BZGFwdGVyT3B0aW9uc30pXG4gIH0pO1xuXG4gIGNvbnN0IHN5bmNXaXRoSTE4biA9ICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGZsdXguZ2V0U3RhdGUoJ3RyYW5zbGF0aW9ucycpIGFzIGFueTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBzdGF0ZS50cmFuc2xhdGlvbnMgfHwge307XG5cbiAgICBpZihPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmKCFvcHRpb25zPy5hdXRvU3luY0kxOG4pIHtcbiAgICAgICAgaW5pdEkxOG4odHJhbnNsYXRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZUkxOG5SZXNvdXJjZXModHJhbnNsYXRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWRkVHJhbnNsYXRpb25zID0gYXN5bmMgKFxuICAgIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25JbnB1dFR5cGVbXSxcbiAgICB0cmFuc2xhdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VHJhbnNsYXRpb25UeXBlW10+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIHRyYW5zbGF0aW9uczoge1xuICAgICAgICAgIHR5cGU6ICdbVHJhbnNsYXRpb25JbnB1dCFdIScsXG4gICAgICAgICAgdmFsdWU6IHRyYW5zbGF0aW9ucy5tYXAoKHQpID0+IHRyYW5zbGF0aW9uQmFzZS52YWxpZGF0b3IodCkpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBUcmFuc2xhdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFRyYW5zbGF0aW9ucyA9IGRhdGE/LnRyYW5zbGF0aW9ucz8uYWRkVHJhbnNsYXRpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnM6IGFkZFRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuQUREX1RSQU5TTEFUSU9OU19TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgICBpZihvcHRpb25zPy5hdXRvU3luY0kxOG4pIHtcbiAgICAgICAgICBzeW5jV2l0aEkxOG4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFRyYW5zbGF0aW9uVHlwZVtdPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2FkZFRyYW5zbGF0aW9ucycsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsna2V5JywgJ2xvY2FsZScsICd2YWx1ZScsICduYW1lc3BhY2UnLCAuLi50cmFuc2xhdGlvblByb3BzXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFRSQU5TTEFUSU9OX0NPTlNUQU5UUy5BRERfVFJBTlNMQVRJT05TX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd0cmFuc2xhdGlvbi5nZXRUcmFuc2xhdGlvbnMnKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VHJhbnNsYXRpb24gPSAoa2V5OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGZsdXguZ2V0U3RhdGUoJ3RyYW5zbGF0aW9ucycpIGFzIGFueTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbktleSA9IG5hbWVzcGFjZSA/IGAke25hbWVzcGFjZX06JHtrZXl9OiR7bG9jYWxlfWAgOiBgJHtrZXl9OiR7bG9jYWxlfWA7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSBzdGF0ZS50cmFuc2xhdGlvbnM/Llt0cmFuc2xhdGlvbktleV07XG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uPy52YWx1ZSB8fCBudWxsO1xuICB9O1xuXG4gIGNvbnN0IGdldFRyYW5zbGF0aW9ucyA9IGFzeW5jIChcbiAgICBrZXlzOiBzdHJpbmdbXSxcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFRyYW5zbGF0aW9uVHlwZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VHJhbnNsYXRpb25UeXBlW10+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAndHJhbnNsYXRpb24uZ2V0VHJhbnNsYXRpb25zJyxcbiAgICAgICAge2tleXMsIGxvY2FsZSwgbmFtZXNwYWNlLCB0cmFuc2xhdGlvblByb3BzfSxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICAgICk7XG5cbiAgICAgIGlmKGNhY2hlZFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAga2V5czoge1xuICAgICAgICAgIHR5cGU6ICdbU3RyaW5nIV0hJyxcbiAgICAgICAgICB2YWx1ZToga2V5c1xuICAgICAgICB9LFxuICAgICAgICBsb2NhbGU6IHtcbiAgICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgICAgdmFsdWU6IGxvY2FsZVxuICAgICAgICB9LFxuICAgICAgICAuLi4obmFtZXNwYWNlICYmIHtcbiAgICAgICAgICBuYW1lc3BhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgdmFsdWU6IG5hbWVzcGFjZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBUcmFuc2xhdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFRyYW5zbGF0aW9ucyA9IGRhdGE/LnRyYW5zbGF0aW9ucz8uZ2V0VHJhbnNsYXRpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnM6IGdldFRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuR0VUX1RSQU5TTEFUSU9OU19TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgICBpZihvcHRpb25zPy5hdXRvU3luY0kxOG4pIHtcbiAgICAgICAgICBzeW5jV2l0aEkxOG4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwUXVlcnk8VHJhbnNsYXRpb25UeXBlW10+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZ2V0VHJhbnNsYXRpb25zJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydrZXknLCAnbG9jYWxlJywgJ3ZhbHVlJywgJ25hbWVzcGFjZScsIC4uLnRyYW5zbGF0aW9uUHJvcHNdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHNldENhY2hlZFJlcXVlc3QoZmx1eCwgJ3RyYW5zbGF0aW9uLmdldFRyYW5zbGF0aW9ucycsIHtrZXlzLCBsb2NhbGUsIG5hbWVzcGFjZSwgdHJhbnNsYXRpb25Qcm9wc30sIHJlc3VsdCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuR0VUX1RSQU5TTEFUSU9OU19FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhc1RyYW5zbGF0aW9uID0gKGtleTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBmbHV4LmdldFN0YXRlKCd0cmFuc2xhdGlvbnMnKSBhcyBhbnk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25LZXkgPSBuYW1lc3BhY2UgPyBgJHtuYW1lc3BhY2V9OiR7a2V5fToke2xvY2FsZX1gIDogYCR7a2V5fToke2xvY2FsZX1gO1xuICAgIHJldHVybiAhIXN0YXRlLnRyYW5zbGF0aW9ucz8uW3RyYW5zbGF0aW9uS2V5XTtcbiAgfTtcblxuICBjb25zdCBxdWV1ZVRyYW5zbGF0aW9uS2V5ID0gKGtleTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25LZXkgPSBuYW1lc3BhY2UgPyBgJHtuYW1lc3BhY2V9OiR7a2V5fToke2xvY2FsZX1gIDogYCR7a2V5fToke2xvY2FsZX1gO1xuICAgIGZsdXguZGlzcGF0Y2goe2tleTogdHJhbnNsYXRpb25LZXksIHR5cGU6IFRSQU5TTEFUSU9OX0NPTlNUQU5UUy5RVUVVRV9UUkFOU0xBVElPTl9LRVl9KTtcbiAgfTtcblxuICBjb25zdCBwcm9jZXNzUGVuZGluZ1RyYW5zbGF0aW9ucyA9IGFzeW5jIChcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBmbHV4LmdldFN0YXRlKCd0cmFuc2xhdGlvbnMnKSBhcyBhbnk7XG4gICAgY29uc3QgcGVuZGluZ0tleXMgPSBBcnJheS5mcm9tKHN0YXRlLnBlbmRpbmdLZXlzIHx8IFtdKSBhcyBzdHJpbmdbXTtcblxuICAgIGlmKHBlbmRpbmdLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXguZGlzcGF0Y2goe2lzUXVldWVpbmc6IHRydWUsIHR5cGU6IFRSQU5TTEFUSU9OX0NPTlNUQU5UUy5TRVRfUVVFVUVJTkdfU1RBVEV9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXlzVG9GZXRjaCA9IHBlbmRpbmdLZXlzXG4gICAgICAgIC5tYXAoKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJzonKTtcbiAgICAgICAgICBpZihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDMgPyBwYXJ0c1sxXSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDIgPyBwYXJ0c1swXSA6IG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG5cbiAgICAgIGlmKGtleXNUb0ZldGNoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgZ2V0VHJhbnNsYXRpb25zKGtleXNUb0ZldGNoLCBsb2NhbGUsIG5hbWVzcGFjZSwgW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7aXNRdWV1ZWluZzogZmFsc2UsIHR5cGU6IFRSQU5TTEFUSU9OX0NPTlNUQU5UUy5TRVRfUVVFVUVJTkdfU1RBVEV9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRUcmFuc2xhdGlvbnMsXG4gICAgZ2V0VHJhbnNsYXRpb24sXG4gICAgZ2V0VHJhbnNsYXRpb25zLFxuICAgIGhhc1RyYW5zbGF0aW9uLFxuICAgIHByb2Nlc3NQZW5kaW5nVHJhbnNsYXRpb25zLFxuICAgIHF1ZXVlVHJhbnNsYXRpb25LZXksXG4gICAgc3luY1dpdGhJMThuLFxuICAgIHVwZGF0ZVRyYW5zbGF0aW9uQWRhcHRlcjogdHJhbnNsYXRpb25CYXNlLnVwZGF0ZUFkYXB0ZXIsXG4gICAgdXBkYXRlVHJhbnNsYXRpb25BZGFwdGVyT3B0aW9uczogdHJhbnNsYXRpb25CYXNlLnVwZGF0ZU9wdGlvbnNcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiVFJBTlNMQVRJT05fQ09OU1RBTlRTIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJpbml0STE4biIsInVwZGF0ZUkxOG5SZXNvdXJjZXMiLCJEQVRBX1RZUEUiLCJkZWZhdWx0VHJhbnNsYXRpb25WYWxpZGF0b3IiLCJpbnB1dCIsIm9wdGlvbnMiLCJjcmVhdGVUcmFuc2xhdGlvbkFjdGlvbnMiLCJmbHV4IiwidHJhbnNsYXRpb25CYXNlIiwidHJhbnNsYXRpb25BZGFwdGVyIiwiYWRhcHRlciIsInRyYW5zbGF0aW9uQWRhcHRlck9wdGlvbnMiLCJhZGFwdGVyT3B0aW9ucyIsInN5bmNXaXRoSTE4biIsInN0YXRlIiwiZ2V0U3RhdGUiLCJ0cmFuc2xhdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYXV0b1N5bmNJMThuIiwiYWRkVHJhbnNsYXRpb25zIiwidHJhbnNsYXRpb25Qcm9wcyIsInJlcXVlc3RPcHRpb25zIiwicXVlcnlWYXJpYWJsZXMiLCJ0eXBlIiwidmFsdWUiLCJtYXAiLCJ0IiwidmFsaWRhdG9yIiwib25TdWNjZXNzIiwiZGF0YSIsInJlc3VsdCIsImRpc3BhdGNoIiwiQUREX1RSQU5TTEFUSU9OU19TVUNDRVNTIiwiZXJyb3IiLCJBRERfVFJBTlNMQVRJT05TX0VSUk9SIiwiZ2V0VHJhbnNsYXRpb24iLCJrZXkiLCJsb2NhbGUiLCJuYW1lc3BhY2UiLCJ0cmFuc2xhdGlvbktleSIsInRyYW5zbGF0aW9uIiwiZ2V0VHJhbnNsYXRpb25zIiwiY2FjaGVkUmVzdWx0IiwiR0VUX1RSQU5TTEFUSU9OU19TVUNDRVNTIiwiR0VUX1RSQU5TTEFUSU9OU19FUlJPUiIsImhhc1RyYW5zbGF0aW9uIiwicXVldWVUcmFuc2xhdGlvbktleSIsIlFVRVVFX1RSQU5TTEFUSU9OX0tFWSIsInByb2Nlc3NQZW5kaW5nVHJhbnNsYXRpb25zIiwicGVuZGluZ0tleXMiLCJBcnJheSIsImZyb20iLCJpc1F1ZXVlaW5nIiwiU0VUX1FVRVVFSU5HX1NUQVRFIiwia2V5c1RvRmV0Y2giLCJwYXJ0cyIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInVwZGF0ZVRyYW5zbGF0aW9uQWRhcHRlciIsInVwZGF0ZUFkYXB0ZXIiLCJ1cGRhdGVUcmFuc2xhdGlvbkFkYXB0ZXJPcHRpb25zIiwidXBkYXRlT3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsU0FBUUEscUJBQXFCLFFBQU8sbUNBQW1DO0FBQ3ZFLFNBQVFDLFdBQVcsRUFBRUMsUUFBUSxRQUFPLHFCQUFxQjtBQUN6RCxTQUFRQyxpQkFBaUIsUUFBTyxtQ0FBbUM7QUFDbkUsU0FBUUMsa0JBQWtCLEVBQUVDLGdCQUFnQixFQUFFQyxnQkFBZ0IsUUFBTyw4QkFBOEI7QUFJbkcsU0FBUUMsUUFBUSxFQUFFQyxtQkFBbUIsUUFBTyxzQkFBc0I7QUFJbEUsTUFBTUMsWUFBWTtBQXdDbEIsTUFBTUMsOEJBQThCLENBQUNDLE9BQWdCQyxVQUFpQ0Q7QUFFdEYsT0FBTyxNQUFNRSwyQkFBMkIsQ0FDdENDLE1BQ0FGO0lBRUEsTUFBTUcsa0JBQWtCWixrQkFBa0JXLE1BQU1KLDZCQUE2QjtRQUMzRSxHQUFJRSxTQUFTSSxzQkFBc0I7WUFBQ0MsU0FBU0wsUUFBUUksa0JBQWtCO1FBQUEsQ0FBQztRQUN4RSxHQUFJSixTQUFTTSw2QkFBNkI7WUFBQ0MsZ0JBQWdCUCxRQUFRTSx5QkFBeUI7UUFBQSxDQUFDO0lBQy9GO0lBRUEsTUFBTUUsZUFBZTtRQUNuQixNQUFNQyxRQUFRUCxLQUFLUSxRQUFRLENBQUM7UUFDNUIsTUFBTUMsZUFBZUYsTUFBTUUsWUFBWSxJQUFJLENBQUM7UUFFNUMsSUFBR0MsT0FBT0MsSUFBSSxDQUFDRixjQUFjRyxNQUFNLEdBQUcsR0FBRztZQUN2QyxJQUFHLENBQUNkLFNBQVNlLGNBQWM7Z0JBQ3pCcEIsU0FBU2dCO1lBQ1gsT0FBTztnQkFDTGYsb0JBQW9CZTtZQUN0QjtRQUNGO0lBQ0Y7SUFFQSxNQUFNSyxrQkFBa0IsT0FDdEJMLGNBQ0FNLG1CQUE2QixFQUFFLEVBQy9CQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLElBQUk7WUFDRixNQUFNQyxpQkFBaUI7Z0JBQ3JCUixjQUFjO29CQUNaUyxNQUFNO29CQUNOQyxPQUFPVixhQUFhVyxHQUFHLENBQUMsQ0FBQ0MsSUFBTXBCLGdCQUFnQnFCLFNBQVMsQ0FBQ0Q7Z0JBQzNEO1lBQ0Y7WUFFQSxNQUFNRSxZQUFZLENBQUNDO2dCQUNqQixNQUFNVixrQkFBa0JVLE1BQU1mLGNBQWNLLG1CQUFtQixFQUFFO2dCQUNqRSxNQUFNVyxTQUFTekIsS0FBSzBCLFFBQVEsQ0FBQztvQkFDM0JqQixjQUFjSztvQkFDZEksTUFBTWhDLHNCQUFzQnlDLHdCQUF3QjtnQkFDdEQ7Z0JBQ0EsSUFBRzdCLFNBQVNlLGNBQWM7b0JBQ3hCUDtnQkFDRjtnQkFDQSxPQUFPbUI7WUFDVDtZQUVBLE9BQU8sTUFBTXRDLFlBQ1hhLE1BQ0EsbUJBQ0FMLFdBQ0FzQixnQkFDQTtnQkFBQztnQkFBTztnQkFBVTtnQkFBUzttQkFBZ0JGO2FBQWlCLEVBQzVEO2dCQUFDUTtZQUFTO1FBRWQsRUFBRSxPQUFNSyxPQUFPO1lBQ2I1QixLQUFLMEIsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT1YsTUFBTWhDLHNCQUFzQjJDLHNCQUFzQjtZQUFBO1lBQ3hFLE1BQU1EO1FBQ1IsU0FBVTtZQUNSLE1BQU10QyxtQkFBbUJVLE1BQU07UUFDakM7SUFDRjtJQUVBLE1BQU04QixpQkFBaUIsQ0FBQ0MsS0FBYUMsUUFBZ0JDO1FBQ25ELE1BQU0xQixRQUFRUCxLQUFLUSxRQUFRLENBQUM7UUFDNUIsTUFBTTBCLGlCQUFpQkQsWUFBWSxHQUFHQSxVQUFVLENBQUMsRUFBRUYsSUFBSSxDQUFDLEVBQUVDLFFBQVEsR0FBRyxHQUFHRCxJQUFJLENBQUMsRUFBRUMsUUFBUTtRQUN2RixNQUFNRyxjQUFjNUIsTUFBTUUsWUFBWSxFQUFFLENBQUN5QixlQUFlO1FBQ3hELE9BQU9DLGFBQWFoQixTQUFTO0lBQy9CO0lBRUEsTUFBTWlCLGtCQUFrQixPQUN0QnpCLE1BQ0FxQixRQUNBQyxXQUNBbEIsbUJBQTZCLEVBQUUsRUFDL0JDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsSUFBSTtZQUNGLE1BQU1xQixlQUFlOUMsaUJBQ25CUyxNQUNBLCtCQUNBO2dCQUFDVztnQkFBTXFCO2dCQUFRQztnQkFBV2xCO1lBQWdCLEdBQzFDQztZQUdGLElBQUdxQixjQUFjO2dCQUNmLE9BQU9BO1lBQ1Q7WUFFQSxNQUFNcEIsaUJBQWlCO2dCQUNyQk4sTUFBTTtvQkFDSk8sTUFBTTtvQkFDTkMsT0FBT1I7Z0JBQ1Q7Z0JBQ0FxQixRQUFRO29CQUNOZCxNQUFNO29CQUNOQyxPQUFPYTtnQkFDVDtnQkFDQSxHQUFJQyxhQUFhO29CQUNmQSxXQUFXO3dCQUNUZixNQUFNO3dCQUNOQyxPQUFPYztvQkFDVDtnQkFDRixDQUFDO1lBQ0g7WUFFQSxNQUFNVixZQUFZLENBQUNDO2dCQUNqQixNQUFNWSxrQkFBa0JaLE1BQU1mLGNBQWMyQixtQkFBbUIsRUFBRTtnQkFDakUsTUFBTVgsU0FBU3pCLEtBQUswQixRQUFRLENBQUM7b0JBQzNCakIsY0FBYzJCO29CQUNkbEIsTUFBTWhDLHNCQUFzQm9ELHdCQUF3QjtnQkFDdEQ7Z0JBQ0EsSUFBR3hDLFNBQVNlLGNBQWM7b0JBQ3hCUDtnQkFDRjtnQkFDQSxPQUFPbUI7WUFDVDtZQUVBLE1BQU1BLFNBQVMsTUFBTXJDLFNBQ25CWSxNQUNBLG1CQUNBTCxXQUNBc0IsZ0JBQ0E7Z0JBQUM7Z0JBQU87Z0JBQVU7Z0JBQVM7bUJBQWdCRjthQUFpQixFQUM1RDtnQkFBQ1E7WUFBUztZQUdaLE9BQU8sTUFBTS9CLGlCQUFpQlEsTUFBTSwrQkFBK0I7Z0JBQUNXO2dCQUFNcUI7Z0JBQVFDO2dCQUFXbEI7WUFBZ0IsR0FBR1UsUUFBUVQ7UUFDMUgsRUFBRSxPQUFNWSxPQUFPO1lBQ2I1QixLQUFLMEIsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT1YsTUFBTWhDLHNCQUFzQnFELHNCQUFzQjtZQUFBO1lBQ3hFLE1BQU1YO1FBQ1I7SUFDRjtJQUVBLE1BQU1ZLGlCQUFpQixDQUFDVCxLQUFhQyxRQUFnQkM7UUFDbkQsTUFBTTFCLFFBQVFQLEtBQUtRLFFBQVEsQ0FBQztRQUM1QixNQUFNMEIsaUJBQWlCRCxZQUFZLEdBQUdBLFVBQVUsQ0FBQyxFQUFFRixJQUFJLENBQUMsRUFBRUMsUUFBUSxHQUFHLEdBQUdELElBQUksQ0FBQyxFQUFFQyxRQUFRO1FBQ3ZGLE9BQU8sQ0FBQyxDQUFDekIsTUFBTUUsWUFBWSxFQUFFLENBQUN5QixlQUFlO0lBQy9DO0lBRUEsTUFBTU8sc0JBQXNCLENBQUNWLEtBQWFDLFFBQWdCQztRQUN4RCxNQUFNQyxpQkFBaUJELFlBQVksR0FBR0EsVUFBVSxDQUFDLEVBQUVGLElBQUksQ0FBQyxFQUFFQyxRQUFRLEdBQUcsR0FBR0QsSUFBSSxDQUFDLEVBQUVDLFFBQVE7UUFDdkZoQyxLQUFLMEIsUUFBUSxDQUFDO1lBQUNLLEtBQUtHO1lBQWdCaEIsTUFBTWhDLHNCQUFzQndELHFCQUFxQjtRQUFBO0lBQ3ZGO0lBRUEsTUFBTUMsNkJBQTZCLE9BQ2pDWCxRQUNBQyxXQUNBakIsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxNQUFNVCxRQUFRUCxLQUFLUSxRQUFRLENBQUM7UUFDNUIsTUFBTW9DLGNBQWNDLE1BQU1DLElBQUksQ0FBQ3ZDLE1BQU1xQyxXQUFXLElBQUksRUFBRTtRQUV0RCxJQUFHQSxZQUFZaEMsTUFBTSxLQUFLLEdBQUc7WUFDM0I7UUFDRjtRQUVBWixLQUFLMEIsUUFBUSxDQUFDO1lBQUNxQixZQUFZO1lBQU03QixNQUFNaEMsc0JBQXNCOEQsa0JBQWtCO1FBQUE7UUFFL0UsSUFBSTtZQUNGLE1BQU1DLGNBQWNMLFlBQ2pCeEIsR0FBRyxDQUFDLENBQUNXO2dCQUNKLE1BQU1tQixRQUFRbkIsSUFBSW9CLEtBQUssQ0FBQztnQkFDeEIsSUFBR2xCLFdBQVc7b0JBQ1osT0FBT2lCLE1BQU10QyxNQUFNLEtBQUssSUFBSXNDLEtBQUssQ0FBQyxFQUFFLEdBQUc7Z0JBQ3pDO2dCQUNBLE9BQU9BLE1BQU10QyxNQUFNLEtBQUssSUFBSXNDLEtBQUssQ0FBQyxFQUFFLEdBQUc7WUFDekMsR0FDQ0UsTUFBTSxDQUFDQztZQUVWLElBQUdKLFlBQVlyQyxNQUFNLEdBQUcsR0FBRztnQkFDekIsTUFBTXdCLGdCQUFnQmEsYUFBYWpCLFFBQVFDLFdBQVcsRUFBRSxFQUFFakI7WUFDNUQ7UUFDRixTQUFVO1lBQ1JoQixLQUFLMEIsUUFBUSxDQUFDO2dCQUFDcUIsWUFBWTtnQkFBTzdCLE1BQU1oQyxzQkFBc0I4RCxrQkFBa0I7WUFBQTtRQUNsRjtJQUNGO0lBRUEsT0FBTztRQUNMbEM7UUFDQWdCO1FBQ0FNO1FBQ0FJO1FBQ0FHO1FBQ0FGO1FBQ0FuQztRQUNBZ0QsMEJBQTBCckQsZ0JBQWdCc0QsYUFBYTtRQUN2REMsaUNBQWlDdkQsZ0JBQWdCd0QsYUFBYTtJQUNoRTtBQUNGLEVBQUUifQ==
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1RSQU5TTEFUSU9OX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3RyYW5zbGF0aW9uU3RvcmUuanMnO1xuaW1wb3J0IHthcHBNdXRhdGlvbiwgYXBwUXVlcnl9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS5qcyc7XG5pbXBvcnQge2NyZWF0ZUJhc2VBY3Rpb25zfSBmcm9tICcuLi8uLi91dGlscy9iYXNlQWN0aW9uRmFjdG9yeS5qcyc7XG5pbXBvcnQge2luaXRJMThuLCB1cGRhdGVJMThuUmVzb3VyY2VzfSBmcm9tICcuLi8uLi91dGlscy9pMThuLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtUcmFuc2xhdGlvbklucHV0VHlwZX0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdHJhbnNsYXRpb25BZGFwdGVyL3RyYW5zbGF0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7VHJhbnNsYXRpb25UeXBlfSBmcm9tICcuLi8uLi9zdG9yZXMvdHJhbnNsYXRpb25TdG9yZS5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5pbXBvcnQgdHlwZSB7QmFzZUFkYXB0ZXJPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JGYWN0b3J5LmpzJztcblxuY29uc3QgREFUQV9UWVBFID0gJ3RyYW5zbGF0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRpb25BY3Rpb25zT3B0aW9ucyB7XG4gIHRyYW5zbGF0aW9uQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEJhc2VBZGFwdGVyT3B0aW9ucykgPT4gYW55O1xuICB0cmFuc2xhdGlvbkFkYXB0ZXJPcHRpb25zPzogQmFzZUFkYXB0ZXJPcHRpb25zO1xuICBhdXRvU3luY0kxOG4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBUcmFuc2xhdGlvbkFwaVJlc3VsdHNUeXBlID0ge1xuICB0cmFuc2xhdGlvbnM6IHtcbiAgICBhZGRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uVHlwZVtdO1xuICAgIGdldFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25UeXBlW107XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uQWN0aW9ucyB7XG4gIGFkZFRyYW5zbGF0aW9uczogKFxuICAgIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25JbnB1dFR5cGVbXSxcbiAgICB0cmFuc2xhdGlvblByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VHJhbnNsYXRpb25UeXBlW10+O1xuICBnZXRUcmFuc2xhdGlvbjogKGtleTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRUcmFuc2xhdGlvbnM6IChcbiAgICBrZXlzOiBzdHJpbmdbXSxcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25Qcm9wcz86IHN0cmluZ1tdLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPFRyYW5zbGF0aW9uVHlwZVtdPjtcbiAgaGFzVHJhbnNsYXRpb246IChrZXk6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgcHJvY2Vzc1BlbmRpbmdUcmFuc2xhdGlvbnM6IChcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIHF1ZXVlVHJhbnNsYXRpb25LZXk6IChrZXk6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgc3luY1dpdGhJMThuOiAoKSA9PiB2b2lkO1xuICB1cGRhdGVUcmFuc2xhdGlvbkFkYXB0ZXI6IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBCYXNlQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlVHJhbnNsYXRpb25BZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IEJhc2VBZGFwdGVyT3B0aW9ucykgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRyYW5zbGF0aW9uVmFsaWRhdG9yID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogQmFzZUFkYXB0ZXJPcHRpb25zKSA9PiBpbnB1dCBhcyBUcmFuc2xhdGlvbklucHV0VHlwZTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRyYW5zbGF0aW9uQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFRyYW5zbGF0aW9uQWN0aW9uc09wdGlvbnNcbik6IFRyYW5zbGF0aW9uQWN0aW9ucyA9PiB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uQmFzZSA9IGNyZWF0ZUJhc2VBY3Rpb25zKGZsdXgsIGRlZmF1bHRUcmFuc2xhdGlvblZhbGlkYXRvciwge1xuICAgIC4uLihvcHRpb25zPy50cmFuc2xhdGlvbkFkYXB0ZXIgJiYge2FkYXB0ZXI6IG9wdGlvbnMudHJhbnNsYXRpb25BZGFwdGVyfSksXG4gICAgLi4uKG9wdGlvbnM/LnRyYW5zbGF0aW9uQWRhcHRlck9wdGlvbnMgJiYge2FkYXB0ZXJPcHRpb25zOiBvcHRpb25zLnRyYW5zbGF0aW9uQWRhcHRlck9wdGlvbnN9KVxuICB9KTtcblxuICBjb25zdCBzeW5jV2l0aEkxOG4gPSAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBmbHV4LmdldFN0YXRlKCd0cmFuc2xhdGlvbnMnKSBhcyBhbnk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gc3RhdGUudHJhbnNsYXRpb25zIHx8IHt9O1xuXG4gICAgaWYoT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZighb3B0aW9ucz8uYXV0b1N5bmNJMThuKSB7XG4gICAgICAgIGluaXRJMThuKHRyYW5zbGF0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVJMThuUmVzb3VyY2VzKHRyYW5zbGF0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZFRyYW5zbGF0aW9ucyA9IGFzeW5jIChcbiAgICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uSW5wdXRUeXBlW10sXG4gICAgdHJhbnNsYXRpb25Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFRyYW5zbGF0aW9uVHlwZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICB0cmFuc2xhdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnW1RyYW5zbGF0aW9uSW5wdXQhXSEnLFxuICAgICAgICAgIHZhbHVlOiB0cmFuc2xhdGlvbnMubWFwKCh0KSA9PiB0cmFuc2xhdGlvbkJhc2UudmFsaWRhdG9yKHQpKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVHJhbnNsYXRpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBhZGRUcmFuc2xhdGlvbnMgPSBkYXRhPy50cmFuc2xhdGlvbnM/LmFkZFRyYW5zbGF0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgdHJhbnNsYXRpb25zOiBhZGRUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgdHlwZTogVFJBTlNMQVRJT05fQ09OU1RBTlRTLkFERF9UUkFOU0xBVElPTlNfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgICAgaWYob3B0aW9ucz8uYXV0b1N5bmNJMThuKSB7XG4gICAgICAgICAgc3luY1dpdGhJMThuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxUcmFuc2xhdGlvblR5cGVbXT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdhZGRUcmFuc2xhdGlvbnMnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbJ2tleScsICdsb2NhbGUnLCAndmFsdWUnLCAnbmFtZXNwYWNlJywgLi4udHJhbnNsYXRpb25Qcm9wc10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuQUREX1RSQU5TTEFUSU9OU19FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndHJhbnNsYXRpb24uZ2V0VHJhbnNsYXRpb25zJyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFRyYW5zbGF0aW9uID0gKGtleTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBmbHV4LmdldFN0YXRlKCd0cmFuc2xhdGlvbnMnKSBhcyBhbnk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25LZXkgPSBuYW1lc3BhY2UgPyBgJHtuYW1lc3BhY2V9OiR7a2V5fToke2xvY2FsZX1gIDogYCR7a2V5fToke2xvY2FsZX1gO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gc3RhdGUudHJhbnNsYXRpb25zPy5bdHJhbnNsYXRpb25LZXldO1xuICAgIHJldHVybiB0cmFuc2xhdGlvbj8udmFsdWUgfHwgbnVsbDtcbiAgfTtcblxuICBjb25zdCBnZXRUcmFuc2xhdGlvbnMgPSBhc3luYyAoXG4gICAga2V5czogc3RyaW5nW10sXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nLFxuICAgIHRyYW5zbGF0aW9uUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxUcmFuc2xhdGlvblR5cGVbXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFRyYW5zbGF0aW9uVHlwZVtdPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3RyYW5zbGF0aW9uLmdldFRyYW5zbGF0aW9ucycsXG4gICAgICAgIHtrZXlzLCBsb2NhbGUsIG5hbWVzcGFjZSwgdHJhbnNsYXRpb25Qcm9wc30sXG4gICAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgICApO1xuXG4gICAgICBpZihjYWNoZWRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGtleXM6IHtcbiAgICAgICAgICB0eXBlOiAnW1N0cmluZyFdIScsXG4gICAgICAgICAgdmFsdWU6IGtleXNcbiAgICAgICAgfSxcbiAgICAgICAgbG9jYWxlOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICAgIHZhbHVlOiBsb2NhbGVcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKG5hbWVzcGFjZSAmJiB7XG4gICAgICAgICAgbmFtZXNwYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgIHZhbHVlOiBuYW1lc3BhY2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVHJhbnNsYXRpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBnZXRUcmFuc2xhdGlvbnMgPSBkYXRhPy50cmFuc2xhdGlvbnM/LmdldFRyYW5zbGF0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgdHJhbnNsYXRpb25zOiBnZXRUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgdHlwZTogVFJBTlNMQVRJT05fQ09OU1RBTlRTLkdFVF9UUkFOU0xBVElPTlNfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgICAgaWYob3B0aW9ucz8uYXV0b1N5bmNJMThuKSB7XG4gICAgICAgICAgc3luY1dpdGhJMThuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFF1ZXJ5PFRyYW5zbGF0aW9uVHlwZVtdPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2dldFRyYW5zbGF0aW9ucycsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsna2V5JywgJ2xvY2FsZScsICd2YWx1ZScsICduYW1lc3BhY2UnLCAuLi50cmFuc2xhdGlvblByb3BzXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBzZXRDYWNoZWRSZXF1ZXN0KGZsdXgsICd0cmFuc2xhdGlvbi5nZXRUcmFuc2xhdGlvbnMnLCB7a2V5cywgbG9jYWxlLCBuYW1lc3BhY2UsIHRyYW5zbGF0aW9uUHJvcHN9LCByZXN1bHQsIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVFJBTlNMQVRJT05fQ09OU1RBTlRTLkdFVF9UUkFOU0xBVElPTlNfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYXNUcmFuc2xhdGlvbiA9IChrZXk6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZmx1eC5nZXRTdGF0ZSgndHJhbnNsYXRpb25zJykgYXMgYW55O1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uS2V5ID0gbmFtZXNwYWNlID8gYCR7bmFtZXNwYWNlfToke2tleX06JHtsb2NhbGV9YCA6IGAke2tleX06JHtsb2NhbGV9YDtcbiAgICByZXR1cm4gISFzdGF0ZS50cmFuc2xhdGlvbnM/Llt0cmFuc2xhdGlvbktleV07XG4gIH07XG5cbiAgY29uc3QgcXVldWVUcmFuc2xhdGlvbktleSA9IChrZXk6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uS2V5ID0gbmFtZXNwYWNlID8gYCR7bmFtZXNwYWNlfToke2tleX06JHtsb2NhbGV9YCA6IGAke2tleX06JHtsb2NhbGV9YDtcbiAgICBmbHV4LmRpc3BhdGNoKHtrZXk6IHRyYW5zbGF0aW9uS2V5LCB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuUVVFVUVfVFJBTlNMQVRJT05fS0VZfSk7XG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc1BlbmRpbmdUcmFuc2xhdGlvbnMgPSBhc3luYyAoXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZmx1eC5nZXRTdGF0ZSgndHJhbnNsYXRpb25zJykgYXMgYW55O1xuICAgIGNvbnN0IHBlbmRpbmdLZXlzID0gQXJyYXkuZnJvbShzdGF0ZS5wZW5kaW5nS2V5cyB8fCBbXSkgYXMgc3RyaW5nW107XG5cbiAgICBpZihwZW5kaW5nS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHV4LmRpc3BhdGNoKHtpc1F1ZXVlaW5nOiB0cnVlLCB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuU0VUX1FVRVVFSU5HX1NUQVRFfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qga2V5c1RvRmV0Y2ggPSBwZW5kaW5nS2V5c1xuICAgICAgICAubWFwKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgaWYobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAzID8gcGFydHNbMV0gOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyID8gcGFydHNbMF0gOiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuXG4gICAgICBpZihrZXlzVG9GZXRjaC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IGdldFRyYW5zbGF0aW9ucyhrZXlzVG9GZXRjaCwgbG9jYWxlLCBuYW1lc3BhY2UsIFtdLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2lzUXVldWVpbmc6IGZhbHNlLCB0eXBlOiBUUkFOU0xBVElPTl9DT05TVEFOVFMuU0VUX1FVRVVFSU5HX1NUQVRFfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWRkVHJhbnNsYXRpb25zLFxuICAgIGdldFRyYW5zbGF0aW9uLFxuICAgIGdldFRyYW5zbGF0aW9ucyxcbiAgICBoYXNUcmFuc2xhdGlvbixcbiAgICBwcm9jZXNzUGVuZGluZ1RyYW5zbGF0aW9ucyxcbiAgICBxdWV1ZVRyYW5zbGF0aW9uS2V5LFxuICAgIHN5bmNXaXRoSTE4bixcbiAgICB1cGRhdGVUcmFuc2xhdGlvbkFkYXB0ZXI6IHRyYW5zbGF0aW9uQmFzZS51cGRhdGVBZGFwdGVyLFxuICAgIHVwZGF0ZVRyYW5zbGF0aW9uQWRhcHRlck9wdGlvbnM6IHRyYW5zbGF0aW9uQmFzZS51cGRhdGVPcHRpb25zXG4gIH07XG59O1xuIl0sIm5hbWVzIjpbIlRSQU5TTEFUSU9OX0NPTlNUQU5UUyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJjcmVhdGVCYXNlQWN0aW9ucyIsImluaXRJMThuIiwidXBkYXRlSTE4blJlc291cmNlcyIsImNsZWFyQ2FjaGVkUmVxdWVzdCIsImdldENhY2hlZFJlcXVlc3QiLCJzZXRDYWNoZWRSZXF1ZXN0IiwiREFUQV9UWVBFIiwiZGVmYXVsdFRyYW5zbGF0aW9uVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwiY3JlYXRlVHJhbnNsYXRpb25BY3Rpb25zIiwiZmx1eCIsInRyYW5zbGF0aW9uQmFzZSIsInRyYW5zbGF0aW9uQWRhcHRlciIsImFkYXB0ZXIiLCJ0cmFuc2xhdGlvbkFkYXB0ZXJPcHRpb25zIiwiYWRhcHRlck9wdGlvbnMiLCJzeW5jV2l0aEkxOG4iLCJzdGF0ZSIsImdldFN0YXRlIiwidHJhbnNsYXRpb25zIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImF1dG9TeW5jSTE4biIsImFkZFRyYW5zbGF0aW9ucyIsInRyYW5zbGF0aW9uUHJvcHMiLCJyZXF1ZXN0T3B0aW9ucyIsInF1ZXJ5VmFyaWFibGVzIiwidHlwZSIsInZhbHVlIiwibWFwIiwidCIsInZhbGlkYXRvciIsIm9uU3VjY2VzcyIsImRhdGEiLCJyZXN1bHQiLCJkaXNwYXRjaCIsIkFERF9UUkFOU0xBVElPTlNfU1VDQ0VTUyIsImVycm9yIiwiQUREX1RSQU5TTEFUSU9OU19FUlJPUiIsImdldFRyYW5zbGF0aW9uIiwia2V5IiwibG9jYWxlIiwibmFtZXNwYWNlIiwidHJhbnNsYXRpb25LZXkiLCJ0cmFuc2xhdGlvbiIsImdldFRyYW5zbGF0aW9ucyIsImNhY2hlZFJlc3VsdCIsIkdFVF9UUkFOU0xBVElPTlNfU1VDQ0VTUyIsIkdFVF9UUkFOU0xBVElPTlNfRVJST1IiLCJoYXNUcmFuc2xhdGlvbiIsInF1ZXVlVHJhbnNsYXRpb25LZXkiLCJRVUVVRV9UUkFOU0xBVElPTl9LRVkiLCJwcm9jZXNzUGVuZGluZ1RyYW5zbGF0aW9ucyIsInBlbmRpbmdLZXlzIiwiQXJyYXkiLCJmcm9tIiwiaXNRdWV1ZWluZyIsIlNFVF9RVUVVRUlOR19TVEFURSIsImtleXNUb0ZldGNoIiwicGFydHMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJ1cGRhdGVUcmFuc2xhdGlvbkFkYXB0ZXIiLCJ1cGRhdGVBZGFwdGVyIiwidXBkYXRlVHJhbnNsYXRpb25BZGFwdGVyT3B0aW9ucyIsInVwZGF0ZU9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLHFCQUFxQixRQUFPLG1DQUFtQztBQUN2RSxTQUFRQyxXQUFXLEVBQUVDLFFBQVEsUUFBTyxxQkFBcUI7QUFDekQsU0FBUUMsaUJBQWlCLFFBQU8sbUNBQW1DO0FBQ25FLFNBQVFDLFFBQVEsRUFBRUMsbUJBQW1CLFFBQU8sc0JBQXNCO0FBQ2xFLFNBQVFDLGtCQUFrQixFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLFFBQU8sOEJBQThCO0FBUW5HLE1BQU1DLFlBQVk7QUF5Q2xCLE1BQU1DLDhCQUE4QixDQUFDQyxPQUFnQkMsVUFBaUNEO0FBRXRGLE9BQU8sTUFBTUUsMkJBQTJCLENBQ3RDQyxNQUNBRjtJQUVBLE1BQU1HLGtCQUFrQlosa0JBQWtCVyxNQUFNSiw2QkFBNkI7UUFDM0UsR0FBSUUsU0FBU0ksc0JBQXNCO1lBQUNDLFNBQVNMLFFBQVFJLGtCQUFrQjtRQUFBLENBQUM7UUFDeEUsR0FBSUosU0FBU00sNkJBQTZCO1lBQUNDLGdCQUFnQlAsUUFBUU0seUJBQXlCO1FBQUEsQ0FBQztJQUMvRjtJQUVBLE1BQU1FLGVBQWU7UUFDbkIsTUFBTUMsUUFBUVAsS0FBS1EsUUFBUSxDQUFDO1FBQzVCLE1BQU1DLGVBQWVGLE1BQU1FLFlBQVksSUFBSSxDQUFDO1FBRTVDLElBQUdDLE9BQU9DLElBQUksQ0FBQ0YsY0FBY0csTUFBTSxHQUFHLEdBQUc7WUFDdkMsSUFBRyxDQUFDZCxTQUFTZSxjQUFjO2dCQUN6QnZCLFNBQVNtQjtZQUNYLE9BQU87Z0JBQ0xsQixvQkFBb0JrQjtZQUN0QjtRQUNGO0lBQ0Y7SUFFQSxNQUFNSyxrQkFBa0IsT0FDdEJMLGNBQ0FNLG1CQUE2QixFQUFFLEVBQy9CQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLElBQUk7WUFDRixNQUFNQyxpQkFBaUI7Z0JBQ3JCUixjQUFjO29CQUNaUyxNQUFNO29CQUNOQyxPQUFPVixhQUFhVyxHQUFHLENBQUMsQ0FBQ0MsSUFBTXBCLGdCQUFnQnFCLFNBQVMsQ0FBQ0Q7Z0JBQzNEO1lBQ0Y7WUFFQSxNQUFNRSxZQUFZLENBQUNDO2dCQUNqQixNQUFNVixrQkFBa0JVLE1BQU1mLGNBQWNLLG1CQUFtQixFQUFFO2dCQUNqRSxNQUFNVyxTQUFTekIsS0FBSzBCLFFBQVEsQ0FBQztvQkFDM0JqQixjQUFjSztvQkFDZEksTUFBTWhDLHNCQUFzQnlDLHdCQUF3QjtnQkFDdEQ7Z0JBQ0EsSUFBRzdCLFNBQVNlLGNBQWM7b0JBQ3hCUDtnQkFDRjtnQkFDQSxPQUFPbUI7WUFDVDtZQUVBLE9BQU8sTUFBTXRDLFlBQ1hhLE1BQ0EsbUJBQ0FMLFdBQ0FzQixnQkFDQTtnQkFBQztnQkFBTztnQkFBVTtnQkFBUzttQkFBZ0JGO2FBQWlCLEVBQzVEO2dCQUFDUTtZQUFTO1FBRWQsRUFBRSxPQUFNSyxPQUFPO1lBQ2I1QixLQUFLMEIsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT1YsTUFBTWhDLHNCQUFzQjJDLHNCQUFzQjtZQUFBO1lBQ3hFLE1BQU1EO1FBQ1IsU0FBVTtZQUNSLE1BQU1wQyxtQkFBbUJRLE1BQU07UUFDakM7SUFDRjtJQUVBLE1BQU04QixpQkFBaUIsQ0FBQ0MsS0FBYUMsUUFBZ0JDO1FBQ25ELE1BQU0xQixRQUFRUCxLQUFLUSxRQUFRLENBQUM7UUFDNUIsTUFBTTBCLGlCQUFpQkQsWUFBWSxHQUFHQSxVQUFVLENBQUMsRUFBRUYsSUFBSSxDQUFDLEVBQUVDLFFBQVEsR0FBRyxHQUFHRCxJQUFJLENBQUMsRUFBRUMsUUFBUTtRQUN2RixNQUFNRyxjQUFjNUIsTUFBTUUsWUFBWSxFQUFFLENBQUN5QixlQUFlO1FBQ3hELE9BQU9DLGFBQWFoQixTQUFTO0lBQy9CO0lBRUEsTUFBTWlCLGtCQUFrQixPQUN0QnpCLE1BQ0FxQixRQUNBQyxXQUNBbEIsbUJBQTZCLEVBQUUsRUFDL0JDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsSUFBSTtZQUNGLE1BQU1xQixlQUFlNUMsaUJBQ25CTyxNQUNBLCtCQUNBO2dCQUFDVztnQkFBTXFCO2dCQUFRQztnQkFBV2xCO1lBQWdCLEdBQzFDQztZQUdGLElBQUdxQixjQUFjO2dCQUNmLE9BQU9BO1lBQ1Q7WUFFQSxNQUFNcEIsaUJBQWlCO2dCQUNyQk4sTUFBTTtvQkFDSk8sTUFBTTtvQkFDTkMsT0FBT1I7Z0JBQ1Q7Z0JBQ0FxQixRQUFRO29CQUNOZCxNQUFNO29CQUNOQyxPQUFPYTtnQkFDVDtnQkFDQSxHQUFJQyxhQUFhO29CQUNmQSxXQUFXO3dCQUNUZixNQUFNO3dCQUNOQyxPQUFPYztvQkFDVDtnQkFDRixDQUFDO1lBQ0g7WUFFQSxNQUFNVixZQUFZLENBQUNDO2dCQUNqQixNQUFNWSxrQkFBa0JaLE1BQU1mLGNBQWMyQixtQkFBbUIsRUFBRTtnQkFDakUsTUFBTVgsU0FBU3pCLEtBQUswQixRQUFRLENBQUM7b0JBQzNCakIsY0FBYzJCO29CQUNkbEIsTUFBTWhDLHNCQUFzQm9ELHdCQUF3QjtnQkFDdEQ7Z0JBQ0EsSUFBR3hDLFNBQVNlLGNBQWM7b0JBQ3hCUDtnQkFDRjtnQkFDQSxPQUFPbUI7WUFDVDtZQUVBLE1BQU1BLFNBQVMsTUFBTXJDLFNBQ25CWSxNQUNBLG1CQUNBTCxXQUNBc0IsZ0JBQ0E7Z0JBQUM7Z0JBQU87Z0JBQVU7Z0JBQVM7bUJBQWdCRjthQUFpQixFQUM1RDtnQkFBQ1E7WUFBUztZQUdaLE9BQU8sTUFBTTdCLGlCQUFpQk0sTUFBTSwrQkFBK0I7Z0JBQUNXO2dCQUFNcUI7Z0JBQVFDO2dCQUFXbEI7WUFBZ0IsR0FBR1UsUUFBUVQ7UUFDMUgsRUFBRSxPQUFNWSxPQUFPO1lBQ2I1QixLQUFLMEIsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT1YsTUFBTWhDLHNCQUFzQnFELHNCQUFzQjtZQUFBO1lBQ3hFLE1BQU1YO1FBQ1I7SUFDRjtJQUVBLE1BQU1ZLGlCQUFpQixDQUFDVCxLQUFhQyxRQUFnQkM7UUFDbkQsTUFBTTFCLFFBQVFQLEtBQUtRLFFBQVEsQ0FBQztRQUM1QixNQUFNMEIsaUJBQWlCRCxZQUFZLEdBQUdBLFVBQVUsQ0FBQyxFQUFFRixJQUFJLENBQUMsRUFBRUMsUUFBUSxHQUFHLEdBQUdELElBQUksQ0FBQyxFQUFFQyxRQUFRO1FBQ3ZGLE9BQU8sQ0FBQyxDQUFDekIsTUFBTUUsWUFBWSxFQUFFLENBQUN5QixlQUFlO0lBQy9DO0lBRUEsTUFBTU8sc0JBQXNCLENBQUNWLEtBQWFDLFFBQWdCQztRQUN4RCxNQUFNQyxpQkFBaUJELFlBQVksR0FBR0EsVUFBVSxDQUFDLEVBQUVGLElBQUksQ0FBQyxFQUFFQyxRQUFRLEdBQUcsR0FBR0QsSUFBSSxDQUFDLEVBQUVDLFFBQVE7UUFDdkZoQyxLQUFLMEIsUUFBUSxDQUFDO1lBQUNLLEtBQUtHO1lBQWdCaEIsTUFBTWhDLHNCQUFzQndELHFCQUFxQjtRQUFBO0lBQ3ZGO0lBRUEsTUFBTUMsNkJBQTZCLE9BQ2pDWCxRQUNBQyxXQUNBakIsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxNQUFNVCxRQUFRUCxLQUFLUSxRQUFRLENBQUM7UUFDNUIsTUFBTW9DLGNBQWNDLE1BQU1DLElBQUksQ0FBQ3ZDLE1BQU1xQyxXQUFXLElBQUksRUFBRTtRQUV0RCxJQUFHQSxZQUFZaEMsTUFBTSxLQUFLLEdBQUc7WUFDM0I7UUFDRjtRQUVBWixLQUFLMEIsUUFBUSxDQUFDO1lBQUNxQixZQUFZO1lBQU03QixNQUFNaEMsc0JBQXNCOEQsa0JBQWtCO1FBQUE7UUFFL0UsSUFBSTtZQUNGLE1BQU1DLGNBQWNMLFlBQ2pCeEIsR0FBRyxDQUFDLENBQUNXO2dCQUNKLE1BQU1tQixRQUFRbkIsSUFBSW9CLEtBQUssQ0FBQztnQkFDeEIsSUFBR2xCLFdBQVc7b0JBQ1osT0FBT2lCLE1BQU10QyxNQUFNLEtBQUssSUFBSXNDLEtBQUssQ0FBQyxFQUFFLEdBQUc7Z0JBQ3pDO2dCQUNBLE9BQU9BLE1BQU10QyxNQUFNLEtBQUssSUFBSXNDLEtBQUssQ0FBQyxFQUFFLEdBQUc7WUFDekMsR0FDQ0UsTUFBTSxDQUFDQztZQUVWLElBQUdKLFlBQVlyQyxNQUFNLEdBQUcsR0FBRztnQkFDekIsTUFBTXdCLGdCQUFnQmEsYUFBYWpCLFFBQVFDLFdBQVcsRUFBRSxFQUFFakI7WUFDNUQ7UUFDRixTQUFVO1lBQ1JoQixLQUFLMEIsUUFBUSxDQUFDO2dCQUFDcUIsWUFBWTtnQkFBTzdCLE1BQU1oQyxzQkFBc0I4RCxrQkFBa0I7WUFBQTtRQUNsRjtJQUNGO0lBRUEsT0FBTztRQUNMbEM7UUFDQWdCO1FBQ0FNO1FBQ0FJO1FBQ0FHO1FBQ0FGO1FBQ0FuQztRQUNBZ0QsMEJBQTBCckQsZ0JBQWdCc0QsYUFBYTtRQUN2REMsaUNBQWlDdkQsZ0JBQWdCd0QsYUFBYTtJQUNoRTtBQUNGLEVBQUUifQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
2
|
import type { User } from '../../adapters/userAdapter/userAdapter.js';
|
|
3
3
|
import type { SessionType } from '../../utils/api.js';
|
|
4
|
-
import type { BaseAdapterOptions } from '../../utils/validatorFactory.js';
|
|
5
4
|
import type { ActionRequestOptions } from '../../utils/requestCache.js';
|
|
5
|
+
import type { BaseAdapterOptions } from '../../utils/validatorFactory.js';
|
|
6
6
|
export type UserAdapterOptions = BaseAdapterOptions;
|
|
7
7
|
export interface UserActionsOptions {
|
|
8
8
|
readonly userAdapter?: (input: unknown, options?: UserAdapterOptions) => any;
|
|
@@ -28,6 +28,8 @@ export interface UserApiResultsType {
|
|
|
28
28
|
readonly activeCount?: number;
|
|
29
29
|
readonly addUser?: Partial<User>;
|
|
30
30
|
readonly confirmCode?: boolean;
|
|
31
|
+
readonly completeBillingSetupSession?: Partial<User>;
|
|
32
|
+
readonly createBillingSetupSession?: string;
|
|
31
33
|
readonly deactivate?: Partial<User>;
|
|
32
34
|
readonly forgotPassword?: boolean;
|
|
33
35
|
readonly itemById?: Partial<User>;
|
|
@@ -46,7 +48,6 @@ export interface UserApiResultsType {
|
|
|
46
48
|
readonly refreshSession?: SessionType;
|
|
47
49
|
readonly remove?: Partial<User>;
|
|
48
50
|
readonly resetPassword?: boolean;
|
|
49
|
-
readonly saveBillingCard?: Partial<User>;
|
|
50
51
|
readonly sendVerificationEmail?: boolean;
|
|
51
52
|
readonly session?: Partial<User>;
|
|
52
53
|
readonly signIn?: Partial<User>;
|
|
@@ -57,13 +58,15 @@ export interface UserApiResultsType {
|
|
|
57
58
|
readonly updatePlan?: Partial<User>;
|
|
58
59
|
};
|
|
59
60
|
}
|
|
60
|
-
export interface
|
|
61
|
+
export interface UserActions {
|
|
61
62
|
addUser: (userInput: Partial<User>, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
62
63
|
confirmCode: (code: number, { type, value }: {
|
|
63
64
|
type: 'email' | 'phone';
|
|
64
65
|
value: string;
|
|
65
66
|
}, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
66
67
|
confirmSignUp: (code: string, type: 'email' | 'phone', requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
68
|
+
completeBillingSetupSession: (sessionId: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
69
|
+
createBillingSetupSession: (returnUrl: string, requestOptions?: ActionRequestOptions) => Promise<string>;
|
|
67
70
|
currentAuthenticatedUser: (requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
68
71
|
list: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
69
72
|
listByConnection: (userId: string, from?: number, to?: number, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
@@ -83,7 +86,6 @@ export interface userActions {
|
|
|
83
86
|
search: (query: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
84
87
|
sendVerificationEmail: (email: string, emailOptions?: VerificationEmailOptions, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
85
88
|
session: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
86
|
-
saveBillingCard: (card: Record<string, unknown>, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
87
89
|
signIn: (user: Partial<User>, expires?: number, requestOptions?: ActionRequestOptions) => Promise<SessionType>;
|
|
88
90
|
signOut: (requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
89
91
|
signUp: (userInput: Partial<User>, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
@@ -93,4 +95,4 @@ export interface userActions {
|
|
|
93
95
|
updateUserAdapter: (adapter: (input: unknown, options?: UserAdapterOptions) => any) => void;
|
|
94
96
|
updateUserAdapterOptions: (options: UserAdapterOptions) => void;
|
|
95
97
|
}
|
|
96
|
-
export declare const createUserActions: (flux: FluxFramework, options?: UserActionsOptions) =>
|
|
98
|
+
export declare const createUserActions: (flux: FluxFramework, options?: UserActionsOptions) => UserActions;
|