UNPKG

solapi

Version:

SOLAPI SDK for Node.js(Server Side Only)

6 lines 28.1 kB
import {Data,Schema,pipe,Effect,Exit,Array as Array$1,Cause,Match,Schedule}from'effect';import {createHmac,randomBytes}from'crypto';import {formatISO,parseISO}from'date-fns';import*as E from'effect/Effect';import {promises}from'fs';import {URL}from'url';var N=class extends Data.TaggedError("InvalidDateError"){toString(){return `InvalidDateError: ${this.message}${this.originalValue?` (value: ${this.originalValue})`:""}`}},L=class extends Data.TaggedError("ApiKeyError"){toString(){return `ApiKeyError: ${this.message}`}},v=class extends Data.TaggedError("DefaultError"){toString(){return `${this.errorCode}: ${this.errorMessage}`}},q=class extends Data.TaggedError("MessageNotReceivedError"){get message(){return `${this.totalCount}\uAC1C\uC758 \uBA54\uC2DC\uC9C0\uAC00 \uC811\uC218\uB418\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uC5D0\uB7EC \uBA54\uC2DC\uC9C0\uB294 \uD574\uB2F9 \uC5D0\uB7EC \uB0B4 failedMessageList\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.`}toString(){return `MessageNotReceivedError: ${this.message} Failed messages: ${this.failedMessageList.length}`}},G=class extends Data.TaggedError("BadRequestError"){toString(){return `BadRequestError: ${this.message}${this.validationErrors?` Validation errors: ${this.validationErrors.join(", ")}`:""}`}},B=class extends Data.TaggedError("NetworkError"){toString(){return `NetworkError: ${this.method} ${this.url} \uC694\uCCAD \uC2E4\uD328 - ${this.cause}`}},$=class extends Data.TaggedError("ApiError"){toString(){return `${this.errorCode}: ${this.errorMessage}`}};function tt(t,e){let a=randomBytes(e),s="";for(let r=0;r<e;r++)s+=t[a[r]%t.length];return s}function ye(t,e=0){let{apiKey:a,apiSecret:s}=t;switch(e){case 0:default:let r=tt("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",32),l=formatISO(new Date),i=l+r;if(!a||!s||a===""||s==="")throw new L({message:"Invalid API Key Error"});let h=createHmac("sha256",s);h.update(i);let y=h.digest("hex");return `HMAC-SHA256 apiKey=${a}, date=${l}, salt=${r}, signature=${y}`}}var at=Schema.Struct({buttonName:Schema.String,buttonType:Schema.Literal("WL"),linkMo:Schema.String,linkPc:Schema.optional(Schema.String)}),ot=Schema.Struct({buttonName:Schema.String,buttonType:Schema.Literal("AL"),linkAnd:Schema.String,linkIos:Schema.String}),st=Schema.Struct({buttonName:Schema.String,buttonType:Schema.Literal("BK","MD","DS","BC","BT","AC")}),ee=Schema.Union(at,ot,st);var _=class extends Data.TaggedError("VariableValidationError"){toString(){return `\uBCC0\uC218\uBA85 ${this.invalidVariables.map(a=>`\`${a}\``).join(", ")}\uC5D0 \uC810(.)\uC744 \uD3EC\uD568\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC5B8\uB354\uC2A4\uCF54\uC5B4(_)\uB098 \uB2E4\uB978 \uBB38\uC790\uB97C \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694.`}},nt=Schema.Struct({targeting:Schema.Literal("I","M","N")}),Ee=/^#\{.+}$/,it=/\./,lt=t=>Ee.test(t)?t.slice(2,-1):t,pt=t=>Ee.test(t)?t:`#{${t}}`,ct=t=>pipe(Object.keys(t),Array$1.map(lt),Array$1.filter(e=>it.test(e)),e=>e.length>0?Effect.fail(new _({invalidVariables:e})):Effect.succeed(t)),mt=t=>pipe(ct(t),Effect.map(e=>pipe(Object.entries(e),Array$1.map(([a,s])=>[pt(a),s]),a=>Object.fromEntries(a)))),Ce=Schema.Struct({pfId:Schema.String,templateId:Schema.optional(Schema.String),variables:Schema.optional(Schema.Record({key:Schema.String,value:Schema.String}).pipe(Schema.transform(Schema.Record({key:Schema.String,value:Schema.String}),{decode:t=>Ie(mt(t)),encode:t=>t}))),disableSms:Schema.optional(Schema.Boolean),adFlag:Schema.optional(Schema.Boolean),imageId:Schema.optional(Schema.String),buttons:Schema.optional(Schema.Array(ee)),bms:Schema.optional(nt)});var xe=t=>t instanceof N||t instanceof L||t instanceof v||t instanceof q||t instanceof G||t instanceof B||t instanceof $||t instanceof _?t.toString():t instanceof Error?`${t.name}: ${t.message}`:String(t),De=t=>{let e=Cause.failureOption(t);return e._tag==="Some"?xe(e.value):"Unknown error occurred"},te=class{constructor(e,a=1){this.message=e;this.exitCode=a;}_tag="ApplicationFailure";toString(){return this.message}[Symbol.for("nodejs.util.inspect.custom")](){return this.message}},qe=t=>new te(t),ve=false,Be=()=>{ve||(process.on("uncaughtException",t=>{t instanceof te?(console.error(t.message),process.exit(t.exitCode)):(console.error(t),process.exit(1));}),ve=true);},Ie=t=>{Be();let e=Effect.runSyncExit(t);return Exit.match(e,{onFailure:a=>{let s=De(a);throw qe(s)},onSuccess:a=>a})},Pe=t=>(Be(),Effect.runPromiseExit(t).then(Exit.match({onFailure:e=>{let a=De(e),s=qe(a);return Promise.reject(s)},onSuccess:e=>Promise.resolve(e)}))),we=t=>{if(t instanceof q){let s=new Error(t.message);return s.name="MessageNotReceivedError",Object.defineProperty(s,"failedMessageList",{value:t.failedMessageList,writable:false,enumerable:true,configurable:false}),Object.defineProperty(s,"totalCount",{value:t.totalCount,writable:false,enumerable:true,configurable:false}),delete s.stack,s}let e=xe(t),a=new Error(e);return a.name="FromSolapiError",delete a.stack,a};var Q=class extends Data.TaggedError("RetryableError"){},gt=t=>Effect.tryPromise({try:async()=>{let e=await t.text();return e?JSON.parse(e):{}},catch:e=>new v({errorCode:"ParseError",errorMessage:e.message,context:{responseStatus:t.status,responseUrl:t.url}})}),ht=t=>pipe(Effect.tryPromise({try:()=>t.json(),catch:e=>new v({errorCode:"ParseError",errorMessage:e.message,context:{responseStatus:t.status,responseUrl:t.url}})}),Effect.flatMap(e=>Effect.fail(new $({errorCode:e.errorCode,errorMessage:e.errorMessage,httpStatus:t.status,url:t.url})))),yt=t=>pipe(Effect.tryPromise({try:()=>t.text(),catch:e=>new v({errorCode:"ResponseReadError",errorMessage:e.message,context:{responseStatus:t.status,responseUrl:t.url}})}),Effect.flatMap(e=>Effect.fail(new v({errorCode:"UnknownError",errorMessage:e,context:{responseStatus:t.status,responseUrl:t.url}}))));async function Te(t,e,a){let s=ye(t),r=pipe(Effect.tryPromise({try:()=>fetch(e.url,{headers:{Authorization:s,"Content-Type":"application/json"},body:a?JSON.stringify(a):void 0,method:e.method}),catch:y=>{if(y instanceof Error){let k=y.cause,he=k&&typeof k=="object"&&"code"in k?String(k.code):"",w=(y.message+" "+he).toLowerCase();return w.includes("aborted")||w.includes("refused")||w.includes("reset")||w.includes("econn")?new Q({error:y}):new B({url:e.url,method:e.method,cause:y.message,isRetryable:false})}return new B({url:e.url,method:e.method,cause:String(y),isRetryable:false})}}),Effect.flatMap(y=>pipe(Match.value(y),Match.when(k=>k.status===503,()=>Effect.fail(new Q({error:"Service Unavailable"}))),Match.when(k=>k.status>=400&&k.status<500,ht),Match.when(k=>!k.ok,yt),Match.orElse(gt)))),l=3,i=pipe(Schedule.recurs(l),Schedule.whileInput(y=>y instanceof Q)),h=pipe(r,Effect.retry(i),Effect.catchTag("RetryableError",()=>Effect.fail(new v({errorCode:"RequestFailedAfterRetryError",errorMessage:`Request failed after retry(count: ${l})`,context:{url:e.url,method:e.method,retryCount:l}}))));return Pe(h)}var S=class{baseUrl="https://api.solapi.com";authInfo;constructor(e,a){this.authInfo={apiKey:e,apiSecret:a};}async request(e){let{httpMethod:a,url:s,body:r}=e,l={method:a,url:`${this.baseUrl}/${s}`};return Te(this.authInfo,l,r)}};var V=class extends S{constructor(e,a){super(e,a);}async getBalance(){return this.request({httpMethod:"GET",url:"cash/v1/balance"})}};function R(t,e={}){if(!t||typeof t!="object")return "";if(Object.keys(t).length===0)return e.addQueryPrefix?"?":"";let a=(l,i)=>Array.isArray(i)?e.indices===false?i.map(h=>`${encodeURIComponent(l)}=${encodeURIComponent(String(h))}`):i.map((h,y)=>`${encodeURIComponent(l)}[${y}]=${encodeURIComponent(String(h))}`):i!=null?[`${encodeURIComponent(l)}=${encodeURIComponent(String(i))}`]:[],s=[];for(let[l,i]of Object.entries(t))s.push(...a(l,i));let r=s.join("&");return r?e.addQueryPrefix===false?r:`?${r}`:""}function g(t){return formatISO(D(t))}function D(t){if(typeof t=="string"){t=parseISO(t);let e="Invalid Date";if(t.toString()===e)throw new N({message:e,originalValue:typeof t=="string"?t:void 0})}return t}var ae=class{type="DENIAL";senderNumber;startKey;limit;dateCreated;constructor(e){this.type="DENIAL",this.senderNumber=e.senderNumber,this.startKey=e.startKey,this.limit=e.limit,e.startDate!=null&&(this.dateCreated=Object.assign(this.dateCreated??{},{gte:g(e.startDate)})),e.endDate!=null&&(this.dateCreated=Object.assign(this.dateCreated??{},{lte:g(e.endDate)}));}};var oe=class{blockGroupId;useAll;senderNumber;name;status;startKey;limit;constructor(e){this.blockGroupId=e.blockGroupId,this.useAll=e.useAll,this.senderNumber=e.senderNumber,e.name!=null&&(typeof e.name=="string"?this.name={like:e.name}:this.name=e.name),this.status=e.status,this.startKey=e.startKey,this.limit=e.limit;}};var se=class{blockNumberId;phoneNumber;blockGroupId;memo;startKey;limit;constructor(e){this.blockNumberId=e.blockNumberId,this.phoneNumber=e.phoneNumber,this.blockGroupId=e.blockGroupId,e.memo!=null&&(typeof e.memo=="string"?this.memo={like:e.memo}:this.memo=e.memo),this.startKey=e.startKey,this.limit=e.limit;}};var z=class extends S{constructor(e,a){super(e,a);}async getBlacks(e){let a={type:"DENIAL"};e&&(a=new ae(e));let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`iam/v1/black${s}`})}async getBlockGroups(e){let a={};e&&(a=new oe(e));let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`iam/v1/block/groups${s}`})}async getBlockNumbers(e){let a={};e&&(a=new se(e));let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`iam/v1/block/numbers${s}`})}};Schema.Struct({code:Schema.String,name:Schema.String});Schema.Struct({channelId:Schema.String,searchId:Schema.String,accountId:Schema.String,phoneNumber:Schema.String,sharedAccountIds:Schema.Array(Schema.String),dateCreated:Schema.optional(Schema.Union(Schema.String,Schema.Date)),dateUpdated:Schema.optional(Schema.Union(Schema.String,Schema.Date))});var j=class{channelId;searchId;accountId;phoneNumber;sharedAccountIds;dateCreated;dateUpdated;constructor(e){this.channelId=e.channelId,this.searchId=e.searchId,this.accountId=e.accountId,this.phoneNumber=e.phoneNumber,this.sharedAccountIds=e.sharedAccountIds,e.dateCreated!=null&&(this.dateCreated=D(e.dateCreated)),e.dateUpdated!=null&&(this.dateUpdated=D(e.dateUpdated));}};var re=class{channelId;searchId;phoneNumber;categoryCode;startKey;limit;isMine;dateCreated;constructor(e){this.channelId=e.channelId,this.searchId=e.searchId,this.phoneNumber=e.phoneNumber,this.categoryCode=e.categoryCode,this.startKey=e.startKey,this.limit=e.limit,this.isMine=e.isMine,e.startDate!=null&&(this.dateCreated=Object.assign(this.dateCreated??{},{gte:g(e.startDate)})),e.endDate!=null&&(this.dateCreated=Object.assign(this.dateCreated??{},{lte:g(e.endDate)}));}};var H=class extends S{constructor(e,a){super(e,a);}async getKakaoChannelCategories(){return this.request({httpMethod:"GET",url:"kakao/v2/channels/categories"})}async getKakaoChannels(e){let a={};e&&(a=new re(e));let s=R(a,{indices:false,addQueryPrefix:true}),r=await this.request({httpMethod:"GET",url:`kakao/v2/channels${s}`}),l=new Array;for(let i of r.channelList)l.push(new j(i));return {limit:r.limit,nextKey:r.nextKey,startKey:r.startKey,channelList:l}}async getKakaoChannel(e){let a=await this.request({httpMethod:"GET",url:`kakao/v2/channels/${e}`});return new j(a)}async requestKakaoChannelToken(e){return this.request({httpMethod:"POST",url:"kakao/v2/channels/token",body:e})}async createKakaoChannel(e){return this.request({httpMethod:"POST",url:"kakao/v2/channels",body:e})}async removeKakaoChannel(e){return this.request({httpMethod:"DELETE",url:`kakao/v2/channels/${e}`})}};var St=Schema.Struct({name:Schema.String,linkType:Schema.Literal("WL"),linkMo:Schema.String,linkPc:Schema.optional(Schema.String)}),Tt=Schema.Struct({name:Schema.String,linkType:Schema.Literal("AL"),linkAnd:Schema.String,linkIos:Schema.String}),Rt=Schema.Struct({name:Schema.String,linkType:Schema.Literal("BK","BT","BC")}),Ne=Schema.Union(St,Tt,Rt);var At=Schema.Literal("BA","EX","AD","MI"),Mt=Schema.Literal("NONE","TEXT","IMAGE","ITEM_LIST"),bt=Schema.Literal("CHANNEL","GROUP"),Et=Schema.Literal("PENDING","INSPECTING","APPROVED","REJECTED"),Ct=Schema.Struct({isAdmin:Schema.Boolean,memberId:Schema.String,content:Schema.NullOr(Schema.String),dateCreated:Schema.String}),It=Schema.Struct({title:Schema.optional(Schema.NullOr(Schema.String)),description:Schema.optional(Schema.NullOr(Schema.String)),imageId:Schema.optional(Schema.NullOr(Schema.String))}),vt=Schema.Struct({list:Schema.Array(Schema.Struct({title:Schema.String,description:Schema.String})),summary:Schema.Struct({title:Schema.optional(Schema.NullOr(Schema.String)),description:Schema.optional(Schema.NullOr(Schema.String))})}),Le=Schema.Struct({name:Schema.String,channelId:Schema.optional(Schema.NullOr(Schema.String)),channelGroupId:Schema.optional(Schema.NullOr(Schema.String)),content:Schema.optional(Schema.String),isHidden:Schema.optional(Schema.Boolean),messageType:At,emphasizeType:Mt,extra:Schema.optional(Schema.NullOr(Schema.String)),ad:Schema.optional(Schema.NullOr(Schema.String)),emphasizeTitle:Schema.optional(Schema.NullOr(Schema.String)),emphasizeSubtitle:Schema.optional(Schema.NullOr(Schema.String)),securityFlag:Schema.Boolean,imageId:Schema.optional(Schema.NullOr(Schema.String)),assignType:Schema.optional(bt),buttons:Schema.optional(Schema.Array(ee)),comments:Schema.optional(Schema.Array(Ct)),commentable:Schema.optional(Schema.Boolean),quickReplies:Schema.optional(Schema.Array(Ne)),header:Schema.optional(Schema.NullOr(Schema.String)),highlight:Schema.optional(Schema.NullOr(It)),item:Schema.optional(Schema.NullOr(vt)),templateId:Schema.String,code:Schema.optional(Schema.String),status:Et,variables:Schema.optional(Schema.Array(Schema.Struct({name:Schema.String}))),dateCreated:Schema.optional(Schema.Union(Schema.DateFromString,Schema.Date,Schema.DateFromSelf)),dateUpdated:Schema.optional(Schema.Union(Schema.DateFromString,Schema.Date,Schema.DateFromSelf))}),x=class{name;channelId;channelGroupId;content;isHidden;messageType;emphasizeType;extra;ad;emphasizeTitle;emphasizeSubtitle;securityFlag;imageId;assignType;buttons;quickReplies;header;highlight;item;templateId;commentable;comments;code;status;dateCreated;dateUpdated;constructor(e){this.channelId=e.channelId,this.channelGroupId=e.channelGroupId,this.name=e.name,this.content=e.content,this.ad=e.ad,this.assignType=e.assignType,this.buttons=e.buttons,this.templateId=e.templateId,this.header=e.header,this.item=e.item,this.highlight=e.highlight,this.securityFlag=e.securityFlag,this.isHidden=e.isHidden,this.messageType=e.messageType,this.emphasizeType=e.emphasizeType,this.extra=e.extra,this.emphasizeTitle=e.emphasizeTitle,this.emphasizeSubtitle=e.emphasizeSubtitle,this.imageId=e.imageId,this.quickReplies=e.quickReplies,this.comments=e.comments,this.commentable=e.commentable,this.code=e.code,this.status=e.status,"dateCreated"in e&&(this.dateCreated=D(e.dateCreated)),"dateUpdated"in e&&(this.dateUpdated=D(e.dateUpdated));}};var ne=class{channelId;isHidden;limit;name;startKey;status;templateId;dateCreated;constructor(e){this.channelId=e.channelId,this.isHidden=e.isHidden,e.name!=null&&(typeof e.name=="string"?this.name={like:e.name}:typeof e.name=="object"&&(this.name=e.name)),this.startKey=e.startKey,this.status=e.status,this.limit=e.limit,e.startDate!=null&&(this.dateCreated=Object.assign(this.dateCreated??{},{gte:g(e.startDate)})),e.endDate!=null&&(this.dateCreated=Object.assign(this.dateCreated??{},{lte:g(e.endDate)}));}};var X=class extends S{constructor(e,a){super(e,a);}async getKakaoAlimtalkTemplateCategories(){return this.request({httpMethod:"GET",url:"kakao/v2/templates/categories"})}async createKakaoAlimtalkTemplate(e){let a=await this.request({httpMethod:"POST",url:"kakao/v2/templates",body:e});return new x(a)}async getKakaoAlimtalkTemplates(e){let a={};e&&(a=new ne(e));let s=R(a,{indices:false,addQueryPrefix:true}),r=await this.request({httpMethod:"GET",url:`kakao/v2/templates${s}`}),l=y=>Schema.decodeUnknown(Le)(y),h=await pipe(Effect.all(r.templateList.map(l)),Effect.runPromise);return {limit:r.limit,nextKey:r.nextKey,startKey:r.startKey,templateList:h}}async getKakaoAlimtalkTemplate(e){let a=await this.request({httpMethod:"GET",url:`kakao/v2/templates/${e}`});return new x(a)}async cancelInspectionKakaoAlimtalkTemplate(e){let a=await this.request({httpMethod:"PUT",url:`kakao/v2/templates/${e}/inspection/cancel`});return new x(a)}async updateKakaoAlimtalkTemplate(e,a){let s=await this.request({httpMethod:"PUT",url:`kakao/v2/templates/${e}`,body:a});return new x(s)}async updateKakaoAlimtalkTemplateName(e,a){let s=await this.request({httpMethod:"PUT",url:`kakao/v2/templates/${e}/name`,body:{name:a}});return new x(s)}async removeKakaoAlimtalkTemplate(e){let a=await this.request({httpMethod:"DELETE",url:`kakao/v2/templates/${e}`});return new x(a)}};var Ue=Schema.Struct({voiceType:Schema.Literal("FEMALE","MALE"),headerMessage:Schema.optional(Schema.String),tailMessage:Schema.optional(Schema.String),replyRange:Schema.optional(Schema.Literal(1,2,3,4,5,6,7,8,9)),counselorNumber:Schema.optional(Schema.String)});var xt=Schema.Struct({buttonName:Schema.String,buttonType:Schema.String,linkMo:Schema.optional(Schema.String),linkPc:Schema.optional(Schema.String),linkAnd:Schema.optional(Schema.String),linkIos:Schema.optional(Schema.String)}),Fe=Schema.Struct({talkId:Schema.String,templateId:Schema.String,disableSms:Schema.optional(Schema.Boolean),variables:Schema.optional(Schema.Record({key:Schema.String,value:Schema.String})),buttons:Schema.optional(Schema.Array(xt))});Schema.Literal("WL","ML","MQ","MR","CA","CL","DL","MS");var Dt=Schema.Struct({buttonName:Schema.String,buttonType:Schema.Literal("WL"),link:Schema.String}),qt=Schema.Struct({buttonName:Schema.String,buttonType:Schema.Literal("ML"),latitude:Schema.String,longitude:Schema.String}),Bt=Schema.Struct({buttonName:Schema.String,buttonType:Schema.Literal("MQ","MR","CA","CL","DL","MS"),link:Schema.String}),Re=Schema.Union(Dt,qt,Bt);var Pt=Schema.Struct({title:Schema.String,description:Schema.String,imaggeId:Schema.optional(Schema.String),buttons:Schema.optional(Schema.Array(Re))}),wt=Schema.Struct({brandId:Schema.String,templateId:Schema.optional(Schema.String),copyAllowed:Schema.optional(Schema.Boolean),variables:Schema.optional(Schema.Record({key:Schema.String,value:Schema.String})),mmsType:Schema.optional(Schema.Literal("M3","S3","M4","S4","M5","S5","M6","S6")),commercialType:Schema.optional(Schema.Boolean),disableSms:Schema.optional(Schema.Boolean),additionalBody:Schema.optional(Pt),buttons:Schema.optional(Schema.Array(Re))}),_e=wt;var Ot=Schema.Literal("SMS","LMS","MMS","ATA","CTA","CTI","NSA","RCS_SMS","RCS_LMS","RCS_MMS","RCS_TPL","RCS_ITPL","RCS_LTPL","FAX","VOICE","BMS_TEXT","BMS_IMAGE","BMS_WIDE","BMS_WIDE_ITEM_LIST","BMS_CAROUSEL_FEED","BMS_PREMIUM_VIDEO","BMS_COMMERCE","BMS_CAROUSEL_COMMERCE"),We=Schema.Struct({to:Schema.Union(Schema.String,Schema.Array(Schema.String)),from:Schema.optional(Schema.String),text:Schema.optional(Schema.String),imageId:Schema.optional(Schema.String),type:Schema.optional(Ot),subject:Schema.optional(Schema.String),autoTypeDetect:Schema.optional(Schema.Boolean),kakaoOptions:Schema.optional(Ce),rcsOptions:Schema.optional(_e),country:Schema.optional(Schema.String),replacements:Schema.optional(Schema.Array(Schema.Struct({}))),customFields:Schema.optional(Schema.Record({key:Schema.String,value:Schema.String})),naverOptions:Schema.optional(Fe),faxOptions:Schema.optional(Schema.Struct({fileIds:Schema.Array(Schema.String)})),voiceOptions:Schema.optional(Ue)});var ie=`${process.platform} | ${process.version}`,le="nodejs/5.5.1",pe=Schema.Struct({sdkVersion:Schema.optional(Schema.String).pipe(Schema.withDecodingDefault(()=>le),Schema.withConstructorDefault(()=>le)),osPlatform:Schema.optional(Schema.String).pipe(Schema.withDecodingDefault(()=>ie),Schema.withConstructorDefault(()=>ie)),appId:Schema.optional(Schema.String)}),Qe=Schema.Struct({scheduledDate:Schema.optional(Schema.Union(Schema.DateFromSelf,Schema.DateFromString).pipe(Schema.transform(Schema.String,{decode:t=>g(t),encode:t=>new Date(t)}))),allowDuplicates:Schema.optional(Schema.Boolean),appId:Schema.optional(Schema.String),showMessageList:Schema.optional(Schema.Boolean)});Schema.Struct({allowDuplicates:Schema.optional(Schema.Boolean),agent:Schema.optional(pe)});var Ae=Schema.String.pipe(Schema.transform(Schema.String,{decode:t=>t.replace(/-/g,""),encode:t=>t})),ze=t=>Schema.Array(t).pipe(Schema.filter(e=>e.length>0,{message:()=>"\uB370\uC774\uD130\uAC00 \uBC18\uB4DC\uC2DC 1\uAC74 \uC774\uC0C1 \uAE30\uC785\uB418\uC5B4 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4."})),F=We.pipe(Schema.omit("to","from"),Schema.extend(Schema.Struct({to:Schema.Union(Ae,Schema.Array(Ae)),from:Schema.optional(Ae)}))),ce=Schema.Union(F,ze(F)),Ve=Schema.decodeSync(pe)({}),je=Schema.optional(pe).pipe(Schema.withDecodingDefault(()=>Ve),Schema.withConstructorDefault(()=>Ve));Schema.Struct({message:F,agent:je});var He=Schema.Struct({allowDuplicates:Schema.optional(Schema.Boolean),agent:je,messages:ze(F),scheduledDate:Schema.optional(Schema.Union(Schema.DateFromSelf,Schema.DateFromString)),showMessageList:Schema.optional(Schema.Boolean)});var me=class{criteria;cond;value;startKey;limit;startDate;endDate;constructor(e){e.groupId&&(this.criteria="groupId",this.cond="eq",this.value=e.groupId),this.startKey=e.startKey,this.limit=e.limit,e.startDate&&(this.startDate=g(e.startDate)),e.endDate&&(this.endDate=g(e.endDate));}};var J=class extends S{constructor(e,a){super(e,a);}async createGroup(e=false,a,s){return this.request({httpMethod:"POST",url:"messages/v4/groups",body:{sdkVersion:le,osPlatform:ie,allowDuplicates:e,appId:a,customFields:s}}).then(r=>r.groupId)}async addMessagesToGroup(e,a){let s=Schema.decodeUnknownSync(ce)(a),r={messages:Array.isArray(s)?s:[s]};return this.request({httpMethod:"PUT",url:`messages/v4/groups/${e}/messages`,body:r})}async sendGroup(e){return this.request({httpMethod:"POST",url:`messages/v4/groups/${e}/send`})}async reserveGroup(e,a){let s=formatISO(a);return this.request({httpMethod:"POST",url:`messages/v4/groups/${e}/schedule`,body:{scheduledDate:s}})}async removeReservationToGroup(e){return this.request({httpMethod:"DELETE",url:`messages/v4/groups/${e}/schedule`})}async getGroups(e){let a={};e&&(a=new me(e));let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`messages/v4/groups${s}`})}async getGroup(e){return this.request({httpMethod:"GET",url:`messages/v4/groups/${e}`})}async getGroupMessages(e,a){let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`messages/v4/groups/${e}/messages${s}`})}async removeGroupMessages(e,a){return this.request({httpMethod:"DELETE",url:`messages/v4/groups/${e}/messages`,body:{messageIds:a}})}async removeGroup(e){return this.request({httpMethod:"DELETE",url:`messages/v4/groups/${e}`})}};var ue=class{startKey;limit;dateType="CREATED";messageId;messageIds;groupId;to;from;type;statusCode;startDate;endDate;constructor(e){this.startKey=e.startKey,this.limit=e.limit,e.dateType&&(this.dateType=e.dateType),e.startDate&&(this.startDate=g(e.startDate)),e.endDate&&(this.endDate=g(e.endDate)),this.messageId=e.messageId,this.messageIds=e.messageIds,this.groupId=e.groupId,this.to=e.to,this.from=e.from,this.type=e.type,this.statusCode=e.statusCode;}};var de=class{startDate;endDate;masterAccountId;constructor(e){e.startDate&&(this.startDate=g(e.startDate)),e.endDate&&(this.endDate=g(e.endDate)),this.masterAccountId=e.masterAccountId;}};var Y=class extends S{constructor(e,a){super(e,a);}async sendOne(e,a){let r={message:Schema.decodeUnknownSync(F)(e),...a?{agent:{appId:a}}:{}};return this.request({httpMethod:"POST",url:"messages/v4/send",body:r})}async send(e,a){let s=this.request.bind(this),r=E.gen(function*(i){let h=yield*i(E.try({try:()=>Schema.encodeUnknownSync(ce)(e),catch:I=>new G({message:I instanceof Error?I.message:String(I)})})),y=Array.isArray(h)?h:[h];if(y.length===0)return yield*i(E.fail(new G({message:"\uB370\uC774\uD130\uAC00 \uBC18\uB4DC\uC2DC 1\uAC74 \uC774\uC0C1 \uAE30\uC785\uB418\uC5B4 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4."})));let k=yield*i(E.try({try:()=>Schema.encodeUnknownSync(Qe)(a??{}),catch:I=>new G({message:I instanceof Error?I.message:String(I)})})),he={messages:y,allowDuplicates:k.allowDuplicates,...k.appId?{agent:{appId:k.appId}}:{},scheduledDate:k.scheduledDate,showMessageList:k.showMessageList},w=yield*i(E.try({try:()=>Schema.decodeSync(He)(he),catch:I=>new G({message:I instanceof Error?I.message:String(I)})})),O=yield*i(E.promise(()=>s({httpMethod:"POST",url:"messages/v4/send-many/detail",body:w}))),{count:be}=O.groupInfo;return O.failedMessageList.length>0&&be.total===be.registeredFailed?yield*i(E.fail(new q({failedMessageList:O.failedMessageList,totalCount:O.failedMessageList.length}))):O}),l=await E.runPromiseExit(r);return Exit.match(l,{onFailure:i=>{let h=Cause.failureOption(i);throw h._tag==="Some"?we(h.value):new Error("Unknown error occurred")},onSuccess:i=>i})}async getMessages(e){let a={};e&&(a=new ue(e));let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`messages/v4/list${s}`})}async getStatistics(e){let a={};e&&(a=new de(e));let s=R(a,{indices:false,addQueryPrefix:true});return this.request({httpMethod:"GET",url:`messages/v4/statistics${s}`})}};var Wt=t=>{try{let e=new URL(t);return e.protocol==="http:"||e.protocol==="https:"}catch{return false}},Qt=t=>E.flatMap(E.tryPromise({try:()=>fetch(t),catch:e=>new Error(`\uB124\uD2B8\uC6CC\uD06C \uC624\uB958\uB85C URL(${t})\uC744(\uB97C) \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. ${e}`)}),e=>e.ok?E.tryPromise({try:()=>e.arrayBuffer(),catch:a=>new Error(`\uC751\uB2F5 body \uCC98\uB9AC \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. ${a}`)}):E.fail(new Error(`URL(${t}) \uC694\uCCAD \uC2E4\uD328 \u2013 \uC0C1\uD0DC \uCF54\uB4DC: ${e.status} ${e.statusText}`))).pipe(E.map(e=>Buffer.from(e).toString("base64"))),Vt=t=>E.tryPromise({try:()=>promises.readFile(t),catch:e=>new Error(`\uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${t} ${e}`)}).pipe(E.map(e=>e.toString("base64")));async function Me(t){let e=Wt(t)?Qt(t):Vt(t);return E.runPromise(e)}var Z=class extends S{constructor(e,a){super(e,a);}async uploadFile(e,a,s,r){let i={file:await Me(e),type:a,name:s,link:r};return this.request({httpMethod:"POST",url:"storage/v1/files",body:i})}};var Xe=class{cashService;iamService;kakaoChannelService;kakaoTemplateService;groupService;messageService;storageService;getBalance;getBlacks;getBlockGroups;getBlockNumbers;getKakaoChannelCategories;getKakaoChannels;getKakaoChannel;requestKakaoChannelToken;createKakaoChannel;removeKakaoChannel;getKakaoAlimtalkTemplateCategories;createKakaoAlimtalkTemplate;getKakaoAlimtalkTemplates;getKakaoAlimtalkTemplate;cancelInspectionKakaoAlimtalkTemplate;updateKakaoAlimtalkTemplate;updateKakaoAlimtalkTemplateName;removeKakaoAlimtalkTemplate;createGroup;addMessagesToGroup;sendGroup;reserveGroup;removeReservationToGroup;getGroups;getGroup;getGroupMessages;removeGroupMessages;removeGroup;sendOne;send;getMessages;getStatistics;uploadFile;constructor(e,a){this.cashService=new V(e,a),this.iamService=new z(e,a),this.kakaoChannelService=new H(e,a),this.kakaoTemplateService=new X(e,a),this.groupService=new J(e,a),this.messageService=new Y(e,a),this.storageService=new Z(e,a),this.bindServices([this.cashService,this.iamService,this.kakaoChannelService,this.kakaoTemplateService,this.groupService,this.messageService,this.storageService]);}bindServices(e){for(let a of e){let s=Object.getPrototypeOf(a),r=Object.getOwnPropertyNames(s).filter(l=>l!=="constructor"&&typeof s[l]=="function");for(let l of r){let i=l,h=a[l];this[i]=h.bind(a);}}}};export{$ as ApiError,L as ApiKeyError,G as BadRequestError,v as DefaultError,N as InvalidDateError,q as MessageNotReceivedError,B as NetworkError,Xe as SolapiMessageService};