@k-msg/template 0.29.4 → 0.29.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- var{defineProperty:j,getOwnPropertyNames:P,getOwnPropertyDescriptor:R}=Object,K=Object.prototype.hasOwnProperty;var O=new WeakMap,I=(f)=>{var k=O.get(f),q;if(k)return k;if(k=j({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")P(f).map((A)=>!K.call(k,A)&&j(k,A,{get:()=>f[A],enumerable:!(q=R(f,A))||q.enumerable}));return O.set(f,k),k};var M=(f,k)=>{for(var q in k)j(f,q,{get:k[q],enumerable:!0,configurable:!0,set:(A)=>k[q]=()=>A})};var x={};M(x,{TemplateLifecycleService:()=>B});module.exports=I(x);var U;((F)=>{F.INVALID_REQUEST="INVALID_REQUEST";F.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";F.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";F.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";F.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";F.NETWORK_ERROR="NETWORK_ERROR";F.NETWORK_TIMEOUT="NETWORK_TIMEOUT";F.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";F.PROVIDER_ERROR="PROVIDER_ERROR";F.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";F.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";F.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";F.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";F.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";F.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";F.UNKNOWN_ERROR="UNKNOWN_ERROR"})(U||={});var g={["INVALID_REQUEST"]:{ko:"잘못된 요청입니다",en:"Invalid request"},["AUTHENTICATION_FAILED"]:{ko:"인증에 실패했습니다",en:"Authentication failed"},["INSUFFICIENT_BALANCE"]:{ko:"잔액이 부족합니다",en:"Insufficient balance"},["TEMPLATE_NOT_FOUND"]:{ko:"템플릿을 찾을 수 없습니다",en:"Template not found"},["RATE_LIMIT_EXCEEDED"]:{ko:"요청 한도를 초과했습니다",en:"Rate limit exceeded"},["NETWORK_ERROR"]:{ko:"네트워크 오류가 발생했습니다",en:"Network error"},["NETWORK_TIMEOUT"]:{ko:"네트워크 요청 시간이 초과되었습니다",en:"Network timeout"},["NETWORK_SERVICE_UNAVAILABLE"]:{ko:"서비스를 일시적으로 사용할 수 없습니다",en:"Service temporarily unavailable"},["PROVIDER_ERROR"]:{ko:"제공자 오류가 발생했습니다",en:"Provider error"},["MESSAGE_SEND_FAILED"]:{ko:"메시지 전송에 실패했습니다",en:"Message send failed"},["CRYPTO_CONFIG_ERROR"]:{ko:"암호화 설정 오류가 발생했습니다",en:"Crypto configuration error"},["CRYPTO_ENCRYPT_FAILED"]:{ko:"암호화에 실패했습니다",en:"Encryption failed"},["CRYPTO_DECRYPT_FAILED"]:{ko:"복호화에 실패했습니다",en:"Decryption failed"},["CRYPTO_HASH_FAILED"]:{ko:"해시 생성에 실패했습니다",en:"Hash generation failed"},["CRYPTO_POLICY_VIOLATION"]:{ko:"암호화 정책 위반이 발생했습니다",en:"Crypto policy violation"},["UNKNOWN_ERROR"]:{ko:"알 수 없는 오류가 발생했습니다",en:"Unknown error"}},p=new Set(Object.values(U));var N=(f)=>{if(typeof f!=="number"||Number.isNaN(f)||!Number.isFinite(f))return;return Math.trunc(f)};class W extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(f,k,q,A={}){super(k);if(this.name="KMsgError",this.code=f,this.details=q,this.providerErrorCode=A.providerErrorCode,this.providerErrorText=A.providerErrorText,this.httpStatus=N(A.httpStatus),this.requestId=typeof A.requestId==="string"?A.requestId:void 0,this.retryAfterMs=N(A.retryAfterMs),this.attempt=N(A.attempt),Array.isArray(A.causeChain))this.causeChain=A.causeChain;else if(A.causeChain!==void 0)this.causeChain=[A.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,W)}getLocalizedMessage(f="ko"){let k=g[this.code];if(k?.[f])return k[f];return this.message}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details,providerErrorCode:this.providerErrorCode,providerErrorText:this.providerErrorText,httpStatus:this.httpStatus,requestId:this.requestId,retryAfterMs:this.retryAfterMs,attempt:this.attempt,causeChain:this.causeChain}}}var w=(f)=>({isSuccess:!0,isFailure:!1,value:f}),$=(f)=>({isSuccess:!1,isFailure:!0,error:f});class J{static validateButtons(f){let k=[];if(f.length>5)k.push("Maximum 5 buttons are allowed");for(let q=0;q<f.length;q++){let A=f[q],T=q+1;if(!A.name||A.name.trim().length===0)k.push(`Button ${T}: name is required`);else if(A.name.length>14)k.push(`Button ${T}: name cannot exceed 14 characters`);J.validateButtonByType(A,T,k)}return{isValid:k.length===0,errors:k}}static validateButtonByType(f,k,q){switch(f.type){case"WL":J.validateWebLinkButton(f,k,q);break;case"AL":J.validateAppLinkButton(f,k,q);break;case"DS":J.validateDeliveryButton(f,k,q);break;case"BK":J.validateBotKeywordButton(f,k,q);break;case"MD":J.validateMessageDeliveryButton(f,k,q);break;default:q.push(`Button ${k}: invalid button type '${f.type}'`)}}static validateWebLinkButton(f,k,q){if(!f.linkMobile&&!f.linkPc)q.push(`Button ${k}: web link button must have at least mobile or PC link`);if(f.linkMobile&&!J.isValidUrl(f.linkMobile))q.push(`Button ${k}: invalid mobile link URL`);if(f.linkPc&&!J.isValidUrl(f.linkPc))q.push(`Button ${k}: invalid PC link URL`)}static validateAppLinkButton(f,k,q){if(!(f.linkIos||f.linkAndroid||f.schemeIos||f.schemeAndroid))q.push(`Button ${k}: app link button must have at least one app link or scheme`);if(f.linkIos&&!J.isValidUrl(f.linkIos))q.push(`Button ${k}: invalid iOS link URL`);if(f.linkAndroid&&!J.isValidUrl(f.linkAndroid))q.push(`Button ${k}: invalid Android link URL`)}static validateDeliveryButton(f,k,q){}static validateBotKeywordButton(f,k,q){}static validateMessageDeliveryButton(f,k,q){}static isValidUrl(f){try{return new URL(f),!0}catch{return!1}}static serializeButtons(f){let k=f.map((q)=>({name:q.name,type:q.type,url_mobile:q.linkMobile,url_pc:q.linkPc,url_ios:q.linkIos,url_android:q.linkAndroid,scheme_ios:q.schemeIos,scheme_android:q.schemeAndroid}));return JSON.stringify(k)}static deserializeButtons(f){try{return JSON.parse(f).map((q)=>({name:q.name,type:q.type,linkMobile:q.url_mobile,linkPc:q.url_pc,linkIos:q.url_ios,linkAndroid:q.url_android,schemeIos:q.scheme_ios,schemeAndroid:q.scheme_android}))}catch(k){throw Error(`Failed to parse buttons JSON: ${k}`)}}}var y=new Set(["WL","AL","DS","BK","MD"]);function Q(f){return new W("INVALID_REQUEST",f)}function S(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function z(f){try{return w(JSON.parse(f))}catch(k){return $(Q(`Invalid JSON for buttons: ${k instanceof Error?k.message:String(k)}`))}}function Z(f,k,q){for(let A of k){if(!(A in f))continue;let T=f[A];if(T===null||T===void 0||T==="")return w(void 0);if(typeof T!=="string")return $(Q(`buttons.${q} must be a string`));return w(T)}return w(void 0)}function h(f,k){let q=S(f);if(!q)return $(Q(`buttons[${k}] must be an object with type/name`));let A=q.type;if(typeof A!=="string"||!y.has(A))return $(Q(`buttons[${k}].type must be one of WL, AL, DS, BK, MD`));let T=A,V=q.name;if(typeof V!=="string"||V.trim().length===0)return $(Q(`buttons[${k}].name is required`));let X=Z(q,["linkMobile","url_mobile","urlMobile"],"linkMobile");if(X.isFailure)return X;let D=Z(q,["linkPc","url_pc","urlPc"],"linkPc");if(D.isFailure)return D;let G=Z(q,["linkIos","url_ios","urlIos"],"linkIos");if(G.isFailure)return G;let Y=Z(q,["linkAndroid","url_android","urlAndroid"],"linkAndroid");if(Y.isFailure)return Y;let H=Z(q,["schemeIos","scheme_ios"],"schemeIos");if(H.isFailure)return H;let _=Z(q,["schemeAndroid","scheme_android"],"schemeAndroid");if(_.isFailure)return _;return w({type:T,name:V,...X.value?{linkMobile:X.value}:{},...D.value?{linkPc:D.value}:{},...G.value?{linkIos:G.value}:{},...Y.value?{linkAndroid:Y.value}:{},...H.value?{schemeIos:H.value}:{},..._.value?{schemeAndroid:_.value}:{}})}function E(f){if(f===void 0||f===null)return w(void 0);let k=f;if(typeof k==="string"){let V=z(k);if(V.isFailure)return V;k=V.value}let q=S(k);if(q&&Array.isArray(q.button))k=q.button;if(!Array.isArray(k))return $(Q("buttons must be a JSON array"));let A=[];for(let[V,X]of k.entries()){let D=h(X,V);if(D.isFailure)return D;A.push(D.value)}let T=J.validateButtons(A);if(!T.isValid)return $(Q(`Invalid template buttons: ${T.errors.join(", ")}`));return w(A)}function L(f,k={}){let q=k.requireName??!0,A=k.requireContent??!0,T={};if(f.name===void 0||f.name===null){if(q)return $(Q("name is required"))}else if(typeof f.name!=="string"||f.name.trim().length===0)return $(Q(q?"name is required":"name must be a non-empty string"));else T.name=f.name.trim();if(f.content===void 0||f.content===null){if(A)return $(Q("content is required"))}else if(typeof f.content!=="string"||f.content.trim().length===0)return $(Q(A?"content is required":"content must be a non-empty string"));else T.content=f.content;let V=E(f.buttons);if(V.isFailure)return V;if(V.value!==void 0)T.buttons=V.value;return w(T)}function C(f,k){if(k)return k;let q=f;if(typeof q.requestTemplateInspection==="function")return{requestTemplateInspection:q.requestTemplateInspection.bind(f)};return}class B{provider;inspectionProvider;constructor(f,k){this.provider=f;this.inspectionProvider=C(f,k)}async create(f,k){let q=L(f,{requireName:!0,requireContent:!0});if(q.isFailure)return q;let A={...f,...q.value.name?{name:q.value.name}:{},...q.value.content?{content:q.value.content}:{},...q.value.buttons!==void 0?{buttons:q.value.buttons}:{}};return this.provider.createTemplate(A,k)}async update(f,k,q){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));let A=L(k,{requireName:!1,requireContent:!1});if(A.isFailure)return A;let T={...k,...A.value.name!==void 0?{name:A.value.name}:{},...A.value.content!==void 0?{content:A.value.content}:{},...A.value.buttons!==void 0?{buttons:A.value.buttons}:{}};return this.provider.updateTemplate(f,T,q)}async delete(f,k){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));return this.provider.deleteTemplate(f,k)}async get(f,k){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));return this.provider.getTemplate(f,k)}async list(f,k){return this.provider.listTemplates(f,k)}async requestInspection(f,k){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));if(!this.inspectionProvider)return $(new W("INVALID_REQUEST","Template inspection is not supported by this provider"));return this.inspectionProvider.requestTemplateInspection(f,k)}}
1
+ var{defineProperty:j,getOwnPropertyNames:q,getOwnPropertyDescriptor:w}=Object,x=Object.prototype.hasOwnProperty;function z(b){return this[b]}var A=(b)=>{var d=(k??=new WeakMap).get(b),g;if(d)return d;if(d=j({},"__esModule",{value:!0}),b&&typeof b==="object"||typeof b==="function"){for(var h of q(b))if(!x.call(d,h))j(d,h,{get:z.bind(b,h),enumerable:!(g=w(b,h))||g.enumerable})}return k.set(b,d),d},k;var B=(b)=>b;function C(b,d){this[b]=B.bind(null,d)}var D=(b,d)=>{for(var g in d)j(b,g,{get:d[g],enumerable:!0,configurable:!0,set:C.bind(d,g)})};var E={};D(E,{TemplateLifecycleService:()=>o.TemplateLifecycleService});module.exports=A(E);
2
2
 
