vesant-sdk 1.7.0-dev.117915b → 1.7.0-dev.13bd228

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.
Files changed (63) hide show
  1. package/dist/{client-DtH2RLuy.d.ts → client-749WqhDT.d.ts} +2 -2
  2. package/dist/{client-DrjgZoH_.d.mts → client-BG8KtVMc.d.mts} +1 -1
  3. package/dist/{client-B0qhE2kr.d.mts → client-CRZea-eJ.d.mts} +2 -2
  4. package/dist/{client-DF7hlMEz.d.ts → client-D9JZgN3X.d.ts} +1 -1
  5. package/dist/{client-BolQlL5e.d.mts → client-q9fN8Hhf.d.mts} +103 -1
  6. package/dist/{client-BolQlL5e.d.ts → client-q9fN8Hhf.d.ts} +103 -1
  7. package/dist/compliance/index.d.mts +3 -3
  8. package/dist/compliance/index.d.ts +3 -3
  9. package/dist/compliance/index.js +61 -6
  10. package/dist/compliance/index.js.map +1 -1
  11. package/dist/compliance/index.mjs +61 -6
  12. package/dist/compliance/index.mjs.map +1 -1
  13. package/dist/decisions/index.d.mts +1 -1
  14. package/dist/decisions/index.d.ts +1 -1
  15. package/dist/decisions/index.js +61 -6
  16. package/dist/decisions/index.js.map +1 -1
  17. package/dist/decisions/index.mjs +61 -6
  18. package/dist/decisions/index.mjs.map +1 -1
  19. package/dist/geolocation/index.d.mts +3 -3
  20. package/dist/geolocation/index.d.ts +3 -3
  21. package/dist/geolocation/index.js +61 -6
  22. package/dist/geolocation/index.js.map +1 -1
  23. package/dist/geolocation/index.mjs +61 -6
  24. package/dist/geolocation/index.mjs.map +1 -1
  25. package/dist/index.d.mts +5 -5
  26. package/dist/index.d.ts +5 -5
  27. package/dist/index.js +137 -20
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.mjs +136 -21
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/kyc/core.d.mts +2 -2
  32. package/dist/kyc/core.d.ts +2 -2
  33. package/dist/kyc/core.js +87 -18
  34. package/dist/kyc/core.js.map +1 -1
  35. package/dist/kyc/core.mjs +87 -18
  36. package/dist/kyc/core.mjs.map +1 -1
  37. package/dist/kyc/index.d.mts +81 -13
  38. package/dist/kyc/index.d.ts +81 -13
  39. package/dist/kyc/index.js +87 -18
  40. package/dist/kyc/index.js.map +1 -1
  41. package/dist/kyc/index.mjs +87 -18
  42. package/dist/kyc/index.mjs.map +1 -1
  43. package/dist/react.d.mts +3 -3
  44. package/dist/react.d.ts +3 -3
  45. package/dist/risk-profile/index.d.mts +1 -1
  46. package/dist/risk-profile/index.d.ts +1 -1
  47. package/dist/risk-profile/index.js +61 -6
  48. package/dist/risk-profile/index.js.map +1 -1
  49. package/dist/risk-profile/index.mjs +61 -6
  50. package/dist/risk-profile/index.mjs.map +1 -1
  51. package/dist/scores/index.d.mts +1 -1
  52. package/dist/scores/index.d.ts +1 -1
  53. package/dist/scores/index.js +61 -6
  54. package/dist/scores/index.js.map +1 -1
  55. package/dist/scores/index.mjs +61 -6
  56. package/dist/scores/index.mjs.map +1 -1
  57. package/dist/tax/index.d.mts +2 -2
  58. package/dist/tax/index.d.ts +2 -2
  59. package/dist/tax/index.js +66 -8
  60. package/dist/tax/index.js.map +1 -1
  61. package/dist/tax/index.mjs +66 -8
  62. package/dist/tax/index.mjs.map +1 -1
  63. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { P as ProfileFilters, b as ProfileListResponse, C as CustomerProfile, a as CreateProfileRequest } from '../types-BOFaMQxI.mjs';
2
2
  import { c as Reason, R as RiskLevel, P as PaginationParams } from '../types-CBQRNL-l.mjs';
3
- import { B as BaseClient } from '../client-BolQlL5e.mjs';
3
+ import { B as BaseClient, R as RequestOptions } from '../client-q9fN8Hhf.mjs';
4
4
 
5
5
  /**
6
6
  * TypeScript type definitions for Vesant KYC Service API
@@ -318,8 +318,49 @@ interface RequestKycSubmitLinkRequest {
318
318
  redirect_url?: string;
319
319
  /** URL to receive callback notifications via POST request when KYC status changes (optional) */
320
320
  callback_url?: string;
321
- /** Event that triggered the KYC request (e.g. "onboarding", "login", "transaction") */
321
+ /**
322
+ * Event that triggered the KYC request. Valid values: "onboarding",
323
+ * "first_withdrawal", "first_purchase", "manual". The tenant's KYC
324
+ * verification trigger preferences decide, per event, whether KYC is
325
+ * required (`kyc_required` in the response). "manual" always requires
326
+ * KYC and honors the tenant's allow-skip-on-manual option (`can_skip`).
327
+ * Omitted or unknown values default to KYC required with no skip.
328
+ */
322
329
  trigger_event?: string;
