UNPKG

routexpress-bd

Version:

A TypeScript/JavaScript library for integrating Steadfast Pathao REDX delivery services

395 lines (394 loc) 13.4 kB
import { Steadfast } from "./controllers/steadfast/index.js"; // updated import { Pathao } from "./controllers/pathao/index.js"; // updated import { Redx } from "./controllers/redx/index.js"; // updated class RouteXpress { constructor(config) { if (!config) { throw new Error("Configuration is required"); } this.config = config; // Initialize services only if their configs are provided if (config.steadfast) { this.steadfast = new Steadfast(config.steadfast); } if (config.pathao) { this.pathao = new Pathao(config.pathao); } if (config.redx) { this.redx = new Redx(config.redx, config.redx.environment); } // Ensure at least one service is configured if (!this.steadfast && !this.pathao && !this.redx) { throw new Error("At least one delivery service provider must be configured"); } } // Helper methods to safely access services getSteadfast() { if (!this.steadfast) { throw new Error("Steadfast service is not configured"); } return this.steadfast; } getPathao() { if (!this.pathao) { throw new Error("Pathao service is not configured"); } return this.pathao; } getRedx() { if (!this.redx) { throw new Error("Redx service is not configured"); } return this.redx; } async createOrder(provider, orderData) { try { if (!orderData || !provider) { throw new Error("Order data and provider are required"); } const normalizedProvider = provider.toLowerCase(); if (normalizedProvider === "steadfast") { const steadfastOrder = orderData; if (!steadfastOrder?.order_details) { throw new Error("Order details are required for Steadfast orders"); } return await this.getSteadfast().createOrder(steadfastOrder); } if (normalizedProvider === "pathao") { const pathaoOrder = orderData; if (!pathaoOrder.authToken) { throw new Error("Auth token is required for Pathao orders"); } return await this.getPathao().createOrder(pathaoOrder.authToken, pathaoOrder); } if (normalizedProvider === "redx") { const redxOrder = orderData; if (!redxOrder) { throw new Error("Order data is required for Redx orders"); } return await this.getRedx().createOrder(redxOrder); } throw new Error(`Unsupported provider: ${provider}`); } catch (error) { if (error instanceof Error) { throw new Error(`Order creation failed: ${error.message}`); } throw new Error("An unknown error occurred while creating the order"); } } async createBulkOrder(provider, allOrder) { try { if (!allOrder || !provider) { throw new Error("Bulk order and provider are required"); } const normalizedProvider = provider.toLowerCase(); if (normalizedProvider === "steadfast") { const steadfastOrder = allOrder; if (!steadfastOrder?.orders) { throw new Error("Orders are required for Steadfast bulk orders"); } return await this.getSteadfast().createBulkOrder(steadfastOrder); } if (normalizedProvider === "pathao") { const pathaoOrder = allOrder; if (!pathaoOrder?.orders || !pathaoOrder.authToken) { throw new Error("Orders and auth token are required for Pathao bulk orders"); } return await this.getPathao().createBulkOrder(pathaoOrder); } throw new Error(`Unsupported provider: ${provider}`); } catch (error) { if (error instanceof Error) { throw new Error(`Bulk order creation failed: ${error.message}`); } throw new Error("An unknown error occurred during bulk order creation"); } } async getOrderStatus(orderData) { try { if (!orderData || !orderData.provider) { throw new Error("Order data and provider are required"); } if (!orderData.data || !orderData.data.consignment_id) { throw new Error("Tracking code is required"); } switch (orderData.provider.toLowerCase()) { case "steadfast": const result = await this.getSteadfast().getStatusByCid(orderData.data.consignment_id); return result; case "pathao": if (!orderData.data.authToken) { throw new Error("Auth token is required for Pathao orders"); } const auth_token = orderData.data.authToken; const pathaoResult = await this.getPathao().getStatusByCid({ cid: orderData.data.consignment_id, authToken: auth_token, }); return pathaoResult; default: throw new Error(`Invalid provider specified: ${orderData.provider}`); } } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async statusByInvoice(invoice) { try { if (!invoice) { throw new Error("Invoice is required to get order status"); } return await this.getSteadfast().getStatusByInvoice(invoice); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async statusBytrackingcode(trackingcode) { try { if (!trackingcode) { throw new Error("Tracking code is required to get order status"); } return await this.getSteadfast().statusBytrackingcode(trackingcode); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getSteadFastBalance() { try { return await this.getSteadfast().getBalance(); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } //add pathao methods here async createPathaoToken() { try { return await this.getPathao().createNewToken(); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async createPathaoRefreshToken(refreshToken) { try { return await this.getPathao().createRefresshToken(refreshToken); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async createPathaoStore(authToken, storeData) { try { return await this.getPathao().createStore(authToken, storeData); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getPathaoCity(authToken) { try { return await this.getPathao().getCitys(authToken); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getPathaoZone(authToken, cityId) { try { return await this.getPathao().getZone(authToken, cityId); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getPathaoArea(authToken, zoneId) { try { return await this.getPathao().get_area_list(authToken, zoneId); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async price_plane(authToken, orderData) { try { return await this.getPathao().price_plane(authToken, orderData); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getAllPathaoStore(authToken) { try { return await this.getPathao().getAllStore(authToken); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async createRedXStore(storeData) { try { return await this.getRedx().createStore(storeData); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async trackParcelByTrackingCode(trackingcode) { try { if (!trackingcode) { throw new Error("Tracking code is required to get parcel info"); } return await this.getRedx().trackParcelByTrackingCode(trackingcode); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getParcelInfoByTrackingCode(trackingcode) { try { if (!trackingcode) { throw new Error("Tracking code is required to get parcel info"); } return await this.getRedx().getParcelInfoByTrackingCode(trackingcode); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async updateParcel(trackingcode, data) { try { return await this.getRedx().updateParcel(trackingcode, data); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getRedXAreaList() { try { return await this.getRedx().getAreaList(); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getResXAreabyPostcode(postcode) { try { return await this.getRedx().getAreaByPostcode(postcode); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getRedXAreaBYDistrict_name(district_name) { try { return await this.getRedx().getAreaByDistrictName(district_name); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getRedXStores() { try { return await this.getRedx().getStores(); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async getPickupStoreInfo(storeId) { try { return await this.getRedx().getPickupStoreInfo(storeId); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred"); } } async calculateRedXPrice(orderData) { try { if (!orderData.delivery_area_id || !orderData.pickup_area_id || !orderData.cash_collection_amount || !orderData.weight) { throw new Error("All fields (delivery_area_id, pickup_area_id, cash_collection_amount, weight) are required"); } return await this.getRedx().calculatePrice(orderData); } catch (error) { if (error instanceof Error) { throw error; } throw new Error("An unknown error occurred while calculating the price"); } } } export default RouteXpress; export { RouteXpress };