@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,320 @@
1
+ "use strict";
2
+ /**
3
+ * Admin Query Hooks
4
+ *
5
+ * TanStack Query hooks for admin-related read operations.
6
+ * These hooks handle fetching data for the admin dashboard including
7
+ * users, hubs, events, businesses, content, and analytics.
8
+ *
9
+ * @module api/queries/admin
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.adminKeys = void 0;
13
+ exports.useAdminDashboard = useAdminDashboard;
14
+ exports.useAdminAnalytics = useAdminAnalytics;
15
+ exports.useAdminUsers = useAdminUsers;
16
+ exports.useAdminUser = useAdminUser;
17
+ exports.useAdminHubs = useAdminHubs;
18
+ exports.useAdminHub = useAdminHub;
19
+ exports.useAdminEvents = useAdminEvents;
20
+ exports.useAdminEvent = useAdminEvent;
21
+ exports.useAdminBusinesses = useAdminBusinesses;
22
+ exports.useAdminBusiness = useAdminBusiness;
23
+ exports.useAdminContent = useAdminContent;
24
+ exports.useAdminContentItem = useAdminContentItem;
25
+ const react_query_1 = require("@tanstack/react-query");
26
+ const client_1 = require("../client");
27
+ // ============================================================================
28
+ // QUERY KEYS
29
+ // ============================================================================
30
+ exports.adminKeys = {
31
+ all: ['admin'],
32
+ dashboard: () => [...exports.adminKeys.all, 'dashboard'],
33
+ analytics: (period) => [...exports.adminKeys.all, 'analytics', period],
34
+ users: {
35
+ all: () => [...exports.adminKeys.all, 'users'],
36
+ list: (filters) => [...exports.adminKeys.users.all(), 'list', filters],
37
+ detail: (id) => [...exports.adminKeys.users.all(), 'detail', id],
38
+ },
39
+ hubs: {
40
+ all: () => [...exports.adminKeys.all, 'hubs'],
41
+ list: (filters) => [...exports.adminKeys.hubs.all(), 'list', filters],
42
+ detail: (id) => [...exports.adminKeys.hubs.all(), 'detail', id],
43
+ },
44
+ events: {
45
+ all: () => [...exports.adminKeys.all, 'events'],
46
+ list: (filters) => [...exports.adminKeys.events.all(), 'list', filters],
47
+ detail: (id) => [...exports.adminKeys.events.all(), 'detail', id],
48
+ },
49
+ businesses: {
50
+ all: () => [...exports.adminKeys.all, 'businesses'],
51
+ list: (filters) => [...exports.adminKeys.businesses.all(), 'list', filters],
52
+ detail: (id) => [...exports.adminKeys.businesses.all(), 'detail', id],
53
+ },
54
+ content: {
55
+ all: () => [...exports.adminKeys.all, 'content'],
56
+ list: (filters) => [...exports.adminKeys.content.all(), 'list', filters],
57
+ detail: (id) => [...exports.adminKeys.content.all(), 'detail', id],
58
+ },
59
+ };
60
+ // ============================================================================
61
+ // DASHBOARD & ANALYTICS
62
+ // ============================================================================
63
+ /**
64
+ * Get admin dashboard statistics
65
+ *
66
+ * @description
67
+ * Retrieves key metrics for the admin dashboard including
68
+ * user counts, hub stats, event stats, and revenue data.
69
+ *
70
+ * @endpoint GET /api/v1/admin/dashboard
71
+ *
72
+ * @example
73
+ * ```tsx
74
+ * import { useAdminDashboard } from '@growsober/sdk';
75
+ *
76
+ * function AdminDashboard() {
77
+ * const { data: stats, isLoading } = useAdminDashboard();
78
+ *
79
+ * if (isLoading) return <Spinner />;
80
+ *
81
+ * return (
82
+ * <div>
83
+ * <StatCard label="Total Users" value={stats.totalUsers} />
84
+ * <StatCard label="Active Users" value={stats.activeUsers} />
85
+ * <StatCard label="Premium Users" value={stats.premiumUsers} />
86
+ * <StatCard label="Revenue This Month" value={stats.revenue.thisMonth} />
87
+ * </div>
88
+ * );
89
+ * }
90
+ * ```
91
+ */
92
+ function useAdminDashboard(options) {
93
+ return (0, react_query_1.useQuery)({
94
+ queryKey: exports.adminKeys.dashboard(),
95
+ queryFn: async () => {
96
+ const client = (0, client_1.getApiClient)();
97
+ const response = await client.get('/api/v1/admin/dashboard');
98
+ return response.data;
99
+ },
100
+ ...options,
101
+ });
102
+ }
103
+ /**
104
+ * Get admin analytics data
105
+ *
106
+ * @description
107
+ * Retrieves detailed analytics data for charts and reports.
108
+ *
109
+ * @endpoint GET /api/v1/admin/analytics
110
+ *
111
+ * @example
112
+ * ```tsx
113
+ * import { useAdminAnalytics } from '@growsober/sdk';
114
+ *
115
+ * function AnalyticsPage() {
116
+ * const { data: analytics } = useAdminAnalytics('30d');
117
+ *
118
+ * return (
119
+ * <div>
120
+ * <LineChart data={analytics?.userGrowth} />
121
+ * <BarChart data={analytics?.eventAttendance} />
122
+ * </div>
123
+ * );
124
+ * }
125
+ * ```
126
+ */
127
+ function useAdminAnalytics(period, options) {
128
+ return (0, react_query_1.useQuery)({
129
+ queryKey: exports.adminKeys.analytics(period),
130
+ queryFn: async () => {
131
+ const client = (0, client_1.getApiClient)();
132
+ const response = await client.get('/api/v1/admin/analytics', {
133
+ params: { period },
134
+ });
135
+ return response.data;
136
+ },
137
+ ...options,
138
+ });
139
+ }
140
+ // ============================================================================
141
+ // USER MANAGEMENT
142
+ // ============================================================================
143
+ /**
144
+ * List users for admin
145
+ *
146
+ * @endpoint GET /api/v1/admin/users
147
+ */
148
+ function useAdminUsers(filters, options) {
149
+ return (0, react_query_1.useQuery)({
150
+ queryKey: exports.adminKeys.users.list(filters),
151
+ queryFn: async () => {
152
+ const client = (0, client_1.getApiClient)();
153
+ const response = await client.get('/api/v1/admin/users', { params: filters });
154
+ return response.data;
155
+ },
156
+ ...options,
157
+ });
158
+ }
159
+ /**
160
+ * Get user detail for admin
161
+ *
162
+ * @endpoint GET /api/v1/admin/users/{id}
163
+ */
164
+ function useAdminUser(id, options) {
165
+ return (0, react_query_1.useQuery)({
166
+ queryKey: exports.adminKeys.users.detail(id),
167
+ queryFn: async () => {
168
+ const client = (0, client_1.getApiClient)();
169
+ const response = await client.get(`/api/v1/admin/users/${id}`);
170
+ return response.data;
171
+ },
172
+ enabled: !!id,
173
+ ...options,
174
+ });
175
+ }
176
+ // ============================================================================
177
+ // HUB MANAGEMENT
178
+ // ============================================================================
179
+ /**
180
+ * List hubs for admin
181
+ *
182
+ * @endpoint GET /api/v1/admin/hubs
183
+ */
184
+ function useAdminHubs(filters, options) {
185
+ return (0, react_query_1.useQuery)({
186
+ queryKey: exports.adminKeys.hubs.list(filters),
187
+ queryFn: async () => {
188
+ const client = (0, client_1.getApiClient)();
189
+ const response = await client.get('/api/v1/admin/hubs', { params: filters });
190
+ return response.data;
191
+ },
192
+ ...options,
193
+ });
194
+ }
195
+ /**
196
+ * Get hub detail for admin
197
+ *
198
+ * @endpoint GET /api/v1/admin/hubs/{id}
199
+ */
200
+ function useAdminHub(id, options) {
201
+ return (0, react_query_1.useQuery)({
202
+ queryKey: exports.adminKeys.hubs.detail(id),
203
+ queryFn: async () => {
204
+ const client = (0, client_1.getApiClient)();
205
+ const response = await client.get(`/api/v1/admin/hubs/${id}`);
206
+ return response.data;
207
+ },
208
+ enabled: !!id,
209
+ ...options,
210
+ });
211
+ }
212
+ // ============================================================================
213
+ // EVENT MANAGEMENT
214
+ // ============================================================================
215
+ /**
216
+ * List events for admin
217
+ *
218
+ * @endpoint GET /api/v1/admin/events
219
+ */
220
+ function useAdminEvents(filters, options) {
221
+ return (0, react_query_1.useQuery)({
222
+ queryKey: exports.adminKeys.events.list(filters),
223
+ queryFn: async () => {
224
+ const client = (0, client_1.getApiClient)();
225
+ const response = await client.get('/api/v1/admin/events', { params: filters });
226
+ return response.data;
227
+ },
228
+ ...options,
229
+ });
230
+ }
231
+ /**
232
+ * Get event detail for admin
233
+ *
234
+ * @endpoint GET /api/v1/admin/events/{id}
235
+ */
236
+ function useAdminEvent(id, options) {
237
+ return (0, react_query_1.useQuery)({
238
+ queryKey: exports.adminKeys.events.detail(id),
239
+ queryFn: async () => {
240
+ const client = (0, client_1.getApiClient)();
241
+ const response = await client.get(`/api/v1/admin/events/${id}`);
242
+ return response.data;
243
+ },
244
+ enabled: !!id,
245
+ ...options,
246
+ });
247
+ }
248
+ // ============================================================================
249
+ // BUSINESS MANAGEMENT
250
+ // ============================================================================
251
+ /**
252
+ * List businesses for admin
253
+ *
254
+ * @endpoint GET /api/v1/admin/businesses
255
+ */
256
+ function useAdminBusinesses(filters, options) {
257
+ return (0, react_query_1.useQuery)({
258
+ queryKey: exports.adminKeys.businesses.list(filters),
259
+ queryFn: async () => {
260
+ const client = (0, client_1.getApiClient)();
261
+ const response = await client.get('/api/v1/admin/businesses', { params: filters });
262
+ return response.data;
263
+ },
264
+ ...options,
265
+ });
266
+ }
267
+ /**
268
+ * Get business detail for admin
269
+ *
270
+ * @endpoint GET /api/v1/admin/businesses/{id}
271
+ */
272
+ function useAdminBusiness(id, options) {
273
+ return (0, react_query_1.useQuery)({
274
+ queryKey: exports.adminKeys.businesses.detail(id),
275
+ queryFn: async () => {
276
+ const client = (0, client_1.getApiClient)();
277
+ const response = await client.get(`/api/v1/admin/businesses/${id}`);
278
+ return response.data;
279
+ },
280
+ enabled: !!id,
281
+ ...options,
282
+ });
283
+ }
284
+ // ============================================================================
285
+ // CONTENT MANAGEMENT
286
+ // ============================================================================
287
+ /**
288
+ * List content for admin
289
+ *
290
+ * @endpoint GET /api/v1/admin/content
291
+ */
292
+ function useAdminContent(filters, options) {
293
+ return (0, react_query_1.useQuery)({
294
+ queryKey: exports.adminKeys.content.list(filters),
295
+ queryFn: async () => {
296
+ const client = (0, client_1.getApiClient)();
297
+ const response = await client.get('/api/v1/admin/content', { params: filters });
298
+ return response.data;
299
+ },
300
+ ...options,
301
+ });
302
+ }
303
+ /**
304
+ * Get content detail for admin
305
+ *
306
+ * @endpoint GET /api/v1/admin/content/{id}
307
+ */
308
+ function useAdminContentItem(id, options) {
309
+ return (0, react_query_1.useQuery)({
310
+ queryKey: exports.adminKeys.content.detail(id),
311
+ queryFn: async () => {
312
+ const client = (0, client_1.getApiClient)();
313
+ const response = await client.get(`/api/v1/admin/content/${id}`);
314
+ return response.data;
315
+ },
316
+ enabled: !!id,
317
+ ...options,
318
+ });
319
+ }
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUErS0gsOENBWUM7QUEwQkQsOENBZUM7QUFXRCxzQ0FnQkM7QUFPRCxvQ0FjQztBQVdELG9DQWdCQztBQU9ELGtDQWNDO0FBV0Qsd0NBZ0JDO0FBT0Qsc0NBY0M7QUFXRCxnREFnQkM7QUFPRCw0Q0FjQztBQVdELDBDQW1CQztBQU9ELGtEQWNDO0FBcmRELHVEQUFrRjtBQUNsRixzQ0FBeUM7QUFzR3pDLCtFQUErRTtBQUMvRSxhQUFhO0FBQ2IsK0VBQStFO0FBRWxFLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBVTtJQUN2QixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBVTtJQUN6RCxTQUFTLEVBQUUsQ0FBQyxNQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFVO0lBQ2hGLEtBQUssRUFBRTtRQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFVO1FBQy9DLElBQUksRUFBRSxDQUFDLE9BQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFVO1FBQzFGLE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQVU7S0FDMUU7SUFDRCxJQUFJLEVBQUU7UUFDSixHQUFHLEVBQUUsR0FBRyxF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O1FBQ2QsUUFBUSxFQUFFLGlCQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekMsT0FBTyxFQUFFLEtBQUssSUFBd0QsRUFBRTtZQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQy9CLHVCQUF1QixFQUN2QixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FDcEIsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsRUFBVSxFQUNWLE9BQStFO0lBRS9FLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGlCQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxFQUFFLEtBQUssSUFBcUMsRUFBRTtZQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQXlCLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQ2IsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWRtaW4gUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3IgYWRtaW4tcmVsYXRlZCByZWFkIG9wZXJhdGlvbnMuXG4gKiBUaGVzZSBob29rcyBoYW5kbGUgZmV0Y2hpbmcgZGF0YSBmb3IgdGhlIGFkbWluIGRhc2hib2FyZCBpbmNsdWRpbmdcbiAqIHVzZXJzLCBodWJzLCBldmVudHMsIGJ1c2luZXNzZXMsIGNvbnRlbnQsIGFuZCBhbmFseXRpY3MuXG4gKlxuICogQG1vZHVsZSBhcGkvcXVlcmllcy9hZG1pblxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIFVzZXJSZXNwb25zZSxcbiAgSHViUmVzcG9uc2UsXG4gIEV2ZW50UmVzcG9uc2UsXG4gIEJ1c2luZXNzUmVzcG9uc2UsXG4gIExpYnJhcnlDb250ZW50UmVzcG9uc2UsXG59IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQURNSU4gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBZG1pbkRhc2hib2FyZFN0YXRzIHtcbiAgdG90YWxVc2VyczogbnVtYmVyO1xuICBhY3RpdmVVc2VyczogbnVtYmVyO1xuICBuZXdVc2Vyc1RvZGF5OiBudW1iZXI7XG4gIG5ld1VzZXJzVGhpc1dlZWs6IG51bWJlcjtcbiAgdG90YWxIdWJzOiBudW1iZXI7XG4gIHRvdGFsRXZlbnRzOiBudW1iZXI7XG4gIHVwY29taW5nRXZlbnRzOiBudW1iZXI7XG4gIHRvdGFsQnVzaW5lc3NlczogbnVtYmVyO1xuICB2ZXJpZmllZEJ1c2luZXNzZXM6IG51bWJlcjtcbiAgcHJlbWl1bVVzZXJzOiBudW1iZXI7XG4gIHJldmVudWU6IHtcbiAgICB0b2RheTogbnVtYmVyO1xuICAgIHRoaXNXZWVrOiBudW1iZXI7XG4gICAgdGhpc01vbnRoOiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRtaW5BbmFseXRpY3NEYXRhIHtcbiAgcGVyaW9kOiBzdHJpbmc7XG4gIHVzZXJHcm93dGg6IEFycmF5PHsgZGF0ZTogc3RyaW5nOyBjb3VudDogbnVtYmVyIH0+O1xuICBldmVudEF0dGVuZGFuY2U6IEFycmF5PHsgZGF0ZTogc3RyaW5nOyBjb3VudDogbnVtYmVyIH0+O1xuICBodWJBY3Rpdml0eTogQXJyYXk8eyBkYXRlOiBzdHJpbmc7IGNvdW50OiBudW1iZXIgfT47XG4gIHJldmVudWU6IEFycmF5PHsgZGF0ZTogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB9PjtcbiAgdG9wSHViczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1lbWJlckNvdW50OiBudW1iZXIgfT47XG4gIHRvcEV2ZW50czogQXJyYXk8eyBpZDogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBhdHRlbmRlZUNvdW50OiBudW1iZXIgfT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVkUmVzcG9uc2U8VD4ge1xuICBkYXRhOiBUW107XG4gIG1ldGE6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZG1pblVzZXJGaWx0ZXJzIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHNlYXJjaD86IHN0cmluZztcbiAgc3RhdHVzPzogJ2FjdGl2ZScgfCAnc3VzcGVuZGVkJyB8ICdkZWxldGVkJztcbiAgaXNQcmVtaXVtPzogYm9vbGVhbjtcbiAgc29ydEJ5Pzogc3RyaW5nO1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZG1pbkh1YkZpbHRlcnMge1xuICBwYWdlPzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgc2VhcmNoPzogc3RyaW5nO1xuICBzdGF0dXM/OiAnYWN0aXZlJyB8ICdpbmFjdGl2ZSc7XG4gIHNvcnRCeT86IHN0cmluZztcbiAgc29ydE9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRtaW5FdmVudEZpbHRlcnMge1xuICBwYWdlPzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgc2VhcmNoPzogc3RyaW5nO1xuICBzdGF0dXM/OiAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCcgfCAnY2FuY2VsbGVkJztcbiAgaHViSWQ/OiBzdHJpbmc7XG4gIHVwY29taW5nPzogYm9vbGVhbjtcbiAgc29ydEJ5Pzogc3RyaW5nO1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZG1pbkJ1c2luZXNzRmlsdGVycyB7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBzZWFyY2g/OiBzdHJpbmc7XG4gIGlzVmVyaWZpZWQ/OiBib29sZWFuO1xuICB0eXBlPzogc3RyaW5nO1xuICBzb3J0Qnk/OiBzdHJpbmc7XG4gIHNvcnRPcmRlcj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkbWluQ29udGVudEZpbHRlcnMge1xuICBwYWdlPzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgc2VhcmNoPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgaXNGZWF0dXJlZD86IGJvb2xlYW47XG4gIHNvcnRCeT86IHN0cmluZztcbiAgc29ydE9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IGFkbWluS2V5cyA9IHtcbiAgYWxsOiBbJ2FkbWluJ10gYXMgY29uc3QsXG4gIGRhc2hib2FyZDogKCkgPT4gWy4uLmFkbWluS2V5cy5hbGwsICdkYXNoYm9hcmQnXSBhcyBjb25zdCxcbiAgYW5hbHl0aWNzOiAocGVyaW9kPzogc3RyaW5nKSA9PiBbLi4uYWRtaW5LZXlzLmFsbCwgJ2FuYWx5dGljcycsIHBlcmlvZF0gYXMgY29uc3QsXG4gIHVzZXJzOiB7XG4gICAgYWxsOiAoKSA9PiBbLi4uYWRtaW5LZXlzLmFsbCwgJ3VzZXJzJ10gYXMgY29uc3QsXG4gICAgbGlzdDogKGZpbHRlcnM/OiBBZG1pblVzZXJGaWx0ZXJzKSA9PiBbLi4uYWRtaW5LZXlzLnVzZXJzLmFsbCgpLCAnbGlzdCcsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICAgIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi5hZG1pbktleXMudXNlcnMuYWxsKCksICdkZXRhaWwnLCBpZF0gYXMgY29uc3QsXG4gIH0sXG4gIGh1YnM6IHtcbiAgICBhbGw6ICgpID0+IFsuLi5hZG1pbktleXMuYWxsLCAnaHVicyddIGFzIGNvbnN0LFxuICAgIGxpc3Q6IChmaWx0ZXJzPzogQWRtaW5IdWJGaWx0ZXJzKSA9PiBbLi4uYWRtaW5LZXlzLmh1YnMuYWxsKCksICdsaXN0JywgZmlsdGVyc10gYXMgY29uc3QsXG4gICAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLmFkbWluS2V5cy5odWJzLmFsbCgpLCAnZGV0YWlsJywgaWRdIGFzIGNvbnN0LFxuICB9LFxuICBldmVudHM6IHtcbiAgICBhbGw6ICgpID0+IFsuLi5hZG1pbktleXMuYWxsLCAnZXZlbnRzJ10gYXMgY29uc3QsXG4gICAgbGlzdDogKGZpbHRlcnM/OiBBZG1pbkV2ZW50RmlsdGVycykgPT4gWy4uLmFkbWluS2V5cy5ldmVudHMuYWxsKCksICdsaXN0JywgZmlsdGVyc10gYXMgY29uc3QsXG4gICAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLmFkbWluS2V5cy5ldmVudHMuYWxsKCksICdkZXRhaWwnLCBpZF0gYXMgY29uc3QsXG4gIH0sXG4gIGJ1c2luZXNzZXM6IHtcbiAgICBhbGw6ICgpID0+IFsuLi5hZG1pbktleXMuYWxsLCAnYnVzaW5lc3NlcyddIGFzIGNvbnN0LFxuICAgIGxpc3Q6IChmaWx0ZXJzPzogQWRtaW5CdXNpbmVzc0ZpbHRlcnMpID0+XG4gICAgICBbLi4uYWRtaW5LZXlzLmJ1c2luZXNzZXMuYWxsKCksICdsaXN0JywgZmlsdGVyc10gYXMgY29uc3QsXG4gICAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLmFkbWluS2V5cy5idXNpbmVzc2VzLmFsbCgpLCAnZGV0YWlsJywgaWRdIGFzIGNvbnN0LFxuICB9LFxuICBjb250ZW50OiB7XG4gICAgYWxsOiAoKSA9PiBbLi4uYWRtaW5LZXlzLmFsbCwgJ2NvbnRlbnQnXSBhcyBjb25zdCxcbiAgICBsaXN0OiAoZmlsdGVycz86IEFkbWluQ29udGVudEZpbHRlcnMpID0+XG4gICAgICBbLi4uYWRtaW5LZXlzLmNvbnRlbnQuYWxsKCksICdsaXN0JywgZmlsdGVyc10gYXMgY29uc3QsXG4gICAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLmFkbWluS2V5cy5jb250ZW50LmFsbCgpLCAnZGV0YWlsJywgaWRdIGFzIGNvbnN0LFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gREFTSEJPQVJEICYgQU5BTFlUSUNTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGFkbWluIGRhc2hib2FyZCBzdGF0aXN0aWNzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXRyaWV2ZXMga2V5IG1ldHJpY3MgZm9yIHRoZSBhZG1pbiBkYXNoYm9hcmQgaW5jbHVkaW5nXG4gKiB1c2VyIGNvdW50cywgaHViIHN0YXRzLCBldmVudCBzdGF0cywgYW5kIHJldmVudWUgZGF0YS5cbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvYWRtaW4vZGFzaGJvYXJkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlQWRtaW5EYXNoYm9hcmQgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gQWRtaW5EYXNoYm9hcmQoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YTogc3RhdHMsIGlzTG9hZGluZyB9ID0gdXNlQWRtaW5EYXNoYm9hcmQoKTtcbiAqXG4gKiAgIGlmIChpc0xvYWRpbmcpIHJldHVybiA8U3Bpbm5lciAvPjtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxTdGF0Q2FyZCBsYWJlbD1cIlRvdGFsIFVzZXJzXCIgdmFsdWU9e3N0YXRzLnRvdGFsVXNlcnN9IC8+XG4gKiAgICAgICA8U3RhdENhcmQgbGFiZWw9XCJBY3RpdmUgVXNlcnNcIiB2YWx1ZT17c3RhdHMuYWN0aXZlVXNlcnN9IC8+XG4gKiAgICAgICA8U3RhdENhcmQgbGFiZWw9XCJQcmVtaXVtIFVzZXJzXCIgdmFsdWU9e3N0YXRzLnByZW1pdW1Vc2Vyc30gLz5cbiAqICAgICAgIDxTdGF0Q2FyZCBsYWJlbD1cIlJldmVudWUgVGhpcyBNb250aFwiIHZhbHVlPXtzdGF0cy5yZXZlbnVlLnRoaXNNb250aH0gLz5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRtaW5EYXNoYm9hcmQoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxBZG1pbkRhc2hib2FyZFN0YXRzPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PEFkbWluRGFzaGJvYXJkU3RhdHM+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYWRtaW5LZXlzLmRhc2hib2FyZCgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEFkbWluRGFzaGJvYXJkU3RhdHM+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFkbWluRGFzaGJvYXJkU3RhdHM+KCcvYXBpL3YxL2FkbWluL2Rhc2hib2FyZCcpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYWRtaW4gYW5hbHl0aWNzIGRhdGFcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHJpZXZlcyBkZXRhaWxlZCBhbmFseXRpY3MgZGF0YSBmb3IgY2hhcnRzIGFuZCByZXBvcnRzLlxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9hZG1pbi9hbmFseXRpY3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VBZG1pbkFuYWx5dGljcyB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBBbmFseXRpY3NQYWdlKCkge1xuICogICBjb25zdCB7IGRhdGE6IGFuYWx5dGljcyB9ID0gdXNlQWRtaW5BbmFseXRpY3MoJzMwZCcpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPExpbmVDaGFydCBkYXRhPXthbmFseXRpY3M/LnVzZXJHcm93dGh9IC8+XG4gKiAgICAgICA8QmFyQ2hhcnQgZGF0YT17YW5hbHl0aWNzPy5ldmVudEF0dGVuZGFuY2V9IC8+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkbWluQW5hbHl0aWNzKFxuICBwZXJpb2Q/OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxBZG1pbkFuYWx5dGljc0RhdGE+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8QWRtaW5BbmFseXRpY3NEYXRhPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGFkbWluS2V5cy5hbmFseXRpY3MocGVyaW9kKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxBZG1pbkFuYWx5dGljc0RhdGE+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFkbWluQW5hbHl0aWNzRGF0YT4oJy9hcGkvdjEvYWRtaW4vYW5hbHl0aWNzJywge1xuICAgICAgICBwYXJhbXM6IHsgcGVyaW9kIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVTRVIgTUFOQUdFTUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIExpc3QgdXNlcnMgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL3VzZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZG1pblVzZXJzKFxuICBmaWx0ZXJzPzogQWRtaW5Vc2VyRmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UGFnaW5hdGVkUmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhZG1pbktleXMudXNlcnMubGlzdChmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxQYWdpbmF0ZWRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PihcbiAgICAgICAgJy9hcGkvdjEvYWRtaW4vdXNlcnMnLFxuICAgICAgICB7IHBhcmFtczogZmlsdGVycyB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciBkZXRhaWwgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL3VzZXJzL3tpZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkbWluVXNlcihcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFVzZXJSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxVc2VyUmVzcG9uc2U+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYWRtaW5LZXlzLnVzZXJzLmRldGFpbChpZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8VXNlclJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxVc2VyUmVzcG9uc2U+KGAvYXBpL3YxL2FkbWluL3VzZXJzLyR7aWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhaWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhVQiBNQU5BR0VNRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTGlzdCBodWJzIGZvciBhZG1pblxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9hZG1pbi9odWJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZG1pbkh1YnMoXG4gIGZpbHRlcnM/OiBBZG1pbkh1YkZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRSZXNwb25zZTxIdWJSZXNwb25zZT4+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UGFnaW5hdGVkUmVzcG9uc2U8SHViUmVzcG9uc2U+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGFkbWluS2V5cy5odWJzLmxpc3QoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8SHViUmVzcG9uc2U+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxQYWdpbmF0ZWRSZXNwb25zZTxIdWJSZXNwb25zZT4+KFxuICAgICAgICAnL2FwaS92MS9hZG1pbi9odWJzJyxcbiAgICAgICAgeyBwYXJhbXM6IGZpbHRlcnMgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGh1YiBkZXRhaWwgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL2h1YnMve2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRtaW5IdWIoXG4gIGlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxIdWJSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxIdWJSZXNwb25zZT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhZG1pbktleXMuaHVicy5kZXRhaWwoaWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEh1YlJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxIdWJSZXNwb25zZT4oYC9hcGkvdjEvYWRtaW4vaHVicy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFVkVOVCBNQU5BR0VNRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTGlzdCBldmVudHMgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL2V2ZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRtaW5FdmVudHMoXG4gIGZpbHRlcnM/OiBBZG1pbkV2ZW50RmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZFJlc3BvbnNlPEV2ZW50UmVzcG9uc2U+PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPEV2ZW50UmVzcG9uc2U+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGFkbWluS2V5cy5ldmVudHMubGlzdChmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxFdmVudFJlc3BvbnNlPj4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8UGFnaW5hdGVkUmVzcG9uc2U8RXZlbnRSZXNwb25zZT4+KFxuICAgICAgICAnL2FwaS92MS9hZG1pbi9ldmVudHMnLFxuICAgICAgICB7IHBhcmFtczogZmlsdGVycyB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgZXZlbnQgZGV0YWlsIGZvciBhZG1pblxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9hZG1pbi9ldmVudHMve2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRtaW5FdmVudChcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEV2ZW50UmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8RXZlbnRSZXNwb25zZT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhZG1pbktleXMuZXZlbnRzLmRldGFpbChpZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8RXZlbnRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8RXZlbnRSZXNwb25zZT4oYC9hcGkvdjEvYWRtaW4vZXZlbnRzLyR7aWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhaWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJVU0lORVNTIE1BTkFHRU1FTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMaXN0IGJ1c2luZXNzZXMgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL2J1c2luZXNzZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkbWluQnVzaW5lc3NlcyhcbiAgZmlsdGVycz86IEFkbWluQnVzaW5lc3NGaWx0ZXJzLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUmVzcG9uc2U8QnVzaW5lc3NSZXNwb25zZT4+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UGFnaW5hdGVkUmVzcG9uc2U8QnVzaW5lc3NSZXNwb25zZT4+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYWRtaW5LZXlzLmJ1c2luZXNzZXMubGlzdChmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxCdXNpbmVzc1Jlc3BvbnNlPj4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8UGFnaW5hdGVkUmVzcG9uc2U8QnVzaW5lc3NSZXNwb25zZT4+KFxuICAgICAgICAnL2FwaS92MS9hZG1pbi9idXNpbmVzc2VzJyxcbiAgICAgICAgeyBwYXJhbXM6IGZpbHRlcnMgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGJ1c2luZXNzIGRldGFpbCBmb3IgYWRtaW5cbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvYWRtaW4vYnVzaW5lc3Nlcy97aWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZG1pbkJ1c2luZXNzKFxuICBpZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8QnVzaW5lc3NSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxCdXNpbmVzc1Jlc3BvbnNlPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGFkbWluS2V5cy5idXNpbmVzc2VzLmRldGFpbChpZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8QnVzaW5lc3NSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QnVzaW5lc3NSZXNwb25zZT4oYC9hcGkvdjEvYWRtaW4vYnVzaW5lc3Nlcy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05URU5UIE1BTkFHRU1FTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMaXN0IGNvbnRlbnQgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL2NvbnRlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkbWluQ29udGVudChcbiAgZmlsdGVycz86IEFkbWluQ29udGVudEZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRSZXNwb25zZTxMaWJyYXJ5Q29udGVudFJlc3BvbnNlPj4sXG4gICAgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJ1xuICA+XG4pOiBVc2VRdWVyeVJlc3VsdDxQYWdpbmF0ZWRSZXNwb25zZTxMaWJyYXJ5Q29udGVudFJlc3BvbnNlPj4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhZG1pbktleXMuY29udGVudC5saXN0KGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPExpYnJhcnlDb250ZW50UmVzcG9uc2U+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxQYWdpbmF0ZWRSZXNwb25zZTxMaWJyYXJ5Q29udGVudFJlc3BvbnNlPj4oXG4gICAgICAgICcvYXBpL3YxL2FkbWluL2NvbnRlbnQnLFxuICAgICAgICB7IHBhcmFtczogZmlsdGVycyB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgY29udGVudCBkZXRhaWwgZm9yIGFkbWluXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2FkbWluL2NvbnRlbnQve2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRtaW5Db250ZW50SXRlbShcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPExpYnJhcnlDb250ZW50UmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8TGlicmFyeUNvbnRlbnRSZXNwb25zZT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhZG1pbktleXMuY29udGVudC5kZXRhaWwoaWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPExpYnJhcnlDb250ZW50UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PExpYnJhcnlDb250ZW50UmVzcG9uc2U+KGAvYXBpL3YxL2FkbWluL2NvbnRlbnQvJHtpZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFpZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,53 @@
1
+ import { UseQueryOptions } from '@tanstack/react-query';
2
+ import type { AmbassadorResponse, AmbassadorLeaderboardResponse, AmbassadorStatus } from '../types';
3
+ export declare const ambassadorKeys: {
4
+ all: readonly ["ambassadors"];
5
+ lists: () => readonly ["ambassadors", "list"];
6
+ list: (filters?: AmbassadorListFilters) => readonly ["ambassadors", "list", AmbassadorListFilters | undefined];
7
+ details: () => readonly ["ambassadors", "detail"];
8
+ detail: (id: string) => readonly ["ambassadors", "detail", string];
9
+ me: () => readonly ["ambassadors", "me"];
10
+ leaderboard: (filters?: LeaderboardFilters) => readonly ["ambassadors", "leaderboard", LeaderboardFilters | undefined];
11
+ pending: () => readonly ["ambassadors", "pending"];
12
+ };
13
+ export interface AmbassadorListFilters {
14
+ page?: number;
15
+ limit?: number;
16
+ hubId?: string;
17
+ status?: AmbassadorStatus;
18
+ isVerified?: boolean;
19
+ isFoundingAmbassador?: boolean;
20
+ }
21
+ export interface LeaderboardFilters {
22
+ limit?: number;
23
+ hubId?: string;
24
+ }
25
+ export interface PaginatedAmbassadorsResponse {
26
+ ambassadors: AmbassadorResponse[];
27
+ meta: {
28
+ total: number;
29
+ page: number;
30
+ limit: number;
31
+ totalPages: number;
32
+ };
33
+ }
34
+ /**
35
+ * Get all ambassadors with pagination and filters
36
+ */
37
+ export declare function useAmbassadors(filters?: AmbassadorListFilters, options?: Omit<UseQueryOptions<PaginatedAmbassadorsResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedAmbassadorsResponse, Error>;
38
+ /**
39
+ * Get ambassador by ID
40
+ */
41
+ export declare function useAmbassador(id: string, options?: Omit<UseQueryOptions<AmbassadorResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<AmbassadorResponse, Error>;
42
+ /**
43
+ * Get current user's ambassador status
44
+ */
45
+ export declare function useMyAmbassador(options?: Omit<UseQueryOptions<AmbassadorResponse | null>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<AmbassadorResponse | null, Error>;
46
+ /**
47
+ * Get ambassador leaderboard
48
+ */
49
+ export declare function useAmbassadorLeaderboard(filters?: LeaderboardFilters, options?: Omit<UseQueryOptions<AmbassadorLeaderboardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<AmbassadorLeaderboardResponse[], Error>;
50
+ /**
51
+ * Get pending ambassador applications (admin)
52
+ */
53
+ export declare function usePendingAmbassadors(options?: Omit<UseQueryOptions<AmbassadorResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<AmbassadorResponse[], Error>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ambassadorKeys = void 0;
4
+ exports.useAmbassadors = useAmbassadors;
5
+ exports.useAmbassador = useAmbassador;
6
+ exports.useMyAmbassador = useMyAmbassador;
7
+ exports.useAmbassadorLeaderboard = useAmbassadorLeaderboard;
8
+ exports.usePendingAmbassadors = usePendingAmbassadors;
9
+ const react_query_1 = require("@tanstack/react-query");
10
+ const client_1 = require("../client");
11
+ // ============================================================================
12
+ // QUERY KEYS
13
+ // ============================================================================
14
+ exports.ambassadorKeys = {
15
+ all: ['ambassadors'],
16
+ lists: () => [...exports.ambassadorKeys.all, 'list'],
17
+ list: (filters) => [...exports.ambassadorKeys.lists(), filters],
18
+ details: () => [...exports.ambassadorKeys.all, 'detail'],
19
+ detail: (id) => [...exports.ambassadorKeys.details(), id],
20
+ me: () => [...exports.ambassadorKeys.all, 'me'],
21
+ leaderboard: (filters) => [...exports.ambassadorKeys.all, 'leaderboard', filters],
22
+ pending: () => [...exports.ambassadorKeys.all, 'pending'],
23
+ };
24
+ // ============================================================================
25
+ // QUERY HOOKS
26
+ // ============================================================================
27
+ /**
28
+ * Get all ambassadors with pagination and filters
29
+ */
30
+ function useAmbassadors(filters, options) {
31
+ return (0, react_query_1.useQuery)({
32
+ queryKey: exports.ambassadorKeys.list(filters),
33
+ queryFn: async () => {
34
+ const client = (0, client_1.getApiClient)();
35
+ const response = await client.get('/api/v1/ambassadors', { params: filters });
36
+ return response.data;
37
+ },
38
+ ...options,
39
+ });
40
+ }
41
+ /**
42
+ * Get ambassador by ID
43
+ */
44
+ function useAmbassador(id, options) {
45
+ return (0, react_query_1.useQuery)({
46
+ queryKey: exports.ambassadorKeys.detail(id),
47
+ queryFn: async () => {
48
+ const client = (0, client_1.getApiClient)();
49
+ const response = await client.get(`/api/v1/ambassadors/${id}`);
50
+ return response.data;
51
+ },
52
+ enabled: !!id && (options?.enabled !== false),
53
+ ...options,
54
+ });
55
+ }
56
+ /**
57
+ * Get current user's ambassador status
58
+ */
59
+ function useMyAmbassador(options) {
60
+ return (0, react_query_1.useQuery)({
61
+ queryKey: exports.ambassadorKeys.me(),
62
+ queryFn: async () => {
63
+ const client = (0, client_1.getApiClient)();
64
+ const response = await client.get('/api/v1/ambassadors/me');
65
+ return response.data;
66
+ },
67
+ ...options,
68
+ });
69
+ }
70
+ /**
71
+ * Get ambassador leaderboard
72
+ */
73
+ function useAmbassadorLeaderboard(filters, options) {
74
+ return (0, react_query_1.useQuery)({
75
+ queryKey: exports.ambassadorKeys.leaderboard(filters),
76
+ queryFn: async () => {
77
+ const client = (0, client_1.getApiClient)();
78
+ const response = await client.get('/api/v1/ambassadors/leaderboard', { params: filters });
79
+ return response.data;
80
+ },
81
+ ...options,
82
+ });
83
+ }
84
+ /**
85
+ * Get pending ambassador applications (admin)
86
+ */
87
+ function usePendingAmbassadors(options) {
88
+ return (0, react_query_1.useQuery)({
89
+ queryKey: exports.ambassadorKeys.pending(),
90
+ queryFn: async () => {
91
+ const client = (0, client_1.getApiClient)();
92
+ const response = await client.get('/api/v1/ambassadors/pending');
93
+ return response.data;
94
+ },
95
+ ...options,
96
+ });
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1iYXNzYWRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvYW1iYXNzYWRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc0RBLHdDQWFDO0FBS0Qsc0NBY0M7QUFLRCwwQ0FZQztBQUtELDREQWFDO0FBS0Qsc0RBWUM7QUExSUQsdURBQWtFO0FBQ2xFLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLGNBQWMsR0FBRztJQUM1QixHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQVU7SUFDN0IsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxzQkFBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDckQsSUFBSSxFQUFFLENBQUMsT0FBK0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLHNCQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQ3hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsc0JBQWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3pELE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLHNCQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFVO0lBQ2xFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsc0JBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFVO0lBQ2hELFdBQVcsRUFBRSxDQUFDLE9BQTRCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxzQkFBYyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFVO0lBQ3ZHLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsc0JBQWMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFVO0NBQzNELENBQUM7QUE4QkYsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwr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LENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IEFtYmFzc2Fkb3JSZXNwb25zZSwgQW1iYXNzYWRvckxlYWRlcmJvYXJkUmVzcG9uc2UsIEFtYmFzc2Fkb3JTdGF0dXMgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IGFtYmFzc2Fkb3JLZXlzID0ge1xuICBhbGw6IFsnYW1iYXNzYWRvcnMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5hbWJhc3NhZG9yS2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogQW1iYXNzYWRvckxpc3RGaWx0ZXJzKSA9PiBbLi4uYW1iYXNzYWRvcktleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5hbWJhc3NhZG9yS2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLmFtYmFzc2Fkb3JLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBtZTogKCkgPT4gWy4uLmFtYmFzc2Fkb3JLZXlzLmFsbCwgJ21lJ10gYXMgY29uc3QsXG4gIGxlYWRlcmJvYXJkOiAoZmlsdGVycz86IExlYWRlcmJvYXJkRmlsdGVycykgPT4gWy4uLmFtYmFzc2Fkb3JLZXlzLmFsbCwgJ2xlYWRlcmJvYXJkJywgZmlsdGVyc10gYXMgY29uc3QsXG4gIHBlbmRpbmc6ICgpID0+IFsuLi5hbWJhc3NhZG9yS2V5cy5hbGwsICdwZW5kaW5nJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtYmFzc2Fkb3JMaXN0RmlsdGVycyB7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBodWJJZD86IHN0cmluZztcbiAgc3RhdHVzPzogQW1iYXNzYWRvclN0YXR1cztcbiAgaXNWZXJpZmllZD86IGJvb2xlYW47XG4gIGlzRm91bmRpbmdBbWJhc3NhZG9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWFkZXJib2FyZEZpbHRlcnMge1xuICBsaW1pdD86IG51bWJlcjtcbiAgaHViSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVkQW1iYXNzYWRvcnNSZXNwb25zZSB7XG4gIGFtYmFzc2Fkb3JzOiBBbWJhc3NhZG9yUmVzcG9uc2VbXTtcbiAgbWV0YToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgdG90YWxQYWdlczogbnVtYmVyO1xuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBhbGwgYW1iYXNzYWRvcnMgd2l0aCBwYWdpbmF0aW9uIGFuZCBmaWx0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBbWJhc3NhZG9ycyhcbiAgZmlsdGVycz86IEFtYmFzc2Fkb3JMaXN0RmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZEFtYmFzc2Fkb3JzUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGFtYmFzc2Fkb3JLZXlzLmxpc3QoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkQW1iYXNzYWRvcnNSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvYW1iYXNzYWRvcnMnLCB7IHBhcmFtczogZmlsdGVycyB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGFtYmFzc2Fkb3IgYnkgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFtYmFzc2Fkb3IoXG4gIGlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxBbWJhc3NhZG9yUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGFtYmFzc2Fkb3JLZXlzLmRldGFpbChpZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8QW1iYXNzYWRvclJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldChgL2FwaS92MS9hbWJhc3NhZG9ycy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkICYmIChvcHRpb25zPy5lbmFibGVkICE9PSBmYWxzZSksXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgdXNlcidzIGFtYmFzc2Fkb3Igc3RhdHVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNeUFtYmFzc2Fkb3IoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxBbWJhc3NhZG9yUmVzcG9uc2UgfCBudWxsPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhbWJhc3NhZG9yS2V5cy5tZSgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEFtYmFzc2Fkb3JSZXNwb25zZSB8IG51bGw+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL2FtYmFzc2Fkb3JzL21lJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbWJhc3NhZG9yIGxlYWRlcmJvYXJkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBbWJhc3NhZG9yTGVhZGVyYm9hcmQoXG4gIGZpbHRlcnM/OiBMZWFkZXJib2FyZEZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxBbWJhc3NhZG9yTGVhZGVyYm9hcmRSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBhbWJhc3NhZG9yS2V5cy5sZWFkZXJib2FyZChmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxBbWJhc3NhZG9yTGVhZGVyYm9hcmRSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9hbWJhc3NhZG9ycy9sZWFkZXJib2FyZCcsIHsgcGFyYW1zOiBmaWx0ZXJzIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgcGVuZGluZyBhbWJhc3NhZG9yIGFwcGxpY2F0aW9ucyAoYWRtaW4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQZW5kaW5nQW1iYXNzYWRvcnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxBbWJhc3NhZG9yUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYW1iYXNzYWRvcktleXMucGVuZGluZygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEFtYmFzc2Fkb3JSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9hbWJhc3NhZG9ycy9wZW5kaW5nJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Auth Query Hooks
3
+ *
4
+ * TanStack Query hooks for authentication-related read operations.
5
+ * These hooks handle fetching current user data and managing cache invalidation.
6
+ *
7
+ * @module api/queries/auth
8
+ */
9
+ /**
10
+ * Query key factory for auth-related queries
11
+ * @see https://tkdodo.eu/blog/effective-react-query-keys
12
+ */
13
+ export declare const authKeys: {
14
+ all: readonly ["auth"];
15
+ me: () => readonly ["auth", "me"];
16
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * Auth Query Hooks
4
+ *
5
+ * TanStack Query hooks for authentication-related read operations.
6
+ * These hooks handle fetching current user data and managing cache invalidation.
7
+ *
8
+ * @module api/queries/auth
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.authKeys = void 0;
12
+ // ============================================================================
13
+ // QUERY KEYS
14
+ // ============================================================================
15
+ /**
16
+ * Query key factory for auth-related queries
17
+ * @see https://tkdodo.eu/blog/effective-react-query-keys
18
+ */
19
+ exports.authKeys = {
20
+ all: ['auth'],
21
+ me: () => [...exports.authKeys.all, 'me'],
22
+ };
23
+ // Note: useCurrentUser is exported from queries/users.ts
24
+ // It uses the /api/v1/users/me endpoint which is the correct endpoint for fetching user data
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOzs7QUFFSCwrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDVSxRQUFBLFFBQVEsR0FBRztJQUN0QixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQVU7SUFDdEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQVU7Q0FDM0MsQ0FBQztBQUVGLHlEQUF5RDtBQUN6RCw2RkFBNkYiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGggUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3IgYXV0aGVudGljYXRpb24tcmVsYXRlZCByZWFkIG9wZXJhdGlvbnMuXG4gKiBUaGVzZSBob29rcyBoYW5kbGUgZmV0Y2hpbmcgY3VycmVudCB1c2VyIGRhdGEgYW5kIG1hbmFnaW5nIGNhY2hlIGludmFsaWRhdGlvbi5cbiAqXG4gKiBAbW9kdWxlIGFwaS9xdWVyaWVzL2F1dGhcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBLRVlTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUXVlcnkga2V5IGZhY3RvcnkgZm9yIGF1dGgtcmVsYXRlZCBxdWVyaWVzXG4gKiBAc2VlIGh0dHBzOi8vdGtkb2RvLmV1L2Jsb2cvZWZmZWN0aXZlLXJlYWN0LXF1ZXJ5LWtleXNcbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhLZXlzID0ge1xuICBhbGw6IFsnYXV0aCddIGFzIGNvbnN0LFxuICBtZTogKCkgPT4gWy4uLmF1dGhLZXlzLmFsbCwgJ21lJ10gYXMgY29uc3QsXG59O1xuXG4vLyBOb3RlOiB1c2VDdXJyZW50VXNlciBpcyBleHBvcnRlZCBmcm9tIHF1ZXJpZXMvdXNlcnMudHNcbi8vIEl0IHVzZXMgdGhlIC9hcGkvdjEvdXNlcnMvbWUgZW5kcG9pbnQgd2hpY2ggaXMgdGhlIGNvcnJlY3QgZW5kcG9pbnQgZm9yIGZldGNoaW5nIHVzZXIgZGF0YVxuIl19