330
+ /**
331
+ * Registered customer identity data (optional). Seeds the customer's risk
332
+ * profile so document verification can cross-check the submitted document
333
+ * against trusted reference data (name/DOB match, address verification).
334
+ * Fields never overwrite data already on the profile.
335
+ */
336
+ customer_data?: KycCustomerData;
337
+ }
338
+ /**
339
+ * Customer identity data supplied by your platform on a submit-link request.
340
+ * Mirrors the geolocation `customer_data` contract. Every field is optional
341
+ * and never overwrites data already on the customer's risk profile.
342
+ */
343
+ interface KycCustomerData {
344
+ /**
345
+ * Customer's registered full name. Used to match the OCR-extracted name
346
+ * on the submitted document.
347
+ */
348
+ full_name?: string;
349
+ /**
350
+ * Customer's registered date of birth. ISO 8601 date ("1999-06-02") or an
351
+ * RFC 3339 timestamp ("1986-09-06T18:30:00.000+00:00", as produced by
352
+ * `Date.prototype.toISOString()`) — for timestamps the date portion is
353
+ * used. Used for DOB matching against the submitted document.
354
+ */
355
+ date_of_birth?: string;
356
+ /** Customer's email address */
357
+ email?: string;
358
+ /** Customer's phone number */
359
+ phone?: string;
360
+ /** Customer's residential address. Used for address verification. */
361
+ address?: string;
362
+ /** Customer's country of residence */
363
+ country?: string;
323
364
  }
324
365
  /**
325
366
  * Trigger events that can request Event-Based Face Verification.
@@ -389,6 +430,19 @@ interface RequestKycSubmitLinkResponse {
389
430
  link: string;
390
431
  /** KYC request ID */
391
432
  kyc_id: string;
433
+ /**
434
+ * Whether KYC is required for the reported `trigger_event`, per the
435
+ * tenant's verification trigger preferences. `false` when the trigger
436
+ * is disabled for the tenant, or when the customer is already verified
437
+ * (in that case `link` and `kyc_id` are empty).
438
+ */
439
+ kyc_required: boolean;
440
+ /**
441
+ * Whether the user may skip verification. Only `true` for
442
+ * `trigger_event: "manual"` when the tenant enables allow-skip-on-manual,
443
+ * or when the customer is already verified.
444
+ */
445
+ can_skip: boolean;
392
446
  }
393
447
  /** Device class detected by the SDK (purely client-side — server doesn't care). */
394
448
  type EventBasedFaceVerificationDeviceType = 'mobile' | 'desktop';
