@k-msg/channel 0.30.0 → 0.31.0
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.
- package/dist/index.cjs +4 -0
- package/dist/index.mjs +2 -2
- package/dist/toolkit/index.cjs +4 -0
- package/dist/toolkit/index.mjs +2 -66
- package/package.json +10 -10
- package/dist/index.js +0 -4
- package/dist/toolkit/index.js +0 -68
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var{defineProperty:M,getOwnPropertyNames:J,getOwnPropertyDescriptor:Z}=Object,ee=Object.prototype.hasOwnProperty;function re(e){return this[e]}var ne=(e)=>{var r=(j??=new WeakMap).get(e),o;if(r)return r;if(r=M({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var t of J(e))if(!ee.call(r,t))M(r,t,{get:re.bind(e,t),enumerable:!(o=Z(e,t))||o.enumerable})}return j.set(e,r),r},j;var te=(e)=>e;function oe(e,r){this[e]=te.bind(null,r)}var ie=(e,r)=>{for(var o in r)M(e,o,{get:r[o],enumerable:!0,configurable:!0,set:oe.bind(r,o)})};var ye={};ie(ye,{KakaoChannelBindingResolver:()=>N,KakaoChannelCapabilityService:()=>S,KakaoChannelLifecycleService:()=>D});module.exports=ne(ye);var P;((a)=>{a.INVALID_REQUEST="INVALID_REQUEST";a.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";a.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";a.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";a.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";a.NETWORK_ERROR="NETWORK_ERROR";a.NETWORK_TIMEOUT="NETWORK_TIMEOUT";a.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";a.REQUEST_ABORTED="REQUEST_ABORTED";a.PROVIDER_ERROR="PROVIDER_ERROR";a.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";a.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";a.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";a.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";a.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";a.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";a.UNKNOWN_ERROR="UNKNOWN_ERROR"})(P||={});var ae={["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"},["REQUEST_ABORTED"]:{ko:"요청이 취소되었습니다",en:"Request aborted"},["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"}},Ee=new Set(Object.values(P));var O=(e)=>{if(typeof e!=="number"||Number.isNaN(e)||!Number.isFinite(e))return;return Math.trunc(e)};class c extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(e,r,o,t={}){super(r);if(this.name="KMsgError",this.code=e,this.details=o,this.providerErrorCode=t.providerErrorCode,this.providerErrorText=t.providerErrorText,this.httpStatus=O(t.httpStatus),this.requestId=typeof t.requestId==="string"?t.requestId:void 0,this.retryAfterMs=O(t.retryAfterMs),this.attempt=O(t.attempt),Array.isArray(t.causeChain))this.causeChain=t.causeChain;else if(t.causeChain!==void 0)this.causeChain=[t.causeChain];let i=Error.captureStackTrace;if(i)i(this,c)}getLocalizedMessage(e="ko"){let r=ae[this.code];if(r?.[e])return r[e];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 _=(e)=>({isSuccess:!0,isFailure:!1,value:e}),y=(e)=>({isSuccess:!1,isFailure:!0,error:e});function n(e){if(typeof e!=="string")return;let r=e.trim();return r.length>0?r:void 0}function w(e){if(!e)return;let r=e.trim();return r.length>0?r.toLowerCase():void 0}function Q(e){let r=e.config&&typeof e.config==="object"?e.config:{},o=n(r.senderKey)??n(r.kakaoPfId)??n(r.profileId),t=n(r.plusId);if(w(e.type)==="solapi")return{senderKey:n(r.kakaoPfId)??o,...t?{plusId:t}:{}};return{...o?{senderKey:o}:{},...t?{plusId:t}:{}}}function se(e){return[e.providerId??"",e.senderKey??"",e.plusId??"",e.source].join("|")}function G(e){if(!Array.isArray(e)||e.length!==1)return;return n(e[0]?.id)}class N{config;constructor(e){this.config=e}list(e){let r=n(e?.providerId),o=this.config.aliases?.kakaoChannels??{},t=[],i=new Set,m=(s)=>{if(r&&s.providerId!==r)return;let d=se(s);if(i.has(d))return;i.add(d),t.push(s)};for(let[s,d]of Object.entries(o)){let u=n(d.providerId);if(!u)continue;let A=n(d.senderKey),b=n(d.plusId);if(!A&&!b)continue;m({source:"config",alias:s,providerId:u,...A?{senderKey:A}:{},...b?{plusId:b}:{},...n(d.name)?{name:n(d.name)}:{}})}let l=this.config.defaults?.kakao,p=n(l?.channel),f=p?o[p]:void 0,K=n(f?.providerId)??n(this.config.routing?.defaultProviderId)??G(this.config.providers),g=n(l?.senderKey)??n(f?.senderKey),k=n(l?.plusId)??n(f?.plusId);if(K&&(g||k))m({source:"config",...p?{alias:p}:{},providerId:K,...g?{senderKey:g}:{},...k?{plusId:k}:{},...n(f?.name)?{name:n(f?.name)}:{}});for(let s of this.config.providers??[]){let d=n(s.id);if(!d)continue;let u=Q(s);if(!u.senderKey&&!u.plusId)continue;m({source:"config",providerId:d,...u.senderKey?{senderKey:u.senderKey}:{},...u.plusId?{plusId:u.plusId}:{}})}return t}resolve(e){let r=this.config.aliases?.kakaoChannels??{},o=n(e?.channelAlias),t=o?r[o]:void 0;if(o&&e?.strictAlias===!0&&!t)throw new c("INVALID_REQUEST",`Unknown kakao channel alias: ${o}`);let i=this.config.defaults?.kakao,m=n(i?.channel),l=m?r[m]:void 0,p=n(e?.providerId),f=n(t?.providerId),K=n(l?.providerId),g=n(this.config.routing?.defaultProviderId),k=G(this.config.providers),s,d="unknown";if(p)s=p,d="explicit";else if(f)s=f,d="alias";else if(K)s=K,d="defaults";else if(g)s=g,d="routing";else if(k)s=k,d="single_provider";let u=s?(this.config.providers??[]).find((X)=>X.id===s):void 0,A=u?Q(u):{},b=n(e?.senderKey),a=n(t?.senderKey),U=n(i?.senderKey),z=n(l?.senderKey),B=n(A.senderKey),Y=n(e?.plusId),V=n(t?.plusId),H=n(i?.plusId),q=n(l?.plusId),W=n(A.plusId),E,C;if(b)E=b,C="explicit";else if(a)E=a,C="alias";else if(U)E=U,C="defaults";else if(z)E=z,C="defaults";else if(B)E=B,C="provider_config";let h,R;if(Y)h=Y,R="explicit";else if(V)h=V,R="alias";else if(H)h=H,R="defaults";else if(q)h=q,R="defaults";else if(W)h=W,R="provider_config";return{...o?{alias:o}:{},...s?{providerId:s}:{},...w(u?.type)?{providerType:w(u?.type)}:{},...E?{senderKey:E}:{},...h?{plusId:h}:{},...n(t?.name)?{name:n(t?.name)}:n(l?.name)?{name:n(l?.name)}:{},providerIdSource:d,...C?{senderKeySource:C}:{},...R?{plusIdSource:R}:{}}}getAlias(e){let r=n(e);if(!r)return;return this.config.aliases?.kakaoChannels?.[r]}}function I(e){return typeof e==="function"}function de(e){if(!I(e.getOnboardingSpec))return;try{return e.getOnboardingSpec()}catch{return}}function ue(e){if(typeof e!=="string")return;let r=e.trim();return r.length>0?r.toLowerCase():void 0}function le(e,r){if(e?.channelOnboarding){if(e.channelOnboarding==="api"&&!r)return"none";return e.channelOnboarding}return r?"api":"none"}class S{resolve(e){let r=de(e),o={list:I(e.listKakaoChannels),categories:I(e.listKakaoChannelCategories),auth:I(e.requestKakaoChannelAuth),add:I(e.addKakaoChannel)},t=ue(r?.providerId),i=le(r,o.list);return{providerId:e.id,...t?{providerType:t}:{},mode:i,supports:o}}}function T(e,r){return new c("INVALID_REQUEST",`Provider '${e}' does not support kakao channel api operation '${r}'`,{providerId:e,operation:r})}class v{provider;constructor(e){this.provider=e}async list(e){let r=this.provider.listKakaoChannels;if(typeof r!=="function")return y(T(this.provider.id,"list"));return r.call(this.provider,e)}async categories(){let e=this.provider.listKakaoChannelCategories;if(typeof e!=="function")return y(T(this.provider.id,"categories"));return e.call(this.provider)}async auth(e){let r=this.provider.requestKakaoChannelAuth;if(typeof r!=="function")return y(T(this.provider.id,"auth"));return r.call(this.provider,e)}async add(e){let r=this.provider.addKakaoChannel;if(typeof r!=="function")return y(T(this.provider.id,"add"));return r.call(this.provider,e)}}class L{provider;mode="manual";constructor(e){this.provider=e}unsupportedMessage(e){return`Provider '${this.provider.id}' uses manual Kakao channel onboarding. Operation '${e}' is not available via API.`}}class x extends v{constructor(e){super(e)}}class F{provider;mode="none";constructor(e){this.provider=e}unsupportedMessage(e){return`Provider '${this.provider.id}' does not expose Kakao channel onboarding API. Operation '${e}' is unsupported.`}}function ce(e){if(typeof e!=="string")return;let r=e.trim();return r.length>0?r.toLowerCase():void 0}function fe(e,r){switch(e){case"aligo":return new v(r);case"mock":return new x(r);default:return typeof r.listKakaoChannels==="function"?new v(r):void 0}}class D{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(e,r=new S){this.provider=e;if(this.capability=r.resolve(e),this.providerType=ce(this.capability.providerType),this.capability.mode==="api")this.apiAdapter=fe(this.providerType,this.provider);else if(this.providerType==="iwinv")this.iwinvAdapter=new L(this.provider);else if(this.providerType==="solapi")this.solapiAdapter=new F(this.provider)}getCapability(){return this.capability}unsupported(e){let r=(()=>{if(this.capability.mode==="manual"){if(this.iwinvAdapter)return this.iwinvAdapter.unsupportedMessage(e);return`Provider '${this.provider.id}' requires manual Kakao channel onboarding. Operation '${e}' is unavailable via API.`}if(this.capability.mode==="none"){if(this.solapiAdapter)return this.solapiAdapter.unsupportedMessage(e);return`Provider '${this.provider.id}' does not support Kakao channel onboarding API operation '${e}'.`}return`Provider '${this.provider.id}' does not support Kakao channel onboarding API operation '${e}'.`})();return y(new c("INVALID_REQUEST",r,{providerId:this.provider.id,mode:this.capability.mode,operation:e}))}ensureApi(e){if(this.capability.mode!=="api")return this.unsupported(e);if(!this.apiAdapter)return y(new c("INVALID_REQUEST",`Provider '${this.provider.id}' is marked as api mode but does not expose kakao channel operations`,{providerId:this.provider.id,mode:this.capability.mode,operation:e}));return _(void 0)}async list(e){let r=this.ensureApi("list");if(r.isFailure)return r;let o=this.apiAdapter;if(!o)return this.unsupported("list");let t=await o.list(e);if(t.isFailure)return t;return _(t.value.map((i)=>({source:"api",providerId:i.providerId||this.provider.id,senderKey:i.senderKey,...i.plusId?{plusId:i.plusId}:{},...i.name?{name:i.name}:{},...i.status?{status:i.status}:{}})))}async categories(){let e=this.ensureApi("categories");if(e.isFailure)return e;let r=this.apiAdapter;if(!r)return this.unsupported("categories");return r.categories()}async auth(e){let r=this.ensureApi("auth");if(r.isFailure)return r;let o=this.apiAdapter;if(!o)return this.unsupported("auth");return o.auth(e)}async add(e){let r=this.ensureApi("add");if(r.isFailure)return r;let o=this.apiAdapter;if(!o)return this.unsupported("add");return o.add(e)}}
|
|
2
|
+
|
|
3
|
+
//# debugId=9ADA096CFFB00B6E64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var s=Object.defineProperty;var In=(n,f)=>{for(var K in f)s(n,K,{get:f[K],enumerable:!0,configurable:!0,set:(I)=>f[K]=()=>I})};var _;((P)=>{P.INVALID_REQUEST="INVALID_REQUEST";P.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";P.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";P.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";P.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";P.NETWORK_ERROR="NETWORK_ERROR";P.NETWORK_TIMEOUT="NETWORK_TIMEOUT";P.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";P.REQUEST_ABORTED="REQUEST_ABORTED";P.PROVIDER_ERROR="PROVIDER_ERROR";P.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";P.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";P.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";P.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";P.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";P.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";P.UNKNOWN_ERROR="UNKNOWN_ERROR"})(_||={});var a={["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"},["REQUEST_ABORTED"]:{ko:"요청이 취소되었습니다",en:"Request aborted"},["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"}},hn=new Set(Object.values(_));var T=(n)=>{if(typeof n!=="number"||Number.isNaN(n)||!Number.isFinite(n))return;return Math.trunc(n)};class Q extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(n,f,K,I={}){super(f);if(this.name="KMsgError",this.code=n,this.details=K,this.providerErrorCode=I.providerErrorCode,this.providerErrorText=I.providerErrorText,this.httpStatus=T(I.httpStatus),this.requestId=typeof I.requestId==="string"?I.requestId:void 0,this.retryAfterMs=T(I.retryAfterMs),this.attempt=T(I.attempt),Array.isArray(I.causeChain))this.causeChain=I.causeChain;else if(I.causeChain!==void 0)this.causeChain=[I.causeChain];let h=Error.captureStackTrace;if(h)h(this,Q)}getLocalizedMessage(n="ko"){let f=a[this.code];if(f?.[n])return f[n];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 N=(n)=>({isSuccess:!0,isFailure:!1,value:n}),J=(n)=>({isSuccess:!1,isFailure:!0,error:n});function k(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f:void 0}function x(n){if(!n)return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function c(n){let f=n.config&&typeof n.config==="object"?n.config:{},K=k(f.senderKey)??k(f.kakaoPfId)??k(f.profileId),I=k(f.plusId);if(x(n.type)==="solapi")return{senderKey:k(f.kakaoPfId)??K,...I?{plusId:I}:{}};return{...K?{senderKey:K}:{},...I?{plusId:I}:{}}}function o(n){return[n.providerId??"",n.senderKey??"",n.plusId??"",n.source].join("|")}function m(n){if(!Array.isArray(n)||n.length!==1)return;return k(n[0]?.id)}class l{config;constructor(n){this.config=n}list(n){let f=k(n?.providerId),K=this.config.aliases?.kakaoChannels??{},I=[],h=new Set,D=(g)=>{if(f&&g.providerId!==f)return;let $=o(g);if(h.has($))return;h.add($),I.push(g)};for(let[g,$]of Object.entries(K)){let C=k($.providerId);if(!C)continue;let O=k($.senderKey),F=k($.plusId);if(!O&&!F)continue;D({source:"config",alias:g,providerId:C,...O?{senderKey:O}:{},...F?{plusId:F}:{},...k($.name)?{name:k($.name)}:{}})}let H=this.config.defaults?.kakao,X=k(H?.channel),G=X?K[X]:void 0,V=k(G?.providerId)??k(this.config.routing?.defaultProviderId)??m(this.config.providers),U=k(H?.senderKey)??k(G?.senderKey),Y=k(H?.plusId)??k(G?.plusId);if(V&&(U||Y))D({source:"config",...X?{alias:X}:{},providerId:V,...U?{senderKey:U}:{},...Y?{plusId:Y}:{},...k(G?.name)?{name:k(G?.name)}:{}});for(let g of this.config.providers??[]){let $=k(g.id);if(!$)continue;let C=c(g);if(!C.senderKey&&!C.plusId)continue;D({source:"config",providerId:$,...C.senderKey?{senderKey:C.senderKey}:{},...C.plusId?{plusId:C.plusId}:{}})}return I}resolve(n){let f=this.config.aliases?.kakaoChannels??{},K=k(n?.channelAlias),I=K?f[K]:void 0;if(K&&n?.strictAlias===!0&&!I)throw new Q("INVALID_REQUEST",`Unknown kakao channel alias: ${K}`);let h=this.config.defaults?.kakao,D=k(h?.channel),H=D?f[D]:void 0,X=k(n?.providerId),G=k(I?.providerId),V=k(H?.providerId),U=k(this.config.routing?.defaultProviderId),Y=m(this.config.providers),g,$="unknown";if(X)g=X,$="explicit";else if(G)g=G,$="alias";else if(V)g=V,$="defaults";else if(U)g=U,$="routing";else if(Y)g=Y,$="single_provider";let C=g?(this.config.providers??[]).find((t)=>t.id===g):void 0,O=C?c(C):{},F=k(n?.senderKey),P=k(I?.senderKey),E=k(h?.senderKey),M=k(H?.senderKey),z=k(O.senderKey),p=k(n?.plusId),v=k(I?.plusId),i=k(h?.plusId),y=k(H?.plusId),d=k(O.plusId),Z,w;if(F)Z=F,w="explicit";else if(P)Z=P,w="alias";else if(E)Z=E,w="defaults";else if(M)Z=M,w="defaults";else if(z)Z=z,w="provider_config";let W,q;if(p)W=p,q="explicit";else if(v)W=v,q="alias";else if(i)W=i,q="defaults";else if(y)W=y,q="defaults";else if(d)W=d,q="provider_config";return{...K?{alias:K}:{},...g?{providerId:g}:{},...x(C?.type)?{providerType:x(C?.type)}:{},...Z?{senderKey:Z}:{},...W?{plusId:W}:{},...k(I?.name)?{name:k(I?.name)}:k(H?.name)?{name:k(H?.name)}:{},providerIdSource:$,...w?{senderKeySource:w}:{},...q?{plusIdSource:q}:{}}}getAlias(n){let f=k(n);if(!f)return;return this.config.aliases?.kakaoChannels?.[f]}}function B(n){return typeof n==="function"}function r(n){if(!B(n.getOnboardingSpec))return;try{return n.getOnboardingSpec()}catch{return}}function e(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function nn(n,f){if(n?.channelOnboarding){if(n.channelOnboarding==="api"&&!f)return"none";return n.channelOnboarding}return f?"api":"none"}class L{resolve(n){let f=r(n),K={list:B(n.listKakaoChannels),categories:B(n.listKakaoChannelCategories),auth:B(n.requestKakaoChannelAuth),add:B(n.addKakaoChannel)},I=e(f?.providerId),h=nn(f,K.list);return{providerId:n.id,...I?{providerType:I}:{},mode:h,supports:K}}}function j(n,f){return new Q("INVALID_REQUEST",`Provider '${n}' does not support kakao channel api operation '${f}'`,{providerId:n,operation:f})}class A{provider;constructor(n){this.provider=n}async list(n){let f=this.provider.listKakaoChannels;if(typeof f!=="function")return J(j(this.provider.id,"list"));return f.call(this.provider,n)}async categories(){let n=this.provider.listKakaoChannelCategories;if(typeof n!=="function")return J(j(this.provider.id,"categories"));return n.call(this.provider)}async auth(n){let f=this.provider.requestKakaoChannelAuth;if(typeof f!=="function")return J(j(this.provider.id,"auth"));return f.call(this.provider,n)}async add(n){let f=this.provider.addKakaoChannel;if(typeof f!=="function")return J(j(this.provider.id,"add"));return f.call(this.provider,n)}}class R{provider;mode="manual";constructor(n){this.provider=n}unsupportedMessage(n){return`Provider '${this.provider.id}' uses manual Kakao channel onboarding. Operation '${n}' is not available via API.`}}class S extends A{constructor(n){super(n)}}class b{provider;mode="none";constructor(n){this.provider=n}unsupportedMessage(n){return`Provider '${this.provider.id}' does not expose Kakao channel onboarding API. Operation '${n}' is unsupported.`}}function fn(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function kn(n,f){switch(n){case"aligo":return new A(f);case"mock":return new S(f);default:return typeof f.listKakaoChannels==="function"?new A(f):void 0}}class u{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(n,f=new L){this.provider=n;if(this.capability=f.resolve(n),this.providerType=fn(this.capability.providerType),this.capability.mode==="api")this.apiAdapter=kn(this.providerType,this.provider);else if(this.providerType==="iwinv")this.iwinvAdapter=new R(this.provider);else if(this.providerType==="solapi")this.solapiAdapter=new b(this.provider)}getCapability(){return this.capability}unsupported(n){let f=(()=>{if(this.capability.mode==="manual"){if(this.iwinvAdapter)return this.iwinvAdapter.unsupportedMessage(n);return`Provider '${this.provider.id}' requires manual Kakao channel onboarding. Operation '${n}' is unavailable via API.`}if(this.capability.mode==="none"){if(this.solapiAdapter)return this.solapiAdapter.unsupportedMessage(n);return`Provider '${this.provider.id}' does not support Kakao channel onboarding API operation '${n}'.`}return`Provider '${this.provider.id}' does not support Kakao channel onboarding API operation '${n}'.`})();return J(new Q("INVALID_REQUEST",f,{providerId:this.provider.id,mode:this.capability.mode,operation:n}))}ensureApi(n){if(this.capability.mode!=="api")return this.unsupported(n);if(!this.apiAdapter)return J(new Q("INVALID_REQUEST",`Provider '${this.provider.id}' is marked as api mode but does not expose kakao channel operations`,{providerId:this.provider.id,mode:this.capability.mode,operation:n}));return N(void 0)}async list(n){let f=this.ensureApi("list");if(f.isFailure)return f;let K=this.apiAdapter;if(!K)return this.unsupported("list");let I=await K.list(n);if(I.isFailure)return I;return N(I.value.map((h)=>({source:"api",providerId:h.providerId||this.provider.id,senderKey:h.senderKey,...h.plusId?{plusId:h.plusId}:{},...h.name?{name:h.name}:{},...h.status?{status:h.status}:{}})))}async categories(){let n=this.ensureApi("categories");if(n.isFailure)return n;let f=this.apiAdapter;if(!f)return this.unsupported("categories");return f.categories()}async auth(n){let f=this.ensureApi("auth");if(f.isFailure)return f;let K=this.apiAdapter;if(!K)return this.unsupported("auth");return K.auth(n)}async add(n){let f=this.ensureApi("add");if(f.isFailure)return f;let K=this.apiAdapter;if(!K)return this.unsupported("add");return K.add(n)}}export{u as KakaoChannelLifecycleService,L as KakaoChannelCapabilityService,l as KakaoChannelBindingResolver};
|
|
1
|
+
var P;((a)=>{a.INVALID_REQUEST="INVALID_REQUEST";a.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";a.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";a.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";a.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";a.NETWORK_ERROR="NETWORK_ERROR";a.NETWORK_TIMEOUT="NETWORK_TIMEOUT";a.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";a.REQUEST_ABORTED="REQUEST_ABORTED";a.PROVIDER_ERROR="PROVIDER_ERROR";a.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";a.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";a.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";a.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";a.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";a.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";a.UNKNOWN_ERROR="UNKNOWN_ERROR"})(P||={});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"},["REQUEST_ABORTED"]:{ko:"요청이 취소되었습니다",en:"Request aborted"},["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"}},te=new Set(Object.values(P));var M=(e)=>{if(typeof e!=="number"||Number.isNaN(e)||!Number.isFinite(e))return;return Math.trunc(e)};class c extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(e,r,o,t={}){super(r);if(this.name="KMsgError",this.code=e,this.details=o,this.providerErrorCode=t.providerErrorCode,this.providerErrorText=t.providerErrorText,this.httpStatus=M(t.httpStatus),this.requestId=typeof t.requestId==="string"?t.requestId:void 0,this.retryAfterMs=M(t.retryAfterMs),this.attempt=M(t.attempt),Array.isArray(t.causeChain))this.causeChain=t.causeChain;else if(t.causeChain!==void 0)this.causeChain=[t.causeChain];let i=Error.captureStackTrace;if(i)i(this,c)}getLocalizedMessage(e="ko"){let r=G[this.code];if(r?.[e])return r[e];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 O=(e)=>({isSuccess:!0,isFailure:!1,value:e}),y=(e)=>({isSuccess:!1,isFailure:!0,error:e});function n(e){if(typeof e!=="string")return;let r=e.trim();return r.length>0?r:void 0}function _(e){if(!e)return;let r=e.trim();return r.length>0?r.toLowerCase():void 0}function H(e){let r=e.config&&typeof e.config==="object"?e.config:{},o=n(r.senderKey)??n(r.kakaoPfId)??n(r.profileId),t=n(r.plusId);if(_(e.type)==="solapi")return{senderKey:n(r.kakaoPfId)??o,...t?{plusId:t}:{}};return{...o?{senderKey:o}:{},...t?{plusId:t}:{}}}function X(e){return[e.providerId??"",e.senderKey??"",e.plusId??"",e.source].join("|")}function q(e){if(!Array.isArray(e)||e.length!==1)return;return n(e[0]?.id)}class W{config;constructor(e){this.config=e}list(e){let r=n(e?.providerId),o=this.config.aliases?.kakaoChannels??{},t=[],i=new Set,m=(s)=>{if(r&&s.providerId!==r)return;let d=X(s);if(i.has(d))return;i.add(d),t.push(s)};for(let[s,d]of Object.entries(o)){let u=n(d.providerId);if(!u)continue;let A=n(d.senderKey),b=n(d.plusId);if(!A&&!b)continue;m({source:"config",alias:s,providerId:u,...A?{senderKey:A}:{},...b?{plusId:b}:{},...n(d.name)?{name:n(d.name)}:{}})}let l=this.config.defaults?.kakao,p=n(l?.channel),f=p?o[p]:void 0,K=n(f?.providerId)??n(this.config.routing?.defaultProviderId)??q(this.config.providers),g=n(l?.senderKey)??n(f?.senderKey),k=n(l?.plusId)??n(f?.plusId);if(K&&(g||k))m({source:"config",...p?{alias:p}:{},providerId:K,...g?{senderKey:g}:{},...k?{plusId:k}:{},...n(f?.name)?{name:n(f?.name)}:{}});for(let s of this.config.providers??[]){let d=n(s.id);if(!d)continue;let u=H(s);if(!u.senderKey&&!u.plusId)continue;m({source:"config",providerId:d,...u.senderKey?{senderKey:u.senderKey}:{},...u.plusId?{plusId:u.plusId}:{}})}return t}resolve(e){let r=this.config.aliases?.kakaoChannels??{},o=n(e?.channelAlias),t=o?r[o]:void 0;if(o&&e?.strictAlias===!0&&!t)throw new c("INVALID_REQUEST",`Unknown kakao channel alias: ${o}`);let i=this.config.defaults?.kakao,m=n(i?.channel),l=m?r[m]:void 0,p=n(e?.providerId),f=n(t?.providerId),K=n(l?.providerId),g=n(this.config.routing?.defaultProviderId),k=q(this.config.providers),s,d="unknown";if(p)s=p,d="explicit";else if(f)s=f,d="alias";else if(K)s=K,d="defaults";else if(g)s=g,d="routing";else if(k)s=k,d="single_provider";let u=s?(this.config.providers??[]).find((Q)=>Q.id===s):void 0,A=u?H(u):{},b=n(e?.senderKey),a=n(t?.senderKey),x=n(i?.senderKey),F=n(l?.senderKey),D=n(A.senderKey),U=n(e?.plusId),z=n(t?.plusId),B=n(i?.plusId),Y=n(l?.plusId),V=n(A.plusId),E,C;if(b)E=b,C="explicit";else if(a)E=a,C="alias";else if(x)E=x,C="defaults";else if(F)E=F,C="defaults";else if(D)E=D,C="provider_config";let h,R;if(U)h=U,R="explicit";else if(z)h=z,R="alias";else if(B)h=B,R="defaults";else if(Y)h=Y,R="defaults";else if(V)h=V,R="provider_config";return{...o?{alias:o}:{},...s?{providerId:s}:{},..._(u?.type)?{providerType:_(u?.type)}:{},...E?{senderKey:E}:{},...h?{plusId:h}:{},...n(t?.name)?{name:n(t?.name)}:n(l?.name)?{name:n(l?.name)}:{},providerIdSource:d,...C?{senderKeySource:C}:{},...R?{plusIdSource:R}:{}}}getAlias(e){let r=n(e);if(!r)return;return this.config.aliases?.kakaoChannels?.[r]}}function I(e){return typeof e==="function"}function J(e){if(!I(e.getOnboardingSpec))return;try{return e.getOnboardingSpec()}catch{return}}function Z(e){if(typeof e!=="string")return;let r=e.trim();return r.length>0?r.toLowerCase():void 0}function ee(e,r){if(e?.channelOnboarding){if(e.channelOnboarding==="api"&&!r)return"none";return e.channelOnboarding}return r?"api":"none"}class S{resolve(e){let r=J(e),o={list:I(e.listKakaoChannels),categories:I(e.listKakaoChannelCategories),auth:I(e.requestKakaoChannelAuth),add:I(e.addKakaoChannel)},t=Z(r?.providerId),i=ee(r,o.list);return{providerId:e.id,...t?{providerType:t}:{},mode:i,supports:o}}}function T(e,r){return new c("INVALID_REQUEST",`Provider '${e}' does not support kakao channel api operation '${r}'`,{providerId:e,operation:r})}class v{provider;constructor(e){this.provider=e}async list(e){let r=this.provider.listKakaoChannels;if(typeof r!=="function")return y(T(this.provider.id,"list"));return r.call(this.provider,e)}async categories(){let e=this.provider.listKakaoChannelCategories;if(typeof e!=="function")return y(T(this.provider.id,"categories"));return e.call(this.provider)}async auth(e){let r=this.provider.requestKakaoChannelAuth;if(typeof r!=="function")return y(T(this.provider.id,"auth"));return r.call(this.provider,e)}async add(e){let r=this.provider.addKakaoChannel;if(typeof r!=="function")return y(T(this.provider.id,"add"));return r.call(this.provider,e)}}class w{provider;mode="manual";constructor(e){this.provider=e}unsupportedMessage(e){return`Provider '${this.provider.id}' uses manual Kakao channel onboarding. Operation '${e}' is not available via API.`}}class N extends v{constructor(e){super(e)}}class L{provider;mode="none";constructor(e){this.provider=e}unsupportedMessage(e){return`Provider '${this.provider.id}' does not expose Kakao channel onboarding API. Operation '${e}' is unsupported.`}}function re(e){if(typeof e!=="string")return;let r=e.trim();return r.length>0?r.toLowerCase():void 0}function ne(e,r){switch(e){case"aligo":return new v(r);case"mock":return new N(r);default:return typeof r.listKakaoChannels==="function"?new v(r):void 0}}class j{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(e,r=new S){this.provider=e;if(this.capability=r.resolve(e),this.providerType=re(this.capability.providerType),this.capability.mode==="api")this.apiAdapter=ne(this.providerType,this.provider);else if(this.providerType==="iwinv")this.iwinvAdapter=new w(this.provider);else if(this.providerType==="solapi")this.solapiAdapter=new L(this.provider)}getCapability(){return this.capability}unsupported(e){let r=(()=>{if(this.capability.mode==="manual"){if(this.iwinvAdapter)return this.iwinvAdapter.unsupportedMessage(e);return`Provider '${this.provider.id}' requires manual Kakao channel onboarding. Operation '${e}' is unavailable via API.`}if(this.capability.mode==="none"){if(this.solapiAdapter)return this.solapiAdapter.unsupportedMessage(e);return`Provider '${this.provider.id}' does not support Kakao channel onboarding API operation '${e}'.`}return`Provider '${this.provider.id}' does not support Kakao channel onboarding API operation '${e}'.`})();return y(new c("INVALID_REQUEST",r,{providerId:this.provider.id,mode:this.capability.mode,operation:e}))}ensureApi(e){if(this.capability.mode!=="api")return this.unsupported(e);if(!this.apiAdapter)return y(new c("INVALID_REQUEST",`Provider '${this.provider.id}' is marked as api mode but does not expose kakao channel operations`,{providerId:this.provider.id,mode:this.capability.mode,operation:e}));return O(void 0)}async list(e){let r=this.ensureApi("list");if(r.isFailure)return r;let o=this.apiAdapter;if(!o)return this.unsupported("list");let t=await o.list(e);if(t.isFailure)return t;return O(t.value.map((i)=>({source:"api",providerId:i.providerId||this.provider.id,senderKey:i.senderKey,...i.plusId?{plusId:i.plusId}:{},...i.name?{name:i.name}:{},...i.status?{status:i.status}:{}})))}async categories(){let e=this.ensureApi("categories");if(e.isFailure)return e;let r=this.apiAdapter;if(!r)return this.unsupported("categories");return r.categories()}async auth(e){let r=this.ensureApi("auth");if(r.isFailure)return r;let o=this.apiAdapter;if(!o)return this.unsupported("auth");return o.auth(e)}async add(e){let r=this.ensureApi("add");if(r.isFailure)return r;let o=this.apiAdapter;if(!o)return this.unsupported("add");return o.add(e)}}export{W as KakaoChannelBindingResolver,S as KakaoChannelCapabilityService,j as KakaoChannelLifecycleService};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=B879A3B0118C5EA164756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var{defineProperty:Q,getOwnPropertyNames:Et,getOwnPropertyDescriptor:Zt}=Object,Ct=Object.prototype.hasOwnProperty;function Rt(e){return this[e]}var St=(e)=>{var t=(Se??=new WeakMap).get(e),r;if(t)return t;if(t=Q({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var n of Et(e))if(!Ct.call(t,n))Q(t,n,{get:Rt.bind(e,n),enumerable:!(r=Zt(e,n))||r.enumerable})}return Se.set(e,t),t},Se;var Nt=(e)=>e;function It(e,t){this[e]=Nt.bind(null,t)}var kt=(e,t)=>{for(var r in t)Q(e,r,{get:t[r],enumerable:!0,configurable:!0,set:It.bind(t,r)})};var Zr={};kt(Zr,{ActionType:()=>J,BusinessVerifier:()=>Ce,ChannelCRUD:()=>Ae,ChannelCreateRequestSchema:()=>zr,ChannelFiltersSchema:()=>Pr,ChannelService:()=>Ze,ChannelStatus:()=>V,ChannelType:()=>L,DocumentStatus:()=>$e,DocumentType:()=>ye,KakaoChannelManager:()=>we,KakaoSenderNumberManager:()=>ze,PermissionManager:()=>Ee,PermissionScope:()=>Pe,ResourceType:()=>X,SenderNumberCategory:()=>H,SenderNumberCreateRequestSchema:()=>Ar,SenderNumberFiltersSchema:()=>Er,SenderNumberStatus:()=>U,VerificationStatus:()=>xe});module.exports=St(Zr);function te(e){let t=Object.values(e).filter((n)=>typeof n==="number");return Object.entries(e).filter(([n,o])=>t.indexOf(+n)===-1).map(([n,o])=>o)}function Ne(e,t){if(typeof t==="bigint")return t.toString();return t}class Ie{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;if(e!==void 0)this._value=e(),this._getter=void 0;return this._value}}function ke(e){return new Ie(e)}function De(e){return e===null||e===void 0}function Me(e){let t=e.startsWith("^")?1:0,r=e.endsWith("$")?e.length-1:e.length;return e.slice(t,r)}function Te(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}var re="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function Oe(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}var Le=new Set(["string","number","symbol"]);function ne(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function B(e,t,r){let n=new e._zod.constr(t??e._zod.def);if(!t||r?.parent)n._zod.parent=e;return n}function x(e){let t=e;if(!t)return{};if(typeof t==="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}if(delete t.message,typeof t.error==="string")return{...t,error:()=>t.error};return t}function Ue(e){return Object.keys(e).filter((t)=>e[t]._zod.optin!==void 0&&e[t]._zod.optout==="optional")}function Z(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue!==!0)return!0;return!1}function Fe(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue===!1)return!0;return!1}function oe(e,t){return t.map((r)=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(e),r})}function F(e){return typeof e==="string"?e:e?.message}function ie(e,t,r){var n;for(let o=t;o<e.length;o++)(n=e[o]).schema??(n.schema=r)}function I(e,t,r){var n;let o=e.inst?._zod?.traits;if(o?.has("$ZodType"))if(o.has("$ZodCheck"))(n=e).schema??(n.schema=e.inst);else e.schema=e.inst;let i=e.schema!==e.inst?e.schema?._zod.def?.error:void 0,u=e.message?e.message:F(e.inst?._zod.def?.error?.(e))??F(i?.(e))??F(t?.error?.(e))??F(r.customError?.(e))??F(r.localeError?.(e))??"Invalid input",s={};for(let c of Object.keys(e)){if(c==="inst"||c==="schema"||c==="continue"||c==="input"||c==="__proto__")continue;s[c]=e[c]}if(s.path??(s.path=[]),s.message=u,t?.reportInput)s.input=e.input;return s}var Dt=/[\uD800-\uDBFF]/;function se(e){let t=e.length;if(!Dt.test(e))return t;let r=t;for(let n=0;n<t-1;n++)if((e.charCodeAt(n)&64512)===55296&&(e.charCodeAt(n+1)&64512)===56320)r--,n++;return r}function ue(e){if(Array.isArray(e))return"array";if(typeof e==="string")return"string";return"unknown"}function je(e,t){for(let r in t){let n=Object.getOwnPropertyDescriptor(t,r);if(n.get)Object.defineProperty(e,r,{...n,enumerable:!1});else Mt(e,r,n.value)}}function E(e,t,r,n=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:n,value:r}),r}function ae(e,t,r){return E(e,t,r,!1)}function Mt(e,t,r){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?r:E(this,t,r.bind(this))},set(n){E(this,t,n)}})}function Tt(e,t){let r=Object.getPrototypeOf(e);return t in r?void 0:r}var ee,z=!1,Ot={configurable:!0,get(){z=!0;return}};function k(e,t,r){let n=Object.getPrototypeOf(e._zod);if(t in n&&ee!==e._zod){ee=void 0;return}ee=e._zod,Object.defineProperty(n,t,{configurable:!0,get(){Object.defineProperty(this,t,Ot);let o=z;z=!1;try{let i=r(this);if(z)delete this[t];else Object.defineProperty(this,t,{configurable:!0,writable:!0,value:i});return z=z||o,i}catch(i){throw delete this[t],z=z||o,i}},set(o){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:o})}})}function Ve(e,t,r,n){let o=Tt(e,t);if(!o)return;Object.defineProperty(o,t,{configurable:!0,get(){let i={configurable:!0,writable:!0,enumerable:n,value:void 0};return Object.defineProperty(this,t,i),i.value=r(this),Object.defineProperty(this,t,i),i.value},set(i){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:n,value:i})}})}var Be;var ce={value:void 0,enumerable:!1},Ke="captureStackTrace"in Error?Error:null;function Lt(e){let t=Ke;if(t){let r=t.stackTraceLimit;if(typeof r==="number"){try{t.stackTraceLimit=0}catch{return Ke=null,new e}try{return new e}finally{t.stackTraceLimit=r}}}return new e}function m(e,t,r,n){let o={};function i(p){this.def=p,this.constr=f,this.traits=new Set}i.prototype=o;let u=r,s=u&&new WeakSet;function c(p,d){if(!p._zod){ce.value=new i(d);try{Object.defineProperty(p,"_zod",ce)}finally{ce.value=void 0}}else if(p._zod.traits.has(e))return;if(p._zod.traits.add(e),t(p,d),s){let g=Object.getPrototypeOf(p),y=p._zod.constr.prototype,w=g;while(w&&w!==y)w=Object.getPrototypeOf(w);let N=w??g;if(!s.has(N))s.add(N),je(N,u)}let h=f.prototype;for(let g in h){if(!Object.prototype.hasOwnProperty.call(h,g))continue;if(!(g in p))p[g]=h[g].bind(p)}}let l=n?.Parent??Object;class a extends l{}Object.defineProperty(a,"name",{value:e});function f(p){let d=n?.Parent?Lt(a):this;c(d,p);let h=d._zod.deferred;if(h){for(let y of h)y();d._zod.deferred=void 0}let g=globalThis.__zod_globalConfig?.postProcessor;if(g)g(d);return d}return Object.defineProperty(f,"init",{value:c}),Object.defineProperty(f,Symbol.hasInstance,{value:(p)=>{if(n?.Parent&&p instanceof n.Parent)return!0;return p?._zod?.traits?.has(e)}}),Object.defineProperty(f,"name",{value:e}),f}class A extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}(Be=globalThis).__zod_globalConfig??(Be.__zod_globalConfig={});var K=globalThis.__zod_globalConfig;function D(e){if(e)Object.assign(K,e);return K}function Ut(){let e=this._zod;return e.message??(e.message=JSON.stringify(e.def,Ne,2)),e.message}function Ft(e){this._zod.message=e}var jt={get:Ut,set:Ft,enumerable:!0,configurable:!0},pe={value:void 0,enumerable:!1},Ge=new WeakSet([Object.prototype,Error.prototype]),qe=(e,t)=>{e.name="$ZodError",pe.value=t,Object.defineProperty(e,"issues",pe),pe.value=void 0,Object.defineProperty(e,"message",jt);let r=Object.getPrototypeOf(e);if(!Ge.has(r))Ge.add(r),Object.defineProperty(r,"toString",{configurable:!0,enumerable:!1,get(){let n=()=>this.message;return Object.defineProperty(this,"toString",{value:n,configurable:!0,writable:!0}),n},set(n){Object.defineProperty(this,"toString",{value:n,configurable:!0,writable:!0})}})},Nr=m("$ZodError",qe),j=m("$ZodError",qe,void 0,{Parent:Error});var Bt=(e)=>{let t=(r,n,o,i)=>{let u=o?{...o,async:!1}:{async:!1},s=r._zod.run({value:n,issues:[]},u);if(s instanceof Promise)throw new A;if(s.issues.length){let c=new(i?.Err??e)(s.issues.map((l)=>I(l,u,D())));throw re(c,i?.callee??t),c}return s.value};return t},de=Bt(j),Kt=(e)=>{let t=async(r,n,o,i)=>{let u=o?{...o,async:!0}:{async:!0},s=r._zod.run({value:n,issues:[]},u);if(s instanceof Promise)s=await s;if(s.issues.length){let c=new(i?.Err??e)(s.issues.map((l)=>I(l,u,D())));throw re(c,i?.callee??t),c}return s.value};return t},fe=Kt(j),Gt=(e)=>(t,r,n)=>{let o=n?{...n,async:!1}:{async:!1},i=t._zod.run({value:r,issues:[]},o);if(i instanceof Promise)throw new A;return i.issues.length?We(e,i.issues,o):{success:!0,data:i.value}},me=Gt(j);function We(e,t,r){let n;return{success:!1,get error(){if(!n)n=new e(t.map((o)=>I(o,r,D()))),t=void 0,r=void 0;return n},set error(o){n=o,t=void 0,r=void 0}}}var qt=(e)=>async(t,r,n)=>{let o=n?{...n,async:!0}:{async:!0},i=t._zod.run({value:r,issues:[]},o);if(i instanceof Promise)i=await i;return i.issues.length?We(e,i.issues,o):{success:!0,data:i.value}},he=qt(j);var He=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var Xe=/^https?$/;var Je=/^[\s\S]{0,}$/;var Ye=/^(?:true|false)$/i;var M=m("$ZodCheck",(e,t)=>{var r;e._zod??(e._zod={}),e._zod.def=t,(r=e._zod).onattach??(r.onattach=[])});var et=(e)=>{let t=e.value;return!De(t)&&t.length!==void 0};var tt=m("$ZodCheckMaxLength",(e,t)=>{var r;M.init(e,t),(r=e._zod.def).when??(r.when=et),e._zod.check=(n)=>{let o=n.value,i=o.length;if((typeof o==="string"&&i>t.maximum?se(o):i)<=t.maximum)return;let s=ue(o);n.issues.push({origin:s,code:"too_big",maximum:t.maximum,inclusive:!0,input:o,inst:e,continue:!t.abort})}}),rt=m("$ZodCheckMinLength",(e,t)=>{var r;M.init(e,t),(r=e._zod.def).when??(r.when=et),e._zod.check=(n)=>{let o=n.value,i=o.length;if((typeof o==="string"&&i>=t.minimum&&i<t.minimum*2?se(o):i)>=t.minimum)return;let s=ue(o);n.issues.push({origin:s,code:"too_small",minimum:t.minimum,inclusive:!0,input:o,inst:e,continue:!t.abort})}});var ge=m("$ZodCheckStringFormat",(e,t)=>{var r,n;if(M.init(e,t),t.pattern)(r=e._zod).check??(r.check=(o)=>{if(t.pattern.lastIndex=0,t.pattern.test(o.value))return;o.issues.push({origin:"string",code:"invalid_format",format:t.format,input:o.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})});else(n=e._zod).check??(n.check=()=>{})}),nt=m("$ZodCheckRegex",(e,t)=>{ge.init(e,t),e._zod.check=(r)=>{if(t.pattern.lastIndex=0,t.pattern.test(r.value))return;r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}});var it={major:4,minor:6,patch:5};var P=m("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=it;let n=e._zod.def.checks,o=e._zod.traits.has("$ZodCheck")?[e,...n??[]]:n?.length?[...n]:[];for(let i of o)for(let u of i._zod.onattach)u(e);if(o.length===0)(r=e._zod).deferred??(r.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let i=(s,c,l)=>{if(s.memo)return s;let a=Z(s),f;for(let p of c){if(p._zod.def.when){if(Fe(s))continue;if(!p._zod.def.when(s))continue}else if(a)continue;let d=s.issues.length,h=p._zod.check(s);if(h instanceof Promise&&l?.async===!1)throw new A;if(f||h instanceof Promise)f=(f??Promise.resolve()).then(async()=>{if(await h,s.issues.length===d)return;if(ie(s.issues,d,e),!a)a=Z(s,d)});else{if(s.issues.length===d)continue;if(ie(s.issues,d,e),!a)a=Z(s,d)}}if(f)return f.then(()=>s);return s},u=(s,c,l)=>{if(Z(s))return s.aborted=!0,s;let a=i(c,o,l);if(a instanceof Promise){if(l.async===!1)throw new A;return a.then((f)=>e._zod.parse(f,l))}return e._zod.parse(a,l)};e._zod.run=(s,c)=>{if(c.skipChecks)return e._zod.parse(s,c);if(c.direction==="backward"){let a=e._zod.parse({value:s.value,issues:[]},{...c,skipChecks:!0});if(a instanceof Promise)return a.then((f)=>u(f,s,c));return u(a,s,c)}let l=e._zod.parse(s,c);if(l instanceof Promise){if(c.async===!1)throw new A;return l.then((a)=>i(a,o,c))}return i(l,o,c)}}},{get "~standard"(){return ae(this,"~standard",Xt(this))},set "~standard"(e){E(this,"~standard",e)}}),at=(e,t)=>e.issues.length?{issues:e.issues.map((r)=>I(r,t,D()))}:{value:e.value};async function Ht(e,t){let r={async:!0};return at(await e._zod.run({value:t,issues:[]},r),r)}function Xt(e){return{validate:(t)=>{let r={async:!1};try{let n=e._zod.run({value:t,issues:[]},r);if(!(n instanceof Promise))return at(n,r)}catch(n){}return Ht(e,t)},vendor:"zod",version:1}}var _e=m("$ZodString",(e,t)=>{P.init(e,t),e._zod.pattern=t.pattern??Je,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=String(r.value)}catch(o){}if(typeof r.value==="string")return r;return r.issues.push({expected:"string",code:"invalid_type",input:r.value,inst:e}),r}}),W=m("$ZodStringFormat",(e,t)=>{ge.init(e,t),_e.init(e,t)});var ct=m("$ZodEmail",(e,t)=>{t.pattern??(t.pattern=He),W.init(e,t)}),lt=1,G=2;function Jt(e){try{if(typeof URL<"u"&&typeof URL.canParse==="function")return URL.canParse(e);return new URL(e),!0}catch{return!1}}function Yt(e,t){if(!("normalize"in t)&&!("hostname"in t)&&!("protocol"in t))return Jt(e)||G;return Qt(e,t)}function Qt(e,t){if(!t.normalize&&t.protocol?.source===Xe.source&&!/^https?:\/\//i.test(e))return lt;try{if(typeof URL<"u"){let r=URL;if(typeof r.parse==="function")return r.parse(e)??G}return new URL(e)}catch{return G}}var er=/[\t\n\r]/g;function st(e){return e.replace(er,"")}function tr(e,t){return t.lastIndex=0,t.test(e.hostname)}function rr(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(":")?e.protocol.slice(0,-1):e.protocol)}var pt=m("$ZodURL",(e,t)=>{W.init(e,t),e._zod.check=(r)=>{try{let n=r.value.trim(),o=Yt(n,t);if(o===lt){r.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:r.value,inst:e,continue:!t.abort});return}if(o===G){r.issues.push({code:"invalid_format",format:"url",input:r.value,inst:e,continue:!t.abort});return}if(o===!0){r.value=st(n);return}if(t.hostname&&!tr(o,t.hostname))r.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:t.hostname.source,input:r.value,inst:e,continue:!t.abort});if(t.protocol&&!rr(o,t.protocol))r.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:t.protocol.source,input:r.value,inst:e,continue:!t.abort});r.value=t.normalize?o.href:st(n);return}catch(n){r.issues.push({code:"invalid_format",format:"url",input:r.value,inst:e,continue:!t.abort})}}});var dt=m("$ZodBoolean",(e,t)=>{P.init(e,t),e._zod.pattern=Ye,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=Boolean(r.value)}catch(i){}let o=r.value;if(typeof o==="boolean")return r;return r.issues.push({expected:"boolean",code:"invalid_type",input:o,inst:e}),r}});var ft=m("$ZodDate",(e,t)=>{P.init(e,t),e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=new Date(r.value)}catch(s){}let o=r.value,i=o instanceof Date;if(i&&!Number.isNaN(o.getTime()))return r;return r.issues.push({expected:"date",code:"invalid_type",input:o,...i?{received:"Invalid Date"}:{},inst:e}),r}});function q(e,t,r,n,o,i){let u=r in n,s=i==="optional";if(!u&&s&&o==="optional")return;if(e.issues.length){if(o!==void 0&&s&&!u)return;t.issues.push(...oe(r,e.issues))}if(!u&&o===void 0){if(!e.issues.length)t.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[r]});return}if(e.value===void 0){if(u||o==="defaulted"&&!s)t.value[r]=void 0}else t.value[r]=e.value}var nr=[];function or(e){let t=Object.keys(e.shape),r=Object.getOwnPropertySymbols(e.shape),n=r.length?r:nr,o=n.length?[...t,...n]:t;for(let u of o)if(!e.shape?.[u]?._zod?.traits?.has("$ZodType"))throw Error(`Invalid element at key "${String(u)}": expected a Zod schema`);let i=Ue(e.shape);return{...e,allKeys:o,symbolKeys:n,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(i)}}function ir(e,t,r,n,o,i,u){let s=[],c=o.keySet,l=o.catchall._zod,a=l.def.type,{optin:f,optout:p}=l,d=0;for(let h in t){if(u&&r.issues.length!==d){if(Z(r,d))break;d=r.issues.length}if(c.has(h))continue;if(h==="__proto__"){if(a==="never")s.push(h);continue}if(a==="never"){s.push(h);continue}let g=l.run({value:t[h],issues:[]},n);if(g instanceof Promise)e.push(g.then((y)=>q(y,r,h,t,f,p)));else q(g,r,h,t,f,p)}if(s.length)r.issues.push({code:"unrecognized_keys",keys:s,input:t,inst:i,continue:!0});if(!e.length)return r;return Promise.all(e).then(()=>r)}var mt=m("$ZodObject",(e,t)=>{P.init(e,t);let r=Object.getOwnPropertyDescriptor(t,"shape"),n=r?.get?r.get.raw:t.shape??{};if(n){let l=()=>{let a={...n};return Object.defineProperty(t,"shape",{value:a}),l.raw=a,a};l.raw=n,Object.defineProperty(t,"shape",{get:l})}let o=ke(()=>or(t));k(e,"propValues",(l)=>{let a=l.def.shape,f={};for(let p in a){let d=a[p]._zod;if(d.values){if(!Object.prototype.hasOwnProperty.call(f,p))Te(f,p,new Set);for(let h of d.values)f[p].add(h);if(d.optin!==void 0)f[p].add(void 0)}}return f});let i=Oe,u=t.catchall,s,c=K.memoizer;c?.attach(e),e._zod.parse=(l,a)=>{s??(s=o.value);let f=l.value;if(!i(f))return l.issues.push({expected:"object",code:"invalid_type",input:f,inst:e}),l;l.value=c?c.alloc(e,l,{},a):{};let p=[],d=s.shape,h=a?.abortEarly,g=l.issues.length;for(let y of s.allKeys){if(h&&l.issues.length!==g){if(Z(l,g))break;g=l.issues.length}if(y==="__proto__")continue;let w=d[y],N=w._zod.optin,Re=w._zod.optout,Y=w._zod.run({value:f[y],issues:[]},a);if(Y instanceof Promise)p.push(Y.then((Pt)=>q(Pt,l,y,f,N,Re)));else q(Y,l,y,f,N,Re)}if(!u)return p.length?Promise.all(p).then(()=>l):l;return ir(p,f,l,a,o.value,e,h===!0)}});var ht=m("$ZodEnum",(e,t)=>{P.init(e,t);let r=te(t.entries),n=new Set(r);e._zod.values=n,k(e,"pattern",(o)=>{let i=te(o.def.entries).filter((u)=>Le.has(typeof u));return new RegExp(i.length?`^(${i.map((u)=>ne(u.toString())).join("|")})$`:"^[^\\s\\S]$")}),e._zod.parse=(o,i)=>{let u=o.value;if(n.has(u))return o;return o.issues.push({code:"invalid_value",values:r,input:u,inst:e}),o}});function ut(e,t){return e.value=t.issues.length?void 0:t.value,e}var gt=m("$ZodOptional",(e,t)=>{P.init(e,t),k(e,"optin",(r)=>r.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),e._zod.optout="optional",k(e,"values",(r)=>{let n=r.def.innerType._zod.values;return n?new Set([...n,void 0]):void 0}),k(e,"pattern",(r)=>{let n=r.def.innerType._zod.pattern;return n?new RegExp(`^(${Me(n.source)})?$`):void 0}),e._zod.parse=(r,n)=>{if(r.value===void 0){if(t.innerType._zod.optin!=="defaulted")return r;let o=t.innerType._zod.run({value:r.value,issues:[]},n);if(o instanceof Promise)return o.then((i)=>ut(r,i));return ut(r,o)}return t.innerType._zod.run(r,n)}});function ur(e){if(e.checks)e.checks=[...e.checks];return e}function _t(e,t){return new e(ur({type:"string",...x(t)}))}function bt(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...x(t)})}function vt(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...x(t)})}function xt(e,t){return new e({type:"boolean",...x(t)})}function yt(e,t){return new e({type:"date",...x(t)})}function be(e,t){return new tt({check:"max_length",...x(t),maximum:e})}function v(e,t){return new rt({check:"min_length",...x(t),minimum:e})}function ve(e,t){return new nt({check:"string_format",format:"regex",...x(t),pattern:e})}var T=m("ZodMiniType",(e,t)=>{if(!e._zod)throw Error("Uninitialized schema in ZodMiniType.");P.init(e,t),e.def=t,e.type=t.type},{get with(){return this.check},set with(e){E(this,"with",e)},parse(e,t){return de(this,e,t,{callee:this.parse})},parseAsync(e,t){return fe(this,e,t,{callee:this.parseAsync})},safeParse(e,t){return me(this,e,t)},safeParseAsync(e,t){return he(this,e,t)},check(...e){let t=this.def;return this.clone({...t,checks:[...t.checks??[],...e.map((r)=>typeof r==="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]},{parent:!0})},clone(e,t){return B(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},apply(e,...t){return t.length===0?e(this):e(this,...t)}}),$t=m("ZodMiniString",(e,t)=>{_e.init(e,t),T.init(e,t)});function _(e){return _t($t,e)}var wt=m("ZodMiniStringFormat",(e,t)=>{W.init(e,t),$t.init(e,t)}),cr=m("ZodMiniEmail",(e,t)=>{ct.init(e,t),wt.init(e,t)});function zt(e){return bt(cr,e)}var lr=m("ZodMiniURL",(e,t)=>{pt.init(e,t),wt.init(e,t)});function pr(e){return vt(lr,e)}var dr=m("ZodMiniBoolean",(e,t)=>{dt.init(e,t),T.init(e,t)});function fr(e){return xt(dr,e)}var mr=m("ZodMiniDate",(e,t)=>{ft.init(e,t),T.init(e,t)});function At(e){return yt(mr,e)}var hr=m("ZodMiniObject",(e,t)=>{mt.init(e,t),T.init(e,t),Ve(e,"shape",(r)=>r._zod.def.shape,!1)});function R(e,t){let r={type:"object",shape:e??{},...x(t)};return new hr(r)}var gr=m("ZodMiniEnum",(e,t)=>{ht.init(e,t),T.init(e,t),e.options=[...e._zod.values]});function O(e,t){return new gr({type:"enum",entries:e,...x(t)})}var _r=m("ZodMiniOptional",(e,t)=>{gt.init(e,t),T.init(e,t)});function b(e){return new _r({type:"optional",innerType:e})}var L;((i)=>{i.KAKAO_ALIMTALK="KAKAO_ALIMTALK";i.KAKAO_FRIENDTALK="KAKAO_FRIENDTALK";i.SMS="SMS";i.LMS="LMS";i.MMS="MMS"})(L||={});var V;((u)=>{u.PENDING="PENDING";u.VERIFYING="VERIFYING";u.ACTIVE="ACTIVE";u.SUSPENDED="SUSPENDED";u.BLOCKED="BLOCKED";u.DELETED="DELETED"})(V||={});var U;((i)=>{i.PENDING="PENDING";i.VERIFYING="VERIFYING";i.VERIFIED="VERIFIED";i.REJECTED="REJECTED";i.BLOCKED="BLOCKED"})(U||={});var H;((o)=>{o.BUSINESS="BUSINESS";o.PERSONAL="PERSONAL";o.GOVERNMENT="GOVERNMENT";o.NON_PROFIT="NON_PROFIT"})(H||={});var xe;((i)=>{i.NOT_REQUIRED="NOT_REQUIRED";i.PENDING="PENDING";i.UNDER_REVIEW="UNDER_REVIEW";i.VERIFIED="VERIFIED";i.REJECTED="REJECTED"})(xe||={});var ye;((i)=>{i.BUSINESS_REGISTRATION="BUSINESS_REGISTRATION";i.BUSINESS_LICENSE="BUSINESS_LICENSE";i.ID_CARD="ID_CARD";i.AUTHORIZATION_LETTER="AUTHORIZATION_LETTER";i.OTHER="OTHER"})(ye||={});var $e;((n)=>{n.UPLOADED="UPLOADED";n.VERIFIED="VERIFIED";n.REJECTED="REJECTED"})($e||={});var yr=R({name:_().check(v(1)),registrationNumber:_().check(v(1)),category:_().check(v(1)),contactPerson:_().check(v(1)),contactEmail:zt(),contactPhone:_().check(ve(/^[0-9-+\s()]+$/))}),$r=R({plusFriendId:_().check(v(1)),brandName:_().check(v(1)),logoUrl:b(pr()),description:b(_().check(be(500)))}),wr=R({businessName:_().check(v(1)),businessRegistrationNumber:_().check(v(1)),contactPerson:_().check(v(1)),contactEmail:zt()}),zr=R({name:_().check(v(1),be(100)),type:O(L),provider:_().check(v(1)),profileKey:_().check(v(1)),businessInfo:b(yr),kakaoInfo:b($r)}),Ar=R({phoneNumber:_().check(ve(/^[0-9]{10,11}$/)),category:O(H),businessInfo:b(wr)}),Pr=R({provider:b(_()),type:b(O(L)),status:b(O(V)),createdAfter:b(At()),createdBefore:b(At())}),Er=R({channelId:b(_()),status:b(O(U)),category:b(O(H)),verified:b(fr())});class we{channels=new Map;async createChannel(e){this.validateKakaoChannelRequest(e);let t=this.generateChannelId(),r={id:t,name:e.name,provider:e.provider,type:e.type,status:"ACTIVE",profileKey:e.profileKey,senderNumbers:[],metadata:{businessInfo:e.businessInfo,kakaoInfo:e.kakaoInfo,limits:{dailyMessageLimit:1e4,monthlyMessageLimit:300000,rateLimit:10},features:{supportsBulkSending:!0,supportsScheduling:!0,supportsButtons:!0,maxButtonCount:5}},createdAt:new Date,updatedAt:new Date};return this.channels.set(t,r),r}validateKakaoChannelRequest(e){if(e.type!=="KAKAO_ALIMTALK"&&e.type!=="KAKAO_FRIENDTALK")throw Error("Invalid channel type for Kakao channel");if(!e.kakaoInfo?.plusFriendId)throw Error("Plus Friend ID is required for Kakao channels");if(!e.kakaoInfo?.brandName)throw Error("Brand name is required for Kakao channels");if(!this.isValidPlusFriendId(e.kakaoInfo.plusFriendId))throw Error("Invalid Plus Friend ID format")}isValidPlusFriendId(e){return/^@[a-zA-Z0-9_-]{3,30}$/.test(e)}async getChannel(e){return this.channels.get(e)||null}async updateChannel(e,t){let r=this.channels.get(e);if(!r)throw Error("Channel not found");if(t.metadata?.kakaoInfo?.plusFriendId&&!this.isValidPlusFriendId(t.metadata.kakaoInfo.plusFriendId))throw Error("Invalid Plus Friend ID format");return Object.assign(r,t,{updatedAt:new Date}),r}async deleteChannel(e){let t=this.channels.get(e);if(!t)return!1;return t.status="DELETED",t.updatedAt=new Date,!0}async listChannels(e){let t=Array.from(this.channels.values());if(e){if(e.status)t=t.filter((r)=>r.status===e.status);if(e.type)t=t.filter((r)=>r.type===e.type)}if(e?.status==="DELETED")return t;return t.filter((r)=>r.status!=="DELETED")}async suspendChannel(e,t){let r=this.channels.get(e);if(!r)throw Error("Channel not found");r.status="SUSPENDED",r.updatedAt=new Date}async reactivateChannel(e){let t=this.channels.get(e);if(!t)throw Error("Channel not found");if(t.status!=="SUSPENDED")throw Error("Channel is not suspended");t.status="ACTIVE",t.updatedAt=new Date}async checkChannelHealth(e){let t=this.channels.get(e);if(!t)throw Error("Channel not found");let r=[],n=[];if(t.status!=="ACTIVE")r.push(`Channel status is ${t.status}`);if(t.senderNumbers.length===0)n.push("Add at least one verified sender number");if(!t.metadata.businessInfo)n.push("Complete business information for better deliverability");return{isHealthy:r.length===0,issues:r,recommendations:n}}generateChannelId(){return`kakao_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}class ze{senderNumbers=new Map;async addSenderNumber(e,t){if(this.validatePhoneNumber(t.phoneNumber),this.findSenderNumberByPhone(t.phoneNumber))throw Error("Phone number is already registered");let n=this.generateSenderNumberId(),o={id:n,channelId:e,phoneNumber:t.phoneNumber,status:"PENDING",category:t.category,metadata:{businessName:t.businessInfo?.businessName,businessRegistrationNumber:t.businessInfo?.businessRegistrationNumber,contactPerson:t.businessInfo?.contactPerson,contactEmail:t.businessInfo?.contactEmail},createdAt:new Date,updatedAt:new Date};return this.senderNumbers.set(n,o),o}validatePhoneNumber(e){if(!/^(010|011|016|017|018|019)[0-9]{7,8}$/.test(e))throw Error("Invalid Korean phone number format")}findSenderNumberByPhone(e){return Array.from(this.senderNumbers.values()).find((t)=>t.phoneNumber===e)}async getSenderNumber(e){return this.senderNumbers.get(e)||null}async listSenderNumbers(e){let t=Array.from(this.senderNumbers.values());if(e){if(e.channelId)t=t.filter((r)=>r.channelId===e.channelId);if(e.status)t=t.filter((r)=>r.status===e.status);if(e.category)t=t.filter((r)=>r.category===e.category);if(e.verified!==void 0)if(e.verified)t=t.filter((r)=>r.status==="VERIFIED");else t=t.filter((r)=>r.status!=="VERIFIED")}return t}async updateSenderNumber(e,t){let r=this.senderNumbers.get(e);if(!r)throw Error("Sender number not found");let n={...t};delete n.id,delete n.phoneNumber,delete n.createdAt;let o=n.status!==void 0,i=o?n.status:r.status,u=r.verifiedAt,s=i==="VERIFIED"||r.status==="VERIFIED"||r.status==="BLOCKED"&&r.verifiedAt!==void 0;if(n.verifiedAt!==void 0){if(!s)throw Error("verifiedAt can only be set for verified sender numbers");u=n.verifiedAt}else if(i==="VERIFIED")u=r.verifiedAt??new Date;else if(o&&i!=="BLOCKED")u=void 0;return Object.assign(r,n,{verifiedAt:u,updatedAt:new Date}),r}async deleteSenderNumber(e){if(!this.senderNumbers.get(e))return!1;if(await this.isSenderNumberInUse(e))throw Error("Cannot delete sender number that is currently in use");return this.senderNumbers.delete(e),!0}async isSenderNumberInUse(e){return!1}async blockSenderNumber(e,t){let r=this.senderNumbers.get(e);if(!r)throw Error("Sender number not found");r.status="BLOCKED",r.updatedAt=new Date}async unblockSenderNumber(e){let t=this.senderNumbers.get(e);if(!t)throw Error("Sender number not found");if(t.status!=="BLOCKED")throw Error("Sender number is not blocked");t.status=t.verifiedAt?"VERIFIED":"PENDING",t.updatedAt=new Date}async validateSenderNumberForSending(e){let t=this.senderNumbers.get(e),r=[];if(!t)return r.push("Sender number not found"),{isValid:!1,errors:r};if(t.status!=="VERIFIED")r.push(`Sender number status is ${t.status}, must be verified`);if(!t.verifiedAt)r.push("Sender number has not been verified");if(t.verifiedAt){let n=new Date(Date.now()-31536000000);if(t.verifiedAt<n)r.push("Sender number verification has expired")}return{isValid:r.length===0,errors:r}}generateSenderNumberId(){return`sn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}class S{listenersMap=new Map;on(e,t){let r=this.listenersMap.get(e)??new Set;return r.add(t),this.listenersMap.set(e,r),this}addListener(e,t){return this.on(e,t)}off(e,t){let r=this.listenersMap.get(e);if(!r)return this;if(r.delete(t),r.size===0)this.listenersMap.delete(e);return this}removeListener(e,t){return this.off(e,t)}once(e,t){let r=(...n)=>{this.off(e,r),t(...n)};return this.on(e,r)}emit(e,...t){let r=this.listenersMap.get(e);if(!r||r.size===0)return!1;for(let n of[...r])n(...t);return!0}removeAllListeners(e){if(e)return this.listenersMap.delete(e),this;return this.listenersMap.clear(),this}listenerCount(e){return this.listenersMap.get(e)?.size??0}eventNames(){return[...this.listenersMap.keys()]}}class Ae extends S{options;channels=new Map;senderNumbers=new Map;auditLogs=[];cleanupTimer;defaultOptions={enableAuditLog:!0,enableEventEmission:!0,defaultPageSize:20,maxPageSize:100,enableSoftDelete:!0,autoCleanup:!0,cleanupInterval:3600000};constructor(e={}){super();this.options=e;if(this.options={...this.defaultOptions,...e},this.options.autoCleanup)this.startAutoCleanup()}async createChannel(e,t){let r=this.generateChannelId(),n={id:r,name:e.name,provider:e.provider,type:e.type,status:"ACTIVE",profileKey:e.profileKey,senderNumbers:[],metadata:{businessInfo:e.businessInfo,kakaoInfo:e.kakaoInfo,limits:this.getDefaultLimits(e.type),features:this.getDefaultFeatures(e.type)},createdAt:new Date,updatedAt:new Date};if(this.channels.set(r,n),this.options.enableAuditLog)this.addAuditLog("channel",r,"create",t,void 0,n);if(this.options.enableEventEmission)this.emit("channel:created",{channel:n,userId:t});return n}async getChannel(e,t){let r=this.channels.get(e);if(r&&this.options.enableAuditLog)this.addAuditLog("channel",e,"read",t);return r||null}async updateChannel(e,t,r){let n=this.channels.get(e);if(!n)throw Error(`Channel ${e} not found`);let o=this.options.enableAuditLog?{...n}:void 0,i={...n,...t,id:e,updatedAt:new Date};if(this.channels.set(e,i),this.options.enableAuditLog)this.addAuditLog("channel",e,"update",r,o,i);if(this.options.enableEventEmission)this.emit("channel:updated",{channel:i,previousChannel:n,userId:r});return i}async deleteChannel(e,t){let r=this.channels.get(e);if(!r)return!1;if(this.options.enableSoftDelete)r.status="DELETED",r.updatedAt=new Date;else this.channels.delete(e),this.removeSenderNumbersForChannel(e);if(this.options.enableAuditLog)this.addAuditLog("channel",e,"delete",t,r);if(this.options.enableEventEmission)this.emit("channel:deleted",{channel:r,userId:t});return!0}async listChannels(e={},t={page:1,limit:this.options.defaultPageSize}){let r=Array.from(this.channels.values());if(e.provider)r=r.filter((a)=>a.provider===e.provider);if(e.type)r=r.filter((a)=>a.type===e.type);if(e.status)r=r.filter((a)=>a.status===e.status);if(e.createdAfter)r=r.filter((a)=>a.createdAt>=e.createdAfter);if(e.createdBefore)r=r.filter((a)=>a.createdAt<=e.createdBefore);if(!e.status||e.status!=="DELETED")r=r.filter((a)=>a.status!=="DELETED");let n=t.sortBy||"createdAt",o=t.sortOrder||"desc";r.sort((a,f)=>{let p,d;switch(n){case"name":p=a.name,d=f.name;break;case"createdAt":p=a.createdAt.getTime(),d=f.createdAt.getTime();break;case"updatedAt":p=a.updatedAt.getTime(),d=f.updatedAt.getTime();break;default:p=a.createdAt.getTime(),d=f.createdAt.getTime()}if(o==="asc")return p<d?-1:p>d?1:0;else return p>d?-1:p<d?1:0});let i=r.length,u=Math.min(t.limit,this.options.maxPageSize),s=Math.max(1,t.page),c=(s-1)*u;return{data:r.slice(c,c+u),total:i,page:s,limit:u,totalPages:Math.ceil(i/u),hasNext:c+u<i,hasPrev:s>1}}async createSenderNumber(e,t,r){let n=this.channels.get(e);if(!n)throw Error(`Channel ${e} not found`);let o=this.generateSenderNumberId(),i={id:o,channelId:e,phoneNumber:t.phoneNumber,status:"PENDING",category:t.category,metadata:{businessName:t.businessInfo?.businessName,businessRegistrationNumber:t.businessInfo?.businessRegistrationNumber,contactPerson:t.businessInfo?.contactPerson,contactEmail:t.businessInfo?.contactEmail},createdAt:new Date,updatedAt:new Date};if(this.senderNumbers.set(o,i),n.senderNumbers.push(i),n.updatedAt=new Date,this.options.enableAuditLog)this.addAuditLog("senderNumber",o,"create",r,void 0,i);if(this.options.enableEventEmission)this.emit("senderNumber:created",{senderNumber:i,channelId:e,userId:r});return i}async getSenderNumber(e,t){let r=this.senderNumbers.get(e);if(r&&this.options.enableAuditLog)this.addAuditLog("senderNumber",e,"read",t);return r||null}async updateSenderNumber(e,t,r){let n=this.senderNumbers.get(e);if(!n)throw Error(`Sender number ${e} not found`);let o=this.options.enableAuditLog?{...n}:void 0,i={...n,...t,id:e,updatedAt:new Date};this.senderNumbers.set(e,i);for(let u of this.channels.values()){let s=u.senderNumbers.findIndex((c)=>c.id===e);if(s!==-1){u.senderNumbers[s]=i,u.updatedAt=new Date;break}}if(this.options.enableAuditLog)this.addAuditLog("senderNumber",e,"update",r,o,i);if(this.options.enableEventEmission)this.emit("senderNumber:updated",{senderNumber:i,previousSenderNumber:n,userId:r});return i}async deleteSenderNumber(e,t){let r=this.senderNumbers.get(e);if(!r)return!1;this.senderNumbers.delete(e);for(let n of this.channels.values()){let o=n.senderNumbers.findIndex((i)=>i.id===e);if(o!==-1){n.senderNumbers.splice(o,1),n.updatedAt=new Date;break}}if(this.options.enableAuditLog)this.addAuditLog("senderNumber",e,"delete",t,r);if(this.options.enableEventEmission)this.emit("senderNumber:deleted",{senderNumber:r,userId:t});return!0}async listSenderNumbers(e={},t={page:1,limit:this.options.defaultPageSize}){let r=Array.from(this.senderNumbers.values());if(e.channelId){let a=this.channels.get(e.channelId);if(a)r=a.senderNumbers;else r=[]}if(e.status)r=r.filter((a)=>a.status===e.status);if(e.category)r=r.filter((a)=>a.category===e.category);if(e.verified!==void 0)if(e.verified)r=r.filter((a)=>a.status==="VERIFIED");else r=r.filter((a)=>a.status!=="VERIFIED");let n=t.sortBy||"createdAt",o=t.sortOrder||"desc";r.sort((a,f)=>{let p,d;switch(n){case"phoneNumber":p=a.phoneNumber,d=f.phoneNumber;break;case"createdAt":p=a.createdAt.getTime(),d=f.createdAt.getTime();break;case"updatedAt":p=a.updatedAt.getTime(),d=f.updatedAt.getTime();break;default:p=a.createdAt.getTime(),d=f.createdAt.getTime()}if(o==="asc")return p<d?-1:p>d?1:0;else return p>d?-1:p<d?1:0});let i=r.length,u=Math.min(t.limit,this.options.maxPageSize),s=Math.max(1,t.page),c=(s-1)*u;return{data:r.slice(c,c+u),total:i,page:s,limit:u,totalPages:Math.ceil(i/u),hasNext:c+u<i,hasPrev:s>1}}getAuditLogs(e,t,r=100){let n=[...this.auditLogs];if(e)n=n.filter((o)=>o.entityType===e);if(t)n=n.filter((o)=>o.entityId===t);return n.sort((o,i)=>i.timestamp.getTime()-o.timestamp.getTime()).slice(0,r)}getStatistics(){let e=Array.from(this.channels.values()),t=Array.from(this.senderNumbers.values()),r={},n={},o={};e.forEach((s)=>{r[s.status]=(r[s.status]||0)+1,n[s.type]=(n[s.type]||0)+1,o[s.provider]=(o[s.provider]||0)+1});let i={},u={};return t.forEach((s)=>{i[s.status]=(i[s.status]||0)+1,u[s.category]=(u[s.category]||0)+1}),{channels:{total:e.length,byStatus:r,byType:n,byProvider:o},senderNumbers:{total:t.length,byStatus:i,byCategory:u}}}cleanup(){let e=0,t=0,r=new Date(Date.now()-2592000000);for(let[i,u]of this.channels)if(u.status==="DELETED"&&u.updatedAt<r)this.channels.delete(i),this.removeSenderNumbersForChannel(i),e++;let n=new Date(Date.now()-7776000000),o=this.auditLogs.length;return this.auditLogs=this.auditLogs.filter((i)=>i.timestamp>=n),t=o-this.auditLogs.length,{deletedChannels:e,expiredAuditLogs:t}}destroy(){if(this.cleanupTimer)clearInterval(this.cleanupTimer),this.cleanupTimer=void 0;this.removeAllListeners(),this.channels.clear(),this.senderNumbers.clear(),this.auditLogs=[]}addAuditLog(e,t,r,n,o,i){let u={id:this.generateAuditLogId(),entityType:e,entityId:t,action:r,userId:n,timestamp:new Date,changes:o||i?{before:o,after:i}:void 0};if(this.auditLogs.push(u),this.auditLogs.length>1e4)this.auditLogs=this.auditLogs.slice(-1e4)}removeSenderNumbersForChannel(e){for(let[t,r]of this.senderNumbers)if(r.channelId===e)this.senderNumbers.delete(t)}getDefaultLimits(e){switch(e){case"KAKAO_ALIMTALK":return{dailyMessageLimit:1e4,monthlyMessageLimit:300000,rateLimit:10};case"KAKAO_FRIENDTALK":return{dailyMessageLimit:1000,monthlyMessageLimit:30000,rateLimit:5};case"SMS":case"LMS":case"MMS":return{dailyMessageLimit:1000,monthlyMessageLimit:30000,rateLimit:3};default:return{dailyMessageLimit:1000,monthlyMessageLimit:30000,rateLimit:1}}}getDefaultFeatures(e){switch(e){case"KAKAO_ALIMTALK":return{supportsBulkSending:!0,supportsScheduling:!0,supportsButtons:!0,maxButtonCount:5};case"KAKAO_FRIENDTALK":return{supportsBulkSending:!0,supportsScheduling:!0,supportsButtons:!1,maxButtonCount:0};default:return{supportsBulkSending:!1,supportsScheduling:!1,supportsButtons:!1,maxButtonCount:0}}}startAutoCleanup(){this.cleanupTimer=setInterval(()=>{this.cleanup()},this.options.cleanupInterval)}generateChannelId(){return`ch_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}generateSenderNumberId(){return`sn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}generateAuditLogId(){return`audit_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}var X;((c)=>{c.CHANNEL="channel";c.SENDER_NUMBER="senderNumber";c.TEMPLATE="template";c.MESSAGE="message";c.USER="user";c.ROLE="role";c.AUDIT_LOG="auditLog";c.ANALYTICS="analytics"})(X||={});var J;((l)=>{l.CREATE="create";l.READ="read";l.UPDATE="update";l.DELETE="delete";l.VERIFY="verify";l.SUSPEND="suspend";l.ACTIVATE="activate";l.SEND="send";l.MANAGE="manage"})(J||={});var Pe;((o)=>{o.GLOBAL="global";o.ORGANIZATION="organization";o.TEAM="team";o.PERSONAL="personal"})(Pe||={});class Ee extends S{users=new Map;roles=new Map;userRoleCache=new Map;permissionCache=new Map;cacheExpiry=new Map;CACHE_DURATION=300000;constructor(){super();this.initializeSystemRoles()}async createUser(e){let t=this.generateUserId(),r={...e,id:t,createdAt:new Date,updatedAt:new Date};return this.users.set(t,r),this.updateUserRoleCache(t,r.roles.map((n)=>n.id)),this.emit("user:created",{user:r}),r}async getUser(e){return this.users.get(e)||null}async updateUser(e,t){let r=this.users.get(e);if(!r)throw Error("User not found");let n={...r,...t,id:e,updatedAt:new Date};if(this.users.set(e,n),t.roles)this.updateUserRoleCache(e,t.roles.map((o)=>o.id));return this.clearUserPermissionCache(e),this.emit("user:updated",{user:n,previousUser:r}),n}async deleteUser(e){let t=this.users.get(e);if(!t)return!1;return this.users.delete(e),this.userRoleCache.delete(e),this.clearUserPermissionCache(e),this.emit("user:deleted",{user:t}),!0}async createRole(e){let t=this.generateRoleId(),r={...e,id:t,createdAt:new Date,updatedAt:new Date};return this.roles.set(t,r),this.emit("role:created",{role:r}),r}async getRole(e){return this.roles.get(e)||null}async updateRole(e,t){let r=this.roles.get(e);if(!r)throw Error("Role not found");if(r.isSystem&&t.permissions)throw Error("Cannot modify permissions of system roles");let n={...r,...t,id:e,updatedAt:new Date};return this.roles.set(e,n),this.clearRolePermissionCache(e),this.emit("role:updated",{role:n,previousRole:r}),n}async deleteRole(e){let t=this.roles.get(e);if(!t)return!1;if(t.isSystem)throw Error("Cannot delete system roles");if(Array.from(this.users.values()).filter((n)=>n.roles.some((o)=>o.id===e)).length>0)throw Error("Cannot delete role that is assigned to users");return this.roles.delete(e),this.emit("role:deleted",{role:t}),!0}async assignRoleToUser(e,t){let r=this.users.get(e),n=this.roles.get(t);if(!r)throw Error("User not found");if(!n)throw Error("Role not found");if(r.roles.some((o)=>o.id===t))return;r.roles.push(n),r.updatedAt=new Date,this.updateUserRoleCache(e,r.roles.map((o)=>o.id)),this.clearUserPermissionCache(e),this.emit("role:assigned",{userId:e,roleId:t})}async removeRoleFromUser(e,t){let r=this.users.get(e);if(!r)throw Error("User not found");let n=r.roles.findIndex((o)=>o.id===t);if(n===-1)return;r.roles.splice(n,1),r.updatedAt=new Date,this.updateUserRoleCache(e,r.roles.map((o)=>o.id)),this.clearUserPermissionCache(e),this.emit("role:removed",{userId:e,roleId:t})}async checkPermission(e){let t=this.getCacheKey(e),r=this.getFromCache(t);if(r)return r;let n=await this.performPermissionCheck(e);return this.setCache(t,n),n}async hasPermission(e,t,r,n,o){return(await this.checkPermission({userId:e,resource:t,action:r,resourceId:n,context:o})).granted}async requirePermission(e,t,r,n,o){if(!await this.hasPermission(e,t,r,n,o))throw Error(`Access denied: ${r} on ${t}`)}async getUserPermissions(e){let t=this.users.get(e);if(!t)return[];let r=[];for(let o of t.roles)r.push(...o.permissions);return r.filter((o,i,u)=>i===u.findIndex((s)=>s.id===o.id))}async getUserRoles(e){let t=this.users.get(e);return t?t.roles:[]}listUsers(e){let t=Array.from(this.users.values());if(e?.isActive!==void 0)t=t.filter((r)=>r.isActive===e.isActive);if(e?.roleId)t=t.filter((r)=>r.roles.some((n)=>n.id===e.roleId));return t}listRoles(){return Array.from(this.roles.values())}async performPermissionCheck(e){let t=this.users.get(e.userId);if(!t)return{granted:!1,reason:"User not found",matchedPermissions:[],deniedReasons:["User not found"]};if(!t.isActive)return{granted:!1,reason:"User is inactive",matchedPermissions:[],deniedReasons:["User is inactive"]};let r=[],n=[];for(let i of t.roles)for(let u of i.permissions)if(this.doesPermissionMatch(u,e))if(await this.checkConditions(u,e))r.push(u);else n.push(`Conditions not met for permission ${u.id}`);let o=r.length>0;return{granted:o,reason:o?void 0:"No matching permissions found",matchedPermissions:r,deniedReasons:o?[]:n}}doesPermissionMatch(e,t){return e.resource===t.resource&&e.action===t.action}async checkConditions(e,t){if(!e.conditions||e.conditions.length===0)return!0;for(let r of e.conditions)if(!await this.evaluateCondition(r,t))return!1;return!0}async evaluateCondition(e,t){let r;switch(e.field){case"userId":r=t.userId;break;case"organizationId":r=t.context?.organizationId;break;case"teamId":r=t.context?.teamId;break;case"resourceOwnerId":r=t.context?.resourceOwnerId;break;default:r=t.context?.metadata?.[e.field]}switch(e.operator){case"equals":return r===e.value;case"not_equals":return r!==e.value;case"in":return Array.isArray(e.value)&&e.value.includes(r);case"not_in":return Array.isArray(e.value)&&!e.value.includes(r);case"contains":return String(r).includes(String(e.value));case"starts_with":return String(r).startsWith(String(e.value));default:return!1}}initializeSystemRoles(){let e={id:"super-admin",name:"Super Admin",description:"Full system access",isSystem:!0,permissions:[...Object.values(X).flatMap((o)=>Object.values(J).map((i)=>({id:`super-admin-${o}-${i}`,resource:o,action:i,scope:"global"})))],createdAt:new Date,updatedAt:new Date},t={id:"channel-admin",name:"Channel Admin",description:"Manage channels and sender numbers",isSystem:!0,permissions:[{id:"channel-admin-channel-manage",resource:"channel",action:"manage",scope:"organization"},{id:"channel-admin-sender-manage",resource:"senderNumber",action:"manage",scope:"organization"}],createdAt:new Date,updatedAt:new Date},r={id:"message-sender",name:"Message Sender",description:"Send messages using configured channels",isSystem:!0,permissions:[{id:"message-sender-channel-read",resource:"channel",action:"read",scope:"organization"},{id:"message-sender-message-send",resource:"message",action:"send",scope:"organization"}],createdAt:new Date,updatedAt:new Date},n={id:"viewer",name:"Viewer",description:"Read-only access",isSystem:!0,permissions:[{id:"viewer-channel-read",resource:"channel",action:"read",scope:"organization"},{id:"viewer-sender-read",resource:"senderNumber",action:"read",scope:"organization"},{id:"viewer-analytics-read",resource:"analytics",action:"read",scope:"organization"}],createdAt:new Date,updatedAt:new Date};this.roles.set(e.id,e),this.roles.set(t.id,t),this.roles.set(r.id,r),this.roles.set(n.id,n)}updateUserRoleCache(e,t){this.userRoleCache.set(e,new Set(t))}clearUserPermissionCache(e){let t=[];for(let r of this.permissionCache.keys())if(r.startsWith(`${e}:`))t.push(r);t.forEach((r)=>{this.permissionCache.delete(r),this.cacheExpiry.delete(r)})}clearRolePermissionCache(e){for(let[t,r]of this.userRoleCache)if(r.has(e))this.clearUserPermissionCache(t)}getCacheKey(e){let t=e.context?JSON.stringify(e.context):"";return`${e.userId}:${e.resource}:${e.action}:${e.resourceId||""}:${t}`}getFromCache(e){let t=this.cacheExpiry.get(e);if(!t||t<Date.now())return this.permissionCache.delete(e),this.cacheExpiry.delete(e),null;return this.permissionCache.get(e)||null}setCache(e,t){this.permissionCache.set(e,t),this.cacheExpiry.set(e,Date.now()+this.CACHE_DURATION)}generateUserId(){return`user_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}generateRoleId(){return`role_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}class Ze{channels=new Map;senderNumbers=new Map;async createChannel(e){let t={...e,id:this.generateChannelId(),createdAt:new Date,updatedAt:new Date};return this.channels.set(t.id,t),t}async getChannel(e){return this.channels.get(e)||null}async listChannels(e){let t=Array.from(this.channels.values());if(e)return t.filter((r)=>r.providerId===e);return t}async updateChannel(e,t){let r=this.channels.get(e);if(!r)throw Error(`Channel ${e} not found`);let n={...r,...t,updatedAt:new Date};return this.channels.set(e,n),n}async deleteChannel(e){this.channels.delete(e);for(let[t,r]of this.senderNumbers.entries())if(r.channelId===e)this.senderNumbers.delete(t)}async addSenderNumber(e,t,r){if(!this.channels.get(e))throw Error(`Channel ${e} not found`);let o={phoneNumber:t,name:r,status:"PENDING",channelId:e};return this.senderNumbers.set(t,o),o}async getSenderNumbers(e){let t=Array.from(this.senderNumbers.values());if(e)return t.filter((r)=>r.channelId===e);return t}generateChannelId(){return`ch_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}class Ce extends S{options;verificationRequests=new Map;documentValidators=new Map;defaultOptions={enableAutoVerification:!0,requiredDocuments:["BUSINESS_REGISTRATION"],autoApprovalThreshold:80,requireManualReview:!1,documentRetentionDays:365,enableExternalAPIs:!1};constructor(e={}){super();this.options=e;this.options={...this.defaultOptions,...e},this.initializeDocumentValidators()}async submitVerification(e,t,r){let n=this.generateRequestId();this.validateRequiredDocuments(r);let o={id:n,channelId:e,businessInfo:t,documents:r.map((i)=>({...i,status:"UPLOADED"})),status:"PENDING",submittedAt:new Date};if(this.verificationRequests.set(n,o),this.emit("verification:submitted",{verificationRequest:o}),this.options.enableAutoVerification)await this.processAutoVerification(n);return o}getVerificationRequest(e){return this.verificationRequests.get(e)||null}getVerificationByChannelId(e){for(let t of this.verificationRequests.values())if(t.channelId===e)return t;return null}async approveVerification(e,t,r){let n=this.verificationRequests.get(e);if(!n)throw Error("Verification request not found");return n.status="VERIFIED",n.reviewedAt=new Date,n.reviewedBy=t,n.reviewNotes=r,n.documents.forEach((o)=>{o.status="VERIFIED"}),this.emit("verification:approved",{verificationRequest:n,reviewerId:t}),n}async rejectVerification(e,t,r){let n=this.verificationRequests.get(e);if(!n)throw Error("Verification request not found");return n.status="REJECTED",n.reviewedAt=new Date,n.reviewedBy=t,n.reviewNotes=r,n.documents.forEach((o)=>{if(o.status==="UPLOADED")o.status="REJECTED"}),this.emit("verification:rejected",{verificationRequest:n,reviewerId:t,reason:r}),n}async addDocument(e,t){let r=this.verificationRequests.get(e);if(!r)throw Error("Verification request not found");if(r.status!=="PENDING"&&r.status!=="UNDER_REVIEW")throw Error("Cannot add documents to completed verification");if(t.status="UPLOADED",r.documents.push(t),this.options.enableAutoVerification)await this.processAutoVerification(e);return this.emit("verification:document_added",{verificationRequest:r,document:t}),r}listVerificationRequests(e){let t=Array.from(this.verificationRequests.values());if(e?.status)t=t.filter((r)=>r.status===e.status);if(e?.channelId)t=t.filter((r)=>r.channelId===e.channelId);if(e?.submittedAfter)t=t.filter((r)=>r.submittedAt>=e.submittedAfter);if(e?.submittedBefore)t=t.filter((r)=>r.submittedAt<=e.submittedBefore);return t.sort((r,n)=>n.submittedAt.getTime()-r.submittedAt.getTime())}getVerificationStats(){let e=Array.from(this.verificationRequests.values()),t={},r=0,n=0,o=0;return e.forEach((i)=>{if(t[i.status]=(t[i.status]||0)+1,i.reviewedAt){let u=i.reviewedAt.getTime()-i.submittedAt.getTime();if(r+=u,n++,!i.reviewedBy&&i.status==="VERIFIED")o++}}),{total:e.length,byStatus:t,averageProcessingTime:n>0?r/n:0,autoApprovalRate:n>0?o/n*100:0}}async processAutoVerification(e){let t=this.verificationRequests.get(e);if(!t)return;t.status="UNDER_REVIEW",this.emit("verification:auto_processing_started",{verificationRequest:t});let r=[];try{let n=await this.verifyBusinessRegistration(t.businessInfo);r.push(n);for(let s of t.documents){let c=await this.validateDocument(s);r.push({checkType:"document_validation",status:c.isValid?"passed":"failed",score:c.confidence,details:`Document validation: ${c.issues.length} issues found`,metadata:{documentId:s.id,issues:c.issues}})}let o=await this.verifyAddress(t.businessInfo.address);r.push(o);let i=await this.verifyPhoneNumber(t.businessInfo.contactInfo.phoneNumber);r.push(i),t.autoVerificationResults=r;let u=r.reduce((s,c)=>s+c.score,0)/r.length;if(u>=this.options.autoApprovalThreshold&&!this.options.requireManualReview)t.status="VERIFIED",t.reviewedAt=new Date,t.reviewNotes=`Auto-approved with score: ${u.toFixed(1)}`,t.documents.forEach((s)=>{s.status="VERIFIED"}),this.emit("verification:auto_approved",{verificationRequest:t,score:u});else this.emit("verification:manual_review_required",{verificationRequest:t,score:u})}catch(n){t.status="PENDING",this.emit("verification:auto_processing_failed",{verificationRequest:t,error:n instanceof Error?n.message:"Unknown error"})}}validateRequiredDocuments(e){let t=new Set(e.map((n)=>n.type)),r=this.options.requiredDocuments.filter((n)=>!t.has(n));if(r.length>0)throw Error(`Missing required documents: ${r.join(", ")}`)}async verifyBusinessRegistration(e){let t=this.calculateBusinessRegistrationScore(e);return{checkType:"business_registry",status:t>=70?"passed":t>=50?"warning":"failed",score:t,details:"Business registration verification completed",metadata:{businessName:e.businessName,registrationNumber:e.businessRegistrationNumber}}}calculateBusinessRegistrationScore(e){let t=0;if(/^\d{3}-\d{2}-\d{5}$/.test(e.businessRegistrationNumber))t+=30;if(e.businessName.length>=2&&e.businessName.length<=100)t+=20;let r=new Date,n=new Date(e.establishedDate),o=(r.getTime()-n.getTime())/31536000000;if(o>=0&&o<=100)t+=20;if(e.contactInfo.email&&e.contactInfo.phoneNumber)t+=15;if(e.address.street&&e.address.city&&e.address.postalCode)t+=15;return Math.min(100,t)}async validateDocument(e){let t=this.documentValidators.get(e.type);if(!t)return{isValid:!1,confidence:0,issues:[{type:"format",severity:"critical",message:`No validator available for document type: ${e.type}`}]};return await t(e)}async verifyAddress(e){let t=0;if(e.street&&e.city&&e.postalCode)t+=40;if(/^\d{5}$/.test(e.postalCode))t+=30;if(e.country==="KR"||e.country==="Korea")t+=30;return{checkType:"address_verification",status:t>=70?"passed":t>=50?"warning":"failed",score:t,details:"Address verification completed",metadata:{address:e}}}async verifyPhoneNumber(e){let t=/^(010|011|016|017|018|019)[0-9]{7,8}$/.test(e);return{checkType:"phone_verification",status:t?"passed":"failed",score:t?100:0,details:t?"Phone number format is valid":"Invalid phone number format",metadata:{phoneNumber:e}}}initializeDocumentValidators(){this.documentValidators.set("BUSINESS_REGISTRATION",async(t)=>{let r=[],n=80;if(!t.fileName.match(/\.(pdf|jpg|jpeg|png)$/i))r.push({type:"format",severity:"medium",message:"Unsupported file format"}),n-=20;return{isValid:r.length===0||r.every((o)=>o.severity!=="critical"),confidence:Math.max(0,n),issues:r}}),this.documentValidators.set("BUSINESS_LICENSE",async(t)=>{let r=[],n=75;if(!t.fileName.match(/\.(pdf|jpg|jpeg|png)$/i))r.push({type:"format",severity:"medium",message:"Unsupported file format"}),n-=15;return{isValid:r.length===0||r.every((o)=>o.severity!=="critical"),confidence:Math.max(0,n),issues:r}}),this.documentValidators.set("ID_CARD",async(t)=>{let r=[],n=70;if(!t.fileName.match(/\.(jpg|jpeg|png)$/i))r.push({type:"format",severity:"high",message:"ID card should be an image file"}),n-=30;return{isValid:r.length===0||r.every((o)=>o.severity!=="critical"),confidence:Math.max(0,n),issues:r}});let e=async(t)=>{let r=[],n=60;if(!t.fileName||t.fileName.length===0)r.push({type:"format",severity:"critical",message:"File name is required"}),n=0;return{isValid:r.length===0||r.every((o)=>o.severity!=="critical"),confidence:Math.max(0,n),issues:r}};this.documentValidators.set("AUTHORIZATION_LETTER",e),this.documentValidators.set("OTHER",e)}generateRequestId(){return`biz_verify_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
|
|
2
|
+
|
|
3
|
+
//# debugId=2C8E78719D8A03A364756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|