@growsober/sdk 1.0.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 +276 -0
- package/dist/__tests__/e2e.test.d.ts +7 -0
- package/dist/__tests__/e2e.test.js +472 -0
- package/dist/api/client.d.ts +11 -0
- package/dist/api/client.js +61 -0
- package/dist/api/mutations/admin.d.ts +167 -0
- package/dist/api/mutations/admin.js +326 -0
- package/dist/api/mutations/ambassadors.d.ts +52 -0
- package/dist/api/mutations/ambassadors.js +148 -0
- package/dist/api/mutations/auth.d.ts +267 -0
- package/dist/api/mutations/auth.js +332 -0
- package/dist/api/mutations/bookings.d.ts +59 -0
- package/dist/api/mutations/bookings.js +143 -0
- package/dist/api/mutations/event-chat.d.ts +35 -0
- package/dist/api/mutations/event-chat.js +147 -0
- package/dist/api/mutations/events.d.ts +87 -0
- package/dist/api/mutations/events.js +205 -0
- package/dist/api/mutations/grow90.d.ts +36 -0
- package/dist/api/mutations/grow90.js +132 -0
- package/dist/api/mutations/hubs.d.ts +111 -0
- package/dist/api/mutations/hubs.js +240 -0
- package/dist/api/mutations/index.d.ts +22 -0
- package/dist/api/mutations/index.js +39 -0
- package/dist/api/mutations/jack.d.ts +61 -0
- package/dist/api/mutations/jack.js +104 -0
- package/dist/api/mutations/library.d.ts +67 -0
- package/dist/api/mutations/library.js +168 -0
- package/dist/api/mutations/map.d.ts +153 -0
- package/dist/api/mutations/map.js +181 -0
- package/dist/api/mutations/matching.d.ts +130 -0
- package/dist/api/mutations/matching.js +204 -0
- package/dist/api/mutations/notifications.d.ts +63 -0
- package/dist/api/mutations/notifications.js +106 -0
- package/dist/api/mutations/offers.d.ts +26 -0
- package/dist/api/mutations/offers.js +47 -0
- package/dist/api/mutations/subscriptions.d.ts +127 -0
- package/dist/api/mutations/subscriptions.js +140 -0
- package/dist/api/mutations/support.d.ts +165 -0
- package/dist/api/mutations/support.js +307 -0
- package/dist/api/mutations/users.d.ts +211 -0
- package/dist/api/mutations/users.js +261 -0
- package/dist/api/queries/admin.d.ts +257 -0
- package/dist/api/queries/admin.js +320 -0
- package/dist/api/queries/ambassadors.d.ts +53 -0
- package/dist/api/queries/ambassadors.js +98 -0
- package/dist/api/queries/auth.d.ts +16 -0
- package/dist/api/queries/auth.js +25 -0
- package/dist/api/queries/bookings.d.ts +91 -0
- package/dist/api/queries/bookings.js +102 -0
- package/dist/api/queries/businesses.d.ts +212 -0
- package/dist/api/queries/businesses.js +154 -0
- package/dist/api/queries/event-chat.d.ts +19 -0
- package/dist/api/queries/event-chat.js +75 -0
- package/dist/api/queries/events.d.ts +322 -0
- package/dist/api/queries/events.js +221 -0
- package/dist/api/queries/grow90.d.ts +26 -0
- package/dist/api/queries/grow90.js +85 -0
- package/dist/api/queries/hubs.d.ts +165 -0
- package/dist/api/queries/hubs.js +143 -0
- package/dist/api/queries/index.d.ts +23 -0
- package/dist/api/queries/index.js +40 -0
- package/dist/api/queries/jack.d.ts +63 -0
- package/dist/api/queries/jack.js +92 -0
- package/dist/api/queries/library.d.ts +132 -0
- package/dist/api/queries/library.js +120 -0
- package/dist/api/queries/map.d.ts +216 -0
- package/dist/api/queries/map.js +278 -0
- package/dist/api/queries/matching.d.ts +136 -0
- package/dist/api/queries/matching.js +161 -0
- package/dist/api/queries/notifications.d.ts +78 -0
- package/dist/api/queries/notifications.js +88 -0
- package/dist/api/queries/offers.d.ts +91 -0
- package/dist/api/queries/offers.js +103 -0
- package/dist/api/queries/subscriptions.d.ts +56 -0
- package/dist/api/queries/subscriptions.js +73 -0
- package/dist/api/queries/support.d.ts +106 -0
- package/dist/api/queries/support.js +202 -0
- package/dist/api/queries/users.d.ts +293 -0
- package/dist/api/queries/users.js +370 -0
- package/dist/api/types.d.ts +464 -0
- package/dist/api/types.js +9 -0
- package/dist/hooks/useAuth.d.ts +5 -0
- package/dist/hooks/useAuth.js +39 -0
- package/dist/hooks/useUser.d.ts +43 -0
- package/dist/hooks/useUser.js +44 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +67 -0
- package/package.json +62 -0
- package/src/__tests__/e2e.test.ts +502 -0
- package/src/api/client.ts +71 -0
- package/src/api/mutations/admin.ts +531 -0
- package/src/api/mutations/ambassadors.ts +185 -0
- package/src/api/mutations/auth.ts +350 -0
- package/src/api/mutations/bookings.ts +190 -0
- package/src/api/mutations/event-chat.ts +177 -0
- package/src/api/mutations/events.ts +273 -0
- package/src/api/mutations/grow90.ts +169 -0
- package/src/api/mutations/hubs.ts +385 -0
- package/src/api/mutations/index.ts +23 -0
- package/src/api/mutations/jack.ts +130 -0
- package/src/api/mutations/library.ts +212 -0
- package/src/api/mutations/map.ts +230 -0
- package/src/api/mutations/matching.ts +271 -0
- package/src/api/mutations/notifications.ts +114 -0
- package/src/api/mutations/offers.ts +73 -0
- package/src/api/mutations/subscriptions.ts +162 -0
- package/src/api/mutations/support.ts +390 -0
- package/src/api/mutations/users.ts +271 -0
- package/src/api/queries/admin.ts +480 -0
- package/src/api/queries/ambassadors.ts +139 -0
- package/src/api/queries/auth.ts +24 -0
- package/src/api/queries/bookings.ts +135 -0
- package/src/api/queries/businesses.ts +203 -0
- package/src/api/queries/event-chat.ts +78 -0
- package/src/api/queries/events.ts +272 -0
- package/src/api/queries/grow90.ts +98 -0
- package/src/api/queries/hubs.ts +211 -0
- package/src/api/queries/index.ts +24 -0
- package/src/api/queries/jack.ts +127 -0
- package/src/api/queries/library.ts +166 -0
- package/src/api/queries/map.ts +331 -0
- package/src/api/queries/matching.ts +238 -0
- package/src/api/queries/notifications.ts +103 -0
- package/src/api/queries/offers.ts +136 -0
- package/src/api/queries/subscriptions.ts +91 -0
- package/src/api/queries/support.ts +235 -0
- package/src/api/queries/users.ts +393 -0
- package/src/api/types.ts +596 -0
- package/src/index.ts +57 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Map Query Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query hooks for map-related read operations.
|
|
6
|
+
* These hooks handle fetching map data including users, events, and businesses
|
|
7
|
+
* for display on the member map feature.
|
|
8
|
+
*
|
|
9
|
+
* @module api/queries/map
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.mapKeys = void 0;
|
|
13
|
+
exports.useMapMembers = useMapMembers;
|
|
14
|
+
exports.useMapEvents = useMapEvents;
|
|
15
|
+
exports.useMapHubs = useMapHubs;
|
|
16
|
+
exports.useMapBusinesses = useMapBusinesses;
|
|
17
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
18
|
+
const client_1 = require("../client");
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// QUERY KEYS
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Query key factory for map-related queries
|
|
24
|
+
*/
|
|
25
|
+
exports.mapKeys = {
|
|
26
|
+
all: ['map'],
|
|
27
|
+
members: (params) => [...exports.mapKeys.all, 'members', params],
|
|
28
|
+
events: (params) => [...exports.mapKeys.all, 'events', params],
|
|
29
|
+
hubs: (params) => [...exports.mapKeys.all, 'hubs', params],
|
|
30
|
+
businesses: (params) => [...exports.mapKeys.all, 'businesses', params],
|
|
31
|
+
};
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// QUERY HOOKS
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/**
|
|
36
|
+
* Get members for map display
|
|
37
|
+
*
|
|
38
|
+
* @description
|
|
39
|
+
* Retrieves users who have opted to be visible on the member map.
|
|
40
|
+
* Only shows users who have enabled "open to meet" and shared their location.
|
|
41
|
+
* Premium feature.
|
|
42
|
+
*
|
|
43
|
+
* @endpoint GET /api/v1/map/members
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* import { useMapMembers } from '@growsober/sdk';
|
|
48
|
+
*
|
|
49
|
+
* function MemberMap() {
|
|
50
|
+
* const { data: members, isLoading } = useMapMembers({
|
|
51
|
+
* lat: 51.5074,
|
|
52
|
+
* lng: -0.1278,
|
|
53
|
+
* radius: 50, // 50km radius
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* if (isLoading) return <MapLoader />;
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <Map>
|
|
60
|
+
* {members?.map(member => (
|
|
61
|
+
* <Marker
|
|
62
|
+
* key={member.id}
|
|
63
|
+
* position={[member.locationLat, member.locationLong]}
|
|
64
|
+
* >
|
|
65
|
+
* <Avatar src={member.avatar} />
|
|
66
|
+
* </Marker>
|
|
67
|
+
* ))}
|
|
68
|
+
* </Map>
|
|
69
|
+
* );
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @param params - Location and filter parameters
|
|
74
|
+
* @param options - TanStack Query options
|
|
75
|
+
* @returns TanStack Query result with array of map users
|
|
76
|
+
*/
|
|
77
|
+
function useMapMembers(params, options) {
|
|
78
|
+
return (0, react_query_1.useQuery)({
|
|
79
|
+
queryKey: exports.mapKeys.members(params),
|
|
80
|
+
queryFn: async () => {
|
|
81
|
+
const client = (0, client_1.getApiClient)();
|
|
82
|
+
const response = await client.get('/api/v1/map/members', {
|
|
83
|
+
params: {
|
|
84
|
+
lat: params.lat,
|
|
85
|
+
lng: params.lng,
|
|
86
|
+
radius: params.radius,
|
|
87
|
+
hubId: params.hubId,
|
|
88
|
+
openToMeetOnly: params.openToMeetOnly,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
return response.data;
|
|
92
|
+
},
|
|
93
|
+
enabled: params.lat !== undefined && params.lng !== undefined,
|
|
94
|
+
...options,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get events for map display
|
|
99
|
+
*
|
|
100
|
+
* @description
|
|
101
|
+
* Retrieves events with location data for display on the map.
|
|
102
|
+
* Shows upcoming events within the specified radius.
|
|
103
|
+
*
|
|
104
|
+
* @endpoint GET /api/v1/map/events
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```tsx
|
|
108
|
+
* import { useMapEvents } from '@growsober/sdk';
|
|
109
|
+
*
|
|
110
|
+
* function EventMap() {
|
|
111
|
+
* const { data: events, isLoading } = useMapEvents({
|
|
112
|
+
* lat: 51.5074,
|
|
113
|
+
* lng: -0.1278,
|
|
114
|
+
* radius: 25,
|
|
115
|
+
* upcoming: true,
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* return (
|
|
119
|
+
* <Map>
|
|
120
|
+
* {events?.map(event => (
|
|
121
|
+
* <Marker
|
|
122
|
+
* key={event.id}
|
|
123
|
+
* position={[event.locationLat, event.locationLong]}
|
|
124
|
+
* icon="event"
|
|
125
|
+
* >
|
|
126
|
+
* <EventPopup event={event} />
|
|
127
|
+
* </Marker>
|
|
128
|
+
* ))}
|
|
129
|
+
* </Map>
|
|
130
|
+
* );
|
|
131
|
+
* }
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* @param params - Location and filter parameters
|
|
135
|
+
* @param options - TanStack Query options
|
|
136
|
+
* @returns TanStack Query result with array of map events
|
|
137
|
+
*/
|
|
138
|
+
function useMapEvents(params, options) {
|
|
139
|
+
return (0, react_query_1.useQuery)({
|
|
140
|
+
queryKey: exports.mapKeys.events(params),
|
|
141
|
+
queryFn: async () => {
|
|
142
|
+
const client = (0, client_1.getApiClient)();
|
|
143
|
+
const response = await client.get('/api/v1/map/events', {
|
|
144
|
+
params: {
|
|
145
|
+
lat: params.lat,
|
|
146
|
+
lng: params.lng,
|
|
147
|
+
radius: params.radius,
|
|
148
|
+
hubId: params.hubId,
|
|
149
|
+
upcoming: params.upcoming,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
return response.data;
|
|
153
|
+
},
|
|
154
|
+
enabled: params.lat !== undefined && params.lng !== undefined,
|
|
155
|
+
...options,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get hubs for map display
|
|
160
|
+
*
|
|
161
|
+
* @description
|
|
162
|
+
* Retrieves hubs with location data for display on the map.
|
|
163
|
+
* Shows active hubs within the specified radius.
|
|
164
|
+
*
|
|
165
|
+
* @endpoint GET /api/v1/map/hubs
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```tsx
|
|
169
|
+
* import { useMapHubs } from '@growsober/sdk';
|
|
170
|
+
*
|
|
171
|
+
* function HubMap() {
|
|
172
|
+
* const { data: hubs, isLoading } = useMapHubs({
|
|
173
|
+
* lat: 51.5074,
|
|
174
|
+
* lng: -0.1278,
|
|
175
|
+
* radius: 50,
|
|
176
|
+
* });
|
|
177
|
+
*
|
|
178
|
+
* return (
|
|
179
|
+
* <Map>
|
|
180
|
+
* {hubs?.map(hub => (
|
|
181
|
+
* <Marker
|
|
182
|
+
* key={hub.id}
|
|
183
|
+
* position={[hub.locationLat, hub.locationLong]}
|
|
184
|
+
* icon="hub"
|
|
185
|
+
* >
|
|
186
|
+
* <HubPopup hub={hub} />
|
|
187
|
+
* </Marker>
|
|
188
|
+
* ))}
|
|
189
|
+
* </Map>
|
|
190
|
+
* );
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @param params - Location and filter parameters
|
|
195
|
+
* @param options - TanStack Query options
|
|
196
|
+
* @returns TanStack Query result with array of map hubs
|
|
197
|
+
*/
|
|
198
|
+
function useMapHubs(params, options) {
|
|
199
|
+
return (0, react_query_1.useQuery)({
|
|
200
|
+
queryKey: exports.mapKeys.hubs(params),
|
|
201
|
+
queryFn: async () => {
|
|
202
|
+
const client = (0, client_1.getApiClient)();
|
|
203
|
+
const response = await client.get('/api/v1/map/hubs', {
|
|
204
|
+
params: {
|
|
205
|
+
lat: params.lat,
|
|
206
|
+
lng: params.lng,
|
|
207
|
+
radius: params.radius,
|
|
208
|
+
city: params.city,
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
return response.data;
|
|
212
|
+
},
|
|
213
|
+
enabled: params.lat !== undefined && params.lng !== undefined,
|
|
214
|
+
...options,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get businesses for map display
|
|
219
|
+
*
|
|
220
|
+
* @description
|
|
221
|
+
* Retrieves partner businesses with location data for display on the map.
|
|
222
|
+
* Can filter by type and whether they serve alcohol-free drinks.
|
|
223
|
+
*
|
|
224
|
+
* @endpoint GET /api/v1/map/businesses
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```tsx
|
|
228
|
+
* import { useMapBusinesses } from '@growsober/sdk';
|
|
229
|
+
*
|
|
230
|
+
* function BusinessMap() {
|
|
231
|
+
* const { data: businesses, isLoading } = useMapBusinesses({
|
|
232
|
+
* lat: 51.5074,
|
|
233
|
+
* lng: -0.1278,
|
|
234
|
+
* radius: 10,
|
|
235
|
+
* afDrinksOnly: true, // Only show AF-friendly venues
|
|
236
|
+
* });
|
|
237
|
+
*
|
|
238
|
+
* return (
|
|
239
|
+
* <Map>
|
|
240
|
+
* {businesses?.map(business => (
|
|
241
|
+
* <Marker
|
|
242
|
+
* key={business.id}
|
|
243
|
+
* position={[business.locationLat, business.locationLong]}
|
|
244
|
+
* icon={business.hasAfDrinks ? 'af-venue' : 'venue'}
|
|
245
|
+
* >
|
|
246
|
+
* <BusinessPopup business={business} />
|
|
247
|
+
* </Marker>
|
|
248
|
+
* ))}
|
|
249
|
+
* </Map>
|
|
250
|
+
* );
|
|
251
|
+
* }
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* @param params - Location and filter parameters
|
|
255
|
+
* @param options - TanStack Query options
|
|
256
|
+
* @returns TanStack Query result with array of map businesses
|
|
257
|
+
*/
|
|
258
|
+
function useMapBusinesses(params, options) {
|
|
259
|
+
return (0, react_query_1.useQuery)({
|
|
260
|
+
queryKey: exports.mapKeys.businesses(params),
|
|
261
|
+
queryFn: async () => {
|
|
262
|
+
const client = (0, client_1.getApiClient)();
|
|
263
|
+
const response = await client.get('/api/v1/map/businesses', {
|
|
264
|
+
params: {
|
|
265
|
+
lat: params.lat,
|
|
266
|
+
lng: params.lng,
|
|
267
|
+
radius: params.radius,
|
|
268
|
+
type: params.type,
|
|
269
|
+
afDrinksOnly: params.afDrinksOnly,
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
return response.data;
|
|
273
|
+
},
|
|
274
|
+
enabled: params.lat !== undefined && params.lng !== undefined,
|
|
275
|
+
...options,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL21hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7OztBQTJHSCxzQ0FzQkM7QUEyQ0Qsb0NBc0JDO0FBMENELGdDQXFCQztBQTJDRCw0Q0FzQkM7QUFoVUQsdURBQWtGO0FBQ2xGLHNDQUF5QztBQVF6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUUvRTs7R0FFRztBQUNVLFFBQUEsT0FBTyxHQUFHO0lBQ3JCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBVTtJQUNyQixPQUFPLEVBQUUsQ0FBQyxNQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFVO0lBQ3BGLE1BQU0sRUFBRSxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQVU7SUFDakYsSUFBSSxFQUFFLENBQUMsTUFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBVTtJQUMzRSxVQUFVLEVBQUUsQ0FBQyxNQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFVO0NBQzlGLENBQUM7QUFxQ0YsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixNQUF3QixFQUN4QixPQUEwRTtJQUUxRSxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxlQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxPQUFP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QTJCLEVBQzNCLE9BQThFO0lBRTlFLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGVBQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxLQUFLLElBQW9DLEVBQUU7WUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUF3Qix3QkFBd0IsRUFBRTtnQkFDakYsTUFBTSxFQUFFO29CQUNOLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztvQkFDZixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO29CQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtpQkFDbEM7YUFDRixDQUFDLENBQUM7WUFDSCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVM7UUFDN0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFwIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIG1hcC1yZWxhdGVkIHJlYWQgb3BlcmF0aW9ucy5cbiAqIFRoZXNlIGhvb2tzIGhhbmRsZSBmZXRjaGluZyBtYXAgZGF0YSBpbmNsdWRpbmcgdXNlcnMsIGV2ZW50cywgYW5kIGJ1c2luZXNzZXNcbiAqIGZvciBkaXNwbGF5IG9uIHRoZSBtZW1iZXIgbWFwIGZlYXR1cmUuXG4gKlxuICogQG1vZHVsZSBhcGkvcXVlcmllcy9tYXBcbiAqL1xuXG5pbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zLCBVc2VRdWVyeVJlc3VsdCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1xuICBNYXBVc2VyUmVzcG9uc2UsXG4gIE1hcEV2ZW50UmVzcG9uc2UsXG4gIE1hcEh1YlJlc3BvbnNlLFxuICBNYXBCdXNpbmVzc1Jlc3BvbnNlLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBRdWVyeSBrZXkgZmFjdG9yeSBmb3IgbWFwLXJlbGF0ZWQgcXVlcmllc1xuICovXG5leHBvcnQgY29uc3QgbWFwS2V5cyA9IHtcbiAgYWxsOiBbJ21hcCddIGFzIGNvbnN0LFxuICBtZW1iZXJzOiAocGFyYW1zPzogTWFwTWVtYmVyc1BhcmFtcykgPT4gWy4uLm1hcEtleXMuYWxsLCAnbWVtYmVycycsIHBhcmFtc10gYXMgY29uc3QsXG4gIGV2ZW50czogKHBhcmFtcz86IE1hcEV2ZW50c1BhcmFtcykgPT4gWy4uLm1hcEtleXMuYWxsLCAnZXZlbnRzJywgcGFyYW1zXSBhcyBjb25zdCxcbiAgaHViczogKHBhcmFtcz86IE1hcEh1YnNQYXJhbXMpID0+IFsuLi5tYXBLZXlzLmFsbCwgJ2h1YnMnLCBwYXJhbXNdIGFzIGNvbnN0LFxuICBidXNpbmVzc2VzOiAocGFyYW1zPzogTWFwQnVzaW5lc3Nlc1BhcmFtcykgPT4gWy4uLm1hcEtleXMuYWxsLCAnYnVzaW5lc3NlcycsIHBhcmFtc10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQQVJBTSBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcE1lbWJlcnNQYXJhbXMge1xuICBsYXQ6IG51bWJlcjtcbiAgbG5nOiBudW1iZXI7XG4gIHJhZGl1cz86IG51bWJlcjsgLy8ga21cbiAgaHViSWQ/OiBzdHJpbmc7XG4gIG9wZW5Ub01lZXRPbmx5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBFdmVudHNQYXJhbXMge1xuICBsYXQ6IG51bWJlcjtcbiAgbG5nOiBudW1iZXI7XG4gIHJhZGl1cz86IG51bWJlcjsgLy8ga21cbiAgaHViSWQ/OiBzdHJpbmc7XG4gIHVwY29taW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBIdWJzUGFyYW1zIHtcbiAgbGF0OiBudW1iZXI7XG4gIGxuZzogbnVtYmVyO1xuICByYWRpdXM/OiBudW1iZXI7IC8vIGttXG4gIGNpdHk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQnVzaW5lc3Nlc1BhcmFtcyB7XG4gIGxhdDogbnVtYmVyO1xuICBsbmc6IG51bWJlcjtcbiAgcmFkaXVzPzogbnVtYmVyOyAvLyBrbVxuICB0eXBlPzogc3RyaW5nO1xuICBhZkRyaW5rc09ubHk/OiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBtZW1iZXJzIGZvciBtYXAgZGlzcGxheVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0cmlldmVzIHVzZXJzIHdobyBoYXZlIG9wdGVkIHRvIGJlIHZpc2libGUgb24gdGhlIG1lbWJlciBtYXAuXG4gKiBPbmx5IHNob3dzIHVzZXJzIHdobyBoYXZlIGVuYWJsZWQgXCJvcGVuIHRvIG1lZXRcIiBhbmQgc2hhcmVkIHRoZWlyIGxvY2F0aW9uLlxuICogUHJlbWl1bSBmZWF0dXJlLlxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9tYXAvbWVtYmVyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZU1hcE1lbWJlcnMgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gTWVtYmVyTWFwKCkge1xuICogICBjb25zdCB7IGRhdGE6IG1lbWJlcnMsIGlzTG9hZGluZyB9ID0gdXNlTWFwTWVtYmVycyh7XG4gKiAgICAgbGF0OiA1MS41MDc0LFxuICogICAgIGxuZzogLTAuMTI3OCxcbiAqICAgICByYWRpdXM6IDUwLCAvLyA1MGttIHJhZGl1c1xuICogICB9KTtcbiAqXG4gKiAgIGlmIChpc0xvYWRpbmcpIHJldHVybiA8TWFwTG9hZGVyIC8+O1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8TWFwPlxuICogICAgICAge21lbWJlcnM/Lm1hcChtZW1iZXIgPT4gKFxuICogICAgICAgICA8TWFya2VyXG4gKiAgICAgICAgICAga2V5PXttZW1iZXIuaWR9XG4gKiAgICAgICAgICAgcG9zaXRpb249e1ttZW1iZXIubG9jYXRpb25MYXQsIG1lbWJlci5sb2NhdGlvbkxvbmddfVxuICogICAgICAgICA+XG4gKiAgICAgICAgICAgPEF2YXRhciBzcmM9e21lbWJlci5hdmF0YXJ9IC8+XG4gKiAgICAgICAgIDwvTWFya2VyPlxuICogICAgICAgKSl9XG4gKiAgICAgPC9NYXA+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gTG9jYXRpb24gYW5kIGZpbHRlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IHJlc3VsdCB3aXRoIGFycmF5IG9mIG1hcCB1c2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWFwTWVtYmVycyhcbiAgcGFyYW1zOiBNYXBNZW1iZXJzUGFyYW1zLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8TWFwVXNlclJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8TWFwVXNlclJlc3BvbnNlW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbWFwS2V5cy5tZW1iZXJzKHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8TWFwVXNlclJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PE1hcFVzZXJSZXNwb25zZVtdPignL2FwaS92MS9tYXAvbWVtYmVycycsIHtcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgbGF0OiBwYXJhbXMubGF0LFxuICAgICAgICAgIGxuZzogcGFyYW1zLmxuZyxcbiAgICAgICAgICByYWRpdXM6IHBhcmFtcy5yYWRpdXMsXG4gICAgICAgICAgaHViSWQ6IHBhcmFtcy5odWJJZCxcbiAgICAgICAgICBvcGVuVG9NZWV0T25seTogcGFyYW1zLm9wZW5Ub01lZXRPbmx5LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IHBhcmFtcy5sYXQgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXMubG5nICE9PSB1bmRlZmluZWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGV2ZW50cyBmb3IgbWFwIGRpc3BsYXlcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHJpZXZlcyBldmVudHMgd2l0aCBsb2NhdGlvbiBkYXRhIGZvciBkaXNwbGF5IG9uIHRoZSBtYXAuXG4gKiBTaG93cyB1cGNvbWluZyBldmVudHMgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFkaXVzLlxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9tYXAvZXZlbnRzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlTWFwRXZlbnRzIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGZ1bmN0aW9uIEV2ZW50TWFwKCkge1xuICogICBjb25zdCB7IGRhdGE6IGV2ZW50cywgaXNMb2FkaW5nIH0gPSB1c2VNYXBFdmVudHMoe1xuICogICAgIGxhdDogNTEuNTA3NCxcbiAqICAgICBsbmc6IC0wLjEyNzgsXG4gKiAgICAgcmFkaXVzOiAyNSxcbiAqICAgICB1cGNvbWluZzogdHJ1ZSxcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxNYXA+XG4gKiAgICAgICB7ZXZlbnRzPy5tYXAoZXZlbnQgPT4gKFxuICogICAgICAgICA8TWFya2VyXG4gKiAgICAgICAgICAga2V5PXtldmVudC5pZH1cbiAqICAgICAgICAgICBwb3NpdGlvbj17W2V2ZW50LmxvY2F0aW9uTGF0LCBldmVudC5sb2NhdGlvbkxvbmddfVxuICogICAgICAgICAgIGljb249XCJldmVudFwiXG4gKiAgICAgICAgID5cbiAqICAgICAgICAgICA8RXZlbnRQb3B1cCBldmVudD17ZXZlbnR9IC8+XG4gKiAgICAgICAgIDwvTWFya2VyPlxuICogICAgICAgKSl9XG4gKiAgICAgPC9NYXA+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gTG9jYXRpb24gYW5kIGZpbHRlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IHJlc3VsdCB3aXRoIGFycmF5IG9mIG1hcCBldmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1hcEV2ZW50cyhcbiAgcGFyYW1zOiBNYXBFdmVudHNQYXJhbXMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxNYXBFdmVudFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8TWFwRXZlbnRSZXNwb25zZVtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1hcEtleXMuZXZlbnRzKHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8TWFwRXZlbnRSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxNYXBFdmVudFJlc3BvbnNlW10+KCcvYXBpL3YxL21hcC9ldmVudHMnLCB7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGxhdDogcGFyYW1zLmxhdCxcbiAgICAgICAgICBsbmc6IHBhcmFtcy5sbmcsXG4gICAgICAgICAgcmFkaXVzOiBwYXJhbXMucmFkaXVzLFxuICAgICAgICAgIGh1YklkOiBwYXJhbXMuaHViSWQsXG4gICAgICAgICAgdXBjb21pbmc6IHBhcmFtcy51cGNvbWluZyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiBwYXJhbXMubGF0ICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLmxuZyAhPT0gdW5kZWZpbmVkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBodWJzIGZvciBtYXAgZGlzcGxheVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0cmlldmVzIGh1YnMgd2l0aCBsb2NhdGlvbiBkYXRhIGZvciBkaXNwbGF5IG9uIHRoZSBtYXAuXG4gKiBTaG93cyBhY3RpdmUgaHVicyB3aXRoaW4gdGhlIHNwZWNpZmllZCByYWRpdXMuXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL21hcC9odWJzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlTWFwSHVicyB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBIdWJNYXAoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YTogaHVicywgaXNMb2FkaW5nIH0gPSB1c2VNYXBIdWJzKHtcbiAqICAgICBsYXQ6IDUxLjUwNzQsXG4gKiAgICAgbG5nOiAtMC4xMjc4LFxuICogICAgIHJhZGl1czogNTAsXG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8TWFwPlxuICogICAgICAge2h1YnM/Lm1hcChodWIgPT4gKFxuICogICAgICAgICA8TWFya2VyXG4gKiAgICAgICAgICAga2V5PXtodWIuaWR9XG4gKiAgICAgICAgICAgcG9zaXRpb249e1todWIubG9jYXRpb25MYXQsIGh1Yi5sb2NhdGlvbkxvbmddfVxuICogICAgICAgICAgIGljb249XCJodWJcIlxuICogICAgICAgICA+XG4gKiAgICAgICAgICAgPEh1YlBvcHVwIGh1Yj17aHVifSAvPlxuICogICAgICAgICA8L01hcmtlcj5cbiAqICAgICAgICkpfVxuICogICAgIDwvTWFwPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIExvY2F0aW9uIGFuZCBmaWx0ZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSByZXN1bHQgd2l0aCBhcnJheSBvZiBtYXAgaHVic1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWFwSHVicyhcbiAgcGFyYW1zOiBNYXBIdWJzUGFyYW1zLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8TWFwSHViUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxNYXBIdWJSZXNwb25zZVtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1hcEtleXMuaHVicyhwYXJhbXMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPE1hcEh1YlJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PE1hcEh1YlJlc3BvbnNlW10+KCcvYXBpL3YxL21hcC9odWJzJywge1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBsYXQ6IHBhcmFtcy5sYXQsXG4gICAgICAgICAgbG5nOiBwYXJhbXMubG5nLFxuICAgICAgICAgIHJhZGl1czogcGFyYW1zLnJhZGl1cyxcbiAgICAgICAgICBjaXR5OiBwYXJhbXMuY2l0eSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiBwYXJhbXMubGF0ICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLmxuZyAhPT0gdW5kZWZpbmVkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBidXNpbmVzc2VzIGZvciBtYXAgZGlzcGxheVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0cmlldmVzIHBhcnRuZXIgYnVzaW5lc3NlcyB3aXRoIGxvY2F0aW9uIGRhdGEgZm9yIGRpc3BsYXkgb24gdGhlIG1hcC5cbiAqIENhbiBmaWx0ZXIgYnkgdHlwZSBhbmQgd2hldGhlciB0aGV5IHNlcnZlIGFsY29ob2wtZnJlZSBkcmlua3MuXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL21hcC9idXNpbmVzc2VzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlTWFwQnVzaW5lc3NlcyB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBCdXNpbmVzc01hcCgpIHtcbiAqICAgY29uc3QgeyBkYXRhOiBidXNpbmVzc2VzLCBpc0xvYWRpbmcgfSA9IHVzZU1hcEJ1c2luZXNzZXMoe1xuICogICAgIGxhdDogNTEuNTA3NCxcbiAqICAgICBsbmc6IC0wLjEyNzgsXG4gKiAgICAgcmFkaXVzOiAxMCxcbiAqICAgICBhZkRyaW5rc09ubHk6IHRydWUsIC8vIE9ubHkgc2hvdyBBRi1mcmllbmRseSB2ZW51ZXNcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxNYXA+XG4gKiAgICAgICB7YnVzaW5lc3Nlcz8ubWFwKGJ1c2luZXNzID0+IChcbiAqICAgICAgICAgPE1hcmtlclxuICogICAgICAgICAgIGtleT17YnVzaW5lc3MuaWR9XG4gKiAgICAgICAgICAgcG9zaXRpb249e1tidXNpbmVzcy5sb2NhdGlvbkxhdCwgYnVzaW5lc3MubG9jYXRpb25Mb25nXX1cbiAqICAgICAgICAgICBpY29uPXtidXNpbmVzcy5oYXNBZkRyaW5rcyA/ICdhZi12ZW51ZScgOiAndmVudWUnfVxuICogICAgICAgICA+XG4gKiAgICAgICAgICAgPEJ1c2luZXNzUG9wdXAgYnVzaW5lc3M9e2J1c2luZXNzfSAvPlxuICogICAgICAgICA8L01hcmtlcj5cbiAqICAgICAgICkpfVxuICogICAgIDwvTWFwPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIExvY2F0aW9uIGFuZCBmaWx0ZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSByZXN1bHQgd2l0aCBhcnJheSBvZiBtYXAgYnVzaW5lc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWFwQnVzaW5lc3NlcyhcbiAgcGFyYW1zOiBNYXBCdXNpbmVzc2VzUGFyYW1zLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8TWFwQnVzaW5lc3NSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PE1hcEJ1c2luZXNzUmVzcG9uc2VbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBtYXBLZXlzLmJ1c2luZXNzZXMocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxNYXBCdXNpbmVzc1Jlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PE1hcEJ1c2luZXNzUmVzcG9uc2VbXT4oJy9hcGkvdjEvbWFwL2J1c2luZXNzZXMnLCB7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGxhdDogcGFyYW1zLmxhdCxcbiAgICAgICAgICBsbmc6IHBhcmFtcy5sbmcsXG4gICAgICAgICAgcmFkaXVzOiBwYXJhbXMucmFkaXVzLFxuICAgICAgICAgIHR5cGU6IHBhcmFtcy50eXBlLFxuICAgICAgICAgIGFmRHJpbmtzT25seTogcGFyYW1zLmFmRHJpbmtzT25seSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiBwYXJhbXMubGF0ICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLmxuZyAhPT0gdW5kZWZpbmVkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
export declare const matchingKeys: {
|
|
3
|
+
all: readonly ["matching"];
|
|
4
|
+
discover: (filters?: MatchQueryFilters) => readonly ["matching", "discover", MatchQueryFilters | undefined];
|
|
5
|
+
matches: (filters?: MatchQueryFilters) => readonly ["matching", "matches", MatchQueryFilters | undefined];
|
|
6
|
+
match: (id: string) => readonly ["matching", "match", string];
|
|
7
|
+
buddies: () => readonly ["matching", "buddies"];
|
|
8
|
+
buddyRequests: () => readonly ["matching", "buddy-requests"];
|
|
9
|
+
stats: () => readonly ["matching", "stats"];
|
|
10
|
+
};
|
|
11
|
+
export interface MatchQueryFilters {
|
|
12
|
+
status?: 'PENDING' | 'ACCEPTED' | 'DECLINED' | 'BLOCKED';
|
|
13
|
+
limit?: number;
|
|
14
|
+
offset?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface MatchResponse {
|
|
17
|
+
id: string;
|
|
18
|
+
userId: string;
|
|
19
|
+
matchedUserId: string;
|
|
20
|
+
status: 'PENDING' | 'ACCEPTED' | 'DECLINED' | 'BLOCKED';
|
|
21
|
+
matchScore?: number;
|
|
22
|
+
sharedInterests?: string[];
|
|
23
|
+
createdAt: string;
|
|
24
|
+
updatedAt: string;
|
|
25
|
+
matchedUser?: {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
avatarUrl?: string;
|
|
29
|
+
bio?: string;
|
|
30
|
+
city?: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface DiscoverMatchResponse {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
avatarUrl?: string;
|
|
37
|
+
bio?: string;
|
|
38
|
+
city?: string;
|
|
39
|
+
matchScore: number;
|
|
40
|
+
sharedInterests: string[];
|
|
41
|
+
distance?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface BuddyResponse {
|
|
44
|
+
id: string;
|
|
45
|
+
userId: string;
|
|
46
|
+
buddyId: string;
|
|
47
|
+
status: 'PENDING' | 'ACTIVE' | 'ENDED';
|
|
48
|
+
startDate?: string;
|
|
49
|
+
endDate?: string;
|
|
50
|
+
lastActivity?: string;
|
|
51
|
+
buddy?: {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
avatarUrl?: string;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export interface MatchingStatsResponse {
|
|
58
|
+
totalMatches: number;
|
|
59
|
+
pendingMatches: number;
|
|
60
|
+
acceptedMatches: number;
|
|
61
|
+
activeBuddies: number;
|
|
62
|
+
matchRate: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Discover potential matches based on shared interests and location
|
|
66
|
+
*
|
|
67
|
+
* @endpoint GET /api/v1/matching/discover
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* const { data: matches, isLoading } = useDiscoverMatches();
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function useDiscoverMatches(filters?: MatchQueryFilters, options?: Omit<UseQueryOptions<DiscoverMatchResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<DiscoverMatchResponse[], Error>;
|
|
75
|
+
/**
|
|
76
|
+
* Get all my matches
|
|
77
|
+
*
|
|
78
|
+
* @endpoint GET /api/v1/matching/matches
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```tsx
|
|
82
|
+
* const { data: matches, isLoading } = useMyMatches({ status: 'PENDING' });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function useMyMatches(filters?: MatchQueryFilters, options?: Omit<UseQueryOptions<MatchResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<MatchResponse[], Error>;
|
|
86
|
+
/**
|
|
87
|
+
* Get pending matches (convenience hook)
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```tsx
|
|
91
|
+
* const { data: pendingMatches } = usePendingMatches();
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function usePendingMatches(options?: Omit<UseQueryOptions<MatchResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<MatchResponse[], Error>;
|
|
95
|
+
/**
|
|
96
|
+
* Get accepted matches (convenience hook)
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```tsx
|
|
100
|
+
* const { data: acceptedMatches } = useAcceptedMatches();
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export declare function useAcceptedMatches(options?: Omit<UseQueryOptions<MatchResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<MatchResponse[], Error>;
|
|
104
|
+
/**
|
|
105
|
+
* Get my accountability buddies
|
|
106
|
+
*
|
|
107
|
+
* @endpoint GET /api/v1/matching/buddies
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```tsx
|
|
111
|
+
* const { data: buddies, isLoading } = useMyBuddies();
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function useMyBuddies(options?: Omit<UseQueryOptions<BuddyResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<BuddyResponse[], Error>;
|
|
115
|
+
/**
|
|
116
|
+
* Get pending buddy requests
|
|
117
|
+
*
|
|
118
|
+
* @endpoint GET /api/v1/matching/buddies/requests
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```tsx
|
|
122
|
+
* const { data: requests } = useBuddyRequests();
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
export declare function useBuddyRequests(options?: Omit<UseQueryOptions<BuddyResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<BuddyResponse[], Error>;
|
|
126
|
+
/**
|
|
127
|
+
* Get matching statistics
|
|
128
|
+
*
|
|
129
|
+
* @endpoint GET /api/v1/matching/stats
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```tsx
|
|
133
|
+
* const { data: stats } = useMatchingStats();
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare function useMatchingStats(options?: Omit<UseQueryOptions<MatchingStatsResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<MatchingStatsResponse, Error>;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchingKeys = void 0;
|
|
4
|
+
exports.useDiscoverMatches = useDiscoverMatches;
|
|
5
|
+
exports.useMyMatches = useMyMatches;
|
|
6
|
+
exports.usePendingMatches = usePendingMatches;
|
|
7
|
+
exports.useAcceptedMatches = useAcceptedMatches;
|
|
8
|
+
exports.useMyBuddies = useMyBuddies;
|
|
9
|
+
exports.useBuddyRequests = useBuddyRequests;
|
|
10
|
+
exports.useMatchingStats = useMatchingStats;
|
|
11
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
12
|
+
const client_1 = require("../client");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// QUERY KEY FACTORY
|
|
15
|
+
// ============================================================================
|
|
16
|
+
exports.matchingKeys = {
|
|
17
|
+
all: ['matching'],
|
|
18
|
+
discover: (filters) => [...exports.matchingKeys.all, 'discover', filters],
|
|
19
|
+
matches: (filters) => [...exports.matchingKeys.all, 'matches', filters],
|
|
20
|
+
match: (id) => [...exports.matchingKeys.all, 'match', id],
|
|
21
|
+
buddies: () => [...exports.matchingKeys.all, 'buddies'],
|
|
22
|
+
buddyRequests: () => [...exports.matchingKeys.all, 'buddy-requests'],
|
|
23
|
+
stats: () => [...exports.matchingKeys.all, 'stats'],
|
|
24
|
+
};
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// QUERY HOOKS
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Discover potential matches based on shared interests and location
|
|
30
|
+
*
|
|
31
|
+
* @endpoint GET /api/v1/matching/discover
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* const { data: matches, isLoading } = useDiscoverMatches();
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
function useDiscoverMatches(filters, options) {
|
|
39
|
+
return (0, react_query_1.useQuery)({
|
|
40
|
+
queryKey: exports.matchingKeys.discover(filters),
|
|
41
|
+
queryFn: async () => {
|
|
42
|
+
const client = (0, client_1.getApiClient)();
|
|
43
|
+
const response = await client.get('/api/v1/matching/discover', {
|
|
44
|
+
params: filters,
|
|
45
|
+
});
|
|
46
|
+
return response.data?.data || response.data;
|
|
47
|
+
},
|
|
48
|
+
...options,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get all my matches
|
|
53
|
+
*
|
|
54
|
+
* @endpoint GET /api/v1/matching/matches
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* const { data: matches, isLoading } = useMyMatches({ status: 'PENDING' });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
function useMyMatches(filters, options) {
|
|
62
|
+
return (0, react_query_1.useQuery)({
|
|
63
|
+
queryKey: exports.matchingKeys.matches(filters),
|
|
64
|
+
queryFn: async () => {
|
|
65
|
+
const client = (0, client_1.getApiClient)();
|
|
66
|
+
const response = await client.get('/api/v1/matching/matches', {
|
|
67
|
+
params: filters,
|
|
68
|
+
});
|
|
69
|
+
return response.data?.data || response.data;
|
|
70
|
+
},
|
|
71
|
+
staleTime: 30 * 1000,
|
|
72
|
+
...options,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get pending matches (convenience hook)
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* const { data: pendingMatches } = usePendingMatches();
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
function usePendingMatches(options) {
|
|
84
|
+
return useMyMatches({ status: 'PENDING' }, options);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get accepted matches (convenience hook)
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```tsx
|
|
91
|
+
* const { data: acceptedMatches } = useAcceptedMatches();
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function useAcceptedMatches(options) {
|
|
95
|
+
return useMyMatches({ status: 'ACCEPTED' }, options);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get my accountability buddies
|
|
99
|
+
*
|
|
100
|
+
* @endpoint GET /api/v1/matching/buddies
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```tsx
|
|
104
|
+
* const { data: buddies, isLoading } = useMyBuddies();
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
function useMyBuddies(options) {
|
|
108
|
+
return (0, react_query_1.useQuery)({
|
|
109
|
+
queryKey: exports.matchingKeys.buddies(),
|
|
110
|
+
queryFn: async () => {
|
|
111
|
+
const client = (0, client_1.getApiClient)();
|
|
112
|
+
const response = await client.get('/api/v1/matching/buddies');
|
|
113
|
+
return response.data?.data || response.data;
|
|
114
|
+
},
|
|
115
|
+
...options,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get pending buddy requests
|
|
120
|
+
*
|
|
121
|
+
* @endpoint GET /api/v1/matching/buddies/requests
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```tsx
|
|
125
|
+
* const { data: requests } = useBuddyRequests();
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
function useBuddyRequests(options) {
|
|
129
|
+
return (0, react_query_1.useQuery)({
|
|
130
|
+
queryKey: exports.matchingKeys.buddyRequests(),
|
|
131
|
+
queryFn: async () => {
|
|
132
|
+
const client = (0, client_1.getApiClient)();
|
|
133
|
+
const response = await client.get('/api/v1/matching/buddies/requests');
|
|
134
|
+
return response.data?.data || response.data;
|
|
135
|
+
},
|
|
136
|
+
...options,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get matching statistics
|
|
141
|
+
*
|
|
142
|
+
* @endpoint GET /api/v1/matching/stats
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```tsx
|
|
146
|
+
* const { data: stats } = useMatchingStats();
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
function useMatchingStats(options) {
|
|
150
|
+
return (0, react_query_1.useQuery)({
|
|
151
|
+
queryKey: exports.matchingKeys.stats(),
|
|
152
|
+
queryFn: async () => {
|
|
153
|
+
const client = (0, client_1.getApiClient)();
|
|
154
|
+
const response = await client.get('/api/v1/matching/stats');
|
|
155
|
+
return response.data?.data || response.data;
|
|
156
|
+
},
|
|
157
|
+
staleTime: 5 * 60 * 1000,
|
|
158
|
+
...options,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvbWF0Y2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkZBLGdEQWVDO0FBWUQsb0NBZ0JDO0FBVUQsOENBSUM7QUFVRCxnREFJQztBQVlELG9DQVlDO0FBWUQsNENBWUM7QUFZRCw0Q0FhQztBQTdPRCx1REFBa0U7QUFDbEUsc0NBQXlDO0FBRXpDLCtFQUErRTtBQUMvRSxvQkFBb0I7QUFDcEIsK0VBQStFO0FBRWxFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBVTtJQUMxQixRQUFRLEVBQUUsQ0FBQyxPQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBVTtJQUM5RixPQUFPLEVBQUUsQ0FBQyxPQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVTtJQUM1RixLQUFLLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxvQkFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFVO0lBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFVO0lBQ3hELGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQVU7SUFDckUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxvQkFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQVU7Q0FDckQsQ0FBQztBQWdFRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixrQkFB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O0dBU0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsT0FBOEU7SUFFOUUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsb0JBQVksQ0FBQyxLQUFLLEVBQUU7UUFDOUIsT0FBTyxFQUFFLEtBQUssSUFBb0MsRUFBRTtZQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUM1RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7UUFDeEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZIEZBQ1RPUllcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IG1hdGNoaW5nS2V5cyA9IHtcbiAgYWxsOiBbJ21hdGNoaW5nJ10gYXMgY29uc3QsXG4gIGRpc2NvdmVyOiAoZmlsdGVycz86IE1hdGNoUXVlcnlGaWx0ZXJzKSA9PiBbLi4ubWF0Y2hpbmdLZXlzLmFsbCwgJ2Rpc2NvdmVyJywgZmlsdGVyc10gYXMgY29uc3QsXG4gIG1hdGNoZXM6IChmaWx0ZXJzPzogTWF0Y2hRdWVyeUZpbHRlcnMpID0+IFsuLi5tYXRjaGluZ0tleXMuYWxsLCAnbWF0Y2hlcycsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBtYXRjaDogKGlkOiBzdHJpbmcpID0+IFsuLi5tYXRjaGluZ0tleXMuYWxsLCAnbWF0Y2gnLCBpZF0gYXMgY29uc3QsXG4gIGJ1ZGRpZXM6ICgpID0+IFsuLi5tYXRjaGluZ0tleXMuYWxsLCAnYnVkZGllcyddIGFzIGNvbnN0LFxuICBidWRkeVJlcXVlc3RzOiAoKSA9PiBbLi4ubWF0Y2hpbmdLZXlzLmFsbCwgJ2J1ZGR5LXJlcXVlc3RzJ10gYXMgY29uc3QsXG4gIHN0YXRzOiAoKSA9PiBbLi4ubWF0Y2hpbmdLZXlzLmFsbCwgJ3N0YXRzJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoUXVlcnlGaWx0ZXJzIHtcbiAgc3RhdHVzPzogJ1BFTkRJTkcnIHwgJ0FDQ0VQVEVEJyB8ICdERUNMSU5FRCcgfCAnQkxPQ0tFRCc7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBtYXRjaGVkVXNlcklkOiBzdHJpbmc7XG4gIHN0YXR1czogJ1BFTkRJTkcnIHwgJ0FDQ0VQVEVEJyB8ICdERUNMSU5FRCcgfCAnQkxPQ0tFRCc7XG4gIG1hdGNoU2NvcmU/OiBudW1iZXI7XG4gIHNoYXJlZEludGVyZXN0cz86IHN0cmluZ1tdO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIG1hdGNoZWRVc2VyPzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGF2YXRhclVybD86IHN0cmluZztcbiAgICBiaW8/OiBzdHJpbmc7XG4gICAgY2l0eT86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNjb3Zlck1hdGNoUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGF2YXRhclVybD86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBjaXR5Pzogc3RyaW5nO1xuICBtYXRjaFNjb3JlOiBudW1iZXI7XG4gIHNoYXJlZEludGVyZXN0czogc3RyaW5nW107XG4gIGRpc3RhbmNlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1ZGR5UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgYnVkZHlJZDogc3RyaW5nO1xuICBzdGF0dXM6ICdQRU5ESU5HJyB8ICdBQ1RJVkUnIHwgJ0VOREVEJztcbiAgc3RhcnREYXRlPzogc3RyaW5nO1xuICBlbmREYXRlPzogc3RyaW5nO1xuICBsYXN0QWN0aXZpdHk/OiBzdHJpbmc7XG4gIGJ1ZGR5Pzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGF2YXRhclVybD86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXRjaGluZ1N0YXRzUmVzcG9uc2Uge1xuICB0b3RhbE1hdGNoZXM6IG51bWJlcjtcbiAgcGVuZGluZ01hdGNoZXM6IG51bWJlcjtcbiAgYWNjZXB0ZWRNYXRjaGVzOiBudW1iZXI7XG4gIGFjdGl2ZUJ1ZGRpZXM6IG51bWJlcjtcbiAgbWF0Y2hSYXRlOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRGlzY292ZXIgcG90ZW50aWFsIG1hdGNoZXMgYmFzZWQgb24gc2hhcmVkIGludGVyZXN0cyBhbmQgbG9jYXRpb25cbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvbWF0Y2hpbmcvZGlzY292ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGE6IG1hdGNoZXMsIGlzTG9hZGluZyB9ID0gdXNlRGlzY292ZXJNYXRjaGVzKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURpc2NvdmVyTWF0Y2hlcyhcbiAgZmlsdGVycz86IE1hdGNoUXVlcnlGaWx0ZXJzLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8RGlzY292ZXJNYXRjaFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5kaXNjb3ZlcihmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxEaXNjb3Zlck1hdGNoUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvbWF0Y2hpbmcvZGlzY292ZXInLCB7XG4gICAgICAgIHBhcmFtczogZmlsdGVycyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbGwgbXkgbWF0Y2hlc1xuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9tYXRjaGluZy9tYXRjaGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhOiBtYXRjaGVzLCBpc0xvYWRpbmcgfSA9IHVzZU15TWF0Y2hlcyh7IHN0YXR1czogJ1BFTkRJTkcnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNeU1hdGNoZXMoXG4gIGZpbHRlcnM/OiBNYXRjaFF1ZXJ5RmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPE1hdGNoUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbWF0Y2hpbmdLZXlzLm1hdGNoZXMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8TWF0Y2hSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9tYXRjaGluZy9tYXRjaGVzJywge1xuICAgICAgICBwYXJhbXM6IGZpbHRlcnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDMwICogMTAwMCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgcGVuZGluZyBtYXRjaGVzIChjb252ZW5pZW5jZSBob29rKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YTogcGVuZGluZ01hdGNoZXMgfSA9IHVzZVBlbmRpbmdNYXRjaGVzKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBlbmRpbmdNYXRjaGVzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8TWF0Y2hSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlTXlNYXRjaGVzKHsgc3RhdHVzOiAnUEVORElORycgfSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogR2V0IGFjY2VwdGVkIG1hdGNoZXMgKGNvbnZlbmllbmNlIGhvb2spXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhOiBhY2NlcHRlZE1hdGNoZXMgfSA9IHVzZUFjY2VwdGVkTWF0Y2hlcygpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBY2NlcHRlZE1hdGNoZXMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxNYXRjaFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VNeU1hdGNoZXMoeyBzdGF0dXM6ICdBQ0NFUFRFRCcgfSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogR2V0IG15IGFjY291bnRhYmlsaXR5IGJ1ZGRpZXNcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvbWF0Y2hpbmcvYnVkZGllc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YTogYnVkZGllcywgaXNMb2FkaW5nIH0gPSB1c2VNeUJ1ZGRpZXMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTXlCdWRkaWVzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8QnVkZHlSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBtYXRjaGluZ0tleXMuYnVkZGllcygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEJ1ZGR5UmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvbWF0Y2hpbmcvYnVkZGllcycpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBwZW5kaW5nIGJ1ZGR5IHJlcXVlc3RzXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL21hdGNoaW5nL2J1ZGRpZXMvcmVxdWVzdHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGE6IHJlcXVlc3RzIH0gPSB1c2VCdWRkeVJlcXVlc3RzKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJ1ZGR5UmVxdWVzdHMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxCdWRkeVJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5idWRkeVJlcXVlc3RzKCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8QnVkZHlSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9tYXRjaGluZy9idWRkaWVzL3JlcXVlc3RzJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YT8uZGF0YSB8fCByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG1hdGNoaW5nIHN0YXRpc3RpY3NcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvbWF0Y2hpbmcvc3RhdHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGE6IHN0YXRzIH0gPSB1c2VNYXRjaGluZ1N0YXRzKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1hdGNoaW5nU3RhdHMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxNYXRjaGluZ1N0YXRzUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5zdGF0cygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPE1hdGNoaW5nU3RhdHNSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvbWF0Y2hpbmcvc3RhdHMnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDUgKiA2MCAqIDEwMDAsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|