@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,304 @@
1
+ import { UseQueryOptions } from '@tanstack/react-query';
2
+ import type { VenueResponse, VenueOwnerResponse, EventResponse, OfferResponse } from '../types';
3
+ export declare const venueKeys: {
4
+ all: readonly ["venues"];
5
+ lists: () => readonly ["venues", "list"];
6
+ list: (filters?: VenueFilters) => readonly ["venues", "list", VenueFilters | undefined];
7
+ details: () => readonly ["venues", "detail"];
8
+ detail: (id: string) => readonly ["venues", "detail", string];
9
+ featured: () => readonly ["venues", "featured"];
10
+ nearby: (params?: NearbyVenueParams) => readonly ["venues", "nearby", NearbyVenueParams | undefined];
11
+ owners: (venueId: string) => readonly ["venues", "detail", string, "owners"];
12
+ events: (venueId: string) => readonly ["venues", "detail", string, "events"];
13
+ offers: (venueId: string) => readonly ["venues", "detail", string, "offers"];
14
+ rewards: (venueId: string) => readonly ["venues", "detail", string, "rewards"];
15
+ };
16
+ export interface VenueFilters {
17
+ page?: number;
18
+ limit?: number;
19
+ search?: string;
20
+ cityId?: string;
21
+ type?: string;
22
+ hasAfDrinks?: boolean;
23
+ isAfVenue?: boolean;
24
+ isFeatured?: boolean;
25
+ isFoundingPartner?: boolean;
26
+ lat?: number;
27
+ long?: number;
28
+ radius?: number;
29
+ sortBy?: string;
30
+ sortOrder?: 'asc' | 'desc';
31
+ }
32
+ export interface NearbyVenueParams {
33
+ lat: number;
34
+ long: number;
35
+ radius?: number;
36
+ limit?: number;
37
+ }
38
+ export interface PaginatedVenuesResponse {
39
+ venues: VenueResponse[];
40
+ meta: {
41
+ total: number;
42
+ page: number;
43
+ limit: number;
44
+ totalPages: number;
45
+ };
46
+ }
47
+ /**
48
+ * Get paginated list of venues with optional filters
49
+ *
50
+ * @param filters - Query parameters for filtering and pagination
51
+ * @param options - TanStack Query options
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * const { data, isLoading } = useVenues({
56
+ * page: 1,
57
+ * limit: 20,
58
+ * cityId: 'city-123',
59
+ * hasAfDrinks: true,
60
+ * });
61
+ * ```
62
+ */
63
+ export declare function useVenues(filters?: VenueFilters, options?: Omit<UseQueryOptions<PaginatedVenuesResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedVenuesResponse, Error>;
64
+ /**
65
+ * Get featured venues
66
+ *
67
+ * @param limit - Maximum number of venues to return
68
+ * @param options - TanStack Query options
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * const { data, isLoading } = useFeaturedVenues(10);
73
+ * ```
74
+ */
75
+ export declare function useFeaturedVenues(limit?: number, options?: Omit<UseQueryOptions<VenueResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
76
+ id: string;
77
+ appId: string;
78
+ name: string;
79
+ slug: string;
80
+ description?: Record<string, never>;
81
+ type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
82
+ hasAfDrinks: boolean;
83
+ isAfVenue: boolean;
84
+ afHighlights: string[];
85
+ address?: Record<string, never>;
86
+ cityId?: Record<string, never>;
87
+ locationLat?: Record<string, never>;
88
+ locationLong?: Record<string, never>;
89
+ phone?: Record<string, never>;
90
+ email?: Record<string, never>;
91
+ website?: Record<string, never>;
92
+ instagram?: Record<string, never>;
93
+ profileImage?: Record<string, never>;
94
+ bannerImage?: Record<string, never>;
95
+ photos: string[];
96
+ openingHours?: Record<string, never>;
97
+ rating?: Record<string, never>;
98
+ reviewCount: number;
99
+ isActive: boolean;
100
+ isVerified: boolean;
101
+ isFeatured: boolean;
102
+ isFoundingPartner: boolean;
103
+ createdAt: string;
104
+ updatedAt: string;
105
+ }[], Error>;
106
+ /**
107
+ * Get nearby venues based on location
108
+ *
109
+ * @param params - Location parameters (latitude, longitude, radius)
110
+ * @param options - TanStack Query options
111
+ *
112
+ * @example
113
+ * ```tsx
114
+ * const { data, isLoading } = useNearbyVenues({
115
+ * lat: 51.5074,
116
+ * long: -0.1278,
117
+ * radius: 5, // 5km radius
118
+ * limit: 20,
119
+ * });
120
+ * ```
121
+ */
122
+ export declare function useNearbyVenues(params: NearbyVenueParams, options?: Omit<UseQueryOptions<VenueResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
123
+ id: string;
124
+ appId: string;
125
+ name: string;
126
+ slug: string;
127
+ description?: Record<string, never>;
128
+ type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
129
+ hasAfDrinks: boolean;
130
+ isAfVenue: boolean;
131
+ afHighlights: string[];
132
+ address?: Record<string, never>;
133
+ cityId?: Record<string, never>;
134
+ locationLat?: Record<string, never>;
135
+ locationLong?: Record<string, never>;
136
+ phone?: Record<string, never>;
137
+ email?: Record<string, never>;
138
+ website?: Record<string, never>;
139
+ instagram?: Record<string, never>;
140
+ profileImage?: Record<string, never>;
141
+ bannerImage?: Record<string, never>;
142
+ photos: string[];
143
+ openingHours?: Record<string, never>;
144
+ rating?: Record<string, never>;
145
+ reviewCount: number;
146
+ isActive: boolean;
147
+ isVerified: boolean;
148
+ isFeatured: boolean;
149
+ isFoundingPartner: boolean;
150
+ createdAt: string;
151
+ updatedAt: string;
152
+ }[], Error>;
153
+ /**
154
+ * Get a single venue by ID
155
+ *
156
+ * @param id - Venue ID
157
+ * @param options - TanStack Query options
158
+ *
159
+ * @example
160
+ * ```tsx
161
+ * const { data, isLoading } = useVenue('venue-123');
162
+ * ```
163
+ */
164
+ export declare function useVenue(id: string, options?: Omit<UseQueryOptions<VenueResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
165
+ id: string;
166
+ appId: string;
167
+ name: string;
168
+ slug: string;
169
+ description?: Record<string, never>;
170
+ type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
171
+ hasAfDrinks: boolean;
172
+ isAfVenue: boolean;
173
+ afHighlights: string[];
174
+ address?: Record<string, never>;
175
+ cityId?: Record<string, never>;
176
+ locationLat?: Record<string, never>;
177
+ locationLong?: Record<string, never>;
178
+ phone?: Record<string, never>;
179
+ email?: Record<string, never>;
180
+ website?: Record<string, never>;
181
+ instagram?: Record<string, never>;
182
+ profileImage?: Record<string, never>;
183
+ bannerImage?: Record<string, never>;
184
+ photos: string[];
185
+ openingHours?: Record<string, never>;
186
+ rating?: Record<string, never>;
187
+ reviewCount: number;
188
+ isActive: boolean;
189
+ isVerified: boolean;
190
+ isFeatured: boolean;
191
+ isFoundingPartner: boolean;
192
+ createdAt: string;
193
+ updatedAt: string;
194
+ }, Error>;
195
+ /**
196
+ * Get venue owners
197
+ *
198
+ * @param venueId - Venue ID
199
+ * @param options - TanStack Query options
200
+ *
201
+ * @example
202
+ * ```tsx
203
+ * const { data, isLoading } = useVenueOwners('venue-123');
204
+ * ```
205
+ */
206
+ export declare function useVenueOwners(venueId: string, options?: Omit<UseQueryOptions<VenueOwnerResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
207
+ id: string;
208
+ venueId: string;
209
+ userId: string;
210
+ role: "OWNER" | "MANAGER";
211
+ user?: import("@growsober/types/dist/generated").components["schemas"]["VenueOwnerUserDto"];
212
+ createdAt: string;
213
+ updatedAt: string;
214
+ }[], Error>;
215
+ /**
216
+ * Get upcoming events at a venue
217
+ *
218
+ * @param venueId - Venue ID
219
+ * @param limit - Maximum number of events to return
220
+ * @param options - TanStack Query options
221
+ *
222
+ * @example
223
+ * ```tsx
224
+ * const { data, isLoading } = useVenueEvents('venue-123', 20);
225
+ * ```
226
+ */
227
+ export declare function useVenueEvents(venueId: string, limit?: number, options?: Omit<UseQueryOptions<EventResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
228
+ id: string;
229
+ title: string;
230
+ slug?: Record<string, never>;
231
+ description?: Record<string, never>;
232
+ bannerImage?: Record<string, never>;
233
+ startDate: string;
234
+ endDate?: Record<string, never>;
235
+ timezone?: Record<string, never>;
236
+ isRecurring: boolean;
237
+ recurrenceRule?: Record<string, never>;
238
+ locationName?: Record<string, never>;
239
+ locationAddress?: Record<string, never>;
240
+ locationLat?: Record<string, never>;
241
+ locationLong?: Record<string, never>;
242
+ cityId?: Record<string, never>;
243
+ isOnline: boolean;
244
+ onlineUrl?: Record<string, never>;
245
+ totalSpots: number;
246
+ availableSpots: number;
247
+ isFree: boolean;
248
+ price?: Record<string, never>;
249
+ currency: string;
250
+ hubId?: Record<string, never>;
251
+ venueId?: Record<string, never>;
252
+ creatorId?: Record<string, never>;
253
+ sponsorBrandId?: Record<string, never>;
254
+ gatheringType?: "FACILITATOR_LED" | "COMMUNITY" | "SOCIAL" | "ONLINE";
255
+ visibility: "PUBLIC" | "MEMBERS_ONLY" | "INVITE_ONLY";
256
+ requiresApproval: boolean;
257
+ allowWaitlist: boolean;
258
+ whatsappGroup?: Record<string, never>;
259
+ externalUrl?: Record<string, never>;
260
+ status: "DRAFT" | "PUBLISHED" | "CANCELLED" | "COMPLETED";
261
+ isFeatured: boolean;
262
+ isCancelled: boolean;
263
+ isAmbient: boolean;
264
+ ambientCategory?: Record<string, never>;
265
+ vibe?: "CHILL" | "ACTIVE" | "SOCIAL" | "CREATIVE" | "DEEP_TALK" | "ADVENTURE";
266
+ city?: import("@growsober/types/dist/generated").components["schemas"]["EventCityDto"];
267
+ venue?: import("@growsober/types/dist/generated").components["schemas"]["EventVenueDto"];
268
+ creator?: import("@growsober/types/dist/generated").components["schemas"]["EventCreatorDto"];
269
+ sponsorBrand?: import("@growsober/types/dist/generated").components["schemas"]["EventBrandDto"];
270
+ bookingCount: number;
271
+ checkinCount: number;
272
+ createdAt: string;
273
+ publishedAt?: Record<string, never>;
274
+ }[], Error>;
275
+ /**
276
+ * Get offers for a venue (from legacy Business model)
277
+ *
278
+ * @param venueId - Venue ID
279
+ * @param options - TanStack Query options
280
+ *
281
+ * @example
282
+ * ```tsx
283
+ * const { data, isLoading } = useVenueOffers('venue-123');
284
+ * ```
285
+ */
286
+ export declare function useVenueOffers(venueId: string, options?: Omit<UseQueryOptions<OfferResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
287
+ id: string;
288
+ businessId: string;
289
+ title: string;
290
+ description?: Record<string, never>;
291
+ discountType?: "PERCENTAGE" | "FIXED_AMOUNT" | "FREE_ITEM" | "BOGO";
292
+ discountValue?: Record<string, never>;
293
+ discountCode?: Record<string, never>;
294
+ validFrom: string;
295
+ validTo?: Record<string, never>;
296
+ terms?: Record<string, never>;
297
+ maxRedemptions?: Record<string, never>;
298
+ redemptionCount: number;
299
+ perUserLimit?: Record<string, never>;
300
+ premiumOnly: boolean;
301
+ isActive: boolean;
302
+ createdAt: string;
303
+ updatedAt: string;
304
+ }[], Error>;
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.venueKeys = void 0;
4
+ exports.useVenues = useVenues;
5
+ exports.useFeaturedVenues = useFeaturedVenues;
6
+ exports.useNearbyVenues = useNearbyVenues;
7
+ exports.useVenue = useVenue;
8
+ exports.useVenueOwners = useVenueOwners;
9
+ exports.useVenueEvents = useVenueEvents;
10
+ exports.useVenueOffers = useVenueOffers;
11
+ const react_query_1 = require("@tanstack/react-query");
12
+ const client_1 = require("../client");
13
+ // ============================================================================
14
+ // QUERY KEY FACTORY
15
+ // ============================================================================
16
+ exports.venueKeys = {
17
+ all: ['venues'],
18
+ lists: () => [...exports.venueKeys.all, 'list'],
19
+ list: (filters) => [...exports.venueKeys.lists(), filters],
20
+ details: () => [...exports.venueKeys.all, 'detail'],
21
+ detail: (id) => [...exports.venueKeys.details(), id],
22
+ featured: () => [...exports.venueKeys.all, 'featured'],
23
+ nearby: (params) => [...exports.venueKeys.all, 'nearby', params],
24
+ owners: (venueId) => [...exports.venueKeys.detail(venueId), 'owners'],
25
+ events: (venueId) => [...exports.venueKeys.detail(venueId), 'events'],
26
+ offers: (venueId) => [...exports.venueKeys.detail(venueId), 'offers'],
27
+ rewards: (venueId) => [...exports.venueKeys.detail(venueId), 'rewards'],
28
+ };
29
+ // ============================================================================
30
+ // QUERY HOOKS
31
+ // ============================================================================
32
+ /**
33
+ * Get paginated list of venues with optional filters
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 } = useVenues({
41
+ * page: 1,
42
+ * limit: 20,
43
+ * cityId: 'city-123',
44
+ * hasAfDrinks: true,
45
+ * });
46
+ * ```
47
+ */
48
+ function useVenues(filters, options) {
49
+ return (0, react_query_1.useQuery)({
50
+ queryKey: exports.venueKeys.list(filters),
51
+ queryFn: async () => {
52
+ const client = (0, client_1.getApiClient)();
53
+ const response = await client.get('/api/v1/venues', {
54
+ params: filters,
55
+ });
56
+ return response.data;
57
+ },
58
+ ...options,
59
+ });
60
+ }
61
+ /**
62
+ * Get featured venues
63
+ *
64
+ * @param limit - Maximum number of venues to return
65
+ * @param options - TanStack Query options
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * const { data, isLoading } = useFeaturedVenues(10);
70
+ * ```
71
+ */
72
+ function useFeaturedVenues(limit, options) {
73
+ return (0, react_query_1.useQuery)({
74
+ queryKey: exports.venueKeys.featured(),
75
+ queryFn: async () => {
76
+ const client = (0, client_1.getApiClient)();
77
+ const response = await client.get('/api/v1/venues/featured', {
78
+ params: { limit },
79
+ });
80
+ return response.data;
81
+ },
82
+ ...options,
83
+ });
84
+ }
85
+ /**
86
+ * Get nearby venues based on location
87
+ *
88
+ * @param params - Location parameters (latitude, longitude, radius)
89
+ * @param options - TanStack Query options
90
+ *
91
+ * @example
92
+ * ```tsx
93
+ * const { data, isLoading } = useNearbyVenues({
94
+ * lat: 51.5074,
95
+ * long: -0.1278,
96
+ * radius: 5, // 5km radius
97
+ * limit: 20,
98
+ * });
99
+ * ```
100
+ */
101
+ function useNearbyVenues(params, options) {
102
+ return (0, react_query_1.useQuery)({
103
+ queryKey: exports.venueKeys.nearby(params),
104
+ queryFn: async () => {
105
+ const client = (0, client_1.getApiClient)();
106
+ const response = await client.get('/api/v1/venues/nearby', {
107
+ params,
108
+ });
109
+ return response.data;
110
+ },
111
+ enabled: !!params.lat && !!params.long,
112
+ ...options,
113
+ });
114
+ }
115
+ /**
116
+ * Get a single venue by ID
117
+ *
118
+ * @param id - Venue ID
119
+ * @param options - TanStack Query options
120
+ *
121
+ * @example
122
+ * ```tsx
123
+ * const { data, isLoading } = useVenue('venue-123');
124
+ * ```
125
+ */
126
+ function useVenue(id, options) {
127
+ return (0, react_query_1.useQuery)({
128
+ queryKey: exports.venueKeys.detail(id),
129
+ queryFn: async () => {
130
+ const client = (0, client_1.getApiClient)();
131
+ const response = await client.get(`/api/v1/venues/${id}`);
132
+ return response.data;
133
+ },
134
+ enabled: !!id,
135
+ ...options,
136
+ });
137
+ }
138
+ /**
139
+ * Get venue owners
140
+ *
141
+ * @param venueId - Venue ID
142
+ * @param options - TanStack Query options
143
+ *
144
+ * @example
145
+ * ```tsx
146
+ * const { data, isLoading } = useVenueOwners('venue-123');
147
+ * ```
148
+ */
149
+ function useVenueOwners(venueId, options) {
150
+ return (0, react_query_1.useQuery)({
151
+ queryKey: exports.venueKeys.owners(venueId),
152
+ queryFn: async () => {
153
+ const client = (0, client_1.getApiClient)();
154
+ const response = await client.get(`/api/v1/venues/${venueId}/owners`);
155
+ return response.data;
156
+ },
157
+ enabled: !!venueId,
158
+ ...options,
159
+ });
160
+ }
161
+ /**
162
+ * Get upcoming events at a venue
163
+ *
164
+ * @param venueId - Venue ID
165
+ * @param limit - Maximum number of events to return
166
+ * @param options - TanStack Query options
167
+ *
168
+ * @example
169
+ * ```tsx
170
+ * const { data, isLoading } = useVenueEvents('venue-123', 20);
171
+ * ```
172
+ */
173
+ function useVenueEvents(venueId, limit, options) {
174
+ return (0, react_query_1.useQuery)({
175
+ queryKey: exports.venueKeys.events(venueId),
176
+ queryFn: async () => {
177
+ const client = (0, client_1.getApiClient)();
178
+ const response = await client.get(`/api/v1/venues/${venueId}/events`, {
179
+ params: { limit },
180
+ });
181
+ return response.data?.data || response.data || [];
182
+ },
183
+ enabled: !!venueId,
184
+ ...options,
185
+ });
186
+ }
187
+ /**
188
+ * Get offers for a venue (from legacy Business model)
189
+ *
190
+ * @param venueId - Venue ID
191
+ * @param options - TanStack Query options
192
+ *
193
+ * @example
194
+ * ```tsx
195
+ * const { data, isLoading } = useVenueOffers('venue-123');
196
+ * ```
197
+ */
198
+ function useVenueOffers(venueId, options) {
199
+ return (0, react_query_1.useQuery)({
200
+ queryKey: exports.venueKeys.offers(venueId),
201
+ queryFn: async () => {
202
+ const client = (0, client_1.getApiClient)();
203
+ // Use businesses endpoint for offers (legacy)
204
+ const response = await client.get(`/api/v1/businesses/${venueId}/offers`);
205
+ return response.data;
206
+ },
207
+ enabled: !!venueId,
208
+ ...options,
209
+ });
210
+ }
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVudWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL3ZlbnVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnRkEsOEJBZUM7QUFhRCw4Q0FlQztBQWtCRCwwQ0FnQkM7QUFhRCw0QkFjQztBQWFELHdDQWNDO0FBY0Qsd0NBaUJDO0FBYUQsd0NBZUM7QUE5UUQsdURBQWtFO0FBQ2xFLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0Usb0JBQW9CO0FBQ3BCLCtFQUErRTtBQUVsRSxRQUFBLFNBQVMsR0FBRztJQUN2QixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQVU7SUFDeEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDaEQsSUFBSSxFQUFFLENBQUMsT0FBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQzFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFVO0lBQzdELFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFVO0lBQ3ZELE1BQU0sRUFBRSxDQUFDLE1BQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFVO0lBQ3JGLE1BQU0sRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FB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SUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87UUFDbEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BQWUsRUFDZixPQUF3RTtJQUV4RSxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkMsT0FBTyxFQUFFLEtBQUssSUFBOEIsRUFBRTtZQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5Qiw4Q0FBOEM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixPQUFPLFNBQVMsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1FBQ2xCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IFZlbnVlUmVzcG9uc2UsIFZlbnVlT3duZXJSZXNwb25zZSwgRXZlbnRSZXNwb25zZSwgT2ZmZXJSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZIEZBQ1RPUllcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHZlbnVlS2V5cyA9IHtcbiAgYWxsOiBbJ3ZlbnVlcyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLnZlbnVlS2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogVmVudWVGaWx0ZXJzKSA9PiBbLi4udmVudWVLZXlzLmxpc3RzKCksIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4udmVudWVLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4udmVudWVLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBmZWF0dXJlZDogKCkgPT4gWy4uLnZlbnVlS2V5cy5hbGwsICdmZWF0dXJlZCddIGFzIGNvbnN0LFxuICBuZWFyYnk6IChwYXJhbXM/OiBOZWFyYnlWZW51ZVBhcmFtcykgPT4gWy4uLnZlbnVlS2V5cy5hbGwsICduZWFyYnknLCBwYXJhbXNdIGFzIGNvbnN0LFxuICBvd25lcnM6ICh2ZW51ZUlkOiBzdHJpbmcpID0+IFsuLi52ZW51ZUtleXMuZGV0YWlsKHZlbnVlSWQpLCAnb3duZXJzJ10gYXMgY29uc3QsXG4gIGV2ZW50czogKHZlbnVlSWQ6IHN0cmluZykgPT4gWy4uLnZlbnVlS2V5cy5kZXRhaWwodmVudWVJZCksICdldmVudHMnXSBhcyBjb25zdCxcbiAgb2ZmZXJzOiAodmVudWVJZDogc3RyaW5nKSA9PiBbLi4udmVudWVLZXlzLmRldGFpbCh2ZW51ZUlkKSwgJ29mZmVycyddIGFzIGNvbnN0LFxuICByZXdhcmRzOiAodmVudWVJZDogc3RyaW5nKSA9PiBbLi4udmVudWVLZXlzLmRldGFpbCh2ZW51ZUlkKSwgJ3Jld2FyZHMnXSBhcyBjb25zdCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVudWVGaWx0ZXJzIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHNlYXJjaD86IHN0cmluZztcbiAgY2l0eUlkPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBoYXNBZkRyaW5rcz86IGJvb2xlYW47XG4gIGlzQWZWZW51ZT86IGJvb2xlYW47XG4gIGlzRmVhdHVyZWQ/OiBib29sZWFuO1xuICBpc0ZvdW5kaW5nUGFydG5lcj86IGJvb2xlYW47XG4gIGxhdD86IG51bWJlcjtcbiAgbG9uZz86IG51bWJlcjtcbiAgcmFkaXVzPzogbnVtYmVyO1xuICBzb3J0Qnk/OiBzdHJpbmc7XG4gIHNvcnRPcmRlcj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5lYXJieVZlbnVlUGFyYW1zIHtcbiAgbGF0OiBudW1iZXI7XG4gIGxvbmc6IG51bWJlcjtcbiAgcmFkaXVzPzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRWZW51ZXNSZXNwb25zZSB7XG4gIHZlbnVlczogVmVudWVSZXNwb25zZVtdO1xuICBtZXRhOiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHBhZ2luYXRlZCBsaXN0IG9mIHZlbnVlcyB3aXRoIG9wdGlvbmFsIGZpbHRlcnNcbiAqXG4gKiBAcGFyYW0gZmlsdGVycyAtIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVZlbnVlcyh7XG4gKiAgIHBhZ2U6IDEsXG4gKiAgIGxpbWl0OiAyMCxcbiAqICAgY2l0eUlkOiAnY2l0eS0xMjMnLFxuICogICBoYXNBZkRyaW5rczogdHJ1ZSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZW51ZXMoXG4gIGZpbHRlcnM/OiBWZW51ZUZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRWZW51ZXNSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdmVudWVLZXlzLmxpc3QoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkVmVudWVzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3ZlbnVlcycsIHtcbiAgICAgICAgcGFyYW1zOiBmaWx0ZXJzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBmZWF0dXJlZCB2ZW51ZXNcbiAqXG4gKiBAcGFyYW0gbGltaXQgLSBNYXhpbXVtIG51bWJlciBvZiB2ZW51ZXMgdG8gcmV0dXJuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlRmVhdHVyZWRWZW51ZXMoMTApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGZWF0dXJlZFZlbnVlcyhcbiAgbGltaXQ/OiBudW1iZXIsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxWZW51ZVJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHZlbnVlS2V5cy5mZWF0dXJlZCgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFZlbnVlUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvdmVudWVzL2ZlYXR1cmVkJywge1xuICAgICAgICBwYXJhbXM6IHsgbGltaXQgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgbmVhcmJ5IHZlbnVlcyBiYXNlZCBvbiBsb2NhdGlvblxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMb2NhdGlvbiBwYXJhbWV0ZXJzIChsYXRpdHVkZSwgbG9uZ2l0dWRlLCByYWRpdXMpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlTmVhcmJ5VmVudWVzKHtcbiAqICAgbGF0OiA1MS41MDc0LFxuICogICBsb25nOiAtMC4xMjc4LFxuICogICByYWRpdXM6IDUsIC8vIDVrbSByYWRpdXNcbiAqICAgbGltaXQ6IDIwLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU5lYXJieVZlbnVlcyhcbiAgcGFyYW1zOiBOZWFyYnlWZW51ZVBhcmFtcyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFZlbnVlUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdmVudWVLZXlzLm5lYXJieShwYXJhbXMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFZlbnVlUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvdmVudWVzL25lYXJieScsIHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcGFyYW1zLmxhdCAmJiAhIXBhcmFtcy5sb25nLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHNpbmdsZSB2ZW51ZSBieSBJRFxuICpcbiAqIEBwYXJhbSBpZCAtIFZlbnVlIElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlVmVudWUoJ3ZlbnVlLTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZW51ZShcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFZlbnVlUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHZlbnVlS2V5cy5kZXRhaWwoaWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFZlbnVlUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL3ZlbnVlcy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB2ZW51ZSBvd25lcnNcbiAqXG4gKiBAcGFyYW0gdmVudWVJZCAtIFZlbnVlIElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlVmVudWVPd25lcnMoJ3ZlbnVlLTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZW51ZU93bmVycyhcbiAgdmVudWVJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8VmVudWVPd25lclJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHZlbnVlS2V5cy5vd25lcnModmVudWVJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8VmVudWVPd25lclJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL3ZlbnVlcy8ke3ZlbnVlSWR9L293bmVyc2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXZlbnVlSWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVwY29taW5nIGV2ZW50cyBhdCBhIHZlbnVlXG4gKlxuICogQHBhcmFtIHZlbnVlSWQgLSBWZW51ZSBJRFxuICogQHBhcmFtIGxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHRvIHJldHVyblxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVZlbnVlRXZlbnRzKCd2ZW51ZS0xMjMnLCAyMCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZlbnVlRXZlbnRzKFxuICB2ZW51ZUlkOiBzdHJpbmcsXG4gIGxpbWl0PzogbnVtYmVyLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8RXZlbnRSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiB2ZW51ZUtleXMuZXZlbnRzKHZlbnVlSWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEV2ZW50UmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvdmVudWVzLyR7dmVudWVJZH0vZXZlbnRzYCwge1xuICAgICAgICBwYXJhbXM6IHsgbGltaXQgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YSB8fCBbXTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhdmVudWVJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgb2ZmZXJzIGZvciBhIHZlbnVlIChmcm9tIGxlZ2FjeSBCdXNpbmVzcyBtb2RlbClcbiAqXG4gKiBAcGFyYW0gdmVudWVJZCAtIFZlbnVlIElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlVmVudWVPZmZlcnMoJ3ZlbnVlLTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZW51ZU9mZmVycyhcbiAgdmVudWVJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8T2ZmZXJSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiB2ZW51ZUtleXMub2ZmZXJzKHZlbnVlSWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPE9mZmVyUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAvLyBVc2UgYnVzaW5lc3NlcyBlbmRwb2ludCBmb3Igb2ZmZXJzIChsZWdhY3kpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvYnVzaW5lc3Nlcy8ke3ZlbnVlSWR9L29mZmVyc2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXZlbnVlSWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=