@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,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jackKeys = void 0;
4
+ exports.useJackConversations = useJackConversations;
5
+ exports.useJackConversation = useJackConversation;
6
+ exports.useJackHistory = useJackHistory;
7
+ const react_query_1 = require("@tanstack/react-query");
8
+ const client_1 = require("../client");
9
+ // ============================================================================
10
+ // QUERY KEY FACTORY
11
+ // ============================================================================
12
+ exports.jackKeys = {
13
+ all: ['jack'],
14
+ conversations: () => [...exports.jackKeys.all, 'conversations'],
15
+ conversation: (id) => [...exports.jackKeys.all, 'conversation', id],
16
+ history: () => [...exports.jackKeys.all, 'history'],
17
+ };
18
+ // ============================================================================
19
+ // QUERY HOOKS
20
+ // ============================================================================
21
+ /**
22
+ * Get all conversations with Jack
23
+ *
24
+ * @param limit - Maximum conversations to return (default: 20)
25
+ * @param options - TanStack Query options
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * const { data: conversations } = useJackConversations();
30
+ * ```
31
+ */
32
+ function useJackConversations(limit = 20, options) {
33
+ return (0, react_query_1.useQuery)({
34
+ queryKey: exports.jackKeys.conversations(),
35
+ queryFn: async () => {
36
+ const client = (0, client_1.getApiClient)();
37
+ const response = await client.get('/api/v1/support/jack/conversations', {
38
+ params: { limit },
39
+ });
40
+ // API wraps response in { data: {...}, meta: {...} }
41
+ return response.data?.data || response.data;
42
+ },
43
+ ...options,
44
+ });
45
+ }
46
+ /**
47
+ * Get a specific conversation with messages
48
+ *
49
+ * @param conversationId - The conversation ID
50
+ * @param options - TanStack Query options
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * const { data: conversation } = useJackConversation('conv-123');
55
+ * ```
56
+ */
57
+ function useJackConversation(conversationId, options) {
58
+ return (0, react_query_1.useQuery)({
59
+ queryKey: exports.jackKeys.conversation(conversationId),
60
+ queryFn: async () => {
61
+ const client = (0, client_1.getApiClient)();
62
+ const response = await client.get(`/api/v1/support/jack/conversations/${conversationId}`);
63
+ // API wraps response in { data: {...}, meta: {...} }
64
+ return response.data?.data || response.data;
65
+ },
66
+ enabled: !!conversationId,
67
+ ...options,
68
+ });
69
+ }
70
+ /**
71
+ * Get the most recent active conversation with Jack
72
+ *
73
+ * @param options - TanStack Query options
74
+ *
75
+ * @example
76
+ * ```tsx
77
+ * const { data: history } = useJackHistory();
78
+ * ```
79
+ */
80
+ function useJackHistory(options) {
81
+ return (0, react_query_1.useQuery)({
82
+ queryKey: exports.jackKeys.history(),
83
+ queryFn: async () => {
84
+ const client = (0, client_1.getApiClient)();
85
+ const response = await client.get('/api/v1/support/jack/history');
86
+ // API wraps response in { data: {...}, meta: {...} }
87
+ return response.data?.data || response.data;
88
+ },
89
+ ...options,
90
+ });
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9qYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXlEQSxvREFnQkM7QUFhRCxrREFlQztBQVlELHdDQWFDO0FBOUhELHVEQUFrRTtBQUNsRSxzQ0FBeUM7QUFFekMsK0VBQStFO0FBQy9FLG9CQUFvQjtBQUNwQiwrRUFBK0U7QUFFbEUsUUFBQSxRQUFRLEdBQUc7SUFDdEIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFVO0lBQ3RCLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFVO0lBQ2hFLFlBQVksRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQVU7SUFDNUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQVU7Q0FDckQsQ0FBQztBQThCRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLEtBQUssR0FBRyxFQUFFLEVBQ1YsT0FBMkU7SUFFM0UsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDbEMsT0FBTyxFQUFFLEtBQUssSUFBaUMsRUFBRTtZQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEVBQUU7Z0JBQ3RFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRTthQUNsQixDQUFDLENBQUM7WUFDSCxxREFBcUQ7WUFDckQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzlDLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxjQUFzQixFQUN0QixPQUE0RjtJQUU1RixPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxnQkFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFDL0MsT0FBTyxFQUFFLEtBQUssSUFBa0QsRUFBRTtZQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDMUYscURBQXFEO1lBQ3JELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxjQUFjO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BQTRGO0lBRTVGLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGdCQUFRLENBQUMsT0FBTyxFQUFFO1FBQzVCLE9BQU8sRUFBRSxLQUFLLElBQWtELEVBQUU7WUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDbEUscURBQXFEO1lBQ3JELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM5QyxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZIEZBQ1RPUllcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IGphY2tLZXlzID0ge1xuICBhbGw6IFsnamFjayddIGFzIGNvbnN0LFxuICBjb252ZXJzYXRpb25zOiAoKSA9PiBbLi4uamFja0tleXMuYWxsLCAnY29udmVyc2F0aW9ucyddIGFzIGNvbnN0LFxuICBjb252ZXJzYXRpb246IChpZDogc3RyaW5nKSA9PiBbLi4uamFja0tleXMuYWxsLCAnY29udmVyc2F0aW9uJywgaWRdIGFzIGNvbnN0LFxuICBoaXN0b3J5OiAoKSA9PiBbLi4uamFja0tleXMuYWxsLCAnaGlzdG9yeSddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBKYWNrQ29udmVyc2F0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgbWVzc2FnZUNvdW50OiBudW1iZXI7XG4gIGxhc3RNZXNzYWdlQXQ6IHN0cmluZyB8IG51bGw7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBpc0FyY2hpdmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEphY2tNZXNzYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcm9sZTogJ1VTRVInIHwgJ0FTU0lTVEFOVCcgfCAnU1lTVEVNJztcbiAgY29udGVudDogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvbXB0VG9rZW5zPzogbnVtYmVyO1xuICBjb21wbGV0aW9uVG9rZW5zPzogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKYWNrQ29udmVyc2F0aW9uV2l0aE1lc3NhZ2VzIGV4dGVuZHMgSmFja0NvbnZlcnNhdGlvbiB7XG4gIG1lc3NhZ2VzOiBKYWNrTWVzc2FnZVtdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBhbGwgY29udmVyc2F0aW9ucyB3aXRoIEphY2tcbiAqXG4gKiBAcGFyYW0gbGltaXQgLSBNYXhpbXVtIGNvbnZlcnNhdGlvbnMgdG8gcmV0dXJuIChkZWZhdWx0OiAyMClcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YTogY29udmVyc2F0aW9ucyB9ID0gdXNlSmFja0NvbnZlcnNhdGlvbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSmFja0NvbnZlcnNhdGlvbnMoXG4gIGxpbWl0ID0gMjAsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxKYWNrQ29udmVyc2F0aW9uW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGphY2tLZXlzLmNvbnZlcnNhdGlvbnMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxKYWNrQ29udmVyc2F0aW9uW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvamFjay9jb252ZXJzYXRpb25zJywge1xuICAgICAgICBwYXJhbXM6IHsgbGltaXQgfSxcbiAgICAgIH0pO1xuICAgICAgLy8gQVBJIHdyYXBzIHJlc3BvbnNlIGluIHsgZGF0YTogey4uLn0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYSBzcGVjaWZpYyBjb252ZXJzYXRpb24gd2l0aCBtZXNzYWdlc1xuICpcbiAqIEBwYXJhbSBjb252ZXJzYXRpb25JZCAtIFRoZSBjb252ZXJzYXRpb24gSURcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YTogY29udmVyc2F0aW9uIH0gPSB1c2VKYWNrQ29udmVyc2F0aW9uKCdjb252LTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VKYWNrQ29udmVyc2F0aW9uKFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8SmFja0NvbnZlcnNhdGlvbldpdGhNZXNzYWdlcyB8IG51bGw+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGphY2tLZXlzLmNvbnZlcnNhdGlvbihjb252ZXJzYXRpb25JZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8SmFja0NvbnZlcnNhdGlvbldpdGhNZXNzYWdlcyB8IG51bGw+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL3N1cHBvcnQvamFjay9jb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2UgaW4geyBkYXRhOiB7Li4ufSwgbWV0YTogey4uLn0gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhY29udmVyc2F0aW9uSWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb3N0IHJlY2VudCBhY3RpdmUgY29udmVyc2F0aW9uIHdpdGggSmFja1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YTogaGlzdG9yeSB9ID0gdXNlSmFja0hpc3RvcnkoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSmFja0hpc3RvcnkoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxKYWNrQ29udmVyc2F0aW9uV2l0aE1lc3NhZ2VzIHwgbnVsbD4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogamFja0tleXMuaGlzdG9yeSgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEphY2tDb252ZXJzYXRpb25XaXRoTWVzc2FnZXMgfCBudWxsPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9zdXBwb3J0L2phY2svaGlzdG9yeScpO1xuICAgICAgLy8gQVBJIHdyYXBzIHJlc3BvbnNlIGluIHsgZGF0YTogey4uLn0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,132 @@
1
+ import { UseQueryOptions } from '@tanstack/react-query';
2
+ import type { LibraryContentResponse, LibraryContentDetailResponse } from '../types';
3
+ export declare const libraryKeys: {
4
+ all: readonly ["library"];
5
+ lists: () => readonly ["library", "list"];
6
+ list: (filters?: LibraryFilters) => readonly ["library", "list", LibraryFilters | undefined];
7
+ featured: () => readonly ["library", "featured"];
8
+ categories: () => readonly ["library", "categories"];
9
+ details: () => readonly ["library", "detail"];
10
+ detail: (id: string) => readonly ["library", "detail", string];
11
+ };
12
+ export interface LibraryFilters {
13
+ page?: number;
14
+ limit?: number;
15
+ categoryId?: string;
16
+ type?: 'ARTICLE' | 'VIDEO' | 'PODCAST' | 'MEDITATION' | 'WORKSHEET';
17
+ search?: string;
18
+ isFeatured?: boolean;
19
+ drinkingIdentity?: 'SOBER' | 'SOBER_CURIOUS' | 'MINDFUL';
20
+ sortBy?: 'createdAt' | 'title' | 'viewCount';
21
+ sortOrder?: 'asc' | 'desc';
22
+ }
23
+ export interface PaginatedLibraryResponse {
24
+ content: LibraryContentResponse[];
25
+ total: number;
26
+ page: number;
27
+ limit: number;
28
+ totalPages: number;
29
+ }
30
+ export interface LibraryCategoryResponse {
31
+ id: string;
32
+ name: string;
33
+ slug: string;
34
+ description?: string;
35
+ icon?: string;
36
+ contentCount?: number;
37
+ }
38
+ /**
39
+ * Get paginated list of library content 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 } = useLibraryContent({
47
+ * page: 1,
48
+ * limit: 20,
49
+ * categoryId: 'cat-123',
50
+ * type: 'ARTICLE',
51
+ * isFeatured: true
52
+ * });
53
+ * ```
54
+ */
55
+ export declare function useLibraryContent(filters?: LibraryFilters, options?: Omit<UseQueryOptions<PaginatedLibraryResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedLibraryResponse, Error>;
56
+ /**
57
+ * Get featured library content
58
+ *
59
+ * @param options - TanStack Query options
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * const { data, isLoading } = useFeaturedContent();
64
+ * ```
65
+ */
66
+ export declare function useFeaturedContent(options?: Omit<UseQueryOptions<LibraryContentResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
67
+ id: string;
68
+ title: string;
69
+ slug: string;
70
+ summary?: Record<string, never>;
71
+ coverImage?: Record<string, never>;
72
+ categoryId?: Record<string, never>;
73
+ type: "ARTICLE" | "GUIDE" | "VIDEO" | "PODCAST" | "TOOL" | "WORKSHEET";
74
+ tags: string[];
75
+ readTimeMinutes?: Record<string, never>;
76
+ drinkingIdentities: string[];
77
+ isPremium: boolean;
78
+ isPublished: boolean;
79
+ isFeatured: boolean;
80
+ viewCount: number;
81
+ likeCount: number;
82
+ authorName?: Record<string, never>;
83
+ authorImage?: Record<string, never>;
84
+ createdAt: string;
85
+ updatedAt: string;
86
+ publishedAt?: Record<string, never>;
87
+ }[], Error>;
88
+ /**
89
+ * Get all library categories
90
+ *
91
+ * @param options - TanStack Query options
92
+ *
93
+ * @example
94
+ * ```tsx
95
+ * const { data, isLoading } = useLibraryCategories();
96
+ * ```
97
+ */
98
+ export declare function useLibraryCategories(options?: Omit<UseQueryOptions<LibraryCategoryResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<LibraryCategoryResponse[], Error>;
99
+ /**
100
+ * Get a single library item by ID
101
+ *
102
+ * @param id - Library content ID
103
+ * @param options - TanStack Query options
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * const { data, isLoading } = useLibraryItem('lib-123');
108
+ * ```
109
+ */
110
+ export declare function useLibraryItem(id: string, options?: Omit<UseQueryOptions<LibraryContentDetailResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
111
+ id: string;
112
+ title: string;
113
+ slug: string;
114
+ summary?: Record<string, never>;
115
+ coverImage?: Record<string, never>;
116
+ categoryId?: Record<string, never>;
117
+ type: "ARTICLE" | "GUIDE" | "VIDEO" | "PODCAST" | "TOOL" | "WORKSHEET";
118
+ tags: string[];
119
+ readTimeMinutes?: Record<string, never>;
120
+ drinkingIdentities: string[];
121
+ isPremium: boolean;
122
+ isPublished: boolean;
123
+ isFeatured: boolean;
124
+ viewCount: number;
125
+ likeCount: number;
126
+ authorName?: Record<string, never>;
127
+ authorImage?: Record<string, never>;
128
+ createdAt: string;
129
+ updatedAt: string;
130
+ publishedAt?: Record<string, never>;
131
+ content: string;
132
+ }, Error>;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.libraryKeys = void 0;
4
+ exports.useLibraryContent = useLibraryContent;
5
+ exports.useFeaturedContent = useFeaturedContent;
6
+ exports.useLibraryCategories = useLibraryCategories;
7
+ exports.useLibraryItem = useLibraryItem;
8
+ const react_query_1 = require("@tanstack/react-query");
9
+ const client_1 = require("../client");
10
+ // ============================================================================
11
+ // QUERY KEY FACTORY
12
+ // ============================================================================
13
+ exports.libraryKeys = {
14
+ all: ['library'],
15
+ lists: () => [...exports.libraryKeys.all, 'list'],
16
+ list: (filters) => [...exports.libraryKeys.lists(), filters],
17
+ featured: () => [...exports.libraryKeys.all, 'featured'],
18
+ categories: () => [...exports.libraryKeys.all, 'categories'],
19
+ details: () => [...exports.libraryKeys.all, 'detail'],
20
+ detail: (id) => [...exports.libraryKeys.details(), id],
21
+ };
22
+ // ============================================================================
23
+ // QUERY HOOKS
24
+ // ============================================================================
25
+ /**
26
+ * Get paginated list of library content with optional filters
27
+ *
28
+ * @param filters - Query parameters for filtering and pagination
29
+ * @param options - TanStack Query options
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * const { data, isLoading } = useLibraryContent({
34
+ * page: 1,
35
+ * limit: 20,
36
+ * categoryId: 'cat-123',
37
+ * type: 'ARTICLE',
38
+ * isFeatured: true
39
+ * });
40
+ * ```
41
+ */
42
+ function useLibraryContent(filters, options) {
43
+ return (0, react_query_1.useQuery)({
44
+ queryKey: exports.libraryKeys.list(filters),
45
+ queryFn: async () => {
46
+ const client = (0, client_1.getApiClient)();
47
+ const response = await client.get('/api/v1/library', {
48
+ params: filters,
49
+ });
50
+ return response.data;
51
+ },
52
+ ...options,
53
+ });
54
+ }
55
+ /**
56
+ * Get featured library content
57
+ *
58
+ * @param options - TanStack Query options
59
+ *
60
+ * @example
61
+ * ```tsx
62
+ * const { data, isLoading } = useFeaturedContent();
63
+ * ```
64
+ */
65
+ function useFeaturedContent(options) {
66
+ return (0, react_query_1.useQuery)({
67
+ queryKey: exports.libraryKeys.featured(),
68
+ queryFn: async () => {
69
+ const client = (0, client_1.getApiClient)();
70
+ const response = await client.get('/api/v1/library/featured');
71
+ return response.data;
72
+ },
73
+ ...options,
74
+ });
75
+ }
76
+ /**
77
+ * Get all library categories
78
+ *
79
+ * @param options - TanStack Query options
80
+ *
81
+ * @example
82
+ * ```tsx
83
+ * const { data, isLoading } = useLibraryCategories();
84
+ * ```
85
+ */
86
+ function useLibraryCategories(options) {
87
+ return (0, react_query_1.useQuery)({
88
+ queryKey: exports.libraryKeys.categories(),
89
+ queryFn: async () => {
90
+ const client = (0, client_1.getApiClient)();
91
+ const response = await client.get('/api/v1/library/categories');
92
+ return response.data;
93
+ },
94
+ ...options,
95
+ });
96
+ }
97
+ /**
98
+ * Get a single library item by ID
99
+ *
100
+ * @param id - Library content ID
101
+ * @param options - TanStack Query options
102
+ *
103
+ * @example
104
+ * ```tsx
105
+ * const { data, isLoading } = useLibraryItem('lib-123');
106
+ * ```
107
+ */
108
+ function useLibraryItem(id, options) {
109
+ return (0, react_query_1.useQuery)({
110
+ queryKey: exports.libraryKeys.detail(id),
111
+ queryFn: async () => {
112
+ const client = (0, client_1.getApiClient)();
113
+ const response = await client.get(`/api/v1/library/${id}`);
114
+ return response.data;
115
+ },
116
+ enabled: !!id,
117
+ ...options,
118
+ });
119
+ }
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9saWJyYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJFQSw4Q0FlQztBQVlELGdEQVlDO0FBWUQsb0RBWUM7QUFhRCx3Q0FjQztBQXJLRCx1REFBa0U7QUFDbEUsc0NBQXlDO0FBTXpDLCtFQUErRTtBQUMvRSxvQkFBb0I7QUFDcEIsK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBVTtJQUN6QixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNsRCxJQUFJLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQVU7SUFDOUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQVU7SUFDekQsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQVU7SUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQVU7SUFDdEQsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQVU7Q0FDaEUsQ0FBQztBQW1DRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixPQUF3QixFQUN4QixPQUFpRjtJQUVqRixPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxtQkFBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDbkMsT0FBTyxFQUFFLEtBQUssSUFBdUMsRUFBRTtZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ25ELE1BQU0sRUFBRSxPQUFPO2FBQ2hCLENBQUMsQ0FBQztZQUNILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxPQUFpRjtJQUVqRixPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxtQkFBVyxDQUFDLFFBQVEsRUFBRTtRQUNoQyxPQUFPLEVBQUUsS0FBSyxJQUF1QyxFQUFFO1lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzlELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxPQUFrRjtJQUVsRixPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxtQkFBVyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLEVBQUUsS0FBSyxJQUF3QyxFQUFFO1lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLEVBQVUsRUFDVixPQUFxRjtJQUVyRixPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxFQUFFLEtBQUssSUFBMkMsRUFBRTtZQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDYixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucyB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1xuICBMaWJyYXJ5Q29udGVudFJlc3BvbnNlLFxuICBMaWJyYXJ5Q29udGVudERldGFpbFJlc3BvbnNlLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWSBGQUNUT1JZXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBsaWJyYXJ5S2V5cyA9IHtcbiAgYWxsOiBbJ2xpYnJhcnknXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5saWJyYXJ5S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogTGlicmFyeUZpbHRlcnMpID0+IFsuLi5saWJyYXJ5S2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZmVhdHVyZWQ6ICgpID0+IFsuLi5saWJyYXJ5S2V5cy5hbGwsICdmZWF0dXJlZCddIGFzIGNvbnN0LFxuICBjYXRlZ29yaWVzOiAoKSA9PiBbLi4ubGlicmFyeUtleXMuYWxsLCAnY2F0ZWdvcmllcyddIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4ubGlicmFyeUtleXMuYWxsLCAnZGV0YWlsJ10gYXMgY29uc3QsXG4gIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi5saWJyYXJ5S2V5cy5kZXRhaWxzKCksIGlkXSBhcyBjb25zdCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlicmFyeUZpbHRlcnMge1xuICBwYWdlPzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgY2F0ZWdvcnlJZD86IHN0cmluZztcbiAgdHlwZT86ICdBUlRJQ0xFJyB8ICdWSURFTycgfCAnUE9EQ0FTVCcgfCAnTUVESVRBVElPTicgfCAnV09SS1NIRUVUJztcbiAgc2VhcmNoPzogc3RyaW5nO1xuICBpc0ZlYXR1cmVkPzogYm9vbGVhbjtcbiAgZHJpbmtpbmdJZGVudGl0eT86ICdTT0JFUicgfCAnU09CRVJfQ1VSSU9VUycgfCAnTUlOREZVTCc7XG4gIHNvcnRCeT86ICdjcmVhdGVkQXQnIHwgJ3RpdGxlJyB8ICd2aWV3Q291bnQnO1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRMaWJyYXJ5UmVzcG9uc2Uge1xuICBjb250ZW50OiBMaWJyYXJ5Q29udGVudFJlc3BvbnNlW107XG4gIHRvdGFsOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpYnJhcnlDYXRlZ29yeVJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzbHVnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjb250ZW50Q291bnQ/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHBhZ2luYXRlZCBsaXN0IG9mIGxpYnJhcnkgY29udGVudCB3aXRoIG9wdGlvbmFsIGZpbHRlcnNcbiAqXG4gKiBAcGFyYW0gZmlsdGVycyAtIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZUxpYnJhcnlDb250ZW50KHtcbiAqICAgcGFnZTogMSxcbiAqICAgbGltaXQ6IDIwLFxuICogICBjYXRlZ29yeUlkOiAnY2F0LTEyMycsXG4gKiAgIHR5cGU6ICdBUlRJQ0xFJyxcbiAqICAgaXNGZWF0dXJlZDogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxpYnJhcnlDb250ZW50KFxuICBmaWx0ZXJzPzogTGlicmFyeUZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRMaWJyYXJ5UmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGxpYnJhcnlLZXlzLmxpc3QoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkTGlicmFyeVJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9saWJyYXJ5Jywge1xuICAgICAgICBwYXJhbXM6IGZpbHRlcnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGZlYXR1cmVkIGxpYnJhcnkgY29udGVudFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VGZWF0dXJlZENvbnRlbnQoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmVhdHVyZWRDb250ZW50KFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8TGlicmFyeUNvbnRlbnRSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBsaWJyYXJ5S2V5cy5mZWF0dXJlZCgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPExpYnJhcnlDb250ZW50UmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvbGlicmFyeS9mZWF0dXJlZCcpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGxpYnJhcnkgY2F0ZWdvcmllc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VMaWJyYXJ5Q2F0ZWdvcmllcygpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaWJyYXJ5Q2F0ZWdvcmllcyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPExpYnJhcnlDYXRlZ29yeVJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGxpYnJhcnlLZXlzLmNhdGVnb3JpZXMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxMaWJyYXJ5Q2F0ZWdvcnlSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9saWJyYXJ5L2NhdGVnb3JpZXMnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIGxpYnJhcnkgaXRlbSBieSBJRFxuICpcbiAqIEBwYXJhbSBpZCAtIExpYnJhcnkgY29udGVudCBJRFxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZUxpYnJhcnlJdGVtKCdsaWItMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxpYnJhcnlJdGVtKFxuICBpZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8TGlicmFyeUNvbnRlbnREZXRhaWxSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbGlicmFyeUtleXMuZGV0YWlsKGlkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxMaWJyYXJ5Q29udGVudERldGFpbFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldChgL2FwaS92MS9saWJyYXJ5LyR7aWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhaWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Map Query Hooks
3
+ *
4
+ * TanStack Query hooks for map-related read operations.
5
+ * These hooks handle fetching map data including users, events, and businesses
6
+ * for display on the member map feature.
7
+ *
8
+ * @module api/queries/map
9
+ */
10
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
11
+ import type { MapUserResponse, MapEventResponse, MapHubResponse, MapBusinessResponse } from '../types';
12
+ /**
13
+ * Query key factory for map-related queries
14
+ */
15
+ export declare const mapKeys: {
16
+ all: readonly ["map"];
17
+ members: (params?: MapMembersParams) => readonly ["map", "members", MapMembersParams | undefined];
18
+ events: (params?: MapEventsParams) => readonly ["map", "events", MapEventsParams | undefined];
19
+ hubs: (params?: MapHubsParams) => readonly ["map", "hubs", MapHubsParams | undefined];
20
+ businesses: (params?: MapBusinessesParams) => readonly ["map", "businesses", MapBusinessesParams | undefined];
21
+ };
22
+ export interface MapMembersParams {
23
+ lat: number;
24
+ lng: number;
25
+ radius?: number;
26
+ hubId?: string;
27
+ openToMeetOnly?: boolean;
28
+ }
29
+ export interface MapEventsParams {
30
+ lat: number;
31
+ lng: number;
32
+ radius?: number;
33
+ hubId?: string;
34
+ upcoming?: boolean;
35
+ }
36
+ export interface MapHubsParams {
37
+ lat: number;
38
+ lng: number;
39
+ radius?: number;
40
+ city?: string;
41
+ }
42
+ export interface MapBusinessesParams {
43
+ lat: number;
44
+ lng: number;
45
+ radius?: number;
46
+ type?: string;
47
+ afDrinksOnly?: boolean;
48
+ }
49
+ /**
50
+ * Get members for map display
51
+ *
52
+ * @description
53
+ * Retrieves users who have opted to be visible on the member map.
54
+ * Only shows users who have enabled "open to meet" and shared their location.
55
+ * Premium feature.
56
+ *
57
+ * @endpoint GET /api/v1/map/members
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * import { useMapMembers } from '@growsober/sdk';
62
+ *
63
+ * function MemberMap() {
64
+ * const { data: members, isLoading } = useMapMembers({
65
+ * lat: 51.5074,
66
+ * lng: -0.1278,
67
+ * radius: 50, // 50km radius
68
+ * });
69
+ *
70
+ * if (isLoading) return <MapLoader />;
71
+ *
72
+ * return (
73
+ * <Map>
74
+ * {members?.map(member => (
75
+ * <Marker
76
+ * key={member.id}
77
+ * position={[member.locationLat, member.locationLong]}
78
+ * >
79
+ * <Avatar src={member.avatar} />
80
+ * </Marker>
81
+ * ))}
82
+ * </Map>
83
+ * );
84
+ * }
85
+ * ```
86
+ *
87
+ * @param params - Location and filter parameters
88
+ * @param options - TanStack Query options
89
+ * @returns TanStack Query result with array of map users
90
+ */
91
+ export declare function useMapMembers(params: MapMembersParams, options?: Omit<UseQueryOptions<MapUserResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<MapUserResponse[]>;
92
+ /**
93
+ * Get events for map display
94
+ *
95
+ * @description
96
+ * Retrieves events with location data for display on the map.
97
+ * Shows upcoming events within the specified radius.
98
+ *
99
+ * @endpoint GET /api/v1/map/events
100
+ *
101
+ * @example
102
+ * ```tsx
103
+ * import { useMapEvents } from '@growsober/sdk';
104
+ *
105
+ * function EventMap() {
106
+ * const { data: events, isLoading } = useMapEvents({
107
+ * lat: 51.5074,
108
+ * lng: -0.1278,
109
+ * radius: 25,
110
+ * upcoming: true,
111
+ * });
112
+ *
113
+ * return (
114
+ * <Map>
115
+ * {events?.map(event => (
116
+ * <Marker
117
+ * key={event.id}
118
+ * position={[event.locationLat, event.locationLong]}
119
+ * icon="event"
120
+ * >
121
+ * <EventPopup event={event} />
122
+ * </Marker>
123
+ * ))}
124
+ * </Map>
125
+ * );
126
+ * }
127
+ * ```
128
+ *
129
+ * @param params - Location and filter parameters
130
+ * @param options - TanStack Query options
131
+ * @returns TanStack Query result with array of map events
132
+ */
133
+ export declare function useMapEvents(params: MapEventsParams, options?: Omit<UseQueryOptions<MapEventResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<MapEventResponse[]>;
134
+ /**
135
+ * Get hubs for map display
136
+ *
137
+ * @description
138
+ * Retrieves hubs with location data for display on the map.
139
+ * Shows active hubs within the specified radius.
140
+ *
141
+ * @endpoint GET /api/v1/map/hubs
142
+ *
143
+ * @example
144
+ * ```tsx
145
+ * import { useMapHubs } from '@growsober/sdk';
146
+ *
147
+ * function HubMap() {
148
+ * const { data: hubs, isLoading } = useMapHubs({
149
+ * lat: 51.5074,
150
+ * lng: -0.1278,
151
+ * radius: 50,
152
+ * });
153
+ *
154
+ * return (
155
+ * <Map>
156
+ * {hubs?.map(hub => (
157
+ * <Marker
158
+ * key={hub.id}
159
+ * position={[hub.locationLat, hub.locationLong]}
160
+ * icon="hub"
161
+ * >
162
+ * <HubPopup hub={hub} />
163
+ * </Marker>
164
+ * ))}
165
+ * </Map>
166
+ * );
167
+ * }
168
+ * ```
169
+ *
170
+ * @param params - Location and filter parameters
171
+ * @param options - TanStack Query options
172
+ * @returns TanStack Query result with array of map hubs
173
+ */
174
+ export declare function useMapHubs(params: MapHubsParams, options?: Omit<UseQueryOptions<MapHubResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<MapHubResponse[]>;
175
+ /**
176
+ * Get businesses for map display
177
+ *
178
+ * @description
179
+ * Retrieves partner businesses with location data for display on the map.
180
+ * Can filter by type and whether they serve alcohol-free drinks.
181
+ *
182
+ * @endpoint GET /api/v1/map/businesses
183
+ *
184
+ * @example
185
+ * ```tsx
186
+ * import { useMapBusinesses } from '@growsober/sdk';
187
+ *
188
+ * function BusinessMap() {
189
+ * const { data: businesses, isLoading } = useMapBusinesses({
190
+ * lat: 51.5074,
191
+ * lng: -0.1278,
192
+ * radius: 10,
193
+ * afDrinksOnly: true, // Only show AF-friendly venues
194
+ * });
195
+ *
196
+ * return (
197
+ * <Map>
198
+ * {businesses?.map(business => (
199
+ * <Marker
200
+ * key={business.id}
201
+ * position={[business.locationLat, business.locationLong]}
202
+ * icon={business.hasAfDrinks ? 'af-venue' : 'venue'}
203
+ * >
204
+ * <BusinessPopup business={business} />
205
+ * </Marker>
206
+ * ))}
207
+ * </Map>
208
+ * );
209
+ * }
210
+ * ```
211
+ *
212
+ * @param params - Location and filter parameters
213
+ * @param options - TanStack Query options
214
+ * @returns TanStack Query result with array of map businesses
215
+ */
216
+ export declare function useMapBusinesses(params: MapBusinessesParams, options?: Omit<UseQueryOptions<MapBusinessResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<MapBusinessResponse[]>;