@growsober/sdk 1.0.5 → 1.0.8

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.
Files changed (70) hide show
  1. package/dist/__tests__/e2e.test.d.ts +30 -0
  2. package/dist/__tests__/e2e.test.js +959 -63
  3. package/dist/api/mutations/badges.d.ts +116 -0
  4. package/dist/api/mutations/badges.js +177 -0
  5. package/dist/api/mutations/brands.d.ts +251 -0
  6. package/dist/api/mutations/brands.js +242 -0
  7. package/dist/api/mutations/creators.d.ts +131 -0
  8. package/dist/api/mutations/creators.js +129 -0
  9. package/dist/api/mutations/event-chat.d.ts +2 -2
  10. package/dist/api/mutations/event-chat.js +9 -9
  11. package/dist/api/mutations/index.d.ts +4 -0
  12. package/dist/api/mutations/index.js +5 -1
  13. package/dist/api/mutations/jack.d.ts +29 -0
  14. package/dist/api/mutations/jack.js +41 -1
  15. package/dist/api/mutations/products.d.ts +175 -0
  16. package/dist/api/mutations/products.js +226 -0
  17. package/dist/api/mutations/support.d.ts +20 -1
  18. package/dist/api/mutations/support.js +36 -1
  19. package/dist/api/queries/badges.d.ts +221 -0
  20. package/dist/api/queries/badges.js +290 -0
  21. package/dist/api/queries/bookings.d.ts +1 -1
  22. package/dist/api/queries/brands.d.ts +248 -0
  23. package/dist/api/queries/brands.js +226 -0
  24. package/dist/api/queries/businesses.d.ts +61 -1
  25. package/dist/api/queries/businesses.js +27 -1
  26. package/dist/api/queries/creators.d.ts +332 -0
  27. package/dist/api/queries/creators.js +249 -0
  28. package/dist/api/queries/event-chat.d.ts +1 -1
  29. package/dist/api/queries/event-chat.js +4 -4
  30. package/dist/api/queries/events.d.ts +45 -0
  31. package/dist/api/queries/index.d.ts +5 -0
  32. package/dist/api/queries/index.js +6 -1
  33. package/dist/api/queries/jack.d.ts +80 -0
  34. package/dist/api/queries/jack.js +98 -1
  35. package/dist/api/queries/library.d.ts +8 -0
  36. package/dist/api/queries/products.d.ts +185 -0
  37. package/dist/api/queries/products.js +203 -0
  38. package/dist/api/queries/support.d.ts +46 -1
  39. package/dist/api/queries/support.js +48 -1
  40. package/dist/api/queries/venues.d.ts +304 -0
  41. package/dist/api/queries/venues.js +211 -0
  42. package/dist/api/types.d.ts +245 -0
  43. package/dist/api/types.js +6 -1
  44. package/dist/api/utils/eventGrouping.d.ts +104 -0
  45. package/dist/api/utils/eventGrouping.js +155 -0
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.js +5 -1
  48. package/package.json +5 -2
  49. package/src/__tests__/e2e.test.ts +996 -64
  50. package/src/api/mutations/badges.ts +228 -0
  51. package/src/api/mutations/brands.ts +376 -0
  52. package/src/api/mutations/creators.ts +171 -0
  53. package/src/api/mutations/event-chat.ts +8 -8
  54. package/src/api/mutations/index.ts +4 -0
  55. package/src/api/mutations/jack.ts +50 -1
  56. package/src/api/mutations/products.ts +336 -0
  57. package/src/api/mutations/support.ts +44 -0
  58. package/src/api/queries/badges.ts +385 -0
  59. package/src/api/queries/brands.ts +281 -0
  60. package/src/api/queries/businesses.ts +30 -1
  61. package/src/api/queries/creators.ts +308 -0
  62. package/src/api/queries/event-chat.ts +3 -3
  63. package/src/api/queries/index.ts +5 -0
  64. package/src/api/queries/jack.ts +139 -1
  65. package/src/api/queries/products.ts +312 -0
  66. package/src/api/queries/support.ts +54 -0
  67. package/src/api/queries/venues.ts +271 -0
  68. package/src/api/types.ts +317 -1
  69. package/src/api/utils/eventGrouping.ts +181 -0
  70. package/src/index.ts +6 -0
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCreateProduct = useCreateProduct;
4
+ exports.useUpdateProduct = useUpdateProduct;
5
+ exports.useDeleteProduct = useDeleteProduct;
6
+ exports.useBookProduct = useBookProduct;
7
+ exports.useUpdateProductBooking = useUpdateProductBooking;
8
+ exports.useCancelProductBooking = useCancelProductBooking;
9
+ exports.useCompleteProductBooking = useCompleteProductBooking;
10
+ const react_query_1 = require("@tanstack/react-query");
11
+ const client_1 = require("../client");
12
+ const products_1 = require("../queries/products");
13
+ // ============================================================================
14
+ // MUTATION HOOKS - PRODUCTS
15
+ // ============================================================================
16
+ /**
17
+ * Create a new product for a creator
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * const { mutate: createProduct, isLoading } = useCreateProduct();
22
+ *
23
+ * createProduct({
24
+ * creatorId: 'creator-123',
25
+ * data: {
26
+ * title: '1-on-1 Coaching Session',
27
+ * description: 'Personal coaching session',
28
+ * type: 'SESSION_1ON1',
29
+ * price: 5000,
30
+ * durationMinutes: 60,
31
+ * },
32
+ * });
33
+ * ```
34
+ */
35
+ function useCreateProduct() {
36
+ const queryClient = (0, react_query_1.useQueryClient)();
37
+ return (0, react_query_1.useMutation)({
38
+ mutationFn: async ({ creatorId, data, }) => {
39
+ const client = (0, client_1.getApiClient)();
40
+ const response = await client.post(`/api/v1/creators/${creatorId}/products`, data);
41
+ return response.data;
42
+ },
43
+ onSuccess: (_, { creatorId }) => {
44
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.byCreator(creatorId) });
45
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.lists() });
46
+ },
47
+ });
48
+ }
49
+ /**
50
+ * Update an existing product
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * const { mutate: updateProduct, isLoading } = useUpdateProduct();
55
+ *
56
+ * updateProduct({
57
+ * creatorId: 'creator-123',
58
+ * productId: 'product-456',
59
+ * data: {
60
+ * price: 6000,
61
+ * isActive: true,
62
+ * },
63
+ * });
64
+ * ```
65
+ */
66
+ function useUpdateProduct() {
67
+ const queryClient = (0, react_query_1.useQueryClient)();
68
+ return (0, react_query_1.useMutation)({
69
+ mutationFn: async ({ creatorId, productId, data, }) => {
70
+ const client = (0, client_1.getApiClient)();
71
+ const response = await client.put(`/api/v1/creators/${creatorId}/products/${productId}`, data);
72
+ return response.data;
73
+ },
74
+ onSuccess: (_, { creatorId, productId }) => {
75
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.detail(productId) });
76
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.byCreator(creatorId) });
77
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.lists() });
78
+ },
79
+ });
80
+ }
81
+ /**
82
+ * Delete a product
83
+ *
84
+ * @example
85
+ * ```tsx
86
+ * const { mutate: deleteProduct, isLoading } = useDeleteProduct();
87
+ *
88
+ * deleteProduct({
89
+ * creatorId: 'creator-123',
90
+ * productId: 'product-456',
91
+ * });
92
+ * ```
93
+ */
94
+ function useDeleteProduct() {
95
+ const queryClient = (0, react_query_1.useQueryClient)();
96
+ return (0, react_query_1.useMutation)({
97
+ mutationFn: async ({ creatorId, productId, }) => {
98
+ const client = (0, client_1.getApiClient)();
99
+ await client.delete(`/api/v1/creators/${creatorId}/products/${productId}`);
100
+ },
101
+ onSuccess: (_, { creatorId, productId }) => {
102
+ queryClient.removeQueries({ queryKey: products_1.productKeys.detail(productId) });
103
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.byCreator(creatorId) });
104
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.lists() });
105
+ },
106
+ });
107
+ }
108
+ // ============================================================================
109
+ // MUTATION HOOKS - BOOKINGS
110
+ // ============================================================================
111
+ /**
112
+ * Book a product/session
113
+ *
114
+ * @example
115
+ * ```tsx
116
+ * const { mutate: bookProduct, isLoading } = useBookProduct();
117
+ *
118
+ * bookProduct({
119
+ * productId: 'product-123',
120
+ * data: {
121
+ * scheduledAt: '2024-03-15T10:00:00Z',
122
+ * timezone: 'Europe/London',
123
+ * clientNotes: 'Looking forward to the session!',
124
+ * },
125
+ * });
126
+ * ```
127
+ */
128
+ function useBookProduct() {
129
+ const queryClient = (0, react_query_1.useQueryClient)();
130
+ return (0, react_query_1.useMutation)({
131
+ mutationFn: async ({ productId, data, }) => {
132
+ const client = (0, client_1.getApiClient)();
133
+ const response = await client.post(`/api/v1/products/${productId}/book`, data);
134
+ return response.data;
135
+ },
136
+ onSuccess: () => {
137
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
138
+ },
139
+ });
140
+ }
141
+ /**
142
+ * Update a product booking
143
+ *
144
+ * @example
145
+ * ```tsx
146
+ * const { mutate: updateBooking, isLoading } = useUpdateProductBooking();
147
+ *
148
+ * updateBooking({
149
+ * bookingId: 'booking-123',
150
+ * data: {
151
+ * scheduledAt: '2024-03-16T14:00:00Z',
152
+ * clientNotes: 'Rescheduled due to conflict',
153
+ * },
154
+ * });
155
+ * ```
156
+ */
157
+ function useUpdateProductBooking() {
158
+ const queryClient = (0, react_query_1.useQueryClient)();
159
+ return (0, react_query_1.useMutation)({
160
+ mutationFn: async ({ bookingId, data, }) => {
161
+ const client = (0, client_1.getApiClient)();
162
+ const response = await client.put(`/api/v1/users/me/product-bookings/${bookingId}`, data);
163
+ return response.data;
164
+ },
165
+ onSuccess: (_, { bookingId }) => {
166
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
167
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
168
+ // Also invalidate creator bookings as they see this
169
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
170
+ },
171
+ });
172
+ }
173
+ /**
174
+ * Cancel a product booking
175
+ *
176
+ * @example
177
+ * ```tsx
178
+ * const { mutate: cancelBooking, isLoading } = useCancelProductBooking();
179
+ *
180
+ * cancelBooking({
181
+ * bookingId: 'booking-123',
182
+ * data: { reason: 'Schedule conflict' },
183
+ * });
184
+ * ```
185
+ */
186
+ function useCancelProductBooking() {
187
+ const queryClient = (0, react_query_1.useQueryClient)();
188
+ return (0, react_query_1.useMutation)({
189
+ mutationFn: async ({ bookingId, data, }) => {
190
+ const client = (0, client_1.getApiClient)();
191
+ const response = await client.delete(`/api/v1/users/me/product-bookings/${bookingId}`, { data });
192
+ return response.data;
193
+ },
194
+ onSuccess: (_, { bookingId }) => {
195
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
196
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
197
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
198
+ },
199
+ });
200
+ }
201
+ /**
202
+ * Mark a booking as completed (creator only)
203
+ *
204
+ * @example
205
+ * ```tsx
206
+ * const { mutate: completeBooking, isLoading } = useCompleteProductBooking();
207
+ *
208
+ * completeBooking({ bookingId: 'booking-123' });
209
+ * ```
210
+ */
211
+ function useCompleteProductBooking() {
212
+ const queryClient = (0, react_query_1.useQueryClient)();
213
+ return (0, react_query_1.useMutation)({
214
+ mutationFn: async ({ bookingId, }) => {
215
+ const client = (0, client_1.getApiClient)();
216
+ const response = await client.post(`/api/v1/users/me/product-bookings/${bookingId}/complete`);
217
+ return response.data;
218
+ },
219
+ onSuccess: (_, { bookingId }) => {
220
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
221
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
222
+ queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
223
+ },
224
+ });
225
+ }
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQThFQSw0Q0FvQkM7QUFtQkQsNENBMEJDO0FBZUQsNENBb0JDO0FBdUJELHdDQW1CQztBQWtCRCwwREF5QkM7QUFlRCwwREF3QkM7QUFZRCw4REFxQkM7QUEvVUQsdURBQW9FO0FBQ3BFLHNDQUF5QztBQUN6QyxrREFBK0g7QUFxRC9ILCtFQUErRTtBQUMvRSw0QkFBNEI7QUFDNUIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUNqQixTQUFTLEVBQ1QsSUFBSSxHQUlMLEVBQW1DLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixTQUFTLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDOUIsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7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Q0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzlCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgcHJvZHVjdEtleXMsIENyZWF0b3JQcm9kdWN0UmVzcG9uc2UsIFByb2R1Y3RCb29raW5nUmVzcG9uc2UsIFByb2R1Y3RUeXBlLCBEZWxpdmVyeU1ldGhvZCB9IGZyb20gJy4uL3F1ZXJpZXMvcHJvZHVjdHMnO1xuaW1wb3J0IHsgY3JlYXRvcktleXMgfSBmcm9tICcuLi9xdWVyaWVzL2NyZWF0b3JzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVQcm9kdWN0UmVxdWVzdCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgdHlwZT86IFByb2R1Y3RUeXBlO1xuICBwcmljZTogbnVtYmVyO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgZHVyYXRpb25NaW51dGVzPzogbnVtYmVyO1xuICBtYXhQYXJ0aWNpcGFudHM/OiBudW1iZXI7XG4gIGRlbGl2ZXJ5TWV0aG9kPzogRGVsaXZlcnlNZXRob2Q7XG4gIGxvY2F0aW9uRGV0YWlscz86IHN0cmluZztcbiAgc2x1Zz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQcm9kdWN0UmVxdWVzdCB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9kdWN0VHlwZTtcbiAgcHJpY2U/OiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBkdXJhdGlvbk1pbnV0ZXM/OiBudW1iZXI7XG4gIG1heFBhcnRpY2lwYW50cz86IG51bWJlcjtcbiAgZGVsaXZlcnlNZXRob2Q/OiBEZWxpdmVyeU1ldGhvZDtcbiAgbG9jYXRpb25EZXRhaWxzPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIGlzRmVhdHVyZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tQcm9kdWN0UmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVCb29raW5nUmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0Pzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbiAgY3JlYXRvck5vdGVzPzogc3RyaW5nO1xuICBtZWV0aW5nTGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxCb29raW5nUmVxdWVzdCB7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1MgLSBQUk9EVUNUU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9kdWN0IGZvciBhIGNyZWF0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY3JlYXRlUHJvZHVjdCwgaXNMb2FkaW5nIH0gPSB1c2VDcmVhdGVQcm9kdWN0KCk7XG4gKlxuICogY3JlYXRlUHJvZHVjdCh7XG4gKiAgIGNyZWF0b3JJZDogJ2NyZWF0b3ItMTIzJyxcbiAqICAgZGF0YToge1xuICogICAgIHRpdGxlOiAnMS1vbi0xIENvYWNoaW5nIFNlc3Npb24nLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUGVyc29uYWwgY29hY2hpbmcgc2Vzc2lvbicsXG4gKiAgICAgdHlwZTogJ1NFU1NJT05fMU9OMScsXG4gKiAgICAgcHJpY2U6IDUwMDAsXG4gKiAgICAgZHVyYXRpb25NaW51dGVzOiA2MCxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVQcm9kdWN0KCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgY3JlYXRvcklkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgICAgIGRhdGE6IENyZWF0ZVByb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPENyZWF0b3JQcm9kdWN0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9jcmVhdG9ycy8ke2NyZWF0b3JJZH0vcHJvZHVjdHNgLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBjcmVhdG9ySWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYnlDcmVhdG9yKGNyZWF0b3JJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5saXN0cygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBwcm9kdWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IHVwZGF0ZVByb2R1Y3QsIGlzTG9hZGluZyB9ID0gdXNlVXBkYXRlUHJvZHVjdCgpO1xuICpcbiAqIHVwZGF0ZVByb2R1Y3Qoe1xuICogICBjcmVhdG9ySWQ6ICdjcmVhdG9yLTEyMycsXG4gKiAgIHByb2R1Y3RJZDogJ3Byb2R1Y3QtNDU2JyxcbiAqICAgZGF0YToge1xuICogICAgIHByaWNlOiA2MDAwLFxuICogICAgIGlzQWN0aXZlOiB0cnVlLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBjcmVhdG9ySWQsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGNyZWF0b3JJZDogc3RyaW5nO1xuICAgICAgcHJvZHVjdElkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVQcm9kdWN0UmVxdWVzdDtcbiAgICB9KTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChcbiAgICAgICAgYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgY3JlYXRvcklkLCBwcm9kdWN0SWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGEgcHJvZHVjdFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBkZWxldGVQcm9kdWN0LCBpc0xvYWRpbmcgfSA9IHVzZURlbGV0ZVByb2R1Y3QoKTtcbiAqXG4gKiBkZWxldGVQcm9kdWN0KHtcbiAqICAgY3JlYXRvcklkOiAnY3JlYXRvci0xMjMnLFxuICogICBwcm9kdWN0SWQ6ICdwcm9kdWN0LTQ1NicsXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlUHJvZHVjdCgpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGNyZWF0b3JJZCxcbiAgICAgIHByb2R1Y3RJZCxcbiAgICB9OiB7XG4gICAgICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgYXdhaXQgY2xpZW50LmRlbGV0ZShgL2FwaS92MS9jcmVhdG9ycy8ke2NyZWF0b3JJZH0vcHJvZHVjdHMvJHtwcm9kdWN0SWR9YCk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGNyZWF0b3JJZCwgcHJvZHVjdElkIH0pID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LnJlbW92ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTIC0gQk9PS0lOR1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCb29rIGEgcHJvZHVjdC9zZXNzaW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IGJvb2tQcm9kdWN0LCBpc0xvYWRpbmcgfSA9IHVzZUJvb2tQcm9kdWN0KCk7XG4gKlxuICogYm9va1Byb2R1Y3Qoe1xuICogICBwcm9kdWN0SWQ6ICdwcm9kdWN0LTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzY2hlZHVsZWRBdDogJzIwMjQtMDMtMTVUMTA6MDA6MDBaJyxcbiAqICAgICB0aW1lem9uZTogJ0V1cm9wZS9Mb25kb24nLFxuICogICAgIGNsaWVudE5vdGVzOiAnTG9va2luZyBmb3J3YXJkIHRvIHRoZSBzZXNzaW9uIScsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQm9va1Byb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgICAgZGF0YTogQm9va1Byb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH0vYm9va2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBwcm9kdWN0IGJvb2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogdXBkYXRlQm9va2luZywgaXNMb2FkaW5nIH0gPSB1c2VVcGRhdGVQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIHVwZGF0ZUJvb2tpbmcoe1xuICogICBib29raW5nSWQ6ICdib29raW5nLTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzY2hlZHVsZWRBdDogJzIwMjQtMDMtMTZUMTQ6MDA6MDBaJyxcbiAqICAgICBjbGllbnROb3RlczogJ1Jlc2NoZWR1bGVkIGR1ZSB0byBjb25mbGljdCcsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlUHJvZHVjdEJvb2tpbmcoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBib29raW5nSWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgICAgZGF0YTogVXBkYXRlQm9va2luZ1JlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8UHJvZHVjdEJvb2tpbmdSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9YCxcbiAgICAgICAgZGF0YVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBib29raW5nSWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ0RldGFpbChib29raW5nSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpIH0pO1xuICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIGNyZWF0b3IgYm9va2luZ3MgYXMgdGhleSBzZWUgdGhpc1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYW5jZWwgYSBwcm9kdWN0IGJvb2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY2FuY2VsQm9va2luZywgaXNMb2FkaW5nIH0gPSB1c2VDYW5jZWxQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIGNhbmNlbEJvb2tpbmcoe1xuICogICBib29raW5nSWQ6ICdib29raW5nLTEyMycsXG4gKiAgIGRhdGE6IHsgcmVhc29uOiAnU2NoZWR1bGUgY29uZmxpY3QnIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FuY2VsUHJvZHVjdEJvb2tpbmcoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBib29raW5nSWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgICAgZGF0YT86IENhbmNlbEJvb2tpbmdSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKFxuICAgICAgICBgL2FwaS92MS91c2Vycy9tZS9wcm9kdWN0LWJvb2tpbmdzLyR7Ym9va2luZ0lkfWAsXG4gICAgICAgIHsgZGF0YSB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGJvb2tpbmdJZCB9KSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5nRGV0YWlsKGJvb2tpbmdJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5teUJvb2tpbmdzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5ncygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcmsgYSBib29raW5nIGFzIGNvbXBsZXRlZCAoY3JlYXRvciBvbmx5KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBjb21wbGV0ZUJvb2tpbmcsIGlzTG9hZGluZyB9ID0gdXNlQ29tcGxldGVQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIGNvbXBsZXRlQm9va2luZyh7IGJvb2tpbmdJZDogJ2Jvb2tpbmctMTIzJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29tcGxldGVQcm9kdWN0Qm9va2luZygpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGJvb2tpbmdJZCxcbiAgICB9OiB7XG4gICAgICBib29raW5nSWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9L2NvbXBsZXRlYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBib29raW5nSWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ0RldGFpbChib29raW5nSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
2
- import type { CheckInResponse, CreateCheckInRequest, UpdateCheckInRequest, MoodLogResponse, LogMoodRequest, WinResponse, CreateWinRequest, HabitResponse, CreateHabitRequest, UpdateHabitRequest, ReflectionResponse, CreateReflectionRequest } from '../types';
2
+ import type { CheckInResponse, CreateCheckInRequest, UpdateCheckInRequest, MoodLogResponse, LogMoodRequest, WinResponse, CreateWinRequest, HabitResponse, CreateHabitRequest, UpdateHabitRequest, ReflectionResponse, CreateReflectionRequest, CravingLogResponse, LogCravingRequest } from '../types';
3
3
  /**
4
4
  * Create a daily check-in
5
5
  *
@@ -163,3 +163,22 @@ export declare function useCompleteHabit(options?: Omit<UseMutationOptions<Habit
163
163
  * ```
164
164
  */
