@k-msg/provider 0.3.0 → 0.5.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/README.md +35 -124
- package/dist/aligo/provider.d.ts +18 -8
- package/dist/index.d.ts +8 -29
- package/dist/index.js +47 -47
- package/dist/index.js.map +10 -28
- package/dist/index.mjs +47 -47
- package/dist/index.mjs.map +10 -28
- package/dist/iwinv/provider.d.ts +21 -59
- package/dist/iwinv/types/iwinv.d.ts +10 -2
- package/dist/providers/mock/mock.provider.d.ts +6 -1
- package/dist/solapi/provider.d.ts +18 -6
- package/dist/solapi/types/solapi.d.ts +14 -2
- package/package.json +2 -22
- package/dist/abstract/provider.base.d.ts +0 -108
- package/dist/adapters/aligo.adapter.d.ts +0 -50
- package/dist/adapters/iwinv.adapter.d.ts +0 -139
- package/dist/adapters/solapi.adapter.d.ts +0 -48
- package/dist/config/provider-config-v2.d.ts +0 -122
- package/dist/contracts/provider.contract.d.ts +0 -355
- package/dist/contracts/sms.contract.d.ts +0 -135
- package/dist/interfaces/index.d.ts +0 -14
- package/dist/interfaces/plugin.d.ts +0 -122
- package/dist/interfaces/services.d.ts +0 -222
- package/dist/iwinv/contracts/account.contract.d.ts +0 -11
- package/dist/iwinv/contracts/analytics.contract.d.ts +0 -16
- package/dist/iwinv/contracts/channel.contract.d.ts +0 -15
- package/dist/iwinv/contracts/messaging.contract.d.ts +0 -14
- package/dist/iwinv/contracts/sms.contract.d.ts +0 -33
- package/dist/iwinv/contracts/template.contract.d.ts +0 -18
- package/dist/iwinv/provider-multi.d.ts +0 -116
- package/dist/iwinv/provider-sms.d.ts +0 -55
- package/dist/middleware/index.d.ts +0 -27
- package/dist/mock/index.d.ts +0 -1
- package/dist/registry/index.d.ts +0 -1
- package/dist/registry/plugin-registry.d.ts +0 -15
- package/dist/services/provider.manager.d.ts +0 -24
- package/dist/services/provider.service.d.ts +0 -49
- package/dist/test-helpers.d.ts +0 -110
- package/dist/types/base.d.ts +0 -172
- package/dist/types/typed-templates.d.ts +0 -199
- package/dist/types/unified-config.d.ts +0 -197
- package/dist/types/unified-errors.d.ts +0 -225
- package/dist/utils/base-plugin.d.ts +0 -35
- package/dist/utils/index.d.ts +0 -12
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { BaseProvider, ProviderType, StandardRequest, StandardResult } from "@k-msg/core";
|
|
2
|
-
import type { AlimTalkProvider, AlimTalkRequest, AlimTalkResult } from "../contracts/provider.contract";
|
|
3
|
-
import type { SMSProvider, SMSRequest, SMSResult } from "../contracts/sms.contract";
|
|
4
|
-
export declare class ProviderManager {
|
|
5
|
-
private providers;
|
|
6
|
-
private defaultProvider?;
|
|
7
|
-
registerProvider(provider: BaseProvider<StandardRequest, StandardResult>): void;
|
|
8
|
-
unregisterProvider(providerId: string): void;
|
|
9
|
-
getProvider(providerId?: string): BaseProvider<StandardRequest, StandardResult> | null;
|
|
10
|
-
getAlimTalkProvider(providerId?: string): AlimTalkProvider | null;
|
|
11
|
-
listProviders(): BaseProvider<StandardRequest, StandardResult>[];
|
|
12
|
-
listAlimTalkProviders(): AlimTalkProvider[];
|
|
13
|
-
setDefaultProvider(providerId: string): void;
|
|
14
|
-
healthCheckAll(): Promise<Record<string, boolean>>;
|
|
15
|
-
getProvidersForChannel(channel: string): BaseProvider<StandardRequest, StandardResult>[];
|
|
16
|
-
getProvidersByType(type: ProviderType): BaseProvider<StandardRequest, StandardResult>[];
|
|
17
|
-
getSMSProvider(providerId?: string): SMSProvider | null;
|
|
18
|
-
listSMSProviders(): SMSProvider[];
|
|
19
|
-
send<TRequest extends StandardRequest, TResult extends StandardResult>(providerId: string, request: TRequest): Promise<TResult>;
|
|
20
|
-
sendAlimTalk(providerId: string | undefined, request: AlimTalkRequest): Promise<AlimTalkResult>;
|
|
21
|
-
sendSMS(providerId: string | undefined, request: SMSRequest): Promise<SMSResult>;
|
|
22
|
-
private isAlimTalkProvider;
|
|
23
|
-
private isSMSProvider;
|
|
24
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { BaseProvider, StandardRequest, StandardResult } from "@k-msg/core";
|
|
2
|
-
import type { AlimTalkProvider, AlimTalkRequest, AlimTalkResult } from "../contracts/provider.contract";
|
|
3
|
-
/**
|
|
4
|
-
* Manages the lifecycle and access to different messaging providers.
|
|
5
|
-
*/
|
|
6
|
-
export declare class ProviderService {
|
|
7
|
-
private providers;
|
|
8
|
-
private defaultProviderId?;
|
|
9
|
-
/**
|
|
10
|
-
* @param defaultProviderId The ID of the provider to use when none is specified.
|
|
11
|
-
*/
|
|
12
|
-
constructor(defaultProviderId?: string);
|
|
13
|
-
/**
|
|
14
|
-
* Registers a new provider instance.
|
|
15
|
-
* If no default provider is set, the first registered provider becomes the default.
|
|
16
|
-
* @param provider The provider instance to register.
|
|
17
|
-
*/
|
|
18
|
-
register(provider: BaseProvider<StandardRequest, StandardResult>): void;
|
|
19
|
-
/**
|
|
20
|
-
* Retrieves a provider by its unique ID.
|
|
21
|
-
* @param providerId The ID of the provider.
|
|
22
|
-
* @returns The provider instance or undefined if not found.
|
|
23
|
-
*/
|
|
24
|
-
get(providerId: string): BaseProvider<StandardRequest, StandardResult> | undefined;
|
|
25
|
-
/**
|
|
26
|
-
* Retrieves a typed AlimTalk provider by its unique ID.
|
|
27
|
-
* @param providerId The ID of the provider.
|
|
28
|
-
* @returns The AlimTalk provider instance or undefined if not found or not an AlimTalk provider.
|
|
29
|
-
*/
|
|
30
|
-
getAlimTalk(providerId: string): AlimTalkProvider | undefined;
|
|
31
|
-
/**
|
|
32
|
-
* Retrieves the default provider.
|
|
33
|
-
* @returns The default provider instance or undefined if not set.
|
|
34
|
-
*/
|
|
35
|
-
getDefault(): BaseProvider<StandardRequest, StandardResult> | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* Lists all registered providers.
|
|
38
|
-
* @returns An array of all provider instances.
|
|
39
|
-
*/
|
|
40
|
-
list(): BaseProvider<StandardRequest, StandardResult>[];
|
|
41
|
-
/**
|
|
42
|
-
* Lists all AlimTalk providers.
|
|
43
|
-
* @returns An array of AlimTalk provider instances.
|
|
44
|
-
*/
|
|
45
|
-
listAlimTalk(): AlimTalkProvider[];
|
|
46
|
-
send<TRequest extends StandardRequest, TResult extends StandardResult>(providerId: string, request: TRequest): Promise<TResult>;
|
|
47
|
-
sendAlimTalk(providerId: string, request: AlimTalkRequest): Promise<AlimTalkResult>;
|
|
48
|
-
private isAlimTalkProvider;
|
|
49
|
-
}
|
package/dist/test-helpers.d.ts
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test Helpers and Utilities
|
|
3
|
-
* 테스트 헬퍼 및 유틸리티 함수들
|
|
4
|
-
*/
|
|
5
|
-
import type { StandardRequest } from "@k-msg/core";
|
|
6
|
-
import type { IWINVConfig } from "./iwinv/types/iwinv";
|
|
7
|
-
export declare const TEST_CONFIGS: {
|
|
8
|
-
development: IWINVConfig;
|
|
9
|
-
production: IWINVConfig;
|
|
10
|
-
invalid: IWINVConfig;
|
|
11
|
-
};
|
|
12
|
-
export declare const createTestRequests: () => {
|
|
13
|
-
alimtalk: {
|
|
14
|
-
welcome: StandardRequest;
|
|
15
|
-
otp: StandardRequest;
|
|
16
|
-
order: StandardRequest;
|
|
17
|
-
};
|
|
18
|
-
sms: {
|
|
19
|
-
short: StandardRequest;
|
|
20
|
-
long: StandardRequest;
|
|
21
|
-
};
|
|
22
|
-
invalid: {
|
|
23
|
-
emptyPhone: StandardRequest;
|
|
24
|
-
invalidPhone: StandardRequest;
|
|
25
|
-
emptyTemplate: StandardRequest;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
export declare const createBulkTestData: (count?: number) => {
|
|
29
|
-
templateCode: string;
|
|
30
|
-
phoneNumber: string;
|
|
31
|
-
variables: {
|
|
32
|
-
index: string;
|
|
33
|
-
name: string;
|
|
34
|
-
message: string;
|
|
35
|
-
};
|
|
36
|
-
channel: "alimtalk" | "sms" | "auto";
|
|
37
|
-
}[];
|
|
38
|
-
export declare const createPerformanceTracker: () => {
|
|
39
|
-
start: () => void;
|
|
40
|
-
end: () => void;
|
|
41
|
-
record: (success: boolean) => void;
|
|
42
|
-
getMetrics: () => {
|
|
43
|
-
startTime: number;
|
|
44
|
-
endTime: number;
|
|
45
|
-
duration: number;
|
|
46
|
-
memoryUsage: {
|
|
47
|
-
start: number;
|
|
48
|
-
end: number;
|
|
49
|
-
peak: number;
|
|
50
|
-
};
|
|
51
|
-
requestCount: number;
|
|
52
|
-
successCount: number;
|
|
53
|
-
errorCount: number;
|
|
54
|
-
};
|
|
55
|
-
reset: () => void;
|
|
56
|
-
};
|
|
57
|
-
export declare const createMockHttpResponse: (options?: {
|
|
58
|
-
success?: boolean;
|
|
59
|
-
delay?: number;
|
|
60
|
-
statusCode?: number;
|
|
61
|
-
data?: any;
|
|
62
|
-
}) => Promise<unknown>;
|
|
63
|
-
export declare const createConcurrencyTester: () => {
|
|
64
|
-
runConcurrent: <T>(operations: (() => Promise<T>)[], maxConcurrency?: number) => Promise<Array<{
|
|
65
|
-
result: T | null;
|
|
66
|
-
error: Error | null;
|
|
67
|
-
duration: number;
|
|
68
|
-
}>>;
|
|
69
|
-
testRateLimit: <T>(operation: () => Promise<T>, requestsPerSecond: number, duration: number) => Promise<{
|
|
70
|
-
attempted: number;
|
|
71
|
-
successful: number;
|
|
72
|
-
failed: number;
|
|
73
|
-
actualRate: number;
|
|
74
|
-
}>;
|
|
75
|
-
};
|
|
76
|
-
export declare const createValidationHelpers: () => {
|
|
77
|
-
isValidPhoneNumber: (phone: string) => boolean;
|
|
78
|
-
isValidTemplateCode: (code: string) => boolean;
|
|
79
|
-
containsSensitiveData: (variables: Record<string, string>) => boolean;
|
|
80
|
-
getMessageType: (message: string) => "sms" | "lms" | "mms";
|
|
81
|
-
};
|
|
82
|
-
export declare const createTestStateTracker: () => {
|
|
83
|
-
recordTest: (name: string, passed: boolean, duration: number, error?: string) => void;
|
|
84
|
-
skip: (name: string) => void;
|
|
85
|
-
getStats: () => {
|
|
86
|
-
totalTests: number;
|
|
87
|
-
passedTests: number;
|
|
88
|
-
failedTests: number;
|
|
89
|
-
skippedTests: number;
|
|
90
|
-
duration: number;
|
|
91
|
-
errors: Array<{
|
|
92
|
-
test: string;
|
|
93
|
-
error: string;
|
|
94
|
-
}>;
|
|
95
|
-
};
|
|
96
|
-
getSummary: () => {
|
|
97
|
-
successRate: number;
|
|
98
|
-
averageDuration: number;
|
|
99
|
-
totalTests: number;
|
|
100
|
-
passedTests: number;
|
|
101
|
-
failedTests: number;
|
|
102
|
-
skippedTests: number;
|
|
103
|
-
duration: number;
|
|
104
|
-
errors: Array<{
|
|
105
|
-
test: string;
|
|
106
|
-
error: string;
|
|
107
|
-
}>;
|
|
108
|
-
};
|
|
109
|
-
reset: () => void;
|
|
110
|
-
};
|
package/dist/types/base.d.ts
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 공통 프로바이더 인터페이스와 타입 정의
|
|
3
|
-
* 모든 K-Message 프로바이더가 구현해야 하는 기본 인터페이스
|
|
4
|
-
* 알림톡, 친구톡, SMS, LMS 등 다양한 메시징 채널 지원
|
|
5
|
-
*/
|
|
6
|
-
export declare enum MessageChannel {
|
|
7
|
-
ALIMTALK = "alimtalk",// 카카오 알림톡
|
|
8
|
-
FRIENDTALK = "friendtalk",// 카카오 친구톡
|
|
9
|
-
SMS = "sms",// 단문 메시지
|
|
10
|
-
LMS = "lms",// 장문 메시지
|
|
11
|
-
MMS = "mms",// 멀티미디어 메시지
|
|
12
|
-
PUSH = "push",// 푸시 알림
|
|
13
|
-
EMAIL = "email"
|
|
14
|
-
}
|
|
15
|
-
export declare enum MessageType {
|
|
16
|
-
TEXT = "text",// 텍스트만
|
|
17
|
-
RICH = "rich",// 리치 메시지 (버튼, 이미지 등)
|
|
18
|
-
TEMPLATE = "template",// 템플릿 기반
|
|
19
|
-
CUSTOM = "custom"
|
|
20
|
-
}
|
|
21
|
-
export interface SendOptions {
|
|
22
|
-
channel?: MessageChannel;
|
|
23
|
-
messageType?: MessageType;
|
|
24
|
-
reserve?: boolean;
|
|
25
|
-
sendDate?: Date | string;
|
|
26
|
-
timezone?: string;
|
|
27
|
-
senderKey?: string;
|
|
28
|
-
senderNumber?: string;
|
|
29
|
-
senderName?: string;
|
|
30
|
-
enableFallback?: boolean;
|
|
31
|
-
fallbackChannel?: MessageChannel;
|
|
32
|
-
fallbackContent?: string;
|
|
33
|
-
fallbackTitle?: string;
|
|
34
|
-
title?: string;
|
|
35
|
-
subject?: string;
|
|
36
|
-
priority?: "high" | "normal" | "low";
|
|
37
|
-
trackingId?: string;
|
|
38
|
-
campaignId?: string;
|
|
39
|
-
tags?: string[];
|
|
40
|
-
attachments?: MediaAttachment[];
|
|
41
|
-
metadata?: Record<string, any>;
|
|
42
|
-
}
|
|
43
|
-
export interface MediaAttachment {
|
|
44
|
-
type: "image" | "video" | "audio" | "document";
|
|
45
|
-
url: string;
|
|
46
|
-
filename?: string;
|
|
47
|
-
size?: number;
|
|
48
|
-
mimeType?: string;
|
|
49
|
-
}
|
|
50
|
-
export interface TemplateFilters {
|
|
51
|
-
templateCode?: string;
|
|
52
|
-
templateName?: string;
|
|
53
|
-
templateStatus?: string;
|
|
54
|
-
[key: string]: any;
|
|
55
|
-
}
|
|
56
|
-
export interface HistoryFilters {
|
|
57
|
-
reserve?: "Y" | "N" | boolean;
|
|
58
|
-
startDate?: string | Date;
|
|
59
|
-
endDate?: string | Date;
|
|
60
|
-
messageId?: number | string;
|
|
61
|
-
phone?: string;
|
|
62
|
-
[key: string]: any;
|
|
63
|
-
}
|
|
64
|
-
export interface HealthCheckResult {
|
|
65
|
-
healthy: boolean;
|
|
66
|
-
issues: string[];
|
|
67
|
-
data?: {
|
|
68
|
-
balance?: number;
|
|
69
|
-
status: string;
|
|
70
|
-
code?: number;
|
|
71
|
-
message?: string;
|
|
72
|
-
} | null;
|
|
73
|
-
}
|
|
74
|
-
export interface SendResult {
|
|
75
|
-
success: boolean;
|
|
76
|
-
messageId: string | null;
|
|
77
|
-
status: string;
|
|
78
|
-
error: string | null;
|
|
79
|
-
}
|
|
80
|
-
export interface TemplateResult {
|
|
81
|
-
success: boolean;
|
|
82
|
-
templateCode: string | null;
|
|
83
|
-
status: string;
|
|
84
|
-
error: string | null;
|
|
85
|
-
}
|
|
86
|
-
export interface BaseProvider<TConfig = any> {
|
|
87
|
-
readonly id: string;
|
|
88
|
-
readonly name: string;
|
|
89
|
-
readonly supportedChannels: MessageChannel[];
|
|
90
|
-
readonly supportedTypes: MessageType[];
|
|
91
|
-
healthCheck(): Promise<HealthCheckResult>;
|
|
92
|
-
sendMessage?(recipient: string, // 수신자 (전화번호 또는 이메일)
|
|
93
|
-
content: MessageContent, options?: SendOptions): Promise<SendResult>;
|
|
94
|
-
sendTemplateMessage?(templateCode: string, phoneNumber: string, variables: Record<string, any>, options?: SendOptions): Promise<SendResult>;
|
|
95
|
-
createTemplate?(template: TemplateCreateRequest): Promise<TemplateResult>;
|
|
96
|
-
getTemplates?(pageNum?: number, pageSize?: number, filters?: TemplateFilters): Promise<any>;
|
|
97
|
-
modifyTemplate?(templateCode: string, template: TemplateUpdateRequest): Promise<TemplateResult>;
|
|
98
|
-
deleteTemplate?(templateCode: string): Promise<any>;
|
|
99
|
-
getHistory?(pageNum?: number, pageSize?: number, filters?: HistoryFilters): Promise<any>;
|
|
100
|
-
cancelReservation?(messageId: number | string): Promise<any>;
|
|
101
|
-
getSenderNumbers?(): Promise<SenderNumber[]>;
|
|
102
|
-
verifySenderNumber?(phoneNumber: string): Promise<SenderVerificationResult>;
|
|
103
|
-
getChannelInfo?(channel: MessageChannel): Promise<ChannelInfo>;
|
|
104
|
-
}
|
|
105
|
-
export interface MessageContent {
|
|
106
|
-
channel?: MessageChannel;
|
|
107
|
-
type?: MessageType;
|
|
108
|
-
text: string;
|
|
109
|
-
title?: string;
|
|
110
|
-
templateId?: string;
|
|
111
|
-
variables?: Record<string, any>;
|
|
112
|
-
buttons?: MessageButton[];
|
|
113
|
-
attachments?: MediaAttachment[];
|
|
114
|
-
}
|
|
115
|
-
export interface MessageButton {
|
|
116
|
-
type: "web" | "app" | "phone" | "delivery";
|
|
117
|
-
text: string;
|
|
118
|
-
url?: string;
|
|
119
|
-
scheme?: string;
|
|
120
|
-
phoneNumber?: string;
|
|
121
|
-
}
|
|
122
|
-
export interface TemplateCreateRequest {
|
|
123
|
-
name: string;
|
|
124
|
-
content: string;
|
|
125
|
-
channel: MessageChannel;
|
|
126
|
-
category?: string;
|
|
127
|
-
buttons?: MessageButton[];
|
|
128
|
-
variables?: string[];
|
|
129
|
-
description?: string;
|
|
130
|
-
}
|
|
131
|
-
export interface TemplateUpdateRequest {
|
|
132
|
-
name?: string;
|
|
133
|
-
content?: string;
|
|
134
|
-
buttons?: MessageButton[];
|
|
135
|
-
description?: string;
|
|
136
|
-
}
|
|
137
|
-
export interface SenderNumber {
|
|
138
|
-
phoneNumber: string;
|
|
139
|
-
name?: string;
|
|
140
|
-
verified: boolean;
|
|
141
|
-
verifiedAt?: Date;
|
|
142
|
-
status: "active" | "pending" | "rejected" | "blocked";
|
|
143
|
-
}
|
|
144
|
-
export interface SenderVerificationResult {
|
|
145
|
-
success: boolean;
|
|
146
|
-
phoneNumber: string;
|
|
147
|
-
status: string;
|
|
148
|
-
verificationCode?: string;
|
|
149
|
-
error?: string;
|
|
150
|
-
}
|
|
151
|
-
export interface ChannelInfo {
|
|
152
|
-
channel: MessageChannel;
|
|
153
|
-
available: boolean;
|
|
154
|
-
limits: {
|
|
155
|
-
maxLength?: number;
|
|
156
|
-
maxAttachments?: number;
|
|
157
|
-
maxAttachmentSize?: number;
|
|
158
|
-
};
|
|
159
|
-
features: {
|
|
160
|
-
supportsButtons: boolean;
|
|
161
|
-
supportsAttachments: boolean;
|
|
162
|
-
supportsTemplates: boolean;
|
|
163
|
-
supportsScheduling: boolean;
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
export interface BaseProviderConfig {
|
|
167
|
-
apiKey: string;
|
|
168
|
-
baseUrl?: string;
|
|
169
|
-
debug?: boolean;
|
|
170
|
-
timeout?: number;
|
|
171
|
-
retries?: number;
|
|
172
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typed Template System
|
|
3
|
-
* 템플릿별 강타입 시스템
|
|
4
|
-
*/
|
|
5
|
-
import type { StandardRequest, StandardResult } from "@k-msg/core";
|
|
6
|
-
export type MessageChannel = "alimtalk" | "sms" | "mms";
|
|
7
|
-
export interface VariableType {
|
|
8
|
-
string: string;
|
|
9
|
-
number: number;
|
|
10
|
-
boolean: boolean;
|
|
11
|
-
date: string;
|
|
12
|
-
phoneNumber: string;
|
|
13
|
-
url: string;
|
|
14
|
-
email: string;
|
|
15
|
-
}
|
|
16
|
-
export interface VariableDefinition<T extends keyof VariableType = keyof VariableType> {
|
|
17
|
-
type: T;
|
|
18
|
-
required: boolean;
|
|
19
|
-
description?: string;
|
|
20
|
-
validation?: {
|
|
21
|
-
pattern?: RegExp;
|
|
22
|
-
minLength?: number;
|
|
23
|
-
maxLength?: number;
|
|
24
|
-
min?: number;
|
|
25
|
-
max?: number;
|
|
26
|
-
};
|
|
27
|
-
defaultValue?: VariableType[T];
|
|
28
|
-
}
|
|
29
|
-
export interface TemplateSchema<V extends Record<string, VariableDefinition> = Record<string, VariableDefinition>> {
|
|
30
|
-
templateCode: string;
|
|
31
|
-
name: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
channels: MessageChannel[];
|
|
34
|
-
variables: V;
|
|
35
|
-
metadata?: {
|
|
36
|
-
category?: string;
|
|
37
|
-
version?: string;
|
|
38
|
-
author?: string;
|
|
39
|
-
createdAt?: string;
|
|
40
|
-
updatedAt?: string;
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export interface TemplateRegistry {
|
|
44
|
-
WELCOME_001: TemplateSchema<{
|
|
45
|
-
name: VariableDefinition<"string">;
|
|
46
|
-
service: VariableDefinition<"string">;
|
|
47
|
-
date: VariableDefinition<"date">;
|
|
48
|
-
}>;
|
|
49
|
-
OTP_AUTH_001: TemplateSchema<{
|
|
50
|
-
code: VariableDefinition<"string">;
|
|
51
|
-
expiry: VariableDefinition<"string">;
|
|
52
|
-
serviceName: VariableDefinition<"string">;
|
|
53
|
-
}>;
|
|
54
|
-
ORDER_CONFIRM_001: TemplateSchema<{
|
|
55
|
-
orderNumber: VariableDefinition<"string">;
|
|
56
|
-
productName: VariableDefinition<"string">;
|
|
57
|
-
amount: VariableDefinition<"string">;
|
|
58
|
-
deliveryDate: VariableDefinition<"date">;
|
|
59
|
-
customerName: VariableDefinition<"string">;
|
|
60
|
-
}>;
|
|
61
|
-
PAYMENT_COMPLETE_001: TemplateSchema<{
|
|
62
|
-
amount: VariableDefinition<"string">;
|
|
63
|
-
paymentMethod: VariableDefinition<"string">;
|
|
64
|
-
transactionId: VariableDefinition<"string">;
|
|
65
|
-
customerName: VariableDefinition<"string">;
|
|
66
|
-
}>;
|
|
67
|
-
SMS_DIRECT: TemplateSchema<{
|
|
68
|
-
message: VariableDefinition<"string">;
|
|
69
|
-
}>;
|
|
70
|
-
LMS_DIRECT: TemplateSchema<{
|
|
71
|
-
subject: VariableDefinition<"string">;
|
|
72
|
-
message: VariableDefinition<"string">;
|
|
73
|
-
}>;
|
|
74
|
-
EMERGENCY_NOTIFICATION: TemplateSchema<{
|
|
75
|
-
alertType: VariableDefinition<"string">;
|
|
76
|
-
message: VariableDefinition<"string">;
|
|
77
|
-
contactInfo: VariableDefinition<"string">;
|
|
78
|
-
urgencyLevel: VariableDefinition<"string">;
|
|
79
|
-
}>;
|
|
80
|
-
}
|
|
81
|
-
export type TemplateCode = keyof TemplateRegistry;
|
|
82
|
-
export type ExtractVariables<T extends TemplateCode> = {
|
|
83
|
-
[K in keyof TemplateRegistry[T]["variables"]]: TemplateRegistry[T]["variables"][K] extends VariableDefinition<infer VT> ? VariableType[VT] : never;
|
|
84
|
-
};
|
|
85
|
-
export type ExtractRequiredVariables<T extends TemplateCode> = {
|
|
86
|
-
[K in keyof TemplateRegistry[T]["variables"] as TemplateRegistry[T]["variables"][K] extends {
|
|
87
|
-
required: true;
|
|
88
|
-
} ? K : never]: TemplateRegistry[T]["variables"][K] extends VariableDefinition<infer VT> ? VariableType[VT] : never;
|
|
89
|
-
};
|
|
90
|
-
export type ExtractOptionalVariables<T extends TemplateCode> = {
|
|
91
|
-
[K in keyof TemplateRegistry[T]["variables"] as TemplateRegistry[T]["variables"][K] extends {
|
|
92
|
-
required: false;
|
|
93
|
-
} ? K : never]?: TemplateRegistry[T]["variables"][K] extends VariableDefinition<infer VT> ? VariableType[VT] : never;
|
|
94
|
-
};
|
|
95
|
-
export type TemplateVariables<T extends TemplateCode> = ExtractRequiredVariables<T> & ExtractOptionalVariables<T>;
|
|
96
|
-
export type ExtractChannels<T extends TemplateCode> = TemplateRegistry[T]["channels"][number];
|
|
97
|
-
export interface TypedRequest<T extends TemplateCode> {
|
|
98
|
-
templateCode: T;
|
|
99
|
-
phoneNumber: string;
|
|
100
|
-
variables: TemplateVariables<T>;
|
|
101
|
-
options?: {
|
|
102
|
-
senderNumber?: string;
|
|
103
|
-
scheduledAt?: Date;
|
|
104
|
-
priority?: "high" | "normal" | "low";
|
|
105
|
-
channel?: ExtractChannels<T>;
|
|
106
|
-
subject?: string;
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
export interface TypedResult<T extends TemplateCode> {
|
|
110
|
-
messageId: string;
|
|
111
|
-
templateCode: T;
|
|
112
|
-
phoneNumber: string;
|
|
113
|
-
channel: ExtractChannels<T>;
|
|
114
|
-
status: "sent" | "pending" | "failed";
|
|
115
|
-
timestamp: Date;
|
|
116
|
-
variables: TemplateVariables<T>;
|
|
117
|
-
error?: {
|
|
118
|
-
code: string;
|
|
119
|
-
message: string;
|
|
120
|
-
retryable: boolean;
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* TypedRequest를 StandardRequest로 변환하는 유틸리티 타입
|
|
125
|
-
*/
|
|
126
|
-
export type ToStandardRequest<T extends TemplateCode> = StandardRequest & {
|
|
127
|
-
templateCode: T;
|
|
128
|
-
variables: Record<string, string>;
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* StandardResult를 TypedResult로 변환하는 유틸리티 타입
|
|
132
|
-
*/
|
|
133
|
-
export type ToTypedResult<T extends TemplateCode> = Omit<TypedResult<T>, "templateCode" | "channel"> & {
|
|
134
|
-
templateCode: T;
|
|
135
|
-
channel: ExtractChannels<T>;
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* 타입 안전한 템플릿 변환 함수들
|
|
139
|
-
*/
|
|
140
|
-
export declare class TemplateTypeConverter {
|
|
141
|
-
/**
|
|
142
|
-
* TypedRequest를 StandardRequest로 변환
|
|
143
|
-
*/
|
|
144
|
-
static toStandardRequest<T extends TemplateCode>(typedRequest: TypedRequest<T>): StandardRequest;
|
|
145
|
-
/**
|
|
146
|
-
* StandardResult를 TypedResult로 변환
|
|
147
|
-
*/
|
|
148
|
-
static toTypedResult<T extends TemplateCode>(standardResult: StandardResult, templateCode: T, originalVariables: TemplateVariables<T>): TypedResult<T>;
|
|
149
|
-
/**
|
|
150
|
-
* 템플릿 코드로부터 채널 추론
|
|
151
|
-
*/
|
|
152
|
-
private static inferChannel;
|
|
153
|
-
/**
|
|
154
|
-
* StandardStatus를 TypedResult 상태로 매핑
|
|
155
|
-
*/
|
|
156
|
-
private static mapStandardStatus;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* 타입 안전한 Provider 래퍼
|
|
160
|
-
* 기존 Provider를 감싸서 타입 안전성을 제공
|
|
161
|
-
*/
|
|
162
|
-
export declare class TypedProvider {
|
|
163
|
-
private provider;
|
|
164
|
-
constructor(provider: import("@k-msg/core").BaseProvider);
|
|
165
|
-
/**
|
|
166
|
-
* 타입 안전한 메시지 전송
|
|
167
|
-
*/
|
|
168
|
-
send<T extends TemplateCode>(request: TypedRequest<T>): Promise<TypedResult<T>>;
|
|
169
|
-
/**
|
|
170
|
-
* 대량 전송 (타입 안전)
|
|
171
|
-
*/
|
|
172
|
-
sendBulk<T extends TemplateCode>(requests: TypedRequest<T>[], options?: {
|
|
173
|
-
batchSize?: number;
|
|
174
|
-
concurrency?: number;
|
|
175
|
-
failFast?: boolean;
|
|
176
|
-
}): Promise<TypedResult<T>[]>;
|
|
177
|
-
/**
|
|
178
|
-
* 상태 조회 (타입 안전하지 않은 부분 - messageId만 필요)
|
|
179
|
-
*/
|
|
180
|
-
getStatus(messageId: string): Promise<import("@k-msg/core").DeliveryStatus>;
|
|
181
|
-
/**
|
|
182
|
-
* 기본 Provider 접근 (고급 사용자용)
|
|
183
|
-
*/
|
|
184
|
-
getUnderlyingProvider(): import("@k-msg/core").BaseProvider<StandardRequest, StandardResult>;
|
|
185
|
-
}
|
|
186
|
-
export declare const TEMPLATE_REGISTRY: TemplateRegistry;
|
|
187
|
-
export declare class TemplateValidator {
|
|
188
|
-
static validateVariables<T extends TemplateCode>(templateCode: T, variables: Record<string, any>): ValidationResult<TemplateVariables<T>>;
|
|
189
|
-
static validateChannel<T extends TemplateCode>(templateCode: T, channel: string): boolean;
|
|
190
|
-
private static validateType;
|
|
191
|
-
private static validateValue;
|
|
192
|
-
private static applyDefaults;
|
|
193
|
-
}
|
|
194
|
-
export interface ValidationResult<T> {
|
|
195
|
-
isValid: boolean;
|
|
196
|
-
errors: string[];
|
|
197
|
-
warnings: string[];
|
|
198
|
-
validatedVariables: T;
|
|
199
|
-
}
|