Files
ts-gateway-send-wa/source/lib-inject.ts
mario cdc0118852 new feat: gateway dipakai bersama dengan send-wa-kwitansi
including:
    - remove batch_size di config-gw-wa.json
    - merge function, bedakan dengan message_type
2025-07-08 18:15:48 +07:00

149 lines
4.4 KiB
TypeScript

import axios from "axios";
import config from "./config/config";
import logging from "./config/logging";
import { NAME_SPACE } from "./server";
type MessageType = "mcu" | "payment";
export const getListOutbox = async (
messageType: MessageType,
statusOutbox: string,
startDate: string,
endDate: string
) => {
const url =
config.base_url + config.messageTypes[messageType].endpoints.listOutbox;
logging.info(
NAME_SPACE,
`\t INFO [${config.messageTypes[messageType].name}]: ${url}`
);
logging.info(NAME_SPACE, "\t INFO Status Outbox: " + statusOutbox);
try {
const resp = await axios.post(
url,
{ statusOutbox, startDate, endDate },
{
headers: { "Content-Type": "application/json; charset=UTF-8" },
responseType: "text",
}
);
return typeof resp.data === "string"
? JSON.parse(resp.data)
: resp.data;
} catch (e) {
handleAxiosError(e, messageType);
}
};
export const sendToQontak = async (messageType: MessageType, param: any) => {
const url =
config.base_url + config.messageTypes[messageType].endpoints.sendMsg;
logging.info(
NAME_SPACE,
`\t INFO [${config.messageTypes[messageType].name}]: ${url}`
);
logging.info(NAME_SPACE, "\t INFO Payload: " + JSON.stringify(param));
try {
const resp = await axios.post(url, param, {
headers: { "Content-Type": "application/json; charset=UTF-8" },
responseType: "text",
});
const statusResp = resp.data.status;
logging.info(
NAME_SPACE,
`\t INFO Resp [${
config.messageTypes[messageType].name
}]: ${JSON.stringify(statusResp)}`
);
if (statusResp != "OK") {
logging.error(
NAME_SPACE,
`\t Error [${
config.messageTypes[messageType].name
}]: ${JSON.stringify(resp.data)}`
);
}
return statusResp;
} catch (e) {
handleAxiosError(e, messageType);
}
};
export const uploadFileCdn = async (messageType: MessageType, param: any) => {
const url =
config.base_url + config.messageTypes[messageType].endpoints.uploadFile;
logging.info(
NAME_SPACE,
`\t INFO [${config.messageTypes[messageType].name}]: ${url}`
);
logging.info(NAME_SPACE, "\t INFO Payload: " + JSON.stringify(param));
try {
const resp = await axios.post(url, param, {
headers: { "Content-Type": "application/json; charset=UTF-8" },
responseType: "text",
});
const statusResp = resp.data.status;
logging.info(
NAME_SPACE,
`\t INFO Resp Upload [${
config.messageTypes[messageType].name
}]: ${JSON.stringify(statusResp)}`
);
return statusResp;
} catch (e) {
handleAxiosError(e, messageType);
}
};
export const changeStatusOutbox = async (
messageType: MessageType,
param: any
) => {
const url =
config.base_url +
config.messageTypes[messageType].endpoints.changeStatus;
logging.info(
NAME_SPACE,
`\t INFO [${config.messageTypes[messageType].name}]: ${url}`
);
logging.info(NAME_SPACE, "\t INFO Payload: " + JSON.stringify(param));
try {
const resp = await axios.post(url, param, {
headers: { "Content-Type": "application/json; charset=UTF-8" },
responseType: "text",
});
const statusResp = resp.data.status;
logging.info(
NAME_SPACE,
`\t INFO Resp Change Status [${
config.messageTypes[messageType].name
}]: ${JSON.stringify(statusResp)}`
);
return statusResp;
} catch (e) {
handleAxiosError(e, messageType);
}
};
function handleAxiosError(e: any, messageType: MessageType) {
if (axios.isAxiosError(e)) {
logging.error(
NAME_SPACE,
`Error [${config.messageTypes[messageType].name}] - Axios Error`
);
logging.error(NAME_SPACE, e.response?.data?.toString());
} else if (e instanceof Error) {
logging.error(
NAME_SPACE,
`Error [${config.messageTypes[messageType].name}] - ${e.message}`
);
}
}