@hexar/biometric-identity-sdk-react-native 1.1.16 → 1.1.17

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePictureCapture.d.ts","sourceRoot":"","sources":["../../src/components/ProfilePictureCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AASxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAmC,cAAc,EAAsB,MAAM,oCAAoC,CAAC;AAGzJ,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,CAAC,MAAM,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAmNtE,CAAC;AAuBF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"ProfilePictureCapture.d.ts","sourceRoot":"","sources":["../../src/components/ProfilePictureCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AASxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAmC,cAAc,EAAsB,MAAM,oCAAoC,CAAC;AAGzJ,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,CAAC,MAAM,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAiPtE,CAAC;AAuBF,eAAe,qBAAqB,CAAC"}
@@ -58,16 +58,25 @@ const ProfilePictureCapture = ({ onComplete, onError, onCancel, theme, language,
58
58
  setIsLoadingChallenges(true);
59
59
  try {
60
60
  const challenges = await fetchChallenges('active');
61
+ biometric_identity_sdk_core_1.logger.info('ProfilePictureCapture: Challenges loaded', {
62
+ challengeCount: challenges.length,
63
+ challenges: challenges.map(c => c.action)
64
+ });
61
65
  setCurrentChallenges(challenges);
62
66
  }
63
67
  catch (error) {
64
- biometric_identity_sdk_core_1.logger.warn('Failed to fetch challenges, VideoRecorder will use defaults');
68
+ biometric_identity_sdk_core_1.logger.warn('Failed to fetch challenges, VideoRecorder will use defaults', error);
65
69
  setCurrentChallenges([]);
66
70
  }
67
71
  setIsLoadingChallenges(false);
68
72
  };
69
73
  loadChallenges();
70
74
  }
75
+ else if (isInitialized) {
76
+ // If not using backend, still initialize with empty array (VideoRecorder will use defaults)
77
+ setCurrentChallenges([]);
78
+ setIsLoadingChallenges(false);
79
+ }
71
80
  }, [isInitialized, isUsingBackend, fetchChallenges]);
72
81
  const strings = (0, biometric_identity_sdk_core_1.getStrings)();
73
82
  const validateWithBackend = (0, react_1.useCallback)(async (videoResult) => {
@@ -142,6 +151,13 @@ const ProfilePictureCapture = ({ onComplete, onError, onCancel, theme, language,
142
151
  }
143
152
  }, [isInitialized, isUsingBackend, sdk]);
144
153
  const handleVideoComplete = (0, react_1.useCallback)(async (videoResult) => {
154
+ biometric_identity_sdk_core_1.logger.info('ProfilePictureCapture: Video recording completed', {
155
+ framesCount: videoResult.frames?.length || 0,
156
+ duration: videoResult.duration,
157
+ challengesCompleted: videoResult.challengesCompleted || [],
158
+ challengesCompletedCount: videoResult.challengesCompleted?.length || 0,
159
+ expectedChallengesCount: currentChallenges.length,
160
+ });
145
161
  setIsValidating(true);
146
162
  try {
147
163
  const result = await validateWithBackend(videoResult);
@@ -185,7 +201,7 @@ const ProfilePictureCapture = ({ onComplete, onError, onCancel, theme, language,
185
201
  };
186
202
  onError(biometricError);
187
203
  }
188
- }, [validateWithBackend, onComplete, onError, strings, language]);
204
+ }, [validateWithBackend, onComplete, onError, strings, language, currentChallenges]);
189
205
  const handleVideoCancel = (0, react_1.useCallback)(() => {
190
206
  if (onCancel) {
191
207
  onCancel();
@@ -198,6 +214,13 @@ const ProfilePictureCapture = ({ onComplete, onError, onCancel, theme, language,
198
214
  react_1.default.createElement(react_native_1.Text, { style: [styles.loadingText, { color: theme?.textColor || '#1e1b4b' }] }, strings.liveness.processing || strings.validation.checkingLiveness || 'Processing...'),
199
215
  react_1.default.createElement(react_native_1.Text, { style: [styles.loadingSubtext, { color: theme?.secondaryTextColor || '#64748b' }] }, strings.validation.almostDone || strings.common.loading || 'This may take a few seconds'))));
200
216
  }
217
+ // Wait for initialization and challenge loading before showing VideoRecorder
218
+ if (!isInitialized || (isUsingBackend && isLoadingChallenges)) {
219
+ return (react_1.default.createElement(react_native_1.SafeAreaView, { style: [styles.container, { backgroundColor: theme?.backgroundColor || '#FFFFFF' }] },
220
+ react_1.default.createElement(react_native_1.View, { style: styles.loadingContainer },
221
+ react_1.default.createElement(react_native_1.ActivityIndicator, { size: "large", color: theme?.primaryColor || '#4f46e5' }),
222
+ react_1.default.createElement(react_native_1.Text, { style: [styles.loadingText, { color: theme?.textColor || '#1e1b4b' }] }, strings.liveness.preparing || 'Preparing...'))));
223
+ }
201
224
  return (react_1.default.createElement(VideoRecorder_1.VideoRecorder, { theme: theme, language: language, smartMode: true, challenges: currentChallenges, sessionId: sdk.getSessionId() || undefined, onComplete: handleVideoComplete, onCancel: handleVideoCancel, onFetchChallenges: handleFetchChallenges }));
202
225
  };
