@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.
- package/README.md +276 -0
- package/dist/__tests__/e2e.test.d.ts +7 -0
- package/dist/__tests__/e2e.test.js +472 -0
- package/dist/api/client.d.ts +11 -0
- package/dist/api/client.js +61 -0
- package/dist/api/mutations/admin.d.ts +167 -0
- package/dist/api/mutations/admin.js +326 -0
- package/dist/api/mutations/ambassadors.d.ts +52 -0
- package/dist/api/mutations/ambassadors.js +148 -0
- package/dist/api/mutations/auth.d.ts +267 -0
- package/dist/api/mutations/auth.js +332 -0
- package/dist/api/mutations/bookings.d.ts +59 -0
- package/dist/api/mutations/bookings.js +143 -0
- package/dist/api/mutations/event-chat.d.ts +35 -0
- package/dist/api/mutations/event-chat.js +147 -0
- package/dist/api/mutations/events.d.ts +87 -0
- package/dist/api/mutations/events.js +205 -0
- package/dist/api/mutations/grow90.d.ts +36 -0
- package/dist/api/mutations/grow90.js +132 -0
- package/dist/api/mutations/hubs.d.ts +111 -0
- package/dist/api/mutations/hubs.js +240 -0
- package/dist/api/mutations/index.d.ts +22 -0
- package/dist/api/mutations/index.js +39 -0
- package/dist/api/mutations/jack.d.ts +61 -0
- package/dist/api/mutations/jack.js +104 -0
- package/dist/api/mutations/library.d.ts +67 -0
- package/dist/api/mutations/library.js +168 -0
- package/dist/api/mutations/map.d.ts +153 -0
- package/dist/api/mutations/map.js +181 -0
- package/dist/api/mutations/matching.d.ts +130 -0
- package/dist/api/mutations/matching.js +204 -0
- package/dist/api/mutations/notifications.d.ts +63 -0
- package/dist/api/mutations/notifications.js +106 -0
- package/dist/api/mutations/offers.d.ts +26 -0
- package/dist/api/mutations/offers.js +47 -0
- package/dist/api/mutations/subscriptions.d.ts +127 -0
- package/dist/api/mutations/subscriptions.js +140 -0
- package/dist/api/mutations/support.d.ts +165 -0
- package/dist/api/mutations/support.js +307 -0
- package/dist/api/mutations/users.d.ts +211 -0
- package/dist/api/mutations/users.js +261 -0
- package/dist/api/queries/admin.d.ts +257 -0
- package/dist/api/queries/admin.js +320 -0
- package/dist/api/queries/ambassadors.d.ts +53 -0
- package/dist/api/queries/ambassadors.js +98 -0
- package/dist/api/queries/auth.d.ts +16 -0
- package/dist/api/queries/auth.js +25 -0
- package/dist/api/queries/bookings.d.ts +91 -0
- package/dist/api/queries/bookings.js +102 -0
- package/dist/api/queries/businesses.d.ts +212 -0
- package/dist/api/queries/businesses.js +154 -0
- package/dist/api/queries/event-chat.d.ts +19 -0
- package/dist/api/queries/event-chat.js +75 -0
- package/dist/api/queries/events.d.ts +322 -0
- package/dist/api/queries/events.js +221 -0
- package/dist/api/queries/grow90.d.ts +26 -0
- package/dist/api/queries/grow90.js +85 -0
- package/dist/api/queries/hubs.d.ts +165 -0
- package/dist/api/queries/hubs.js +143 -0
- package/dist/api/queries/index.d.ts +23 -0
- package/dist/api/queries/index.js +40 -0
- package/dist/api/queries/jack.d.ts +63 -0
- package/dist/api/queries/jack.js +92 -0
- package/dist/api/queries/library.d.ts +132 -0
- package/dist/api/queries/library.js +120 -0
- package/dist/api/queries/map.d.ts +216 -0
- package/dist/api/queries/map.js +278 -0
- package/dist/api/queries/matching.d.ts +136 -0
- package/dist/api/queries/matching.js +161 -0
- package/dist/api/queries/notifications.d.ts +78 -0
- package/dist/api/queries/notifications.js +88 -0
- package/dist/api/queries/offers.d.ts +91 -0
- package/dist/api/queries/offers.js +103 -0
- package/dist/api/queries/subscriptions.d.ts +56 -0
- package/dist/api/queries/subscriptions.js +73 -0
- package/dist/api/queries/support.d.ts +106 -0
- package/dist/api/queries/support.js +202 -0
- package/dist/api/queries/users.d.ts +293 -0
- package/dist/api/queries/users.js +370 -0
- package/dist/api/types.d.ts +464 -0
- package/dist/api/types.js +9 -0
- package/dist/hooks/useAuth.d.ts +5 -0
- package/dist/hooks/useAuth.js +39 -0
- package/dist/hooks/useUser.d.ts +43 -0
- package/dist/hooks/useUser.js +44 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +67 -0
- package/package.json +62 -0
- package/src/__tests__/e2e.test.ts +502 -0
- package/src/api/client.ts +71 -0
- package/src/api/mutations/admin.ts +531 -0
- package/src/api/mutations/ambassadors.ts +185 -0
- package/src/api/mutations/auth.ts +350 -0
- package/src/api/mutations/bookings.ts +190 -0
- package/src/api/mutations/event-chat.ts +177 -0
- package/src/api/mutations/events.ts +273 -0
- package/src/api/mutations/grow90.ts +169 -0
- package/src/api/mutations/hubs.ts +385 -0
- package/src/api/mutations/index.ts +23 -0
- package/src/api/mutations/jack.ts +130 -0
- package/src/api/mutations/library.ts +212 -0
- package/src/api/mutations/map.ts +230 -0
- package/src/api/mutations/matching.ts +271 -0
- package/src/api/mutations/notifications.ts +114 -0
- package/src/api/mutations/offers.ts +73 -0
- package/src/api/mutations/subscriptions.ts +162 -0
- package/src/api/mutations/support.ts +390 -0
- package/src/api/mutations/users.ts +271 -0
- package/src/api/queries/admin.ts +480 -0
- package/src/api/queries/ambassadors.ts +139 -0
- package/src/api/queries/auth.ts +24 -0
- package/src/api/queries/bookings.ts +135 -0
- package/src/api/queries/businesses.ts +203 -0
- package/src/api/queries/event-chat.ts +78 -0
- package/src/api/queries/events.ts +272 -0
- package/src/api/queries/grow90.ts +98 -0
- package/src/api/queries/hubs.ts +211 -0
- package/src/api/queries/index.ts +24 -0
- package/src/api/queries/jack.ts +127 -0
- package/src/api/queries/library.ts +166 -0
- package/src/api/queries/map.ts +331 -0
- package/src/api/queries/matching.ts +238 -0
- package/src/api/queries/notifications.ts +103 -0
- package/src/api/queries/offers.ts +136 -0
- package/src/api/queries/subscriptions.ts +91 -0
- package/src/api/queries/support.ts +235 -0
- package/src/api/queries/users.ts +393 -0
- package/src/api/types.ts +596 -0
- package/src/index.ts +57 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.eventChatKeys = void 0;
|
|
4
|
+
exports.useEventChat = useEventChat;
|
|
5
|
+
exports.useEventChatMembers = useEventChatMembers;
|
|
6
|
+
exports.useEventChatMessages = useEventChatMessages;
|
|
7
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
8
|
+
const client_1 = require("../client");
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// QUERY KEYS
|
|
11
|
+
// ============================================================================
|
|
12
|
+
exports.eventChatKeys = {
|
|
13
|
+
all: ['event-chat'],
|
|
14
|
+
chat: (eventId) => [...exports.eventChatKeys.all, 'chat', eventId],
|
|
15
|
+
members: (eventId) => [...exports.eventChatKeys.all, 'members', eventId],
|
|
16
|
+
messages: (eventId) => [...exports.eventChatKeys.all, 'messages', eventId],
|
|
17
|
+
};
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// HOOKS
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Get or create chat for an event
|
|
23
|
+
*/
|
|
24
|
+
function useEventChat(eventId) {
|
|
25
|
+
return (0, react_query_1.useQuery)({
|
|
26
|
+
queryKey: exports.eventChatKeys.chat(eventId || ''),
|
|
27
|
+
queryFn: async () => {
|
|
28
|
+
if (!eventId)
|
|
29
|
+
throw new Error('Event ID is required');
|
|
30
|
+
const client = (0, client_1.getApiClient)();
|
|
31
|
+
const response = await client.get(`/events/${eventId}/chat`);
|
|
32
|
+
return response.data;
|
|
33
|
+
},
|
|
34
|
+
enabled: !!eventId,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get chat members
|
|
39
|
+
*/
|
|
40
|
+
function useEventChatMembers(eventId) {
|
|
41
|
+
return (0, react_query_1.useQuery)({
|
|
42
|
+
queryKey: exports.eventChatKeys.members(eventId || ''),
|
|
43
|
+
queryFn: async () => {
|
|
44
|
+
if (!eventId)
|
|
45
|
+
throw new Error('Event ID is required');
|
|
46
|
+
const client = (0, client_1.getApiClient)();
|
|
47
|
+
const response = await client.get(`/events/${eventId}/chat/members`);
|
|
48
|
+
return response.data;
|
|
49
|
+
},
|
|
50
|
+
enabled: !!eventId,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get chat messages with infinite scroll pagination
|
|
55
|
+
*/
|
|
56
|
+
function useEventChatMessages(eventId, limit = 50) {
|
|
57
|
+
return (0, react_query_1.useInfiniteQuery)({
|
|
58
|
+
queryKey: exports.eventChatKeys.messages(eventId || ''),
|
|
59
|
+
queryFn: async ({ pageParam }) => {
|
|
60
|
+
if (!eventId)
|
|
61
|
+
throw new Error('Event ID is required');
|
|
62
|
+
const client = (0, client_1.getApiClient)();
|
|
63
|
+
const params = new URLSearchParams({ limit: String(limit) });
|
|
64
|
+
if (pageParam) {
|
|
65
|
+
params.append('cursor', pageParam);
|
|
66
|
+
}
|
|
67
|
+
const response = await client.get(`/events/${eventId}/chat/messages?${params.toString()}`);
|
|
68
|
+
return response.data;
|
|
69
|
+
},
|
|
70
|
+
initialPageParam: undefined,
|
|
71
|
+
getNextPageParam: (lastPage) => lastPage.nextCursor,
|
|
72
|
+
enabled: !!eventId,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9ldmVudC1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBCQSxvQ0FXQztBQUtELGtEQVdDO0FBS0Qsb0RBbUJDO0FBN0VELHVEQUFtRTtBQUNuRSxzQ0FBeUM7QUFPekMsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFbEUsUUFBQSxhQUFhLEdBQUc7SUFDM0IsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFVO0lBQzVCLElBQUksRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLHFCQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQVU7SUFDM0UsT0FBTyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcscUJBQWEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVTtJQUNqRixRQUFRLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxxQkFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFVO0NBQ3BGLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsUUFBUTtBQUNSLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxPQUEyQjtJQUN0RCxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxxQkFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzNDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFvQixXQUFXLE9BQU8sT0FBTyxDQUFDLENBQUM7WUFDaEYsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87S0FDbkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBMkI7SUFDN0QsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUscUJBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBdUIsV0FBVyxPQUFPLGVBQWUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO0tBQ25CLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLE9BQTJCLEVBQUUsS0FBSyxHQUFHLEVBQUU7SUFDMUUsT0FBTyxJQUFBLDhCQUFnQixFQUFDO1FBQ3RCLFFBQVEsRUFBRSxxQkFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsV0FBVyxPQUFPLGtCQUFrQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDeEQsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsU0FBK0I7UUFDakQsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVO1FBQ25ELE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUXVlcnksIHVzZUluZmluaXRlUXVlcnkgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHtcbiAgRXZlbnRDaGF0UmVzcG9uc2UsXG4gIENoYXRNZW1iZXJSZXNwb25zZSxcbiAgUGFnaW5hdGVkTWVzc2FnZXNSZXNwb25zZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBLRVlTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBldmVudENoYXRLZXlzID0ge1xuICBhbGw6IFsnZXZlbnQtY2hhdCddIGFzIGNvbnN0LFxuICBjaGF0OiAoZXZlbnRJZDogc3RyaW5nKSA9PiBbLi4uZXZlbnRDaGF0S2V5cy5hbGwsICdjaGF0JywgZXZlbnRJZF0gYXMgY29uc3QsXG4gIG1lbWJlcnM6IChldmVudElkOiBzdHJpbmcpID0+IFsuLi5ldmVudENoYXRLZXlzLmFsbCwgJ21lbWJlcnMnLCBldmVudElkXSBhcyBjb25zdCxcbiAgbWVzc2FnZXM6IChldmVudElkOiBzdHJpbmcpID0+IFsuLi5ldmVudENoYXRLZXlzLmFsbCwgJ21lc3NhZ2VzJywgZXZlbnRJZF0gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBvciBjcmVhdGUgY2hhdCBmb3IgYW4gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUV2ZW50Q2hhdChldmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogZXZlbnRDaGF0S2V5cy5jaGF0KGV2ZW50SWQgfHwgJycpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghZXZlbnRJZCkgdGhyb3cgbmV3IEVycm9yKCdFdmVudCBJRCBpcyByZXF1aXJlZCcpO1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8RXZlbnRDaGF0UmVzcG9uc2U+KGAvZXZlbnRzLyR7ZXZlbnRJZH0vY2hhdGApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWV2ZW50SWQsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBjaGF0IG1lbWJlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUV2ZW50Q2hhdE1lbWJlcnMoZXZlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGV2ZW50Q2hhdEtleXMubWVtYmVycyhldmVudElkIHx8ICcnKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWV2ZW50SWQpIHRocm93IG5ldyBFcnJvcignRXZlbnQgSUQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PENoYXRNZW1iZXJSZXNwb25zZVtdPihgL2V2ZW50cy8ke2V2ZW50SWR9L2NoYXQvbWVtYmVyc2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWV2ZW50SWQsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBjaGF0IG1lc3NhZ2VzIHdpdGggaW5maW5pdGUgc2Nyb2xsIHBhZ2luYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUV2ZW50Q2hhdE1lc3NhZ2VzKGV2ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgbGltaXQgPSA1MCkge1xuICByZXR1cm4gdXNlSW5maW5pdGVRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGV2ZW50Q2hhdEtleXMubWVzc2FnZXMoZXZlbnRJZCB8fCAnJyksXG4gICAgcXVlcnlGbjogYXN5bmMgKHsgcGFnZVBhcmFtIH0pID0+IHtcbiAgICAgIGlmICghZXZlbnRJZCkgdGhyb3cgbmV3IEVycm9yKCdFdmVudCBJRCBpcyByZXF1aXJlZCcpO1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgbGltaXQ6IFN0cmluZyhsaW1pdCkgfSk7XG4gICAgICBpZiAocGFnZVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoJ2N1cnNvcicsIHBhZ2VQYXJhbSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8UGFnaW5hdGVkTWVzc2FnZXNSZXNwb25zZT4oXG4gICAgICAgIGAvZXZlbnRzLyR7ZXZlbnRJZH0vY2hhdC9tZXNzYWdlcz8ke3BhcmFtcy50b1N0cmluZygpfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGluaXRpYWxQYWdlUGFyYW06IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZ2V0TmV4dFBhZ2VQYXJhbTogKGxhc3RQYWdlKSA9PiBsYXN0UGFnZS5uZXh0Q3Vyc29yLFxuICAgIGVuYWJsZWQ6ICEhZXZlbnRJZCxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { EventResponse } from '../types';
|
|
3
|
+
export declare const eventKeys: {
|
|
4
|
+
all: readonly ["events"];
|
|
5
|
+
lists: () => readonly ["events", "list"];
|
|
6
|
+
list: (filters?: EventFilters) => readonly ["events", "list", EventFilters | undefined];
|
|
7
|
+
details: () => readonly ["events", "detail"];
|
|
8
|
+
detail: (id: string) => readonly ["events", "detail", string];
|
|
9
|
+
detailBySlug: (slug: string) => readonly ["events", "detail", "slug", string];
|
|
10
|
+
upcoming: (limit?: number) => readonly ["events", "upcoming", number | undefined];
|
|
11
|
+
featured: (limit?: number) => readonly ["events", "featured", number | undefined];
|
|
12
|
+
ambient: (filters?: AmbientEventFilters) => readonly ["events", "ambient", AmbientEventFilters | undefined];
|
|
13
|
+
bookings: (eventId: string) => readonly ["events", "detail", string, "bookings"];
|
|
14
|
+
};
|
|
15
|
+
export interface EventFilters {
|
|
16
|
+
page?: number;
|
|
17
|
+
limit?: number;
|
|
18
|
+
hubId?: string;
|
|
19
|
+
cityId?: string;
|
|
20
|
+
eventType?: string;
|
|
21
|
+
status?: 'DRAFT' | 'PUBLISHED' | 'CANCELLED';
|
|
22
|
+
startAfter?: string;
|
|
23
|
+
startBefore?: string;
|
|
24
|
+
isFeatured?: boolean;
|
|
25
|
+
isAmbient?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface AmbientEventFilters {
|
|
28
|
+
limit?: number;
|
|
29
|
+
cityId?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface PaginatedEventsResponse {
|
|
32
|
+
events: EventResponse[];
|
|
33
|
+
total: number;
|
|
34
|
+
page: number;
|
|
35
|
+
limit: number;
|
|
36
|
+
totalPages: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get paginated list of events with optional filters
|
|
40
|
+
*
|
|
41
|
+
* @param filters - Query parameters for filtering and pagination
|
|
42
|
+
* @param options - TanStack Query options
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```tsx
|
|
46
|
+
* const { data, isLoading } = useEvents({
|
|
47
|
+
* page: 1,
|
|
48
|
+
* limit: 20,
|
|
49
|
+
* hubId: 'hub-123',
|
|
50
|
+
* isFeatured: true
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function useEvents(filters?: EventFilters, options?: Omit<UseQueryOptions<PaginatedEventsResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedEventsResponse, Error>;
|
|
55
|
+
/**
|
|
56
|
+
* Get a single event by ID
|
|
57
|
+
*
|
|
58
|
+
* @param id - Event ID
|
|
59
|
+
* @param options - TanStack Query options
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```tsx
|
|
63
|
+
* const { data, isLoading } = useEvent('event-123');
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function useEvent(id: string, options?: Omit<UseQueryOptions<EventResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
67
|
+
id: string;
|
|
68
|
+
title: string;
|
|
69
|
+
slug?: Record<string, never>;
|
|
70
|
+
description?: Record<string, never>;
|
|
71
|
+
bannerImage?: Record<string, never>;
|
|
72
|
+
startDate: string;
|
|
73
|
+
endDate?: Record<string, never>;
|
|
74
|
+
timezone?: Record<string, never>;
|
|
75
|
+
isRecurring: boolean;
|
|
76
|
+
recurrenceRule?: Record<string, never>;
|
|
77
|
+
locationName?: Record<string, never>;
|
|
78
|
+
locationAddress?: Record<string, never>;
|
|
79
|
+
locationLat?: Record<string, never>;
|
|
80
|
+
locationLong?: Record<string, never>;
|
|
81
|
+
cityId?: Record<string, never>;
|
|
82
|
+
isOnline: boolean;
|
|
83
|
+
onlineUrl?: Record<string, never>;
|
|
84
|
+
totalSpots: number;
|
|
85
|
+
availableSpots: number;
|
|
86
|
+
isFree: boolean;
|
|
87
|
+
price?: Record<string, never>;
|
|
88
|
+
currency: string;
|
|
89
|
+
hubId?: Record<string, never>;
|
|
90
|
+
visibility: "PUBLIC" | "MEMBERS_ONLY" | "INVITE_ONLY";
|
|
91
|
+
requiresApproval: boolean;
|
|
92
|
+
allowWaitlist: boolean;
|
|
93
|
+
whatsappGroup?: Record<string, never>;
|
|
94
|
+
externalUrl?: Record<string, never>;
|
|
95
|
+
status: "DRAFT" | "PUBLISHED" | "CANCELLED" | "COMPLETED";
|
|
96
|
+
isFeatured: boolean;
|
|
97
|
+
isCancelled: boolean;
|
|
98
|
+
isAmbient: boolean;
|
|
99
|
+
ambientCategory?: Record<string, never>;
|
|
100
|
+
bookingCount: number;
|
|
101
|
+
checkinCount: number;
|
|
102
|
+
createdAt: string;
|
|
103
|
+
publishedAt?: Record<string, never>;
|
|
104
|
+
}, Error>;
|
|
105
|
+
/**
|
|
106
|
+
* Get a single event by slug
|
|
107
|
+
*
|
|
108
|
+
* @param slug - Event slug
|
|
109
|
+
* @param options - TanStack Query options
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```tsx
|
|
113
|
+
* const { data, isLoading } = useEventBySlug('yoga-in-the-park');
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export declare function useEventBySlug(slug: string, options?: Omit<UseQueryOptions<EventResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
117
|
+
id: string;
|
|
118
|
+
title: string;
|
|
119
|
+
slug?: Record<string, never>;
|
|
120
|
+
description?: Record<string, never>;
|
|
121
|
+
bannerImage?: Record<string, never>;
|
|
122
|
+
startDate: string;
|
|
123
|
+
endDate?: Record<string, never>;
|
|
124
|
+
timezone?: Record<string, never>;
|
|
125
|
+
isRecurring: boolean;
|
|
126
|
+
recurrenceRule?: Record<string, never>;
|
|
127
|
+
locationName?: Record<string, never>;
|
|
128
|
+
locationAddress?: Record<string, never>;
|
|
129
|
+
locationLat?: Record<string, never>;
|
|
130
|
+
locationLong?: Record<string, never>;
|
|
131
|
+
cityId?: Record<string, never>;
|
|
132
|
+
isOnline: boolean;
|
|
133
|
+
onlineUrl?: Record<string, never>;
|
|
134
|
+
totalSpots: number;
|
|
135
|
+
availableSpots: number;
|
|
136
|
+
isFree: boolean;
|
|
137
|
+
price?: Record<string, never>;
|
|
138
|
+
currency: string;
|
|
139
|
+
hubId?: Record<string, never>;
|
|
140
|
+
visibility: "PUBLIC" | "MEMBERS_ONLY" | "INVITE_ONLY";
|
|
141
|
+
requiresApproval: boolean;
|
|
142
|
+
allowWaitlist: boolean;
|
|
143
|
+
whatsappGroup?: Record<string, never>;
|
|
144
|
+
externalUrl?: Record<string, never>;
|
|
145
|
+
status: "DRAFT" | "PUBLISHED" | "CANCELLED" | "COMPLETED";
|
|
146
|
+
isFeatured: boolean;
|
|
147
|
+
isCancelled: boolean;
|
|
148
|
+
isAmbient: boolean;
|
|
149
|
+
ambientCategory?: Record<string, never>;
|
|
150
|
+
bookingCount: number;
|
|
151
|
+
checkinCount: number;
|
|
152
|
+
createdAt: string;
|
|
153
|
+
publishedAt?: Record<string, never>;
|
|
154
|
+
}, Error>;
|
|
155
|
+
/**
|
|
156
|
+
* Get upcoming events
|
|
157
|
+
*
|
|
158
|
+
* @param limit - Maximum number of events to return (default: 10)
|
|
159
|
+
* @param options - TanStack Query options
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```tsx
|
|
163
|
+
* const { data, isLoading } = useUpcomingEvents(20);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export declare function useUpcomingEvents(limit?: number, options?: Omit<UseQueryOptions<EventResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
167
|
+
id: string;
|
|
168
|
+
title: string;
|
|
169
|
+
slug?: Record<string, never>;
|
|
170
|
+
description?: Record<string, never>;
|
|
171
|
+
bannerImage?: Record<string, never>;
|
|
172
|
+
startDate: string;
|
|
173
|
+
endDate?: Record<string, never>;
|
|
174
|
+
timezone?: Record<string, never>;
|
|
175
|
+
isRecurring: boolean;
|
|
176
|
+
recurrenceRule?: Record<string, never>;
|
|
177
|
+
locationName?: Record<string, never>;
|
|
178
|
+
locationAddress?: Record<string, never>;
|
|
179
|
+
locationLat?: Record<string, never>;
|
|
180
|
+
locationLong?: Record<string, never>;
|
|
181
|
+
cityId?: Record<string, never>;
|
|
182
|
+
isOnline: boolean;
|
|
183
|
+
onlineUrl?: Record<string, never>;
|
|
184
|
+
totalSpots: number;
|
|
185
|
+
availableSpots: number;
|
|
186
|
+
isFree: boolean;
|
|
187
|
+
price?: Record<string, never>;
|
|
188
|
+
currency: string;
|
|
189
|
+
hubId?: Record<string, never>;
|
|
190
|
+
visibility: "PUBLIC" | "MEMBERS_ONLY" | "INVITE_ONLY";
|
|
191
|
+
requiresApproval: boolean;
|
|
192
|
+
allowWaitlist: boolean;
|
|
193
|
+
whatsappGroup?: Record<string, never>;
|
|
194
|
+
externalUrl?: Record<string, never>;
|
|
195
|
+
status: "DRAFT" | "PUBLISHED" | "CANCELLED" | "COMPLETED";
|
|
196
|
+
isFeatured: boolean;
|
|
197
|
+
isCancelled: boolean;
|
|
198
|
+
isAmbient: boolean;
|
|
199
|
+
ambientCategory?: Record<string, never>;
|
|
200
|
+
bookingCount: number;
|
|
201
|
+
checkinCount: number;
|
|
202
|
+
createdAt: string;
|
|
203
|
+
publishedAt?: Record<string, never>;
|
|
204
|
+
}[], Error>;
|
|
205
|
+
/**
|
|
206
|
+
* Get featured events
|
|
207
|
+
*
|
|
208
|
+
* Note: This uses the main events endpoint with isFeatured filter
|
|
209
|
+
*
|
|
210
|
+
* @param limit - Maximum number of events to return (default: 10)
|
|
211
|
+
* @param options - TanStack Query options
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```tsx
|
|
215
|
+
* const { data, isLoading } = useFeaturedEvents(5);
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
export declare function useFeaturedEvents(limit?: number, options?: Omit<UseQueryOptions<EventResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
219
|
+
id: string;
|
|
220
|
+
title: string;
|
|
221
|
+
slug?: Record<string, never>;
|
|
222
|
+
description?: Record<string, never>;
|
|
223
|
+
bannerImage?: Record<string, never>;
|
|
224
|
+
startDate: string;
|
|
225
|
+
endDate?: Record<string, never>;
|
|
226
|
+
timezone?: Record<string, never>;
|
|
227
|
+
isRecurring: boolean;
|
|
228
|
+
recurrenceRule?: Record<string, never>;
|
|
229
|
+
locationName?: Record<string, never>;
|
|
230
|
+
locationAddress?: Record<string, never>;
|
|
231
|
+
locationLat?: Record<string, never>;
|
|
232
|
+
locationLong?: Record<string, never>;
|
|
233
|
+
cityId?: Record<string, never>;
|
|
234
|
+
isOnline: boolean;
|
|
235
|
+
onlineUrl?: Record<string, never>;
|
|
236
|
+
totalSpots: number;
|
|
237
|
+
availableSpots: number;
|
|
238
|
+
isFree: boolean;
|
|
239
|
+
price?: Record<string, never>;
|
|
240
|
+
currency: string;
|
|
241
|
+
hubId?: Record<string, never>;
|
|
242
|
+
visibility: "PUBLIC" | "MEMBERS_ONLY" | "INVITE_ONLY";
|
|
243
|
+
requiresApproval: boolean;
|
|
244
|
+
allowWaitlist: boolean;
|
|
245
|
+
whatsappGroup?: Record<string, never>;
|
|
246
|
+
externalUrl?: Record<string, never>;
|
|
247
|
+
status: "DRAFT" | "PUBLISHED" | "CANCELLED" | "COMPLETED";
|
|
248
|
+
isFeatured: boolean;
|
|
249
|
+
isCancelled: boolean;
|
|
250
|
+
isAmbient: boolean;
|
|
251
|
+
ambientCategory?: Record<string, never>;
|
|
252
|
+
bookingCount: number;
|
|
253
|
+
checkinCount: number;
|
|
254
|
+
createdAt: string;
|
|
255
|
+
publishedAt?: Record<string, never>;
|
|
256
|
+
}[], Error>;
|
|
257
|
+
/**
|
|
258
|
+
* Get ambient events (auto-generated social activities)
|
|
259
|
+
*
|
|
260
|
+
* @param filters - Optional filters (limit, cityId)
|
|
261
|
+
* @param options - TanStack Query options
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* ```tsx
|
|
265
|
+
* const { data, isLoading } = useAmbientEvents({ limit: 10 });
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
export declare function useAmbientEvents(filters?: AmbientEventFilters, options?: Omit<UseQueryOptions<EventResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
269
|
+
id: string;
|
|
270
|
+
title: string;
|
|
271
|
+
slug?: Record<string, never>;
|
|
272
|
+
description?: Record<string, never>;
|
|
273
|
+
bannerImage?: Record<string, never>;
|
|
274
|
+
startDate: string;
|
|
275
|
+
endDate?: Record<string, never>;
|
|
276
|
+
timezone?: Record<string, never>;
|
|
277
|
+
isRecurring: boolean;
|
|
278
|
+
recurrenceRule?: Record<string, never>;
|
|
279
|
+
locationName?: Record<string, never>;
|
|
280
|
+
locationAddress?: Record<string, never>;
|
|
281
|
+
locationLat?: Record<string, never>;
|
|
282
|
+
locationLong?: Record<string, never>;
|
|
283
|
+
cityId?: Record<string, never>;
|
|
284
|
+
isOnline: boolean;
|
|
285
|
+
onlineUrl?: Record<string, never>;
|
|
286
|
+
totalSpots: number;
|
|
287
|
+
availableSpots: number;
|
|
288
|
+
isFree: boolean;
|
|
289
|
+
price?: Record<string, never>;
|
|
290
|
+
currency: string;
|
|
291
|
+
hubId?: Record<string, never>;
|
|
292
|
+
visibility: "PUBLIC" | "MEMBERS_ONLY" | "INVITE_ONLY";
|
|
293
|
+
requiresApproval: boolean;
|
|
294
|
+
allowWaitlist: boolean;
|
|
295
|
+
whatsappGroup?: Record<string, never>;
|
|
296
|
+
externalUrl?: Record<string, never>;
|
|
297
|
+
status: "DRAFT" | "PUBLISHED" | "CANCELLED" | "COMPLETED";
|
|
298
|
+
isFeatured: boolean;
|
|
299
|
+
isCancelled: boolean;
|
|
300
|
+
isAmbient: boolean;
|
|
301
|
+
ambientCategory?: Record<string, never>;
|
|
302
|
+
bookingCount: number;
|
|
303
|
+
checkinCount: number;
|
|
304
|
+
createdAt: string;
|
|
305
|
+
publishedAt?: Record<string, never>;
|
|
306
|
+
}[], Error>;
|
|
307
|
+
/**
|
|
308
|
+
* Get bookings for a specific event
|
|
309
|
+
*
|
|
310
|
+
* Note: This endpoint may not be available in the current API.
|
|
311
|
+
* Consider using admin endpoints or user bookings endpoints instead.
|
|
312
|
+
* This hook is provided for future compatibility.
|
|
313
|
+
*
|
|
314
|
+
* @param eventId - Event ID
|
|
315
|
+
* @param options - TanStack Query options
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* ```tsx
|
|
319
|
+
* const { data, isLoading } = useEventBookings('event-123');
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
export declare function useEventBookings(eventId: string, options?: Omit<UseQueryOptions<any[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<any[], Error>;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.eventKeys = void 0;
|
|
4
|
+
exports.useEvents = useEvents;
|
|
5
|
+
exports.useEvent = useEvent;
|
|
6
|
+
exports.useEventBySlug = useEventBySlug;
|
|
7
|
+
exports.useUpcomingEvents = useUpcomingEvents;
|
|
8
|
+
exports.useFeaturedEvents = useFeaturedEvents;
|
|
9
|
+
exports.useAmbientEvents = useAmbientEvents;
|
|
10
|
+
exports.useEventBookings = useEventBookings;
|
|
11
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
12
|
+
const client_1 = require("../client");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// QUERY KEY FACTORY
|
|
15
|
+
// ============================================================================
|
|
16
|
+
exports.eventKeys = {
|
|
17
|
+
all: ['events'],
|
|
18
|
+
lists: () => [...exports.eventKeys.all, 'list'],
|
|
19
|
+
list: (filters) => [...exports.eventKeys.lists(), filters],
|
|
20
|
+
details: () => [...exports.eventKeys.all, 'detail'],
|
|
21
|
+
detail: (id) => [...exports.eventKeys.details(), id],
|
|
22
|
+
detailBySlug: (slug) => [...exports.eventKeys.details(), 'slug', slug],
|
|
23
|
+
upcoming: (limit) => [...exports.eventKeys.all, 'upcoming', limit],
|
|
24
|
+
featured: (limit) => [...exports.eventKeys.all, 'featured', limit],
|
|
25
|
+
ambient: (filters) => [...exports.eventKeys.all, 'ambient', filters],
|
|
26
|
+
bookings: (eventId) => [...exports.eventKeys.detail(eventId), 'bookings'],
|
|
27
|
+
};
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// QUERY HOOKS
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Get paginated list of events with optional filters
|
|
33
|
+
*
|
|
34
|
+
* @param filters - Query parameters for filtering and pagination
|
|
35
|
+
* @param options - TanStack Query options
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* const { data, isLoading } = useEvents({
|
|
40
|
+
* page: 1,
|
|
41
|
+
* limit: 20,
|
|
42
|
+
* hubId: 'hub-123',
|
|
43
|
+
* isFeatured: true
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function useEvents(filters, options) {
|
|
48
|
+
return (0, react_query_1.useQuery)({
|
|
49
|
+
queryKey: exports.eventKeys.list(filters),
|
|
50
|
+
queryFn: async () => {
|
|
51
|
+
const client = (0, client_1.getApiClient)();
|
|
52
|
+
const response = await client.get('/api/v1/events', {
|
|
53
|
+
params: filters,
|
|
54
|
+
});
|
|
55
|
+
return response.data;
|
|
56
|
+
},
|
|
57
|
+
...options,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get a single event by ID
|
|
62
|
+
*
|
|
63
|
+
* @param id - Event ID
|
|
64
|
+
* @param options - TanStack Query options
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```tsx
|
|
68
|
+
* const { data, isLoading } = useEvent('event-123');
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
function useEvent(id, options) {
|
|
72
|
+
return (0, react_query_1.useQuery)({
|
|
73
|
+
queryKey: exports.eventKeys.detail(id),
|
|
74
|
+
queryFn: async () => {
|
|
75
|
+
const client = (0, client_1.getApiClient)();
|
|
76
|
+
const response = await client.get(`/api/v1/events/${id}`);
|
|
77
|
+
return response.data;
|
|
78
|
+
},
|
|
79
|
+
enabled: !!id,
|
|
80
|
+
...options,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get a single event by slug
|
|
85
|
+
*
|
|
86
|
+
* @param slug - Event slug
|
|
87
|
+
* @param options - TanStack Query options
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```tsx
|
|
91
|
+
* const { data, isLoading } = useEventBySlug('yoga-in-the-park');
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function useEventBySlug(slug, options) {
|
|
95
|
+
return (0, react_query_1.useQuery)({
|
|
96
|
+
queryKey: exports.eventKeys.detailBySlug(slug),
|
|
97
|
+
queryFn: async () => {
|
|
98
|
+
const client = (0, client_1.getApiClient)();
|
|
99
|
+
const response = await client.get(`/api/v1/events/slug/${slug}`);
|
|
100
|
+
return response.data;
|
|
101
|
+
},
|
|
102
|
+
enabled: !!slug,
|
|
103
|
+
...options,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get upcoming events
|
|
108
|
+
*
|
|
109
|
+
* @param limit - Maximum number of events to return (default: 10)
|
|
110
|
+
* @param options - TanStack Query options
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```tsx
|
|
114
|
+
* const { data, isLoading } = useUpcomingEvents(20);
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
function useUpcomingEvents(limit, options) {
|
|
118
|
+
return (0, react_query_1.useQuery)({
|
|
119
|
+
queryKey: exports.eventKeys.upcoming(limit),
|
|
120
|
+
queryFn: async () => {
|
|
121
|
+
const client = (0, client_1.getApiClient)();
|
|
122
|
+
const response = await client.get('/api/v1/events/upcoming', {
|
|
123
|
+
params: { limit },
|
|
124
|
+
});
|
|
125
|
+
return response.data;
|
|
126
|
+
},
|
|
127
|
+
...options,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get featured events
|
|
132
|
+
*
|
|
133
|
+
* Note: This uses the main events endpoint with isFeatured filter
|
|
134
|
+
*
|
|
135
|
+
* @param limit - Maximum number of events to return (default: 10)
|
|
136
|
+
* @param options - TanStack Query options
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```tsx
|
|
140
|
+
* const { data, isLoading } = useFeaturedEvents(5);
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
function useFeaturedEvents(limit = 10, options) {
|
|
144
|
+
return (0, react_query_1.useQuery)({
|
|
145
|
+
queryKey: exports.eventKeys.featured(limit),
|
|
146
|
+
queryFn: async () => {
|
|
147
|
+
const client = (0, client_1.getApiClient)();
|
|
148
|
+
const response = await client.get('/api/v1/events', {
|
|
149
|
+
params: {
|
|
150
|
+
isFeatured: true,
|
|
151
|
+
limit,
|
|
152
|
+
page: 1,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
return response.data.events || response.data;
|
|
156
|
+
},
|
|
157
|
+
...options,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get ambient events (auto-generated social activities)
|
|
162
|
+
*
|
|
163
|
+
* @param filters - Optional filters (limit, cityId)
|
|
164
|
+
* @param options - TanStack Query options
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```tsx
|
|
168
|
+
* const { data, isLoading } = useAmbientEvents({ limit: 10 });
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
function useAmbientEvents(filters, options) {
|
|
172
|
+
return (0, react_query_1.useQuery)({
|
|
173
|
+
queryKey: exports.eventKeys.ambient(filters),
|
|
174
|
+
queryFn: async () => {
|
|
175
|
+
const client = (0, client_1.getApiClient)();
|
|
176
|
+
const response = await client.get('/api/v1/events', {
|
|
177
|
+
params: {
|
|
178
|
+
isAmbient: true,
|
|
179
|
+
limit: filters?.limit || 20,
|
|
180
|
+
cityId: filters?.cityId,
|
|
181
|
+
startFrom: new Date().toISOString(),
|
|
182
|
+
sortBy: 'startDate',
|
|
183
|
+
sortOrder: 'asc',
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
// API returns { data: { events: [...], meta: {...} }, meta: {...} }
|
|
187
|
+
return response.data.data?.events || response.data.events || response.data;
|
|
188
|
+
},
|
|
189
|
+
...options,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get bookings for a specific event
|
|
194
|
+
*
|
|
195
|
+
* Note: This endpoint may not be available in the current API.
|
|
196
|
+
* Consider using admin endpoints or user bookings endpoints instead.
|
|
197
|
+
* This hook is provided for future compatibility.
|
|
198
|
+
*
|
|
199
|
+
* @param eventId - Event ID
|
|
200
|
+
* @param options - TanStack Query options
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```tsx
|
|
204
|
+
* const { data, isLoading } = useEventBookings('event-123');
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
function useEventBookings(eventId, options) {
|
|
208
|
+
return (0, react_query_1.useQuery)({
|
|
209
|
+
queryKey: exports.eventKeys.bookings(eventId),
|
|
210
|
+
queryFn: async () => {
|
|
211
|
+
const client = (0, client_1.getApiClient)();
|
|
212
|
+
// Note: This endpoint may not exist in the current API
|
|
213
|
+
// Adjust the path based on your actual API implementation
|
|
214
|
+
const response = await client.get(`/api/v1/events/${eventId}/bookings`);
|
|
215
|
+
return response.data;
|
|
216
|
+
},
|
|
217
|
+
enabled: !!eventId,
|
|
218
|
+
...options,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1RUEsOEJBZUM7QUFhRCw0QkFjQztBQWFELHdDQWNDO0FBYUQsOENBZUM7QUFlRCw4Q0FtQkM7QUFhRCw0Q0F1QkM7QUFpQkQsNENBZ0JDO0FBL1FELHVEQUFrRTtBQUNsRSxzQ0FBeUM7QUFHekMsK0VBQStFO0FBQy9FLG9CQUFvQjtBQUNwQiwrRUFBK0U7QUFFbEUsUUFBQSxTQUFTLEdBQUc7SUFDdkIsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFVO0lBQ3hCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFVO0lBQ2hELElBQUksRUFBRSxDQUFDLE9BQXNCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUMxRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUNwRCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUM3RCxZQUFZLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQVU7SUFDL0UsUUFBUSxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBVTtJQUM1RSxRQUFRLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEdBQUcsRUFB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QUFFLENBQUMsV0FBVyxFQUFFO29CQUNuQyxNQUFNLEVBQUUsV0FBVztvQkFDbkIsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsb0VBQW9FO1lBQ3BFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDN0UsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixPQUFlLEVBQ2YsT0FBOEQ7SUFFOUQsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxLQUFLLElBQW9CLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsdURBQXVEO1lBQ3ZELDBEQUEwRDtZQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLE9BQU8sV0FBVyxDQUFDLENBQUM7WUFDeEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87UUFDbEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgRXZlbnRSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZIEZBQ1RPUllcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IGV2ZW50S2V5cyA9IHtcbiAgYWxsOiBbJ2V2ZW50cyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLmV2ZW50S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogRXZlbnRGaWx0ZXJzKSA9PiBbLi4uZXZlbnRLZXlzLmxpc3RzKCksIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4uZXZlbnRLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4uZXZlbnRLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBkZXRhaWxCeVNsdWc6IChzbHVnOiBzdHJpbmcpID0+IFsuLi5ldmVudEtleXMuZGV0YWlscygpLCAnc2x1ZycsIHNsdWddIGFzIGNvbnN0LFxuICB1cGNvbWluZzogKGxpbWl0PzogbnVtYmVyKSA9PiBbLi4uZXZlbnRLZXlzLmFsbCwgJ3VwY29taW5nJywgbGltaXRdIGFzIGNvbnN0LFxuICBmZWF0dXJlZDogKGxpbWl0PzogbnVtYmVyKSA9PiBbLi4uZXZlbnRLZXlzLmFsbCwgJ2ZlYXR1cmVkJywgbGltaXRdIGFzIGNvbnN0LFxuICBhbWJpZW50OiAoZmlsdGVycz86IEFtYmllbnRFdmVudEZpbHRlcnMpID0+IFsuLi5ldmVudEtleXMuYWxsLCAnYW1iaWVudCcsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBib29raW5nczogKGV2ZW50SWQ6IHN0cmluZykgPT4gWy4uLmV2ZW50S2V5cy5kZXRhaWwoZXZlbnRJZCksICdib29raW5ncyddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEZpbHRlcnMge1xuICBwYWdlPzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgaHViSWQ/OiBzdHJpbmc7XG4gIGNpdHlJZD86IHN0cmluZztcbiAgZXZlbnRUeXBlPzogc3RyaW5nO1xuICBzdGF0dXM/OiAnRFJBRlQnIHwgJ1BVQkxJU0hFRCcgfCAnQ0FOQ0VMTEVEJztcbiAgc3RhcnRBZnRlcj86IHN0cmluZztcbiAgc3RhcnRCZWZvcmU/OiBzdHJpbmc7XG4gIGlzRmVhdHVyZWQ/OiBib29sZWFuO1xuICBpc0FtYmllbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtYmllbnRFdmVudEZpbHRlcnMge1xuICBsaW1pdD86IG51bWJlcjtcbiAgY2l0eUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZEV2ZW50c1Jlc3BvbnNlIHtcbiAgZXZlbnRzOiBFdmVudFJlc3BvbnNlW107XG4gIHRvdGFsOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBwYWdpbmF0ZWQgbGlzdCBvZiBldmVudHMgd2l0aCBvcHRpb25hbCBmaWx0ZXJzXG4gKlxuICogQHBhcmFtIGZpbHRlcnMgLSBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VFdmVudHMoe1xuICogICBwYWdlOiAxLFxuICogICBsaW1pdDogMjAsXG4gKiAgIGh1YklkOiAnaHViLTEyMycsXG4gKiAgIGlzRmVhdHVyZWQ6IHRydWVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFdmVudHMoXG4gIGZpbHRlcnM/OiBFdmVudEZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRFdmVudHNSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogZXZlbnRLZXlzLmxpc3QoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkRXZlbnRzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL2V2ZW50cycsIHtcbiAgICAgICAgcGFyYW1zOiBmaWx0ZXJzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBldmVudCBieSBJRFxuICpcbiAqIEBwYXJhbSBpZCAtIEV2ZW50IElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlRXZlbnQoJ2V2ZW50LTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFdmVudChcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEV2ZW50UmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGV2ZW50S2V5cy5kZXRhaWwoaWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEV2ZW50UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL2V2ZW50cy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBldmVudCBieSBzbHVnXG4gKlxuICogQHBhcmFtIHNsdWcgLSBFdmVudCBzbHVnXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlRXZlbnRCeVNsdWcoJ3lvZ2EtaW4tdGhlLXBhcmsnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRXZlbnRCeVNsdWcoXG4gIHNsdWc6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEV2ZW50UmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGV2ZW50S2V5cy5kZXRhaWxCeVNsdWcoc2x1ZyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8RXZlbnRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvZXZlbnRzL3NsdWcvJHtzbHVnfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNsdWcsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVwY29taW5nIGV2ZW50c1xuICpcbiAqIEBwYXJhbSBsaW1pdCAtIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyB0byByZXR1cm4gKGRlZmF1bHQ6IDEwKVxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVVwY29taW5nRXZlbnRzKDIwKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBjb21pbmdFdmVudHMoXG4gIGxpbWl0PzogbnVtYmVyLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8RXZlbnRSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBldmVudEtleXMudXBjb21pbmcobGltaXQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEV2ZW50UmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvZXZlbnRzL3VwY29taW5nJywge1xuICAgICAgICBwYXJhbXM6IHsgbGltaXQgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgZmVhdHVyZWQgZXZlbnRzXG4gKlxuICogTm90ZTogVGhpcyB1c2VzIHRoZSBtYWluIGV2ZW50cyBlbmRwb2ludCB3aXRoIGlzRmVhdHVyZWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIGxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHRvIHJldHVybiAoZGVmYXVsdDogMTApXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlRmVhdHVyZWRFdmVudHMoNSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZlYXR1cmVkRXZlbnRzKFxuICBsaW1pdDogbnVtYmVyID0gMTAsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxFdmVudFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGV2ZW50S2V5cy5mZWF0dXJlZChsaW1pdCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8RXZlbnRSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9ldmVudHMnLCB7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGlzRmVhdHVyZWQ6IHRydWUsXG4gICAgICAgICAgbGltaXQsXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZXZlbnRzIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYW1iaWVudCBldmVudHMgKGF1dG8tZ2VuZXJhdGVkIHNvY2lhbCBhY3Rpdml0aWVzKVxuICpcbiAqIEBwYXJhbSBmaWx0ZXJzIC0gT3B0aW9uYWwgZmlsdGVycyAobGltaXQsIGNpdHlJZClcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VBbWJpZW50RXZlbnRzKHsgbGltaXQ6IDEwIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBbWJpZW50RXZlbnRzKFxuICBmaWx0ZXJzPzogQW1iaWVudEV2ZW50RmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEV2ZW50UmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogZXZlbnRLZXlzLmFtYmllbnQoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8RXZlbnRSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9ldmVudHMnLCB7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGlzQW1iaWVudDogdHJ1ZSxcbiAgICAgICAgICBsaW1pdDogZmlsdGVycz8ubGltaXQgfHwgMjAsXG4gICAgICAgICAgY2l0eUlkOiBmaWx0ZXJzPy5jaXR5SWQsXG4gICAgICAgICAgc3RhcnRGcm9tOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgc29ydEJ5OiAnc3RhcnREYXRlJyxcbiAgICAgICAgICBzb3J0T3JkZXI6ICdhc2MnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBBUEkgcmV0dXJucyB7IGRhdGE6IHsgZXZlbnRzOiBbLi4uXSwgbWV0YTogey4uLn0gfSwgbWV0YTogey4uLn0gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YT8uZXZlbnRzIHx8IHJlc3BvbnNlLmRhdGEuZXZlbnRzIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYm9va2luZ3MgZm9yIGEgc3BlY2lmaWMgZXZlbnRcbiAqXG4gKiBOb3RlOiBUaGlzIGVuZHBvaW50IG1heSBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IEFQSS5cbiAqIENvbnNpZGVyIHVzaW5nIGFkbWluIGVuZHBvaW50cyBvciB1c2VyIGJvb2tpbmdzIGVuZHBvaW50cyBpbnN0ZWFkLlxuICogVGhpcyBob29rIGlzIHByb3ZpZGVkIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBAcGFyYW0gZXZlbnRJZCAtIEV2ZW50IElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlRXZlbnRCb29raW5ncygnZXZlbnQtMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUV2ZW50Qm9va2luZ3MoXG4gIGV2ZW50SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPGFueVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBldmVudEtleXMuYm9va2luZ3MoZXZlbnRJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8YW55W10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgLy8gTm90ZTogVGhpcyBlbmRwb2ludCBtYXkgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IEFQSVxuICAgICAgLy8gQWRqdXN0IHRoZSBwYXRoIGJhc2VkIG9uIHlvdXIgYWN0dWFsIEFQSSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL2V2ZW50cy8ke2V2ZW50SWR9L2Jvb2tpbmdzYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhZXZlbnRJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
|