3
- //# debugId=26A4B9BE81692E1A64756E2164756E21
3
+ //# debugId=5E93E1FBAE19BBE664756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- var O=Object.defineProperty;var g=(f,q)=>{for(var k in q)O(f,k,{get:q[k],enumerable:!0,configurable:!0,set:(A)=>q[k]=()=>A})};var U;((F)=>{F.INVALID_REQUEST="INVALID_REQUEST";F.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";F.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";F.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";F.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";F.NETWORK_ERROR="NETWORK_ERROR";F.NETWORK_TIMEOUT="NETWORK_TIMEOUT";F.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";F.PROVIDER_ERROR="PROVIDER_ERROR";F.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";F.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";F.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";F.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";F.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";F.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";F.UNKNOWN_ERROR="UNKNOWN_ERROR"})(U||={});var S={["INVALID_REQUEST"]:{ko:"잘못된 요청입니다",en:"Invalid request"},["AUTHENTICATION_FAILED"]:{ko:"인증에 실패했습니다",en:"Authentication failed"},["INSUFFICIENT_BALANCE"]:{ko:"잔액이 부족합니다",en:"Insufficient balance"},["TEMPLATE_NOT_FOUND"]:{ko:"템플릿을 찾을 수 없습니다",en:"Template not found"},["RATE_LIMIT_EXCEEDED"]:{ko:"요청 한도를 초과했습니다",en:"Rate limit exceeded"},["NETWORK_ERROR"]:{ko:"네트워크 오류가 발생했습니다",en:"Network error"},["NETWORK_TIMEOUT"]:{ko:"네트워크 요청 시간이 초과되었습니다",en:"Network timeout"},["NETWORK_SERVICE_UNAVAILABLE"]:{ko:"서비스를 일시적으로 사용할 수 없습니다",en:"Service temporarily unavailable"},["PROVIDER_ERROR"]:{ko:"제공자 오류가 발생했습니다",en:"Provider error"},["MESSAGE_SEND_FAILED"]:{ko:"메시지 전송에 실패했습니다",en:"Message send failed"},["CRYPTO_CONFIG_ERROR"]:{ko:"암호화 설정 오류가 발생했습니다",en:"Crypto configuration error"},["CRYPTO_ENCRYPT_FAILED"]:{ko:"암호화에 실패했습니다",en:"Encryption failed"},["CRYPTO_DECRYPT_FAILED"]:{ko:"복호화에 실패했습니다",en:"Decryption failed"},["CRYPTO_HASH_FAILED"]:{ko:"해시 생성에 실패했습니다",en:"Hash generation failed"},["CRYPTO_POLICY_VIOLATION"]:{ko:"암호화 정책 위반이 발생했습니다",en:"Crypto policy violation"},["UNKNOWN_ERROR"]:{ko:"알 수 없는 오류가 발생했습니다",en:"Unknown error"}},z=new Set(Object.values(U));var j=(f)=>{if(typeof f!=="number"||Number.isNaN(f)||!Number.isFinite(f))return;return Math.trunc(f)};class W extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(f,q,k,A={}){super(q);if(this.name="KMsgError",this.code=f,this.details=k,this.providerErrorCode=A.providerErrorCode,this.providerErrorText=A.providerErrorText,this.httpStatus=j(A.httpStatus),this.requestId=typeof A.requestId==="string"?A.requestId:void 0,this.retryAfterMs=j(A.retryAfterMs),this.attempt=j(A.attempt),Array.isArray(A.causeChain))this.causeChain=A.causeChain;else if(A.causeChain!==void 0)this.causeChain=[A.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,W)}getLocalizedMessage(f="ko"){let q=S[this.code];if(q?.[f])return q[f];return this.message}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details,providerErrorCode:this.providerErrorCode,providerErrorText:this.providerErrorText,httpStatus:this.httpStatus,requestId:this.requestId,retryAfterMs:this.retryAfterMs,attempt:this.attempt,causeChain:this.causeChain}}}var w=(f)=>({isSuccess:!0,isFailure:!1,value:f}),$=(f)=>({isSuccess:!1,isFailure:!0,error:f});class J{static validateButtons(f){let q=[];if(f.length>5)q.push("Maximum 5 buttons are allowed");for(let k=0;k<f.length;k++){let A=f[k],T=k+1;if(!A.name||A.name.trim().length===0)q.push(`Button ${T}: name is required`);else if(A.name.length>14)q.push(`Button ${T}: name cannot exceed 14 characters`);J.validateButtonByType(A,T,q)}return{isValid:q.length===0,errors:q}}static validateButtonByType(f,q,k){switch(f.type){case"WL":J.validateWebLinkButton(f,q,k);break;case"AL":J.validateAppLinkButton(f,q,k);break;case"DS":J.validateDeliveryButton(f,q,k);break;case"BK":J.validateBotKeywordButton(f,q,k);break;case"MD":J.validateMessageDeliveryButton(f,q,k);break;default:k.push(`Button ${q}: invalid button type '${f.type}'`)}}static validateWebLinkButton(f,q,k){if(!f.linkMobile&&!f.linkPc)k.push(`Button ${q}: web link button must have at least mobile or PC link`);if(f.linkMobile&&!J.isValidUrl(f.linkMobile))k.push(`Button ${q}: invalid mobile link URL`);if(f.linkPc&&!J.isValidUrl(f.linkPc))k.push(`Button ${q}: invalid PC link URL`)}static validateAppLinkButton(f,q,k){if(!(f.linkIos||f.linkAndroid||f.schemeIos||f.schemeAndroid))k.push(`Button ${q}: app link button must have at least one app link or scheme`);if(f.linkIos&&!J.isValidUrl(f.linkIos))k.push(`Button ${q}: invalid iOS link URL`);if(f.linkAndroid&&!J.isValidUrl(f.linkAndroid))k.push(`Button ${q}: invalid Android link URL`)}static validateDeliveryButton(f,q,k){}static validateBotKeywordButton(f,q,k){}static validateMessageDeliveryButton(f,q,k){}static isValidUrl(f){try{return new URL(f),!0}catch{return!1}}static serializeButtons(f){let q=f.map((k)=>({name:k.name,type:k.type,url_mobile:k.linkMobile,url_pc:k.linkPc,url_ios:k.linkIos,url_android:k.linkAndroid,scheme_ios:k.schemeIos,scheme_android:k.schemeAndroid}));return JSON.stringify(q)}static deserializeButtons(f){try{return JSON.parse(f).map((k)=>({name:k.name,type:k.type,linkMobile:k.url_mobile,linkPc:k.url_pc,linkIos:k.url_ios,linkAndroid:k.url_android,schemeIos:k.scheme_ios,schemeAndroid:k.scheme_android}))}catch(q){throw Error(`Failed to parse buttons JSON: ${q}`)}}}var P=new Set(["WL","AL","DS","BK","MD"]);function Q(f){return new W("INVALID_REQUEST",f)}function L(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function R(f){try{return w(JSON.parse(f))}catch(q){return $(Q(`Invalid JSON for buttons: ${q instanceof Error?q.message:String(q)}`))}}function Z(f,q,k){for(let A of q){if(!(A in f))continue;let T=f[A];if(T===null||T===void 0||T==="")return w(void 0);if(typeof T!=="string")return $(Q(`buttons.${k} must be a string`));return w(T)}return w(void 0)}function K(f,q){let k=L(f);if(!k)return $(Q(`buttons[${q}] must be an object with type/name`));let A=k.type;if(typeof A!=="string"||!P.has(A))return $(Q(`buttons[${q}].type must be one of WL, AL, DS, BK, MD`));let T=A,V=k.name;if(typeof V!=="string"||V.trim().length===0)return $(Q(`buttons[${q}].name is required`));let X=Z(k,["linkMobile","url_mobile","urlMobile"],"linkMobile");if(X.isFailure)return X;let D=Z(k,["linkPc","url_pc","urlPc"],"linkPc");if(D.isFailure)return D;let G=Z(k,["linkIos","url_ios","urlIos"],"linkIos");if(G.isFailure)return G;let Y=Z(k,["linkAndroid","url_android","urlAndroid"],"linkAndroid");if(Y.isFailure)return Y;let H=Z(k,["schemeIos","scheme_ios"],"schemeIos");if(H.isFailure)return H;let _=Z(k,["schemeAndroid","scheme_android"],"schemeAndroid");if(_.isFailure)return _;return w({type:T,name:V,...X.value?{linkMobile:X.value}:{},...D.value?{linkPc:D.value}:{},...G.value?{linkIos:G.value}:{},...Y.value?{linkAndroid:Y.value}:{},...H.value?{schemeIos:H.value}:{},..._.value?{schemeAndroid:_.value}:{}})}function I(f){if(f===void 0||f===null)return w(void 0);let q=f;if(typeof q==="string"){let V=R(q);if(V.isFailure)return V;q=V.value}let k=L(q);if(k&&Array.isArray(k.button))q=k.button;if(!Array.isArray(q))return $(Q("buttons must be a JSON array"));let A=[];for(let[V,X]of q.entries()){let D=K(X,V);if(D.isFailure)return D;A.push(D.value)}let T=J.validateButtons(A);if(!T.isValid)return $(Q(`Invalid template buttons: ${T.errors.join(", ")}`));return w(A)}function N(f,q={}){let k=q.requireName??!0,A=q.requireContent??!0,T={};if(f.name===void 0||f.name===null){if(k)return $(Q("name is required"))}else if(typeof f.name!=="string"||f.name.trim().length===0)return $(Q(k?"name is required":"name must be a non-empty string"));else T.name=f.name.trim();if(f.content===void 0||f.content===null){if(A)return $(Q("content is required"))}else if(typeof f.content!=="string"||f.content.trim().length===0)return $(Q(A?"content is required":"content must be a non-empty string"));else T.content=f.content;let V=I(f.buttons);if(V.isFailure)return V;if(V.value!==void 0)T.buttons=V.value;return w(T)}function M(f,q){if(q)return q;let k=f;if(typeof k.requestTemplateInspection==="function")return{requestTemplateInspection:k.requestTemplateInspection.bind(f)};return}class B{provider;inspectionProvider;constructor(f,q){this.provider=f;this.inspectionProvider=M(f,q)}async create(f,q){let k=N(f,{requireName:!0,requireContent:!0});if(k.isFailure)return k;let A={...f,...k.value.name?{name:k.value.name}:{},...k.value.content?{content:k.value.content}:{},...k.value.buttons!==void 0?{buttons:k.value.buttons}:{}};return this.provider.createTemplate(A,q)}async update(f,q,k){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));let A=N(q,{requireName:!1,requireContent:!1});if(A.isFailure)return A;let T={...q,...A.value.name!==void 0?{name:A.value.name}:{},...A.value.content!==void 0?{content:A.value.content}:{},...A.value.buttons!==void 0?{buttons:A.value.buttons}:{}};return this.provider.updateTemplate(f,T,k)}async delete(f,q){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));return this.provider.deleteTemplate(f,q)}async get(f,q){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));return this.provider.getTemplate(f,q)}async list(f,q){return this.provider.listTemplates(f,q)}async requestInspection(f,q){if(!f||f.trim().length===0)return $(new W("INVALID_REQUEST","Template code is required"));if(!this.inspectionProvider)return $(new W("INVALID_REQUEST","Template inspection is not supported by this provider"));return this.inspectionProvider.requestTemplateInspection(f,q)}}export{B as TemplateLifecycleService};
1
+ export{g as TemplateLifecycleService};
2
2
 
