@k-msg/provider 0.1.5 → 0.2.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.
@@ -17,7 +17,7 @@ export declare class IWINVSMSProvider extends IWINVProvider {
17
17
  senderNumber?: string;
18
18
  scheduledAt?: Date;
19
19
  priority?: "high" | "normal" | "low";
20
- }): Promise<any>;
20
+ }): Promise<import("@k-msg/core").StandardResult>;
21
21
  /**
22
22
  * LMS 전송 (긴 문자 메시지)
23
23
  */
@@ -25,7 +25,7 @@ export declare class IWINVSMSProvider extends IWINVProvider {
25
25
  senderNumber?: string;
26
26
  scheduledAt?: Date;
27
27
  priority?: "high" | "normal" | "low";
28
- }): Promise<any>;
28
+ }): Promise<import("@k-msg/core").StandardResult>;
29
29
  /**
30
30
  * 대량 SMS 전송
31
31
  */
@@ -37,7 +37,7 @@ export declare class IWINVSMSProvider extends IWINVProvider {
37
37
  senderNumber?: string;
38
38
  scheduledAt?: Date;
39
39
  batchSize?: number;
40
- }): Promise<(PromiseRejectedResult | PromiseFulfilledResult<any>)[]>;
40
+ }): Promise<(PromiseRejectedResult | PromiseFulfilledResult<import("@k-msg/core").StandardResult>)[]>;
41
41
  /**
42
42
  * SMS/LMS 자동 판별 전송
43
43
  */
@@ -46,7 +46,7 @@ export declare class IWINVSMSProvider extends IWINVProvider {
46
46
  scheduledAt?: Date;
47
47
  subject?: string;
48
48
  priority?: "high" | "normal" | "low";
49
- }): Promise<any>;
49
+ }): Promise<import("@k-msg/core").StandardResult>;
50
50
  }
51
51
  /**
52
52
  * SMS Provider 팩토리 함수들
@@ -1,17 +1,47 @@
1
- import { type SendOptions, type StandardRequest, UniversalProvider } from "@k-msg/core";
2
- import type { IWINVConfig } from "./types/iwinv";
1
+ import { type SendOptions, type StandardRequest, type StandardResult, UniversalProvider } from "@k-msg/core";
2
+ import type { IWINVConfig, IWINVSmsHistoryItem } from "./types/iwinv";
3
+ export type IWINVSmsHistoryParams = {
4
+ version?: string;
5
+ companyId?: string;
6
+ startDate: string | Date;
7
+ endDate: string | Date;
8
+ requestNo?: string;
9
+ pageNum?: number;
10
+ pageSize?: number;
11
+ phone?: string;
12
+ };
3
13
  export declare class IWINVProvider extends UniversalProvider {
4
14
  private static readonly directSmsTemplates;
5
15
  private readonly iwinvConfig;
6
16
  constructor(config: IWINVConfig);
7
- send(params: SendOptions | StandardRequest | any): Promise<any>;
17
+ send(params: StandardRequest): Promise<StandardResult>;
18
+ send(params: SendOptions): Promise<unknown>;
19
+ /**
20
+ * SMS v2: 잔액(충전금) 조회
21
+ * - URL: POST https://sms.bizservice.iwinv.kr/api/charge/
22
+ * - Header: secret: base64(SMS_API_KEY&SMS_AUTH_KEY)
23
+ * - Body: { "version": "1.0" }
24
+ */
25
+ getSmsCharge(): Promise<number>;
26
+ /**
27
+ * SMS v2: 전송 내역 조회
28
+ * - URL: POST https://sms.bizservice.iwinv.kr/api/history/
29
+ * - 기간은 90일 이내만 허용
30
+ */
31
+ getSmsHistory(params: IWINVSmsHistoryParams): Promise<{
32
+ totalCount: number;
33
+ list: IWINVSmsHistoryItem[];
34
+ message: string;
35
+ }>;
8
36
  private isStandardRequest;
9
37
  private isSmsChannelRequest;
10
38
  private resolveSmsBaseUrl;
11
- private isLongMessage;
12
39
  private resolveSmsMessageType;
13
40
  private extractMessageText;
14
41
  private formatSmsReserveDate;
42
+ private formatSmsHistoryDate;
43
+ private assertSmsHistoryWindow;
44
+ private requestSmsApi;
15
45
  private normalizePhoneNumber;
