@k-msg/channel
Version:
AlimTalk channel and sender number management
5 lines (3 loc) • 11.3 kB
JavaScript
var t=Object.defineProperty;var a=(n)=>n;function o(n,f){this[n]=a.bind(null,f)}var Pn=(n,f)=>{for(var i in f)t(n,i,{get:f[i],enumerable:!0,configurable:!0,set:o.bind(f,i)})};var D;((I)=>{I.INVALID_REQUEST="INVALID_REQUEST";I.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";I.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";I.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";I.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";I.NETWORK_ERROR="NETWORK_ERROR";I.NETWORK_TIMEOUT="NETWORK_TIMEOUT";I.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";I.PROVIDER_ERROR="PROVIDER_ERROR";I.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";I.CRYPTO_CONFIG_ERROR="CRYPTO_CONFIG_ERROR";I.CRYPTO_ENCRYPT_FAILED="CRYPTO_ENCRYPT_FAILED";I.CRYPTO_DECRYPT_FAILED="CRYPTO_DECRYPT_FAILED";I.CRYPTO_HASH_FAILED="CRYPTO_HASH_FAILED";I.CRYPTO_POLICY_VIOLATION="CRYPTO_POLICY_VIOLATION";I.UNKNOWN_ERROR="UNKNOWN_ERROR"})(D||={});var e={["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"}},gn=new Set(Object.values(D));var R=(n)=>{if(typeof n!=="number"||Number.isNaN(n)||!Number.isFinite(n))return;return Math.trunc(n)};class A extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(n,f,i,K={}){super(f);if(this.name="KMsgError",this.code=n,this.details=i,this.providerErrorCode=K.providerErrorCode,this.providerErrorText=K.providerErrorText,this.httpStatus=R(K.httpStatus),this.requestId=typeof K.requestId==="string"?K.requestId:void 0,this.retryAfterMs=R(K.retryAfterMs),this.attempt=R(K.attempt),Array.isArray(K.causeChain))this.causeChain=K.causeChain;else if(K.causeChain!==void 0)this.causeChain=[K.causeChain];let P=Error.captureStackTrace;if(P)P(this,A)}getLocalizedMessage(n="ko"){let f=e[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 F=(n)=>({isSuccess:!0,isFailure:!1,value:n}),w=(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 S(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:{},i=k(f.senderKey)??k(f.kakaoPfId)??k(f.profileId),K=k(f.plusId);if(S(n.type)==="solapi")return{senderKey:k(f.kakaoPfId)??i,...K?{plusId:K}:{}};return{...i?{senderKey:i}:{},...K?{plusId:K}:{}}}function r(n){return[n.providerId??"",n.senderKey??"",n.plusId??"",n.source].join("|")}function l(n){if(!Array.isArray(n)||n.length!==1)return;return k(n[0]?.id)}class m{config;constructor(n){this.config=n}list(n){let f=k(n?.providerId),i=this.config.aliases?.kakaoChannels??{},K=[],P=new Set,V=(h)=>{if(f&&h.providerId!==f)return;let g=r(h);if(P.has(g))return;P.add(g),K.push(h)};for(let[h,g]of Object.entries(i)){let C=k(g.providerId);if(!C)continue;let O=k(g.senderKey),I=k(g.plusId);if(!O&&!I)continue;V({source:"config",alias:h,providerId:C,...O?{senderKey:O}:{},...I?{plusId:I}:{},...k(g.name)?{name:k(g.name)}:{}})}let y=this.config.defaults?.kakao,B=k(y?.channel),$=B?i[B]:void 0,q=k($?.providerId)??k(this.config.routing?.defaultProviderId)??l(this.config.providers),X=k(y?.senderKey)??k($?.senderKey),Z=k(y?.plusId)??k($?.plusId);if(q&&(X||Z))V({source:"config",...B?{alias:B}:{},providerId:q,...X?{senderKey:X}:{},...Z?{plusId:Z}:{},...k($?.name)?{name:k($?.name)}:{}});for(let h of this.config.providers??[]){let g=k(h.id);if(!g)continue;let C=c(h);if(!C.senderKey&&!C.plusId)continue;V({source:"config",providerId:g,...C.senderKey?{senderKey:C.senderKey}:{},...C.plusId?{plusId:C.plusId}:{}})}return K}resolve(n){let f=this.config.aliases?.kakaoChannels??{},i=k(n?.channelAlias),K=i?f[i]:void 0;if(i&&n?.strictAlias===!0&&!K)throw new A("INVALID_REQUEST",`Unknown kakao channel alias: ${i}`);let P=this.config.defaults?.kakao,V=k(P?.channel),y=V?f[V]:void 0,B=k(n?.providerId),$=k(K?.providerId),q=k(y?.providerId),X=k(this.config.routing?.defaultProviderId),Z=l(this.config.providers),h,g="unknown";if(B)h=B,g="explicit";else if($)h=$,g="alias";else if(q)h=q,g="defaults";else if(X)h=X,g="routing";else if(Z)h=Z,g="single_provider";let C=h?(this.config.providers??[]).find((s)=>s.id===h):void 0,O=C?c(C):{},I=k(n?.senderKey),b=k(K?.senderKey),N=k(P?.senderKey),x=k(y?.senderKey),d=k(O.senderKey),p=k(n?.plusId),v=k(K?.plusId),M=k(P?.plusId),z=k(y?.plusId),E=k(O.plusId),H,Q;if(I)H=I,Q="explicit";else if(b)H=b,Q="alias";else if(N)H=N,Q="defaults";else if(x)H=x,Q="defaults";else if(d)H=d,Q="provider_config";let G,J;if(p)G=p,J="explicit";else if(v)G=v,J="alias";else if(M)G=M,J="defaults";else if(z)G=z,J="defaults";else if(E)G=E,J="provider_config";return{...i?{alias:i}:{},...h?{providerId:h}:{},...S(C?.type)?{providerType:S(C?.type)}:{},...H?{senderKey:H}:{},...G?{plusId:G}:{},...k(K?.name)?{name:k(K?.name)}:k(y?.name)?{name:k(y?.name)}:{},providerIdSource:g,...Q?{senderKeySource:Q}:{},...J?{plusIdSource:J}:{}}}getAlias(n){let f=k(n);if(!f)return;return this.config.aliases?.kakaoChannels?.[f]}}function U(n){return typeof n==="function"}function nn(n){if(!U(n.getOnboardingSpec))return;try{return n.getOnboardingSpec()}catch{return}}function fn(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function kn(n,f){if(n?.channelOnboarding){if(n.channelOnboarding==="api"&&!f)return"none";return n.channelOnboarding}return f?"api":"none"}class Y{resolve(n){let f=nn(n),i={list:U(n.listKakaoChannels),categories:U(n.listKakaoChannelCategories),auth:U(n.requestKakaoChannelAuth),add:U(n.addKakaoChannel)},K=fn(f?.providerId),P=kn(f,i.list);return{providerId:n.id,...K?{providerType:K}:{},mode:P,supports:i}}}function L(n,f){return new A("INVALID_REQUEST",`Provider '${n}' does not support kakao channel api operation '${f}'`,{providerId:n,operation:f})}class W{provider;constructor(n){this.provider=n}async list(n){let f=this.provider.listKakaoChannels;if(typeof f!=="function")return w(L(this.provider.id,"list"));return f.call(this.provider,n)}async categories(){let n=this.provider.listKakaoChannelCategories;if(typeof n!=="function")return w(L(this.provider.id,"categories"));return n.call(this.provider)}async auth(n){let f=this.provider.requestKakaoChannelAuth;if(typeof f!=="function")return w(L(this.provider.id,"auth"));return f.call(this.provider,n)}async add(n){let f=this.provider.addKakaoChannel;if(typeof f!=="function")return w(L(this.provider.id,"add"));return f.call(this.provider,n)}}class j{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 _ extends W{constructor(n){super(n)}}class T{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 Kn(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function In(n,f){switch(n){case"aligo":return new W(f);case"mock":return new _(f);default:return typeof f.listKakaoChannels==="function"?new W(f):void 0}}class u{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(n,f=new Y){this.provider=n;if(this.capability=f.resolve(n),this.providerType=Kn(this.capability.providerType),this.capability.mode==="api")this.apiAdapter=In(this.providerType,this.provider);else if(this.providerType==="iwinv")this.iwinvAdapter=new j(this.provider);else if(this.providerType==="solapi")this.solapiAdapter=new T(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 w(new A("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 w(new A("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 F(void 0)}async list(n){let f=this.ensureApi("list");if(f.isFailure)return f;let i=this.apiAdapter;if(!i)return this.unsupported("list");let K=await i.list(n);if(K.isFailure)return K;return F(K.value.map((P)=>({source:"api",providerId:P.providerId||this.provider.id,senderKey:P.senderKey,...P.plusId?{plusId:P.plusId}:{},...P.name?{name:P.name}:{},...P.status?{status:P.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 i=this.apiAdapter;if(!i)return this.unsupported("auth");return i.auth(n)}async add(n){let f=this.ensureApi("add");if(f.isFailure)return f;let i=this.apiAdapter;if(!i)return this.unsupported("add");return i.add(n)}}export{u as KakaoChannelLifecycleService,Y as KakaoChannelCapabilityService,m as KakaoChannelBindingResolver};
//# debugId=515163C59CAA18C564756E2164756E21
//# sourceMappingURL=index.mjs.map