import { IRequestAdapter } from '~/interfaces/adapter' import { IController } from '~/interfaces/controller' import { IRequestHandler } from '~/interfaces/request' import { SubscribeType } from '~/models/subscribe' import { autoBind } from '~/utils/auto-bind' import { HTTPClient } from '../core' declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, ResponseWrapper = unknown, > { subscribe: SubscribeController } } export class SubscribeController implements IController { base = 'subscribe' name = 'subscribe' constructor(protected client: HTTPClient) { autoBind(this) } public get proxy(): IRequestHandler { return this.client.proxy(this.base) } subscribe(email: string, types: SubscribeType[]) { return this.proxy.post({ params: { email, types, }, }) } unsubscribe(email: string, cancelToken: string) { return this.proxy.unsubscribe.get({ params: { email, cancelToken, }, }) } }