smartcomply-web-sdk 1.0.3 → 1.0.4

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 (130) hide show
  1. package/README.md +43 -0
  2. package/dist/esm/camera/ActionDetector.d.ts +26 -0
  3. package/dist/esm/camera/ActionDetector.d.ts.map +1 -0
  4. package/dist/esm/camera/ActionDetector.js +110 -0
  5. package/dist/esm/camera/ActionDetector.js.map +1 -0
  6. package/dist/esm/camera/CameraManager.d.ts +7 -0
  7. package/dist/esm/camera/CameraManager.d.ts.map +1 -0
  8. package/dist/esm/camera/CameraManager.js +27 -0
  9. package/dist/esm/camera/CameraManager.js.map +1 -0
  10. package/dist/esm/camera/FaceDetector.d.ts +12 -0
  11. package/dist/esm/camera/FaceDetector.d.ts.map +1 -0
  12. package/dist/esm/camera/FaceDetector.js +51 -0
  13. package/dist/esm/camera/FaceDetector.js.map +1 -0
  14. package/dist/esm/camera/Permission.d.ts +42 -0
  15. package/dist/esm/camera/Permission.d.ts.map +1 -0
  16. package/dist/esm/camera/Permission.js +101 -0
  17. package/dist/esm/camera/Permission.js.map +1 -0
  18. package/dist/esm/camera/VideoRecorder.d.ts +12 -0
  19. package/dist/esm/camera/VideoRecorder.d.ts.map +1 -0
  20. package/dist/esm/camera/VideoRecorder.js +47 -0
  21. package/dist/esm/camera/VideoRecorder.js.map +1 -0
  22. package/dist/esm/client/Config.d.ts +9 -0
  23. package/dist/esm/client/Config.d.ts.map +1 -0
  24. package/dist/esm/client/Config.js +5 -0
  25. package/dist/esm/client/Config.js.map +1 -0
  26. package/dist/esm/client/HttpClient.d.ts +44 -0
  27. package/dist/esm/client/HttpClient.d.ts.map +1 -0
  28. package/dist/esm/client/HttpClient.js +145 -0
  29. package/dist/esm/client/HttpClient.js.map +1 -0
  30. package/dist/esm/client/Smartcomply.d.ts +50 -0
  31. package/dist/esm/client/Smartcomply.d.ts.map +1 -0
  32. package/dist/esm/client/Smartcomply.js +73 -0
  33. package/dist/esm/client/Smartcomply.js.map +1 -0
  34. package/dist/esm/components/CameraView.d.ts +59 -0
  35. package/dist/esm/components/CameraView.d.ts.map +1 -0
  36. package/dist/esm/components/CameraView.js +238 -0
  37. package/dist/esm/components/CameraView.js.map +1 -0
  38. package/dist/esm/components/DocumentUpload.d.ts +21 -0
  39. package/dist/esm/components/DocumentUpload.d.ts.map +1 -0
  40. package/dist/esm/components/DocumentUpload.js +216 -0
  41. package/dist/esm/components/DocumentUpload.js.map +1 -0
  42. package/dist/esm/errors/AuthError.d.ts +8 -0
  43. package/dist/esm/errors/AuthError.d.ts.map +1 -0
  44. package/dist/esm/errors/AuthError.js +11 -0
  45. package/dist/esm/errors/AuthError.js.map +1 -0
  46. package/dist/esm/errors/NetworkError.d.ts +8 -0
  47. package/dist/esm/errors/NetworkError.d.ts.map +1 -0
  48. package/dist/esm/errors/NetworkError.js +11 -0
  49. package/dist/esm/errors/NetworkError.js.map +1 -0
  50. package/dist/esm/errors/SDKError.d.ts +7 -0
  51. package/dist/esm/errors/SDKError.d.ts.map +1 -0
  52. package/dist/esm/errors/SDKError.js +10 -0
  53. package/dist/esm/errors/SDKError.js.map +1 -0
  54. package/dist/esm/flow/DocumentCapture.d.ts +54 -0
  55. package/dist/esm/flow/DocumentCapture.d.ts.map +1 -0
  56. package/dist/esm/flow/DocumentCapture.js +797 -0
  57. package/dist/esm/flow/DocumentCapture.js.map +1 -0
  58. package/dist/esm/flow/SmartComplyFlow.d.ts +104 -0
  59. package/dist/esm/flow/SmartComplyFlow.d.ts.map +1 -0
  60. package/dist/esm/flow/SmartComplyFlow.js +1722 -0
  61. package/dist/esm/flow/SmartComplyFlow.js.map +1 -0
  62. package/dist/esm/flow/theme.d.ts +30 -0
  63. package/dist/esm/flow/theme.d.ts.map +1 -0
  64. package/dist/esm/flow/theme.js +99 -0
  65. package/dist/esm/flow/theme.js.map +1 -0
  66. package/dist/esm/index.d.ts +20 -0
  67. package/dist/esm/index.d.ts.map +1 -0
  68. package/dist/esm/index.js +15 -0
  69. package/dist/esm/index.js.map +1 -0
  70. package/dist/esm/modules/liveness/LivenessUI.d.ts +46 -0
  71. package/dist/esm/modules/liveness/LivenessUI.d.ts.map +1 -0
  72. package/dist/esm/modules/liveness/LivenessUI.js +605 -0
  73. package/dist/esm/modules/liveness/LivenessUI.js.map +1 -0
  74. package/dist/esm/modules/liveness/index.d.ts +5 -0
  75. package/dist/esm/modules/liveness/index.d.ts.map +1 -0
  76. package/dist/esm/modules/liveness/index.js +4 -0
  77. package/dist/esm/modules/liveness/index.js.map +1 -0
  78. package/dist/esm/modules/liveness/liveness.d.ts +85 -0
  79. package/dist/esm/modules/liveness/liveness.d.ts.map +1 -0
  80. package/dist/esm/modules/liveness/liveness.js +421 -0
  81. package/dist/esm/modules/liveness/liveness.js.map +1 -0
  82. package/dist/esm/modules/liveness/uploader.d.ts +34 -0
  83. package/dist/esm/modules/liveness/uploader.d.ts.map +1 -0
  84. package/dist/esm/modules/liveness/uploader.js +102 -0
  85. package/dist/esm/modules/liveness/uploader.js.map +1 -0
  86. package/dist/esm/modules/onboarding/index.d.ts +2 -0
  87. package/dist/esm/modules/onboarding/index.d.ts.map +1 -0
  88. package/dist/esm/modules/onboarding/index.js +2 -0
  89. package/dist/esm/modules/onboarding/index.js.map +1 -0
  90. package/dist/esm/modules/onboarding/onboarding.d.ts +25 -0
  91. package/dist/esm/modules/onboarding/onboarding.d.ts.map +1 -0
  92. package/dist/esm/modules/onboarding/onboarding.js +29 -0
  93. package/dist/esm/modules/onboarding/onboarding.js.map +1 -0
  94. package/dist/esm/types/common.d.ts +27 -0
  95. package/dist/esm/types/common.d.ts.map +1 -0
  96. package/dist/esm/types/common.js +2 -0
  97. package/dist/esm/types/common.js.map +1 -0
  98. package/dist/esm/types/liveness.d.ts +142 -0
  99. package/dist/esm/types/liveness.d.ts.map +1 -0
  100. package/dist/esm/types/liveness.js +2 -0
  101. package/dist/esm/types/liveness.js.map +1 -0
  102. package/dist/esm/types/onboarding.d.ts +53 -0
  103. package/dist/esm/types/onboarding.d.ts.map +1 -0
  104. package/dist/esm/types/onboarding.js +2 -0
  105. package/dist/esm/types/onboarding.js.map +1 -0
  106. package/dist/esm/types/quality.d.ts +23 -0
  107. package/dist/esm/types/quality.d.ts.map +1 -0
  108. package/dist/esm/types/quality.js +5 -0
  109. package/dist/esm/types/quality.js.map +1 -0
  110. package/dist/esm/utils/ImageQuality.d.ts +48 -0
  111. package/dist/esm/utils/ImageQuality.d.ts.map +1 -0
  112. package/dist/esm/utils/ImageQuality.js +177 -0
  113. package/dist/esm/utils/ImageQuality.js.map +1 -0
  114. package/dist/esm/utils/constants.d.ts +59 -0
  115. package/dist/esm/utils/constants.d.ts.map +1 -0
  116. package/dist/esm/utils/constants.js +67 -0
  117. package/dist/esm/utils/constants.js.map +1 -0
  118. package/dist/esm/utils/device.d.ts +14 -0
  119. package/dist/esm/utils/device.d.ts.map +1 -0
  120. package/dist/esm/utils/device.js +52 -0
  121. package/dist/esm/utils/device.js.map +1 -0
  122. package/dist/esm/utils/logger.d.ts +28 -0
  123. package/dist/esm/utils/logger.d.ts.map +1 -0
  124. package/dist/esm/utils/logger.js +64 -0
  125. package/dist/esm/utils/logger.js.map +1 -0
  126. package/dist/esm/utils/validator.d.ts +35 -0
  127. package/dist/esm/utils/validator.d.ts.map +1 -0
  128. package/dist/esm/utils/validator.js +102 -0
  129. package/dist/esm/utils/validator.js.map +1 -0
  130. package/package.json +13 -5
