@growsober/sdk 1.0.23 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/mutations/products.d.ts +3 -150
- package/dist/api/mutations/products.js +1 -124
- package/dist/api/queries/products.d.ts +9 -87
- package/dist/api/queries/products.js +1 -86
- package/package.json +1 -1
- package/src/api/mutations/products.ts +4 -153
- package/src/api/queries/products.ts +11 -88
|
@@ -1,31 +1,6 @@
|
|
|
1
|
-
import { CreatorProductResponse, ProductBookingResponse,
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
description?: string;
|
|
5
|
-
imageUrl?: string;
|
|
6
|
-
type?: ProductType;
|
|
7
|
-
price: number;
|
|
8
|
-
currency?: string;
|
|
9
|
-
durationMinutes?: number;
|
|
10
|
-
maxParticipants?: number;
|
|
11
|
-
deliveryMethod?: DeliveryMethod;
|
|
12
|
-
locationDetails?: string;
|
|
13
|
-
slug?: string;
|
|
14
|
-
}
|
|
15
|
-
export interface UpdateProductRequest {
|
|
16
|
-
title?: string;
|
|
17
|
-
description?: string;
|
|
18
|
-
imageUrl?: string;
|
|
19
|
-
type?: ProductType;
|
|
20
|
-
price?: number;
|
|
21
|
-
currency?: string;
|
|
22
|
-
durationMinutes?: number;
|
|
23
|
-
maxParticipants?: number;
|
|
24
|
-
deliveryMethod?: DeliveryMethod;
|
|
25
|
-
locationDetails?: string;
|
|
26
|
-
isActive?: boolean;
|
|
27
|
-
isFeatured?: boolean;
|
|
28
|
-
}
|
|
1
|
+
import { CreatorProductResponse, ProductBookingResponse, CreateProductDto, UpdateProductDto } from '../queries/products';
|
|
2
|
+
export type CreateProductRequest = CreateProductDto;
|
|
3
|
+
export type UpdateProductRequest = UpdateProductDto;
|
|
29
4
|
export interface BookProductRequest {
|
|
30
5
|
scheduledAt: string;
|
|
31
6
|
timezone?: string;
|
|
@@ -40,136 +15,31 @@ export interface UpdateBookingRequest {
|
|
|
40
15
|
export interface CancelBookingRequest {
|
|
41
16
|
reason?: string;
|
|
42
17
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Create a new product for a creator
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```tsx
|
|
48
|
-
* const { mutate: createProduct, isLoading } = useCreateProduct();
|
|
49
|
-
*
|
|
50
|
-
* createProduct({
|
|
51
|
-
* creatorId: 'creator-123',
|
|
52
|
-
* data: {
|
|
53
|
-
* title: '1-on-1 Coaching Session',
|
|
54
|
-
* description: 'Personal coaching session',
|
|
55
|
-
* type: 'SESSION_1ON1',
|
|
56
|
-
* price: 5000,
|
|
57
|
-
* durationMinutes: 60,
|
|
58
|
-
* },
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
61
|
-
*/
|
|
62
18
|
export declare function useCreateProduct(): import("@tanstack/react-query").UseMutationResult<CreatorProductResponse, Error, {
|
|
63
19
|
creatorId: string;
|
|
64
20
|
data: CreateProductRequest;
|
|
65
21
|
}, unknown>;
|
|
66
|
-
/**
|
|
67
|
-
* Update an existing product
|
|
68
|
-
*
|
|
69
|
-
* @example
|
|
70
|
-
* ```tsx
|
|
71
|
-
* const { mutate: updateProduct, isLoading } = useUpdateProduct();
|
|
72
|
-
*
|
|
73
|
-
* updateProduct({
|
|
74
|
-
* creatorId: 'creator-123',
|
|
75
|
-
* productId: 'product-456',
|
|
76
|
-
* data: {
|
|
77
|
-
* price: 6000,
|
|
78
|
-
* isActive: true,
|
|
79
|
-
* },
|
|
80
|
-
* });
|
|
81
|
-
* ```
|
|
82
|
-
*/
|
|
83
22
|
export declare function useUpdateProduct(): import("@tanstack/react-query").UseMutationResult<CreatorProductResponse, Error, {
|
|
84
23
|
creatorId: string;
|
|
85
24
|
productId: string;
|
|
86
25
|
data: UpdateProductRequest;
|
|
87
26
|
}, unknown>;
|
|
88
|
-
/**
|
|
89
|
-
* Delete a product
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* ```tsx
|
|
93
|
-
* const { mutate: deleteProduct, isLoading } = useDeleteProduct();
|
|
94
|
-
*
|
|
95
|
-
* deleteProduct({
|
|
96
|
-
* creatorId: 'creator-123',
|
|
97
|
-
* productId: 'product-456',
|
|
98
|
-
* });
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
27
|
export declare function useDeleteProduct(): import("@tanstack/react-query").UseMutationResult<void, Error, {
|
|
102
28
|
creatorId: string;
|
|
103
29
|
productId: string;
|
|
104
30
|
}, unknown>;
|
|
105
|
-
/**
|
|
106
|
-
* Book a product/session
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
* ```tsx
|
|
110
|
-
* const { mutate: bookProduct, isLoading } = useBookProduct();
|
|
111
|
-
*
|
|
112
|
-
* bookProduct({
|
|
113
|
-
* productId: 'product-123',
|
|
114
|
-
* data: {
|
|
115
|
-
* scheduledAt: '2024-03-15T10:00:00Z',
|
|
116
|
-
* timezone: 'Europe/London',
|
|
117
|
-
* clientNotes: 'Looking forward to the session!',
|
|
118
|
-
* },
|
|
119
|
-
* });
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
31
|
export declare function useBookProduct(): import("@tanstack/react-query").UseMutationResult<ProductBookingResponse, Error, {
|
|
123
32
|
productId: string;
|
|
124
33
|
data: BookProductRequest;
|
|
125
34
|
}, unknown>;
|
|
126
|
-
/**
|
|
127
|
-
* Update a product booking
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```tsx
|
|
131
|
-
* const { mutate: updateBooking, isLoading } = useUpdateProductBooking();
|
|
132
|
-
*
|
|
133
|
-
* updateBooking({
|
|
134
|
-
* bookingId: 'booking-123',
|
|
135
|
-
* data: {
|
|
136
|
-
* scheduledAt: '2024-03-16T14:00:00Z',
|
|
137
|
-
* clientNotes: 'Rescheduled due to conflict',
|
|
138
|
-
* },
|
|
139
|
-
* });
|
|
140
|
-
* ```
|
|
141
|
-
*/
|
|
142
35
|
export declare function useUpdateProductBooking(): import("@tanstack/react-query").UseMutationResult<ProductBookingResponse, Error, {
|
|
143
36
|
bookingId: string;
|
|
144
37
|
data: UpdateBookingRequest;
|
|
145
38
|
}, unknown>;
|
|
146
|
-
/**
|
|
147
|
-
* Cancel a product booking
|
|
148
|
-
*
|
|
149
|
-
* @example
|
|
150
|
-
* ```tsx
|
|
151
|
-
* const { mutate: cancelBooking, isLoading } = useCancelProductBooking();
|
|
152
|
-
*
|
|
153
|
-
* cancelBooking({
|
|
154
|
-
* bookingId: 'booking-123',
|
|
155
|
-
* data: { reason: 'Schedule conflict' },
|
|
156
|
-
* });
|
|
157
|
-
* ```
|
|
158
|
-
*/
|
|
159
39
|
export declare function useCancelProductBooking(): import("@tanstack/react-query").UseMutationResult<ProductBookingResponse, Error, {
|
|
160
40
|
bookingId: string;
|
|
161
41
|
data?: CancelBookingRequest;
|
|
162
42
|
}, unknown>;
|
|
163
|
-
/**
|
|
164
|
-
* Mark a booking as completed (creator only)
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* ```tsx
|
|
168
|
-
* const { mutate: completeBooking, isLoading } = useCompleteProductBooking();
|
|
169
|
-
*
|
|
170
|
-
* completeBooking({ bookingId: 'booking-123' });
|
|
171
|
-
* ```
|
|
172
|
-
*/
|
|
173
43
|
export declare function useCompleteProductBooking(): import("@tanstack/react-query").UseMutationResult<ProductBookingResponse, Error, {
|
|
174
44
|
bookingId: string;
|
|
175
45
|
}, unknown>;
|
|
@@ -177,23 +47,6 @@ export interface PaymentIntentResponse {
|
|
|
177
47
|
clientSecret: string;
|
|
178
48
|
paymentIntentId: string;
|
|
179
49
|
}
|
|
180
|
-
/**
|
|
181
|
-
* Create a payment intent for a product booking
|
|
182
|
-
* Use this with Stripe Elements to process payment
|
|
183
|
-
*
|
|
184
|
-
* @example
|
|
185
|
-
* ```tsx
|
|
186
|
-
* const { mutate: createPaymentIntent, data, isLoading } = useCreateProductPaymentIntent();
|
|
187
|
-
*
|
|
188
|
-
* // Create payment intent
|
|
189
|
-
* createPaymentIntent({ bookingId: 'booking-123' });
|
|
190
|
-
*
|
|
191
|
-
* // Use clientSecret with Stripe Elements
|
|
192
|
-
* if (data?.clientSecret) {
|
|
193
|
-
* // Pass to Stripe PaymentElement
|
|
194
|
-
* }
|
|
195
|
-
* ```
|
|
196
|
-
*/
|
|
197
50
|
export declare function useCreateProductPaymentIntent(): import("@tanstack/react-query").UseMutationResult<PaymentIntentResponse, Error, {
|
|
198
51
|
bookingId: string;
|
|
199
52
|
}, unknown>;
|
|
@@ -14,25 +14,6 @@ const products_1 = require("../queries/products");
|
|
|
14
14
|
// ============================================================================
|
|
15
15
|
// MUTATION HOOKS - PRODUCTS
|
|
16
16
|
// ============================================================================
|
|
17
|
-
/**
|
|
18
|
-
* Create a new product for a creator
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```tsx
|
|
22
|
-
* const { mutate: createProduct, isLoading } = useCreateProduct();
|
|
23
|
-
*
|
|
24
|
-
* createProduct({
|
|
25
|
-
* creatorId: 'creator-123',
|
|
26
|
-
* data: {
|
|
27
|
-
* title: '1-on-1 Coaching Session',
|
|
28
|
-
* description: 'Personal coaching session',
|
|
29
|
-
* type: 'SESSION_1ON1',
|
|
30
|
-
* price: 5000,
|
|
31
|
-
* durationMinutes: 60,
|
|
32
|
-
* },
|
|
33
|
-
* });
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
17
|
function useCreateProduct() {
|
|
37
18
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
38
19
|
return (0, react_query_1.useMutation)({
|
|
@@ -47,23 +28,6 @@ function useCreateProduct() {
|
|
|
47
28
|
},
|
|
48
29
|
});
|
|
49
30
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Update an existing product
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```tsx
|
|
55
|
-
* const { mutate: updateProduct, isLoading } = useUpdateProduct();
|
|
56
|
-
*
|
|
57
|
-
* updateProduct({
|
|
58
|
-
* creatorId: 'creator-123',
|
|
59
|
-
* productId: 'product-456',
|
|
60
|
-
* data: {
|
|
61
|
-
* price: 6000,
|
|
62
|
-
* isActive: true,
|
|
63
|
-
* },
|
|
64
|
-
* });
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
31
|
function useUpdateProduct() {
|
|
68
32
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
69
33
|
return (0, react_query_1.useMutation)({
|
|
@@ -79,19 +43,6 @@ function useUpdateProduct() {
|
|
|
79
43
|
},
|
|
80
44
|
});
|
|
81
45
|
}
|
|
82
|
-
/**
|
|
83
|
-
* Delete a product
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```tsx
|
|
87
|
-
* const { mutate: deleteProduct, isLoading } = useDeleteProduct();
|
|
88
|
-
*
|
|
89
|
-
* deleteProduct({
|
|
90
|
-
* creatorId: 'creator-123',
|
|
91
|
-
* productId: 'product-456',
|
|
92
|
-
* });
|
|
93
|
-
* ```
|
|
94
|
-
*/
|
|
95
46
|
function useDeleteProduct() {
|
|
96
47
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
97
48
|
return (0, react_query_1.useMutation)({
|
|
@@ -109,23 +60,6 @@ function useDeleteProduct() {
|
|
|
109
60
|
// ============================================================================
|
|
110
61
|
// MUTATION HOOKS - BOOKINGS
|
|
111
62
|
// ============================================================================
|
|
112
|
-
/**
|
|
113
|
-
* Book a product/session
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* ```tsx
|
|
117
|
-
* const { mutate: bookProduct, isLoading } = useBookProduct();
|
|
118
|
-
*
|
|
119
|
-
* bookProduct({
|
|
120
|
-
* productId: 'product-123',
|
|
121
|
-
* data: {
|
|
122
|
-
* scheduledAt: '2024-03-15T10:00:00Z',
|
|
123
|
-
* timezone: 'Europe/London',
|
|
124
|
-
* clientNotes: 'Looking forward to the session!',
|
|
125
|
-
* },
|
|
126
|
-
* });
|
|
127
|
-
* ```
|
|
128
|
-
*/
|
|
129
63
|
function useBookProduct() {
|
|
130
64
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
131
65
|
return (0, react_query_1.useMutation)({
|
|
@@ -139,22 +73,6 @@ function useBookProduct() {
|
|
|
139
73
|
},
|
|
140
74
|
});
|
|
141
75
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Update a product booking
|
|
144
|
-
*
|
|
145
|
-
* @example
|
|
146
|
-
* ```tsx
|
|
147
|
-
* const { mutate: updateBooking, isLoading } = useUpdateProductBooking();
|
|
148
|
-
*
|
|
149
|
-
* updateBooking({
|
|
150
|
-
* bookingId: 'booking-123',
|
|
151
|
-
* data: {
|
|
152
|
-
* scheduledAt: '2024-03-16T14:00:00Z',
|
|
153
|
-
* clientNotes: 'Rescheduled due to conflict',
|
|
154
|
-
* },
|
|
155
|
-
* });
|
|
156
|
-
* ```
|
|
157
|
-
*/
|
|
158
76
|
function useUpdateProductBooking() {
|
|
159
77
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
160
78
|
return (0, react_query_1.useMutation)({
|
|
@@ -166,24 +84,10 @@ function useUpdateProductBooking() {
|
|
|
166
84
|
onSuccess: (_, { bookingId }) => {
|
|
167
85
|
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
|
|
168
86
|
queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
|
|
169
|
-
// Also invalidate creator bookings as they see this
|
|
170
87
|
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
|
|
171
88
|
},
|
|
172
89
|
});
|
|
173
90
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Cancel a product booking
|
|
176
|
-
*
|
|
177
|
-
* @example
|
|
178
|
-
* ```tsx
|
|
179
|
-
* const { mutate: cancelBooking, isLoading } = useCancelProductBooking();
|
|
180
|
-
*
|
|
181
|
-
* cancelBooking({
|
|
182
|
-
* bookingId: 'booking-123',
|
|
183
|
-
* data: { reason: 'Schedule conflict' },
|
|
184
|
-
* });
|
|
185
|
-
* ```
|
|
186
|
-
*/
|
|
187
91
|
function useCancelProductBooking() {
|
|
188
92
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
189
93
|
return (0, react_query_1.useMutation)({
|
|
@@ -199,16 +103,6 @@ function useCancelProductBooking() {
|
|
|
199
103
|
},
|
|
200
104
|
});
|
|
201
105
|
}
|
|
202
|
-
/**
|
|
203
|
-
* Mark a booking as completed (creator only)
|
|
204
|
-
*
|
|
205
|
-
* @example
|
|
206
|
-
* ```tsx
|
|
207
|
-
* const { mutate: completeBooking, isLoading } = useCompleteProductBooking();
|
|
208
|
-
*
|
|
209
|
-
* completeBooking({ bookingId: 'booking-123' });
|
|
210
|
-
* ```
|
|
211
|
-
*/
|
|
212
106
|
function useCompleteProductBooking() {
|
|
213
107
|
const queryClient = (0, react_query_1.useQueryClient)();
|
|
214
108
|
return (0, react_query_1.useMutation)({
|
|
@@ -224,23 +118,6 @@ function useCompleteProductBooking() {
|
|
|
224
118
|
},
|
|
225
119
|
});
|
|
226
120
|
}
|
|
227
|
-
/**
|
|
228
|
-
* Create a payment intent for a product booking
|
|
229
|
-
* Use this with Stripe Elements to process payment
|
|
230
|
-
*
|
|
231
|
-
* @example
|
|
232
|
-
* ```tsx
|
|
233
|
-
* const { mutate: createPaymentIntent, data, isLoading } = useCreateProductPaymentIntent();
|
|
234
|
-
*
|
|
235
|
-
* // Create payment intent
|
|
236
|
-
* createPaymentIntent({ bookingId: 'booking-123' });
|
|
237
|
-
*
|
|
238
|
-
* // Use clientSecret with Stripe Elements
|
|
239
|
-
* if (data?.clientSecret) {
|
|
240
|
-
* // Pass to Stripe PaymentElement
|
|
241
|
-
* }
|
|
242
|
-
* ```
|
|
243
|
-
*/
|
|
244
121
|
function useCreateProductPaymentIntent() {
|
|
245
122
|
return (0, react_query_1.useMutation)({
|
|
246
123
|
mutationFn: async ({ bookingId, }) => {
|
|
@@ -250,4 +127,4 @@ function useCreateProductPaymentIntent() {
|
|
|
250
127
|
},
|
|
251
128
|
});
|
|
252
129
|
}
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQThFQSw0Q0FvQkM7QUFtQkQsNENBMEJDO0FBZUQsNENBb0JDO0FBdUJELHdDQW1CQztBQWtCRCwwREF5QkM7QUFlRCwwREF3QkM7QUFZRCw4REFxQkM7QUE0QkQsc0VBY0M7QUF6WEQsdURBQW9FO0FBQ3BFLHNDQUF5QztBQUN6QyxrREFBK0g7QUFxRC9ILCtFQUErRTtBQUMvRSw0QkFBNEI7QUFDNUIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUNqQixTQUFTLEVBQ1QsSUFBSSxHQUlMLEVBQW1DLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixTQUFTLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDOUIsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUNGLENBQUMsQ0FB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RCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzlCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVdEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsNkJBQTZCO0lBQzNDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFDakIsU0FBUyxHQUdWLEVBQWtDLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUNoQyxxQ0FBcUMsU0FBUyxpQkFBaUIsQ0FDaEUsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgcHJvZHVjdEtleXMsIENyZWF0b3JQcm9kdWN0UmVzcG9uc2UsIFByb2R1Y3RCb29raW5nUmVzcG9uc2UsIFByb2R1Y3RUeXBlLCBEZWxpdmVyeU1ldGhvZCB9IGZyb20gJy4uL3F1ZXJpZXMvcHJvZHVjdHMnO1xuaW1wb3J0IHsgY3JlYXRvcktleXMgfSBmcm9tICcuLi9xdWVyaWVzL2NyZWF0b3JzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVQcm9kdWN0UmVxdWVzdCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgdHlwZT86IFByb2R1Y3RUeXBlO1xuICBwcmljZTogbnVtYmVyO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgZHVyYXRpb25NaW51dGVzPzogbnVtYmVyO1xuICBtYXhQYXJ0aWNpcGFudHM/OiBudW1iZXI7XG4gIGRlbGl2ZXJ5TWV0aG9kPzogRGVsaXZlcnlNZXRob2Q7XG4gIGxvY2F0aW9uRGV0YWlscz86IHN0cmluZztcbiAgc2x1Zz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQcm9kdWN0UmVxdWVzdCB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9kdWN0VHlwZTtcbiAgcHJpY2U/OiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBkdXJhdGlvbk1pbnV0ZXM/OiBudW1iZXI7XG4gIG1heFBhcnRpY2lwYW50cz86IG51bWJlcjtcbiAgZGVsaXZlcnlNZXRob2Q/OiBEZWxpdmVyeU1ldGhvZDtcbiAgbG9jYXRpb25EZXRhaWxzPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIGlzRmVhdHVyZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tQcm9kdWN0UmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVCb29raW5nUmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0Pzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbiAgY3JlYXRvck5vdGVzPzogc3RyaW5nO1xuICBtZWV0aW5nTGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxCb29raW5nUmVxdWVzdCB7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1MgLSBQUk9EVUNUU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9kdWN0IGZvciBhIGNyZWF0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY3JlYXRlUHJvZHVjdCwgaXNMb2FkaW5nIH0gPSB1c2VDcmVhdGVQcm9kdWN0KCk7XG4gKlxuICogY3JlYXRlUHJvZHVjdCh7XG4gKiAgIGNyZWF0b3JJZDogJ2NyZWF0b3ItMTIzJyxcbiAqICAgZGF0YToge1xuICogICAgIHRpdGxlOiAnMS1vbi0xIENvYWNoaW5nIFNlc3Npb24nLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUGVyc29uYWwgY29hY2hpbmcgc2Vzc2lvbicsXG4gKiAgICAgdHlwZTogJ1NFU1NJT05fMU9OMScsXG4gKiAgICAgcHJpY2U6IDUwMDAsXG4gKiAgICAgZHVyYXRpb25NaW51dGVzOiA2MCxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVQcm9kdWN0KCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgY3JlYXRvcklkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgICAgIGRhdGE6IENyZWF0ZVByb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPENyZWF0b3JQcm9kdWN0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9jcmVhdG9ycy8ke2NyZWF0b3JJZH0vcHJvZHVjdHNgLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBjcmVhdG9ySWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYnlDcmVhdG9yKGNyZWF0b3JJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5saXN0cygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBwcm9kdWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IHVwZGF0ZVByb2R1Y3QsIGlzTG9hZGluZyB9ID0gdXNlVXBkYXRlUHJvZHVjdCgpO1xuICpcbiAqIHVwZGF0ZVByb2R1Y3Qoe1xuICogICBjcmVhdG9ySWQ6ICdjcmVhdG9yLTEyMycsXG4gKiAgIHByb2R1Y3RJZDogJ3Byb2R1Y3QtNDU2JyxcbiAqICAgZGF0YToge1xuICogICAgIHByaWNlOiA2MDAwLFxuICogICAgIGlzQWN0aXZlOiB0cnVlLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBjcmVhdG9ySWQsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGNyZWF0b3JJZDogc3RyaW5nO1xuICAgICAgcHJvZHVjdElkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVQcm9kdWN0UmVxdWVzdDtcbiAgICB9KTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChcbiAgICAgICAgYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgY3JlYXRvcklkLCBwcm9kdWN0SWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGEgcHJvZHVjdFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBkZWxldGVQcm9kdWN0LCBpc0xvYWRpbmcgfSA9IHVzZURlbGV0ZVByb2R1Y3QoKTtcbiAqXG4gKiBkZWxldGVQcm9kdWN0KHtcbiAqICAgY3JlYXRvcklkOiAnY3JlYXRvci0xMjMnLFxuICogICBwcm9kdWN0SWQ6ICdwcm9kdWN0LTQ1NicsXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlUHJvZHVjdCgpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGNyZWF0b3JJZCxcbiAgICAgIHByb2R1Y3RJZCxcbiAgICB9OiB7XG4gICAgICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgYXdhaXQgY2xpZW50LmRlbGV0ZShgL2FwaS92MS9jcmVhdG9ycy8ke2NyZWF0b3JJZH0vcHJvZHVjdHMvJHtwcm9kdWN0SWR9YCk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGNyZWF0b3JJZCwgcHJvZHVjdElkIH0pID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LnJlbW92ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTIC0gQk9PS0lOR1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCb29rIGEgcHJvZHVjdC9zZXNzaW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IGJvb2tQcm9kdWN0LCBpc0xvYWRpbmcgfSA9IHVzZUJvb2tQcm9kdWN0KCk7XG4gKlxuICogYm9va1Byb2R1Y3Qoe1xuICogICBwcm9kdWN0SWQ6ICdwcm9kdWN0LTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzY2hlZHVsZWRBdDogJzIwMjQtMDMtMTVUMTA6MDA6MDBaJyxcbiAqICAgICB0aW1lem9uZTogJ0V1cm9wZS9Mb25kb24nLFxuICogICAgIGNsaWVudE5vdGVzOiAnTG9va2luZyBmb3J3YXJkIHRvIHRoZSBzZXNzaW9uIScsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQm9va1Byb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgICAgZGF0YTogQm9va1Byb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH0vYm9va2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBwcm9kdWN0IGJvb2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogdXBkYXRlQm9va2luZywgaXNMb2FkaW5nIH0gPSB1c2VVcGRhdGVQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIHVwZGF0ZUJvb2tpbmcoe1xuICogICBib29raW5nSWQ6ICdib29raW5nLTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzY2hlZHVsZWRBdDogJzIwMjQtMDMtMTZUMTQ6MDA6MDBaJyxcbiAqICAgICBjbGllbnROb3RlczogJ1Jlc2NoZWR1bGVkIGR1ZSB0byBjb25mbGljdCcsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlUHJvZHVjdEJvb2tpbmcoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBib29raW5nSWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgICAgZGF0YTogVXBkYXRlQm9va2luZ1JlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8UHJvZHVjdEJvb2tpbmdSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9YCxcbiAgICAgICAgZGF0YVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBib29raW5nSWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ0RldGFpbChib29raW5nSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpIH0pO1xuICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIGNyZWF0b3IgYm9va2luZ3MgYXMgdGhleSBzZWUgdGhpc1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYW5jZWwgYSBwcm9kdWN0IGJvb2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY2FuY2VsQm9va2luZywgaXNMb2FkaW5nIH0gPSB1c2VDYW5jZWxQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIGNhbmNlbEJvb2tpbmcoe1xuICogICBib29raW5nSWQ6ICdib29raW5nLTEyMycsXG4gKiAgIGRhdGE6IHsgcmVhc29uOiAnU2NoZWR1bGUgY29uZmxpY3QnIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FuY2VsUHJvZHVjdEJvb2tpbmcoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBib29raW5nSWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgICAgZGF0YT86IENhbmNlbEJvb2tpbmdSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKFxuICAgICAgICBgL2FwaS92MS91c2Vycy9tZS9wcm9kdWN0LWJvb2tpbmdzLyR7Ym9va2luZ0lkfWAsXG4gICAgICAgIHsgZGF0YSB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGJvb2tpbmdJZCB9KSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5nRGV0YWlsKGJvb2tpbmdJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5teUJvb2tpbmdzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5ncygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcmsgYSBib29raW5nIGFzIGNvbXBsZXRlZCAoY3JlYXRvciBvbmx5KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBjb21wbGV0ZUJvb2tpbmcsIGlzTG9hZGluZyB9ID0gdXNlQ29tcGxldGVQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIGNvbXBsZXRlQm9va2luZyh7IGJvb2tpbmdJZDogJ2Jvb2tpbmctMTIzJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29tcGxldGVQcm9kdWN0Qm9va2luZygpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGJvb2tpbmdJZCxcbiAgICB9OiB7XG4gICAgICBib29raW5nSWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9L2NvbXBsZXRlYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBib29raW5nSWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ0RldGFpbChib29raW5nSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1MgLSBQQVlNRU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheW1lbnRJbnRlbnRSZXNwb25zZSB7XG4gIGNsaWVudFNlY3JldDogc3RyaW5nO1xuICBwYXltZW50SW50ZW50SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXltZW50IGludGVudCBmb3IgYSBwcm9kdWN0IGJvb2tpbmdcbiAqIFVzZSB0aGlzIHdpdGggU3RyaXBlIEVsZW1lbnRzIHRvIHByb2Nlc3MgcGF5bWVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBjcmVhdGVQYXltZW50SW50ZW50LCBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZUNyZWF0ZVByb2R1Y3RQYXltZW50SW50ZW50KCk7XG4gKlxuICogLy8gQ3JlYXRlIHBheW1lbnQgaW50ZW50XG4gKiBjcmVhdGVQYXltZW50SW50ZW50KHsgYm9va2luZ0lkOiAnYm9va2luZy0xMjMnIH0pO1xuICpcbiAqIC8vIFVzZSBjbGllbnRTZWNyZXQgd2l0aCBTdHJpcGUgRWxlbWVudHNcbiAqIGlmIChkYXRhPy5jbGllbnRTZWNyZXQpIHtcbiAqICAgLy8gUGFzcyB0byBTdHJpcGUgUGF5bWVudEVsZW1lbnRcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlUHJvZHVjdFBheW1lbnRJbnRlbnQoKSB7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGJvb2tpbmdJZCxcbiAgICB9OiB7XG4gICAgICBib29raW5nSWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTxQYXltZW50SW50ZW50UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChcbiAgICAgICAgYC9hcGkvdjEvdXNlcnMvbWUvcHJvZHVjdC1ib29raW5ncy8ke2Jvb2tpbmdJZH0vcGF5bWVudC1pbnRlbnRgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlDQSw0Q0FvQkM7QUFFRCw0Q0EwQkM7QUFFRCw0Q0FvQkM7QUFNRCx3Q0FtQkM7QUFFRCwwREF3QkM7QUFFRCwwREF3QkM7QUFFRCw4REFxQkM7QUFXRCxzRUFjQztBQXBPRCx1REFBb0U7QUFDcEUsc0NBQXlDO0FBQ3pDLGtEQUFzSTtBQTJCdEksK0VBQStFO0FBQy9FLDRCQUE0QjtBQUM1QiwrRUFBK0U7QUFFL0UsU0FBZ0IsZ0JBQWdCO0lBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFDakIsU0FBUyxFQUNULElBQUksR0FJTCxFQUFtQyxFQUFFO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsU0FBUyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkYsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzlCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCO0lB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QUUsc0JBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBV0QsU0FBZ0IsNkJBQTZCO0lBQzNDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFDakIsU0FBUyxHQUdWLEVBQWtDLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUNoQyxxQ0FBcUMsU0FBUyxpQkFBaUIsQ0FDaEUsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgcHJvZHVjdEtleXMsIENyZWF0b3JQcm9kdWN0UmVzcG9uc2UsIFByb2R1Y3RCb29raW5nUmVzcG9uc2UsIENyZWF0ZVByb2R1Y3REdG8sIFVwZGF0ZVByb2R1Y3REdG8gfSBmcm9tICcuLi9xdWVyaWVzL3Byb2R1Y3RzJztcbmltcG9ydCB7IGNyZWF0b3JLZXlzIH0gZnJvbSAnLi4vcXVlcmllcy9jcmVhdG9ycyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTIOKAlCByZXF1ZXN0IHR5cGVzIGRlcml2ZWQgZnJvbSBhdXRvLWdlbmVyYXRlZCBPcGVuQVBJIERUT3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlUHJvZHVjdFJlcXVlc3QgPSBDcmVhdGVQcm9kdWN0RHRvO1xuZXhwb3J0IHR5cGUgVXBkYXRlUHJvZHVjdFJlcXVlc3QgPSBVcGRhdGVQcm9kdWN0RHRvO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tQcm9kdWN0UmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVCb29raW5nUmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0Pzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbiAgY3JlYXRvck5vdGVzPzogc3RyaW5nO1xuICBtZWV0aW5nTGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxCb29raW5nUmVxdWVzdCB7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1MgLSBQUk9EVUNUU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlUHJvZHVjdCgpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGNyZWF0b3JJZCxcbiAgICAgIGRhdGEsXG4gICAgfToge1xuICAgICAgY3JlYXRvcklkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBDcmVhdGVQcm9kdWN0UmVxdWVzdDtcbiAgICB9KTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzYCwgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgY3JlYXRvcklkIH0pID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5Q3JlYXRvcihjcmVhdG9ySWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubGlzdHMoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBjcmVhdG9ySWQsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGNyZWF0b3JJZDogc3RyaW5nO1xuICAgICAgcHJvZHVjdElkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVQcm9kdWN0UmVxdWVzdDtcbiAgICB9KTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChcbiAgICAgICAgYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgY3JlYXRvcklkLCBwcm9kdWN0SWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWxldGVQcm9kdWN0KCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgY3JlYXRvcklkLFxuICAgICAgcHJvZHVjdElkLFxuICAgIH06IHtcbiAgICAgIGNyZWF0b3JJZDogc3RyaW5nO1xuICAgICAgcHJvZHVjdElkOiBzdHJpbmc7XG4gICAgfSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBhd2FpdCBjbGllbnQuZGVsZXRlKGAvYXBpL3YxL2NyZWF0b3JzLyR7Y3JlYXRvcklkfS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH1gKTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgY3JlYXRvcklkLCBwcm9kdWN0SWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQucmVtb3ZlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5kZXRhaWwocHJvZHVjdElkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5Q3JlYXRvcihjcmVhdG9ySWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubGlzdHMoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1MgLSBCT09LSU5HU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQm9va1Byb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgICAgZGF0YTogQm9va1Byb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH0vYm9va2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2R1Y3RCb29raW5nKCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYm9va2luZ0lkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBib29raW5nSWQ6IHN0cmluZztcbiAgICAgIGRhdGE6IFVwZGF0ZUJvb2tpbmdSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucHV0KFxuICAgICAgICBgL2FwaS92MS91c2Vycy9tZS9wcm9kdWN0LWJvb2tpbmdzLyR7Ym9va2luZ0lkfWAsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgYm9va2luZ0lkIH0pID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJvb2tpbmdEZXRhaWwoYm9va2luZ0lkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJvb2tpbmdzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYW5jZWxQcm9kdWN0Qm9va2luZygpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGJvb2tpbmdJZCxcbiAgICAgIGRhdGEsXG4gICAgfToge1xuICAgICAgYm9va2luZ0lkOiBzdHJpbmc7XG4gICAgICBkYXRhPzogQ2FuY2VsQm9va2luZ1JlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8UHJvZHVjdEJvb2tpbmdSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5kZWxldGUoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9YCxcbiAgICAgICAgeyBkYXRhIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgYm9va2luZ0lkIH0pID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJvb2tpbmdEZXRhaWwoYm9va2luZ0lkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJvb2tpbmdzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb21wbGV0ZVByb2R1Y3RCb29raW5nKCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYm9va2luZ0lkLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChcbiAgICAgICAgYC9hcGkvdjEvdXNlcnMvbWUvcHJvZHVjdC1ib29raW5ncy8ke2Jvb2tpbmdJZH0vY29tcGxldGVgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGJvb2tpbmdJZCB9KSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5nRGV0YWlsKGJvb2tpbmdJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5teUJvb2tpbmdzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5ncygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNVVRBVElPTiBIT09LUyAtIFBBWU1FTlRTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF5bWVudEludGVudFJlc3BvbnNlIHtcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gIHBheW1lbnRJbnRlbnRJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlUHJvZHVjdFBheW1lbnRJbnRlbnQoKSB7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGJvb2tpbmdJZCxcbiAgICB9OiB7XG4gICAgICBib29raW5nSWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTxQYXltZW50SW50ZW50UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChcbiAgICAgICAgYC9hcGkvdjEvdXNlcnMvbWUvcHJvZHVjdC1ib29raW5ncy8ke2Jvb2tpbmdJZH0vcGF5bWVudC1pbnRlbnRgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
-
|
|
3
|
-
export type
|
|
2
|
+
import type { components } from '@growsober/types';
|
|
3
|
+
export type CreateProductDto = components['schemas']['CreateProductDto'];
|
|
4
|
+
export type UpdateProductDto = components['schemas']['UpdateProductDto'];
|
|
5
|
+
export type ProductType = CreateProductDto['type'];
|
|
6
|
+
export type DeliveryMethod = CreateProductDto['deliveryMethod'];
|
|
4
7
|
export type BookingStatus = 'PENDING' | 'CONFIRMED' | 'CANCELLED' | 'COMPLETED';
|
|
5
8
|
export type PaymentStatus = 'PENDING' | 'PAID' | 'REFUNDED' | 'FAILED';
|
|
6
9
|
export interface CreatorProductResponse {
|
|
@@ -10,6 +13,8 @@ export interface CreatorProductResponse {
|
|
|
10
13
|
slug: string;
|
|
11
14
|
description: string | null;
|
|
12
15
|
imageUrl: string | null;
|
|
16
|
+
category: string | null;
|
|
17
|
+
tags: string[];
|
|
13
18
|
type: ProductType;
|
|
14
19
|
price: number;
|
|
15
20
|
currency: string;
|
|
@@ -19,6 +24,8 @@ export interface CreatorProductResponse {
|
|
|
19
24
|
locationDetails: string | null;
|
|
20
25
|
isActive: boolean;
|
|
21
26
|
isFeatured: boolean;
|
|
27
|
+
stripeProductId?: string | null;
|
|
28
|
+
stripePriceId?: string | null;
|
|
22
29
|
createdAt: string;
|
|
23
30
|
updatedAt: string;
|
|
24
31
|
creator?: {
|
|
@@ -91,95 +98,10 @@ export declare const productKeys: {
|
|
|
91
98
|
creatorBookings: (creatorId: string) => readonly ["products", "bookings", "creator", string];
|
|
92
99
|
bookingDetail: (bookingId: string) => readonly ["products", "bookings", "detail", string];
|
|
93
100
|
};
|
|
94
|
-
/**
|
|
95
|
-
* Get paginated list of all active products
|
|
96
|
-
*
|
|
97
|
-
* @param filters - Query parameters for filtering and pagination
|
|
98
|
-
* @param options - TanStack Query options
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```tsx
|
|
102
|
-
* const { data, isLoading } = useProducts({
|
|
103
|
-
* page: 1,
|
|
104
|
-
* limit: 20,
|
|
105
|
-
* type: 'SESSION_1ON1',
|
|
106
|
-
* });
|
|
107
|
-
* ```
|
|
108
|
-
*/
|
|
109
101
|
export declare function useProducts(filters?: ProductFilters, options?: Omit<UseQueryOptions<PaginatedProductsResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedProductsResponse, Error>;
|
|
110
|
-
/**
|
|
111
|
-
* Get a single product by ID
|
|
112
|
-
*
|
|
113
|
-
* @param id - Product ID
|
|
114
|
-
* @param options - TanStack Query options
|
|
115
|
-
*
|
|
116
|
-
* @example
|
|
117
|
-
* ```tsx
|
|
118
|
-
* const { data, isLoading } = useProduct('product-123');
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
102
|
export declare function useProduct(id: string, options?: Omit<UseQueryOptions<CreatorProductResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<CreatorProductResponse, Error>;
|
|
122
|
-
/**
|
|
123
|
-
* Get a product by its slug
|
|
124
|
-
*
|
|
125
|
-
* @param slug - Product slug
|
|
126
|
-
* @param options - TanStack Query options
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* ```tsx
|
|
130
|
-
* const { data, isLoading } = useProductBySlug('1-on-1-coaching-abc123');
|
|
131
|
-
* ```
|
|
132
|
-
*/
|
|
133
103
|
export declare function useProductBySlug(slug: string, options?: Omit<UseQueryOptions<CreatorProductResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<CreatorProductResponse, Error>;
|
|
134
|
-
/**
|
|
135
|
-
* Get products for a specific creator
|
|
136
|
-
*
|
|
137
|
-
* @param creatorId - Creator ID
|
|
138
|
-
* @param filters - Query parameters for filtering
|
|
139
|
-
* @param options - TanStack Query options
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* ```tsx
|
|
143
|
-
* const { data, isLoading } = useCreatorProducts('creator-123', {
|
|
144
|
-
* type: 'SESSION_1ON1',
|
|
145
|
-
* isActive: true,
|
|
146
|
-
* });
|
|
147
|
-
* ```
|
|
148
|
-
*/
|
|
149
104
|
export declare function useCreatorProducts(creatorId: string, filters?: ProductFilters, options?: Omit<UseQueryOptions<PaginatedProductsResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedProductsResponse, Error>;
|
|
150
|
-
/**
|
|
151
|
-
* Get current user's product bookings
|
|
152
|
-
*
|
|
153
|
-
* @param options - TanStack Query options
|
|
154
|
-
*
|
|
155
|
-
* @example
|
|
156
|
-
* ```tsx
|
|
157
|
-
* const { data, isLoading } = useMyProductBookings();
|
|
158
|
-
* ```
|
|
159
|
-
*/
|
|
160
105
|
export declare function useMyProductBookings(options?: Omit<UseQueryOptions<ProductBookingResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<ProductBookingResponse[], Error>;
|
|
161
|
-
/**
|
|
162
|
-
* Get a single product booking by ID
|
|
163
|
-
*
|
|
164
|
-
* @param bookingId - Booking ID
|
|
165
|
-
* @param options - TanStack Query options
|
|
166
|
-
*
|
|
167
|
-
* @example
|
|
168
|
-
* ```tsx
|
|
169
|
-
* const { data, isLoading } = useProductBooking('booking-123');
|
|
170
|
-
* ```
|
|
171
|
-
*/
|
|
172
106
|
export declare function useProductBooking(bookingId: string, options?: Omit<UseQueryOptions<ProductBookingResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<ProductBookingResponse, Error>;
|
|
173
|
-
/**
|
|
174
|
-
* Get bookings for a creator's products (creator dashboard)
|
|
175
|
-
*
|
|
176
|
-
* @param creatorId - Creator ID
|
|
177
|
-
* @param options - TanStack Query options
|
|
178
|
-
*
|
|
179
|
-
* @example
|
|
180
|
-
* ```tsx
|
|
181
|
-
* // For creator dashboard - see all bookings for their products
|
|
182
|
-
* const { data, isLoading } = useCreatorBookings('creator-123');
|
|
183
|
-
* ```
|
|
184
|
-
*/
|
|
185
107
|
export declare function useCreatorBookings(creatorId: string, options?: Omit<UseQueryOptions<ProductBookingResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<ProductBookingResponse[], Error>;
|
|
@@ -29,21 +29,6 @@ exports.productKeys = {
|
|
|
29
29
|
// ============================================================================
|
|
30
30
|
// QUERY HOOKS
|
|
31
31
|
// ============================================================================
|
|
32
|
-
/**
|
|
33
|
-
* Get paginated list of all active products
|
|
34
|
-
*
|
|
35
|
-
* @param filters - Query parameters for filtering and pagination
|
|
36
|
-
* @param options - TanStack Query options
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```tsx
|
|
40
|
-
* const { data, isLoading } = useProducts({
|
|
41
|
-
* page: 1,
|
|
42
|
-
* limit: 20,
|
|
43
|
-
* type: 'SESSION_1ON1',
|
|
44
|
-
* });
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
32
|
function useProducts(filters, options) {
|
|
48
33
|
return (0, react_query_1.useQuery)({
|
|
49
34
|
queryKey: exports.productKeys.list(filters),
|
|
@@ -57,17 +42,6 @@ function useProducts(filters, options) {
|
|
|
57
42
|
...options,
|
|
58
43
|
});
|
|
59
44
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Get a single product by ID
|
|
62
|
-
*
|
|
63
|
-
* @param id - Product ID
|
|
64
|
-
* @param options - TanStack Query options
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```tsx
|
|
68
|
-
* const { data, isLoading } = useProduct('product-123');
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
45
|
function useProduct(id, options) {
|
|
72
46
|
return (0, react_query_1.useQuery)({
|
|
73
47
|
queryKey: exports.productKeys.detail(id),
|
|
@@ -80,17 +54,6 @@ function useProduct(id, options) {
|
|
|
80
54
|
...options,
|
|
81
55
|
});
|
|
82
56
|
}
|
|
83
|
-
/**
|
|
84
|
-
* Get a product by its slug
|
|
85
|
-
*
|
|
86
|
-
* @param slug - Product slug
|
|
87
|
-
* @param options - TanStack Query options
|
|
88
|
-
*
|
|
89
|
-
* @example
|
|
90
|
-
* ```tsx
|
|
91
|
-
* const { data, isLoading } = useProductBySlug('1-on-1-coaching-abc123');
|
|
92
|
-
* ```
|
|
93
|
-
*/
|
|
94
57
|
function useProductBySlug(slug, options) {
|
|
95
58
|
return (0, react_query_1.useQuery)({
|
|
96
59
|
queryKey: exports.productKeys.slug(slug),
|
|
@@ -103,21 +66,6 @@ function useProductBySlug(slug, options) {
|
|
|
103
66
|
...options,
|
|
104
67
|
});
|
|
105
68
|
}
|
|
106
|
-
/**
|
|
107
|
-
* Get products for a specific creator
|
|
108
|
-
*
|
|
109
|
-
* @param creatorId - Creator ID
|
|
110
|
-
* @param filters - Query parameters for filtering
|
|
111
|
-
* @param options - TanStack Query options
|
|
112
|
-
*
|
|
113
|
-
* @example
|
|
114
|
-
* ```tsx
|
|
115
|
-
* const { data, isLoading } = useCreatorProducts('creator-123', {
|
|
116
|
-
* type: 'SESSION_1ON1',
|
|
117
|
-
* isActive: true,
|
|
118
|
-
* });
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
69
|
function useCreatorProducts(creatorId, filters, options) {
|
|
122
70
|
return (0, react_query_1.useQuery)({
|
|
123
71
|
queryKey: exports.productKeys.byCreator(creatorId, filters),
|
|
@@ -132,16 +80,6 @@ function useCreatorProducts(creatorId, filters, options) {
|
|
|
132
80
|
...options,
|
|
133
81
|
});
|
|
134
82
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Get current user's product bookings
|
|
137
|
-
*
|
|
138
|
-
* @param options - TanStack Query options
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* ```tsx
|
|
142
|
-
* const { data, isLoading } = useMyProductBookings();
|
|
143
|
-
* ```
|
|
144
|
-
*/
|
|
145
83
|
function useMyProductBookings(options) {
|
|
146
84
|
return (0, react_query_1.useQuery)({
|
|
147
85
|
queryKey: exports.productKeys.myBookings(),
|
|
@@ -153,17 +91,6 @@ function useMyProductBookings(options) {
|
|
|
153
91
|
...options,
|
|
154
92
|
});
|
|
155
93
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Get a single product booking by ID
|
|
158
|
-
*
|
|
159
|
-
* @param bookingId - Booking ID
|
|
160
|
-
* @param options - TanStack Query options
|
|
161
|
-
*
|
|
162
|
-
* @example
|
|
163
|
-
* ```tsx
|
|
164
|
-
* const { data, isLoading } = useProductBooking('booking-123');
|
|
165
|
-
* ```
|
|
166
|
-
*/
|
|
167
94
|
function useProductBooking(bookingId, options) {
|
|
168
95
|
return (0, react_query_1.useQuery)({
|
|
169
96
|
queryKey: exports.productKeys.bookingDetail(bookingId),
|
|
@@ -176,18 +103,6 @@ function useProductBooking(bookingId, options) {
|
|
|
176
103
|
...options,
|
|
177
104
|
});
|
|
178
105
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Get bookings for a creator's products (creator dashboard)
|
|
181
|
-
*
|
|
182
|
-
* @param creatorId - Creator ID
|
|
183
|
-
* @param options - TanStack Query options
|
|
184
|
-
*
|
|
185
|
-
* @example
|
|
186
|
-
* ```tsx
|
|
187
|
-
* // For creator dashboard - see all bookings for their products
|
|
188
|
-
* const { data, isLoading } = useCreatorBookings('creator-123');
|
|
189
|
-
* ```
|
|
190
|
-
*/
|
|
191
106
|
function useCreatorBookings(creatorId, options) {
|
|
192
107
|
return (0, react_query_1.useQuery)({
|
|
193
108
|
queryKey: exports.productKeys.creatorBookings(creatorId),
|
|
@@ -200,4 +115,4 @@ function useCreatorBookings(creatorId, options) {
|
|
|
200
115
|
...options,
|
|
201
116
|
});
|
|
202
117
|
}
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUlBLGtDQWVDO0FBYUQsZ0NBY0M7QUFhRCw0Q0FjQztBQWlCRCxnREFpQkM7QUFZRCxvREFZQztBQWFELDhDQWNDO0FBY0QsZ0RBY0M7QUF2VEQsdURBQWtFO0FBQ2xFLHNDQUF5QztBQTBGekMsK0VBQStFO0FBQy9FLG9CQUFvQjtBQUNwQiwrRUFBK0U7QUFFbEUsUUFBQSxXQUFXLEdBQUc7SUFDekIsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFVO0lBQzFCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFVO0lBQ2xELElBQUksRUFBRSxDQUFDLE9BQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUM5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUMvRCxJQUFJLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFVO0lBQ25FLFNBQVMsRUFBRSxDQUFDLFNBQWlCLEVBQUUsT0FBd0IsRUFBRSxFQUFFLENBQ3pELENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVTtJQUM5RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENB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O0dBV0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsU0FBaUIsRUFDakIsT0FBaUY7SUFFakYsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQ2hELE9BQU8sRUFBRSxLQUFLLElBQXVDLEVBQUU7WUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixTQUFTLG9CQUFvQixDQUFDLENBQUM7WUFDckYsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDcEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgUHJvZHVjdFR5cGUgPSAnU0VTU0lPTl8xT04xJyB8ICdTRVNTSU9OX0dST1VQJyB8ICdQQUNLQUdFJyB8ICdXT1JLU0hPUCcgfCAnQ09OU1VMVEFUSU9OJztcbmV4cG9ydCB0eXBlIERlbGl2ZXJ5TWV0aG9kID0gJ1ZJREVPX0NBTEwnIHwgJ1BIT05FX0NBTEwnIHwgJ0lOX1BFUlNPTicgfCAnSFlCUklEJztcbmV4cG9ydCB0eXBlIEJvb2tpbmdTdGF0dXMgPSAnUEVORElORycgfCAnQ09ORklSTUVEJyB8ICdDQU5DRUxMRUQnIHwgJ0NPTVBMRVRFRCc7XG5leHBvcnQgdHlwZSBQYXltZW50U3RhdHVzID0gJ1BFTkRJTkcnIHwgJ1BBSUQnIHwgJ1JFRlVOREVEJyB8ICdGQUlMRUQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0b3JQcm9kdWN0UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgc2x1Zzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgaW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHR5cGU6IFByb2R1Y3RUeXBlO1xuICBwcmljZTogbnVtYmVyO1xuICBjdXJyZW5jeTogc3RyaW5nO1xuICBkdXJhdGlvbk1pbnV0ZXM6IG51bWJlcjtcbiAgbWF4UGFydGljaXBhbnRzOiBudW1iZXI7XG4gIGRlbGl2ZXJ5TWV0aG9kOiBEZWxpdmVyeU1ldGhvZDtcbiAgbG9jYXRpb25EZXRhaWxzOiBzdHJpbmcgfCBudWxsO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgaXNGZWF0dXJlZDogYm9vbGVhbjtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBjcmVhdG9yPzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgYXZhdGFyVXJsOiBzdHJpbmcgfCBudWxsO1xuICAgIHNwZWNpYWx0aWVzPzogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGlvbnM/OiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvZHVjdElkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBzY2hlZHVsZWRBdDogc3RyaW5nO1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBzdGF0dXM6IEJvb2tpbmdTdGF0dXM7XG4gIHBheW1lbnRTdGF0dXM6IFBheW1lbnRTdGF0dXMgfCBudWxsO1xuICBzdHJpcGVQYXltZW50SW50ZW50SWQ6IHN0cmluZyB8IG51bGw7XG4gIGFtb3VudFBhaWQ6IG51bWJlciB8IG51bGw7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIGNsaWVudE5vdGVzOiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdG9yTm90ZXM6IHN0cmluZyB8IG51bGw7XG4gIG1lZXRpbmdMaW5rOiBzdHJpbmcgfCBudWxsO1xuICBpc0NvbXBsZXRlZDogYm9vbGVhbjtcbiAgY29tcGxldGVkQXQ6IHN0cmluZyB8IG51bGw7XG4gIGlzQ2FuY2VsbGVkOiBib29sZWFuO1xuICBjYW5jZWxsZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgY2FuY2VsbGVkQnk6IHN0cmluZyB8IG51bGw7XG4gIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBwcm9kdWN0PzogQ3JlYXRvclByb2R1Y3RSZXNwb25zZTtcbiAgdXNlcj86IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcm9maWxlSW1hZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0RmlsdGVycyB7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0eXBlPzogUHJvZHVjdFR5cGU7XG4gIGRlbGl2ZXJ5TWV0aG9kPzogRGVsaXZlcnlNZXRob2Q7XG4gIG1pblByaWNlPzogbnVtYmVyO1xuICBtYXhQcmljZT86IG51bWJlcjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZFByb2R1Y3RzUmVzcG9uc2Uge1xuICBwcm9kdWN0czogQ3JlYXRvclByb2R1Y3RSZXNwb25zZVtdO1xuICBtZXRhOiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWSBGQUNUT1JZXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBwcm9kdWN0S2V5cyA9IHtcbiAgYWxsOiBbJ3Byb2R1Y3RzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4ucHJvZHVjdEtleXMuYWxsLCAnbGlzdCddIGFzIGNvbnN0LFxuICBsaXN0OiAoZmlsdGVycz86IFByb2R1Y3RGaWx0ZXJzKSA9PiBbLi4ucHJvZHVjdEtleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLnByb2R1Y3RLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBzbHVnOiAoc2x1Zzogc3RyaW5nKSA9PiBbLi4ucHJvZHVjdEtleXMuYWxsLCAnc2x1ZycsIHNsdWddIGFzIGNvbnN0LFxuICBieUNyZWF0b3I6IChjcmVhdG9ySWQ6IHN0cmluZywgZmlsdGVycz86IFByb2R1Y3RGaWx0ZXJzKSA9PlxuICAgIFsuLi5wcm9kdWN0S2V5cy5hbGwsICdjcmVhdG9yJywgY3JlYXRvcklkLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgYm9va2luZ3M6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdib29raW5ncyddIGFzIGNvbnN0LFxuICBteUJvb2tpbmdzOiAoKSA9PiBbLi4ucHJvZHVjdEtleXMuYm9va2luZ3MoKSwgJ21lJ10gYXMgY29uc3QsXG4gIGNyZWF0b3JCb29raW5nczogKGNyZWF0b3JJZDogc3RyaW5nKSA9PiBbLi4ucHJvZHVjdEtleXMuYm9va2luZ3MoKSwgJ2NyZWF0b3InLCBjcmVhdG9ySWRdIGFzIGNvbnN0LFxuICBib29raW5nRGV0YWlsOiAoYm9va2luZ0lkOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5ib29raW5ncygpLCAnZGV0YWlsJywgYm9va2luZ0lkXSBhcyBjb25zdCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHBhZ2luYXRlZCBsaXN0IG9mIGFsbCBhY3RpdmUgcHJvZHVjdHNcbiAqXG4gKiBAcGFyYW0gZmlsdGVycyAtIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVByb2R1Y3RzKHtcbiAqICAgcGFnZTogMSxcbiAqICAgbGltaXQ6IDIwLFxuICogICB0eXBlOiAnU0VTU0lPTl8xT04xJyxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9kdWN0cyhcbiAgZmlsdGVycz86IFByb2R1Y3RGaWx0ZXJzLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUHJvZHVjdHNSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMubGlzdChmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQYWdpbmF0ZWRQcm9kdWN0c1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9wcm9kdWN0cycsIHtcbiAgICAgICAgcGFyYW1zOiBmaWx0ZXJzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBwcm9kdWN0IGJ5IElEXG4gKlxuICogQHBhcmFtIGlkIC0gUHJvZHVjdCBJRFxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVByb2R1Y3QoJ3Byb2R1Y3QtMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3QoXG4gIGlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5kZXRhaWwoaWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPENyZWF0b3JQcm9kdWN0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL3Byb2R1Y3RzLyR7aWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhaWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgcHJvZHVjdCBieSBpdHMgc2x1Z1xuICpcbiAqIEBwYXJhbSBzbHVnIC0gUHJvZHVjdCBzbHVnXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlUHJvZHVjdEJ5U2x1ZygnMS1vbi0xLWNvYWNoaW5nLWFiYzEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9kdWN0QnlTbHVnKFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5zbHVnKHNsdWcpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPENyZWF0b3JQcm9kdWN0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL3Byb2R1Y3RzL3NsdWcvJHtzbHVnfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNsdWcsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHByb2R1Y3RzIGZvciBhIHNwZWNpZmljIGNyZWF0b3JcbiAqXG4gKiBAcGFyYW0gY3JlYXRvcklkIC0gQ3JlYXRvciBJRFxuICogQHBhcmFtIGZpbHRlcnMgLSBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmdcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VDcmVhdG9yUHJvZHVjdHMoJ2NyZWF0b3ItMTIzJywge1xuICogICB0eXBlOiAnU0VTU0lPTl8xT04xJyxcbiAqICAgaXNBY3RpdmU6IHRydWUsXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRvclByb2R1Y3RzKFxuICBjcmVhdG9ySWQ6IHN0cmluZyxcbiAgZmlsdGVycz86IFByb2R1Y3RGaWx0ZXJzLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUHJvZHVjdHNSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuYnlDcmVhdG9yKGNyZWF0b3JJZCwgZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUHJvZHVjdHNSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzYCwge1xuICAgICAgICBwYXJhbXM6IGZpbHRlcnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFjcmVhdG9ySWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgdXNlcidzIHByb2R1Y3QgYm9va2luZ3NcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlTXlQcm9kdWN0Qm9va2luZ3MoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTXlQcm9kdWN0Qm9va2luZ3MoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIHByb2R1Y3QgYm9va2luZyBieSBJRFxuICpcbiAqIEBwYXJhbSBib29raW5nSWQgLSBCb29raW5nIElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlUHJvZHVjdEJvb2tpbmcoJ2Jvb2tpbmctMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3RCb29raW5nKFxuICBib29raW5nSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJvb2tpbmdEZXRhaWwoYm9va2luZ0lkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldChgL2FwaS92MS91c2Vycy9tZS9wcm9kdWN0LWJvb2tpbmdzLyR7Ym9va2luZ0lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWJvb2tpbmdJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYm9va2luZ3MgZm9yIGEgY3JlYXRvcidzIHByb2R1Y3RzIChjcmVhdG9yIGRhc2hib2FyZClcbiAqXG4gKiBAcGFyYW0gY3JlYXRvcklkIC0gQ3JlYXRvciBJRFxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogLy8gRm9yIGNyZWF0b3IgZGFzaGJvYXJkIC0gc2VlIGFsbCBib29raW5ncyBmb3IgdGhlaXIgcHJvZHVjdHNcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VDcmVhdG9yQm9va2luZ3MoJ2NyZWF0b3ItMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0b3JCb29raW5ncyhcbiAgY3JlYXRvcklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmNyZWF0b3JCb29raW5ncyhjcmVhdG9ySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzL2Jvb2tpbmdzYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhY3JlYXRvcklkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEhBLGtDQWVDO0FBRUQsZ0NBY0M7QUFFRCw0Q0FjQztBQUVELGdEQWlCQztBQUVELG9EQVlDO0FBRUQsOENBY0M7QUFFRCxnREFjQztBQTFPRCx1REFBa0U7QUFDbEUsc0NBQXlDO0FBa0d6QywrRUFBK0U7QUFDL0Usb0JBQW9CO0FBQ3BCLCtFQUErRTtBQUVsRSxRQUFBLFdBQVcsR0FBRztJQUN6QixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQVU7SUFDMUIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQzlFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3RELE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFVO0lBQy9ELElBQUksRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQVU7SUFDbkUsU0FBUyxFQUFFLENBQUMsU0FBaUIsRUFBRSxPQUF3QixFQUFFLEVBQUUsQ0FDekQsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFVO0lBQzlELFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FB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SUFBdUMsRUFBRTtZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLFNBQVMsb0JBQW9CLENBQUMsQ0FBQztZQUNyRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUztRQUNwQixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucyB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBjb21wb25lbnRzIH0gZnJvbSAnQGdyb3dzb2Jlci90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTIOKAlCBkZXJpdmVkIGZyb20gYXV0by1nZW5lcmF0ZWQgT3BlbkFQSSB0eXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBDcmVhdGVQcm9kdWN0RHRvID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVQcm9kdWN0RHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVQcm9kdWN0RHRvID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVQcm9kdWN0RHRvJ107XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RUeXBlID0gQ3JlYXRlUHJvZHVjdER0b1sndHlwZSddO1xuZXhwb3J0IHR5cGUgRGVsaXZlcnlNZXRob2QgPSBDcmVhdGVQcm9kdWN0RHRvWydkZWxpdmVyeU1ldGhvZCddO1xuZXhwb3J0IHR5cGUgQm9va2luZ1N0YXR1cyA9ICdQRU5ESU5HJyB8ICdDT05GSVJNRUQnIHwgJ0NBTkNFTExFRCcgfCAnQ09NUExFVEVEJztcbmV4cG9ydCB0eXBlIFBheW1lbnRTdGF0dXMgPSAnUEVORElORycgfCAnUEFJRCcgfCAnUkVGVU5ERUQnIHwgJ0ZBSUxFRCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRvclByb2R1Y3RSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNyZWF0b3JJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBzbHVnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBpbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgY2F0ZWdvcnk6IHN0cmluZyB8IG51bGw7XG4gIHRhZ3M6IHN0cmluZ1tdO1xuICB0eXBlOiBQcm9kdWN0VHlwZTtcbiAgcHJpY2U6IG51bWJlcjtcbiAgY3VycmVuY3k6IHN0cmluZztcbiAgZHVyYXRpb25NaW51dGVzOiBudW1iZXI7XG4gIG1heFBhcnRpY2lwYW50czogbnVtYmVyO1xuICBkZWxpdmVyeU1ldGhvZDogRGVsaXZlcnlNZXRob2Q7XG4gIGxvY2F0aW9uRGV0YWlsczogc3RyaW5nIHwgbnVsbDtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGlzRmVhdHVyZWQ6IGJvb2xlYW47XG4gIHN0cmlwZVByb2R1Y3RJZD86IHN0cmluZyB8IG51bGw7XG4gIHN0cmlwZVByaWNlSWQ/OiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGNyZWF0b3I/OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGw7XG4gICAgc3BlY2lhbHRpZXM/OiBzdHJpbmdbXTtcbiAgICBjZXJ0aWZpY2F0aW9ucz86IHN0cmluZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RCb29raW5nUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBwcm9kdWN0SWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHNjaGVkdWxlZEF0OiBzdHJpbmc7XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIHN0YXR1czogQm9va2luZ1N0YXR1cztcbiAgcGF5bWVudFN0YXR1czogUGF5bWVudFN0YXR1cyB8IG51bGw7XG4gIHN0cmlwZVBheW1lbnRJbnRlbnRJZDogc3RyaW5nIHwgbnVsbDtcbiAgYW1vdW50UGFpZDogbnVtYmVyIHwgbnVsbDtcbiAgY3VycmVuY3k6IHN0cmluZztcbiAgY2xpZW50Tm90ZXM6IHN0cmluZyB8IG51bGw7XG4gIGNyZWF0b3JOb3Rlczogc3RyaW5nIHwgbnVsbDtcbiAgbWVldGluZ0xpbms6IHN0cmluZyB8IG51bGw7XG4gIGlzQ29tcGxldGVkOiBib29sZWFuO1xuICBjb21wbGV0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgaXNDYW5jZWxsZWQ6IGJvb2xlYW47XG4gIGNhbmNlbGxlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBjYW5jZWxsZWRCeTogc3RyaW5nIHwgbnVsbDtcbiAgY2FuY2VsbGF0aW9uUmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIHByb2R1Y3Q/OiBDcmVhdG9yUHJvZHVjdFJlc3BvbnNlO1xuICB1c2VyPzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByb2ZpbGVJbWFnZTogc3RyaW5nIHwgbnVsbDtcbiAgICBlbWFpbDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RGaWx0ZXJzIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHR5cGU/OiBQcm9kdWN0VHlwZTtcbiAgZGVsaXZlcnlNZXRob2Q/OiBEZWxpdmVyeU1ldGhvZDtcbiAgbWluUHJpY2U/OiBudW1iZXI7XG4gIG1heFByaWNlPzogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVkUHJvZHVjdHNSZXNwb25zZSB7XG4gIHByb2R1Y3RzOiBDcmVhdG9yUHJvZHVjdFJlc3BvbnNlW107XG4gIG1ldGE6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZIEZBQ1RPUllcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHByb2R1Y3RLZXlzID0ge1xuICBhbGw6IFsncHJvZHVjdHMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogUHJvZHVjdEZpbHRlcnMpID0+IFsuLi5wcm9kdWN0S2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4ucHJvZHVjdEtleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIHNsdWc6IChzbHVnOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzbHVnJywgc2x1Z10gYXMgY29uc3QsXG4gIGJ5Q3JlYXRvcjogKGNyZWF0b3JJZDogc3RyaW5nLCBmaWx0ZXJzPzogUHJvZHVjdEZpbHRlcnMpID0+XG4gICAgWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2NyZWF0b3InLCBjcmVhdG9ySWQsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBib29raW5nczogKCkgPT4gWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2Jvb2tpbmdzJ10gYXMgY29uc3QsXG4gIG15Qm9va2luZ3M6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5ib29raW5ncygpLCAnbWUnXSBhcyBjb25zdCxcbiAgY3JlYXRvckJvb2tpbmdzOiAoY3JlYXRvcklkOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5ib29raW5ncygpLCAnY3JlYXRvcicsIGNyZWF0b3JJZF0gYXMgY29uc3QsXG4gIGJvb2tpbmdEZXRhaWw6IChib29raW5nSWQ6IHN0cmluZykgPT4gWy4uLnByb2R1Y3RLZXlzLmJvb2tpbmdzKCksICdkZXRhaWwnLCBib29raW5nSWRdIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3RzKFxuICBmaWx0ZXJzPzogUHJvZHVjdEZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRQcm9kdWN0c1Jlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5saXN0KGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZFByb2R1Y3RzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3Byb2R1Y3RzJywge1xuICAgICAgICBwYXJhbXM6IGZpbHRlcnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9kdWN0KFxuICBpZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8Q3JlYXRvclByb2R1Y3RSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKGlkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldChgL2FwaS92MS9wcm9kdWN0cy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdEJ5U2x1ZyhcbiAgc2x1Zzogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8Q3JlYXRvclByb2R1Y3RSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuc2x1ZyhzbHVnKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldChgL2FwaS92MS9wcm9kdWN0cy9zbHVnLyR7c2x1Z31gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFzbHVnLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRvclByb2R1Y3RzKFxuICBjcmVhdG9ySWQ6IHN0cmluZyxcbiAgZmlsdGVycz86IFByb2R1Y3RGaWx0ZXJzLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUHJvZHVjdHNSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuYnlDcmVhdG9yKGNyZWF0b3JJZCwgZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUHJvZHVjdHNSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzYCwge1xuICAgICAgICBwYXJhbXM6IGZpbHRlcnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFjcmVhdG9ySWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNeVByb2R1Y3RCb29raW5ncyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFByb2R1Y3RCb29raW5nUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvdXNlcnMvbWUvcHJvZHVjdC1ib29raW5ncycpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3RCb29raW5nKFxuICBib29raW5nSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJvb2tpbmdEZXRhaWwoYm9va2luZ0lkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldChgL2FwaS92MS91c2Vycy9tZS9wcm9kdWN0LWJvb2tpbmdzLyR7Ym9va2luZ0lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWJvb2tpbmdJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0b3JCb29raW5ncyhcbiAgY3JlYXRvcklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmNyZWF0b3JCb29raW5ncyhjcmVhdG9ySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzL2Jvb2tpbmdzYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhY3JlYXRvcklkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,40 +1,14 @@
|
|
|
1
1
|
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
2
2
|
import { getApiClient } from '../client';
|
|
3
|
-
import { productKeys, CreatorProductResponse, ProductBookingResponse,
|
|
3
|
+
import { productKeys, CreatorProductResponse, ProductBookingResponse, CreateProductDto, UpdateProductDto } from '../queries/products';
|
|
4
4
|
import { creatorKeys } from '../queries/creators';
|
|
5
5
|
|
|
6
6
|
// ============================================================================
|
|
7
|
-
// TYPES
|
|
7
|
+
// TYPES — request types derived from auto-generated OpenAPI DTOs
|
|
8
8
|
// ============================================================================
|
|
9
9
|
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
description?: string;
|
|
13
|
-
imageUrl?: string;
|
|
14
|
-
type?: ProductType;
|
|
15
|
-
price: number;
|
|
16
|
-
currency?: string;
|
|
17
|
-
durationMinutes?: number;
|
|
18
|
-
maxParticipants?: number;
|
|
19
|
-
deliveryMethod?: DeliveryMethod;
|
|
20
|
-
locationDetails?: string;
|
|
21
|
-
slug?: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface UpdateProductRequest {
|
|
25
|
-
title?: string;
|
|
26
|
-
description?: string;
|
|
27
|
-
imageUrl?: string;
|
|
28
|
-
type?: ProductType;
|
|
29
|
-
price?: number;
|
|
30
|
-
currency?: string;
|
|
31
|
-
durationMinutes?: number;
|
|
32
|
-
maxParticipants?: number;
|
|
33
|
-
deliveryMethod?: DeliveryMethod;
|
|
34
|
-
locationDetails?: string;
|
|
35
|
-
isActive?: boolean;
|
|
36
|
-
isFeatured?: boolean;
|
|
37
|
-
}
|
|
10
|
+
export type CreateProductRequest = CreateProductDto;
|
|
11
|
+
export type UpdateProductRequest = UpdateProductDto;
|
|
38
12
|
|
|
39
13
|
export interface BookProductRequest {
|
|
40
14
|
scheduledAt: string;
|
|
@@ -57,25 +31,6 @@ export interface CancelBookingRequest {
|
|
|
57
31
|
// MUTATION HOOKS - PRODUCTS
|
|
58
32
|
// ============================================================================
|
|
59
33
|
|
|
60
|
-
/**
|
|
61
|
-
* Create a new product for a creator
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```tsx
|
|
65
|
-
* const { mutate: createProduct, isLoading } = useCreateProduct();
|
|
66
|
-
*
|
|
67
|
-
* createProduct({
|
|
68
|
-
* creatorId: 'creator-123',
|
|
69
|
-
* data: {
|
|
70
|
-
* title: '1-on-1 Coaching Session',
|
|
71
|
-
* description: 'Personal coaching session',
|
|
72
|
-
* type: 'SESSION_1ON1',
|
|
73
|
-
* price: 5000,
|
|
74
|
-
* durationMinutes: 60,
|
|
75
|
-
* },
|
|
76
|
-
* });
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
34
|
export function useCreateProduct() {
|
|
80
35
|
const queryClient = useQueryClient();
|
|
81
36
|
|
|
@@ -98,23 +53,6 @@ export function useCreateProduct() {
|
|
|
98
53
|
});
|
|
99
54
|
}
|
|
100
55
|
|
|
101
|
-
/**
|
|
102
|
-
* Update an existing product
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* ```tsx
|
|
106
|
-
* const { mutate: updateProduct, isLoading } = useUpdateProduct();
|
|
107
|
-
*
|
|
108
|
-
* updateProduct({
|
|
109
|
-
* creatorId: 'creator-123',
|
|
110
|
-
* productId: 'product-456',
|
|
111
|
-
* data: {
|
|
112
|
-
* price: 6000,
|
|
113
|
-
* isActive: true,
|
|
114
|
-
* },
|
|
115
|
-
* });
|
|
116
|
-
* ```
|
|
117
|
-
*/
|
|
118
56
|
export function useUpdateProduct() {
|
|
119
57
|
const queryClient = useQueryClient();
|
|
120
58
|
|
|
@@ -143,19 +81,6 @@ export function useUpdateProduct() {
|
|
|
143
81
|
});
|
|
144
82
|
}
|
|
145
83
|
|
|
146
|
-
/**
|
|
147
|
-
* Delete a product
|
|
148
|
-
*
|
|
149
|
-
* @example
|
|
150
|
-
* ```tsx
|
|
151
|
-
* const { mutate: deleteProduct, isLoading } = useDeleteProduct();
|
|
152
|
-
*
|
|
153
|
-
* deleteProduct({
|
|
154
|
-
* creatorId: 'creator-123',
|
|
155
|
-
* productId: 'product-456',
|
|
156
|
-
* });
|
|
157
|
-
* ```
|
|
158
|
-
*/
|
|
159
84
|
export function useDeleteProduct() {
|
|
160
85
|
const queryClient = useQueryClient();
|
|
161
86
|
|
|
@@ -182,23 +107,6 @@ export function useDeleteProduct() {
|
|
|
182
107
|
// MUTATION HOOKS - BOOKINGS
|
|
183
108
|
// ============================================================================
|
|
184
109
|
|
|
185
|
-
/**
|
|
186
|
-
* Book a product/session
|
|
187
|
-
*
|
|
188
|
-
* @example
|
|
189
|
-
* ```tsx
|
|
190
|
-
* const { mutate: bookProduct, isLoading } = useBookProduct();
|
|
191
|
-
*
|
|
192
|
-
* bookProduct({
|
|
193
|
-
* productId: 'product-123',
|
|
194
|
-
* data: {
|
|
195
|
-
* scheduledAt: '2024-03-15T10:00:00Z',
|
|
196
|
-
* timezone: 'Europe/London',
|
|
197
|
-
* clientNotes: 'Looking forward to the session!',
|
|
198
|
-
* },
|
|
199
|
-
* });
|
|
200
|
-
* ```
|
|
201
|
-
*/
|
|
202
110
|
export function useBookProduct() {
|
|
203
111
|
const queryClient = useQueryClient();
|
|
204
112
|
|
|
@@ -220,22 +128,6 @@ export function useBookProduct() {
|
|
|
220
128
|
});
|
|
221
129
|
}
|
|
222
130
|
|
|
223
|
-
/**
|
|
224
|
-
* Update a product booking
|
|
225
|
-
*
|
|
226
|
-
* @example
|
|
227
|
-
* ```tsx
|
|
228
|
-
* const { mutate: updateBooking, isLoading } = useUpdateProductBooking();
|
|
229
|
-
*
|
|
230
|
-
* updateBooking({
|
|
231
|
-
* bookingId: 'booking-123',
|
|
232
|
-
* data: {
|
|
233
|
-
* scheduledAt: '2024-03-16T14:00:00Z',
|
|
234
|
-
* clientNotes: 'Rescheduled due to conflict',
|
|
235
|
-
* },
|
|
236
|
-
* });
|
|
237
|
-
* ```
|
|
238
|
-
*/
|
|
239
131
|
export function useUpdateProductBooking() {
|
|
240
132
|
const queryClient = useQueryClient();
|
|
241
133
|
|
|
@@ -257,25 +149,11 @@ export function useUpdateProductBooking() {
|
|
|
257
149
|
onSuccess: (_, { bookingId }) => {
|
|
258
150
|
queryClient.invalidateQueries({ queryKey: productKeys.bookingDetail(bookingId) });
|
|
259
151
|
queryClient.invalidateQueries({ queryKey: productKeys.myBookings() });
|
|
260
|
-
// Also invalidate creator bookings as they see this
|
|
261
152
|
queryClient.invalidateQueries({ queryKey: productKeys.bookings() });
|
|
262
153
|
},
|
|
263
154
|
});
|
|
264
155
|
}
|
|
265
156
|
|
|
266
|
-
/**
|
|
267
|
-
* Cancel a product booking
|
|
268
|
-
*
|
|
269
|
-
* @example
|
|
270
|
-
* ```tsx
|
|
271
|
-
* const { mutate: cancelBooking, isLoading } = useCancelProductBooking();
|
|
272
|
-
*
|
|
273
|
-
* cancelBooking({
|
|
274
|
-
* bookingId: 'booking-123',
|
|
275
|
-
* data: { reason: 'Schedule conflict' },
|
|
276
|
-
* });
|
|
277
|
-
* ```
|
|
278
|
-
*/
|
|
279
157
|
export function useCancelProductBooking() {
|
|
280
158
|
const queryClient = useQueryClient();
|
|
281
159
|
|
|
@@ -302,16 +180,6 @@ export function useCancelProductBooking() {
|
|
|
302
180
|
});
|
|
303
181
|
}
|
|
304
182
|
|
|
305
|
-
/**
|
|
306
|
-
* Mark a booking as completed (creator only)
|
|
307
|
-
*
|
|
308
|
-
* @example
|
|
309
|
-
* ```tsx
|
|
310
|
-
* const { mutate: completeBooking, isLoading } = useCompleteProductBooking();
|
|
311
|
-
*
|
|
312
|
-
* completeBooking({ bookingId: 'booking-123' });
|
|
313
|
-
* ```
|
|
314
|
-
*/
|
|
315
183
|
export function useCompleteProductBooking() {
|
|
316
184
|
const queryClient = useQueryClient();
|
|
317
185
|
|
|
@@ -344,23 +212,6 @@ export interface PaymentIntentResponse {
|
|
|
344
212
|
paymentIntentId: string;
|
|
345
213
|
}
|
|
346
214
|
|
|
347
|
-
/**
|
|
348
|
-
* Create a payment intent for a product booking
|
|
349
|
-
* Use this with Stripe Elements to process payment
|
|
350
|
-
*
|
|
351
|
-
* @example
|
|
352
|
-
* ```tsx
|
|
353
|
-
* const { mutate: createPaymentIntent, data, isLoading } = useCreateProductPaymentIntent();
|
|
354
|
-
*
|
|
355
|
-
* // Create payment intent
|
|
356
|
-
* createPaymentIntent({ bookingId: 'booking-123' });
|
|
357
|
-
*
|
|
358
|
-
* // Use clientSecret with Stripe Elements
|
|
359
|
-
* if (data?.clientSecret) {
|
|
360
|
-
* // Pass to Stripe PaymentElement
|
|
361
|
-
* }
|
|
362
|
-
* ```
|
|
363
|
-
*/
|
|
364
215
|
export function useCreateProductPaymentIntent() {
|
|
365
216
|
return useMutation({
|
|
366
217
|
mutationFn: async ({
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { useQuery, UseQueryOptions } from '@tanstack/react-query';
|
|
2
2
|
import { getApiClient } from '../client';
|
|
3
|
+
import type { components } from '@growsober/types';
|
|
3
4
|
|
|
4
5
|
// ============================================================================
|
|
5
|
-
// TYPES
|
|
6
|
+
// TYPES — derived from auto-generated OpenAPI types
|
|
6
7
|
// ============================================================================
|
|
7
8
|
|
|
8
|
-
export type
|
|
9
|
-
export type
|
|
9
|
+
export type CreateProductDto = components['schemas']['CreateProductDto'];
|
|
10
|
+
export type UpdateProductDto = components['schemas']['UpdateProductDto'];
|
|
11
|
+
|
|
12
|
+
export type ProductType = CreateProductDto['type'];
|
|
13
|
+
export type DeliveryMethod = CreateProductDto['deliveryMethod'];
|
|
10
14
|
export type BookingStatus = 'PENDING' | 'CONFIRMED' | 'CANCELLED' | 'COMPLETED';
|
|
11
15
|
export type PaymentStatus = 'PENDING' | 'PAID' | 'REFUNDED' | 'FAILED';
|
|
12
16
|
|
|
@@ -17,6 +21,8 @@ export interface CreatorProductResponse {
|
|
|
17
21
|
slug: string;
|
|
18
22
|
description: string | null;
|
|
19
23
|
imageUrl: string | null;
|
|
24
|
+
category: string | null;
|
|
25
|
+
tags: string[];
|
|
20
26
|
type: ProductType;
|
|
21
27
|
price: number;
|
|
22
28
|
currency: string;
|
|
@@ -26,6 +32,8 @@ export interface CreatorProductResponse {
|
|
|
26
32
|
locationDetails: string | null;
|
|
27
33
|
isActive: boolean;
|
|
28
34
|
isFeatured: boolean;
|
|
35
|
+
stripeProductId?: string | null;
|
|
36
|
+
stripePriceId?: string | null;
|
|
29
37
|
createdAt: string;
|
|
30
38
|
updatedAt: string;
|
|
31
39
|
creator?: {
|
|
@@ -112,21 +120,6 @@ export const productKeys = {
|
|
|
112
120
|
// QUERY HOOKS
|
|
113
121
|
// ============================================================================
|
|
114
122
|
|
|
115
|
-
/**
|
|
116
|
-
* Get paginated list of all active products
|
|
117
|
-
*
|
|
118
|
-
* @param filters - Query parameters for filtering and pagination
|
|
119
|
-
* @param options - TanStack Query options
|
|
120
|
-
*
|
|
121
|
-
* @example
|
|
122
|
-
* ```tsx
|
|
123
|
-
* const { data, isLoading } = useProducts({
|
|
124
|
-
* page: 1,
|
|
125
|
-
* limit: 20,
|
|
126
|
-
* type: 'SESSION_1ON1',
|
|
127
|
-
* });
|
|
128
|
-
* ```
|
|
129
|
-
*/
|
|
130
123
|
export function useProducts(
|
|
131
124
|
filters?: ProductFilters,
|
|
132
125
|
options?: Omit<UseQueryOptions<PaginatedProductsResponse>, 'queryKey' | 'queryFn'>
|
|
@@ -144,17 +137,6 @@ export function useProducts(
|
|
|
144
137
|
});
|
|
145
138
|
}
|
|
146
139
|
|
|
147
|
-
/**
|
|
148
|
-
* Get a single product by ID
|
|
149
|
-
*
|
|
150
|
-
* @param id - Product ID
|
|
151
|
-
* @param options - TanStack Query options
|
|
152
|
-
*
|
|
153
|
-
* @example
|
|
154
|
-
* ```tsx
|
|
155
|
-
* const { data, isLoading } = useProduct('product-123');
|
|
156
|
-
* ```
|
|
157
|
-
*/
|
|
158
140
|
export function useProduct(
|
|
159
141
|
id: string,
|
|
160
142
|
options?: Omit<UseQueryOptions<CreatorProductResponse>, 'queryKey' | 'queryFn'>
|
|
@@ -171,17 +153,6 @@ export function useProduct(
|
|
|
171
153
|
});
|
|
172
154
|
}
|
|
173
155
|
|
|
174
|
-
/**
|
|
175
|
-
* Get a product by its slug
|
|
176
|
-
*
|
|
177
|
-
* @param slug - Product slug
|
|
178
|
-
* @param options - TanStack Query options
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* ```tsx
|
|
182
|
-
* const { data, isLoading } = useProductBySlug('1-on-1-coaching-abc123');
|
|
183
|
-
* ```
|
|
184
|
-
*/
|
|
185
156
|
export function useProductBySlug(
|
|
186
157
|
slug: string,
|
|
187
158
|
options?: Omit<UseQueryOptions<CreatorProductResponse>, 'queryKey' | 'queryFn'>
|
|
@@ -198,21 +169,6 @@ export function useProductBySlug(
|
|
|
198
169
|
});
|
|
199
170
|
}
|
|
200
171
|
|
|
201
|
-
/**
|
|
202
|
-
* Get products for a specific creator
|
|
203
|
-
*
|
|
204
|
-
* @param creatorId - Creator ID
|
|
205
|
-
* @param filters - Query parameters for filtering
|
|
206
|
-
* @param options - TanStack Query options
|
|
207
|
-
*
|
|
208
|
-
* @example
|
|
209
|
-
* ```tsx
|
|
210
|
-
* const { data, isLoading } = useCreatorProducts('creator-123', {
|
|
211
|
-
* type: 'SESSION_1ON1',
|
|
212
|
-
* isActive: true,
|
|
213
|
-
* });
|
|
214
|
-
* ```
|
|
215
|
-
*/
|
|
216
172
|
export function useCreatorProducts(
|
|
217
173
|
creatorId: string,
|
|
218
174
|
filters?: ProductFilters,
|
|
@@ -232,16 +188,6 @@ export function useCreatorProducts(
|
|
|
232
188
|
});
|
|
233
189
|
}
|
|
234
190
|
|
|
235
|
-
/**
|
|
236
|
-
* Get current user's product bookings
|
|
237
|
-
*
|
|
238
|
-
* @param options - TanStack Query options
|
|
239
|
-
*
|
|
240
|
-
* @example
|
|
241
|
-
* ```tsx
|
|
242
|
-
* const { data, isLoading } = useMyProductBookings();
|
|
243
|
-
* ```
|
|
244
|
-
*/
|
|
245
191
|
export function useMyProductBookings(
|
|
246
192
|
options?: Omit<UseQueryOptions<ProductBookingResponse[]>, 'queryKey' | 'queryFn'>
|
|
247
193
|
) {
|
|
@@ -256,17 +202,6 @@ export function useMyProductBookings(
|
|
|
256
202
|
});
|
|
257
203
|
}
|
|
258
204
|
|
|
259
|
-
/**
|
|
260
|
-
* Get a single product booking by ID
|
|
261
|
-
*
|
|
262
|
-
* @param bookingId - Booking ID
|
|
263
|
-
* @param options - TanStack Query options
|
|
264
|
-
*
|
|
265
|
-
* @example
|
|
266
|
-
* ```tsx
|
|
267
|
-
* const { data, isLoading } = useProductBooking('booking-123');
|
|
268
|
-
* ```
|
|
269
|
-
*/
|
|
270
205
|
export function useProductBooking(
|
|
271
206
|
bookingId: string,
|
|
272
207
|
options?: Omit<UseQueryOptions<ProductBookingResponse>, 'queryKey' | 'queryFn'>
|
|
@@ -283,18 +218,6 @@ export function useProductBooking(
|
|
|
283
218
|
});
|
|
284
219
|
}
|
|
285
220
|
|
|
286
|
-
/**
|
|
287
|
-
* Get bookings for a creator's products (creator dashboard)
|
|
288
|
-
*
|
|
289
|
-
* @param creatorId - Creator ID
|
|
290
|
-
* @param options - TanStack Query options
|
|
291
|
-
*
|
|
292
|
-
* @example
|
|
293
|
-
* ```tsx
|
|
294
|
-
* // For creator dashboard - see all bookings for their products
|
|
295
|
-
* const { data, isLoading } = useCreatorBookings('creator-123');
|
|
296
|
-
* ```
|
|
297
|
-
*/
|
|
298
221
|
export function useCreatorBookings(
|
|
299
222
|
creatorId: string,
|
|
300
223
|
options?: Omit<UseQueryOptions<ProductBookingResponse[]>, 'queryKey' | 'queryFn'>
|