@spotsdev/sdk 1.4.0 → 1.5.2

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 (67) hide show
  1. package/dist/index.cjs +2166 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +1656 -0
  4. package/dist/index.d.ts +1655 -36
  5. package/dist/index.js +2021 -64
  6. package/dist/index.js.map +1 -0
  7. package/package.json +22 -6
  8. package/src/api/entities.ts +171 -170
  9. package/src/api/mutations/products.ts +18 -2
  10. package/src/api/queries/index.ts +4 -0
  11. package/src/api/queries/payments.ts +67 -0
  12. package/dist/api/client.d.ts +0 -12
  13. package/dist/api/client.js +0 -72
  14. package/dist/api/entities.d.ts +0 -305
  15. package/dist/api/entities.js +0 -13
  16. package/dist/api/mutations/clubs.d.ts +0 -47
  17. package/dist/api/mutations/clubs.js +0 -97
  18. package/dist/api/mutations/conversations.d.ts +0 -45
  19. package/dist/api/mutations/conversations.js +0 -114
  20. package/dist/api/mutations/index.d.ts +0 -14
  21. package/dist/api/mutations/index.js +0 -40
  22. package/dist/api/mutations/notifications.d.ts +0 -38
  23. package/dist/api/mutations/notifications.js +0 -64
  24. package/dist/api/mutations/orders.d.ts +0 -73
  25. package/dist/api/mutations/orders.js +0 -114
  26. package/dist/api/mutations/posts.d.ts +0 -123
  27. package/dist/api/mutations/posts.js +0 -242
  28. package/dist/api/mutations/products.d.ts +0 -81
  29. package/dist/api/mutations/products.js +0 -98
  30. package/dist/api/mutations/redemptions.d.ts +0 -33
  31. package/dist/api/mutations/redemptions.js +0 -63
  32. package/dist/api/mutations/spots.d.ts +0 -93
  33. package/dist/api/mutations/spots.js +0 -167
  34. package/dist/api/mutations/users.d.ts +0 -73
  35. package/dist/api/mutations/users.js +0 -175
  36. package/dist/api/queries/auth.d.ts +0 -37
  37. package/dist/api/queries/auth.js +0 -61
  38. package/dist/api/queries/clubs.d.ts +0 -52
  39. package/dist/api/queries/clubs.js +0 -116
  40. package/dist/api/queries/conversations.d.ts +0 -52
  41. package/dist/api/queries/conversations.js +0 -83
  42. package/dist/api/queries/index.d.ts +0 -28
  43. package/dist/api/queries/index.js +0 -69
  44. package/dist/api/queries/misc.d.ts +0 -30
  45. package/dist/api/queries/misc.js +0 -91
  46. package/dist/api/queries/notifications.d.ts +0 -34
  47. package/dist/api/queries/notifications.js +0 -62
  48. package/dist/api/queries/orders.d.ts +0 -45
  49. package/dist/api/queries/orders.js +0 -93
  50. package/dist/api/queries/posts.d.ts +0 -92
  51. package/dist/api/queries/posts.js +0 -233
  52. package/dist/api/queries/products.d.ts +0 -48
  53. package/dist/api/queries/products.js +0 -87
  54. package/dist/api/queries/spots.d.ts +0 -93
  55. package/dist/api/queries/spots.js +0 -250
  56. package/dist/api/queries/templates.d.ts +0 -39
  57. package/dist/api/queries/templates.js +0 -81
  58. package/dist/api/queries/users.d.ts +0 -104
  59. package/dist/api/queries/users.js +0 -235
  60. package/dist/api/queries/wallet.d.ts +0 -109
  61. package/dist/api/queries/wallet.js +0 -136
  62. package/dist/api/services/index.d.ts +0 -2
  63. package/dist/api/services/index.js +0 -8
  64. package/dist/api/services/marketplace.d.ts +0 -129
  65. package/dist/api/services/marketplace.js +0 -168
  66. package/dist/api/types.d.ts +0 -57
  67. package/dist/api/types.js +0 -33
