@k-msg/core 0.21.1 → 0.22.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/errors.d.ts +49 -2
- package/dist/index.js +3 -3
- package/dist/index.js.map +6 -5
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +6 -5
- package/dist/types/message.d.ts +3 -0
- package/package.json +1 -1
package/dist/errors.d.ts
CHANGED
|
@@ -11,17 +11,64 @@ export declare enum KMsgErrorCode {
|
|
|
11
11
|
MESSAGE_SEND_FAILED = "MESSAGE_SEND_FAILED",
|
|
12
12
|
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
13
13
|
}
|
|
14
|
+
export type RetryPolicyErrorCode = KMsgErrorCode;
|
|
15
|
+
export type ProviderRetryHint = "retryable" | "non_retryable";
|
|
16
|
+
export interface KMsgErrorMetadata {
|
|
17
|
+
providerErrorCode?: string;
|
|
18
|
+
providerErrorText?: string;
|
|
19
|
+
httpStatus?: number;
|
|
20
|
+
requestId?: string;
|
|
21
|
+
retryAfterMs?: number;
|
|
22
|
+
attempt?: number;
|
|
23
|
+
causeChain?: unknown[];
|
|
24
|
+
}
|
|
25
|
+
export interface ErrorRetryPolicy {
|
|
26
|
+
retryableCodes?: readonly KMsgErrorCode[];
|
|
27
|
+
nonRetryableCodes?: readonly KMsgErrorCode[];
|
|
28
|
+
classifyByStatusCode?: (status: number) => ProviderRetryHint;
|
|
29
|
+
classifyByMessage?: (message: string) => ProviderRetryHint | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Optional override for retry hint inference.
|
|
32
|
+
*/
|
|
33
|
+
fallback?: ProviderRetryHint;
|
|
34
|
+
/**
|
|
35
|
+
* Optional custom retry delay in milliseconds.
|
|
36
|
+
*/
|
|
37
|
+
retryAfterMs?: (error: KMsgError) => number | undefined;
|
|
38
|
+
}
|
|
39
|
+
export declare const normalizeRetryAfterMs: (value: unknown) => number | undefined;
|
|
14
40
|
export declare class KMsgError extends Error {
|
|
15
41
|
readonly code: KMsgErrorCode;
|
|
16
42
|
readonly details?: Record<string, any>;
|
|
17
|
-
|
|
43
|
+
readonly providerErrorCode?: string;
|
|
44
|
+
readonly providerErrorText?: string;
|
|
45
|
+
readonly httpStatus?: number;
|
|
46
|
+
readonly requestId?: string;
|
|
47
|
+
readonly retryAfterMs?: number;
|
|
48
|
+
readonly attempt?: number;
|
|
49
|
+
readonly causeChain?: unknown[];
|
|
50
|
+
constructor(code: KMsgErrorCode, message: string, details?: Record<string, any>, metadata?: KMsgErrorMetadata);
|
|
18
51
|
toJSON(): {
|
|
19
52
|
name: string;
|
|
20
53
|
code: KMsgErrorCode;
|
|
21
54
|
message: string;
|
|
22
55
|
details: Record<string, any> | undefined;
|
|
56
|
+
providerErrorCode: string | undefined;
|
|
57
|
+
providerErrorText: string | undefined;
|
|
58
|
+
httpStatus: number | undefined;
|
|
59
|
+
requestId: string | undefined;
|
|
60
|
+
retryAfterMs: number | undefined;
|
|
61
|
+
attempt: number | undefined;
|
|
62
|
+
causeChain: unknown[] | undefined;
|
|
23
63
|
};
|
|
24
64
|
}
|
|
25
65
|
export declare const ErrorUtils: {
|
|
26
|
-
isRetryable
|
|
66
|
+
isRetryable(error: any, policy?: ErrorRetryPolicy): boolean;
|
|
67
|
+
classifyForRetry(error: any, policy?: ErrorRetryPolicy): ProviderRetryHint;
|
|
68
|
+
resolveRetryAfterMs(error: KMsgError, policy?: ErrorRetryPolicy): number | undefined;
|
|
69
|
+
isUnknownStatus: (statusCode: number | undefined) => boolean;
|
|
70
|
+
toRetryMetadata(error: KMsgError): KMsgErrorMetadata;
|
|
71
|
+
withAttempt(error: KMsgError, attempt: number): KMsgError;
|
|
72
|
+
DEFAULT_RETRYABLE_ERROR_CODES: ReadonlySet<KMsgErrorCode>;
|
|
73
|
+
DEFAULT_NON_RETRYABLE_ERROR_CODES: ReadonlySet<KMsgErrorCode>;
|
|
27
74
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var{defineProperty:
|
|
2
|
-
${
|
|
1
|
+
var{defineProperty:b,getOwnPropertyNames:G,getOwnPropertyDescriptor:Y}=Object,K=Object.prototype.hasOwnProperty;var C=new WeakMap,_=(i)=>{var t=C.get(i),h;if(t)return t;if(t=b({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function")G(i).map((s)=>!K.call(t,s)&&b(t,s,{get:()=>i[s],enumerable:!(h=Y(i,s))||h.enumerable}));return C.set(i,t),t};var z=(i,t)=>{for(var h in t)b(i,h,{get:t[h],enumerable:!0,configurable:!0,set:(s)=>t[h]=()=>s})};var l={};z(l,{setGlobalLogger:()=>L,readRuntimeEnv:()=>y,ok:()=>x,normalizeRetryAfterMs:()=>k,normalizeMessageStatus:()=>o,loggerMiddleware:()=>d,logger:()=>v,getRuntimeEnvSource:()=>U,getLogger:()=>P,fail:()=>H,createLogger:()=>M,RetryHandler:()=>D,Result:()=>a,RateLimiter:()=>E,QUEUED_MESSAGE_STATUS:()=>g,Logger:()=>S,LogLevel:()=>J,KNOWN_MESSAGE_STATUSES:()=>e,KMsgErrorCode:()=>q,KMsgError:()=>O,ErrorUtils:()=>A,CircuitBreaker:()=>c,BulkOperationHandler:()=>I});module.exports=_(l);var q;((u)=>{u.INVALID_REQUEST="INVALID_REQUEST";u.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";u.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";u.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";u.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";u.NETWORK_ERROR="NETWORK_ERROR";u.NETWORK_TIMEOUT="NETWORK_TIMEOUT";u.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";u.PROVIDER_ERROR="PROVIDER_ERROR";u.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";u.UNKNOWN_ERROR="UNKNOWN_ERROR"})(q||={});var Q=new Set(["NETWORK_ERROR","RATE_LIMIT_EXCEEDED","NETWORK_TIMEOUT","NETWORK_SERVICE_UNAVAILABLE","PROVIDER_ERROR","UNKNOWN_ERROR"]),W=new Set(["INVALID_REQUEST","AUTHENTICATION_FAILED","INSUFFICIENT_BALANCE","TEMPLATE_NOT_FOUND","MESSAGE_SEND_FAILED"]),w=(i)=>{if(typeof i!=="number"||Number.isNaN(i)||!Number.isFinite(i))return;return Math.trunc(i)},k=(i)=>{let t=w(i);if(t===void 0||t<0)return;return t},N=(i)=>{if(typeof i!=="string")return;return i.toLowerCase().trim()},j=(i)=>{if(i>=500)return"retryable";if(i===408||i===425||i===429)return"retryable";return"non_retryable"},$=(i)=>{let t=i.toLowerCase();if(t.includes("timeout")||t.includes("temporar")||t.includes("network")||t.includes("retry"))return"retryable";return};class O extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(i,t,h,s={}){super(t);if(this.name="KMsgError",this.code=i,this.details=h,this.providerErrorCode=s.providerErrorCode,this.providerErrorText=s.providerErrorText,this.httpStatus=w(s.httpStatus),this.requestId=typeof s.requestId==="string"?s.requestId:void 0,this.retryAfterMs=w(s.retryAfterMs),this.attempt=w(s.attempt),Array.isArray(s.causeChain))this.causeChain=s.causeChain;else if(s.causeChain!==void 0)this.causeChain=[s.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,O)}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 A={isRetryable(i,t={}){return A.classifyForRetry(i,t)==="retryable"},classifyForRetry(i,t={}){if(i instanceof O){if(new Set(t.retryableCodes??Array.from(Q)).has(i.code))return"retryable";if(new Set(t.nonRetryableCodes??Array.from(W)).has(i.code))return"non_retryable";if(i.httpStatus!==void 0)return j(i.httpStatus);let m=$(i.message);if(m)return m;if(t.classifyByMessage&&i.message){let T=t.classifyByMessage(i.message);if(T)return T}if(t.fallback)return t.fallback;return"non_retryable"}let h=N(i?.status)??N(i?.statusCode)??N(i?.code),s=w(i?.status)??w(i?.statusCode)??w(i?.httpStatus);if(typeof h==="string"&&h.startsWith("5"))return"retryable";if(s!==void 0){if(t.classifyByStatusCode)return t.classifyByStatusCode(s);return j(s)}let p=typeof i?.message==="string"?$(i.message):void 0;if(p)return p;if(t.classifyByMessage&&typeof i?.message==="string"){let n=t.classifyByMessage(i.message);if(n)return n}return t.fallback??"non_retryable"},resolveRetryAfterMs(i,t){if(t?.retryAfterMs){let h=t.retryAfterMs(i),s=k(h);if(s!==void 0)return s}if(i.retryAfterMs!==void 0)return k(i.retryAfterMs);if(i.code==="RATE_LIMIT_EXCEEDED"&&i.retryAfterMs===void 0)return;return},isUnknownStatus:(i)=>{if(i===void 0||Number.isNaN(i)||!Number.isFinite(i))return!1;return i<500},toRetryMetadata(i){return{providerErrorCode:i.providerErrorCode,providerErrorText:i.providerErrorText,httpStatus:i.httpStatus,requestId:i.requestId,retryAfterMs:i.retryAfterMs,attempt:i.attempt,causeChain:i.causeChain}},withAttempt(i,t){return new O(i.code,i.message,i.details,{...A.toRetryMetadata(i),attempt:w(t)})},DEFAULT_RETRYABLE_ERROR_CODES:Q,DEFAULT_NON_RETRYABLE_ERROR_CODES:W};var J;((p)=>{p.DEBUG="DEBUG";p.INFO="INFO";p.WARN="WARN";p.ERROR="ERROR"})(J||={});class S{config;context;constructor(i={},t={}){this.context=i,this.config={level:"INFO",enableConsole:!0,enableJson:!1,enableColors:!0,...t}}shouldLog(i){let t=["DEBUG","INFO","WARN","ERROR"];return t.indexOf(i)>=t.indexOf(this.config.level)}formatMessage(i){if(this.config.enableJson)return JSON.stringify({level:i.level,message:i.message,timestamp:i.timestamp.toISOString(),context:i.context,...i.error&&{error:{name:i.error.name,message:i.error.message,stack:i.error.stack}},...i.duration&&{duration:i.duration}});let t=i.timestamp.toISOString(),h=this.config.enableColors?this.colorizeLevel(i.level):i.level,s=Object.keys(i.context).length>0?` [${Object.entries(i.context).map(([n,f])=>`${n}=${f}`).join(", ")}]`:"",p=`${t} ${h}${s}: ${i.message}`;if(i.duration!==void 0)p+=` (${i.duration}ms)`;if(i.error)p+=`
|
|
2
|
+
${i.error.stack}`;return p}colorizeLevel(i){if(!this.config.enableColors)return i;return`${{["DEBUG"]:"\x1B[36m",["INFO"]:"\x1B[32m",["WARN"]:"\x1B[33m",["ERROR"]:"\x1B[31m"}[i]}${i}\x1B[0m`}writeLog(i){if(!this.shouldLog(i.level))return;let t=this.formatMessage(i);if(this.config.enableConsole)(i.level==="ERROR"?console.error:i.level==="WARN"?console.warn:console.log)(t);if(this.config.enableFile&&this.config.filePath);}debug(i,t={}){this.writeLog({level:"DEBUG",message:i,timestamp:new Date,context:{...this.context,...t}})}info(i,t={}){this.writeLog({level:"INFO",message:i,timestamp:new Date,context:{...this.context,...t}})}warn(i,t={},h){this.writeLog({level:"WARN",message:i,timestamp:new Date,context:{...this.context,...t},error:h})}error(i,t={},h){this.writeLog({level:"ERROR",message:i,timestamp:new Date,context:{...this.context,...t},error:h})}child(i){return new S({...this.context,...i},this.config)}time(i){let t=Date.now();return()=>{let h=Date.now()-t;this.info(`${i} completed`,{duration:h})}}async measure(i,t,h={}){let s=Date.now(),p={...h,operation:i};this.debug(`Starting ${i}`,p);try{let n=await t(),f=Date.now()-s;return this.info(`Completed ${i}`,{...p,duration:f}),n}catch(n){let f=Date.now()-s;throw this.error(`Failed ${i}`,{...p,duration:f},n instanceof Error?n:Error(String(n))),n}}}var R;function M(i,t){return new S(i,t)}function P(){if(!R)R=M();return R}function L(i){R=i}var v={debug:(i,t)=>P().debug(i,t),info:(i,t)=>P().info(i,t),warn:(i,t,h)=>P().warn(i,t,h),error:(i,t,h)=>P().error(i,t,h),child:(i)=>P().child(i),time:(i)=>P().time(i),measure:(i,t,h)=>P().measure(i,t,h)};function d(i){let t=M({},i);return async(h,s)=>{let p=Date.now(),f={requestId:Math.random().toString(36).substring(7),method:h.req.method,path:h.req.path,userAgent:h.req.header("user-agent")||"unknown"};t.info("Request started",f);try{await s();let m=Date.now()-p;t.info("Request completed",{...f,status:h.res.status,duration:m})}catch(m){let T=Date.now()-p;throw t.error("Request failed",{...f,duration:T},m instanceof Error?m:Error(String(m))),m}}}class D{static defaultOptions={maxAttempts:3,initialDelay:1000,maxDelay:30000,backoffMultiplier:2,jitter:!0,retryCondition:(i)=>A.isRetryable(i)};static async execute(i,t={}){let h={...D.defaultOptions,...t},s,p=h.initialDelay;for(let n=1;n<=h.maxAttempts;n++)try{return await i()}catch(f){if(s=f,n===h.maxAttempts||!h.retryCondition(s,n))throw s;let m=h.jitter?p+Math.random()*p*0.1:p;h.onRetry?.(s,n),await new Promise((T)=>setTimeout(T,m)),p=Math.min(p*h.backoffMultiplier,h.maxDelay)}throw s}static createRetryableFunction(i,t={}){return async(...h)=>{return D.execute(()=>i(...h),t)}}}class I{static async execute(i,t,h={}){let s={concurrency:5,retryOptions:{maxAttempts:3,initialDelay:1000,maxDelay:1e4,backoffMultiplier:2,jitter:!0},failFast:!1,...h},p=Date.now(),n=[],f=[],m=0,T=D.createRetryableFunction(t,s.retryOptions),X=I.createBatches(i,s.concurrency);for(let u of X){let V=u.map(async(F)=>{try{let B=await T(F);n.push({item:F,result:B})}catch(B){if(f.push({item:F,error:B}),s.failFast)throw new O("MESSAGE_SEND_FAILED",`Bulk operation failed fast after ${f.length} failures`,{totalItems:i.length,failedCount:f.length})}finally{m++,s.onProgress?.(m,i.length,f.length)}});if(await Promise.allSettled(V),s.failFast&&f.length>0)break}let Z=Date.now()-p;return{successful:n,failed:f,summary:{total:i.length,successful:n.length,failed:f.length,duration:Z}}}static createBatches(i,t){let h=[];for(let s=0;s<i.length;s+=t)h.push(i.slice(s,s+t));return h}}class c{options;state="CLOSED";failureCount=0;lastFailureTime=0;nextAttemptTime=0;constructor(i){this.options=i}async execute(i){let t=Date.now();switch(this.state){case"OPEN":if(t<this.nextAttemptTime)throw new O("NETWORK_SERVICE_UNAVAILABLE","Circuit breaker is OPEN",{state:this.state,nextAttemptTime:this.nextAttemptTime});this.state="HALF_OPEN",this.options.onHalfOpen?.();break;case"HALF_OPEN":break;case"CLOSED":break}try{let h=await Promise.race([i(),new Promise((s,p)=>setTimeout(()=>p(new O("NETWORK_TIMEOUT","Circuit breaker timeout",{timeout:this.options.timeout})),this.options.timeout))]);if(this.state==="HALF_OPEN")this.state="CLOSED",this.failureCount=0,this.options.onClose?.();return h}catch(h){throw this.recordFailure(),h}}recordFailure(){if(this.failureCount++,this.lastFailureTime=Date.now(),this.failureCount>=this.options.failureThreshold)this.state="OPEN",this.nextAttemptTime=this.lastFailureTime+this.options.resetTimeout,this.options.onOpen?.()}getState(){return this.state}getFailureCount(){return this.failureCount}reset(){this.state="CLOSED",this.failureCount=0,this.lastFailureTime=0,this.nextAttemptTime=0}}class E{maxRequests;windowMs;requests=[];constructor(i,t){this.maxRequests=i;this.windowMs=t}async acquire(){let i=Date.now();if(this.requests=this.requests.filter((t)=>i-t<this.windowMs),this.requests.length>=this.maxRequests){let t=Math.min(...this.requests),h=this.windowMs-(i-t);if(h>0)return await new Promise((s)=>setTimeout(s,h)),this.acquire()}this.requests.push(i)}canMakeRequest(){let i=Date.now();return this.requests=this.requests.filter((t)=>i-t<this.windowMs),this.requests.length<this.maxRequests}getRemainingRequests(){let i=Date.now();return this.requests=this.requests.filter((t)=>i-t<this.windowMs),Math.max(0,this.maxRequests-this.requests.length)}}var x=(i)=>({isSuccess:!0,isFailure:!1,value:i}),H=(i)=>({isSuccess:!1,isFailure:!0,error:i}),a={map(i,t){if(i.isSuccess)return x(t(i.value));return i},flatMap(i,t){if(i.isSuccess)return t(i.value);return i},mapError(i,t){if(i.isFailure)return H(t(i.error));return i},unwrap(i){if(i.isSuccess)return i.value;throw i.error},unwrapOr(i,t){if(i.isSuccess)return i.value;return t},unwrapOrElse(i,t){if(i.isSuccess)return i.value;return t(i.error)},match(i,t){if(i.isSuccess)return t.ok(i.value);return t.fail(i.error)},async fromPromise(i){try{let t=await i;return x(t)}catch(t){return H(t)}},isOk(i){return i.isSuccess},isFail(i){return i.isFailure}};function U(){let i=globalThis;return i.__K_MSG_ENV__??i.__ENV__??i.process?.env??{}}function y(i){let t=U()[i];if(typeof t==="string")return t;if(t===void 0)return;return String(t)}var e=["PENDING","SENT","FAILED"],g="PENDING",o=(i)=>{let t=typeof i==="string"?i.trim().toUpperCase():"";if(t==="PENDING"||t==="SENT"||t==="FAILED")return t;return"PENDING"};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=596F775479804CAA64756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/errors.ts", "../src/logger.ts", "../src/resilience/retry-handler.ts", "../src/resilience/bulk-operation.ts", "../src/resilience/circuit-breaker.ts", "../src/resilience/rate-limiter.ts", "../src/result.ts", "../src/runtime/env.ts"],
|
|
3
|
+
"sources": ["../src/errors.ts", "../src/logger.ts", "../src/resilience/retry-handler.ts", "../src/resilience/bulk-operation.ts", "../src/resilience/circuit-breaker.ts", "../src/resilience/rate-limiter.ts", "../src/result.ts", "../src/runtime/env.ts", "../src/types/message.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"export enum KMsgErrorCode {\n INVALID_REQUEST = \"INVALID_REQUEST\",\n AUTHENTICATION_FAILED = \"AUTHENTICATION_FAILED\",\n INSUFFICIENT_BALANCE = \"INSUFFICIENT_BALANCE\",\n TEMPLATE_NOT_FOUND = \"TEMPLATE_NOT_FOUND\",\n RATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n NETWORK_TIMEOUT = \"NETWORK_TIMEOUT\",\n NETWORK_SERVICE_UNAVAILABLE = \"NETWORK_SERVICE_UNAVAILABLE\",\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MESSAGE_SEND_FAILED = \"MESSAGE_SEND_FAILED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nexport class KMsgError extends Error {\n public readonly code: KMsgErrorCode;\n public readonly details?: Record<string, any>;\n\n constructor(\n code: KMsgErrorCode,\n message: string,\n details?: Record<string, any>,\n ) {\n super(message);\n this.name = \"KMsgError\";\n this.code = code;\n this.details = details;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, KMsgError);\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n details: this.details,\n };\n }\n}\n\nexport const ErrorUtils = {\n isRetryable
|
|
5
|
+
"export enum KMsgErrorCode {\n INVALID_REQUEST = \"INVALID_REQUEST\",\n AUTHENTICATION_FAILED = \"AUTHENTICATION_FAILED\",\n INSUFFICIENT_BALANCE = \"INSUFFICIENT_BALANCE\",\n TEMPLATE_NOT_FOUND = \"TEMPLATE_NOT_FOUND\",\n RATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n NETWORK_TIMEOUT = \"NETWORK_TIMEOUT\",\n NETWORK_SERVICE_UNAVAILABLE = \"NETWORK_SERVICE_UNAVAILABLE\",\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MESSAGE_SEND_FAILED = \"MESSAGE_SEND_FAILED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nexport type RetryPolicyErrorCode = KMsgErrorCode;\n\nexport type ProviderRetryHint = \"retryable\" | \"non_retryable\";\n\nexport interface KMsgErrorMetadata {\n providerErrorCode?: string;\n providerErrorText?: string;\n httpStatus?: number;\n requestId?: string;\n retryAfterMs?: number;\n attempt?: number;\n causeChain?: unknown[];\n}\n\nexport interface ErrorRetryPolicy {\n retryableCodes?: readonly KMsgErrorCode[];\n nonRetryableCodes?: readonly KMsgErrorCode[];\n classifyByStatusCode?: (status: number) => ProviderRetryHint;\n classifyByMessage?: (message: string) => ProviderRetryHint | undefined;\n /**\n * Optional override for retry hint inference.\n */\n fallback?: ProviderRetryHint;\n /**\n * Optional custom retry delay in milliseconds.\n */\n retryAfterMs?: (error: KMsgError) => number | undefined;\n}\n\nconst DEFAULT_RETRYABLE_ERROR_CODES: ReadonlySet<RetryPolicyErrorCode> = new Set([\n KMsgErrorCode.NETWORK_ERROR,\n KMsgErrorCode.RATE_LIMIT_EXCEEDED,\n KMsgErrorCode.NETWORK_TIMEOUT,\n KMsgErrorCode.NETWORK_SERVICE_UNAVAILABLE,\n KMsgErrorCode.PROVIDER_ERROR,\n KMsgErrorCode.UNKNOWN_ERROR,\n]);\n\nconst DEFAULT_NON_RETRYABLE_ERROR_CODES: ReadonlySet<RetryPolicyErrorCode> = new Set([\n KMsgErrorCode.INVALID_REQUEST,\n KMsgErrorCode.AUTHENTICATION_FAILED,\n KMsgErrorCode.INSUFFICIENT_BALANCE,\n KMsgErrorCode.TEMPLATE_NOT_FOUND,\n KMsgErrorCode.MESSAGE_SEND_FAILED,\n]);\n\nconst normalizeNumber = (value: unknown): number | undefined => {\n if (typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.trunc(value);\n};\n\nexport const normalizeRetryAfterMs = (value: unknown): number | undefined => {\n const normalized = normalizeNumber(value);\n if (normalized === undefined || normalized < 0) {\n return undefined;\n }\n\n return normalized;\n};\n\nconst toLowerString = (value: unknown): string | undefined => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n return value.toLowerCase().trim();\n};\n\nconst classifyByHttpStatus = (status: number): ProviderRetryHint => {\n if (status >= 500) {\n return \"retryable\";\n }\n\n if (status === 408 || status === 425 || status === 429) {\n return \"retryable\";\n }\n\n return \"non_retryable\";\n};\n\nconst classifyByMessage = (message: string): ProviderRetryHint | undefined => {\n const normalized = message.toLowerCase();\n\n if (normalized.includes(\"timeout\") || normalized.includes(\"temporar\") || normalized.includes(\"network\") || normalized.includes(\"retry\")) {\n return \"retryable\";\n }\n\n return undefined;\n};\n\nexport class KMsgError extends Error {\n public readonly code: KMsgErrorCode;\n public readonly details?: Record<string, any>;\n public readonly providerErrorCode?: string;\n public readonly providerErrorText?: string;\n public readonly httpStatus?: number;\n public readonly requestId?: string;\n public readonly retryAfterMs?: number;\n public readonly attempt?: number;\n public readonly causeChain?: unknown[];\n\n constructor(\n code: KMsgErrorCode,\n message: string,\n details?: Record<string, any>,\n metadata: KMsgErrorMetadata = {},\n ) {\n super(message);\n this.name = \"KMsgError\";\n this.code = code;\n this.details = details;\n\n this.providerErrorCode = metadata.providerErrorCode;\n this.providerErrorText = metadata.providerErrorText;\n this.httpStatus = normalizeNumber(metadata.httpStatus);\n this.requestId = typeof metadata.requestId === \"string\" ? metadata.requestId : undefined;\n this.retryAfterMs = normalizeNumber(metadata.retryAfterMs);\n this.attempt = normalizeNumber(metadata.attempt);\n\n if (Array.isArray(metadata.causeChain)) {\n this.causeChain = metadata.causeChain;\n } else if (metadata.causeChain !== undefined) {\n this.causeChain = [metadata.causeChain];\n }\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, KMsgError);\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n details: this.details,\n providerErrorCode: this.providerErrorCode,\n providerErrorText: this.providerErrorText,\n httpStatus: this.httpStatus,\n requestId: this.requestId,\n retryAfterMs: this.retryAfterMs,\n attempt: this.attempt,\n causeChain: this.causeChain,\n };\n }\n}\n\nexport const ErrorUtils = {\n isRetryable(error: any, policy: ErrorRetryPolicy = {}): boolean {\n return ErrorUtils.classifyForRetry(error, policy) === \"retryable\";\n },\n\n classifyForRetry(\n error: any,\n policy: ErrorRetryPolicy = {},\n ): ProviderRetryHint {\n if (error instanceof KMsgError) {\n const retryableCodes = new Set(\n policy.retryableCodes ?? Array.from(DEFAULT_RETRYABLE_ERROR_CODES),\n );\n if (retryableCodes.has(error.code)) {\n return \"retryable\";\n }\n\n const nonRetryableCodes = new Set(\n policy.nonRetryableCodes ?? Array.from(DEFAULT_NON_RETRYABLE_ERROR_CODES),\n );\n if (nonRetryableCodes.has(error.code)) {\n return \"non_retryable\";\n }\n\n if (error.httpStatus !== undefined) {\n return classifyByHttpStatus(error.httpStatus);\n }\n\n const classifiedByMessage = classifyByMessage(error.message);\n if (classifiedByMessage) {\n return classifiedByMessage;\n }\n\n if (policy.classifyByMessage && error.message) {\n const classified = policy.classifyByMessage(error.message);\n if (classified) {\n return classified;\n }\n }\n\n if (policy.fallback) {\n return policy.fallback;\n }\n\n return \"non_retryable\";\n }\n\n const status = toLowerString(error?.status) ?? toLowerString(error?.statusCode) ?? toLowerString(error?.code);\n const statusCode = normalizeNumber(error?.status) ??\n normalizeNumber(error?.statusCode) ??\n normalizeNumber(error?.httpStatus);\n\n if (typeof status === \"string\" && status.startsWith(\"5\")) {\n return \"retryable\";\n }\n\n if (statusCode !== undefined) {\n if (policy.classifyByStatusCode) {\n return policy.classifyByStatusCode(statusCode);\n }\n\n return classifyByHttpStatus(statusCode);\n }\n\n const classifiedByMessage =\n typeof error?.message === \"string\"\n ? classifyByMessage(error.message)\n : undefined;\n\n if (classifiedByMessage) {\n return classifiedByMessage;\n }\n\n if (policy.classifyByMessage && typeof error?.message === \"string\") {\n const classified = policy.classifyByMessage(error.message);\n if (classified) {\n return classified;\n }\n }\n\n return policy.fallback ?? \"non_retryable\";\n },\n\n resolveRetryAfterMs(\n error: KMsgError,\n policy?: ErrorRetryPolicy,\n ): number | undefined {\n if (policy?.retryAfterMs) {\n const override = policy.retryAfterMs(error);\n const normalized = normalizeRetryAfterMs(override);\n if (normalized !== undefined) {\n return normalized;\n }\n }\n\n if (error.retryAfterMs !== undefined) {\n return normalizeRetryAfterMs(error.retryAfterMs);\n }\n\n if (error.code === KMsgErrorCode.RATE_LIMIT_EXCEEDED && error.retryAfterMs === undefined) {\n return undefined;\n }\n\n return undefined;\n },\n\n isUnknownStatus: (statusCode: number | undefined): boolean => {\n if (statusCode === undefined || Number.isNaN(statusCode) || !Number.isFinite(statusCode)) {\n return false;\n }\n\n return statusCode < 500;\n },\n\n toRetryMetadata(error: KMsgError): KMsgErrorMetadata {\n return {\n providerErrorCode: error.providerErrorCode,\n providerErrorText: error.providerErrorText,\n httpStatus: error.httpStatus,\n requestId: error.requestId,\n retryAfterMs: error.retryAfterMs,\n attempt: error.attempt,\n causeChain: error.causeChain,\n };\n },\n\n withAttempt(\n error: KMsgError,\n attempt: number,\n ): KMsgError {\n return new KMsgError(\n error.code,\n error.message,\n error.details,\n {\n ...ErrorUtils.toRetryMetadata(error),\n attempt: normalizeNumber(attempt),\n },\n );\n },\n\n DEFAULT_RETRYABLE_ERROR_CODES,\n DEFAULT_NON_RETRYABLE_ERROR_CODES,\n};\n",
|
|
6
6
|
"export enum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n WARN = \"WARN\",\n ERROR = \"ERROR\",\n}\n\nexport interface LogContext {\n component?: string;\n operation?: string;\n userId?: string;\n sessionId?: string;\n requestId?: string;\n traceId?: string;\n [key: string]: any;\n}\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context: LogContext;\n error?: Error;\n duration?: number;\n}\n\nexport interface LoggerConfig {\n level: LogLevel;\n enableConsole: boolean;\n enableFile?: boolean;\n filePath?: string;\n maxFileSize?: number;\n maxFiles?: number;\n enableJson?: boolean;\n enableColors?: boolean;\n}\n\nexport class Logger {\n private config: LoggerConfig;\n private context: LogContext;\n\n constructor(context: LogContext = {}, config: Partial<LoggerConfig> = {}) {\n this.context = context;\n this.config = {\n level: LogLevel.INFO,\n enableConsole: true,\n enableJson: false,\n enableColors: true,\n ...config,\n };\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels = [\n LogLevel.DEBUG,\n LogLevel.INFO,\n LogLevel.WARN,\n LogLevel.ERROR,\n ];\n return levels.indexOf(level) >= levels.indexOf(this.config.level);\n }\n\n private formatMessage(entry: LogEntry): string {\n if (this.config.enableJson) {\n return JSON.stringify({\n level: entry.level,\n message: entry.message,\n timestamp: entry.timestamp.toISOString(),\n context: entry.context,\n ...(entry.error && {\n error: {\n name: entry.error.name,\n message: entry.error.message,\n stack: entry.error.stack,\n },\n }),\n ...(entry.duration && { duration: entry.duration }),\n });\n }\n\n const timestamp = entry.timestamp.toISOString();\n const level = this.config.enableColors\n ? this.colorizeLevel(entry.level)\n : entry.level;\n const contextStr =\n Object.keys(entry.context).length > 0\n ? ` [${Object.entries(entry.context)\n .map(([k, v]) => `${k}=${v}`)\n .join(\", \")}]`\n : \"\";\n\n let message = `${timestamp} ${level}${contextStr}: ${entry.message}`;\n\n if (entry.duration !== undefined) {\n message += ` (${entry.duration}ms)`;\n }\n\n if (entry.error) {\n message += `\\n${entry.error.stack}`;\n }\n\n return message;\n }\n\n private colorizeLevel(level: LogLevel): string {\n if (!this.config.enableColors) return level;\n\n const colors = {\n [LogLevel.DEBUG]: \"\\x1b[36m\", // cyan\n [LogLevel.INFO]: \"\\x1b[32m\", // green\n [LogLevel.WARN]: \"\\x1b[33m\", // yellow\n [LogLevel.ERROR]: \"\\x1b[31m\", // red\n };\n\n return `${colors[level]}${level}\\x1b[0m`;\n }\n\n private writeLog(entry: LogEntry): void {\n if (!this.shouldLog(entry.level)) return;\n\n const message = this.formatMessage(entry);\n\n if (this.config.enableConsole) {\n const logFn =\n entry.level === LogLevel.ERROR\n ? console.error\n : entry.level === LogLevel.WARN\n ? console.warn\n : console.log;\n logFn(message);\n }\n\n // File logging would be implemented here if needed\n if (this.config.enableFile && this.config.filePath) {\n // Bun.write(this.config.filePath, message + '\\n', { createPath: true });\n }\n }\n\n debug(message: string, context: LogContext = {}): void {\n this.writeLog({\n level: LogLevel.DEBUG,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n });\n }\n\n info(message: string, context: LogContext = {}): void {\n this.writeLog({\n level: LogLevel.INFO,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n });\n }\n\n warn(message: string, context: LogContext = {}, error?: Error): void {\n this.writeLog({\n level: LogLevel.WARN,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n error,\n });\n }\n\n error(message: string, context: LogContext = {}, error?: Error): void {\n this.writeLog({\n level: LogLevel.ERROR,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n error,\n });\n }\n\n child(context: LogContext): Logger {\n return new Logger({ ...this.context, ...context }, this.config);\n }\n\n time(label: string): () => void {\n const start = Date.now();\n return () => {\n const duration = Date.now() - start;\n this.info(`${label} completed`, { duration });\n };\n }\n\n async measure<T>(\n operation: string,\n fn: () => Promise<T>,\n context: LogContext = {},\n ): Promise<T> {\n const start = Date.now();\n const operationContext = { ...context, operation };\n\n this.debug(`Starting ${operation}`, operationContext);\n\n try {\n const result = await fn();\n const duration = Date.now() - start;\n\n this.info(`Completed ${operation}`, { ...operationContext, duration });\n return result;\n } catch (error) {\n const duration = Date.now() - start;\n\n this.error(\n `Failed ${operation}`,\n { ...operationContext, duration },\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n }\n}\n\n// Global logger instance\nlet globalLogger: Logger;\n\nexport function createLogger(\n context?: LogContext,\n config?: Partial<LoggerConfig>,\n): Logger {\n return new Logger(context, config);\n}\n\nexport function getLogger(): Logger {\n if (!globalLogger) {\n globalLogger = createLogger();\n }\n return globalLogger;\n}\n\nexport function setGlobalLogger(logger: Logger): void {\n globalLogger = logger;\n}\n\n// Convenience functions\nexport const logger = {\n debug: (message: string, context?: LogContext) =>\n getLogger().debug(message, context),\n info: (message: string, context?: LogContext) =>\n getLogger().info(message, context),\n warn: (message: string, context?: LogContext, error?: Error) =>\n getLogger().warn(message, context, error),\n error: (message: string, context?: LogContext, error?: Error) =>\n getLogger().error(message, context, error),\n child: (context: LogContext) => getLogger().child(context),\n time: (label: string) => getLogger().time(label),\n measure: <T>(operation: string, fn: () => Promise<T>, context?: LogContext) =>\n getLogger().measure(operation, fn, context),\n};\n\n// Express-style middleware for Hono\nexport function loggerMiddleware(config?: Partial<LoggerConfig>) {\n const requestLogger = createLogger({}, config);\n\n return async (c: any, next: any) => {\n const start = Date.now();\n const requestId = Math.random().toString(36).substring(7);\n\n const context = {\n requestId,\n method: c.req.method,\n path: c.req.path,\n userAgent: c.req.header(\"user-agent\") || \"unknown\",\n };\n\n requestLogger.info(\"Request started\", context);\n\n try {\n await next();\n\n const duration = Date.now() - start;\n requestLogger.info(\"Request completed\", {\n ...context,\n status: c.res.status,\n duration,\n });\n } catch (error) {\n const duration = Date.now() - start;\n requestLogger.error(\n \"Request failed\",\n {\n ...context,\n duration,\n },\n error instanceof Error ? error : new Error(String(error)),\n );\n\n throw error;\n }\n };\n}\n",
|
|
7
7
|
"/**\n * Retry options and handler for K-Message Platform\n */\n\nimport { ErrorUtils } from \"../errors\";\n\nexport interface RetryOptions {\n maxAttempts?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffMultiplier?: number;\n jitter?: boolean;\n retryCondition?: (error: Error, attempt: number) => boolean;\n onRetry?: (error: Error, attempt: number) => void;\n}\n\n/**\n * Exponential backoff retry mechanism\n */\nexport class RetryHandler {\n private static defaultOptions: RetryOptions = {\n maxAttempts: 3,\n initialDelay: 1000,\n maxDelay: 30000,\n backoffMultiplier: 2,\n jitter: true,\n retryCondition: (error) => ErrorUtils.isRetryable(error),\n };\n\n static async execute<T>(\n operation: () => Promise<T>,\n options: Partial<RetryOptions> = {},\n ): Promise<T> {\n const opts = {\n ...RetryHandler.defaultOptions,\n ...options,\n } as Required<RetryOptions>;\n let lastError: Error;\n let delay = opts.initialDelay;\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error as Error;\n\n if (\n attempt === opts.maxAttempts ||\n !opts.retryCondition!(lastError, attempt)\n ) {\n throw lastError;\n }\n\n const actualDelay = opts.jitter\n ? delay + Math.random() * delay * 0.1\n : delay;\n\n opts.onRetry?.(lastError, attempt);\n\n await new Promise((resolve) => setTimeout(resolve, actualDelay));\n\n delay = Math.min(delay * opts.backoffMultiplier, opts.maxDelay);\n }\n }\n\n throw lastError!;\n }\n\n static createRetryableFunction<T extends any[], R>(\n func: (...args: T) => Promise<R>,\n options: Partial<RetryOptions> = {},\n ): (...args: T) => Promise<R> {\n return async (...args: T) => {\n return RetryHandler.execute(() => func(...args), options);\n };\n }\n}\n",
|
|
8
8
|
"/**\n * Bulk operation handler with error recovery\n */\n\nimport { KMsgError, KMsgErrorCode } from \"../errors\";\nimport { RetryHandler, type RetryOptions } from \"./retry-handler\";\n\nexport interface BulkOperationOptions {\n concurrency: number;\n retryOptions: RetryOptions;\n failFast: boolean;\n onProgress?: (completed: number, total: number, failed: number) => void;\n}\n\nexport class BulkOperationHandler {\n static async execute<T, R>(\n items: T[],\n operation: (item: T) => Promise<R>,\n options: Partial<BulkOperationOptions> = {},\n ): Promise<{\n successful: { item: T; result: R }[];\n failed: { item: T; error: Error }[];\n summary: {\n total: number;\n successful: number;\n failed: number;\n duration: number;\n };\n }> {\n const opts: BulkOperationOptions = {\n concurrency: 5,\n retryOptions: {\n maxAttempts: 3,\n initialDelay: 1000,\n maxDelay: 10000,\n backoffMultiplier: 2,\n jitter: true,\n },\n failFast: false,\n ...options,\n };\n\n const startTime = Date.now();\n const successful: { item: T; result: R }[] = [];\n const failed: { item: T; error: Error }[] = [];\n let completed = 0;\n\n const retryableOperation = RetryHandler.createRetryableFunction(\n operation,\n opts.retryOptions,\n );\n\n const batches = BulkOperationHandler.createBatches(items, opts.concurrency);\n\n for (const batch of batches) {\n const batchPromises = batch.map(async (item) => {\n try {\n const result = await retryableOperation(item);\n successful.push({ item, result });\n } catch (error) {\n failed.push({ item, error: error as Error });\n\n if (opts.failFast) {\n throw new KMsgError(\n KMsgErrorCode.MESSAGE_SEND_FAILED,\n `Bulk operation failed fast after ${failed.length} failures`,\n { totalItems: items.length, failedCount: failed.length },\n );\n }\n } finally {\n completed++;\n opts.onProgress?.(completed, items.length, failed.length);\n }\n });\n\n await Promise.allSettled(batchPromises);\n\n if (opts.failFast && failed.length > 0) {\n break;\n }\n }\n\n const duration = Date.now() - startTime;\n\n return {\n successful,\n failed,\n summary: {\n total: items.length,\n successful: successful.length,\n failed: failed.length,\n duration,\n },\n };\n }\n\n private static createBatches<T>(items: T[], batchSize: number): T[][] {\n const batches: T[][] = [];\n for (let i = 0; i < items.length; i += batchSize) {\n batches.push(items.slice(i, i + batchSize));\n }\n return batches;\n }\n}\n",
|
|
9
9
|
"/**\n * Circuit breaker pattern implementation\n */\n\nimport { KMsgError, KMsgErrorCode } from \"../errors\";\n\nexport interface CircuitBreakerOptions {\n failureThreshold: number;\n timeout: number;\n resetTimeout: number;\n onOpen?: () => void;\n onHalfOpen?: () => void;\n onClose?: () => void;\n}\n\nexport class CircuitBreaker {\n private state: \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\" = \"CLOSED\";\n private failureCount = 0;\n private lastFailureTime = 0;\n private nextAttemptTime = 0;\n\n constructor(private options: CircuitBreakerOptions) {}\n\n async execute<T>(operation: () => Promise<T>): Promise<T> {\n const now = Date.now();\n\n switch (this.state) {\n case \"OPEN\":\n if (now < this.nextAttemptTime) {\n throw new KMsgError(\n KMsgErrorCode.NETWORK_SERVICE_UNAVAILABLE,\n \"Circuit breaker is OPEN\",\n { state: this.state, nextAttemptTime: this.nextAttemptTime },\n );\n }\n this.state = \"HALF_OPEN\";\n this.options.onHalfOpen?.();\n break;\n\n case \"HALF_OPEN\":\n break;\n\n case \"CLOSED\":\n break;\n }\n\n try {\n const result = await Promise.race([\n operation(),\n new Promise<never>((_, reject) =>\n setTimeout(\n () =>\n reject(\n new KMsgError(\n KMsgErrorCode.NETWORK_TIMEOUT,\n \"Circuit breaker timeout\",\n { timeout: this.options.timeout },\n ),\n ),\n this.options.timeout,\n ),\n ),\n ]);\n\n if (this.state === \"HALF_OPEN\") {\n this.state = \"CLOSED\";\n this.failureCount = 0;\n this.options.onClose?.();\n }\n\n return result;\n } catch (error) {\n this.recordFailure();\n throw error;\n }\n }\n\n private recordFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n\n if (this.failureCount >= this.options.failureThreshold) {\n this.state = \"OPEN\";\n this.nextAttemptTime = this.lastFailureTime + this.options.resetTimeout;\n this.options.onOpen?.();\n }\n }\n\n getState(): string {\n return this.state;\n }\n\n getFailureCount(): number {\n return this.failureCount;\n }\n\n reset(): void {\n this.state = \"CLOSED\";\n this.failureCount = 0;\n this.lastFailureTime = 0;\n this.nextAttemptTime = 0;\n }\n}\n",
|
|
10
10
|
"/**\n * Rate limiter for API calls\n */\n\nexport class RateLimiter {\n private requests: number[] = [];\n\n constructor(\n private maxRequests: number,\n private windowMs: number,\n ) {}\n\n async acquire(): Promise<void> {\n const now = Date.now();\n\n this.requests = this.requests.filter((time) => now - time < this.windowMs);\n\n if (this.requests.length >= this.maxRequests) {\n const oldestRequest = Math.min(...this.requests);\n const waitTime = this.windowMs - (now - oldestRequest);\n\n if (waitTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n return this.acquire();\n }\n }\n\n this.requests.push(now);\n }\n\n canMakeRequest(): boolean {\n const now = Date.now();\n this.requests = this.requests.filter((time) => now - time < this.windowMs);\n return this.requests.length < this.maxRequests;\n }\n\n getRemainingRequests(): number {\n const now = Date.now();\n this.requests = this.requests.filter((time) => now - time < this.windowMs);\n return Math.max(0, this.maxRequests - this.requests.length);\n }\n}\n",
|
|
11
11
|
"export type Ok<T> = {\n readonly isSuccess: true;\n readonly isFailure: false;\n readonly value: T;\n};\n\nexport type Fail<E> = {\n readonly isSuccess: false;\n readonly isFailure: true;\n readonly error: E;\n};\n\nexport type Result<T, E = Error> = Ok<T> | Fail<E>;\n\nexport const ok = <T>(value: T): Ok<T> => ({\n isSuccess: true,\n isFailure: false,\n value,\n});\n\nexport const fail = <E>(error: E): Fail<E> => ({\n isSuccess: false,\n isFailure: true,\n error,\n});\n\n/**\n * Result utility functions for chaining and transformation\n */\nexport const Result = {\n /**\n * Transform the success value of a Result\n */\n map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> {\n if (result.isSuccess) {\n return ok(fn(result.value));\n }\n return result;\n },\n\n /**\n * Chain Result-returning operations\n */\n flatMap<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => Result<U, E>,\n ): Result<U, E> {\n if (result.isSuccess) {\n return fn(result.value);\n }\n return result;\n },\n\n /**\n * Transform the error of a Result\n */\n mapError<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F> {\n if (result.isFailure) {\n return fail(fn(result.error));\n }\n return result;\n },\n\n /**\n * Extract the value or throw the error\n */\n unwrap<T, E>(result: Result<T, E>): T {\n if (result.isSuccess) {\n return result.value;\n }\n throw result.error;\n },\n\n /**\n * Extract the value or return a default\n */\n unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (result.isSuccess) {\n return result.value;\n }\n return defaultValue;\n },\n\n /**\n * Extract the value or compute a default from the error\n */\n unwrapOrElse<T, E>(result: Result<T, E>, fn: (error: E) => T): T {\n if (result.isSuccess) {\n return result.value;\n }\n return fn(result.error);\n },\n\n /**\n * Pattern match on a Result\n */\n match<T, E, U>(\n result: Result<T, E>,\n handlers: { ok: (value: T) => U; fail: (error: E) => U },\n ): U {\n if (result.isSuccess) {\n return handlers.ok(result.value);\n }\n return handlers.fail(result.error);\n },\n\n /**\n * Convert a Promise to a Result\n */\n async fromPromise<T, E = Error>(promise: Promise<T>): Promise<Result<T, E>> {\n try {\n const value = await promise;\n return ok(value);\n } catch (error) {\n return fail(error as E);\n }\n },\n\n /**\n * Check if a Result is Ok\n */\n isOk<T, E>(result: Result<T, E>): result is Ok<T> {\n return result.isSuccess;\n },\n\n /**\n * Check if a Result is Fail\n */\n isFail<T, E>(result: Result<T, E>): result is Fail<E> {\n return result.isFailure;\n },\n};\n",
|
|
12
|
-
"export type RuntimeEnvRecord = Record<string, string | undefined>;\n\ntype RuntimeGlobal = typeof globalThis & {\n __ENV__?: RuntimeEnvRecord;\n __K_MSG_ENV__?: RuntimeEnvRecord;\n process?: {\n env?: RuntimeEnvRecord;\n };\n};\n\n/**\n * Resolve environment variables in a runtime-neutral order.\n *\n * Priority:\n * 1. globalThis.__K_MSG_ENV__\n * 2. globalThis.__ENV__\n * 3. globalThis.process?.env\n */\nexport function getRuntimeEnvSource(): RuntimeEnvRecord {\n const runtimeGlobal = globalThis as RuntimeGlobal;\n return (\n runtimeGlobal.__K_MSG_ENV__ ??\n runtimeGlobal.__ENV__ ??\n runtimeGlobal.process?.env ??\n {}\n );\n}\n\nexport function readRuntimeEnv(key: string): string | undefined {\n const value = getRuntimeEnvSource()[key];\n if (typeof value === \"string\") {\n return value;\n }\n if (value === undefined) {\n return undefined;\n }\n return String(value);\n}\n"
|
|
12
|
+
"export type RuntimeEnvRecord = Record<string, string | undefined>;\n\ntype RuntimeGlobal = typeof globalThis & {\n __ENV__?: RuntimeEnvRecord;\n __K_MSG_ENV__?: RuntimeEnvRecord;\n process?: {\n env?: RuntimeEnvRecord;\n };\n};\n\n/**\n * Resolve environment variables in a runtime-neutral order.\n *\n * Priority:\n * 1. globalThis.__K_MSG_ENV__\n * 2. globalThis.__ENV__\n * 3. globalThis.process?.env\n */\nexport function getRuntimeEnvSource(): RuntimeEnvRecord {\n const runtimeGlobal = globalThis as RuntimeGlobal;\n return (\n runtimeGlobal.__K_MSG_ENV__ ??\n runtimeGlobal.__ENV__ ??\n runtimeGlobal.process?.env ??\n {}\n );\n}\n\nexport function readRuntimeEnv(key: string): string | undefined {\n const value = getRuntimeEnvSource()[key];\n if (typeof value === \"string\") {\n return value;\n }\n if (value === undefined) {\n return undefined;\n }\n return String(value);\n}\n",
|
|
13
|
+
"export type MessageType =\n | \"ALIMTALK\"\n | \"FRIENDTALK\"\n | \"SMS\"\n | \"LMS\"\n | \"MMS\"\n | \"NSA\"\n | \"VOICE\"\n | \"FAX\"\n | \"RCS_SMS\"\n | \"RCS_LMS\"\n | \"RCS_MMS\"\n | \"RCS_TPL\"\n | \"RCS_ITPL\"\n | \"RCS_LTPL\";\n\nexport type MessageStatus = \"PENDING\" | \"SENT\" | \"FAILED\";\n\nexport const KNOWN_MESSAGE_STATUSES: MessageStatus[] = [\n \"PENDING\",\n \"SENT\",\n \"FAILED\",\n];\n\nexport const QUEUED_MESSAGE_STATUS: MessageStatus = \"PENDING\";\n\nexport const normalizeMessageStatus = (status: unknown): MessageStatus => {\n const raw = typeof status === \"string\" ? status.trim().toUpperCase() : \"\";\n\n if (raw === \"PENDING\" || raw === \"SENT\" || raw === \"FAILED\") {\n return raw;\n }\n\n return QUEUED_MESSAGE_STATUS;\n};\n\nexport type MessageVariables = Record<\n string,\n string | number | boolean | Date | null | undefined\n>;\n\nexport interface MessageButton {\n name: string;\n /**\n * Provider-dependent. Common values: \"WL\" (web link), \"AL\" (app link), ...\n */\n type: string;\n urlPc?: string;\n urlMobile?: string;\n}\n\nexport type MessageBinaryInput =\n | {\n /**\n * URL or file path (provider-dependent).\n */\n ref: string;\n filename?: string;\n contentType?: string;\n }\n | {\n bytes: Uint8Array;\n filename?: string;\n contentType?: string;\n }\n | {\n blob: Blob;\n filename?: string;\n contentType?: string;\n };\n\nexport interface MessageMedia {\n /**\n * Image attachment (used by MMS, FriendTalk image, RCS_MMS, ...).\n */\n image?: MessageBinaryInput;\n}\n\nexport interface CommonSendOptions {\n /**\n * Correlation id generated by KMsg (or provided by the caller).\n * Providers must echo this value back in SendResult.messageId.\n */\n messageId?: string;\n /**\n * Optional routing hint to force a specific provider by id.\n */\n providerId?: string;\n to: string;\n /**\n * Sender number / sender id. Optional at KMsg layer; providers may require it.\n */\n from?: string;\n /**\n * Common delivery options understood by multiple providers.\n */\n options?: {\n scheduledAt?: Date;\n /**\n * Country code for providers that support it (e.g. SOLAPI).\n * Examples: \"82\", \"+82\".\n */\n country?: string;\n customFields?: Record<string, string>;\n };\n /**\n * Provider-specific escape hatch (use sparingly).\n */\n providerOptions?: Record<string, unknown>;\n}\n\nexport interface KakaoSendOptions {\n profileId?: string;\n plusId?: string;\n disableSms?: boolean;\n adFlag?: boolean;\n buttons?: unknown[];\n imageId?: string;\n /**\n * FriendTalk image upload link hint (SOLAPI).\n */\n imageLink?: string;\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface AlimTalkFailoverOptions {\n enabled?: boolean;\n fallbackChannel?: \"sms\" | \"lms\";\n fallbackContent?: string;\n fallbackTitle?: string;\n}\n\nexport type SendWarningCode =\n | \"FAILOVER_UNSUPPORTED_PROVIDER\"\n | \"FAILOVER_PARTIAL_PROVIDER\"\n | \"FALLBACK_CONTENT_MISSING\"\n | (string & {});\n\nexport interface SendWarning {\n code: SendWarningCode;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport interface NaverSendOptions {\n talkId?: string;\n /**\n * Override the template identifier for NSA (provider-specific).\n */\n templateId?: string;\n disableSms?: boolean;\n variables?: MessageVariables;\n buttons?: unknown[];\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface VoiceSendOptions {\n voiceType?: \"FEMALE\" | \"MALE\";\n headerMessage?: string;\n tailMessage?: string;\n replyRange?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\n counselorNumber?: string;\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface FaxSendOptions {\n fileIds?: string[];\n fileUrls?: string[];\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface RcsSendOptions {\n brandId?: string;\n /**\n * Override template identifier for RCS_*TPL types.\n */\n templateId?: string;\n copyAllowed?: boolean;\n variables?: MessageVariables;\n mmsType?: \"M3\" | \"S3\" | \"M4\" | \"S4\" | \"M5\" | \"S5\" | \"M6\" | \"S6\";\n commercialType?: boolean;\n disableSms?: boolean;\n buttons?: unknown[];\n additionalBody?: {\n title?: string;\n description?: string;\n imageId?: string;\n buttons?: unknown[];\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n };\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface SmsSendOptions extends CommonSendOptions {\n type: \"SMS\" | \"LMS\" | \"MMS\";\n text: string;\n /**\n * LMS/MMS subject.\n */\n subject?: string;\n /**\n * Media attachments. For backwards compatibility, `imageUrl` is treated as a legacy alias\n * for `media.image.ref` by some providers.\n */\n media?: MessageMedia;\n /**\n * Optional image URL for MMS (provider-specific).\n */\n imageUrl?: string;\n variables?: MessageVariables;\n}\n\nexport interface AlimTalkSendOptions extends CommonSendOptions {\n type: \"ALIMTALK\";\n templateId: string;\n variables: MessageVariables;\n kakao?: KakaoSendOptions;\n failover?: AlimTalkFailoverOptions;\n}\n\nexport interface FriendTalkSendOptions extends CommonSendOptions {\n type: \"FRIENDTALK\";\n text: string;\n media?: MessageMedia;\n imageUrl?: string;\n buttons?: MessageButton[];\n variables?: MessageVariables;\n kakao?: KakaoSendOptions;\n}\n\nexport interface NsaSendOptions extends CommonSendOptions {\n type: \"NSA\";\n templateId: string;\n variables: MessageVariables;\n naver?: NaverSendOptions;\n}\n\nexport interface VoiceMessageSendOptions extends CommonSendOptions {\n type: \"VOICE\";\n text: string;\n variables?: MessageVariables;\n voice?: VoiceSendOptions;\n}\n\nexport interface FaxMessageSendOptions extends CommonSendOptions {\n type: \"FAX\";\n fax: FaxSendOptions;\n}\n\nexport interface RcsTextSendOptions extends CommonSendOptions {\n type: \"RCS_SMS\" | \"RCS_LMS\" | \"RCS_MMS\";\n text: string;\n subject?: string;\n media?: MessageMedia;\n imageUrl?: string;\n variables?: MessageVariables;\n rcs?: RcsSendOptions;\n}\n\nexport interface RcsTemplateSendOptions extends CommonSendOptions {\n type: \"RCS_TPL\" | \"RCS_ITPL\" | \"RCS_LTPL\";\n templateId: string;\n variables: MessageVariables;\n rcs?: RcsSendOptions;\n}\n\nexport type SendOptions =\n | SmsSendOptions\n | AlimTalkSendOptions\n | FriendTalkSendOptions\n | NsaSendOptions\n | VoiceMessageSendOptions\n | FaxMessageSendOptions\n | RcsTextSendOptions\n | RcsTemplateSendOptions;\n\nexport type SmsDefaultSendInput = Omit<SmsSendOptions, \"type\" | \"text\"> & {\n type?: undefined;\n /**\n * SMS text. If omitted, `content` is used.\n */\n text?: string;\n /**\n * Alias for `text`.\n */\n content?: string;\n};\n\n/**\n * Developer-facing input type.\n * - SMS defaults allow omitting `type` and using `content`.\n * - Other channels are modeled as discriminated unions on `type`.\n */\nexport type SendInput = SendOptions | SmsDefaultSendInput;\n\nexport interface SendResult {\n /**\n * Correlation id (equals the request `messageId`).\n */\n messageId: string;\n providerId: string;\n providerMessageId?: string;\n status: MessageStatus;\n type: MessageType;\n to: string;\n warnings?: SendWarning[];\n raw?: unknown;\n}\n"
|
|
13
14
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "596F775479804CAA64756E2164756E21",
|
|
16
17
|
"names": []
|
|
17
18
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var
|
|
2
|
-
${
|
|
1
|
+
var F;((u)=>{u.INVALID_REQUEST="INVALID_REQUEST";u.AUTHENTICATION_FAILED="AUTHENTICATION_FAILED";u.INSUFFICIENT_BALANCE="INSUFFICIENT_BALANCE";u.TEMPLATE_NOT_FOUND="TEMPLATE_NOT_FOUND";u.RATE_LIMIT_EXCEEDED="RATE_LIMIT_EXCEEDED";u.NETWORK_ERROR="NETWORK_ERROR";u.NETWORK_TIMEOUT="NETWORK_TIMEOUT";u.NETWORK_SERVICE_UNAVAILABLE="NETWORK_SERVICE_UNAVAILABLE";u.PROVIDER_ERROR="PROVIDER_ERROR";u.MESSAGE_SEND_FAILED="MESSAGE_SEND_FAILED";u.UNKNOWN_ERROR="UNKNOWN_ERROR"})(F||={});var N=new Set(["NETWORK_ERROR","RATE_LIMIT_EXCEEDED","NETWORK_TIMEOUT","NETWORK_SERVICE_UNAVAILABLE","PROVIDER_ERROR","UNKNOWN_ERROR"]),k=new Set(["INVALID_REQUEST","AUTHENTICATION_FAILED","INSUFFICIENT_BALANCE","TEMPLATE_NOT_FOUND","MESSAGE_SEND_FAILED"]),w=(i)=>{if(typeof i!=="number"||Number.isNaN(i)||!Number.isFinite(i))return;return Math.trunc(i)},M=(i)=>{let t=w(i);if(t===void 0||t<0)return;return t},I=(i)=>{if(typeof i!=="string")return;return i.toLowerCase().trim()},c=(i)=>{if(i>=500)return"retryable";if(i===408||i===425||i===429)return"retryable";return"non_retryable"},E=(i)=>{let t=i.toLowerCase();if(t.includes("timeout")||t.includes("temporar")||t.includes("network")||t.includes("retry"))return"retryable";return};class O extends Error{code;details;providerErrorCode;providerErrorText;httpStatus;requestId;retryAfterMs;attempt;causeChain;constructor(i,t,h,s={}){super(t);if(this.name="KMsgError",this.code=i,this.details=h,this.providerErrorCode=s.providerErrorCode,this.providerErrorText=s.providerErrorText,this.httpStatus=w(s.httpStatus),this.requestId=typeof s.requestId==="string"?s.requestId:void 0,this.retryAfterMs=w(s.retryAfterMs),this.attempt=w(s.attempt),Array.isArray(s.causeChain))this.causeChain=s.causeChain;else if(s.causeChain!==void 0)this.causeChain=[s.causeChain];if(Error.captureStackTrace)Error.captureStackTrace(this,O)}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 A={isRetryable(i,t={}){return A.classifyForRetry(i,t)==="retryable"},classifyForRetry(i,t={}){if(i instanceof O){if(new Set(t.retryableCodes??Array.from(N)).has(i.code))return"retryable";if(new Set(t.nonRetryableCodes??Array.from(k)).has(i.code))return"non_retryable";if(i.httpStatus!==void 0)return c(i.httpStatus);let m=E(i.message);if(m)return m;if(t.classifyByMessage&&i.message){let T=t.classifyByMessage(i.message);if(T)return T}if(t.fallback)return t.fallback;return"non_retryable"}let h=I(i?.status)??I(i?.statusCode)??I(i?.code),s=w(i?.status)??w(i?.statusCode)??w(i?.httpStatus);if(typeof h==="string"&&h.startsWith("5"))return"retryable";if(s!==void 0){if(t.classifyByStatusCode)return t.classifyByStatusCode(s);return c(s)}let p=typeof i?.message==="string"?E(i.message):void 0;if(p)return p;if(t.classifyByMessage&&typeof i?.message==="string"){let n=t.classifyByMessage(i.message);if(n)return n}return t.fallback??"non_retryable"},resolveRetryAfterMs(i,t){if(t?.retryAfterMs){let h=t.retryAfterMs(i),s=M(h);if(s!==void 0)return s}if(i.retryAfterMs!==void 0)return M(i.retryAfterMs);if(i.code==="RATE_LIMIT_EXCEEDED"&&i.retryAfterMs===void 0)return;return},isUnknownStatus:(i)=>{if(i===void 0||Number.isNaN(i)||!Number.isFinite(i))return!1;return i<500},toRetryMetadata(i){return{providerErrorCode:i.providerErrorCode,providerErrorText:i.providerErrorText,httpStatus:i.httpStatus,requestId:i.requestId,retryAfterMs:i.retryAfterMs,attempt:i.attempt,causeChain:i.causeChain}},withAttempt(i,t){return new O(i.code,i.message,i.details,{...A.toRetryMetadata(i),attempt:w(t)})},DEFAULT_RETRYABLE_ERROR_CODES:N,DEFAULT_NON_RETRYABLE_ERROR_CODES:k};var U;((p)=>{p.DEBUG="DEBUG";p.INFO="INFO";p.WARN="WARN";p.ERROR="ERROR"})(U||={});class B{config;context;constructor(i={},t={}){this.context=i,this.config={level:"INFO",enableConsole:!0,enableJson:!1,enableColors:!0,...t}}shouldLog(i){let t=["DEBUG","INFO","WARN","ERROR"];return t.indexOf(i)>=t.indexOf(this.config.level)}formatMessage(i){if(this.config.enableJson)return JSON.stringify({level:i.level,message:i.message,timestamp:i.timestamp.toISOString(),context:i.context,...i.error&&{error:{name:i.error.name,message:i.error.message,stack:i.error.stack}},...i.duration&&{duration:i.duration}});let t=i.timestamp.toISOString(),h=this.config.enableColors?this.colorizeLevel(i.level):i.level,s=Object.keys(i.context).length>0?` [${Object.entries(i.context).map(([n,f])=>`${n}=${f}`).join(", ")}]`:"",p=`${t} ${h}${s}: ${i.message}`;if(i.duration!==void 0)p+=` (${i.duration}ms)`;if(i.error)p+=`
|
|
2
|
+
${i.error.stack}`;return p}colorizeLevel(i){if(!this.config.enableColors)return i;return`${{["DEBUG"]:"\x1B[36m",["INFO"]:"\x1B[32m",["WARN"]:"\x1B[33m",["ERROR"]:"\x1B[31m"}[i]}${i}\x1B[0m`}writeLog(i){if(!this.shouldLog(i.level))return;let t=this.formatMessage(i);if(this.config.enableConsole)(i.level==="ERROR"?console.error:i.level==="WARN"?console.warn:console.log)(t);if(this.config.enableFile&&this.config.filePath);}debug(i,t={}){this.writeLog({level:"DEBUG",message:i,timestamp:new Date,context:{...this.context,...t}})}info(i,t={}){this.writeLog({level:"INFO",message:i,timestamp:new Date,context:{...this.context,...t}})}warn(i,t={},h){this.writeLog({level:"WARN",message:i,timestamp:new Date,context:{...this.context,...t},error:h})}error(i,t={},h){this.writeLog({level:"ERROR",message:i,timestamp:new Date,context:{...this.context,...t},error:h})}child(i){return new B({...this.context,...i},this.config)}time(i){let t=Date.now();return()=>{let h=Date.now()-t;this.info(`${i} completed`,{duration:h})}}async measure(i,t,h={}){let s=Date.now(),p={...h,operation:i};this.debug(`Starting ${i}`,p);try{let n=await t(),f=Date.now()-s;return this.info(`Completed ${i}`,{...p,duration:f}),n}catch(n){let f=Date.now()-s;throw this.error(`Failed ${i}`,{...p,duration:f},n instanceof Error?n:Error(String(n))),n}}}var q;function x(i,t){return new B(i,t)}function P(){if(!q)q=x();return q}function V(i){q=i}var G={debug:(i,t)=>P().debug(i,t),info:(i,t)=>P().info(i,t),warn:(i,t,h)=>P().warn(i,t,h),error:(i,t,h)=>P().error(i,t,h),child:(i)=>P().child(i),time:(i)=>P().time(i),measure:(i,t,h)=>P().measure(i,t,h)};function Y(i){let t=x({},i);return async(h,s)=>{let p=Date.now(),f={requestId:Math.random().toString(36).substring(7),method:h.req.method,path:h.req.path,userAgent:h.req.header("user-agent")||"unknown"};t.info("Request started",f);try{await s();let m=Date.now()-p;t.info("Request completed",{...f,status:h.res.status,duration:m})}catch(m){let T=Date.now()-p;throw t.error("Request failed",{...f,duration:T},m instanceof Error?m:Error(String(m))),m}}}class D{static defaultOptions={maxAttempts:3,initialDelay:1000,maxDelay:30000,backoffMultiplier:2,jitter:!0,retryCondition:(i)=>A.isRetryable(i)};static async execute(i,t={}){let h={...D.defaultOptions,...t},s,p=h.initialDelay;for(let n=1;n<=h.maxAttempts;n++)try{return await i()}catch(f){if(s=f,n===h.maxAttempts||!h.retryCondition(s,n))throw s;let m=h.jitter?p+Math.random()*p*0.1:p;h.onRetry?.(s,n),await new Promise((T)=>setTimeout(T,m)),p=Math.min(p*h.backoffMultiplier,h.maxDelay)}throw s}static createRetryableFunction(i,t={}){return async(...h)=>{return D.execute(()=>i(...h),t)}}}class b{static async execute(i,t,h={}){let s={concurrency:5,retryOptions:{maxAttempts:3,initialDelay:1000,maxDelay:1e4,backoffMultiplier:2,jitter:!0},failFast:!1,...h},p=Date.now(),n=[],f=[],m=0,T=D.createRetryableFunction(t,s.retryOptions),j=b.createBatches(i,s.concurrency);for(let u of j){let J=u.map(async(R)=>{try{let S=await T(R);n.push({item:R,result:S})}catch(S){if(f.push({item:R,error:S}),s.failFast)throw new O("MESSAGE_SEND_FAILED",`Bulk operation failed fast after ${f.length} failures`,{totalItems:i.length,failedCount:f.length})}finally{m++,s.onProgress?.(m,i.length,f.length)}});if(await Promise.allSettled(J),s.failFast&&f.length>0)break}let $=Date.now()-p;return{successful:n,failed:f,summary:{total:i.length,successful:n.length,failed:f.length,duration:$}}}static createBatches(i,t){let h=[];for(let s=0;s<i.length;s+=t)h.push(i.slice(s,s+t));return h}}class H{options;state="CLOSED";failureCount=0;lastFailureTime=0;nextAttemptTime=0;constructor(i){this.options=i}async execute(i){let t=Date.now();switch(this.state){case"OPEN":if(t<this.nextAttemptTime)throw new O("NETWORK_SERVICE_UNAVAILABLE","Circuit breaker is OPEN",{state:this.state,nextAttemptTime:this.nextAttemptTime});this.state="HALF_OPEN",this.options.onHalfOpen?.();break;case"HALF_OPEN":break;case"CLOSED":break}try{let h=await Promise.race([i(),new Promise((s,p)=>setTimeout(()=>p(new O("NETWORK_TIMEOUT","Circuit breaker timeout",{timeout:this.options.timeout})),this.options.timeout))]);if(this.state==="HALF_OPEN")this.state="CLOSED",this.failureCount=0,this.options.onClose?.();return h}catch(h){throw this.recordFailure(),h}}recordFailure(){if(this.failureCount++,this.lastFailureTime=Date.now(),this.failureCount>=this.options.failureThreshold)this.state="OPEN",this.nextAttemptTime=this.lastFailureTime+this.options.resetTimeout,this.options.onOpen?.()}getState(){return this.state}getFailureCount(){return this.failureCount}reset(){this.state="CLOSED",this.failureCount=0,this.lastFailureTime=0,this.nextAttemptTime=0}}class C{maxRequests;windowMs;requests=[];constructor(i,t){this.maxRequests=i;this.windowMs=t}async acquire(){let i=Date.now();if(this.requests=this.requests.filter((t)=>i-t<this.windowMs),this.requests.length>=this.maxRequests){let t=Math.min(...this.requests),h=this.windowMs-(i-t);if(h>0)return await new Promise((s)=>setTimeout(s,h)),this.acquire()}this.requests.push(i)}canMakeRequest(){let i=Date.now();return this.requests=this.requests.filter((t)=>i-t<this.windowMs),this.requests.length<this.maxRequests}getRemainingRequests(){let i=Date.now();return this.requests=this.requests.filter((t)=>i-t<this.windowMs),Math.max(0,this.maxRequests-this.requests.length)}}var Q=(i)=>({isSuccess:!0,isFailure:!1,value:i}),W=(i)=>({isSuccess:!1,isFailure:!0,error:i}),ti={map(i,t){if(i.isSuccess)return Q(t(i.value));return i},flatMap(i,t){if(i.isSuccess)return t(i.value);return i},mapError(i,t){if(i.isFailure)return W(t(i.error));return i},unwrap(i){if(i.isSuccess)return i.value;throw i.error},unwrapOr(i,t){if(i.isSuccess)return i.value;return t},unwrapOrElse(i,t){if(i.isSuccess)return i.value;return t(i.error)},match(i,t){if(i.isSuccess)return t.ok(i.value);return t.fail(i.error)},async fromPromise(i){try{let t=await i;return Q(t)}catch(t){return W(t)}},isOk(i){return i.isSuccess},isFail(i){return i.isFailure}};function X(){let i=globalThis;return i.__K_MSG_ENV__??i.__ENV__??i.process?.env??{}}function si(i){let t=X()[i];if(typeof t==="string")return t;if(t===void 0)return;return String(t)}var ni=["PENDING","SENT","FAILED"],fi="PENDING",mi=(i)=>{let t=typeof i==="string"?i.trim().toUpperCase():"";if(t==="PENDING"||t==="SENT"||t==="FAILED")return t;return"PENDING"};export{V as setGlobalLogger,si as readRuntimeEnv,Q as ok,M as normalizeRetryAfterMs,mi as normalizeMessageStatus,Y as loggerMiddleware,G as logger,X as getRuntimeEnvSource,P as getLogger,W as fail,x as createLogger,D as RetryHandler,ti as Result,C as RateLimiter,fi as QUEUED_MESSAGE_STATUS,B as Logger,U as LogLevel,ni as KNOWN_MESSAGE_STATUSES,F as KMsgErrorCode,O as KMsgError,A as ErrorUtils,H as CircuitBreaker,b as BulkOperationHandler};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=7C27E1BC859300DC64756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/errors.ts", "../src/logger.ts", "../src/resilience/retry-handler.ts", "../src/resilience/bulk-operation.ts", "../src/resilience/circuit-breaker.ts", "../src/resilience/rate-limiter.ts", "../src/result.ts", "../src/runtime/env.ts"],
|
|
3
|
+
"sources": ["../src/errors.ts", "../src/logger.ts", "../src/resilience/retry-handler.ts", "../src/resilience/bulk-operation.ts", "../src/resilience/circuit-breaker.ts", "../src/resilience/rate-limiter.ts", "../src/result.ts", "../src/runtime/env.ts", "../src/types/message.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"export enum KMsgErrorCode {\n INVALID_REQUEST = \"INVALID_REQUEST\",\n AUTHENTICATION_FAILED = \"AUTHENTICATION_FAILED\",\n INSUFFICIENT_BALANCE = \"INSUFFICIENT_BALANCE\",\n TEMPLATE_NOT_FOUND = \"TEMPLATE_NOT_FOUND\",\n RATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n NETWORK_TIMEOUT = \"NETWORK_TIMEOUT\",\n NETWORK_SERVICE_UNAVAILABLE = \"NETWORK_SERVICE_UNAVAILABLE\",\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MESSAGE_SEND_FAILED = \"MESSAGE_SEND_FAILED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nexport class KMsgError extends Error {\n public readonly code: KMsgErrorCode;\n public readonly details?: Record<string, any>;\n\n constructor(\n code: KMsgErrorCode,\n message: string,\n details?: Record<string, any>,\n ) {\n super(message);\n this.name = \"KMsgError\";\n this.code = code;\n this.details = details;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, KMsgError);\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n details: this.details,\n };\n }\n}\n\nexport const ErrorUtils = {\n isRetryable
|
|
5
|
+
"export enum KMsgErrorCode {\n INVALID_REQUEST = \"INVALID_REQUEST\",\n AUTHENTICATION_FAILED = \"AUTHENTICATION_FAILED\",\n INSUFFICIENT_BALANCE = \"INSUFFICIENT_BALANCE\",\n TEMPLATE_NOT_FOUND = \"TEMPLATE_NOT_FOUND\",\n RATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n NETWORK_TIMEOUT = \"NETWORK_TIMEOUT\",\n NETWORK_SERVICE_UNAVAILABLE = \"NETWORK_SERVICE_UNAVAILABLE\",\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MESSAGE_SEND_FAILED = \"MESSAGE_SEND_FAILED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nexport type RetryPolicyErrorCode = KMsgErrorCode;\n\nexport type ProviderRetryHint = \"retryable\" | \"non_retryable\";\n\nexport interface KMsgErrorMetadata {\n providerErrorCode?: string;\n providerErrorText?: string;\n httpStatus?: number;\n requestId?: string;\n retryAfterMs?: number;\n attempt?: number;\n causeChain?: unknown[];\n}\n\nexport interface ErrorRetryPolicy {\n retryableCodes?: readonly KMsgErrorCode[];\n nonRetryableCodes?: readonly KMsgErrorCode[];\n classifyByStatusCode?: (status: number) => ProviderRetryHint;\n classifyByMessage?: (message: string) => ProviderRetryHint | undefined;\n /**\n * Optional override for retry hint inference.\n */\n fallback?: ProviderRetryHint;\n /**\n * Optional custom retry delay in milliseconds.\n */\n retryAfterMs?: (error: KMsgError) => number | undefined;\n}\n\nconst DEFAULT_RETRYABLE_ERROR_CODES: ReadonlySet<RetryPolicyErrorCode> = new Set([\n KMsgErrorCode.NETWORK_ERROR,\n KMsgErrorCode.RATE_LIMIT_EXCEEDED,\n KMsgErrorCode.NETWORK_TIMEOUT,\n KMsgErrorCode.NETWORK_SERVICE_UNAVAILABLE,\n KMsgErrorCode.PROVIDER_ERROR,\n KMsgErrorCode.UNKNOWN_ERROR,\n]);\n\nconst DEFAULT_NON_RETRYABLE_ERROR_CODES: ReadonlySet<RetryPolicyErrorCode> = new Set([\n KMsgErrorCode.INVALID_REQUEST,\n KMsgErrorCode.AUTHENTICATION_FAILED,\n KMsgErrorCode.INSUFFICIENT_BALANCE,\n KMsgErrorCode.TEMPLATE_NOT_FOUND,\n KMsgErrorCode.MESSAGE_SEND_FAILED,\n]);\n\nconst normalizeNumber = (value: unknown): number | undefined => {\n if (typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.trunc(value);\n};\n\nexport const normalizeRetryAfterMs = (value: unknown): number | undefined => {\n const normalized = normalizeNumber(value);\n if (normalized === undefined || normalized < 0) {\n return undefined;\n }\n\n return normalized;\n};\n\nconst toLowerString = (value: unknown): string | undefined => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n return value.toLowerCase().trim();\n};\n\nconst classifyByHttpStatus = (status: number): ProviderRetryHint => {\n if (status >= 500) {\n return \"retryable\";\n }\n\n if (status === 408 || status === 425 || status === 429) {\n return \"retryable\";\n }\n\n return \"non_retryable\";\n};\n\nconst classifyByMessage = (message: string): ProviderRetryHint | undefined => {\n const normalized = message.toLowerCase();\n\n if (normalized.includes(\"timeout\") || normalized.includes(\"temporar\") || normalized.includes(\"network\") || normalized.includes(\"retry\")) {\n return \"retryable\";\n }\n\n return undefined;\n};\n\nexport class KMsgError extends Error {\n public readonly code: KMsgErrorCode;\n public readonly details?: Record<string, any>;\n public readonly providerErrorCode?: string;\n public readonly providerErrorText?: string;\n public readonly httpStatus?: number;\n public readonly requestId?: string;\n public readonly retryAfterMs?: number;\n public readonly attempt?: number;\n public readonly causeChain?: unknown[];\n\n constructor(\n code: KMsgErrorCode,\n message: string,\n details?: Record<string, any>,\n metadata: KMsgErrorMetadata = {},\n ) {\n super(message);\n this.name = \"KMsgError\";\n this.code = code;\n this.details = details;\n\n this.providerErrorCode = metadata.providerErrorCode;\n this.providerErrorText = metadata.providerErrorText;\n this.httpStatus = normalizeNumber(metadata.httpStatus);\n this.requestId = typeof metadata.requestId === \"string\" ? metadata.requestId : undefined;\n this.retryAfterMs = normalizeNumber(metadata.retryAfterMs);\n this.attempt = normalizeNumber(metadata.attempt);\n\n if (Array.isArray(metadata.causeChain)) {\n this.causeChain = metadata.causeChain;\n } else if (metadata.causeChain !== undefined) {\n this.causeChain = [metadata.causeChain];\n }\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, KMsgError);\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n details: this.details,\n providerErrorCode: this.providerErrorCode,\n providerErrorText: this.providerErrorText,\n httpStatus: this.httpStatus,\n requestId: this.requestId,\n retryAfterMs: this.retryAfterMs,\n attempt: this.attempt,\n causeChain: this.causeChain,\n };\n }\n}\n\nexport const ErrorUtils = {\n isRetryable(error: any, policy: ErrorRetryPolicy = {}): boolean {\n return ErrorUtils.classifyForRetry(error, policy) === \"retryable\";\n },\n\n classifyForRetry(\n error: any,\n policy: ErrorRetryPolicy = {},\n ): ProviderRetryHint {\n if (error instanceof KMsgError) {\n const retryableCodes = new Set(\n policy.retryableCodes ?? Array.from(DEFAULT_RETRYABLE_ERROR_CODES),\n );\n if (retryableCodes.has(error.code)) {\n return \"retryable\";\n }\n\n const nonRetryableCodes = new Set(\n policy.nonRetryableCodes ?? Array.from(DEFAULT_NON_RETRYABLE_ERROR_CODES),\n );\n if (nonRetryableCodes.has(error.code)) {\n return \"non_retryable\";\n }\n\n if (error.httpStatus !== undefined) {\n return classifyByHttpStatus(error.httpStatus);\n }\n\n const classifiedByMessage = classifyByMessage(error.message);\n if (classifiedByMessage) {\n return classifiedByMessage;\n }\n\n if (policy.classifyByMessage && error.message) {\n const classified = policy.classifyByMessage(error.message);\n if (classified) {\n return classified;\n }\n }\n\n if (policy.fallback) {\n return policy.fallback;\n }\n\n return \"non_retryable\";\n }\n\n const status = toLowerString(error?.status) ?? toLowerString(error?.statusCode) ?? toLowerString(error?.code);\n const statusCode = normalizeNumber(error?.status) ??\n normalizeNumber(error?.statusCode) ??\n normalizeNumber(error?.httpStatus);\n\n if (typeof status === \"string\" && status.startsWith(\"5\")) {\n return \"retryable\";\n }\n\n if (statusCode !== undefined) {\n if (policy.classifyByStatusCode) {\n return policy.classifyByStatusCode(statusCode);\n }\n\n return classifyByHttpStatus(statusCode);\n }\n\n const classifiedByMessage =\n typeof error?.message === \"string\"\n ? classifyByMessage(error.message)\n : undefined;\n\n if (classifiedByMessage) {\n return classifiedByMessage;\n }\n\n if (policy.classifyByMessage && typeof error?.message === \"string\") {\n const classified = policy.classifyByMessage(error.message);\n if (classified) {\n return classified;\n }\n }\n\n return policy.fallback ?? \"non_retryable\";\n },\n\n resolveRetryAfterMs(\n error: KMsgError,\n policy?: ErrorRetryPolicy,\n ): number | undefined {\n if (policy?.retryAfterMs) {\n const override = policy.retryAfterMs(error);\n const normalized = normalizeRetryAfterMs(override);\n if (normalized !== undefined) {\n return normalized;\n }\n }\n\n if (error.retryAfterMs !== undefined) {\n return normalizeRetryAfterMs(error.retryAfterMs);\n }\n\n if (error.code === KMsgErrorCode.RATE_LIMIT_EXCEEDED && error.retryAfterMs === undefined) {\n return undefined;\n }\n\n return undefined;\n },\n\n isUnknownStatus: (statusCode: number | undefined): boolean => {\n if (statusCode === undefined || Number.isNaN(statusCode) || !Number.isFinite(statusCode)) {\n return false;\n }\n\n return statusCode < 500;\n },\n\n toRetryMetadata(error: KMsgError): KMsgErrorMetadata {\n return {\n providerErrorCode: error.providerErrorCode,\n providerErrorText: error.providerErrorText,\n httpStatus: error.httpStatus,\n requestId: error.requestId,\n retryAfterMs: error.retryAfterMs,\n attempt: error.attempt,\n causeChain: error.causeChain,\n };\n },\n\n withAttempt(\n error: KMsgError,\n attempt: number,\n ): KMsgError {\n return new KMsgError(\n error.code,\n error.message,\n error.details,\n {\n ...ErrorUtils.toRetryMetadata(error),\n attempt: normalizeNumber(attempt),\n },\n );\n },\n\n DEFAULT_RETRYABLE_ERROR_CODES,\n DEFAULT_NON_RETRYABLE_ERROR_CODES,\n};\n",
|
|
6
6
|
"export enum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n WARN = \"WARN\",\n ERROR = \"ERROR\",\n}\n\nexport interface LogContext {\n component?: string;\n operation?: string;\n userId?: string;\n sessionId?: string;\n requestId?: string;\n traceId?: string;\n [key: string]: any;\n}\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context: LogContext;\n error?: Error;\n duration?: number;\n}\n\nexport interface LoggerConfig {\n level: LogLevel;\n enableConsole: boolean;\n enableFile?: boolean;\n filePath?: string;\n maxFileSize?: number;\n maxFiles?: number;\n enableJson?: boolean;\n enableColors?: boolean;\n}\n\nexport class Logger {\n private config: LoggerConfig;\n private context: LogContext;\n\n constructor(context: LogContext = {}, config: Partial<LoggerConfig> = {}) {\n this.context = context;\n this.config = {\n level: LogLevel.INFO,\n enableConsole: true,\n enableJson: false,\n enableColors: true,\n ...config,\n };\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels = [\n LogLevel.DEBUG,\n LogLevel.INFO,\n LogLevel.WARN,\n LogLevel.ERROR,\n ];\n return levels.indexOf(level) >= levels.indexOf(this.config.level);\n }\n\n private formatMessage(entry: LogEntry): string {\n if (this.config.enableJson) {\n return JSON.stringify({\n level: entry.level,\n message: entry.message,\n timestamp: entry.timestamp.toISOString(),\n context: entry.context,\n ...(entry.error && {\n error: {\n name: entry.error.name,\n message: entry.error.message,\n stack: entry.error.stack,\n },\n }),\n ...(entry.duration && { duration: entry.duration }),\n });\n }\n\n const timestamp = entry.timestamp.toISOString();\n const level = this.config.enableColors\n ? this.colorizeLevel(entry.level)\n : entry.level;\n const contextStr =\n Object.keys(entry.context).length > 0\n ? ` [${Object.entries(entry.context)\n .map(([k, v]) => `${k}=${v}`)\n .join(\", \")}]`\n : \"\";\n\n let message = `${timestamp} ${level}${contextStr}: ${entry.message}`;\n\n if (entry.duration !== undefined) {\n message += ` (${entry.duration}ms)`;\n }\n\n if (entry.error) {\n message += `\\n${entry.error.stack}`;\n }\n\n return message;\n }\n\n private colorizeLevel(level: LogLevel): string {\n if (!this.config.enableColors) return level;\n\n const colors = {\n [LogLevel.DEBUG]: \"\\x1b[36m\", // cyan\n [LogLevel.INFO]: \"\\x1b[32m\", // green\n [LogLevel.WARN]: \"\\x1b[33m\", // yellow\n [LogLevel.ERROR]: \"\\x1b[31m\", // red\n };\n\n return `${colors[level]}${level}\\x1b[0m`;\n }\n\n private writeLog(entry: LogEntry): void {\n if (!this.shouldLog(entry.level)) return;\n\n const message = this.formatMessage(entry);\n\n if (this.config.enableConsole) {\n const logFn =\n entry.level === LogLevel.ERROR\n ? console.error\n : entry.level === LogLevel.WARN\n ? console.warn\n : console.log;\n logFn(message);\n }\n\n // File logging would be implemented here if needed\n if (this.config.enableFile && this.config.filePath) {\n // Bun.write(this.config.filePath, message + '\\n', { createPath: true });\n }\n }\n\n debug(message: string, context: LogContext = {}): void {\n this.writeLog({\n level: LogLevel.DEBUG,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n });\n }\n\n info(message: string, context: LogContext = {}): void {\n this.writeLog({\n level: LogLevel.INFO,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n });\n }\n\n warn(message: string, context: LogContext = {}, error?: Error): void {\n this.writeLog({\n level: LogLevel.WARN,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n error,\n });\n }\n\n error(message: string, context: LogContext = {}, error?: Error): void {\n this.writeLog({\n level: LogLevel.ERROR,\n message,\n timestamp: new Date(),\n context: { ...this.context, ...context },\n error,\n });\n }\n\n child(context: LogContext): Logger {\n return new Logger({ ...this.context, ...context }, this.config);\n }\n\n time(label: string): () => void {\n const start = Date.now();\n return () => {\n const duration = Date.now() - start;\n this.info(`${label} completed`, { duration });\n };\n }\n\n async measure<T>(\n operation: string,\n fn: () => Promise<T>,\n context: LogContext = {},\n ): Promise<T> {\n const start = Date.now();\n const operationContext = { ...context, operation };\n\n this.debug(`Starting ${operation}`, operationContext);\n\n try {\n const result = await fn();\n const duration = Date.now() - start;\n\n this.info(`Completed ${operation}`, { ...operationContext, duration });\n return result;\n } catch (error) {\n const duration = Date.now() - start;\n\n this.error(\n `Failed ${operation}`,\n { ...operationContext, duration },\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n }\n}\n\n// Global logger instance\nlet globalLogger: Logger;\n\nexport function createLogger(\n context?: LogContext,\n config?: Partial<LoggerConfig>,\n): Logger {\n return new Logger(context, config);\n}\n\nexport function getLogger(): Logger {\n if (!globalLogger) {\n globalLogger = createLogger();\n }\n return globalLogger;\n}\n\nexport function setGlobalLogger(logger: Logger): void {\n globalLogger = logger;\n}\n\n// Convenience functions\nexport const logger = {\n debug: (message: string, context?: LogContext) =>\n getLogger().debug(message, context),\n info: (message: string, context?: LogContext) =>\n getLogger().info(message, context),\n warn: (message: string, context?: LogContext, error?: Error) =>\n getLogger().warn(message, context, error),\n error: (message: string, context?: LogContext, error?: Error) =>\n getLogger().error(message, context, error),\n child: (context: LogContext) => getLogger().child(context),\n time: (label: string) => getLogger().time(label),\n measure: <T>(operation: string, fn: () => Promise<T>, context?: LogContext) =>\n getLogger().measure(operation, fn, context),\n};\n\n// Express-style middleware for Hono\nexport function loggerMiddleware(config?: Partial<LoggerConfig>) {\n const requestLogger = createLogger({}, config);\n\n return async (c: any, next: any) => {\n const start = Date.now();\n const requestId = Math.random().toString(36).substring(7);\n\n const context = {\n requestId,\n method: c.req.method,\n path: c.req.path,\n userAgent: c.req.header(\"user-agent\") || \"unknown\",\n };\n\n requestLogger.info(\"Request started\", context);\n\n try {\n await next();\n\n const duration = Date.now() - start;\n requestLogger.info(\"Request completed\", {\n ...context,\n status: c.res.status,\n duration,\n });\n } catch (error) {\n const duration = Date.now() - start;\n requestLogger.error(\n \"Request failed\",\n {\n ...context,\n duration,\n },\n error instanceof Error ? error : new Error(String(error)),\n );\n\n throw error;\n }\n };\n}\n",
|
|
7
7
|
"/**\n * Retry options and handler for K-Message Platform\n */\n\nimport { ErrorUtils } from \"../errors\";\n\nexport interface RetryOptions {\n maxAttempts?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffMultiplier?: number;\n jitter?: boolean;\n retryCondition?: (error: Error, attempt: number) => boolean;\n onRetry?: (error: Error, attempt: number) => void;\n}\n\n/**\n * Exponential backoff retry mechanism\n */\nexport class RetryHandler {\n private static defaultOptions: RetryOptions = {\n maxAttempts: 3,\n initialDelay: 1000,\n maxDelay: 30000,\n backoffMultiplier: 2,\n jitter: true,\n retryCondition: (error) => ErrorUtils.isRetryable(error),\n };\n\n static async execute<T>(\n operation: () => Promise<T>,\n options: Partial<RetryOptions> = {},\n ): Promise<T> {\n const opts = {\n ...RetryHandler.defaultOptions,\n ...options,\n } as Required<RetryOptions>;\n let lastError: Error;\n let delay = opts.initialDelay;\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error as Error;\n\n if (\n attempt === opts.maxAttempts ||\n !opts.retryCondition!(lastError, attempt)\n ) {\n throw lastError;\n }\n\n const actualDelay = opts.jitter\n ? delay + Math.random() * delay * 0.1\n : delay;\n\n opts.onRetry?.(lastError, attempt);\n\n await new Promise((resolve) => setTimeout(resolve, actualDelay));\n\n delay = Math.min(delay * opts.backoffMultiplier, opts.maxDelay);\n }\n }\n\n throw lastError!;\n }\n\n static createRetryableFunction<T extends any[], R>(\n func: (...args: T) => Promise<R>,\n options: Partial<RetryOptions> = {},\n ): (...args: T) => Promise<R> {\n return async (...args: T) => {\n return RetryHandler.execute(() => func(...args), options);\n };\n }\n}\n",
|
|
8
8
|
"/**\n * Bulk operation handler with error recovery\n */\n\nimport { KMsgError, KMsgErrorCode } from \"../errors\";\nimport { RetryHandler, type RetryOptions } from \"./retry-handler\";\n\nexport interface BulkOperationOptions {\n concurrency: number;\n retryOptions: RetryOptions;\n failFast: boolean;\n onProgress?: (completed: number, total: number, failed: number) => void;\n}\n\nexport class BulkOperationHandler {\n static async execute<T, R>(\n items: T[],\n operation: (item: T) => Promise<R>,\n options: Partial<BulkOperationOptions> = {},\n ): Promise<{\n successful: { item: T; result: R }[];\n failed: { item: T; error: Error }[];\n summary: {\n total: number;\n successful: number;\n failed: number;\n duration: number;\n };\n }> {\n const opts: BulkOperationOptions = {\n concurrency: 5,\n retryOptions: {\n maxAttempts: 3,\n initialDelay: 1000,\n maxDelay: 10000,\n backoffMultiplier: 2,\n jitter: true,\n },\n failFast: false,\n ...options,\n };\n\n const startTime = Date.now();\n const successful: { item: T; result: R }[] = [];\n const failed: { item: T; error: Error }[] = [];\n let completed = 0;\n\n const retryableOperation = RetryHandler.createRetryableFunction(\n operation,\n opts.retryOptions,\n );\n\n const batches = BulkOperationHandler.createBatches(items, opts.concurrency);\n\n for (const batch of batches) {\n const batchPromises = batch.map(async (item) => {\n try {\n const result = await retryableOperation(item);\n successful.push({ item, result });\n } catch (error) {\n failed.push({ item, error: error as Error });\n\n if (opts.failFast) {\n throw new KMsgError(\n KMsgErrorCode.MESSAGE_SEND_FAILED,\n `Bulk operation failed fast after ${failed.length} failures`,\n { totalItems: items.length, failedCount: failed.length },\n );\n }\n } finally {\n completed++;\n opts.onProgress?.(completed, items.length, failed.length);\n }\n });\n\n await Promise.allSettled(batchPromises);\n\n if (opts.failFast && failed.length > 0) {\n break;\n }\n }\n\n const duration = Date.now() - startTime;\n\n return {\n successful,\n failed,\n summary: {\n total: items.length,\n successful: successful.length,\n failed: failed.length,\n duration,\n },\n };\n }\n\n private static createBatches<T>(items: T[], batchSize: number): T[][] {\n const batches: T[][] = [];\n for (let i = 0; i < items.length; i += batchSize) {\n batches.push(items.slice(i, i + batchSize));\n }\n return batches;\n }\n}\n",
|
|
9
9
|
"/**\n * Circuit breaker pattern implementation\n */\n\nimport { KMsgError, KMsgErrorCode } from \"../errors\";\n\nexport interface CircuitBreakerOptions {\n failureThreshold: number;\n timeout: number;\n resetTimeout: number;\n onOpen?: () => void;\n onHalfOpen?: () => void;\n onClose?: () => void;\n}\n\nexport class CircuitBreaker {\n private state: \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\" = \"CLOSED\";\n private failureCount = 0;\n private lastFailureTime = 0;\n private nextAttemptTime = 0;\n\n constructor(private options: CircuitBreakerOptions) {}\n\n async execute<T>(operation: () => Promise<T>): Promise<T> {\n const now = Date.now();\n\n switch (this.state) {\n case \"OPEN\":\n if (now < this.nextAttemptTime) {\n throw new KMsgError(\n KMsgErrorCode.NETWORK_SERVICE_UNAVAILABLE,\n \"Circuit breaker is OPEN\",\n { state: this.state, nextAttemptTime: this.nextAttemptTime },\n );\n }\n this.state = \"HALF_OPEN\";\n this.options.onHalfOpen?.();\n break;\n\n case \"HALF_OPEN\":\n break;\n\n case \"CLOSED\":\n break;\n }\n\n try {\n const result = await Promise.race([\n operation(),\n new Promise<never>((_, reject) =>\n setTimeout(\n () =>\n reject(\n new KMsgError(\n KMsgErrorCode.NETWORK_TIMEOUT,\n \"Circuit breaker timeout\",\n { timeout: this.options.timeout },\n ),\n ),\n this.options.timeout,\n ),\n ),\n ]);\n\n if (this.state === \"HALF_OPEN\") {\n this.state = \"CLOSED\";\n this.failureCount = 0;\n this.options.onClose?.();\n }\n\n return result;\n } catch (error) {\n this.recordFailure();\n throw error;\n }\n }\n\n private recordFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n\n if (this.failureCount >= this.options.failureThreshold) {\n this.state = \"OPEN\";\n this.nextAttemptTime = this.lastFailureTime + this.options.resetTimeout;\n this.options.onOpen?.();\n }\n }\n\n getState(): string {\n return this.state;\n }\n\n getFailureCount(): number {\n return this.failureCount;\n }\n\n reset(): void {\n this.state = \"CLOSED\";\n this.failureCount = 0;\n this.lastFailureTime = 0;\n this.nextAttemptTime = 0;\n }\n}\n",
|
|
10
10
|
"/**\n * Rate limiter for API calls\n */\n\nexport class RateLimiter {\n private requests: number[] = [];\n\n constructor(\n private maxRequests: number,\n private windowMs: number,\n ) {}\n\n async acquire(): Promise<void> {\n const now = Date.now();\n\n this.requests = this.requests.filter((time) => now - time < this.windowMs);\n\n if (this.requests.length >= this.maxRequests) {\n const oldestRequest = Math.min(...this.requests);\n const waitTime = this.windowMs - (now - oldestRequest);\n\n if (waitTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n return this.acquire();\n }\n }\n\n this.requests.push(now);\n }\n\n canMakeRequest(): boolean {\n const now = Date.now();\n this.requests = this.requests.filter((time) => now - time < this.windowMs);\n return this.requests.length < this.maxRequests;\n }\n\n getRemainingRequests(): number {\n const now = Date.now();\n this.requests = this.requests.filter((time) => now - time < this.windowMs);\n return Math.max(0, this.maxRequests - this.requests.length);\n }\n}\n",
|
|
11
11
|
"export type Ok<T> = {\n readonly isSuccess: true;\n readonly isFailure: false;\n readonly value: T;\n};\n\nexport type Fail<E> = {\n readonly isSuccess: false;\n readonly isFailure: true;\n readonly error: E;\n};\n\nexport type Result<T, E = Error> = Ok<T> | Fail<E>;\n\nexport const ok = <T>(value: T): Ok<T> => ({\n isSuccess: true,\n isFailure: false,\n value,\n});\n\nexport const fail = <E>(error: E): Fail<E> => ({\n isSuccess: false,\n isFailure: true,\n error,\n});\n\n/**\n * Result utility functions for chaining and transformation\n */\nexport const Result = {\n /**\n * Transform the success value of a Result\n */\n map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> {\n if (result.isSuccess) {\n return ok(fn(result.value));\n }\n return result;\n },\n\n /**\n * Chain Result-returning operations\n */\n flatMap<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => Result<U, E>,\n ): Result<U, E> {\n if (result.isSuccess) {\n return fn(result.value);\n }\n return result;\n },\n\n /**\n * Transform the error of a Result\n */\n mapError<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F> {\n if (result.isFailure) {\n return fail(fn(result.error));\n }\n return result;\n },\n\n /**\n * Extract the value or throw the error\n */\n unwrap<T, E>(result: Result<T, E>): T {\n if (result.isSuccess) {\n return result.value;\n }\n throw result.error;\n },\n\n /**\n * Extract the value or return a default\n */\n unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (result.isSuccess) {\n return result.value;\n }\n return defaultValue;\n },\n\n /**\n * Extract the value or compute a default from the error\n */\n unwrapOrElse<T, E>(result: Result<T, E>, fn: (error: E) => T): T {\n if (result.isSuccess) {\n return result.value;\n }\n return fn(result.error);\n },\n\n /**\n * Pattern match on a Result\n */\n match<T, E, U>(\n result: Result<T, E>,\n handlers: { ok: (value: T) => U; fail: (error: E) => U },\n ): U {\n if (result.isSuccess) {\n return handlers.ok(result.value);\n }\n return handlers.fail(result.error);\n },\n\n /**\n * Convert a Promise to a Result\n */\n async fromPromise<T, E = Error>(promise: Promise<T>): Promise<Result<T, E>> {\n try {\n const value = await promise;\n return ok(value);\n } catch (error) {\n return fail(error as E);\n }\n },\n\n /**\n * Check if a Result is Ok\n */\n isOk<T, E>(result: Result<T, E>): result is Ok<T> {\n return result.isSuccess;\n },\n\n /**\n * Check if a Result is Fail\n */\n isFail<T, E>(result: Result<T, E>): result is Fail<E> {\n return result.isFailure;\n },\n};\n",
|
|
12
|
-
"export type RuntimeEnvRecord = Record<string, string | undefined>;\n\ntype RuntimeGlobal = typeof globalThis & {\n __ENV__?: RuntimeEnvRecord;\n __K_MSG_ENV__?: RuntimeEnvRecord;\n process?: {\n env?: RuntimeEnvRecord;\n };\n};\n\n/**\n * Resolve environment variables in a runtime-neutral order.\n *\n * Priority:\n * 1. globalThis.__K_MSG_ENV__\n * 2. globalThis.__ENV__\n * 3. globalThis.process?.env\n */\nexport function getRuntimeEnvSource(): RuntimeEnvRecord {\n const runtimeGlobal = globalThis as RuntimeGlobal;\n return (\n runtimeGlobal.__K_MSG_ENV__ ??\n runtimeGlobal.__ENV__ ??\n runtimeGlobal.process?.env ??\n {}\n );\n}\n\nexport function readRuntimeEnv(key: string): string | undefined {\n const value = getRuntimeEnvSource()[key];\n if (typeof value === \"string\") {\n return value;\n }\n if (value === undefined) {\n return undefined;\n }\n return String(value);\n}\n"
|
|
12
|
+
"export type RuntimeEnvRecord = Record<string, string | undefined>;\n\ntype RuntimeGlobal = typeof globalThis & {\n __ENV__?: RuntimeEnvRecord;\n __K_MSG_ENV__?: RuntimeEnvRecord;\n process?: {\n env?: RuntimeEnvRecord;\n };\n};\n\n/**\n * Resolve environment variables in a runtime-neutral order.\n *\n * Priority:\n * 1. globalThis.__K_MSG_ENV__\n * 2. globalThis.__ENV__\n * 3. globalThis.process?.env\n */\nexport function getRuntimeEnvSource(): RuntimeEnvRecord {\n const runtimeGlobal = globalThis as RuntimeGlobal;\n return (\n runtimeGlobal.__K_MSG_ENV__ ??\n runtimeGlobal.__ENV__ ??\n runtimeGlobal.process?.env ??\n {}\n );\n}\n\nexport function readRuntimeEnv(key: string): string | undefined {\n const value = getRuntimeEnvSource()[key];\n if (typeof value === \"string\") {\n return value;\n }\n if (value === undefined) {\n return undefined;\n }\n return String(value);\n}\n",
|
|
13
|
+
"export type MessageType =\n | \"ALIMTALK\"\n | \"FRIENDTALK\"\n | \"SMS\"\n | \"LMS\"\n | \"MMS\"\n | \"NSA\"\n | \"VOICE\"\n | \"FAX\"\n | \"RCS_SMS\"\n | \"RCS_LMS\"\n | \"RCS_MMS\"\n | \"RCS_TPL\"\n | \"RCS_ITPL\"\n | \"RCS_LTPL\";\n\nexport type MessageStatus = \"PENDING\" | \"SENT\" | \"FAILED\";\n\nexport const KNOWN_MESSAGE_STATUSES: MessageStatus[] = [\n \"PENDING\",\n \"SENT\",\n \"FAILED\",\n];\n\nexport const QUEUED_MESSAGE_STATUS: MessageStatus = \"PENDING\";\n\nexport const normalizeMessageStatus = (status: unknown): MessageStatus => {\n const raw = typeof status === \"string\" ? status.trim().toUpperCase() : \"\";\n\n if (raw === \"PENDING\" || raw === \"SENT\" || raw === \"FAILED\") {\n return raw;\n }\n\n return QUEUED_MESSAGE_STATUS;\n};\n\nexport type MessageVariables = Record<\n string,\n string | number | boolean | Date | null | undefined\n>;\n\nexport interface MessageButton {\n name: string;\n /**\n * Provider-dependent. Common values: \"WL\" (web link), \"AL\" (app link), ...\n */\n type: string;\n urlPc?: string;\n urlMobile?: string;\n}\n\nexport type MessageBinaryInput =\n | {\n /**\n * URL or file path (provider-dependent).\n */\n ref: string;\n filename?: string;\n contentType?: string;\n }\n | {\n bytes: Uint8Array;\n filename?: string;\n contentType?: string;\n }\n | {\n blob: Blob;\n filename?: string;\n contentType?: string;\n };\n\nexport interface MessageMedia {\n /**\n * Image attachment (used by MMS, FriendTalk image, RCS_MMS, ...).\n */\n image?: MessageBinaryInput;\n}\n\nexport interface CommonSendOptions {\n /**\n * Correlation id generated by KMsg (or provided by the caller).\n * Providers must echo this value back in SendResult.messageId.\n */\n messageId?: string;\n /**\n * Optional routing hint to force a specific provider by id.\n */\n providerId?: string;\n to: string;\n /**\n * Sender number / sender id. Optional at KMsg layer; providers may require it.\n */\n from?: string;\n /**\n * Common delivery options understood by multiple providers.\n */\n options?: {\n scheduledAt?: Date;\n /**\n * Country code for providers that support it (e.g. SOLAPI).\n * Examples: \"82\", \"+82\".\n */\n country?: string;\n customFields?: Record<string, string>;\n };\n /**\n * Provider-specific escape hatch (use sparingly).\n */\n providerOptions?: Record<string, unknown>;\n}\n\nexport interface KakaoSendOptions {\n profileId?: string;\n plusId?: string;\n disableSms?: boolean;\n adFlag?: boolean;\n buttons?: unknown[];\n imageId?: string;\n /**\n * FriendTalk image upload link hint (SOLAPI).\n */\n imageLink?: string;\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface AlimTalkFailoverOptions {\n enabled?: boolean;\n fallbackChannel?: \"sms\" | \"lms\";\n fallbackContent?: string;\n fallbackTitle?: string;\n}\n\nexport type SendWarningCode =\n | \"FAILOVER_UNSUPPORTED_PROVIDER\"\n | \"FAILOVER_PARTIAL_PROVIDER\"\n | \"FALLBACK_CONTENT_MISSING\"\n | (string & {});\n\nexport interface SendWarning {\n code: SendWarningCode;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport interface NaverSendOptions {\n talkId?: string;\n /**\n * Override the template identifier for NSA (provider-specific).\n */\n templateId?: string;\n disableSms?: boolean;\n variables?: MessageVariables;\n buttons?: unknown[];\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface VoiceSendOptions {\n voiceType?: \"FEMALE\" | \"MALE\";\n headerMessage?: string;\n tailMessage?: string;\n replyRange?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\n counselorNumber?: string;\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface FaxSendOptions {\n fileIds?: string[];\n fileUrls?: string[];\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface RcsSendOptions {\n brandId?: string;\n /**\n * Override template identifier for RCS_*TPL types.\n */\n templateId?: string;\n copyAllowed?: boolean;\n variables?: MessageVariables;\n mmsType?: \"M3\" | \"S3\" | \"M4\" | \"S4\" | \"M5\" | \"S5\" | \"M6\" | \"S6\";\n commercialType?: boolean;\n disableSms?: boolean;\n buttons?: unknown[];\n additionalBody?: {\n title?: string;\n description?: string;\n imageId?: string;\n buttons?: unknown[];\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n };\n // biome-ignore lint/suspicious/noExplicitAny: provider-specific extras\n [key: string]: any;\n}\n\nexport interface SmsSendOptions extends CommonSendOptions {\n type: \"SMS\" | \"LMS\" | \"MMS\";\n text: string;\n /**\n * LMS/MMS subject.\n */\n subject?: string;\n /**\n * Media attachments. For backwards compatibility, `imageUrl` is treated as a legacy alias\n * for `media.image.ref` by some providers.\n */\n media?: MessageMedia;\n /**\n * Optional image URL for MMS (provider-specific).\n */\n imageUrl?: string;\n variables?: MessageVariables;\n}\n\nexport interface AlimTalkSendOptions extends CommonSendOptions {\n type: \"ALIMTALK\";\n templateId: string;\n variables: MessageVariables;\n kakao?: KakaoSendOptions;\n failover?: AlimTalkFailoverOptions;\n}\n\nexport interface FriendTalkSendOptions extends CommonSendOptions {\n type: \"FRIENDTALK\";\n text: string;\n media?: MessageMedia;\n imageUrl?: string;\n buttons?: MessageButton[];\n variables?: MessageVariables;\n kakao?: KakaoSendOptions;\n}\n\nexport interface NsaSendOptions extends CommonSendOptions {\n type: \"NSA\";\n templateId: string;\n variables: MessageVariables;\n naver?: NaverSendOptions;\n}\n\nexport interface VoiceMessageSendOptions extends CommonSendOptions {\n type: \"VOICE\";\n text: string;\n variables?: MessageVariables;\n voice?: VoiceSendOptions;\n}\n\nexport interface FaxMessageSendOptions extends CommonSendOptions {\n type: \"FAX\";\n fax: FaxSendOptions;\n}\n\nexport interface RcsTextSendOptions extends CommonSendOptions {\n type: \"RCS_SMS\" | \"RCS_LMS\" | \"RCS_MMS\";\n text: string;\n subject?: string;\n media?: MessageMedia;\n imageUrl?: string;\n variables?: MessageVariables;\n rcs?: RcsSendOptions;\n}\n\nexport interface RcsTemplateSendOptions extends CommonSendOptions {\n type: \"RCS_TPL\" | \"RCS_ITPL\" | \"RCS_LTPL\";\n templateId: string;\n variables: MessageVariables;\n rcs?: RcsSendOptions;\n}\n\nexport type SendOptions =\n | SmsSendOptions\n | AlimTalkSendOptions\n | FriendTalkSendOptions\n | NsaSendOptions\n | VoiceMessageSendOptions\n | FaxMessageSendOptions\n | RcsTextSendOptions\n | RcsTemplateSendOptions;\n\nexport type SmsDefaultSendInput = Omit<SmsSendOptions, \"type\" | \"text\"> & {\n type?: undefined;\n /**\n * SMS text. If omitted, `content` is used.\n */\n text?: string;\n /**\n * Alias for `text`.\n */\n content?: string;\n};\n\n/**\n * Developer-facing input type.\n * - SMS defaults allow omitting `type` and using `content`.\n * - Other channels are modeled as discriminated unions on `type`.\n */\nexport type SendInput = SendOptions | SmsDefaultSendInput;\n\nexport interface SendResult {\n /**\n * Correlation id (equals the request `messageId`).\n */\n messageId: string;\n providerId: string;\n providerMessageId?: string;\n status: MessageStatus;\n type: MessageType;\n to: string;\n warnings?: SendWarning[];\n raw?: unknown;\n}\n"
|
|
13
14
|
],
|
|
14
|
-
"mappings": "AAAO,IAAK,GAAL,CAAK,IAAL,CACL,kBAAkB,kBAClB,wBAAwB,wBACxB,uBAAuB,uBACvB,qBAAqB,qBACrB,sBAAsB,sBACtB,gBAAgB,gBAChB,kBAAkB,kBAClB,8BAA8B,8BAC9B,iBAAiB,iBACjB,sBAAsB,sBACtB,gBAAgB,kBAXN,QAcL,MAAM,UAAkB,KAAM,CACnB,KACA,QAEhB,WAAW,CACT,EACA,EACA,EACA,CACA,MAAM,CAAO,EAKb,GAJA,KAAK,KAAO,YACZ,KAAK,KAAO,EACZ,KAAK,QAAU,EAEX,MAAM,kBACR,MAAM,kBAAkB,KAAM,CAAS,EAI3C,MAAM,EAAG,CACP,MAAO,CACL,KAAM,KAAK,KACX,KAAM,KAAK,KACX,QAAS,KAAK,QACd,QAAS,KAAK,OAChB,EAEJ,CAEO,IAAM,EAAa,CACxB,YAAa,CAAC,IAAwB,CACpC,GAAI,aAAiB,EACnB,MAAO,CACL,gBACA,sBACA,gBACF,EAAE,SAAS,EAAM,IAAI,EAEvB,MAAO,GAEX,ECtDO,IAAK,GAAL,CAAK,IAAL,CACL,QAAQ,QACR,OAAO,OACP,OAAO,OACP,QAAQ,UAJE,QAqCL,MAAM,CAAO,CACV,OACA,QAER,WAAW,CAAC,EAAsB,CAAC,EAAG,EAAgC,CAAC,EAAG,CACxE,KAAK,QAAU,EACf,KAAK,OAAS,CACZ,MAAO,OACP,cAAe,GACf,WAAY,GACZ,aAAc,MACX,CACL,EAGM,SAAS,CAAC,EAA0B,CAC1C,IAAM,EAAS,CACb,QACA,OACA,OACA,OACF,EACA,OAAO,EAAO,QAAQ,CAAK,GAAK,EAAO,QAAQ,KAAK,OAAO,KAAK,EAG1D,aAAa,CAAC,EAAyB,CAC7C,GAAI,KAAK,OAAO,WACd,OAAO,KAAK,UAAU,CACpB,MAAO,EAAM,MACb,QAAS,EAAM,QACf,UAAW,EAAM,UAAU,YAAY,EACvC,QAAS,EAAM,WACX,EAAM,OAAS,CACjB,MAAO,CACL,KAAM,EAAM,MAAM,KAClB,QAAS,EAAM,MAAM,QACrB,MAAO,EAAM,MAAM,KACrB,CACF,KACI,EAAM,UAAY,CAAE,SAAU,EAAM,QAAS,CACnD,CAAC,EAGH,IAAM,EAAY,EAAM,UAAU,YAAY,EACxC,EAAQ,KAAK,OAAO,aACtB,KAAK,cAAc,EAAM,KAAK,EAC9B,EAAM,MACJ,EACJ,OAAO,KAAK,EAAM,OAAO,EAAE,OAAS,EAChC,KAAK,OAAO,QAAQ,EAAM,OAAO,EAC9B,IAAI,EAAE,EAAG,KAAO,GAAG,KAAK,GAAG,EAC3B,KAAK,IAAI,KACZ,GAEF,EAAU,GAAG,KAAa,IAAQ,MAAe,EAAM,UAE3D,GAAI,EAAM,WAAa,OACrB,GAAW,KAAK,EAAM,cAGxB,GAAI,EAAM,MACR,GAAW;AAAA,EAAK,EAAM,MAAM,QAG9B,OAAO,EAGD,aAAa,CAAC,EAAyB,CAC7C,GAAI,CAAC,KAAK,OAAO,aAAc,OAAO,EAStC,MAAO,GAPQ,EACZ,SAAiB,YACjB,QAAgB,YAChB,QAAgB,YAChB,SAAiB,UACpB,EAEiB,KAAS,WAGpB,QAAQ,CAAC,EAAuB,CACtC,GAAI,CAAC,KAAK,UAAU,EAAM,KAAK,EAAG,OAElC,IAAM,EAAU,KAAK,cAAc,CAAK,EAExC,GAAI,KAAK,OAAO,eAEZ,EAAM,QAAU,QACZ,QAAQ,MACR,EAAM,QAAU,OACd,QAAQ,KACR,QAAQ,KACV,CAAO,EAIf,GAAI,KAAK,OAAO,YAAc,KAAK,OAAO,SAAU,EAKtD,KAAK,CAAC,EAAiB,EAAsB,CAAC,EAAS,CACrD,KAAK,SAAS,CACZ,MAAO,QACP,UACA,UAAW,IAAI,KACf,QAAS,IAAK,KAAK,WAAY,CAAQ,CACzC,CAAC,EAGH,IAAI,CAAC,EAAiB,EAAsB,CAAC,EAAS,CACpD,KAAK,SAAS,CACZ,MAAO,OACP,UACA,UAAW,IAAI,KACf,QAAS,IAAK,KAAK,WAAY,CAAQ,CACzC,CAAC,EAGH,IAAI,CAAC,EAAiB,EAAsB,CAAC,EAAG,EAAqB,CACnE,KAAK,SAAS,CACZ,MAAO,OACP,UACA,UAAW,IAAI,KACf,QAAS,IAAK,KAAK,WAAY,CAAQ,EACvC,OACF,CAAC,EAGH,KAAK,CAAC,EAAiB,EAAsB,CAAC,EAAG,EAAqB,CACpE,KAAK,SAAS,CACZ,MAAO,QACP,UACA,UAAW,IAAI,KACf,QAAS,IAAK,KAAK,WAAY,CAAQ,EACvC,OACF,CAAC,EAGH,KAAK,CAAC,EAA6B,CACjC,OAAO,IAAI,EAAO,IAAK,KAAK,WAAY,CAAQ,EAAG,KAAK,MAAM,EAGhE,IAAI,CAAC,EAA2B,CAC9B,IAAM,EAAQ,KAAK,IAAI,EACvB,MAAO,IAAM,CACX,IAAM,EAAW,KAAK,IAAI,EAAI,EAC9B,KAAK,KAAK,GAAG,cAAmB,CAAE,UAAS,CAAC,QAI1C,QAAU,CACd,EACA,EACA,EAAsB,CAAC,EACX,CACZ,IAAM,EAAQ,KAAK,IAAI,EACjB,EAAmB,IAAK,EAAS,WAAU,EAEjD,KAAK,MAAM,YAAY,IAAa,CAAgB,EAEpD,GAAI,CACF,IAAM,EAAS,MAAM,EAAG,EAClB,EAAW,KAAK,IAAI,EAAI,EAG9B,OADA,KAAK,KAAK,aAAa,IAAa,IAAK,EAAkB,UAAS,CAAC,EAC9D,EACP,MAAO,EAAO,CACd,IAAM,EAAW,KAAK,IAAI,EAAI,EAO9B,MALA,KAAK,MACH,UAAU,IACV,IAAK,EAAkB,UAAS,EAChC,aAAiB,MAAQ,EAAY,MAAM,OAAO,CAAK,CAAC,CAC1D,EACM,GAGZ,CAGA,IAAI,EAEG,SAAS,CAAY,CAC1B,EACA,EACQ,CACR,OAAO,IAAI,EAAO,EAAS,CAAM,EAG5B,SAAS,CAAS,EAAW,CAClC,GAAI,CAAC,EACH,EAAe,EAAa,EAE9B,OAAO,EAGF,SAAS,CAAe,CAAC,EAAsB,CACpD,EAAe,EAIV,IAAM,EAAS,CACpB,MAAO,CAAC,EAAiB,IACvB,EAAU,EAAE,MAAM,EAAS,CAAO,EACpC,KAAM,CAAC,EAAiB,IACtB,EAAU,EAAE,KAAK,EAAS,CAAO,EACnC,KAAM,CAAC,EAAiB,EAAsB,IAC5C,EAAU,EAAE,KAAK,EAAS,EAAS,CAAK,EAC1C,MAAO,CAAC,EAAiB,EAAsB,IAC7C,EAAU,EAAE,MAAM,EAAS,EAAS,CAAK,EAC3C,MAAO,CAAC,IAAwB,EAAU,EAAE,MAAM,CAAO,EACzD,KAAM,CAAC,IAAkB,EAAU,EAAE,KAAK,CAAK,EAC/C,QAAS,CAAI,EAAmB,EAAsB,IACpD,EAAU,EAAE,QAAQ,EAAW,EAAI,CAAO,CAC9C,EAGO,SAAS,CAAgB,CAAC,EAAgC,CAC/D,IAAM,EAAgB,EAAa,CAAC,EAAG,CAAM,EAE7C,MAAO,OAAO,EAAQ,IAAc,CAClC,IAAM,EAAQ,KAAK,IAAI,EAGjB,EAAU,CACd,UAHgB,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,EAItD,OAAQ,EAAE,IAAI,OACd,KAAM,EAAE,IAAI,KACZ,UAAW,EAAE,IAAI,OAAO,YAAY,GAAK,SAC3C,EAEA,EAAc,KAAK,kBAAmB,CAAO,EAE7C,GAAI,CACF,MAAM,EAAK,EAEX,IAAM,EAAW,KAAK,IAAI,EAAI,EAC9B,EAAc,KAAK,oBAAqB,IACnC,EACH,OAAQ,EAAE,IAAI,OACd,UACF,CAAC,EACD,MAAO,EAAO,CACd,IAAM,EAAW,KAAK,IAAI,EAAI,EAU9B,MATA,EAAc,MACZ,iBACA,IACK,EACH,UACF,EACA,aAAiB,MAAQ,EAAY,MAAM,OAAO,CAAK,CAAC,CAC1D,EAEM,IChRL,MAAM,CAAa,OACT,gBAA+B,CAC5C,YAAa,EACb,aAAc,KACd,SAAU,MACV,kBAAmB,EACnB,OAAQ,GACR,eAAgB,CAAC,IAAU,EAAW,YAAY,CAAK,CACzD,cAEa,QAAU,CACrB,EACA,EAAiC,CAAC,EACtB,CACZ,IAAM,EAAO,IACR,EAAa,kBACb,CACL,EACI,EACA,EAAQ,EAAK,aAEjB,QAAS,EAAU,EAAG,GAAW,EAAK,YAAa,IACjD,GAAI,CACF,OAAO,MAAM,EAAU,EACvB,MAAO,EAAO,CAGd,GAFA,EAAY,EAGV,IAAY,EAAK,aACjB,CAAC,EAAK,eAAgB,EAAW,CAAO,EAExC,MAAM,EAGR,IAAM,EAAc,EAAK,OACrB,EAAQ,KAAK,OAAO,EAAI,EAAQ,IAChC,EAEJ,EAAK,UAAU,EAAW,CAAO,EAEjC,MAAM,IAAI,QAAQ,CAAC,IAAY,WAAW,EAAS,CAAW,CAAC,EAE/D,EAAQ,KAAK,IAAI,EAAQ,EAAK,kBAAmB,EAAK,QAAQ,EAIlE,MAAM,QAGD,wBAA2C,CAChD,EACA,EAAiC,CAAC,EACN,CAC5B,MAAO,UAAU,IAAY,CAC3B,OAAO,EAAa,QAAQ,IAAM,EAAK,GAAG,CAAI,EAAG,CAAO,GAG9D,CC9DO,MAAM,CAAqB,aACnB,QAAa,CACxB,EACA,EACA,EAAyC,CAAC,EAUzC,CACD,IAAM,EAA6B,CACjC,YAAa,EACb,aAAc,CACZ,YAAa,EACb,aAAc,KACd,SAAU,IACV,kBAAmB,EACnB,OAAQ,EACV,EACA,SAAU,MACP,CACL,EAEM,EAAY,KAAK,IAAI,EACrB,EAAuC,CAAC,EACxC,EAAsC,CAAC,EACzC,EAAY,EAEV,EAAqB,EAAa,wBACtC,EACA,EAAK,YACP,EAEM,EAAU,EAAqB,cAAc,EAAO,EAAK,WAAW,EAE1E,QAAW,KAAS,EAAS,CAC3B,IAAM,EAAgB,EAAM,IAAI,MAAO,IAAS,CAC9C,GAAI,CACF,IAAM,EAAS,MAAM,EAAmB,CAAI,EAC5C,EAAW,KAAK,CAAE,OAAM,QAAO,CAAC,EAChC,MAAO,EAAO,CAGd,GAFA,EAAO,KAAK,CAAE,OAAM,MAAO,CAAe,CAAC,EAEvC,EAAK,SACP,MAAM,IAAI,wBAER,oCAAoC,EAAO,kBAC3C,CAAE,WAAY,EAAM,OAAQ,YAAa,EAAO,MAAO,CACzD,SAEF,CACA,IACA,EAAK,aAAa,EAAW,EAAM,OAAQ,EAAO,MAAM,GAE3D,EAID,GAFA,MAAM,QAAQ,WAAW,CAAa,EAElC,EAAK,UAAY,EAAO,OAAS,EACnC,MAIJ,IAAM,EAAW,KAAK,IAAI,EAAI,EAE9B,MAAO,CACL,aACA,SACA,QAAS,CACP,MAAO,EAAM,OACb,WAAY,EAAW,OACvB,OAAQ,EAAO,OACf,UACF,CACF,QAGa,cAAgB,CAAC,EAAY,EAA0B,CACpE,IAAM,EAAiB,CAAC,EACxB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,GAAK,EACrC,EAAQ,KAAK,EAAM,MAAM,EAAG,EAAI,CAAS,CAAC,EAE5C,OAAO,EAEX,CCxFO,MAAM,CAAe,CAMN,QALZ,MAAyC,SACzC,aAAe,EACf,gBAAkB,EAClB,gBAAkB,EAE1B,WAAW,CAAS,EAAgC,CAAhC,oBAEd,QAAU,CAAC,EAAyC,CACxD,IAAM,EAAM,KAAK,IAAI,EAErB,OAAQ,KAAK,WACN,OACH,GAAI,EAAM,KAAK,gBACb,MAAM,IAAI,gCAER,0BACA,CAAE,MAAO,KAAK,MAAO,gBAAiB,KAAK,eAAgB,CAC7D,EAEF,KAAK,MAAQ,YACb,KAAK,QAAQ,aAAa,EAC1B,UAEG,YACH,UAEG,SACH,MAGJ,GAAI,CACF,IAAM,EAAS,MAAM,QAAQ,KAAK,CAChC,EAAU,EACV,IAAI,QAAe,CAAC,EAAG,IACrB,WACE,IACE,EACE,IAAI,oBAEF,0BACA,CAAE,QAAS,KAAK,QAAQ,OAAQ,CAClC,CACF,EACF,KAAK,QAAQ,OACf,CACF,CACF,CAAC,EAED,GAAI,KAAK,QAAU,YACjB,KAAK,MAAQ,SACb,KAAK,aAAe,EACpB,KAAK,QAAQ,UAAU,EAGzB,OAAO,EACP,MAAO,EAAO,CAEd,MADA,KAAK,cAAc,EACb,GAIF,aAAa,EAAS,CAI5B,GAHA,KAAK,eACL,KAAK,gBAAkB,KAAK,IAAI,EAE5B,KAAK,cAAgB,KAAK,QAAQ,iBACpC,KAAK,MAAQ,OACb,KAAK,gBAAkB,KAAK,gBAAkB,KAAK,QAAQ,aAC3D,KAAK,QAAQ,SAAS,EAI1B,QAAQ,EAAW,CACjB,OAAO,KAAK,MAGd,eAAe,EAAW,CACxB,OAAO,KAAK,aAGd,KAAK,EAAS,CACZ,KAAK,MAAQ,SACb,KAAK,aAAe,EACpB,KAAK,gBAAkB,EACvB,KAAK,gBAAkB,EAE3B,CClGO,MAAM,CAAY,CAIb,YACA,SAJF,SAAqB,CAAC,EAE9B,WAAW,CACD,EACA,EACR,CAFQ,mBACA,qBAGJ,QAAO,EAAkB,CAC7B,IAAM,EAAM,KAAK,IAAI,EAIrB,GAFA,KAAK,SAAW,KAAK,SAAS,OAAO,CAAC,IAAS,EAAM,EAAO,KAAK,QAAQ,EAErE,KAAK,SAAS,QAAU,KAAK,YAAa,CAC5C,IAAM,EAAgB,KAAK,IAAI,GAAG,KAAK,QAAQ,EACzC,EAAW,KAAK,UAAY,EAAM,GAExC,GAAI,EAAW,EAEb,OADA,MAAM,IAAI,QAAQ,CAAC,IAAY,WAAW,EAAS,CAAQ,CAAC,EACrD,KAAK,QAAQ,EAIxB,KAAK,SAAS,KAAK,CAAG,EAGxB,cAAc,EAAY,CACxB,IAAM,EAAM,KAAK,IAAI,EAErB,OADA,KAAK,SAAW,KAAK,SAAS,OAAO,CAAC,IAAS,EAAM,EAAO,KAAK,QAAQ,EAClE,KAAK,SAAS,OAAS,KAAK,YAGrC,oBAAoB,EAAW,CAC7B,IAAM,EAAM,KAAK,IAAI,EAErB,OADA,KAAK,SAAW,KAAK,SAAS,OAAO,CAAC,IAAS,EAAM,EAAO,KAAK,QAAQ,EAClE,KAAK,IAAI,EAAG,KAAK,YAAc,KAAK,SAAS,MAAM,EAE9D,CC3BO,IAAM,EAAK,CAAI,KAAqB,CACzC,UAAW,GACX,UAAW,GACX,OACF,GAEa,EAAO,CAAI,KAAuB,CAC7C,UAAW,GACX,UAAW,GACX,OACF,GAKa,EAAS,CAIpB,GAAY,CAAC,EAAsB,EAAmC,CACpE,GAAI,EAAO,UACT,OAAO,EAAG,EAAG,EAAO,KAAK,CAAC,EAE5B,OAAO,GAMT,OAAgB,CACd,EACA,EACc,CACd,GAAI,EAAO,UACT,OAAO,EAAG,EAAO,KAAK,EAExB,OAAO,GAMT,QAAiB,CAAC,EAAsB,EAAmC,CACzE,GAAI,EAAO,UACT,OAAO,EAAK,EAAG,EAAO,KAAK,CAAC,EAE9B,OAAO,GAMT,MAAY,CAAC,EAAyB,CACpC,GAAI,EAAO,UACT,OAAO,EAAO,MAEhB,MAAM,EAAO,OAMf,QAAc,CAAC,EAAsB,EAAoB,CACvD,GAAI,EAAO,UACT,OAAO,EAAO,MAEhB,OAAO,GAMT,YAAkB,CAAC,EAAsB,EAAwB,CAC/D,GAAI,EAAO,UACT,OAAO,EAAO,MAEhB,OAAO,EAAG,EAAO,KAAK,GAMxB,KAAc,CACZ,EACA,EACG,CACH,GAAI,EAAO,UACT,OAAO,EAAS,GAAG,EAAO,KAAK,EAEjC,OAAO,EAAS,KAAK,EAAO,KAAK,QAM7B,YAAyB,CAAC,EAA4C,CAC1E,GAAI,CACF,IAAM,EAAQ,MAAM,EACpB,OAAO,EAAG,CAAK,EACf,MAAO,EAAO,CACd,OAAO,EAAK,CAAU,IAO1B,IAAU,CAAC,EAAuC,CAChD,OAAO,EAAO,WAMhB,MAAY,CAAC,EAAyC,CACpD,OAAO,EAAO,UAElB,ECjHO,SAAS,CAAmB,EAAqB,CACtD,IAAM,EAAgB,WACtB,OACE,EAAc,eACd,EAAc,SACd,EAAc,SAAS,KACvB,CAAC,EAIE,SAAS,CAAc,CAAC,EAAiC,CAC9D,IAAM,EAAQ,EAAoB,EAAE,GACpC,GAAI,OAAO,IAAU,SACnB,OAAO,EAET,GAAI,IAAU,OACZ,OAEF,OAAO,OAAO,CAAK",
|
|
15
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "7C27E1BC859300DC64756E2164756E21",
|
|
16
17
|
"names": []
|
|
17
18
|
}
|
package/dist/types/message.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export type MessageType = "ALIMTALK" | "FRIENDTALK" | "SMS" | "LMS" | "MMS" | "NSA" | "VOICE" | "FAX" | "RCS_SMS" | "RCS_LMS" | "RCS_MMS" | "RCS_TPL" | "RCS_ITPL" | "RCS_LTPL";
|
|
2
2
|
export type MessageStatus = "PENDING" | "SENT" | "FAILED";
|
|
3
|
+
export declare const KNOWN_MESSAGE_STATUSES: MessageStatus[];
|
|
4
|
+
export declare const QUEUED_MESSAGE_STATUS: MessageStatus;
|
|
5
|
+
export declare const normalizeMessageStatus: (status: unknown) => MessageStatus;
|
|
3
6
|
export type MessageVariables = Record<string, string | number | boolean | Date | null | undefined>;
|
|
4
7
|
export interface MessageButton {
|
|
5
8
|
name: string;
|