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 +328 -0
- package/lib/index.cjs +2 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.d.ts +493 -0
- package/lib/index.js +326 -0
- package/lib/index.js.map +1 -0
- package/package.json +67 -0
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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"}
|