@spotsdev/sdk 1.0.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 (79) hide show
  1. package/dist/api/client.d.ts +12 -0
  2. package/dist/api/client.js +68 -0
  3. package/dist/api/mutations/clubs.d.ts +47 -0
  4. package/dist/api/mutations/clubs.js +95 -0
  5. package/dist/api/mutations/conversations.d.ts +45 -0
  6. package/dist/api/mutations/conversations.js +110 -0
  7. package/dist/api/mutations/index.d.ts +13 -0
  8. package/dist/api/mutations/index.js +38 -0
  9. package/dist/api/mutations/notifications.d.ts +38 -0
  10. package/dist/api/mutations/notifications.js +64 -0
  11. package/dist/api/mutations/orders.d.ts +73 -0
  12. package/dist/api/mutations/orders.js +116 -0
  13. package/dist/api/mutations/posts.d.ts +123 -0
  14. package/dist/api/mutations/posts.js +229 -0
  15. package/dist/api/mutations/products.d.ts +81 -0
  16. package/dist/api/mutations/products.js +102 -0
  17. package/dist/api/mutations/spots.d.ts +59 -0
  18. package/dist/api/mutations/spots.js +129 -0
  19. package/dist/api/mutations/users.d.ts +71 -0
  20. package/dist/api/mutations/users.js +173 -0
  21. package/dist/api/queries/auth.d.ts +37 -0
  22. package/dist/api/queries/auth.js +61 -0
  23. package/dist/api/queries/clubs.d.ts +52 -0
  24. package/dist/api/queries/clubs.js +116 -0
  25. package/dist/api/queries/conversations.d.ts +52 -0
  26. package/dist/api/queries/conversations.js +83 -0
  27. package/dist/api/queries/index.d.ts +26 -0
  28. package/dist/api/queries/index.js +65 -0
  29. package/dist/api/queries/misc.d.ts +54 -0
  30. package/dist/api/queries/misc.js +129 -0
  31. package/dist/api/queries/notifications.d.ts +34 -0
  32. package/dist/api/queries/notifications.js +62 -0
  33. package/dist/api/queries/orders.d.ts +45 -0
  34. package/dist/api/queries/orders.js +93 -0
  35. package/dist/api/queries/posts.d.ts +55 -0
  36. package/dist/api/queries/posts.js +130 -0
  37. package/dist/api/queries/products.d.ts +52 -0
  38. package/dist/api/queries/products.js +89 -0
  39. package/dist/api/queries/spots.d.ts +78 -0
  40. package/dist/api/queries/spots.js +168 -0
  41. package/dist/api/queries/templates.d.ts +42 -0
  42. package/dist/api/queries/templates.js +86 -0
  43. package/dist/api/queries/users.d.ts +90 -0
  44. package/dist/api/queries/users.js +187 -0
  45. package/dist/api/services/index.d.ts +2 -0
  46. package/dist/api/services/index.js +8 -0
  47. package/dist/api/services/marketplace.d.ts +129 -0
  48. package/dist/api/services/marketplace.js +168 -0
  49. package/dist/api/types.d.ts +54 -0
  50. package/dist/api/types.js +34 -0
  51. package/dist/index.d.ts +38 -0
  52. package/dist/index.js +73 -0
  53. package/package.json +57 -0
  54. package/src/api/client.ts +78 -0
  55. package/src/api/mutations/clubs.ts +107 -0
  56. package/src/api/mutations/conversations.ts +124 -0
  57. package/src/api/mutations/index.ts +29 -0
  58. package/src/api/mutations/notifications.ts +70 -0
  59. package/src/api/mutations/orders.ts +174 -0
  60. package/src/api/mutations/posts.ts +278 -0
  61. package/src/api/mutations/products.ts +160 -0
  62. package/src/api/mutations/spots.ts +146 -0
  63. package/src/api/mutations/users.ts +197 -0
  64. package/src/api/queries/auth.ts +67 -0
  65. package/src/api/queries/clubs.ts +135 -0
  66. package/src/api/queries/conversations.ts +94 -0
  67. package/src/api/queries/index.ts +48 -0
  68. package/src/api/queries/misc.ts +140 -0
  69. package/src/api/queries/notifications.ts +66 -0
  70. package/src/api/queries/orders.ts +119 -0
  71. package/src/api/queries/posts.ts +142 -0
  72. package/src/api/queries/products.ts +123 -0
  73. package/src/api/queries/spots.ts +201 -0
  74. package/src/api/queries/templates.ts +95 -0
  75. package/src/api/queries/users.ts +206 -0
  76. package/src/api/services/index.ts +6 -0
  77. package/src/api/services/marketplace.ts +265 -0
  78. package/src/api/types.ts +144 -0
  79. package/src/index.ts +63 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Misc Query Hooks
