@quantabit/kyc-sdk 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/services/kycApi.js","../src/i18n/index.js","../src/types/index.js","../src/index.js"],"sourcesContent":["/**\n * Kyc SDK - API 客户端\n * KYC 身份认证系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * KYC API 客户端\n */\nexport class KycApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/kyc', config);\n }\n\n // ============ 认证状态 ============\n\n /**\n * 获取认证状态\n */\n async getStatus() {\n return this.get('/status');\n }\n\n /**\n * 获取认证等级信息\n */\n async getLevelInfo() {\n return this.get('/levels');\n }\n\n /**\n * 获取当前认证等级\n */\n async getCurrentLevel() {\n return this.get('/my/level');\n }\n\n // ============ 基础认证(Level 1)============\n\n /**\n * 提交基础信息\n * @param {Object} data - 基础信息\n */\n async submitBasicInfo(data) {\n return this.post('/basic', data);\n }\n\n /**\n * 获取基础认证状态\n */\n async getBasicStatus() {\n return this.get('/basic/status');\n }\n\n /**\n * 验证手机号\n * @param {string} phone - 手机号\n * @param {string} code - 验证码\n */\n async verifyPhone(phone, code) {\n return this.post('/phone/verify', { phone, code });\n }\n\n /**\n * 验证邮箱\n * @param {string} email - 邮箱\n * @param {string} code - 验证码\n */\n async verifyEmail(email, code) {\n return this.post('/email/verify', { email, code });\n }\n\n // ============ 身份认证(Level 2)============\n\n /**\n * 提交身份证件\n * @param {Object} data - 证件信息\n */\n async submitIdDocument(data) {\n return this.post('/identity', data);\n }\n\n /**\n * 提交证件认证(兼容快捷导出命名)\n * @param {Object} data - 证件认证数据\n */\n async submitDocumentVerification(data) {\n return this.submitIdDocument(data);\n }\n\n /**\n * 上传证件照片\n * @param {string} type - 照片类型(front, back, selfie)\n * @param {File} file - 图片文件\n */\n async uploadIdPhoto(type, file) {\n const formData = new FormData();\n formData.append('type', type);\n formData.append('file', file);\n\n const token = this.getToken();\n const response = await fetch(`${this.baseUrl}/identity/upload`, {\n method: 'POST',\n headers: {\n 'Authorization': token ? `Bearer ${token}` : '',\n },\n body: formData,\n });\n\n return response.json();\n }\n\n /**\n * 获取身份认证状态\n */\n async getIdentityStatus() {\n return this.get('/identity/status');\n }\n\n // ============ 人脸识别 ============\n\n /**\n * 获取人脸识别 Token\n */\n async getFaceToken() {\n return this.post('/face/token');\n }\n\n /**\n * 提交人脸识别结果\n * @param {string} token - 人脸识别 Token\n * @param {Object} result - 识别结果\n */\n async submitFaceResult(token, result) {\n return this.post('/face/verify', { token, result });\n }\n\n /**\n * 获取人脸识别状态\n */\n async getFaceStatus() {\n return this.get('/face/status');\n }\n\n // ============ 高级认证(Level 3)============\n\n /**\n * 提交高级认证信息\n * @param {Object} data - 高级认证数据\n */\n async submitAdvancedInfo(data) {\n return this.post('/advanced', data);\n }\n\n /**\n * 上传补充材料\n * @param {string} type - 材料类型\n * @param {File} file - 文件\n */\n async uploadDocument(type, file) {\n const formData = new FormData();\n formData.append('type', type);\n formData.append('file', file);\n\n const token = this.getToken();\n const response = await fetch(`${this.baseUrl}/advanced/upload`, {\n method: 'POST',\n headers: {\n 'Authorization': token ? `Bearer ${token}` : '',\n },\n body: formData,\n });\n\n return response.json();\n }\n\n /**\n * 获取高级认证状态\n */\n async getAdvancedStatus() {\n return this.get('/advanced/status');\n }\n\n // ============ 认证记录 ============\n\n /**\n * 获取认证历史\n * @param {Object} params - 查询参数\n */\n async getHistory(params = {}) {\n return this.get('/history', params);\n }\n\n /**\n * 重新提交认证\n * @param {string} level - 认证等级\n */\n async resubmit(level) {\n return this.post('/resubmit', { level });\n }\n\n // ============ 管理员操作 ============\n\n /**\n * 获取待审核列表(管理员)\n * @param {Object} params - 查询参数\n */\n async getPendingReviews(params = {}) {\n return this.get('/admin/pending', params);\n }\n\n /**\n * 审核认证(管理员)\n * @param {string} userId - 用户 ID\n * @param {string} level - 认证等级\n * @param {Object} decision - 审核决定\n */\n async review(userId, level, decision) {\n return this.post('/admin/review', { user_id: userId, level, ...decision });\n }\n\n // ============ 隐私合规 (GDPR 特殊类别数据) ============\n\n /**\n * 请求删除身份认证数据 — GDPR 第17条\n * 向服务端提交身份数据删除请求\n * 注意: 受 AML/KYC 法规限制,某些数据可能需要保留法定期限\n * @param {string} reason - 删除原因\n * @returns {Promise<object>} 删除请求结果\n */\n async requestDataDeletion(reason = '') {\n return this.post('/gdpr/delete', { reason });\n }\n\n /**\n * 导出身份认证数据 — GDPR 第20条\n * 返回脱敏后的身份认证信息(证件号部分遮蔽)\n * @returns {Promise<object>} 脱敏后的身份数据\n */\n async exportKycData() {\n try {\n const status = await this.getStatus();\n const history = await this.getHistory({ page_size: 50 });\n return {\n exportDate: new Date().toISOString(),\n format: 'QBit KYC Export (GDPR Art. 20)',\n note: 'ID numbers are partially masked for security',\n currentLevel: status?.data?.level || 'none',\n verificationStatus: status?.data?.status || 'unknown',\n history: history?.data?.items?.map(item => ({\n ...item,\n // 证件号脱敏\n id_number: item.id_number ? `${item.id_number.slice(0, 4)}****${item.id_number.slice(-4)}` : undefined,\n // 移除证件照片 URL(敏感生物数据)\n photo_url: undefined,\n selfie_url: undefined,\n })) || [],\n };\n } catch (e) {\n return { error: e.message, exportDate: new Date().toISOString() };\n }\n }\n\n /**\n * 获取隐私数据声明\n */\n getDataDisclosure() {\n return {\n sdk: '@quantabit/kyc-sdk',\n privacyLevel: 'functional',\n consentRequired: true,\n specialCategory: true,\n collected: [\n { type: 'identity_documents', description: 'Government-issued ID (front/back)', retention: '5 years (AML regulation)', encrypted: true },\n { type: 'biometric_data', description: 'Facial recognition data', retention: 'Until verification complete', encrypted: true },\n { type: 'personal_info', description: 'Name, DOB, nationality', retention: '5 years (AML regulation)' },\n { type: 'address_proof', description: 'Proof of address documents', retention: '5 years' },\n ],\n compliance: ['GDPR Art. 9 (Special categories)', 'AML 5th Directive', 'KYC/CDD'],\n gdprCapabilities: ['export', 'delete-request'],\n legalBasis: 'Legal obligation (AML) + Explicit consent (biometric)',\n note: 'Biometric data is processed with explicit consent and deleted after verification. AML-required data has a 5-year legal retention period.',\n };\n }\n}\n\n// 创建默认实例\nexport const kycApi = new KycApiClient();\n\nexport const KYCApiClient = KycApiClient;\n\nexport default kycApi;\n","/**\n * KYC SDK - 国际化\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n title: '实名认证',\n level0: '未认证',\n level1: '基础认证',\n level2: '标准认证',\n level3: '高级认证',\n level4: '尊享认证',\n \n statusNotStarted: '未开始',\n statusPending: '待审核',\n statusReviewing: '审核中',\n statusApproved: '已通过',\n statusRejected: '已拒绝',\n statusExpired: '已过期',\n \n idCard: '身份证',\n passport: '护照',\n driverLicense: '驾驶证',\n \n uploadFront: '上传证件正面',\n uploadBack: '上传证件背面',\n uploadSelfie: '上传手持证件照',\n startLiveness: '开始活体检测',\n \n nameLabel: '姓名',\n idNumberLabel: '证件号码',\n countryLabel: '国家/地区',\n addressLabel: '地址',\n \n submitVerification: '提交认证',\n processing: '处理中...',\n verificationSuccess: '认证成功',\n verificationFailed: '认证失败',\n \n tips: '请确保照片清晰、完整,证件在有效期内',\n privacyNotice: '您的信息将被安全加密存储,仅用于身份验证',\n },\n ja: {\n title: '実名認証',\n level0: '未認証',\n level1: '基本認証',\n level2: '標準認証',\n level3: '高級認証',\n level4: 'プレミアム認証',\n \n statusNotStarted: '未開始',\n statusPending: '審査待ち',\n statusReviewing: '審査中',\n statusApproved: '承認済み',\n statusRejected: '拒否されました',\n statusExpired: '期限切れ',\n \n idCard: '身分証明書',\n passport: 'パスポート',\n driverLicense: '運転免許証',\n \n uploadFront: '身分証の表面をアップロード',\n uploadBack: '身分証の裏面をアップロード',\n uploadSelfie: '身分証を持った写真をアップロード',\n startLiveness: '生体認証を開始',\n \n nameLabel: '氏名',\n idNumberLabel: '身分証番号',\n countryLabel: '国/地域',\n addressLabel: '住所',\n \n submitVerification: '認証を提出',\n processing: '処理中...',\n verificationSuccess: '認証成功',\n verificationFailed: '認証失敗',\n \n tips: '写真が鮮明で完全であること、身分証が有効期限内であることを確認してください',\n privacyNotice: 'あなたの情報は安全に暗号化され、本人確認のみに使用されます',\n },\n ko: {\n title: '실명 인증',\n level0: '미인증',\n level1: '기본 인증',\n level2: '표준 인증',\n level3: '고급 인증',\n level4: '프리미엄 인증',\n \n statusNotStarted: '시작되지 않음',\n statusPending: '심사 대기 중',\n statusReviewing: '심사 중',\n statusApproved: '승인됨',\n statusRejected: '거부됨',\n statusExpired: '만료됨',\n \n idCard: '신분증',\n passport: '여권',\n driverLicense: '운전면허증',\n \n uploadFront: '신분증 앞면 업로드',\n uploadBack: '신분증 뒷면 업로드',\n uploadSelfie: '신분증을 든 사진 업로드',\n startLiveness: '생체 인증 시작',\n \n nameLabel: '성명',\n idNumberLabel: '신분증 번호',\n countryLabel: '국가/지역',\n addressLabel: '주소',\n \n submitVerification: '인증 제출',\n processing: '처리 중...',\n verificationSuccess: '인증 성공',\n verificationFailed: '인증 실패',\n \n tips: '사진이 선명하고 완전하며 신분증이 유효 기간 내에 있는지 확인하세요',\n privacyNotice: '귀하의 정보는 안전하게 암호화되어 본인 확인 용도로만 사용됩니다',\n },\n en: {\n title: 'Identity Verification',\n level0: 'Not Verified',\n level1: 'Basic Verified',\n level2: 'Standard Verified',\n level3: 'Advanced Verified',\n level4: 'Premium Verified',\n \n statusNotStarted: 'Not Started',\n statusPending: 'Pending',\n statusReviewing: 'Under Review',\n statusApproved: 'Approved',\n statusRejected: 'Rejected',\n statusExpired: 'Expired',\n \n idCard: 'ID Card',\n passport: 'Passport',\n driverLicense: 'Driver License',\n \n uploadFront: 'Upload Front Side',\n uploadBack: 'Upload Back Side',\n uploadSelfie: 'Upload Selfie with ID',\n startLiveness: 'Start Liveness Check',\n \n nameLabel: 'Full Name',\n idNumberLabel: 'ID Number',\n countryLabel: 'Country/Region',\n addressLabel: 'Address',\n \n submitVerification: 'Submit Verification',\n processing: 'Processing...',\n verificationSuccess: 'Verification Successful',\n verificationFailed: 'Verification Failed',\n \n tips: 'Please ensure photos are clear and complete, and documents are valid',\n privacyNotice: 'Your information will be securely encrypted and used only for identity verification',\n },\n};\n\nlet currentLanguage = 'zh';\nexport function setLanguage(lang) { if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang; }\nexport function getLanguage() { return currentLanguage; }\nexport function t(key) { return (messages[currentLanguage] || messages.en)[key] || key; }\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * KYC SDK - 类型定义\n */\n\n// 认证级别\nexport const KYCLevel = {\n NONE: 0,\n BASIC: 1, // 手机/邮箱验证\n STANDARD: 2, // 身份证验证\n ADVANCED: 3, // 视频活体验证\n PREMIUM: 4, // 高级认证\n};\n\n// 认证状态\nexport const KYCStatus = {\n NOT_STARTED: 'not_started',\n PENDING: 'pending',\n REVIEWING: 'reviewing',\n APPROVED: 'approved',\n REJECTED: 'rejected',\n EXPIRED: 'expired',\n};\n\n// 证件类型\nexport const DocumentType = {\n ID_CARD: 'id_card',\n PASSPORT: 'passport',\n DRIVER_LICENSE: 'driver_license',\n RESIDENCE_PERMIT: 'residence_permit',\n};\n\n// 验证类型\nexport const VerificationType = {\n PHONE: 'phone',\n EMAIL: 'email',\n DOCUMENT: 'document',\n LIVENESS: 'liveness',\n ADDRESS: 'address',\n};\n\nexport default { KYCLevel, KYCStatus, DocumentType, VerificationType };\n","/**\n * @quantabit/kyc-sdk\n * KYC SDK\n */\n\nexport { kycApi, KYCApiClient } from './services/kycApi';\nexport { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t } from './i18n';\nexport { KYCLevel, KYCStatus, DocumentType, VerificationType } from './types';\n\nimport { kycApi } from './services/kycApi';\n\nexport const getStatus = (...args) => kycApi.getStatus(...args);\nexport const verifyPhone = (...args) => kycApi.verifyPhone(...args);\nexport const verifyEmail = (...args) => kycApi.verifyEmail(...args);\nexport const uploadDocument = (...args) => kycApi.uploadDocument(...args);\nexport const submitDocumentVerification = (...args) => kycApi.submitDocumentVerification(...args);\n\nimport \"./styles/kyc.css\";\n"],"names":["KycApiClient","BaseApiClient","constructor","config","getStatus","get","getLevelInfo","getCurrentLevel","submitBasicInfo","data","post","getBasicStatus","verifyPhone","phone","code","verifyEmail","email","submitIdDocument","submitDocumentVerification","uploadIdPhoto","type","file","formData","FormData","append","token","getToken","response","fetch","baseUrl","method","headers","body","json","getIdentityStatus","getFaceToken","submitFaceResult","result","getFaceStatus","submitAdvancedInfo","uploadDocument","getAdvancedStatus","getHistory","params","resubmit","level","getPendingReviews","review","userId","decision","user_id","requestDataDeletion","reason","exportKycData","status","history","page_size","exportDate","Date","toISOString","format","note","currentLevel","verificationStatus","items","map","item","id_number","slice","undefined","photo_url","selfie_url","e","error","message","getDataDisclosure","sdk","privacyLevel","consentRequired","specialCategory","collected","description","retention","encrypted","compliance","gdprCapabilities","legalBasis","kycApi","KYCApiClient","SUPPORTED_LANGUAGES","messages","zh","title","level0","level1","level2","level3","level4","statusNotStarted","statusPending","statusReviewing","statusApproved","statusRejected","statusExpired","idCard","passport","driverLicense","uploadFront","uploadBack","uploadSelfie","startLiveness","nameLabel","idNumberLabel","countryLabel","addressLabel","submitVerification","processing","verificationSuccess","verificationFailed","tips","privacyNotice","ja","ko","en","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","KYCLevel","NONE","BASIC","STANDARD","ADVANCED","PREMIUM","KYCStatus","NOT_STARTED","PENDING","REVIEWING","APPROVED","REJECTED","EXPIRED","DocumentType","ID_CARD","PASSPORT","DRIVER_LICENSE","RESIDENCE_PERMIT","VerificationType","PHONE","EMAIL","DOCUMENT","LIVENESS","ADDRESS","args"],"mappings":"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"}
@@ -0,0 +1,523 @@
1
+ import { BaseApiClient } from '@quantabit/sdk-config';
2
+
3
+ /**
4
+ * Kyc SDK - API 客户端
5
+ * KYC 身份认证系统后端接口封装
6
+ *
7
+ * 使用 BaseApiClient 基类简化代码
8
+ */
9
+
10
+
11
+ /**
12
+ * KYC API 客户端
13
+ */
14
+ class KycApiClient extends BaseApiClient {
15
+ constructor(config = {}) {
16
+ super('/kyc', config);
17
+ }
18
+
19
+ // ============ 认证状态 ============
20
+
21
+ /**
22
+ * 获取认证状态
23
+ */
24
+ async getStatus() {
25
+ return this.get('/status');
26
+ }
27
+
28
+ /**
29
+ * 获取认证等级信息
30
+ */
31
+ async getLevelInfo() {
32
+ return this.get('/levels');
33
+ }
34
+
35
+ /**
36
+ * 获取当前认证等级
37
+ */
38
+ async getCurrentLevel() {
39
+ return this.get('/my/level');
40
+ }
41
+
42
+ // ============ 基础认证(Level 1)============
43
+
44
+ /**
45
+ * 提交基础信息
46
+ * @param {Object} data - 基础信息
47
+ */
48
+ async submitBasicInfo(data) {
49
+ return this.post('/basic', data);
50
+ }
51
+
52
+ /**
53
+ * 获取基础认证状态
54
+ */
55
+ async getBasicStatus() {
56
+ return this.get('/basic/status');
57
+ }
58
+
59
+ /**
60
+ * 验证手机号
61
+ * @param {string} phone - 手机号
62
+ * @param {string} code - 验证码
63
+ */
64
+ async verifyPhone(phone, code) {
65
+ return this.post('/phone/verify', {
66
+ phone,
67
+ code
68
+ });
69
+ }
70
+
71
+ /**
72
+ * 验证邮箱
73
+ * @param {string} email - 邮箱
74
+ * @param {string} code - 验证码
75
+ */
76
+ async verifyEmail(email, code) {
77
+ return this.post('/email/verify', {
78
+ email,
79
+ code
80
+ });
81
+ }
82
+
83
+ // ============ 身份认证(Level 2)============
84
+
85
+ /**
86
+ * 提交身份证件
87
+ * @param {Object} data - 证件信息
88
+ */
89
+ async submitIdDocument(data) {
90
+ return this.post('/identity', data);
91
+ }
92
+
93
+ /**
94
+ * 提交证件认证(兼容快捷导出命名)
95
+ * @param {Object} data - 证件认证数据
96
+ */
97
+ async submitDocumentVerification(data) {
98
+ return this.submitIdDocument(data);
99
+ }
100
+
101
+ /**
102
+ * 上传证件照片
103
+ * @param {string} type - 照片类型(front, back, selfie)
104
+ * @param {File} file - 图片文件
105
+ */
106
+ async uploadIdPhoto(type, file) {
107
+ const formData = new FormData();
108
+ formData.append('type', type);
109
+ formData.append('file', file);
110
+ const token = this.getToken();
111
+ const response = await fetch(`${this.baseUrl}/identity/upload`, {
112
+ method: 'POST',
113
+ headers: {
114
+ 'Authorization': token ? `Bearer ${token}` : ''
115
+ },
116
+ body: formData
117
+ });
118
+ return response.json();
119
+ }
120
+
121
+ /**
122
+ * 获取身份认证状态
123
+ */
124
+ async getIdentityStatus() {
125
+ return this.get('/identity/status');
126
+ }
127
+
128
+ // ============ 人脸识别 ============
129
+
130
+ /**
131
+ * 获取人脸识别 Token
132
+ */
133
+ async getFaceToken() {
134
+ return this.post('/face/token');
135
+ }
136
+
137
+ /**
138
+ * 提交人脸识别结果
139
+ * @param {string} token - 人脸识别 Token
140
+ * @param {Object} result - 识别结果
141
+ */
142
+ async submitFaceResult(token, result) {
143
+ return this.post('/face/verify', {
144
+ token,
145
+ result
146
+ });
147
+ }
148
+
149
+ /**
150
+ * 获取人脸识别状态
151
+ */
152
+ async getFaceStatus() {
153
+ return this.get('/face/status');
154
+ }
155
+
156
+ // ============ 高级认证(Level 3)============
157
+
158
+ /**
159
+ * 提交高级认证信息
160
+ * @param {Object} data - 高级认证数据
161
+ */
162
+ async submitAdvancedInfo(data) {
163
+ return this.post('/advanced', data);
164
+ }
165
+
166
+ /**
167
+ * 上传补充材料
168
+ * @param {string} type - 材料类型
169
+ * @param {File} file - 文件
170
+ */
171
+ async uploadDocument(type, file) {
172
+ const formData = new FormData();
173
+ formData.append('type', type);
174
+ formData.append('file', file);
175
+ const token = this.getToken();
176
+ const response = await fetch(`${this.baseUrl}/advanced/upload`, {
177
+ method: 'POST',
178
+ headers: {
179
+ 'Authorization': token ? `Bearer ${token}` : ''
180
+ },
181
+ body: formData
182
+ });
183
+ return response.json();
184
+ }
185
+
186
+ /**
187
+ * 获取高级认证状态
188
+ */
189
+ async getAdvancedStatus() {
190
+ return this.get('/advanced/status');
191
+ }
192
+
193
+ // ============ 认证记录 ============
194
+
195
+ /**
196
+ * 获取认证历史
197
+ * @param {Object} params - 查询参数
198
+ */
199
+ async getHistory(params = {}) {
200
+ return this.get('/history', params);
201
+ }
202
+
203
+ /**
204
+ * 重新提交认证
205
+ * @param {string} level - 认证等级
206
+ */
207
+ async resubmit(level) {
208
+ return this.post('/resubmit', {
209
+ level
210
+ });
211
+ }
212
+
213
+ // ============ 管理员操作 ============
214
+
215
+ /**
216
+ * 获取待审核列表(管理员)
217
+ * @param {Object} params - 查询参数
218
+ */
219
+ async getPendingReviews(params = {}) {
220
+ return this.get('/admin/pending', params);
221
+ }
222
+
223
+ /**
224
+ * 审核认证(管理员)
225
+ * @param {string} userId - 用户 ID
226
+ * @param {string} level - 认证等级
227
+ * @param {Object} decision - 审核决定
228
+ */
229
+ async review(userId, level, decision) {
230
+ return this.post('/admin/review', {
231
+ user_id: userId,
232
+ level,
233
+ ...decision
234
+ });
235
+ }
236
+
237
+ // ============ 隐私合规 (GDPR 特殊类别数据) ============
238
+
239
+ /**
240
+ * 请求删除身份认证数据 — GDPR 第17条
241
+ * 向服务端提交身份数据删除请求
242
+ * 注意: 受 AML/KYC 法规限制,某些数据可能需要保留法定期限
243
+ * @param {string} reason - 删除原因
244
+ * @returns {Promise<object>} 删除请求结果
245
+ */
246
+ async requestDataDeletion(reason = '') {
247
+ return this.post('/gdpr/delete', {
248
+ reason
249
+ });
250
+ }
251
+
252
+ /**
253
+ * 导出身份认证数据 — GDPR 第20条
254
+ * 返回脱敏后的身份认证信息(证件号部分遮蔽)
255
+ * @returns {Promise<object>} 脱敏后的身份数据
256
+ */
257
+ async exportKycData() {
258
+ try {
259
+ const status = await this.getStatus();
260
+ const history = await this.getHistory({
261
+ page_size: 50
262
+ });
263
+ return {
264
+ exportDate: new Date().toISOString(),
265
+ format: 'QBit KYC Export (GDPR Art. 20)',
266
+ note: 'ID numbers are partially masked for security',
267
+ currentLevel: status?.data?.level || 'none',
268
+ verificationStatus: status?.data?.status || 'unknown',
269
+ history: history?.data?.items?.map(item => ({
270
+ ...item,
271
+ // 证件号脱敏
272
+ id_number: item.id_number ? `${item.id_number.slice(0, 4)}****${item.id_number.slice(-4)}` : undefined,
273
+ // 移除证件照片 URL(敏感生物数据)
274
+ photo_url: undefined,
275
+ selfie_url: undefined
276
+ })) || []
277
+ };
278
+ } catch (e) {
279
+ return {
280
+ error: e.message,
281
+ exportDate: new Date().toISOString()
282
+ };
283
+ }
284
+ }
285
+
286
+ /**
287
+ * 获取隐私数据声明
288
+ */
289
+ getDataDisclosure() {
290
+ return {
291
+ sdk: '@quantabit/kyc-sdk',
292
+ privacyLevel: 'functional',
293
+ consentRequired: true,
294
+ specialCategory: true,
295
+ collected: [{
296
+ type: 'identity_documents',
297
+ description: 'Government-issued ID (front/back)',
298
+ retention: '5 years (AML regulation)',
299
+ encrypted: true
300
+ }, {
301
+ type: 'biometric_data',
302
+ description: 'Facial recognition data',
303
+ retention: 'Until verification complete',
304
+ encrypted: true
305
+ }, {
306
+ type: 'personal_info',
307
+ description: 'Name, DOB, nationality',
308
+ retention: '5 years (AML regulation)'
309
+ }, {
310
+ type: 'address_proof',
311
+ description: 'Proof of address documents',
312
+ retention: '5 years'
313
+ }],
314
+ compliance: ['GDPR Art. 9 (Special categories)', 'AML 5th Directive', 'KYC/CDD'],
315
+ gdprCapabilities: ['export', 'delete-request'],
316
+ legalBasis: 'Legal obligation (AML) + Explicit consent (biometric)',
317
+ note: 'Biometric data is processed with explicit consent and deleted after verification. AML-required data has a 5-year legal retention period.'
318
+ };
319
+ }
320
+ }
321
+
322
+ // 创建默认实例
323
+ const kycApi = new KycApiClient();
324
+ const KYCApiClient = KycApiClient;
325
+
326
+ /**
327
+ * KYC SDK - 国际化
328
+ */
329
+
330
+ const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];
331
+ const messages = {
332
+ zh: {
333
+ title: '实名认证',
334
+ level0: '未认证',
335
+ level1: '基础认证',
336
+ level2: '标准认证',
337
+ level3: '高级认证',
338
+ level4: '尊享认证',
339
+ statusNotStarted: '未开始',
340
+ statusPending: '待审核',
341
+ statusReviewing: '审核中',
342
+ statusApproved: '已通过',
343
+ statusRejected: '已拒绝',
344
+ statusExpired: '已过期',
345
+ idCard: '身份证',
346
+ passport: '护照',
347
+ driverLicense: '驾驶证',
348
+ uploadFront: '上传证件正面',
349
+ uploadBack: '上传证件背面',
350
+ uploadSelfie: '上传手持证件照',
351
+ startLiveness: '开始活体检测',
352
+ nameLabel: '姓名',
353
+ idNumberLabel: '证件号码',
354
+ countryLabel: '国家/地区',
355
+ addressLabel: '地址',
356
+ submitVerification: '提交认证',
357
+ processing: '处理中...',
358
+ verificationSuccess: '认证成功',
359
+ verificationFailed: '认证失败',
360
+ tips: '请确保照片清晰、完整,证件在有效期内',
361
+ privacyNotice: '您的信息将被安全加密存储,仅用于身份验证'
362
+ },
363
+ ja: {
364
+ title: '実名認証',
365
+ level0: '未認証',
366
+ level1: '基本認証',
367
+ level2: '標準認証',
368
+ level3: '高級認証',
369
+ level4: 'プレミアム認証',
370
+ statusNotStarted: '未開始',
371
+ statusPending: '審査待ち',
372
+ statusReviewing: '審査中',
373
+ statusApproved: '承認済み',
374
+ statusRejected: '拒否されました',
375
+ statusExpired: '期限切れ',
376
+ idCard: '身分証明書',
377
+ passport: 'パスポート',
378
+ driverLicense: '運転免許証',
379
+ uploadFront: '身分証の表面をアップロード',
380
+ uploadBack: '身分証の裏面をアップロード',
381
+ uploadSelfie: '身分証を持った写真をアップロード',
382
+ startLiveness: '生体認証を開始',
383
+ nameLabel: '氏名',
384
+ idNumberLabel: '身分証番号',
385
+ countryLabel: '国/地域',
386
+ addressLabel: '住所',
387
+ submitVerification: '認証を提出',
388
+ processing: '処理中...',
389
+ verificationSuccess: '認証成功',
390
+ verificationFailed: '認証失敗',
391
+ tips: '写真が鮮明で完全であること、身分証が有効期限内であることを確認してください',
392
+ privacyNotice: 'あなたの情報は安全に暗号化され、本人確認のみに使用されます'
393
+ },
394
+ ko: {
395
+ title: '실명 인증',
396
+ level0: '미인증',
397
+ level1: '기본 인증',
398
+ level2: '표준 인증',
399
+ level3: '고급 인증',
400
+ level4: '프리미엄 인증',
401
+ statusNotStarted: '시작되지 않음',
402
+ statusPending: '심사 대기 중',
403
+ statusReviewing: '심사 중',
404
+ statusApproved: '승인됨',
405
+ statusRejected: '거부됨',
406
+ statusExpired: '만료됨',
407
+ idCard: '신분증',
408
+ passport: '여권',
409
+ driverLicense: '운전면허증',
410
+ uploadFront: '신분증 앞면 업로드',
411
+ uploadBack: '신분증 뒷면 업로드',
412
+ uploadSelfie: '신분증을 든 사진 업로드',
413
+ startLiveness: '생체 인증 시작',
414
+ nameLabel: '성명',
415
+ idNumberLabel: '신분증 번호',
416
+ countryLabel: '국가/지역',
417
+ addressLabel: '주소',
418
+ submitVerification: '인증 제출',
419
+ processing: '처리 중...',
420
+ verificationSuccess: '인증 성공',
421
+ verificationFailed: '인증 실패',
422
+ tips: '사진이 선명하고 완전하며 신분증이 유효 기간 내에 있는지 확인하세요',
423
+ privacyNotice: '귀하의 정보는 안전하게 암호화되어 본인 확인 용도로만 사용됩니다'
424
+ },
425
+ en: {
426
+ title: 'Identity Verification',
427
+ level0: 'Not Verified',
428
+ level1: 'Basic Verified',
429
+ level2: 'Standard Verified',
430
+ level3: 'Advanced Verified',
431
+ level4: 'Premium Verified',
432
+ statusNotStarted: 'Not Started',
433
+ statusPending: 'Pending',
434
+ statusReviewing: 'Under Review',
435
+ statusApproved: 'Approved',
436
+ statusRejected: 'Rejected',
437
+ statusExpired: 'Expired',
438
+ idCard: 'ID Card',
439
+ passport: 'Passport',
440
+ driverLicense: 'Driver License',
441
+ uploadFront: 'Upload Front Side',
442
+ uploadBack: 'Upload Back Side',
443
+ uploadSelfie: 'Upload Selfie with ID',
444
+ startLiveness: 'Start Liveness Check',
445
+ nameLabel: 'Full Name',
446
+ idNumberLabel: 'ID Number',
447
+ countryLabel: 'Country/Region',
448
+ addressLabel: 'Address',
449
+ submitVerification: 'Submit Verification',
450
+ processing: 'Processing...',
451
+ verificationSuccess: 'Verification Successful',
452
+ verificationFailed: 'Verification Failed',
453
+ tips: 'Please ensure photos are clear and complete, and documents are valid',
454
+ privacyNotice: 'Your information will be securely encrypted and used only for identity verification'
455
+ }
456
+ };
457
+ let currentLanguage = 'zh';
458
+ function setLanguage(lang) {
459
+ if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang;
460
+ }
461
+ function getLanguage() {
462
+ return currentLanguage;
463
+ }
464
+ function t(key) {
465
+ return (messages[currentLanguage] || messages.en)[key] || key;
466
+ }
467
+
468
+ /**
469
+ * KYC SDK - 类型定义
470
+ */
471
+
472
+ // 认证级别
473
+ const KYCLevel = {
474
+ NONE: 0,
475
+ BASIC: 1,
476
+ // 手机/邮箱验证
477
+ STANDARD: 2,
478
+ // 身份证验证
479
+ ADVANCED: 3,
480
+ // 视频活体验证
481
+ PREMIUM: 4 // 高级认证
482
+ };
483
+
484
+ // 认证状态
485
+ const KYCStatus = {
486
+ NOT_STARTED: 'not_started',
487
+ PENDING: 'pending',
488
+ REVIEWING: 'reviewing',
489
+ APPROVED: 'approved',
490
+ REJECTED: 'rejected',
491
+ EXPIRED: 'expired'
492
+ };
493
+
494
+ // 证件类型
495
+ const DocumentType = {
496
+ ID_CARD: 'id_card',
497
+ PASSPORT: 'passport',
498
+ DRIVER_LICENSE: 'driver_license',
499
+ RESIDENCE_PERMIT: 'residence_permit'
500
+ };
501
+
502
+ // 验证类型
503
+ const VerificationType = {
504
+ PHONE: 'phone',
505
+ EMAIL: 'email',
506
+ DOCUMENT: 'document',
507
+ LIVENESS: 'liveness',
508
+ ADDRESS: 'address'
509
+ };
510
+
511
+ /**
512
+ * @quantabit/kyc-sdk
513
+ * KYC SDK
514
+ */
515
+
516
+ const getStatus = (...args) => kycApi.getStatus(...args);
517
+ const verifyPhone = (...args) => kycApi.verifyPhone(...args);
518
+ const verifyEmail = (...args) => kycApi.verifyEmail(...args);
519
+ const uploadDocument = (...args) => kycApi.uploadDocument(...args);
520
+ const submitDocumentVerification = (...args) => kycApi.submitDocumentVerification(...args);
521
+
522
+ export { DocumentType, KYCApiClient, KYCLevel, KYCStatus, SUPPORTED_LANGUAGES, VerificationType, getLanguage, getStatus, kycApi, messages, setLanguage, submitDocumentVerification, t, uploadDocument, verifyEmail, verifyPhone };
523
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/services/kycApi.js","../src/i18n/index.js","../src/types/index.js","../src/index.js"],"sourcesContent":["/**\n * Kyc SDK - API 客户端\n * KYC 身份认证系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * KYC API 客户端\n */\nexport class KycApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/kyc', config);\n }\n\n // ============ 认证状态 ============\n\n /**\n * 获取认证状态\n */\n async getStatus() {\n return this.get('/status');\n }\n\n /**\n * 获取认证等级信息\n */\n async getLevelInfo() {\n return this.get('/levels');\n }\n\n /**\n * 获取当前认证等级\n */\n async getCurrentLevel() {\n return this.get('/my/level');\n }\n\n // ============ 基础认证(Level 1)============\n\n /**\n * 提交基础信息\n * @param {Object} data - 基础信息\n */\n async submitBasicInfo(data) {\n return this.post('/basic', data);\n }\n\n /**\n * 获取基础认证状态\n */\n async getBasicStatus() {\n return this.get('/basic/status');\n }\n\n /**\n * 验证手机号\n * @param {string} phone - 手机号\n * @param {string} code - 验证码\n */\n async verifyPhone(phone, code) {\n return this.post('/phone/verify', { phone, code });\n }\n\n /**\n * 验证邮箱\n * @param {string} email - 邮箱\n * @param {string} code - 验证码\n */\n async verifyEmail(email, code) {\n return this.post('/email/verify', { email, code });\n }\n\n // ============ 身份认证(Level 2)============\n\n /**\n * 提交身份证件\n * @param {Object} data - 证件信息\n */\n async submitIdDocument(data) {\n return this.post('/identity', data);\n }\n\n /**\n * 提交证件认证(兼容快捷导出命名)\n * @param {Object} data - 证件认证数据\n */\n async submitDocumentVerification(data) {\n return this.submitIdDocument(data);\n }\n\n /**\n * 上传证件照片\n * @param {string} type - 照片类型(front, back, selfie)\n * @param {File} file - 图片文件\n */\n async uploadIdPhoto(type, file) {\n const formData = new FormData();\n formData.append('type', type);\n formData.append('file', file);\n\n const token = this.getToken();\n const response = await fetch(`${this.baseUrl}/identity/upload`, {\n method: 'POST',\n headers: {\n 'Authorization': token ? `Bearer ${token}` : '',\n },\n body: formData,\n });\n\n return response.json();\n }\n\n /**\n * 获取身份认证状态\n */\n async getIdentityStatus() {\n return this.get('/identity/status');\n }\n\n // ============ 人脸识别 ============\n\n /**\n * 获取人脸识别 Token\n */\n async getFaceToken() {\n return this.post('/face/token');\n }\n\n /**\n * 提交人脸识别结果\n * @param {string} token - 人脸识别 Token\n * @param {Object} result - 识别结果\n */\n async submitFaceResult(token, result) {\n return this.post('/face/verify', { token, result });\n }\n\n /**\n * 获取人脸识别状态\n */\n async getFaceStatus() {\n return this.get('/face/status');\n }\n\n // ============ 高级认证(Level 3)============\n\n /**\n * 提交高级认证信息\n * @param {Object} data - 高级认证数据\n */\n async submitAdvancedInfo(data) {\n return this.post('/advanced', data);\n }\n\n /**\n * 上传补充材料\n * @param {string} type - 材料类型\n * @param {File} file - 文件\n */\n async uploadDocument(type, file) {\n const formData = new FormData();\n formData.append('type', type);\n formData.append('file', file);\n\n const token = this.getToken();\n const response = await fetch(`${this.baseUrl}/advanced/upload`, {\n method: 'POST',\n headers: {\n 'Authorization': token ? `Bearer ${token}` : '',\n },\n body: formData,\n });\n\n return response.json();\n }\n\n /**\n * 获取高级认证状态\n */\n async getAdvancedStatus() {\n return this.get('/advanced/status');\n }\n\n // ============ 认证记录 ============\n\n /**\n * 获取认证历史\n * @param {Object} params - 查询参数\n */\n async getHistory(params = {}) {\n return this.get('/history', params);\n }\n\n /**\n * 重新提交认证\n * @param {string} level - 认证等级\n */\n async resubmit(level) {\n return this.post('/resubmit', { level });\n }\n\n // ============ 管理员操作 ============\n\n /**\n * 获取待审核列表(管理员)\n * @param {Object} params - 查询参数\n */\n async getPendingReviews(params = {}) {\n return this.get('/admin/pending', params);\n }\n\n /**\n * 审核认证(管理员)\n * @param {string} userId - 用户 ID\n * @param {string} level - 认证等级\n * @param {Object} decision - 审核决定\n */\n async review(userId, level, decision) {\n return this.post('/admin/review', { user_id: userId, level, ...decision });\n }\n\n // ============ 隐私合规 (GDPR 特殊类别数据) ============\n\n /**\n * 请求删除身份认证数据 — GDPR 第17条\n * 向服务端提交身份数据删除请求\n * 注意: 受 AML/KYC 法规限制,某些数据可能需要保留法定期限\n * @param {string} reason - 删除原因\n * @returns {Promise<object>} 删除请求结果\n */\n async requestDataDeletion(reason = '') {\n return this.post('/gdpr/delete', { reason });\n }\n\n /**\n * 导出身份认证数据 — GDPR 第20条\n * 返回脱敏后的身份认证信息(证件号部分遮蔽)\n * @returns {Promise<object>} 脱敏后的身份数据\n */\n async exportKycData() {\n try {\n const status = await this.getStatus();\n const history = await this.getHistory({ page_size: 50 });\n return {\n exportDate: new Date().toISOString(),\n format: 'QBit KYC Export (GDPR Art. 20)',\n note: 'ID numbers are partially masked for security',\n currentLevel: status?.data?.level || 'none',\n verificationStatus: status?.data?.status || 'unknown',\n history: history?.data?.items?.map(item => ({\n ...item,\n // 证件号脱敏\n id_number: item.id_number ? `${item.id_number.slice(0, 4)}****${item.id_number.slice(-4)}` : undefined,\n // 移除证件照片 URL(敏感生物数据)\n photo_url: undefined,\n selfie_url: undefined,\n })) || [],\n };\n } catch (e) {\n return { error: e.message, exportDate: new Date().toISOString() };\n }\n }\n\n /**\n * 获取隐私数据声明\n */\n getDataDisclosure() {\n return {\n sdk: '@quantabit/kyc-sdk',\n privacyLevel: 'functional',\n consentRequired: true,\n specialCategory: true,\n collected: [\n { type: 'identity_documents', description: 'Government-issued ID (front/back)', retention: '5 years (AML regulation)', encrypted: true },\n { type: 'biometric_data', description: 'Facial recognition data', retention: 'Until verification complete', encrypted: true },\n { type: 'personal_info', description: 'Name, DOB, nationality', retention: '5 years (AML regulation)' },\n { type: 'address_proof', description: 'Proof of address documents', retention: '5 years' },\n ],\n compliance: ['GDPR Art. 9 (Special categories)', 'AML 5th Directive', 'KYC/CDD'],\n gdprCapabilities: ['export', 'delete-request'],\n legalBasis: 'Legal obligation (AML) + Explicit consent (biometric)',\n note: 'Biometric data is processed with explicit consent and deleted after verification. AML-required data has a 5-year legal retention period.',\n };\n }\n}\n\n// 创建默认实例\nexport const kycApi = new KycApiClient();\n\nexport const KYCApiClient = KycApiClient;\n\nexport default kycApi;\n","/**\n * KYC SDK - 国际化\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n title: '实名认证',\n level0: '未认证',\n level1: '基础认证',\n level2: '标准认证',\n level3: '高级认证',\n level4: '尊享认证',\n \n statusNotStarted: '未开始',\n statusPending: '待审核',\n statusReviewing: '审核中',\n statusApproved: '已通过',\n statusRejected: '已拒绝',\n statusExpired: '已过期',\n \n idCard: '身份证',\n passport: '护照',\n driverLicense: '驾驶证',\n \n uploadFront: '上传证件正面',\n uploadBack: '上传证件背面',\n uploadSelfie: '上传手持证件照',\n startLiveness: '开始活体检测',\n \n nameLabel: '姓名',\n idNumberLabel: '证件号码',\n countryLabel: '国家/地区',\n addressLabel: '地址',\n \n submitVerification: '提交认证',\n processing: '处理中...',\n verificationSuccess: '认证成功',\n verificationFailed: '认证失败',\n \n tips: '请确保照片清晰、完整,证件在有效期内',\n privacyNotice: '您的信息将被安全加密存储,仅用于身份验证',\n },\n ja: {\n title: '実名認証',\n level0: '未認証',\n level1: '基本認証',\n level2: '標準認証',\n level3: '高級認証',\n level4: 'プレミアム認証',\n \n statusNotStarted: '未開始',\n statusPending: '審査待ち',\n statusReviewing: '審査中',\n statusApproved: '承認済み',\n statusRejected: '拒否されました',\n statusExpired: '期限切れ',\n \n idCard: '身分証明書',\n passport: 'パスポート',\n driverLicense: '運転免許証',\n \n uploadFront: '身分証の表面をアップロード',\n uploadBack: '身分証の裏面をアップロード',\n uploadSelfie: '身分証を持った写真をアップロード',\n startLiveness: '生体認証を開始',\n \n nameLabel: '氏名',\n idNumberLabel: '身分証番号',\n countryLabel: '国/地域',\n addressLabel: '住所',\n \n submitVerification: '認証を提出',\n processing: '処理中...',\n verificationSuccess: '認証成功',\n verificationFailed: '認証失敗',\n \n tips: '写真が鮮明で完全であること、身分証が有効期限内であることを確認してください',\n privacyNotice: 'あなたの情報は安全に暗号化され、本人確認のみに使用されます',\n },\n ko: {\n title: '실명 인증',\n level0: '미인증',\n level1: '기본 인증',\n level2: '표준 인증',\n level3: '고급 인증',\n level4: '프리미엄 인증',\n \n statusNotStarted: '시작되지 않음',\n statusPending: '심사 대기 중',\n statusReviewing: '심사 중',\n statusApproved: '승인됨',\n statusRejected: '거부됨',\n statusExpired: '만료됨',\n \n idCard: '신분증',\n passport: '여권',\n driverLicense: '운전면허증',\n \n uploadFront: '신분증 앞면 업로드',\n uploadBack: '신분증 뒷면 업로드',\n uploadSelfie: '신분증을 든 사진 업로드',\n startLiveness: '생체 인증 시작',\n \n nameLabel: '성명',\n idNumberLabel: '신분증 번호',\n countryLabel: '국가/지역',\n addressLabel: '주소',\n \n submitVerification: '인증 제출',\n processing: '처리 중...',\n verificationSuccess: '인증 성공',\n verificationFailed: '인증 실패',\n \n tips: '사진이 선명하고 완전하며 신분증이 유효 기간 내에 있는지 확인하세요',\n privacyNotice: '귀하의 정보는 안전하게 암호화되어 본인 확인 용도로만 사용됩니다',\n },\n en: {\n title: 'Identity Verification',\n level0: 'Not Verified',\n level1: 'Basic Verified',\n level2: 'Standard Verified',\n level3: 'Advanced Verified',\n level4: 'Premium Verified',\n \n statusNotStarted: 'Not Started',\n statusPending: 'Pending',\n statusReviewing: 'Under Review',\n statusApproved: 'Approved',\n statusRejected: 'Rejected',\n statusExpired: 'Expired',\n \n idCard: 'ID Card',\n passport: 'Passport',\n driverLicense: 'Driver License',\n \n uploadFront: 'Upload Front Side',\n uploadBack: 'Upload Back Side',\n uploadSelfie: 'Upload Selfie with ID',\n startLiveness: 'Start Liveness Check',\n \n nameLabel: 'Full Name',\n idNumberLabel: 'ID Number',\n countryLabel: 'Country/Region',\n addressLabel: 'Address',\n \n submitVerification: 'Submit Verification',\n processing: 'Processing...',\n verificationSuccess: 'Verification Successful',\n verificationFailed: 'Verification Failed',\n \n tips: 'Please ensure photos are clear and complete, and documents are valid',\n privacyNotice: 'Your information will be securely encrypted and used only for identity verification',\n },\n};\n\nlet currentLanguage = 'zh';\nexport function setLanguage(lang) { if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang; }\nexport function getLanguage() { return currentLanguage; }\nexport function t(key) { return (messages[currentLanguage] || messages.en)[key] || key; }\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * KYC SDK - 类型定义\n */\n\n// 认证级别\nexport const KYCLevel = {\n NONE: 0,\n BASIC: 1, // 手机/邮箱验证\n STANDARD: 2, // 身份证验证\n ADVANCED: 3, // 视频活体验证\n PREMIUM: 4, // 高级认证\n};\n\n// 认证状态\nexport const KYCStatus = {\n NOT_STARTED: 'not_started',\n PENDING: 'pending',\n REVIEWING: 'reviewing',\n APPROVED: 'approved',\n REJECTED: 'rejected',\n EXPIRED: 'expired',\n};\n\n// 证件类型\nexport const DocumentType = {\n ID_CARD: 'id_card',\n PASSPORT: 'passport',\n DRIVER_LICENSE: 'driver_license',\n RESIDENCE_PERMIT: 'residence_permit',\n};\n\n// 验证类型\nexport const VerificationType = {\n PHONE: 'phone',\n EMAIL: 'email',\n DOCUMENT: 'document',\n LIVENESS: 'liveness',\n ADDRESS: 'address',\n};\n\nexport default { KYCLevel, KYCStatus, DocumentType, VerificationType };\n","/**\n * @quantabit/kyc-sdk\n * KYC SDK\n */\n\nexport { kycApi, KYCApiClient } from './services/kycApi';\nexport { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t } from './i18n';\nexport { KYCLevel, KYCStatus, DocumentType, VerificationType } from './types';\n\nimport { kycApi } from './services/kycApi';\n\nexport const getStatus = (...args) => kycApi.getStatus(...args);\nexport const verifyPhone = (...args) => kycApi.verifyPhone(...args);\nexport const verifyEmail = (...args) => kycApi.verifyEmail(...args);\nexport const uploadDocument = (...args) => kycApi.uploadDocument(...args);\nexport const submitDocumentVerification = (...args) => kycApi.submitDocumentVerification(...args);\n\nimport \"./styles/kyc.css\";\n"],"names":["KycApiClient","BaseApiClient","constructor","config","getStatus","get","getLevelInfo","getCurrentLevel","submitBasicInfo","data","post","getBasicStatus","verifyPhone","phone","code","verifyEmail","email","submitIdDocument","submitDocumentVerification","uploadIdPhoto","type","file","formData","FormData","append","token","getToken","response","fetch","baseUrl","method","headers","body","json","getIdentityStatus","getFaceToken","submitFaceResult","result","getFaceStatus","submitAdvancedInfo","uploadDocument","getAdvancedStatus","getHistory","params","resubmit","level","getPendingReviews","review","userId","decision","user_id","requestDataDeletion","reason","exportKycData","status","history","page_size","exportDate","Date","toISOString","format","note","currentLevel","verificationStatus","items","map","item","id_number","slice","undefined","photo_url","selfie_url","e","error","message","getDataDisclosure","sdk","privacyLevel","consentRequired","specialCategory","collected","description","retention","encrypted","compliance","gdprCapabilities","legalBasis","kycApi","KYCApiClient","SUPPORTED_LANGUAGES","messages","zh","title","level0","level1","level2","level3","level4","statusNotStarted","statusPending","statusReviewing","statusApproved","statusRejected","statusExpired","idCard","passport","driverLicense","uploadFront","uploadBack","uploadSelfie","startLiveness","nameLabel","idNumberLabel","countryLabel","addressLabel","submitVerification","processing","verificationSuccess","verificationFailed","tips","privacyNotice","ja","ko","en","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","KYCLevel","NONE","BASIC","STANDARD","ADVANCED","PREMIUM","KYCStatus","NOT_STARTED","PENDING","REVIEWING","APPROVED","REJECTED","EXPIRED","DocumentType","ID_CARD","PASSPORT","DRIVER_LICENSE","RESIDENCE_PERMIT","VerificationType","PHONE","EMAIL","DOCUMENT","LIVENESS","ADDRESS","args"],"mappings":"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"}
File without changes