165
165
  export declare function useCreateReflection(options?: Omit<UseMutationOptions<ReflectionResponse, Error, CreateReflectionRequest>, 'mutationFn'>): UseMutationResult<ReflectionResponse, Error, CreateReflectionRequest>;
166
+ /**
167
+ * Log a craving
168
+ *
169
+ * @param options - TanStack Query mutation options
170
+ *
171
+ * @example
172
+ * ```tsx
173
+ * const { mutate, isPending } = useLogCraving();
174
+ *
175
+ * mutate({
176
+ * intensity: 4,
177
+ * trigger: 'Saw a beer ad',
178
+ * triggerType: 'ENVIRONMENT',
179
+ * copingUsed: ['deep_breathing', 'called_friend'],
180
+ * didResist: true
181
+ * });
182
+ * ```
183
+ */
184
+ export declare function useLogCraving(options?: Omit<UseMutationOptions<CravingLogResponse, Error, LogCravingRequest>, 'mutationFn'>): UseMutationResult<CravingLogResponse, Error, LogCravingRequest>;
@@ -9,6 +9,7 @@ exports.useUpdateHabit = useUpdateHabit;
9
9
  exports.useDeleteHabit = useDeleteHabit;
10
10
  exports.useCompleteHabit = useCompleteHabit;
