import axios from "axios"; import { apiBaseUrl, convertToNetworkError, extractResponseData, } from "./common"; import { HttpTimelineInfo, processRawTimelineInfo, RawHttpTimelineInfo, } from "./timeline"; export interface HttpHighlightMoveRequest { timeline: string; newPosition: number; } export interface IHttpBookmarkClient { list(token: string): Promise; put(timeline: string, token: string): Promise; delete(timeline: string, token: string): Promise; move(req: HttpHighlightMoveRequest, token: string): Promise; } export class HttpHighlightClient implements IHttpBookmarkClient { list(token: string): Promise { return axios .get(`${apiBaseUrl}/bookmarks?token=${token}`) .then(extractResponseData) .then((list) => list.map(processRawTimelineInfo)) .catch(convertToNetworkError); } put(timeline: string, token: string): Promise { return axios .put(`${apiBaseUrl}/bookmarks/${timeline}?token=${token}`) .catch(convertToNetworkError) .then(); } delete(timeline: string, token: string): Promise { return axios .delete(`${apiBaseUrl}/bookmarks/${timeline}?token=${token}`) .catch(convertToNetworkError) .then(); } move(req: HttpHighlightMoveRequest, token: string): Promise { return axios .post(`${apiBaseUrl}/bookmarkop/move?token=${token}`, req) .catch(convertToNetworkError) .then(); } } let client: IHttpBookmarkClient = new HttpHighlightClient(); export function getHttpBookmarkClient(): IHttpBookmarkClient { return client; } export function setHttpBookmarkClient( newClient: IHttpBookmarkClient ): IHttpBookmarkClient { const old = client; client = newClient; return old; }