cdek
Version:
CDEK API client
347 lines (346 loc) • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cdek = void 0;
const eventemitter_ts_1 = require("./core/eventemitter.js");
const restclient_ts_1 = require("./core/restclient.js");
class Cdek extends eventemitter_ts_1.EventEmitter {
rest;
constructor(options) {
super();
this.rest = new restclient_ts_1.RestClient(options);
}
/**
* Обработчик входящих вебхуков.
* Парсит запрос, определяет тип события и вызывает соответствующий event listener.
*/
webhookHandler() {
return async (request) => {
const data = await request.json();
switch (data.type) {
case "ORDER_STATUS":
this.emit("ORDER_STATUS", data);
break;
case "PRINT_FORM":
this.emit("PRINT_FORM", data);
break;
case "PREALERT_CLOSED":
this.emit("PREALERT_CLOSED", data);
break;
case "ACCOMPANYING_WAYBILL":
this.emit("ACCOMPANYING_WAYBILL", data);
break;
case "DELIV_AGREEMENT":
this.emit("DELIV_AGREEMENT", data);
break;
case "DELIV_PROBLEM":
this.emit("DELIV_PROBLEM", data);
break;
case "OFFICE_AVAILABILITY":
this.emit("OFFICE_AVAILABILITY", data);
break;
case "ORDER_MODIFIED":
this.emit("ORDER_MODIFIED", data);
break;
}
return new Response("OK");
};
}
// --- LOCATION ---
/** Получение списка регионов */
getRegions(params) {
return this.rest.get({
url: "/location/regions",
query: params,
});
}
/** Получение списка населенных пунктов */
getCities(params) {
return this.rest.get({
url: "/location/cities",
query: params,
});
}
/** Получение локации по координатам */
getCityByCoordinates(latitude, longitude) {
return this.rest.get({
url: "/location/coordinates",
query: { latitude, longitude },
});
}
// --- WEBHOOKS ---
/** Добавление подписки на вебхуки */
addWebhook(params) {
return this.rest.post({
url: "/webhooks",
payload: params,
});
}
/** Получение информации о подписке по UUID */
getWebhookByUUID(uuid) {
return this.rest.get({
url: `/webhooks/${uuid}`,
});
}
/** Получение списка всех подписок */
getWebhooks() {
return this.rest.get({
url: "/webhooks",
});
}
/** Удаление подписки на вебхуки */
deleteWebhookByUUID(uuid) {
return this.rest.delete({
url: `/webhooks/${uuid}`,
});
}
// --- ORDERS ---
/** Регистрация заказа */
addOrder(params) {
return this.rest.post({
url: "/orders",
payload: params,
});
}
/** Получение информации о заказе по UUID */
getOrderByUUID(uuid) {
return this.rest.get({
url: `/orders/${uuid}`,
});
}
/** Получение информации о заказе по номеру СДЭК */
getOrderByCdekNumber(cdek_number) {
return this.rest.get({
url: "/orders",
query: { cdek_number: cdek_number },
});
}
/** Получение информации о заказе по номеру ИМ */
getOrderByImNumber(im_number) {
return this.rest.get({
url: "/orders",
query: { im_number: im_number },
});
}
/** Изменение заказа */
updateOrder(params) {
return this.rest.patch({
url: "/orders",
payload: params,
});
}
/** Удаление заказа */
deleteOrderByUUID(uuid) {
return this.rest.delete({
url: `/orders/${uuid}`,
});
}
/** Регистрация отказа */
addRefusal(order_uuid) {
return this.rest.post({
url: `/orders/${order_uuid}/refusal`,
});
}
/** Регистрация клиентского возврата */
createClientReturn(params) {
return this.rest.post({
url: `orders/${params.order_uuid}/clientReturn`,
payload: { tariff_code: params.tariff_code },
});
}
// --- INTAKES (Couriers) ---
/** Регистрация заявки на вызов курьера */
addCourier(params) {
return this.rest.post({
url: "/intakes",
payload: params,
});
}
/** Получение информации о заявке на вызов курьера */
getCourierDetails(uuid) {
return this.rest.get({
url: `/intakes/${uuid}`,
});
}
/** Удаление заявки на вызов курьера */
deleteCourier(uuid) {
return this.rest.delete({
url: `/intakes/${uuid}`,
});
}
/** Получение всех заявок по заказу */
getIntakes(orderUuid) {
return this.rest.get({
url: `/orders/${orderUuid}/intakes`,
});
}
// --- PRINT ---
/** Формирование квитанции к заказу */
createOrderReceipt(params) {
return this.rest.post({
url: "/print/orders",
payload: params,
});
}
/** Получение квитанции к заказу */
getOrderReceipt(uuid) {
return this.rest.get({
url: `/print/orders/${uuid}`,
});
}
/** Скачивание квитанции по UUID */
downloadOrderReceiptByUUID(uuid) {
return this.rest.download(`/print/orders/${uuid}.pdf`);
}
/** Скачивание квитанции по URL */
downloadOrderReceiptByURL(url) {
return this.rest.download(url, false);
}
/** Формирование ШК места */
createBarcodeCP(params) {
return this.rest.post({
url: "/print/barcodes",
payload: params,
});
}
/** Получение ШК места */
getBarcodeCP(uuid) {
return this.rest.get({
url: `/print/barcodes/${uuid}`,
});
}
/** Скачивание ШК места по UUID */
downloadBarcodeCPByUUID(uuid) {
return this.rest.download(`/print/barcodes/${uuid}.pdf`);
}
/** Скачивание ШК места по URL */
downloadBarcodeCPByURL(url) {
return this.rest.download(url, false);
}
// --- DELIVERY (Appointment) ---
/** Регистрация договоренности о доставке */
addDeliveryAppointment(params) {
return this.rest.post({
url: "/delivery",
payload: params,
});
}
/** Получение информации о договоренности о доставке */
getDeliveryAppointment(uuid) {
return this.rest.get({
url: `/delivery/${uuid}`,
});
}
/** Получение интервалов доставки (для существующего заказа) */
getDeliveryIntervals(params) {
return this.rest.get({
url: "/delivery/intervals",
query: params,
});
}
// --- PREALERT ---
/** Регистрация преалерта */
addPrealert(params) {
return this.rest.post({
url: "/prealert",
payload: params,
});
}
/** Получение информации о преалерте */
getPrealert(uuid) {
return this.rest.get({
url: `/prealert/${uuid}`,
});
}
// --- INFO (Passport, Check, Registry) ---
/** Получение паспортных данных */
getPassportData(params) {
return this.rest.get({
url: "/passport",
query: params,
});
}
/** Получение информации о чеке */
getCashboxCheck(params) {
return this.rest.get({
url: "/check",
query: params,
});
}
/** Получение реестра наложенных платежей */
getCashOnDeliveryRegistry(params) {
return this.rest.get({
url: "/registries",
query: params,
});
}
/** Получение информации о переводе наложенного платежа */
getCashOnDeliveryTransfer(params) {
return this.rest.get({
url: "/payment",
query: params,
});
}
/** Получение списка ПВЗ */
getPickupPoints(params) {
return this.rest.get({
url: "/deliverypoints",
query: params,
});
}
// --- CALCULATOR ---
/** Расчет по коду тарифа */
calculatorByTariff(params) {
return this.rest.post({
url: "/calculator/tariff",
payload: params,
});
}
/** Расчет по доступным тарифам */
calculatorByAvaibleTariffs(params) {
return this.rest.post({
url: "/calculator/tarifflist",
payload: params,
});
}
/** Получение списка всех доступных тарифов по договору */
availableTariffs(lang) {
return this.rest.get({
url: "/calculator/alltariffs",
query: lang ? { lang } : undefined,
});
}
/** Таможенный калькулятор (расчет пошлин) */
calculatorCustoms(params) {
return this.rest.post({
url: "/calculator/customs",
payload: params,
});
}
// --- REVERSE ---
/** Проверка доступности реверса */
checkReverseAvailability(params) {
return this.rest.post({
url: "/reverse/availability",
payload: params,
});
}
// --- OTHER ---
/** Получение заказов с готовыми фото */
getFinishedOrders(params) {
return this.rest.post({
url: "/photoDocument",
payload: params,
});
}
/** Принудительное обновление токена */
refreshToken() {
return this.rest.auth();
}
get token() {
return this.rest.token?.access_token;
}
get tokenExpire() {
return this.rest.token_expire;
}
}
exports.Cdek = Cdek;