@k-msg/channel 0.29.4 → 0.29.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/toolkit/index.js +6 -6
- package/dist/toolkit/index.mjs +6 -6
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var{defineProperty:L,getOwnPropertyNames:o,getOwnPropertyDescriptor:e}=Object,r=Object.prototype.hasOwnProperty;var m=new WeakMap,nn=(n)=>{var f=m.get(n),i;if(f)return f;if(f=L({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function")o(n).map((K)=>!r.call(f,K)&&L(f,K,{get:()=>n[K],enumerable:!(i=e(n,K))||i.enumerable}));return m.set(n,f),f};var fn=(n,f)=>{for(var i in f)L(n,i,{get:f[i],enumerable:!0,configurable:!0,set:(K)=>f[i]=()=>K})};var yn={};fn(yn,{KakaoChannelLifecycleService:()=>x,KakaoChannelCapabilityService:()=>Y,KakaoChannelBindingResolver:()=>_});module.exports=nn(yn);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 kn={["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"}},$n=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];if(Error.captureStackTrace)Error.captureStackTrace(this,A)}getLocalizedMessage(n="ko"){let f=kn[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 j(n){if(!n)return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function t(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(j(n.type)==="solapi")return{senderKey:k(f.kakaoPfId)??i,...K?{plusId:K}:{}};return{...i?{senderKey:i}:{},...K?{plusId:K}:{}}}function Kn(n){return[n.providerId??"",n.senderKey??"",n.plusId??"",n.source].join("|")}function s(n){if(!Array.isArray(n)||n.length!==1)return;return k(n[0]?.id)}class _{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=Kn(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)??s(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=t(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=s(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((a)=>a.id===h):void 0,O=C?t(C):{},I=k(n?.senderKey),d=k(K?.senderKey),p=k(P?.senderKey),v=k(y?.senderKey),M=k(O.senderKey),z=k(n?.plusId),E=k(K?.plusId),c=k(P?.plusId),l=k(y?.plusId),u=k(O.plusId),H,Q;if(I)H=I,Q="explicit";else if(d)H=d,Q="alias";else if(p)H=p,Q="defaults";else if(v)H=v,Q="defaults";else if(M)H=M,Q="provider_config";let G,J;if(z)G=z,J="explicit";else if(E)G=E,J="alias";else if(c)G=c,J="defaults";else if(l)G=l,J="defaults";else if(u)G=u,J="provider_config";return{...i?{alias:i}:{},...h?{providerId:h}:{},...j(C?.type)?{providerType:j(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 In(n){if(!U(n.getOnboardingSpec))return;try{return n.getOnboardingSpec()}catch{return}}function Pn(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function hn(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=In(n),i={list:U(n.listKakaoChannels),categories:U(n.listKakaoChannelCategories),auth:U(n.requestKakaoChannelAuth),add:U(n.addKakaoChannel)},K=Pn(f?.providerId),P=hn(f,i.list);return{providerId:n.id,...K?{providerType:K}:{},mode:P,supports:i}}}function S(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(S(this.provider.id,"list"));return f.call(this.provider,n)}async categories(){let n=this.provider.listKakaoChannelCategories;if(typeof n!=="function")return w(S(this.provider.id,"categories"));return n.call(this.provider)}async auth(n){let f=this.provider.requestKakaoChannelAuth;if(typeof f!=="function")return w(S(this.provider.id,"auth"));return f.call(this.provider,n)}async add(n){let f=this.provider.addKakaoChannel;if(typeof f!=="function")return w(S(this.provider.id,"add"));return f.call(this.provider,n)}}class T{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 b extends W{constructor(n){super(n)}}class N{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 gn(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function Cn(n,f){switch(n){case"aligo":return new W(f);case"mock":return new b(f);default:return typeof f.listKakaoChannels==="function"?new W(f):void 0}}class x{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(n,f=new Y){this.provider=n;if(this.capability=f.resolve(n),this.providerType=gn(this.capability.providerType),this.capability.mode==="api")this.apiAdapter=Cn(this.providerType,this.provider);else if(this.providerType==="iwinv")this.iwinvAdapter=new T(this.provider);else if(this.providerType==="solapi")this.solapiAdapter=new N(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)}}
|
|
1
|
+
var{defineProperty:R,getOwnPropertyNames:o,getOwnPropertyDescriptor:e}=Object,r=Object.prototype.hasOwnProperty;function nn(n){return this[n]}var fn=(n)=>{var f=(u??=new WeakMap).get(n),i;if(f)return f;if(f=R({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function"){for(var K of o(n))if(!r.call(f,K))R(f,K,{get:nn.bind(n,K),enumerable:!(i=e(n,K))||i.enumerable})}return u.set(n,f),f},u;var kn=(n)=>n;function Kn(n,f){this[n]=kn.bind(null,f)}var In=(n,f)=>{for(var i in f)R(n,i,{get:f[i],enumerable:!0,configurable:!0,set:Kn.bind(f,i)})};var wn={};In(wn,{KakaoChannelLifecycleService:()=>x,KakaoChannelCapabilityService:()=>Y,KakaoChannelBindingResolver:()=>_});module.exports=fn(wn);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 Pn={["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"}},Hn=new Set(Object.values(D));var F=(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=F(K.httpStatus),this.requestId=typeof K.requestId==="string"?K.requestId:void 0,this.retryAfterMs=F(K.retryAfterMs),this.attempt=F(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=Pn[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 S=(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 j(n){if(!n)return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function s(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(j(n.type)==="solapi")return{senderKey:k(f.kakaoPfId)??i,...K?{plusId:K}:{}};return{...i?{senderKey:i}:{},...K?{plusId:K}:{}}}function hn(n){return[n.providerId??"",n.senderKey??"",n.plusId??"",n.source].join("|")}function t(n){if(!Array.isArray(n)||n.length!==1)return;return k(n[0]?.id)}class _{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=hn(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)??t(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=s(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=t(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((a)=>a.id===h):void 0,O=C?s(C):{},I=k(n?.senderKey),d=k(K?.senderKey),p=k(P?.senderKey),v=k(y?.senderKey),M=k(O.senderKey),z=k(n?.plusId),E=k(K?.plusId),c=k(P?.plusId),l=k(y?.plusId),m=k(O.plusId),H,Q;if(I)H=I,Q="explicit";else if(d)H=d,Q="alias";else if(p)H=p,Q="defaults";else if(v)H=v,Q="defaults";else if(M)H=M,Q="provider_config";let G,J;if(z)G=z,J="explicit";else if(E)G=E,J="alias";else if(c)G=c,J="defaults";else if(l)G=l,J="defaults";else if(m)G=m,J="provider_config";return{...i?{alias:i}:{},...h?{providerId:h}:{},...j(C?.type)?{providerType:j(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 gn(n){if(!U(n.getOnboardingSpec))return;try{return n.getOnboardingSpec()}catch{return}}function Cn(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function yn(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=gn(n),i={list:U(n.listKakaoChannels),categories:U(n.listKakaoChannelCategories),auth:U(n.requestKakaoChannelAuth),add:U(n.addKakaoChannel)},K=Cn(f?.providerId),P=yn(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 T{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 b extends W{constructor(n){super(n)}}class N{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 An(n){if(typeof n!=="string")return;let f=n.trim();return f.length>0?f.toLowerCase():void 0}function $n(n,f){switch(n){case"aligo":return new W(f);case"mock":return new b(f);default:return typeof f.listKakaoChannels==="function"?new W(f):void 0}}class x{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(n,f=new Y){this.provider=n;if(this.capability=f.resolve(n),this.providerType=An(this.capability.providerType),this.capability.mode==="api")this.apiAdapter=$n(this.providerType,this.provider);else if(this.providerType==="iwinv")this.iwinvAdapter=new T(this.provider);else if(this.providerType==="solapi")this.solapiAdapter=new N(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 S(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 S(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)}}
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=C6E1910EFC51513064756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var s=Object.defineProperty;var Kn=(n,f)=>{for(var i in f)s(n,i,{get:f[i],enumerable:!0,configurable:!0,set:(K)=>f[i]=()=>K})};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 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"},["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"}},Pn=new Set(Object.values(D));var L=(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=L(K.httpStatus),this.requestId=typeof K.requestId==="string"?K.requestId:void 0,this.retryAfterMs=L(K.retryAfterMs),this.attempt=L(K.attempt),Array.isArray(K.causeChain))this.causeChain=K.causeChain;else if(K.causeChain!==void 0)this.causeChain=[K.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,A)}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 R=(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 F(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(F(n.type)==="solapi")return{senderKey:k(f.kakaoPfId)??i,...K?{plusId:K}:{}};return{...i?{senderKey:i}:{},...K?{plusId:K}:{}}}function o(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 u{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=o(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((t)=>t.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}:{},...F(C?.type)?{providerType:F(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 e(n){if(!U(n.getOnboardingSpec))return;try{return n.getOnboardingSpec()}catch{return}}function r(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 Y{resolve(n){let f=e(n),i={list:U(n.listKakaoChannels),categories:U(n.listKakaoChannelCategories),auth:U(n.requestKakaoChannelAuth),add:U(n.addKakaoChannel)},K=r(f?.providerId),P=nn(f,i.list);return{providerId:n.id,...K?{providerType:K}:{},mode:P,supports:i}}}function S(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(S(this.provider.id,"list"));return f.call(this.provider,n)}async categories(){let n=this.provider.listKakaoChannelCategories;if(typeof n!=="function")return w(S(this.provider.id,"categories"));return n.call(this.provider)}async auth(n){let f=this.provider.requestKakaoChannelAuth;if(typeof f!=="function")return w(S(this.provider.id,"auth"));return f.call(this.provider,n)}async add(n){let f=this.provider.addKakaoChannel;if(typeof f!=="function")return w(S(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 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 W(f);case"mock":return new _(f);default:return typeof f.listKakaoChannels==="function"?new W(f):void 0}}class m{provider;capability;providerType;apiAdapter;iwinvAdapter;solapiAdapter;constructor(n,f=new Y){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 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 R(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 R(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{m as KakaoChannelLifecycleService,Y as KakaoChannelCapabilityService,u as KakaoChannelBindingResolver};
|
|
1
|
+
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};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=515163C59CAA18C564756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|