@kwik-id/sdk-react-native 0.0.0-stage → 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +81 -2
  3. package/app.plugin.js +40 -0
  4. package/lib/commonjs/api/api-client.js +213 -0
  5. package/lib/commonjs/api/api-client.js.map +1 -0
  6. package/lib/commonjs/api/api-error.js +29 -0
  7. package/lib/commonjs/api/api-error.js.map +1 -0
  8. package/lib/commonjs/api/index.js +33 -0
  9. package/lib/commonjs/api/index.js.map +1 -0
  10. package/lib/commonjs/api/upload.js +74 -0
  11. package/lib/commonjs/api/upload.js.map +1 -0
  12. package/lib/commonjs/camera/camera-view.js +227 -0
  13. package/lib/commonjs/camera/camera-view.js.map +1 -0
  14. package/lib/commonjs/camera/index.js +20 -0
  15. package/lib/commonjs/camera/index.js.map +1 -0
  16. package/lib/commonjs/camera/photo-capture.js +50 -0
  17. package/lib/commonjs/camera/photo-capture.js.map +1 -0
  18. package/lib/commonjs/crypto/fingerprint.js +43 -0
  19. package/lib/commonjs/crypto/fingerprint.js.map +1 -0
  20. package/lib/commonjs/crypto/hmac.js +150 -0
  21. package/lib/commonjs/crypto/hmac.js.map +1 -0
  22. package/lib/commonjs/crypto/index.js +39 -0
  23. package/lib/commonjs/crypto/index.js.map +1 -0
  24. package/lib/commonjs/crypto/session-manager.js +173 -0
  25. package/lib/commonjs/crypto/session-manager.js.map +1 -0
  26. package/lib/commonjs/i18n/en.js +297 -0
  27. package/lib/commonjs/i18n/en.js.map +1 -0
  28. package/lib/commonjs/i18n/fr.js +294 -0
  29. package/lib/commonjs/i18n/fr.js.map +1 -0
  30. package/lib/commonjs/i18n/index.js +34 -0
  31. package/lib/commonjs/i18n/index.js.map +1 -0
  32. package/lib/commonjs/i18n/locale.js +20 -0
  33. package/lib/commonjs/i18n/locale.js.map +1 -0
  34. package/lib/commonjs/i18n/translator.js +37 -0
  35. package/lib/commonjs/i18n/translator.js.map +1 -0
  36. package/lib/commonjs/index.js +187 -0
  37. package/lib/commonjs/index.js.map +1 -0
  38. package/lib/commonjs/lib/device-detector.js +34 -0
  39. package/lib/commonjs/lib/device-detector.js.map +1 -0
  40. package/lib/commonjs/lib/event-emitter.js +85 -0
  41. package/lib/commonjs/lib/event-emitter.js.map +1 -0
  42. package/lib/commonjs/lib/index.js +63 -0
  43. package/lib/commonjs/lib/index.js.map +1 -0
  44. package/lib/commonjs/lib/kwik-id-rn-sdk.js +156 -0
  45. package/lib/commonjs/lib/kwik-id-rn-sdk.js.map +1 -0
  46. package/lib/commonjs/lib/verification-machine.js +276 -0
  47. package/lib/commonjs/lib/verification-machine.js.map +1 -0
  48. package/lib/commonjs/package.json +1 -0
  49. package/lib/commonjs/types/events.js +6 -0
  50. package/lib/commonjs/types/events.js.map +1 -0
  51. package/lib/commonjs/types/index.js +2 -0
  52. package/lib/commonjs/types/index.js.map +1 -0
  53. package/lib/commonjs/ui/components/KwikIDVerificationModal.js +407 -0
  54. package/lib/commonjs/ui/components/KwikIDVerificationModal.js.map +1 -0
  55. package/lib/commonjs/ui/components/screens.js +338 -0
  56. package/lib/commonjs/ui/components/screens.js.map +1 -0
  57. package/lib/commonjs/ui/context/kwik-id-provider.js +52 -0
  58. package/lib/commonjs/ui/context/kwik-id-provider.js.map +1 -0
  59. package/lib/commonjs/ui/hooks/use-kwik-verification.js +77 -0
  60. package/lib/commonjs/ui/hooks/use-kwik-verification.js.map +1 -0
  61. package/lib/commonjs/ui/index.js +33 -0
  62. package/lib/commonjs/ui/index.js.map +1 -0
  63. package/lib/module/api/api-client.js +208 -0
  64. package/lib/module/api/api-client.js.map +1 -0
  65. package/lib/module/api/api-error.js +24 -0
  66. package/lib/module/api/api-error.js.map +1 -0
  67. package/lib/module/api/index.js +6 -0
  68. package/lib/module/api/index.js.map +1 -0
  69. package/lib/module/api/upload.js +68 -0
  70. package/lib/module/api/upload.js.map +1 -0
  71. package/lib/module/camera/camera-view.js +222 -0
  72. package/lib/module/camera/camera-view.js.map +1 -0
  73. package/lib/module/camera/index.js +5 -0
  74. package/lib/module/camera/index.js.map +1 -0
  75. package/lib/module/camera/photo-capture.js +45 -0
  76. package/lib/module/camera/photo-capture.js.map +1 -0
  77. package/lib/module/crypto/fingerprint.js +37 -0
  78. package/lib/module/crypto/fingerprint.js.map +1 -0
  79. package/lib/module/crypto/hmac.js +143 -0
  80. package/lib/module/crypto/hmac.js.map +1 -0
  81. package/lib/module/crypto/index.js +6 -0
  82. package/lib/module/crypto/index.js.map +1 -0
  83. package/lib/module/crypto/session-manager.js +169 -0
  84. package/lib/module/crypto/session-manager.js.map +1 -0
  85. package/lib/module/i18n/en.js +293 -0
  86. package/lib/module/i18n/en.js.map +1 -0
  87. package/lib/module/i18n/fr.js +290 -0
  88. package/lib/module/i18n/fr.js.map +1 -0
  89. package/lib/module/i18n/index.js +11 -0
  90. package/lib/module/i18n/index.js.map +1 -0
  91. package/lib/module/i18n/locale.js +15 -0
  92. package/lib/module/i18n/locale.js.map +1 -0
  93. package/lib/module/i18n/translator.js +34 -0
  94. package/lib/module/i18n/translator.js.map +1 -0
  95. package/lib/module/index.js +30 -0
  96. package/lib/module/index.js.map +1 -0
  97. package/lib/module/lib/device-detector.js +26 -0
  98. package/lib/module/lib/device-detector.js.map +1 -0
  99. package/lib/module/lib/event-emitter.js +80 -0
  100. package/lib/module/lib/event-emitter.js.map +1 -0
  101. package/lib/module/lib/index.js +6 -0
  102. package/lib/module/lib/index.js.map +1 -0
  103. package/lib/module/lib/kwik-id-rn-sdk.js +150 -0
  104. package/lib/module/lib/kwik-id-rn-sdk.js.map +1 -0
  105. package/lib/module/lib/verification-machine.js +268 -0
  106. package/lib/module/lib/verification-machine.js.map +1 -0
  107. package/lib/module/package.json +1 -0
  108. package/lib/module/types/events.js +4 -0
  109. package/lib/module/types/events.js.map +1 -0
  110. package/lib/module/types/index.js +2 -0
  111. package/lib/module/types/index.js.map +1 -0
  112. package/lib/module/ui/components/KwikIDVerificationModal.js +402 -0
  113. package/lib/module/ui/components/KwikIDVerificationModal.js.map +1 -0
  114. package/lib/module/ui/components/screens.js +328 -0
  115. package/lib/module/ui/components/screens.js.map +1 -0
  116. package/lib/module/ui/context/kwik-id-provider.js +46 -0
  117. package/lib/module/ui/context/kwik-id-provider.js.map +1 -0
  118. package/lib/module/ui/hooks/use-kwik-verification.js +72 -0
  119. package/lib/module/ui/hooks/use-kwik-verification.js.map +1 -0
  120. package/lib/module/ui/index.js +6 -0
  121. package/lib/module/ui/index.js.map +1 -0
  122. package/lib/typescript/commonjs/api/api-client.d.ts +82 -0
  123. package/lib/typescript/commonjs/api/api-client.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/api/api-error.d.ts +13 -0
  125. package/lib/typescript/commonjs/api/api-error.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/api/index.d.ts +6 -0
  127. package/lib/typescript/commonjs/api/index.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/api/upload.d.ts +19 -0
  129. package/lib/typescript/commonjs/api/upload.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/camera/camera-view.d.ts +25 -0
  131. package/lib/typescript/commonjs/camera/camera-view.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/camera/index.d.ts +5 -0
  133. package/lib/typescript/commonjs/camera/index.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/camera/photo-capture.d.ts +9 -0
  135. package/lib/typescript/commonjs/camera/photo-capture.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/crypto/fingerprint.d.ts +3 -0
  137. package/lib/typescript/commonjs/crypto/fingerprint.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/crypto/hmac.d.ts +18 -0
  139. package/lib/typescript/commonjs/crypto/hmac.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/crypto/index.d.ts +4 -0
  141. package/lib/typescript/commonjs/crypto/index.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/crypto/session-manager.d.ts +27 -0
  143. package/lib/typescript/commonjs/crypto/session-manager.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/i18n/en.d.ts +291 -0
  145. package/lib/typescript/commonjs/i18n/en.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/i18n/fr.d.ts +6 -0
  147. package/lib/typescript/commonjs/i18n/fr.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/i18n/index.d.ts +10 -0
  149. package/lib/typescript/commonjs/i18n/index.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/i18n/locale.d.ts +4 -0
  151. package/lib/typescript/commonjs/i18n/locale.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/i18n/translator.d.ts +15 -0
  153. package/lib/typescript/commonjs/i18n/translator.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/index.d.ts +24 -0
  155. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/lib/device-detector.d.ts +5 -0
  157. package/lib/typescript/commonjs/lib/device-detector.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/lib/event-emitter.d.ts +19 -0
  159. package/lib/typescript/commonjs/lib/event-emitter.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/lib/index.d.ts +5 -0
  161. package/lib/typescript/commonjs/lib/index.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/lib/kwik-id-rn-sdk.d.ts +43 -0
  163. package/lib/typescript/commonjs/lib/kwik-id-rn-sdk.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/lib/verification-machine.d.ts +78 -0
  165. package/lib/typescript/commonjs/lib/verification-machine.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/package.json +1 -0
  167. package/lib/typescript/commonjs/types/events.d.ts +94 -0
  168. package/lib/typescript/commonjs/types/events.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/types/index.d.ts +242 -0
  170. package/lib/typescript/commonjs/types/index.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/ui/components/KwikIDVerificationModal.d.ts +21 -0
  172. package/lib/typescript/commonjs/ui/components/KwikIDVerificationModal.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/ui/components/screens.d.ts +46 -0
  174. package/lib/typescript/commonjs/ui/components/screens.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/ui/context/kwik-id-provider.d.ts +19 -0
  176. package/lib/typescript/commonjs/ui/context/kwik-id-provider.d.ts.map +1 -0
  177. package/lib/typescript/commonjs/ui/hooks/use-kwik-verification.d.ts +29 -0
  178. package/lib/typescript/commonjs/ui/hooks/use-kwik-verification.d.ts.map +1 -0
  179. package/lib/typescript/commonjs/ui/index.d.ts +7 -0
  180. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -0
  181. package/lib/typescript/module/api/api-client.d.ts +82 -0
  182. package/lib/typescript/module/api/api-client.d.ts.map +1 -0
  183. package/lib/typescript/module/api/api-error.d.ts +13 -0
  184. package/lib/typescript/module/api/api-error.d.ts.map +1 -0
  185. package/lib/typescript/module/api/index.d.ts +6 -0
  186. package/lib/typescript/module/api/index.d.ts.map +1 -0
  187. package/lib/typescript/module/api/upload.d.ts +19 -0
  188. package/lib/typescript/module/api/upload.d.ts.map +1 -0
  189. package/lib/typescript/module/camera/camera-view.d.ts +25 -0
  190. package/lib/typescript/module/camera/camera-view.d.ts.map +1 -0
  191. package/lib/typescript/module/camera/index.d.ts +5 -0
  192. package/lib/typescript/module/camera/index.d.ts.map +1 -0
  193. package/lib/typescript/module/camera/photo-capture.d.ts +9 -0
  194. package/lib/typescript/module/camera/photo-capture.d.ts.map +1 -0
  195. package/lib/typescript/module/crypto/fingerprint.d.ts +3 -0
  196. package/lib/typescript/module/crypto/fingerprint.d.ts.map +1 -0
  197. package/lib/typescript/module/crypto/hmac.d.ts +18 -0
  198. package/lib/typescript/module/crypto/hmac.d.ts.map +1 -0
  199. package/lib/typescript/module/crypto/index.d.ts +4 -0
  200. package/lib/typescript/module/crypto/index.d.ts.map +1 -0
  201. package/lib/typescript/module/crypto/session-manager.d.ts +27 -0
  202. package/lib/typescript/module/crypto/session-manager.d.ts.map +1 -0
  203. package/lib/typescript/module/i18n/en.d.ts +291 -0
  204. package/lib/typescript/module/i18n/en.d.ts.map +1 -0
  205. package/lib/typescript/module/i18n/fr.d.ts +6 -0
  206. package/lib/typescript/module/i18n/fr.d.ts.map +1 -0
  207. package/lib/typescript/module/i18n/index.d.ts +10 -0
  208. package/lib/typescript/module/i18n/index.d.ts.map +1 -0
  209. package/lib/typescript/module/i18n/locale.d.ts +4 -0
  210. package/lib/typescript/module/i18n/locale.d.ts.map +1 -0
  211. package/lib/typescript/module/i18n/translator.d.ts +15 -0
  212. package/lib/typescript/module/i18n/translator.d.ts.map +1 -0
  213. package/lib/typescript/module/index.d.ts +24 -0
  214. package/lib/typescript/module/index.d.ts.map +1 -0
  215. package/lib/typescript/module/lib/device-detector.d.ts +5 -0
  216. package/lib/typescript/module/lib/device-detector.d.ts.map +1 -0
  217. package/lib/typescript/module/lib/event-emitter.d.ts +19 -0
  218. package/lib/typescript/module/lib/event-emitter.d.ts.map +1 -0
  219. package/lib/typescript/module/lib/index.d.ts +5 -0
  220. package/lib/typescript/module/lib/index.d.ts.map +1 -0
  221. package/lib/typescript/module/lib/kwik-id-rn-sdk.d.ts +43 -0
  222. package/lib/typescript/module/lib/kwik-id-rn-sdk.d.ts.map +1 -0
  223. package/lib/typescript/module/lib/verification-machine.d.ts +78 -0
  224. package/lib/typescript/module/lib/verification-machine.d.ts.map +1 -0
  225. package/lib/typescript/module/package.json +1 -0
  226. package/lib/typescript/module/types/events.d.ts +94 -0
  227. package/lib/typescript/module/types/events.d.ts.map +1 -0
  228. package/lib/typescript/module/types/index.d.ts +242 -0
  229. package/lib/typescript/module/types/index.d.ts.map +1 -0
  230. package/lib/typescript/module/ui/components/KwikIDVerificationModal.d.ts +21 -0
  231. package/lib/typescript/module/ui/components/KwikIDVerificationModal.d.ts.map +1 -0
  232. package/lib/typescript/module/ui/components/screens.d.ts +46 -0
  233. package/lib/typescript/module/ui/components/screens.d.ts.map +1 -0
  234. package/lib/typescript/module/ui/context/kwik-id-provider.d.ts +19 -0
  235. package/lib/typescript/module/ui/context/kwik-id-provider.d.ts.map +1 -0
  236. package/lib/typescript/module/ui/hooks/use-kwik-verification.d.ts +29 -0
  237. package/lib/typescript/module/ui/hooks/use-kwik-verification.d.ts.map +1 -0
  238. package/lib/typescript/module/ui/index.d.ts +7 -0
  239. package/lib/typescript/module/ui/index.d.ts.map +1 -0
  240. package/package.json +121 -3
  241. package/src/api/api-client.ts +319 -0
  242. package/src/api/api-error.ts +28 -0
  243. package/src/api/index.ts +12 -0
  244. package/src/api/upload.ts +87 -0
  245. package/src/camera/camera-view.tsx +217 -0
  246. package/src/camera/index.ts +4 -0
  247. package/src/camera/photo-capture.ts +58 -0
  248. package/src/crypto/fingerprint.ts +46 -0
  249. package/src/crypto/hmac.ts +172 -0
  250. package/src/crypto/index.ts +3 -0
  251. package/src/crypto/session-manager.ts +200 -0
  252. package/src/i18n/en.ts +315 -0
  253. package/src/i18n/fr.ts +325 -0
  254. package/src/i18n/index.ts +9 -0
  255. package/src/i18n/locale.ts +15 -0
  256. package/src/i18n/translator.ts +37 -0
  257. package/src/index.ts +102 -0
  258. package/src/lib/device-detector.ts +32 -0
  259. package/src/lib/event-emitter.ts +90 -0
  260. package/src/lib/index.ts +15 -0
  261. package/src/lib/kwik-id-rn-sdk.ts +160 -0
  262. package/src/lib/verification-machine.ts +273 -0
  263. package/src/types/events.ts +75 -0
  264. package/src/types/index.ts +309 -0
  265. package/src/ui/components/KwikIDVerificationModal.tsx +450 -0
  266. package/src/ui/components/screens.tsx +283 -0
  267. package/src/ui/context/kwik-id-provider.tsx +72 -0
  268. package/src/ui/hooks/use-kwik-verification.ts +121 -0
  269. package/src/ui/index.ts +9 -0
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Canonical types for @kwik-id/sdk-react-native.
3
+ *
4
+ * These are a self-contained, RN-native mirror of the KwikId protocol vocabulary.
5
+ * They are kept structurally compatible with `@kwik-id/sdk-core` via the build-excluded
6
+ * assertions in `./__compat__`. This package has NO runtime dependency on `@kwik-id/*`.
7
+ */
8
+
9
+ // ============================================
10
+ // Configuration
11
+ // ============================================
12
+
13
+ export interface KwikIdTheme {
14
+ primary?: string;
15
+ accent?: string;
16
+ background?: string;
17
+ foreground?: string;
18
+ error?: string;
19
+ success?: string;
20
+ }
21
+
22
+ export type Locale = "en" | "fr";
23
+
24
+ export type LivenessMode = "passive" | "active" | "hybrid";
25
+
26
+ export interface KwikIdConfig {
27
+ /** Session token obtained from your backend (POST /api/v1/sessions). */
28
+ clientSecret: string;
29
+ /** Base URL for API calls (defaults to production). */
30
+ baseUrl?: string;
31
+ /** Display name shown in the verification UI. */
32
+ appName?: string;
33
+ /** Theme customization. */
34
+ theme?: KwikIdTheme;
35
+ /** Locale for UI text. */
36
+ locale?: Locale;
37
+ /**
38
+ * Liveness mode; overrides the session config when set.
39
+ * @deprecated Not yet supported: ignored until on-device liveness lands (Phase 2).
40
+ */
41
+ livenessMode?: LivenessMode;
42
+ /** Request timeout in milliseconds. */
43
+ timeout?: number;
44
+ /** Enable debug logging. */
45
+ debug?: boolean;
46
+ }
47
+
48
+ // ============================================
49
+ // Documents & captures
50
+ // ============================================
51
+
52
+ export type DocumentType =
53
+ | "id_card"
54
+ | "passport"
55
+ | "drivers_license"
56
+ | "voters_card"
57
+ | "residence_permit";
58
+
59
+ export type CaptureType = "document_front" | "document_back" | "selfie" | "liveness_frame";
60
+
61
+ /** RN capture descriptor — replaces the web SDK's DOM File/Blob. */
62
+ export interface CaptureAsset {
63
+ uri: string;
64
+ name: string;
65
+ type: string;
66
+ width: number;
67
+ height: number;
68
+ }
69
+
70
+ export interface CaptureMetadata {
71
+ timestamp: number;
72
+ resolution: { width: number; height: number };
73
+ facingMode: "user" | "environment";
74
+ deviceId?: string;
75
+ qualityScore?: number;
76
+ faceDetected?: boolean;
77
+ }
78
+
79
+ // ============================================
80
+ // Quality
81
+ // ============================================
82
+
83
+ export type QualityGuidance =
84
+ | "move_to_brighter_area"
85
+ | "reduce_brightness"
86
+ | "hold_still"
87
+ | "move_closer"
88
+ | "move_back"
89
+ | "center_face"
90
+ | "only_one_face";
91
+
92
+ export interface QualityCheckResult {
93
+ passed: boolean;
94
+ value: number;
95
+ threshold: number;
96
+ issue?: string;
97
+ }
98
+
99
+ export interface QualityResult {
100
+ passed: boolean;
101
+ timestamp: number;
102
+ checks: {
103
+ luminance: QualityCheckResult & { issue?: "too_dark" | "too_bright" };
104
+ blur: QualityCheckResult & { issue?: "too_blurry" };
105
+ resolution: QualityCheckResult & { width: number; height: number };
106
+ face?: QualityCheckResult & {
107
+ count: number;
108
+ size?: number;
109
+ issue?: "no_face" | "multiple_faces" | "face_too_small";
110
+ };
111
+ };
112
+ guidance: QualityGuidance[];
113
+ }
114
+
115
+ // ============================================
116
+ // Face & liveness
117
+ // ============================================
118
+
119
+ export interface FacePose {
120
+ yaw: number;
121
+ pitch: number;
122
+ roll: number;
123
+ }
124
+
125
+ /**
126
+ * Normalized per-frame face signals produced by the ML Kit frame processor.
127
+ * All probabilities are 0..1; angles are degrees. This is the single source the
128
+ * alignment + liveness detectors consume (replaces the web SDK's Landmark[] probing).
129
+ */
130
+ export interface FaceSignals {
131
+ faceCount: number;
132
+ /** Face bounding-box area as a fraction of the frame area. */
133
+ bboxRatio: number;
134
+ /** Normalized horizontal offset of the face center from frame center (-1..1). */
135
+ centerOffsetX: number;
136
+ /** Normalized vertical offset of the face center from frame center (-1..1). */
137
+ centerOffsetY: number;
138
+ yaw: number;
139
+ pitch: number;
140
+ roll: number;
141
+ leftEyeOpen: number;
142
+ rightEyeOpen: number;
143
+ smiling: number;
144
+ /** Mouth open ratio (0..1); -1 when unavailable on the device. */
145
+ mouthOpenRatio: number;
146
+ confidence: number;
147
+ }
148
+
149
+ export type ChallengeType = "blink" | "smile" | "turn_left" | "turn_right" | "nod" | "open_mouth";
150
+
151
+ export interface Challenge {
152
+ type: ChallengeType;
153
+ instruction: string;
154
+ timeoutMs: number;
155
+ requiredCount?: number;
156
+ targetAngle?: number;
157
+ }
158
+
159
+ export interface ChallengeResult {
160
+ challenge: Challenge;
161
+ passed: boolean;
162
+ confidence: number;
163
+ completedAt?: number;
164
+ }
165
+
166
+ export interface PassiveLivenessResult {
167
+ passed: boolean;
168
+ confidence: number;
169
+ checks: {
170
+ microMovement: { passed: boolean; detected: boolean };
171
+ naturalBlink: { passed: boolean; detected: boolean };
172
+ textureAnalysis: { passed: boolean; score: number };
173
+ };
174
+ spoofType?: "screen" | "print" | "mask" | "unknown";
175
+ }
176
+
177
+ export interface LivenessResult {
178
+ passed: boolean;
179
+ mode: LivenessMode;
180
+ passiveResult?: PassiveLivenessResult;
181
+ challenges?: ChallengeResult[];
182
+ confidence: number;
183
+ }
184
+
185
+ // ============================================
186
+ // Session & security
187
+ // ============================================
188
+
189
+ export interface DeviceFingerprint {
190
+ platform: string;
191
+ osVersion: string;
192
+ deviceModel: string;
193
+ screenResolution: string;
194
+ timezone: string;
195
+ language: string;
196
+ fingerprintHash: string;
197
+ }
198
+
199
+ export interface Session {
200
+ sessionId: string;
201
+ clientSecret: string;
202
+ jobId?: string;
203
+ expiresAt: Date;
204
+ deviceFingerprint: string;
205
+ nonce: string;
206
+ sequenceNumber: number;
207
+ }
208
+
209
+ export interface SecurePayload {
210
+ sessionId: string;
211
+ timestamp: number;
212
+ nonce: string;
213
+ sequenceNumber: number;
214
+ signature: string;
215
+ deviceFingerprint: string;
216
+ data: unknown;
217
+ }
218
+
219
+ // ============================================
220
+ // Verification results
221
+ // ============================================
222
+
223
+ export interface VerificationScores {
224
+ documentQuality: number;
225
+ documentAuthenticity: number;
226
+ faceMatch: number;
227
+ liveness: number;
228
+ }
229
+
230
+ export interface ExtractedData {
231
+ documentType: string;
232
+ documentNumber?: string;
233
+ fullName?: string;
234
+ firstName?: string;
235
+ lastName?: string;
236
+ dateOfBirth?: string;
237
+ expiryDate?: string;
238
+ issuingCountry?: string;
239
+ nationality?: string;
240
+ gender?: string;
241
+ address?: string;
242
+ [key: string]: string | undefined;
243
+ }
244
+
245
+ export interface VerificationResult {
246
+ jobId: string;
247
+ status: "verified" | "rejected" | "manual_review" | "pending" | "processing";
248
+ overallScore: number;
249
+ scores: VerificationScores;
250
+ extractedData?: ExtractedData;
251
+ rejectionReasons?: string[];
252
+ errorDetails?: {
253
+ document: string;
254
+ errorCode: string;
255
+ errorMessage: string;
256
+ };
257
+ timestamps: {
258
+ submitted: string;
259
+ completed?: string;
260
+ };
261
+ referenceId: string;
262
+ }
263
+
264
+ /** The terminal outcome surfaced to the host app from `start()`. */
265
+ export interface VerificationOutcome {
266
+ status: "submitted" | "cancelled" | "error";
267
+ jobId?: string;
268
+ error?: Error;
269
+ }
270
+
271
+ // ============================================
272
+ // Session info (GET /sdk/v1/session)
273
+ // ============================================
274
+
275
+ export interface SessionInfo {
276
+ sessionId: string;
277
+ expiresAt: string;
278
+ orgName?: string;
279
+ orgLogoUrl?: string;
280
+ config: {
281
+ documentTypes: DocumentType[];
282
+ livenessMode: LivenessMode;
283
+ maxRetries: number;
284
+ };
285
+ }
286
+
287
+ // ============================================
288
+ // Verification state machine
289
+ // ============================================
290
+
291
+ export type VerificationSubStep =
292
+ | "intro"
293
+ | "handoff-redeem"
294
+ | "document-type"
295
+ | "prepare-front"
296
+ | "camera-front"
297
+ | "confirm-front"
298
+ | "prepare-back"
299
+ | "camera-back"
300
+ | "confirm-back"
301
+ | "prepare-selfie"
302
+ | "liveness"
303
+ | "confirm-selfie"
304
+ | "processing"
305
+ | "result";
306
+
307
+ export type CaptureSlot = "front" | "back" | "selfie";
308
+
309
+ export type { KwikIdEvents, KwikIdEventName, KwikIdEventHandler } from "./events";