82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
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`, {});
|
|
},
|
|
};
|