eventhr-http-client 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,328 @@
1
+ # EventHR HTTP Client
2
+
3
+ Configurable HTTP client library for the EventHR API. This library provides a TypeScript-based SDK for interacting with EventHR backend services, designed for use in both web and mobile applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install eventhr-http-client
9
+ ```
10
+
11
+ ## Features
12
+
13
+ - **Type-safe**: Full TypeScript support with generated type definitions
14
+ - **React Query Integration**: Built-in React Query hooks for data fetching and caching
15
+ - **Configurable**: Easy configuration for base URL and custom headers
16
+ - **Modular**: Organized by resource (Auth, Events, Categories, Users, Files, Collections)
17
+ - **Interceptors**: Support for request/response interceptors
18
+
19
+ ## Usage
20
+
21
+ ### Basic Setup
22
+
23
+ ```typescript
24
+ import { EventhrHttp } from 'eventhr-https';
25
+
26
+ // Configure the client
27
+ EventhrHttp.configure({
28
+ baseUrl: 'https://api.eventhr.com',
29
+ headers: {
30
+ 'Content-Type': 'application/json',
31
+ },
32
+ });
33
+ ```
34
+
35
+ ### Authentication
36
+
37
+ ```typescript
38
+ import { EventhrHttp } from 'eventhr-https';
39
+
40
+ // Login
41
+ const loginResponse = await EventhrHttp.Auth.v1.login({
42
+ username: 'user@example.com',
43
+ password: 'password',
44
+ notificationToken: 'optional-push-token',
45
+ });
46
+
47
+ // Refresh token
48
+ const refreshResponse = await EventhrHttp.Auth.v1.refresh({
49
+ refreshToken: loginResponse.refreshToken,
50
+ });
51
+ ```
52
+
53
+ ### Adding Authentication Interceptor
54
+
55
+ ```typescript
56
+ const interceptorId = EventhrHttp.addInterceptor(
57
+ (config) => {
58
+ // Add auth token to requests
59
+ const token = localStorage.getItem('authToken');
60
+ if (token) {
61
+ config.headers.Authorization = `Bearer ${token}`;
62
+ }
63
+ return config;
64
+ },
65
+ (error) => {
66
+ return Promise.reject(error);
67
+ }
68
+ );
69
+
70
+ // Remove interceptor when needed
71
+ EventhrHttp.removeInterceptor(interceptorId);
72
+ ```
73
+
74
+ ### Using React Query Hooks
75
+
76
+ ```typescript
77
+ import { useGetEventsQuery, useCreateEventMutation } from 'eventhr-https';
78
+
79
+ function EventsList() {
80
+ const { data, isLoading, error } = useGetEventsQuery({
81
+ page: 0,
82
+ size: 20,
83
+ name: 'search-term',
84
+ });
85
+
86
+ const createEvent = useCreateEventMutation({
87
+ onSuccess: () => {
88
+ console.log('Event created');
89
+ },
90
+ });
91
+
92
+ if (isLoading) return <div>Loading...</div>;
93
+ if (error) return <div>Error loading events</div>;
94
+
95
+ return (
96
+ <div>
97
+ {data.content.map((event) => (
98
+ <div key={event.id}>{event.name}</div>
99
+ ))}
100
+ <button onClick={() => createEvent.mutate(eventData)}>
101
+ Create Event
102
+ </button>
103
+ </div>
104
+ );
105
+ }
106
+ ```
107
+
108
+ ### Direct API Calls
109
+
110
+ ```typescript
111
+ import { EventhrHttp } from 'eventhr-https';
112
+
113
+ // Get all events with pagination
114
+ const eventsResponse = await EventhrHttp.Events.v1.getAll({
115
+ page: 0,
116
+ size: 20,
117
+ name: 'search-term',
118
+ });
119
+
120
+ // Create a new event
121
+ await EventhrHttp.Events.v1.create({
122
+ name: 'My Event',
123
+ description: 'Event description',
124
+ startAt: '2024-01-01T10:00:00Z',
125
+ endAt: '2024-01-01T12:00:00Z',
126
+ address: {
127
+ city: 'Zagreb',
128
+ address: 'Main Street 1',
129
+ postalCode: '10000',
130
+ },
131
+ coordinates: {
132
+ latitude: 45.815,
133
+ longitude: 15.9819,
134
+ },
135
+ price: 100,
136
+ capacity: 500,
137
+ });
138
+
139
+ // Update an event
140
+ await EventhrHttp.Events.v1.update(eventId, {
141
+ name: 'Updated Event Name',
142
+ // ... other fields
143
+ });
144
+
145
+ // Delete an event
146
+ await EventhrHttp.Events.v1.remove(eventId);
147
+ ```
148
+
149
+ ### Categories
150
+
151
+ ```typescript
152
+ import { useGetCategoriesQuery } from 'eventhr-https';
153
+
154
+ const { data: categories } = useGetCategoriesQuery({
155
+ page: 0,
156
+ size: 10,
157
+ name: 'category-name',
158
+ });
159
+ ```
160
+
161
+ ### Collections
162
+
163
+ ```typescript
164
+ import { useGetCollectionsQuery, useCreateCollectionMutation } from 'eventhr-https';
165
+
166
+ const { data: collections } = useGetCollectionsQuery({
167
+ page: 0,
168
+ size: 10,
169
+ name: 'collection-name',
170
+ });
171
+
172
+ const createCollection = useCreateCollectionMutation();
173
+
174
+ createCollection.mutate({
175
+ name: 'My Collection',
176
+ eventIds: ['event-id-1', 'event-id-2'],
177
+ });
178
+ ```
179
+
180
+ ### Files
181
+
182
+ ```typescript
183
+ import { EventhrHttp } from 'eventhr-https';
184
+
185
+ // Upload a file
186
+ const file = new File(['content'], 'example.jpg', { type: 'image/jpeg' });
187
+ const uploadedFile = await EventhrHttp.Files.v1.upload(file);
188
+
189
+ // Delete a file
190
+ await EventhrHttp.Files.v1.remove(fileId);
191
+ ```
192
+
193
+ ### Users
194
+
195
+ ```typescript
196
+ import { EventhrHttp } from 'eventhr-https';
197
+
198
+ // Get current user profile
199
+ const profile = await EventhrHttp.Users.v1.getProfile();
200
+
201
+ // Get all users (admin)
202
+ const users = await EventhrHttp.Users.v1.getAll({ page: 0, size: 20 });
203
+
204
+ // Create user
205
+ await EventhrHttp.Users.v1.create({
206
+ name: 'John Doe',
207
+ username: 'johndoe',
208
+ password: 'secure-password',
209
+ });
210
+
211
+ // Edit user
212
+ await EventhrHttp.Users.v1.edit(userId, {
213
+ name: 'John Updated',
214
+ username: 'johnupdated',
215
+ imageId: 'image-id',
216
+ });
217
+ ```
218
+
219
+ ## API Reference
220
+
221
+ ### Auth
222
+ - `login(data: LoginDto)` - Authenticate user
223
+ - `refresh(data: RefreshTokenDto)` - Refresh access token
224
+
225
+ ### Events
226
+ - `getAll(params?: GetEventsParams)` - Get paginated events with filters
227
+ - `create(data: CreateEventDto)` - Create new event
228
+ - `update(id: string, data: UpdateEventDto)` - Update event
229
+ - `remove(id: string)` - Delete event
230
+
231
+ ### Categories
232
+ - `getAll(params?: GetCategoriesParams)` - Get paginated categories
233
+ - `create(data: CreateCategoryDto)` - Create category
234
+ - `update(id: string, data: UpdateCategoryDto)` - Update category
235
+ - `remove(id: string)` - Delete category
236
+
237
+ ### Collections
238
+ - `getAll(params?: GetCollectionsParams)` - Get paginated collections
239
+ - `getById(id: string)` - Get collection by ID
240
+ - `create(data: CreateCollectionDto)` - Create collection
241
+ - `update(id: string, data: UpdateCollectionDto)` - Update collection
242
+ - `remove(id: string)` - Delete collection
243
+
244
+ ### Files
245
+ - `upload(file: File)` - Upload file
246
+ - `remove(id: string)` - Delete file
247
+
248
+ ### Users
249
+ - `getAll(params?: PageRequest)` - Get paginated users
250
+ - `getProfile()` - Get current user profile
251
+ - `create(data: CreateUserDto)` - Create user
252
+ - `edit(id: string, data: EditUserDto)` - Edit user
253
+
254
+ ## Configuration
255
+
256
+ ### Base URL
257
+
258
+ ```typescript
259
+ EventhrHttp.configure({
260
+ baseUrl: 'https://your-api-domain.com',
261
+ });
262
+ ```
263
+
264
+ ### Custom Headers
265
+
266
+ ```typescript
267
+ EventhrHttp.configure({
268
+ headers: {
269
+ 'X-Custom-Header': 'value',
270
+ },
271
+ });
272
+ ```
273
+
274
+ ### Remove Header
275
+
276
+ ```typescript
277
+ EventhrHttp.removeHeader('X-Custom-Header');
278
+ ```
279
+
280
+ ## Development
281
+
282
+ ### Building
283
+
284
+ ```bash
285
+ npm run build
286
+ ```
287
+
288
+ ### Linting
289
+
290
+ ```bash
291
+ npm run lint
292
+ ```
293
+
294
+ ### Watch Mode
295
+
296
+ ```bash
297
+ npm run dev
298
+ ```
299
+
300
+ ## Versioning
301
+
302
+ This project uses [Changesets](https://github.com/changesets/changesets) for versioning and changelog management.
303
+
304
+ ### Adding a Changeset
305
+
306
+ When making changes that should be included in a release:
307
+
308
+ ```bash
309
+ npm run changeset
310
+ ```
311
+
312
+ This will prompt you to describe the changes and select the version bump type (major, minor, or patch).
313
+
314
+ ### Releasing
315
+
316
+ Releases are automated via GitHub Actions when changesets are merged to the `develop` branch. The workflow will:
317
+ 1. Version packages based on accumulated changesets
318
+ 2. Generate a changelog
319
+ 3. Publish to npm
320
+ 4. Create a GitHub release
321
+
322
+ ## License
323
+
324
+ MIT
325
+
326
+ ## Repository
327
+
328
+ https://github.com/Antunsvetic/eventhr-https
package/lib/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("axios"),s=require("@tanstack/react-query"),i=w.create({baseURL:"",headers:{"Content-Type":"application/json"}}),h=t=>{i.defaults.baseURL=t},y=t=>{Object.assign(i.defaults.headers.common,t)},g=t=>{delete i.defaults.headers.common[t]},m=(t,e)=>i.interceptors.request.use(t,e),C=t=>{i.interceptors.request.eject(t)};class r{constructor(){this.client=i}list(...e){throw new Error(`list() not implemented on ${this.constructor.name}`)}get(...e){throw new Error(`get() not implemented on ${this.constructor.name}`)}create(...e){throw new Error(`create() not implemented on ${this.constructor.name}`)}update(...e){throw new Error(`update() not implemented on ${this.constructor.name}`)}remove(...e){throw new Error(`remove() not implemented on ${this.constructor.name}`)}}class E extends r{constructor(){super(...arguments),this.endpoint="api/v1/events"}getAll(e){return this.client.get(this.endpoint,{params:e})}create(e){return this.client.post(this.endpoint,e)}update(e,n){return this.client.put(`${this.endpoint}/${e}`,n)}remove(e){return this.client.delete(`${this.endpoint}/${e}`)}}const F=new E,u={v1:F};class f extends r{constructor(){super(...arguments),this.endpoint="api/v1/authentication/user"}login(e){return this.client.post(this.endpoint,e)}refresh(e){return this.client.post(`${this.endpoint}/refresh`,e)}}const $=new f,d={v1:$};class q extends r{constructor(){super(...arguments),this.endpoint="api/v1/categories"}getAll(e){return this.client.get(this.endpoint,{params:e})}create(e){return this.client.post(this.endpoint,e)}update(e,n){return this.client.put(`${this.endpoint}/${e}`,n)}remove(e){return this.client.delete(`${this.endpoint}/${e}`)}}const Q=new q,l={v1:Q};class U extends r{constructor(){super(...arguments),this.endpoint="api/v1/collections"}getAll(e){return this.client.get(this.endpoint,{params:e})}getById(e){return this.client.get(`${this.endpoint}/${e}`)}create(e){return this.client.post(this.endpoint,e)}update(e,n){return this.client.put(`${this.endpoint}/${e}`,n)}remove(e){return this.client.delete(`${this.endpoint}/${e}`)}}const A=new U,a={v1:A};class G extends r{constructor(){super(...arguments),this.endpoint="api/v1/users"}getAll(e){return this.client.get(this.endpoint,{params:e})}getProfile(){return this.client.get(`${this.endpoint}/profile`)}create(e){return this.client.post(this.endpoint,e)}edit(e,n){return this.client.put(`${this.endpoint}/${e}`,n)}}const H=new G,c={v1:H};class R extends r{constructor(){super(...arguments),this.endpoint="api/v1/files"}upload(e){const n=new FormData;return n.append("file",e),this.client.post(this.endpoint,n,{headers:{"Content-Type":"multipart/form-data"}})}remove(e){return this.client.delete(`${this.endpoint}/${e}`)}}const K=new R,p={v1:K};class M{constructor(){this.Auth=d,this.Events=u,this.Categories=l,this.Collections=a,this.Users=c,this.Files=p}configure({baseUrl:e,headers:n}){e!==void 0&&h(e),n!==void 0&&y(n)}removeHeader(e){g(e)}addInterceptor(e,n){return m(e,n)}removeInterceptor(e){C(e)}}const _=new M,o={events:{all:["events"],list:t=>[...o.events.all,"list",t]},categories:{all:["categories"],list:t=>[...o.categories.all,"list",t]},collections:{all:["collections"],list:t=>[...o.collections.all,"list",t],detail:t=>[...o.collections.all,"detail",t]},users:{all:["users"],list:t=>[...o.users.all,"list",t],profile:()=>[...o.users.all,"profile"]},files:{all:["files"]}},D=(t,e)=>s.useQuery({queryKey:o.events.list(t),queryFn:async()=>(await u.v1.getAll(t)).data,...e}),I=t=>s.useMutation({mutationFn:async e=>{await u.v1.create(e)},...t}),T=t=>s.useMutation({mutationFn:async({id:e,data:n})=>{await u.v1.update(e,n)},...t}),x=t=>s.useMutation({mutationFn:async({id:e})=>{await u.v1.remove(e)},...t}),v=new s.QueryClient({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:0},mutations:{retry:0}}}),B=()=>v.invalidateQueries({queryKey:o.events.all}),P=t=>s.useMutation({mutationFn:async e=>(await d.v1.login(e)).data,...t}),b=t=>s.useMutation({mutationFn:async e=>(await d.v1.refresh(e)).data,...t}),j=(t,e)=>s.useQuery({queryKey:o.categories.list(t),queryFn:async()=>(await l.v1.getAll(t)).data,...e}),L=t=>s.useMutation({mutationFn:async e=>{await l.v1.create(e)},...t}),O=t=>s.useMutation({mutationFn:async({id:e,data:n})=>{await l.v1.update(e,n)},...t}),S=t=>s.useMutation({mutationFn:async({id:e})=>{await l.v1.remove(e)},...t}),Y=()=>v.invalidateQueries({queryKey:o.categories.all}),k=(t,e)=>s.useQuery({queryKey:o.collections.list(t),queryFn:async()=>(await a.v1.getAll(t)).data,...e}),N=(t,e)=>s.useQuery({queryKey:o.collections.detail(t),queryFn:async()=>(await a.v1.getById(t)).data,...e}),V=t=>s.useMutation({mutationFn:async e=>{await a.v1.create(e)},...t}),W=t=>s.useMutation({mutationFn:async({id:e,data:n})=>{await a.v1.update(e,n)},...t}),z=t=>s.useMutation({mutationFn:async({id:e})=>{await a.v1.remove(e)},...t}),J=()=>v.invalidateQueries({queryKey:o.collections.all}),X=(t,e)=>s.useQuery({queryKey:o.users.list(t),queryFn:async()=>(await c.v1.getAll(t)).data,...e}),Z=t=>s.useQuery({queryKey:o.users.profile(),queryFn:async()=>(await c.v1.getProfile()).data,...t}),ee=t=>s.useMutation({mutationFn:async e=>{await c.v1.create(e)},...t}),te=t=>s.useMutation({mutationFn:async({id:e,data:n})=>{await c.v1.edit(e,n)},...t}),ne=t=>s.useMutation({mutationFn:async e=>(await p.v1.upload(e)).data,...t}),se=t=>s.useMutation({mutationFn:async({id:e})=>{await p.v1.remove(e)},...t});exports.Auth=d;exports.Categories=l;exports.Collections=a;exports.EVENTHR_QUERY_KEYS=o;exports.EventhrHttpClient=M;exports.Events=u;exports.Files=p;exports.HttpClient=r;exports.Users=c;exports.addRequestInterceptor=m;exports.default=_;exports.instance=i;exports.invalidateCategoriesCache=Y;exports.invalidateCollectionsCache=J;exports.invalidateEventsCache=B;exports.queryClient=v;exports.removeHeader=g;exports.removeRequestInterceptor=C;exports.setBaseUrl=h;exports.setHeaders=y;exports.useCreateCategoryMutation=L;exports.useCreateCollectionMutation=V;exports.useCreateEventMutation=I;exports.useCreateUserMutation=ee;exports.useDeleteCategoryMutation=S;exports.useDeleteCollectionMutation=z;exports.useDeleteEventMutation=x;exports.useDeleteFileMutation=se;exports.useEditUserMutation=te;exports.useGetCategoriesQuery=j;exports.useGetCollectionByIdQuery=N;exports.useGetCollectionsQuery=k;exports.useGetEventsQuery=D;exports.useGetProfileQuery=Z;exports.useGetUsersQuery=X;exports.useLoginMutation=P;exports.useRefreshTokenMutation=b;exports.useUpdateCategoryMutation=O;exports.useUpdateCollectionMutation=W;exports.useUpdateEventMutation=T;exports.useUploadFileMutation=ne;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/instance.ts","../src/api/common/HttpClient.ts","../src/api/events/v1/index.ts","../src/api/events/index.ts","../src/api/auth/v1/index.ts","../src/api/auth/index.ts","../src/api/categories/v1/index.ts","../src/api/categories/index.ts","../src/api/collections/v1/index.ts","../src/api/collections/index.ts","../src/api/users/v1/index.ts","../src/api/users/index.ts","../src/api/files/v1/index.ts","../src/api/files/index.ts","../src/api/EventhrHttp.ts","../src/api/eventhrKeys.ts","../src/api/events/events.hooks.ts","../src/query-client.ts","../src/api/events/events.cache.ts","../src/api/auth/auth.hooks.ts","../src/api/categories/categories.hooks.ts","../src/api/categories/categories.cache.ts","../src/api/collections/collections.hooks.ts","../src/api/collections/collections.cache.ts","../src/api/users/users.hooks.ts","../src/api/files/files.hooks.ts"],"sourcesContent":["import axios, { type AxiosInstance, type InternalAxiosRequestConfig } from 'axios';\n\nconst instance: AxiosInstance = axios.create({\n baseURL: '',\n headers: {\n 'Content-Type': 'application/json',\n },\n});\n\nexport const setBaseUrl = (url: string): void => {\n instance.defaults.baseURL = url;\n};\n\nexport const setHeaders = (headers: Record<string, string>): void => {\n Object.assign(instance.defaults.headers.common, headers);\n};\n\nexport const removeHeader = (key: string): void => {\n delete (instance.defaults.headers.common as Record<string, string>)[key];\n};\n\nexport const addRequestInterceptor = (\n onFulfilled: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig>,\n onRejected?: (error: unknown) => unknown,\n): number => instance.interceptors.request.use(onFulfilled, onRejected);\n\nexport const removeRequestInterceptor = (id: number): void => {\n instance.interceptors.request.eject(id);\n};\n\nexport { instance };\nexport default instance;\n","import instance from '../../instance';\n\nexport abstract class HttpClient {\n abstract endpoint: string;\n\n readonly client = instance;\n\n list(..._args: unknown[]): Promise<unknown> {\n throw new Error(`list() not implemented on ${this.constructor.name}`);\n }\n\n get(..._args: unknown[]): Promise<unknown> {\n throw new Error(`get() not implemented on ${this.constructor.name}`);\n }\n\n create(..._args: unknown[]): Promise<unknown> {\n throw new Error(`create() not implemented on ${this.constructor.name}`);\n }\n\n update(..._args: unknown[]): Promise<unknown> {\n throw new Error(`update() not implemented on ${this.constructor.name}`);\n }\n\n remove(..._args: unknown[]): Promise<unknown> {\n throw new Error(`remove() not implemented on ${this.constructor.name}`);\n }\n}\n","import { HttpClient } from '@/api/common/HttpClient';\nimport type { PageRequest, Page } from '@/api/common/types';\n\n\nexport interface EventAddress {\n city: string;\n address: string;\n postalCode?: string;\n locationName?: string;\n}\n\nexport interface EventCoordinates {\n latitude: number;\n longitude: number;\n}\n\nexport interface EventOrganizer {\n id: string;\n}\n\nexport interface Event {\n id: string;\n name: string;\n description?: string;\n startAt: string;\n endAt: string;\n address: EventAddress;\n coordinates: EventCoordinates;\n price?: number;\n capacity?: number;\n organizer: EventOrganizer;\n isDeleted: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateEventDto {\n name: string;\n description?: string;\n startAt: string;\n endAt: string;\n address: EventAddress;\n coordinates: EventCoordinates;\n price?: number;\n capacity?: number;\n}\n\nexport type UpdateEventDto = CreateEventDto;\n\nexport interface GetEventsParams extends PageRequest {\n name?: string;\n latitude?: number;\n longitude?: number;\n radiusKm?: number;\n}\n\n\n\nclass EventsClient extends HttpClient {\n endpoint = 'api/v1/events';\n\n getAll(params?: GetEventsParams) {\n return this.client.get<Page<Event>>(this.endpoint, { params });\n }\n\n create(data: CreateEventDto) {\n return this.client.post<void>(this.endpoint, data);\n }\n\n update(id: string, data: UpdateEventDto) {\n return this.client.put<void>(`${this.endpoint}/${id}`, data);\n }\n\n remove(id: string) {\n return this.client.delete<void>(`${this.endpoint}/${id}`);\n }\n}\n\nconst v1 = new EventsClient();\nexport default v1;\n","import v1 from './v1';\n\nexport type {\n Event,\n EventAddress,\n EventCoordinates,\n EventOrganizer,\n CreateEventDto,\n UpdateEventDto,\n GetEventsParams,\n} from './v1';\n\nexport const Events = { v1 };\nexport default Events;\n","import { HttpClient } from '@/api/common/HttpClient';\n\n\nexport interface AuthTokenResponse {\n authenticationToken: string;\n refreshToken: string;\n}\n\nexport interface LoginDto {\n username: string;\n password: string;\n notificationToken?: string;\n}\n\nexport interface RefreshTokenDto {\n refreshToken: string;\n}\n\n\n\nclass AuthClient extends HttpClient {\n endpoint = 'api/v1/authentication/user';\n\n login(data: LoginDto) {\n return this.client.post<AuthTokenResponse>(this.endpoint, data);\n }\n\n refresh(data: RefreshTokenDto) {\n return this.client.post<AuthTokenResponse>(`${this.endpoint}/refresh`, data);\n }\n}\n\nconst v1 = new AuthClient();\nexport default v1;\n","import v1 from './v1';\n\nexport type { AuthTokenResponse, LoginDto, RefreshTokenDto } from './v1';\n\nexport const Auth = { v1 };\nexport default Auth;\n","import { HttpClient } from '@/api/common/HttpClient';\nimport type { PageRequest, Page } from '@/api/common/types';\n\n\nexport interface Category {\n id: string;\n name: string;\n isDeleted: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateCategoryDto {\n name: string;\n}\n\nexport interface UpdateCategoryDto {\n name: string;\n}\n\nexport interface GetCategoriesParams extends PageRequest {\n name?: string;\n}\n\n\n\nclass CategoriesClient extends HttpClient {\n endpoint = 'api/v1/categories';\n\n getAll(params?: GetCategoriesParams) {\n return this.client.get<Page<Category>>(this.endpoint, { params });\n }\n\n create(data: CreateCategoryDto) {\n return this.client.post<void>(this.endpoint, data);\n }\n\n update(id: string, data: UpdateCategoryDto) {\n return this.client.put<void>(`${this.endpoint}/${id}`, data);\n }\n\n remove(id: string) {\n return this.client.delete<void>(`${this.endpoint}/${id}`);\n }\n}\n\nconst v1 = new CategoriesClient();\nexport default v1;\n","import v1 from './v1';\n\nexport type {\n Category,\n CreateCategoryDto,\n UpdateCategoryDto,\n GetCategoriesParams,\n} from './v1';\n\nexport const Categories = { v1 };\nexport default Categories;\n","import { HttpClient } from '@/api/common/HttpClient';\nimport type { PageRequest, Page } from '@/api/common/types';\n\nexport interface EventVo {\n id: string;\n name: string;\n}\n\nexport interface Collection {\n id: string;\n name: string;\n customer: {\n id: string;\n };\n events: EventVo[];\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateCollectionDto {\n name: string;\n eventIds: string[];\n}\n\nexport interface UpdateCollectionDto {\n name: string;\n eventIds: string[];\n}\n\nexport interface GetCollectionsParams extends PageRequest {\n name?: string;\n}\n\nclass CollectionsClient extends HttpClient {\n endpoint = 'api/v1/collections';\n\n getAll(params?: GetCollectionsParams) {\n return this.client.get<Page<Collection>>(this.endpoint, { params });\n }\n\n getById(id: string) {\n return this.client.get<Collection>(`${this.endpoint}/${id}`);\n }\n\n create(data: CreateCollectionDto) {\n return this.client.post<void>(this.endpoint, data);\n }\n\n update(id: string, data: UpdateCollectionDto) {\n return this.client.put<void>(`${this.endpoint}/${id}`, data);\n }\n\n remove(id: string) {\n return this.client.delete<void>(`${this.endpoint}/${id}`);\n }\n}\n\nconst v1 = new CollectionsClient();\nexport default v1;\n","import v1 from './v1';\n\nexport type {\n Collection,\n EventVo,\n CreateCollectionDto,\n UpdateCollectionDto,\n GetCollectionsParams,\n} from './v1';\n\nexport const Collections = { v1 };\nexport default Collections;\n","import { HttpClient } from '@/api/common/HttpClient';\nimport type { PageRequest, Page } from '@/api/common/types';\n\n\nexport interface User {\n id: string;\n name: string;\n username: string;\n imageId?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateUserDto {\n name: string;\n username: string;\n password: string;\n}\n\nexport interface EditUserDto {\n name: string;\n username: string;\n password?: string;\n imageId?: string;\n}\n\n\n\nclass UsersClient extends HttpClient {\n endpoint = 'api/v1/users';\n\n getAll(params?: PageRequest) {\n return this.client.get<Page<User>>(this.endpoint, { params });\n }\n\n getProfile() {\n return this.client.get<User>(`${this.endpoint}/profile`);\n }\n\n create(data: CreateUserDto) {\n return this.client.post<void>(this.endpoint, data);\n }\n\n edit(id: string, data: EditUserDto) {\n return this.client.put<void>(`${this.endpoint}/${id}`, data);\n }\n}\n\nconst v1 = new UsersClient();\nexport default v1;\n","import v1 from './v1';\n\nexport type { User, CreateUserDto, EditUserDto } from './v1';\n\nexport const Users = { v1 };\nexport default Users;\n","import { HttpClient } from '@/api/common/HttpClient';\n\n\nexport type FileType = 'IMAGE' | 'VIDEO' | 'DOCUMENT';\n\nexport interface UploadedFile {\n id: string;\n fileName: string;\n url: string;\n fileSize: number;\n fileType: FileType;\n createdAt: string;\n updatedAt: string;\n}\n\n\n\nclass FilesClient extends HttpClient {\n endpoint = 'api/v1/files';\n\n upload(file: File) {\n const formData = new FormData();\n formData.append('file', file);\n return this.client.post<UploadedFile>(this.endpoint, formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n }\n\n remove(id: string) {\n return this.client.delete<void>(`${this.endpoint}/${id}`);\n }\n}\n\nconst v1 = new FilesClient();\nexport default v1;\n","import v1 from './v1';\n\nexport type { UploadedFile, FileType } from './v1';\n\nexport const Files = { v1 };\nexport default Files;\n","import { setBaseUrl, setHeaders, removeHeader, addRequestInterceptor, removeRequestInterceptor } from '../instance';\nimport type { InternalAxiosRequestConfig } from 'axios';\nimport Events from './events';\nimport Auth from './auth';\nimport Categories from './categories';\nimport Collections from './collections';\nimport Users from './users';\nimport Files from './files';\n\nexport interface EventhrHttpConfig {\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\nexport class EventhrHttpClient {\n readonly Auth = Auth;\n readonly Events = Events;\n readonly Categories = Categories;\n readonly Collections = Collections;\n readonly Users = Users;\n readonly Files = Files;\n\n configure({ baseUrl, headers }: EventhrHttpConfig): void {\n if (baseUrl !== undefined) {\n setBaseUrl(baseUrl);\n }\n if (headers !== undefined) {\n setHeaders(headers);\n }\n }\n\n removeHeader(key: string): void {\n removeHeader(key);\n }\n\n addInterceptor(\n onFulfilled: (\n config: InternalAxiosRequestConfig,\n ) => InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig>,\n onRejected?: (error: unknown) => unknown,\n ): number {\n return addRequestInterceptor(onFulfilled, onRejected);\n }\n\n removeInterceptor(id: number): void {\n removeRequestInterceptor(id);\n }\n}\n\nconst EventhrHttp = new EventhrHttpClient();\nexport default EventhrHttp;\n","import type { GetEventsParams } from './events';\nimport type { GetCategoriesParams } from './categories';\nimport type { GetCollectionsParams } from './collections';\nimport type { PageRequest } from './common/types';\n\nexport const EVENTHR_QUERY_KEYS = {\n events: {\n all: ['events'] as const,\n list: (params?: GetEventsParams) => [...EVENTHR_QUERY_KEYS.events.all, 'list', params] as const,\n },\n categories: {\n all: ['categories'] as const,\n list: (params?: GetCategoriesParams) =>\n [...EVENTHR_QUERY_KEYS.categories.all, 'list', params] as const,\n },\n collections: {\n all: ['collections'] as const,\n list: (params?: GetCollectionsParams) =>\n [...EVENTHR_QUERY_KEYS.collections.all, 'list', params] as const,\n detail: (id: string) => [...EVENTHR_QUERY_KEYS.collections.all, 'detail', id] as const,\n },\n users: {\n all: ['users'] as const,\n list: (params?: PageRequest) => [...EVENTHR_QUERY_KEYS.users.all, 'list', params] as const,\n profile: () => [...EVENTHR_QUERY_KEYS.users.all, 'profile'] as const,\n },\n files: {\n all: ['files'] as const,\n },\n} as const;\n","import { useMutation, useQuery } from '@tanstack/react-query';\n\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\nimport type { MutationOptions, Page, QueryOptions } from '@/api/common/types';\nimport type { CreateEventDto, Event, GetEventsParams, UpdateEventDto } from './v1';\nimport Events from './index';\n\n\n\nexport const useGetEventsQuery = (\n params?: GetEventsParams,\n options?: QueryOptions<Page<Event>>,\n) =>\n useQuery({\n queryKey: EVENTHR_QUERY_KEYS.events.list(params),\n queryFn: async () => {\n const response = await Events.v1.getAll(params);\n return response.data;\n },\n ...options,\n });\n\n\n\nexport const useCreateEventMutation = (\n options?: MutationOptions<void, CreateEventDto>,\n) =>\n useMutation({\n mutationFn: async (data: CreateEventDto) => {\n await Events.v1.create(data);\n },\n ...options,\n });\n\nexport const useUpdateEventMutation = (\n options?: MutationOptions<void, { id: string; data: UpdateEventDto }>,\n) =>\n useMutation({\n mutationFn: async ({ id, data }: { id: string; data: UpdateEventDto }) => {\n await Events.v1.update(id, data);\n },\n ...options,\n });\n\nexport const useDeleteEventMutation = (\n options?: MutationOptions<void, { id: string }>,\n) =>\n useMutation({\n mutationFn: async ({ id }: { id: string }) => {\n await Events.v1.remove(id);\n },\n ...options,\n });\n","import { QueryClient } from '@tanstack/react-query';\n\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n staleTime: 0,\n },\n mutations: {\n retry: 0,\n },\n },\n});\n","import { queryClient } from '@/query-client';\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\n\nexport const invalidateEventsCache = (): Promise<void> =>\n queryClient.invalidateQueries({ queryKey: EVENTHR_QUERY_KEYS.events.all });\n","import { useMutation } from '@tanstack/react-query';\n\nimport type { MutationOptions } from '@/api/common/types';\nimport type { AuthTokenResponse, LoginDto, RefreshTokenDto } from './v1';\nimport Auth from './index';\n\nexport const useLoginMutation = (\n options?: MutationOptions<AuthTokenResponse, LoginDto>,\n) =>\n useMutation({\n mutationFn: async (data: LoginDto) => {\n const response = await Auth.v1.login(data);\n return response.data;\n },\n ...options,\n });\n\nexport const useRefreshTokenMutation = (\n options?: MutationOptions<AuthTokenResponse, RefreshTokenDto>,\n) =>\n useMutation({\n mutationFn: async (data: RefreshTokenDto) => {\n const response = await Auth.v1.refresh(data);\n return response.data;\n },\n ...options,\n });\n","import { useMutation, useQuery } from '@tanstack/react-query';\n\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\nimport type { MutationOptions, Page, QueryOptions } from '@/api/common/types';\nimport type { Category, CreateCategoryDto, GetCategoriesParams, UpdateCategoryDto } from './v1';\nimport Categories from './index';\n\n\n\nexport const useGetCategoriesQuery = (\n params?: GetCategoriesParams,\n options?: QueryOptions<Page<Category>>,\n) =>\n useQuery({\n queryKey: EVENTHR_QUERY_KEYS.categories.list(params),\n queryFn: async () => {\n const response = await Categories.v1.getAll(params);\n return response.data;\n },\n ...options,\n });\n\n\n\nexport const useCreateCategoryMutation = (\n options?: MutationOptions<void, CreateCategoryDto>,\n) =>\n useMutation({\n mutationFn: async (data: CreateCategoryDto) => {\n await Categories.v1.create(data);\n },\n ...options,\n });\n\nexport const useUpdateCategoryMutation = (\n options?: MutationOptions<void, { id: string; data: UpdateCategoryDto }>,\n) =>\n useMutation({\n mutationFn: async ({ id, data }: { id: string; data: UpdateCategoryDto }) => {\n await Categories.v1.update(id, data);\n },\n ...options,\n });\n\nexport const useDeleteCategoryMutation = (\n options?: MutationOptions<void, { id: string }>,\n) =>\n useMutation({\n mutationFn: async ({ id }: { id: string }) => {\n await Categories.v1.remove(id);\n },\n ...options,\n });\n","import { queryClient } from '@/query-client';\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\n\nexport const invalidateCategoriesCache = (): Promise<void> =>\n queryClient.invalidateQueries({ queryKey: EVENTHR_QUERY_KEYS.categories.all });\n","import { useMutation, useQuery } from '@tanstack/react-query';\n\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\nimport type { MutationOptions, Page, QueryOptions } from '@/api/common/types';\nimport type { Collection, CreateCollectionDto, GetCollectionsParams, UpdateCollectionDto } from './v1';\nimport Collections from './index';\n\n\n\nexport const useGetCollectionsQuery = (\n params?: GetCollectionsParams,\n options?: QueryOptions<Page<Collection>>,\n) =>\n useQuery({\n queryKey: EVENTHR_QUERY_KEYS.collections.list(params),\n queryFn: async () => {\n const response = await Collections.v1.getAll(params);\n return response.data;\n },\n ...options,\n });\n\nexport const useGetCollectionByIdQuery = (\n id: string,\n options?: QueryOptions<Collection>,\n) =>\n useQuery({\n queryKey: EVENTHR_QUERY_KEYS.collections.detail(id),\n queryFn: async () => {\n const response = await Collections.v1.getById(id);\n return response.data;\n },\n ...options,\n });\n\nexport const useCreateCollectionMutation = (\n options?: MutationOptions<void, CreateCollectionDto>,\n) =>\n useMutation({\n mutationFn: async (data: CreateCollectionDto) => {\n await Collections.v1.create(data);\n },\n ...options,\n });\n\nexport const useUpdateCollectionMutation = (\n options?: MutationOptions<void, { id: string; data: UpdateCollectionDto }>,\n) =>\n useMutation({\n mutationFn: async ({ id, data }: { id: string; data: UpdateCollectionDto }) => {\n await Collections.v1.update(id, data);\n },\n ...options,\n });\n\nexport const useDeleteCollectionMutation = (\n options?: MutationOptions<void, { id: string }>,\n) =>\n useMutation({\n mutationFn: async ({ id }: { id: string }) => {\n await Collections.v1.remove(id);\n },\n ...options,\n });\n","import { queryClient } from '@/query-client';\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\n\nexport const invalidateCollectionsCache = (): Promise<void> =>\n queryClient.invalidateQueries({ queryKey: EVENTHR_QUERY_KEYS.collections.all });\n","import { useMutation, useQuery } from '@tanstack/react-query';\n\nimport { EVENTHR_QUERY_KEYS } from '@/api/eventhrKeys';\nimport type { MutationOptions, Page, PageRequest, QueryOptions } from '@/api/common/types';\nimport type { CreateUserDto, EditUserDto, User } from './v1';\nimport Users from './index';\n\n\n\nexport const useGetUsersQuery = (\n params?: PageRequest,\n options?: QueryOptions<Page<User>>,\n) =>\n useQuery({\n queryKey: EVENTHR_QUERY_KEYS.users.list(params),\n queryFn: async () => {\n const response = await Users.v1.getAll(params);\n return response.data;\n },\n ...options,\n });\n\nexport const useGetProfileQuery = (\n options?: QueryOptions<User>,\n) =>\n useQuery({\n queryKey: EVENTHR_QUERY_KEYS.users.profile(),\n queryFn: async () => {\n const response = await Users.v1.getProfile();\n return response.data;\n },\n ...options,\n });\n\nexport const useCreateUserMutation = (\n options?: MutationOptions<void, CreateUserDto>,\n) =>\n useMutation({\n mutationFn: async (data: CreateUserDto) => {\n await Users.v1.create(data);\n },\n ...options,\n });\n\nexport const useEditUserMutation = (\n options?: MutationOptions<void, { id: string; data: EditUserDto }>,\n) =>\n useMutation({\n mutationFn: async ({ id, data }: { id: string; data: EditUserDto }) => {\n await Users.v1.edit(id, data);\n },\n ...options,\n });\n","import { useMutation } from '@tanstack/react-query';\n\nimport type { MutationOptions } from '@/api/common/types';\nimport type { UploadedFile } from './v1';\nimport Files from './index';\n\nexport const useUploadFileMutation = (\n options?: MutationOptions<UploadedFile, File>,\n) =>\n useMutation({\n mutationFn: async (file: File) => {\n const response = await Files.v1.upload(file);\n return response.data;\n },\n ...options,\n });\n\nexport const useDeleteFileMutation = (\n options?: MutationOptions<void, { id: string }>,\n) =>\n useMutation({\n mutationFn: async ({ id }: { id: string }) => {\n await Files.v1.remove(id);\n },\n ...options,\n });\n"],"names":["instance","axios","setBaseUrl","url","setHeaders","headers","removeHeader","key","addRequestInterceptor","onFulfilled","onRejected","removeRequestInterceptor","id","HttpClient","_args","EventsClient","params","data","v1","Events","AuthClient","Auth","CategoriesClient","Categories","CollectionsClient","Collections","UsersClient","Users","FilesClient","file","formData","Files","EventhrHttpClient","baseUrl","EventhrHttp","EVENTHR_QUERY_KEYS","useGetEventsQuery","options","useQuery","useCreateEventMutation","useMutation","useUpdateEventMutation","useDeleteEventMutation","queryClient","QueryClient","invalidateEventsCache","useLoginMutation","useRefreshTokenMutation","useGetCategoriesQuery","useCreateCategoryMutation","useUpdateCategoryMutation","useDeleteCategoryMutation","invalidateCategoriesCache","useGetCollectionsQuery","useGetCollectionByIdQuery","useCreateCollectionMutation","useUpdateCollectionMutation","useDeleteCollectionMutation","invalidateCollectionsCache","useGetUsersQuery","useGetProfileQuery","useCreateUserMutation","useEditUserMutation","useUploadFileMutation","useDeleteFileMutation"],"mappings":"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"}