@@ -666,7 +720,7 @@ interface UseKycPreferencesResult extends BaseHookState {
666
720
  */
667
721
  declare class KycClient extends BaseClient {
668
722
  private userId?;
669
- private riskProfileBaseURL?;
723
+ private readonly riskProfileBaseURL?;
670
724
  constructor(config: KycClientConfig);
671
725
  /**
672
726
  * Set the user ID for operations requiring user context
@@ -685,7 +739,13 @@ declare class KycClient extends BaseClient {
685
739
  *
686
740
  * Generates a link that the user can visit to submit their KYC documents.
687
741
  *
688
- * @param request - Request containing the user ID, optional redirect URL, and optional callback URL (receives POST requests)
742
+ * Optionally pass the customer's registered identity data as
743
+ * `customer_data` (same shape as the geolocation `customer_data` block).
744
+ * It seeds the customer's risk profile so document verification can
745
+ * cross-check the submitted document against trusted reference data;
746
+ * fields never overwrite data already on the profile.
747
+ *
748
+ * @param request - Request containing the user ID, optional redirect URL, optional callback URL (receives POST requests), and optional customer identity data
689
749
  * @returns Response containing the redirect link and KYC ID
690
750
  *
691
751
  * @example
@@ -693,14 +753,22 @@ declare class KycClient extends BaseClient {
693
753
  * const result = await client.requestKycSubmitLink({
694
754
  * user_id: "user_123",
695
755
  * redirect_url: "https://merchant.com/kyc-complete", // optional
696
- * callback_url: "https://merchant.com/api/kyc-webhook" // optional - receives POST requests on status change
756
+ * callback_url: "https://merchant.com/api/kyc-webhook", // optional - receives POST requests on status change
757
+ * customer_data: { // optional - seeds the risk profile for document cross-checks
758
+ * full_name: "John Doe",
759
+ * date_of_birth: "1999-06-02", // ISO 8601
760
+ * email: "john@example.com",
761
+ * phone: "+94771234567",
762
+ * address: "12 Main St, Colombo", // used for address verification
763
+ * country: "LK"
764
+ * }
697
765
  * });
698
766
  *
699
767
  * console.log(`Redirect user to: ${result.link}`);
700
768
  * console.log(`KYC ID: ${result.kyc_id}`);
701
769
  * ```
702
770
  */
703
- requestKycSubmitLink(request: RequestKycSubmitLinkRequest): Promise<RequestKycSubmitLinkResponse>;
771
+ requestKycSubmitLink(request: RequestKycSubmitLinkRequest, requestOptions?: RequestOptions): Promise<RequestKycSubmitLinkResponse>;
704
772
  /**
705
773
  * Create a Event-Based Face Verification session.
706
774
  *
@@ -726,7 +794,7 @@ declare class KycClient extends BaseClient {
726
794
  *
727
795
  * @param request - Token from `createEventBasedFaceVerificationSession`, plus the base64 selfie.
728
796
  */
729
- submitEventBasedFaceVerificationSession(request: SubmitEventBasedFaceVerificationSessionRequest): Promise<EventBasedFaceVerificationCallback>;
797
+ submitEventBasedFaceVerificationSession(request: SubmitEventBasedFaceVerificationSessionRequest, requestOptions?: RequestOptions): Promise<EventBasedFaceVerificationCallback>;
730
798
  /**
731
799
  * Look up the current state of a Event-Based Face Verification session by its
732
800
  * session token. Useful for desktop pollers waiting on the mobile handoff.
@@ -798,7 +866,7 @@ declare class KycClient extends BaseClient {
798
866
  * @example
799
867
  * ```typescript
800
868
  * const result = await client.submitVerification({
801
- * reference: "customer_123",
869
+ * reference: "4d2aff34-ab86-422d-992e-50b1234a5b67",
802
870
  * email: "customer@example.com",
803
871
  * country: "US",
804
872
  * document: {
@@ -815,7 +883,7 @@ declare class KycClient extends BaseClient {
815
883
  * console.log(`Verification submitted: ${result.reference}`);
816
884
  * ```
817
885
  */
818
- submitVerification(request: DocumentVerificationRequest): Promise<DocumentVerificationResponse>;
886
+ submitVerification(request: DocumentVerificationRequest, requestOptions?: RequestOptions): Promise<DocumentVerificationResponse>;
819
887
  /**
820
888
  * Get a KYC request by ID
821
889
  *
@@ -824,7 +892,7 @@ declare class KycClient extends BaseClient {
824
892
  *
825
893
  * @example
826
894
  * ```typescript
827
- * const kyc = await client.getKycRequest("kyc_abc123");
895
+ * const kyc = await client.getKycRequest("550e8400-e29b-41d4-a716-446655440000");
828
896
  * console.log(`Status: ${kyc.status}, ID Verified: ${kyc.id_verified}`);
829
897
  * ```
830
898
  */
@@ -877,7 +945,7 @@ declare class KycClient extends BaseClient {
877
945
  * @example
878
946
  * ```typescript
879
947
  * await client.requestAdditionalDocuments({
880
- * id: "kyc_abc123",
948
+ * id: "550e8400-e29b-41d4-a716-446655440000",
881
949
  * document_types: ["address", "document_two"],
882
950
  * message: "Please provide proof of address and secondary ID"
883
951
  * });
@@ -892,7 +960,7 @@ declare class KycClient extends BaseClient {
892
960
  *
893
961
  * @example
894
962
  * ```typescript
895
- * const proofs = await client.getProofDownloadURLs("kyc_abc123");
963
+ * const proofs = await client.getProofDownloadURLs("550e8400-e29b-41d4-a716-446655440000");
896
964
  * proofs.forEach(proof => {
897
965
  * console.log(`${proof.type}: ${proof.url} (expires: ${proof.expires_at})`);
898
966
  * });
@@ -1078,4 +1146,4 @@ declare class KycClient extends BaseClient {
1078
1146
  createCustomerProfile(profile: CreateProfileRequest): Promise<CustomerProfile>;
1079
1147
  }
1080
1148
 
1081
- export { type CheckKycStatusRequest, type CheckKycStatusResponse, CreateProfileRequest as CreateCustomerProfileRequest, type CreateEventBasedFaceVerificationSessionRequest, type CreateEventBasedFaceVerificationSessionResponse, CustomerProfile, ProfileFilters as CustomerProfileFilters, ProfileListResponse as CustomerProfileListResponse, type DocumentType, type DocumentVerificationRequest, type DocumentVerificationResponse, type EventBasedFaceVerificationCallback, type EventBasedFaceVerificationDeviceType, type EventBasedFaceVerificationEvent, type EventBasedFaceVerificationFrequencyTrigger, type EventBasedFaceVerificationReactionResult, type EventBasedFaceVerificationReactions, type EventBasedFaceVerificationThresholdTrigger, type EventBasedFaceVerificationTriggers, type FaceProof, KYC_DECLINED_DESCRIPTIONS, type KycAlert, type KycAlertFilters, type KycAlertListResponse, type KycAlertStatus, type KycAlertType, KycClient, type KycClientConfig, type KycCustomerProfile, type KycDeclinedCode, type KycHandoffSession, type KycOverview, type KycPagination, type KycPreferences, type KycRequest, type KycRequestFilters, type KycRequestListResponse, type KycStatus, type Name, PaginationParams, type Proof, type ProofDownloadURL, type ProofType, type RequestAdditionalDocumentsRequest, type RequestKycSubmitLinkRequest, type RequestKycSubmitLinkResponse, RiskLevel, type SubmitEventBasedFaceVerificationSessionRequest, type SubmittedDocument, type SupportedDocumentType, type UpdateKycAlertRequest, type UpdateKycPreferencesRequest, type UpdateKycStatusRequest, type UseKycAlertsOptions, type UseKycAlertsResult, type UseKycOverviewOptions, type UseKycOverviewResult, type UseKycPreferencesResult, type UseKycRequestsOptions, type UseKycRequestsResult, type UseKycSubmissionOptions, type UseKycSubmissionResult };
1149
+ export { type CheckKycStatusRequest, type CheckKycStatusResponse, CreateProfileRequest as CreateCustomerProfileRequest, type CreateEventBasedFaceVerificationSessionRequest, type CreateEventBasedFaceVerificationSessionResponse, CustomerProfile, ProfileFilters as CustomerProfileFilters, ProfileListResponse as CustomerProfileListResponse, type DocumentType, type DocumentVerificationRequest, type DocumentVerificationResponse, type EventBasedFaceVerificationCallback, type EventBasedFaceVerificationDeviceType, type EventBasedFaceVerificationEvent, type EventBasedFaceVerificationFrequencyTrigger, type EventBasedFaceVerificationReactionResult, type EventBasedFaceVerificationReactions, type EventBasedFaceVerificationThresholdTrigger, type EventBasedFaceVerificationTriggers, type FaceProof, KYC_DECLINED_DESCRIPTIONS, type KycAlert, type KycAlertFilters, type KycAlertListResponse, type KycAlertStatus, type KycAlertType, KycClient, type KycClientConfig, type KycCustomerData, type KycCustomerProfile, type KycDeclinedCode, type KycHandoffSession, type KycOverview, type KycPagination, type KycPreferences, type KycRequest, type KycRequestFilters, type KycRequestListResponse, type KycStatus, type Name, PaginationParams, type Proof, type ProofDownloadURL, type ProofType, type RequestAdditionalDocumentsRequest, type RequestKycSubmitLinkRequest, type RequestKycSubmitLinkResponse, RiskLevel, type SubmitEventBasedFaceVerificationSessionRequest, type SubmittedDocument, type SupportedDocumentType, type UpdateKycAlertRequest, type UpdateKycPreferencesRequest, type UpdateKycStatusRequest, type UseKycAlertsOptions, type UseKycAlertsResult, type UseKycOverviewOptions, type UseKycOverviewResult, type UseKycPreferencesResult, type UseKycRequestsOptions, type UseKycRequestsResult, type UseKycSubmissionOptions, type UseKycSubmissionResult };
@@ -1,6 +1,6 @@
1
1
  import { P as ProfileFilters, b as ProfileListResponse, C as CustomerProfile, a as CreateProfileRequest } from '../types-UGyDl1fd.js';
2
2
  import { c as Reason, R as RiskLevel, P as PaginationParams } from '../types-CBQRNL-l.js';
3
- import { B as BaseClient } from '../client-BolQlL5e.js';
3
+ import { B as BaseClient, R as RequestOptions } from '../client-q9fN8Hhf.js';
4
4
 
5
5
  /**
6
6
  * TypeScript type definitions for Vesant KYC Service API
@@ -318,8 +318,49 @@ interface RequestKycSubmitLinkRequest {
318
318
  redirect_url?: string;
319
319
  /** URL to receive callback notifications via POST request when KYC status changes (optional) */
320
320
  callback_url?: string;
321
- /** Event that triggered the KYC request (e.g. "onboarding", "login", "transaction") */
321
+ /**
322
+ * Event that triggered the KYC request. Valid values: "onboarding",
323
+ * "first_withdrawal", "first_purchase", "manual". The tenant's KYC
324
+ * verification trigger preferences decide, per event, whether KYC is
325
+ * required (`kyc_required` in the response). "manual" always requires
326
+ * KYC and honors the tenant's allow-skip-on-manual option (`can_skip`).
327
+ * Omitted or unknown values default to KYC required with no skip.
328
+ */
322
329
  trigger_event?: string;
330
+ /**
331
+ * Registered customer identity data (optional). Seeds the customer's risk
332
+ * profile so document verification can cross-check the submitted document
333
+ * against trusted reference data (name/DOB match, address verification).
334
+ * Fields never overwrite data already on the profile.
335
+ */
336
+ customer_data?: KycCustomerData;
337
+ }
338
+ /**
339
+ * Customer identity data supplied by your platform on a submit-link request.
340
+ * Mirrors the geolocation `customer_data` contract. Every field is optional
341
+ * and never overwrites data already on the customer's risk profile.
342
+ */
343
+ interface KycCustomerData {
344
+ /**
345
+ * Customer's registered full name. Used to match the OCR-extracted name
346
+ * on the submitted document.
347
+ */
348
+ full_name?: string;
349
+ /**
350
+ * Customer's registered date of birth. ISO 8601 date ("1999-06-02") or an
351
+ * RFC 3339 timestamp ("1986-09-06T18:30:00.000+00:00", as produced by
352
+ * `Date.prototype.toISOString()`) — for timestamps the date portion is
353
+ * used. Used for DOB matching against the submitted document.
354
+ */
355
+ date_of_birth?: string;
356
+ /** Customer's email address */
357
+ email?: string;
358
+ /** Customer's phone number */
359
+ phone?: string;
360
+ /** Customer's residential address. Used for address verification. */
361
+ address?: string;
362
+ /** Customer's country of residence */
363
+ country?: string;
323
364
  }
324
365
  /**
325
366
  * Trigger events that can request Event-Based Face Verification.
@@ -389,6 +430,19 @@ interface RequestKycSubmitLinkResponse {
389
430
  link: string;
390
431
  /** KYC request ID */
391
432
  kyc_id: string;
433
+ /**
434
+ * Whether KYC is required for the reported `trigger_event`, per the
435
+ * tenant's verification trigger preferences. `false` when the trigger
436
+ * is disabled for the tenant, or when the customer is already verified
437
+ * (in that case `link` and `kyc_id` are empty).
438
+ */
439
+ kyc_required: boolean;
440
+ /**
441
+ * Whether the user may skip verification. Only `true` for
442
+ * `trigger_event: "manual"` when the tenant enables allow-skip-on-manual,
443
+ * or when the customer is already verified.
444
+ */
445
+ can_skip: boolean;
392
446
  }
393
447
  /** Device class detected by the SDK (purely client-side — server doesn't care). */
394
448
  type EventBasedFaceVerificationDeviceType = 'mobile' | 'desktop';
@@ -666,7 +720,7 @@ interface UseKycPreferencesResult extends BaseHookState {
666
720
  */
667
721
  declare class KycClient extends BaseClient {
668
722
  private userId?;
669
- private riskProfileBaseURL?;
723
+ private readonly riskProfileBaseURL?;
670
724
  constructor(config: KycClientConfig);
671
725
  /**
672
726
  * Set the user ID for operations requiring user context
@@ -685,7 +739,13 @@ declare class KycClient extends BaseClient {
685
739
  *
686
740
  * Generates a link that the user can visit to submit their KYC documents.
687
741
  *
688
- * @param request - Request containing the user ID, optional redirect URL, and optional callback URL (receives POST requests)
742
+ * Optionally pass the customer's registered identity data as
743
+ * `customer_data` (same shape as the geolocation `customer_data` block).
744
+ * It seeds the customer's risk profile so document verification can
745
+ * cross-check the submitted document against trusted reference data;
746
+ * fields never overwrite data already on the profile.
747
+ *
748
+ * @param request - Request containing the user ID, optional redirect URL, optional callback URL (receives POST requests), and optional customer identity data
689
749
  * @returns Response containing the redirect link and KYC ID
690
750
  *
691
751
  * @example
@@ -693,14 +753,22 @@ declare class KycClient extends BaseClient {
693
753
  * const result = await client.requestKycSubmitLink({
694
754
  * user_id: "user_123",
695
755
  * redirect_url: "https://merchant.com/kyc-complete", // optional
696
- * callback_url: "https://merchant.com/api/kyc-webhook" // optional - receives POST requests on status change
756
+ * callback_url: "https://merchant.com/api/kyc-webhook", // optional - receives POST requests on status change
757
+ * customer_data: { // optional - seeds the risk profile for document cross-checks
758
+ * full_name: "John Doe",
759
+ * date_of_birth: "1999-06-02", // ISO 8601
760
+ * email: "john@example.com",
761
+ * phone: "+94771234567",
762
+ * address: "12 Main St, Colombo", // used for address verification
763
+ * country: "LK"
764
+ * }
697
765
  * });
698
766
  *
699
767
  * console.log(`Redirect user to: ${result.link}`);
700
768
  * console.log(`KYC ID: ${result.kyc_id}`);
701
769
  * ```
702
770
  */
703
- requestKycSubmitLink(request: RequestKycSubmitLinkRequest): Promise<RequestKycSubmitLinkResponse>;
771
+ requestKycSubmitLink(request: RequestKycSubmitLinkRequest, requestOptions?: RequestOptions): Promise<RequestKycSubmitLinkResponse>;
704
772
  /**
705
773
  * Create a Event-Based Face Verification session.
706
774
  *
@@ -726,7 +794,7 @@ declare class KycClient extends BaseClient {
726
794
  *
727
795
  * @param request - Token from `createEventBasedFaceVerificationSession`, plus the base64 selfie.
728
796
  */
729
- submitEventBasedFaceVerificationSession(request: SubmitEventBasedFaceVerificationSessionRequest): Promise<EventBasedFaceVerificationCallback>;
797
+ submitEventBasedFaceVerificationSession(request: SubmitEventBasedFaceVerificationSessionRequest, requestOptions?: RequestOptions): Promise<EventBasedFaceVerificationCallback>;
730
798
  /**
731
799
  * Look up the current state of a Event-Based Face Verification session by its
732
800
  * session token. Useful for desktop pollers waiting on the mobile handoff.
@@ -798,7 +866,7 @@ declare class KycClient extends BaseClient {
798
866
  * @example
799
867
  * ```typescript
800
868
  * const result = await client.submitVerification({
801
- * reference: "customer_123",
869
+ * reference: "4d2aff34-ab86-422d-992e-50b1234a5b67",
802
870
  * email: "customer@example.com",
803
871
  * country: "US",
804
872
  * document: {
@@ -815,7 +883,7 @@ declare class KycClient extends BaseClient {
815
883
  * console.log(`Verification submitted: ${result.reference}`);
816
884
  * ```
817
885
  */
818
- submitVerification(request: DocumentVerificationRequest): Promise<DocumentVerificationResponse>;
886
+ submitVerification(request: DocumentVerificationRequest, requestOptions?: RequestOptions): Promise<DocumentVerificationResponse>;
819
887
  /**
820
888
  * Get a KYC request by ID
821
889
  *
@@ -824,7 +892,7 @@ declare class KycClient extends BaseClient {
824
892
  *
825
893
  * @example
826
894
  * ```typescript
827
- * const kyc = await client.getKycRequest("kyc_abc123");
895
+ * const kyc = await client.getKycRequest("550e8400-e29b-41d4-a716-446655440000");
828
896
  * console.log(`Status: ${kyc.status}, ID Verified: ${kyc.id_verified}`);
829
897
  * ```
830
898
  */
@@ -877,7 +945,7 @@ declare class KycClient extends BaseClient {
877
945
  * @example
878
946
  * ```typescript
879
947
  * await client.requestAdditionalDocuments({
880
- * id: "kyc_abc123",
948
+ * id: "550e8400-e29b-41d4-a716-446655440000",
881
949
  * document_types: ["address", "document_two"],
882
950
  * message: "Please provide proof of address and secondary ID"
883
951
  * });
@@ -892,7 +960,7 @@ declare class KycClient extends BaseClient {
892
960
  *
893
961
  * @example
894
962
  * ```typescript
895
- * const proofs = await client.getProofDownloadURLs("kyc_abc123");
963
+ * const proofs = await client.getProofDownloadURLs("550e8400-e29b-41d4-a716-446655440000");
896
964
  * proofs.forEach(proof => {
897
965
  * console.log(`${proof.type}: ${proof.url} (expires: ${proof.expires_at})`);
898
966
  * });
@@ -1078,4 +1146,4 @@ declare class KycClient extends BaseClient {
1078
1146
  createCustomerProfile(profile: CreateProfileRequest): Promise<CustomerProfile>;
1079
1147
  }
1080
1148
 
1081
- export { type CheckKycStatusRequest, type CheckKycStatusResponse, CreateProfileRequest as CreateCustomerProfileRequest, type CreateEventBasedFaceVerificationSessionRequest, type CreateEventBasedFaceVerificationSessionResponse, CustomerProfile, ProfileFilters as CustomerProfileFilters, ProfileListResponse as CustomerProfileListResponse, type DocumentType, type DocumentVerificationRequest, type DocumentVerificationResponse, type EventBasedFaceVerificationCallback, type EventBasedFaceVerificationDeviceType, type EventBasedFaceVerificationEvent, type EventBasedFaceVerificationFrequencyTrigger, type EventBasedFaceVerificationReactionResult, type EventBasedFaceVerificationReactions, type EventBasedFaceVerificationThresholdTrigger, type EventBasedFaceVerificationTriggers, type FaceProof, KYC_DECLINED_DESCRIPTIONS, type KycAlert, type KycAlertFilters, type KycAlertListResponse, type KycAlertStatus, type KycAlertType, KycClient, type KycClientConfig, type KycCustomerProfile, type KycDeclinedCode, type KycHandoffSession, type KycOverview, type KycPagination, type KycPreferences, type KycRequest, type KycRequestFilters, type KycRequestListResponse, type KycStatus, type Name, PaginationParams, type Proof, type ProofDownloadURL, type ProofType, type RequestAdditionalDocumentsRequest, type RequestKycSubmitLinkRequest, type RequestKycSubmitLinkResponse, RiskLevel, type SubmitEventBasedFaceVerificationSessionRequest, type SubmittedDocument, type SupportedDocumentType, type UpdateKycAlertRequest, type UpdateKycPreferencesRequest, type UpdateKycStatusRequest, type UseKycAlertsOptions, type UseKycAlertsResult, type UseKycOverviewOptions, type UseKycOverviewResult, type UseKycPreferencesResult, type UseKycRequestsOptions, type UseKycRequestsResult, type UseKycSubmissionOptions, type UseKycSubmissionResult };
1149
+ export { type CheckKycStatusRequest, type CheckKycStatusResponse, CreateProfileRequest as CreateCustomerProfileRequest, type CreateEventBasedFaceVerificationSessionRequest, type CreateEventBasedFaceVerificationSessionResponse, CustomerProfile, ProfileFilters as CustomerProfileFilters, ProfileListResponse as CustomerProfileListResponse, type DocumentType, type DocumentVerificationRequest, type DocumentVerificationResponse, type EventBasedFaceVerificationCallback, type EventBasedFaceVerificationDeviceType, type EventBasedFaceVerificationEvent, type EventBasedFaceVerificationFrequencyTrigger, type EventBasedFaceVerificationReactionResult, type EventBasedFaceVerificationReactions, type EventBasedFaceVerificationThresholdTrigger, type EventBasedFaceVerificationTriggers, type FaceProof, KYC_DECLINED_DESCRIPTIONS, type KycAlert, type KycAlertFilters, type KycAlertListResponse, type KycAlertStatus, type KycAlertType, KycClient, type KycClientConfig, type KycCustomerData, type KycCustomerProfile, type KycDeclinedCode, type KycHandoffSession, type KycOverview, type KycPagination, type KycPreferences, type KycRequest, type KycRequestFilters, type KycRequestListResponse, type KycStatus, type Name, PaginationParams, type Proof, type ProofDownloadURL, type ProofType, type RequestAdditionalDocumentsRequest, type RequestKycSubmitLinkRequest, type RequestKycSubmitLinkResponse, RiskLevel, type SubmitEventBasedFaceVerificationSessionRequest, type SubmittedDocument, type SupportedDocumentType, type UpdateKycAlertRequest, type UpdateKycPreferencesRequest, type UpdateKycStatusRequest, type UseKycAlertsOptions, type UseKycAlertsResult, type UseKycOverviewOptions, type UseKycOverviewResult, type UseKycPreferencesResult, type UseKycRequestsOptions, type UseKycRequestsResult, type UseKycSubmissionOptions, type UseKycSubmissionResult };
package/dist/kyc/index.js CHANGED
@@ -1,5 +1,18 @@
1
1
  'use strict';
2
2
 
3
+ // src/core/auth.ts
4
+ var StaticApiKeyProvider = class {
5
+ constructor(apiKey) {
6
+ this.apiKey = apiKey;
7
+ }
8
+ async getCredential() {
9
+ return this.apiKey ? { scheme: "Bearer", token: this.apiKey } : null;
10
+ }
11
+ canRefresh() {
12
+ return false;
13
+ }
14
+ };
15
+
3
16
  // src/core/errors.ts
4
17
  var VesantError = class _VesantError extends Error {
5
18
  constructor(message, code, statusCode, details) {
@@ -264,6 +277,7 @@ var BaseClient = class {
264
277
  interceptors: this.interceptors,
265
278
  logger: this.logger
266
279
  };
280
+ this.authProvider = config.authProvider ?? (apiKey ? new StaticApiKeyProvider(apiKey) : void 0);
267
281
  if (config.circuitBreaker) {
268
282
  this.circuitBreaker = new CircuitBreaker(config.circuitBreaker);
269
283
  }
@@ -271,6 +285,19 @@ var BaseClient = class {
271
285
  this.rateLimitTracker = new RateLimitTracker();
272
286
  }
273
287
  }
288
+ /**
289
+ * Resolve the Idempotency-Key for a request. Mutating methods (POST/PUT/PATCH)
290
+ * get the caller-supplied key or a freshly minted UUID; non-mutating methods get
291
+ * none. requestWithRetry resolves this once and injects it so every retry reuses
292
+ * one key (letting the server dedup replays); a direct request() resolves per call.
293
+ */
294
+ resolveIdempotencyKey(method, requestOptions) {
295
+ const isMutating = ["POST", "PUT", "PATCH"].includes((method || "GET").toUpperCase());
296
+ if (!isMutating) {
297
+ return void 0;
298
+ }
299
+ return requestOptions?.idempotencyKey ?? generateUUID();
300
+ }
274
301
  /**
275
302
  * Make an HTTP request with timeout and error handling
276
303
  */
@@ -296,15 +323,20 @@ var BaseClient = class {
296
323
  ...this.config.headers,
297
324
  ...options.headers || {}
298
325
  };
299
- if (this.config.apiKey) {
300
- headers["Authorization"] = `Bearer ${this.config.apiKey}`;
326
+ const credential = await this.authProvider?.getCredential({
327
+ tenantId: this.config.tenantId,
328
+ requestId
329
+ });
330
+ if (credential) {
331
+ headers["Authorization"] = `${credential.scheme ?? "Bearer"} ${credential.token}`;
301
332
  }
302
333
  if (this.config.environment === "sandbox") {
303
334
  headers["X-Sandbox"] = "true";
304
335
  }
305
336
  const method = (options.method || "GET").toUpperCase();
306
- if (["POST", "PUT", "PATCH"].includes(method)) {
307
- headers["Idempotency-Key"] = requestOptions?.idempotencyKey || generateUUID();
337
+ const idempotencyKey = this.resolveIdempotencyKey(method, requestOptions);
338
+ if (idempotencyKey) {
339
+ headers["Idempotency-Key"] = idempotencyKey;
308
340
  }
309
341
  const controller = new AbortController();
310
342
  const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
@@ -325,10 +357,28 @@ var BaseClient = class {
325
357
  if (this.config.debug) {
326
358
  this.logger.debug(`${finalOptions.method || "GET"} ${endpoint}`);
327
359
  }
328
- const response = await fetch(url, {
360
+ let response = await fetch(url, {
329
361
  ...finalOptions,
330
362
  signal: controller.signal
331
363
  });
364
+ if (response.status === 401 && this.authProvider?.canRefresh?.()) {
365
+ const refreshed = await this.authProvider.getCredential({
366
+ tenantId: this.config.tenantId,
367
+ requestId,
368
+ forceRefresh: true
369
+ });
370
+ if (refreshed) {
371
+ this.config.onCredentialRotated?.({ reason: "unauthorized" });
372
+ finalOptions = {
373
+ ...finalOptions,
374
+ headers: {
375
+ ...finalOptions.headers,
376
+ Authorization: `${refreshed.scheme ?? "Bearer"} ${refreshed.token}`
377
+ }
378
+ };
379
+ response = await fetch(url, { ...finalOptions, signal: controller.signal });
380
+ }
381
+ }
332
382
  clearTimeout(timeoutId);
333
383
  if (this.rateLimitTracker) {
334
384
  this.rateLimitTracker.updateFromHeaders(response.headers);
@@ -417,9 +467,11 @@ var BaseClient = class {
417
467
  */
418
468
  async requestWithRetry(endpoint, options = {}, serviceURL, retries = this.config.retries, requestOptions) {
419
469
  let lastError;
470
+ const idempotencyKey = this.resolveIdempotencyKey(options.method || "GET", requestOptions);
471
+ const attemptOptions = idempotencyKey ? { ...requestOptions, idempotencyKey } : requestOptions;
420
472
  for (let attempt = 0; attempt <= retries; attempt++) {
421
473
  try {
422
- return await this.request(endpoint, options, serviceURL, requestOptions);
474
+ return await this.request(endpoint, options, serviceURL, attemptOptions);
423
475
  } catch (error) {
424
476
  lastError = error instanceof Error ? error : new Error("Unknown error");
425
477
  if (requestOptions?.signal?.aborted) {
@@ -516,6 +568,9 @@ var BaseClient = class {
516
568
  if (config.interceptors) {
517
569
  this.interceptors = config.interceptors;
518
570
  }
571
+ if (config.authProvider !== void 0 || config.apiKey !== void 0) {
572
+ this.authProvider = this.config.authProvider ?? (this.config.apiKey ? new StaticApiKeyProvider(this.config.apiKey) : void 0);
573
+ }
519
574
  }
520
575
  /**
521
576
  * Get current configuration (readonly)
@@ -603,7 +658,13 @@ var KycClient = class extends BaseClient {
603
658
  *
604
659
  * Generates a link that the user can visit to submit their KYC documents.
605
660
  *
606
- * @param request - Request containing the user ID, optional redirect URL, and optional callback URL (receives POST requests)
661
+ * Optionally pass the customer's registered identity data as
662
+ * `customer_data` (same shape as the geolocation `customer_data` block).
663
+ * It seeds the customer's risk profile so document verification can
664
+ * cross-check the submitted document against trusted reference data;
665
+ * fields never overwrite data already on the profile.
666
+ *
667
+ * @param request - Request containing the user ID, optional redirect URL, optional callback URL (receives POST requests), and optional customer identity data
607
668
  * @returns Response containing the redirect link and KYC ID
608
669
  *
609
670
  * @example
@@ -611,19 +672,27 @@ var KycClient = class extends BaseClient {
611
672
  * const result = await client.requestKycSubmitLink({
612
673
  * user_id: "user_123",
613
674
  * redirect_url: "https://merchant.com/kyc-complete", // optional
614
- * callback_url: "https://merchant.com/api/kyc-webhook" // optional - receives POST requests on status change
675
+ * callback_url: "https://merchant.com/api/kyc-webhook", // optional - receives POST requests on status change
676
+ * customer_data: { // optional - seeds the risk profile for document cross-checks
677
+ * full_name: "John Doe",
678
+ * date_of_birth: "1999-06-02", // ISO 8601
679
+ * email: "john@example.com",
680
+ * phone: "+94771234567",
681
+ * address: "12 Main St, Colombo", // used for address verification
682
+ * country: "LK"
683
+ * }
615
684
  * });
616
685
  *
617
686
  * console.log(`Redirect user to: ${result.link}`);
618
687
  * console.log(`KYC ID: ${result.kyc_id}`);
619
688
  * ```
620
689
  */
621
- async requestKycSubmitLink(request) {
690
+ async requestKycSubmitLink(request, requestOptions) {
622
691
  return this.requestWithRetry("/api/v1/kyc/request", {
623
692
  method: "POST",
624
693
  body: JSON.stringify(request),
625
694
  headers: this.getUserHeaders()
626
- });
695
+ }, void 0, void 0, requestOptions);
627
696
  }
628
697
  /**
629
698
  * Create a Event-Based Face Verification session.
@@ -656,12 +725,12 @@ var KycClient = class extends BaseClient {
656
725
  *
657
726
  * @param request - Token from `createEventBasedFaceVerificationSession`, plus the base64 selfie.
658
727
  */
659
- async submitEventBasedFaceVerificationSession(request) {
728
+ async submitEventBasedFaceVerificationSession(request, requestOptions) {
660
729
  return this.request("/api/v1/kyc/face/submit", {
661
730
  method: "POST",
662
731
  body: JSON.stringify(request),
663
732
  headers: this.getUserHeaders()
664
- });
733
+ }, void 0, requestOptions);
665
734
  }
666
735
  /**
667
736
  * Look up the current state of a Event-Based Face Verification session by its
@@ -760,7 +829,7 @@ var KycClient = class extends BaseClient {
760
829
  * @example
761
830
  * ```typescript
762
831
  * const result = await client.submitVerification({
763
- * reference: "customer_123",
832
+ * reference: "4d2aff34-ab86-422d-992e-50b1234a5b67",
764
833
  * email: "customer@example.com",
765
834
  * country: "US",
766
835
  * document: {
@@ -777,12 +846,12 @@ var KycClient = class extends BaseClient {
777
846
  * console.log(`Verification submitted: ${result.reference}`);
778
847
  * ```
779
848
  */
780
- async submitVerification(request) {
849
+ async submitVerification(request, requestOptions) {
781
850
  return this.requestWithRetry("/api/v1/kyc/submit", {
782
851
  method: "POST",
783
852
  body: JSON.stringify(request),
784
853
  headers: this.getUserHeaders()
785
- });
854
+ }, void 0, void 0, requestOptions);
786
855
  }
787
856
  /**
788
857
  * Get a KYC request by ID
@@ -792,7 +861,7 @@ var KycClient = class extends BaseClient {
792
861
  *
793
862
  * @example
794
863
  * ```typescript
795
- * const kyc = await client.getKycRequest("kyc_abc123");
864
+ * const kyc = await client.getKycRequest("550e8400-e29b-41d4-a716-446655440000");
796
865
  * console.log(`Status: ${kyc.status}, ID Verified: ${kyc.id_verified}`);
797
866
  * ```
798
867
  */
@@ -867,7 +936,7 @@ var KycClient = class extends BaseClient {
867
936
  * @example
868
937
  * ```typescript
869
938
  * await client.requestAdditionalDocuments({
870
- * id: "kyc_abc123",
939
+ * id: "550e8400-e29b-41d4-a716-446655440000",
871
940
  * document_types: ["address", "document_two"],
872
941
  * message: "Please provide proof of address and secondary ID"
873
942
  * });
@@ -888,7 +957,7 @@ var KycClient = class extends BaseClient {
888
957
  *
889
958
  * @example
890
959
  * ```typescript
891
- * const proofs = await client.getProofDownloadURLs("kyc_abc123");
960
+ * const proofs = await client.getProofDownloadURLs("550e8400-e29b-41d4-a716-446655440000");
892
961
  * proofs.forEach(proof => {
893
962
  * console.log(`${proof.type}: ${proof.url} (expires: ${proof.expires_at})`);
894
963
  * });