@spotsdev/sdk 1.3.3 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/index.cjs +2139 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +1718 -0
  4. package/dist/index.d.ts +1717 -36
  5. package/dist/index.js +1996 -64
  6. package/dist/index.js.map +1 -0
  7. package/package.json +22 -6
  8. package/src/api/entities.ts +28 -84
  9. package/dist/api/client.d.ts +0 -12
  10. package/dist/api/client.js +0 -72
  11. package/dist/api/entities.d.ts +0 -326
  12. package/dist/api/entities.js +0 -9
  13. package/dist/api/mutations/clubs.d.ts +0 -47
  14. package/dist/api/mutations/clubs.js +0 -97
  15. package/dist/api/mutations/conversations.d.ts +0 -45
  16. package/dist/api/mutations/conversations.js +0 -114
  17. package/dist/api/mutations/index.d.ts +0 -14
  18. package/dist/api/mutations/index.js +0 -40
  19. package/dist/api/mutations/notifications.d.ts +0 -38
  20. package/dist/api/mutations/notifications.js +0 -64
  21. package/dist/api/mutations/orders.d.ts +0 -73
  22. package/dist/api/mutations/orders.js +0 -114
  23. package/dist/api/mutations/posts.d.ts +0 -123
  24. package/dist/api/mutations/posts.js +0 -242
  25. package/dist/api/mutations/products.d.ts +0 -81
  26. package/dist/api/mutations/products.js +0 -98
  27. package/dist/api/mutations/redemptions.d.ts +0 -33
  28. package/dist/api/mutations/redemptions.js +0 -63
  29. package/dist/api/mutations/spots.d.ts +0 -93
  30. package/dist/api/mutations/spots.js +0 -167
  31. package/dist/api/mutations/users.d.ts +0 -73
  32. package/dist/api/mutations/users.js +0 -175
  33. package/dist/api/queries/auth.d.ts +0 -37
  34. package/dist/api/queries/auth.js +0 -61
  35. package/dist/api/queries/clubs.d.ts +0 -52
  36. package/dist/api/queries/clubs.js +0 -116
  37. package/dist/api/queries/conversations.d.ts +0 -52
  38. package/dist/api/queries/conversations.js +0 -83
  39. package/dist/api/queries/index.d.ts +0 -28
  40. package/dist/api/queries/index.js +0 -69
  41. package/dist/api/queries/misc.d.ts +0 -30
  42. package/dist/api/queries/misc.js +0 -91
  43. package/dist/api/queries/notifications.d.ts +0 -34
  44. package/dist/api/queries/notifications.js +0 -62
  45. package/dist/api/queries/orders.d.ts +0 -45
  46. package/dist/api/queries/orders.js +0 -93
  47. package/dist/api/queries/posts.d.ts +0 -92
  48. package/dist/api/queries/posts.js +0 -233
  49. package/dist/api/queries/products.d.ts +0 -48
  50. package/dist/api/queries/products.js +0 -87
  51. package/dist/api/queries/spots.d.ts +0 -93
  52. package/dist/api/queries/spots.js +0 -250
  53. package/dist/api/queries/templates.d.ts +0 -39
  54. package/dist/api/queries/templates.js +0 -81
  55. package/dist/api/queries/users.d.ts +0 -104
  56. package/dist/api/queries/users.js +0 -235
  57. package/dist/api/queries/wallet.d.ts +0 -109
  58. package/dist/api/queries/wallet.js +0 -136
  59. package/dist/api/services/index.d.ts +0 -2
  60. package/dist/api/services/index.js +0 -8
  61. package/dist/api/services/marketplace.d.ts +0 -129
  62. package/dist/api/services/marketplace.js +0 -168
  63. package/dist/api/types.d.ts +0 -57
  64. package/dist/api/types.js +0 -33
