UNPKG

@ingestkorea/client-sens

Version:

INGESTKOREA SDK Naver Cloud Platform SENS Client for Node.js.

81 lines (80 loc) 3.14 kB
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; };