16
46
  private buildSmsSecretHeader;
17
47
  private buildLmsTitle;
@@ -2,6 +2,7 @@
2
2
  * IWINV API TypeScript 타입 정의
3
3
  * IWINV 알림톡 REST API 규격서 기반
4
4
  */
5
+ import type { ProviderConfig } from "@k-msg/core";
5
6
  export interface IWINVBaseResponse {
6
7
  code: number;
7
8
  message: string;
@@ -46,7 +47,7 @@ export interface Template {
46
47
  templateStatusMsg?: string;
47
48
  templateStatusComments?: string;
48
49
  createDate: string;
49
- buttons: any[];
50
+ buttons: unknown[];
50
51
  }
51
52
  export interface TemplateListRequest {
52
53
  pageNum?: string;
@@ -113,21 +114,68 @@ export type CancelReservationResponse = IWINVBaseResponse;
113
114
  export interface BalanceResponse extends IWINVBaseResponse {
114
115
  charge: number;
115
116
  }
116
- export interface IWINVConfig {
117
- apiKey: string;
118
- baseUrl: string;
117
+ export interface IWINVSmsChargeRequest {
118
+ version: string;
119
+ }
120
+ export interface IWINVSmsChargeResponse {
121
+ code: number;
122
+ message: string;
123
+ charge: number;
124
+ }
125
+ export interface IWINVSmsHistoryRequest {
126
+ version: string;
127
+ companyid: string;
128
+ startDate: string;
129
+ endDate: string;
130
+ requestNo?: string;
131
+ pageNum?: number;
132
+ pageSize?: number;
133
+ phone?: string;
134
+ }
135
+ export interface IWINVSmsHistoryItem {
136
+ requestNo: string | number;
137
+ companyid: string;
138
+ msgType: string;
139
+ phone: string;
140
+ callback: string;
141
+ sendStatus?: string;
142
+ sendStatusCode?: string;
143
+ sendStatusMsg?: string;
144
+ sendDate: string;
145
+ }
146
+ export interface IWINVSmsHistoryResponse {
147
+ resultCode: number;
148
+ message: string;
149
+ totalCount: number;
150
+ list: IWINVSmsHistoryItem[];
151
+ }
152
+ export interface IWINVConfig extends ProviderConfig {
119
153
  smsApiKey?: string;
120
154
  smsAuthKey?: string;
121
155
  smsBaseUrl?: string;
156
+ /**
157
+ * SMS v2 전송 내역 조회시 필요한 조직(업체) 발송 아이디.
158
+ * (API 문서의 `companyid`)
159
+ */
160
+ smsCompanyId?: string;
122
161
  senderNumber?: string;
123
162
  smsSenderNumber?: string;
124
163
  sendEndpoint?: string;
164
+ /**
165
+ * Optional proxy/IP override header for IP-restricted IWINV endpoints.
166
+ * Intended for testing or controlled environments; production should whitelist real egress IPs.
167
+ */
168
+ xForwardedFor?: string;
169
+ /**
170
+ * Extra HTTP headers merged into outgoing requests.
171
+ * Use with care: overriding AUTH/secret can break requests.
172
+ */
173
+ extraHeaders?: Record<string, string>;
125
174
  ipRetryCount?: number;
126
175
  ipRetryDelayMs?: number;
127
176
  ipAlertWebhookUrl?: string;
128
177
  onIpRestrictionAlert?: (payload: IWINVIPRestrictionAlert) => void | Promise<void>;
129
178
  debug?: boolean;
130
- [key: string]: unknown;
131
179
  }
132
180
  export interface IWINVIPRestrictionAlert {
133
181
  provider: "iwinv";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@k-msg/provider",
3
- "version": "0.1.5",
3
+ "version": "0.2.0",
4
4
  "packageManager": "bun@1.3.8",
5
5
  "type": "module",
6
6
  "description": "Complete provider system with adapters and implementations for K-Message platform",
@@ -55,7 +55,7 @@
55
55
  "publish": "bun publish --access public"
56
56
  },
57
57
  "dependencies": {
58
- "@k-msg/core": "0.1.5",
58
+ "@k-msg/core": "0.2.0",
59
59
  "zod": "^4.0.14"
60
60
  },
61
61
  "devDependencies": {