@growsober/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 (129) hide show
  1. package/README.md +276 -0
  2. package/dist/__tests__/e2e.test.d.ts +7 -0
  3. package/dist/__tests__/e2e.test.js +472 -0
  4. package/dist/api/client.d.ts +11 -0
  5. package/dist/api/client.js +61 -0
  6. package/dist/api/mutations/admin.d.ts +167 -0
  7. package/dist/api/mutations/admin.js +326 -0
  8. package/dist/api/mutations/ambassadors.d.ts +52 -0
  9. package/dist/api/mutations/ambassadors.js +148 -0
  10. package/dist/api/mutations/auth.d.ts +267 -0
  11. package/dist/api/mutations/auth.js +332 -0
  12. package/dist/api/mutations/bookings.d.ts +59 -0
  13. package/dist/api/mutations/bookings.js +143 -0
  14. package/dist/api/mutations/event-chat.d.ts +35 -0
  15. package/dist/api/mutations/event-chat.js +147 -0
  16. package/dist/api/mutations/events.d.ts +87 -0
  17. package/dist/api/mutations/events.js +205 -0
  18. package/dist/api/mutations/grow90.d.ts +36 -0
  19. package/dist/api/mutations/grow90.js +132 -0
  20. package/dist/api/mutations/hubs.d.ts +111 -0
  21. package/dist/api/mutations/hubs.js +240 -0
  22. package/dist/api/mutations/index.d.ts +22 -0
  23. package/dist/api/mutations/index.js +39 -0
  24. package/dist/api/mutations/jack.d.ts +61 -0
  25. package/dist/api/mutations/jack.js +104 -0
  26. package/dist/api/mutations/library.d.ts +67 -0
  27. package/dist/api/mutations/library.js +168 -0
  28. package/dist/api/mutations/map.d.ts +153 -0
  29. package/dist/api/mutations/map.js +181 -0
  30. package/dist/api/mutations/matching.d.ts +130 -0
  31. package/dist/api/mutations/matching.js +204 -0
  32. package/dist/api/mutations/notifications.d.ts +63 -0
  33. package/dist/api/mutations/notifications.js +106 -0
  34. package/dist/api/mutations/offers.d.ts +26 -0
  35. package/dist/api/mutations/offers.js +47 -0
  36. package/dist/api/mutations/subscriptions.d.ts +127 -0
  37. package/dist/api/mutations/subscriptions.js +140 -0
  38. package/dist/api/mutations/support.d.ts +165 -0
  39. package/dist/api/mutations/support.js +307 -0
  40. package/dist/api/mutations/users.d.ts +211 -0
  41. package/dist/api/mutations/users.js +261 -0
  42. package/dist/api/queries/admin.d.ts +257 -0
  43. package/dist/api/queries/admin.js +320 -0
  44. package/dist/api/queries/ambassadors.d.ts +53 -0
  45. package/dist/api/queries/ambassadors.js +98 -0
  46. package/dist/api/queries/auth.d.ts +16 -0
  47. package/dist/api/queries/auth.js +25 -0
  48. package/dist/api/queries/bookings.d.ts +91 -0
  49. package/dist/api/queries/bookings.js +102 -0
  50. package/dist/api/queries/businesses.d.ts +212 -0
  51. package/dist/api/queries/businesses.js +154 -0
  52. package/dist/api/queries/event-chat.d.ts +19 -0
  53. package/dist/api/queries/event-chat.js +75 -0
  54. package/dist/api/queries/events.d.ts +322 -0
  55. package/dist/api/queries/events.js +221 -0
  56. package/dist/api/queries/grow90.d.ts +26 -0
  57. package/dist/api/queries/grow90.js +85 -0
  58. package/dist/api/queries/hubs.d.ts +165 -0
  59. package/dist/api/queries/hubs.js +143 -0
  60. package/dist/api/queries/index.d.ts +23 -0
  61. package/dist/api/queries/index.js +40 -0
  62. package/dist/api/queries/jack.d.ts +63 -0
  63. package/dist/api/queries/jack.js +92 -0
  64. package/dist/api/queries/library.d.ts +132 -0
  65. package/dist/api/queries/library.js +120 -0
  66. package/dist/api/queries/map.d.ts +216 -0
  67. package/dist/api/queries/map.js +278 -0
  68. package/dist/api/queries/matching.d.ts +136 -0
  69. package/dist/api/queries/matching.js +161 -0
  70. package/dist/api/queries/notifications.d.ts +78 -0
  71. package/dist/api/queries/notifications.js +88 -0
  72. package/dist/api/queries/offers.d.ts +91 -0
  73. package/dist/api/queries/offers.js +103 -0
  74. package/dist/api/queries/subscriptions.d.ts +56 -0
  75. package/dist/api/queries/subscriptions.js +73 -0
  76. package/dist/api/queries/support.d.ts +106 -0
  77. package/dist/api/queries/support.js +202 -0
  78. package/dist/api/queries/users.d.ts +293 -0
  79. package/dist/api/queries/users.js +370 -0
  80. package/dist/api/types.d.ts +464 -0
  81. package/dist/api/types.js +9 -0
  82. package/dist/hooks/useAuth.d.ts +5 -0
  83. package/dist/hooks/useAuth.js +39 -0
  84. package/dist/hooks/useUser.d.ts +43 -0
  85. package/dist/hooks/useUser.js +44 -0
  86. package/dist/index.d.ts +36 -0
  87. package/dist/index.js +67 -0
  88. package/package.json +62 -0
  89. package/src/__tests__/e2e.test.ts +502 -0
  90. package/src/api/client.ts +71 -0
  91. package/src/api/mutations/admin.ts +531 -0
  92. package/src/api/mutations/ambassadors.ts +185 -0
  93. package/src/api/mutations/auth.ts +350 -0
  94. package/src/api/mutations/bookings.ts +190 -0
  95. package/src/api/mutations/event-chat.ts +177 -0
  96. package/src/api/mutations/events.ts +273 -0
  97. package/src/api/mutations/grow90.ts +169 -0
  98. package/src/api/mutations/hubs.ts +385 -0
  99. package/src/api/mutations/index.ts +23 -0
  100. package/src/api/mutations/jack.ts +130 -0
  101. package/src/api/mutations/library.ts +212 -0
  102. package/src/api/mutations/map.ts +230 -0
  103. package/src/api/mutations/matching.ts +271 -0
  104. package/src/api/mutations/notifications.ts +114 -0
  105. package/src/api/mutations/offers.ts +73 -0
  106. package/src/api/mutations/subscriptions.ts +162 -0
  107. package/src/api/mutations/support.ts +390 -0
  108. package/src/api/mutations/users.ts +271 -0
  109. package/src/api/queries/admin.ts +480 -0
  110. package/src/api/queries/ambassadors.ts +139 -0
  111. package/src/api/queries/auth.ts +24 -0
  112. package/src/api/queries/bookings.ts +135 -0
  113. package/src/api/queries/businesses.ts +203 -0
  114. package/src/api/queries/event-chat.ts +78 -0
  115. package/src/api/queries/events.ts +272 -0
  116. package/src/api/queries/grow90.ts +98 -0
  117. package/src/api/queries/hubs.ts +211 -0
  118. package/src/api/queries/index.ts +24 -0
  119. package/src/api/queries/jack.ts +127 -0
  120. package/src/api/queries/library.ts +166 -0
  121. package/src/api/queries/map.ts +331 -0
  122. package/src/api/queries/matching.ts +238 -0
  123. package/src/api/queries/notifications.ts +103 -0
  124. package/src/api/queries/offers.ts +136 -0
  125. package/src/api/queries/subscriptions.ts +91 -0
  126. package/src/api/queries/support.ts +235 -0
  127. package/src/api/queries/users.ts +393 -0
  128. package/src/api/types.ts +596 -0
  129. package/src/index.ts +57 -0
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.supportKeys = void 0;
4
+ exports.useCheckIns = useCheckIns;
5
+ exports.useTodayCheckIn = useTodayCheckIn;
6
+ exports.useCheckInStreak = useCheckInStreak;
7
+ exports.useMoodLogs = useMoodLogs;
8
+ exports.useWins = useWins;
9
+ exports.useWinsByCategory = useWinsByCategory;
10
+ exports.useHabits = useHabits;
11
+ exports.useReflections = useReflections;
12
+ const react_query_1 = require("@tanstack/react-query");
13
+ const client_1 = require("../client");
14
+ // ============================================================================
15
+ // QUERY KEY FACTORY
16
+ // ============================================================================
17
+ exports.supportKeys = {
18
+ all: ['support'],
19
+ checkIns: () => [...exports.supportKeys.all, 'check-ins'],
20
+ checkInToday: () => [...exports.supportKeys.checkIns(), 'today'],
21
+ checkInStreak: () => [...exports.supportKeys.checkIns(), 'streak'],
22
+ moodLogs: () => [...exports.supportKeys.all, 'mood'],
23
+ wins: () => [...exports.supportKeys.all, 'wins'],
24
+ winsByCategory: () => [...exports.supportKeys.wins(), 'by-category'],
25
+ habits: () => [...exports.supportKeys.all, 'habits'],
26
+ reflections: () => [...exports.supportKeys.all, 'reflections'],
27
+ };
28
+ // ============================================================================
29
+ // QUERY HOOKS
30
+ // ============================================================================
31
+ /**
32
+ * Get user's daily check-ins
33
+ *
34
+ * @param options - TanStack Query options
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * const { data, isLoading } = useCheckIns();
39
+ * ```
40
+ */
41
+ function useCheckIns(options) {
42
+ return (0, react_query_1.useQuery)({
43
+ queryKey: exports.supportKeys.checkIns(),
44
+ queryFn: async () => {
45
+ const client = (0, client_1.getApiClient)();
46
+ const response = await client.get('/api/v1/support/check-ins');
47
+ // API wraps responses in { data: [...], meta: {...} }
48
+ return response.data?.data || response.data || [];
49
+ },
50
+ ...options,
51
+ });
52
+ }
53
+ /**
54
+ * Get today's check-in
55
+ *
56
+ * @param options - TanStack Query options
57
+ *
58
+ * @example
59
+ * ```tsx
60
+ * const { data, isLoading } = useTodayCheckIn();
61
+ * ```
62
+ */
63
+ function useTodayCheckIn(options) {
64
+ return (0, react_query_1.useQuery)({
65
+ queryKey: exports.supportKeys.checkInToday(),
66
+ queryFn: async () => {
67
+ const client = (0, client_1.getApiClient)();
68
+ const response = await client.get('/api/v1/support/check-ins/today');
69
+ // API wraps responses in { data: {...}, meta: {...} }
70
+ return response.data?.data ?? response.data ?? null;
71
+ },
72
+ ...options,
73
+ });
74
+ }
75
+ /**
76
+ * Get user's check-in streak
77
+ *
78
+ * @param options - TanStack Query options
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * const { data, isLoading } = useCheckInStreak();
83
+ * ```
84
+ */
85
+ function useCheckInStreak(options) {
86
+ return (0, react_query_1.useQuery)({
87
+ queryKey: exports.supportKeys.checkInStreak(),
88
+ queryFn: async () => {
89
+ const client = (0, client_1.getApiClient)();
90
+ const response = await client.get('/api/v1/support/check-ins/streak');
91
+ // API wraps responses in { data: {...}, meta: {...} }
92
+ return response.data?.data || response.data || { currentStreak: 0, longestStreak: 0, totalCheckIns: 0 };
93
+ },
94
+ ...options,
95
+ });
96
+ }
97
+ /**
98
+ * Get user's mood logs
99
+ *
100
+ * @param options - TanStack Query options
101
+ *
102
+ * @example
103
+ * ```tsx
104
+ * const { data, isLoading } = useMoodLogs();
105
+ * ```
106
+ */
107
+ function useMoodLogs(options) {
108
+ return (0, react_query_1.useQuery)({
109
+ queryKey: exports.supportKeys.moodLogs(),
110
+ queryFn: async () => {
111
+ const client = (0, client_1.getApiClient)();
112
+ const response = await client.get('/api/v1/support/mood');
113
+ return response.data;
114
+ },
115
+ ...options,
116
+ });
117
+ }
118
+ /**
119
+ * Get user's wins
120
+ *
121
+ * @param options - TanStack Query options
122
+ *
123
+ * @example
124
+ * ```tsx
125
+ * const { data, isLoading } = useWins();
126
+ * ```
127
+ */
128
+ function useWins(options) {
129
+ return (0, react_query_1.useQuery)({
130
+ queryKey: exports.supportKeys.wins(),
131
+ queryFn: async () => {
132
+ const client = (0, client_1.getApiClient)();
133
+ const response = await client.get('/api/v1/support/wins');
134
+ return response.data;
135
+ },
136
+ ...options,
137
+ });
138
+ }
139
+ /**
140
+ * Get user's wins grouped by category
141
+ *
142
+ * @param options - TanStack Query options
143
+ *
144
+ * @example
145
+ * ```tsx
146
+ * const { data, isLoading } = useWinsByCategory();
147
+ * ```
148
+ */
149
+ function useWinsByCategory(options) {
150
+ return (0, react_query_1.useQuery)({
151
+ queryKey: exports.supportKeys.winsByCategory(),
152
+ queryFn: async () => {
153
+ const client = (0, client_1.getApiClient)();
154
+ const response = await client.get('/api/v1/support/wins/by-category');
155
+ return response.data;
156
+ },
157
+ ...options,
158
+ });
159
+ }
160
+ /**
161
+ * Get user's habits
162
+ *
163
+ * @param options - TanStack Query options
164
+ *
165
+ * @example
166
+ * ```tsx
167
+ * const { data, isLoading } = useHabits();
168
+ * ```
169
+ */
170
+ function useHabits(options) {
171
+ return (0, react_query_1.useQuery)({
172
+ queryKey: exports.supportKeys.habits(),
173
+ queryFn: async () => {
174
+ const client = (0, client_1.getApiClient)();
175
+ const response = await client.get('/api/v1/support/habits');
176
+ return response.data;
177
+ },
178
+ ...options,
179
+ });
180
+ }
181
+ /**
182
+ * Get user's reflections
183
+ *
184
+ * @param options - TanStack Query options
185
+ *
186
+ * @example
187
+ * ```tsx
188
+ * const { data, isLoading } = useReflections();
189
+ * ```
190
+ */
191
+ function useReflections(options) {
192
+ return (0, react_query_1.useQuery)({
193
+ queryKey: exports.supportKeys.reflections(),
194
+ queryFn: async () => {
195
+ const client = (0, client_1.getApiClient)();
196
+ const response = await client.get('/api/v1/support/reflections');
197
+ return response.data;
198
+ },
199
+ ...options,
200
+ });
201
+ }
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9zdXBwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1EQSxrQ0FhQztBQVlELDBDQWFDO0FBWUQsNENBYUM7QUFZRCxrQ0FZQztBQVlELDBCQVlDO0FBWUQsOENBWUM7QUFZRCw4QkFZQztBQVlELHdDQVlDO0FBMU9ELHVEQUFrRTtBQUNsRSxzQ0FBeUM7QUFVekMsK0VBQStFO0FBQy9FLG9CQUFvQjtBQUNwQiwrRUFBK0U7QUFFbEUsUUFBQSxXQUFXLEdBQUc7SUFDekIsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFVO0lBQ3pCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFVO0lBQzFELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQVU7SUFDakUsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBVTtJQUNuRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNyRCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNqRCxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFVO0lBQ3JFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3JELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FB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bkMsT0FBTyxFQUFFLEtBQUssSUFBbUMsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNqRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIERhaWx5Q2hlY2tJblJlc3BvbnNlLFxuICBNb29kTG9nUmVzcG9uc2UsXG4gIFdpblJlc3BvbnNlLFxuICBIYWJpdFJlc3BvbnNlLFxuICBSZWZsZWN0aW9uUmVzcG9uc2UsXG4gIFVzZXJTdHJlYWtSZXNwb25zZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBLRVkgRkFDVE9SWVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgc3VwcG9ydEtleXMgPSB7XG4gIGFsbDogWydzdXBwb3J0J10gYXMgY29uc3QsXG4gIGNoZWNrSW5zOiAoKSA9PiBbLi4uc3VwcG9ydEtleXMuYWxsLCAnY2hlY2staW5zJ10gYXMgY29uc3QsXG4gIGNoZWNrSW5Ub2RheTogKCkgPT4gWy4uLnN1cHBvcnRLZXlzLmNoZWNrSW5zKCksICd0b2RheSddIGFzIGNvbnN0LFxuICBjaGVja0luU3RyZWFrOiAoKSA9PiBbLi4uc3VwcG9ydEtleXMuY2hlY2tJbnMoKSwgJ3N0cmVhayddIGFzIGNvbnN0LFxuICBtb29kTG9nczogKCkgPT4gWy4uLnN1cHBvcnRLZXlzLmFsbCwgJ21vb2QnXSBhcyBjb25zdCxcbiAgd2luczogKCkgPT4gWy4uLnN1cHBvcnRLZXlzLmFsbCwgJ3dpbnMnXSBhcyBjb25zdCxcbiAgd2luc0J5Q2F0ZWdvcnk6ICgpID0+IFsuLi5zdXBwb3J0S2V5cy53aW5zKCksICdieS1jYXRlZ29yeSddIGFzIGNvbnN0LFxuICBoYWJpdHM6ICgpID0+IFsuLi5zdXBwb3J0S2V5cy5hbGwsICdoYWJpdHMnXSBhcyBjb25zdCxcbiAgcmVmbGVjdGlvbnM6ICgpID0+IFsuLi5zdXBwb3J0S2V5cy5hbGwsICdyZWZsZWN0aW9ucyddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBXaW5zQnlDYXRlZ29yeSB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHdpbnM6IFdpblJlc3BvbnNlW107XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHVzZXIncyBkYWlseSBjaGVjay1pbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlQ2hlY2tJbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2hlY2tJbnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxEYWlseUNoZWNrSW5SZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0lucygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPERhaWx5Q2hlY2tJblJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvY2hlY2staW5zJyk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2VzIGluIHsgZGF0YTogWy4uLl0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGEgfHwgW107XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdG9kYXkncyBjaGVjay1pblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VUb2RheUNoZWNrSW4oKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9kYXlDaGVja0luKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8RGFpbHlDaGVja0luUmVzcG9uc2UgfCBudWxsPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0luVG9kYXkoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxEYWlseUNoZWNrSW5SZXNwb25zZSB8IG51bGw+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvY2hlY2staW5zL3RvZGF5Jyk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2VzIGluIHsgZGF0YTogey4uLn0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhID8/IHJlc3BvbnNlLmRhdGEgPz8gbnVsbDtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB1c2VyJ3MgY2hlY2staW4gc3RyZWFrXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZUNoZWNrSW5TdHJlYWsoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2hlY2tJblN0cmVhayhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFVzZXJTdHJlYWtSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblN0cmVhaygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFVzZXJTdHJlYWtSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvc3VwcG9ydC9jaGVjay1pbnMvc3RyZWFrJyk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2VzIGluIHsgZGF0YTogey4uLn0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGEgfHwgeyBjdXJyZW50U3RyZWFrOiAwLCBsb25nZXN0U3RyZWFrOiAwLCB0b3RhbENoZWNrSW5zOiAwIH07XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdXNlcidzIG1vb2QgbG9nc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VNb29kTG9ncygpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb29kTG9ncyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPE1vb2RMb2dSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5tb29kTG9ncygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPE1vb2RMb2dSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9zdXBwb3J0L21vb2QnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVzZXIncyB3aW5zXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVdpbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlV2lucyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFdpblJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLndpbnMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxXaW5SZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9zdXBwb3J0L3dpbnMnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVzZXIncyB3aW5zIGdyb3VwZWQgYnkgY2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlV2luc0J5Q2F0ZWdvcnkoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlV2luc0J5Q2F0ZWdvcnkoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxXaW5zQnlDYXRlZ29yeVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy53aW5zQnlDYXRlZ29yeSgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFdpbnNCeUNhdGVnb3J5W10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvd2lucy9ieS1jYXRlZ29yeScpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdXNlcidzIGhhYml0c1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VIYWJpdHMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSGFiaXRzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8SGFiaXRSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxIYWJpdFJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvaGFiaXRzJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB1c2VyJ3MgcmVmbGVjdGlvbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlUmVmbGVjdGlvbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmbGVjdGlvbnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxSZWZsZWN0aW9uUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogc3VwcG9ydEtleXMucmVmbGVjdGlvbnMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxSZWZsZWN0aW9uUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvc3VwcG9ydC9yZWZsZWN0aW9ucycpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Users Query Hooks
3
+ *
4
+ * TanStack Query hooks for user-related read operations.
5
+ * These hooks handle fetching user data, profiles, library items, and subscriptions.
6
+ *
7
+ * @module api/queries/users
8
+ */
9
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
10
+ import type { UserResponse, UserPublicResponse, LibraryContentResponse, LibraryProgressResponse, OfferResponse } from '../types';
11
+ /**
12
+ * Query key factory for user-related queries
13
+ * @see https://tkdodo.eu/blog/effective-react-query-keys
14
+ */
15
+ export declare const userKeys: {
16
+ all: readonly ["users"];
17
+ me: () => readonly ["users", "me"];
18
+ detail: (id: string) => readonly ["users", "detail", string];
19
+ public: (id: string) => readonly ["users", "public", string];
20
+ library: {
21
+ all: () => readonly ["users", "me", "library"];
22
+ bookmarks: () => readonly ["users", "me", "library", "bookmarks"];
23
+ progress: () => readonly ["users", "me", "library", "progress"];
24
+ };
25
+ offers: {
26
+ all: () => readonly ["users", "me", "offers"];
27
+ redeemed: () => readonly ["users", "me", "offers", "redeemed"];
28
+ };
29
+ subscription: () => readonly ["users", "me", "subscription"];
30
+ };
31
+ /**
32
+ * Get current user's profile
33
+ *
34
+ * @description
35
+ * Retrieves the currently authenticated user's complete profile information.
36
+ * Requires a valid access token to be set via the SDK configuration.
37
+ *
38
+ * @endpoint GET /api/v1/users/me
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * import { useCurrentUser } from '@growsober/sdk';
43
+ *
44
+ * function ProfileScreen() {
45
+ * const { data: user, isLoading, error } = useCurrentUser();
46
+ *
47
+ * if (isLoading) return <Spinner />;
48
+ * if (error) return <Error message={error.message} />;
49
+ * if (!user) return <NotFound />;
50
+ *
51
+ * return (
52
+ * <div>
53
+ * <h1>{user.name}</h1>
54
+ * <p>{user.email}</p>
55
+ * <p>Sober Since: {user.soberDate}</p>
56
+ * </div>
57
+ * );
58
+ * }
59
+ * ```
60
+ *
61
+ * @example
62
+ * With custom options:
63
+ * ```tsx
64
+ * const { data: user } = useCurrentUser({
65
+ * refetchOnMount: false,
66
+ * staleTime: 5 * 60 * 1000, // 5 minutes
67
+ * });
68
+ * ```
69
+ *
70
+ * @param options - TanStack Query options for customizing the query behavior
71
+ * @returns TanStack Query result with user data
72
+ */
73
+ export declare function useCurrentUser(options?: Omit<UseQueryOptions<UserResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<UserResponse>;
74
+ /**
75
+ * Get a specific user's full profile by ID
76
+ *
77
+ * @description
78
+ * Retrieves a user's complete profile information by their ID.
79
+ * This may include private information depending on the requesting user's permissions.
80
+ *
81
+ * @endpoint GET /api/v1/users/{id}
82
+ *
83
+ * @example
84
+ * ```tsx
85
+ * import { useUser } from '@growsober/sdk';
86
+ *
87
+ * function UserProfileScreen({ userId }: { userId: string }) {
88
+ * const { data: user, isLoading } = useUser(userId);
89
+ *
90
+ * if (isLoading) return <Spinner />;
91
+ *
92
+ * return (
93
+ * <div>
94
+ * <Avatar src={user.avatar} />
95
+ * <h1>{user.name}</h1>
96
+ * <p>{user.bio}</p>
97
+ * </div>
98
+ * );
99
+ * }
100
+ * ```
101
+ *
102
+ * @example
103
+ * With conditional fetching:
104
+ * ```tsx
105
+ * const { data: user } = useUser(userId, {
106
+ * enabled: !!userId, // Only fetch when userId is defined
107
+ * });
108
+ * ```
109
+ *
110
+ * @param id - The user ID to fetch
111
+ * @param options - TanStack Query options for customizing the query behavior
112
+ * @returns TanStack Query result with user data
113
+ */
114
+ export declare function useUser(id: string, options?: Omit<UseQueryOptions<UserResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<UserResponse>;
115
+ /**
116
+ * Get a user's public profile by ID
117
+ *
118
+ * @description
119
+ * Retrieves a user's public profile information.
120
+ * This endpoint returns only publicly visible information and doesn't require authentication.
121
+ *
122
+ * @endpoint GET /api/v1/users/{id}/public
123
+ *
124
+ * @example
125
+ * ```tsx
126
+ * import { usePublicProfile } from '@growsober/sdk';
127
+ *
128
+ * function PublicProfileCard({ userId }: { userId: string }) {
129
+ * const { data: profile, isLoading } = usePublicProfile(userId);
130
+ *
131
+ * if (isLoading) return <Skeleton />;
132
+ *
133
+ * return (
134
+ * <div>
135
+ * <Avatar src={profile.avatar} />
136
+ * <h2>{profile.displayName}</h2>
137
+ * <p>{profile.city}</p>
138
+ * {profile.soberSince && (
139
+ * <p>Sober since: {new Date(profile.soberSince).toLocaleDateString()}</p>
140
+ * )}
141
+ * </div>
142
+ * );
143
+ * }
144
+ * ```
145
+ *
146
+ * @param id - The user ID to fetch
147
+ * @param options - TanStack Query options for customizing the query behavior
148
+ * @returns TanStack Query result with public profile data
149
+ */
150
+ export declare function usePublicProfile(id: string, options?: Omit<UseQueryOptions<UserPublicResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<UserPublicResponse>;
151
+ /**
152
+ * Get current user's bookmarked library content
153
+ *
154
+ * @description
155
+ * Retrieves all library content (articles, videos, podcasts, etc.) that the user has bookmarked.
156
+ * This allows users to save content for later reading/viewing.
157
+ *
158
+ * @endpoint GET /api/v1/users/me/library/bookmarks
159
+ *
160
+ * @example
161
+ * ```tsx
162
+ * import { useMyBookmarks } from '@growsober/sdk';
163
+ *
164
+ * function BookmarksScreen() {
165
+ * const { data: bookmarks, isLoading } = useMyBookmarks();
166
+ *
167
+ * if (isLoading) return <Loading />;
168
+ *
169
+ * return (
170
+ * <div>
171
+ * <h1>My Saved Content</h1>
172
+ * {bookmarks?.map(content => (
173
+ * <ContentCard key={content.id} content={content} />
174
+ * ))}
175
+ * </div>
176
+ * );
177
+ * }
178
+ * ```
179
+ *
180
+ * @example
181
+ * With auto-refresh:
182
+ * ```tsx
183
+ * const { data: bookmarks } = useMyBookmarks({
184
+ * refetchInterval: 60000, // Refresh every minute
185
+ * });
186
+ * ```
187
+ *
188
+ * @param options - TanStack Query options for customizing the query behavior
189
+ * @returns TanStack Query result with array of bookmarked content
190
+ */
191
+ export declare function useMyBookmarks(options?: Omit<UseQueryOptions<LibraryContentResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<LibraryContentResponse[]>;
192
+ /**
193
+ * Get current user's library content progress
194
+ *
195
+ * @description
196
+ * Retrieves the user's progress on library content items.
197
+ * Tracks which content has been started, completed, or partially viewed/read.
198
+ *
199
+ * @endpoint GET /api/v1/users/me/library/progress
200
+ *
201
+ * @example
202
+ * ```tsx
203
+ * import { useMyProgress } from '@growsober/sdk';
204
+ *
205
+ * function LibraryProgressScreen() {
206
+ * const { data: progress, isLoading } = useMyProgress();
207
+ *
208
+ * if (isLoading) return <Loading />;
209
+ *
210
+ * const completed = progress?.filter(p => p.completed) || [];
211
+ * const inProgress = progress?.filter(p => !p.completed && p.progress > 0) || [];
212
+ *
213
+ * return (
214
+ * <div>
215
+ * <h2>Completed: {completed.length}</h2>
216
+ * <h2>In Progress: {inProgress.length}</h2>
217
+ * </div>
218
+ * );
219
+ * }
220
+ * ```
221
+ *
222
+ * @example
223
+ * Check progress for specific content:
224
+ * ```tsx
225
+ * function ContentProgress({ contentId }: { contentId: string }) {
226
+ * const { data: progress } = useMyProgress();
227
+ * const contentProgress = progress?.find(p => p.contentId === contentId);
228
+ *
229
+ * return (
230
+ * <ProgressBar
231
+ * value={contentProgress?.progress || 0}
232
+ * max={100}
233
+ * />
234
+ * );
235
+ * }
236
+ * ```
237
+ *
238
+ * @param options - TanStack Query options for customizing the query behavior
239
+ * @returns TanStack Query result with array of progress records
240
+ */
241
+ export declare function useMyProgress(options?: Omit<UseQueryOptions<LibraryProgressResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<LibraryProgressResponse[]>;
242
+ /**
243
+ * Get current user's redeemed offers
244
+ *
245
+ * @description
246
+ * Retrieves all offers/deals that the user has redeemed.
247
+ * Shows history of partner offers used by the user.
248
+ *
249
+ * @endpoint GET /api/v1/users/me/offers/redeemed
250
+ *
251
+ * @example
252
+ * ```tsx
253
+ * import { useMyRedeemedOffers } from '@growsober/sdk';
254
+ *
255
+ * function RedeemedOffersScreen() {
256
+ * const { data: offers, isLoading } = useMyRedeemedOffers();
257
+ *
258
+ * if (isLoading) return <Loading />;
259
+ *
260
+ * return (
261
+ * <div>
262
+ * <h1>My Redeemed Offers</h1>
263
+ * {offers?.map(offer => (
264
+ * <div key={offer.id}>
265
+ * <h3>{offer.title}</h3>
266
+ * <p>Redeemed: {new Date(offer.redeemedAt).toLocaleDateString()}</p>
267
+ * <p>Code: {offer.code}</p>
268
+ * </div>
269
+ * ))}
270
+ * </div>
271
+ * );
272
+ * }
273
+ * ```
274
+ *
275
+ * @example
276
+ * Check if specific offer was redeemed:
277
+ * ```tsx
278
+ * function OfferCard({ offerId }: { offerId: string }) {
279
+ * const { data: redeemedOffers } = useMyRedeemedOffers();
280
+ * const isRedeemed = redeemedOffers?.some(o => o.id === offerId);
281
+ *
282
+ * return (
283
+ * <button disabled={isRedeemed}>
284
+ * {isRedeemed ? 'Already Redeemed' : 'Redeem Offer'}
285
+ * </button>
286
+ * );
287
+ * }
288
+ * ```
289
+ *
290
+ * @param options - TanStack Query options for customizing the query behavior
291
+ * @returns TanStack Query result with array of redeemed offers
292
+ */
293
+ export declare function useMyRedeemedOffers(options?: Omit<UseQueryOptions<OfferResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<OfferResponse[]>;