entity-server-client 0.2.6 → 0.3.1
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 +32 -0
- package/build.mjs +7 -0
- package/docs/api/alimtalk.md +62 -0
- package/docs/api/auth.md +256 -0
- package/docs/api/email.md +37 -0
- package/docs/api/entity.md +273 -0
- package/docs/api/file.md +80 -0
- package/docs/api/health.md +47 -0
- package/docs/api/identity.md +32 -0
- package/docs/api/import.md +45 -0
- package/docs/api/packet.md +90 -0
- package/docs/api/pg.md +90 -0
- package/docs/api/push.md +107 -0
- package/docs/api/react.md +141 -0
- package/docs/api/request.md +118 -0
- package/docs/api/setup.md +43 -0
- package/docs/api/sms.md +45 -0
- package/docs/api/smtp.md +33 -0
- package/docs/api/transaction.md +50 -0
- package/docs/api/utils.md +52 -0
- package/docs/apis.md +22 -779
- package/docs/react.md +58 -0
- package/package.json +6 -1
- package/src/EntityServerClient.ts +5 -31
- package/src/client/base.ts +114 -12
- package/src/client/packet.ts +8 -31
- package/src/client/request.ts +52 -6
- package/src/client/utils.ts +5 -6
- package/src/mixins/auth.ts +14 -158
- package/src/mixins/push.ts +0 -23
- package/src/mixins/utils.ts +32 -1
- package/src/packet.ts +84 -0
- package/src/types.ts +15 -125
- package/tests/packet.test.mjs +50 -0
- package/dist/EntityServerClient.d.ts +0 -709
- package/dist/client/base.d.ts +0 -59
- package/dist/client/hmac.d.ts +0 -8
- package/dist/client/packet.d.ts +0 -24
- package/dist/client/request.d.ts +0 -15
- package/dist/client/utils.d.ts +0 -8
- package/dist/hooks/useEntityServer.d.ts +0 -63
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -7
- package/dist/mixins/alimtalk.d.ts +0 -56
- package/dist/mixins/auth.d.ts +0 -167
- package/dist/mixins/email.d.ts +0 -51
- package/dist/mixins/entity.d.ts +0 -119
- package/dist/mixins/file.d.ts +0 -78
- package/dist/mixins/identity.d.ts +0 -52
- package/dist/mixins/pg.d.ts +0 -63
- package/dist/mixins/push.d.ts +0 -110
- package/dist/mixins/sms.d.ts +0 -55
- package/dist/mixins/smtp.d.ts +0 -44
- package/dist/mixins/utils.d.ts +0 -70
- package/dist/react.d.ts +0 -1
- package/dist/react.js +0 -2
- package/dist/react.js.map +0 -7
- package/dist/types.d.ts +0 -329
- package/src/mixins/alimtalk.ts +0 -35
- package/src/mixins/email.ts +0 -46
- package/src/mixins/identity.ts +0 -35
- package/src/mixins/pg.ts +0 -58
- package/src/mixins/sms.ts +0 -46
package/dist/types.d.ts
DELETED
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 엔티티 목록 조회 파라미터입니다.
|
|
3
|
-
*
|
|
4
|
-
* ```ts
|
|
5
|
-
* client.list("post", {
|
|
6
|
-
* page: 1, limit: 10,
|
|
7
|
-
* orderBy: "created_time", orderDir: "DESC",
|
|
8
|
-
* fields: ["seq", "title", "created_time"],
|
|
9
|
-
* conditions: { status: "active" },
|
|
10
|
-
* });
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
export interface EntityListParams {
|
|
14
|
-
/** 조회 페이지 번호. 기본값: `1` */
|
|
15
|
-
page?: number;
|
|
16
|
-
/** 페이지당 레코드 수. 기본값: `20` */
|
|
17
|
-
limit?: number;
|
|
18
|
-
/** 정렬 기준 필드명 */
|
|
19
|
-
orderBy?: string;
|
|
20
|
-
/** 정렬 방향. 기본값: `"ASC"` */
|
|
21
|
-
orderDir?: "ASC" | "DESC";
|
|
22
|
-
/**
|
|
23
|
-
* 반환할 필드 목록.
|
|
24
|
-
*
|
|
25
|
-
* - **미지정 (기본값)**: 엔티티의 인덱스 필드만 반환합니다.
|
|
26
|
-
* 복호화를 건너뛰기 때문에 **가장 빠릅니다**.
|
|
27
|
-
* - `["*"]`: 전체 필드 반환 (복호화 수행).
|
|
28
|
-
* - 필드명 목록: 해당 필드만 반환합니다.
|
|
29
|
-
* 엔티티 설정에 `index`로 선언된 필드만 지정 가능합니다.
|
|
30
|
-
* 존재하지 않는 필드명을 지정하면 서버 에러가 발생합니다.
|
|
31
|
-
* - `seq`, `created_time`, `updated_time`, `license_seq`는 필드에 관계없이 항상 포함됩니다.
|
|
32
|
-
*
|
|
33
|
-
* ```ts
|
|
34
|
-
* // 기본값 (인덱스 필드만, 가장 빠름)
|
|
35
|
-
* client.list("account")
|
|
36
|
-
* // 전체 필드
|
|
37
|
-
* client.list("account", { fields: ["*"] })
|
|
38
|
-
* // seq, name, email만
|
|
39
|
-
* client.list("account", { fields: ["seq", "name", "email"] })
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
fields?: string[];
|
|
43
|
-
/** 필터 조건. POST body로 전달됩니다. (예: `{ status: "active" }`) */
|
|
44
|
-
conditions?: Record<string, unknown>;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* `list()`, `history()` 응답의 `data` 필드 구조입니다.
|
|
48
|
-
*
|
|
49
|
-
* 서버는 항상 이 구조로 반환합니다:
|
|
50
|
-
* ```json
|
|
51
|
-
* { "ok": true, "data": { "items": [...], "total": 100, "page": 1, "limit": 20 } }
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
export interface EntityListResult<T = unknown> {
|
|
55
|
-
items: T[];
|
|
56
|
-
/** 전체 레코드 수 */
|
|
57
|
-
total: number;
|
|
58
|
-
/** 현재 페이지 번호 */
|
|
59
|
-
page: number;
|
|
60
|
-
/** 페이지당 레코드 수 */
|
|
61
|
-
limit: number;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* `query()` 메서드에 전달하는 SQL 쿼리 요청입니다.
|
|
65
|
-
*
|
|
66
|
-
* - `sql`: SELECT 전용 SQL. 인덱스 테이블만 조회 가능하며 JOIN 지원.
|
|
67
|
-
* - `params`: SQL 바인딩 파라미터 (`?` 플레이스홀더 대응).
|
|
68
|
-
* - `limit`: 최대 반환 건수 (최대 1000. 미지정 시 서버 기본값 적용).
|
|
69
|
-
*
|
|
70
|
-
* ```ts
|
|
71
|
-
* client.query("order", {
|
|
72
|
-
* sql: `SELECT o.seq, o.status, u.name
|
|
73
|
-
* FROM order o
|
|
74
|
-
* JOIN account u ON u.data_seq = o.account_seq
|
|
75
|
-
* WHERE o.status = ?`,
|
|
76
|
-
* params: ["pending"],
|
|
77
|
-
* limit: 100,
|
|
78
|
-
* });
|
|
79
|
-
* ```
|
|
80
|
-
*/
|
|
81
|
-
export interface EntityQueryRequest {
|
|
82
|
-
sql: string;
|
|
83
|
-
params?: unknown[];
|
|
84
|
-
limit?: number;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* `history()` 응답의 개별 이력 레코드 구조입니다.
|
|
88
|
-
*
|
|
89
|
-
* - `action`: `"INSERT"` | `"UPDATE"` | `"DELETE_SOFT"` | `"DELETE_HARD"` | `"ROLLBACK"`
|
|
90
|
-
* - `data_snapshot`: 변경 당시 엔티티 데이터 스냅샷
|
|
91
|
-
*/
|
|
92
|
-
export interface EntityHistoryRecord<T = unknown> {
|
|
93
|
-
seq: number;
|
|
94
|
-
action: "INSERT" | "UPDATE" | "DELETE_SOFT" | "DELETE_HARD" | "ROLLBACK" | string;
|
|
95
|
-
data_snapshot: T | null;
|
|
96
|
-
changed_by: number | null;
|
|
97
|
-
changed_time: string;
|
|
98
|
-
}
|
|
99
|
-
export interface RegisterPushDeviceOptions {
|
|
100
|
-
platform?: string;
|
|
101
|
-
deviceType?: string;
|
|
102
|
-
browser?: string;
|
|
103
|
-
browserVersion?: string;
|
|
104
|
-
pushEnabled?: boolean;
|
|
105
|
-
transactionId?: string;
|
|
106
|
-
}
|
|
107
|
-
/** EntityServerClient 생성/설정 옵션입니다. */
|
|
108
|
-
export interface EntityServerClientOptions {
|
|
109
|
-
baseUrl?: string;
|
|
110
|
-
token?: string;
|
|
111
|
-
/**
|
|
112
|
-
* `true`이면 인증된 POST/PUT 요청 바디를 XChaCha20-Poly1305로 암호화합니다.
|
|
113
|
-
*
|
|
114
|
-
* 서버의 `EnablePacketEncryption`이 활성화된 경우 필수로 설정해야 합니다.
|
|
115
|
-
* 로그인(`login()`)·토큰 갱신(`refreshToken()`)은 인증 전 요청이므로 자동으로 건너뜁니다.
|
|
116
|
-
*
|
|
117
|
-
* 기본값: `false`
|
|
118
|
-
*/
|
|
119
|
-
encryptRequests?: boolean;
|
|
120
|
-
/**
|
|
121
|
-
* `true`이면 `login()` 성공 후 Access Token 만료 전에 자동으로 갱신(silent refresh)합니다.
|
|
122
|
-
* 갱신 시점은 `expires_in - refreshBuffer` 초입니다.
|
|
123
|
-
*
|
|
124
|
-
* 갱신 성공 시 `onTokenRefreshed`, 실패 시 `onSessionExpired` 콜백이 호출됩니다.
|
|
125
|
-
*
|
|
126
|
-
* 기본값: `false`
|
|
127
|
-
*/
|
|
128
|
-
keepSession?: boolean;
|
|
129
|
-
/**
|
|
130
|
-
* 만료 몇 초 전에 자동 갱신을 시도할지 설정합니다.
|
|
131
|
-
*
|
|
132
|
-
* 예: `expires_in = 3600`, `refreshBuffer = 60` → 3540초 후 갱신
|
|
133
|
-
*
|
|
134
|
-
* 기본값: `60`
|
|
135
|
-
*/
|
|
136
|
-
refreshBuffer?: number;
|
|
137
|
-
/**
|
|
138
|
-
* 자동 갱신 성공 시 호출되는 콜백입니다.
|
|
139
|
-
* 새 `access_token`과 `expires_in`이 전달됩니다.
|
|
140
|
-
* 앱은 이 콜백에서 localStorage 등에 토큰을 저장해야 합니다.
|
|
141
|
-
*/
|
|
142
|
-
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
143
|
-
/**
|
|
144
|
-
* 세션 유지 갱신 실패 시 호출되는 콜백입니다.
|
|
145
|
-
* refresh_token 만료 등으로 재발급이 불가능한 경우입니다.
|
|
146
|
-
* 앱은 이 콜백에서 로그인 페이지로 이동하는 등의 처리를 해야 합니다.
|
|
147
|
-
*/
|
|
148
|
-
onSessionExpired?: (error: Error) => void;
|
|
149
|
-
/**
|
|
150
|
-
* HMAC 인증용 API Key (`X-API-Key` 헤더).
|
|
151
|
-
* `hmacSecret`과 함께 설정하면 HMAC 인증 모드로 동작합니다.
|
|
152
|
-
* **서버 사이드(Node.js 등) 전용. 브라우저에서는 사용하지 마세요.**
|
|
153
|
-
*/
|
|
154
|
-
apiKey?: string;
|
|
155
|
-
/**
|
|
156
|
-
* HMAC 인증 시크릿. `apiKey`와 함께 설정하면 HMAC 인증 모드로 동작합니다.
|
|
157
|
-
*
|
|
158
|
-
* 패킷 암호화 키도 이 값에서 HKDF-SHA256으로 유도합니다:
|
|
159
|
-
* `key = HKDF-SHA256(hmac_secret, info="entity-server:packet-encryption", salt="entity-server:hkdf:v1")`
|
|
160
|
-
*
|
|
161
|
-
* **서버 사이드(Node.js 등) 전용. 브라우저에서는 사용하지 마세요.**
|
|
162
|
-
*/
|
|
163
|
-
hmacSecret?: string;
|
|
164
|
-
}
|
|
165
|
-
/** `smtpSend()` 요청 파라미터입니다. */
|
|
166
|
-
export interface SmtpSendRequest {
|
|
167
|
-
/** provider 식별자 (생략 시 기본 provider 사용) */
|
|
168
|
-
provider?: string;
|
|
169
|
-
from?: string;
|
|
170
|
-
to: string[];
|
|
171
|
-
cc?: string[];
|
|
172
|
-
bcc?: string[];
|
|
173
|
-
subject?: string;
|
|
174
|
-
body_text?: string;
|
|
175
|
-
body_html?: string;
|
|
176
|
-
/** 이메일 템플릿 이름 */
|
|
177
|
-
template_name?: string;
|
|
178
|
-
/** 템플릿 변수 */
|
|
179
|
-
template_data?: Record<string, unknown>;
|
|
180
|
-
/** 첨부 파일 seq 배열 */
|
|
181
|
-
attachments?: number[];
|
|
182
|
-
reply_to?: string;
|
|
183
|
-
ref_entity?: string;
|
|
184
|
-
ref_seq?: number;
|
|
185
|
-
}
|
|
186
|
-
/** `smsSend()` 요청 파라미터입니다. */
|
|
187
|
-
export interface SmsSendRequest {
|
|
188
|
-
provider?: string;
|
|
189
|
-
sender?: string;
|
|
190
|
-
/** 수신자 전화번호 (필수) */
|
|
191
|
-
receiver: string;
|
|
192
|
-
/** 메시지 내용 (필수) */
|
|
193
|
-
content: string;
|
|
194
|
-
/** MMS 제목 (LMS/MMS 전용) */
|
|
195
|
-
subject?: string;
|
|
196
|
-
image_url?: string;
|
|
197
|
-
ref_entity?: string;
|
|
198
|
-
ref_seq?: number;
|
|
199
|
-
}
|
|
200
|
-
/** `pushSend()` 요청 파라미터 (`POST /v1/push/send`) */
|
|
201
|
-
export interface PushSendRequest {
|
|
202
|
-
/** 수신 계정 seq 배열 (필수) */
|
|
203
|
-
account_seqs: number[];
|
|
204
|
-
title: string;
|
|
205
|
-
body: string;
|
|
206
|
-
/** 커스텀 페이로드 */
|
|
207
|
-
data?: Record<string, string>;
|
|
208
|
-
ref_entity?: string;
|
|
209
|
-
ref_seq?: number;
|
|
210
|
-
}
|
|
211
|
-
/** `pushSendAll()` 요청 파라미터 (`POST /v1/push/send-all`) */
|
|
212
|
-
export interface PushSendAllRequest {
|
|
213
|
-
title: string;
|
|
214
|
-
body: string;
|
|
215
|
-
data?: Record<string, string>;
|
|
216
|
-
ref_entity?: string;
|
|
217
|
-
ref_seq?: number;
|
|
218
|
-
}
|
|
219
|
-
/** 알림톡 / 친구톡 버튼 */
|
|
220
|
-
export interface AlimtalkButton {
|
|
221
|
-
name: string;
|
|
222
|
-
type: string;
|
|
223
|
-
url_mobile?: string;
|
|
224
|
-
url_pc?: string;
|
|
225
|
-
}
|
|
226
|
-
/** `alimtalkSend()` 요청 파라미터 */
|
|
227
|
-
export interface AlimtalkSendRequest {
|
|
228
|
-
/** 알림톡 템플릿 코드 (필수) */
|
|
229
|
-
template_code: string;
|
|
230
|
-
/** 수신자 전화번호 (필수) */
|
|
231
|
-
receiver: string;
|
|
232
|
-
variables?: Record<string, string>;
|
|
233
|
-
provider?: string;
|
|
234
|
-
}
|
|
235
|
-
/** `friendtalkSend()` 요청 파라미터 */
|
|
236
|
-
export interface FriendtalkSendRequest {
|
|
237
|
-
/** 수신자 전화번호 (필수) */
|
|
238
|
-
receiver: string;
|
|
239
|
-
/** 메시지 내용 (필수) */
|
|
240
|
-
content: string;
|
|
241
|
-
/** 메시지 타입 (`"text"` | `"image"` | `"wide_image"` 등, 기본 `"text"`) */
|
|
242
|
-
msg_type?: string;
|
|
243
|
-
image_url?: string;
|
|
244
|
-
image_link?: string;
|
|
245
|
-
/** 광고 여부 (기본 `true`) */
|
|
246
|
-
is_ad?: boolean;
|
|
247
|
-
buttons?: AlimtalkButton[];
|
|
248
|
-
carousel_json?: string;
|
|
249
|
-
items_json?: string;
|
|
250
|
-
header?: string;
|
|
251
|
-
provider?: string;
|
|
252
|
-
}
|
|
253
|
-
/** `pgCreateOrder()` 요청 파라미터 */
|
|
254
|
-
export interface PgCreateOrderRequest {
|
|
255
|
-
/** 결제 금액 (필수) */
|
|
256
|
-
amount: number;
|
|
257
|
-
/** 주문명 (필수) */
|
|
258
|
-
order_name: string;
|
|
259
|
-
currency?: string;
|
|
260
|
-
customer_name?: string;
|
|
261
|
-
customer_email?: string;
|
|
262
|
-
provider?: string;
|
|
263
|
-
metadata?: Record<string, unknown>;
|
|
264
|
-
}
|
|
265
|
-
/** `pgConfirmPayment()` 요청 파라미터 */
|
|
266
|
-
export interface PgConfirmPaymentRequest {
|
|
267
|
-
payment_key: string;
|
|
268
|
-
order_id: string;
|
|
269
|
-
amount: number;
|
|
270
|
-
}
|
|
271
|
-
/** `pgCancelPayment()` 요청 파라미터 */
|
|
272
|
-
export interface PgCancelPaymentRequest {
|
|
273
|
-
/** 취소 사유 (필수) */
|
|
274
|
-
cancel_reason: string;
|
|
275
|
-
/** 부분 취소 금액 (생략 시 전액 취소) */
|
|
276
|
-
cancel_amount?: number;
|
|
277
|
-
refund_account?: {
|
|
278
|
-
bank: string;
|
|
279
|
-
account_number: string;
|
|
280
|
-
holder_name: string;
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
/** `identityRequest()` 요청 파라미터 */
|
|
284
|
-
export interface IdentityRequestOptions {
|
|
285
|
-
/** 인증 목적 (필수, 예: `"signup"`, `"password_reset"`) */
|
|
286
|
-
purpose: string;
|
|
287
|
-
/** 인증 방법 (예: `"simple"`, `"pass"`) */
|
|
288
|
-
method?: string;
|
|
289
|
-
provider?: string;
|
|
290
|
-
}
|
|
291
|
-
/** `qrcode()` / `qrcodeBase64()` / `qrcodeText()` 공통 옵션 */
|
|
292
|
-
export interface QRCodeOptions {
|
|
293
|
-
/** PNG 크기 픽셀 (기본 256, 최대 2048) */
|
|
294
|
-
size?: number;
|
|
295
|
-
/** 오류 복구 수준 (기본 `"medium"`) */
|
|
296
|
-
error_correction?: "low" | "medium" | "high" | "highest";
|
|
297
|
-
/** 전경색 hex (기본 `"#000000"`) */
|
|
298
|
-
fg_color?: string;
|
|
299
|
-
/** 배경색 hex (기본 `"#ffffff"`) */
|
|
300
|
-
bg_color?: string;
|
|
301
|
-
}
|
|
302
|
-
/** `barcode()` 옵션 */
|
|
303
|
-
export interface BarcodeOptions {
|
|
304
|
-
/** 바코드 타입 (기본 `"code128"`) */
|
|
305
|
-
type?: "code128" | "code39" | "ean13" | "ean8" | "codabar" | "datamatrix" | "itf";
|
|
306
|
-
/** 너비 픽셀 (기본 300, 최대 2048) */
|
|
307
|
-
width?: number;
|
|
308
|
-
/** 높이 픽셀 (기본 100, 최대 2048) */
|
|
309
|
-
height?: number;
|
|
310
|
-
}
|
|
311
|
-
/** 파일 메타 정보 */
|
|
312
|
-
export interface FileMeta {
|
|
313
|
-
uuid: string;
|
|
314
|
-
original_name: string;
|
|
315
|
-
size: number;
|
|
316
|
-
mime_type: string;
|
|
317
|
-
entity: string;
|
|
318
|
-
ref_seq?: number;
|
|
319
|
-
is_public?: boolean;
|
|
320
|
-
created_time: string;
|
|
321
|
-
url?: string;
|
|
322
|
-
}
|
|
323
|
-
/** `fileUpload()` 옵션 */
|
|
324
|
-
export interface FileUploadOptions {
|
|
325
|
-
/** 파일에 연결할 ref_seq */
|
|
326
|
-
refSeq?: number;
|
|
327
|
-
/** 공개 파일 여부 (기본 서버 설정 따름) */
|
|
328
|
-
isPublic?: boolean;
|
|
329
|
-
}
|
package/src/mixins/alimtalk.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { AlimtalkSendRequest, FriendtalkSendRequest } from "../types";
|
|
2
|
-
import type { GConstructor, EntityServerClientBase } from "../client/base";
|
|
3
|
-
|
|
4
|
-
export function AlimtalkMixin<
|
|
5
|
-
TBase extends GConstructor<EntityServerClientBase>,
|
|
6
|
-
>(Base: TBase) {
|
|
7
|
-
return class AlimtalkMixinClass extends Base {
|
|
8
|
-
// ─── 알림톡 / 친구톡 ─────────────────────────────────────────────────
|
|
9
|
-
|
|
10
|
-
/** 알림톡(KakaoTalk 비즈 메시지)을 발송합니다. */
|
|
11
|
-
alimtalkSend(req: AlimtalkSendRequest): Promise<{ message: string }> {
|
|
12
|
-
return this._request("POST", "/v1/alimtalk/send", req);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** 알림톡 발송 상태를 조회합니다. */
|
|
16
|
-
alimtalkStatus(seq: number): Promise<{ ok: boolean; status: string }> {
|
|
17
|
-
return this._request("GET", `/v1/alimtalk/status/${seq}`);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** 사용 가능한 알림톡 템플릿 목록을 조회합니다. */
|
|
21
|
-
alimtalkTemplates(): Promise<{
|
|
22
|
-
templates: Array<{ code: string; name: string; content: string }>;
|
|
23
|
-
count: number;
|
|
24
|
-
}> {
|
|
25
|
-
return this._request("GET", "/v1/alimtalk/templates");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/** 친구톡(KakaoTalk 채널 메시지)을 발송합니다. */
|
|
29
|
-
friendtalkSend(
|
|
30
|
-
req: FriendtalkSendRequest,
|
|
31
|
-
): Promise<{ message: string }> {
|
|
32
|
-
return this._request("POST", "/v1/friendtalk/send", req);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
package/src/mixins/email.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { GConstructor, EntityServerClientBase } from "../client/base";
|
|
2
|
-
|
|
3
|
-
export function EmailMixin<TBase extends GConstructor<EntityServerClientBase>>(
|
|
4
|
-
Base: TBase,
|
|
5
|
-
) {
|
|
6
|
-
return class EmailMixinClass extends Base {
|
|
7
|
-
// ─── 이메일 인증 / 변경 ───────────────────────────────────────────────
|
|
8
|
-
|
|
9
|
-
/** 이메일 인증 코드 또는 링크를 발송합니다. */
|
|
10
|
-
emailVerificationSend(email: string): Promise<{ ok: boolean }> {
|
|
11
|
-
return this._request(
|
|
12
|
-
"POST",
|
|
13
|
-
"/v1/email/verification/send",
|
|
14
|
-
{ email },
|
|
15
|
-
false,
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** 이메일 인증 코드를 확인합니다. */
|
|
20
|
-
emailVerificationConfirm(token: string): Promise<{ ok: boolean }> {
|
|
21
|
-
return this._request(
|
|
22
|
-
"POST",
|
|
23
|
-
"/v1/email/verification/confirm",
|
|
24
|
-
{ token },
|
|
25
|
-
false,
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** 현재 계정의 이메일 인증 상태를 조회합니다. (JWT 필요) */
|
|
30
|
-
emailVerificationStatus(): Promise<{
|
|
31
|
-
ok: boolean;
|
|
32
|
-
verified: boolean;
|
|
33
|
-
email?: string;
|
|
34
|
-
}> {
|
|
35
|
-
return this._request("GET", "/v1/email/verification/status");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/** 이메일 주소를 변경합니다. (JWT + 인증 코드 필요) */
|
|
39
|
-
emailChange(newEmail: string, code?: string): Promise<{ ok: boolean }> {
|
|
40
|
-
return this._request("POST", "/v1/email/change", {
|
|
41
|
-
new_email: newEmail,
|
|
42
|
-
...(code ? { code } : {}),
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
}
|
package/src/mixins/identity.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { IdentityRequestOptions } from "../types";
|
|
2
|
-
import type { GConstructor, EntityServerClientBase } from "../client/base";
|
|
3
|
-
|
|
4
|
-
export function IdentityMixin<
|
|
5
|
-
TBase extends GConstructor<EntityServerClientBase>,
|
|
6
|
-
>(Base: TBase) {
|
|
7
|
-
return class IdentityMixinClass extends Base {
|
|
8
|
-
// ─── 본인인증 ─────────────────────────────────────────────────────────
|
|
9
|
-
|
|
10
|
-
/** 본인인증 요청을 생성합니다. */
|
|
11
|
-
identityRequest(
|
|
12
|
-
opts: IdentityRequestOptions,
|
|
13
|
-
): Promise<{ ok: boolean; data: Record<string, unknown> }> {
|
|
14
|
-
return this._request("POST", "/v1/identity/request", opts);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** 본인인증 결과를 조회합니다. */
|
|
18
|
-
identityResult(requestId: string): Promise<{
|
|
19
|
-
ok: boolean;
|
|
20
|
-
data: Record<string, unknown>;
|
|
21
|
-
}> {
|
|
22
|
-
return this._request("GET", `/v1/identity/result/${requestId}`);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** CI 해시 중복 여부를 확인합니다. */
|
|
26
|
-
identityVerifyCI(ciHash: string): Promise<{
|
|
27
|
-
ok: boolean;
|
|
28
|
-
data: { exists: boolean; account_seq?: number };
|
|
29
|
-
}> {
|
|
30
|
-
return this._request("POST", "/v1/identity/verify-ci", {
|
|
31
|
-
ci_hash: ciHash,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
package/src/mixins/pg.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
PgCreateOrderRequest,
|
|
3
|
-
PgConfirmPaymentRequest,
|
|
4
|
-
PgCancelPaymentRequest,
|
|
5
|
-
} from "../types";
|
|
6
|
-
import type { GConstructor, EntityServerClientBase } from "../client/base";
|
|
7
|
-
|
|
8
|
-
export function PgMixin<TBase extends GConstructor<EntityServerClientBase>>(
|
|
9
|
-
Base: TBase,
|
|
10
|
-
) {
|
|
11
|
-
return class PgMixinClass extends Base {
|
|
12
|
-
// ─── PG(결제 게이트웨이) ──────────────────────────────────────────────
|
|
13
|
-
|
|
14
|
-
/** 결제 주문을 생성합니다. */
|
|
15
|
-
pgCreateOrder(
|
|
16
|
-
req: PgCreateOrderRequest,
|
|
17
|
-
): Promise<{ ok: boolean; data: Record<string, unknown> }> {
|
|
18
|
-
return this._request("POST", "/v1/pg/orders", req);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** 주문 정보를 조회합니다. */
|
|
22
|
-
pgGetOrder(orderId: string): Promise<{
|
|
23
|
-
ok: boolean;
|
|
24
|
-
data: Record<string, unknown>;
|
|
25
|
-
}> {
|
|
26
|
-
return this._request("GET", `/v1/pg/orders/${orderId}`);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** 결제를 승인합니다. */
|
|
30
|
-
pgConfirmPayment(
|
|
31
|
-
req: PgConfirmPaymentRequest,
|
|
32
|
-
): Promise<{ ok: boolean; data: Record<string, unknown> }> {
|
|
33
|
-
return this._request("POST", "/v1/pg/confirm", req);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** 결제를 취소합니다. */
|
|
37
|
-
pgCancelPayment(
|
|
38
|
-
orderId: string,
|
|
39
|
-
req: PgCancelPaymentRequest,
|
|
40
|
-
): Promise<{ ok: boolean; data: Record<string, unknown> }> {
|
|
41
|
-
return this._request(
|
|
42
|
-
"POST",
|
|
43
|
-
`/v1/pg/orders/${orderId}/cancel`,
|
|
44
|
-
req,
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** 결제 상태를 외부 PG와 동기화합니다. */
|
|
49
|
-
pgSyncPayment(orderId: string): Promise<{ ok: boolean }> {
|
|
50
|
-
return this._request("POST", `/v1/pg/orders/${orderId}/sync`, {});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** 클라이언트 SDK 설정을 반환합니다 (공개 API, 인증 불필요). */
|
|
54
|
-
pgConfig(): Promise<{ ok: boolean; data: Record<string, unknown> }> {
|
|
55
|
-
return this._request("GET", "/v1/pg/config", undefined, false);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
package/src/mixins/sms.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { SmsSendRequest } from "../types";
|
|
2
|
-
import type { GConstructor, EntityServerClientBase } from "../client/base";
|
|
3
|
-
|
|
4
|
-
export function SmsMixin<TBase extends GConstructor<EntityServerClientBase>>(
|
|
5
|
-
Base: TBase,
|
|
6
|
-
) {
|
|
7
|
-
return class SmsMixinClass extends Base {
|
|
8
|
-
// ─── SMS 발송 / 인증 ──────────────────────────────────────────────────
|
|
9
|
-
|
|
10
|
-
/** SMS를 발송합니다. */
|
|
11
|
-
smsSend(req: SmsSendRequest): Promise<{ ok: boolean; seq: number }> {
|
|
12
|
-
return this._request("POST", "/v1/sms/send", req);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** SMS 발송 상태를 조회합니다. */
|
|
16
|
-
smsStatus(seq: number): Promise<{ ok: boolean; status: string }> {
|
|
17
|
-
return this._request("GET", `/v1/sms/status/${seq}`);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** SMS 인증 코드를 발송합니다. */
|
|
21
|
-
smsVerificationSend(
|
|
22
|
-
phone: string,
|
|
23
|
-
opts: { purpose?: string } = {},
|
|
24
|
-
): Promise<{ ok: boolean }> {
|
|
25
|
-
return this._request(
|
|
26
|
-
"POST",
|
|
27
|
-
"/v1/sms/verification/send",
|
|
28
|
-
{ phone, ...opts },
|
|
29
|
-
false,
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/** SMS 인증 코드를 검증합니다. */
|
|
34
|
-
smsVerificationVerify(
|
|
35
|
-
phone: string,
|
|
36
|
-
code: string,
|
|
37
|
-
): Promise<{ ok: boolean; verified: boolean }> {
|
|
38
|
-
return this._request(
|
|
39
|
-
"POST",
|
|
40
|
-
"/v1/sms/verification/verify",
|
|
41
|
-
{ phone, code },
|
|
42
|
-
false,
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
}
|