wildberries-api
Version:
Typescript API для Wildberries, сгенерированное из Swagger. Без внешних зависимостей.
1,600 lines (1,535 loc) • 116 kB
text/typescript
/* eslint-disable */
/* tslint:disable */
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
export interface ResponseWithReturn {
/** Размер обновлённого бюджета */
total?: number;
}
export interface StatInterval {
/** Запрошенный временной диапазон. */
interval?: {
/**
* Начало запрашиваемого периода
* @format date
*/
begin?: string;
/**
* Конец запрашиваемого периода
* @format date
*/
end?: string;
};
/** Блок статистики */
stats?: StatsBlok1[];
}
export interface StatDate {
/** Даты, за которые необходимо выдать информацию. */
dates?: string[];
/** Блок статистики */
stats?: StatsBlok2[];
}
export interface Stat {
/** Блок статистики */
stats?: StatsBlok1[];
}
export interface StatsBlok1 {
/** ID баннера */
item_id?: number;
/** Название бренда */
item_name?: string;
/** Название категории */
category_name?: string;
/** <dl> <dt>Тип медиакампании:</dt> <dd><code>1</code> - размещение по дням</dd> <dd><code>2</code> - размещение по просмотрам</dd> </dl> */
advert_type?: number;
/** Место на странице */
place?: number;
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** CR(conversion rate) — это отношение количества заказов к общему количеству посещений медиакампании */
cr?: number;
/** CTR (click-through rate) — показатель кликабельности, отношение числа кликов к количеству показов в рамках медиакампании */
ctr?: number;
/**
* Время начала размещения
* @format date-time
*/
date_from?: string;
/**
* Время завершения размещения
* @format date-time
*/
date_to?: string;
/** Родительская категория предмета */
subject_name?: string;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** Количество заказов */
orders?: number;
/** Стоимость размещения */
price?: number;
/** (cost per click) - цена клика по продвигаемому товару */
cpc?: number;
/** Статус медиакампании */
status?: number;
daily_stats?: DailyStats1;
/** Стоимость размещения баннера */
expenses?: number;
/** Отношение количества добавлений в корзину к количеству кликов */
cr1?: number;
/** Отношение количества заказов к количеству добавлений в корзину */
cr2?: number;
}
export type DailyStats1 = {
/**
* Дата
* @format date-time
*/
date?: string;
/** Статистика по платформам */
app_type_stats?: {
/**
* <dl>
* <dt>Тип платформы:</dt>
* <dd><code>1</code> - сайт</dd>
* <dd><code>32</code> - Android</dd>
* <dd><code>64</code> - IOS</dd>
* </dl>
*/
app_type?: number;
stats?: Stats1;
}[];
}[];
export type Stats1 = {
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** CTR (click-through rate) — показатель кликабельности, отношение числа кликов к количеству показов в рамках медиакампании */
ctr?: number;
}[];
export interface StatsBlok2 {
/** ID баннера */
item_id?: number;
/** Название бренда */
item_name?: string;
/** Название категории */
category_name?: string;
/** <dl> <dt>Тип медиакампании:</dt> <dd><code>1</code> - размещение по дням</dd> <dd><code>2</code> - размещение по просмотрам</dd> </dl> */
advert_type?: number;
/** Место на странице */
place?: number;
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** CR(conversion rate) — это отношение количества заказов к общему количеству посещений медиакампании */
cr?: number;
/** CTR (click-through rate) — показатель кликабельности, отношение числа кликов к количеству показов в рамках медиакампании */
ctr?: number;
/**
* Время начала размещения
* @format date-time
*/
date_from?: string;
/**
* Время завершения размещения
* @format date-time
*/
date_to?: string;
/** Родительская категория предмета */
subject_name?: string;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** Количество заказов */
orders?: number;
/** Стоимость размещения */
price?: number;
/** (cost per click) - цена клика по продвигаемому товару */
cpc?: number;
/** Статус медиакампании */
status?: number;
daily_stats?: DailyStats2;
/** Стоимость размещения баннера */
expenses?: number;
/** Отношение количества добавлений в корзину к количеству кликов */
cr1?: number;
/** Отношение количества заказов к количеству добавлений в корзину */
cr2?: number;
}
export type DailyStats2 = {
/**
* Дата
* @format date-time
*/
date?: string;
/** Статистика по платформам */
app_type_stats?: {
/**
* <dl>
* <dt>Тип платформы:</dt>
* <dd><code>1</code> - сайт</dd>
* <dd><code>32</code> - Android</dd>
* <dd><code>64</code> - IOS</dd>
* </dl>
*/
app_type?: number;
stats?: Stats2;
}[];
}[];
export type Stats2 = {
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** Количество заказов */
orders?: number;
/** CR(conversion rate) — отношение количества заказов к общему количеству посещений медиакампании */
cr?: number;
/** CTR (click-through rate) — показатель кликабельности, отношение числа кликов к количеству показов в рамках медиакампании */
ctr?: number;
}[];
/**
* @maxItems 100
* @minItems 1
*/
export type RequestWithDate = {
/** ID кампании */
id?: number;
/** Даты, за которые необходимо выдать информацию. */
dates?: string[];
}[];
/**
* @maxItems 100
* @minItems 1
*/
export type RequestWithCampaignID = {
/** ID кампании */
id?: number;
}[];
/**
* @maxItems 100
* @minItems 1
*/
export type RequestWithInterval = {
/** ID кампании */
id?: number;
/** Временной диапазон, за который необходимо выдать данные. */
interval?: {
/**
* Начало запрашиваемого периода
* @format date
*/
begin?: string;
/**
* Конец запрашиваемого периода
* @format date
*/
end?: string;
};
}[];
/** Статистка по дням */
export type Days = {
/**
* Дата, за которую представлены данные
* @format date-time
*/
date?: string;
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** Показатель кликабельности, отношение числа кликов к количеству показов, % */
ctr?: number;
/** Средняя стоимость клика, ₽. */
cpc?: number;
/** Затраты, ₽. */
sum?: number;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** Количество заказов */
orders?: number;
/** CR(conversion rate) — отношение количества заказов к общему количеству посещений кампании */
cr?: number;
/** Количество заказанных товаров, шт. */
shks?: number;
/** Заказов на сумму, ₽ */
sum_price?: number;
/** Блок информации о платформе */
apps?: {
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** Показатель кликабельности, отношение числа кликов к количеству показов, % */
ctr?: number;
/** Средняя стоимость клика, ₽. */
cpc?: number;
/** Затраты, ₽. */
sum?: number;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** Количество заказов */
orders?: number;
/** CR(conversion rate) — это отношение количества заказов к общему количеству посещений кампании */
cr?: number;
/** Количество заказанных товаров, шт. */
shks?: number;
/** Заказов на сумму, ₽ */
sum_price?: number;
/** Блок статистики по артикулам WB */
nm?: {
/** Количество просмотров */
views?: number;
/** Количество кликов */
clicks?: number;
/** Показатель кликабельности, отношение числа кликов к количеству показов, % */
ctr?: number;
/** Средняя стоимость клика, ₽. */
cpc?: number;
/** Затраты, ₽. */
sum?: number;
/** Количество добавлений товаров в корзину */
atbs?: number;
/** Количество заказов */
orders?: number;
/** CR(conversion rate) — отношение количества заказов к общему количеству посещений кампании */
cr?: number;
/** Количество заказанных товаров, шт. */
shks?: number;
/** Заказов на сумму, ₽ */
sum_price?: number;
/** Название товара */
name?: string;
/** ID артикула WB */
nmId?: number;
}[];
/** Тип платформы (`1` - сайт, `32` - Android, `64` - IOS) */
appType?: number;
}[];
}[];
/** Статистика по средней позиции товара на страницах поисковой выдачи и каталога (для автоматических кампаний). */
export type BoosterStats = {
/**
* Дата, за которую предоставлены данные.
* @format date-time
*/
date?: string;
/** Артикул WB */
nm?: number;
/** Средняя позиция товара на страницах поисковой выдачи и каталога */
avg_position?: number;
}[];
/** Ответ при запросе с interval */
export type ResponseWithInterval = {
/** Запрошенный временной диапазон. */
interval?: {
/**
* Начало запрашиваемого периода
* @format date
*/
begin?: string;
/**
* Конец запрашиваемого периода
* @format date
*/
end?: string;
};
/**
* Количество просмотров. <br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
views?: number;
/**
* Количество кликов.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
clicks?: number;
/**
* Показатель кликабельности.<br>
* Отношение числа кликов к количеству показов. Выражается в процентах.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.<br>
*/
ctr?: number;
/**
* Средняя стоимость клика, ₽.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
cpc?: number;
/**
* Затраты, ₽.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
sum?: number;
/**
* Количество добавлений товаров в корзину.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
atbs?: number;
/**
* Количество заказов.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
orders?: number;
/**
* CR(conversion rate) — это отношение количества заказов к общему количеству посещений кампании.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
cr?: number;
/**
* Количество заказанных товаров, шт.<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
shks?: number;
/**
* Заказов на сумму, ₽<br>
* За все дни запрошенного диапазона, по всем артикулам WB и платформам.
*/
sum_price?: number;
/** Статистка по дням */
days?: Days;
/** Статистика по средней позиции товара на страницах поисковой выдачи и каталога (для автоматических кампаний). */
boosterStats?: BoosterStats;
/** ID кампании */
advertId?: number;
}[];
/** Ответ при запросе с dates */
export type ResponseWithDate = {
/** Даты, за которые необходимо выдать информацию. */
dates?: string[];
/**
* Количество просмотров. <br>
* За все дни, по всем артикулам WB и платформам.
*/
views?: number;
/**
* Количество кликов.<br>
* За все дни, по всем артикулам WB и платформам.
*/
clicks?: number;
/**
* Показатель кликабельности.<br>
* Отношение числа кликов к количеству показов. Выражается в процентах.<br>
* За все дни, по всем артикулам WB и платформам.<br>
*/
ctr?: number;
/**
* Средняя стоимость клика, ₽.<br>
* За все дни, по всем артикулам WB и платформам.
*/
cpc?: number;
/**
* Затраты, ₽.<br>
* За все дни, по всем артикулам WB и платформам.
*/
sum?: number;
/**
* Количество добавлений товаров в корзину.<br>
* За все дни, по всем артикулам WB и платформам.
*/
atbs?: number;
/**
* Количество заказов.<br>
* За все дни, по всем артикулам WB и платформам.
*/
orders?: number;
/**
* CR(conversion rate) — это отношение количества заказов к общему количеству посещений кампании.<br>
* За все дни, по всем артикулам WB и платформам.
*/
cr?: number;
/**
* Количество заказанных товаров, шт.<br>
* За все дни, по всем артикулам WB и платформам.
*/
shks?: number;
/**
* Заказов на сумму, ₽<br>
* За все дни, по всем артикулам WB и платформам.
*/
sum_price?: number;
/** Статистка по дням */
days?: Days;
/** Статистика по средней позиции товара на страницах поисковой выдачи и каталога (для автоматических кампаний). */
boosterStats?: BoosterStats;
/** ID кампании */
advertId?: number;
}[];
export interface ResponseInfoAdvert {
/** Дата завершения кампании */
endTime?: string;
/**
* Время создания кампании
* @example "2022-03-09T10:50:21.831623+03:00"
*/
createTime?: string;
/**
* Время последнего изменения кампании
* @example "2022-12-22T18:24:19.808701+03:00"
*/
changeTime?: string;
/** Дата последнего запуска кампании */
startTime?: string;
/** Название кампании */
name?: string;
/** Параметры кампании */
params?: {
/** Название предметной группы (для кампаний в поиске и рекомендациях) */
subjectName?: string;
/** Флаг активности предметной группы, <code>true</code> - активна, <code>false</code> - неактивна */
active?: boolean;
/** Интервалы часов показа кампании */
intervals?: {
/** Время начала показов */
Begin?: number;
/** Время окончания показов */
End?: number;
}[];
/** Текущая ставка */
price?: number;
/** Идентификатор меню, где размещается кампания (для кампаний в каталоге) */
menuId?: number;
/** Идентификатор предметной группы, для которой создана кампания (для кампаний в поиске и рекомендациях) */
subjectId?: number;
/** Идентификатор сочетания предмета и пола (для кампаний в карточке товара) */
setId?: number;
/** Сочетание предмета и пола (для кампаний в карточке товара) */
setName?: string;
/** Название меню, где размещается кампания (для кампаний в каталоге) */
menuName?: string;
/** Массив номенклатур кампании */
nms?: {
/** Числовой идентификатор номенклатуры Wildberries (<code>nmId</code>) */
nm?: number;
/** Состояние номенклатуры (<code>true</code> - активна или <code>false</code> - неактивна) */
active?: boolean;
}[];
}[];
/** Дневной бюджет, если не установлен, то 0 */
dailyBudget?: number;
/**
* Идентификатор кампании
* @example 1234
*/
advertId?: number;
/**
* <dl>
* <dt>Статус кампании:</dt>
* <dd><code>-1</code> - кампания в процессе удаления </dd>
* <dd><code>4</code> - готова к запуску </dd>
* <dd><code>7</code> - Кампания завершена</dd>
* <dd><code>8</code> - отказался</dd>
* <dd><code>9</code> - идут показы</dd>
* <dd><code>11</code> - Кампания на паузе</dd>
* </dl>
* Кампания в процессе удаления. Статус означает, что кампания была удалена, и через 3-10 минут она исчезнет из ответа метода.
*
* @example 9
*/
status?: number;
/**
* <dl>
* <dt>Тип кампании:</dt>
* <dd><code>4</code> - кампания в каталоге (<strong>устаревший тип</strong>)</dd>
* <dd><code>5</code> - кампания в карточке товара (<strong>устаревший тип</strong>)</dd>
* <dd><code>6</code> - кампания в поиске (<strong>устаревший тип</strong>)</dd>
* <dd><code>7</code> - кампания в рекомендациях на главной странице (<strong>устаревший тип</strong>)</dd>
* </dl>
* @example 4
*/
type?: number;
/**
* Модель оплаты:
* - `cpm` — за показы
* - `cpo` — за заказы
*/
paymentType?: string;
/**
* Активность фиксированных фраз:
* - `false` — не активны
* - `true` — активны
*/
searchPluseState?: boolean;
}
export interface ResponseInfoAdvertType8 {
/**
* Дата завершения кампании
* @format date-time
*/
endTime?: string;
/**
* Дата создания кампании
* @format date-time
*/
createTime?: string;
/**
* Дата последнего изменения кампании
* @format date-time
*/
changeTime?: string;
/**
* Дата последнего запуска кампании
* @format date-time
*/
startTime?: string;
autoParams?: {
/** Продвигаемый предмет */
subject?: {
/** ID предмета */
id?: number;
/** Название предмета */
name?: string;
};
/** Внутренняя (системная) сущность (пол + предмет) */
sets?: {
/** Идентификатор set */
id?: number;
/** Название set */
name?: string;
}[];
menus?: {
/** ID меню */
id?: number;
/** Название меню */
name?: string;
}[];
/** Зоны показов */
active?: {
/** Карточка товара (`false` - отключены, `true` - включены) */
carousel?: boolean;
/** Рекомендации на главной (`false` - отключены, `true` - включены) */
recom?: boolean;
/** Поиск/Каталог (`false` - отключены, `true` - включены) */
booster?: boolean;
};
/** Ставки номенклатур (артикулов WB) */
nmCPM?: {
/** Артикул WB */
nm?: number;
/** Ставка */
cpm?: number;
}[];
/** Артикулы WB */
nms?: number[];
/** Ставка, указанная при создании кампании.<br> Поле актуально только для кампаний, созданных через API. */
cpm?: number;
};
/** Название кампании */
name?: string;
/** Не используется */
dailyBudget?: number;
/** Идентификатор кампании */
advertId?: number;
/**
* <dl> <dt>Статус кампании:</dt> <dd><code>-1</code> - кампания
* в процессе удаления </dd> <dd><code>4</code>
* - готова к запуску </dd> <dd><code>7</code> - Кампания завершена</dd>
* <dd><code>8</code> - отказался</dd> <dd><code>9</code> - идут показы</dd>
* <dd><code>11</code> - Кампания на паузе</dd> </dl> Кампания в процессе
* удаления. Статус означает, что кампания была удалена, и через 3-10 минут
* она исчезнет из ответа метода.
*/
status?: number;
/**
* <dl> <dt>Тип кампании:</dt> <dd><code>8</code> - автоматическая
* кампания </dd> </dl>
*/
type?: number;
/**
* Модель оплаты:
* - `cpm` — за показы
* - `cpo` — за заказы
*/
paymentType?: string;
}
/** @example {"endTime":"2100-01-01T00:00:00+03:00","createTime":"2023-07-09T10:56:02.150362+03:00","changeTime":"2023-07-11T02:48:44.767712+03:00","startTime":"2023-07-10T08:02:31.949155+03:00","searchPluseState":false,"name":"Противовирусные препараты","unitedParams":[{"subject":{"id":3038,"name":"Противовирусные препараты"},"menus":[{"id":-1,"name":""}],"nms":[38995344],"searchCPM":123,"catalogCPM":321}],"dailyBudget":0,"advertId":1234567,"status":11,"type":9,"paymentType":"cpm"} */
export interface ResponseInfoAdvertType9 {
/**
* Дата завершения кампании
* @format date-time
*/
endTime?: string;
/**
* Дата создания кампании
* @format date-time
*/
createTime?: string;
/**
* Дата последнего изменения кампании
* @format date-time
*/
changeTime?: string;
/**
* Дата последнего запуска кампании
* @format date-time
*/
startTime?: string;
/**
* Активность фиксированных фраз:
* - `false` — не активны
* - `true` — активны
*/
searchPluseState?: boolean;
/** Название кампании */
name?: string;
unitedParams?: {
/** Продвигаемый предмет */
subject?: {
/** ID предмета */
id?: number;
/** Название предмета */
name?: string;
};
menus?: {
/** ID меню */
id?: number;
/** Название меню */
name?: string;
}[];
/** Артикулы WB */
nms?: number[];
/** Ставка в Поиске */
searchCPM?: number;
/** Ставка в Каталоге, при наличии */
catalogCPM?: number;
}[];
/** Не используется */
dailyBudget?: number;
/** Идентификатор кампании */
advertId?: number;
/**
* <dl> <dt>Статус кампании:</dt> <dd><code>-1</code> - кампания
* в процессе удаления </dd> <dd><code>4</code>
* - готова к запуску </dd> <dd><code>7</code> - Кампания завершена</dd>
* <dd><code>8</code> - отказался</dd> <dd><code>9</code> - идут показы</dd>
* <dd><code>11</code> - Кампания на паузе</dd> </dl> Кампания в процессе
* удаления. Статус означает, что кампания была удалена, и через 3-10 минут
* она исчезнет из ответа метода.
*/
status?: number;
/**
* Модель оплаты:
* - `cpm` — за показы
* - `cpo` — за заказы
*/
paymentType?: string;
/**
* <dl> <dt>Тип кампании:</dt> <dd><code>9</code> - Аукцион
* </dd> </dl>
*/
type?: number;
}
export interface ResponseAdvError1 {
error?: string;
}
export interface V0KeywordsStatistic {
/** Количество кликов */
clicks: number;
/** CTR (Click-Through Rate) — показатель кликабельности */
ctr: number;
/** Ключевая фраза */
keyword: string;
/** Сумма затрат по ключевой фразе */
sum: number;
/** Количество показов */
views: number;
}
export interface V0KeywordsStatistics {
/**
* Дата
* @format date
*/
date: string;
stats: V0KeywordsStatistic[];
}
export interface V0KeywordsStatisticsResponse {
keywords: V0KeywordsStatistics[];
}
export interface ErrorResponse {
type: string;
message: string;
}
export type QueryParamsType = Record<string | number, any>;
export type ResponseFormat = keyof Omit<Body, "body" | "bodyUsed">;
export interface FullRequestParams extends Omit<RequestInit, "body"> {
/** set parameter to `true` for call `securityWorker` for this request */
secure?: boolean;
/** request path */
path: string;
/** content type of request body */
type?: ContentType;
/** query params */
query?: QueryParamsType;
/** format of response (i.e. response.json() -> format: "json") */
format?: ResponseFormat;
/** request body */
body?: unknown;
/** base url */
baseUrl?: string;
/** request cancellation token */
cancelToken?: CancelToken;
}
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "query" | "path">;
export interface ApiConfig<SecurityDataType = unknown> {
baseUrl?: string;
baseApiParams?: Omit<RequestParams, "baseUrl" | "cancelToken" | "signal">;
securityWorker?: (securityData: SecurityDataType | null) => Promise<RequestParams | void> | RequestParams | void;
customFetch?: typeof fetch;
}
export interface HttpResponse<D extends unknown, E extends unknown = unknown> extends Response {
data: D;
error: E;
}
type CancelToken = Symbol | string | number;
export enum ContentType {
Json = "application/json",
FormData = "multipart/form-data",
UrlEncoded = "application/x-www-form-urlencoded",
Text = "text/plain",
}
export class HttpClient<SecurityDataType = unknown> {
public baseUrl: string = "";
private securityData: SecurityDataType | null = null;
private securityWorker?: ApiConfig<SecurityDataType>["securityWorker"];
private abortControllers = new Map<CancelToken, AbortController>();
private customFetch = (...fetchParams: Parameters<typeof fetch>) => fetch(...fetchParams);
private baseApiParams: RequestParams = {
credentials: "same-origin",
headers: {},
redirect: "follow",
referrerPolicy: "no-referrer",
};
constructor(apiConfig: ApiConfig<SecurityDataType> = {}) {
Object.assign(this, apiConfig);
}
public setSecurityData = (data: SecurityDataType | null) => {
this.securityData = data;
};
protected encodeQueryParam(key: string, value: any) {
const encodedKey = encodeURIComponent(key);
return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`;
}
protected addQueryParam(query: QueryParamsType, key: string) {
return this.encodeQueryParam(key, query[key]);
}
protected addArrayQueryParam(query: QueryParamsType, key: string) {
const value = query[key];
return value.map((v: any) => this.encodeQueryParam(key, v)).join("&");
}
protected toQueryString(rawQuery?: QueryParamsType): string {
const query = rawQuery || {};
const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]);
return keys
.map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key)))
.join("&");
}
protected addQueryParams(rawQuery?: QueryParamsType): string {
const queryString = this.toQueryString(rawQuery);
return queryString ? `?${queryString}` : "";
}
private contentFormatters: Record<ContentType, (input: any) => any> = {
[ContentType.Json]: (input: any) =>
input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input,
[ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input),
[ContentType.FormData]: (input: any) =>
Object.keys(input || {}).reduce((formData, key) => {
const property = input[key];
formData.append(
key,
property instanceof Blob
? property
: typeof property === "object" && property !== null
? JSON.stringify(property)
: `${property}`,
);
return formData;
}, new FormData()),
[ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),
};
protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams {
return {
...this.baseApiParams,
...params1,
...(params2 || {}),
headers: {
...(this.baseApiParams.headers || {}),
...(params1.headers || {}),
...((params2 && params2.headers) || {}),
},
};
}
protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => {
if (this.abortControllers.has(cancelToken)) {
const abortController = this.abortControllers.get(cancelToken);
if (abortController) {
return abortController.signal;
}
return void 0;
}
const abortController = new AbortController();
this.abortControllers.set(cancelToken, abortController);
return abortController.signal;
};
public abortRequest = (cancelToken: CancelToken) => {
const abortController = this.abortControllers.get(cancelToken);
if (abortController) {
abortController.abort();
this.abortControllers.delete(cancelToken);
}
};
public request = async <T = any, E = any>({
body,
secure,
path,
type,
query,
format,
baseUrl,
cancelToken,
...params
}: FullRequestParams): Promise<HttpResponse<T, E>> => {
const secureParams =
((typeof secure === "boolean" ? secure : this.baseApiParams.secure) &&
this.securityWorker &&
(await this.securityWorker(this.securityData))) ||
{};
const requestParams = this.mergeRequestParams(params, secureParams);
const queryString = query && this.toQueryString(query);
const payloadFormatter = this.contentFormatters[type || ContentType.Json];
const responseFormat = format || requestParams.format;
return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, {
...requestParams,
headers: {
...(requestParams.headers || {}),
...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}),
},
signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null,
body: typeof body === "undefined" || body === null ? null : payloadFormatter(body),
}).then(async (response) => {
const r = response.clone() as HttpResponse<T, E>;
r.data = null as unknown as T;
r.error = null as unknown as E;
const data = !responseFormat
? r
: await response[responseFormat]()
.then((data) => {
if (r.ok) {
r.data = data;
} else {
r.error = data;
}
return r;
})
.catch((e) => {
r.error = e;
return r;
});
if (cancelToken) {
this.abortControllers.delete(cancelToken);
}
if (!response.ok) throw data;
return data;
});
};
}
/**
* @title Описание API Продвижение
*
* Синхронизация данных из базы данных происходит раз в 3 минуты. <br>Изменение статуса происходит раз в 1 минуту. Внутри этого интервала будет сохранено последнее действие по изменению статуса. <br>Изменение ставки происходит раз в 30 секунд. Внутри этого интервала будет сохранено последнее действие по изменению ставки.
*/
export class Api<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
adv = {
/**
* @description Создают автоматическую кампанию.<br> Максимум 1 запрос в 20 секунд.
*
* @tags Продвижение
* @name V1SaveAdCreate
* @summary Создать автоматическую кампанию
* @request POST:/adv/v1/save-ad
* @secure
*/
v1SaveAdCreate: (
data: {
/**
* <dl>
* <dt>Тип автоматической кампании:</dt>
* <dd><code>8</code>
* </dl>
* @example 8
*/
type?: number;
/**
* Название кампании (max. 128 символов)
* @example "Парашюты"
*/
name?: string;
/**
* ID предмета, для которого создается кампания.<br>
* Существующие у продавца идентификаторы можно получить методом из раздела "Контент / Просмотр" - "Список НМ", поле ответа - `subjectID`.
* @example 270
*/
subjectId?: number;
/**
* Сумма пополнения
* @example 500
*/
sum?: number;
/**
* <dl>
* <dt>Tип списания.</dt>
* <dd><code>0</code> - Счёт</dd>
* <dd><code>1</code> - Баланс</dd>
* <dd><code>3</code> - Бонусы</dd>
* </dl>
* @example 1
*/
btype?: number;
/**
* <dl>
* <dt>После создания кампания:</dt>
* <dd>
* <dl>
* <dt><code>true</code> - будет на паузе.</dt>
* <dd>Запуск кампании будет доступен через 3 минуты после создания кампании.</dd>
* </dl>
* </dd>
* <dd><code>false</code> - будет сразу запущена</dd>
* </dl>
* @example true
*/
on_pause?: boolean;
/**
* Массив артикулов WB. <br>
* Максимум 100 артикулов.
*/
nms?: number[];
/**
* Ставка. <br>
* Если будет указана ставка меньше допустимого размера, то автоматически установится ставка минимально допустимого размера.
*/
cpm?: number;
},
params: RequestParams = {},
) =>
this.request<
string,
{
error?: string;
} | void
>({
path: `/adv/v1/save-ad`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Создаёт кампанию Аукцион. <br> Максимум 5 запросов в минуту
*
* @tags Продвижение
* @name V2SeacatSaveAdCreate
* @summary Создать кампанию Аукцион
* @request POST:/adv/v2/seacat/save-ad
* @secure
*/
v2SeacatSaveAdCreate: (
data: {
/** Название кампании */
campaignName?: string;
/** Номенклатуры для кампании. Доступные номенклатуры можно получить с помощью метода [Номенклатуры для кампаний](./#tag/Slovari/paths/~1adv~1v2~1supplier~1nms/post). Максимум 50 товаров (`nm`) */
nms?: number[];
},
params: RequestParams = {},
) =>
this.request<number, string | void>({
path: `/adv/v2/seacat/save-ad`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Метод позволяет удалять кампании в статусе <b>4 - готова к запуску</b>. <br> <br> Допускается 5 запросов в секунду.<br> После удаления кампания некоторое время будет находиться в <b>-1</b> статусе.<br> Полное удаление кампании занимает от 3 до 10 минут.
*
* @tags Продвижение
* @name V0DeleteList
* @summary Удаление кампании
* @request GET:/adv/v0/delete
* @secure
*/
v0DeleteList: (
query: {
/** ID кампании */
id: number;
},
params: RequestParams = {},
) =>
this.request<void, ResponseAdvError1 | void>({
path: `/adv/v0/delete`,
method: "GET",
query: query,
secure: true,
...params,
}),
/**
* @description Метод позволяет переименовать кампанию. <br>Допускается 5 запросов в секунду.
*
* @tags Продвижение
* @name V0RenameCreate
* @summary Переименование кампании
* @request POST:/adv/v0/rename
* @secure
*/
v0RenameCreate: (
data: {
/** Идентификатор кампании, у которой меняется название */
advertId: number;
/** Новое название (максимум 100 символов) */
name: string;
},
params: RequestParams = {},
) =>
this.request<void, string | void>({
path: `/adv/v0/rename`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод позволяет получать списки кампаний, сгруппированных по типу и статусу, с информацией о дате последнего изменения кампании. <br> Допускается 5 запросов в секунду.
*
* @tags Продвижение
* @name V1PromotionCountList
* @summary Списки кампаний
* @request GET:/adv/v1/promotion/count
* @secure
*/
v1PromotionCountList: (params: RequestParams = {}) =>
this.request<
{
/** Данные по кампаниям */
adverts?:
| {
/** Тип кампании */
type?: number;
/** Статус кампании */
status?: number;
/** Количество кампаний */
count?: number;
/** Список кампаний */
advert_list?: {
/** ID кампании */
advertId?: number;
/**
* Дата и время последнего изменения кампании
* @format date-time
*/
changeTime?: string;
}[];
}[]
| null;
/** Общее количество кампаний всех статусов и типов */
all?: number;
},
void
>({
path: `/adv/v1/promotion/count`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получать информацию о кампаниях по query параметрам, либо по списку ID кампаний. <br> Допускается 5 запросов в секунду.
*
* @tags Продвижение
* @name V1PromotionAdvertsCreate
* @summary Информация о кампаниях
* @request POST:/adv/v1/promotion/adverts
* @secure
*/
v1PromotionAdvertsCreate: (
data: number[],
query?: {
/**
* <dl>
* <dt>Статус кампании:</dt>
* <dd><code>-1</code> - кампания в процессе удаления </dd>
* <dd><code>4</code> - готова к запуску </dd>
* <dd><code>7</code> - кампания завершена</dd>
* <dd><code>8</code> - отказался</dd>
* <dd><code>9</code> - идут показы</dd>
* <dd><code>11</code> - кампания на паузе</dd>
* </dl>
* Кампания в процессе удаления. Статус означает, что кампания была удалена, и через 3-10 минут она исчезнет из ответа метода.
*/
status?: -1 | 4 | 7 | 8 | 9 | 11;
/**
* <dl>
* <dt>Тип кампании:</dt>
* <dd><code>4</code> - кампания в каталоге (<strong>устаревший тип</strong>)</dd>
* <dd><code>5</code> - кампания в карточке товара (<strong>устаревший тип</strong>)</dd>
* <dd><code>6</code> - кампания в поиске (<strong>устаревший тип</strong>)</dd>
* <dd><code>7</code> - кампания в рекомендациях на главной странице (<strong>устаревший тип</strong>)</dd>
* <dd><code>8</code> - автоматическая кампания </dd>
* <dd><code>9</code> - Аукцион </dd>
* </dl>
*/
type?: 4 | 5 | 6 | 7 | 8 | 9;
/**
* <dl>
* <dt>Порядок:</dt>
* <dd><code>create</code> (по времени создания кампании)</dd>
* <dd><code>change</code> (по времени последнего изменения кампании)</dd>
* <dd><code>id</code> (по идентификатору кампании)</dd>
* </dl>
*/
order?: "create" | "change" | "id";
/**
* <dl>
* <dt>Направление:</dt>
* <dd><code>desc</code> (от большего к меньшему)</dd>
* <dd><code>asc</code> (от меньшего к большему)</dd>
* </dl>
* <br>Например: <code>/adv/v1/promotion/adverts?type=6&order=change&<b>direction=asc</b></code>
*/
direction?: "desc" | "asc";
},
params: RequestParams = {},
) =>
this.request<(ResponseInfoAdvert | ResponseInfoAdvertType8 | ResponseInfoAdvertType9)[], string | void>({
path: `/adv/v1/promotion/adverts`,
method: "POST",
query: query,
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Изменение ставки у кампании.<br> Измененная ставка отобразится в информации о кампании в течение трех минут.<br> Допускается 5 запросов в секунду.<br> <br> `Важно!` Если устанавливаемая ставка имеет размер меньше допустимого, то в ответ Вы получите статус-код 422 (Размер ставки не изменён).<br> Информация об изменении минимального размера ставки публикуется в разделе Новости, на портале продавцов.<br> <br> `Важно!` Принцип заполнения параметров `type`, `instrument`, `param` при изменении ставки для кампании с типом 9 (Аукцион): <br> Для `type` указывается значение 9 (всегда). <br> Для `instrument` указывается значение 6 (<strong>устаревший тип кампании</strong>). <br> Для `param` всегда указывается значение поля <b>id</b> из структуры <b>subject</b> ответа метода "Информация о кампании".
*
* @tags Продвижение
* @name V0CpmCreate
* @summary Изменение ставки у кампании
* @request POST:/adv/v0/cpm
* @secure
*/
v0CpmCreate: (
data: {
/**
* Идентификатор кампании, где меняется ставка
* @example 789
*/
advertId: number;
/**
* <dl>
* <dt>кампании, где меняется ставка:</dt>
* <dd><code>4</code> - кампания в каталоге (<strong>устаревший тип</strong>)</dd>
* <dd><code>5</code> - кампания в карточке товара (<strong>устаревший тип</strong>)</dd>
* <dd><code>6</code> - кампания в поиске (<strong>устаревший тип</strong>)</dd>
* <dd><code>7</code> - кампания в рекомендациях на главной странице (<strong>устаревший тип</strong>)</dd>
* <dd><code>8</code> - автоматическая кампания</dd>
* <dd><code>9</code> - кампания Аукцион </dd>
* </dl>
*/
type: 5 | 6 | 7 | 8 | 9;
/**
* Новое значение ставки
* @example 456
*/
cpm: number;
/**
* Параметр, для которого будет внесено изменение. Является значением `subjectId` (для кампании в поиске и рекомендациях), `setId` (для кампании в карточке товара) или `menuId` (для кампании в каталоге).
* <br> Для автоматической кампании указывать этот параметр не требуется.
* @example 23
*/
param: number;
/**
* тип кампании для изменения ставки в 4 - каталог (<strong>устаревший тип</strong>), 6 - поиск (<strong>устаревший тип</strong>)
* @example 4
*/
instrument?: number;
},
params: RequestParams = {},
) =>
this.request<void, string | void>({
path: `/adv/v0/cpm`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод завершает медиакампанию - переводит её в статус `7`. <br> Допускается максимум 10 запросов в минуту. <dl> <dt>Статусы, в которых для медиакампании доступно завершение:</dt> <dd><code>1</code> - черновик</dd> <dd><code>3</code> - отклонено (с возможностью вернуть на модерацию)</dd> <dd><code>4</code> - одобрено</dd> <dd><code>5</code> - запланировано</dd> <dd><code>6</code> - на показах</dd> <dd><code>8</code> - отказался</dd> <dd><code>9</code> - приостановлена продавцом</dd> <dd><code>10</code> - пауза по дневному лимиту</dd> <dd><code>11</code> - пауза по расходу бюджета</dd> </dl>
*
* @tags Активность медиакампании
* @name V1AdvertStopCreate
* @summary Завершение медиакампании
* @request POST:/adv/v1/advert/stop
* @secure
*/
v1AdvertStopCreate: (
data: {
/** ID медиакампании */
advert_id: number;
/** Описание причины завершения */
reason?: string;
},
params: RequestParams = {},
) =>
this.request<void, string | void>({
path: `/adv/v1/advert/stop`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод позволяет приостанавливать медиакампании. <br> Переводит приостанавливаемую медиакампанию в статус `9`.<br> Допускается максимум 10 запросов в минуту. <br> `Важно:` приостановить медиакампанию можно не больше 10 раз в сутки. Сутки отсчитываются с полуночи по Московскому времени. <br> <dl> <dt>Статусы, в которых для медиакампании доступна приостановка:</dt> <dd><code>4</code> — одобрено</dd> <dd><code>5</code> — запланировано</dd> <dd><code>6</code> — на показах</dd> <dd><code>10</code> — пауза по дневному лимиту</dd> <dd><code>11</code> — пауза по расходу бюджета</dd> </dl>
*
* @tags Активность медиакампании
* @name V1AdvertPauseCreate
* @summary Приостановка медиакампании
* @request POST:/adv/v1/advert/pause
* @secure
*/
v1AdvertPauseCreate: (
data: {
/** ID медиакампании */
advert_id: number;
/** Описание причины приостановки */
reason?: string;
},
params: RequestParams = {},
) =>
this.request<void, void>({
path: `/adv/v1/advert/pause`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод позволяет запускать приостановленные медиакампании. <br> После запуска кампания в течение 2-5 минут будет находиться в статусе `4`, после чего статус будет изменён на актуальный, в зависимости от конфигурации медиакампании. <br> Допускается максимум 10 запросов в минуту. <dl> <dt>Статусы, в которых для медиакампании доступен запуск:</dt> <dd><code>9</code> - приостановлена продавцом</dd> <dd><code>11</code> - пауза по расходу бюджета</dd> </dl>
*
* @tags Активность медиакампании
* @name V1AdvertStartCreate
* @summary Запуск медиакампании
* @request POST:/adv/v1/advert/start
* @secure
*/
v1AdvertStartCreate: (
data: {
/** ID медиакампании */
advert_id: number;
/** Описание причины запуска */
reason?: string;
},
params: RequestParams = {},
) =>
this.request<void, string | void>({
path: `/adv/v1/advert/start`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод позволяет изменять ставку баннера в структуре <b>items</b>. <br> Изменение возможно только для кампаний в одном из статусов: 4, 5, 6, 9, 10, 11. <br> Допускается максимум 10 запросов в минуту.
*
* @tags Ставки медиакампании
* @name V1ItemCpmChangeCreate
* @summary Изменение ставки баннера
* @request POST:/adv/v1/item/cpm/change
* @secure
*/
v1ItemCpmChangeCreate: (
data: {
/** ID медиакампании */
advert_id: number;
/** ID баннера */
item_id: number;
/** Новая ставка */
cpm: string;
},
params: RequestParams = {},
) =>
this.request<void, string | void>({
path: `/adv/v1/item/cpm/change`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод позволяет получить количество медиакампаний продавца
*
* @tags Медиа
* @name V1CountList
* @summary Получение медиакампаний
* @request GET:/adv/v1/count
* @secure
*/
v1CountList: (params: RequestParams = {}) =>
this.request<
{
/** Общее количество медиакампаний всех статусов и типов */
all?: number;
adverts?: {
/**
* <dl>
* <dt>Тип медиакампании:</dt>
* <dd><code>1</code> - размещение по дням</dd>
* <dd><code>2</code> - размещение по просмотрам</dd>
* </dl>
*/
type?: number;
/**
* <dl>
* <dt>Статус медиакампании:</dt>
* <dd><code>1</code> - черновик</dd>
* <dd><code>2</code> - модерация
* <dd><code>3</code> - отклонено (с возможностью вернуть на модерацию)</dd>
* <dd><code>4</code> - одобрено</dd>
* <dd><code>5</code> - запланировано</dd>
* <dd><code>6</code> - на показах</dd>
* <dd><code>7</code> - завершено</dd>
* <dd><code>8</code> - отказался</dd>
* <dd><code>9</code> - приостановлена продавцом</dd>
* <dd><code>10</code> - пауза по дневному лимиту</dd>
* <dd><code>11</code> - пауза по расходу бюджета</dd>
* </dl>
*/
status?: number;
/** Количество медиакампаний */
count?: number;
};
},
void
>({
path: `/adv/v1/count`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить список медиакампаний продавца
*
* @tags Медиа
* @name V1AdvertsList
* @summary Список медиакампаний
* @request GET:/adv/v1/adverts
* @secure
*/
v1AdvertsList: (
query?: {
/**
* <dl>
* <dt>Статус медиакампании:</dt>
* <dd><code>1</code> - черновик</dd>
* <dd><code>2</code> - модерация
* <dd><code>3</code> - отклонено (с возможностью вернуть на модерацию)</dd>
* <dd><code>4</code> - одобрено</dd>
* <dd><code>5</code> - запланировано</dd>
* <dd><code>6</code> - на показах</dd>
* <dd><code>7</code> - завершено</dd>
* <dd><code>8</code> - отказался</dd>
* <dd><code>9</code> - приостановлена продавцом</dd>
* <dd><code>10</code> - пауза по дневному лимиту</dd>
* <dd><code>11</code> - пауза по расходу бюджета</dd>
* </dl>
* @example 1
*/
status?: number;
/**
* <dl>
* <dt>Тип медиакампании:</dt>
* <dd><code>1</code> - размещение по дням</dd>
* <dd><code>2</code> - размещение по просмотрам</dd>
* </dl>
* @example 1
*/
type?: number;
/**
* Количество кампаний в ответе
* @example 1
*/
limit?: number;
/**
* Смещение относительно первой медиакампании
* @example 1
*/
offset?: number;
/**
* <dl>
* <dt>Порядок вывода ответа:</dt>
* <dd><code>create</code> - по времени создания медиакампании</dd>
* <dd><code>id</code> - по идентификатору медиакампании</dd>
* </dl>
* @example "id"
*/
order?: string;
/**
* <dl>
* <dt>Порядок сортировки:</dt>
* <dd><code>desc</code> - от большего к меньшему</dd>
* <dd><code>asc</code> - от меньшего к большему</dd>
* </dl>
* @example "desc"
*/
direction?: string;
},
params: RequestParams = {},
) =>
this.request<
{
/** Идентификатор медиакампании */
advertId?: number;
/** Название медиакампании */
name?: string;
/** Название бренда */
brand?: string;
/**
* <dl>
* <dt>Тип медиакампании:</dt>
* <dd><code>1</code> - размещение по дням</dd>
* <dd><code>2</code> - размещение по просмотрам</dd>
* </dl>
*/
type?: number;
/**
* <dl>
* <dt>Статус медиакампании:</dt>
* <dd><code>1</code> - черновик</dd>
* <dd><code>2</code> - модерация
* <dd><code>3</code> - отклонено (с возможностью вернуть на модерацию)</dd>
* <dd><code>4</code> - одобрено</dd>
* <dd><code>5</code> - запланировано</dd>
* <dd><code>6</code> - на показах</dd>
* <dd><code>7</code>