@kyciris/core 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +14 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +65 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -1
package/dist/index.d.mts
CHANGED
|
@@ -20,6 +20,17 @@ interface StartVerificationParams {
|
|
|
20
20
|
/** Optional external reference ID */
|
|
21
21
|
externalId?: string;
|
|
22
22
|
}
|
|
23
|
+
interface FaceMatchVerificationParams {
|
|
24
|
+
externalId: string;
|
|
25
|
+
file: string;
|
|
26
|
+
mimeType?: string;
|
|
27
|
+
}
|
|
28
|
+
interface FaceMatchStatusParams {
|
|
29
|
+
externalId: string;
|
|
30
|
+
faceCheckId: string;
|
|
31
|
+
interval?: number;
|
|
32
|
+
timeout?: number;
|
|
33
|
+
}
|
|
23
34
|
/**
|
|
24
35
|
* Response from starting a verification session
|
|
25
36
|
*/
|
|
@@ -172,6 +183,8 @@ declare class KYCCore {
|
|
|
172
183
|
* @returns Current verification status including OCR data and face match score
|
|
173
184
|
*/
|
|
174
185
|
getStatus(verificationId: string): Promise<VerificationStatus>;
|
|
186
|
+
faceMatchVerification(params: FaceMatchVerificationParams): Promise<any>;
|
|
187
|
+
faceMatchStatus({ externalId, faceCheckId, interval, timeout, }: FaceMatchStatusParams): Promise<VerificationStatus>;
|
|
175
188
|
/**
|
|
176
189
|
* Polls for verification status until completion or timeout
|
|
177
190
|
* @param verificationId The verification ID to check
|
|
@@ -194,4 +207,4 @@ declare class KYCCore {
|
|
|
194
207
|
*/
|
|
195
208
|
declare function createKYCClient(credentials: KYCCredentials): KYCCore;
|
|
196
209
|
|
|
197
|
-
export { KYCCore, type KYCCredentials, type KYCEventCallback, KYCSdkError, type KYCStatusEvent, type StartVerificationParams, type UploadDocumentParams, type UploadResult, type UploadSelfieParams, type VerificationSession, type VerificationStatus, createKYCClient };
|
|
210
|
+
export { type FaceMatchStatusParams, type FaceMatchVerificationParams, KYCCore, type KYCCredentials, type KYCEventCallback, KYCSdkError, type KYCStatusEvent, type StartVerificationParams, type UploadDocumentParams, type UploadResult, type UploadSelfieParams, type VerificationSession, type VerificationStatus, createKYCClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,17 @@ interface StartVerificationParams {
|
|
|
20
20
|
/** Optional external reference ID */
|
|
21
21
|
externalId?: string;
|
|
22
22
|
}
|
|
23
|
+
interface FaceMatchVerificationParams {
|
|
24
|
+
externalId: string;
|
|
25
|
+
file: string;
|
|
26
|
+
mimeType?: string;
|
|
27
|
+
}
|
|
28
|
+
interface FaceMatchStatusParams {
|
|
29
|
+
externalId: string;
|
|
30
|
+
faceCheckId: string;
|
|
31
|
+
interval?: number;
|
|
32
|
+
timeout?: number;
|
|
33
|
+
}
|
|
23
34
|
/**
|
|
24
35
|
* Response from starting a verification session
|
|
25
36
|
*/
|
|
@@ -172,6 +183,8 @@ declare class KYCCore {
|
|
|
172
183
|
* @returns Current verification status including OCR data and face match score
|
|
173
184
|
*/
|
|
174
185
|
getStatus(verificationId: string): Promise<VerificationStatus>;
|
|
186
|
+
faceMatchVerification(params: FaceMatchVerificationParams): Promise<any>;
|
|
187
|
+
faceMatchStatus({ externalId, faceCheckId, interval, timeout, }: FaceMatchStatusParams): Promise<VerificationStatus>;
|
|
175
188
|
/**
|
|
176
189
|
* Polls for verification status until completion or timeout
|
|
177
190
|
* @param verificationId The verification ID to check
|
|
@@ -194,4 +207,4 @@ declare class KYCCore {
|
|
|
194
207
|
*/
|
|
195
208
|
declare function createKYCClient(credentials: KYCCredentials): KYCCore;
|
|
196
209
|
|
|
197
|
-
export { KYCCore, type KYCCredentials, type KYCEventCallback, KYCSdkError, type KYCStatusEvent, type StartVerificationParams, type UploadDocumentParams, type UploadResult, type UploadSelfieParams, type VerificationSession, type VerificationStatus, createKYCClient };
|
|
210
|
+
export { type FaceMatchStatusParams, type FaceMatchVerificationParams, KYCCore, type KYCCredentials, type KYCEventCallback, KYCSdkError, type KYCStatusEvent, type StartVerificationParams, type UploadDocumentParams, type UploadResult, type UploadSelfieParams, type VerificationSession, type VerificationStatus, createKYCClient };
|
package/dist/index.js
CHANGED
|
@@ -202,6 +202,71 @@ var KYCCore = class _KYCCore {
|
|
|
202
202
|
throw new KYCSdkError(message, "STATUS_CHECK_FAILED", error.response?.status);
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
|
+
async faceMatchVerification(params) {
|
|
206
|
+
try {
|
|
207
|
+
const formData = new FormData();
|
|
208
|
+
const mimeType = params.mimeType || "image/jpeg";
|
|
209
|
+
const imageData = params.file;
|
|
210
|
+
if (imageData.startsWith("file://")) {
|
|
211
|
+
formData.append("file", {
|
|
212
|
+
uri: imageData,
|
|
213
|
+
type: mimeType,
|
|
214
|
+
name: `selfie.jpg`
|
|
215
|
+
});
|
|
216
|
+
} else if (imageData.startsWith("data:")) {
|
|
217
|
+
formData.append("file", {
|
|
218
|
+
uri: imageData,
|
|
219
|
+
type: mimeType,
|
|
220
|
+
name: `selfie.jpg`
|
|
221
|
+
});
|
|
222
|
+
} else {
|
|
223
|
+
formData.append("file", {
|
|
224
|
+
uri: `data:${mimeType};base64,${imageData}`,
|
|
225
|
+
type: mimeType,
|
|
226
|
+
name: `selfie.jpg`
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const response = await this.client.post(
|
|
230
|
+
`identities/${params.externalId}/face-match`,
|
|
231
|
+
formData,
|
|
232
|
+
{
|
|
233
|
+
headers: { "Content-Type": "multipart/form-data" }
|
|
234
|
+
}
|
|
235
|
+
);
|
|
236
|
+
return response.data;
|
|
237
|
+
} catch (error) {
|
|
238
|
+
console.log("Upload face match error:", error.response?.data || error.message);
|
|
239
|
+
const message = error.response?.data?.message || error.message || "Failed to upload face match";
|
|
240
|
+
throw new KYCSdkError(message, "FACEMATCH_UPLOAD_FAILED", error.response?.status);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async faceMatchStatus({
|
|
244
|
+
externalId,
|
|
245
|
+
faceCheckId,
|
|
246
|
+
interval = 3e3,
|
|
247
|
+
timeout = 12e4
|
|
248
|
+
}) {
|
|
249
|
+
const startTime = Date.now();
|
|
250
|
+
return new Promise((resolve, reject) => {
|
|
251
|
+
const poll = async () => {
|
|
252
|
+
try {
|
|
253
|
+
const status = (await this.client.get(`identities/${externalId}/face-match/status/${faceCheckId}`)).data;
|
|
254
|
+
if (status.status === "APPROVED" || status.status === "REJECTED") {
|
|
255
|
+
resolve(status);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (Date.now() - startTime > timeout) {
|
|
259
|
+
reject(new KYCSdkError("Polling timeout", "POLLING_TIMEOUT"));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
setTimeout(poll, interval);
|
|
263
|
+
} catch (error) {
|
|
264
|
+
reject(error);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
poll();
|
|
268
|
+
});
|
|
269
|
+
}
|
|
205
270
|
/**
|
|
206
271
|
* Polls for verification status until completion or timeout
|
|
207
272
|
* @param verificationId The verification ID to check
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["axios"],"mappings":"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","file":"index.js","sourcesContent":["import axios, { AxiosInstance } from 'axios';\n\n/**\n * Credentials required to initialize the KYC SDK\n */\nexport interface KYCCredentials {\n /** API key for authentication */\n apiKey: string;\n /** Base URL of the KYC API */\n baseUrl: string;\n}\n\n/**\n * Parameters required to start a verification session\n */\nexport interface StartVerificationParams {\n /** Type of document to verify (e.g., IDENTITY_CARD, DRIVING_LICENSE) */\n documentType: 'IDENTITY_CARD' | 'DRIVING_LICENSE';\n /** Country code (e.g., MZ, AO, PT) */\n country: string;\n /** Optional existing identity ID to link verification to */\n identityId?: string;\n /** Optional external reference ID */\n externalId?: string;\n}\n\n/**\n * Response from starting a verification session\n */\nexport interface VerificationSession {\n /** Unique verification ID */\n verificationId: string;\n /** Linked identity ID (if exists) */\n identityId?: string;\n /** Current verification status */\n status: string;\n}\n\n/**\n * Parameters for uploading a selfie image\n */\nexport interface UploadSelfieParams {\n /** Verification ID to attach the selfie to */\n verificationId: string;\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/**\n * Parameters for uploading a document image\n */\nexport interface UploadDocumentParams {\n /** Verification ID to attach the document to */\n verificationId: string;\n /** Type of document (front or back) */\n type: 'front' | 'back';\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/** Result of an upload operation */\nexport interface UploadResult {\n /** Response message */\n message: string;\n /** Current status after upload */\n status: string;\n}\n\n/** Current status of a verification session */\nexport interface VerificationStatus {\n /** Verification ID */\n verificationId: string;\n /** Current status: PENDING, PROCESSING, APPROVED, or REJECTED */\n status: 'PENDING' | 'PROCESSING' | 'APPROVED' | 'REJECTED';\n /** Face match similarity score (0-1) */\n faceMatchScore?: number;\n /** OCR extracted data from document */\n ocrData?: {\n /** Full name extracted from document */\n fullName?: string;\n /** ID number extracted from document */\n idNumber?: string;\n /** Birth date extracted from document */\n birthDate?: string;\n /** Expiry date extracted from document */\n expiryDate?: string;\n /** Additional extracted fields */\n [key: string]: any;\n };\n /** When the verification was created */\n createdAt: string;\n /** When the verification was last updated */\n updatedAt: string;\n}\n\n/** Event emitted when KYC status changes */\nexport interface KYCStatusEvent {\n /** Type of event: statusChanged or error */\n type: 'statusChanged' | 'error';\n /** New status (for statusChanged events) */\n status?: string;\n /** Error message (for error events) */\n error?: string;\n}\n\n/** Callback function for handling KYC status events */\nexport type KYCEventCallback = (event: KYCStatusEvent) => void;\n\n/**\n * Custom error class for KYC SDK errors\n */\nexport class KYCSdkError extends Error {\n /** Error code for programmatic error handling */\n code: string;\n /** HTTP status code if available */\n statusCode?: number;\n\n /**\n * Creates a new KYC SDK error\n * @param message Human-readable error message\n * @param code Error code for handling\n * @param statusCode Optional HTTP status code\n */\n constructor(message: string, code: string, statusCode?: number) {\n super(message);\n this.name = 'KYCSdkError';\n this.code = code;\n this.statusCode = statusCode;\n }\n}\n\n/**\n * Core KYC SDK client for interacting with the verification API\n */\nexport class KYCCore {\n private client: AxiosInstance;\n private credentials: KYCCredentials;\n private eventCallbacks: KYCEventCallback[] = [];\n\n /**\n * Creates a new KYC Core instance\n * @param credentials API credentials (apiKey and baseUrl)\n */\n constructor(credentials: KYCCredentials) {\n this.credentials = credentials;\n this.client = axios.create({\n baseURL: credentials.baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n this.client.interceptors.request.use((config) => {\n config.headers['x-api-key'] = this.credentials.apiKey;\n return config;\n });\n }\n\n /**\n * Registers a callback for KYC status events\n * @param callback Function to call when status changes\n * @returns Unsubscribe function to remove the callback\n */\n onEvent(callback: KYCEventCallback): () => void {\n this.eventCallbacks.push(callback);\n return () => {\n this.eventCallbacks = this.eventCallbacks.filter((cb) => cb !== callback);\n };\n }\n\n /**\n * Emits a status event to all registered callbacks\n * @param event The event to emit\n */\n private emitEvent(event: KYCStatusEvent): void {\n this.eventCallbacks.forEach((callback) => callback(event));\n }\n\n /**\n * Creates a verification token for secure API access\n * @param externalId External reference ID\n * @param expiry Token expiry in hours (default: 3)\n * @returns Object containing the token and its expiration time\n */\n async createVerificationToken(\n externalId: string,\n expiry: string = '3'\n ): Promise<{ token: string; expiresIn: string }> {\n try {\n const response = await this.client.post('/verification/token', {\n externalId,\n expiry,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to create verification token';\n throw new KYCSdkError(message, 'TOKEN_CREATE_FAILED', error.response?.status);\n }\n }\n\n /**\n * Starts a new verification session\n * @param params Parameters including documentType, country, identityId, and externalId\n * @returns Verification session with verificationId and status\n */\n async startVerification(params: StartVerificationParams): Promise<VerificationSession> {\n try {\n const response = await this.client.post('/verification/start', params);\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PENDING',\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to start verification';\n throw new KYCSdkError(message, 'VERIFICATION_START_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a selfie image for face verification\n * @param params Parameters including verificationId, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadSelfie(params: UploadSelfieParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/selfie', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload selfie error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload selfie';\n throw new KYCSdkError(message, 'SELFIE_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a document image (front or back)\n * @param params Parameters including verificationId, type, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadDocument(params: UploadDocumentParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n formData.append('type', params.type);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/document', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload document error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload document';\n throw new KYCSdkError(message, 'DOCUMENT_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Gets the current status of a verification session\n * @param verificationId The verification ID to check\n * @returns Current verification status including OCR data and face match score\n */\n async getStatus(verificationId: string): Promise<VerificationStatus> {\n try {\n const response = await this.client.get(`/verification/status/${verificationId}`);\n\n this.emitEvent({\n type: 'statusChanged',\n status: response.data.status,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to get verification status';\n throw new KYCSdkError(message, 'STATUS_CHECK_FAILED', error.response?.status);\n }\n }\n\n /**\n * Polls for verification status until completion or timeout\n * @param verificationId The verification ID to check\n * @param interval Polling interval in milliseconds (default: 3000)\n * @param timeout Maximum time to wait in milliseconds (default: 120000)\n * @returns Final verification status when approved or rejected\n */\n async pollStatus(\n verificationId: string,\n interval: number = 3000,\n timeout: number = 120000\n ): Promise<VerificationStatus> {\n const startTime = Date.now();\n\n return new Promise((resolve, reject) => {\n const poll = async () => {\n try {\n const status = await this.getStatus(verificationId);\n\n if (status.status === 'APPROVED' || status.status === 'REJECTED') {\n resolve(status);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n reject(new KYCSdkError('Polling timeout', 'POLLING_TIMEOUT'));\n return;\n }\n\n setTimeout(poll, interval);\n } catch (error) {\n reject(error);\n }\n };\n\n poll();\n });\n }\n\n /**\n * Static factory method to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\n static createClient(credentials: KYCCredentials): KYCCore {\n return new KYCCore(credentials);\n }\n}\n\n/**\n * Factory function to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\nexport function createKYCClient(credentials: KYCCredentials): KYCCore {\n return KYCCore.createClient(credentials);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["axios"],"mappings":"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","file":"index.js","sourcesContent":["import axios, { AxiosInstance } from 'axios';\n\n/**\n * Credentials required to initialize the KYC SDK\n */\nexport interface KYCCredentials {\n /** API key for authentication */\n apiKey: string;\n /** Base URL of the KYC API */\n baseUrl: string;\n}\n\n/**\n * Parameters required to start a verification session\n */\nexport interface StartVerificationParams {\n /** Type of document to verify (e.g., IDENTITY_CARD, DRIVING_LICENSE) */\n documentType: 'IDENTITY_CARD' | 'DRIVING_LICENSE';\n /** Country code (e.g., MZ, AO, PT) */\n country: string;\n /** Optional existing identity ID to link verification to */\n identityId?: string;\n /** Optional external reference ID */\n externalId?: string;\n}\n\nexport interface FaceMatchVerificationParams {\n externalId: string;\n file: string;\n mimeType?: string;\n}\n\nexport interface FaceMatchStatusParams {\n externalId: string;\n faceCheckId: string;\n interval?: number;\n timeout?: number;\n}\n\n/**\n * Response from starting a verification session\n */\nexport interface VerificationSession {\n /** Unique verification ID */\n verificationId: string;\n /** Linked identity ID (if exists) */\n identityId?: string;\n /** Current verification status */\n status: string;\n}\n\n/**\n * Parameters for uploading a selfie image\n */\nexport interface UploadSelfieParams {\n /** Verification ID to attach the selfie to */\n verificationId: string;\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/**\n * Parameters for uploading a document image\n */\nexport interface UploadDocumentParams {\n /** Verification ID to attach the document to */\n verificationId: string;\n /** Type of document (front or back) */\n type: 'front' | 'back';\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/** Result of an upload operation */\nexport interface UploadResult {\n /** Response message */\n message: string;\n /** Current status after upload */\n status: string;\n}\n\n/** Current status of a verification session */\nexport interface VerificationStatus {\n /** Verification ID */\n verificationId: string;\n /** Current status: PENDING, PROCESSING, APPROVED, or REJECTED */\n status: 'PENDING' | 'PROCESSING' | 'APPROVED' | 'REJECTED';\n /** Face match similarity score (0-1) */\n faceMatchScore?: number;\n /** OCR extracted data from document */\n ocrData?: {\n /** Full name extracted from document */\n fullName?: string;\n /** ID number extracted from document */\n idNumber?: string;\n /** Birth date extracted from document */\n birthDate?: string;\n /** Expiry date extracted from document */\n expiryDate?: string;\n /** Additional extracted fields */\n [key: string]: any;\n };\n /** When the verification was created */\n createdAt: string;\n /** When the verification was last updated */\n updatedAt: string;\n}\n\n/** Event emitted when KYC status changes */\nexport interface KYCStatusEvent {\n /** Type of event: statusChanged or error */\n type: 'statusChanged' | 'error';\n /** New status (for statusChanged events) */\n status?: string;\n /** Error message (for error events) */\n error?: string;\n}\n\n/** Callback function for handling KYC status events */\nexport type KYCEventCallback = (event: KYCStatusEvent) => void;\n\n/**\n * Custom error class for KYC SDK errors\n */\nexport class KYCSdkError extends Error {\n /** Error code for programmatic error handling */\n code: string;\n /** HTTP status code if available */\n statusCode?: number;\n\n /**\n * Creates a new KYC SDK error\n * @param message Human-readable error message\n * @param code Error code for handling\n * @param statusCode Optional HTTP status code\n */\n constructor(message: string, code: string, statusCode?: number) {\n super(message);\n this.name = 'KYCSdkError';\n this.code = code;\n this.statusCode = statusCode;\n }\n}\n\n/**\n * Core KYC SDK client for interacting with the verification API\n */\nexport class KYCCore {\n private client: AxiosInstance;\n private credentials: KYCCredentials;\n private eventCallbacks: KYCEventCallback[] = [];\n\n /**\n * Creates a new KYC Core instance\n * @param credentials API credentials (apiKey and baseUrl)\n */\n constructor(credentials: KYCCredentials) {\n this.credentials = credentials;\n this.client = axios.create({\n baseURL: credentials.baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n this.client.interceptors.request.use((config) => {\n config.headers['x-api-key'] = this.credentials.apiKey;\n return config;\n });\n }\n\n /**\n * Registers a callback for KYC status events\n * @param callback Function to call when status changes\n * @returns Unsubscribe function to remove the callback\n */\n onEvent(callback: KYCEventCallback): () => void {\n this.eventCallbacks.push(callback);\n return () => {\n this.eventCallbacks = this.eventCallbacks.filter((cb) => cb !== callback);\n };\n }\n\n /**\n * Emits a status event to all registered callbacks\n * @param event The event to emit\n */\n private emitEvent(event: KYCStatusEvent): void {\n this.eventCallbacks.forEach((callback) => callback(event));\n }\n\n /**\n * Creates a verification token for secure API access\n * @param externalId External reference ID\n * @param expiry Token expiry in hours (default: 3)\n * @returns Object containing the token and its expiration time\n */\n async createVerificationToken(\n externalId: string,\n expiry: string = '3'\n ): Promise<{ token: string; expiresIn: string }> {\n try {\n const response = await this.client.post('/verification/token', {\n externalId,\n expiry,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to create verification token';\n throw new KYCSdkError(message, 'TOKEN_CREATE_FAILED', error.response?.status);\n }\n }\n\n /**\n * Starts a new verification session\n * @param params Parameters including documentType, country, identityId, and externalId\n * @returns Verification session with verificationId and status\n */\n async startVerification(params: StartVerificationParams): Promise<VerificationSession> {\n try {\n const response = await this.client.post('/verification/start', params);\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PENDING',\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to start verification';\n throw new KYCSdkError(message, 'VERIFICATION_START_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a selfie image for face verification\n * @param params Parameters including verificationId, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadSelfie(params: UploadSelfieParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/selfie', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload selfie error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload selfie';\n throw new KYCSdkError(message, 'SELFIE_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a document image (front or back)\n * @param params Parameters including verificationId, type, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadDocument(params: UploadDocumentParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n formData.append('type', params.type);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/document', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload document error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload document';\n throw new KYCSdkError(message, 'DOCUMENT_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Gets the current status of a verification session\n * @param verificationId The verification ID to check\n * @returns Current verification status including OCR data and face match score\n */\n async getStatus(verificationId: string): Promise<VerificationStatus> {\n try {\n const response = await this.client.get(`/verification/status/${verificationId}`);\n\n this.emitEvent({\n type: 'statusChanged',\n status: response.data.status,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to get verification status';\n throw new KYCSdkError(message, 'STATUS_CHECK_FAILED', error.response?.status);\n }\n }\n\n async faceMatchVerification(params: FaceMatchVerificationParams) {\n try {\n const formData = new FormData();\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.file;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `selfie.jpg`,\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `selfie.jpg`,\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: `selfie.jpg`,\n } as any);\n }\n\n const response = await this.client.post(\n `identities/${params.externalId}/face-match`,\n formData,\n {\n headers: { 'Content-Type': 'multipart/form-data' },\n }\n );\n return response.data;\n } catch (error: any) {\n console.log('Upload face match error:', error.response?.data || error.message);\n const message =\n error.response?.data?.message || error.message || 'Failed to upload face match';\n throw new KYCSdkError(message, 'FACEMATCH_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n async faceMatchStatus({\n externalId,\n faceCheckId,\n interval = 3000,\n timeout = 120000,\n }: FaceMatchStatusParams): Promise<VerificationStatus> {\n const startTime = Date.now();\n\n return new Promise((resolve, reject) => {\n const poll = async () => {\n try {\n const status = (\n await this.client.get(`identities/${externalId}/face-match/status/${faceCheckId}`)\n ).data;\n\n if (status.status === 'APPROVED' || status.status === 'REJECTED') {\n resolve(status);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n reject(new KYCSdkError('Polling timeout', 'POLLING_TIMEOUT'));\n return;\n }\n\n setTimeout(poll, interval);\n } catch (error) {\n reject(error);\n }\n };\n\n poll();\n });\n }\n\n /**\n * Polls for verification status until completion or timeout\n * @param verificationId The verification ID to check\n * @param interval Polling interval in milliseconds (default: 3000)\n * @param timeout Maximum time to wait in milliseconds (default: 120000)\n * @returns Final verification status when approved or rejected\n */\n async pollStatus(\n verificationId: string,\n interval: number = 3000,\n timeout: number = 120000\n ): Promise<VerificationStatus> {\n const startTime = Date.now();\n\n return new Promise((resolve, reject) => {\n const poll = async () => {\n try {\n const status = await this.getStatus(verificationId);\n\n if (status.status === 'APPROVED' || status.status === 'REJECTED') {\n resolve(status);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n reject(new KYCSdkError('Polling timeout', 'POLLING_TIMEOUT'));\n return;\n }\n\n setTimeout(poll, interval);\n } catch (error) {\n reject(error);\n }\n };\n\n poll();\n });\n }\n\n /**\n * Static factory method to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\n static createClient(credentials: KYCCredentials): KYCCore {\n return new KYCCore(credentials);\n }\n}\n\n/**\n * Factory function to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\nexport function createKYCClient(credentials: KYCCredentials): KYCCore {\n return KYCCore.createClient(credentials);\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -196,6 +196,71 @@ var KYCCore = class _KYCCore {
|
|
|
196
196
|
throw new KYCSdkError(message, "STATUS_CHECK_FAILED", error.response?.status);
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
|
+
async faceMatchVerification(params) {
|
|
200
|
+
try {
|
|
201
|
+
const formData = new FormData();
|
|
202
|
+
const mimeType = params.mimeType || "image/jpeg";
|
|
203
|
+
const imageData = params.file;
|
|
204
|
+
if (imageData.startsWith("file://")) {
|
|
205
|
+
formData.append("file", {
|
|
206
|
+
uri: imageData,
|
|
207
|
+
type: mimeType,
|
|
208
|
+
name: `selfie.jpg`
|
|
209
|
+
});
|
|
210
|
+
} else if (imageData.startsWith("data:")) {
|
|
211
|
+
formData.append("file", {
|
|
212
|
+
uri: imageData,
|
|
213
|
+
type: mimeType,
|
|
214
|
+
name: `selfie.jpg`
|
|
215
|
+
});
|
|
216
|
+
} else {
|
|
217
|
+
formData.append("file", {
|
|
218
|
+
uri: `data:${mimeType};base64,${imageData}`,
|
|
219
|
+
type: mimeType,
|
|
220
|
+
name: `selfie.jpg`
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
const response = await this.client.post(
|
|
224
|
+
`identities/${params.externalId}/face-match`,
|
|
225
|
+
formData,
|
|
226
|
+
{
|
|
227
|
+
headers: { "Content-Type": "multipart/form-data" }
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
return response.data;
|
|
231
|
+
} catch (error) {
|
|
232
|
+
console.log("Upload face match error:", error.response?.data || error.message);
|
|
233
|
+
const message = error.response?.data?.message || error.message || "Failed to upload face match";
|
|
234
|
+
throw new KYCSdkError(message, "FACEMATCH_UPLOAD_FAILED", error.response?.status);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async faceMatchStatus({
|
|
238
|
+
externalId,
|
|
239
|
+
faceCheckId,
|
|
240
|
+
interval = 3e3,
|
|
241
|
+
timeout = 12e4
|
|
242
|
+
}) {
|
|
243
|
+
const startTime = Date.now();
|
|
244
|
+
return new Promise((resolve, reject) => {
|
|
245
|
+
const poll = async () => {
|
|
246
|
+
try {
|
|
247
|
+
const status = (await this.client.get(`identities/${externalId}/face-match/status/${faceCheckId}`)).data;
|
|
248
|
+
if (status.status === "APPROVED" || status.status === "REJECTED") {
|
|
249
|
+
resolve(status);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (Date.now() - startTime > timeout) {
|
|
253
|
+
reject(new KYCSdkError("Polling timeout", "POLLING_TIMEOUT"));
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
setTimeout(poll, interval);
|
|
257
|
+
} catch (error) {
|
|
258
|
+
reject(error);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
poll();
|
|
262
|
+
});
|
|
263
|
+
}
|
|
199
264
|
/**
|
|
200
265
|
* Polls for verification status until completion or timeout
|
|
201
266
|
* @param verificationId The verification ID to check
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;AAmHO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYrC,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,UAAA,EAAqB;AAC9D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;AAKO,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EASnB,YAAY,WAAA,EAA6B;AANzC,IAAA,IAAA,CAAQ,iBAAqC,EAAC;AAO5C,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAM,MAAA,CAAO;AAAA,MACzB,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,MAAA,EAAQ;AAAA;AACV,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AAC/C,MAAA,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,GAAI,IAAA,CAAK,WAAA,CAAY,MAAA;AAC/C,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,QAAA,EAAwC;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,QAAQ,CAAA;AACjC,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,EAAA,KAAO,OAAO,QAAQ,CAAA;AAAA,IAC1E,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,KAAA,EAA6B;AAC7C,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,uBAAA,CACJ,UAAA,EACA,MAAA,GAAiB,GAAA,EAC8B;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,qBAAA,EAAuB;AAAA,QAC7D,UAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,UACJ,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,qCAAA;AACpD,MAAA,MAAM,IAAI,WAAA,CAAY,OAAA,EAAS,qBAAA,EAAuB,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAkB,MAAA,EAA+D;AACrF,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,uBAAuB,MAAM,CAAA;AAErE,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,UACJ,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,8BAAA;AACpD,MAAA,MAAM,IAAI,WAAA,CAAY,OAAA,EAAS,2BAAA,EAA6B,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IACpF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,MAAA,EAAmD;AACpE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,gBAAA,EAAkB,MAAA,CAAO,cAAc,CAAA;AAEvD,MAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,YAAA;AACpC,MAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AAEzB,MAAA,IAAI,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,EAAG;AACnC,QAAA,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,UACtB,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACA,CAAA;AAAA,MACV,CAAA,MAAA,IAAW,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,EAAG;AACxC,QAAA,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,UACtB,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACA,CAAA;AAAA,MACV,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,UACtB,GAAA,EAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA;AAAA,UACzC,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACA,CAAA;AAAA,MACV;AAEA,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,+BAA+B,QAAA,EAAU;AAAA,QAC/E,OAAA,EAAS,EAAE,cAAA,EAAgB,qBAAA;AAAsB,OAClD,CAAA;AAED,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,IAAI,sBAAA,EAAwB,KAAA,CAAM,QAAA,EAAU,IAAA,IAAQ,MAAM,OAAO,CAAA;AACzE,MAAA,MAAM,UAAU,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,yBAAA;AAClE,MAAA,MAAM,IAAI,WAAA,CAAY,OAAA,EAAS,sBAAA,EAAwB,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe,MAAA,EAAqD;AACxE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,gBAAA,EAAkB,MAAA,CAAO,cAAc,CAAA;AACvD,MAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA;AAEnC,MAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,YAAA;AACpC,MAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AAEzB,MAAA,IAAI,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,EAAG;AACnC,QAAA,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,UACtB,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,IAAA;AAAA,SACd,CAAA;AAAA,MACV,CAAA,MAAA,IAAW,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,EAAG;AACxC,QAAA,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,UACtB,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,IAAA;AAAA,SACd,CAAA;AAAA,MACV,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,UACtB,GAAA,EAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA;AAAA,UACzC,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,IAAA;AAAA,SACd,CAAA;AAAA,MACV;AAEA,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,iCAAiC,QAAA,EAAU;AAAA,QACjF,OAAA,EAAS,EAAE,cAAA,EAAgB,qBAAA;AAAsB,OAClD,CAAA;AAED,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,IAAI,wBAAA,EAA0B,KAAA,CAAM,QAAA,EAAU,IAAA,IAAQ,MAAM,OAAO,CAAA;AAC3E,MAAA,MAAM,UAAU,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,2BAAA;AAClE,MAAA,MAAM,IAAI,WAAA,CAAY,OAAA,EAAS,wBAAA,EAA0B,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU,cAAA,EAAqD;AACnE,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAO,GAAA,CAAI,CAAA,qBAAA,EAAwB,cAAc,CAAA,CAAE,CAAA;AAE/E,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,MAAA,EAAQ,SAAS,IAAA,CAAK;AAAA,OACvB,CAAA;AAED,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,UACJ,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,mCAAA;AACpD,MAAA,MAAM,IAAI,WAAA,CAAY,OAAA,EAAS,qBAAA,EAAuB,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,UAAA,CACJ,cAAA,EACA,QAAA,GAAmB,GAAA,EACnB,UAAkB,IAAA,EACW;AAC7B,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,MAAM,OAAO,YAAY;AACvB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,CAAU,cAAc,CAAA;AAElD,UAAA,IAAI,MAAA,CAAO,MAAA,KAAW,UAAA,IAAc,MAAA,CAAO,WAAW,UAAA,EAAY;AAChE,YAAA,OAAA,CAAQ,MAAM,CAAA;AACd,YAAA;AAAA,UACF;AAEA,UAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,OAAA,EAAS;AACpC,YAAA,MAAA,CAAO,IAAI,WAAA,CAAY,iBAAA,EAAmB,iBAAiB,CAAC,CAAA;AAC5D,YAAA;AAAA,UACF;AAEA,UAAA,UAAA,CAAW,MAAM,QAAQ,CAAA;AAAA,QAC3B,SAAS,KAAA,EAAO;AACd,UAAA,MAAA,CAAO,KAAK,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AAEA,MAAA,IAAA,EAAK;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,WAAA,EAAsC;AACxD,IAAA,OAAO,IAAI,SAAQ,WAAW,CAAA;AAAA,EAChC;AACF;AAOO,SAAS,gBAAgB,WAAA,EAAsC;AACpE,EAAA,OAAO,OAAA,CAAQ,aAAa,WAAW,CAAA;AACzC","file":"index.mjs","sourcesContent":["import axios, { AxiosInstance } from 'axios';\n\n/**\n * Credentials required to initialize the KYC SDK\n */\nexport interface KYCCredentials {\n /** API key for authentication */\n apiKey: string;\n /** Base URL of the KYC API */\n baseUrl: string;\n}\n\n/**\n * Parameters required to start a verification session\n */\nexport interface StartVerificationParams {\n /** Type of document to verify (e.g., IDENTITY_CARD, DRIVING_LICENSE) */\n documentType: 'IDENTITY_CARD' | 'DRIVING_LICENSE';\n /** Country code (e.g., MZ, AO, PT) */\n country: string;\n /** Optional existing identity ID to link verification to */\n identityId?: string;\n /** Optional external reference ID */\n externalId?: string;\n}\n\n/**\n * Response from starting a verification session\n */\nexport interface VerificationSession {\n /** Unique verification ID */\n verificationId: string;\n /** Linked identity ID (if exists) */\n identityId?: string;\n /** Current verification status */\n status: string;\n}\n\n/**\n * Parameters for uploading a selfie image\n */\nexport interface UploadSelfieParams {\n /** Verification ID to attach the selfie to */\n verificationId: string;\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/**\n * Parameters for uploading a document image\n */\nexport interface UploadDocumentParams {\n /** Verification ID to attach the document to */\n verificationId: string;\n /** Type of document (front or back) */\n type: 'front' | 'back';\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/** Result of an upload operation */\nexport interface UploadResult {\n /** Response message */\n message: string;\n /** Current status after upload */\n status: string;\n}\n\n/** Current status of a verification session */\nexport interface VerificationStatus {\n /** Verification ID */\n verificationId: string;\n /** Current status: PENDING, PROCESSING, APPROVED, or REJECTED */\n status: 'PENDING' | 'PROCESSING' | 'APPROVED' | 'REJECTED';\n /** Face match similarity score (0-1) */\n faceMatchScore?: number;\n /** OCR extracted data from document */\n ocrData?: {\n /** Full name extracted from document */\n fullName?: string;\n /** ID number extracted from document */\n idNumber?: string;\n /** Birth date extracted from document */\n birthDate?: string;\n /** Expiry date extracted from document */\n expiryDate?: string;\n /** Additional extracted fields */\n [key: string]: any;\n };\n /** When the verification was created */\n createdAt: string;\n /** When the verification was last updated */\n updatedAt: string;\n}\n\n/** Event emitted when KYC status changes */\nexport interface KYCStatusEvent {\n /** Type of event: statusChanged or error */\n type: 'statusChanged' | 'error';\n /** New status (for statusChanged events) */\n status?: string;\n /** Error message (for error events) */\n error?: string;\n}\n\n/** Callback function for handling KYC status events */\nexport type KYCEventCallback = (event: KYCStatusEvent) => void;\n\n/**\n * Custom error class for KYC SDK errors\n */\nexport class KYCSdkError extends Error {\n /** Error code for programmatic error handling */\n code: string;\n /** HTTP status code if available */\n statusCode?: number;\n\n /**\n * Creates a new KYC SDK error\n * @param message Human-readable error message\n * @param code Error code for handling\n * @param statusCode Optional HTTP status code\n */\n constructor(message: string, code: string, statusCode?: number) {\n super(message);\n this.name = 'KYCSdkError';\n this.code = code;\n this.statusCode = statusCode;\n }\n}\n\n/**\n * Core KYC SDK client for interacting with the verification API\n */\nexport class KYCCore {\n private client: AxiosInstance;\n private credentials: KYCCredentials;\n private eventCallbacks: KYCEventCallback[] = [];\n\n /**\n * Creates a new KYC Core instance\n * @param credentials API credentials (apiKey and baseUrl)\n */\n constructor(credentials: KYCCredentials) {\n this.credentials = credentials;\n this.client = axios.create({\n baseURL: credentials.baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n this.client.interceptors.request.use((config) => {\n config.headers['x-api-key'] = this.credentials.apiKey;\n return config;\n });\n }\n\n /**\n * Registers a callback for KYC status events\n * @param callback Function to call when status changes\n * @returns Unsubscribe function to remove the callback\n */\n onEvent(callback: KYCEventCallback): () => void {\n this.eventCallbacks.push(callback);\n return () => {\n this.eventCallbacks = this.eventCallbacks.filter((cb) => cb !== callback);\n };\n }\n\n /**\n * Emits a status event to all registered callbacks\n * @param event The event to emit\n */\n private emitEvent(event: KYCStatusEvent): void {\n this.eventCallbacks.forEach((callback) => callback(event));\n }\n\n /**\n * Creates a verification token for secure API access\n * @param externalId External reference ID\n * @param expiry Token expiry in hours (default: 3)\n * @returns Object containing the token and its expiration time\n */\n async createVerificationToken(\n externalId: string,\n expiry: string = '3'\n ): Promise<{ token: string; expiresIn: string }> {\n try {\n const response = await this.client.post('/verification/token', {\n externalId,\n expiry,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to create verification token';\n throw new KYCSdkError(message, 'TOKEN_CREATE_FAILED', error.response?.status);\n }\n }\n\n /**\n * Starts a new verification session\n * @param params Parameters including documentType, country, identityId, and externalId\n * @returns Verification session with verificationId and status\n */\n async startVerification(params: StartVerificationParams): Promise<VerificationSession> {\n try {\n const response = await this.client.post('/verification/start', params);\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PENDING',\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to start verification';\n throw new KYCSdkError(message, 'VERIFICATION_START_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a selfie image for face verification\n * @param params Parameters including verificationId, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadSelfie(params: UploadSelfieParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/selfie', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload selfie error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload selfie';\n throw new KYCSdkError(message, 'SELFIE_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a document image (front or back)\n * @param params Parameters including verificationId, type, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadDocument(params: UploadDocumentParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n formData.append('type', params.type);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/document', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload document error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload document';\n throw new KYCSdkError(message, 'DOCUMENT_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Gets the current status of a verification session\n * @param verificationId The verification ID to check\n * @returns Current verification status including OCR data and face match score\n */\n async getStatus(verificationId: string): Promise<VerificationStatus> {\n try {\n const response = await this.client.get(`/verification/status/${verificationId}`);\n\n this.emitEvent({\n type: 'statusChanged',\n status: response.data.status,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to get verification status';\n throw new KYCSdkError(message, 'STATUS_CHECK_FAILED', error.response?.status);\n }\n }\n\n /**\n * Polls for verification status until completion or timeout\n * @param verificationId The verification ID to check\n * @param interval Polling interval in milliseconds (default: 3000)\n * @param timeout Maximum time to wait in milliseconds (default: 120000)\n * @returns Final verification status when approved or rejected\n */\n async pollStatus(\n verificationId: string,\n interval: number = 3000,\n timeout: number = 120000\n ): Promise<VerificationStatus> {\n const startTime = Date.now();\n\n return new Promise((resolve, reject) => {\n const poll = async () => {\n try {\n const status = await this.getStatus(verificationId);\n\n if (status.status === 'APPROVED' || status.status === 'REJECTED') {\n resolve(status);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n reject(new KYCSdkError('Polling timeout', 'POLLING_TIMEOUT'));\n return;\n }\n\n setTimeout(poll, interval);\n } catch (error) {\n reject(error);\n }\n };\n\n poll();\n });\n }\n\n /**\n * Static factory method to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\n static createClient(credentials: KYCCredentials): KYCCore {\n return new KYCCore(credentials);\n }\n}\n\n/**\n * Factory function to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\nexport function createKYCClient(credentials: KYCCredentials): KYCCore {\n return KYCCore.createClient(credentials);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import axios, { AxiosInstance } from 'axios';\n\n/**\n * Credentials required to initialize the KYC SDK\n */\nexport interface KYCCredentials {\n /** API key for authentication */\n apiKey: string;\n /** Base URL of the KYC API */\n baseUrl: string;\n}\n\n/**\n * Parameters required to start a verification session\n */\nexport interface StartVerificationParams {\n /** Type of document to verify (e.g., IDENTITY_CARD, DRIVING_LICENSE) */\n documentType: 'IDENTITY_CARD' | 'DRIVING_LICENSE';\n /** Country code (e.g., MZ, AO, PT) */\n country: string;\n /** Optional existing identity ID to link verification to */\n identityId?: string;\n /** Optional external reference ID */\n externalId?: string;\n}\n\nexport interface FaceMatchVerificationParams {\n externalId: string;\n file: string;\n mimeType?: string;\n}\n\nexport interface FaceMatchStatusParams {\n externalId: string;\n faceCheckId: string;\n interval?: number;\n timeout?: number;\n}\n\n/**\n * Response from starting a verification session\n */\nexport interface VerificationSession {\n /** Unique verification ID */\n verificationId: string;\n /** Linked identity ID (if exists) */\n identityId?: string;\n /** Current verification status */\n status: string;\n}\n\n/**\n * Parameters for uploading a selfie image\n */\nexport interface UploadSelfieParams {\n /** Verification ID to attach the selfie to */\n verificationId: string;\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/**\n * Parameters for uploading a document image\n */\nexport interface UploadDocumentParams {\n /** Verification ID to attach the document to */\n verificationId: string;\n /** Type of document (front or back) */\n type: 'front' | 'back';\n /** Base64 encoded image data, data URI, or file:// URI (React Native) */\n imageData: string;\n /** MIME type of the image (default: image/jpeg) */\n mimeType?: string;\n}\n\n/** Result of an upload operation */\nexport interface UploadResult {\n /** Response message */\n message: string;\n /** Current status after upload */\n status: string;\n}\n\n/** Current status of a verification session */\nexport interface VerificationStatus {\n /** Verification ID */\n verificationId: string;\n /** Current status: PENDING, PROCESSING, APPROVED, or REJECTED */\n status: 'PENDING' | 'PROCESSING' | 'APPROVED' | 'REJECTED';\n /** Face match similarity score (0-1) */\n faceMatchScore?: number;\n /** OCR extracted data from document */\n ocrData?: {\n /** Full name extracted from document */\n fullName?: string;\n /** ID number extracted from document */\n idNumber?: string;\n /** Birth date extracted from document */\n birthDate?: string;\n /** Expiry date extracted from document */\n expiryDate?: string;\n /** Additional extracted fields */\n [key: string]: any;\n };\n /** When the verification was created */\n createdAt: string;\n /** When the verification was last updated */\n updatedAt: string;\n}\n\n/** Event emitted when KYC status changes */\nexport interface KYCStatusEvent {\n /** Type of event: statusChanged or error */\n type: 'statusChanged' | 'error';\n /** New status (for statusChanged events) */\n status?: string;\n /** Error message (for error events) */\n error?: string;\n}\n\n/** Callback function for handling KYC status events */\nexport type KYCEventCallback = (event: KYCStatusEvent) => void;\n\n/**\n * Custom error class for KYC SDK errors\n */\nexport class KYCSdkError extends Error {\n /** Error code for programmatic error handling */\n code: string;\n /** HTTP status code if available */\n statusCode?: number;\n\n /**\n * Creates a new KYC SDK error\n * @param message Human-readable error message\n * @param code Error code for handling\n * @param statusCode Optional HTTP status code\n */\n constructor(message: string, code: string, statusCode?: number) {\n super(message);\n this.name = 'KYCSdkError';\n this.code = code;\n this.statusCode = statusCode;\n }\n}\n\n/**\n * Core KYC SDK client for interacting with the verification API\n */\nexport class KYCCore {\n private client: AxiosInstance;\n private credentials: KYCCredentials;\n private eventCallbacks: KYCEventCallback[] = [];\n\n /**\n * Creates a new KYC Core instance\n * @param credentials API credentials (apiKey and baseUrl)\n */\n constructor(credentials: KYCCredentials) {\n this.credentials = credentials;\n this.client = axios.create({\n baseURL: credentials.baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n this.client.interceptors.request.use((config) => {\n config.headers['x-api-key'] = this.credentials.apiKey;\n return config;\n });\n }\n\n /**\n * Registers a callback for KYC status events\n * @param callback Function to call when status changes\n * @returns Unsubscribe function to remove the callback\n */\n onEvent(callback: KYCEventCallback): () => void {\n this.eventCallbacks.push(callback);\n return () => {\n this.eventCallbacks = this.eventCallbacks.filter((cb) => cb !== callback);\n };\n }\n\n /**\n * Emits a status event to all registered callbacks\n * @param event The event to emit\n */\n private emitEvent(event: KYCStatusEvent): void {\n this.eventCallbacks.forEach((callback) => callback(event));\n }\n\n /**\n * Creates a verification token for secure API access\n * @param externalId External reference ID\n * @param expiry Token expiry in hours (default: 3)\n * @returns Object containing the token and its expiration time\n */\n async createVerificationToken(\n externalId: string,\n expiry: string = '3'\n ): Promise<{ token: string; expiresIn: string }> {\n try {\n const response = await this.client.post('/verification/token', {\n externalId,\n expiry,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to create verification token';\n throw new KYCSdkError(message, 'TOKEN_CREATE_FAILED', error.response?.status);\n }\n }\n\n /**\n * Starts a new verification session\n * @param params Parameters including documentType, country, identityId, and externalId\n * @returns Verification session with verificationId and status\n */\n async startVerification(params: StartVerificationParams): Promise<VerificationSession> {\n try {\n const response = await this.client.post('/verification/start', params);\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PENDING',\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to start verification';\n throw new KYCSdkError(message, 'VERIFICATION_START_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a selfie image for face verification\n * @param params Parameters including verificationId, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadSelfie(params: UploadSelfieParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: 'selfie.jpg',\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/selfie', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload selfie error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload selfie';\n throw new KYCSdkError(message, 'SELFIE_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Uploads a document image (front or back)\n * @param params Parameters including verificationId, type, imageData, and optional mimeType\n * @returns Upload result with status\n */\n async uploadDocument(params: UploadDocumentParams): Promise<UploadResult> {\n try {\n const formData = new FormData();\n formData.append('verificationId', params.verificationId);\n formData.append('type', params.type);\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.imageData;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: `${params.type}.jpg`,\n } as any);\n }\n\n const response = await this.client.post('/verification/upload/document', formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n\n this.emitEvent({\n type: 'statusChanged',\n status: 'PROCESSING',\n });\n\n return response.data;\n } catch (error: any) {\n console.log('Upload document error:', error.response?.data || error.message);\n const message = error.response?.data?.message || error.message || 'Failed to upload document';\n throw new KYCSdkError(message, 'DOCUMENT_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n /**\n * Gets the current status of a verification session\n * @param verificationId The verification ID to check\n * @returns Current verification status including OCR data and face match score\n */\n async getStatus(verificationId: string): Promise<VerificationStatus> {\n try {\n const response = await this.client.get(`/verification/status/${verificationId}`);\n\n this.emitEvent({\n type: 'statusChanged',\n status: response.data.status,\n });\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || 'Failed to get verification status';\n throw new KYCSdkError(message, 'STATUS_CHECK_FAILED', error.response?.status);\n }\n }\n\n async faceMatchVerification(params: FaceMatchVerificationParams) {\n try {\n const formData = new FormData();\n\n const mimeType = params.mimeType || 'image/jpeg';\n const imageData = params.file;\n\n if (imageData.startsWith('file://')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `selfie.jpg`,\n } as any);\n } else if (imageData.startsWith('data:')) {\n formData.append('file', {\n uri: imageData,\n type: mimeType,\n name: `selfie.jpg`,\n } as any);\n } else {\n formData.append('file', {\n uri: `data:${mimeType};base64,${imageData}`,\n type: mimeType,\n name: `selfie.jpg`,\n } as any);\n }\n\n const response = await this.client.post(\n `identities/${params.externalId}/face-match`,\n formData,\n {\n headers: { 'Content-Type': 'multipart/form-data' },\n }\n );\n return response.data;\n } catch (error: any) {\n console.log('Upload face match error:', error.response?.data || error.message);\n const message =\n error.response?.data?.message || error.message || 'Failed to upload face match';\n throw new KYCSdkError(message, 'FACEMATCH_UPLOAD_FAILED', error.response?.status);\n }\n }\n\n async faceMatchStatus({\n externalId,\n faceCheckId,\n interval = 3000,\n timeout = 120000,\n }: FaceMatchStatusParams): Promise<VerificationStatus> {\n const startTime = Date.now();\n\n return new Promise((resolve, reject) => {\n const poll = async () => {\n try {\n const status = (\n await this.client.get(`identities/${externalId}/face-match/status/${faceCheckId}`)\n ).data;\n\n if (status.status === 'APPROVED' || status.status === 'REJECTED') {\n resolve(status);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n reject(new KYCSdkError('Polling timeout', 'POLLING_TIMEOUT'));\n return;\n }\n\n setTimeout(poll, interval);\n } catch (error) {\n reject(error);\n }\n };\n\n poll();\n });\n }\n\n /**\n * Polls for verification status until completion or timeout\n * @param verificationId The verification ID to check\n * @param interval Polling interval in milliseconds (default: 3000)\n * @param timeout Maximum time to wait in milliseconds (default: 120000)\n * @returns Final verification status when approved or rejected\n */\n async pollStatus(\n verificationId: string,\n interval: number = 3000,\n timeout: number = 120000\n ): Promise<VerificationStatus> {\n const startTime = Date.now();\n\n return new Promise((resolve, reject) => {\n const poll = async () => {\n try {\n const status = await this.getStatus(verificationId);\n\n if (status.status === 'APPROVED' || status.status === 'REJECTED') {\n resolve(status);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n reject(new KYCSdkError('Polling timeout', 'POLLING_TIMEOUT'));\n return;\n }\n\n setTimeout(poll, interval);\n } catch (error) {\n reject(error);\n }\n };\n\n poll();\n });\n }\n\n /**\n * Static factory method to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\n static createClient(credentials: KYCCredentials): KYCCore {\n return new KYCCore(credentials);\n }\n}\n\n/**\n * Factory function to create a KYC client instance\n * @param credentials API credentials (apiKey and baseUrl)\n * @returns Configured KYCCore instance\n */\nexport function createKYCClient(credentials: KYCCredentials): KYCCore {\n return KYCCore.createClient(credentials);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kyciris/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
"tsup": "^8.0.0",
|
|
19
19
|
"typescript": "~5.9.2"
|
|
20
20
|
},
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public"
|
|
23
|
+
},
|
|
21
24
|
"scripts": {
|
|
22
25
|
"build": "tsup",
|
|
23
26
|
"dev": "tsup --watch",
|