3
- //# debugId=850BBBB6CD6E217564756E2164756E21
3
+ //# debugId=7FE272DEA3A8B25764756E2164756E21
4
4
  //# sourceMappingURL=index.mjs.map
@@ -1,4 +1,4 @@
1
- var{defineProperty:U,getOwnPropertyNames:R,getOwnPropertyDescriptor:K}=Object,y=Object.prototype.hasOwnProperty;var B=new WeakMap,M=(f)=>{var T=B.get(f),k;if(T)return T;if(T=U({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")R(f).map((q)=>!y.call(T,q)&&U(T,q,{get:()=>f[q],enumerable:!(k=K(f,q))||k.enumerable}));return B.set(f,T),T};var I=(f,T)=>{for(var k in T)U(f,k,{get:T[k],enumerable:!0,configurable:!0,set:(q)=>T[k]=()=>q})};var p={};I(p,{validateTemplatePayload:()=>S,parseTemplateButtons:()=>N,interpolate:()=>L,ButtonParser:()=>F});module.exports=M(p);function L(f,T){if(!f)return"";if(!T)return f;return f.replace(/#\{([^}]+)\}/g,(k,q)=>{let A=T[q];if(A===void 0||A===null)return k;return String(A)})}class F{static validateButtons(f){let T=[];if(f.length>5)T.push("Maximum 5 buttons are allowed");for(let k=0;k<f.length;k++){let q=f[k],A=k+1;if(!q.name||q.name.trim().length===0)T.push(`Button ${A}: name is required`);else if(q.name.length>14)T.push(`Button ${A}: name cannot exceed 14 characters`);F.validateButtonByType(q,A,T)}return{isValid:T.length===0,errors:T}}static validateButtonByType(f,T,k){switch(f.type){case"WL":F.validateWebLinkButton(f,T,k);break;case"AL":F.validateAppLinkButton(f,T,k);break;case"DS":F.validateDeliveryButton(f,T,k);break;case"BK":F.validateBotKeywordButton(f,T,k);break;case"MD":F.validateMessageDeliveryButton(f,T,k);break;default:k.push(`Button ${T}: invalid button type '${f.type}'`)}}static validateWebLinkButton(f,T,k){if(!f.linkMobile&&!f.linkPc)k.push(`Button ${T}: web link button must have at least mobile or PC link`);if(f.linkMobile&&!F.isValidUrl(f.linkMobile))k.push(`Button ${T}: invalid mobile link URL`);if(f.linkPc&&!F.isValidUrl(f.linkPc))k.push(`Button ${T}: invalid PC link URL`)}static validateAppLinkButton(f,T,k){if(!(f.linkIos||f.linkAndroid||f.schemeIos||f.schemeAndroid))k.push(`Button ${T}: app link button must have at least one app link or scheme`);if(f.linkIos&&!F.isValidUrl(f.linkIos))k.push(`Button ${T}: invalid iOS link URL`);if(f.linkAndroid&&!F.isValidUrl(f.linkAndroid))k.push(`Button ${T}: invalid Android link URL`)}static validateDeliveryButton(f,T,k){}static validateBotKeywordButton(f,T,k){}static validateMessageDeliveryButton(f,T,k){}static isValidUrl(f){try{return new URL(f),!0}catch{return!1}}static serializeButtons(f){let T=f.map((k)=>({name:k.name,type:k.type,url_mobile:k.linkMobile,url_pc:k.linkPc,url_ios:k.linkIos,url_android:k.linkAndroid,scheme_ios:k.schemeIos,scheme_android:k.schemeAndroid}));return JSON.stringify(T)}static deserializeButtons(f){try{return JSON.parse(f).map((k)=>({name:k.name,type:k.type,linkMobile:k.url_mobile,linkPc:k.url_pc,linkIos:k.url_ios,linkAndroid:k.url_android,schemeIos:k.scheme_ios,schemeAndroid:k.scheme_android}))}catch(T){throw Error(`Failed to parse buttons JSON: ${T}`)}}}var j;(($)=>{$.INVALID_REQUEST="INVALID_REQUEST";$.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";$.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";$.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";$.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";$.NETWORK_ERROR="NETWORK_ERROR";$.NETWORK_TIMEOUT="NETWORK_TIMEOUT";$.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";$.PROVIDER_ERROR="PROVIDER_ERROR";$.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";$.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";$.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";$.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";$.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";$.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";$.UNKNOWN_ERROR="UNKNOWN_ERROR"})(j||={});var g={["INVALID_REQUEST"]:{ko:"잘못된 요청입니다",en:"Invalid request"},["AUTHENTICATION_FAILED"]:{ko:"인증에 실패했습니다",en:"Authentication failed"},["INSUFFICIENT_BALANCE"]:{ko:"잔액이 부족합니다",en:"Insufficient balance"},["TEMPLATE_NOT_FOUND"]:{ko:"템플릿을 찾을 수 없습니다",en:"Template not found"},["RATE_LIMIT_EXCEEDED"]:{ko:"요청 한도를 초과했습니다",en:"Rate limit exceeded"},["NETWORK_ERROR"]:{ko:"네트워크 오류가 발생했습니다",en:"Network error"},["NETWORK_TIMEOUT"]:{ko:"네트워크 요청 시간이 초과되었습니다",en:"Network timeout"},["NETWORK_SERVICE_UNAVAILABLE"]:{ko:"서비스를 일시적으로 사용할 수 없습니다",en:"Service temporarily unavailable"},["PROVIDER_ERROR"]:{ko:"제공자 오류가 발생했습니다",en:"Provider error"},["MESSAGE_SEND_FAILED"]:{ko:"메시지 전송에 실패했습니다",en:"Message send failed"},["CRYPTO_CONFIG_ERROR"]:{ko:"암호화 설정 오류가 발생했습니다",en:"Crypto configuration error"},["CRYPTO_ENCRYPT_FAILED"]:{ko:"암호화에 실패했습니다",en:"Encryption failed"},["CRYPTO_DECRYPT_FAILED"]:{ko:"복호화에 실패했습니다",en:"Decryption failed"},["CRYPTO_HASH_FAILED"]:{ko:"해시 생성에 실패했습니다",en:"Hash generation failed"},["CRYPTO_POLICY_VIOLATION"]:{ko:"암호화 정책 위반이 발생했습니다",en:"Crypto policy violation"},["UNKNOWN_ERROR"]:{ko:"알 수 없는 오류가 발생했습니다",en:"Unknown error"}},v=new Set(Object.values(j));var P=(f)=>{if(typeof f!=="number"||Number.isNaN(f)||!Number.isFinite(f))return;return Math.trunc(f)};class _ extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(f,T,k,q={}){super(T);if(this.name="KMsgError",this.code=f,this.details=k,this.providerErrorCode=q.providerErrorCode,this.providerErrorText=q.providerErrorText,this.httpStatus=P(q.httpStatus),this.requestId=typeof q.requestId==="string"?q.requestId:void 0,this.retryAfterMs=P(q.retryAfterMs),this.attempt=P(q.attempt),Array.isArray(q.causeChain))this.causeChain=q.causeChain;else if(q.causeChain!==void 0)this.causeChain=[q.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,_)}getLocalizedMessage(f="ko"){let T=g[this.code];if(T?.[f])return T[f];return this.message}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details,providerErrorCode:this.providerErrorCode,providerErrorText:this.providerErrorText,httpStatus:this.httpStatus,requestId:this.requestId,retryAfterMs:this.retryAfterMs,attempt:this.attempt,causeChain:this.causeChain}}}var W=(f)=>({isSuccess:!0,isFailure:!1,value:f}),J=(f)=>({isSuccess:!1,isFailure:!0,error:f});var z=new Set(["WL","AL","DS","BK","MD"]);function Q(f){return new _("INVALID_REQUEST",f)}function O(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function h(f){try{return W(JSON.parse(f))}catch(T){return J(Q(`Invalid JSON for buttons: ${T instanceof Error?T.message:String(T)}`))}}function X(f,T,k){for(let q of T){if(!(q in f))continue;let A=f[q];if(A===null||A===void 0||A==="")return W(void 0);if(typeof A!=="string")return J(Q(`buttons.${k} must be a string`));return W(A)}return W(void 0)}function E(f,T){let k=O(f);if(!k)return J(Q(`buttons[${T}] must be an object with type/name`));let q=k.type;if(typeof q!=="string"||!z.has(q))return J(Q(`buttons[${T}].type must be one of WL, AL, DS, BK, MD`));let A=q,V=k.name;if(typeof V!=="string"||V.trim().length===0)return J(Q(`buttons[${T}].name is required`));let D=X(k,["linkMobile","url_mobile","urlMobile"],"linkMobile");if(D.isFailure)return D;let w=X(k,["linkPc","url_pc","urlPc"],"linkPc");if(w.isFailure)return w;let Z=X(k,["linkIos","url_ios","urlIos"],"linkIos");if(Z.isFailure)return Z;let G=X(k,["linkAndroid","url_android","urlAndroid"],"linkAndroid");if(G.isFailure)return G;let Y=X(k,["schemeIos","scheme_ios"],"schemeIos");if(Y.isFailure)return Y;let H=X(k,["schemeAndroid","scheme_android"],"schemeAndroid");if(H.isFailure)return H;return W({type:A,name:V,...D.value?{linkMobile:D.value}:{},...w.value?{linkPc:w.value}:{},...Z.value?{linkIos:Z.value}:{},...G.value?{linkAndroid:G.value}:{},...Y.value?{schemeIos:Y.value}:{},...H.value?{schemeAndroid:H.value}:{}})}function N(f){if(f===void 0||f===null)return W(void 0);let T=f;if(typeof T==="string"){let V=h(T);if(V.isFailure)return V;T=V.value}let k=O(T);if(k&&Array.isArray(k.button))T=k.button;if(!Array.isArray(T))return J(Q("buttons must be a JSON array"));let q=[];for(let[V,D]of T.entries()){let w=E(D,V);if(w.isFailure)return w;q.push(w.value)}let A=F.validateButtons(q);if(!A.isValid)return J(Q(`Invalid template buttons: ${A.errors.join(", ")}`));return W(q)}function S(f,T={}){let k=T.requireName??!0,q=T.requireContent??!0,A={};if(f.name===void 0||f.name===null){if(k)return J(Q("name is required"))}else if(typeof f.name!=="string"||f.name.trim().length===0)return J(Q(k?"name is required":"name must be a non-empty string"));else A.name=f.name.trim();if(f.content===void 0||f.content===null){if(q)return J(Q("content is required"))}else if(typeof f.content!=="string"||f.content.trim().length===0)return J(Q(q?"content is required":"content must be a non-empty string"));else A.content=f.content;let V=N(f.buttons);if(V.isFailure)return V;if(V.value!==void 0)A.buttons=V.value;return W(A)}
1
+ var{defineProperty:l,getOwnPropertyNames:y,getOwnPropertyDescriptor:d}=Object,s=Object.prototype.hasOwnProperty;function n(e){return this[e]}var T=(e)=>{var t=(r??=new WeakMap).get(e),a;if(t)return t;if(t=l({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var p of y(e))if(!s.call(t,p))l(t,p,{get:n.bind(e,p),enumerable:!(a=d(e,p))||a.enumerable})}return r.set(e,t),t},r;var f=(e)=>e;function u(e,t){this[e]=f.bind(null,t)}var x=(e,t)=>{for(var a in t)l(e,a,{get:t[a],enumerable:!0,configurable:!0,set:u.bind(t,a)})};var P={};x(P,{validateTemplatePayload:()=>o.validateTemplatePayload,parseTemplateButtons:()=>o.parseTemplateButtons,interpolate:()=>m.interpolate,ButtonParser:()=>i.ButtonParser});module.exports=T(P);
2
2
 
3
- //# debugId=C32DF4F9203AC4BC64756E2164756E21
3
+ //# debugId=E22ABE00DB71A24664756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- var B=Object.defineProperty;var M=(f,k)=>{for(var T in k)B(f,T,{get:k[T],enumerable:!0,configurable:!0,set:(q)=>k[T]=()=>q})};function L(f,k){if(!f)return"";if(!k)return f;return f.replace(/#\{([^}]+)\}/g,(T,q)=>{let A=k[q];if(A===void 0||A===null)return T;return String(A)})}class V{static validateButtons(f){let k=[];if(f.length>5)k.push("Maximum 5 buttons are allowed");for(let T=0;T<f.length;T++){let q=f[T],A=T+1;if(!q.name||q.name.trim().length===0)k.push(`Button ${A}: name is required`);else if(q.name.length>14)k.push(`Button ${A}: name cannot exceed 14 characters`);V.validateButtonByType(q,A,k)}return{isValid:k.length===0,errors:k}}static validateButtonByType(f,k,T){switch(f.type){case"WL":V.validateWebLinkButton(f,k,T);break;case"AL":V.validateAppLinkButton(f,k,T);break;case"DS":V.validateDeliveryButton(f,k,T);break;case"BK":V.validateBotKeywordButton(f,k,T);break;case"MD":V.validateMessageDeliveryButton(f,k,T);break;default:T.push(`Button ${k}: invalid button type '${f.type}'`)}}static validateWebLinkButton(f,k,T){if(!f.linkMobile&&!f.linkPc)T.push(`Button ${k}: web link button must have at least mobile or PC link`);if(f.linkMobile&&!V.isValidUrl(f.linkMobile))T.push(`Button ${k}: invalid mobile link URL`);if(f.linkPc&&!V.isValidUrl(f.linkPc))T.push(`Button ${k}: invalid PC link URL`)}static validateAppLinkButton(f,k,T){if(!(f.linkIos||f.linkAndroid||f.schemeIos||f.schemeAndroid))T.push(`Button ${k}: app link button must have at least one app link or scheme`);if(f.linkIos&&!V.isValidUrl(f.linkIos))T.push(`Button ${k}: invalid iOS link URL`);if(f.linkAndroid&&!V.isValidUrl(f.linkAndroid))T.push(`Button ${k}: invalid Android link URL`)}static validateDeliveryButton(f,k,T){}static validateBotKeywordButton(f,k,T){}static validateMessageDeliveryButton(f,k,T){}static isValidUrl(f){try{return new URL(f),!0}catch{return!1}}static serializeButtons(f){let k=f.map((T)=>({name:T.name,type:T.type,url_mobile:T.linkMobile,url_pc:T.linkPc,url_ios:T.linkIos,url_android:T.linkAndroid,scheme_ios:T.schemeIos,scheme_android:T.schemeAndroid}));return JSON.stringify(k)}static deserializeButtons(f){try{return JSON.parse(f).map((T)=>({name:T.name,type:T.type,linkMobile:T.url_mobile,linkPc:T.url_pc,linkIos:T.url_ios,linkAndroid:T.url_android,schemeIos:T.scheme_ios,schemeAndroid:T.scheme_android}))}catch(k){throw Error(`Failed to parse buttons JSON: ${k}`)}}}var P;(($)=>{$.INVALID_REQUEST="INVALID_REQUEST";$.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";$.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";$.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";$.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";$.NETWORK_ERROR="NETWORK_ERROR";$.NETWORK_TIMEOUT="NETWORK_TIMEOUT";$.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";$.PROVIDER_ERROR="PROVIDER_ERROR";$.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";$.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";$.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";$.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";$.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";$.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";$.UNKNOWN_ERROR="UNKNOWN_ERROR"})(P||={});var O={["INVALID_REQUEST"]:{ko:"잘못된 요청입니다",en:"Invalid request"},["AUTHENTICATION_FAILED"]:{ko:"인증에 실패했습니다",en:"Authentication failed"},["INSUFFICIENT_BALANCE"]:{ko:"잔액이 부족합니다",en:"Insufficient balance"},["TEMPLATE_NOT_FOUND"]:{ko:"템플릿을 찾을 수 없습니다",en:"Template not found"},["RATE_LIMIT_EXCEEDED"]:{ko:"요청 한도를 초과했습니다",en:"Rate limit exceeded"},["NETWORK_ERROR"]:{ko:"네트워크 오류가 발생했습니다",en:"Network error"},["NETWORK_TIMEOUT"]:{ko:"네트워크 요청 시간이 초과되었습니다",en:"Network timeout"},["NETWORK_SERVICE_UNAVAILABLE"]:{ko:"서비스를 일시적으로 사용할 수 없습니다",en:"Service temporarily unavailable"},["PROVIDER_ERROR"]:{ko:"제공자 오류가 발생했습니다",en:"Provider error"},["MESSAGE_SEND_FAILED"]:{ko:"메시지 전송에 실패했습니다",en:"Message send failed"},["CRYPTO_CONFIG_ERROR"]:{ko:"암호화 설정 오류가 발생했습니다",en:"Crypto configuration error"},["CRYPTO_ENCRYPT_FAILED"]:{ko:"암호화에 실패했습니다",en:"Encryption failed"},["CRYPTO_DECRYPT_FAILED"]:{ko:"복호화에 실패했습니다",en:"Decryption failed"},["CRYPTO_HASH_FAILED"]:{ko:"해시 생성에 실패했습니다",en:"Hash generation failed"},["CRYPTO_POLICY_VIOLATION"]:{ko:"암호화 정책 위반이 발생했습니다",en:"Crypto policy violation"},["UNKNOWN_ERROR"]:{ko:"알 수 없는 오류가 발생했습니다",en:"Unknown error"}},h=new Set(Object.values(P));var U=(f)=>{if(typeof f!=="number"||Number.isNaN(f)||!Number.isFinite(f))return;return Math.trunc(f)};class _ extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(f,k,T,q={}){super(k);if(this.name="KMsgError",this.code=f,this.details=T,this.providerErrorCode=q.providerErrorCode,this.providerErrorText=q.providerErrorText,this.httpStatus=U(q.httpStatus),this.requestId=typeof q.requestId==="string"?q.requestId:void 0,this.retryAfterMs=U(q.retryAfterMs),this.attempt=U(q.attempt),Array.isArray(q.causeChain))this.causeChain=q.causeChain;else if(q.causeChain!==void 0)this.causeChain=[q.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,_)}getLocalizedMessage(f="ko"){let k=O[this.code];if(k?.[f])return k[f];return this.message}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details,providerErrorCode:this.providerErrorCode,providerErrorText:this.providerErrorText,httpStatus:this.httpStatus,requestId:this.requestId,retryAfterMs:this.retryAfterMs,attempt:this.attempt,causeChain:this.causeChain}}}var W=(f)=>({isSuccess:!0,isFailure:!1,value:f}),J=(f)=>({isSuccess:!1,isFailure:!0,error:f});var S=new Set(["WL","AL","DS","BK","MD"]);function Q(f){return new _("INVALID_REQUEST",f)}function j(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function R(f){try{return W(JSON.parse(f))}catch(k){return J(Q(`Invalid JSON for buttons: ${k instanceof Error?k.message:String(k)}`))}}function X(f,k,T){for(let q of k){if(!(q in f))continue;let A=f[q];if(A===null||A===void 0||A==="")return W(void 0);if(typeof A!=="string")return J(Q(`buttons.${T} must be a string`));return W(A)}return W(void 0)}function K(f,k){let T=j(f);if(!T)return J(Q(`buttons[${k}] must be an object with type/name`));let q=T.type;if(typeof q!=="string"||!S.has(q))return J(Q(`buttons[${k}].type must be one of WL, AL, DS, BK, MD`));let A=q,F=T.name;if(typeof F!=="string"||F.trim().length===0)return J(Q(`buttons[${k}].name is required`));let D=X(T,["linkMobile","url_mobile","urlMobile"],"linkMobile");if(D.isFailure)return D;let w=X(T,["linkPc","url_pc","urlPc"],"linkPc");if(w.isFailure)return w;let Z=X(T,["linkIos","url_ios","urlIos"],"linkIos");if(Z.isFailure)return Z;let G=X(T,["linkAndroid","url_android","urlAndroid"],"linkAndroid");if(G.isFailure)return G;let Y=X(T,["schemeIos","scheme_ios"],"schemeIos");if(Y.isFailure)return Y;let H=X(T,["schemeAndroid","scheme_android"],"schemeAndroid");if(H.isFailure)return H;return W({type:A,name:F,...D.value?{linkMobile:D.value}:{},...w.value?{linkPc:w.value}:{},...Z.value?{linkIos:Z.value}:{},...G.value?{linkAndroid:G.value}:{},...Y.value?{schemeIos:Y.value}:{},...H.value?{schemeAndroid:H.value}:{}})}function N(f){if(f===void 0||f===null)return W(void 0);let k=f;if(typeof k==="string"){let F=R(k);if(F.isFailure)return F;k=F.value}let T=j(k);if(T&&Array.isArray(T.button))k=T.button;if(!Array.isArray(k))return J(Q("buttons must be a JSON array"));let q=[];for(let[F,D]of k.entries()){let w=K(D,F);if(w.isFailure)return w;q.push(w.value)}let A=V.validateButtons(q);if(!A.isValid)return J(Q(`Invalid template buttons: ${A.errors.join(", ")}`));return W(q)}function y(f,k={}){let T=k.requireName??!0,q=k.requireContent??!0,A={};if(f.name===void 0||f.name===null){if(T)return J(Q("name is required"))}else if(typeof f.name!=="string"||f.name.trim().length===0)return J(Q(T?"name is required":"name must be a non-empty string"));else A.name=f.name.trim();if(f.content===void 0||f.content===null){if(q)return J(Q("content is required"))}else if(typeof f.content!=="string"||f.content.trim().length===0)return J(Q(q?"content is required":"content must be a non-empty string"));else A.content=f.content;let F=N(f.buttons);if(F.isFailure)return F;if(F.value!==void 0)A.buttons=F.value;return W(A)}export{y as validateTemplatePayload,N as parseTemplateButtons,L as interpolate,V as ButtonParser};
1
+ export{m as validateTemplatePayload,r as parseTemplateButtons,a as interpolate,o as ButtonParser};
2
2
 
3
- //# debugId=79AC1B1E6DA623FA64756E2164756E21
3
+ //# debugId=E0D894DF6B45612964756E2164756E21
4
4
  //# sourceMappingURL=index.mjs.map