4
+ *
5
+ * TanStack Query hooks for cities, vibes, and other reference data.
6
+ * All types come from @prisma/client (via ../types re-export).
7
+ *
8
+ * API Response Patterns:
9
+ * - Reference data (vibes, templates, interests): { success, data: T[], timestamp }
10
+ * - Large datasets (cities, spots, posts): { success, data: { data: T[], meta }, timestamp }
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.miscKeys = void 0;
14
+ exports.useCities = useCities;
15
+ exports.useVibes = useVibes;
16
+ exports.useLifeSituations = useLifeSituations;
17
+ exports.useInterests = useInterests;
18
+ exports.useIntentions = useIntentions;
19
+ const react_query_1 = require("@tanstack/react-query");
20
+ const client_1 = require("../client");
21
+ // ============================================================================
22
+ // QUERY KEYS
23
+ // ============================================================================
24
+ exports.miscKeys = {
25
+ cities: () => ['cities'],
26
+ vibes: () => ['vibes'],
27
+ lifeSituations: () => ['life-situations'],
28
+ interests: () => ['interests'],
29
+ intentions: () => ['intentions'],
30
+ };
31
+ // ============================================================================
32
+ // QUERY HOOKS
33
+ // ============================================================================
34
+ /**
35
+ * Get all cities (paginated endpoint)
36
+ *
37
+ * @endpoint GET /api/v1/cities
38
+ * @returns PaginatedResponse with cities array
39
+ */
40
+ function useCities(options) {
41
+ return (0, react_query_1.useQuery)({
42
+ queryKey: exports.miscKeys.cities(),
43
+ queryFn: async () => {
44
+ const client = (0, client_1.getApiClient)();
45
+ const response = await client.get('/api/v1/cities');
46
+ // Cities endpoint returns paginated format: { data: { data: [], meta: {} } }
47
+ return response.data.data.data;
48
+ },
49
+ staleTime: 1000 * 60 * 60,
50
+ ...options,
51
+ });
52
+ }
53
+ /**
54
+ * Get all vibes (flat array - reference data)
55
+ *
56
+ * @endpoint GET /api/v1/vibes
57
+ * @returns Flat array of vibes (not paginated)
58
+ */
59
+ function useVibes(options) {
60
+ return (0, react_query_1.useQuery)({
61
+ queryKey: exports.miscKeys.vibes(),
62
+ queryFn: async () => {
63
+ const client = (0, client_1.getApiClient)();
64
+ const response = await client.get('/api/v1/vibes');
65
+ // Vibes endpoint returns flat array: { data: [] }
66
+ return response.data.data;
67
+ },
68
+ staleTime: 1000 * 60 * 60,
69
+ ...options,
70
+ });
71
+ }
72
+ /**
73
+ * Get all life situations (flat array - reference data for onboarding)
74
+ *
75
+ * @endpoint GET /api/v1/life-situations
76
+ * @returns Flat array of life situations (not paginated)
77
+ */
78
+ function useLifeSituations(options) {
79
+ return (0, react_query_1.useQuery)({
80
+ queryKey: exports.miscKeys.lifeSituations(),
81
+ queryFn: async () => {
82
+ const client = (0, client_1.getApiClient)();
83
+ const response = await client.get('/api/v1/life-situations');
84
+ // Life situations endpoint returns flat array: { data: [] }
85
+ return response.data.data;
86
+ },
87
+ staleTime: 1000 * 60 * 60,
88
+ ...options,
89
+ });
90
+ }
91
+ /**
92
+ * Get all interests (flat array - reference data)
93
+ *
94
+ * @endpoint GET /api/v1/interests
95
+ * @returns Flat array of interests (not paginated)
96
+ */
97
+ function useInterests(options) {
98
+ return (0, react_query_1.useQuery)({
99
+ queryKey: exports.miscKeys.interests(),
100
+ queryFn: async () => {
101
+ const client = (0, client_1.getApiClient)();
102
+ const response = await client.get('/api/v1/interests');
103
+ // Interests endpoint returns flat array: { data: [] }
104
+ return response.data.data;
105
+ },
106
+ staleTime: 1000 * 60 * 60,
107
+ ...options,
108
+ });
109
+ }
110
+ /**
111
+ * Get all intentions (flat array - reference data)
112
+ *
113
+ * @endpoint GET /api/v1/intentions
114
+ * @returns Flat array of intentions (not paginated)
115
+ */
116
+ function useIntentions(options) {
117
+ return (0, react_query_1.useQuery)({
118
+ queryKey: exports.miscKeys.intentions(),
119
+ queryFn: async () => {
120
+ const client = (0, client_1.getApiClient)();
121
+ const response = await client.get('/api/v1/intentions');
122
+ // Intentions endpoint returns flat array: { data: [] }
123
+ return response.data.data;
124
+ },
125
+ staleTime: 1000 * 60 * 60,
126
+ ...options,
127
+ });
128
+ }
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQTRCSCw4QkFjQztBQVFELDRCQWNDO0FBUUQsOENBY0M7QUFRRCxvQ0FjQztBQVFELHNDQWNDO0FBaElELHVEQUFrRjtBQUNsRixzQ0FBeUM7QUFHekMsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFbEUsUUFBQSxRQUFRLEdBQUc7SUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFVO0lBQ2pDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBVTtJQUMvQixjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBVTtJQUNsRCxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQVU7SUFDdkMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFVO0NBQzFDLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7Ozs7R0FLRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsT0FBK0Q7SUFFL0QsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDM0IsT0FBTyxFQUFFLEtBQUssSUFBcUIsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQXVDLGdCQUFnQixDQUFDLENBQUM7WUFDMUYsNkVBQTZFO1lBQzdFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFFBQVEsQ0FDdEIsT0FBK0Q7SUFFL0QsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDMUIsT0FBTyxFQUFFLEtBQUssSUFBcUIsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQXNCLGVBQWUsQ0FBQyxDQUFDO1lBQ3hFLGtEQUFrRDtZQUNsRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixPQUF3RTtJQUV4RSxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxnQkFBUSxDQUFDLGNBQWMsRUFBRTtRQUNuQyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBK0IseUJBQXlCLENBQUMsQ0FBQztZQUMzRiw0REFBNEQ7WUFDNUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUN6QixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLE9BQW1FO0lBRW5FLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGdCQUFRLENBQUMsU0FBUyxFQUFFO1FBQzlCLE9BQU8sRUFBRSxLQUFLLElBQXlCLEVBQUU7WUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUEwQixtQkFBbUIsQ0FBQyxDQUFDO1lBQ2hGLHNEQUFzRDtZQUN0RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FDM0IsT0FBb0U7SUFFcEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxVQUFVLEVBQUU7UUFDL0IsT0FBTyxFQUFFLEtBQUssSUFBMEIsRUFBRTtZQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQTJCLG9CQUFvQixDQUFDLENBQUM7WUFDbEYsdURBQXVEO1lBQ3ZELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsQ0FBQztRQUNELFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDekIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWlzYyBRdWVyeSBIb29rc1xuICpcbiAqIFRhblN0YWNrIFF1ZXJ5IGhvb2tzIGZvciBjaXRpZXMsIHZpYmVzLCBhbmQgb3RoZXIgcmVmZXJlbmNlIGRhdGEuXG4gKiBBbGwgdHlwZXMgY29tZSBmcm9tIEBwcmlzbWEvY2xpZW50ICh2aWEgLi4vdHlwZXMgcmUtZXhwb3J0KS5cbiAqXG4gKiBBUEkgUmVzcG9uc2UgUGF0dGVybnM6XG4gKiAtIFJlZmVyZW5jZSBkYXRhICh2aWJlcywgdGVtcGxhdGVzLCBpbnRlcmVzdHMpOiB7IHN1Y2Nlc3MsIGRhdGE6IFRbXSwgdGltZXN0YW1wIH1cbiAqIC0gTGFyZ2UgZGF0YXNldHMgKGNpdGllcywgc3BvdHMsIHBvc3RzKTogeyBzdWNjZXNzLCBkYXRhOiB7IGRhdGE6IFRbXSwgbWV0YSB9LCB0aW1lc3RhbXAgfVxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IENpdHksIFZpYmUsIExpZmVTaXR1YXRpb24sIEludGVyZXN0LCBJbnRlbnRpb24sIEFwaVJlc3BvbnNlLCBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgbWlzY0tleXMgPSB7XG4gIGNpdGllczogKCkgPT4gWydjaXRpZXMnXSBhcyBjb25zdCxcbiAgdmliZXM6ICgpID0+IFsndmliZXMnXSBhcyBjb25zdCxcbiAgbGlmZVNpdHVhdGlvbnM6ICgpID0+IFsnbGlmZS1zaXR1YXRpb25zJ10gYXMgY29uc3QsXG4gIGludGVyZXN0czogKCkgPT4gWydpbnRlcmVzdHMnXSBhcyBjb25zdCxcbiAgaW50ZW50aW9uczogKCkgPT4gWydpbnRlbnRpb25zJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBhbGwgY2l0aWVzIChwYWdpbmF0ZWQgZW5kcG9pbnQpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2NpdGllc1xuICogQHJldHVybnMgUGFnaW5hdGVkUmVzcG9uc2Ugd2l0aCBjaXRpZXMgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNpdGllcyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPENpdHlbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxDaXR5W10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbWlzY0tleXMuY2l0aWVzKCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8Q2l0eVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQYWdpbmF0ZWRSZXNwb25zZTxDaXR5Pj4+KCcvYXBpL3YxL2NpdGllcycpO1xuICAgICAgLy8gQ2l0aWVzIGVuZHBvaW50IHJldHVybnMgcGFnaW5hdGVkIGZvcm1hdDogeyBkYXRhOiB7IGRhdGE6IFtdLCBtZXRhOiB7fSB9IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNjAsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCB2aWJlcyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS92aWJlc1xuICogQHJldHVybnMgRmxhdCBhcnJheSBvZiB2aWJlcyAobm90IHBhZ2luYXRlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZpYmVzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8VmliZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFZpYmVbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBtaXNjS2V5cy52aWJlcygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFZpYmVbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8VmliZVtdPj4oJy9hcGkvdjEvdmliZXMnKTtcbiAgICAgIC8vIFZpYmVzIGVuZHBvaW50IHJldHVybnMgZmxhdCBhcnJheTogeyBkYXRhOiBbXSB9XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgc3RhbGVUaW1lOiAxMDAwICogNjAgKiA2MCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGxpZmUgc2l0dWF0aW9ucyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhIGZvciBvbmJvYXJkaW5nKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9saWZlLXNpdHVhdGlvbnNcbiAqIEByZXR1cm5zIEZsYXQgYXJyYXkgb2YgbGlmZSBzaXR1YXRpb25zIChub3QgcGFnaW5hdGVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTGlmZVNpdHVhdGlvbnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxMaWZlU2l0dWF0aW9uW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8TGlmZVNpdHVhdGlvbltdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1pc2NLZXlzLmxpZmVTaXR1YXRpb25zKCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8TGlmZVNpdHVhdGlvbltdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxMaWZlU2l0dWF0aW9uW10+PignL2FwaS92MS9saWZlLXNpdHVhdGlvbnMnKTtcbiAgICAgIC8vIExpZmUgc2l0dWF0aW9ucyBlbmRwb2ludCByZXR1cm5zIGZsYXQgYXJyYXk6IHsgZGF0YTogW10gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNjAsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCBpbnRlcmVzdHMgKGZsYXQgYXJyYXkgLSByZWZlcmVuY2UgZGF0YSlcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvaW50ZXJlc3RzXG4gKiBAcmV0dXJucyBGbGF0IGFycmF5IG9mIGludGVyZXN0cyAobm90IHBhZ2luYXRlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVyZXN0cyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEludGVyZXN0W10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8SW50ZXJlc3RbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBtaXNjS2V5cy5pbnRlcmVzdHMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxJbnRlcmVzdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxJbnRlcmVzdFtdPj4oJy9hcGkvdjEvaW50ZXJlc3RzJyk7XG4gICAgICAvLyBJbnRlcmVzdHMgZW5kcG9pbnQgcmV0dXJucyBmbGF0IGFycmF5OiB7IGRhdGE6IFtdIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDYwLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbGwgaW50ZW50aW9ucyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9pbnRlbnRpb25zXG4gKiBAcmV0dXJucyBGbGF0IGFycmF5IG9mIGludGVudGlvbnMgKG5vdCBwYWdpbmF0ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbnRlbnRpb25zKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8SW50ZW50aW9uW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8SW50ZW50aW9uW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbWlzY0tleXMuaW50ZW50aW9ucygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEludGVudGlvbltdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxJbnRlbnRpb25bXT4+KCcvYXBpL3YxL2ludGVudGlvbnMnKTtcbiAgICAgIC8vIEludGVudGlvbnMgZW5kcG9pbnQgcmV0dXJucyBmbGF0IGFycmF5OiB7IGRhdGE6IFtdIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDYwLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Notifications Query Hooks
3
+ *
4
+ * TanStack Query hooks for notification operations.
5
+ */
6
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
7
+ import type { Notification } from '../types';
8
+ export declare const notificationKeys: {
9
+ all: readonly ["notifications"];
10
+ lists: () => readonly ["notifications", "list"];
11
+ list: (params?: {
12
+ limit?: number;
13
+ unreadOnly?: boolean;
14
+ }) => readonly ["notifications", "list", {
15
+ limit?: number;
16
+ unreadOnly?: boolean;
17
+ } | undefined];
18
+ unreadCount: () => readonly ["notifications", "unreadCount"];
19
+ };
20
+ /**
21
+ * Get notifications for current user
22
+ *
23
+ * @endpoint GET /api/v1/notifications
24
+ */
25
+ export declare function useNotifications(params?: {
26
+ limit?: number;
27
+ unreadOnly?: boolean;
28
+ }, options?: Omit<UseQueryOptions<Notification[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Notification[]>;
29
+ /**
30
+ * Get unread notification count
31
+ *
32
+ * @endpoint GET /api/v1/notifications/unread-count
33
+ */
34
+ export declare function useUnreadNotificationCount(options?: Omit<UseQueryOptions<number>, 'queryKey' | 'queryFn'>): UseQueryResult<number>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Notifications Query Hooks
4
+ *
5
+ * TanStack Query hooks for notification operations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.notificationKeys = void 0;
9
+ exports.useNotifications = useNotifications;
10
+ exports.useUnreadNotificationCount = useUnreadNotificationCount;
11
+ const react_query_1 = require("@tanstack/react-query");
12
+ const client_1 = require("../client");
13
+ // ============================================================================
14
+ // QUERY KEYS
15
+ // ============================================================================
16
+ exports.notificationKeys = {
17
+ all: ['notifications'],
18
+ lists: () => [...exports.notificationKeys.all, 'list'],
19
+ list: (params) => [...exports.notificationKeys.lists(), params],
20
+ unreadCount: () => [...exports.notificationKeys.all, 'unreadCount'],
21
+ };
22
+ // ============================================================================
23
+ // QUERY HOOKS
24
+ // ============================================================================
25
+ /**
26
+ * Get notifications for current user
27
+ *
28
+ * @endpoint GET /api/v1/notifications
29
+ */
30
+ function useNotifications(params, options) {
31
+ return (0, react_query_1.useQuery)({
32
+ queryKey: exports.notificationKeys.list(params),
33
+ queryFn: async () => {
34
+ const client = (0, client_1.getApiClient)();
35
+ const queryParams = new URLSearchParams();
36
+ if (params?.limit)
37
+ queryParams.set('limit', String(params.limit));
38
+ if (params?.unreadOnly)
39
+ queryParams.set('unreadOnly', String(params.unreadOnly));
40
+ const response = await client.get(`/api/v1/notifications?${queryParams}`);
41
+ return response.data.data;
42
+ },
43
+ ...options,
44
+ });
45
+ }
46
+ /**
47
+ * Get unread notification count
48
+ *
49
+ * @endpoint GET /api/v1/notifications/unread-count
50
+ */
51
+ function useUnreadNotificationCount(options) {
52
+ return (0, react_query_1.useQuery)({
53
+ queryKey: exports.notificationKeys.unreadCount(),
54
+ queryFn: async () => {
55
+ const client = (0, client_1.getApiClient)();
56
+ const response = await client.get('/api/v1/notifications/unread-count');
57
+ return response.data.data.count;
58
+ },
59
+ ...options,
60
+ });
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9ub3RpZmljYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUEwQkgsNENBZ0JDO0FBT0QsZ0VBWUM7QUEzREQsdURBQWtGO0FBQ2xGLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLGdCQUFnQixHQUFHO0lBQzlCLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBVTtJQUMvQixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLHdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDdkQsSUFBSSxFQUFFLENBQUMsTUFBaUQsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLHdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBVTtJQUMzRyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLHdCQUFnQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQVU7Q0FDckUsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsTUFBaUQsRUFDakQsT0FBdUU7SUFFdkUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsd0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxPQUFPLEVBQUUsS0FBSyxJQUE2QixFQUFFO1lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxNQUFNLEVBQUUsVUFBVTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDakYsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUE4Qix5QkFBeUIsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN2RyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLDBCQUEwQixDQUN4QyxPQUErRDtJQUUvRCxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSx3QkFBZ0IsQ0FBQyxXQUFXLEVBQUU7UUFDeEMsT0FBTyxFQUFFLEtBQUssSUFBcUIsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQWlDLG9DQUFvQyxDQUFDLENBQUM7WUFDeEcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5vdGlmaWNhdGlvbnMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3Igbm90aWZpY2F0aW9uIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucywgVXNlUXVlcnlSZXN1bHQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgTm90aWZpY2F0aW9uLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgbm90aWZpY2F0aW9uS2V5cyA9IHtcbiAgYWxsOiBbJ25vdGlmaWNhdGlvbnMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5ub3RpZmljYXRpb25LZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKHBhcmFtcz86IHsgbGltaXQ/OiBudW1iZXI7IHVucmVhZE9ubHk/OiBib29sZWFuIH0pID0+IFsuLi5ub3RpZmljYXRpb25LZXlzLmxpc3RzKCksIHBhcmFtc10gYXMgY29uc3QsXG4gIHVucmVhZENvdW50OiAoKSA9PiBbLi4ubm90aWZpY2F0aW9uS2V5cy5hbGwsICd1bnJlYWRDb3VudCddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgbm90aWZpY2F0aW9ucyBmb3IgY3VycmVudCB1c2VyXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL25vdGlmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU5vdGlmaWNhdGlvbnMoXG4gIHBhcmFtcz86IHsgbGltaXQ/OiBudW1iZXI7IHVucmVhZE9ubHk/OiBib29sZWFuIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxOb3RpZmljYXRpb25bXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxOb3RpZmljYXRpb25bXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBub3RpZmljYXRpb25LZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxOb3RpZmljYXRpb25bXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIGlmIChwYXJhbXM/LmxpbWl0KSBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKHBhcmFtcy5saW1pdCkpO1xuICAgICAgaWYgKHBhcmFtcz8udW5yZWFkT25seSkgcXVlcnlQYXJhbXMuc2V0KCd1bnJlYWRPbmx5JywgU3RyaW5nKHBhcmFtcy51bnJlYWRPbmx5KSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8Tm90aWZpY2F0aW9uW10+PihgL2FwaS92MS9ub3RpZmljYXRpb25zPyR7cXVlcnlQYXJhbXN9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVucmVhZCBub3RpZmljYXRpb24gY291bnRcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvbm90aWZpY2F0aW9ucy91bnJlYWQtY291bnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVucmVhZE5vdGlmaWNhdGlvbkNvdW50KFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8bnVtYmVyPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBub3RpZmljYXRpb25LZXlzLnVucmVhZENvdW50KCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx7IGNvdW50OiBudW1iZXIgfT4+KCcvYXBpL3YxL25vdGlmaWNhdGlvbnMvdW5yZWFkLWNvdW50Jyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLmNvdW50O1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Orders Query Hooks
3
+ *
4
+ * TanStack Query hooks for order-related operations.
5
+ */
6
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
7
+ import type { Order, OrderItem, Product, Spot, OrderStatus, PaginatedResponse } from '../types';
8
+ export declare const orderKeys: {
9
+ all: readonly ["orders"];
10
+ lists: () => readonly ["orders", "list"];
11
+ list: (filters?: Record<string, unknown>) => readonly ["orders", "list", Record<string, unknown> | undefined];
12
+ details: () => readonly ["orders", "detail"];
13
+ detail: (id: string) => readonly ["orders", "detail", string];
14
+ myOrders: () => readonly ["orders", "my"];
15
+ spotOrders: (spotId: string) => readonly ["orders", "spot", string];
16
+ };
17
+ export interface OrderWithDetails extends Order {
18
+ items: (OrderItem & {
19
+ product: Pick<Product, 'id' | 'name' | 'slug' | 'type' | 'imageUrl'>;
20
+ })[];
21
+ spot: Pick<Spot, 'id' | 'name' | 'slug'>;
22
+ }
23
+ export interface OrderFilters {
24
+ status?: OrderStatus;
25
+ limit?: number;
26
+ page?: number;
27
+ }
28
+ /**
29
+ * Get current user's orders (purchases)
30
+ *
31
+ * @endpoint GET /api/v1/users/me/orders
32
+ */
33
+ export declare function useMyOrders(params?: OrderFilters, options?: Omit<UseQueryOptions<PaginatedResponse<OrderWithDetails>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<OrderWithDetails>>;
34
+ /**
35
+ * Get a single order by ID
36
+ *
37
+ * @endpoint GET /api/v1/orders/{orderId}
38
+ */
39
+ export declare function useOrder(orderId: string, options?: Omit<UseQueryOptions<OrderWithDetails>, 'queryKey' | 'queryFn'>): UseQueryResult<OrderWithDetails>;
40
+ /**
41
+ * Get orders for a spot (seller view)
42
+ *
43
+ * @endpoint GET /api/v1/seller/spots/{spotId}/orders
44
+ */
45
+ export declare function useSpotOrders(spotId: string, params?: OrderFilters, options?: Omit<UseQueryOptions<PaginatedResponse<OrderWithDetails>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<OrderWithDetails>>;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * Orders Query Hooks
4
+ *
5
+ * TanStack Query hooks for order-related operations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.orderKeys = void 0;
9
+ exports.useMyOrders = useMyOrders;
10
+ exports.useOrder = useOrder;
11
+ exports.useSpotOrders = useSpotOrders;
12
+ const react_query_1 = require("@tanstack/react-query");
13
+ const client_1 = require("../client");
14
+ // ============================================================================
15
+ // QUERY KEYS
16
+ // ============================================================================
17
+ exports.orderKeys = {
18
+ all: ['orders'],
19
+ lists: () => [...exports.orderKeys.all, 'list'],
20
+ list: (filters) => [...exports.orderKeys.lists(), filters],
21
+ details: () => [...exports.orderKeys.all, 'detail'],
22
+ detail: (id) => [...exports.orderKeys.details(), id],
23
+ myOrders: () => [...exports.orderKeys.all, 'my'],
24
+ spotOrders: (spotId) => [...exports.orderKeys.all, 'spot', spotId],
25
+ };
26
+ // ============================================================================
27
+ // QUERY HOOKS
28
+ // ============================================================================
29
+ /**
30
+ * Get current user's orders (purchases)
31
+ *
32
+ * @endpoint GET /api/v1/users/me/orders
33
+ */
34
+ function useMyOrders(params, options) {
35
+ return (0, react_query_1.useQuery)({
36
+ queryKey: exports.orderKeys.list({ ...params, my: true }),
37
+ queryFn: async () => {
38
+ const client = (0, client_1.getApiClient)();
39
+ const queryParams = new URLSearchParams();
40
+ if (params?.status)
41
+ queryParams.set('status', params.status);
42
+ if (params?.limit)
43
+ queryParams.set('limit', String(params.limit));
44
+ if (params?.page)
45
+ queryParams.set('page', String(params.page));
46
+ const response = await client.get(`/api/v1/users/me/orders?${queryParams}`);
47
+ return response.data.data;
48
+ },
49
+ ...options,
50
+ });
51
+ }
52
+ /**
53
+ * Get a single order by ID
54
+ *
55
+ * @endpoint GET /api/v1/orders/{orderId}
56
+ */
57
+ function useOrder(orderId, options) {
58
+ return (0, react_query_1.useQuery)({
59
+ queryKey: exports.orderKeys.detail(orderId),
60
+ queryFn: async () => {
61
+ const client = (0, client_1.getApiClient)();
62
+ const response = await client.get(`/api/v1/orders/${orderId}`);
63
+ return response.data.data;
64
+ },
65
+ enabled: !!orderId,
66
+ ...options,
67
+ });
68
+ }
69
+ /**
70
+ * Get orders for a spot (seller view)
71
+ *
72
+ * @endpoint GET /api/v1/seller/spots/{spotId}/orders
73
+ */
74
+ function useSpotOrders(spotId, params, options) {
75
+ return (0, react_query_1.useQuery)({
76
+ queryKey: exports.orderKeys.spotOrders(spotId),
77
+ queryFn: async () => {
78
+ const client = (0, client_1.getApiClient)();
79
+ const queryParams = new URLSearchParams();
80
+ if (params?.status)
81
+ queryParams.set('status', params.status);
82
+ if (params?.limit)
83
+ queryParams.set('limit', String(params.limit));
84
+ if (params?.page)
85
+ queryParams.set('page', String(params.page));
86
+ const response = await client.get(`/api/v1/seller/spots/${spotId}/orders?${queryParams}`);
87
+ return response.data.data;
88
+ },
89
+ enabled: !!spotId,
90
+ ...options,
91
+ });
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL29yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBOENILGtDQW1CQztBQU9ELDRCQWNDO0FBT0Qsc0NBcUJDO0FBaEhELHVEQUFrRjtBQUNsRixzQ0FBeUM7QUFHekMsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFbEUsUUFBQSxTQUFTLEdBQUc7SUFDdkIsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFVO0lBQ3hCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFVO0lBQ2hELElBQUksRUFBRSxDQUFDLE9BQWlDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUNyRixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUNwRCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUM3RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBVTtJQUNqRCxVQUFVLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVO0NBQzVFLENBQUM7QUFtQkYsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsTUFBcUIsRUFDckIsT0FBNEY7SUFFNUYsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFD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Y2VzQ29udGVudCI6WyIvKipcbiAqIE9yZGVycyBRdWVyeSBIb29rc1xuICpcbiAqIFRhblN0YWNrIFF1ZXJ5IGhvb2tzIGZvciBvcmRlci1yZWxhdGVkIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucywgVXNlUXVlcnlSZXN1bHQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgT3JkZXIsIE9yZGVySXRlbSwgUHJvZHVjdCwgU3BvdCwgT3JkZXJTdGF0dXMsIEFwaVJlc3BvbnNlLCBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgb3JkZXJLZXlzID0ge1xuICBhbGw6IFsnb3JkZXJzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4ub3JkZXJLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gWy4uLm9yZGVyS2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLm9yZGVyS2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLm9yZGVyS2V5cy5kZXRhaWxzKCksIGlkXSBhcyBjb25zdCxcbiAgbXlPcmRlcnM6ICgpID0+IFsuLi5vcmRlcktleXMuYWxsLCAnbXknXSBhcyBjb25zdCxcbiAgc3BvdE9yZGVyczogKHNwb3RJZDogc3RyaW5nKSA9PiBbLi4ub3JkZXJLZXlzLmFsbCwgJ3Nwb3QnLCBzcG90SWRdIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRlcldpdGhEZXRhaWxzIGV4dGVuZHMgT3JkZXIge1xuICBpdGVtczogKE9yZGVySXRlbSAmIHtcbiAgICBwcm9kdWN0OiBQaWNrPFByb2R1Y3QsICdpZCcgfCAnbmFtZScgfCAnc2x1ZycgfCAndHlwZScgfCAnaW1hZ2VVcmwnPjtcbiAgfSlbXTtcbiAgc3BvdDogUGljazxTcG90LCAnaWQnIHwgJ25hbWUnIHwgJ3NsdWcnPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRlckZpbHRlcnMge1xuICBzdGF0dXM/OiBPcmRlclN0YXR1cztcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHBhZ2U/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgdXNlcidzIG9yZGVycyAocHVyY2hhc2VzKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS91c2Vycy9tZS9vcmRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU15T3JkZXJzKFxuICBwYXJhbXM/OiBPcmRlckZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRSZXNwb25zZTxPcmRlcldpdGhEZXRhaWxzPj4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxQYWdpbmF0ZWRSZXNwb25zZTxPcmRlcldpdGhEZXRhaWxzPj4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBvcmRlcktleXMubGlzdCh7IC4uLnBhcmFtcywgbXk6IHRydWUgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8T3JkZXJXaXRoRGV0YWlscz4+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zPy5zdGF0dXMpIHF1ZXJ5UGFyYW1zLnNldCgnc3RhdHVzJywgcGFyYW1zLnN0YXR1cyk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGlmIChwYXJhbXM/LnBhZ2UpIHF1ZXJ5UGFyYW1zLnNldCgncGFnZScsIFN0cmluZyhwYXJhbXMucGFnZSkpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+Pj4oXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL29yZGVycz8ke3F1ZXJ5UGFyYW1zfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIG9yZGVyIGJ5IElEXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL29yZGVycy97b3JkZXJJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKFxuICBvcmRlcklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxPcmRlcldpdGhEZXRhaWxzPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PE9yZGVyV2l0aERldGFpbHM+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogb3JkZXJLZXlzLmRldGFpbChvcmRlcklkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxPcmRlcldpdGhEZXRhaWxzPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxPcmRlcldpdGhEZXRhaWxzPj4oYC9hcGkvdjEvb3JkZXJzLyR7b3JkZXJJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIW9yZGVySWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG9yZGVycyBmb3IgYSBzcG90IChzZWxsZXIgdmlldylcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvc2VsbGVyL3Nwb3RzL3tzcG90SWR9L29yZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdE9yZGVycyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIHBhcmFtcz86IE9yZGVyRmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG9yZGVyS2V5cy5zcG90T3JkZXJzKHNwb3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8T3JkZXJXaXRoRGV0YWlscz4+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zPy5zdGF0dXMpIHF1ZXJ5UGFyYW1zLnNldCgnc3RhdHVzJywgcGFyYW1zLnN0YXR1cyk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGlmIChwYXJhbXM/LnBhZ2UpIHF1ZXJ5UGFyYW1zLnNldCgncGFnZScsIFN0cmluZyhwYXJhbXMucGFnZSkpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+Pj4oXG4gICAgICAgIGAvYXBpL3YxL3NlbGxlci9zcG90cy8ke3Nwb3RJZH0vb3JkZXJzPyR7cXVlcnlQYXJhbXN9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNwb3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Posts Query Hooks
3
+ *
4
+ * TanStack Query hooks for post/board operations.
5
+ */
6
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
7
+ import type { Post, PostResponse, PostStatusDto } from '../types';
8
+ export declare const postKeys: {
9
+ all: readonly ["posts"];
10
+ lists: () => readonly ["posts", "list"];
11
+ list: (filters?: Record<string, unknown>) => readonly ["posts", "list", Record<string, unknown> | undefined];
12
+ bySpot: (spotId: string, filters?: Record<string, unknown>) => readonly ["posts", "spot", string, Record<string, unknown> | undefined];
13
+ details: () => readonly ["posts", "detail"];
14
+ detail: (id: string) => readonly ["posts", "detail", string];
15
+ responses: (postId: string) => readonly ["posts", "detail", string, "responses"];
16
+ status: (postId: string) => readonly ["posts", "detail", string, "status"];
17
+ };
18
+ /**
19
+ * Get posts for a spot
20
+ *
21
+ * @endpoint GET /api/v1/spots/{spotId}/posts
22
+ */
23
+ export declare function useSpotPosts(spotId: string, params?: {
24
+ postType?: string;
25
+ status?: string;
26
+ page?: number;
27
+ limit?: number;
28
+ }, options?: Omit<UseQueryOptions<Post[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Post[]>;
29
+ /**
30
+ * Get a single post by ID
31
+ *
32
+ * @endpoint GET /api/v1/posts/{postId}
33
+ */
34
+ export declare function usePost(postId: string, options?: Omit<UseQueryOptions<Post>, 'queryKey' | 'queryFn'>): UseQueryResult<Post>;
35
+ /**
36
+ * Get responses for a post
37
+ *
38
+ * @endpoint GET /api/v1/posts/{postId}/responses
39
+ */
40
+ export declare function usePostResponses(postId: string, options?: Omit<UseQueryOptions<PostResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<PostResponse[]>;
41
+ /**
42
+ * Get all posts (with filters)
43
+ *
44
+ * @endpoint GET /api/v1/posts
45
+ */
46
+ export declare function usePosts(params?: {
47
+ postType?: string;
48
+ limit?: number;
49
+ }, options?: Omit<UseQueryOptions<Post[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Post[]>;
50
+ /**
51
+ * Get user's status for a post (read/hidden/pinned)
52
+ *
53
+ * @endpoint GET /api/v1/posts/{postId}/status
54
+ */
55
+ export declare function usePostStatus(postId: string, options?: Omit<UseQueryOptions<PostStatusDto>, 'queryKey' | 'queryFn'>): UseQueryResult<PostStatusDto>;
@@ -0,0 +1,130 @@
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
+ const react_query_1 = require("@tanstack/react-query");
15
+ const client_1 = require("../client");
16
+ // ============================================================================
17
+ // QUERY KEYS
18
+ // ============================================================================
19
+ exports.postKeys = {
20
+ all: ['posts'],
21
+ lists: () => [...exports.postKeys.all, 'list'],
22
+ list: (filters) => [...exports.postKeys.lists(), filters],
23
+ bySpot: (spotId, filters) => [...exports.postKeys.all, 'spot', spotId, filters],
24
+ details: () => [...exports.postKeys.all, 'detail'],
25
+ detail: (id) => [...exports.postKeys.details(), id],
26
+ responses: (postId) => [...exports.postKeys.detail(postId), 'responses'],
27
+ status: (postId) => [...exports.postKeys.detail(postId), 'status'],
28
+ };
29
+ // ============================================================================
30
+ // QUERY HOOKS
31
+ // ============================================================================
32
+ /**
33
+ * Get posts for a spot
34
+ *
35
+ * @endpoint GET /api/v1/spots/{spotId}/posts
36
+ */
37
+ function useSpotPosts(spotId, params, options) {
38
+ return (0, react_query_1.useQuery)({
39
+ queryKey: exports.postKeys.bySpot(spotId, params),
40
+ queryFn: async () => {
41
+ const client = (0, client_1.getApiClient)();
42
+ const queryParams = new URLSearchParams();
43
+ if (params?.postType)
44
+ queryParams.set('postType', params.postType);
45
+ if (params?.status)
46
+ queryParams.set('status', params.status);
47
+ if (params?.page)
48
+ queryParams.set('page', String(params.page));
49
+ if (params?.limit)
50
+ queryParams.set('limit', String(params.limit));
51
+ const response = await client.get(`/api/v1/spots/${spotId}/posts?${queryParams}`);
52
+ return response.data.data;
53
+ },
54
+ enabled: !!spotId,
55
+ ...options,
56
+ });
57
+ }
58
+ /**
59
+ * Get a single post by ID
60
+ *
61
+ * @endpoint GET /api/v1/posts/{postId}
62
+ */
63
+ function usePost(postId, options) {
64
+ return (0, react_query_1.useQuery)({
65
+ queryKey: exports.postKeys.detail(postId),
66
+ queryFn: async () => {
67
+ const client = (0, client_1.getApiClient)();
68
+ const response = await client.get(`/api/v1/posts/${postId}`);
69
+ return response.data.data;
70
+ },
71
+ enabled: !!postId,
72
+ ...options,
73
+ });
74
+ }
75
+ /**
76
+ * Get responses for a post
77
+ *
78
+ * @endpoint GET /api/v1/posts/{postId}/responses
79
+ */
80
+ function usePostResponses(postId, options) {
81
+ return (0, react_query_1.useQuery)({
82
+ queryKey: exports.postKeys.responses(postId),
83
+ queryFn: async () => {
84
+ const client = (0, client_1.getApiClient)();
85
+ const response = await client.get(`/api/v1/posts/${postId}/responses`);
86
+ return response.data.data;
87
+ },
88
+ enabled: !!postId,
89
+ ...options,
90
+ });
91
+ }
92
+ /**
93
+ * Get all posts (with filters)
94
+ *
95
+ * @endpoint GET /api/v1/posts
96
+ */
97
+ function usePosts(params, options) {
98
+ return (0, react_query_1.useQuery)({
99
+ queryKey: exports.postKeys.list(params),
100
+ queryFn: async () => {
101
+ const client = (0, client_1.getApiClient)();
102
+ const queryParams = new URLSearchParams();
103
+ if (params?.postType)
104
+ queryParams.set('postType', params.postType);
105
+ if (params?.limit)
106
+ queryParams.set('limit', String(params.limit));
107
+ const response = await client.get(`/api/v1/posts?${queryParams}`);
108
+ return response.data.data;
109
+ },
110
+ ...options,
111
+ });
112
+ }
113
+ /**
114
+ * Get user's status for a post (read/hidden/pinned)
115
+ *
116
+ * @endpoint GET /api/v1/posts/{postId}/status
117
+ */
118
+ function usePostStatus(postId, options) {
119
+ return (0, react_query_1.useQuery)({
120
+ queryKey: exports.postKeys.status(postId),
121
+ queryFn: async () => {
122
+ const client = (0, client_1.getApiClient)();
123
+ const response = await client.get(`/api/v1/posts/${postId}/status`);
124
+ return response.data.data;
125
+ },
126
+ enabled: !!postId,
127
+ ...options,
128
+ });
129
+ }
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcG9zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQThCSCxvQ0FvQkM7QUFPRCwwQkFjQztBQU9ELDRDQWNDO0FBT0QsNEJBZ0JDO0FBUUQsc0NBY0M7QUF2SUQsdURBQWtGO0FBQ2xGLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLFFBQVEsR0FBRztJQUN0QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQVU7SUFDdkIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDL0MsSUFBSSxFQUFFLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQ3BGLE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxPQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQVU7SUFDbEgsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQVU7SUFDbkQsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQVU7SUFDNUQsU0FBUyxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFVO0lBQ2pGLE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsTUFB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Q0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9zdHMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3IgcG9zdC9ib2FyZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IFBvc3QsIFBvc3RSZXNwb25zZSwgQXBpUmVzcG9uc2UsIFBvc3RTdGF0dXNEdG8gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHBvc3RLZXlzID0ge1xuICBhbGw6IFsncG9zdHMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5wb3N0S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFsuLi5wb3N0S2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgYnlTcG90OiAoc3BvdElkOiBzdHJpbmcsIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gWy4uLnBvc3RLZXlzLmFsbCwgJ3Nwb3QnLCBzcG90SWQsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4ucG9zdEtleXMuYWxsLCAnZGV0YWlsJ10gYXMgY29uc3QsXG4gIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi5wb3N0S2V5cy5kZXRhaWxzKCksIGlkXSBhcyBjb25zdCxcbiAgcmVzcG9uc2VzOiAocG9zdElkOiBzdHJpbmcpID0+IFsuLi5wb3N0S2V5cy5kZXRhaWwocG9zdElkKSwgJ3Jlc3BvbnNlcyddIGFzIGNvbnN0LFxuICBzdGF0dXM6IChwb3N0SWQ6IHN0cmluZykgPT4gWy4uLnBvc3RLZXlzLmRldGFpbChwb3N0SWQpLCAnc3RhdHVzJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBwb3N0cyBmb3IgYSBzcG90XG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL3Nwb3RzL3tzcG90SWR9L3Bvc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90UG9zdHMoXG4gIHNwb3RJZDogc3RyaW5nLFxuICBwYXJhbXM/OiB7IHBvc3RUeXBlPzogc3RyaW5nOyBzdGF0dXM/OiBzdHJpbmc7IHBhZ2U/OiBudW1iZXI7IGxpbWl0PzogbnVtYmVyIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0W10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmJ5U3BvdChzcG90SWQsIHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcz8ucG9zdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgncG9zdFR5cGUnLCBwYXJhbXMucG9zdFR5cGUpO1xuICAgICAgaWYgKHBhcmFtcz8uc3RhdHVzKSBxdWVyeVBhcmFtcy5zZXQoJ3N0YXR1cycsIHBhcmFtcy5zdGF0dXMpO1xuICAgICAgaWYgKHBhcmFtcz8ucGFnZSkgcXVlcnlQYXJhbXMuc2V0KCdwYWdlJywgU3RyaW5nKHBhcmFtcy5wYWdlKSk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQb3N0W10+PihgL2FwaS92MS9zcG90cy8ke3Nwb3RJZH0vcG9zdHM/JHtxdWVyeVBhcmFtc31gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNwb3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYSBzaW5nbGUgcG9zdCBieSBJRFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9wb3N0cy97cG9zdElkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUG9zdChcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBvc3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcG9zdEtleXMuZGV0YWlsKHBvc3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UG9zdD4+KGAvYXBpL3YxL3Bvc3RzLyR7cG9zdElkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcG9zdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCByZXNwb25zZXMgZm9yIGEgcG9zdFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9wb3N0cy97cG9zdElkfS9yZXNwb25zZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RSZXNwb25zZXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFJlc3BvbnNlW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcG9zdEtleXMucmVzcG9uc2VzKHBvc3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBvc3RSZXNwb25zZVtdPj4oYC9hcGkvdjEvcG9zdHMvJHtwb3N0SWR9L3Jlc3BvbnNlc2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcG9zdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbGwgcG9zdHMgKHdpdGggZmlsdGVycylcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvcG9zdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RzKFxuICBwYXJhbXM/OiB7IHBvc3RUeXBlPzogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9LFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBvc3RbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwb3N0S2V5cy5saXN0KHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcz8ucG9zdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgncG9zdFR5cGUnLCBwYXJhbXMucG9zdFR5cGUpO1xuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UG9zdFtdPj4oYC9hcGkvdjEvcG9zdHM/JHtxdWVyeVBhcmFtc31gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuXG4vKipcbiAqIEdldCB1c2VyJ3Mgc3RhdHVzIGZvciBhIHBvc3QgKHJlYWQvaGlkZGVuL3Bpbm5lZClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvcG9zdHMve3Bvc3RJZH0vc3RhdHVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQb3N0U3RhdHVzKFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBvc3RTdGF0dXNEdG8+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFN0YXR1c0R0bz4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwb3N0S2V5cy5zdGF0dXMocG9zdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQb3N0U3RhdHVzRHRvPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQb3N0U3RhdHVzRHRvPj4oYC9hcGkvdjEvcG9zdHMvJHtwb3N0SWR9L3N0YXR1c2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcG9zdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19