@@ -1,233 +0,0 @@
1
- "use strict";
2
- /**
3
- * Posts Query Hooks
4
- *
5
- * TanStack Query hooks for post/board operations.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.postKeys = void 0;
9
- exports.useSpotPosts = useSpotPosts;
10
- exports.usePost = usePost;
11
- exports.usePostResponses = usePostResponses;
12
- exports.usePosts = usePosts;
13
- exports.usePostStatus = usePostStatus;
14
- exports.usePostUpvotes = usePostUpvotes;
15
- exports.usePostsFeed = usePostsFeed;
16
- const react_query_1 = require("@tanstack/react-query");
17
- const client_1 = require("../client");
18
- // ============================================================================
19
- // HELPER FUNCTIONS
20
- // ============================================================================
21
- /**
22
- * Extract array data from API response
23
- * API returns { success, data: { data: [...], meta: {...} } } or { success, data: [...] }
24
- */
25
- function extractArrayData(data) {
26
- // If already an array, return it
27
- if (Array.isArray(data)) {
28
- return data;
29
- }
30
- // If it's an object with nested data property, extract it
31
- if (data && typeof data === 'object' && 'data' in data) {
32
- const nested = data.data;
33
- if (Array.isArray(nested)) {
34
- return nested;
35
- }
36
- }
37
- return [];
38
- }
39
- /**
40
- * Extract single object data from API response
41
- * API returns { success, data: { data: {...} } } or { success, data: {...} }
42
- */
43
- function extractObjectData(data) {
44
- // If it's an object with nested data property (not an array), extract it
45
- if (data &&
46
- typeof data === 'object' &&
47
- 'data' in data &&
48
- !Array.isArray(data)) {
49
- const nested = data.data;
50
- // Check if nested also has a data property (double-wrapped)
51
- if (nested &&
52
- typeof nested === 'object' &&
53
- 'data' in nested &&
54
- !Array.isArray(nested)) {
55
- return nested.data;
56
- }
57
- return nested;
58
- }
59
- return data;
60
- }
61
- // ============================================================================
62
- // QUERY KEYS
63
- // ============================================================================
64
- exports.postKeys = {
65
- all: ['posts'],
66
- lists: () => [...exports.postKeys.all, 'list'],
67
- list: (filters) => [...exports.postKeys.lists(), filters],
68
- bySpot: (spotId, filters) => [...exports.postKeys.all, 'spot', spotId, filters],
69
- details: () => [...exports.postKeys.all, 'detail'],
70
- detail: (id) => [...exports.postKeys.details(), id],
71
- responses: (postId) => [...exports.postKeys.detail(postId), 'responses'],
72
- status: (postId) => [...exports.postKeys.detail(postId), 'status'],
73
- upvotes: (postId, filters) => [...exports.postKeys.detail(postId), 'upvotes', filters],
74
- };
75
- // ============================================================================
76
- // QUERY HOOKS
77
- // ============================================================================
78
- /**
79
- * Get posts for a spot
80
- *
81
- * @endpoint GET /spots/{spotId}/posts
82
- */
83
- function useSpotPosts(spotId, params, options) {
84
- return (0, react_query_1.useQuery)({
85
- queryKey: exports.postKeys.bySpot(spotId, params),
86
- queryFn: async () => {
87
- const client = (0, client_1.getApiClient)();
88
- const queryParams = new URLSearchParams();
89
- if (params?.postType)
90
- queryParams.set('postType', params.postType);
91
- if (params?.status)
92
- queryParams.set('status', params.status);
93
- if (params?.page)
94
- queryParams.set('page', String(params.page));
95
- if (params?.limit)
96
- queryParams.set('limit', String(params.limit));
97
- const response = await client.get(`/spots/${spotId}/posts?${queryParams}`);
98
- return extractArrayData(response.data.data);
99
- },
100
- enabled: !!spotId,
101
- ...options,
102
- });
103
- }
104
- /**
105
- * Get a single post by ID
106
- *
107
- * @endpoint GET /posts/{postId}
108
- */
109
- function usePost(postId, options) {
110
- return (0, react_query_1.useQuery)({
111
- queryKey: exports.postKeys.detail(postId),
112
- queryFn: async () => {
113
- const client = (0, client_1.getApiClient)();
114
- const response = await client.get(`/posts/${postId}`);
115
- return extractObjectData(response.data.data);
116
- },
117
- enabled: !!postId,
118
- ...options,
119
- });
120
- }
121
- /**
122
- * Get responses for a post
123
- *
124
- * @endpoint GET /posts/{postId}/responses
125
- */
126
- function usePostResponses(postId, options) {
127
- return (0, react_query_1.useQuery)({
128
- queryKey: exports.postKeys.responses(postId),
129
- queryFn: async () => {
130
- const client = (0, client_1.getApiClient)();
131
- const response = await client.get(`/posts/${postId}/responses`);
132
- return extractArrayData(response.data.data);
133
- },
134
- enabled: !!postId,
135
- ...options,
136
- });
137
- }
138
- /**
139
- * Get all posts (with filters)
140
- *
141
- * @endpoint GET /posts
142
- */
143
- function usePosts(params, options) {
144
- return (0, react_query_1.useQuery)({
145
- queryKey: exports.postKeys.list(params),
146
- queryFn: async () => {
147
- const client = (0, client_1.getApiClient)();
148
- const queryParams = new URLSearchParams();
149
- if (params?.postType)
150
- queryParams.set('postType', params.postType);
151
- if (params?.limit)
152
- queryParams.set('limit', String(params.limit));
153
- const response = await client.get(`/posts?${queryParams}`);
154
- return extractArrayData(response.data.data);
155
- },
156
- ...options,
157
- });
158
- }
159
- /**
160
- * Get user's status for a post (read/hidden/pinned)
161
- *
162
- * @endpoint GET /posts/{postId}/status
163
- */
164
- function usePostStatus(postId, options) {
165
- return (0, react_query_1.useQuery)({
166
- queryKey: exports.postKeys.status(postId),
167
- queryFn: async () => {
168
- const client = (0, client_1.getApiClient)();
169
- const response = await client.get(`/posts/${postId}/status`);
170
- return extractObjectData(response.data.data);
171
- },
172
- enabled: !!postId,
173
- ...options,
174
- });
175
- }
176
- /**
177
- * Get upvotes for a post (list of users who upvoted)
178
- *
179
- * @endpoint GET /posts/{postId}/upvotes
180
- */
181
- function usePostUpvotes(postId, params, options) {
182
- return (0, react_query_1.useQuery)({
183
- queryKey: exports.postKeys.upvotes(postId, params),
184
- queryFn: async () => {
185
- const client = (0, client_1.getApiClient)();
186
- const queryParams = new URLSearchParams();
187
- if (params?.limit)
188
- queryParams.set('limit', String(params.limit));
189
- if (params?.offset)
190
- queryParams.set('offset', String(params.offset));
191
- const queryString = queryParams.toString();
192
- const response = await client.get(`/posts/${postId}/upvotes${queryString ? `?${queryString}` : ''}`);
193
- // Response structure: { success, data: { data: [...], meta: {...} } }
194
- return response.data.data;
195
- },
196
- enabled: !!postId,
197
- ...options,
198
- });
199
- }
200
- /**
201
- * Get nearby posts feed
202
- *
203
- * @endpoint GET /posts/feed
204
- */
205
- function usePostsFeed(params, options) {
206
- return (0, react_query_1.useQuery)({
207
- queryKey: [...exports.postKeys.lists(), 'feed', params],
208
- queryFn: async () => {
209
- const client = (0, client_1.getApiClient)();
210
- const queryParams = new URLSearchParams();
211
- queryParams.set('lat', String(params.lat));
212
- queryParams.set('lng', String(params.lng));
213
- if (params.radius)
214
- queryParams.set('radius', String(params.radius));
215
- if (params.postType)
216
- queryParams.set('postType', params.postType);
217
- if (params.cursor)
218
- queryParams.set('cursor', params.cursor);
219
- if (params.limit)
220
- queryParams.set('limit', String(params.limit));
221
- const response = await client.get(`/posts/feed?${queryParams}`);
222
- const data = response.data.data;
223
- return {
224
- posts: data.posts ?? extractArrayData(data),
225
- hasMore: data.hasMore ?? false,
226
- nextCursor: data.nextCursor,
227
- };
228
- },
229
- enabled: params.lat !== 0 && params.lng !== 0,
230
- ...options,
231
- });
232
- }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcG9zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQWdHSCxvQ0FzQkM7QUFPRCwwQkFnQkM7QUFPRCw0Q0FnQkM7QUFPRCw0QkFrQkM7QUFPRCxzQ0FnQkM7QUFPRCx3Q0FzQkM7QUFPRCxvQ0E0Q0M7QUFsU0QsdURBSThCO0FBRTlCLHNDQUFzQztBQVN0QywrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFJLElBQWE7SUFDeEMsaUNBQWlDO0lBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNELDBEQUEwRDtJQUMxRCxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFJLElBQXdCLENBQUMsSUFBSSxDQUFBO1FBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFJLElBQWE7SUFDekMseUVBQXlFO0lBQ3pFLElBQ0UsSUFBSTtRQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsTUFBTSxJQUFJLElBQUk7UUFDZCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3BCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBSSxJQUF3QixDQUFDLElBQUksQ0FBQTtRQUM3Qyw0REFBNEQ7UUFDNUQsSUFDRSxNQUFN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Q0FFL0IsZUFBZSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1lBRS9CLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBQy9CLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQU8sSUFBSSxDQUFDO2dCQUNqRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUIsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvc3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHBvc3QvYm9hcmQgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQge1xuICB1c2VRdWVyeSxcbiAgdHlwZSBVc2VRdWVyeU9wdGlvbnMsXG4gIHR5cGUgVXNlUXVlcnlSZXN1bHQsXG59IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSdcblxuaW1wb3J0IHtnZXRBcGlDbGllbnR9IGZyb20gJy4uL2NsaWVudCdcbmltcG9ydCB7XG4gIHR5cGUgQXBpUmVzcG9uc2UsXG4gIHR5cGUgUG9zdCxcbiAgdHlwZSBQb3N0UmVzcG9uc2UsXG4gIHR5cGUgUG9zdFN0YXR1c0R0byxcbiAgdHlwZSBQb3N0VXB2b3Rlc1Jlc3BvbnNlLFxufSBmcm9tICcuLi90eXBlcydcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4dHJhY3QgYXJyYXkgZGF0YSBmcm9tIEFQSSByZXNwb25zZVxuICogQVBJIHJldHVybnMgeyBzdWNjZXNzLCBkYXRhOiB7IGRhdGE6IFsuLi5dLCBtZXRhOiB7Li4ufSB9IH0gb3IgeyBzdWNjZXNzLCBkYXRhOiBbLi4uXSB9XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RBcnJheURhdGE8VD4oZGF0YTogdW5rbm93bik6IFRbXSB7XG4gIC8vIElmIGFscmVhZHkgYW4gYXJyYXksIHJldHVybiBpdFxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH1cbiAgLy8gSWYgaXQncyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgZGF0YSBwcm9wZXJ0eSwgZXh0cmFjdCBpdFxuICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRhdGEpIHtcbiAgICBjb25zdCBuZXN0ZWQgPSAoZGF0YSBhcyB7ZGF0YTogdW5rbm93bn0pLmRhdGFcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXN0ZWQpKSB7XG4gICAgICByZXR1cm4gbmVzdGVkXG4gICAgfVxuICB9XG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIEV4dHJhY3Qgc2luZ2xlIG9iamVjdCBkYXRhIGZyb20gQVBJIHJlc3BvbnNlXG4gKiBBUEkgcmV0dXJucyB7IHN1Y2Nlc3MsIGRhdGE6IHsgZGF0YTogey4uLn0gfSB9IG9yIHsgc3VjY2VzcywgZGF0YTogey4uLn0gfVxuICovXG5mdW5jdGlvbiBleHRyYWN0T2JqZWN0RGF0YTxUPihkYXRhOiB1bmtub3duKTogVCB7XG4gIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggbmVzdGVkIGRhdGEgcHJvcGVydHkgKG5vdCBhbiBhcnJheSksIGV4dHJhY3QgaXRcbiAgaWYgKFxuICAgIGRhdGEgJiZcbiAgICB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAnZGF0YScgaW4gZGF0YSAmJlxuICAgICFBcnJheS5pc0FycmF5KGRhdGEpXG4gICkge1xuICAgIGNvbnN0IG5lc3RlZCA9IChkYXRhIGFzIHtkYXRhOiB1bmtub3dufSkuZGF0YVxuICAgIC8vIENoZWNrIGlmIG5lc3RlZCBhbHNvIGhhcyBhIGRhdGEgcHJvcGVydHkgKGRvdWJsZS13cmFwcGVkKVxuICAgIGlmIChcbiAgICAgIG5lc3RlZCAmJlxuICAgICAgdHlwZW9mIG5lc3RlZCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdkYXRhJyBpbiBuZXN0ZWQgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG5lc3RlZClcbiAgICApIHtcbiAgICAgIHJldHVybiAobmVzdGVkIGFzIHtkYXRhOiBUfSkuZGF0YVxuICAgIH1cbiAgICByZXR1cm4gbmVzdGVkIGFzIFRcbiAgfVxuICByZXR1cm4gZGF0YSBhcyBUXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHBvc3RLZXlzID0ge1xuICBhbGw6IFsncG9zdHMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5wb3N0S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+XG4gICAgWy4uLnBvc3RLZXlzLmxpc3RzKCksIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBieVNwb3Q6IChzcG90SWQ6IHN0cmluZywgZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PlxuICAgIFsuLi5wb3N0S2V5cy5hbGwsICdzcG90Jywgc3BvdElkLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLnBvc3RLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4ucG9zdEtleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIHJlc3BvbnNlczogKHBvc3RJZDogc3RyaW5nKSA9PlxuICAgIFsuLi5wb3N0S2V5cy5kZXRhaWwocG9zdElkKSwgJ3Jlc3BvbnNlcyddIGFzIGNvbnN0LFxuICBzdGF0dXM6IChwb3N0SWQ6IHN0cmluZykgPT4gWy4uLnBvc3RLZXlzLmRldGFpbChwb3N0SWQpLCAnc3RhdHVzJ10gYXMgY29uc3QsXG4gIHVwdm90ZXM6IChwb3N0SWQ6IHN0cmluZywgZmlsdGVycz86IHtsaW1pdD86IG51bWJlcjsgb2Zmc2V0PzogbnVtYmVyfSkgPT5cbiAgICBbLi4ucG9zdEtleXMuZGV0YWlsKHBvc3RJZCksICd1cHZvdGVzJywgZmlsdGVyc10gYXMgY29uc3QsXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHBvc3RzIGZvciBhIHNwb3RcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wb3N0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdFBvc3RzKFxuICBzcG90SWQ6IHN0cmluZyxcbiAgcGFyYW1zPzoge3Bvc3RUeXBlPzogc3RyaW5nOyBzdGF0dXM/OiBzdHJpbmc7IHBhZ2U/OiBudW1iZXI7IGxpbWl0PzogbnVtYmVyfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBvc3RbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmJ5U3BvdChzcG90SWQsIHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIGlmIChwYXJhbXM/LnBvc3RUeXBlKSBxdWVyeVBhcmFtcy5zZXQoJ3Bvc3RUeXBlJywgcGFyYW1zLnBvc3RUeXBlKVxuICAgICAgaWYgKHBhcmFtcz8uc3RhdHVzKSBxdWVyeVBhcmFtcy5zZXQoJ3N0YXR1cycsIHBhcmFtcy5zdGF0dXMpXG4gICAgICBpZiAocGFyYW1zPy5wYWdlKSBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFyYW1zLnBhZ2UpKVxuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx1bmtub3duPj4oXG4gICAgICAgIGAvc3BvdHMvJHtzcG90SWR9L3Bvc3RzPyR7cXVlcnlQYXJhbXN9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0QXJyYXlEYXRhPFBvc3Q+KHJlc3BvbnNlLmRhdGEuZGF0YSlcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIHBvc3QgYnkgSURcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy97cG9zdElkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUG9zdChcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQb3N0PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmRldGFpbChwb3N0SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBvc3Q+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8dW5rbm93bj4+KFxuICAgICAgICBgL3Bvc3RzLyR7cG9zdElkfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gZXh0cmFjdE9iamVjdERhdGE8UG9zdD4ocmVzcG9uc2UuZGF0YS5kYXRhKVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFwb3N0SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgcmVzcG9uc2VzIGZvciBhIHBvc3RcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy97cG9zdElkfS9yZXNwb25zZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RSZXNwb25zZXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFBvc3RSZXNwb25zZVtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLnJlc3BvbnNlcyhwb3N0SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBvc3RSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9wb3N0cy8ke3Bvc3RJZH0vcmVzcG9uc2VzYCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0QXJyYXlEYXRhPFBvc3RSZXNwb25zZT4ocmVzcG9uc2UuZGF0YS5kYXRhKVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFwb3N0SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHBvc3RzICh3aXRoIGZpbHRlcnMpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcG9zdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RzKFxuICBwYXJhbXM/OiB7cG9zdFR5cGU/OiBzdHJpbmc7IGxpbWl0PzogbnVtYmVyfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBvc3RbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQb3N0W10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgaWYgKHBhcmFtcz8ucG9zdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgncG9zdFR5cGUnLCBwYXJhbXMucG9zdFR5cGUpXG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9wb3N0cz8ke3F1ZXJ5UGFyYW1zfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gZXh0cmFjdEFycmF5RGF0YTxQb3N0PihyZXNwb25zZS5kYXRhLmRhdGEpXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCB1c2VyJ3Mgc3RhdHVzIGZvciBhIHBvc3QgKHJlYWQvaGlkZGVuL3Bpbm5lZClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy97cG9zdElkfS9zdGF0dXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RTdGF0dXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFN0YXR1c0R0bz4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFN0YXR1c0R0bz4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwb3N0S2V5cy5zdGF0dXMocG9zdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQb3N0U3RhdHVzRHRvPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9wb3N0cy8ke3Bvc3RJZH0vc3RhdHVzYCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0T2JqZWN0RGF0YTxQb3N0U3RhdHVzRHRvPihyZXNwb25zZS5kYXRhLmRhdGEpXG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXBvc3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCB1cHZvdGVzIGZvciBhIHBvc3QgKGxpc3Qgb2YgdXNlcnMgd2hvIHVwdm90ZWQpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcG9zdHMve3Bvc3RJZH0vdXB2b3Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUG9zdFVwdm90ZXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBwYXJhbXM/OiB7bGltaXQ/OiBudW1iZXI7IG9mZnNldD86IG51bWJlcn0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0VXB2b3Rlc1Jlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQb3N0VXB2b3Rlc1Jlc3BvbnNlPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLnVwdm90ZXMocG9zdElkLCBwYXJhbXMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBvc3RVcHZvdGVzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcbiAgICAgIGlmIChwYXJhbXM/Lm9mZnNldCkgcXVlcnlQYXJhbXMuc2V0KCdvZmZzZXQnLCBTdHJpbmcocGFyYW1zLm9mZnNldCkpXG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQb3N0VXB2b3Rlc1Jlc3BvbnNlPj4oXG4gICAgICAgIGAvcG9zdHMvJHtwb3N0SWR9L3Vwdm90ZXMke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gLFxuICAgICAgKVxuICAgICAgLy8gUmVzcG9uc2Ugc3RydWN0dXJlOiB7IHN1Y2Nlc3MsIGRhdGE6IHsgZGF0YTogWy4uLl0sIG1ldGE6IHsuLi59IH0gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFwb3N0SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgbmVhcmJ5IHBvc3RzIGZlZWRcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy9mZWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQb3N0c0ZlZWQoXG4gIHBhcmFtczoge1xuICAgIGxhdDogbnVtYmVyXG4gICAgbG5nOiBudW1iZXJcbiAgICByYWRpdXM/OiBudW1iZXJcbiAgICBwb3N0VHlwZT86IHN0cmluZ1xuICAgIGN1cnNvcj86IHN0cmluZ1xuICAgIGxpbWl0PzogbnVtYmVyXG4gIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZVF1ZXJ5T3B0aW9uczx7cG9zdHM6IFBvc3RbXTsgaGFzTW9yZTogYm9vbGVhbjsgbmV4dEN1cnNvcj86IHN0cmluZ30+LFxuICAgICdxdWVyeUtleScgfCAncXVlcnlGbidcbiAgPixcbik6IFVzZVF1ZXJ5UmVzdWx0PHtwb3N0czogUG9zdFtdOyBoYXNNb3JlOiBib29sZWFuOyBuZXh0Q3Vyc29yPzogc3RyaW5nfT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbLi4ucG9zdEtleXMubGlzdHMoKSwgJ2ZlZWQnLCBwYXJhbXNdIGFzIGNvbnN0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPHtcbiAgICAgIHBvc3RzOiBQb3N0W11cbiAgICAgIGhhc01vcmU6IGJvb2xlYW5cbiAgICAgIG5leHRDdXJzb3I/OiBzdHJpbmdcbiAgICB9PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnbGF0JywgU3RyaW5nKHBhcmFtcy5sYXQpKVxuICAgICAgcXVlcnlQYXJhbXMuc2V0KCdsbmcnLCBTdHJpbmcocGFyYW1zLmxuZykpXG4gICAgICBpZiAocGFyYW1zLnJhZGl1cykgcXVlcnlQYXJhbXMuc2V0KCdyYWRpdXMnLCBTdHJpbmcocGFyYW1zLnJhZGl1cykpXG4gICAgICBpZiAocGFyYW1zLnBvc3RUeXBlKSBxdWVyeVBhcmFtcy5zZXQoJ3Bvc3RUeXBlJywgcGFyYW1zLnBvc3RUeXBlKVxuICAgICAgaWYgKHBhcmFtcy5jdXJzb3IpIHF1ZXJ5UGFyYW1zLnNldCgnY3Vyc29yJywgcGFyYW1zLmN1cnNvcilcbiAgICAgIGlmIChwYXJhbXMubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFxuICAgICAgICBBcGlSZXNwb25zZTx7cG9zdHM6IFBvc3RbXTsgaGFzTW9yZTogYm9vbGVhbjsgbmV4dEN1cnNvcj86IHN0cmluZ30+XG4gICAgICA+KGAvcG9zdHMvZmVlZD8ke3F1ZXJ5UGFyYW1zfWApXG5cbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvc3RzOiBkYXRhLnBvc3RzID8/IGV4dHJhY3RBcnJheURhdGE8UG9zdD4oZGF0YSksXG4gICAgICAgIGhhc01vcmU6IGRhdGEuaGFzTW9yZSA/PyBmYWxzZSxcbiAgICAgICAgbmV4dEN1cnNvcjogZGF0YS5uZXh0Q3Vyc29yLFxuICAgICAgfVxuICAgIH0sXG4gICAgZW5hYmxlZDogcGFyYW1zLmxhdCAhPT0gMCAmJiBwYXJhbXMubG5nICE9PSAwLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG4iXX0=
@@ -1,48 +0,0 @@
1
- /**
2
- * Products Query Hooks
3
- *
4
- * TanStack Query hooks for product-related operations.
5
- */
6
- import { type UseQueryOptions, type UseQueryResult } from '@tanstack/react-query';
7
- import type { Product, PaginatedResponse, ProductType, ProductStatus, Spot } from '../types';
8
- export declare const productKeys: {
9
- all: readonly ["products"];
10
- lists: () => readonly ["products", "list"];
11
- list: (filters?: Record<string, unknown>) => readonly ["products", "list", Record<string, unknown> | undefined];
12
- details: () => readonly ["products", "detail"];
13
- detail: (id: string) => readonly ["products", "detail", string];
14
- bySlug: (spotId: string, slug: string) => readonly ["products", "slug", string, string];
15
- bySpot: (spotId: string) => readonly ["products", "spot", string];
16
- };
17
- export interface ProductFilters {
18
- spotId?: string;
19
- type?: ProductType;
20
- status?: ProductStatus;
21
- limit?: number;
22
- page?: number;
23
- }
24
- export interface ProductWithSpot extends Product {
25
- spot: Pick<Spot, 'id' | 'name' | 'slug'>;
26
- }
27
- /**
28
- * Get products for a spot (public browse)
29
- *
30
- * @endpoint GET /spots/{spotId}/products
31
- */
32
- export declare function useSpotProducts(spotId: string, params?: {
33
- type?: ProductType;
34
- limit?: number;
35
- page?: number;
36
- }, options?: Omit<UseQueryOptions<PaginatedResponse<Product>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<Product>>;
37
- /**
38
- * Get a product by ID
39
- *
40
- * @endpoint GET /products/{productId}
41
- */
42
- export declare function useProduct(productId: string, options?: Omit<UseQueryOptions<ProductWithSpot>, 'queryKey' | 'queryFn'>): UseQueryResult<ProductWithSpot>;
43
- /**
44
- * Get a product by slug (within a spot)
45
- *
46
- * @endpoint GET /spots/{spotId}/products/slug/{slug}
47
- */
48
- export declare function useProductBySlug(spotId: string, slug: string, options?: Omit<UseQueryOptions<ProductWithSpot>, 'queryKey' | 'queryFn'>): UseQueryResult<ProductWithSpot>;
@@ -1,87 +0,0 @@
1
- "use strict";
2
- /**
3
- * Products Query Hooks
4
- *
5
- * TanStack Query hooks for product-related operations.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.productKeys = void 0;
9
- exports.useSpotProducts = useSpotProducts;
10
- exports.useProduct = useProduct;
11
- exports.useProductBySlug = useProductBySlug;
12
- const react_query_1 = require("@tanstack/react-query");
13
- const client_1 = require("../client");
14
- // ============================================================================
15
- // QUERY KEYS
16
- // ============================================================================
17
- exports.productKeys = {
18
- all: ['products'],
19
- lists: () => [...exports.productKeys.all, 'list'],
20
- list: (filters) => [...exports.productKeys.lists(), filters],
21
- details: () => [...exports.productKeys.all, 'detail'],
22
- detail: (id) => [...exports.productKeys.details(), id],
23
- bySlug: (spotId, slug) => [...exports.productKeys.all, 'slug', spotId, slug],
24
- bySpot: (spotId) => [...exports.productKeys.all, 'spot', spotId],
25
- };
26
- // ============================================================================
27
- // QUERY HOOKS
28
- // ============================================================================
29
- /**
30
- * Get products for a spot (public browse)
31
- *
32
- * @endpoint GET /spots/{spotId}/products
33
- */
34
- function useSpotProducts(spotId, params, options) {
35
- return (0, react_query_1.useQuery)({
36
- queryKey: exports.productKeys.bySpot(spotId),
37
- queryFn: async () => {
38
- const client = (0, client_1.getApiClient)();
39
- const queryParams = new URLSearchParams();
40
- if (params?.limit)
41
- queryParams.set('limit', String(params.limit));
42
- if (params?.page)
43
- queryParams.set('page', String(params.page));
44
- if (params?.type)
45
- queryParams.set('type', params.type);
46
- const response = await client.get(`/spots/${spotId}/products?${queryParams}`);
47
- return response.data.data;
48
- },
49
- enabled: !!spotId,
50
- ...options,
51
- });
52
- }
53
- /**
54
- * Get a product by ID
55
- *
56
- * @endpoint GET /products/{productId}
57
- */
58
- function useProduct(productId, options) {
59
- return (0, react_query_1.useQuery)({
60
- queryKey: exports.productKeys.detail(productId),
61
- queryFn: async () => {
62
- const client = (0, client_1.getApiClient)();
63
- const response = await client.get(`/products/${productId}`);
64
- return response.data.data;
65
- },
66
- enabled: !!productId,
67
- ...options,
68
- });
69
- }
70
- /**
71
- * Get a product by slug (within a spot)
72
- *
73
- * @endpoint GET /spots/{spotId}/products/slug/{slug}
74
- */
75
- function useProductBySlug(spotId, slug, options) {
76
- return (0, react_query_1.useQuery)({
77
- queryKey: exports.productKeys.bySlug(spotId, slug),
78
- queryFn: async () => {
79
- const client = (0, client_1.getApiClient)();
80
- const response = await client.get(`/spots/${spotId}/products/slug/${slug}`);
81
- return response.data.data;
82
- },
83
- enabled: !!spotId && !!slug,
84
- ...options,
85
- });
86
- }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQXNESCwwQ0F3QkM7QUFPRCxnQ0FnQkM7QUFPRCw0Q0FpQkM7QUEzSEQsdURBQXlGO0FBQ3pGLHNDQUFzQztBQVV0QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLFdBQVcsR0FBRztJQUN6QixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQVU7SUFDMUIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQzFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUMvRCxNQUFNLEVBQUUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FDdkMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFVO0lBQ3JELE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVU7Q0FDMUUsQ0FBQTtBQWtCRCwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixNQUFjLEVBQ2QsTUFBNEQsRUFDNUQsT0FHQztJQUVELE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG1CQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxPQUFPLEVBQUUsS0FBSyxJQUF5QyxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7WUFDekMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDakUsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDOUQsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixVQUFVLE1BQU0sYUFBYSxXQUFXLEVBQUUsQ0FDM0MsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNqQixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsU0FBaUIsRUFDakIsT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxLQUFLLElBQThCLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixhQUFhLFNBQVMsRUFBRSxDQUN6QixDQUFBO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUMzQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3BCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE1BQWMsRUFDZCxJQUFZLEVBQ1osT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMxQyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxNQUFNLGtCQUFrQixJQUFJLEVBQUUsQ0FDekMsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJO1FBQzNCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb2R1Y3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHByb2R1Y3QtcmVsYXRlZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7dXNlUXVlcnksIHR5cGUgVXNlUXVlcnlPcHRpb25zLCB0eXBlIFVzZVF1ZXJ5UmVzdWx0fSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknXG5pbXBvcnQge2dldEFwaUNsaWVudH0gZnJvbSAnLi4vY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBQcm9kdWN0LFxuICBBcGlSZXNwb25zZSxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFByb2R1Y3RUeXBlLFxuICBQcm9kdWN0U3RhdHVzLFxuICBTcG90LFxufSBmcm9tICcuLi90eXBlcydcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgcHJvZHVjdEtleXMgPSB7XG4gIGFsbDogWydwcm9kdWN0cyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT5cbiAgICBbLi4ucHJvZHVjdEtleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLnByb2R1Y3RLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBieVNsdWc6IChzcG90SWQ6IHN0cmluZywgc2x1Zzogc3RyaW5nKSA9PlxuICAgIFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzbHVnJywgc3BvdElkLCBzbHVnXSBhcyBjb25zdCxcbiAgYnlTcG90OiAoc3BvdElkOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzcG90Jywgc3BvdElkXSBhcyBjb25zdCxcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0RmlsdGVycyB7XG4gIHNwb3RJZD86IHN0cmluZ1xuICB0eXBlPzogUHJvZHVjdFR5cGVcbiAgc3RhdHVzPzogUHJvZHVjdFN0YXR1c1xuICBsaW1pdD86IG51bWJlclxuICBwYWdlPzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFdpdGhTcG90IGV4dGVuZHMgUHJvZHVjdCB7XG4gIHNwb3Q6IFBpY2s8U3BvdCwgJ2lkJyB8ICduYW1lJyB8ICdzbHVnJz5cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgcHJvZHVjdHMgZm9yIGEgc3BvdCAocHVibGljIGJyb3dzZSlcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wcm9kdWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdFByb2R1Y3RzKFxuICBzcG90SWQ6IHN0cmluZyxcbiAgcGFyYW1zPzoge3R5cGU/OiBQcm9kdWN0VHlwZTsgbGltaXQ/OiBudW1iZXI7IHBhZ2U/OiBudW1iZXJ9LFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUmVzcG9uc2U8UHJvZHVjdD4+LFxuICAgICdxdWVyeUtleScgfCAncXVlcnlGbidcbiAgPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U3BvdChzcG90SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIGlmIChwYXJhbXM/LmxpbWl0KSBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKHBhcmFtcy5saW1pdCkpXG4gICAgICBpZiAocGFyYW1zPy5wYWdlKSBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFyYW1zLnBhZ2UpKVxuICAgICAgaWYgKHBhcmFtcz8udHlwZSkgcXVlcnlQYXJhbXMuc2V0KCd0eXBlJywgcGFyYW1zLnR5cGUpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UGFnaW5hdGVkUmVzcG9uc2U8UHJvZHVjdD4+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHM/JHtxdWVyeVBhcmFtc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFzcG90SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgYSBwcm9kdWN0IGJ5IElEXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcHJvZHVjdHMve3Byb2R1Y3RJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3QoXG4gIHByb2R1Y3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UHJvZHVjdFdpdGhTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQcm9kdWN0V2l0aFNwb3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UHJvZHVjdFdpdGhTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFByb2R1Y3RXaXRoU3BvdD4+KFxuICAgICAgICBgL3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhXG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXByb2R1Y3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCBhIHByb2R1Y3QgYnkgc2x1ZyAod2l0aGluIGEgc3BvdClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wcm9kdWN0cy9zbHVnL3tzbHVnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdEJ5U2x1ZyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFByb2R1Y3RXaXRoU3BvdD4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UHJvZHVjdFdpdGhTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U2x1ZyhzcG90SWQsIHNsdWcpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RXaXRoU3BvdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQcm9kdWN0V2l0aFNwb3Q+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHMvc2x1Zy8ke3NsdWd9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGFcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkICYmICEhc2x1ZyxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuIl19
@@ -1,93 +0,0 @@
1
- /**
2
- * Spots Query Hooks
3
- *
4
- * TanStack Query hooks for spot-related operations.
5
- */
6
- import { type UseQueryOptions, type UseQueryResult, type UseInfiniteQueryOptions, type UseInfiniteQueryResult } from '@tanstack/react-query';
7
- import { type PaginatedResponse, type Spot, type SpotImage } from '../types';
8
- export declare const spotKeys: {
9
- all: readonly ["spots"];
10
- lists: () => readonly ["spots", "list"];
11
- list: (filters?: Record<string, unknown>) => readonly ["spots", "list", Record<string, unknown> | undefined];
12
- details: () => readonly ["spots", "detail"];
13
- detail: (id: string) => readonly ["spots", "detail", string];
14
- bySlug: (slug: string) => readonly ["spots", "slug", string];
15
- byQR: (qrCode: string) => readonly ["spots", "qr", string];
16
- images: (spotId: string) => readonly ["spots", "detail", string, "images"];
17
- };
18
- /**
19
- * Get all spots
20
- *
21
- * @endpoint GET /spots
22
- */
23
- export declare function useSpots(params?: {
24
- limit?: number;
25
- city?: string;
26
- type?: string;
27
- lat?: number;
28
- lng?: number;
29
- radius?: number;
30
- search?: string;
31
- vibes?: string;
32
- cityId?: string;
33
- page?: number;
34
- }, options?: Omit<UseQueryOptions<Spot[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot[]>;
35
- /**
36
- * Get a spot by ID
37
- *
38
- * @endpoint GET /spots/{spotId}
39
- */
40
- export declare function useSpot(spotId: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
41
- /**
42
- * Get a spot by slug
43
- *
44
- * @endpoint GET /spots/slug/{slug}
45
- */
46
- export declare function useSpotBySlug(slug: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
47
- /**
48
- * Get a spot by QR code
49
- *
50
- * @endpoint GET /spots/qr/{qrCode}
51
- */
52
- export declare function useSpotByQR(qrCode: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
53
- /**
54
- * Get images for a spot
55
- *
56
- * @endpoint GET /spots/{spotId}/images
57
- */
58
- export declare function useSpotImages(spotId: string, options?: Omit<UseQueryOptions<SpotImage[]>, 'queryKey' | 'queryFn'>): UseQueryResult<SpotImage[]>;
59
- /**
60
- * Check if a spot is favorited by the current user
61
- *
62
- * @endpoint GET /spots/{spotId}/favorite
63
- */
64
- export declare function useSpotFavoriteStatus(spotId: string, options?: Omit<UseQueryOptions<{
65
- isFavorite: boolean;
66
- }>, 'queryKey' | 'queryFn'>): UseQueryResult<{
67
- isFavorite: boolean;
68
- }>;
69
- /**
70
- * Params for infinite spots query
71
- */
72
- export interface InfiniteSpotsParams {
73
- limit?: number;
74
- city?: string;
75
- cityId?: string;
76
- type?: string;
77
- templateSlugs?: string[];
78
- vibeIds?: string[];
79
- search?: string;
80
- }
81
- /**
82
- * Infinite scroll query for spots
83
- *
84
- * @endpoint GET /spots (paginated)
85
- * @returns Infinite query with pages of spots
86
- */
87
- export declare function useInfiniteSpots(params?: InfiniteSpotsParams, options?: Omit<UseInfiniteQueryOptions<PaginatedResponse<Spot>, Error, {
88
- pages: PaginatedResponse<Spot>[];
89
- pageParams: number[];
90
- }>, 'queryKey' | 'queryFn' | 'getNextPageParam' | 'initialPageParam'>): UseInfiniteQueryResult<{
91
- pages: PaginatedResponse<Spot>[];
92
- pageParams: number[];
93
- }, Error>;