Initial commit
This commit is contained in:
81
src/services/serviceService.ts
Normal file
81
src/services/serviceService.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { fetchWrapper } from '@KTXC/utils/helpers/fetch-wrapper';
|
||||
import type {
|
||||
Service,
|
||||
ConnectionTestRequest,
|
||||
ConnectionTestResponse,
|
||||
CollectionsResponse,
|
||||
DiscoverResponse
|
||||
} from '@/models/service';
|
||||
|
||||
const BASE_PATH = '/m/provider_jmapc';
|
||||
|
||||
export const serviceService = {
|
||||
/**
|
||||
* List all JMAP services for current user
|
||||
*/
|
||||
async list(capability?: string): Promise<{ services: Service[] }> {
|
||||
const params = capability ? `?capability=${encodeURIComponent(capability)}` : '';
|
||||
return fetchWrapper.get(`${BASE_PATH}/services${params}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* Get a single service by ID
|
||||
*/
|
||||
async fetch(id: string): Promise<Service> {
|
||||
return fetchWrapper.get(`${BASE_PATH}/services/${id}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a new service
|
||||
*/
|
||||
async create(service: Partial<Service>): Promise<Service> {
|
||||
return fetchWrapper.post(`${BASE_PATH}/services`, service);
|
||||
},
|
||||
|
||||
/**
|
||||
* Update an existing service
|
||||
*/
|
||||
async update(id: string, service: Partial<Service>): Promise<Service> {
|
||||
return fetchWrapper.put(`${BASE_PATH}/services/${id}`, service);
|
||||
},
|
||||
|
||||
/**
|
||||
* Delete a service
|
||||
*/
|
||||
async destroy(id: string): Promise<{ success: boolean }> {
|
||||
return fetchWrapper.delete(`${BASE_PATH}/services/${id}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* Test JMAP connection
|
||||
*/
|
||||
async test(request: ConnectionTestRequest): Promise<ConnectionTestResponse> {
|
||||
return fetchWrapper.post(`${BASE_PATH}/services/test`, request);
|
||||
},
|
||||
|
||||
/**
|
||||
* Auto-discover JMAP endpoint from hostname
|
||||
*/
|
||||
async discover(hostname: string, protocol?: string, port?: number, path?: string): Promise<DiscoverResponse> {
|
||||
return fetchWrapper.post(`${BASE_PATH}/services/discover`, {
|
||||
hostname,
|
||||
protocol,
|
||||
port,
|
||||
path
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Fetch collections for a service
|
||||
*/
|
||||
async fetchCollections(id: string): Promise<CollectionsResponse> {
|
||||
return fetchWrapper.get(`${BASE_PATH}/services/${id}/collections`);
|
||||
},
|
||||
|
||||
/**
|
||||
* Refresh collections for a service (re-query remote server)
|
||||
*/
|
||||
async refreshCollections(id: string): Promise<CollectionsResponse> {
|
||||
return fetchWrapper.post(`${BASE_PATH}/services/${id}/collections/refresh`, {});
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user