package/dist/index.cjs ADDED
@@ -0,0 +1,2166 @@
1
+ 'use strict';
2
+
3
+ var axios = require('axios');
4
+ var types_star = require('@spotsdev/types');
5
+ var reactQuery = require('@tanstack/react-query');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
28
+ var types_star__namespace = /*#__PURE__*/_interopNamespace(types_star);
29
+
30
+ var __defProp = Object.defineProperty;
31
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
32
+ var __getOwnPropNames = Object.getOwnPropertyNames;
33
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
34
+ var __export = (target, all) => {
35
+ for (var name in all)
36
+ __defProp(target, name, { get: all[name], enumerable: true });
37
+ };
38
+ var __copyProps = (to, from, except, desc) => {
39
+ if (from && typeof from === "object" || typeof from === "function") {
40
+ for (let key of __getOwnPropNames(from))
41
+ if (!__hasOwnProp.call(to, key) && key !== except)
42
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
43
+ }
44
+ return to;
45
+ };
46
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget);
47
+
48
+ // src/index.ts
49
+ var index_exports = {};
50
+ __export(index_exports, {
51
+ clubKeys: () => clubKeys,
52
+ configureSDK: () => configureSDK,
53
+ conversationKeys: () => conversationKeys,
54
+ getApiClient: () => getApiClient,
55
+ getConfig: () => getConfig,
56
+ miscKeys: () => miscKeys,
57
+ notificationKeys: () => notificationKeys,
58
+ orderKeys: () => orderKeys,
59
+ paymentKeys: () => paymentKeys,
60
+ postKeys: () => postKeys,
61
+ productKeys: () => productKeys,
62
+ spotKeys: () => spotKeys,
63
+ templateKeys: () => templateKeys,
64
+ useAdjustStock: () => useAdjustStock,
65
+ useBlockUser: () => useBlockUser,
66
+ useBlockedUsers: () => useBlockedUsers,
67
+ useCancelOrder: () => useCancelOrder,
68
+ useCities: () => useCities,
69
+ useClaimSpot: () => useClaimSpot,
70
+ useClub: () => useClub,
71
+ useClubBySlug: () => useClubBySlug,
72
+ useClubMembership: () => useClubMembership,
73
+ useClubsBySpot: () => useClubsBySpot,
74
+ useClubsByUser: () => useClubsByUser,
75
+ useCompleteOnboardingStep: () => useCompleteOnboardingStep,
76
+ useConversation: () => useConversation,
77
+ useConversationMessages: () => useConversationMessages,
78
+ useConversations: () => useConversations,
79
+ useCreateClub: () => useCreateClub,
80
+ useCreateCoinbaseCharge: () => useCreateCoinbaseCharge,
81
+ useCreateConversation: () => useCreateConversation,
82
+ useCreateDirectConversation: () => useCreateDirectConversation,
83
+ useCreateOrder: () => useCreateOrder,
84
+ useCreatePost: () => useCreatePost,
85
+ useCreateProduct: () => useCreateProduct,
86
+ useCreateReply: () => useCreateReply,
87
+ useCreateSpot: () => useCreateSpot,
88
+ useCreateStripeIntent: () => useCreateStripeIntent,
89
+ useCurrentUser: () => useCurrentUser,
90
+ useDeleteAccount: () => useDeleteAccount,
91
+ useDeletePost: () => useDeletePost,
92
+ useDeleteProduct: () => useDeleteProduct,
93
+ useDeleteReply: () => useDeleteReply,
94
+ useFavoriteSpot: () => useFavoriteSpot,
95
+ useFulfillPost: () => useFulfillPost,
96
+ useInfiniteSpots: () => useInfiniteSpots,
97
+ useJoinClub: () => useJoinClub,
98
+ useLeaveClub: () => useLeaveClub,
99
+ useLifeSituations: () => useLifeSituations,
100
+ useMarkConversationAsRead: () => useMarkConversationAsRead,
101
+ useMarkNotificationsRead: () => useMarkNotificationsRead,
102
+ useMyOrders: () => useMyOrders,
103
+ useNotifications: () => useNotifications,
104
+ useOrder: () => useOrder,
105
+ useOwnedSpots: () => useOwnedSpots,
106
+ usePaymentConfig: () => usePaymentConfig,
107
+ usePost: () => usePost,
108
+ usePostResponses: () => usePostResponses,
109
+ usePostStatus: () => usePostStatus,
110
+ usePostUpvotes: () => usePostUpvotes,
111
+ usePosts: () => usePosts,
112
+ usePostsFeed: () => usePostsFeed,
113
+ useProduct: () => useProduct,
114
+ useProductBySlug: () => useProductBySlug,
115
+ useRateSpot: () => useRateSpot,
116
+ useRedeem: () => useRedeem,
117
+ useRedemptionLookup: () => useRedemptionLookup,
118
+ useRefreshToken: () => useRefreshToken,
119
+ useRegisterDeviceToken: () => useRegisterDeviceToken,
120
+ useRemoveDeviceToken: () => useRemoveDeviceToken,
121
+ useReportPost: () => useReportPost,
122
+ useReportSpot: () => useReportSpot,
123
+ useRespondToPost: () => useRespondToPost,
124
+ useSendMessage: () => useSendMessage,
125
+ useSendOtp: () => useSendOtp,
126
+ useSendTypingIndicator: () => useSendTypingIndicator,
127
+ useSpot: () => useSpot,
128
+ useSpotByQR: () => useSpotByQR,
129
+ useSpotBySlug: () => useSpotBySlug,
130
+ useSpotFavoriteStatus: () => useSpotFavoriteStatus,
131
+ useSpotImages: () => useSpotImages,
132
+ useSpotOrders: () => useSpotOrders,
133
+ useSpotPosts: () => useSpotPosts,
134
+ useSpotProducts: () => useSpotProducts,
135
+ useSpotRedemptions: () => useSpotRedemptions,
136
+ useSpots: () => useSpots,
137
+ useSubscribeToSpot: () => useSubscribeToSpot,
138
+ useTemplate: () => useTemplate,
139
+ useTemplateBySlug: () => useTemplateBySlug,
140
+ useTemplates: () => useTemplates,
141
+ useUnblockUser: () => useUnblockUser,
142
+ useUnreadNotificationCount: () => useUnreadNotificationCount,
143
+ useUnsubscribeFromSpot: () => useUnsubscribeFromSpot,
144
+ useUpdateClub: () => useUpdateClub,
145
+ useUpdateInterests: () => useUpdateInterests,
146
+ useUpdateOrderStatus: () => useUpdateOrderStatus,
147
+ useUpdatePost: () => useUpdatePost,
148
+ useUpdatePostStatus: () => useUpdatePostStatus,
149
+ useUpdateProduct: () => useUpdateProduct,
150
+ useUpdateProfile: () => useUpdateProfile,
151
+ useUpdateResponse: () => useUpdateResponse,
152
+ useUpdateSpot: () => useUpdateSpot,
153
+ useUpdateVibes: () => useUpdateVibes,
154
+ useUploadAvatar: () => useUploadAvatar,
155
+ useUpvotePost: () => useUpvotePost,
156
+ useUserActivity: () => useUserActivity,
157
+ useUserClubs: () => useUserClubs,
158
+ useUserFavorites: () => useUserFavorites,
159
+ useUserPosts: () => useUserPosts,
160
+ useUserSpotsSummary: () => useUserSpotsSummary,
161
+ useUserStats: () => useUserStats,
162
+ useUserSubscriptions: () => useUserSubscriptions,
163
+ useVerifyOtp: () => useVerifyOtp,
164
+ useVibes: () => useVibes,
165
+ useVoidRedemption: () => useVoidRedemption,
166
+ useWallet: () => useWallet,
167
+ useWalletHistory: () => useWalletHistory,
168
+ userKeys: () => userKeys,
169
+ walletKeys: () => walletKeys
170
+ });
171
+ var config = null;
172
+ var apiClient = null;
173
+ function configureSDK(sdkConfig) {
174
+ config = sdkConfig;
175
+ apiClient = createApiClient(sdkConfig);
176
+ }
177
+ function getApiClient() {
178
+ if (!apiClient) {
179
+ throw new Error("SDK not configured. Call configureSDK() first.");
180
+ }
181
+ return apiClient;
182
+ }
183
+ function getConfig() {
184
+ if (!config) {
185
+ throw new Error("SDK not configured. Call configureSDK() first.");
186
+ }
187
+ return config;
188
+ }
189
+ function createApiClient(sdkConfig) {
190
+ const client = axios__default.default.create({
191
+ baseURL: sdkConfig.baseURL,
192
+ headers: {
193
+ "Content-Type": "application/json"
194
+ }
195
+ });
196
+ client.interceptors.request.use(
197
+ async (requestConfig) => {
198
+ const token = await sdkConfig.getAccessToken();
199
+ if (token) {
200
+ requestConfig.headers.Authorization = `Bearer ${token}`;
201
+ }
202
+ console.log(
203
+ `[SDK] ${requestConfig.method?.toUpperCase()} ${sdkConfig.baseURL}${requestConfig.url}`
204
+ );
205
+ return requestConfig;
206
+ },
207
+ (error) => Promise.reject(error)
208
+ );
209
+ client.interceptors.response.use(
210
+ (response) => response,
211
+ async (error) => {
212
+ console.log(
213
+ `[SDK] Error: ${error.response?.status} ${error.config?.url}`,
214
+ error.message
215
+ );
216
+ if (error.response?.status === 401) {
217
+ if (sdkConfig.refreshAccessToken) {
218
+ try {
219
+ const newToken = await sdkConfig.refreshAccessToken();
220
+ if (newToken && error.config) {
221
+ error.config.headers.Authorization = `Bearer ${newToken}`;
222
+ return client.request(error.config);
223
+ }
224
+ } catch {
225
+ sdkConfig.onUnauthorized?.();
226
+ }
227
+ } else {
228
+ sdkConfig.onUnauthorized?.();
229
+ }
230
+ }
231
+ return Promise.reject(error);
232
+ }
233
+ );
234
+ return client;
235
+ }
236
+
237
+ // src/api/types.ts
238
+ var types_exports = {};
239
+ __reExport(types_exports, types_star__namespace);
240
+
241
+ // src/index.ts
242
+ __reExport(index_exports, types_exports);
243
+ function useSendOtp(options) {
244
+ return reactQuery.useMutation({
245
+ mutationFn: async (data) => {
246
+ const client = getApiClient();
247
+ const response = await client.post(
248
+ "/auth/send-otp",
249
+ data
250
+ );
251
+ return response.data;
252
+ },
253
+ ...options
254
+ });
255
+ }
256
+ function useVerifyOtp(options) {
257
+ return reactQuery.useMutation({
258
+ mutationFn: async (data) => {
259
+ const client = getApiClient();
260
+ const response = await client.post("/auth/verify-otp", data);
261
+ return response.data;
262
+ },
263
+ ...options
264
+ });
265
+ }
266
+ function useRefreshToken(options) {
267
+ return reactQuery.useMutation({
268
+ mutationFn: async (data) => {
269
+ const client = getApiClient();
270
+ const response = await client.post(
271
+ "/auth/refresh",
272
+ data
273
+ );
274
+ return response.data;
275
+ },
276
+ ...options
277
+ });
278
+ }
279
+ function extractArrayData(data) {
280
+ if (Array.isArray(data)) {
281
+ return data;
282
+ }
283
+ if (data && typeof data === "object" && "data" in data) {
284
+ const nested = data.data;
285
+ if (Array.isArray(nested)) {
286
+ return nested;
287
+ }
288
+ }
289
+ return [];
290
+ }
291
+ var userKeys = {
292
+ all: ["users"],
293
+ me: () => [...userKeys.all, "me"],
294
+ stats: () => [...userKeys.me(), "stats"],
295
+ spotsSummary: () => [...userKeys.me(), "spots-summary"],
296
+ activity: (limit) => [...userKeys.me(), "activity", limit],
297
+ posts: (params) => [...userKeys.me(), "posts", params],
298
+ clubs: () => [...userKeys.me(), "clubs"],
299
+ subscriptions: () => [...userKeys.me(), "subscriptions"],
300
+ blocked: () => [...userKeys.me(), "blocked"],
301
+ ownedSpots: () => [...userKeys.me(), "owned-spots"],
302
+ favorites: () => [...userKeys.me(), "favorites"]
303
+ };
304
+ function useCurrentUser(options) {
305
+ return reactQuery.useQuery({
306
+ queryKey: userKeys.me(),
307
+ queryFn: async () => {
308
+ console.log("[SDK-USERS] Fetching /users/me...");
309
+ const client = getApiClient();
310
+ try {
311
+ const response = await client.get("/users/me");
312
+ console.log("[SDK-USERS] Success:", response.status);
313
+ return response.data.data;
314
+ } catch (error) {
315
+ const axiosError = error;
316
+ console.log(
317
+ "[SDK-USERS] Error:",
318
+ axiosError.response?.status,
319
+ "URL:",
320
+ axiosError.config?.baseURL,
321
+ axiosError.config?.url
322
+ );
323
+ throw error;
324
+ }
325
+ },
326
+ ...options
327
+ });
328
+ }
329
+ function useUserStats(options) {
330
+ return reactQuery.useQuery({
331
+ queryKey: userKeys.stats(),
332
+ queryFn: async () => {
333
+ const client = getApiClient();
334
+ const response = await client.get("/users/me/stats");
335
+ return response.data.data;
336
+ },
337
+ ...options
338
+ });
339
+ }
340
+ function useUserSpotsSummary(options) {
341
+ return reactQuery.useQuery({
342
+ queryKey: userKeys.spotsSummary(),
343
+ queryFn: async () => {
344
+ const client = getApiClient();
345
+ const response = await client.get(
346
+ "/users/me/spots-summary"
347
+ );
348
+ return response.data.data;
349
+ },
350
+ ...options
351
+ });
352
+ }
353
+ function useUserActivity(limit = 10, options) {
354
+ return reactQuery.useQuery({
355
+ queryKey: userKeys.activity(limit),
356
+ queryFn: async () => {
357
+ const client = getApiClient();
358
+ const response = await client.get(
359
+ `/users/me/activity?limit=${limit}`
360
+ );
361
+ return extractArrayData(response.data.data);
362
+ },
363
+ ...options
364
+ });
365
+ }
366
+ function useUserPosts(params, options) {
367
+ return reactQuery.useQuery({
368
+ queryKey: userKeys.posts(params),
369
+ queryFn: async () => {
370
+ const client = getApiClient();
371
+ const queryParams = new URLSearchParams();
372
+ if (params?.page) queryParams.set("page", String(params.page));
373
+ if (params?.limit) queryParams.set("limit", String(params.limit));
374
+ const response = await client.get(
375
+ `/user/me/posts?${queryParams}`
376
+ );
377
+ return extractArrayData(response.data.data);
378
+ },
379
+ ...options
380
+ });
381
+ }
382
+ function useUserClubs(options) {
383
+ return reactQuery.useQuery({
384
+ queryKey: userKeys.clubs(),
385
+ queryFn: async () => {
386
+ const client = getApiClient();
387
+ const response = await client.get("/user/me/clubs");
388
+ return extractArrayData(response.data.data);
389
+ },
390
+ ...options
391
+ });
392
+ }
393
+ function useUserSubscriptions(options) {
394
+ return reactQuery.useQuery({
395
+ queryKey: userKeys.subscriptions(),
396
+ queryFn: async () => {
397
+ const client = getApiClient();
398
+ const response = await client.get(
399
+ "/user/me/subscriptions"
400
+ );
401
+ return extractArrayData(response.data.data);
402
+ },
403
+ ...options
404
+ });
405
+ }
406
+ function useBlockedUsers(options) {
407
+ return reactQuery.useQuery({
408
+ queryKey: userKeys.blocked(),
409
+ queryFn: async () => {
410
+ const client = getApiClient();
411
+ const response = await client.get("/user/me/blocked");
412
+ return extractArrayData(response.data.data);
413
+ },
414
+ ...options
415
+ });
416
+ }
417
+ function useOwnedSpots(options) {
418
+ return reactQuery.useQuery({
419
+ queryKey: userKeys.ownedSpots(),
420
+ queryFn: async () => {
421
+ const client = getApiClient();
422
+ const response = await client.get(
423
+ "/users/me/owned-spots"
424
+ );
425
+ return extractArrayData(response.data.data);
426
+ },
427
+ ...options
428
+ });
429
+ }
430
+ function useUserFavorites(options) {
431
+ return reactQuery.useQuery({
432
+ queryKey: userKeys.favorites(),
433
+ queryFn: async () => {
434
+ const client = getApiClient();
435
+ const response = await client.get(
436
+ "/users/me/favorites"
437
+ );
438
+ return extractArrayData(response.data.data);
439
+ },
440
+ ...options
441
+ });
442
+ }
443
+ function extractArrayData2(data) {
444
+ if (Array.isArray(data)) {
445
+ return data;
446
+ }
447
+ if (data && typeof data === "object" && "data" in data) {
448
+ const nested = data.data;
449
+ if (Array.isArray(nested)) {
450
+ return nested;
451
+ }
452
+ }
453
+ return [];
454
+ }
455
+ function extractObjectData(data) {
456
+ if (data && typeof data === "object" && "data" in data && !Array.isArray(data)) {
457
+ const nested = data.data;
458
+ if (nested && typeof nested === "object" && "data" in nested && !Array.isArray(nested)) {
459
+ return nested.data;
460
+ }
461
+ return nested;
462
+ }
463
+ return data;
464
+ }
465
+ var spotKeys = {
466
+ all: ["spots"],
467
+ lists: () => [...spotKeys.all, "list"],
468
+ list: (filters) => [...spotKeys.lists(), filters],
469
+ details: () => [...spotKeys.all, "detail"],
470
+ detail: (id) => [...spotKeys.details(), id],
471
+ bySlug: (slug) => [...spotKeys.all, "slug", slug],
472
+ byQR: (qrCode) => [...spotKeys.all, "qr", qrCode],
473
+ images: (spotId) => [...spotKeys.detail(spotId), "images"]
474
+ };
475
+ function useSpots(params, options) {
476
+ return reactQuery.useQuery({
477
+ queryKey: spotKeys.list(params),
478
+ queryFn: async () => {
479
+ const client = getApiClient();
480
+ const queryParams = new URLSearchParams();
481
+ if (params?.limit) queryParams.set("limit", String(params.limit));
482
+ if (params?.city) queryParams.set("city", params.city);
483
+ if (params?.type) queryParams.set("type", params.type);
484
+ if (params?.lat) queryParams.set("lat", String(params.lat));
485
+ if (params?.lng) queryParams.set("lng", String(params.lng));
486
+ if (params?.radius) queryParams.set("radius", String(params.radius));
487
+ if (params?.search) queryParams.set("search", params.search);
488
+ if (params?.vibes) queryParams.set("vibeIds", params.vibes);
489
+ if (params?.cityId) queryParams.set("cityId", params.cityId);
490
+ if (params?.page) queryParams.set("page", String(params.page));
491
+ const response = await client.get(
492
+ `/spots?${queryParams}`
493
+ );
494
+ return extractArrayData2(response.data.data);
495
+ },
496
+ ...options
497
+ });
498
+ }
499
+ function useSpot(spotId, options) {
500
+ return reactQuery.useQuery({
501
+ queryKey: spotKeys.detail(spotId),
502
+ queryFn: async () => {
503
+ const client = getApiClient();
504
+ const response = await client.get(
505
+ `/spots/${spotId}`
506
+ );
507
+ return extractObjectData(response.data.data);
508
+ },
509
+ enabled: !!spotId,
510
+ ...options
511
+ });
512
+ }
513
+ function useSpotBySlug(slug, options) {
514
+ return reactQuery.useQuery({
515
+ queryKey: spotKeys.bySlug(slug),
516
+ queryFn: async () => {
517
+ const client = getApiClient();
518
+ const response = await client.get(
519
+ `/spots/slug/${slug}`
520
+ );
521
+ return extractObjectData(response.data.data);
522
+ },
523
+ enabled: !!slug,
524
+ ...options
525
+ });
526
+ }
527
+ function useSpotByQR(qrCode, options) {
528
+ return reactQuery.useQuery({
529
+ queryKey: spotKeys.byQR(qrCode),
530
+ queryFn: async () => {
531
+ const client = getApiClient();
532
+ const response = await client.get(
533
+ `/spots/qr/${qrCode}`
534
+ );
535
+ return extractObjectData(response.data.data);
536
+ },
537
+ enabled: !!qrCode,
538
+ ...options
539
+ });
540
+ }
541
+ function useSpotImages(spotId, options) {
542
+ return reactQuery.useQuery({
543
+ queryKey: spotKeys.images(spotId),
544
+ queryFn: async () => {
545
+ const client = getApiClient();
546
+ const response = await client.get(
547
+ `/spots/${spotId}/images`
548
+ );
549
+ return extractArrayData2(response.data.data);
550
+ },
551
+ enabled: !!spotId,
552
+ ...options
553
+ });
554
+ }
555
+ function useSpotFavoriteStatus(spotId, options) {
556
+ return reactQuery.useQuery({
557
+ queryKey: [...spotKeys.detail(spotId), "favorite"],
558
+ queryFn: async () => {
559
+ const client = getApiClient();
560
+ const response = await client.get(
561
+ `/spots/${spotId}/favorite`
562
+ );
563
+ return extractObjectData(response.data.data);
564
+ },
565
+ enabled: !!spotId,
566
+ ...options
567
+ });
568
+ }
569
+ function useInfiniteSpots(params, options) {
570
+ return reactQuery.useInfiniteQuery({
571
+ queryKey: [...spotKeys.lists(), "infinite", params],
572
+ queryFn: async ({ pageParam = 1 }) => {
573
+ const client = getApiClient();
574
+ const queryParams = new URLSearchParams();
575
+ queryParams.set("page", String(pageParam));
576
+ if (params?.limit) queryParams.set("limit", String(params.limit));
577
+ if (params?.city) queryParams.set("city", params.city);
578
+ if (params?.cityId) queryParams.set("cityId", params.cityId);
579
+ if (params?.type && params.type !== "All")
580
+ queryParams.set("type", params.type);
581
+ if (params?.search?.trim())
582
+ queryParams.set("search", params.search.trim());
583
+ if (params?.templateSlugs) {
584
+ params.templateSlugs.forEach(
585
+ (slug) => queryParams.append("templateSlugs", slug)
586
+ );
587
+ }
588
+ if (params?.vibeIds) {
589
+ params.vibeIds.forEach((id) => queryParams.append("vibeIds", id));
590
+ }
591
+ const response = await client.get(
592
+ `/spots?${queryParams}`
593
+ );
594
+ const data = response.data.data;
595
+ if (data && typeof data === "object" && "data" in data) {
596
+ return data;
597
+ }
598
+ const page = pageParam;
599
+ return {
600
+ data: extractArrayData2(data),
601
+ meta: {
602
+ total: 0,
603
+ page,
604
+ limit: params?.limit || 20,
605
+ totalPages: 1,
606
+ hasNextPage: false,
607
+ hasPreviousPage: page > 1
608
+ }
609
+ };
610
+ },
611
+ initialPageParam: 1,
612
+ getNextPageParam: (lastPage) => {
613
+ return lastPage.meta.hasNextPage ? lastPage.meta.page + 1 : void 0;
614
+ },
615
+ ...options
616
+ });
617
+ }
618
+ function extractArrayData3(data) {
619
+ if (Array.isArray(data)) {
620
+ return data;
621
+ }
622
+ if (data && typeof data === "object" && "data" in data) {
623
+ const nested = data.data;
624
+ if (Array.isArray(nested)) {
625
+ return nested;
626
+ }
627
+ }
628
+ return [];
629
+ }
630
+ function extractObjectData2(data) {
631
+ if (data && typeof data === "object" && "data" in data && !Array.isArray(data)) {
632
+ const nested = data.data;
633
+ if (nested && typeof nested === "object" && "data" in nested && !Array.isArray(nested)) {
634
+ return nested.data;
635
+ }
636
+ return nested;
637
+ }
638
+ return data;
639
+ }
640
+ var postKeys = {
641
+ all: ["posts"],
642
+ lists: () => [...postKeys.all, "list"],
643
+ list: (filters) => [...postKeys.lists(), filters],
644
+ bySpot: (spotId, filters) => [...postKeys.all, "spot", spotId, filters],
645
+ details: () => [...postKeys.all, "detail"],
646
+ detail: (id) => [...postKeys.details(), id],
647
+ responses: (postId) => [...postKeys.detail(postId), "responses"],
648
+ status: (postId) => [...postKeys.detail(postId), "status"],
649
+ upvotes: (postId, filters) => [...postKeys.detail(postId), "upvotes", filters]
650
+ };
651
+ function useSpotPosts(spotId, params, options) {
652
+ return reactQuery.useQuery({
653
+ queryKey: postKeys.bySpot(spotId, params),
654
+ queryFn: async () => {
655
+ const client = getApiClient();
656
+ const queryParams = new URLSearchParams();
657
+ if (params?.postType) queryParams.set("postType", params.postType);
658
+ if (params?.status) queryParams.set("status", params.status);
659
+ if (params?.page) queryParams.set("page", String(params.page));
660
+ if (params?.limit) queryParams.set("limit", String(params.limit));
661
+ const response = await client.get(
662
+ `/spots/${spotId}/posts?${queryParams}`
663
+ );
664
+ return extractArrayData3(response.data.data);
665
+ },
666
+ enabled: !!spotId,
667
+ ...options
668
+ });
669
+ }
670
+ function usePost(postId, options) {
671
+ return reactQuery.useQuery({
672
+ queryKey: postKeys.detail(postId),
673
+ queryFn: async () => {
674
+ const client = getApiClient();
675
+ const response = await client.get(
676
+ `/posts/${postId}`
677
+ );
678
+ return extractObjectData2(response.data.data);
679
+ },
680
+ enabled: !!postId,
681
+ ...options
682
+ });
683
+ }
684
+ function usePostResponses(postId, options) {
685
+ return reactQuery.useQuery({
686
+ queryKey: postKeys.responses(postId),
687
+ queryFn: async () => {
688
+ const client = getApiClient();
689
+ const response = await client.get(
690
+ `/posts/${postId}/responses`
691
+ );
692
+ return extractArrayData3(response.data.data);
693
+ },
694
+ enabled: !!postId,
695
+ ...options
696
+ });
697
+ }
698
+ function usePosts(params, options) {
699
+ return reactQuery.useQuery({
700
+ queryKey: postKeys.list(params),
701
+ queryFn: async () => {
702
+ const client = getApiClient();
703
+ const queryParams = new URLSearchParams();
704
+ if (params?.postType) queryParams.set("postType", params.postType);
705
+ if (params?.limit) queryParams.set("limit", String(params.limit));
706
+ const response = await client.get(
707
+ `/posts?${queryParams}`
708
+ );
709
+ return extractArrayData3(response.data.data);
710
+ },
711
+ ...options
712
+ });
713
+ }
714
+ function usePostStatus(postId, options) {
715
+ return reactQuery.useQuery({
716
+ queryKey: postKeys.status(postId),
717
+ queryFn: async () => {
718
+ const client = getApiClient();
719
+ const response = await client.get(
720
+ `/posts/${postId}/status`
721
+ );
722
+ return extractObjectData2(response.data.data);
723
+ },
724
+ enabled: !!postId,
725
+ ...options
726
+ });
727
+ }
728
+ function usePostUpvotes(postId, params, options) {
729
+ return reactQuery.useQuery({
730
+ queryKey: postKeys.upvotes(postId, params),
731
+ queryFn: async () => {
732
+ const client = getApiClient();
733
+ const queryParams = new URLSearchParams();
734
+ if (params?.limit) queryParams.set("limit", String(params.limit));
735
+ if (params?.offset) queryParams.set("offset", String(params.offset));
736
+ const queryString = queryParams.toString();
737
+ const response = await client.get(
738
+ `/posts/${postId}/upvotes${queryString ? `?${queryString}` : ""}`
739
+ );
740
+ return response.data.data;
741
+ },
742
+ enabled: !!postId,
743
+ ...options
744
+ });
745
+ }
746
+ function usePostsFeed(params, options) {
747
+ return reactQuery.useQuery({
748
+ queryKey: [...postKeys.lists(), "feed", params],
749
+ queryFn: async () => {
750
+ const client = getApiClient();
751
+ const queryParams = new URLSearchParams();
752
+ queryParams.set("lat", String(params.lat));
753
+ queryParams.set("lng", String(params.lng));
754
+ if (params.radius) queryParams.set("radius", String(params.radius));
755
+ if (params.postType) queryParams.set("postType", params.postType);
756
+ if (params.cursor) queryParams.set("cursor", params.cursor);
757
+ if (params.limit) queryParams.set("limit", String(params.limit));
758
+ const response = await client.get(`/posts/feed?${queryParams}`);
759
+ const data = response.data.data;
760
+ return {
761
+ posts: data.posts ?? extractArrayData3(data),
762
+ hasMore: data.hasMore ?? false,
763
+ nextCursor: data.nextCursor
764
+ };
765
+ },
766
+ enabled: params.lat !== 0 && params.lng !== 0,
767
+ ...options
768
+ });
769
+ }
770
+ var conversationKeys = {
771
+ all: ["conversations"],
772
+ lists: () => [...conversationKeys.all, "list"],
773
+ list: () => [...conversationKeys.lists()],
774
+ details: () => [...conversationKeys.all, "detail"],
775
+ detail: (id) => [...conversationKeys.details(), id],
776
+ messages: (conversationId, params) => [...conversationKeys.detail(conversationId), "messages", params]
777
+ };
778
+ function useConversations(options) {
779
+ return reactQuery.useQuery({
780
+ queryKey: conversationKeys.list(),
781
+ queryFn: async () => {
782
+ const client = getApiClient();
783
+ const response = await client.get("/conversations");
784
+ return response.data.data;
785
+ },
786
+ ...options
787
+ });
788
+ }
789
+ function useConversation(conversationId, options) {
790
+ return reactQuery.useQuery({
791
+ queryKey: conversationKeys.detail(conversationId),
792
+ queryFn: async () => {
793
+ const client = getApiClient();
794
+ const response = await client.get(
795
+ `/conversations/${conversationId}`
796
+ );
797
+ return response.data.data;
798
+ },
799
+ enabled: !!conversationId,
800
+ ...options
801
+ });
802
+ }
803
+ function useConversationMessages(conversationId, params, options) {
804
+ return reactQuery.useQuery({
805
+ queryKey: conversationKeys.messages(conversationId, params),
806
+ queryFn: async () => {
807
+ const client = getApiClient();
808
+ const queryParams = new URLSearchParams();
809
+ if (params?.limit) queryParams.set("limit", String(params.limit));
810
+ if (params?.before) queryParams.set("before", params.before);
811
+ const response = await client.get(`/conversations/${conversationId}/messages?${queryParams}`);
812
+ return response.data;
813
+ },
814
+ enabled: !!conversationId,
815
+ ...options
816
+ });
817
+ }
818
+ var clubKeys = {
819
+ all: ["clubs"],
820
+ bySpot: (spotId) => [...clubKeys.all, "spot", spotId],
821
+ details: () => [...clubKeys.all, "detail"],
822
+ detail: (id) => [...clubKeys.details(), id],
823
+ bySlug: (slug) => [...clubKeys.all, "slug", slug],
824
+ byUser: (userId) => [...clubKeys.all, "user", userId],
825
+ membership: (clubId, userId) => [...clubKeys.detail(clubId), "membership", userId]
826
+ };
827
+ function useClubsBySpot(spotId, options) {
828
+ return reactQuery.useQuery({
829
+ queryKey: clubKeys.bySpot(spotId),
830
+ queryFn: async () => {
831
+ const client = getApiClient();
832
+ const response = await client.get(
833
+ `/clubs/spot/${spotId}`
834
+ );
835
+ return response.data.data;
836
+ },
837
+ enabled: !!spotId,
838
+ ...options
839
+ });
840
+ }
841
+ function useClub(clubId, options) {
842
+ return reactQuery.useQuery({
843
+ queryKey: clubKeys.detail(clubId),
844
+ queryFn: async () => {
845
+ const client = getApiClient();
846
+ const response = await client.get(`/clubs/${clubId}`);
847
+ return response.data.data;
848
+ },
849
+ enabled: !!clubId,
850
+ ...options
851
+ });
852
+ }
853
+ function useClubBySlug(slug, options) {
854
+ return reactQuery.useQuery({
855
+ queryKey: clubKeys.bySlug(slug),
856
+ queryFn: async () => {
857
+ const client = getApiClient();
858
+ const response = await client.get(
859
+ `/clubs/slug/${slug}`
860
+ );
861
+ return response.data.data;
862
+ },
863
+ enabled: !!slug,
864
+ ...options
865
+ });
866
+ }
867
+ function useClubsByUser(userId, options) {
868
+ return reactQuery.useQuery({
869
+ queryKey: clubKeys.byUser(userId),
870
+ queryFn: async () => {
871
+ const client = getApiClient();
872
+ const response = await client.get(
873
+ `/clubs/user/${userId}`
874
+ );
875
+ return response.data.data;
876
+ },
877
+ enabled: !!userId,
878
+ ...options
879
+ });
880
+ }
881
+ function useClubMembership(clubId, userId, options) {
882
+ return reactQuery.useQuery({
883
+ queryKey: clubKeys.membership(clubId, userId),
884
+ queryFn: async () => {
885
+ const client = getApiClient();
886
+ const response = await client.get(`/clubs/${clubId}/membership/${userId}`);
887
+ return response.data.data;
888
+ },
889
+ enabled: !!clubId && !!userId,
890
+ ...options
891
+ });
892
+ }
893
+ var templateKeys = {
894
+ all: ["templates"],
895
+ lists: () => [...templateKeys.all, "list"],
896
+ list: (filters) => [...templateKeys.lists(), filters],
897
+ details: () => [...templateKeys.all, "detail"],
898
+ detail: (id) => [...templateKeys.details(), id],
899
+ bySlug: (slug) => [...templateKeys.all, "slug", slug]
900
+ };
901
+ function useTemplates(params, options) {
902
+ return reactQuery.useQuery({
903
+ queryKey: templateKeys.list(params),
904
+ queryFn: async () => {
905
+ const client = getApiClient();
906
+ const queryParams = new URLSearchParams();
907
+ if (params?.spotType) queryParams.set("spotType", params.spotType);
908
+ const response = await client.get(
909
+ `/templates?${queryParams}`
910
+ );
911
+ return response.data.data;
912
+ },
913
+ ...options
914
+ });
915
+ }
916
+ function useTemplate(templateId, options) {
917
+ return reactQuery.useQuery({
918
+ queryKey: templateKeys.detail(templateId),
919
+ queryFn: async () => {
920
+ const client = getApiClient();
921
+ const response = await client.get(
922
+ `/templates/${templateId}`
923
+ );
924
+ return response.data.data;
925
+ },
926
+ enabled: !!templateId,
927
+ ...options
928
+ });
929
+ }
930
+ function useTemplateBySlug(slug, options) {
931
+ return reactQuery.useQuery({
932
+ queryKey: templateKeys.bySlug(slug),
933
+ queryFn: async () => {
934
+ const client = getApiClient();
935
+ const response = await client.get(
936
+ `/templates/slug/${slug}`
937
+ );
938
+ return response.data.data;
939
+ },
940
+ enabled: !!slug,
941
+ ...options
942
+ });
943
+ }
944
+ var notificationKeys = {
945
+ all: ["notifications"],
946
+ lists: () => [...notificationKeys.all, "list"],
947
+ list: (params) => [...notificationKeys.lists(), params],
948
+ unreadCount: () => [...notificationKeys.all, "unreadCount"]
949
+ };
950
+ function useNotifications(params, options) {
951
+ return reactQuery.useQuery({
952
+ queryKey: notificationKeys.list(params),
953
+ queryFn: async () => {
954
+ const client = getApiClient();
955
+ const queryParams = new URLSearchParams();
956
+ if (params?.limit) queryParams.set("limit", String(params.limit));
957
+ if (params?.unreadOnly)
958
+ queryParams.set("unreadOnly", String(params.unreadOnly));
959
+ const response = await client.get(
960
+ `/notifications?${queryParams}`
961
+ );
962
+ return response.data.data;
963
+ },
964
+ ...options
965
+ });
966
+ }
967
+ function useUnreadNotificationCount(options) {
968
+ return reactQuery.useQuery({
969
+ queryKey: notificationKeys.unreadCount(),
970
+ queryFn: async () => {
971
+ const client = getApiClient();
972
+ const response = await client.get(
973
+ "/notifications/unread-count"
974
+ );
975
+ return response.data.data.count;
976
+ },
977
+ ...options
978
+ });
979
+ }
980
+ function extractArrayData4(data) {
981
+ if (Array.isArray(data)) {
982
+ return data;
983
+ }
984
+ if (data && typeof data === "object" && "data" in data) {
985
+ const nested = data.data;
986
+ if (Array.isArray(nested)) {
987
+ return nested;
988
+ }
989
+ }
990
+ return [];
991
+ }
992
+ var miscKeys = {
993
+ cities: () => ["cities"],
994
+ vibes: () => ["vibes"],
995
+ lifeSituations: () => ["life-situations"]
996
+ };
997
+ function useCities(options) {
998
+ return reactQuery.useQuery({
999
+ queryKey: miscKeys.cities(),
1000
+ queryFn: async () => {
1001
+ const client = getApiClient();
1002
+ const response = await client.get("/cities");
1003
+ return extractArrayData4(response.data.data);
1004
+ },
1005
+ staleTime: 1e3 * 60 * 60,
1006
+ ...options
1007
+ });
1008
+ }
1009
+ function useVibes(options) {
1010
+ return reactQuery.useQuery({
1011
+ queryKey: miscKeys.vibes(),
1012
+ queryFn: async () => {
1013
+ const client = getApiClient();
1014
+ const response = await client.get("/vibes");
1015
+ return extractArrayData4(response.data.data);
1016
+ },
1017
+ staleTime: 1e3 * 60 * 60,
1018
+ ...options
1019
+ });
1020
+ }
1021
+ function useLifeSituations(options) {
1022
+ return reactQuery.useQuery({
1023
+ queryKey: miscKeys.lifeSituations(),
1024
+ queryFn: async () => {
1025
+ const client = getApiClient();
1026
+ const response = await client.get("/life-situations");
1027
+ return extractArrayData4(response.data.data);
1028
+ },
1029
+ staleTime: 1e3 * 60 * 60,
1030
+ ...options
1031
+ });
1032
+ }
1033
+ var productKeys = {
1034
+ all: ["products"],
1035
+ lists: () => [...productKeys.all, "list"],
1036
+ list: (filters) => [...productKeys.lists(), filters],
1037
+ details: () => [...productKeys.all, "detail"],
1038
+ detail: (id) => [...productKeys.details(), id],
1039
+ bySlug: (spotId, slug) => [...productKeys.all, "slug", spotId, slug],
1040
+ bySpot: (spotId) => [...productKeys.all, "spot", spotId]
1041
+ };
1042
+ function useSpotProducts(spotId, params, options) {
1043
+ return reactQuery.useQuery({
1044
+ queryKey: productKeys.bySpot(spotId),
1045
+ queryFn: async () => {
1046
+ const client = getApiClient();
1047
+ const queryParams = new URLSearchParams();
1048
+ if (params?.limit) queryParams.set("limit", String(params.limit));
1049
+ if (params?.page) queryParams.set("page", String(params.page));
1050
+ if (params?.type) queryParams.set("type", params.type);
1051
+ const response = await client.get(
1052
+ `/spots/${spotId}/products?${queryParams}`
1053
+ );
1054
+ return response.data.data;
1055
+ },
1056
+ enabled: !!spotId,
1057
+ ...options
1058
+ });
1059
+ }
1060
+ function useProduct(productId, options) {
1061
+ return reactQuery.useQuery({
1062
+ queryKey: productKeys.detail(productId),
1063
+ queryFn: async () => {
1064
+ const client = getApiClient();
1065
+ const response = await client.get(
1066
+ `/products/${productId}`
1067
+ );
1068
+ return response.data.data;
1069
+ },
1070
+ enabled: !!productId,
1071
+ ...options
1072
+ });
1073
+ }
1074
+ function useProductBySlug(spotId, slug, options) {
1075
+ return reactQuery.useQuery({
1076
+ queryKey: productKeys.bySlug(spotId, slug),
1077
+ queryFn: async () => {
1078
+ const client = getApiClient();
1079
+ const response = await client.get(
1080
+ `/spots/${spotId}/products/slug/${slug}`
1081
+ );
1082
+ return response.data.data;
1083
+ },
1084
+ enabled: !!spotId && !!slug,
1085
+ ...options
1086
+ });
1087
+ }
1088
+ var orderKeys = {
1089
+ all: ["orders"],
1090
+ lists: () => [...orderKeys.all, "list"],
1091
+ list: (filters) => [...orderKeys.lists(), filters],
1092
+ details: () => [...orderKeys.all, "detail"],
1093
+ detail: (id) => [...orderKeys.details(), id],
1094
+ myOrders: () => [...orderKeys.all, "my"],
1095
+ spotOrders: (spotId) => [...orderKeys.all, "spot", spotId]
1096
+ };
1097
+ function useMyOrders(params, options) {
1098
+ return reactQuery.useQuery({
1099
+ queryKey: orderKeys.list({ ...params, my: true }),
1100
+ queryFn: async () => {
1101
+ const client = getApiClient();
1102
+ const queryParams = new URLSearchParams();
1103
+ if (params?.status) queryParams.set("status", params.status);
1104
+ if (params?.limit) queryParams.set("limit", String(params.limit));
1105
+ if (params?.page) queryParams.set("page", String(params.page));
1106
+ const response = await client.get(`/users/me/orders?${queryParams}`);
1107
+ return response.data.data;
1108
+ },
1109
+ ...options
1110
+ });
1111
+ }
1112
+ function useOrder(orderId, options) {
1113
+ return reactQuery.useQuery({
1114
+ queryKey: orderKeys.detail(orderId),
1115
+ queryFn: async () => {
1116
+ const client = getApiClient();
1117
+ const response = await client.get(
1118
+ `/orders/${orderId}`
1119
+ );
1120
+ return response.data.data;
1121
+ },
1122
+ enabled: !!orderId,
1123
+ ...options
1124
+ });
1125
+ }
1126
+ function useSpotOrders(spotId, params, options) {
1127
+ return reactQuery.useQuery({
1128
+ queryKey: orderKeys.spotOrders(spotId),
1129
+ queryFn: async () => {
1130
+ const client = getApiClient();
1131
+ const queryParams = new URLSearchParams();
1132
+ if (params?.status) queryParams.set("status", params.status);
1133
+ if (params?.limit) queryParams.set("limit", String(params.limit));
1134
+ if (params?.page) queryParams.set("page", String(params.page));
1135
+ const response = await client.get(`/seller/spots/${spotId}/orders?${queryParams}`);
1136
+ return response.data.data;
1137
+ },
1138
+ enabled: !!spotId,
1139
+ ...options
1140
+ });
1141
+ }
1142
+ function extractArrayData5(data) {
1143
+ if (Array.isArray(data)) {
1144
+ return data;
1145
+ }
1146
+ if (data && typeof data === "object" && "data" in data) {
1147
+ const nested = data.data;
1148
+ if (Array.isArray(nested)) {
1149
+ return nested;
1150
+ }
1151
+ }
1152
+ return [];
1153
+ }
1154
+ function extractObjectData3(data) {
1155
+ if (data && typeof data === "object" && "data" in data && !Array.isArray(data)) {
1156
+ const nested = data.data;
1157
+ if (nested && typeof nested === "object" && "data" in nested && !Array.isArray(nested)) {
1158
+ return nested.data;
1159
+ }
1160
+ return nested;
1161
+ }
1162
+ return data;
1163
+ }
1164
+ var walletKeys = {
1165
+ all: ["wallet"],
1166
+ active: () => [...walletKeys.all, "active"],
1167
+ history: (page) => [...walletKeys.all, "history", page],
1168
+ redemptions: () => ["redemptions"],
1169
+ lookup: (qrCode) => [...walletKeys.redemptions(), "lookup", qrCode],
1170
+ spotRedemptions: (spotId, page) => [...walletKeys.redemptions(), "spot", spotId, page]
1171
+ };
1172
+ function useWallet(options) {
1173
+ return reactQuery.useQuery({
1174
+ queryKey: walletKeys.active(),
1175
+ queryFn: async () => {
1176
+ const client = getApiClient();
1177
+ const response = await client.get("/wallet");
1178
+ return extractArrayData5(response.data.data);
1179
+ },
1180
+ ...options
1181
+ });
1182
+ }
1183
+ function useWalletHistory(params, options) {
1184
+ return reactQuery.useQuery({
1185
+ queryKey: walletKeys.history(params?.page),
1186
+ queryFn: async () => {
1187
+ const client = getApiClient();
1188
+ const queryParams = new URLSearchParams();
1189
+ if (params?.page) queryParams.set("page", String(params.page));
1190
+ if (params?.limit) queryParams.set("limit", String(params.limit));
1191
+ const response = await client.get(
1192
+ `/wallet/history?${queryParams}`
1193
+ );
1194
+ return extractObjectData3(response.data.data);
1195
+ },
1196
+ ...options
1197
+ });
1198
+ }
1199
+ function useRedemptionLookup(qrCode, options) {
1200
+ return reactQuery.useQuery({
1201
+ queryKey: walletKeys.lookup(qrCode),
1202
+ queryFn: async () => {
1203
+ const client = getApiClient();
1204
+ const response = await client.get(
1205
+ `/redemptions/lookup/${qrCode}`
1206
+ );
1207
+ return extractObjectData3(response.data.data);
1208
+ },
1209
+ enabled: !!qrCode && qrCode.length > 0,
1210
+ ...options
1211
+ });
1212
+ }
1213
+ function useSpotRedemptions(spotId, params, options) {
1214
+ return reactQuery.useQuery({
1215
+ queryKey: walletKeys.spotRedemptions(spotId, params?.page),
1216
+ queryFn: async () => {
1217
+ const client = getApiClient();
1218
+ const queryParams = new URLSearchParams();
1219
+ if (params?.page) queryParams.set("page", String(params.page));
1220
+ if (params?.limit) queryParams.set("limit", String(params.limit));
1221
+ const response = await client.get(
1222
+ `/spots/${spotId}/redemptions?${queryParams}`
1223
+ );
1224
+ return extractObjectData3(response.data.data);
1225
+ },
1226
+ enabled: !!spotId,
1227
+ ...options
1228
+ });
1229
+ }
1230
+ var paymentKeys = {
1231
+ all: ["payments"],
1232
+ config: () => [...paymentKeys.all, "config"]
1233
+ };
1234
+ function usePaymentConfig(options) {
1235
+ return reactQuery.useQuery({
1236
+ queryKey: paymentKeys.config(),
1237
+ queryFn: async () => {
1238
+ const client = getApiClient();
1239
+ const response = await client.get(
1240
+ "/payments/config"
1241
+ );
1242
+ return response.data.data;
1243
+ },
1244
+ staleTime: 1e3 * 60 * 60,
1245
+ // 1 hour - config rarely changes
1246
+ ...options
1247
+ });
1248
+ }
1249
+ function useUpdateProfile(options) {
1250
+ const queryClient = reactQuery.useQueryClient();
1251
+ return reactQuery.useMutation({
1252
+ mutationFn: async (data) => {
1253
+ const client = getApiClient();
1254
+ const response = await client.put("/users/me", data);
1255
+ return response.data.data;
1256
+ },
1257
+ onSuccess: (data) => {
1258
+ queryClient.setQueryData(userKeys.me(), data);
1259
+ },
1260
+ ...options
1261
+ });
1262
+ }
1263
+ function useUploadAvatar(options) {
1264
+ const queryClient = reactQuery.useQueryClient();
1265
+ return reactQuery.useMutation({
1266
+ mutationFn: async (formData) => {
1267
+ const client = getApiClient();
1268
+ const response = await client.post(
1269
+ "/users/me/avatar",
1270
+ formData,
1271
+ {
1272
+ headers: { "Content-Type": "multipart/form-data" }
1273
+ }
1274
+ );
1275
+ return response.data.data;
1276
+ },
1277
+ onSuccess: () => {
1278
+ queryClient.invalidateQueries({ queryKey: userKeys.me() });
1279
+ },
1280
+ ...options
1281
+ });
1282
+ }
1283
+ function useDeleteAccount(options) {
1284
+ const queryClient = reactQuery.useQueryClient();
1285
+ return reactQuery.useMutation({
1286
+ mutationFn: async () => {
1287
+ const client = getApiClient();
1288
+ await client.delete("/users/me");
1289
+ },
1290
+ onSuccess: () => {
1291
+ queryClient.clear();
1292
+ },
1293
+ ...options
1294
+ });
1295
+ }
1296
+ function useUpdateVibes(options) {
1297
+ const queryClient = reactQuery.useQueryClient();
1298
+ return reactQuery.useMutation({
1299
+ mutationFn: async (data) => {
1300
+ const client = getApiClient();
1301
+ const response = await client.put(
1302
+ "/users/me/vibes",
1303
+ data
1304
+ );
1305
+ return response.data.data;
1306
+ },
1307
+ onSuccess: () => {
1308
+ queryClient.invalidateQueries({ queryKey: userKeys.me() });
1309
+ },
1310
+ ...options
1311
+ });
1312
+ }
1313
+ function useUpdateInterests(options) {
1314
+ const queryClient = reactQuery.useQueryClient();
1315
+ return reactQuery.useMutation({
1316
+ mutationFn: async (data) => {
1317
+ const client = getApiClient();
1318
+ const response = await client.put(
1319
+ "/user/me/interests",
1320
+ data
1321
+ );
1322
+ return response.data.data;
1323
+ },
1324
+ onSuccess: () => {
1325
+ queryClient.invalidateQueries({ queryKey: userKeys.me() });
1326
+ },
1327
+ ...options
1328
+ });
1329
+ }
1330
+ function useCompleteOnboardingStep(options) {
1331
+ const queryClient = reactQuery.useQueryClient();
1332
+ return reactQuery.useMutation({
1333
+ mutationFn: async (data) => {
1334
+ const client = getApiClient();
1335
+ const response = await client.post(
1336
+ "/user/me/onboarding-step",
1337
+ data
1338
+ );
1339
+ return response.data.data;
1340
+ },
1341
+ onSuccess: () => {
1342
+ queryClient.invalidateQueries({ queryKey: userKeys.me() });
1343
+ },
1344
+ ...options
1345
+ });
1346
+ }
1347
+ function useBlockUser(options) {
1348
+ const queryClient = reactQuery.useQueryClient();
1349
+ return reactQuery.useMutation({
1350
+ mutationFn: async (userId) => {
1351
+ const client = getApiClient();
1352
+ await client.post(`/users/${userId}/block`);
1353
+ },
1354
+ onSuccess: () => {
1355
+ queryClient.invalidateQueries({ queryKey: userKeys.blocked() });
1356
+ },
1357
+ ...options
1358
+ });
1359
+ }
1360
+ function useUnblockUser(options) {
1361
+ const queryClient = reactQuery.useQueryClient();
1362
+ return reactQuery.useMutation({
1363
+ mutationFn: async (userId) => {
1364
+ const client = getApiClient();
1365
+ await client.delete(`/users/${userId}/block`);
1366
+ },
1367
+ onSuccess: () => {
1368
+ queryClient.invalidateQueries({ queryKey: userKeys.blocked() });
1369
+ },
1370
+ ...options
1371
+ });
1372
+ }
1373
+ function useCreatePost(options) {
1374
+ const queryClient = reactQuery.useQueryClient();
1375
+ return reactQuery.useMutation({
1376
+ mutationFn: async ({ spotId, ...data }) => {
1377
+ const client = getApiClient();
1378
+ const response = await client.post(
1379
+ `/spots/${spotId}/posts`,
1380
+ data
1381
+ );
1382
+ return response.data.data;
1383
+ },
1384
+ onSuccess: (_, variables) => {
1385
+ queryClient.invalidateQueries({
1386
+ queryKey: postKeys.bySpot(variables.spotId)
1387
+ });
1388
+ },
1389
+ ...options
1390
+ });
1391
+ }
1392
+ function useUpdatePost(options) {
1393
+ const queryClient = reactQuery.useQueryClient();
1394
+ return reactQuery.useMutation({
1395
+ mutationFn: async ({ postId, title, content }) => {
1396
+ const client = getApiClient();
1397
+ const response = await client.put(
1398
+ `/posts/${postId}`,
1399
+ { title, description: content }
1400
+ );
1401
+ return response.data.data;
1402
+ },
1403
+ onSuccess: (data, variables) => {
1404
+ queryClient.setQueryData(postKeys.detail(variables.postId), data);
1405
+ },
1406
+ ...options
1407
+ });
1408
+ }
1409
+ function useDeletePost(options) {
1410
+ const queryClient = reactQuery.useQueryClient();
1411
+ return reactQuery.useMutation({
1412
+ mutationFn: async (postId) => {
1413
+ const client = getApiClient();
1414
+ await client.delete(`/posts/${postId}`);
1415
+ },
1416
+ onSuccess: (_, postId) => {
1417
+ queryClient.invalidateQueries({ queryKey: postKeys.detail(postId) });
1418
+ queryClient.invalidateQueries({ queryKey: postKeys.lists() });
1419
+ },
1420
+ ...options
1421
+ });
1422
+ }
1423
+ function useFulfillPost(options) {
1424
+ const queryClient = reactQuery.useQueryClient();
1425
+ return reactQuery.useMutation({
1426
+ mutationFn: async (postId) => {
1427
+ const client = getApiClient();
1428
+ const response = await client.put(
1429
+ `/posts/${postId}/fulfill`
1430
+ );
1431
+ return response.data.data;
1432
+ },
1433
+ onSuccess: (data, postId) => {
1434
+ queryClient.setQueryData(postKeys.detail(postId), data);
1435
+ },
1436
+ ...options
1437
+ });
1438
+ }
1439
+ function useUpvotePost(options) {
1440
+ const queryClient = reactQuery.useQueryClient();
1441
+ return reactQuery.useMutation({
1442
+ mutationFn: async (postId) => {
1443
+ const client = getApiClient();
1444
+ const response = await client.post(
1445
+ `/posts/${postId}/upvote`
1446
+ );
1447
+ return response.data.data;
1448
+ },
1449
+ onSuccess: (_, postId) => {
1450
+ queryClient.invalidateQueries({ queryKey: postKeys.detail(postId) });
1451
+ },
1452
+ ...options
1453
+ });
1454
+ }
1455
+ function useCreateReply(options) {
1456
+ const queryClient = reactQuery.useQueryClient();
1457
+ return reactQuery.useMutation({
1458
+ mutationFn: async ({ postId, ...data }) => {
1459
+ const client = getApiClient();
1460
+ const response = await client.post(
1461
+ `/posts/${postId}/reply`,
1462
+ data
1463
+ );
1464
+ return response.data.data;
1465
+ },
1466
+ onSuccess: (_, variables) => {
1467
+ queryClient.invalidateQueries({
1468
+ queryKey: postKeys.detail(variables.postId)
1469
+ });
1470
+ },
1471
+ ...options
1472
+ });
1473
+ }
1474
+ function useDeleteReply(options) {
1475
+ const queryClient = reactQuery.useQueryClient();
1476
+ return reactQuery.useMutation({
1477
+ mutationFn: async ({ replyId }) => {
1478
+ const client = getApiClient();
1479
+ await client.delete(`/replies/${replyId}`);
1480
+ },
1481
+ onSuccess: (_, variables) => {
1482
+ queryClient.invalidateQueries({
1483
+ queryKey: postKeys.detail(variables.postId)
1484
+ });
1485
+ },
1486
+ ...options
1487
+ });
1488
+ }
1489
+ function useRespondToPost(options) {
1490
+ const queryClient = reactQuery.useQueryClient();
1491
+ return reactQuery.useMutation({
1492
+ mutationFn: async ({ postId, ...data }) => {
1493
+ const client = getApiClient();
1494
+ const response = await client.post(
1495
+ `/posts/${postId}/respond`,
1496
+ data
1497
+ );
1498
+ return response.data.data;
1499
+ },
1500
+ onSuccess: (_, variables) => {
1501
+ queryClient.invalidateQueries({
1502
+ queryKey: postKeys.detail(variables.postId)
1503
+ });
1504
+ queryClient.invalidateQueries({
1505
+ queryKey: postKeys.responses(variables.postId)
1506
+ });
1507
+ },
1508
+ ...options
1509
+ });
1510
+ }
1511
+ function useUpdateResponse(options) {
1512
+ const queryClient = reactQuery.useQueryClient();
1513
+ return reactQuery.useMutation({
1514
+ mutationFn: async ({
1515
+ responseId,
1516
+ postId: _,
1517
+ ...data
1518
+ }) => {
1519
+ const client = getApiClient();
1520
+ const response = await client.put(
1521
+ `/responses/${responseId}`,
1522
+ data
1523
+ );
1524
+ return response.data.data;
1525
+ },
1526
+ onSuccess: (_, variables) => {
1527
+ queryClient.invalidateQueries({
1528
+ queryKey: postKeys.responses(variables.postId)
1529
+ });
1530
+ },
1531
+ ...options
1532
+ });
1533
+ }
1534
+ function useReportPost(options) {
1535
+ return reactQuery.useMutation({
1536
+ mutationFn: async ({ postId, ...data }) => {
1537
+ const client = getApiClient();
1538
+ await client.post(`/posts/${postId}/report`, data);
1539
+ },
1540
+ ...options
1541
+ });
1542
+ }
1543
+ function useUpdatePostStatus(options) {
1544
+ const queryClient = reactQuery.useQueryClient();
1545
+ return reactQuery.useMutation({
1546
+ mutationFn: async ({ postId, ...data }) => {
1547
+ const client = getApiClient();
1548
+ const response = await client.put(
1549
+ `/posts/${postId}/status`,
1550
+ data
1551
+ );
1552
+ return response.data.data;
1553
+ },
1554
+ onSuccess: (data, variables) => {
1555
+ queryClient.setQueryData(postKeys.status(variables.postId), data);
1556
+ },
1557
+ ...options
1558
+ });
1559
+ }
1560
+ function useCreateSpot(options) {
1561
+ const queryClient = reactQuery.useQueryClient();
1562
+ return reactQuery.useMutation({
1563
+ mutationFn: async (data) => {
1564
+ const client = getApiClient();
1565
+ const response = await client.post("/spots", data);
1566
+ return response.data.data;
1567
+ },
1568
+ onSuccess: () => {
1569
+ queryClient.invalidateQueries({ queryKey: spotKeys.lists() });
1570
+ },
1571
+ ...options
1572
+ });
1573
+ }
1574
+ function useUpdateSpot(options) {
1575
+ const queryClient = reactQuery.useQueryClient();
1576
+ return reactQuery.useMutation({
1577
+ mutationFn: async ({ spotId, ...data }) => {
1578
+ const client = getApiClient();
1579
+ const response = await client.put(
1580
+ `/spots/${spotId}`,
1581
+ data
1582
+ );
1583
+ return response.data.data;
1584
+ },
1585
+ onSuccess: (data, variables) => {
1586
+ queryClient.setQueryData(spotKeys.detail(variables.spotId), data);
1587
+ },
1588
+ ...options
1589
+ });
1590
+ }
1591
+ function useClaimSpot(options) {
1592
+ return reactQuery.useMutation({
1593
+ mutationFn: async ({ spotId, ...data }) => {
1594
+ const client = getApiClient();
1595
+ const response = await client.post(
1596
+ `/spots/${spotId}/claim`,
1597
+ data
1598
+ );
1599
+ return response.data.data;
1600
+ },
1601
+ ...options
1602
+ });
1603
+ }
1604
+ function useSubscribeToSpot(options) {
1605
+ const queryClient = reactQuery.useQueryClient();
1606
+ return reactQuery.useMutation({
1607
+ mutationFn: async (spotId) => {
1608
+ const client = getApiClient();
1609
+ await client.post(`/spots/${spotId}/subscribe`);
1610
+ },
1611
+ onSuccess: () => {
1612
+ queryClient.invalidateQueries({ queryKey: userKeys.subscriptions() });
1613
+ },
1614
+ ...options
1615
+ });
1616
+ }
1617
+ function useUnsubscribeFromSpot(options) {
1618
+ const queryClient = reactQuery.useQueryClient();
1619
+ return reactQuery.useMutation({
1620
+ mutationFn: async (spotId) => {
1621
+ const client = getApiClient();
1622
+ await client.delete(`/spots/${spotId}/subscribe`);
1623
+ },
1624
+ onSuccess: () => {
1625
+ queryClient.invalidateQueries({ queryKey: userKeys.subscriptions() });
1626
+ },
1627
+ ...options
1628
+ });
1629
+ }
1630
+ function useFavoriteSpot(options) {
1631
+ const queryClient = reactQuery.useQueryClient();
1632
+ return reactQuery.useMutation({
1633
+ mutationFn: async (spotId) => {
1634
+ const client = getApiClient();
1635
+ const response = await client.post(
1636
+ `/spots/${spotId}/favorite`
1637
+ );
1638
+ return response.data.data;
1639
+ },
1640
+ onSuccess: () => {
1641
+ queryClient.invalidateQueries({ queryKey: userKeys.favorites() });
1642
+ },
1643
+ ...options
1644
+ });
1645
+ }
1646
+ function useRateSpot(options) {
1647
+ const queryClient = reactQuery.useQueryClient();
1648
+ return reactQuery.useMutation({
1649
+ mutationFn: async ({
1650
+ spotId,
1651
+ rating
1652
+ }) => {
1653
+ const client = getApiClient();
1654
+ const response = await client.post(
1655
+ `/spots/${spotId}/rate`,
1656
+ { rating }
1657
+ );
1658
+ return response.data.data;
1659
+ },
1660
+ onSuccess: (_, variables) => {
1661
+ queryClient.invalidateQueries({
1662
+ queryKey: spotKeys.detail(variables.spotId)
1663
+ });
1664
+ },
1665
+ ...options
1666
+ });
1667
+ }
1668
+ function useReportSpot(options) {
1669
+ return reactQuery.useMutation({
1670
+ mutationFn: async ({
1671
+ spotId,
1672
+ reason,
1673
+ details
1674
+ }) => {
1675
+ const client = getApiClient();
1676
+ const response = await client.post(
1677
+ `/spots/${spotId}/report`,
1678
+ { reason, details }
1679
+ );
1680
+ return response.data.data;
1681
+ },
1682
+ ...options
1683
+ });
1684
+ }
1685
+ function useCreateConversation(options) {
1686
+ const queryClient = reactQuery.useQueryClient();
1687
+ return reactQuery.useMutation({
1688
+ mutationFn: async (data) => {
1689
+ const client = getApiClient();
1690
+ const response = await client.post(
1691
+ "/conversations",
1692
+ data
1693
+ );
1694
+ return response.data.data;
1695
+ },
1696
+ onSuccess: () => {
1697
+ queryClient.invalidateQueries({ queryKey: conversationKeys.lists() });
1698
+ },
1699
+ ...options
1700
+ });
1701
+ }
1702
+ function useCreateDirectConversation(options) {
1703
+ const queryClient = reactQuery.useQueryClient();
1704
+ return reactQuery.useMutation({
1705
+ mutationFn: async (data) => {
1706
+ const client = getApiClient();
1707
+ const response = await client.post(
1708
+ "/conversations/direct",
1709
+ data
1710
+ );
1711
+ return response.data.data;
1712
+ },
1713
+ onSuccess: () => {
1714
+ queryClient.invalidateQueries({ queryKey: conversationKeys.lists() });
1715
+ },
1716
+ ...options
1717
+ });
1718
+ }
1719
+ function useSendMessage(options) {
1720
+ const queryClient = reactQuery.useQueryClient();
1721
+ return reactQuery.useMutation({
1722
+ mutationFn: async ({ conversationId, ...data }) => {
1723
+ const client = getApiClient();
1724
+ const response = await client.post(
1725
+ `/conversations/${conversationId}/messages`,
1726
+ data
1727
+ );
1728
+ return response.data.data;
1729
+ },
1730
+ onSuccess: (_, variables) => {
1731
+ queryClient.invalidateQueries({
1732
+ queryKey: conversationKeys.messages(variables.conversationId)
1733
+ });
1734
+ queryClient.invalidateQueries({ queryKey: conversationKeys.lists() });
1735
+ },
1736
+ ...options
1737
+ });
1738
+ }
1739
+ function useMarkConversationAsRead(options) {
1740
+ const queryClient = reactQuery.useQueryClient();
1741
+ return reactQuery.useMutation({
1742
+ mutationFn: async (conversationId) => {
1743
+ const client = getApiClient();
1744
+ await client.put(`/conversations/${conversationId}/read`);
1745
+ },
1746
+ onSuccess: (_, conversationId) => {
1747
+ queryClient.invalidateQueries({
1748
+ queryKey: conversationKeys.detail(conversationId)
1749
+ });
1750
+ queryClient.invalidateQueries({ queryKey: conversationKeys.lists() });
1751
+ },
1752
+ ...options
1753
+ });
1754
+ }
1755
+ function useSendTypingIndicator(options) {
1756
+ return reactQuery.useMutation({
1757
+ mutationFn: async (conversationId) => {
1758
+ const client = getApiClient();
1759
+ await client.post(`/conversations/${conversationId}/typing`);
1760
+ },
1761
+ ...options
1762
+ });
1763
+ }
1764
+ function useCreateClub(options) {
1765
+ const queryClient = reactQuery.useQueryClient();
1766
+ return reactQuery.useMutation({
1767
+ mutationFn: async (data) => {
1768
+ const client = getApiClient();
1769
+ const response = await client.post("/clubs", data);
1770
+ return response.data.data;
1771
+ },
1772
+ onSuccess: (_, variables) => {
1773
+ queryClient.invalidateQueries({
1774
+ queryKey: clubKeys.bySpot(variables.spotId)
1775
+ });
1776
+ },
1777
+ ...options
1778
+ });
1779
+ }
1780
+ function useUpdateClub(options) {
1781
+ const queryClient = reactQuery.useQueryClient();
1782
+ return reactQuery.useMutation({
1783
+ mutationFn: async ({ clubId, ...data }) => {
1784
+ const client = getApiClient();
1785
+ const response = await client.put(
1786
+ `/clubs/${clubId}`,
1787
+ data
1788
+ );
1789
+ return response.data.data;
1790
+ },
1791
+ onSuccess: (data, variables) => {
1792
+ queryClient.setQueryData(clubKeys.detail(variables.clubId), data);
1793
+ },
1794
+ ...options
1795
+ });
1796
+ }
1797
+ function useJoinClub(options) {
1798
+ const queryClient = reactQuery.useQueryClient();
1799
+ return reactQuery.useMutation({
1800
+ mutationFn: async (clubId) => {
1801
+ const client = getApiClient();
1802
+ await client.post(`/clubs/${clubId}/join`);
1803
+ },
1804
+ onSuccess: (_, clubId) => {
1805
+ queryClient.invalidateQueries({ queryKey: clubKeys.detail(clubId) });
1806
+ queryClient.invalidateQueries({ queryKey: userKeys.clubs() });
1807
+ },
1808
+ ...options
1809
+ });
1810
+ }
1811
+ function useLeaveClub(options) {
1812
+ const queryClient = reactQuery.useQueryClient();
1813
+ return reactQuery.useMutation({
1814
+ mutationFn: async (clubId) => {
1815
+ const client = getApiClient();
1816
+ await client.post(`/clubs/${clubId}/leave`);
1817
+ },
1818
+ onSuccess: (_, clubId) => {
1819
+ queryClient.invalidateQueries({ queryKey: clubKeys.detail(clubId) });
1820
+ queryClient.invalidateQueries({ queryKey: userKeys.clubs() });
1821
+ },
1822
+ ...options
1823
+ });
1824
+ }
1825
+ function useMarkNotificationsRead(options) {
1826
+ const queryClient = reactQuery.useQueryClient();
1827
+ return reactQuery.useMutation({
1828
+ mutationFn: async (data) => {
1829
+ const client = getApiClient();
1830
+ await client.put("/notifications/read", data);
1831
+ },
1832
+ onSuccess: () => {
1833
+ queryClient.invalidateQueries({ queryKey: notificationKeys.lists() });
1834
+ queryClient.invalidateQueries({ queryKey: notificationKeys.unreadCount() });
1835
+ },
1836
+ ...options
1837
+ });
1838
+ }
1839
+ function useRegisterDeviceToken(options) {
1840
+ return reactQuery.useMutation({
1841
+ mutationFn: async (data) => {
1842
+ const client = getApiClient();
1843
+ await client.post("/device-tokens", data);
1844
+ },
1845
+ ...options
1846
+ });
1847
+ }
1848
+ function useRemoveDeviceToken(options) {
1849
+ return reactQuery.useMutation({
1850
+ mutationFn: async (data) => {
1851
+ const client = getApiClient();
1852
+ await client.delete("/device-tokens", { data });
1853
+ },
1854
+ ...options
1855
+ });
1856
+ }
1857
+ function generateSlug(name) {
1858
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 100);
1859
+ }
1860
+ function useCreateProduct(options) {
1861
+ const queryClient = reactQuery.useQueryClient();
1862
+ return reactQuery.useMutation({
1863
+ mutationFn: async (data) => {
1864
+ const client = getApiClient();
1865
+ const { spotId, slug, ...productData } = data;
1866
+ const productSlug = slug || generateSlug(productData.name);
1867
+ const response = await client.post(
1868
+ `/spots/${spotId}/products`,
1869
+ { ...productData, slug: productSlug }
1870
+ );
1871
+ return response.data.data;
1872
+ },
1873
+ onSuccess: (_, variables) => {
1874
+ queryClient.invalidateQueries({ queryKey: productKeys.bySpot(variables.spotId) });
1875
+ queryClient.invalidateQueries({ queryKey: productKeys.list({ my: true }) });
1876
+ },
1877
+ ...options
1878
+ });
1879
+ }
1880
+ function useUpdateProduct(options) {
1881
+ const queryClient = reactQuery.useQueryClient();
1882
+ return reactQuery.useMutation({
1883
+ mutationFn: async ({ productId, data }) => {
1884
+ const client = getApiClient();
1885
+ const response = await client.put(
1886
+ `/products/${productId}`,
1887
+ data
1888
+ );
1889
+ return response.data.data;
1890
+ },
1891
+ onSuccess: (data) => {
1892
+ queryClient.setQueryData(productKeys.detail(data.id), data);
1893
+ queryClient.invalidateQueries({ queryKey: productKeys.bySpot(data.spotId) });
1894
+ queryClient.invalidateQueries({ queryKey: productKeys.list({ my: true }) });
1895
+ },
1896
+ ...options
1897
+ });
1898
+ }
1899
+ function useDeleteProduct(options) {
1900
+ const queryClient = reactQuery.useQueryClient();
1901
+ return reactQuery.useMutation({
1902
+ mutationFn: async (productId) => {
1903
+ const client = getApiClient();
1904
+ await client.delete(`/products/${productId}`);
1905
+ },
1906
+ onSuccess: () => {
1907
+ queryClient.invalidateQueries({ queryKey: productKeys.all });
1908
+ },
1909
+ ...options
1910
+ });
1911
+ }
1912
+ function useAdjustStock(options) {
1913
+ const queryClient = reactQuery.useQueryClient();
1914
+ return reactQuery.useMutation({
1915
+ mutationFn: async ({ productId, quantity, reason, notes }) => {
1916
+ const client = getApiClient();
1917
+ const response = await client.post(
1918
+ `/products/${productId}/stock`,
1919
+ { quantity, reason, notes }
1920
+ );
1921
+ return response.data.data;
1922
+ },
1923
+ onSuccess: (data) => {
1924
+ queryClient.setQueryData(productKeys.detail(data.id), data);
1925
+ queryClient.invalidateQueries({ queryKey: productKeys.bySpot(data.spotId) });
1926
+ },
1927
+ ...options
1928
+ });
1929
+ }
1930
+ function useCreateOrder(options) {
1931
+ const queryClient = reactQuery.useQueryClient();
1932
+ return reactQuery.useMutation({
1933
+ mutationFn: async (data) => {
1934
+ const client = getApiClient();
1935
+ const response = await client.post(
1936
+ "/orders",
1937
+ data
1938
+ );
1939
+ return response.data.data;
1940
+ },
1941
+ onSuccess: (_, variables) => {
1942
+ queryClient.invalidateQueries({ queryKey: productKeys.bySpot(variables.spotId) });
1943
+ queryClient.invalidateQueries({ queryKey: orderKeys.list({ my: true }) });
1944
+ },
1945
+ ...options
1946
+ });
1947
+ }
1948
+ function useCreateStripeIntent(options) {
1949
+ return reactQuery.useMutation({
1950
+ mutationFn: async (orderId) => {
1951
+ const client = getApiClient();
1952
+ const response = await client.post(
1953
+ `/payments/stripe/intent/${orderId}`
1954
+ );
1955
+ return response.data.data;
1956
+ },
1957
+ ...options
1958
+ });
1959
+ }
1960
+ function useCreateCoinbaseCharge(options) {
1961
+ return reactQuery.useMutation({
1962
+ mutationFn: async (orderId) => {
1963
+ const client = getApiClient();
1964
+ const response = await client.post(
1965
+ `/payments/coinbase/charge/${orderId}`
1966
+ );
1967
+ return response.data.data;
1968
+ },
1969
+ ...options
1970
+ });
1971
+ }
1972
+ function useUpdateOrderStatus(options) {
1973
+ const queryClient = reactQuery.useQueryClient();
1974
+ return reactQuery.useMutation({
1975
+ mutationFn: async ({ orderId, status }) => {
1976
+ const client = getApiClient();
1977
+ const response = await client.put(
1978
+ `/orders/${orderId}/status`,
1979
+ { status }
1980
+ );
1981
+ return response.data.data;
1982
+ },
1983
+ onSuccess: (data) => {
1984
+ queryClient.setQueryData(orderKeys.detail(data.id), data);
1985
+ queryClient.invalidateQueries({ queryKey: orderKeys.spotOrders(data.spotId) });
1986
+ },
1987
+ ...options
1988
+ });
1989
+ }
1990
+ function useCancelOrder(options) {
1991
+ const queryClient = reactQuery.useQueryClient();
1992
+ return reactQuery.useMutation({
1993
+ mutationFn: async (orderId) => {
1994
+ const client = getApiClient();
1995
+ const response = await client.post(
1996
+ `/orders/${orderId}/cancel`
1997
+ );
1998
+ return response.data.data;
1999
+ },
2000
+ onSuccess: (data) => {
2001
+ queryClient.setQueryData(orderKeys.detail(data.id), data);
2002
+ queryClient.invalidateQueries({ queryKey: orderKeys.list({ my: true }) });
2003
+ queryClient.invalidateQueries({ queryKey: productKeys.bySpot(data.spotId) });
2004
+ },
2005
+ ...options
2006
+ });
2007
+ }
2008
+ function useRedeem() {
2009
+ const queryClient = reactQuery.useQueryClient();
2010
+ return reactQuery.useMutation({
2011
+ mutationFn: async (request) => {
2012
+ const client = getApiClient();
2013
+ const response = await client.post("/redemptions/redeem", request);
2014
+ return response.data.data;
2015
+ },
2016
+ onSuccess: (_data, variables) => {
2017
+ queryClient.invalidateQueries({
2018
+ queryKey: walletKeys.lookup(variables.qrCode)
2019
+ });
2020
+ if (variables.spotId) {
2021
+ queryClient.invalidateQueries({
2022
+ queryKey: walletKeys.spotRedemptions(variables.spotId)
2023
+ });
2024
+ }
2025
+ }
2026
+ });
2027
+ }
2028
+ function useVoidRedemption() {
2029
+ const queryClient = reactQuery.useQueryClient();
2030
+ return reactQuery.useMutation({
2031
+ mutationFn: async ({
2032
+ redemptionId,
2033
+ reason
2034
+ }) => {
2035
+ const client = getApiClient();
2036
+ const response = await client.put(`/redemptions/${redemptionId}/void`, { reason });
2037
+ return response.data.data;
2038
+ },
2039
+ onSuccess: () => {
2040
+ queryClient.invalidateQueries({ queryKey: walletKeys.all });
2041
+ queryClient.invalidateQueries({ queryKey: walletKeys.redemptions() });
2042
+ }
2043
+ });
2044
+ }
2045
+
2046
+ exports.clubKeys = clubKeys;
2047
+ exports.configureSDK = configureSDK;
2048
+ exports.conversationKeys = conversationKeys;
2049
+ exports.getApiClient = getApiClient;
2050
+ exports.getConfig = getConfig;
2051
+ exports.miscKeys = miscKeys;
2052
+ exports.notificationKeys = notificationKeys;
2053
+ exports.orderKeys = orderKeys;
2054
+ exports.paymentKeys = paymentKeys;
2055
+ exports.postKeys = postKeys;
2056
+ exports.productKeys = productKeys;
2057
+ exports.spotKeys = spotKeys;
2058
+ exports.templateKeys = templateKeys;
2059
+ exports.useAdjustStock = useAdjustStock;
2060
+ exports.useBlockUser = useBlockUser;
2061
+ exports.useBlockedUsers = useBlockedUsers;
2062
+ exports.useCancelOrder = useCancelOrder;
2063
+ exports.useCities = useCities;
2064
+ exports.useClaimSpot = useClaimSpot;
2065
+ exports.useClub = useClub;
2066
+ exports.useClubBySlug = useClubBySlug;
2067
+ exports.useClubMembership = useClubMembership;
2068
+ exports.useClubsBySpot = useClubsBySpot;
2069
+ exports.useClubsByUser = useClubsByUser;
2070
+ exports.useCompleteOnboardingStep = useCompleteOnboardingStep;
2071
+ exports.useConversation = useConversation;
2072
+ exports.useConversationMessages = useConversationMessages;
2073
+ exports.useConversations = useConversations;
2074
+ exports.useCreateClub = useCreateClub;
2075
+ exports.useCreateCoinbaseCharge = useCreateCoinbaseCharge;
2076
+ exports.useCreateConversation = useCreateConversation;
2077
+ exports.useCreateDirectConversation = useCreateDirectConversation;
2078
+ exports.useCreateOrder = useCreateOrder;
2079
+ exports.useCreatePost = useCreatePost;
2080
+ exports.useCreateProduct = useCreateProduct;
2081
+ exports.useCreateReply = useCreateReply;
2082
+ exports.useCreateSpot = useCreateSpot;
2083
+ exports.useCreateStripeIntent = useCreateStripeIntent;
2084
+ exports.useCurrentUser = useCurrentUser;
2085
+ exports.useDeleteAccount = useDeleteAccount;
2086
+ exports.useDeletePost = useDeletePost;
2087
+ exports.useDeleteProduct = useDeleteProduct;
2088
+ exports.useDeleteReply = useDeleteReply;
2089
+ exports.useFavoriteSpot = useFavoriteSpot;
2090
+ exports.useFulfillPost = useFulfillPost;
2091
+ exports.useInfiniteSpots = useInfiniteSpots;
2092
+ exports.useJoinClub = useJoinClub;
2093
+ exports.useLeaveClub = useLeaveClub;
2094
+ exports.useLifeSituations = useLifeSituations;
2095
+ exports.useMarkConversationAsRead = useMarkConversationAsRead;
2096
+ exports.useMarkNotificationsRead = useMarkNotificationsRead;
2097
+ exports.useMyOrders = useMyOrders;
2098
+ exports.useNotifications = useNotifications;
2099
+ exports.useOrder = useOrder;
2100
+ exports.useOwnedSpots = useOwnedSpots;
2101
+ exports.usePaymentConfig = usePaymentConfig;
2102
+ exports.usePost = usePost;
2103
+ exports.usePostResponses = usePostResponses;
2104
+ exports.usePostStatus = usePostStatus;
2105
+ exports.usePostUpvotes = usePostUpvotes;
2106
+ exports.usePosts = usePosts;
2107
+ exports.usePostsFeed = usePostsFeed;
2108
+ exports.useProduct = useProduct;
2109
+ exports.useProductBySlug = useProductBySlug;
2110
+ exports.useRateSpot = useRateSpot;
2111
+ exports.useRedeem = useRedeem;
2112
+ exports.useRedemptionLookup = useRedemptionLookup;
2113
+ exports.useRefreshToken = useRefreshToken;
2114
+ exports.useRegisterDeviceToken = useRegisterDeviceToken;
2115
+ exports.useRemoveDeviceToken = useRemoveDeviceToken;
2116
+ exports.useReportPost = useReportPost;
2117
+ exports.useReportSpot = useReportSpot;
2118
+ exports.useRespondToPost = useRespondToPost;
2119
+ exports.useSendMessage = useSendMessage;
2120
+ exports.useSendOtp = useSendOtp;
2121
+ exports.useSendTypingIndicator = useSendTypingIndicator;
2122
+ exports.useSpot = useSpot;
2123
+ exports.useSpotByQR = useSpotByQR;
2124
+ exports.useSpotBySlug = useSpotBySlug;
2125
+ exports.useSpotFavoriteStatus = useSpotFavoriteStatus;
2126
+ exports.useSpotImages = useSpotImages;
2127
+ exports.useSpotOrders = useSpotOrders;
2128
+ exports.useSpotPosts = useSpotPosts;
2129
+ exports.useSpotProducts = useSpotProducts;
2130
+ exports.useSpotRedemptions = useSpotRedemptions;
2131
+ exports.useSpots = useSpots;
2132
+ exports.useSubscribeToSpot = useSubscribeToSpot;
2133
+ exports.useTemplate = useTemplate;
2134
+ exports.useTemplateBySlug = useTemplateBySlug;
2135
+ exports.useTemplates = useTemplates;
2136
+ exports.useUnblockUser = useUnblockUser;
2137
+ exports.useUnreadNotificationCount = useUnreadNotificationCount;
2138
+ exports.useUnsubscribeFromSpot = useUnsubscribeFromSpot;
2139
+ exports.useUpdateClub = useUpdateClub;
2140
+ exports.useUpdateInterests = useUpdateInterests;
2141
+ exports.useUpdateOrderStatus = useUpdateOrderStatus;
2142
+ exports.useUpdatePost = useUpdatePost;
2143
+ exports.useUpdatePostStatus = useUpdatePostStatus;
2144
+ exports.useUpdateProduct = useUpdateProduct;
2145
+ exports.useUpdateProfile = useUpdateProfile;
2146
+ exports.useUpdateResponse = useUpdateResponse;
2147
+ exports.useUpdateSpot = useUpdateSpot;
2148
+ exports.useUpdateVibes = useUpdateVibes;
2149
+ exports.useUploadAvatar = useUploadAvatar;
2150
+ exports.useUpvotePost = useUpvotePost;
2151
+ exports.useUserActivity = useUserActivity;
2152
+ exports.useUserClubs = useUserClubs;
2153
+ exports.useUserFavorites = useUserFavorites;
2154
+ exports.useUserPosts = useUserPosts;
2155
+ exports.useUserSpotsSummary = useUserSpotsSummary;
2156
+ exports.useUserStats = useUserStats;
2157
+ exports.useUserSubscriptions = useUserSubscriptions;
2158
+ exports.useVerifyOtp = useVerifyOtp;
2159
+ exports.useVibes = useVibes;
2160
+ exports.useVoidRedemption = useVoidRedemption;
2161
+ exports.useWallet = useWallet;
2162
+ exports.useWalletHistory = useWalletHistory;
2163
+ exports.userKeys = userKeys;
2164
+ exports.walletKeys = walletKeys;
2165
+ //# sourceMappingURL=index.cjs.map
2166
+ //# sourceMappingURL=index.cjs.map