@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,332 @@
1
+ "use strict";
2
+ /**
3
+ * Auth Mutation Hooks
4
+ *
5
+ * TanStack Query mutation hooks for authentication-related write operations.
6
+ * These hooks handle user registration, login, token refresh, and Firebase authentication.
7
+ *
8
+ * @module api/mutations/auth
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.useRegister = useRegister;
12
+ exports.useLogin = useLogin;
13
+ exports.useRefreshAuthToken = useRefreshAuthToken;
14
+ exports.useFirebaseAuth = useFirebaseAuth;
15
+ const react_query_1 = require("@tanstack/react-query");
16
+ const client_1 = require("../client");
17
+ const users_1 = require("../queries/users");
18
+ // ============================================================================
19
+ // MUTATION HOOKS
20
+ // ============================================================================
21
+ /**
22
+ * Register a new user account
23
+ *
24
+ * @description
25
+ * Creates a new user account with email/phone and password.
26
+ * Returns authentication tokens and user information upon successful registration.
27
+ *
28
+ * @endpoint POST /auth/register
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * import { useRegister } from '@growsober/sdk';
33
+ *
34
+ * function RegisterForm() {
35
+ * const { mutate: register, isPending, error } = useRegister({
36
+ * onSuccess: (data) => {
37
+ * // Store tokens securely
38
+ * await SecureStore.setItemAsync('accessToken', data.accessToken);
39
+ * await SecureStore.setItemAsync('refreshToken', data.refreshToken);
40
+ * navigation.navigate('Onboarding');
41
+ * },
42
+ * onError: (error) => {
43
+ * Alert.alert('Registration failed', error.message);
44
+ * },
45
+ * });
46
+ *
47
+ * const handleSubmit = () => {
48
+ * register({
49
+ * email: 'user@example.com',
50
+ * password: 'SecurePassword123!',
51
+ * name: 'John Doe',
52
+ * });
53
+ * };
54
+ *
55
+ * return <Button onPress={handleSubmit} disabled={isPending} />;
56
+ * }
57
+ * ```
58
+ *
59
+ * @param options - TanStack Query mutation options
60
+ * @returns TanStack Query mutation result
61
+ */
62
+ function useRegister(options) {
63
+ const queryClient = (0, react_query_1.useQueryClient)();
64
+ return (0, react_query_1.useMutation)({
65
+ mutationFn: async (data) => {
66
+ const client = (0, client_1.getApiClient)();
67
+ const response = await client.post('/auth/register', data);
68
+ return response.data;
69
+ },
70
+ onSuccess: (data, variables, context) => {
71
+ // Invalidate current user query to trigger refetch with new token
72
+ queryClient.invalidateQueries({ queryKey: users_1.userKeys.me() });
73
+ // User's onSuccess is handled by spreading options
74
+ },
75
+ ...options,
76
+ });
77
+ }
78
+ /**
79
+ * Login with email/phone and password
80
+ *
81
+ * @description
82
+ * Authenticates an existing user with their credentials.
83
+ * Returns authentication tokens and user information upon successful login.
84
+ *
85
+ * @endpoint POST /auth/login
86
+ *
87
+ * @example
88
+ * ```tsx
89
+ * import { useLogin } from '@growsober/sdk';
90
+ *
91
+ * function LoginForm() {
92
+ * const { mutate: login, isPending, error } = useLogin({
93
+ * onSuccess: (data) => {
94
+ * // Store tokens securely
95
+ * await SecureStore.setItemAsync('accessToken', data.accessToken);
96
+ * await SecureStore.setItemAsync('refreshToken', data.refreshToken);
97
+ * navigation.navigate('Home');
98
+ * },
99
+ * });
100
+ *
101
+ * const handleSubmit = () => {
102
+ * login({
103
+ * email: 'user@example.com',
104
+ * password: 'SecurePassword123!',
105
+ * });
106
+ * };
107
+ *
108
+ * return (
109
+ * <form onSubmit={handleSubmit}>
110
+ * <input type="email" name="email" />
111
+ * <input type="password" name="password" />
112
+ * <button type="submit" disabled={isPending}>
113
+ * {isPending ? 'Logging in...' : 'Login'}
114
+ * </button>
115
+ * {error && <p className="error">{error.message}</p>}
116
+ * </form>
117
+ * );
118
+ * }
119
+ * ```
120
+ *
121
+ * @example
122
+ * Login with phone number:
123
+ * ```tsx
124
+ * login({
125
+ * phone: '+1234567890',
126
+ * password: 'SecurePassword123!',
127
+ * });
128
+ * ```
129
+ *
130
+ * @param options - TanStack Query mutation options
131
+ * @returns TanStack Query mutation result
132
+ */
133
+ function useLogin(options) {
134
+ const queryClient = (0, react_query_1.useQueryClient)();
135
+ return (0, react_query_1.useMutation)({
136
+ mutationFn: async (data) => {
137
+ const client = (0, client_1.getApiClient)();
138
+ const response = await client.post('/auth/login', data);
139
+ return response.data;
140
+ },
141
+ onSuccess: (data, variables, context) => {
142
+ // Invalidate current user query to trigger refetch with new token
143
+ queryClient.invalidateQueries({ queryKey: users_1.userKeys.me() });
144
+ // User's onSuccess is handled by spreading options
145
+ },
146
+ ...options,
147
+ });
148
+ }
149
+ /**
150
+ * Refresh access token using refresh token
151
+ *
152
+ * @description
153
+ * Obtains a new access token using a valid refresh token.
154
+ * Should be called when the access token expires.
155
+ *
156
+ * @endpoint POST /auth/refresh
157
+ *
158
+ * @example
159
+ * ```tsx
160
+ * import { useRefreshAuthToken } from '@growsober/sdk';
161
+ *
162
+ * function useTokenRefresh() {
163
+ * const { mutateAsync: refreshToken } = useRefreshAuthToken();
164
+ *
165
+ * const handleTokenExpired = async () => {
166
+ * const storedRefreshToken = await SecureStore.getItemAsync('refreshToken');
167
+ *
168
+ * if (!storedRefreshToken) {
169
+ * navigation.navigate('Login');
170
+ * return;
171
+ * }
172
+ *
173
+ * try {
174
+ * const { accessToken, refreshToken: newRefreshToken } = await refreshToken({
175
+ * refreshToken: storedRefreshToken,
176
+ * });
177
+ *
178
+ * // Store new tokens
179
+ * await SecureStore.setItemAsync('accessToken', accessToken);
180
+ * await SecureStore.setItemAsync('refreshToken', newRefreshToken);
181
+ * } catch (error) {
182
+ * // Refresh token is invalid or expired
183
+ * navigation.navigate('Login');
184
+ * }
185
+ * };
186
+ *
187
+ * return { handleTokenExpired };
188
+ * }
189
+ * ```
190
+ *
191
+ * @example
192
+ * Integrate with SDK configuration:
193
+ * ```tsx
194
+ * import { configureSDK } from '@growsober/sdk';
195
+ *
196
+ * configureSDK({
197
+ * baseURL: 'https://api.growsober.app',
198
+ * getAccessToken: async () => {
199
+ * return await SecureStore.getItemAsync('accessToken');
200
+ * },
201
+ * refreshAccessToken: async () => {
202
+ * const refreshToken = await SecureStore.getItemAsync('refreshToken');
203
+ * const { accessToken, refreshToken: newRefreshToken } = await fetch('/auth/refresh', {
204
+ * method: 'POST',
205
+ * body: JSON.stringify({ refreshToken }),
206
+ * }).then(r => r.json());
207
+ *
208
+ * await SecureStore.setItemAsync('accessToken', accessToken);
209
+ * await SecureStore.setItemAsync('refreshToken', newRefreshToken);
210
+ *
211
+ * return accessToken;
212
+ * },
213
+ * onUnauthorized: () => {
214
+ * navigation.navigate('Login');
215
+ * },
216
+ * });
217
+ * ```
218
+ *
219
+ * @param options - TanStack Query mutation options
220
+ * @returns TanStack Query mutation result
221
+ */
222
+ function useRefreshAuthToken(options) {
223
+ return (0, react_query_1.useMutation)({
224
+ mutationFn: async (data) => {
225
+ const client = (0, client_1.getApiClient)();
226
+ const response = await client.post('/auth/refresh', data);
227
+ return response.data;
228
+ },
229
+ ...options,
230
+ });
231
+ }
232
+ /**
233
+ * Authenticate with Firebase ID token
234
+ *
235
+ * @description
236
+ * Authenticates a user using a Firebase ID token.
237
+ * Creates a new user account if one doesn't exist, or logs in an existing user.
238
+ * Returns GrowSober authentication tokens and user information.
239
+ *
240
+ * @endpoint POST /auth/firebase
241
+ *
242
+ * @example
243
+ * ```tsx
244
+ * import { useFirebaseAuth } from '@growsober/sdk';
245
+ * import { signInWithPhoneNumber } from 'firebase/auth';
246
+ *
247
+ * function PhoneAuthScreen() {
248
+ * const { mutate: firebaseAuth, isPending } = useFirebaseAuth({
249
+ * onSuccess: (data) => {
250
+ * // Store GrowSober tokens
251
+ * await SecureStore.setItemAsync('accessToken', data.accessToken);
252
+ * await SecureStore.setItemAsync('refreshToken', data.refreshToken);
253
+ *
254
+ * if (data.user.onboardingCompleted) {
255
+ * navigation.navigate('Home');
256
+ * } else {
257
+ * navigation.navigate('Onboarding');
258
+ * }
259
+ * },
260
+ * onError: (error) => {
261
+ * Alert.alert('Authentication failed', error.message);
262
+ * },
263
+ * });
264
+ *
265
+ * const handlePhoneAuth = async (phoneNumber: string) => {
266
+ * try {
267
+ * // Firebase authentication flow
268
+ * const confirmation = await signInWithPhoneNumber(auth, phoneNumber);
269
+ * const code = await promptUserForCode(); // Your UI to get verification code
270
+ * const credential = await confirmation.confirm(code);
271
+ *
272
+ * // Get Firebase ID token
273
+ * const idToken = await credential.user.getIdToken();
274
+ *
275
+ * // Authenticate with GrowSober backend
276
+ * firebaseAuth({ idToken });
277
+ * } catch (error) {
278
+ * console.error('Phone auth error:', error);
279
+ * }
280
+ * };
281
+ *
282
+ * return <PhoneInput onSubmit={handlePhoneAuth} disabled={isPending} />;
283
+ * }
284
+ * ```
285
+ *
286
+ * @example
287
+ * With Google Sign-In:
288
+ * ```tsx
289
+ * import { GoogleSignin } from '@react-native-google-signin/google-signin';
290
+ *
291
+ * const handleGoogleSignIn = async () => {
292
+ * const { idToken } = await GoogleSignin.signIn();
293
+ * firebaseAuth({ idToken });
294
+ * };
295
+ * ```
296
+ *
297
+ * @example
298
+ * With Apple Sign-In:
299
+ * ```tsx
300
+ * import * as AppleAuthentication from 'expo-apple-authentication';
301
+ *
302
+ * const handleAppleSignIn = async () => {
303
+ * const credential = await AppleAuthentication.signInAsync({
304
+ * requestedScopes: [
305
+ * AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
306
+ * AppleAuthentication.AppleAuthenticationScope.EMAIL,
307
+ * ],
308
+ * });
309
+ * firebaseAuth({ idToken: credential.identityToken });
310
+ * };
311
+ * ```
312
+ *
313
+ * @param options - TanStack Query mutation options
314
+ * @returns TanStack Query mutation result
315
+ */
316
+ function useFirebaseAuth(options) {
317
+ const queryClient = (0, react_query_1.useQueryClient)();
318
+ return (0, react_query_1.useMutation)({
319
+ mutationFn: async (data) => {
320
+ const client = (0, client_1.getApiClient)();
321
+ const response = await client.post('/auth/firebase', data);
322
+ return response.data;
323
+ },
324
+ onSuccess: (data, variables, context) => {
325
+ // Invalidate current user query to trigger refetch with new token
326
+ queryClient.invalidateQueries({ queryKey: users_1.userKeys.me() });
327
+ // User's onSuccess is handled by spreading options
328
+ },
329
+ ...options,
330
+ });
331
+ }
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBMkRILGtDQWtCQztBQXlERCw0QkFrQkM7QUEyRUQsa0RBV0M7QUFzRkQsMENBa0JDO0FBcFZELHVEQUEyRztBQUMzRyxzQ0FBeUM7QUFDekMsNENBQTRDO0FBVTVDLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsU0FBZ0IsV0FBVyxDQUN6QixPQUFzRjtJQUV0RixNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQXFCLEVBQXlCLEVBQUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFlLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN0QyxrRUFBa0U7WUFDbEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNELG1EQUFtRDtRQUNyRCxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzREc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLE9BQW1GO0lBRW5GLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBa0IsRUFBeUIsRUFBRTtZQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQWUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN0QyxrRUFBa0U7WUFDbEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNELG1EQUFtRDtRQUNyRCxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3RUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsT0FBMkY7SUFFM0YsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUF5QixFQUEwQixFQUFFO1lBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBZ0IsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1GRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsT0FBMEY7SUFFMUYsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUF5QixFQUF5QixFQUFFO1lBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBZSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsa0VBQWtFO1lBQ2xFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRCxtREFBbUQ7UUFDckQsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGggTXV0YXRpb24gSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBob29rcyBmb3IgYXV0aGVudGljYXRpb24tcmVsYXRlZCB3cml0ZSBvcGVyYXRpb25zLlxuICogVGhlc2UgaG9va3MgaGFuZGxlIHVzZXIgcmVnaXN0cmF0aW9uLCBsb2dpbiwgdG9rZW4gcmVmcmVzaCwgYW5kIEZpcmViYXNlIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEBtb2R1bGUgYXBpL211dGF0aW9ucy9hdXRoXG4gKi9cblxuaW1wb3J0IHsgdXNlTXV0YXRpb24sIFVzZU11dGF0aW9uT3B0aW9ucywgVXNlTXV0YXRpb25SZXN1bHQsIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyB1c2VyS2V5cyB9IGZyb20gJy4uL3F1ZXJpZXMvdXNlcnMnO1xuaW1wb3J0IHR5cGUge1xuICBSZWdpc3RlclJlcXVlc3QsXG4gIExvZ2luUmVxdWVzdCxcbiAgUmVmcmVzaFRva2VuUmVxdWVzdCxcbiAgRmlyZWJhc2VBdXRoUmVxdWVzdCxcbiAgQXV0aFJlc3BvbnNlLFxuICBUb2tlblJlc3BvbnNlLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBuZXcgdXNlciBhY2NvdW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgbmV3IHVzZXIgYWNjb3VudCB3aXRoIGVtYWlsL3Bob25lIGFuZCBwYXNzd29yZC5cbiAqIFJldHVybnMgYXV0aGVudGljYXRpb24gdG9rZW5zIGFuZCB1c2VyIGluZm9ybWF0aW9uIHVwb24gc3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcmVnaXN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VSZWdpc3RlciB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBSZWdpc3RlckZvcm0oKSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiByZWdpc3RlciwgaXNQZW5kaW5nLCBlcnJvciB9ID0gdXNlUmVnaXN0ZXIoe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIC8vIFN0b3JlIHRva2VucyBzZWN1cmVseVxuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGRhdGEuYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBkYXRhLnJlZnJlc2hUb2tlbik7XG4gKiAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdPbmJvYXJkaW5nJyk7XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIEFsZXJ0LmFsZXJ0KCdSZWdpc3RyYXRpb24gZmFpbGVkJywgZXJyb3IubWVzc2FnZSk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gKiAgICAgcmVnaXN0ZXIoe1xuICogICAgICAgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyxcbiAqICAgICAgIHBhc3N3b3JkOiAnU2VjdXJlUGFzc3dvcmQxMjMhJyxcbiAqICAgICAgIG5hbWU6ICdKb2huIERvZScsXG4gKiAgICAgfSk7XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gPEJ1dHRvbiBvblByZXNzPXtoYW5kbGVTdWJtaXR9IGRpc2FibGVkPXtpc1BlbmRpbmd9IC8+O1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZ2lzdGVyKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8QXV0aFJlc3BvbnNlLCBFcnJvciwgUmVnaXN0ZXJSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8QXV0aFJlc3BvbnNlLCBFcnJvciwgUmVnaXN0ZXJSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBSZWdpc3RlclJlcXVlc3QpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PEF1dGhSZXNwb25zZT4oJy9hdXRoL3JlZ2lzdGVyJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjdXJyZW50IHVzZXIgcXVlcnkgdG8gdHJpZ2dlciByZWZldGNoIHdpdGggbmV3IHRva2VuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5tZSgpIH0pO1xuICAgICAgLy8gVXNlcidzIG9uU3VjY2VzcyBpcyBoYW5kbGVkIGJ5IHNwcmVhZGluZyBvcHRpb25zXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2dpbiB3aXRoIGVtYWlsL3Bob25lIGFuZCBwYXNzd29yZFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXV0aGVudGljYXRlcyBhbiBleGlzdGluZyB1c2VyIHdpdGggdGhlaXIgY3JlZGVudGlhbHMuXG4gKiBSZXR1cm5zIGF1dGhlbnRpY2F0aW9uIHRva2VucyBhbmQgdXNlciBpbmZvcm1hdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgbG9naW4uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvbG9naW5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VMb2dpbiB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBMb2dpbkZvcm0oKSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiBsb2dpbiwgaXNQZW5kaW5nLCBlcnJvciB9ID0gdXNlTG9naW4oe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIC8vIFN0b3JlIHRva2VucyBzZWN1cmVseVxuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGRhdGEuYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBkYXRhLnJlZnJlc2hUb2tlbik7XG4gKiAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdIb21lJyk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gKiAgICAgbG9naW4oe1xuICogICAgICAgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyxcbiAqICAgICAgIHBhc3N3b3JkOiAnU2VjdXJlUGFzc3dvcmQxMjMhJyxcbiAqICAgICB9KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gKiAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgbmFtZT1cImVtYWlsXCIgLz5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwicGFzc3dvcmRcIiAvPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgZGlzYWJsZWQ9e2lzUGVuZGluZ30+XG4gKiAgICAgICAgIHtpc1BlbmRpbmcgPyAnTG9nZ2luZyBpbi4uLicgOiAnTG9naW4nfVxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgICB7ZXJyb3IgJiYgPHAgY2xhc3NOYW1lPVwiZXJyb3JcIj57ZXJyb3IubWVzc2FnZX08L3A+fVxuICogICAgIDwvZm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBMb2dpbiB3aXRoIHBob25lIG51bWJlcjpcbiAqIGBgYHRzeFxuICogbG9naW4oe1xuICogICBwaG9uZTogJysxMjM0NTY3ODkwJyxcbiAqICAgcGFzc3dvcmQ6ICdTZWN1cmVQYXNzd29yZDEyMyEnLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTG9naW4oXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxBdXRoUmVzcG9uc2UsIEVycm9yLCBMb2dpblJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxBdXRoUmVzcG9uc2UsIEVycm9yLCBMb2dpblJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8QXV0aFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8QXV0aFJlc3BvbnNlPignL2F1dGgvbG9naW4nLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCBuZXcgdG9rZW5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG4gICAgICAvLyBVc2VyJ3Mgb25TdWNjZXNzIGlzIGhhbmRsZWQgYnkgc3ByZWFkaW5nIG9wdGlvbnNcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggYWNjZXNzIHRva2VuIHVzaW5nIHJlZnJlc2ggdG9rZW5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE9idGFpbnMgYSBuZXcgYWNjZXNzIHRva2VuIHVzaW5nIGEgdmFsaWQgcmVmcmVzaCB0b2tlbi5cbiAqIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcmVmcmVzaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVJlZnJlc2hBdXRoVG9rZW4gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gdXNlVG9rZW5SZWZyZXNoKCkge1xuICogICBjb25zdCB7IG11dGF0ZUFzeW5jOiByZWZyZXNoVG9rZW4gfSA9IHVzZVJlZnJlc2hBdXRoVG9rZW4oKTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVRva2VuRXhwaXJlZCA9IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCBzdG9yZWRSZWZyZXNoVG9rZW4gPSBhd2FpdCBTZWN1cmVTdG9yZS5nZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicpO1xuICpcbiAqICAgICBpZiAoIXN0b3JlZFJlZnJlc2hUb2tlbikge1xuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnTG9naW4nKTtcbiAqICAgICAgIHJldHVybjtcbiAqICAgICB9XG4gKlxuICogICAgIHRyeSB7XG4gKiAgICAgICBjb25zdCB7IGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW46IG5ld1JlZnJlc2hUb2tlbiB9ID0gYXdhaXQgcmVmcmVzaFRva2VuKHtcbiAqICAgICAgICAgcmVmcmVzaFRva2VuOiBzdG9yZWRSZWZyZXNoVG9rZW4sXG4gKiAgICAgICB9KTtcbiAqXG4gKiAgICAgICAvLyBTdG9yZSBuZXcgdG9rZW5zXG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ2FjY2Vzc1Rva2VuJywgYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBuZXdSZWZyZXNoVG9rZW4pO1xuICogICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgICAvLyBSZWZyZXNoIHRva2VuIGlzIGludmFsaWQgb3IgZXhwaXJlZFxuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnTG9naW4nKTtcbiAqICAgICB9XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4geyBoYW5kbGVUb2tlbkV4cGlyZWQgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBJbnRlZ3JhdGUgd2l0aCBTREsgY29uZmlndXJhdGlvbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgY29uZmlndXJlU0RLIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGNvbmZpZ3VyZVNESyh7XG4gKiAgIGJhc2VVUkw6ICdodHRwczovL2FwaS5ncm93c29iZXIuYXBwJyxcbiAqICAgZ2V0QWNjZXNzVG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICByZXR1cm4gYXdhaXQgU2VjdXJlU3RvcmUuZ2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicpO1xuICogICB9LFxuICogICByZWZyZXNoQWNjZXNzVG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBhd2FpdCBTZWN1cmVTdG9yZS5nZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicpO1xuICogICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbjogbmV3UmVmcmVzaFRva2VuIH0gPSBhd2FpdCBmZXRjaCgnL2F1dGgvcmVmcmVzaCcsIHtcbiAqICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICogICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyByZWZyZXNoVG9rZW4gfSksXG4gKiAgICAgfSkudGhlbihyID0+IHIuanNvbigpKTtcbiAqXG4gKiAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGFjY2Vzc1Rva2VuKTtcbiAqICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicsIG5ld1JlZnJlc2hUb2tlbik7XG4gKlxuICogICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAqICAgfSxcbiAqICAgb25VbmF1dGhvcml6ZWQ6ICgpID0+IHtcbiAqICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdMb2dpbicpO1xuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaEF1dGhUb2tlbihcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPFRva2VuUmVzcG9uc2UsIEVycm9yLCBSZWZyZXNoVG9rZW5SZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VG9rZW5SZXNwb25zZSwgRXJyb3IsIFJlZnJlc2hUb2tlblJlcXVlc3Q+IHtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogUmVmcmVzaFRva2VuUmVxdWVzdCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PFRva2VuUmVzcG9uc2U+KCcvYXV0aC9yZWZyZXNoJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0ZSB3aXRoIEZpcmViYXNlIElEIHRva2VuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBdXRoZW50aWNhdGVzIGEgdXNlciB1c2luZyBhIEZpcmViYXNlIElEIHRva2VuLlxuICogQ3JlYXRlcyBhIG5ldyB1c2VyIGFjY291bnQgaWYgb25lIGRvZXNuJ3QgZXhpc3QsIG9yIGxvZ3MgaW4gYW4gZXhpc3RpbmcgdXNlci5cbiAqIFJldHVybnMgR3Jvd1NvYmVyIGF1dGhlbnRpY2F0aW9uIHRva2VucyBhbmQgdXNlciBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXV0aC9maXJlYmFzZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZUZpcmViYXNlQXV0aCB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqIGltcG9ydCB7IHNpZ25JbldpdGhQaG9uZU51bWJlciB9IGZyb20gJ2ZpcmViYXNlL2F1dGgnO1xuICpcbiAqIGZ1bmN0aW9uIFBob25lQXV0aFNjcmVlbigpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IGZpcmViYXNlQXV0aCwgaXNQZW5kaW5nIH0gPSB1c2VGaXJlYmFzZUF1dGgoe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIC8vIFN0b3JlIEdyb3dTb2JlciB0b2tlbnNcbiAqICAgICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYygnYWNjZXNzVG9rZW4nLCBkYXRhLmFjY2Vzc1Rva2VuKTtcbiAqICAgICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYygncmVmcmVzaFRva2VuJywgZGF0YS5yZWZyZXNoVG9rZW4pO1xuICpcbiAqICAgICAgIGlmIChkYXRhLnVzZXIub25ib2FyZGluZ0NvbXBsZXRlZCkge1xuICogICAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdIb21lJyk7XG4gKiAgICAgICB9IGVsc2Uge1xuICogICAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdPbmJvYXJkaW5nJyk7XG4gKiAgICAgICB9XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIEFsZXJ0LmFsZXJ0KCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLCBlcnJvci5tZXNzYWdlKTtcbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVBob25lQXV0aCA9IGFzeW5jIChwaG9uZU51bWJlcjogc3RyaW5nKSA9PiB7XG4gKiAgICAgdHJ5IHtcbiAqICAgICAgIC8vIEZpcmViYXNlIGF1dGhlbnRpY2F0aW9uIGZsb3dcbiAqICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IHNpZ25JbldpdGhQaG9uZU51bWJlcihhdXRoLCBwaG9uZU51bWJlcik7XG4gKiAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgcHJvbXB0VXNlckZvckNvZGUoKTsgLy8gWW91ciBVSSB0byBnZXQgdmVyaWZpY2F0aW9uIGNvZGVcbiAqICAgICAgIGNvbnN0IGNyZWRlbnRpYWwgPSBhd2FpdCBjb25maXJtYXRpb24uY29uZmlybShjb2RlKTtcbiAqXG4gKiAgICAgICAvLyBHZXQgRmlyZWJhc2UgSUQgdG9rZW5cbiAqICAgICAgIGNvbnN0IGlkVG9rZW4gPSBhd2FpdCBjcmVkZW50aWFsLnVzZXIuZ2V0SWRUb2tlbigpO1xuICpcbiAqICAgICAgIC8vIEF1dGhlbnRpY2F0ZSB3aXRoIEdyb3dTb2JlciBiYWNrZW5kXG4gKiAgICAgICBmaXJlYmFzZUF1dGgoeyBpZFRva2VuIH0pO1xuICogICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgICBjb25zb2xlLmVycm9yKCdQaG9uZSBhdXRoIGVycm9yOicsIGVycm9yKTtcbiAqICAgICB9XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gPFBob25lSW5wdXQgb25TdWJtaXQ9e2hhbmRsZVBob25lQXV0aH0gZGlzYWJsZWQ9e2lzUGVuZGluZ30gLz47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBHb29nbGUgU2lnbi1JbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgR29vZ2xlU2lnbmluIH0gZnJvbSAnQHJlYWN0LW5hdGl2ZS1nb29nbGUtc2lnbmluL2dvb2dsZS1zaWduaW4nO1xuICpcbiAqIGNvbnN0IGhhbmRsZUdvb2dsZVNpZ25JbiA9IGFzeW5jICgpID0+IHtcbiAqICAgY29uc3QgeyBpZFRva2VuIH0gPSBhd2FpdCBHb29nbGVTaWduaW4uc2lnbkluKCk7XG4gKiAgIGZpcmViYXNlQXV0aCh7IGlkVG9rZW4gfSk7XG4gKiB9O1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggQXBwbGUgU2lnbi1JbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0ICogYXMgQXBwbGVBdXRoZW50aWNhdGlvbiBmcm9tICdleHBvLWFwcGxlLWF1dGhlbnRpY2F0aW9uJztcbiAqXG4gKiBjb25zdCBoYW5kbGVBcHBsZVNpZ25JbiA9IGFzeW5jICgpID0+IHtcbiAqICAgY29uc3QgY3JlZGVudGlhbCA9IGF3YWl0IEFwcGxlQXV0aGVudGljYXRpb24uc2lnbkluQXN5bmMoe1xuICogICAgIHJlcXVlc3RlZFNjb3BlczogW1xuICogICAgICAgQXBwbGVBdXRoZW50aWNhdGlvbi5BcHBsZUF1dGhlbnRpY2F0aW9uU2NvcGUuRlVMTF9OQU1FLFxuICogICAgICAgQXBwbGVBdXRoZW50aWNhdGlvbi5BcHBsZUF1dGhlbnRpY2F0aW9uU2NvcGUuRU1BSUwsXG4gKiAgICAgXSxcbiAqICAgfSk7XG4gKiAgIGZpcmViYXNlQXV0aCh7IGlkVG9rZW46IGNyZWRlbnRpYWwuaWRlbnRpdHlUb2tlbiB9KTtcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmlyZWJhc2VBdXRoKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8QXV0aFJlc3BvbnNlLCBFcnJvciwgRmlyZWJhc2VBdXRoUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEF1dGhSZXNwb25zZSwgRXJyb3IsIEZpcmViYXNlQXV0aFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IEZpcmViYXNlQXV0aFJlcXVlc3QpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PEF1dGhSZXNwb25zZT4oJy9hdXRoL2ZpcmViYXNlJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjdXJyZW50IHVzZXIgcXVlcnkgdG8gdHJpZ2dlciByZWZldGNoIHdpdGggbmV3IHRva2VuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5tZSgpIH0pO1xuICAgICAgLy8gVXNlcidzIG9uU3VjY2VzcyBpcyBoYW5kbGVkIGJ5IHNwcmVhZGluZyBvcHRpb25zXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
2
+ import type { BookingResponse } from '../types';
3
+ /**
4
+ * Create a new booking for an event
5
+ *
6
+ * @param options - TanStack Query mutation options
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const { mutate, isPending } = useCreateBooking();
11
+ *
12
+ * // Simple usage - just pass eventId
13
+ * mutate({ eventId: 'event-123' });
14
+ *
15
+ * // With optional data
16
+ * mutate({
17
+ * eventId: 'event-123',
18
+ * ticketCount: 2,
19
+ * notes: 'Vegetarian meal preferred'
20
+ * });
21
+ * ```
22
+ */
23
+ export declare function useCreateBooking(options?: Omit<UseMutationOptions<BookingResponse, Error, {
24
+ eventId: string;
25
+ ticketCount?: number;
26
+ notes?: string;
27
+ }>, 'mutationFn'>): UseMutationResult<BookingResponse, Error, {
28
+ eventId: string;
29
+ ticketCount?: number;
30
+ notes?: string;
31
+ }>;
32
+ /**
33
+ * Cancel a booking
34
+ *
35
+ * @param options - TanStack Query mutation options
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * const { mutate, isPending } = useCancelBooking();
40
+ *
41
+ * mutate('booking-123');
42
+ * ```
43
+ */
44
+ export declare function useCancelBooking(options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>): UseMutationResult<void, Error, string>;
45
+ /**
46
+ * Check in a booking
47
+ *
48
+ * Note: This is typically used by event hosts/ambassadors to check in attendees
49
+ *
50
+ * @param options - TanStack Query mutation options
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * const { mutate, isPending } = useCheckInBooking();
55
+ *
56
+ * mutate('booking-123');
57
+ * ```
58
+ */
59
+ export declare function useCheckInBooking(options?: Omit<UseMutationOptions<BookingResponse, Error, string>, 'mutationFn'>): UseMutationResult<BookingResponse, Error, string>;
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCreateBooking = useCreateBooking;
4
+ exports.useCancelBooking = useCancelBooking;
5
+ exports.useCheckInBooking = useCheckInBooking;
6
+ const react_query_1 = require("@tanstack/react-query");
7
+ const client_1 = require("../client");
8
+ const bookings_1 = require("../queries/bookings");
9
+ const events_1 = require("../queries/events");
10
+ // ============================================================================
11
+ // MUTATION HOOKS
12
+ // ============================================================================
13
+ /**
14
+ * Create a new booking for an event
15
+ *
16
+ * @param options - TanStack Query mutation options
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * const { mutate, isPending } = useCreateBooking();
21
+ *
22
+ * // Simple usage - just pass eventId
23
+ * mutate({ eventId: 'event-123' });
24
+ *
25
+ * // With optional data
26
+ * mutate({
27
+ * eventId: 'event-123',
28
+ * ticketCount: 2,
29
+ * notes: 'Vegetarian meal preferred'
30
+ * });
31
+ * ```
32
+ */
33
+ function useCreateBooking(options) {
34
+ const queryClient = (0, react_query_1.useQueryClient)();
35
+ return (0, react_query_1.useMutation)({
36
+ mutationFn: async ({ eventId, ticketCount, notes, }) => {
37
+ const client = (0, client_1.getApiClient)();
38
+ const data = {};
39
+ if (ticketCount)
40
+ data.ticketCount = ticketCount;
41
+ if (notes)
42
+ data.notes = notes;
43
+ const response = await client.post(`/api/v1/events/${eventId}/book`, data);
44
+ return response.data;
45
+ },
46
+ onSuccess: (newBooking, variables, context) => {
47
+ // Invalidate user's bookings list
48
+ queryClient.invalidateQueries({ queryKey: bookings_1.bookingKeys.mine() });
49
+ // Invalidate all booking lists
50
+ queryClient.invalidateQueries({ queryKey: bookings_1.bookingKeys.lists() });
51
+ // Invalidate the event to reflect updated booking count
52
+ queryClient.invalidateQueries({
53
+ queryKey: events_1.eventKeys.detail(variables.eventId)
54
+ });
55
+ // Invalidate event bookings if applicable
56
+ queryClient.invalidateQueries({
57
+ queryKey: events_1.eventKeys.bookings(variables.eventId)
58
+ });
59
+ // Invalidate ambient events
60
+ queryClient.invalidateQueries({ queryKey: events_1.eventKeys.ambient() });
61
+ // Call user's onSuccess if provided
62
+ },
63
+ ...options,
64
+ });
65
+ }
66
+ /**
67
+ * Cancel a booking
68
+ *
69
+ * @param options - TanStack Query mutation options
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * const { mutate, isPending } = useCancelBooking();
74
+ *
75
+ * mutate('booking-123');
76
+ * ```
77
+ */
78
+ function useCancelBooking(options) {
79
+ const queryClient = (0, react_query_1.useQueryClient)();
80
+ return (0, react_query_1.useMutation)({
81
+ mutationFn: async (id) => {
82
+ const client = (0, client_1.getApiClient)();
83
+ await client.delete(`/api/v1/bookings/${id}`);
84
+ },
85
+ onSuccess: (data, bookingId, context) => {
86
+ // Remove the booking from cache
87
+ queryClient.removeQueries({ queryKey: bookings_1.bookingKeys.detail(bookingId) });
88
+ // Invalidate user's bookings list
89
+ queryClient.invalidateQueries({ queryKey: bookings_1.bookingKeys.mine() });
90
+ // Invalidate all booking lists
91
+ queryClient.invalidateQueries({ queryKey: bookings_1.bookingKeys.lists() });
92
+ // Invalidate QR code cache
93
+ queryClient.removeQueries({ queryKey: bookings_1.bookingKeys.qrCode(bookingId) });
94
+ // Invalidate events to reflect updated booking counts
95
+ queryClient.invalidateQueries({ queryKey: events_1.eventKeys.lists() });
96
+ queryClient.invalidateQueries({ queryKey: events_1.eventKeys.upcoming() });
97
+ queryClient.invalidateQueries({ queryKey: events_1.eventKeys.ambient() });
98
+ // Call user's onSuccess if provided
99
+ },
100
+ ...options,
101
+ });
102
+ }
103
+ /**
104
+ * Check in a booking
105
+ *
106
+ * Note: This is typically used by event hosts/ambassadors to check in attendees
107
+ *
108
+ * @param options - TanStack Query mutation options
109
+ *
110
+ * @example
111
+ * ```tsx
112
+ * const { mutate, isPending } = useCheckInBooking();
113
+ *
114
+ * mutate('booking-123');
115
+ * ```
116
+ */
117
+ function useCheckInBooking(options) {
118
+ const queryClient = (0, react_query_1.useQueryClient)();
119
+ return (0, react_query_1.useMutation)({
120
+ mutationFn: async (id) => {
121
+ const client = (0, client_1.getApiClient)();
122
+ const response = await client.post(`/api/v1/bookings/${id}/check-in`);
123
+ return response.data;
124
+ },
125
+ onSuccess: (checkedInBooking, bookingId, context) => {
126
+ // Update the booking in cache
127
+ queryClient.setQueryData(bookings_1.bookingKeys.detail(bookingId), checkedInBooking);
128
+ // Invalidate user's bookings list to reflect check-in status
129
+ queryClient.invalidateQueries({ queryKey: bookings_1.bookingKeys.mine() });
130
+ // Invalidate all booking lists
131
+ queryClient.invalidateQueries({ queryKey: bookings_1.bookingKeys.lists() });
132
+ // Invalidate event bookings if applicable
133
+ if (checkedInBooking.eventId) {
134
+ queryClient.invalidateQueries({
135
+ queryKey: events_1.eventKeys.bookings(checkedInBooking.eventId)
136
+ });
137
+ }
138
+ // Call user's onSuccess if provided
139
+ },
140
+ ...options,
141
+ });
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9ib29raW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1DQSw0Q0F5REM7QUFjRCw0Q0FnQ0M7QUFnQkQsOENBbUNDO0FBN0xELHVEQUsrQjtBQUMvQixzQ0FBeUM7QUFFekMsa0RBQWtEO0FBQ2xELDhDQUE4QztBQUU5QywrRUFBK0U7QUFDL0UsaUJBQWlCO0FBQ2pCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixPQU9DO0lBTUQsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUNqQixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssR0FLTixFQUE0QixFQUFFO1lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxHQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDaEQsSUFBSSxLQUFLO2dCQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsT0FBTyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0UsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzVDLGtDQUFrQztZQUNsQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFD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LENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDbEQsOEJBQThCO1lBQzlCLFdBQVcsQ0FBQyxZQUFZLENBQ3RCLHNCQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUM3QixnQkFBZ0IsQ0FDakIsQ0FBQztZQUVGLDZEQUE2RDtZQUM3RCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFaEUsK0JBQStCO1lBQy9CLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVqRSwwQ0FBMEM7WUFDMUMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsV0FBVyxDQUFDLGlCQUFpQixDQUFDO29CQUM1QixRQUFRLEVBQUUsa0JBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2lCQUN2RCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsb0NBQW9DO1FBQ3RDLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdXNlTXV0YXRpb24sXG4gIHVzZVF1ZXJ5Q2xpZW50LFxuICBVc2VNdXRhdGlvbk9wdGlvbnMsXG4gIFVzZU11dGF0aW9uUmVzdWx0LFxufSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQm9va2luZ1Jlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYm9va2luZ0tleXMgfSBmcm9tICcuLi9xdWVyaWVzL2Jvb2tpbmdzJztcbmltcG9ydCB7IGV2ZW50S2V5cyB9IGZyb20gJy4uL3F1ZXJpZXMvZXZlbnRzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgYm9va2luZyBmb3IgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVCb29raW5nKCk7XG4gKlxuICogLy8gU2ltcGxlIHVzYWdlIC0ganVzdCBwYXNzIGV2ZW50SWRcbiAqIG11dGF0ZSh7IGV2ZW50SWQ6ICdldmVudC0xMjMnIH0pO1xuICpcbiAqIC8vIFdpdGggb3B0aW9uYWwgZGF0YVxuICogbXV0YXRlKHtcbiAqICAgZXZlbnRJZDogJ2V2ZW50LTEyMycsXG4gKiAgIHRpY2tldENvdW50OiAyLFxuICogICBub3RlczogJ1ZlZ2V0YXJpYW4gbWVhbCBwcmVmZXJyZWQnXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlQm9va2luZyhcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPFxuICAgICAgQm9va2luZ1Jlc3BvbnNlLFxuICAgICAgRXJyb3IsXG4gICAgICB7IGV2ZW50SWQ6IHN0cmluZzsgdGlja2V0Q291bnQ/OiBudW1iZXI7IG5vdGVzPzogc3RyaW5nIH1cbiAgICA+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxcbiAgQm9va2luZ1Jlc3BvbnNlLFxuICBFcnJvcixcbiAgeyBldmVudElkOiBzdHJpbmc7IHRpY2tldENvdW50PzogbnVtYmVyOyBub3Rlcz86IHN0cmluZyB9XG4+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGV2ZW50SWQsXG4gICAgICB0aWNrZXRDb3VudCxcbiAgICAgIG5vdGVzLFxuICAgIH06IHtcbiAgICAgIGV2ZW50SWQ6IHN0cmluZztcbiAgICAgIHRpY2tldENvdW50PzogbnVtYmVyO1xuICAgICAgbm90ZXM/OiBzdHJpbmc7XG4gICAgfSk6IFByb21pc2U8Qm9va2luZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9O1xuICAgICAgaWYgKHRpY2tldENvdW50KSBkYXRhLnRpY2tldENvdW50ID0gdGlja2V0Q291bnQ7XG4gICAgICBpZiAobm90ZXMpIGRhdGEubm90ZXMgPSBub3RlcztcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC9hcGkvdjEvZXZlbnRzLyR7ZXZlbnRJZH0vYm9va2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdCb29raW5nLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgdXNlcidzIGJvb2tpbmdzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IGJvb2tpbmdLZXlzLm1pbmUoKSB9KTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSBhbGwgYm9va2luZyBsaXN0c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogYm9va2luZ0tleXMubGlzdHMoKSB9KTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZXZlbnQgdG8gcmVmbGVjdCB1cGRhdGVkIGJvb2tpbmcgY291bnRcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGV2ZW50S2V5cy5kZXRhaWwodmFyaWFibGVzLmV2ZW50SWQpXG4gICAgICB9KTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSBldmVudCBib29raW5ncyBpZiBhcHBsaWNhYmxlXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBldmVudEtleXMuYm9va2luZ3ModmFyaWFibGVzLmV2ZW50SWQpXG4gICAgICB9KTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSBhbWJpZW50IGV2ZW50c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogZXZlbnRLZXlzLmFtYmllbnQoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYW5jZWwgYSBib29raW5nXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlQ2FuY2VsQm9va2luZygpO1xuICpcbiAqIG11dGF0ZSgnYm9va2luZy0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FuY2VsQm9va2luZyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPHZvaWQsIEVycm9yLCBzdHJpbmc+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDx2b2lkLCBFcnJvciwgc3RyaW5nPiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5kZWxldGUoYC9hcGkvdjEvYm9va2luZ3MvJHtpZH1gKTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIGJvb2tpbmdJZCwgY29udGV4dCkgPT4ge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBib29raW5nIGZyb20gY2FjaGVcbiAgICAgIHF1ZXJ5Q2xpZW50LnJlbW92ZVF1ZXJpZXMoeyBxdWVyeUtleTogYm9va2luZ0tleXMuZGV0YWlsKGJvb2tpbmdJZCkgfSk7XG5cbiAgICAgIC8vIEludmFsaWRhdGUgdXNlcidzIGJvb2tpbmdzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IGJvb2tpbmdLZXlzLm1pbmUoKSB9KTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSBhbGwgYm9va2luZyBsaXN0c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogYm9va2luZ0tleXMubGlzdHMoKSB9KTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSBRUiBjb2RlIGNhY2hlXG4gICAgICBxdWVyeUNsaWVudC5yZW1vdmVRdWVyaWVzKHsgcXVlcnlLZXk6IGJvb2tpbmdLZXlzLnFyQ29kZShib29raW5nSWQpIH0pO1xuXG4gICAgICAvLyBJbnZhbGlkYXRlIGV2ZW50cyB0byByZWZsZWN0IHVwZGF0ZWQgYm9va2luZyBjb3VudHNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IGV2ZW50S2V5cy5saXN0cygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogZXZlbnRLZXlzLnVwY29taW5nKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBldmVudEtleXMuYW1iaWVudCgpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrIGluIGEgYm9va2luZ1xuICpcbiAqIE5vdGU6IFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgYnkgZXZlbnQgaG9zdHMvYW1iYXNzYWRvcnMgdG8gY2hlY2sgaW4gYXR0ZW5kZWVzXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlQ2hlY2tJbkJvb2tpbmcoKTtcbiAqXG4gKiBtdXRhdGUoJ2Jvb2tpbmctMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNoZWNrSW5Cb29raW5nKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8Qm9va2luZ1Jlc3BvbnNlLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8Qm9va2luZ1Jlc3BvbnNlLCBFcnJvciwgc3RyaW5nPiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChpZDogc3RyaW5nKTogUHJvbWlzZTxCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9ib29raW5ncy8ke2lkfS9jaGVjay1pbmApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChjaGVja2VkSW5Cb29raW5nLCBib29raW5nSWQsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgYm9va2luZyBpbiBjYWNoZVxuICAgICAgcXVlcnlDbGllbnQuc2V0UXVlcnlEYXRhKFxuICAgICAgICBib29raW5nS2V5cy5kZXRhaWwoYm9va2luZ0lkKSxcbiAgICAgICAgY2hlY2tlZEluQm9va2luZ1xuICAgICAgKTtcblxuICAgICAgLy8gSW52YWxpZGF0ZSB1c2VyJ3MgYm9va2luZ3MgbGlzdCB0byByZWZsZWN0IGNoZWNrLWluIHN0YXR1c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogYm9va2luZ0tleXMubWluZSgpIH0pO1xuXG4gICAgICAvLyBJbnZhbGlkYXRlIGFsbCBib29raW5nIGxpc3RzXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBib29raW5nS2V5cy5saXN0cygpIH0pO1xuXG4gICAgICAvLyBJbnZhbGlkYXRlIGV2ZW50IGJvb2tpbmdzIGlmIGFwcGxpY2FibGVcbiAgICAgIGlmIChjaGVja2VkSW5Cb29raW5nLmV2ZW50SWQpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBldmVudEtleXMuYm9va2luZ3MoY2hlY2tlZEluQm9va2luZy5ldmVudElkKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import type { ChatMemberResponse, MessageResponse, EventChatResponse, SendMessageRequest, UpdateMessageRequest, UpdateChatSettingsRequest, UpdateMemberSettingsRequest } from '../types';
2
+ /**
3
+ * Update chat settings (hosts only)
4
+ */
5
+ export declare function useUpdateChatSettings(eventId: string): import("@tanstack/react-query").UseMutationResult<EventChatResponse, Error, UpdateChatSettingsRequest, unknown>;
6
+ /**
7
+ * Join event chat
8
+ */
9
+ export declare function useJoinEventChat(eventId: string): import("@tanstack/react-query").UseMutationResult<ChatMemberResponse, Error, void, unknown>;
10
+ /**
11
+ * Leave event chat
12
+ */
13
+ export declare function useLeaveEventChat(eventId: string): import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
14
+ /**
15
+ * Update member settings (mute, nickname)
16
+ */
17
+ export declare function useUpdateMemberSettings(eventId: string): import("@tanstack/react-query").UseMutationResult<ChatMemberResponse, Error, UpdateMemberSettingsRequest, unknown>;
18
+ /**
19
+ * Mark messages as read
20
+ */
21
+ export declare function useMarkMessagesAsRead(eventId: string): import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
22
+ /**
23
+ * Send a message
24
+ */
25
+ export declare function useSendEventChatMessage(eventId: string): import("@tanstack/react-query").UseMutationResult<MessageResponse, Error, SendMessageRequest, unknown>;
26
+ /**
27
+ * Update a message
28
+ */
29
+ export declare function useUpdateEventChatMessage(eventId: string): import("@tanstack/react-query").UseMutationResult<MessageResponse, Error, {
30
+ messageId: string;
31
+ } & UpdateMessageRequest, unknown>;
32
+ /**
33
+ * Delete a message
34
+ */
35
+ export declare function useDeleteEventChatMessage(eventId: string): import("@tanstack/react-query").UseMutationResult<void, Error, string, unknown>;