jsm-sdk
Version:
Sdk for JSM project
118 lines (112 loc) • 3.56 kB
TypeScript
import {
AxiosHeaderValue,
AxiosRequestConfig,
AxiosResponse,
AxiosInstance,
} from "axios";
declare global {
namespace Jsm {
namespace Sdk {
type TRequestConfig = {
token?: string;
app?: string;
company?: string;
office?: string;
store?: string;
} & (
| {
serviceName: string;
serviceToken: string;
}
| {
serviceName?: never;
serviceToken?: never;
}
) & {
throw_not_found_error?: boolean;
};
type TResponseDatum<
T extends {
data?: object | Array<object>;
} & Jsm.Core.Utils.Api.Response.DefaultResponse &
Jsm.Core.Utils.Api.Response.PagedResponse
> = Jsm.Core.Utils.NonUndefined<T["data"]> extends Array<any>
? {
data: Jsm.Core.Utils.NonUndefined<T["data"]>;
edge: Jsm.Core.Utils.NonUndefined<T["edge"]>;
pagination?: Jsm.Core.Utils.NonUndefined<
Jsm.Core.Utils.Api.Response.PagedResponse["pagination"]
>;
hasMore?: Jsm.Core.Utils.Api.Response.PagedResponse["hasMore"]
}
: {
data: Jsm.Core.Utils.NonUndefined<T["data"]>;
edge: Jsm.Core.Utils.NonUndefined<T["edge"]>;
};
type IResponse = {
data?: any;
edge?: any;
error?: Jsm.Core.Utils.Api.Response.Error;
} & Jsm.Core.Utils.Api.Response.PagedResponse;
interface IHttpClient {
get axios(): AxiosInstance;
request<T extends IResponse, D = any>(
config: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
get<T extends IResponse, D = any>(
path: string,
query?: object,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
delete<T extends Sdk.IResponse, D = any>(
path: string,
query?: object,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
head<T extends Sdk.IResponse>(
path: string,
query: object
): Promise<Sdk.TResponseDatum<T>>;
options<T extends Sdk.IResponse>(
path: string,
query: object
): Promise<Sdk.TResponseDatum<T>>;
post<T extends Sdk.IResponse, D = any>(
path: string,
data?: D,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
put<T extends Sdk.IResponse, D = any>(
path: string,
data?: D,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
patch<T extends Sdk.IResponse, D = any>(
path: string,
data?: D,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
postForm<T extends Sdk.IResponse, D = any>(
path: string,
data?: D,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
putForm<T extends Sdk.IResponse, D = any>(
path: string,
data?: D,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
patchForm<T extends Sdk.IResponse, D = any>(
path: string,
data?: D,
config?: AxiosRequestConfig<D>
): Promise<Sdk.TResponseDatum<T>>;
}
}
}
}
type TResponseDatum<T extends { data?: object | Array<object> }> = {
data: T["data"];
edge: T["edge"];
pagination: T["data"] extends Array ? boolean : never;
};