vesant-sdk 1.7.0 → 1.7.1-dev.ec505dc

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 (75) hide show
  1. package/dist/{client-DtH2RLuy.d.ts → client-BY4Quazn.d.ts} +2 -2
  2. package/dist/{client-DF7hlMEz.d.ts → client-C-u9lE8N.d.ts} +34 -46
  3. package/dist/{client-B0qhE2kr.d.mts → client-CX1jcLNZ.d.mts} +2 -2
  4. package/dist/{client-DrjgZoH_.d.mts → client-Yxat9wAO.d.mts} +34 -46
  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 +143 -98
  10. package/dist/compliance/index.js.map +1 -1
  11. package/dist/compliance/index.mjs +143 -98
  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 +69 -8
  16. package/dist/decisions/index.js.map +1 -1
  17. package/dist/decisions/index.mjs +69 -8
  18. package/dist/decisions/index.mjs.map +1 -1
  19. package/dist/geolocation/index.d.mts +68 -7
  20. package/dist/geolocation/index.d.ts +68 -7
  21. package/dist/geolocation/index.js +148 -98
  22. package/dist/geolocation/index.js.map +1 -1
  23. package/dist/geolocation/index.mjs +145 -99
  24. package/dist/geolocation/index.mjs.map +1 -1
  25. package/dist/index-C3zUKydT.d.mts +264 -0
  26. package/dist/index-DSDgS09k.d.ts +264 -0
  27. package/dist/index.d.mts +26 -9
  28. package/dist/index.d.ts +26 -9
  29. package/dist/index.js +316 -127
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +308 -128
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/kyc/core.d.mts +1 -1
  34. package/dist/kyc/core.d.ts +1 -1
  35. package/dist/kyc/core.js +75 -14
  36. package/dist/kyc/core.js.map +1 -1
  37. package/dist/kyc/core.mjs +75 -14
  38. package/dist/kyc/core.mjs.map +1 -1
  39. package/dist/kyc/index.d.mts +4 -4
  40. package/dist/kyc/index.d.ts +4 -4
  41. package/dist/kyc/index.js +75 -14
  42. package/dist/kyc/index.js.map +1 -1
  43. package/dist/kyc/index.mjs +75 -14
  44. package/dist/kyc/index.mjs.map +1 -1
  45. package/dist/react.d.mts +7 -3
  46. package/dist/react.d.ts +7 -3
  47. package/dist/react.js +70 -33
  48. package/dist/react.js.map +1 -1
  49. package/dist/react.mjs +70 -33
  50. package/dist/react.mjs.map +1 -1
  51. package/dist/risk-profile/index.d.mts +1 -1
  52. package/dist/risk-profile/index.d.ts +1 -1
  53. package/dist/risk-profile/index.js +69 -8
  54. package/dist/risk-profile/index.js.map +1 -1
  55. package/dist/risk-profile/index.mjs +69 -8
  56. package/dist/risk-profile/index.mjs.map +1 -1
  57. package/dist/scores/index.d.mts +1 -1
  58. package/dist/scores/index.d.ts +1 -1
  59. package/dist/scores/index.js +69 -8
  60. package/dist/scores/index.js.map +1 -1
  61. package/dist/scores/index.mjs +69 -8
  62. package/dist/scores/index.mjs.map +1 -1
  63. package/dist/tax/index.d.mts +2 -2
  64. package/dist/tax/index.d.ts +2 -2
  65. package/dist/tax/index.js +74 -10
  66. package/dist/tax/index.js.map +1 -1
  67. package/dist/tax/index.mjs +74 -10
  68. package/dist/tax/index.mjs.map +1 -1
  69. package/dist/webhooks/index.d.mts +2 -189
  70. package/dist/webhooks/index.d.ts +2 -189
  71. package/dist/webhooks/index.js +85 -21
  72. package/dist/webhooks/index.js.map +1 -1
  73. package/dist/webhooks/index.mjs +85 -22
  74. package/dist/webhooks/index.mjs.map +1 -1
  75. package/package.json +4 -1
@@ -1,6 +1,6 @@
1
- import { D as DeviceFingerprintRequest, L as LocationVerification, V as ValidateCipherTextResponse, a as LocationRequest, G as GeolocationClient, b as LocationRequestFilters, c as LocationRequestListResponse } from './client-DF7hlMEz.js';
1
+ import { D as DeviceFingerprintRequest, L as LocationVerification, V as ValidateCipherTextResponse, a as LocationRequest, G as GeolocationClient, b as LocationRequestFilters, c as LocationRequestListResponse } from './client-C-u9lE8N.js';
2
2
  import { RiskProfileClient } from './risk-profile/index.js';
3
- import { V as VesantConfig, R as RequestOptions } from './client-BolQlL5e.js';
3
+ import { V as VesantConfig, R as RequestOptions } from './client-q9fN8Hhf.js';
4
4
  import { C as CustomerProfile } from './types-UGyDl1fd.js';
5
5
  import { E as EntityType, B as BlockReason, P as PaginationParams } from './types-CBQRNL-l.js';
6
6
 
@@ -1,4 +1,4 @@
1
- import { L as Logger, B as BaseClient, R as RequestOptions } from './client-BolQlL5e.js';
1
+ import { L as Logger, B as BaseClient, R as RequestOptions } from './client-q9fN8Hhf.js';
2
2
  import { B as BlockReason, P as PaginationParams } from './types-CBQRNL-l.js';
3
3
 
