@bookinglab/booking-journey-api 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/index.d.mts +132 -1
- package/dist/index.d.ts +132 -1
- package/dist/index.js +66 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +65 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -187,6 +187,8 @@ const client = createJrniClient('https://api.jrni.com', {
|
|
|
187
187
|
|
|
188
188
|
**Methods:**
|
|
189
189
|
- `client.login(credentials)` - Authenticate a user
|
|
190
|
+
- `client.getChildCompanies(companyId, params?)` - Get child companies for a parent company
|
|
191
|
+
- `client.getResources(companyId)` - Get bookable resources for a company
|
|
190
192
|
- `client.setAuthToken(token)` - Set auth token for subsequent requests
|
|
191
193
|
|
|
192
194
|
#### `createBookingLabClient(options)`
|
|
@@ -257,12 +259,17 @@ Combined provider for applications using multiple API clients.
|
|
|
257
259
|
#### JRNI Hooks
|
|
258
260
|
|
|
259
261
|
- `useLogin()` - Hook for user authentication
|
|
262
|
+
- `useChildCompanies(companyId, params?, enabled?)` - Get child companies
|
|
263
|
+
- `useResources(companyId, enabled?)` - Get bookable resources
|
|
260
264
|
- `useJrniClient()` - Access the JRNI client directly
|
|
261
265
|
|
|
262
266
|
```typescript
|
|
263
267
|
const loginMutation = useLogin();
|
|
264
268
|
loginMutation.mutate({ email: 'user@example.com', password: 'password' });
|
|
265
269
|
|
|
270
|
+
const { data: childCompanies } = useChildCompanies(37000);
|
|
271
|
+
const { data: resources } = useResources(37000);
|
|
272
|
+
|
|
266
273
|
const client = useJrniClient();
|
|
267
274
|
```
|
|
268
275
|
|
|
@@ -300,6 +307,14 @@ import type {
|
|
|
300
307
|
// JRNI Types
|
|
301
308
|
LoginRequest,
|
|
302
309
|
LoginResponse,
|
|
310
|
+
ChildCompany,
|
|
311
|
+
ChildCompanyAddress,
|
|
312
|
+
ChildCompanySettings,
|
|
313
|
+
ChildCompaniesResponse,
|
|
314
|
+
GetChildCompaniesParams,
|
|
315
|
+
Resource,
|
|
316
|
+
ResourceLinks,
|
|
317
|
+
ResourcesResponse,
|
|
303
318
|
JrniService,
|
|
304
319
|
ServicesResponse,
|
|
305
320
|
Question,
|
package/dist/index.d.mts
CHANGED
|
@@ -308,6 +308,109 @@ interface UpdateMemberDetailsData {
|
|
|
308
308
|
answer_id: number;
|
|
309
309
|
}>;
|
|
310
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Child Company Types
|
|
313
|
+
*/
|
|
314
|
+
interface ChildCompanyAddress {
|
|
315
|
+
id: number;
|
|
316
|
+
address1: string;
|
|
317
|
+
address2: string;
|
|
318
|
+
address3: string;
|
|
319
|
+
address4: string;
|
|
320
|
+
address5: string;
|
|
321
|
+
postcode: string;
|
|
322
|
+
country: string;
|
|
323
|
+
lat: number;
|
|
324
|
+
long: number;
|
|
325
|
+
map_url: string;
|
|
326
|
+
map_marker: string;
|
|
327
|
+
phone: string;
|
|
328
|
+
homephone: string;
|
|
329
|
+
pretty_workphone: string;
|
|
330
|
+
_links: Record<string, any>;
|
|
331
|
+
}
|
|
332
|
+
interface ChildCompanySettings {
|
|
333
|
+
has_services: boolean;
|
|
334
|
+
has_resources: boolean;
|
|
335
|
+
has_groups: boolean;
|
|
336
|
+
payment_tax: number;
|
|
337
|
+
currency: string;
|
|
338
|
+
requires_login: boolean;
|
|
339
|
+
has_wallets: boolean;
|
|
340
|
+
has_question_groups: boolean;
|
|
341
|
+
_links: Record<string, any>;
|
|
342
|
+
}
|
|
343
|
+
interface ChildCompany {
|
|
344
|
+
id: number;
|
|
345
|
+
name: string;
|
|
346
|
+
description: string;
|
|
347
|
+
company_type: string;
|
|
348
|
+
address_id: number;
|
|
349
|
+
website: string;
|
|
350
|
+
multi_status: string[];
|
|
351
|
+
numeric_widget_id: number;
|
|
352
|
+
currency_code: string;
|
|
353
|
+
timezone: string;
|
|
354
|
+
country_code: string;
|
|
355
|
+
live: boolean;
|
|
356
|
+
ref: string;
|
|
357
|
+
created_at: string;
|
|
358
|
+
updated_at: string;
|
|
359
|
+
children_count: number;
|
|
360
|
+
locale: string;
|
|
361
|
+
available_locales: string[];
|
|
362
|
+
membership_id: number;
|
|
363
|
+
address: ChildCompanyAddress;
|
|
364
|
+
_embedded: {
|
|
365
|
+
settings: ChildCompanySettings;
|
|
366
|
+
};
|
|
367
|
+
_links: Record<string, any>;
|
|
368
|
+
}
|
|
369
|
+
interface ChildCompaniesResponse {
|
|
370
|
+
total_entries: number;
|
|
371
|
+
_embedded: {
|
|
372
|
+
companies: ChildCompany[];
|
|
373
|
+
};
|
|
374
|
+
_links: Record<string, any>;
|
|
375
|
+
}
|
|
376
|
+
interface GetChildCompaniesParams {
|
|
377
|
+
person_id?: number;
|
|
378
|
+
Person_Id?: string;
|
|
379
|
+
service_id?: string;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Resource Types
|
|
383
|
+
*/
|
|
384
|
+
interface ResourceLinks {
|
|
385
|
+
self: {
|
|
386
|
+
href: string;
|
|
387
|
+
};
|
|
388
|
+
items: {
|
|
389
|
+
href: string;
|
|
390
|
+
};
|
|
391
|
+
images: {
|
|
392
|
+
href: string;
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
interface Resource {
|
|
396
|
+
id: number;
|
|
397
|
+
name: string;
|
|
398
|
+
type: string;
|
|
399
|
+
group_id: number;
|
|
400
|
+
deleted: boolean;
|
|
401
|
+
disabled: boolean;
|
|
402
|
+
company_id: number;
|
|
403
|
+
order: number;
|
|
404
|
+
max_book: number;
|
|
405
|
+
_links: ResourceLinks;
|
|
406
|
+
}
|
|
407
|
+
interface ResourcesResponse {
|
|
408
|
+
total_entries: number;
|
|
409
|
+
_embedded: {
|
|
410
|
+
resources: Resource[];
|
|
411
|
+
};
|
|
412
|
+
_links: Record<string, any>;
|
|
413
|
+
}
|
|
311
414
|
|
|
312
415
|
/**
|
|
313
416
|
* Core API Client
|
|
@@ -410,10 +513,25 @@ declare class JrniClient extends ApiClient {
|
|
|
410
513
|
private appId;
|
|
411
514
|
private appKey;
|
|
412
515
|
constructor(baseUrl: string, config: JrniConfig);
|
|
516
|
+
/**
|
|
517
|
+
* Get default headers for JRNI API requests
|
|
518
|
+
*/
|
|
519
|
+
private getDefaultHeaders;
|
|
413
520
|
/**
|
|
414
521
|
* Login to JRNI
|
|
415
522
|
*/
|
|
416
523
|
login(credentials: LoginRequest): Promise<ApiResponse<LoginResponse>>;
|
|
524
|
+
/**
|
|
525
|
+
* Get child companies for a parent company
|
|
526
|
+
* @param companyId - The parent company ID
|
|
527
|
+
* @param params - Optional query parameters (person_id, Person_Id)
|
|
528
|
+
*/
|
|
529
|
+
getChildCompanies(companyId: number, params?: GetChildCompaniesParams): Promise<ApiResponse<ChildCompaniesResponse>>;
|
|
530
|
+
/**
|
|
531
|
+
* Get resources for a company
|
|
532
|
+
* @param companyId - The company ID
|
|
533
|
+
*/
|
|
534
|
+
getResources(companyId: number): Promise<ApiResponse<ResourcesResponse>>;
|
|
417
535
|
/**
|
|
418
536
|
* Update JRNI configuration
|
|
419
537
|
*/
|
|
@@ -490,6 +608,19 @@ declare function useJrniClient(): JrniClient;
|
|
|
490
608
|
* Hook for JRNI login
|
|
491
609
|
*/
|
|
492
610
|
declare function useLogin(): _tanstack_react_query.UseMutationResult<LoginResponse, Error, LoginRequest, unknown>;
|
|
611
|
+
/**
|
|
612
|
+
* Hook for fetching child companies
|
|
613
|
+
* @param companyId - The parent company ID
|
|
614
|
+
* @param params - Optional query parameters
|
|
615
|
+
* @param enabled - Whether the query should run
|
|
616
|
+
*/
|
|
617
|
+
declare function useChildCompanies(companyId: number, params?: GetChildCompaniesParams, enabled?: boolean): _tanstack_react_query.UseQueryResult<ChildCompaniesResponse, Error>;
|
|
618
|
+
/**
|
|
619
|
+
* Hook for fetching resources
|
|
620
|
+
* @param companyId - The company ID
|
|
621
|
+
* @param enabled - Whether the query should run
|
|
622
|
+
*/
|
|
623
|
+
declare function useResources(companyId: number, enabled?: boolean): _tanstack_react_query.UseQueryResult<ResourcesResponse, Error>;
|
|
493
624
|
|
|
494
625
|
/**
|
|
495
626
|
* Hook to fetch bookings
|
|
@@ -523,4 +654,4 @@ declare function useServices(): _tanstack_react_query.UseQueryResult<Service[],
|
|
|
523
654
|
*/
|
|
524
655
|
declare function useService(serviceId: string): _tanstack_react_query.UseQueryResult<Service, Error>;
|
|
525
656
|
|
|
526
|
-
export { type AddBasketItemRequest, ApiClient, type ApiClientConfig, ApiClientProvider, type ApiError, type ApiResponse, type AvailabilityTime, type AvailabilityTimesResponse, type Booking, BookingLabClient, BookingLabProvider, type CreateBookingRequest, type JrniBooking, JrniClient, type JrniConfig, JrniProvider, type JrniService, type Location, type LocationsResponse, type LoginRequest, type LoginResponse, type MemberBookingsResponse, type PersonImage, type PersonImagesResponse, type Question, type QuestionOption, type QuestionsResponse, type RequestOptions, type Service, type ServicesResponse, type UpdateClientDetailsData, type UpdateMemberDetailsData, type Vehicle, type VehiclesResponse, createBookingLabClient, createJrniClient, useApiClientContext, useBooking, useBookingLabClient, useBookingLabContext, useBookings, useCancelBooking, useCreateBooking, useJrniClient, useJrniContext, useLogin, useService, useServices, useUpdateBooking };
|
|
657
|
+
export { type AddBasketItemRequest, ApiClient, type ApiClientConfig, ApiClientProvider, type ApiError, type ApiResponse, type AvailabilityTime, type AvailabilityTimesResponse, type Booking, BookingLabClient, BookingLabProvider, type ChildCompaniesResponse, type ChildCompany, type ChildCompanyAddress, type ChildCompanySettings, type CreateBookingRequest, type GetChildCompaniesParams, type JrniBooking, JrniClient, type JrniConfig, JrniProvider, type JrniService, type Location, type LocationsResponse, type LoginRequest, type LoginResponse, type MemberBookingsResponse, type PersonImage, type PersonImagesResponse, type Question, type QuestionOption, type QuestionsResponse, type RequestOptions, type Resource, type ResourceLinks, type ResourcesResponse, type Service, type ServicesResponse, type UpdateClientDetailsData, type UpdateMemberDetailsData, type Vehicle, type VehiclesResponse, createBookingLabClient, createJrniClient, useApiClientContext, useBooking, useBookingLabClient, useBookingLabContext, useBookings, useCancelBooking, useChildCompanies, useCreateBooking, useJrniClient, useJrniContext, useLogin, useResources, useService, useServices, useUpdateBooking };
|
package/dist/index.d.ts
CHANGED
|
@@ -308,6 +308,109 @@ interface UpdateMemberDetailsData {
|
|
|
308
308
|
answer_id: number;
|
|
309
309
|
}>;
|
|
310
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Child Company Types
|
|
313
|
+
*/
|
|
314
|
+
interface ChildCompanyAddress {
|
|
315
|
+
id: number;
|
|
316
|
+
address1: string;
|
|
317
|
+
address2: string;
|
|
318
|
+
address3: string;
|
|
319
|
+
address4: string;
|
|
320
|
+
address5: string;
|
|
321
|
+
postcode: string;
|
|
322
|
+
country: string;
|
|
323
|
+
lat: number;
|
|
324
|
+
long: number;
|
|
325
|
+
map_url: string;
|
|
326
|
+
map_marker: string;
|
|
327
|
+
phone: string;
|
|
328
|
+
homephone: string;
|
|
329
|
+
pretty_workphone: string;
|
|
330
|
+
_links: Record<string, any>;
|
|
331
|
+
}
|
|
332
|
+
interface ChildCompanySettings {
|
|
333
|
+
has_services: boolean;
|
|
334
|
+
has_resources: boolean;
|
|
335
|
+
has_groups: boolean;
|
|
336
|
+
payment_tax: number;
|
|
337
|
+
currency: string;
|
|
338
|
+
requires_login: boolean;
|
|
339
|
+
has_wallets: boolean;
|
|
340
|
+
has_question_groups: boolean;
|
|
341
|
+
_links: Record<string, any>;
|
|
342
|
+
}
|
|
343
|
+
interface ChildCompany {
|
|
344
|
+
id: number;
|
|
345
|
+
name: string;
|
|
346
|
+
description: string;
|
|
347
|
+
company_type: string;
|
|
348
|
+
address_id: number;
|
|
349
|
+
website: string;
|
|
350
|
+
multi_status: string[];
|
|
351
|
+
numeric_widget_id: number;
|
|
352
|
+
currency_code: string;
|
|
353
|
+
timezone: string;
|
|
354
|
+
country_code: string;
|
|
355
|
+
live: boolean;
|
|
356
|
+
ref: string;
|
|
357
|
+
created_at: string;
|
|
358
|
+
updated_at: string;
|
|
359
|
+
children_count: number;
|
|
360
|
+
locale: string;
|
|
361
|
+
available_locales: string[];
|
|
362
|
+
membership_id: number;
|
|
363
|
+
address: ChildCompanyAddress;
|
|
364
|
+
_embedded: {
|
|
365
|
+
settings: ChildCompanySettings;
|
|
366
|
+
};
|
|
367
|
+
_links: Record<string, any>;
|
|
368
|
+
}
|
|
369
|
+
interface ChildCompaniesResponse {
|
|
370
|
+
total_entries: number;
|
|
371
|
+
_embedded: {
|
|
372
|
+
companies: ChildCompany[];
|
|
373
|
+
};
|
|
374
|
+
_links: Record<string, any>;
|
|
375
|
+
}
|
|
376
|
+
interface GetChildCompaniesParams {
|
|
377
|
+
person_id?: number;
|
|
378
|
+
Person_Id?: string;
|
|
379
|
+
service_id?: string;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Resource Types
|
|
383
|
+
*/
|
|
384
|
+
interface ResourceLinks {
|
|
385
|
+
self: {
|
|
386
|
+
href: string;
|
|
387
|
+
};
|
|
388
|
+
items: {
|
|
389
|
+
href: string;
|
|
390
|
+
};
|
|
391
|
+
images: {
|
|
392
|
+
href: string;
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
interface Resource {
|
|
396
|
+
id: number;
|
|
397
|
+
name: string;
|
|
398
|
+
type: string;
|
|
399
|
+
group_id: number;
|
|
400
|
+
deleted: boolean;
|
|
401
|
+
disabled: boolean;
|
|
402
|
+
company_id: number;
|
|
403
|
+
order: number;
|
|
404
|
+
max_book: number;
|
|
405
|
+
_links: ResourceLinks;
|
|
406
|
+
}
|
|
407
|
+
interface ResourcesResponse {
|
|
408
|
+
total_entries: number;
|
|
409
|
+
_embedded: {
|
|
410
|
+
resources: Resource[];
|
|
411
|
+
};
|
|
412
|
+
_links: Record<string, any>;
|
|
413
|
+
}
|
|
311
414
|
|
|
312
415
|
/**
|
|
313
416
|
* Core API Client
|
|
@@ -410,10 +513,25 @@ declare class JrniClient extends ApiClient {
|
|
|
410
513
|
private appId;
|
|
411
514
|
private appKey;
|
|
412
515
|
constructor(baseUrl: string, config: JrniConfig);
|
|
516
|
+
/**
|
|
517
|
+
* Get default headers for JRNI API requests
|
|
518
|
+
*/
|
|
519
|
+
private getDefaultHeaders;
|
|
413
520
|
/**
|
|
414
521
|
* Login to JRNI
|
|
415
522
|
*/
|
|
416
523
|
login(credentials: LoginRequest): Promise<ApiResponse<LoginResponse>>;
|
|
524
|
+
/**
|
|
525
|
+
* Get child companies for a parent company
|
|
526
|
+
* @param companyId - The parent company ID
|
|
527
|
+
* @param params - Optional query parameters (person_id, Person_Id)
|
|
528
|
+
*/
|
|
529
|
+
getChildCompanies(companyId: number, params?: GetChildCompaniesParams): Promise<ApiResponse<ChildCompaniesResponse>>;
|
|
530
|
+
/**
|
|
531
|
+
* Get resources for a company
|
|
532
|
+
* @param companyId - The company ID
|
|
533
|
+
*/
|
|
534
|
+
getResources(companyId: number): Promise<ApiResponse<ResourcesResponse>>;
|
|
417
535
|
/**
|
|
418
536
|
* Update JRNI configuration
|
|
419
537
|
*/
|
|
@@ -490,6 +608,19 @@ declare function useJrniClient(): JrniClient;
|
|
|
490
608
|
* Hook for JRNI login
|
|
491
609
|
*/
|
|
492
610
|
declare function useLogin(): _tanstack_react_query.UseMutationResult<LoginResponse, Error, LoginRequest, unknown>;
|
|
611
|
+
/**
|
|
612
|
+
* Hook for fetching child companies
|
|
613
|
+
* @param companyId - The parent company ID
|
|
614
|
+
* @param params - Optional query parameters
|
|
615
|
+
* @param enabled - Whether the query should run
|
|
616
|
+
*/
|
|
617
|
+
declare function useChildCompanies(companyId: number, params?: GetChildCompaniesParams, enabled?: boolean): _tanstack_react_query.UseQueryResult<ChildCompaniesResponse, Error>;
|
|
618
|
+
/**
|
|
619
|
+
* Hook for fetching resources
|
|
620
|
+
* @param companyId - The company ID
|
|
621
|
+
* @param enabled - Whether the query should run
|
|
622
|
+
*/
|
|
623
|
+
declare function useResources(companyId: number, enabled?: boolean): _tanstack_react_query.UseQueryResult<ResourcesResponse, Error>;
|
|
493
624
|
|
|
494
625
|
/**
|
|
495
626
|
* Hook to fetch bookings
|
|
@@ -523,4 +654,4 @@ declare function useServices(): _tanstack_react_query.UseQueryResult<Service[],
|
|
|
523
654
|
*/
|
|
524
655
|
declare function useService(serviceId: string): _tanstack_react_query.UseQueryResult<Service, Error>;
|
|
525
656
|
|
|
526
|
-
export { type AddBasketItemRequest, ApiClient, type ApiClientConfig, ApiClientProvider, type ApiError, type ApiResponse, type AvailabilityTime, type AvailabilityTimesResponse, type Booking, BookingLabClient, BookingLabProvider, type CreateBookingRequest, type JrniBooking, JrniClient, type JrniConfig, JrniProvider, type JrniService, type Location, type LocationsResponse, type LoginRequest, type LoginResponse, type MemberBookingsResponse, type PersonImage, type PersonImagesResponse, type Question, type QuestionOption, type QuestionsResponse, type RequestOptions, type Service, type ServicesResponse, type UpdateClientDetailsData, type UpdateMemberDetailsData, type Vehicle, type VehiclesResponse, createBookingLabClient, createJrniClient, useApiClientContext, useBooking, useBookingLabClient, useBookingLabContext, useBookings, useCancelBooking, useCreateBooking, useJrniClient, useJrniContext, useLogin, useService, useServices, useUpdateBooking };
|
|
657
|
+
export { type AddBasketItemRequest, ApiClient, type ApiClientConfig, ApiClientProvider, type ApiError, type ApiResponse, type AvailabilityTime, type AvailabilityTimesResponse, type Booking, BookingLabClient, BookingLabProvider, type ChildCompaniesResponse, type ChildCompany, type ChildCompanyAddress, type ChildCompanySettings, type CreateBookingRequest, type GetChildCompaniesParams, type JrniBooking, JrniClient, type JrniConfig, JrniProvider, type JrniService, type Location, type LocationsResponse, type LoginRequest, type LoginResponse, type MemberBookingsResponse, type PersonImage, type PersonImagesResponse, type Question, type QuestionOption, type QuestionsResponse, type RequestOptions, type Resource, type ResourceLinks, type ResourcesResponse, type Service, type ServicesResponse, type UpdateClientDetailsData, type UpdateMemberDetailsData, type Vehicle, type VehiclesResponse, createBookingLabClient, createJrniClient, useApiClientContext, useBooking, useBookingLabClient, useBookingLabContext, useBookings, useCancelBooking, useChildCompanies, useCreateBooking, useJrniClient, useJrniContext, useLogin, useResources, useService, useServices, useUpdateBooking };
|
package/dist/index.js
CHANGED
|
@@ -212,18 +212,58 @@ var JrniClient = class extends ApiClient {
|
|
|
212
212
|
this.appId = config.appId;
|
|
213
213
|
this.appKey = config.appKey;
|
|
214
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Get default headers for JRNI API requests
|
|
217
|
+
*/
|
|
218
|
+
getDefaultHeaders() {
|
|
219
|
+
return {
|
|
220
|
+
"Content-Type": "application/json",
|
|
221
|
+
"App-Id": this.appId
|
|
222
|
+
};
|
|
223
|
+
}
|
|
215
224
|
/**
|
|
216
225
|
* Login to JRNI
|
|
217
226
|
*/
|
|
218
227
|
async login(credentials) {
|
|
219
228
|
return this.post("/login", credentials, {
|
|
220
229
|
headers: {
|
|
221
|
-
|
|
222
|
-
"App-Id": this.appId,
|
|
230
|
+
...this.getDefaultHeaders(),
|
|
223
231
|
"App-Key": this.appKey
|
|
224
232
|
}
|
|
225
233
|
});
|
|
226
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Get child companies for a parent company
|
|
237
|
+
* @param companyId - The parent company ID
|
|
238
|
+
* @param params - Optional query parameters (person_id, Person_Id)
|
|
239
|
+
*/
|
|
240
|
+
async getChildCompanies(companyId, params) {
|
|
241
|
+
return this.get(
|
|
242
|
+
`/api/v5/company/${companyId}/children`,
|
|
243
|
+
{
|
|
244
|
+
headers: {
|
|
245
|
+
...this.getDefaultHeaders(),
|
|
246
|
+
"App-Key": this.appKey
|
|
247
|
+
},
|
|
248
|
+
params
|
|
249
|
+
}
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get resources for a company
|
|
254
|
+
* @param companyId - The company ID
|
|
255
|
+
*/
|
|
256
|
+
async getResources(companyId) {
|
|
257
|
+
return this.get(
|
|
258
|
+
`/api/v5/${companyId}/resources`,
|
|
259
|
+
{
|
|
260
|
+
headers: {
|
|
261
|
+
...this.getDefaultHeaders(),
|
|
262
|
+
"App-Key": this.appKey
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
}
|
|
227
267
|
/**
|
|
228
268
|
* Update JRNI configuration
|
|
229
269
|
*/
|
|
@@ -358,6 +398,28 @@ function useLogin() {
|
|
|
358
398
|
}
|
|
359
399
|
});
|
|
360
400
|
}
|
|
401
|
+
function useChildCompanies(companyId, params, enabled = true) {
|
|
402
|
+
const client = useJrniClient();
|
|
403
|
+
return reactQuery.useQuery({
|
|
404
|
+
queryKey: ["childCompanies", companyId, params],
|
|
405
|
+
queryFn: async () => {
|
|
406
|
+
const response = await client.getChildCompanies(companyId, params);
|
|
407
|
+
return response.data;
|
|
408
|
+
},
|
|
409
|
+
enabled: enabled && !!companyId
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
function useResources(companyId, enabled = true) {
|
|
413
|
+
const client = useJrniClient();
|
|
414
|
+
return reactQuery.useQuery({
|
|
415
|
+
queryKey: ["resources", companyId],
|
|
416
|
+
queryFn: async () => {
|
|
417
|
+
const response = await client.getResources(companyId);
|
|
418
|
+
return response.data;
|
|
419
|
+
},
|
|
420
|
+
enabled: enabled && !!companyId
|
|
421
|
+
});
|
|
422
|
+
}
|
|
361
423
|
function useBookings(userId) {
|
|
362
424
|
const client = useBookingLabClient();
|
|
363
425
|
return reactQuery.useQuery({
|
|
@@ -455,10 +517,12 @@ exports.useBookingLabClient = useBookingLabClient;
|
|
|
455
517
|
exports.useBookingLabContext = useBookingLabContext;
|
|
456
518
|
exports.useBookings = useBookings;
|
|
457
519
|
exports.useCancelBooking = useCancelBooking;
|
|
520
|
+
exports.useChildCompanies = useChildCompanies;
|
|
458
521
|
exports.useCreateBooking = useCreateBooking;
|
|
459
522
|
exports.useJrniClient = useJrniClient;
|
|
460
523
|
exports.useJrniContext = useJrniContext;
|
|
461
524
|
exports.useLogin = useLogin;
|
|
525
|
+
exports.useResources = useResources;
|
|
462
526
|
exports.useService = useService;
|
|
463
527
|
exports.useServices = useServices;
|
|
464
528
|
exports.useUpdateBooking = useUpdateBooking;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core.ts","../src/booking-lab.ts","../src/jrni.ts","../src/providers/ApiClientProvider.tsx","../src/providers/BookingLabProvider.tsx","../src/providers/JrniProvider.tsx","../src/hooks/useApiClient.ts","../src/hooks/useJrni.ts","../src/hooks/useBookingLab.ts"],"names":["createContext","QueryClient","useMemo","jsx","QueryClientProvider","useContext","useMutation","useQuery","useQueryClient"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core API Client\n * Base class for making HTTP requests\n */\n\nimport { ApiClientConfig, RequestOptions, ApiResponse, ApiError } from './types';\n\nexport class ApiClient {\n protected baseUrl: string;\n protected headers: Record<string, string>;\n protected timeout: number;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n this.headers = config.headers || {};\n this.timeout = config.timeout || 30000;\n }\n\n /**\n * Update client configuration\n */\n setConfig(config: Partial<ApiClientConfig>) {\n if (config.baseUrl) this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n if (config.headers) this.headers = { ...this.headers, ...config.headers };\n if (config.timeout) this.timeout = config.timeout;\n }\n\n /**\n * Set authorization token\n */\n setAuthToken(token: string) {\n this.headers['Authorization'] = `Bearer ${token}`;\n }\n\n /**\n * Make an HTTP request\n */\n protected async request<T>(\n endpoint: string,\n options: RequestOptions = {}\n ): Promise<ApiResponse<T>> {\n const { params, ...fetchOptions } = options;\n\n // Build URL with query parameters\n let url = `${this.baseUrl}${endpoint}`;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n // Merge headers\n const headers = {\n 'Content-Type': 'application/json',\n ...this.headers,\n ...((fetchOptions.headers as Record<string, string>) || {}),\n };\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n const data = await response.json();\n\n return {\n data,\n status: response.status,\n headers: response.headers,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n throw this.normalizeError(error as Error);\n }\n }\n\n /**\n * GET request\n */\n protected async get<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'GET' });\n }\n\n /**\n * POST request\n */\n protected async post<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'POST',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * PUT request\n */\n protected async put<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'PUT',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * DELETE request\n */\n protected async delete<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'DELETE' });\n }\n\n /**\n * Handle error responses\n */\n private async handleError(response: Response): Promise<ApiError> {\n let message = `HTTP ${response.status}: ${response.statusText}`;\n let details: any;\n\n try {\n details = await response.json();\n if (details.message) {\n message = details.message;\n } else if (details.error) {\n message = details.error;\n }\n } catch {\n // Response body is not JSON\n }\n\n return {\n message,\n status: response.status,\n details,\n };\n }\n\n /**\n * Normalize errors to consistent format\n */\n private normalizeError(error: Error): ApiError {\n if (error.name === 'AbortError') {\n return {\n message: 'Request timeout',\n code: 'TIMEOUT',\n };\n }\n\n if ('status' in error) {\n return error as ApiError;\n }\n\n return {\n message: error.message || 'Unknown error',\n code: 'UNKNOWN',\n };\n }\n}\n","/**\n * BookingLab API Client\n * Provides methods for interacting with the BookingLab API\n */\n\nimport { ApiClient } from './core';\nimport { Booking, CreateBookingRequest, Service, ApiResponse } from './types';\n\nexport class BookingLabClient extends ApiClient {\n /**\n * Get all bookings\n */\n async getBookings(userId?: string): Promise<ApiResponse<Booking[]>> {\n return this.get<Booking[]>('/bookings', {\n params: userId ? { userId } : undefined,\n });\n }\n\n /**\n * Get a single booking by ID\n */\n async getBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.get<Booking>(`/bookings/${bookingId}`);\n }\n\n /**\n * Create a new booking\n */\n async createBooking(booking: CreateBookingRequest): Promise<ApiResponse<Booking>> {\n return this.post<Booking>('/bookings', booking);\n }\n\n /**\n * Update an existing booking\n */\n async updateBooking(\n bookingId: string,\n updates: Partial<Booking>\n ): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, updates);\n }\n\n /**\n * Cancel a booking\n */\n async cancelBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, { status: 'cancelled' });\n }\n\n /**\n * Delete a booking\n */\n async deleteBooking(bookingId: string): Promise<ApiResponse<void>> {\n return this.delete<void>(`/bookings/${bookingId}`);\n }\n\n /**\n * Get all services\n */\n async getServices(): Promise<ApiResponse<Service[]>> {\n return this.get<Service[]>('/services');\n }\n\n /**\n * Get a single service by ID\n */\n async getService(serviceId: string): Promise<ApiResponse<Service>> {\n return this.get<Service>(`/services/${serviceId}`);\n }\n}\n\n/**\n * Create a new BookingLab client instance\n */\nexport function createBookingLabClient(baseUrl: string, authToken?: string) {\n const client = new BookingLabClient({ baseUrl });\n if (authToken) {\n client.setAuthToken(authToken);\n }\n return client;\n}\n","/**\n * JRNI API Client\n * Provides methods for interacting with the JRNI API\n */\n\nimport { ApiClient } from './core';\nimport { LoginRequest, LoginResponse, ApiResponse, JrniConfig } from './types';\n\nexport class JrniClient extends ApiClient {\n private appId: string;\n private appKey: string;\n\n constructor(baseUrl: string, config: JrniConfig) {\n super({ baseUrl });\n this.appId = config.appId;\n this.appKey = config.appKey;\n }\n\n /**\n * Login to JRNI\n */\n async login(credentials: LoginRequest): Promise<ApiResponse<LoginResponse>> {\n return this.post<LoginResponse>('/login', credentials, {\n headers: {\n 'Content-Type': 'application/json',\n 'App-Id': this.appId,\n 'App-Key': this.appKey,\n },\n });\n }\n\n /**\n * Update JRNI configuration\n */\n setJrniConfig(config: Partial<JrniConfig>) {\n if (config.appId) this.appId = config.appId;\n if (config.appKey) this.appKey = config.appKey;\n }\n}\n\n/**\n * Create a new JRNI client instance\n */\nexport function createJrniClient(baseUrl: string, config: JrniConfig) {\n return new JrniClient(baseUrl, config);\n}\n","/**\n * React Context Provider for API Clients\n * Combined provider for applications using multiple API clients\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { BookingLabClient } from '../booking-lab';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface ApiClientContextValue {\n bookingLabClient: BookingLabClient | null;\n jrniClient: JrniClient | null;\n}\n\ninterface ApiClientProviderProps {\n children: ReactNode;\n bookingLabBaseUrl?: string;\n jrniBaseUrl?: string;\n jrniConfig?: JrniConfig;\n authToken?: string;\n queryClient?: QueryClient;\n}\n\nconst ApiClientContext = createContext<ApiClientContextValue | undefined>(undefined);\n\n// Default QueryClient for the provider\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\n/**\n * Combined provider for multiple API clients\n * Includes QueryClientProvider for React Query hooks\n */\nexport function ApiClientProvider({\n children,\n bookingLabBaseUrl,\n jrniBaseUrl,\n jrniConfig,\n authToken,\n queryClient,\n}: ApiClientProviderProps) {\n const client = queryClient || defaultQueryClient;\n\n const bookingLabClient = useMemo(() => {\n if (!bookingLabBaseUrl) return null;\n const clientInstance = new BookingLabClient({ baseUrl: bookingLabBaseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [bookingLabBaseUrl, authToken]);\n\n const jrniClient = useMemo(() => {\n if (jrniBaseUrl && jrniConfig) {\n return new JrniClient(jrniBaseUrl, jrniConfig);\n }\n return null;\n }, [jrniBaseUrl, jrniConfig?.appId, jrniConfig?.appKey]);\n\n const value = useMemo(\n () => ({\n bookingLabClient,\n jrniClient,\n }),\n [bookingLabClient, jrniClient]\n );\n\n return (\n <QueryClientProvider client={client}>\n <ApiClientContext.Provider value={value}>{children}</ApiClientContext.Provider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Hook to access API client context\n */\nexport function useApiClientContext() {\n const context = useContext(ApiClientContext);\n if (context === undefined) {\n throw new Error('useApiClientContext must be used within an ApiClientProvider');\n }\n return context;\n}\n","/**\n * React Context Provider for BookingLab API Client\n * Standalone provider for apps that only use BookingLab\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { BookingLabClient } from '../booking-lab';\n\ninterface BookingLabContextValue {\n client: BookingLabClient;\n}\n\ninterface BookingLabProviderProps {\n children: ReactNode;\n baseUrl: string;\n authToken?: string;\n}\n\nconst BookingLabContext = createContext<BookingLabContextValue | undefined>(undefined);\n\n/**\n * Provider component for BookingLab client\n */\nexport function BookingLabProvider({\n children,\n baseUrl,\n authToken,\n}: BookingLabProviderProps) {\n const client = useMemo(() => {\n const clientInstance = new BookingLabClient({ baseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [baseUrl, authToken]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <BookingLabContext.Provider value={value}>\n {children}\n </BookingLabContext.Provider>\n );\n}\n\n/**\n * Hook to access BookingLab client from context\n */\nexport function useBookingLabContext() {\n const context = useContext(BookingLabContext);\n if (context === undefined) {\n throw new Error('useBookingLabContext must be used within a BookingLabProvider');\n }\n return context.client;\n}\n","/**\n * React Context Provider for JRNI API Client\n * Standalone provider for apps that only use JRNI\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface JrniContextValue {\n client: JrniClient;\n}\n\ninterface JrniProviderProps {\n children: ReactNode;\n baseUrl: string;\n config: JrniConfig;\n}\n\nconst JrniContext = createContext<JrniContextValue | undefined>(undefined);\n\n/**\n * Provider component for JRNI client\n */\nexport function JrniProvider({ children, baseUrl, config }: JrniProviderProps) {\n const client = useMemo(() => {\n return new JrniClient(baseUrl, config);\n }, [baseUrl, config.appId, config.appKey]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return <JrniContext.Provider value={value}>{children}</JrniContext.Provider>;\n}\n\n/**\n * Hook to access JRNI client from context\n */\nexport function useJrniContext() {\n const context = useContext(JrniContext);\n if (context === undefined) {\n throw new Error('useJrniContext must be used within a JrniProvider');\n }\n return context.client;\n}\n","/**\n * Hook to access API clients from context\n */\n\nimport { useApiClientContext } from '../providers/ApiClientProvider';\nimport { useBookingLabContext } from '../providers/BookingLabProvider';\nimport { useJrniContext } from '../providers/JrniProvider';\n\n/**\n * Hook to get BookingLab client from either ApiClientProvider or BookingLabProvider\n */\nexport function useBookingLabClient() {\n // Try to get from standalone provider first\n try {\n return useBookingLabContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.bookingLabClient) {\n throw new Error(\n 'BookingLab client not configured. Wrap your app with ApiClientProvider or BookingLabProvider.'\n );\n }\n return context.bookingLabClient;\n }\n}\n\n/**\n * Hook to get JRNI client from either ApiClientProvider or JrniProvider\n */\nexport function useJrniClient() {\n // Try to get from standalone provider first\n try {\n return useJrniContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.jrniClient) {\n throw new Error(\n 'JRNI client not configured. Wrap your app with ApiClientProvider or JrniProvider.'\n );\n }\n return context.jrniClient;\n }\n}\n","/**\n * React hooks for JRNI API\n */\n\nimport { useMutation } from '@tanstack/react-query';\nimport { useJrniClient } from './useApiClient';\nimport { LoginRequest, LoginResponse } from '../types';\n\n/**\n * Hook for JRNI login\n */\nexport function useLogin() {\n const client = useJrniClient();\n\n return useMutation({\n mutationFn: async (credentials: LoginRequest) => {\n const response = await client.login(credentials);\n return response.data;\n },\n });\n}\n","/**\n * React hooks for BookingLab API\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Booking, CreateBookingRequest, Service } from '../types';\nimport { useBookingLabClient } from './useApiClient';\n\n/**\n * Hook to fetch bookings\n */\nexport function useBookings(userId?: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['bookings', userId],\n queryFn: async () => {\n const response = await client.getBookings(userId);\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single booking\n */\nexport function useBooking(bookingId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['booking', bookingId],\n queryFn: async () => {\n const response = await client.getBooking(bookingId);\n return response.data;\n },\n enabled: !!bookingId,\n });\n}\n\n/**\n * Hook to create a booking\n */\nexport function useCreateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (booking: CreateBookingRequest) => {\n const response = await client.createBooking(booking);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to update a booking\n */\nexport function useUpdateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ id, updates }: { id: string; updates: Partial<Booking> }) => {\n const response = await client.updateBooking(id, updates);\n return response.data;\n },\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n queryClient.invalidateQueries({ queryKey: ['booking', variables.id] });\n },\n });\n}\n\n/**\n * Hook to cancel a booking\n */\nexport function useCancelBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (bookingId: string) => {\n const response = await client.cancelBooking(bookingId);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to fetch services\n */\nexport function useServices() {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['services'],\n queryFn: async () => {\n const response = await client.getServices();\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single service\n */\nexport function useService(serviceId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['service', serviceId],\n queryFn: async () => {\n const response = await client.getService(serviceId);\n return response.data;\n },\n enabled: !!serviceId,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core.ts","../src/booking-lab.ts","../src/jrni.ts","../src/providers/ApiClientProvider.tsx","../src/providers/BookingLabProvider.tsx","../src/providers/JrniProvider.tsx","../src/hooks/useApiClient.ts","../src/hooks/useJrni.ts","../src/hooks/useBookingLab.ts"],"names":["createContext","QueryClient","useMemo","jsx","QueryClientProvider","useContext","useMutation","useQuery","useQueryClient"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core API Client\n * Base class for making HTTP requests\n */\n\nimport { ApiClientConfig, RequestOptions, ApiResponse, ApiError } from './types';\n\nexport class ApiClient {\n protected baseUrl: string;\n protected headers: Record<string, string>;\n protected timeout: number;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n this.headers = config.headers || {};\n this.timeout = config.timeout || 30000;\n }\n\n /**\n * Update client configuration\n */\n setConfig(config: Partial<ApiClientConfig>) {\n if (config.baseUrl) this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n if (config.headers) this.headers = { ...this.headers, ...config.headers };\n if (config.timeout) this.timeout = config.timeout;\n }\n\n /**\n * Set authorization token\n */\n setAuthToken(token: string) {\n this.headers['Authorization'] = `Bearer ${token}`;\n }\n\n /**\n * Make an HTTP request\n */\n protected async request<T>(\n endpoint: string,\n options: RequestOptions = {}\n ): Promise<ApiResponse<T>> {\n const { params, ...fetchOptions } = options;\n\n // Build URL with query parameters\n let url = `${this.baseUrl}${endpoint}`;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n // Merge headers\n const headers = {\n 'Content-Type': 'application/json',\n ...this.headers,\n ...((fetchOptions.headers as Record<string, string>) || {}),\n };\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n const data = await response.json();\n\n return {\n data,\n status: response.status,\n headers: response.headers,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n throw this.normalizeError(error as Error);\n }\n }\n\n /**\n * GET request\n */\n protected async get<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'GET' });\n }\n\n /**\n * POST request\n */\n protected async post<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'POST',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * PUT request\n */\n protected async put<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'PUT',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * DELETE request\n */\n protected async delete<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'DELETE' });\n }\n\n /**\n * Handle error responses\n */\n private async handleError(response: Response): Promise<ApiError> {\n let message = `HTTP ${response.status}: ${response.statusText}`;\n let details: any;\n\n try {\n details = await response.json();\n if (details.message) {\n message = details.message;\n } else if (details.error) {\n message = details.error;\n }\n } catch {\n // Response body is not JSON\n }\n\n return {\n message,\n status: response.status,\n details,\n };\n }\n\n /**\n * Normalize errors to consistent format\n */\n private normalizeError(error: Error): ApiError {\n if (error.name === 'AbortError') {\n return {\n message: 'Request timeout',\n code: 'TIMEOUT',\n };\n }\n\n if ('status' in error) {\n return error as ApiError;\n }\n\n return {\n message: error.message || 'Unknown error',\n code: 'UNKNOWN',\n };\n }\n}\n","/**\n * BookingLab API Client\n * Provides methods for interacting with the BookingLab API\n */\n\nimport { ApiClient } from './core';\nimport { Booking, CreateBookingRequest, Service, ApiResponse } from './types';\n\nexport class BookingLabClient extends ApiClient {\n /**\n * Get all bookings\n */\n async getBookings(userId?: string): Promise<ApiResponse<Booking[]>> {\n return this.get<Booking[]>('/bookings', {\n params: userId ? { userId } : undefined,\n });\n }\n\n /**\n * Get a single booking by ID\n */\n async getBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.get<Booking>(`/bookings/${bookingId}`);\n }\n\n /**\n * Create a new booking\n */\n async createBooking(booking: CreateBookingRequest): Promise<ApiResponse<Booking>> {\n return this.post<Booking>('/bookings', booking);\n }\n\n /**\n * Update an existing booking\n */\n async updateBooking(\n bookingId: string,\n updates: Partial<Booking>\n ): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, updates);\n }\n\n /**\n * Cancel a booking\n */\n async cancelBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, { status: 'cancelled' });\n }\n\n /**\n * Delete a booking\n */\n async deleteBooking(bookingId: string): Promise<ApiResponse<void>> {\n return this.delete<void>(`/bookings/${bookingId}`);\n }\n\n /**\n * Get all services\n */\n async getServices(): Promise<ApiResponse<Service[]>> {\n return this.get<Service[]>('/services');\n }\n\n /**\n * Get a single service by ID\n */\n async getService(serviceId: string): Promise<ApiResponse<Service>> {\n return this.get<Service>(`/services/${serviceId}`);\n }\n}\n\n/**\n * Create a new BookingLab client instance\n */\nexport function createBookingLabClient(baseUrl: string, authToken?: string) {\n const client = new BookingLabClient({ baseUrl });\n if (authToken) {\n client.setAuthToken(authToken);\n }\n return client;\n}\n","/**\n * JRNI API Client\n * Provides methods for interacting with the JRNI API\n */\n\nimport { ApiClient } from './core';\nimport { \n LoginRequest, \n LoginResponse, \n ApiResponse, \n JrniConfig,\n ChildCompaniesResponse,\n GetChildCompaniesParams,\n ResourcesResponse\n} from './types';\n\nexport class JrniClient extends ApiClient {\n private appId: string;\n private appKey: string;\n\n constructor(baseUrl: string, config: JrniConfig) {\n super({ baseUrl });\n this.appId = config.appId;\n this.appKey = config.appKey;\n }\n\n /**\n * Get default headers for JRNI API requests\n */\n private getDefaultHeaders(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n 'App-Id': this.appId,\n };\n }\n\n /**\n * Login to JRNI\n */\n async login(credentials: LoginRequest): Promise<ApiResponse<LoginResponse>> {\n return this.post<LoginResponse>('/login', credentials, {\n headers: {\n ...this.getDefaultHeaders(),\n 'App-Key': this.appKey,\n },\n });\n }\n\n /**\n * Get child companies for a parent company\n * @param companyId - The parent company ID\n * @param params - Optional query parameters (person_id, Person_Id)\n */\n async getChildCompanies(\n companyId: number,\n params?: GetChildCompaniesParams\n ): Promise<ApiResponse<ChildCompaniesResponse>> {\n return this.get<ChildCompaniesResponse>(\n `/api/v5/company/${companyId}/children`,\n {\n headers: {\n ...this.getDefaultHeaders(),\n 'App-Key': this.appKey,\n },\n params: params as Record<string, string | number | boolean | undefined>,\n }\n );\n }\n\n /**\n * Get resources for a company\n * @param companyId - The company ID\n */\n async getResources(companyId: number): Promise<ApiResponse<ResourcesResponse>> {\n return this.get<ResourcesResponse>(\n `/api/v5/${companyId}/resources`,\n {\n headers: {\n ...this.getDefaultHeaders(),\n 'App-Key': this.appKey,\n },\n }\n );\n }\n\n /**\n * Update JRNI configuration\n */\n setJrniConfig(config: Partial<JrniConfig>) {\n if (config.appId) this.appId = config.appId;\n if (config.appKey) this.appKey = config.appKey;\n }\n}\n\n/**\n * Create a new JRNI client instance\n */\nexport function createJrniClient(baseUrl: string, config: JrniConfig) {\n return new JrniClient(baseUrl, config);\n}\n","/**\n * React Context Provider for API Clients\n * Combined provider for applications using multiple API clients\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { BookingLabClient } from '../booking-lab';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface ApiClientContextValue {\n bookingLabClient: BookingLabClient | null;\n jrniClient: JrniClient | null;\n}\n\ninterface ApiClientProviderProps {\n children: ReactNode;\n bookingLabBaseUrl?: string;\n jrniBaseUrl?: string;\n jrniConfig?: JrniConfig;\n authToken?: string;\n queryClient?: QueryClient;\n}\n\nconst ApiClientContext = createContext<ApiClientContextValue | undefined>(undefined);\n\n// Default QueryClient for the provider\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\n/**\n * Combined provider for multiple API clients\n * Includes QueryClientProvider for React Query hooks\n */\nexport function ApiClientProvider({\n children,\n bookingLabBaseUrl,\n jrniBaseUrl,\n jrniConfig,\n authToken,\n queryClient,\n}: ApiClientProviderProps) {\n const client = queryClient || defaultQueryClient;\n\n const bookingLabClient = useMemo(() => {\n if (!bookingLabBaseUrl) return null;\n const clientInstance = new BookingLabClient({ baseUrl: bookingLabBaseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [bookingLabBaseUrl, authToken]);\n\n const jrniClient = useMemo(() => {\n if (jrniBaseUrl && jrniConfig) {\n return new JrniClient(jrniBaseUrl, jrniConfig);\n }\n return null;\n }, [jrniBaseUrl, jrniConfig?.appId, jrniConfig?.appKey]);\n\n const value = useMemo(\n () => ({\n bookingLabClient,\n jrniClient,\n }),\n [bookingLabClient, jrniClient]\n );\n\n return (\n <QueryClientProvider client={client}>\n <ApiClientContext.Provider value={value}>{children}</ApiClientContext.Provider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Hook to access API client context\n */\nexport function useApiClientContext() {\n const context = useContext(ApiClientContext);\n if (context === undefined) {\n throw new Error('useApiClientContext must be used within an ApiClientProvider');\n }\n return context;\n}\n","/**\n * React Context Provider for BookingLab API Client\n * Standalone provider for apps that only use BookingLab\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { BookingLabClient } from '../booking-lab';\n\ninterface BookingLabContextValue {\n client: BookingLabClient;\n}\n\ninterface BookingLabProviderProps {\n children: ReactNode;\n baseUrl: string;\n authToken?: string;\n}\n\nconst BookingLabContext = createContext<BookingLabContextValue | undefined>(undefined);\n\n/**\n * Provider component for BookingLab client\n */\nexport function BookingLabProvider({\n children,\n baseUrl,\n authToken,\n}: BookingLabProviderProps) {\n const client = useMemo(() => {\n const clientInstance = new BookingLabClient({ baseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [baseUrl, authToken]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <BookingLabContext.Provider value={value}>\n {children}\n </BookingLabContext.Provider>\n );\n}\n\n/**\n * Hook to access BookingLab client from context\n */\nexport function useBookingLabContext() {\n const context = useContext(BookingLabContext);\n if (context === undefined) {\n throw new Error('useBookingLabContext must be used within a BookingLabProvider');\n }\n return context.client;\n}\n","/**\n * React Context Provider for JRNI API Client\n * Standalone provider for apps that only use JRNI\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface JrniContextValue {\n client: JrniClient;\n}\n\ninterface JrniProviderProps {\n children: ReactNode;\n baseUrl: string;\n config: JrniConfig;\n}\n\nconst JrniContext = createContext<JrniContextValue | undefined>(undefined);\n\n/**\n * Provider component for JRNI client\n */\nexport function JrniProvider({ children, baseUrl, config }: JrniProviderProps) {\n const client = useMemo(() => {\n return new JrniClient(baseUrl, config);\n }, [baseUrl, config.appId, config.appKey]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return <JrniContext.Provider value={value}>{children}</JrniContext.Provider>;\n}\n\n/**\n * Hook to access JRNI client from context\n */\nexport function useJrniContext() {\n const context = useContext(JrniContext);\n if (context === undefined) {\n throw new Error('useJrniContext must be used within a JrniProvider');\n }\n return context.client;\n}\n","/**\n * Hook to access API clients from context\n */\n\nimport { useApiClientContext } from '../providers/ApiClientProvider';\nimport { useBookingLabContext } from '../providers/BookingLabProvider';\nimport { useJrniContext } from '../providers/JrniProvider';\n\n/**\n * Hook to get BookingLab client from either ApiClientProvider or BookingLabProvider\n */\nexport function useBookingLabClient() {\n // Try to get from standalone provider first\n try {\n return useBookingLabContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.bookingLabClient) {\n throw new Error(\n 'BookingLab client not configured. Wrap your app with ApiClientProvider or BookingLabProvider.'\n );\n }\n return context.bookingLabClient;\n }\n}\n\n/**\n * Hook to get JRNI client from either ApiClientProvider or JrniProvider\n */\nexport function useJrniClient() {\n // Try to get from standalone provider first\n try {\n return useJrniContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.jrniClient) {\n throw new Error(\n 'JRNI client not configured. Wrap your app with ApiClientProvider or JrniProvider.'\n );\n }\n return context.jrniClient;\n }\n}\n","/**\n * React hooks for JRNI API\n */\n\nimport { useMutation, useQuery } from '@tanstack/react-query';\nimport { useJrniClient } from './useApiClient';\nimport { LoginRequest, GetChildCompaniesParams } from '../types';\n\n/**\n * Hook for JRNI login\n */\nexport function useLogin() {\n const client = useJrniClient();\n\n return useMutation({\n mutationFn: async (credentials: LoginRequest) => {\n const response = await client.login(credentials);\n return response.data;\n },\n });\n}\n\n/**\n * Hook for fetching child companies\n * @param companyId - The parent company ID\n * @param params - Optional query parameters\n * @param enabled - Whether the query should run\n */\nexport function useChildCompanies(\n companyId: number,\n params?: GetChildCompaniesParams,\n enabled: boolean = true\n) {\n const client = useJrniClient();\n\n return useQuery({\n queryKey: ['childCompanies', companyId, params],\n queryFn: async () => {\n const response = await client.getChildCompanies(companyId, params);\n return response.data;\n },\n enabled: enabled && !!companyId,\n });\n}\n\n/**\n * Hook for fetching resources\n * @param companyId - The company ID\n * @param enabled - Whether the query should run\n */\nexport function useResources(companyId: number, enabled: boolean = true) {\n const client = useJrniClient();\n\n return useQuery({\n queryKey: ['resources', companyId],\n queryFn: async () => {\n const response = await client.getResources(companyId);\n return response.data;\n },\n enabled: enabled && !!companyId,\n });\n}\n","/**\n * React hooks for BookingLab API\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Booking, CreateBookingRequest, Service } from '../types';\nimport { useBookingLabClient } from './useApiClient';\n\n/**\n * Hook to fetch bookings\n */\nexport function useBookings(userId?: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['bookings', userId],\n queryFn: async () => {\n const response = await client.getBookings(userId);\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single booking\n */\nexport function useBooking(bookingId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['booking', bookingId],\n queryFn: async () => {\n const response = await client.getBooking(bookingId);\n return response.data;\n },\n enabled: !!bookingId,\n });\n}\n\n/**\n * Hook to create a booking\n */\nexport function useCreateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (booking: CreateBookingRequest) => {\n const response = await client.createBooking(booking);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to update a booking\n */\nexport function useUpdateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ id, updates }: { id: string; updates: Partial<Booking> }) => {\n const response = await client.updateBooking(id, updates);\n return response.data;\n },\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n queryClient.invalidateQueries({ queryKey: ['booking', variables.id] });\n },\n });\n}\n\n/**\n * Hook to cancel a booking\n */\nexport function useCancelBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (bookingId: string) => {\n const response = await client.cancelBooking(bookingId);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to fetch services\n */\nexport function useServices() {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['services'],\n queryFn: async () => {\n const response = await client.getServices();\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single service\n */\nexport function useService(serviceId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['service', serviceId],\n queryFn: async () => {\n const response = await client.getService(serviceId);\n return response.data;\n },\n enabled: !!serviceId,\n });\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -210,18 +210,58 @@ var JrniClient = class extends ApiClient {
|
|
|
210
210
|
this.appId = config.appId;
|
|
211
211
|
this.appKey = config.appKey;
|
|
212
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Get default headers for JRNI API requests
|
|
215
|
+
*/
|
|
216
|
+
getDefaultHeaders() {
|
|
217
|
+
return {
|
|
218
|
+
"Content-Type": "application/json",
|
|
219
|
+
"App-Id": this.appId
|
|
220
|
+
};
|
|
221
|
+
}
|
|
213
222
|
/**
|
|
214
223
|
* Login to JRNI
|
|
215
224
|
*/
|
|
216
225
|
async login(credentials) {
|
|
217
226
|
return this.post("/login", credentials, {
|
|
218
227
|
headers: {
|
|
219
|
-
|
|
220
|
-
"App-Id": this.appId,
|
|
228
|
+
...this.getDefaultHeaders(),
|
|
221
229
|
"App-Key": this.appKey
|
|
222
230
|
}
|
|
223
231
|
});
|
|
224
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Get child companies for a parent company
|
|
235
|
+
* @param companyId - The parent company ID
|
|
236
|
+
* @param params - Optional query parameters (person_id, Person_Id)
|
|
237
|
+
*/
|
|
238
|
+
async getChildCompanies(companyId, params) {
|
|
239
|
+
return this.get(
|
|
240
|
+
`/api/v5/company/${companyId}/children`,
|
|
241
|
+
{
|
|
242
|
+
headers: {
|
|
243
|
+
...this.getDefaultHeaders(),
|
|
244
|
+
"App-Key": this.appKey
|
|
245
|
+
},
|
|
246
|
+
params
|
|
247
|
+
}
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get resources for a company
|
|
252
|
+
* @param companyId - The company ID
|
|
253
|
+
*/
|
|
254
|
+
async getResources(companyId) {
|
|
255
|
+
return this.get(
|
|
256
|
+
`/api/v5/${companyId}/resources`,
|
|
257
|
+
{
|
|
258
|
+
headers: {
|
|
259
|
+
...this.getDefaultHeaders(),
|
|
260
|
+
"App-Key": this.appKey
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
}
|
|
225
265
|
/**
|
|
226
266
|
* Update JRNI configuration
|
|
227
267
|
*/
|
|
@@ -356,6 +396,28 @@ function useLogin() {
|
|
|
356
396
|
}
|
|
357
397
|
});
|
|
358
398
|
}
|
|
399
|
+
function useChildCompanies(companyId, params, enabled = true) {
|
|
400
|
+
const client = useJrniClient();
|
|
401
|
+
return useQuery({
|
|
402
|
+
queryKey: ["childCompanies", companyId, params],
|
|
403
|
+
queryFn: async () => {
|
|
404
|
+
const response = await client.getChildCompanies(companyId, params);
|
|
405
|
+
return response.data;
|
|
406
|
+
},
|
|
407
|
+
enabled: enabled && !!companyId
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
function useResources(companyId, enabled = true) {
|
|
411
|
+
const client = useJrniClient();
|
|
412
|
+
return useQuery({
|
|
413
|
+
queryKey: ["resources", companyId],
|
|
414
|
+
queryFn: async () => {
|
|
415
|
+
const response = await client.getResources(companyId);
|
|
416
|
+
return response.data;
|
|
417
|
+
},
|
|
418
|
+
enabled: enabled && !!companyId
|
|
419
|
+
});
|
|
420
|
+
}
|
|
359
421
|
function useBookings(userId) {
|
|
360
422
|
const client = useBookingLabClient();
|
|
361
423
|
return useQuery({
|
|
@@ -439,6 +501,6 @@ function useService(serviceId) {
|
|
|
439
501
|
});
|
|
440
502
|
}
|
|
441
503
|
|
|
442
|
-
export { ApiClient, ApiClientProvider, BookingLabClient, BookingLabProvider, JrniClient, JrniProvider, createBookingLabClient, createJrniClient, useApiClientContext, useBooking, useBookingLabClient, useBookingLabContext, useBookings, useCancelBooking, useCreateBooking, useJrniClient, useJrniContext, useLogin, useService, useServices, useUpdateBooking };
|
|
504
|
+
export { ApiClient, ApiClientProvider, BookingLabClient, BookingLabProvider, JrniClient, JrniProvider, createBookingLabClient, createJrniClient, useApiClientContext, useBooking, useBookingLabClient, useBookingLabContext, useBookings, useCancelBooking, useChildCompanies, useCreateBooking, useJrniClient, useJrniContext, useLogin, useResources, useService, useServices, useUpdateBooking };
|
|
443
505
|
//# sourceMappingURL=index.mjs.map
|
|
444
506
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core.ts","../src/booking-lab.ts","../src/jrni.ts","../src/providers/ApiClientProvider.tsx","../src/providers/BookingLabProvider.tsx","../src/providers/JrniProvider.tsx","../src/hooks/useApiClient.ts","../src/hooks/useJrni.ts","../src/hooks/useBookingLab.ts"],"names":["createContext","useMemo","jsx","useContext","useMutation"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Core API Client\n * Base class for making HTTP requests\n */\n\nimport { ApiClientConfig, RequestOptions, ApiResponse, ApiError } from './types';\n\nexport class ApiClient {\n protected baseUrl: string;\n protected headers: Record<string, string>;\n protected timeout: number;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n this.headers = config.headers || {};\n this.timeout = config.timeout || 30000;\n }\n\n /**\n * Update client configuration\n */\n setConfig(config: Partial<ApiClientConfig>) {\n if (config.baseUrl) this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n if (config.headers) this.headers = { ...this.headers, ...config.headers };\n if (config.timeout) this.timeout = config.timeout;\n }\n\n /**\n * Set authorization token\n */\n setAuthToken(token: string) {\n this.headers['Authorization'] = `Bearer ${token}`;\n }\n\n /**\n * Make an HTTP request\n */\n protected async request<T>(\n endpoint: string,\n options: RequestOptions = {}\n ): Promise<ApiResponse<T>> {\n const { params, ...fetchOptions } = options;\n\n // Build URL with query parameters\n let url = `${this.baseUrl}${endpoint}`;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n // Merge headers\n const headers = {\n 'Content-Type': 'application/json',\n ...this.headers,\n ...((fetchOptions.headers as Record<string, string>) || {}),\n };\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n const data = await response.json();\n\n return {\n data,\n status: response.status,\n headers: response.headers,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n throw this.normalizeError(error as Error);\n }\n }\n\n /**\n * GET request\n */\n protected async get<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'GET' });\n }\n\n /**\n * POST request\n */\n protected async post<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'POST',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * PUT request\n */\n protected async put<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'PUT',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * DELETE request\n */\n protected async delete<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'DELETE' });\n }\n\n /**\n * Handle error responses\n */\n private async handleError(response: Response): Promise<ApiError> {\n let message = `HTTP ${response.status}: ${response.statusText}`;\n let details: any;\n\n try {\n details = await response.json();\n if (details.message) {\n message = details.message;\n } else if (details.error) {\n message = details.error;\n }\n } catch {\n // Response body is not JSON\n }\n\n return {\n message,\n status: response.status,\n details,\n };\n }\n\n /**\n * Normalize errors to consistent format\n */\n private normalizeError(error: Error): ApiError {\n if (error.name === 'AbortError') {\n return {\n message: 'Request timeout',\n code: 'TIMEOUT',\n };\n }\n\n if ('status' in error) {\n return error as ApiError;\n }\n\n return {\n message: error.message || 'Unknown error',\n code: 'UNKNOWN',\n };\n }\n}\n","/**\n * BookingLab API Client\n * Provides methods for interacting with the BookingLab API\n */\n\nimport { ApiClient } from './core';\nimport { Booking, CreateBookingRequest, Service, ApiResponse } from './types';\n\nexport class BookingLabClient extends ApiClient {\n /**\n * Get all bookings\n */\n async getBookings(userId?: string): Promise<ApiResponse<Booking[]>> {\n return this.get<Booking[]>('/bookings', {\n params: userId ? { userId } : undefined,\n });\n }\n\n /**\n * Get a single booking by ID\n */\n async getBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.get<Booking>(`/bookings/${bookingId}`);\n }\n\n /**\n * Create a new booking\n */\n async createBooking(booking: CreateBookingRequest): Promise<ApiResponse<Booking>> {\n return this.post<Booking>('/bookings', booking);\n }\n\n /**\n * Update an existing booking\n */\n async updateBooking(\n bookingId: string,\n updates: Partial<Booking>\n ): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, updates);\n }\n\n /**\n * Cancel a booking\n */\n async cancelBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, { status: 'cancelled' });\n }\n\n /**\n * Delete a booking\n */\n async deleteBooking(bookingId: string): Promise<ApiResponse<void>> {\n return this.delete<void>(`/bookings/${bookingId}`);\n }\n\n /**\n * Get all services\n */\n async getServices(): Promise<ApiResponse<Service[]>> {\n return this.get<Service[]>('/services');\n }\n\n /**\n * Get a single service by ID\n */\n async getService(serviceId: string): Promise<ApiResponse<Service>> {\n return this.get<Service>(`/services/${serviceId}`);\n }\n}\n\n/**\n * Create a new BookingLab client instance\n */\nexport function createBookingLabClient(baseUrl: string, authToken?: string) {\n const client = new BookingLabClient({ baseUrl });\n if (authToken) {\n client.setAuthToken(authToken);\n }\n return client;\n}\n","/**\n * JRNI API Client\n * Provides methods for interacting with the JRNI API\n */\n\nimport { ApiClient } from './core';\nimport { LoginRequest, LoginResponse, ApiResponse, JrniConfig } from './types';\n\nexport class JrniClient extends ApiClient {\n private appId: string;\n private appKey: string;\n\n constructor(baseUrl: string, config: JrniConfig) {\n super({ baseUrl });\n this.appId = config.appId;\n this.appKey = config.appKey;\n }\n\n /**\n * Login to JRNI\n */\n async login(credentials: LoginRequest): Promise<ApiResponse<LoginResponse>> {\n return this.post<LoginResponse>('/login', credentials, {\n headers: {\n 'Content-Type': 'application/json',\n 'App-Id': this.appId,\n 'App-Key': this.appKey,\n },\n });\n }\n\n /**\n * Update JRNI configuration\n */\n setJrniConfig(config: Partial<JrniConfig>) {\n if (config.appId) this.appId = config.appId;\n if (config.appKey) this.appKey = config.appKey;\n }\n}\n\n/**\n * Create a new JRNI client instance\n */\nexport function createJrniClient(baseUrl: string, config: JrniConfig) {\n return new JrniClient(baseUrl, config);\n}\n","/**\n * React Context Provider for API Clients\n * Combined provider for applications using multiple API clients\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { BookingLabClient } from '../booking-lab';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface ApiClientContextValue {\n bookingLabClient: BookingLabClient | null;\n jrniClient: JrniClient | null;\n}\n\ninterface ApiClientProviderProps {\n children: ReactNode;\n bookingLabBaseUrl?: string;\n jrniBaseUrl?: string;\n jrniConfig?: JrniConfig;\n authToken?: string;\n queryClient?: QueryClient;\n}\n\nconst ApiClientContext = createContext<ApiClientContextValue | undefined>(undefined);\n\n// Default QueryClient for the provider\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\n/**\n * Combined provider for multiple API clients\n * Includes QueryClientProvider for React Query hooks\n */\nexport function ApiClientProvider({\n children,\n bookingLabBaseUrl,\n jrniBaseUrl,\n jrniConfig,\n authToken,\n queryClient,\n}: ApiClientProviderProps) {\n const client = queryClient || defaultQueryClient;\n\n const bookingLabClient = useMemo(() => {\n if (!bookingLabBaseUrl) return null;\n const clientInstance = new BookingLabClient({ baseUrl: bookingLabBaseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [bookingLabBaseUrl, authToken]);\n\n const jrniClient = useMemo(() => {\n if (jrniBaseUrl && jrniConfig) {\n return new JrniClient(jrniBaseUrl, jrniConfig);\n }\n return null;\n }, [jrniBaseUrl, jrniConfig?.appId, jrniConfig?.appKey]);\n\n const value = useMemo(\n () => ({\n bookingLabClient,\n jrniClient,\n }),\n [bookingLabClient, jrniClient]\n );\n\n return (\n <QueryClientProvider client={client}>\n <ApiClientContext.Provider value={value}>{children}</ApiClientContext.Provider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Hook to access API client context\n */\nexport function useApiClientContext() {\n const context = useContext(ApiClientContext);\n if (context === undefined) {\n throw new Error('useApiClientContext must be used within an ApiClientProvider');\n }\n return context;\n}\n","/**\n * React Context Provider for BookingLab API Client\n * Standalone provider for apps that only use BookingLab\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { BookingLabClient } from '../booking-lab';\n\ninterface BookingLabContextValue {\n client: BookingLabClient;\n}\n\ninterface BookingLabProviderProps {\n children: ReactNode;\n baseUrl: string;\n authToken?: string;\n}\n\nconst BookingLabContext = createContext<BookingLabContextValue | undefined>(undefined);\n\n/**\n * Provider component for BookingLab client\n */\nexport function BookingLabProvider({\n children,\n baseUrl,\n authToken,\n}: BookingLabProviderProps) {\n const client = useMemo(() => {\n const clientInstance = new BookingLabClient({ baseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [baseUrl, authToken]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <BookingLabContext.Provider value={value}>\n {children}\n </BookingLabContext.Provider>\n );\n}\n\n/**\n * Hook to access BookingLab client from context\n */\nexport function useBookingLabContext() {\n const context = useContext(BookingLabContext);\n if (context === undefined) {\n throw new Error('useBookingLabContext must be used within a BookingLabProvider');\n }\n return context.client;\n}\n","/**\n * React Context Provider for JRNI API Client\n * Standalone provider for apps that only use JRNI\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface JrniContextValue {\n client: JrniClient;\n}\n\ninterface JrniProviderProps {\n children: ReactNode;\n baseUrl: string;\n config: JrniConfig;\n}\n\nconst JrniContext = createContext<JrniContextValue | undefined>(undefined);\n\n/**\n * Provider component for JRNI client\n */\nexport function JrniProvider({ children, baseUrl, config }: JrniProviderProps) {\n const client = useMemo(() => {\n return new JrniClient(baseUrl, config);\n }, [baseUrl, config.appId, config.appKey]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return <JrniContext.Provider value={value}>{children}</JrniContext.Provider>;\n}\n\n/**\n * Hook to access JRNI client from context\n */\nexport function useJrniContext() {\n const context = useContext(JrniContext);\n if (context === undefined) {\n throw new Error('useJrniContext must be used within a JrniProvider');\n }\n return context.client;\n}\n","/**\n * Hook to access API clients from context\n */\n\nimport { useApiClientContext } from '../providers/ApiClientProvider';\nimport { useBookingLabContext } from '../providers/BookingLabProvider';\nimport { useJrniContext } from '../providers/JrniProvider';\n\n/**\n * Hook to get BookingLab client from either ApiClientProvider or BookingLabProvider\n */\nexport function useBookingLabClient() {\n // Try to get from standalone provider first\n try {\n return useBookingLabContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.bookingLabClient) {\n throw new Error(\n 'BookingLab client not configured. Wrap your app with ApiClientProvider or BookingLabProvider.'\n );\n }\n return context.bookingLabClient;\n }\n}\n\n/**\n * Hook to get JRNI client from either ApiClientProvider or JrniProvider\n */\nexport function useJrniClient() {\n // Try to get from standalone provider first\n try {\n return useJrniContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.jrniClient) {\n throw new Error(\n 'JRNI client not configured. Wrap your app with ApiClientProvider or JrniProvider.'\n );\n }\n return context.jrniClient;\n }\n}\n","/**\n * React hooks for JRNI API\n */\n\nimport { useMutation } from '@tanstack/react-query';\nimport { useJrniClient } from './useApiClient';\nimport { LoginRequest, LoginResponse } from '../types';\n\n/**\n * Hook for JRNI login\n */\nexport function useLogin() {\n const client = useJrniClient();\n\n return useMutation({\n mutationFn: async (credentials: LoginRequest) => {\n const response = await client.login(credentials);\n return response.data;\n },\n });\n}\n","/**\n * React hooks for BookingLab API\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Booking, CreateBookingRequest, Service } from '../types';\nimport { useBookingLabClient } from './useApiClient';\n\n/**\n * Hook to fetch bookings\n */\nexport function useBookings(userId?: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['bookings', userId],\n queryFn: async () => {\n const response = await client.getBookings(userId);\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single booking\n */\nexport function useBooking(bookingId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['booking', bookingId],\n queryFn: async () => {\n const response = await client.getBooking(bookingId);\n return response.data;\n },\n enabled: !!bookingId,\n });\n}\n\n/**\n * Hook to create a booking\n */\nexport function useCreateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (booking: CreateBookingRequest) => {\n const response = await client.createBooking(booking);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to update a booking\n */\nexport function useUpdateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ id, updates }: { id: string; updates: Partial<Booking> }) => {\n const response = await client.updateBooking(id, updates);\n return response.data;\n },\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n queryClient.invalidateQueries({ queryKey: ['booking', variables.id] });\n },\n });\n}\n\n/**\n * Hook to cancel a booking\n */\nexport function useCancelBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (bookingId: string) => {\n const response = await client.cancelBooking(bookingId);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to fetch services\n */\nexport function useServices() {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['services'],\n queryFn: async () => {\n const response = await client.getServices();\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single service\n */\nexport function useService(serviceId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['service', serviceId],\n queryFn: async () => {\n const response = await client.getService(serviceId);\n return response.data;\n },\n enabled: !!serviceId,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core.ts","../src/booking-lab.ts","../src/jrni.ts","../src/providers/ApiClientProvider.tsx","../src/providers/BookingLabProvider.tsx","../src/providers/JrniProvider.tsx","../src/hooks/useApiClient.ts","../src/hooks/useJrni.ts","../src/hooks/useBookingLab.ts"],"names":["createContext","useMemo","jsx","useContext","useQuery","useMutation"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Core API Client\n * Base class for making HTTP requests\n */\n\nimport { ApiClientConfig, RequestOptions, ApiResponse, ApiError } from './types';\n\nexport class ApiClient {\n protected baseUrl: string;\n protected headers: Record<string, string>;\n protected timeout: number;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n this.headers = config.headers || {};\n this.timeout = config.timeout || 30000;\n }\n\n /**\n * Update client configuration\n */\n setConfig(config: Partial<ApiClientConfig>) {\n if (config.baseUrl) this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n if (config.headers) this.headers = { ...this.headers, ...config.headers };\n if (config.timeout) this.timeout = config.timeout;\n }\n\n /**\n * Set authorization token\n */\n setAuthToken(token: string) {\n this.headers['Authorization'] = `Bearer ${token}`;\n }\n\n /**\n * Make an HTTP request\n */\n protected async request<T>(\n endpoint: string,\n options: RequestOptions = {}\n ): Promise<ApiResponse<T>> {\n const { params, ...fetchOptions } = options;\n\n // Build URL with query parameters\n let url = `${this.baseUrl}${endpoint}`;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n // Merge headers\n const headers = {\n 'Content-Type': 'application/json',\n ...this.headers,\n ...((fetchOptions.headers as Record<string, string>) || {}),\n };\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n const data = await response.json();\n\n return {\n data,\n status: response.status,\n headers: response.headers,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n throw this.normalizeError(error as Error);\n }\n }\n\n /**\n * GET request\n */\n protected async get<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'GET' });\n }\n\n /**\n * POST request\n */\n protected async post<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'POST',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * PUT request\n */\n protected async put<T>(\n endpoint: string,\n body?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, {\n ...options,\n method: 'PUT',\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n /**\n * DELETE request\n */\n protected async delete<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n return this.request<T>(endpoint, { ...options, method: 'DELETE' });\n }\n\n /**\n * Handle error responses\n */\n private async handleError(response: Response): Promise<ApiError> {\n let message = `HTTP ${response.status}: ${response.statusText}`;\n let details: any;\n\n try {\n details = await response.json();\n if (details.message) {\n message = details.message;\n } else if (details.error) {\n message = details.error;\n }\n } catch {\n // Response body is not JSON\n }\n\n return {\n message,\n status: response.status,\n details,\n };\n }\n\n /**\n * Normalize errors to consistent format\n */\n private normalizeError(error: Error): ApiError {\n if (error.name === 'AbortError') {\n return {\n message: 'Request timeout',\n code: 'TIMEOUT',\n };\n }\n\n if ('status' in error) {\n return error as ApiError;\n }\n\n return {\n message: error.message || 'Unknown error',\n code: 'UNKNOWN',\n };\n }\n}\n","/**\n * BookingLab API Client\n * Provides methods for interacting with the BookingLab API\n */\n\nimport { ApiClient } from './core';\nimport { Booking, CreateBookingRequest, Service, ApiResponse } from './types';\n\nexport class BookingLabClient extends ApiClient {\n /**\n * Get all bookings\n */\n async getBookings(userId?: string): Promise<ApiResponse<Booking[]>> {\n return this.get<Booking[]>('/bookings', {\n params: userId ? { userId } : undefined,\n });\n }\n\n /**\n * Get a single booking by ID\n */\n async getBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.get<Booking>(`/bookings/${bookingId}`);\n }\n\n /**\n * Create a new booking\n */\n async createBooking(booking: CreateBookingRequest): Promise<ApiResponse<Booking>> {\n return this.post<Booking>('/bookings', booking);\n }\n\n /**\n * Update an existing booking\n */\n async updateBooking(\n bookingId: string,\n updates: Partial<Booking>\n ): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, updates);\n }\n\n /**\n * Cancel a booking\n */\n async cancelBooking(bookingId: string): Promise<ApiResponse<Booking>> {\n return this.put<Booking>(`/bookings/${bookingId}`, { status: 'cancelled' });\n }\n\n /**\n * Delete a booking\n */\n async deleteBooking(bookingId: string): Promise<ApiResponse<void>> {\n return this.delete<void>(`/bookings/${bookingId}`);\n }\n\n /**\n * Get all services\n */\n async getServices(): Promise<ApiResponse<Service[]>> {\n return this.get<Service[]>('/services');\n }\n\n /**\n * Get a single service by ID\n */\n async getService(serviceId: string): Promise<ApiResponse<Service>> {\n return this.get<Service>(`/services/${serviceId}`);\n }\n}\n\n/**\n * Create a new BookingLab client instance\n */\nexport function createBookingLabClient(baseUrl: string, authToken?: string) {\n const client = new BookingLabClient({ baseUrl });\n if (authToken) {\n client.setAuthToken(authToken);\n }\n return client;\n}\n","/**\n * JRNI API Client\n * Provides methods for interacting with the JRNI API\n */\n\nimport { ApiClient } from './core';\nimport { \n LoginRequest, \n LoginResponse, \n ApiResponse, \n JrniConfig,\n ChildCompaniesResponse,\n GetChildCompaniesParams,\n ResourcesResponse\n} from './types';\n\nexport class JrniClient extends ApiClient {\n private appId: string;\n private appKey: string;\n\n constructor(baseUrl: string, config: JrniConfig) {\n super({ baseUrl });\n this.appId = config.appId;\n this.appKey = config.appKey;\n }\n\n /**\n * Get default headers for JRNI API requests\n */\n private getDefaultHeaders(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n 'App-Id': this.appId,\n };\n }\n\n /**\n * Login to JRNI\n */\n async login(credentials: LoginRequest): Promise<ApiResponse<LoginResponse>> {\n return this.post<LoginResponse>('/login', credentials, {\n headers: {\n ...this.getDefaultHeaders(),\n 'App-Key': this.appKey,\n },\n });\n }\n\n /**\n * Get child companies for a parent company\n * @param companyId - The parent company ID\n * @param params - Optional query parameters (person_id, Person_Id)\n */\n async getChildCompanies(\n companyId: number,\n params?: GetChildCompaniesParams\n ): Promise<ApiResponse<ChildCompaniesResponse>> {\n return this.get<ChildCompaniesResponse>(\n `/api/v5/company/${companyId}/children`,\n {\n headers: {\n ...this.getDefaultHeaders(),\n 'App-Key': this.appKey,\n },\n params: params as Record<string, string | number | boolean | undefined>,\n }\n );\n }\n\n /**\n * Get resources for a company\n * @param companyId - The company ID\n */\n async getResources(companyId: number): Promise<ApiResponse<ResourcesResponse>> {\n return this.get<ResourcesResponse>(\n `/api/v5/${companyId}/resources`,\n {\n headers: {\n ...this.getDefaultHeaders(),\n 'App-Key': this.appKey,\n },\n }\n );\n }\n\n /**\n * Update JRNI configuration\n */\n setJrniConfig(config: Partial<JrniConfig>) {\n if (config.appId) this.appId = config.appId;\n if (config.appKey) this.appKey = config.appKey;\n }\n}\n\n/**\n * Create a new JRNI client instance\n */\nexport function createJrniClient(baseUrl: string, config: JrniConfig) {\n return new JrniClient(baseUrl, config);\n}\n","/**\n * React Context Provider for API Clients\n * Combined provider for applications using multiple API clients\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { BookingLabClient } from '../booking-lab';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface ApiClientContextValue {\n bookingLabClient: BookingLabClient | null;\n jrniClient: JrniClient | null;\n}\n\ninterface ApiClientProviderProps {\n children: ReactNode;\n bookingLabBaseUrl?: string;\n jrniBaseUrl?: string;\n jrniConfig?: JrniConfig;\n authToken?: string;\n queryClient?: QueryClient;\n}\n\nconst ApiClientContext = createContext<ApiClientContextValue | undefined>(undefined);\n\n// Default QueryClient for the provider\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\n/**\n * Combined provider for multiple API clients\n * Includes QueryClientProvider for React Query hooks\n */\nexport function ApiClientProvider({\n children,\n bookingLabBaseUrl,\n jrniBaseUrl,\n jrniConfig,\n authToken,\n queryClient,\n}: ApiClientProviderProps) {\n const client = queryClient || defaultQueryClient;\n\n const bookingLabClient = useMemo(() => {\n if (!bookingLabBaseUrl) return null;\n const clientInstance = new BookingLabClient({ baseUrl: bookingLabBaseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [bookingLabBaseUrl, authToken]);\n\n const jrniClient = useMemo(() => {\n if (jrniBaseUrl && jrniConfig) {\n return new JrniClient(jrniBaseUrl, jrniConfig);\n }\n return null;\n }, [jrniBaseUrl, jrniConfig?.appId, jrniConfig?.appKey]);\n\n const value = useMemo(\n () => ({\n bookingLabClient,\n jrniClient,\n }),\n [bookingLabClient, jrniClient]\n );\n\n return (\n <QueryClientProvider client={client}>\n <ApiClientContext.Provider value={value}>{children}</ApiClientContext.Provider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Hook to access API client context\n */\nexport function useApiClientContext() {\n const context = useContext(ApiClientContext);\n if (context === undefined) {\n throw new Error('useApiClientContext must be used within an ApiClientProvider');\n }\n return context;\n}\n","/**\n * React Context Provider for BookingLab API Client\n * Standalone provider for apps that only use BookingLab\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { BookingLabClient } from '../booking-lab';\n\ninterface BookingLabContextValue {\n client: BookingLabClient;\n}\n\ninterface BookingLabProviderProps {\n children: ReactNode;\n baseUrl: string;\n authToken?: string;\n}\n\nconst BookingLabContext = createContext<BookingLabContextValue | undefined>(undefined);\n\n/**\n * Provider component for BookingLab client\n */\nexport function BookingLabProvider({\n children,\n baseUrl,\n authToken,\n}: BookingLabProviderProps) {\n const client = useMemo(() => {\n const clientInstance = new BookingLabClient({ baseUrl });\n if (authToken) {\n clientInstance.setAuthToken(authToken);\n }\n return clientInstance;\n }, [baseUrl, authToken]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <BookingLabContext.Provider value={value}>\n {children}\n </BookingLabContext.Provider>\n );\n}\n\n/**\n * Hook to access BookingLab client from context\n */\nexport function useBookingLabContext() {\n const context = useContext(BookingLabContext);\n if (context === undefined) {\n throw new Error('useBookingLabContext must be used within a BookingLabProvider');\n }\n return context.client;\n}\n","/**\n * React Context Provider for JRNI API Client\n * Standalone provider for apps that only use JRNI\n */\n\nimport React, { createContext, useContext, useMemo, ReactNode } from 'react';\nimport { JrniClient } from '../jrni';\nimport { JrniConfig } from '../types';\n\ninterface JrniContextValue {\n client: JrniClient;\n}\n\ninterface JrniProviderProps {\n children: ReactNode;\n baseUrl: string;\n config: JrniConfig;\n}\n\nconst JrniContext = createContext<JrniContextValue | undefined>(undefined);\n\n/**\n * Provider component for JRNI client\n */\nexport function JrniProvider({ children, baseUrl, config }: JrniProviderProps) {\n const client = useMemo(() => {\n return new JrniClient(baseUrl, config);\n }, [baseUrl, config.appId, config.appKey]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return <JrniContext.Provider value={value}>{children}</JrniContext.Provider>;\n}\n\n/**\n * Hook to access JRNI client from context\n */\nexport function useJrniContext() {\n const context = useContext(JrniContext);\n if (context === undefined) {\n throw new Error('useJrniContext must be used within a JrniProvider');\n }\n return context.client;\n}\n","/**\n * Hook to access API clients from context\n */\n\nimport { useApiClientContext } from '../providers/ApiClientProvider';\nimport { useBookingLabContext } from '../providers/BookingLabProvider';\nimport { useJrniContext } from '../providers/JrniProvider';\n\n/**\n * Hook to get BookingLab client from either ApiClientProvider or BookingLabProvider\n */\nexport function useBookingLabClient() {\n // Try to get from standalone provider first\n try {\n return useBookingLabContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.bookingLabClient) {\n throw new Error(\n 'BookingLab client not configured. Wrap your app with ApiClientProvider or BookingLabProvider.'\n );\n }\n return context.bookingLabClient;\n }\n}\n\n/**\n * Hook to get JRNI client from either ApiClientProvider or JrniProvider\n */\nexport function useJrniClient() {\n // Try to get from standalone provider first\n try {\n return useJrniContext();\n } catch {\n // Fall back to combined provider\n const context = useApiClientContext();\n if (!context.jrniClient) {\n throw new Error(\n 'JRNI client not configured. Wrap your app with ApiClientProvider or JrniProvider.'\n );\n }\n return context.jrniClient;\n }\n}\n","/**\n * React hooks for JRNI API\n */\n\nimport { useMutation, useQuery } from '@tanstack/react-query';\nimport { useJrniClient } from './useApiClient';\nimport { LoginRequest, GetChildCompaniesParams } from '../types';\n\n/**\n * Hook for JRNI login\n */\nexport function useLogin() {\n const client = useJrniClient();\n\n return useMutation({\n mutationFn: async (credentials: LoginRequest) => {\n const response = await client.login(credentials);\n return response.data;\n },\n });\n}\n\n/**\n * Hook for fetching child companies\n * @param companyId - The parent company ID\n * @param params - Optional query parameters\n * @param enabled - Whether the query should run\n */\nexport function useChildCompanies(\n companyId: number,\n params?: GetChildCompaniesParams,\n enabled: boolean = true\n) {\n const client = useJrniClient();\n\n return useQuery({\n queryKey: ['childCompanies', companyId, params],\n queryFn: async () => {\n const response = await client.getChildCompanies(companyId, params);\n return response.data;\n },\n enabled: enabled && !!companyId,\n });\n}\n\n/**\n * Hook for fetching resources\n * @param companyId - The company ID\n * @param enabled - Whether the query should run\n */\nexport function useResources(companyId: number, enabled: boolean = true) {\n const client = useJrniClient();\n\n return useQuery({\n queryKey: ['resources', companyId],\n queryFn: async () => {\n const response = await client.getResources(companyId);\n return response.data;\n },\n enabled: enabled && !!companyId,\n });\n}\n","/**\n * React hooks for BookingLab API\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Booking, CreateBookingRequest, Service } from '../types';\nimport { useBookingLabClient } from './useApiClient';\n\n/**\n * Hook to fetch bookings\n */\nexport function useBookings(userId?: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['bookings', userId],\n queryFn: async () => {\n const response = await client.getBookings(userId);\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single booking\n */\nexport function useBooking(bookingId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['booking', bookingId],\n queryFn: async () => {\n const response = await client.getBooking(bookingId);\n return response.data;\n },\n enabled: !!bookingId,\n });\n}\n\n/**\n * Hook to create a booking\n */\nexport function useCreateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (booking: CreateBookingRequest) => {\n const response = await client.createBooking(booking);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to update a booking\n */\nexport function useUpdateBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ id, updates }: { id: string; updates: Partial<Booking> }) => {\n const response = await client.updateBooking(id, updates);\n return response.data;\n },\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n queryClient.invalidateQueries({ queryKey: ['booking', variables.id] });\n },\n });\n}\n\n/**\n * Hook to cancel a booking\n */\nexport function useCancelBooking() {\n const client = useBookingLabClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (bookingId: string) => {\n const response = await client.cancelBooking(bookingId);\n return response.data;\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bookings'] });\n },\n });\n}\n\n/**\n * Hook to fetch services\n */\nexport function useServices() {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['services'],\n queryFn: async () => {\n const response = await client.getServices();\n return response.data;\n },\n });\n}\n\n/**\n * Hook to fetch a single service\n */\nexport function useService(serviceId: string) {\n const client = useBookingLabClient();\n \n return useQuery({\n queryKey: ['service', serviceId],\n queryFn: async () => {\n const response = await client.getService(serviceId);\n return response.data;\n },\n enabled: !!serviceId,\n });\n}\n"]}
|
package/package.json
CHANGED