11
11
  exports.useCreateReflection = useCreateReflection;
12
+ exports.useLogCraving = useLogCraving;
12
13
  const react_query_1 = require("@tanstack/react-query");
13
14
  const client_1 = require("../client");
14
15
  const support_1 = require("../queries/support");
@@ -304,4 +305,38 @@ function useCreateReflection(options) {
304
305
  ...options,
305
306
  });
306
307
  }
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0Q0EsNENBd0JDO0FBb0JELDRDQXNCQztBQWtCRCw0Q0FzQkM7QUFrQkQsb0NBdUJDO0FBbUJELHdDQXNCQztBQW9CRCx3Q0FnQ0M7QUFjRCx3Q0FrQkM7QUFjRCw0Q0FtQkM7QUFrQkQsa0RBc0JDO0FBcllELHVEQUsrQjtBQUMvQixzQ0FBeUM7QUFlekMsZ0RBQWlEO0FBRWpELCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BR0M7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQTBCLEVBQTRCLEVBQUU7WUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1QyxpREFBaUQ7WUFDakQsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxxQkFBVyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFB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cUJBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkUsb0NBQW9DO1FBQ3RDLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdXNlTXV0YXRpb24sXG4gIHVzZVF1ZXJ5Q2xpZW50LFxuICBVc2VNdXRhdGlvbk9wdGlvbnMsXG4gIFVzZU11dGF0aW9uUmVzdWx0LFxufSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHtcbiAgQ2hlY2tJblJlc3BvbnNlLFxuICBDcmVhdGVDaGVja0luUmVxdWVzdCxcbiAgVXBkYXRlQ2hlY2tJblJlcXVlc3QsXG4gIE1vb2RMb2dSZXNwb25zZSxcbiAgTG9nTW9vZFJlcXVlc3QsXG4gIFdpblJlc3BvbnNlLFxuICBDcmVhdGVXaW5SZXF1ZXN0LFxuICBIYWJpdFJlc3BvbnNlLFxuICBDcmVhdGVIYWJpdFJlcXVlc3QsXG4gIFVwZGF0ZUhhYml0UmVxdWVzdCxcbiAgUmVmbGVjdGlvblJlc3BvbnNlLFxuICBDcmVhdGVSZWZsZWN0aW9uUmVxdWVzdCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgc3VwcG9ydEtleXMgfSBmcm9tICcuLi9xdWVyaWVzL3N1cHBvcnQnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNVVRBVElPTiBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIGRhaWx5IGNoZWNrLWluXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlQ3JlYXRlQ2hlY2tJbigpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIG1vb2Q6IDgsXG4gKiAgIG5vdGVzOiAnRmVlbGluZyBncmVhdCB0b2RheSEnLFxuICogICB0cmlnZ2VyczogWydzdHJlc3MnXSxcbiAqICAgZ3JhdGl0dWRlOiBbJ015IHN1cHBvcnQgZ3JvdXAnXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZUNoZWNrSW4oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxDaGVja0luUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVDaGVja0luUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PENoZWNrSW5SZXNwb25zZSwgRXJyb3IsIENyZWF0ZUNoZWNrSW5SZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVDaGVja0luUmVxdWVzdCk6IFByb21pc2U8Q2hlY2tJblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9jaGVjay1pbnMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAobmV3Q2hlY2tJbiwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGNoZWNrLWlucyBsaXN0IGFuZCB0b2RheSdzIGNoZWNrLWluXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0lucygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblRvZGF5KCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0luU3RyZWFrKCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGEgZGFpbHkgY2hlY2staW5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VVcGRhdGVDaGVja0luKCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgaWQ6ICdjaGVja2luLTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBtb29kOiA0LFxuICogICAgIG5vdGVzOiAnVXBkYXRlZCBub3RlcycsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVDaGVja0luKFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8Q2hlY2tJblJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVDaGVja0luUmVxdWVzdCB9PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8Q2hlY2tJblJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVDaGVja0luUmVxdWVzdCB9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7IGlkLCBkYXRhIH06IHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQ2hlY2tJblJlcXVlc3QgfSk6IFByb21pc2U8Q2hlY2tJblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChgL2FwaS92MS9zdXBwb3J0L2NoZWNrLWlucy8ke2lkfWAsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICh1cGRhdGVkQ2hlY2tJbiwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGNoZWNrLWlucyBsaXN0IGFuZCB0b2RheSdzIGNoZWNrLWluXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0lucygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblRvZGF5KCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0luU3RyZWFrKCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtb29kIGxvZ1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZU1vb2RMb2coKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBtb29kOiA3LFxuICogICBub3RlczogJ0ZlZWxpbmcgb3B0aW1pc3RpYycsXG4gKiAgIGFjdGl2aXRpZXM6IFsnZXhlcmNpc2UnLCAnbWVkaXRhdGlvbiddXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlTW9vZExvZyhcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPE1vb2RMb2dSZXNwb25zZSwgRXJyb3IsIExvZ01vb2RSZXF1ZXN0PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8TW9vZExvZ1Jlc3BvbnNlLCBFcnJvciwgTG9nTW9vZFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IExvZ01vb2RSZXF1ZXN0KTogUHJvbWlzZTxNb29kTG9nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L21vb2QnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAobmV3TW9vZExvZywgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIG1vb2QgbG9ncyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5tb29kTG9ncygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHdpblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZVdpbigpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIHRpdGxlOiAnMzAgZGF5cyBzb2JlciEnLFxuICogICBkZXNjcmlwdGlvbjogJ0hpdCBteSBmaXJzdCBtaWxlc3RvbmUnLFxuICogICBjYXRlZ29yeTogJ3NvYnJpZXR5J1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVdpbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPFdpblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlV2luUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PFdpblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlV2luUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlV2luUmVxdWVzdCk6IFByb21pc2U8V2luUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L3dpbnMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAobmV3V2luLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgd2lucyBsaXN0c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMud2lucygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMud2luc0J5Q2F0ZWdvcnkoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBoYWJpdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZUhhYml0KCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgbmFtZTogJ01vcm5pbmcgbWVkaXRhdGlvbicsXG4gKiAgIGRlc2NyaXB0aW9uOiAnMTAgbWludXRlcyBvZiBtaW5kZnVsbmVzcycsXG4gKiAgIGZyZXF1ZW5jeTogJ2RhaWx5JyxcbiAqICAgdGFyZ2V0RGF5czogN1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZUhhYml0KFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8SGFiaXRSZXNwb25zZSwgRXJyb3IsIENyZWF0ZUhhYml0UmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEhhYml0UmVzcG9uc2UsIEVycm9yLCBDcmVhdGVIYWJpdFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZUhhYml0UmVxdWVzdCk6IFByb21pc2U8SGFiaXRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KCcvYXBpL3YxL3N1cHBvcnQvaGFiaXRzJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld0hhYml0LCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgaGFiaXRzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIGhhYml0XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlVXBkYXRlSGFiaXQoKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBpZDogJ2hhYml0LTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBuYW1lOiAnRXZlbmluZyBtZWRpdGF0aW9uJyxcbiAqICAgICB0YXJnZXREYXlzOiAxNFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlSGFiaXQoXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxcbiAgICAgIEhhYml0UmVzcG9uc2UsXG4gICAgICBFcnJvcixcbiAgICAgIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlSGFiaXRSZXF1ZXN0IH1cbiAgICA+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxIYWJpdFJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVIYWJpdFJlcXVlc3QgfT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgaWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVIYWJpdFJlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8SGFiaXRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoYC9hcGkvdjEvc3VwcG9ydC9oYWJpdHMvJHtpZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAodXBkYXRlZEhhYml0LCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgaGFiaXRzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIERlbGV0ZSBhIGhhYml0XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlRGVsZXRlSGFiaXQoKTtcbiAqXG4gKiBtdXRhdGUoJ2hhYml0LTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWxldGVIYWJpdChcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPHZvaWQsIEVycm9yLCBzdHJpbmc+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDx2b2lkLCBFcnJvciwgc3RyaW5nPiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5kZWxldGUoYC9hcGkvdjEvc3VwcG9ydC9oYWJpdHMvJHtpZH1gKTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIGhhYml0SWQsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgaGFiaXRzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBsZXRlIGEgaGFiaXQgZm9yIHRvZGF5XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlQ29tcGxldGVIYWJpdCgpO1xuICpcbiAqIG11dGF0ZSgnaGFiaXQtMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbXBsZXRlSGFiaXQoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxIYWJpdFJlc3BvbnNlLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8SGFiaXRSZXNwb25zZSwgRXJyb3IsIHN0cmluZz4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoaWQ6IHN0cmluZyk6IFByb21pc2U8SGFiaXRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KGAvYXBpL3YxL3N1cHBvcnQvaGFiaXRzLyR7aWR9L2NvbXBsZXRlYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGNvbXBsZXRlZEhhYml0LCBoYWJpdElkLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0IHRvIHNob3cgdXBkYXRlZCBjb21wbGV0aW9uIHN0YXR1c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuaGFiaXRzKCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVmbGVjdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZVJlZmxlY3Rpb24oKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBjb250ZW50OiAnVG9kYXkgSSBsZWFybmVkLi4uJyxcbiAqICAgY2F0ZWdvcnk6ICdncm93dGgnLFxuICogICBtb29kOiA4XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlUmVmbGVjdGlvbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPFJlZmxlY3Rpb25SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8UmVmbGVjdGlvblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlUmVmbGVjdGlvblJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxSZWZsZWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L3JlZmxlY3Rpb25zJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld1JlZmxlY3Rpb24sIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSByZWZsZWN0aW9ucyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5yZWZsZWN0aW9ucygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
308
+ /**
309
+ * Log a craving
310
+ *
311
+ * @param options - TanStack Query mutation options
312
+ *
313
+ * @example
314
+ * ```tsx
315
+ * const { mutate, isPending } = useLogCraving();
316
+ *
317
+ * mutate({
318
+ * intensity: 4,
319
+ * trigger: 'Saw a beer ad',
320
+ * triggerType: 'ENVIRONMENT',
321
+ * copingUsed: ['deep_breathing', 'called_friend'],
322
+ * didResist: true
323
+ * });
324
+ * ```
325
+ */
326
+ function useLogCraving(options) {
327
+ const queryClient = (0, react_query_1.useQueryClient)();
328
+ return (0, react_query_1.useMutation)({
329
+ mutationFn: async (data) => {
330
+ const client = (0, client_1.getApiClient)();
331
+ const response = await client.post('/api/v1/support/cravings', data);
332
+ return response.data;
333
+ },
334
+ onSuccess: (newCraving, variables, context) => {
335
+ // Invalidate cravings list and stats
336
+ queryClient.invalidateQueries({ queryKey: support_1.supportKeys.cravings() });
337
+ // Call user's onSuccess if provided
338
+ },
339
+ ...options,
340
+ });
341
+ }
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4Q0EsNENBd0JDO0FBb0JELDRDQXNCQztBQWtCRCw0Q0FzQkM7QUFrQkQsb0NBdUJDO0FBbUJELHdDQXNCQztBQW9CRCx3Q0FnQ0M7QUFjRCx3Q0FrQkM7QUFjRCw0Q0FtQkM7QUFrQkQsa0RBc0JDO0FBb0JELHNDQXNCQztBQWpiRCx1REFLK0I7QUFDL0Isc0NBQXlDO0FBaUJ6QyxnREFBaUQ7QUFFakQsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsT0FHQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBMEIsRUFBNEIsRUFBRTtZQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzVDLGlEQUFpRDtZQUNqRCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUscUJBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLFdBQVcsQ0FBQyxp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QUFFLFFBQVEsRUFBRSxxQkFBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV2RSxvQ0FBb0M7UUFDdEMsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFnQixhQUFhLENBQzNCLE9BR0M7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQXVCLEVBQStCLEVBQUU7WUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1QyxxQ0FBcUM7WUFDckMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXBFLG9DQUFvQztRQUN0QyxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHVzZU11dGF0aW9uLFxuICB1c2VRdWVyeUNsaWVudCxcbiAgVXNlTXV0YXRpb25PcHRpb25zLFxuICBVc2VNdXRhdGlvblJlc3VsdCxcbn0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIENoZWNrSW5SZXNwb25zZSxcbiAgQ3JlYXRlQ2hlY2tJblJlcXVlc3QsXG4gIFVwZGF0ZUNoZWNrSW5SZXF1ZXN0LFxuICBNb29kTG9nUmVzcG9uc2UsXG4gIExvZ01vb2RSZXF1ZXN0LFxuICBXaW5SZXNwb25zZSxcbiAgQ3JlYXRlV2luUmVxdWVzdCxcbiAgSGFiaXRSZXNwb25zZSxcbiAgQ3JlYXRlSGFiaXRSZXF1ZXN0LFxuICBVcGRhdGVIYWJpdFJlcXVlc3QsXG4gIFJlZmxlY3Rpb25SZXNwb25zZSxcbiAgQ3JlYXRlUmVmbGVjdGlvblJlcXVlc3QsXG4gIENyYXZpbmdMb2dSZXNwb25zZSxcbiAgTG9nQ3JhdmluZ1JlcXVlc3QsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHN1cHBvcnRLZXlzIH0gZnJvbSAnLi4vcXVlcmllcy9zdXBwb3J0JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDcmVhdGUgYSBkYWlseSBjaGVjay1pblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZUNoZWNrSW4oKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBtb29kOiA4LFxuICogICBub3RlczogJ0ZlZWxpbmcgZ3JlYXQgdG9kYXkhJyxcbiAqICAgdHJpZ2dlcnM6IFsnc3RyZXNzJ10sXG4gKiAgIGdyYXRpdHVkZTogWydNeSBzdXBwb3J0IGdyb3VwJ11cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVDaGVja0luKFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8Q2hlY2tJblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlQ2hlY2tJblJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxDaGVja0luUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVDaGVja0luUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlQ2hlY2tJblJlcXVlc3QpOiBQcm9taXNlPENoZWNrSW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KCcvYXBpL3YxL3N1cHBvcnQvY2hlY2staW5zJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld0NoZWNrSW4sIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjaGVjay1pbnMgbGlzdCBhbmQgdG9kYXkncyBjaGVjay1pblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJbnMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmNoZWNrSW5Ub2RheSgpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblN0cmVhaygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIGRhaWx5IGNoZWNrLWluXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlVXBkYXRlQ2hlY2tJbigpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIGlkOiAnY2hlY2tpbi0xMjMnLFxuICogICBkYXRhOiB7XG4gKiAgICAgbW9vZDogNCxcbiAqICAgICBub3RlczogJ1VwZGF0ZWQgbm90ZXMnLFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlQ2hlY2tJbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPENoZWNrSW5SZXNwb25zZSwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQ2hlY2tJblJlcXVlc3QgfT4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PENoZWNrSW5SZXNwb25zZSwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQ2hlY2tJblJlcXVlc3QgfT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoeyBpZCwgZGF0YSB9OiB7IGlkOiBzdHJpbmc7IGRhdGE6IFVwZGF0ZUNoZWNrSW5SZXF1ZXN0IH0pOiBQcm9taXNlPENoZWNrSW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoYC9hcGkvdjEvc3VwcG9ydC9jaGVjay1pbnMvJHtpZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAodXBkYXRlZENoZWNrSW4sIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjaGVjay1pbnMgbGlzdCBhbmQgdG9kYXkncyBjaGVjay1pblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJbnMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmNoZWNrSW5Ub2RheSgpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblN0cmVhaygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9vZCBsb2dcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVNb29kTG9nKCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgbW9vZDogNyxcbiAqICAgbm90ZXM6ICdGZWVsaW5nIG9wdGltaXN0aWMnLFxuICogICBhY3Rpdml0aWVzOiBbJ2V4ZXJjaXNlJywgJ21lZGl0YXRpb24nXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZU1vb2RMb2coXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxNb29kTG9nUmVzcG9uc2UsIEVycm9yLCBMb2dNb29kUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PE1vb2RMb2dSZXNwb25zZSwgRXJyb3IsIExvZ01vb2RSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBMb2dNb29kUmVxdWVzdCk6IFByb21pc2U8TW9vZExvZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9tb29kJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld01vb2RMb2csIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBtb29kIGxvZ3MgbGlzdFxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMubW9vZExvZ3MoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB3aW5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVXaW4oKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICB0aXRsZTogJzMwIGRheXMgc29iZXIhJyxcbiAqICAgZGVzY3JpcHRpb246ICdIaXQgbXkgZmlyc3QgbWlsZXN0b25lJyxcbiAqICAgY2F0ZWdvcnk6ICdzb2JyaWV0eSdcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVXaW4oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxXaW5SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVdpblJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxXaW5SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVdpblJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZVdpblJlcXVlc3QpOiBQcm9taXNlPFdpblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC93aW5zJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld1dpbiwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIHdpbnMgbGlzdHNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLndpbnMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLndpbnNCeUNhdGVnb3J5KCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgaGFiaXRcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVIYWJpdCgpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIG5hbWU6ICdNb3JuaW5nIG1lZGl0YXRpb24nLFxuICogICBkZXNjcmlwdGlvbjogJzEwIG1pbnV0ZXMgb2YgbWluZGZ1bG5lc3MnLFxuICogICBmcmVxdWVuY3k6ICdkYWlseScsXG4gKiAgIHRhcmdldERheXM6IDdcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVIYWJpdChcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPEhhYml0UmVzcG9uc2UsIEVycm9yLCBDcmVhdGVIYWJpdFJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxIYWJpdFJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlSGFiaXRSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVIYWJpdFJlcXVlc3QpOiBQcm9taXNlPEhhYml0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L2hhYml0cycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdIYWJpdCwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBoYWJpdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZVVwZGF0ZUhhYml0KCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgaWQ6ICdoYWJpdC0xMjMnLFxuICogICBkYXRhOiB7XG4gKiAgICAgbmFtZTogJ0V2ZW5pbmcgbWVkaXRhdGlvbicsXG4gKiAgICAgdGFyZ2V0RGF5czogMTRcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZUhhYml0KFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8XG4gICAgICBIYWJpdFJlc3BvbnNlLFxuICAgICAgRXJyb3IsXG4gICAgICB7IGlkOiBzdHJpbmc7IGRhdGE6IFVwZGF0ZUhhYml0UmVxdWVzdCB9XG4gICAgPixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8SGFiaXRSZXNwb25zZSwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlSGFiaXRSZXF1ZXN0IH0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGlkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgZGF0YTogVXBkYXRlSGFiaXRSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPEhhYml0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucHV0KGAvYXBpL3YxL3N1cHBvcnQvaGFiaXRzLyR7aWR9YCwgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKHVwZGF0ZWRIYWJpdCwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBoYWJpdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZURlbGV0ZUhhYml0KCk7XG4gKlxuICogbXV0YXRlKCdoYWJpdC0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlSGFiaXQoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczx2b2lkLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8dm9pZCwgRXJyb3IsIHN0cmluZz4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBhd2FpdCBjbGllbnQuZGVsZXRlKGAvYXBpL3YxL3N1cHBvcnQvaGFiaXRzLyR7aWR9YCk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChkYXRhLCBoYWJpdElkLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wbGV0ZSBhIGhhYml0IGZvciB0b2RheVxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNvbXBsZXRlSGFiaXQoKTtcbiAqXG4gKiBtdXRhdGUoJ2hhYml0LTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb21wbGV0ZUhhYml0KFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8SGFiaXRSZXNwb25zZSwgRXJyb3IsIHN0cmluZz4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEhhYml0UmVzcG9uc2UsIEVycm9yLCBzdHJpbmc+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGlkOiBzdHJpbmcpOiBQcm9taXNlPEhhYml0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9zdXBwb3J0L2hhYml0cy8ke2lkfS9jb21wbGV0ZWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChjb21wbGV0ZWRIYWJpdCwgaGFiaXRJZCwgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBoYWJpdHMgbGlzdCB0byBzaG93IHVwZGF0ZWQgY29tcGxldGlvbiBzdGF0dXNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJlZmxlY3Rpb25cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVSZWZsZWN0aW9uKCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgY29udGVudDogJ1RvZGF5IEkgbGVhcm5lZC4uLicsXG4gKiAgIGNhdGVnb3J5OiAnZ3Jvd3RoJyxcbiAqICAgbW9vZDogOFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVJlZmxlY3Rpb24oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxSZWZsZWN0aW9uUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVSZWZsZWN0aW9uUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PFJlZmxlY3Rpb25SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVSZWZsZWN0aW9uUmVxdWVzdCk6IFByb21pc2U8UmVmbGVjdGlvblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9yZWZsZWN0aW9ucycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdSZWZsZWN0aW9uLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgcmVmbGVjdGlvbnMgbGlzdFxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMucmVmbGVjdGlvbnMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2cgYSBjcmF2aW5nXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlTG9nQ3JhdmluZygpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIGludGVuc2l0eTogNCxcbiAqICAgdHJpZ2dlcjogJ1NhdyBhIGJlZXIgYWQnLFxuICogICB0cmlnZ2VyVHlwZTogJ0VOVklST05NRU5UJyxcbiAqICAgY29waW5nVXNlZDogWydkZWVwX2JyZWF0aGluZycsICdjYWxsZWRfZnJpZW5kJ10sXG4gKiAgIGRpZFJlc2lzdDogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxvZ0NyYXZpbmcoXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxDcmF2aW5nTG9nUmVzcG9uc2UsIEVycm9yLCBMb2dDcmF2aW5nUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PENyYXZpbmdMb2dSZXNwb25zZSwgRXJyb3IsIExvZ0NyYXZpbmdSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBMb2dDcmF2aW5nUmVxdWVzdCk6IFByb21pc2U8Q3JhdmluZ0xvZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9jcmF2aW5ncycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdDcmF2aW5nLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgY3JhdmluZ3MgbGlzdCBhbmQgc3RhdHNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmNyYXZpbmdzKCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,221 @@
1
+ import { UseQueryOptions } from '@tanstack/react-query';
2
+ import type { BadgeResponse, UserBadgeResponse, BadgeWithProgress, PartnerRewardResponse, PartnerRewardRedemptionResponse, RewardResponse, UserWalletResponse } from '../types';
3
+ export declare const badgeKeys: {
4
+ all: readonly ["badges"];
5
+ lists: () => readonly ["badges", "list"];
6
+ list: (userId?: string) => readonly ["badges", "list", string | undefined];
7
+ detail: (id: string) => readonly ["badges", "detail", string];
8
+ user: (userId: string) => readonly ["badges", "user", string];
9
+ next: (userId: string) => readonly ["badges", "next", string];
10
+ };
11
+ export declare const rewardKeys: {
12
+ all: readonly ["rewards"];
13
+ available: () => readonly ["rewards", "available"];
14
+ forBadge: (badgeId: string) => readonly ["rewards", "badge", string];
15
+ forBusiness: (businessId: string) => readonly ["rewards", "business", string];
16
+ forVenue: (venueId: string) => readonly ["rewards", "venue", string];
17
+ forBrand: (brandId: string) => readonly ["rewards", "brand", string];
18
+ redeemed: () => readonly ["rewards", "redeemed"];
19
+ wallet: () => readonly ["rewards", "wallet"];
20
+ };
21
+ /**
22
+ * Get all available badges
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * const { data: badges } = useBadges();
27
+ * ```
28
+ */
29
+ export declare function useBadges(options?: Omit<UseQueryOptions<BadgeResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
30
+ id: string;
31
+ appId: string;
32
+ name: string;
33
+ slug: string;
34
+ description?: Record<string, never>;
35
+ icon?: Record<string, never>;
36
+ type: "SOBRIETY_DAYS" | "EVENTS_ATTENDED" | "EVENTS_HOSTED" | "UNIQUE_VENUES" | "CHECK_IN_STREAK" | "WINS_LOGGED" | "REFLECTIONS_COUNT" | "JOURNALS_COUNT" | "MOOD_LOGS_COUNT" | "UNIQUE_WIN_CATEGORIES" | "SHORTCUTS_USED" | "ANY_ACTIVITY_STREAK" | "JACK_MESSAGES" | "VOICE_CALLS" | "MEMBER_SINCE" | "COMMUNITY_BUILDER" | "GROW90_GRADUATE" | "CUSTOM";
37
+ threshold?: Record<string, never>;
38
+ color?: Record<string, never>;
39
+ sortOrder: number;
40
+ isActive: boolean;
41
+ isSecret: boolean;
42
+ createdAt: string;
43
+ updatedAt: string;
44
+ }[], Error>;
45
+ /**
46
+ * Get a single badge by ID
47
+ *
48
+ * @param id - Badge ID
49
+ * @example
50
+ * ```tsx
51
+ * const { data: badge } = useBadge('badge-123');
52
+ * ```
53
+ */
54
+ export declare function useBadge(id: string, options?: Omit<UseQueryOptions<BadgeResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
55
+ id: string;
56
+ appId: string;
57
+ name: string;
58
+ slug: string;
59
+ description?: Record<string, never>;
60
+ icon?: Record<string, never>;
61
+ type: "SOBRIETY_DAYS" | "EVENTS_ATTENDED" | "EVENTS_HOSTED" | "UNIQUE_VENUES" | "CHECK_IN_STREAK" | "WINS_LOGGED" | "REFLECTIONS_COUNT" | "JOURNALS_COUNT" | "MOOD_LOGS_COUNT" | "UNIQUE_WIN_CATEGORIES" | "SHORTCUTS_USED" | "ANY_ACTIVITY_STREAK" | "JACK_MESSAGES" | "VOICE_CALLS" | "MEMBER_SINCE" | "COMMUNITY_BUILDER" | "GROW90_GRADUATE" | "CUSTOM";
62
+ threshold?: Record<string, never>;
63
+ color?: Record<string, never>;
64
+ sortOrder: number;
65
+ isActive: boolean;
66
+ isSecret: boolean;
67
+ createdAt: string;
68
+ updatedAt: string;
69
+ }, Error>;
70
+ /**
71
+ * Get current user's earned badges
72
+ *
73
+ * @example
74
+ * ```tsx
75
+ * const { data: myBadges } = useMyBadges();
76
+ * ```
77
+ */
78
+ export declare function useMyBadges(options?: Omit<UseQueryOptions<UserBadgeResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
79
+ id: string;
80
+ userId: string;
81
+ badgeId: string;
82
+ awardedAt: string;
83
+ note?: Record<string, never>;
84
+ badge: import("@growsober/types/dist/generated").components["schemas"]["BadgeResponseDto"];
85
+ }[], Error>;
86
+ /**
87
+ * Get next badges user can earn (with progress)
88
+ *
89
+ * @example
90
+ * ```tsx
91
+ * const { data: nextBadges } = useNextBadges();
92
+ * // nextBadges = [{ badge: {...}, currentProgress: 5, requiredProgress: 10, percentComplete: 50 }, ...]
93
+ * ```
94
+ */
95
+ export declare function useNextBadges(options?: Omit<UseQueryOptions<BadgeWithProgress[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<BadgeWithProgress[], Error>;
96
+ /**
97
+ * Get all rewards available to the current user (based on earned badges)
98
+ *
99
+ * @example
100
+ * ```tsx
101
+ * const { data: rewards } = useAvailableRewards();
102
+ * ```
103
+ */
104
+ export declare function useAvailableRewards(options?: Omit<UseQueryOptions<PartnerRewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardResponse[], Error>;
105
+ /**
106
+ * Get rewards for a specific badge
107
+ *
108
+ * @param badgeId - Badge ID
109
+ * @example
110
+ * ```tsx
111
+ * const { data: rewards } = useRewardsForBadge('badge-123');
112
+ * ```
113
+ */
114
+ export declare function useRewardsForBadge(badgeId: string, options?: Omit<UseQueryOptions<PartnerRewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardResponse[], Error>;
115
+ /**
116
+ * Get rewards offered by a specific business
117
+ *
118
+ * @param businessId - Business ID
119
+ * @example
120
+ * ```tsx
121
+ * const { data: rewards } = useBusinessRewards('business-123');
122
+ * ```
123
+ */
124
+ export declare function useBusinessRewards(businessId: string, options?: Omit<UseQueryOptions<PartnerRewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardResponse[], Error>;
125
+ /**
126
+ * Get user's redeemed rewards
127
+ *
128
+ * @example
129
+ * ```tsx
130
+ * const { data: redeemed } = useRedeemedRewards();
131
+ * ```
132
+ */
133
+ export declare function useRedeemedRewards(options?: Omit<UseQueryOptions<PartnerRewardRedemptionResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardRedemptionResponse[], Error>;
134
+ /**
135
+ * Wallet reward card with QR token for redemption
136
+ */
137
+ export interface WalletReward {
138
+ id: string;
139
+ title: string;
140
+ description: string | null;
141
+ code: string | null;
142
+ validUntil: string | null;
143
+ badge: {
144
+ id: string;
145
+ name: string;
146
+ slug: string;
147
+ icon: string | null;
148
+ };
149
+ business: {
150
+ id: string;
151
+ name: string;
152
+ profileImage: string | null;
153
+ address: string | null;
154
+ };
155
+ }
156
+ export interface WalletRedemption {
157
+ id: string;
158
+ redeemedAt: string;
159
+ verifiedAt: string | null;
160
+ qrToken: string;
161
+ partnerReward: WalletReward;
162
+ }
163
+ export interface WalletBadge {
164
+ id: string;
165
+ badgeId: string;
166
+ userId: string;
167
+ awardedAt: string;
168
+ note: string | null;
169
+ badge: BadgeResponse;
170
+ availableRewards: WalletReward[];
171
+ redeemedRewards: WalletRedemption[];
172
+ }
173
+ export interface WalletResponse {
174
+ badges: WalletBadge[];
175
+ stats: {
176
+ totalBadges: number;
177
+ totalAvailableRewards: number;
178
+ totalRedeemedRewards: number;
179
+ };
180
+ }
181
+ /**
182
+ * Get user's wallet - all earned badges with available and redeemed rewards
183
+ * This is the main data source for the Rewards tab
184
+ *
185
+ * @example
186
+ * ```tsx
187
+ * const { data: wallet } = useRewardsWallet();
188
+ * // wallet.badges = [{ badge: {...}, availableRewards: [...], redeemedRewards: [...] }, ...]
189
+ * // wallet.stats = { totalBadges: 5, totalAvailableRewards: 3, totalRedeemedRewards: 2 }
190
+ * ```
191
+ */
192
+ export declare function useRewardsWallet(options?: Omit<UseQueryOptions<WalletResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<WalletResponse, Error>;
193
+ /**
194
+ * Get rewards for a specific venue (unified reward model)
195
+ *
196
+ * @param venueId - Venue ID
197
+ * @example
198
+ * ```tsx
199
+ * const { data: rewards } = useVenueRewards('venue-123');
200
+ * ```
201
+ */
202
+ export declare function useVenueRewards(venueId: string, options?: Omit<UseQueryOptions<RewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<RewardResponse[], Error>;
203
+ /**
204
+ * Get rewards for a specific brand (unified reward model)
205
+ *
206
+ * @param brandId - Brand ID
207
+ * @example
208
+ * ```tsx
209
+ * const { data: rewards } = useBrandRewardsQuery('brand-123');
210
+ * ```
211
+ */
212
+ export declare function useBrandRewardsQuery(brandId: string, options?: Omit<UseQueryOptions<RewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<RewardResponse[], Error>;
213
+ /**
214
+ * Get unified wallet with venue and brand rewards
215
+ *
216
+ * @example
217
+ * ```tsx
218
+ * const { data: wallet } = useUnifiedWallet();
219
+ * ```
220
+ */
221
+ export declare function useUnifiedWallet(options?: Omit<UseQueryOptions<UserWalletResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<UserWalletResponse, Error>;