@ingestkorea/client-sens
Version:
INGESTKOREA SDK Naver Cloud Platform SENS Client for Node.js.
81 lines (80 loc) • 3.14 kB
JavaScript
import { SensCommand } from "../models";
import { serializeIngestkorea_restJson_SendSMSCommand, deserializeIngestkorea_restJson_SendSMSCommand, } from "../protocols/SendSMS";
import { IngestkoreaError } from "@ingestkorea/util-error-handler";
import { SMS_MAX, LMS_MAX, trimText, prettyPhoneNum, getContentLength } from "./constants";
export class SendSMSCommand extends SensCommand {
constructor(input) {
super(input);
const { content, messageType: defaultMessageType } = resolveInputContent(input.content);
const { messages, messageType: childMessageType } = resolveInputMessages(input.messages);
this.input = {
...input,
from: prettyPhoneNum(input.from),
content: content,
type: defaultMessageType === childMessageType ? defaultMessageType : "LMS",
messages: messages,
};
}
async serialize(input, config) {
if (!config.serviceId.sms)
throw new IngestkoreaError({
code: 400,
type: "Bad Request",
message: "Invalid Params",
description: "Please Check SMS ServiceId",
});
let request = await serializeIngestkorea_restJson_SendSMSCommand(input, config);
return request;
}
async deserialize(response) {
let output = await deserializeIngestkorea_restJson_SendSMSCommand(response);
return output;
}
}
const getMessageType = (input) => {
const contentLength = getContentLength(input);
if (!contentLength)
throw new IngestkoreaError({
code: 400,
type: "Bad Request",
message: "Invalid Request",
description: `Please check input message`,
});
if (contentLength > LMS_MAX)
throw new IngestkoreaError({
code: 400,
type: "Bad Request",
message: "Invalid Request",
description: `Maximum message length is ${LMS_MAX}bytes`,
});
return contentLength > SMS_MAX ? "LMS" : "SMS";
};
const resolveInputContent = (content) => {
const resolvedContent = trimText(content);
const messageType = getMessageType(resolvedContent);
return {
content: resolvedContent,
messageType: messageType,
};
};
const resolveInputMessages = (messages) => {
let init = {
messages: [],
messageType: "SMS",
};
const output = messages.reduce((acc, message) => {
const to = prettyPhoneNum(message.to);
const content = message.content != undefined ? trimText(message.content) : undefined;
const subject = message.subject != undefined ? trimText(message.subject) : undefined;
const messageType = content != undefined ? getMessageType(content) : "SMS";
if (messageType == "LMS")
acc.messageType = messageType;
acc.messages.push({
to: to,
...(content != undefined && { content: content }),
...(subject != undefined && acc.messageType === "LMS" && { subject: subject }),
});
return acc;
}, init);
return output;
};