@@ -0,0 +1,145 @@
1
+ import { BASE_URLS } from "./Config";
2
+ import { SDKError } from "../errors/SDKError";
3
+ import { AuthError } from "../errors/AuthError";
4
+ import { NetworkError } from "../errors/NetworkError";
5
+ /**
6
+ * HTTP client aligned with Adhere backend contract.
7
+ *
8
+ * Two auth modes:
9
+ * - request() → Authorization: Bearer <apiKey> (session creation)
10
+ * - sessionRequest() → x-access-token: <sessionToken> (all other endpoints)
11
+ * - uploadWithSession() → multipart + x-access-token (file uploads)
12
+ */
13
+ export class HttpClient {
14
+ constructor(config) {
15
+ this.sessionToken = null;
16
+ this.baseUrl = BASE_URLS[config.environment || "sandbox"];
17
+ this.apiKey = config.apiKey;
18
+ this.timeout = config.timeout || 30000;
19
+ }
20
+ setSessionToken(token) {
21
+ this.sessionToken = token;
22
+ }
23
+ /**
24
+ * API-key authenticated request (used for session creation only).
25
+ * Header: Authorization: Bearer <apiKey>
26
+ */
27
+ async request(method, path, body) {
28
+ return this._fetch(path, {
29
+ method,
30
+ headers: {
31
+ "Authorization": `Bearer ${this.apiKey}`,
32
+ "Content-Type": "application/json",
33
+ },
34
+ body: body ? JSON.stringify(body) : undefined,
35
+ });
36
+ }
37
+ /**
38
+ * Session-token authenticated request (used for all endpoints after session creation).
39
+ * Header: x-access-token: <sessionToken>
40
+ */
41
+ async sessionRequest(method, path, body) {
42
+ this.requireToken();
43
+ return this._fetch(path, {
44
+ method,
45
+ headers: {
46
+ "x-access-token": this.sessionToken,
47
+ "Content-Type": "application/json",
48
+ },
49
+ body: body ? JSON.stringify(body) : undefined,
50
+ });
51
+ }
52
+ /**
53
+ * Multipart file upload with session-token auth.
54
+ * Header: x-access-token: <sessionToken>
55
+ * NOTE: Do NOT set Content-Type — browser sets it with boundary automatically.
56
+ */
57
+ async uploadWithSession(path, formData) {
58
+ this.requireToken();
59
+ return this._fetch(path, {
60
+ method: "POST",
61
+ headers: {
62
+ "x-access-token": this.sessionToken,
63
+ },
64
+ body: formData,
65
+ });
66
+ }
67
+ /**
68
+ * Unauthenticated GET — used for public endpoints (e.g. status polling after session revoke).
69
+ */
70
+ async publicGet(path) {
71
+ return this._fetch(path, {
72
+ method: "GET",
73
+ headers: { "Content-Type": "application/json" },
74
+ });
75
+ }
76
+ /**
77
+ * Legacy upload with API key (kept for backward compatibility if needed).
78
+ */
79
+ async upload(path, formData) {
80
+ return this._fetch(path, {
81
+ method: "POST",
82
+ headers: {
83
+ "Authorization": `Bearer ${this.apiKey}`,
84
+ },
85
+ body: formData,
86
+ });
87
+ }
88
+ // ---- Internal ----
89
+ requireToken() {
90
+ if (!this.sessionToken) {
91
+ throw new AuthError("No session token set. Call sdk.createSession() first.", "NO_SESSION_TOKEN");
92
+ }
93
+ }
94
+ async _fetch(path, init, retries = 2) {
95
+ const controller = new AbortController();
96
+ const timer = setTimeout(() => controller.abort(), this.timeout);
97
+ try {
98
+ const response = await fetch(`${this.baseUrl}${path}`, {
99
+ ...init,
100
+ signal: controller.signal,
101
+ });
102
+ const contentType = response.headers.get("content-type") || "";
103
+ if (!contentType.includes("application/json")) {
104
+ throw new SDKError(`Unexpected response from ${path} (${response.status})`, response.status);
105
+ }
106
+ // Parse the backend's standard response envelope
107
+ const envelope = await response.json();
108
+ if (!response.ok || envelope.status === "error") {
109
+ const statusCode = response.status;
110
+ // Map specific HTTP statuses to error types
111
+ if (statusCode === 401 || statusCode === 403) {
112
+ throw new AuthError(envelope.message || "Authentication failed", envelope.code);
113
+ }
114
+ throw new SDKError(envelope.message || `Request to ${path} failed`, statusCode, envelope.code, envelope.data);
115
+ }
116
+ // Return the full envelope for verify responses (so SDK can check status)
117
+ // For other endpoints, return unwrapped data
118
+ if (path.includes("/verify/")) {
119
+ return envelope;
120
+ }
121
+ return envelope.data;
122
+ }
123
+ catch (err) {
124
+ if (err instanceof SDKError || err instanceof AuthError)
125
+ throw err;
126
+ // C5: Retry on network errors (not auth/validation errors)
127
+ if (retries > 0 && (err.name === "AbortError" || err.name === "TypeError")) {
128
+ clearTimeout(timer);
129
+ await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry
130
+ return this._fetch(path, init, retries - 1);
131
+ }
132
+ if (err.name === "AbortError") {
133
+ throw new NetworkError("Request timeout. Please check your connection and try again.");
134
+ }
135
+ if (err.name === "TypeError" && err.message?.includes("fetch")) {
136
+ throw new NetworkError(`Network error: ${err.message}`);
137
+ }
138
+ throw new SDKError(err.message || "Unknown error", 0, "UNKNOWN_ERROR");
139
+ }
140
+ finally {
141
+ clearTimeout(timer);
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { SDKConfig } from "./Config";
2
+ import { OnboardingModule } from "../modules/onboarding/onboarding";
3
+ import { LivenessModule } from "../modules/liveness/liveness";
4
+ import { SessionResponse, SDKInitConfig } from "../types/onboarding";
5
+ /**
6
+ * SmartComply SDK — main entry point.
7
+ *
8
+ * Usage:
9
+ * const sdk = new SmartComply({ apiKey: "pk_...", clientId: "uuid-...", environment: "sandbox" });
10
+ * const session = await sdk.createSession();
11
+ * const config = await sdk.initializeConfig();
12
+ * // ... use sdk.onboarding and sdk.liveness modules
13
+ */
14
+ export declare class SmartComply {
15
+ private http;
16
+ private clientId;
17
+ private _sessionToken;
18
+ private _sessionExpiresAt;
19
+ private _sdkConfig;
20
+ onboarding: OnboardingModule;
21
+ liveness: LivenessModule;
22
+ constructor(config: SDKConfig);
23
+ /** Current session token (null if not created yet) */
24
+ get sessionToken(): string | null;
25
+ /** Session expiration ISO timestamp */
26
+ get sessionExpiresAt(): string | null;
27
+ /** SDK config fetched from backend (null until initializeConfig() is called) */
28
+ get sdkConfig(): SDKInitConfig | null;
29
+ /**
30
+ * Create a new SDK session.
31
+ *
32
+ * POST /v1/sdk/session/create/
33
+ * Auth: Authorization: Bearer <apiKey>
34
+ * Body: { client_id: "<uuid>" }
35
+ *
36
+ * Returns: { token: "...", expires_at: "..." }
37
+ */
38
+ createSession(): Promise<SessionResponse>;
39
+ /**
40
+ * Fetch SDK configuration from the backend.
41
+ * Must be called after createSession().
42
+ *
43
+ * GET /v1/sdk/initialize/
44
+ * Auth: x-access-token: <sessionToken>
45
+ *
46
+ * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }
47
+ */
48
+ initializeConfig(): Promise<SDKInitConfig>;
49
+ }
50
+ //# sourceMappingURL=Smartcomply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Smartcomply.d.ts","sourceRoot":"","sources":["../../../src/client/Smartcomply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,UAAU,CAA8B;IAEzC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,SAAS;IAe7B,sDAAsD;IACtD,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,uCAAuC;IACvC,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;IAED,gFAAgF;IAChF,IAAI,SAAS,IAAI,aAAa,GAAG,IAAI,CAEpC;IAED;;;;;;;;OAQG;IACG,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC;IAgB/C;;;;;;;;OAQG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;CASjD"}
@@ -0,0 +1,73 @@
1
+ import { HttpClient } from "./HttpClient";
2
+ import { OnboardingModule } from "../modules/onboarding/onboarding";
3
+ import { LivenessModule } from "../modules/liveness/liveness";
4
+ /**
5
+ * SmartComply SDK — main entry point.
6
+ *
7
+ * Usage:
8
+ * const sdk = new SmartComply({ apiKey: "pk_...", clientId: "uuid-...", environment: "sandbox" });
9
+ * const session = await sdk.createSession();
10
+ * const config = await sdk.initializeConfig();
11
+ * // ... use sdk.onboarding and sdk.liveness modules
12
+ */
13
+ export class SmartComply {
14
+ constructor(config) {
15
+ this._sessionToken = null;
16
+ this._sessionExpiresAt = null;
17
+ this._sdkConfig = null;
18
+ if (!config.apiKey) {
19
+ throw new Error("SmartComply: apiKey is required");
20
+ }
21
+ if (!config.clientId) {
22
+ throw new Error("SmartComply: clientId is required (UUID from your SDK config)");
23
+ }
24
+ this.clientId = config.clientId;
25
+ this.http = new HttpClient(config);
26
+ this.onboarding = new OnboardingModule(this.http);
27
+ this.liveness = new LivenessModule(this.http);
28
+ }
29
+ /** Current session token (null if not created yet) */
30
+ get sessionToken() {
31
+ return this._sessionToken;
32
+ }
33
+ /** Session expiration ISO timestamp */
34
+ get sessionExpiresAt() {
35
+ return this._sessionExpiresAt;
36
+ }
37
+ /** SDK config fetched from backend (null until initializeConfig() is called) */
38
+ get sdkConfig() {
39
+ return this._sdkConfig;
40
+ }
41
+ /**
42
+ * Create a new SDK session.
43
+ *
44
+ * POST /v1/sdk/session/create/
45
+ * Auth: Authorization: Bearer <apiKey>
46
+ * Body: { client_id: "<uuid>" }
47
+ *
48
+ * Returns: { token: "...", expires_at: "..." }
49
+ */
50
+ async createSession() {
51
+ const response = await this.http.request("POST", "/v1/sdk/session/create/", { client_id: this.clientId });
52
+ this._sessionToken = response.token;
53
+ this._sessionExpiresAt = response.expires_at;
54
+ // Set the session token on the HTTP client for subsequent requests
55
+ this.http.setSessionToken(response.token);
56
+ return response;
57
+ }
58
+ /**
59
+ * Fetch SDK configuration from the backend.
60
+ * Must be called after createSession().
61
+ *
62
+ * GET /v1/sdk/initialize/
63
+ * Auth: x-access-token: <sessionToken>
64
+ *
65
+ * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }
66
+ */
67
+ async initializeConfig() {
68
+ const config = await this.http.sessionRequest("GET", "/v1/sdk/initialize/");
69
+ this._sdkConfig = config;
70
+ return config;
71
+ }
72
+ }
73
+ //# sourceMappingURL=Smartcomply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Smartcomply.js","sourceRoot":"","sources":["../../../src/client/Smartcomply.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;IAUtB,YAAY,MAAiB;QAPrB,kBAAa,GAAkB,IAAI,CAAC;QACpC,sBAAiB,GAAkB,IAAI,CAAC;QACxC,eAAU,GAAyB,IAAI,CAAC;QAM9C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,sDAAsD;IACtD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,uCAAuC;IACvC,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,gFAAgF;IAChF,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CACtC,MAAM,EACN,yBAAyB,EACzB,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC7B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC;QAE7C,mEAAmE;QACnE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAC3C,KAAK,EACL,qBAAqB,CACtB,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Camera View with Real-time Quality Feedback
3
+ * Shows live quality indicators before capture
4
+ */
5
+ import { QualityFeedback } from "../utils/ImageQuality";
6
+ export interface CameraOptions {
7
+ width?: number;
8
+ height?: number;
9
+ facingMode?: "user" | "environment";
10
+ isDocumentCapture?: boolean;
11
+ }
12
+ export interface CaptureResult {
13
+ blob: Blob;
14
+ quality: QualityFeedback;
15
+ selectedFrom: number;
16
+ }
17
+ export declare class CameraView {
18
+ private container;
19
+ private video;
20
+ private canvas;
21
+ private stream;
22
+ private qualityOverlay;
23
+ private feedbackText;
24
+ private isAnalyzing;
25
+ private qualityCheckInterval;
26
+ onQualityUpdate?: (feedback: QualityFeedback) => void;
27
+ onCapture?: (result: CaptureResult) => void;
28
+ onError?: (error: Error) => void;
29
+ constructor(container: HTMLElement);
30
+ /**
31
+ * Initialize camera
32
+ */
33
+ initialize(options?: CameraOptions): Promise<void>;
34
+ /**
35
+ * Create camera UI with quality overlay
36
+ */
37
+ private createUI;
38
+ /**
39
+ * Start real-time quality monitoring
40
+ */
41
+ private startQualityMonitoring;
42
+ /**
43
+ * Update quality overlay UI
44
+ */
45
+ private updateQualityUI;
46
+ /**
47
+ * Capture multiple frames and select best
48
+ */
49
+ captureMultipleFrames(count?: number): Promise<CaptureResult>;
50
+ /**
51
+ * Single capture (for manual mode)
52
+ */
53
+ captureSingle(): Promise<CaptureResult>;
54
+ /**
55
+ * Stop camera and cleanup
56
+ */
57
+ stop(): void;
58
+ }
59
+ //# sourceMappingURL=CameraView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraView.d.ts","sourceRoot":"","sources":["../../../src/components/CameraView.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IAcT,OAAO,CAAC,SAAS;IAb7B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,oBAAoB,CAAuB;IAGnD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;gBAEb,SAAS,EAAE,WAAW;IAE1C;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD5D;;OAEG;IACH,OAAO,CAAC,QAAQ;IAiDhB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACG,qBAAqB,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAkDtE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAI7C;;OAEG;IACH,IAAI,IAAI,IAAI;CAuBb"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Camera View with Real-time Quality Feedback
3
+ * Shows live quality indicators before capture
4
+ */
5
+ import { assessQuality, getQualityColor, getQualityMessage } from "../utils/ImageQuality";
6
+ export class CameraView {
7
+ constructor(container) {
8
+ this.container = container;
9
+ this.video = null;
10
+ this.canvas = null;
11
+ this.stream = null;
12
+ this.qualityOverlay = null;
13
+ this.feedbackText = null;
14
+ this.isAnalyzing = false;
15
+ this.qualityCheckInterval = null;
16
+ }
17
+ /**
18
+ * Initialize camera
19
+ */
20
+ async initialize(options = {}) {
21
+ try {
22
+ const { isDocumentCapture = false, facingMode = "environment" } = options;
23
+ // Use landscape dimensions for documents (1920x1080), portrait for selfie (1280x720)
24
+ const width = isDocumentCapture ? 1920 : 1280;
25
+ const height = isDocumentCapture ? 1080 : 720;
26
+ // Get camera stream with landscape constraints for documents
27
+ const videoConstraints = {
28
+ width: { ideal: width },
29
+ height: { ideal: height },
30
+ facingMode: { ideal: facingMode },
31
+ };
32
+ // For documents, force aspect ratio to landscape
33
+ if (isDocumentCapture) {
34
+ videoConstraints.aspectRatio = { ideal: 1.77 }; // 16:9 landscape
35
+ }
36
+ this.stream = await navigator.mediaDevices.getUserMedia({
37
+ video: videoConstraints,
38
+ audio: false,
39
+ });
40
+ // Create video element
41
+ this.video = document.createElement("video");
42
+ this.video.srcObject = this.stream;
43
+ this.video.autoplay = true;
44
+ this.video.playsInline = true;
45
+ // Create canvas for analysis
46
+ this.canvas = document.createElement("canvas");
47
+ this.canvas.width = width;
48
+ this.canvas.height = height;
49
+ // Create UI
50
+ this.createUI();
51
+ // Wait for video to be ready
52
+ await new Promise((resolve) => {
53
+ this.video.onloadedmetadata = () => {
54
+ this.video.play();
55
+ resolve(null);
56
+ };
57
+ });
58
+ // Start quality monitoring
59
+ this.startQualityMonitoring();
60
+ }
61
+ catch (error) {
62
+ console.error("Camera initialization failed:", error);
63
+ this.onError?.(error);
64
+ throw error;
65
+ }
66
+ }
67
+ /**
68
+ * Create camera UI with quality overlay
69
+ */
70
+ createUI() {
71
+ if (!this.container || !this.video)
72
+ return;
73
+ // Clear container
74
+ this.container.innerHTML = "";
75
+ this.container.style.position = "relative";
76
+ this.container.style.overflow = "hidden";
77
+ this.container.style.borderRadius = "12px";
78
+ // Add video
79
+ this.video.style.width = "100%";
80
+ this.video.style.height = "100%";
81
+ this.video.style.objectFit = "cover";
82
+ this.container.appendChild(this.video);
83
+ // Create quality overlay
84
+ this.qualityOverlay = document.createElement("div");
85
+ this.qualityOverlay.style.cssText = `
86
+ position: absolute;
87
+ top: 0;
88
+ left: 0;
89
+ right: 0;
90
+ bottom: 0;
91
+ border: 4px solid transparent;
92
+ border-radius: 12px;
93
+ transition: border-color 0.3s ease;
94
+ pointer-events: none;
95
+ `;
96
+ this.container.appendChild(this.qualityOverlay);
97
+ // Create feedback text
98
+ this.feedbackText = document.createElement("div");
99
+ this.feedbackText.style.cssText = `
100
+ position: absolute;
101
+ bottom: 20px;
102
+ left: 50%;
103
+ transform: translateX(-50%);
104
+ background: rgba(0, 0, 0, 0.7);
105
+ color: white;
106
+ padding: 8px 16px;
107
+ border-radius: 20px;
108
+ font-size: 14px;
109
+ font-weight: 500;
110
+ white-space: nowrap;
111
+ transition: all 0.3s ease;
112
+ `;
113
+ this.container.appendChild(this.feedbackText);
114
+ }
115
+ /**
116
+ * Start real-time quality monitoring
117
+ */
118
+ startQualityMonitoring() {
119
+ if (!this.video || !this.canvas)
120
+ return;
121
+ const ctx = this.canvas.getContext("2d", { willReadFrequently: true });
122
+ if (!ctx)
123
+ return;
124
+ const canvas = this.canvas; // Local reference for closure
125
+ this.qualityCheckInterval = window.setInterval(() => {
126
+ if (this.isAnalyzing || !this.video || this.video.paused || !this.canvas)
127
+ return;
128
+ this.isAnalyzing = true;
129
+ try {
130
+ // Draw video frame to canvas
131
+ ctx.drawImage(this.video, 0, 0, canvas.width, canvas.height);
132
+ // Get image data
133
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
134
+ // Assess quality
135
+ const feedback = assessQuality(imageData);
136
+ // Update UI
137
+ this.updateQualityUI(feedback);
138
+ // Notify callback
139
+ this.onQualityUpdate?.(feedback);
140
+ }
141
+ catch (error) {
142
+ console.error("Quality analysis error:", error);
143
+ }
144
+ finally {
145
+ this.isAnalyzing = false;
146
+ }
147
+ }, 500); // Check every 500ms
148
+ }
149
+ /**
150
+ * Update quality overlay UI
151
+ */
152
+ updateQualityUI(feedback) {
153
+ if (!this.qualityOverlay || !this.feedbackText || !this.video)
154
+ return;
155
+ const color = getQualityColor(feedback.quality.overallScore);
156
+ const message = getQualityMessage(feedback.quality.overallScore);
157
+ // Update border color
158
+ this.qualityOverlay.style.borderColor = color;
159
+ this.qualityOverlay.style.boxShadow = `0 0 20px ${color}40`;
160
+ // Update text
161
+ this.feedbackText.textContent = message;
162
+ this.feedbackText.style.background = feedback.isValid
163
+ ? "rgba(34, 197, 94, 0.8)" // Green
164
+ : "rgba(239, 68, 68, 0.8)"; // Red
165
+ }
166
+ /**
167
+ * Capture multiple frames and select best
168
+ */
169
+ async captureMultipleFrames(count = 3) {
170
+ if (!this.video || !this.canvas) {
171
+ throw new Error("Camera not initialized");
172
+ }
173
+ const ctx = this.canvas.getContext("2d");
174
+ if (!ctx)
175
+ throw new Error("Canvas context not available");
176
+ const frames = [];
177
+ // Capture multiple frames rapidly
178
+ for (let i = 0; i < count; i++) {
179
+ // Draw current frame
180
+ ctx.drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height);
181
+ // Get image data for quality check
182
+ const imageData = ctx.getImageData(0, 0, this.canvas.width, this.canvas.height);
183
+ const quality = assessQuality(imageData);
184
+ // Convert to blob
185
+ const blob = await new Promise((resolve) => {
186
+ this.canvas.toBlob((b) => resolve(b), "image/jpeg", 0.95);
187
+ });
188
+ frames.push({
189
+ blob,
190
+ quality,
191
+ timestamp: Date.now(),
192
+ });
193
+ // Small delay between captures
194
+ if (i < count - 1) {
195
+ await new Promise(r => setTimeout(r, 200));
196
+ }
197
+ }
198
+ // Select best frame by quality score
199
+ const best = frames.reduce((prev, current) => current.quality.quality.overallScore > prev.quality.quality.overallScore
200
+ ? current
201
+ : prev);
202
+ return {
203
+ blob: best.blob,
204
+ quality: best.quality,
205
+ selectedFrom: count,
206
+ };
207
+ }
208
+ /**
209
+ * Single capture (for manual mode)
210
+ */
211
+ async captureSingle() {
212
+ return this.captureMultipleFrames(1);
213
+ }
214
+ /**
215
+ * Stop camera and cleanup
216
+ */
217
+ stop() {
218
+ // Stop quality monitoring
219
+ if (this.qualityCheckInterval) {
220
+ clearInterval(this.qualityCheckInterval);
221
+ this.qualityCheckInterval = null;
222
+ }
223
+ // Stop video stream
224
+ if (this.stream) {
225
+ this.stream.getTracks().forEach(track => track.stop());
226
+ this.stream = null;
227
+ }
228
+ // Stop video element
229
+ if (this.video) {
230
+ this.video.pause();
231
+ this.video.srcObject = null;
232
+ this.video = null;
233
+ }
234
+ // Clear container
235
+ this.container.innerHTML = "";
236
+ }
237
+ }
238
+ //# sourceMappingURL=CameraView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraView.js","sourceRoot":"","sources":["../../../src/components/CameraView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Simple document upload component
3
+ * Shows file input immediately without camera permission
4
+ */
5
+ export interface UploadOptions {
6
+ onFileSelect?: (file: File) => void;
7
+ onError?: (error: string) => void;
8
+ onUseCamera?: () => void;
9
+ }
10
+ export declare class DocumentUpload {
11
+ private container;
12
+ private options;
13
+ private previewImage;
14
+ constructor(container: HTMLElement, options?: UploadOptions);
15
+ render(theme: any): void;
16
+ private handleFile;
17
+ private showPreview;
18
+ private getTheme;
19
+ destroy(): void;
20
+ }
21
+ //# sourceMappingURL=DocumentUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentUpload.d.ts","sourceRoot":"","sources":["../../../src/components/DocumentUpload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAiC;gBAEzC,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB;IAK/D,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAgJxB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;IA2DnB,OAAO,CAAC,QAAQ;IAWhB,OAAO,IAAI,IAAI;CAGhB"}