4
4
  interface DeviceFingerprintRequest {
@@ -47,6 +47,8 @@ interface CipherTextPayload {
47
47
  heading?: number;
48
48
  speed?: number;
49
49
  timestamp: number;
50
+ /** Advisory client-side GPS integrity flags; the server weighs these as risk factors. */
51
+ integrity_flags?: string[];
50
52
  };
51
53
  /** Network information */
52
54
  network?: {
@@ -74,9 +76,12 @@ type CipherTextReason = 'registration' | 'login' | 'transaction' | 'interval_che
74
76
  interface CipherTextOptions {
75
77
  /** Reason for collection (required) */
76
78
  reason: CipherTextReason;
77
- /** Public signing key (pk_) for HMAC signing (produces v02 signed cipherText) */
79
+ /**
80
+ * @deprecated No longer used and ignored; envelope validation is handled by the
81
+ * server. This field will be removed in a future release.
82
+ */
78
83
  signingKey?: string;
79
- /** @deprecated Use signingKey instead. API key for HMAC signing (backward compat) */
84
+ /** @deprecated No longer used and ignored; see signingKey. */
80
85
  apiKey?: string;
81
86
  /** Request GPS location (default: false) */
82
87
  requestLocation?: boolean;
@@ -106,6 +111,11 @@ interface CipherTextResult {
106
111
  /** Expiry time for the cipherText */
107
112
  expiresAt: string;
108
113
  }
114
+ /**
115
+ * Honest name for CipherTextResult: a base64 JSON device-signals envelope
116
+ * (not encryption). Prefer this name; `CipherTextResult` remains as an alias.
117
+ */
118
+ type DeviceSignalsEnvelope = CipherTextResult;
109
119
  /**
110
120
  * Decrypted cipherText data (returned by server after validation)
111
121
  */
@@ -227,7 +237,11 @@ interface ValidateCipherTextResponse {
227
237
  };
228
238
  }
229
239
  interface VerifyIPRequest {
230
- ip_address: string;
240
+ /**
241
+ * Optional. Omit to let the server derive the connecting IP — the SDK never
242
+ * asserts the client IP (spoofable, and the server extracts it authoritatively).
243
+ */
244
+ ip_address?: string;
231
245
  user_id: string;
232
246
  event_type: string;
233
247
  device_fingerprint?: DeviceFingerprintRequest;
@@ -483,7 +497,9 @@ interface GeolocationConfigResponse {
483
497
  };
484
498
  /** When true, GPS-verified location overrides anonymizer-based blocking */
485
499
  trust_gps_over_anonymizer: boolean;
486
- /** Public signing key (pk_) for client-side HMAC signing */
500
+ /**
501
+ * @deprecated No longer used by the SDK and ignored if present.
502
+ */
487
503
  signing_key?: string;
488
504
  }
489
505
  interface GeolocationClientConfig {
@@ -624,16 +640,6 @@ interface ResendLocationRequestRequest {
624
640
  email?: string;
625
641
  phone?: string;
626
642
  }
627
- interface WiFiNetwork {
628
- /** MAC address (BSSID) */
629
- macAddress: string;
630
- /** Signal strength in dBm (negative number) */
631
- signalStrength?: number;
632
- /** WiFi channel */
633
- channel?: number;
634
- /** Network name (optional) */
635
- ssid?: string;
636
- }
637
643
  interface LocationCaptureRequest {
638
644
  /** GPS latitude (if available) */
639
645
  latitude?: number;
@@ -641,8 +647,8 @@ interface LocationCaptureRequest {
641
647
  longitude?: number;
642
648
  /** GPS accuracy in meters */
643
649
  accuracy?: number;
644
- /** WiFi networks for positioning (if GPS not available) */
645
- wifi_networks?: WiFiNetwork[];
650
+ /** Advisory client-side GPS integrity flags; the server weighs these as risk factors. */
651
+ integrity_flags?: string[];
646
652
  /** User agent string */
647
653
  user_agent?: string;
648
654
  /** Device metadata */
@@ -662,6 +668,10 @@ interface LocationShareInfo {
662
668
  status: string;
663
669
  is_expired: boolean;
664
670
  is_completed: boolean;
671
+ /**
672
+ * Server-only hint. The web SDK cannot enumerate WiFi networks (no browser API
673
+ * for BSSIDs); this flag is informational and never satisfied client-side.
674
+ */
665
675
  requires_wifi: boolean;
666
676
  }
667
677
  interface LocationCaptureResponse {
@@ -730,8 +740,6 @@ interface UseLocationCaptureOptions {
730
740
  autoFetch?: boolean;
731
741
  /** Auto-request GPS permission on mount */
732
742
  autoRequestGPS?: boolean;
733
- /** Collect WiFi data as fallback (requires explicit permission) */
734
- collectWiFi?: boolean;
735
743
  }
736
744
  interface UseLocationCaptureResult {
737
745
  /** Location share info */
@@ -774,7 +782,6 @@ interface UseLocationCaptureResult {
774
782
  * transient failures gracefully.
775
783
  */
776
784
  declare class GeolocationClient extends BaseClient {
777
- private cachedSigningKey?;
778
785
  constructor(config: GeolocationClientConfig);
779
786
  /**
780
787
  * Verify an IP address and check compliance
@@ -835,15 +842,6 @@ declare class GeolocationClient extends BaseClient {
835
842
  * ```
836
843
  */
837
844
  getGPSConfig(requestOptions?: RequestOptions): Promise<GeolocationConfigResponse>;
838
- /**
839
- * Fetch the signing key from the dedicated authenticated endpoint.
840
- *
841
- * Falls back to getGPSConfig() for backward compatibility with older servers
842
- * that don't expose `/api/v1/geo/signing-key`.
843
- *
844
- * @returns The signing key string, or undefined if unavailable
845
- */
846
- fetchSigningKey(requestOptions?: RequestOptions): Promise<string | undefined>;
847
845
  /**
848
846
  * Validate a cipherText generated by the frontend SDK
849
847
  *
@@ -995,40 +993,30 @@ declare class GeolocationClient extends BaseClient {
995
993
  *
996
994
  * @example
997
995
  * ```typescript
998
- * // Using GPS (preferred)
996
+ * // GPS (the web SDK is GPS + IP only; the server handles the IP fallback)
999
997
  * const result = await client.captureLocation(token, {
1000
998
  * latitude: 37.7749,
1001
999
  * longitude: -122.4194,
1002
1000
  * accuracy: 10
1003
1001
  * });
1004
- *
1005
- * // Using WiFi positioning (fallback)
1006
- * const result = await client.captureLocation(token, {
1007
- * wifi_networks: [
1008
- * { macAddress: "00:11:22:33:44:55", signalStrength: -50 },
1009
- * { macAddress: "AA:BB:CC:DD:EE:FF", signalStrength: -70 }
1010
- * ]
1011
- * });
1012
1002
  * ```
1013
1003
  */
1014
1004
  captureLocation(token: string, capture: LocationCaptureRequest, requestOptions?: RequestOptions): Promise<LocationCaptureResponse>;
1015
1005
  /**
1016
- * Generate a signed cipherText containing device and location data.
1017
- *
1018
- * Automatically passes the client's API key for HMAC signing (v02 format).
1019
- * If no API key is configured, falls back to unsigned v01 format.
1006
+ * Generate a device-signals envelope containing device and location data,
1007
+ * validated by the server.
1020
1008
  *
1021
- * @param options - Options for cipherText generation
1009
+ * @param options - Options for envelope generation
1022
1010
  * @param gpsConfig - Optional GPS config (from getGPSConfig)
1023
- * @returns CipherText result with the signed string
1011
+ * @returns The device-signals envelope result
1024
1012
  *
1025
1013
  * @example
1026
1014
  * ```typescript
1027
1015
  * const result = await client.generateCipherText({ reason: 'login' });
1028
- * console.log(result.cipherText); // v02 signed cipherText
1016
+ * console.log(result.cipherText); // device-signals envelope
1029
1017
  * ```
1030
1018
  */
1031
1019
  generateCipherText(options: Omit<CipherTextOptions, 'apiKey' | 'signingKey'>, gpsConfig?: GeolocationConfigResponse): Promise<CipherTextResult>;
1032
1020
  }
1033
1021
 
1034
- export { type UseLocationRequestsResult as $, type APIError as A, type GeolocationClientConfig as B, type CipherTextCustomerData as C, type DeviceFingerprintRequest as D, type GeolocationConfigResponse as E, type GeolocationRecord as F, GeolocationClient as G, type LocationCaptureRequest as H, type LocationCaptureResponse as I, type JurisdictionConfig as J, type LocationRequestChannel as K, type LocationVerification as L, type LocationRequestResult as M, type LocationRequestStatus as N, type LocationShareInfo as O, type UpdateGeofenceRuleRequest as P, type UpdateJurisdictionRequest as Q, type ResendLocationRequestRequest as R, type UseAlertsOptions as S, type UseAlertsResult as T, type UpdateDeviceTrustRequest as U, type ValidateCipherTextResponse as V, type UseGeolocationOptions as W, type UseGeolocationResult as X, type UseLocationCaptureOptions as Y, type UseLocationCaptureResult as Z, type UseLocationRequestsOptions as _, type LocationRequest as a, type ValidateCipherTextRequest as a0, type VerifyIPRequest as a1, type WiFiNetwork as a2, type LocationRequestFilters as b, type LocationRequestListResponse as c, type AlertFilters as d, type AlertListResponse as e, type AlertSeverity as f, type AlertStatus as g, type AlertType as h, type CipherTextOptions as i, type CipherTextPayload as j, type CipherTextReason as k, type CipherTextResult as l, type ComplianceCheckResponse as m, type CreateGeofenceRuleRequest as n, type CreateJurisdictionRequest as o, type CreateLocationRequestRequest as p, type DashboardMetrics as q, type DecryptedCipherText as r, type DeviceFingerprint as s, type DeviceTrustResult as t, type GeoIPResult as u, type GeofenceAction as v, type GeofenceEvaluation as w, type GeofenceRule as x, type GeofenceRuleType as y, type GeolocationAlert as z };
1022
+ export { type UseLocationRequestsOptions as $, type APIError as A, type GeolocationAlert as B, type CipherTextCustomerData as C, type DeviceFingerprintRequest as D, type GeolocationClientConfig as E, type GeolocationConfigResponse as F, GeolocationClient as G, type GeolocationRecord as H, type LocationCaptureRequest as I, type JurisdictionConfig as J, type LocationCaptureResponse as K, type LocationVerification as L, type LocationRequestChannel as M, type LocationRequestResult as N, type LocationRequestStatus as O, type LocationShareInfo as P, type UpdateGeofenceRuleRequest as Q, type ResendLocationRequestRequest as R, type UpdateJurisdictionRequest as S, type UseAlertsOptions as T, type UpdateDeviceTrustRequest as U, type ValidateCipherTextResponse as V, type UseAlertsResult as W, type UseGeolocationOptions as X, type UseGeolocationResult as Y, type UseLocationCaptureOptions as Z, type UseLocationCaptureResult as _, type LocationRequest as a, type UseLocationRequestsResult as a0, type ValidateCipherTextRequest as a1, type VerifyIPRequest as a2, type LocationRequestFilters as b, type LocationRequestListResponse as c, type AlertFilters as d, type AlertListResponse as e, type AlertSeverity as f, type AlertStatus as g, type AlertType as h, type CipherTextOptions as i, type CipherTextPayload as j, type CipherTextReason as k, type CipherTextResult as l, type ComplianceCheckResponse as m, type CreateGeofenceRuleRequest as n, type CreateJurisdictionRequest as o, type CreateLocationRequestRequest as p, type DashboardMetrics as q, type DecryptedCipherText as r, type DeviceFingerprint as s, type DeviceSignalsEnvelope as t, type DeviceTrustResult as u, type GeoIPResult as v, type GeofenceAction as w, type GeofenceEvaluation as x, type GeofenceRule as y, type GeofenceRuleType as z };
@@ -1,6 +1,6 @@
1
- import { D as DeviceFingerprintRequest, L as LocationVerification, V as ValidateCipherTextResponse, a as LocationRequest, G as GeolocationClient, b as LocationRequestFilters, c as LocationRequestListResponse } from './client-DrjgZoH_.mjs';
1
+ import { D as DeviceFingerprintRequest, L as LocationVerification, V as ValidateCipherTextResponse, a as LocationRequest, G as GeolocationClient, b as LocationRequestFilters, c as LocationRequestListResponse } from './client-Yxat9wAO.mjs';
2
2
  import { RiskProfileClient } from './risk-profile/index.mjs';
3
- import { V as VesantConfig, R as RequestOptions } from './client-BolQlL5e.mjs';
3
+ import { V as VesantConfig, R as RequestOptions } from './client-q9fN8Hhf.mjs';
4
4
  import { C as CustomerProfile } from './types-BOFaMQxI.mjs';
5
5
  import { E as EntityType, B as BlockReason, P as PaginationParams } from './types-CBQRNL-l.mjs';
6
6
 
@@ -1,4 +1,4 @@
1
- import { L as Logger, B as BaseClient, R as RequestOptions } from './client-BolQlL5e.mjs';
1
+ import { L as Logger, B as BaseClient, R as RequestOptions } from './client-q9fN8Hhf.mjs';
2
2
  import { B as BlockReason, P as PaginationParams } from './types-CBQRNL-l.mjs';
3
3
 
4
4
  interface DeviceFingerprintRequest {
@@ -47,6 +47,8 @@ interface CipherTextPayload {
47
47
  heading?: number;
48
48
  speed?: number;
49
49
  timestamp: number;
50
+ /** Advisory client-side GPS integrity flags; the server weighs these as risk factors. */
51
+ integrity_flags?: string[];
50
52
  };
51
53
  /** Network information */
52
54
  network?: {
@@ -74,9 +76,12 @@ type CipherTextReason = 'registration' | 'login' | 'transaction' | 'interval_che
74
76
  interface CipherTextOptions {
75
77
  /** Reason for collection (required) */
76
78
  reason: CipherTextReason;
77
- /** Public signing key (pk_) for HMAC signing (produces v02 signed cipherText) */
79
+ /**
80
+ * @deprecated No longer used and ignored; envelope validation is handled by the
81
+ * server. This field will be removed in a future release.
82
+ */
78
83
  signingKey?: string;
79
- /** @deprecated Use signingKey instead. API key for HMAC signing (backward compat) */
84
+ /** @deprecated No longer used and ignored; see signingKey. */
80
85
  apiKey?: string;
81
86
  /** Request GPS location (default: false) */
82
87
  requestLocation?: boolean;
@@ -106,6 +111,11 @@ interface CipherTextResult {
106
111
  /** Expiry time for the cipherText */
107
112
  expiresAt: string;
108
113
  }
114
+ /**
115
+ * Honest name for CipherTextResult: a base64 JSON device-signals envelope
116
+ * (not encryption). Prefer this name; `CipherTextResult` remains as an alias.
117
+ */
118
+ type DeviceSignalsEnvelope = CipherTextResult;
109
119
  /**
110
120
  * Decrypted cipherText data (returned by server after validation)
111
121
  */
@@ -227,7 +237,11 @@ interface ValidateCipherTextResponse {
227
237
  };
228
238
  }
229
239
  interface VerifyIPRequest {
230
- ip_address: string;
240
+ /**
241
+ * Optional. Omit to let the server derive the connecting IP — the SDK never
242
+ * asserts the client IP (spoofable, and the server extracts it authoritatively).
243
+ */
244
+ ip_address?: string;
231
245
  user_id: string;
232
246
  event_type: string;
233
247
  device_fingerprint?: DeviceFingerprintRequest;
@@ -483,7 +497,9 @@ interface GeolocationConfigResponse {
483
497
  };
484
498
  /** When true, GPS-verified location overrides anonymizer-based blocking */
485
499
  trust_gps_over_anonymizer: boolean;
486
- /** Public signing key (pk_) for client-side HMAC signing */
500
+ /**
501
+ * @deprecated No longer used by the SDK and ignored if present.
502
+ */
487
503
  signing_key?: string;
488
504
  }
489
505
  interface GeolocationClientConfig {
@@ -624,16 +640,6 @@ interface ResendLocationRequestRequest {
624
640
  email?: string;
625
641
  phone?: string;
626
642
  }
627
- interface WiFiNetwork {
628
- /** MAC address (BSSID) */
629
- macAddress: string;
630
- /** Signal strength in dBm (negative number) */
631
- signalStrength?: number;
632
- /** WiFi channel */
633
- channel?: number;
634
- /** Network name (optional) */
635
- ssid?: string;
636
- }
637
643
  interface LocationCaptureRequest {
638
644
  /** GPS latitude (if available) */
639
645
  latitude?: number;
@@ -641,8 +647,8 @@ interface LocationCaptureRequest {
641
647
  longitude?: number;
642
648
  /** GPS accuracy in meters */
643
649
  accuracy?: number;
644
- /** WiFi networks for positioning (if GPS not available) */
645
- wifi_networks?: WiFiNetwork[];
650
+ /** Advisory client-side GPS integrity flags; the server weighs these as risk factors. */
651
+ integrity_flags?: string[];
646
652
  /** User agent string */
647
653
  user_agent?: string;
648
654
  /** Device metadata */
@@ -662,6 +668,10 @@ interface LocationShareInfo {
662
668
  status: string;
663
669
  is_expired: boolean;
664
670
  is_completed: boolean;
671
+ /**
672
+ * Server-only hint. The web SDK cannot enumerate WiFi networks (no browser API
673
+ * for BSSIDs); this flag is informational and never satisfied client-side.
674
+ */
665
675
  requires_wifi: boolean;
666
676
  }
667
677
  interface LocationCaptureResponse {
@@ -730,8 +740,6 @@ interface UseLocationCaptureOptions {
730
740
  autoFetch?: boolean;
731
741
  /** Auto-request GPS permission on mount */
732
742
  autoRequestGPS?: boolean;
733
- /** Collect WiFi data as fallback (requires explicit permission) */
734
- collectWiFi?: boolean;
735
743
  }
736
744
  interface UseLocationCaptureResult {
737
745
  /** Location share info */
@@ -774,7 +782,6 @@ interface UseLocationCaptureResult {
774
782
  * transient failures gracefully.
775
783
  */
776
784
  declare class GeolocationClient extends BaseClient {
777
- private cachedSigningKey?;
778
785
  constructor(config: GeolocationClientConfig);
779
786
  /**
780
787
  * Verify an IP address and check compliance
@@ -835,15 +842,6 @@ declare class GeolocationClient extends BaseClient {
835
842
  * ```
836
843
  */
837
844
  getGPSConfig(requestOptions?: RequestOptions): Promise<GeolocationConfigResponse>;
838
- /**
839
- * Fetch the signing key from the dedicated authenticated endpoint.
840
- *
841
- * Falls back to getGPSConfig() for backward compatibility with older servers
842
- * that don't expose `/api/v1/geo/signing-key`.
843
- *
844
- * @returns The signing key string, or undefined if unavailable
845
- */
846
- fetchSigningKey(requestOptions?: RequestOptions): Promise<string | undefined>;
847
845
  /**
848
846
  * Validate a cipherText generated by the frontend SDK
849
847
  *
@@ -995,40 +993,30 @@ declare class GeolocationClient extends BaseClient {
995
993
  *
996
994
  * @example
997
995
  * ```typescript
998
- * // Using GPS (preferred)
996
+ * // GPS (the web SDK is GPS + IP only; the server handles the IP fallback)
999
997
  * const result = await client.captureLocation(token, {
1000
998
  * latitude: 37.7749,
1001
999
  * longitude: -122.4194,
1002
1000
  * accuracy: 10
1003
1001
  * });
1004
- *
1005
- * // Using WiFi positioning (fallback)
1006
- * const result = await client.captureLocation(token, {
1007
- * wifi_networks: [
1008
- * { macAddress: "00:11:22:33:44:55", signalStrength: -50 },
1009
- * { macAddress: "AA:BB:CC:DD:EE:FF", signalStrength: -70 }
1010
- * ]
1011
- * });
1012
1002
  * ```
1013
1003
  */
1014
1004
  captureLocation(token: string, capture: LocationCaptureRequest, requestOptions?: RequestOptions): Promise<LocationCaptureResponse>;
1015
1005
  /**
1016
- * Generate a signed cipherText containing device and location data.
1017
- *
1018
- * Automatically passes the client's API key for HMAC signing (v02 format).
1019
- * If no API key is configured, falls back to unsigned v01 format.
1006
+ * Generate a device-signals envelope containing device and location data,
1007
+ * validated by the server.
1020
1008
  *
1021
- * @param options - Options for cipherText generation
1009
+ * @param options - Options for envelope generation
1022
1010
  * @param gpsConfig - Optional GPS config (from getGPSConfig)
1023
- * @returns CipherText result with the signed string
1011
+ * @returns The device-signals envelope result
1024
1012
  *
1025
1013
  * @example
1026
1014
  * ```typescript
1027
1015
  * const result = await client.generateCipherText({ reason: 'login' });
1028
- * console.log(result.cipherText); // v02 signed cipherText
1016
+ * console.log(result.cipherText); // device-signals envelope
1029
1017
  * ```
1030
1018
  */
1031
1019
  generateCipherText(options: Omit<CipherTextOptions, 'apiKey' | 'signingKey'>, gpsConfig?: GeolocationConfigResponse): Promise<CipherTextResult>;
1032
1020
  }
1033
1021
 
1034
- export { type UseLocationRequestsResult as $, type APIError as A, type GeolocationClientConfig as B, type CipherTextCustomerData as C, type DeviceFingerprintRequest as D, type GeolocationConfigResponse as E, type GeolocationRecord as F, GeolocationClient as G, type LocationCaptureRequest as H, type LocationCaptureResponse as I, type JurisdictionConfig as J, type LocationRequestChannel as K, type LocationVerification as L, type LocationRequestResult as M, type LocationRequestStatus as N, type LocationShareInfo as O, type UpdateGeofenceRuleRequest as P, type UpdateJurisdictionRequest as Q, type ResendLocationRequestRequest as R, type UseAlertsOptions as S, type UseAlertsResult as T, type UpdateDeviceTrustRequest as U, type ValidateCipherTextResponse as V, type UseGeolocationOptions as W, type UseGeolocationResult as X, type UseLocationCaptureOptions as Y, type UseLocationCaptureResult as Z, type UseLocationRequestsOptions as _, type LocationRequest as a, type ValidateCipherTextRequest as a0, type VerifyIPRequest as a1, type WiFiNetwork as a2, type LocationRequestFilters as b, type LocationRequestListResponse as c, type AlertFilters as d, type AlertListResponse as e, type AlertSeverity as f, type AlertStatus as g, type AlertType as h, type CipherTextOptions as i, type CipherTextPayload as j, type CipherTextReason as k, type CipherTextResult as l, type ComplianceCheckResponse as m, type CreateGeofenceRuleRequest as n, type CreateJurisdictionRequest as o, type CreateLocationRequestRequest as p, type DashboardMetrics as q, type DecryptedCipherText as r, type DeviceFingerprint as s, type DeviceTrustResult as t, type GeoIPResult as u, type GeofenceAction as v, type GeofenceEvaluation as w, type GeofenceRule as x, type GeofenceRuleType as y, type GeolocationAlert as z };
1022
+ export { type UseLocationRequestsOptions as $, type APIError as A, type GeolocationAlert as B, type CipherTextCustomerData as C, type DeviceFingerprintRequest as D, type GeolocationClientConfig as E, type GeolocationConfigResponse as F, GeolocationClient as G, type GeolocationRecord as H, type LocationCaptureRequest as I, type JurisdictionConfig as J, type LocationCaptureResponse as K, type LocationVerification as L, type LocationRequestChannel as M, type LocationRequestResult as N, type LocationRequestStatus as O, type LocationShareInfo as P, type UpdateGeofenceRuleRequest as Q, type ResendLocationRequestRequest as R, type UpdateJurisdictionRequest as S, type UseAlertsOptions as T, type UpdateDeviceTrustRequest as U, type ValidateCipherTextResponse as V, type UseAlertsResult as W, type UseGeolocationOptions as X, type UseGeolocationResult as Y, type UseLocationCaptureOptions as Z, type UseLocationCaptureResult as _, type LocationRequest as a, type UseLocationRequestsResult as a0, type ValidateCipherTextRequest as a1, type VerifyIPRequest as a2, type LocationRequestFilters as b, type LocationRequestListResponse as c, type AlertFilters as d, type AlertListResponse as e, type AlertSeverity as f, type AlertStatus as g, type AlertType as h, type CipherTextOptions as i, type CipherTextPayload as j, type CipherTextReason as k, type CipherTextResult as l, type ComplianceCheckResponse as m, type CreateGeofenceRuleRequest as n, type CreateJurisdictionRequest as o, type CreateLocationRequestRequest as p, type DashboardMetrics as q, type DecryptedCipherText as r, type DeviceFingerprint as s, type DeviceSignalsEnvelope as t, type DeviceTrustResult as u, type GeoIPResult as v, type GeofenceAction as w, type GeofenceEvaluation as x, type GeofenceRule as y, type GeofenceRuleType as z };
@@ -50,6 +50,80 @@ declare class CircuitBreaker {
50
50
  reset(): void;
51
51
  }
52
52
 
53
+ /**
54
+ * Pluggable authentication for BaseClient.
55
+ *
56
+ * A TokenProvider supplies the credential used for the Authorization header on
57
+ * every request, resolved per-request (async) so callers can source short-lived
58
+ * or rotating credentials (OAuth2 client-credentials, STS, Vault / Secrets
59
+ * Manager) instead of a single static API key. The default StaticApiKeyProvider
60
+ * preserves the original `apiKey` behavior with zero change for existing callers.
61
+ */
62
+ interface AuthCredential {
63
+ /** Authorization scheme (e.g. 'Bearer'); defaults to 'Bearer' when omitted. */
64
+ scheme?: string;
65
+ /** The credential value (bearer token / API key). */
66
+ token: string;
67
+ }
68
+ interface TokenProviderContext {
69
+ tenantId: string;
70
+ requestId: string;
71
+ /** When true, bypass any cache and obtain a fresh credential (e.g. after a 401). */
72
+ forceRefresh?: boolean;
73
+ }
74
+ interface TokenProvider {
75
+ /** Resolve the credential for a request, or null to send no Authorization header. */
76
+ getCredential(ctx: TokenProviderContext): Promise<AuthCredential | null>;
77
+ /** Whether this provider can obtain a fresh credential on demand (drives 401 retry). */
78
+ canRefresh?(): boolean;
79
+ }
80
+ /**
81
+ * Default provider: wraps a static API key. Returns null when the key is empty
82
+ * so the client sends no Authorization header, matching the pre-provider behavior.
83
+ */
84
+ declare class StaticApiKeyProvider implements TokenProvider {
85
+ private readonly apiKey;
86
+ constructor(apiKey: string);
87
+ getCredential(): Promise<AuthCredential | null>;
88
+ canRefresh(): boolean;
89
+ }
90
+ interface CachedToken {
91
+ token: string;
92
+ expiresAt?: number;
93
+ }
94
+ interface RefreshingTokenProviderOptions {
95
+ /** Fetches a fresh token. `expiresAt` is epoch milliseconds (optional). */
96
+ fetchToken: () => Promise<CachedToken>;
97
+ /** Refresh this many ms before expiry (default: 30_000). */
98
+ skewMs?: number;
99
+ /** Authorization scheme to emit (default: 'Bearer'). */
100
+ scheme?: string;
101
+ /** Observe each successful (re)fetch — for logging / metrics. */
102
+ onRotate?: (meta: {
103
+ expiresAt?: number;
104
+ }) => void;
105
+ /** Injectable clock (default: Date.now). */
106
+ now?: () => number;
107
+ }
108
+ /**
109
+ * Caches a fetched token and refreshes it when it is within the skew window of
110
+ * expiry or when `forceRefresh` is requested. Concurrent refreshes are de-duped
111
+ * into a single in-flight fetch.
112
+ */
113
+ declare class RefreshingTokenProvider implements TokenProvider {
114
+ private readonly opts;
115
+ private cached;
116
+ private inFlight;
117
+ private readonly skewMs;
118
+ private readonly scheme;
119
+ private readonly now;
120
+ constructor(opts: RefreshingTokenProviderOptions);
121
+ canRefresh(): boolean;
122
+ getCredential(ctx?: TokenProviderContext): Promise<AuthCredential | null>;
123
+ private isExpiring;
124
+ private refresh;
125
+ }
126
+
53
127
  /**
54
128
  * Configuration types for Vesant SDK clients
55
129
  */
@@ -82,6 +156,16 @@ interface BaseClientConfig {
82
156
  tenantId: string;
83
157
  /** Optional API key for authentication */
84
158
  apiKey?: string;
159
+ /**
160
+ * Pluggable auth token provider. When set, it supplies the Authorization
161
+ * credential per-request (overriding `apiKey`), enabling OAuth2 / STS / rotating
162
+ * secrets and single-shot 401 re-auth. Defaults to a static-apiKey provider.
163
+ */
164
+ authProvider?: TokenProvider;
165
+ /** Observe credential rotation triggered by a 401 re-auth (logging / metrics). */
166
+ onCredentialRotated?: (meta: {
167
+ reason: string;
168
+ }) => void;
85
169
  /** Custom headers to include in all requests */
86
170
  headers?: Record<string, string>;
87
171
  /** Request timeout in milliseconds (default: 10000) */
@@ -108,6 +192,16 @@ interface VesantConfig {
108
192
  tenantId: string;
109
193
  /** Optional API key for authentication */
110
194
  apiKey?: string;
195
+ /**
196
+ * Pluggable auth token provider. When set, it supplies the Authorization
197
+ * credential per-request (overriding `apiKey`), enabling OAuth2 / STS / rotating
198
+ * secrets and single-shot 401 re-auth. Defaults to a static-apiKey provider.
199
+ */
200
+ authProvider?: TokenProvider;
201
+ /** Observe credential rotation triggered by a 401 re-auth (logging / metrics). */
202
+ onCredentialRotated?: (meta: {
203
+ reason: string;
204
+ }) => void;
111
205
  /** Custom headers to include in all requests */
112
206
  headers?: Record<string, string>;
113
207
  /** Request timeout in milliseconds (default: 10000) */
@@ -195,7 +289,15 @@ declare abstract class BaseClient {
195
289
  private interceptors;
196
290
  private circuitBreaker;
197
291
  private rateLimitTracker;
292
+ private authProvider;
198
293
  constructor(config: BaseClientConfig);
294
+ /**
295
+ * Resolve the Idempotency-Key for a request. Mutating methods (POST/PUT/PATCH)
296
+ * get the caller-supplied key or a freshly minted UUID; non-mutating methods get
297
+ * none. requestWithRetry resolves this once and injects it so every retry reuses
298
+ * one key (letting the server dedup replays); a direct request() resolves per call.
299
+ */
300
+ private resolveIdempotencyKey;
199
301
  /**
200
302
  * Make an HTTP request with timeout and error handling
201
303
  */
@@ -237,4 +339,4 @@ declare abstract class BaseClient {
237
339
  }>;
238
340
  }
239
341
 
240
- export { BaseClient as B, type CGSConfig as C, type Logger as L, type RequestOptions as R, type VesantConfig as V, type BaseClientConfig as a, CircuitBreaker as b, type CircuitBreakerConfig as c, type CircuitBreakerState as d, type CircuitBreakerStatus as e, type RateLimitStatus as f, RateLimitTracker as g, type RequestInterceptor as h, type RequiredBaseClientConfig as i, type RequiredCGSConfig as j, type RequiredVesantConfig as k };
342
+ export { type AuthCredential as A, BaseClient as B, type CGSConfig as C, type Logger as L, type RequestOptions as R, StaticApiKeyProvider as S, type TokenProvider as T, type VesantConfig as V, type BaseClientConfig as a, CircuitBreaker as b, type CircuitBreakerConfig as c, type CircuitBreakerState as d, type CircuitBreakerStatus as e, type RateLimitStatus as f, RateLimitTracker as g, RefreshingTokenProvider as h, type RefreshingTokenProviderOptions as i, type RequestInterceptor as j, type RequiredBaseClientConfig as k, type RequiredCGSConfig as l, type RequiredVesantConfig as m, type TokenProviderContext as n };
@@ -50,6 +50,80 @@ declare class CircuitBreaker {
50
50
  reset(): void;
51
51
  }
52
52
 
53
+ /**
54
+ * Pluggable authentication for BaseClient.
55
+ *
56
+ * A TokenProvider supplies the credential used for the Authorization header on
57
+ * every request, resolved per-request (async) so callers can source short-lived
58
+ * or rotating credentials (OAuth2 client-credentials, STS, Vault / Secrets
59
+ * Manager) instead of a single static API key. The default StaticApiKeyProvider
60
+ * preserves the original `apiKey` behavior with zero change for existing callers.
61
+ */
62
+ interface AuthCredential {
63
+ /** Authorization scheme (e.g. 'Bearer'); defaults to 'Bearer' when omitted. */
64
+ scheme?: string;
65
+ /** The credential value (bearer token / API key). */
66
+ token: string;
67
+ }
68
+ interface TokenProviderContext {
69
+ tenantId: string;
70
+ requestId: string;
71
+ /** When true, bypass any cache and obtain a fresh credential (e.g. after a 401). */
72
+ forceRefresh?: boolean;
73
+ }
74
+ interface TokenProvider {
75
+ /** Resolve the credential for a request, or null to send no Authorization header. */
76
+ getCredential(ctx: TokenProviderContext): Promise<AuthCredential | null>;
77
+ /** Whether this provider can obtain a fresh credential on demand (drives 401 retry). */
78
+ canRefresh?(): boolean;
79
+ }
80
+ /**
81
+ * Default provider: wraps a static API key. Returns null when the key is empty
82
+ * so the client sends no Authorization header, matching the pre-provider behavior.
83
+ */
84
+ declare class StaticApiKeyProvider implements TokenProvider {
85
+ private readonly apiKey;
86
+ constructor(apiKey: string);
87
+ getCredential(): Promise<AuthCredential | null>;
88
+ canRefresh(): boolean;
89
+ }
90
+ interface CachedToken {
91
+ token: string;
92
+ expiresAt?: number;
93
+ }
94
+ interface RefreshingTokenProviderOptions {
95
+ /** Fetches a fresh token. `expiresAt` is epoch milliseconds (optional). */
96
+ fetchToken: () => Promise<CachedToken>;
97
+ /** Refresh this many ms before expiry (default: 30_000). */
98
+ skewMs?: number;
99
+ /** Authorization scheme to emit (default: 'Bearer'). */
100
+ scheme?: string;
101
+ /** Observe each successful (re)fetch — for logging / metrics. */
102
+ onRotate?: (meta: {
103
+ expiresAt?: number;
104
+ }) => void;
105
+ /** Injectable clock (default: Date.now). */
106
+ now?: () => number;
107
+ }
108
+ /**
109
+ * Caches a fetched token and refreshes it when it is within the skew window of
110
+ * expiry or when `forceRefresh` is requested. Concurrent refreshes are de-duped
111
+ * into a single in-flight fetch.
112
+ */
113
+ declare class RefreshingTokenProvider implements TokenProvider {
114
+ private readonly opts;
115
+ private cached;
116
+ private inFlight;
117
+ private readonly skewMs;
118
+ private readonly scheme;
119
+ private readonly now;
120
+ constructor(opts: RefreshingTokenProviderOptions);
121
+ canRefresh(): boolean;
122
+ getCredential(ctx?: TokenProviderContext): Promise<AuthCredential | null>;
123
+ private isExpiring;
124
+ private refresh;
125
+ }
126
+
53
127
  /**
54
128
  * Configuration types for Vesant SDK clients
55
129
  */
@@ -82,6 +156,16 @@ interface BaseClientConfig {
82
156
  tenantId: string;
83
157
  /** Optional API key for authentication */
84
158
  apiKey?: string;
159
+ /**
160
+ * Pluggable auth token provider. When set, it supplies the Authorization
161
+ * credential per-request (overriding `apiKey`), enabling OAuth2 / STS / rotating
162
+ * secrets and single-shot 401 re-auth. Defaults to a static-apiKey provider.
163
+ */
164
+ authProvider?: TokenProvider;
165
+ /** Observe credential rotation triggered by a 401 re-auth (logging / metrics). */
166
+ onCredentialRotated?: (meta: {
167
+ reason: string;
168
+ }) => void;
85
169
  /** Custom headers to include in all requests */
86
170
  headers?: Record<string, string>;
87
171
  /** Request timeout in milliseconds (default: 10000) */
@@ -108,6 +192,16 @@ interface VesantConfig {
108
192
  tenantId: string;
109
193
  /** Optional API key for authentication */
110
194
  apiKey?: string;
195
+ /**
196
+ * Pluggable auth token provider. When set, it supplies the Authorization
197
+ * credential per-request (overriding `apiKey`), enabling OAuth2 / STS / rotating
198
+ * secrets and single-shot 401 re-auth. Defaults to a static-apiKey provider.
199
+ */
200
+ authProvider?: TokenProvider;
201
+ /** Observe credential rotation triggered by a 401 re-auth (logging / metrics). */
202
+ onCredentialRotated?: (meta: {
203
+ reason: string;
204
+ }) => void;
111
205
  /** Custom headers to include in all requests */
112
206
  headers?: Record<string, string>;
113
207
  /** Request timeout in milliseconds (default: 10000) */
@@ -195,7 +289,15 @@ declare abstract class BaseClient {
195
289
  private interceptors;
196
290
  private circuitBreaker;
197
291
  private rateLimitTracker;
292
+ private authProvider;
198
293
  constructor(config: BaseClientConfig);
294
+ /**
295
+ * Resolve the Idempotency-Key for a request. Mutating methods (POST/PUT/PATCH)
296
+ * get the caller-supplied key or a freshly minted UUID; non-mutating methods get
297
+ * none. requestWithRetry resolves this once and injects it so every retry reuses
298
+ * one key (letting the server dedup replays); a direct request() resolves per call.
299
+ */
300
+ private resolveIdempotencyKey;
199
301
  /**
200
302
  * Make an HTTP request with timeout and error handling
201
303
  */
@@ -237,4 +339,4 @@ declare abstract class BaseClient {
237
339
  }>;
238
340
  }
239
341
 
240
- export { BaseClient as B, type CGSConfig as C, type Logger as L, type RequestOptions as R, type VesantConfig as V, type BaseClientConfig as a, CircuitBreaker as b, type CircuitBreakerConfig as c, type CircuitBreakerState as d, type CircuitBreakerStatus as e, type RateLimitStatus as f, RateLimitTracker as g, type RequestInterceptor as h, type RequiredBaseClientConfig as i, type RequiredCGSConfig as j, type RequiredVesantConfig as k };
342
+ export { type AuthCredential as A, BaseClient as B, type CGSConfig as C, type Logger as L, type RequestOptions as R, StaticApiKeyProvider as S, type TokenProvider as T, type VesantConfig as V, type BaseClientConfig as a, CircuitBreaker as b, type CircuitBreakerConfig as c, type CircuitBreakerState as d, type CircuitBreakerStatus as e, type RateLimitStatus as f, RateLimitTracker as g, RefreshingTokenProvider as h, type RefreshingTokenProviderOptions as i, type RequestInterceptor as j, type RequiredBaseClientConfig as k, type RequiredCGSConfig as l, type RequiredVesantConfig as m, type TokenProviderContext as n };