203
226
  exports.ProfilePictureCapture = ProfilePictureCapture;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hexar/biometric-identity-sdk-react-native",
3
- "version": "1.1.16",
3
+ "version": "1.1.17",
4
4
  "description": "React Native wrapper for Biometric Identity SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -61,14 +61,22 @@ export const ProfilePictureCapture: React.FC<ProfilePictureCaptureProps> = ({
61
61
  setIsLoadingChallenges(true);
62
62
  try {
63
63
  const challenges = await fetchChallenges('active');
64
+ logger.info('ProfilePictureCapture: Challenges loaded', {
65
+ challengeCount: challenges.length,
66
+ challenges: challenges.map(c => c.action)
67
+ });
64
68
  setCurrentChallenges(challenges);
65
69
  } catch (error) {
66
- logger.warn('Failed to fetch challenges, VideoRecorder will use defaults');
70
+ logger.warn('Failed to fetch challenges, VideoRecorder will use defaults', error);
67
71
  setCurrentChallenges([]);
68
72
  }
69
73
  setIsLoadingChallenges(false);
70
74
  };
71
75
  loadChallenges();
76
+ } else if (isInitialized) {
77
+ // If not using backend, still initialize with empty array (VideoRecorder will use defaults)
78
+ setCurrentChallenges([]);
79
+ setIsLoadingChallenges(false);
72
80
  }
73
81
  }, [isInitialized, isUsingBackend, fetchChallenges]);
74
82
 
@@ -154,6 +162,14 @@ export const ProfilePictureCapture: React.FC<ProfilePictureCaptureProps> = ({
154
162
  }, [isInitialized, isUsingBackend, sdk]);
155
163
 
156
164
  const handleVideoComplete = useCallback(async (videoResult: VideoRecordingResult) => {
165
+ logger.info('ProfilePictureCapture: Video recording completed', {
166
+ framesCount: videoResult.frames?.length || 0,
167
+ duration: videoResult.duration,
168
+ challengesCompleted: videoResult.challengesCompleted || [],
169
+ challengesCompletedCount: videoResult.challengesCompleted?.length || 0,
170
+ expectedChallengesCount: currentChallenges.length,
171
+ });
172
+
157
173
  setIsValidating(true);
158
174
 
159
175
  try {
@@ -201,7 +217,7 @@ export const ProfilePictureCapture: React.FC<ProfilePictureCaptureProps> = ({
201
217
  } as BiometricError;
202
218
  onError(biometricError);
203
219
  }
204
- }, [validateWithBackend, onComplete, onError, strings, language]);
220
+ }, [validateWithBackend, onComplete, onError, strings, language, currentChallenges]);
205
221
 
206
222
  const handleVideoCancel = useCallback(() => {
207
223
  if (onCancel) {
@@ -225,6 +241,20 @@ export const ProfilePictureCapture: React.FC<ProfilePictureCaptureProps> = ({
225
241
  );
226
242
  }
227
243
 
244
+ // Wait for initialization and challenge loading before showing VideoRecorder
245
+ if (!isInitialized || (isUsingBackend && isLoadingChallenges)) {
246
+ return (
247
+ <SafeAreaView style={[styles.container, { backgroundColor: theme?.backgroundColor || '#FFFFFF' }]}>
248
+ <View style={styles.loadingContainer}>
249
+ <ActivityIndicator size="large" color={theme?.primaryColor || '#4f46e5'} />
250
+ <Text style={[styles.loadingText, { color: theme?.textColor || '#1e1b4b' }]}>
251
+ {strings.liveness.preparing || 'Preparing...'}
252
+ </Text>
253
+ </View>
254
+ </SafeAreaView>
255
+ );
256
+ }
257
+
228
258
  return (
229
259
  <VideoRecorder
230
260
  theme={theme}