@sparkvault/sdk-mobile 5.3.1 → 6.0.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.
package/README.md CHANGED
@@ -63,7 +63,6 @@ The SDK depends on `tweetnacl` for Ed25519 Identity JWT verification and declare
63
63
  | `fetch` | No | Falls back to `globalThis.fetch`; throws if neither exists |
64
64
  | `fileReader` | Only for `ingots.uploadFromUri` | Throws on first upload-from-URI call |
65
65
  | `fileDownloader` | Only for `ingots.downloadToFile` | Throws on first file-download call |
66
- | `passkeyProvider` | Only for passkey sign-in UI | Passkey is hidden from the Identity dialog |
67
66
  | `logger` | No | No-op logger |
68
67
 
69
68
  ## Modules
@@ -81,46 +80,16 @@ The SDK depends on `tweetnacl` for Ed25519 Identity JWT verification and declare
81
80
 
82
81
  ## Identity Dialog
83
82
 
84
- `SparkVaultIdentityDialog` is the mobile equivalent of the web SDK Identity popup. It fetches Identity Product config, derives email/phone input from enabled delivery methods, offers enabled mobile-supported methods (`passkey`, `otp_email`, `otp_sms`, `otp_voice`), applies configured branding and light/dark mode, and returns the raw signed Identity JWT plus JWKS metadata. Passkey authentication is discoverable and routes by the SVID in the WebAuthn user handle.
83
+ `SparkVaultIdentityDialog` is the mobile equivalent of the web SDK Identity popup. It fetches Identity Product config, derives email/phone input from enabled delivery methods, offers the enabled one-time-code methods (`otp_email`, `otp_sms`, `otp_voice`), applies configured branding and light/dark mode, and returns the raw signed Identity JWT plus JWKS metadata. Configured branding drives the header: a logo replaces the company name and is drawn at its own proportions; without one (or if it fails to load) the header shows the company lettermark and name.
84
+
85
+ Sign-in is code-only. The native passkey ceremony does not work in the mobile app, so the dialog never offers `passkey` even when the tenant has it enabled; `products.identity` still exposes the passkey APIs for a host that drives the ceremony itself.
85
86
 
86
87
  ```tsx
87
- import * as Passkey from 'react-native-passkeys';
88
- import {
89
- SparkVaultIdentityDialog,
90
- type MobilePasskeyProvider,
91
- } from '@sparkvault/sdk-mobile/identity-dialog';
92
-
93
- const passkeyProvider: MobilePasskeyProvider = {
94
- isSupported: () => Passkey.isSupported(),
95
- authenticate: async (options) => {
96
- const credential = await Passkey.get({
97
- challenge: options.challenge,
98
- timeout: options.timeout,
99
- rpId: options.rpId,
100
- userVerification: options.userVerification,
101
- });
102
-
103
- return credential
104
- ? {
105
- id: credential.id,
106
- rawId: credential.rawId,
107
- type: 'public-key',
108
- response: {
109
- clientDataJSON: credential.response.clientDataJSON,
110
- authenticatorData: credential.response.authenticatorData,
111
- signature: credential.response.signature,
112
- // Required: the server resolves the SVID from the userHandle.
113
- userHandle: credential.response.userHandle,
114
- },
115
- }
116
- : null;
117
- },
118
- };
88
+ import { SparkVaultIdentityDialog } from '@sparkvault/sdk-mobile/identity-dialog';
119
89
 
120
90
  <SparkVaultIdentityDialog
121
91
  client={sparkVault}
122
92
  visible={visible}
123
- passkeyProvider={passkeyProvider}
124
93
  onCancel={() => setVisible(false)}
125
94
  onSuccess={async (result) => {
126
95
  await sparkVault.products.identity.verifyIdentityToken(result.token, { jwks: result.jwks });
@@ -1,19 +1,14 @@
1
1
  import type { SparkVaultMobile } from './client.js';
2
- import type { IdentityJwks, IdentityType, IdentityVerifyResult, PasskeyAuthOptions, PasskeyCredential } from './types.js';
3
- export interface MobilePasskeyProvider {
4
- isSupported(): boolean | Promise<boolean>;
5
- authenticate(options: PasskeyAuthOptions): Promise<PasskeyCredential | null>;
6
- }
2
+ import type { IdentityJwks, IdentityType, IdentityVerifyResult } from './types.js';
7
3
  export interface SparkVaultIdentityDialogProps {
8
4
  client: SparkVaultMobile;
9
5
  visible: boolean;
10
6
  initialIdentity?: string;
11
7
  initialIdentityType?: IdentityType;
12
- passkeyProvider?: MobilePasskeyProvider;
13
8
  onSuccess(result: IdentityVerifyResult & {
14
9
  jwks: IdentityJwks;
15
10
  }): void | Promise<void>;
16
11
  onCancel(): void;
17
12
  onError?(error: Error): void;
18
13
  }
19
- export declare function SparkVaultIdentityDialog({ client, visible, initialIdentity, initialIdentityType, passkeyProvider, onSuccess, onCancel, onError, }: SparkVaultIdentityDialogProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function SparkVaultIdentityDialog({ client, visible, initialIdentity, initialIdentityType, onSuccess, onCancel, onError, }: SparkVaultIdentityDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,17 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { ActivityIndicator, Image, KeyboardAvoidingView, Modal, Platform, Pressable, ScrollView, StyleSheet, Text, TextInput, View, } from 'react-native';
4
- const SUPPORTED_METHODS = new Set(['passkey', 'otp_email', 'otp_sms', 'otp_voice']);
4
+ /**
5
+ * Sign-in here is one-time code only. Passkeys are an Identity Product method
6
+ * on the web, but the native ceremony does not work in the mobile app, so the
7
+ * dialog never offers one: a tenant with `passkey` enabled server-side simply
8
+ * sees the code methods. `products.identity` still exposes the passkey APIs
9
+ * for a host that drives the ceremony itself.
10
+ */
11
+ const SUPPORTED_METHODS = new Set(['otp_email', 'otp_sms', 'otp_voice']);
5
12
  const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
6
13
  const E164_PHONE_REGEX = /^\+[1-9]\d{7,14}$/;
7
- export function SparkVaultIdentityDialog({ client, visible, initialIdentity, initialIdentityType, passkeyProvider, onSuccess, onCancel, onError, }) {
14
+ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, initialIdentityType, onSuccess, onCancel, onError, }) {
8
15
  const [step, setStep] = useState('loading');
9
16
  const [config, setConfig] = useState(null);
10
17
  const [identity, setIdentity] = useState(initialIdentity ?? '');
@@ -16,6 +23,10 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
16
23
  const [countdown, setCountdown] = useState('');
17
24
  const [isBusy, setIsBusy] = useState(false);
18
25
  const [error, setError] = useState('');
26
+ /** The branding logo's own proportions, once the image has reported them. */
27
+ const [measuredLogo, setMeasuredLogo] = useState(null);
28
+ /** A branding logo that failed to load, so the header falls back to the name. */
29
+ const [brokenLogoUri, setBrokenLogoUri] = useState(null);
19
30
  const sessionRef = useRef(0);
20
31
  const onSuccessRef = useRef(onSuccess);
21
32
  const onCancelRef = useRef(onCancel);
@@ -24,9 +35,7 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
24
35
  const effectiveTheme = branding?.themeMode ?? 'light';
25
36
  const colors = effectiveTheme === 'dark' ? darkColors : lightColors;
26
37
  const allowedTypes = useMemo(() => normalizeAllowedTypes(config), [config]);
27
- const methodsForIdentity = useMemo(() => getMethodsForIdentity(config, identityType, passkeyProvider), [config, identityType, passkeyProvider]);
28
- const methodsWithoutIdentity = useMemo(() => getMethodsWithoutIdentity(config, passkeyProvider), [config, passkeyProvider]);
29
- const visibleMethods = allowedTypes.length > 0 ? methodsForIdentity : methodsWithoutIdentity;
38
+ const visibleMethods = useMemo(() => getMethodsForIdentity(config, identityType), [config, identityType]);
30
39
  useEffect(() => {
31
40
  onSuccessRef.current = onSuccess;
32
41
  onCancelRef.current = onCancel;
@@ -46,6 +55,7 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
46
55
  setKindling(null);
47
56
  setExpiresAt(null);
48
57
  setSelectedMethod(null);
58
+ setBrokenLogoUri(null);
49
59
  setIdentity(initialIdentity ?? '');
50
60
  setIdentityType(initialIdentityType ?? 'email');
51
61
  client.products.identity.getConfig()
@@ -58,9 +68,6 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
58
68
  if (nextAllowedTypes.length > 0) {
59
69
  setStep('identity');
60
70
  }
61
- else if (getMethodsWithoutIdentity(nextConfig, passkeyProvider).length > 0) {
62
- setStep('methods');
63
- }
64
71
  else {
65
72
  setError('No supported sign-in methods are enabled for this app.');
66
73
  setStep('error');
@@ -77,7 +84,7 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
77
84
  return () => {
78
85
  cancelled = true;
79
86
  };
80
- }, [client, initialIdentity, initialIdentityType, passkeyProvider, visible]);
87
+ }, [client, initialIdentity, initialIdentityType, visible]);
81
88
  useEffect(() => {
82
89
  if (!expiresAt || step !== 'otp') {
83
90
  setCountdown('');
@@ -108,9 +115,6 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
108
115
  onCancelRef.current();
109
116
  }, []);
110
117
  const sendOtp = useCallback(async (method, targetIdentity = identity, targetIdentityType = identityType) => {
111
- const otpMethod = toOtpMethod(method);
112
- if (!otpMethod)
113
- return;
114
118
  const sessionId = sessionRef.current;
115
119
  setIsBusy(true);
116
120
  setError('');
@@ -119,7 +123,7 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
119
123
  const response = await client.products.identity.sendOtp({
120
124
  identity: targetIdentity,
121
125
  identityType: targetIdentityType,
122
- method: otpMethod,
126
+ method: toOtpMethod(method),
123
127
  });
124
128
  if (!isActiveSession(sessionRef, sessionId))
125
129
  return;
@@ -139,46 +143,6 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
139
143
  }
140
144
  }
141
145
  }, [client, identity, identityType, reportError]);
142
- const runPasskey = useCallback(async () => {
143
- if (!passkeyProvider) {
144
- setError('Passkeys are not available in this app.');
145
- return;
146
- }
147
- const sessionId = sessionRef.current;
148
- setIsBusy(true);
149
- setError('');
150
- setSelectedMethod('passkey');
151
- setStep('passkey');
152
- try {
153
- const supported = await passkeyProvider.isSupported();
154
- if (!supported) {
155
- throw new Error('Passkeys are not supported on this device.');
156
- }
157
- if (!isActiveSession(sessionRef, sessionId))
158
- return;
159
- const challenge = await client.products.identity.getPasskeyAuthOptions();
160
- if (!isActiveSession(sessionRef, sessionId))
161
- return;
162
- const credential = await passkeyProvider.authenticate(challenge.options);
163
- if (!isActiveSession(sessionRef, sessionId))
164
- return;
165
- if (!credential) {
166
- throw new Error('Passkey authentication was cancelled.');
167
- }
168
- const result = await client.products.identity.completePasskeyAuthentication(credential, challenge.session);
169
- await finishWithToken(result, sessionId);
170
- }
171
- catch (err) {
172
- if (!isActiveSession(sessionRef, sessionId))
173
- return;
174
- reportError(err, 'Passkey authentication failed');
175
- }
176
- finally {
177
- if (isActiveSession(sessionRef, sessionId)) {
178
- setIsBusy(false);
179
- }
180
- }
181
- }, [client, finishWithToken, passkeyProvider, reportError]);
182
146
  const handleIdentitySubmit = useCallback(async () => {
183
147
  if (isBusy)
184
148
  return;
@@ -189,7 +153,7 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
189
153
  }
190
154
  const normalizedIdentity = parsed.identity;
191
155
  const nextIdentityType = parsed.identityType;
192
- const availableMethods = getMethodsForIdentity(config, nextIdentityType, passkeyProvider);
156
+ const availableMethods = getMethodsForIdentity(config, nextIdentityType);
193
157
  if (availableMethods.length === 0) {
194
158
  setError('No supported sign-in methods are enabled for this identity type.');
195
159
  return;
@@ -197,38 +161,14 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
197
161
  setIdentity(normalizedIdentity);
198
162
  setIdentityType(nextIdentityType);
199
163
  setError('');
200
- setIsBusy(true);
201
- const sessionId = sessionRef.current;
202
- try {
203
- if (availableMethods.length === 1) {
204
- if (availableMethods[0] === 'passkey') {
205
- await runPasskey();
206
- }
207
- else {
208
- await sendOtp(availableMethods[0], normalizedIdentity, nextIdentityType);
209
- }
210
- return;
211
- }
212
- setStep('methods');
213
- }
214
- catch (err) {
215
- if (!isActiveSession(sessionRef, sessionId))
216
- return;
217
- reportError(err, 'Failed to load sign-in methods');
218
- }
219
- finally {
220
- if (isActiveSession(sessionRef, sessionId)) {
221
- setIsBusy(false);
222
- }
223
- }
224
- }, [allowedTypes, config, identity, isBusy, passkeyProvider, reportError, runPasskey, sendOtp]);
225
- const handleMethodSelect = useCallback(async (method) => {
226
- if (method === 'passkey') {
227
- await runPasskey();
164
+ // One way in: send that code. Several (a phone with both SMS and voice):
165
+ // let the person choose. sendOtp owns the busy flag and its own failures.
166
+ if (availableMethods.length === 1) {
167
+ await sendOtp(availableMethods[0], normalizedIdentity, nextIdentityType);
228
168
  return;
229
169
  }
230
- await sendOtp(method);
231
- }, [runPasskey, sendOtp]);
170
+ setStep('methods');
171
+ }, [allowedTypes, config, identity, isBusy, sendOtp]);
232
172
  const handleVerifyOtp = useCallback(async () => {
233
173
  if (!kindling || pin.length !== 6)
234
174
  return;
@@ -284,9 +224,6 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
284
224
  if (nextAllowedTypes.length > 0) {
285
225
  setStep('identity');
286
226
  }
287
- else if (getMethodsWithoutIdentity(nextConfig, passkeyProvider).length > 0) {
288
- setStep('methods');
289
- }
290
227
  else {
291
228
  setError('No supported sign-in methods are enabled for this app.');
292
229
  setStep('error');
@@ -303,10 +240,26 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
303
240
  setIsBusy(false);
304
241
  }
305
242
  });
306
- }, [client, initialIdentity, initialIdentityType, passkeyProvider, reportError]);
307
- const headerLogo = getHeaderLogo(branding, effectiveTheme);
243
+ }, [client, initialIdentity, initialIdentityType, reportError]);
308
244
  const companyName = branding?.companyName || 'SparkVault';
309
- return (_jsx(Modal, { visible: visible, transparent: true, animationType: "fade", onRequestClose: handleCancel, children: _jsx(KeyboardAvoidingView, { behavior: Platform.OS === 'ios' ? 'padding' : undefined, style: [styles.backdrop, { backgroundColor: colors.backdrop }], children: _jsx(ScrollView, { contentContainerStyle: styles.scrollContent, keyboardShouldPersistTaps: "handled", children: _jsxs(View, { style: [styles.card, { backgroundColor: colors.card, borderColor: colors.border }], children: [_jsxs(View, { style: styles.header, children: [_jsxs(View, { style: styles.brand, children: [headerLogo ? (_jsx(Image, { source: { uri: headerLogo }, style: styles.logo, resizeMode: "contain" })) : (_jsx(View, { style: [styles.logoFallback, { backgroundColor: colors.primarySoft }], children: _jsx(Text, { style: [styles.logoFallbackText, { color: colors.primary }], children: companyName.slice(0, 1).toUpperCase() }) })), _jsx(Text, { style: [styles.companyName, { color: colors.text }], children: companyName })] }), _jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: "Close identity verification", onPress: handleCancel, hitSlop: 12, style: styles.closeButton, children: _jsx(Text, { style: [styles.closeText, { color: colors.muted }], children: "\u2715" }) })] }), step === 'loading' && (_jsxs(View, { style: styles.centerContent, children: [_jsx(ActivityIndicator, { color: colors.primary }), _jsx(Text, { style: [styles.mutedText, { color: colors.muted }], children: "Loading sign-in options..." })] })), step === 'identity' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: "Sign in" }), _jsx(Text, { style: [styles.subtitle, { color: colors.muted }], children: identitySubtitle(allowedTypes) }), _jsx(TextInput, { value: identity, onChangeText: (value) => {
245
+ // A logo speaks for the brand on its own, so it replaces the company name
246
+ // rather than sitting beside it, drawn at its own proportions and the full
247
+ // height of the header instead of squeezed into a square. Only a logo that
248
+ // loads earns that: one that fails falls back to the lettermark and name, so
249
+ // the header is never blank.
250
+ const logoUri = resolveLogoUri(branding, effectiveTheme, brokenLogoUri);
251
+ const logoAspectRatio = measuredLogo?.uri === logoUri ? measuredLogo.aspectRatio : null;
252
+ return (_jsx(Modal, { visible: visible, transparent: true, animationType: "fade", onRequestClose: handleCancel, children: _jsx(KeyboardAvoidingView, { behavior: Platform.OS === 'ios' ? 'padding' : undefined, style: [styles.backdrop, { backgroundColor: colors.backdrop }], children: _jsx(ScrollView, { contentContainerStyle: styles.scrollContent, keyboardShouldPersistTaps: "handled", children: _jsxs(View, { style: [styles.card, { backgroundColor: colors.card, borderColor: colors.border }], children: [_jsxs(View, { style: styles.header, children: [_jsx(View, { style: styles.brand, children: logoUri ? (_jsx(Image, { source: { uri: logoUri }, style: logoAspectRatio === null
253
+ ? styles.logoUnmeasured
254
+ : [styles.logo, { aspectRatio: logoAspectRatio }], resizeMode: "contain", accessibilityRole: "image", accessibilityLabel: companyName, onLoad: (event) => {
255
+ const { width, height } = event.nativeEvent.source;
256
+ if (width <= 0 || height <= 0)
257
+ return;
258
+ const aspectRatio = width / height;
259
+ setMeasuredLogo(current => (current?.uri === logoUri && current.aspectRatio === aspectRatio
260
+ ? current
261
+ : { uri: logoUri, aspectRatio }));
262
+ }, onError: () => setBrokenLogoUri(logoUri) })) : (_jsxs(_Fragment, { children: [_jsx(View, { style: [styles.logoFallback, { backgroundColor: colors.primarySoft }], children: _jsx(Text, { style: [styles.logoFallbackText, { color: colors.primary }], children: companyName.slice(0, 1).toUpperCase() }) }), _jsx(Text, { style: [styles.companyName, { color: colors.text }], children: companyName })] })) }), _jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: "Close identity verification", onPress: handleCancel, hitSlop: 12, style: styles.closeButton, children: _jsx(Text, { style: [styles.closeText, { color: colors.muted }], children: "\u2715" }) })] }), step === 'loading' && (_jsxs(View, { style: styles.centerContent, children: [_jsx(ActivityIndicator, { color: colors.primary }), _jsx(Text, { style: [styles.mutedText, { color: colors.muted }], children: "Loading sign-in options..." })] })), step === 'identity' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: "Sign in" }), _jsx(Text, { style: [styles.subtitle, { color: colors.muted }], children: identitySubtitle(allowedTypes) }), _jsx(TextInput, { value: identity, onChangeText: (value) => {
310
263
  setIdentity(value);
311
264
  setError('');
312
265
  if (allowedTypes.length > 1) {
@@ -319,14 +272,14 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
319
272
  color: colors.text,
320
273
  backgroundColor: colors.input,
321
274
  },
322
- ] }), error ? _jsx(Text, { style: [styles.error, { color: colors.error }], children: error }) : null, _jsx(PrimaryButton, { label: "Continue", colors: colors, disabled: !identity.trim() || isBusy, loading: isBusy, onPress: handleIdentitySubmit })] })), step === 'methods' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: "Choose a method" }), identity ? _jsx(Text, { style: [styles.subtitle, { color: colors.muted }], children: identity }) : null, _jsx(View, { style: styles.methodList, children: visibleMethods.map((method) => (_jsxs(Pressable, { accessibilityRole: "button", onPress: () => handleMethodSelect(method), disabled: isBusy, style: ({ pressed }) => [
275
+ ] }), error ? _jsx(Text, { style: [styles.error, { color: colors.error }], children: error }) : null, _jsx(PrimaryButton, { label: "Continue", colors: colors, disabled: !identity.trim() || isBusy, loading: isBusy, onPress: handleIdentitySubmit })] })), step === 'methods' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: "Choose a method" }), identity ? _jsx(Text, { style: [styles.subtitle, { color: colors.muted }], children: identity }) : null, _jsx(View, { style: styles.methodList, children: visibleMethods.map((method) => (_jsxs(Pressable, { accessibilityRole: "button", onPress: () => sendOtp(method), disabled: isBusy, style: ({ pressed }) => [
323
276
  styles.methodButton,
324
277
  {
325
278
  borderColor: colors.border,
326
279
  backgroundColor: pressed ? colors.pressed : colors.input,
327
280
  opacity: isBusy ? 0.6 : 1,
328
281
  },
329
- ], children: [_jsx(Text, { style: [styles.methodTitle, { color: colors.text }], children: methodTitle(method) }), _jsx(Text, { style: [styles.methodDescription, { color: colors.muted }], children: methodDescription(method) })] }, method))) }), error ? _jsx(Text, { style: [styles.error, { color: colors.error }], children: error }) : null, allowedTypes.length > 0 ? (_jsx(TextButton, { label: "Use a different identity", colors: colors, onPress: () => setStep('identity') })) : null] })), step === 'passkey' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: "Use your passkey" }), _jsx(Text, { style: [styles.subtitle, { color: colors.muted }], children: "Confirm this sign-in with your device passkey." }), _jsx(View, { style: [styles.passkeyIcon, { backgroundColor: colors.primarySoft }], children: _jsx(Text, { style: styles.passkeyIconText, children: "\uD83D\uDD11" }) }), isBusy ? _jsx(ActivityIndicator, { color: colors.primary }) : null, error ? _jsx(Text, { style: [styles.error, { color: colors.error }], children: error }) : null, _jsx(PrimaryButton, { label: "Try Again", colors: colors, disabled: isBusy, loading: isBusy, onPress: runPasskey }), allowedTypes.length > 0 && fallbackOtpMethod(methodsForIdentity) ? (_jsx(TextButton, { label: fallbackLabel(fallbackOtpMethod(methodsForIdentity)), colors: colors, onPress: () => sendOtp(fallbackOtpMethod(methodsForIdentity)), disabled: isBusy })) : null] })), step === 'otp' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: otpTitle(selectedMethod) }), _jsxs(Text, { style: [styles.subtitle, { color: colors.muted }], children: ["Enter the 6-digit code sent to ", '\n', _jsx(Text, { style: { color: colors.text, fontWeight: '700' }, children: identity })] }), _jsx(TextInput, { value: pin, onChangeText: (value) => {
282
+ ], children: [_jsx(Text, { style: [styles.methodTitle, { color: colors.text }], children: methodTitle(method) }), _jsx(Text, { style: [styles.methodDescription, { color: colors.muted }], children: methodDescription(method) })] }, method))) }), error ? _jsx(Text, { style: [styles.error, { color: colors.error }], children: error }) : null, allowedTypes.length > 0 ? (_jsx(TextButton, { label: "Use a different identity", colors: colors, onPress: () => setStep('identity') })) : null] })), step === 'otp' && (_jsxs(View, { style: styles.body, children: [_jsx(Text, { style: [styles.title, { color: colors.text }], children: otpTitle(selectedMethod) }), _jsxs(Text, { style: [styles.subtitle, { color: colors.muted }], children: ["Enter the 6-digit code sent to ", '\n', _jsx(Text, { style: { color: colors.text, fontWeight: '700' }, children: identity })] }), _jsx(TextInput, { value: pin, onChangeText: (value) => {
330
283
  setPin(value.replace(/\D/g, '').slice(0, 6));
331
284
  setError('');
332
285
  }, placeholder: "000000", placeholderTextColor: colors.placeholder, keyboardType: "number-pad", maxLength: 6, editable: !isBusy && countdown !== 'Expired', style: [
@@ -367,22 +320,16 @@ function resolveInitialIdentityType(identity, explicitType, allowedTypes) {
367
320
  return 'phone';
368
321
  return allowedTypes.includes('email') ? 'email' : 'phone';
369
322
  }
370
- function getMethodsForIdentity(config, identityType, passkeyProvider) {
323
+ function getMethodsForIdentity(config, identityType) {
371
324
  const configuredMethods = config?.methods ?? ['otp_email'];
372
325
  return configuredMethods.filter((method) => {
373
326
  if (!SUPPORTED_METHODS.has(method))
374
327
  return false;
375
- if (method === 'passkey')
376
- return Boolean(passkeyProvider);
377
328
  if (method === 'otp_email')
378
329
  return identityType === 'email';
379
330
  return identityType === 'phone';
380
331
  });
381
332
  }
382
- function getMethodsWithoutIdentity(config, passkeyProvider) {
383
- const configuredMethods = config?.methods ?? [];
384
- return configuredMethods.filter((method) => (method === 'passkey' && Boolean(passkeyProvider)));
385
- }
386
333
  function parseIdentity(value, allowedTypes) {
387
334
  const trimmed = value.trim();
388
335
  if (!trimmed) {
@@ -409,27 +356,13 @@ function parseIdentity(value, allowedTypes) {
409
356
  return { ok: true, identity: phone, identityType: 'phone' };
410
357
  }
411
358
  function toOtpMethod(method) {
412
- if (method === 'otp_email')
413
- return 'email';
414
359
  if (method === 'otp_sms')
415
360
  return 'sms';
416
361
  if (method === 'otp_voice')
417
362
  return 'voice';
418
- return null;
419
- }
420
- function fallbackOtpMethod(methods) {
421
- return methods.find((method) => method !== 'passkey') ?? null;
422
- }
423
- function fallbackLabel(method) {
424
- if (method === 'otp_sms')
425
- return 'Use SMS code instead';
426
- if (method === 'otp_voice')
427
- return 'Use voice call instead';
428
- return 'Use email code instead';
363
+ return 'email';
429
364
  }
430
365
  function methodTitle(method) {
431
- if (method === 'passkey')
432
- return 'Passkey';
433
366
  if (method === 'otp_sms')
434
367
  return 'Text message';
435
368
  if (method === 'otp_voice')
@@ -437,8 +370,6 @@ function methodTitle(method) {
437
370
  return 'Email code';
438
371
  }
439
372
  function methodDescription(method) {
440
- if (method === 'passkey')
441
- return 'Use Face ID, Touch ID, or your device passcode.';
442
373
  if (method === 'otp_sms')
443
374
  return 'Receive a one-time code by SMS.';
444
375
  if (method === 'otp_voice')
@@ -466,12 +397,13 @@ function otpTitle(method) {
466
397
  return 'Check your phone';
467
398
  return 'Check your email';
468
399
  }
469
- function getHeaderLogo(branding, theme) {
400
+ function resolveLogoUri(branding, theme, brokenLogoUri) {
470
401
  if (!branding)
471
402
  return null;
472
- return theme === 'dark'
403
+ const uri = theme === 'dark'
473
404
  ? branding.logoDark || branding.logoLight
474
405
  : branding.logoLight || branding.logoDark;
406
+ return uri && uri !== brokenLogoUri ? uri : null;
475
407
  }
476
408
  function formatCountdown(seconds) {
477
409
  const minutes = Math.floor(seconds / 60);
@@ -549,9 +481,17 @@ const styles = StyleSheet.create({
549
481
  alignItems: 'center',
550
482
  },
551
483
  logo: {
552
- width: 32,
553
- height: 32,
554
- marginRight: 10,
484
+ // Height is the header's; width follows the logo's own aspect ratio,
485
+ // bounded by the space left beside the close button.
486
+ height: 40,
487
+ maxWidth: '100%',
488
+ },
489
+ logoUnmeasured: {
490
+ // Before the image reports its shape. A square, not a zero-width box: iOS
491
+ // only loads an image into a non-zero frame, and a box with no width would
492
+ // leave the header permanently empty.
493
+ height: 40,
494
+ width: 40,
555
495
  },
556
496
  logoFallback: {
557
497
  width: 32,
@@ -664,16 +604,5 @@ const styles = StyleSheet.create({
664
604
  fontSize: 13,
665
605
  lineHeight: 18,
666
606
  },
667
- passkeyIcon: {
668
- width: 76,
669
- height: 76,
670
- borderRadius: 38,
671
- alignSelf: 'center',
672
- alignItems: 'center',
673
- justifyContent: 'center',
674
- },
675
- passkeyIconText: {
676
- fontSize: 34,
677
- },
678
607
  });
679
608
  //# sourceMappingURL=identity-dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity-dialog.js","sourceRoot":"","sources":["../src/identity-dialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity-dialog.js","sourceRoot":"","sources":["../src/identity-dialog.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sparkvault/sdk-mobile",
3
- "version": "5.3.1",
3
+ "version": "6.0.0",
4
4
  "description": "Mobile SDK for SparkVault Identity, vault, folder, and ingot workflows",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,31 +19,30 @@ import type {
19
19
  IdentityMethodId,
20
20
  IdentityType,
21
21
  IdentityVerifyResult,
22
- PasskeyAuthOptions,
23
- PasskeyCredential,
24
22
  } from './types.js';
25
23
 
26
- type DialogStep = 'loading' | 'identity' | 'methods' | 'passkey' | 'otp' | 'error';
24
+ type DialogStep = 'loading' | 'identity' | 'methods' | 'otp' | 'error';
27
25
  type OtpMethod = 'email' | 'sms' | 'voice';
28
- type SupportedMethodId = 'passkey' | 'otp_email' | 'otp_sms' | 'otp_voice';
29
-
30
- export interface MobilePasskeyProvider {
31
- isSupported(): boolean | Promise<boolean>;
32
- authenticate(options: PasskeyAuthOptions): Promise<PasskeyCredential | null>;
33
- }
26
+ type SupportedMethodId = 'otp_email' | 'otp_sms' | 'otp_voice';
34
27
 
35
28
  export interface SparkVaultIdentityDialogProps {
36
29
  client: SparkVaultMobile;
37
30
  visible: boolean;
38
31
  initialIdentity?: string;
39
32
  initialIdentityType?: IdentityType;
40
- passkeyProvider?: MobilePasskeyProvider;
41
33
  onSuccess(result: IdentityVerifyResult & { jwks: IdentityJwks }): void | Promise<void>;
42
34
  onCancel(): void;
43
35
  onError?(error: Error): void;
44
36
  }
45
37
 
46
- const SUPPORTED_METHODS = new Set<IdentityMethodId>(['passkey', 'otp_email', 'otp_sms', 'otp_voice']);
38
+ /**
39
+ * Sign-in here is one-time code only. Passkeys are an Identity Product method
40
+ * on the web, but the native ceremony does not work in the mobile app, so the
41
+ * dialog never offers one: a tenant with `passkey` enabled server-side simply
42
+ * sees the code methods. `products.identity` still exposes the passkey APIs
43
+ * for a host that drives the ceremony itself.
44
+ */
45
+ const SUPPORTED_METHODS = new Set<IdentityMethodId>(['otp_email', 'otp_sms', 'otp_voice']);
47
46
  const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
48
47
  const E164_PHONE_REGEX = /^\+[1-9]\d{7,14}$/;
49
48
 
@@ -52,7 +51,6 @@ export function SparkVaultIdentityDialog({
52
51
  visible,
53
52
  initialIdentity,
54
53
  initialIdentityType,
55
- passkeyProvider,
56
54
  onSuccess,
57
55
  onCancel,
58
56
  onError,
@@ -68,6 +66,10 @@ export function SparkVaultIdentityDialog({
68
66
  const [countdown, setCountdown] = useState('');
69
67
  const [isBusy, setIsBusy] = useState(false);
70
68
  const [error, setError] = useState('');
69
+ /** The branding logo's own proportions, once the image has reported them. */
70
+ const [measuredLogo, setMeasuredLogo] = useState<{ uri: string; aspectRatio: number } | null>(null);
71
+ /** A branding logo that failed to load, so the header falls back to the name. */
72
+ const [brokenLogoUri, setBrokenLogoUri] = useState<string | null>(null);
71
73
  const sessionRef = useRef(0);
72
74
  const onSuccessRef = useRef(onSuccess);
73
75
  const onCancelRef = useRef(onCancel);
@@ -77,15 +79,10 @@ export function SparkVaultIdentityDialog({
77
79
  const effectiveTheme = branding?.themeMode ?? 'light';
78
80
  const colors = effectiveTheme === 'dark' ? darkColors : lightColors;
79
81
  const allowedTypes = useMemo(() => normalizeAllowedTypes(config), [config]);
80
- const methodsForIdentity = useMemo(
81
- () => getMethodsForIdentity(config, identityType, passkeyProvider),
82
- [config, identityType, passkeyProvider]
83
- );
84
- const methodsWithoutIdentity = useMemo(
85
- () => getMethodsWithoutIdentity(config, passkeyProvider),
86
- [config, passkeyProvider]
82
+ const visibleMethods = useMemo(
83
+ () => getMethodsForIdentity(config, identityType),
84
+ [config, identityType]
87
85
  );
88
- const visibleMethods = allowedTypes.length > 0 ? methodsForIdentity : methodsWithoutIdentity;
89
86
 
90
87
  useEffect(() => {
91
88
  onSuccessRef.current = onSuccess;
@@ -108,6 +105,7 @@ export function SparkVaultIdentityDialog({
108
105
  setKindling(null);
109
106
  setExpiresAt(null);
110
107
  setSelectedMethod(null);
108
+ setBrokenLogoUri(null);
111
109
  setIdentity(initialIdentity ?? '');
112
110
  setIdentityType(initialIdentityType ?? 'email');
113
111
 
@@ -119,8 +117,6 @@ export function SparkVaultIdentityDialog({
119
117
  setIdentityType(resolveInitialIdentityType(initialIdentity, initialIdentityType, nextAllowedTypes));
120
118
  if (nextAllowedTypes.length > 0) {
121
119
  setStep('identity');
122
- } else if (getMethodsWithoutIdentity(nextConfig, passkeyProvider).length > 0) {
123
- setStep('methods');
124
120
  } else {
125
121
  setError('No supported sign-in methods are enabled for this app.');
126
122
  setStep('error');
@@ -137,7 +133,7 @@ export function SparkVaultIdentityDialog({
137
133
  return () => {
138
134
  cancelled = true;
139
135
  };
140
- }, [client, initialIdentity, initialIdentityType, passkeyProvider, visible]);
136
+ }, [client, initialIdentity, initialIdentityType, visible]);
141
137
 
142
138
  useEffect(() => {
143
139
  if (!expiresAt || step !== 'otp') {
@@ -178,9 +174,6 @@ export function SparkVaultIdentityDialog({
178
174
  targetIdentity = identity,
179
175
  targetIdentityType = identityType
180
176
  ) => {
181
- const otpMethod = toOtpMethod(method);
182
- if (!otpMethod) return;
183
-
184
177
  const sessionId = sessionRef.current;
185
178
  setIsBusy(true);
186
179
  setError('');
@@ -189,7 +182,7 @@ export function SparkVaultIdentityDialog({
189
182
  const response = await client.products.identity.sendOtp({
190
183
  identity: targetIdentity,
191
184
  identityType: targetIdentityType,
192
- method: otpMethod,
185
+ method: toOtpMethod(method),
193
186
  });
194
187
  if (!isActiveSession(sessionRef, sessionId)) return;
195
188
  setKindling(response.kindling);
@@ -206,45 +199,6 @@ export function SparkVaultIdentityDialog({
206
199
  }
207
200
  }, [client, identity, identityType, reportError]);
208
201
 
209
- const runPasskey = useCallback(async () => {
210
- if (!passkeyProvider) {
211
- setError('Passkeys are not available in this app.');
212
- return;
213
- }
214
-
215
- const sessionId = sessionRef.current;
216
- setIsBusy(true);
217
- setError('');
218
- setSelectedMethod('passkey');
219
- setStep('passkey');
220
-
221
- try {
222
- const supported = await passkeyProvider.isSupported();
223
- if (!supported) {
224
- throw new Error('Passkeys are not supported on this device.');
225
- }
226
- if (!isActiveSession(sessionRef, sessionId)) return;
227
-
228
- const challenge = await client.products.identity.getPasskeyAuthOptions();
229
- if (!isActiveSession(sessionRef, sessionId)) return;
230
- const credential = await passkeyProvider.authenticate(challenge.options);
231
- if (!isActiveSession(sessionRef, sessionId)) return;
232
- if (!credential) {
233
- throw new Error('Passkey authentication was cancelled.');
234
- }
235
-
236
- const result = await client.products.identity.completePasskeyAuthentication(credential, challenge.session);
237
- await finishWithToken(result, sessionId);
238
- } catch (err) {
239
- if (!isActiveSession(sessionRef, sessionId)) return;
240
- reportError(err, 'Passkey authentication failed');
241
- } finally {
242
- if (isActiveSession(sessionRef, sessionId)) {
243
- setIsBusy(false);
244
- }
245
- }
246
- }, [client, finishWithToken, passkeyProvider, reportError]);
247
-
248
202
  const handleIdentitySubmit = useCallback(async () => {
249
203
  if (isBusy) return;
250
204
 
@@ -256,7 +210,7 @@ export function SparkVaultIdentityDialog({
256
210
 
257
211
  const normalizedIdentity = parsed.identity;
258
212
  const nextIdentityType = parsed.identityType;
259
- const availableMethods = getMethodsForIdentity(config, nextIdentityType, passkeyProvider);
213
+ const availableMethods = getMethodsForIdentity(config, nextIdentityType);
260
214
  if (availableMethods.length === 0) {
261
215
  setError('No supported sign-in methods are enabled for this identity type.');
262
216
  return;
@@ -265,37 +219,16 @@ export function SparkVaultIdentityDialog({
265
219
  setIdentity(normalizedIdentity);
266
220
  setIdentityType(nextIdentityType);
267
221
  setError('');
268
- setIsBusy(true);
269
- const sessionId = sessionRef.current;
270
-
271
- try {
272
- if (availableMethods.length === 1) {
273
- if (availableMethods[0] === 'passkey') {
274
- await runPasskey();
275
- } else {
276
- await sendOtp(availableMethods[0], normalizedIdentity, nextIdentityType);
277
- }
278
- return;
279
- }
280
-
281
- setStep('methods');
282
- } catch (err) {
283
- if (!isActiveSession(sessionRef, sessionId)) return;
284
- reportError(err, 'Failed to load sign-in methods');
285
- } finally {
286
- if (isActiveSession(sessionRef, sessionId)) {
287
- setIsBusy(false);
288
- }
289
- }
290
- }, [allowedTypes, config, identity, isBusy, passkeyProvider, reportError, runPasskey, sendOtp]);
291
222
 
292
- const handleMethodSelect = useCallback(async (method: SupportedMethodId) => {
293
- if (method === 'passkey') {
294
- await runPasskey();
223
+ // One way in: send that code. Several (a phone with both SMS and voice):
224
+ // let the person choose. sendOtp owns the busy flag and its own failures.
225
+ if (availableMethods.length === 1) {
226
+ await sendOtp(availableMethods[0], normalizedIdentity, nextIdentityType);
295
227
  return;
296
228
  }
297
- await sendOtp(method);
298
- }, [runPasskey, sendOtp]);
229
+
230
+ setStep('methods');
231
+ }, [allowedTypes, config, identity, isBusy, sendOtp]);
299
232
 
300
233
  const handleVerifyOtp = useCallback(async () => {
301
234
  if (!kindling || pin.length !== 6) return;
@@ -349,8 +282,6 @@ export function SparkVaultIdentityDialog({
349
282
  setIdentityType(resolveInitialIdentityType(initialIdentity, initialIdentityType, nextAllowedTypes));
350
283
  if (nextAllowedTypes.length > 0) {
351
284
  setStep('identity');
352
- } else if (getMethodsWithoutIdentity(nextConfig, passkeyProvider).length > 0) {
353
- setStep('methods');
354
285
  } else {
355
286
  setError('No supported sign-in methods are enabled for this app.');
356
287
  setStep('error');
@@ -366,10 +297,16 @@ export function SparkVaultIdentityDialog({
366
297
  setIsBusy(false);
367
298
  }
368
299
  });
369
- }, [client, initialIdentity, initialIdentityType, passkeyProvider, reportError]);
300
+ }, [client, initialIdentity, initialIdentityType, reportError]);
370
301
 
371
- const headerLogo = getHeaderLogo(branding, effectiveTheme);
372
302
  const companyName = branding?.companyName || 'SparkVault';
303
+ // A logo speaks for the brand on its own, so it replaces the company name
304
+ // rather than sitting beside it, drawn at its own proportions and the full
305
+ // height of the header instead of squeezed into a square. Only a logo that
306
+ // loads earns that: one that fails falls back to the lettermark and name, so
307
+ // the header is never blank.
308
+ const logoUri = resolveLogoUri(branding, effectiveTheme, brokenLogoUri);
309
+ const logoAspectRatio = measuredLogo?.uri === logoUri ? measuredLogo.aspectRatio : null;
373
310
 
374
311
  return (
375
312
  <Modal visible={visible} transparent animationType="fade" onRequestClose={handleCancel}>
@@ -384,16 +321,39 @@ export function SparkVaultIdentityDialog({
384
321
  <View style={[styles.card, { backgroundColor: colors.card, borderColor: colors.border }]}>
385
322
  <View style={styles.header}>
386
323
  <View style={styles.brand}>
387
- {headerLogo ? (
388
- <Image source={{ uri: headerLogo }} style={styles.logo} resizeMode="contain" />
324
+ {logoUri ? (
325
+ <Image
326
+ source={{ uri: logoUri }}
327
+ style={
328
+ logoAspectRatio === null
329
+ ? styles.logoUnmeasured
330
+ : [styles.logo, { aspectRatio: logoAspectRatio }]
331
+ }
332
+ resizeMode="contain"
333
+ accessibilityRole="image"
334
+ accessibilityLabel={companyName}
335
+ onLoad={(event) => {
336
+ const { width, height } = event.nativeEvent.source;
337
+ if (width <= 0 || height <= 0) return;
338
+ const aspectRatio = width / height;
339
+ setMeasuredLogo(current => (
340
+ current?.uri === logoUri && current.aspectRatio === aspectRatio
341
+ ? current
342
+ : { uri: logoUri, aspectRatio }
343
+ ));
344
+ }}
345
+ onError={() => setBrokenLogoUri(logoUri)}
346
+ />
389
347
  ) : (
390
- <View style={[styles.logoFallback, { backgroundColor: colors.primarySoft }]}>
391
- <Text style={[styles.logoFallbackText, { color: colors.primary }]}>
392
- {companyName.slice(0, 1).toUpperCase()}
393
- </Text>
394
- </View>
348
+ <>
349
+ <View style={[styles.logoFallback, { backgroundColor: colors.primarySoft }]}>
350
+ <Text style={[styles.logoFallbackText, { color: colors.primary }]}>
351
+ {companyName.slice(0, 1).toUpperCase()}
352
+ </Text>
353
+ </View>
354
+ <Text style={[styles.companyName, { color: colors.text }]}>{companyName}</Text>
355
+ </>
395
356
  )}
396
- <Text style={[styles.companyName, { color: colors.text }]}>{companyName}</Text>
397
357
  </View>
398
358
  <Pressable
399
359
  accessibilityRole="button"
@@ -464,7 +424,7 @@ export function SparkVaultIdentityDialog({
464
424
  <Pressable
465
425
  key={method}
466
426
  accessibilityRole="button"
467
- onPress={() => handleMethodSelect(method)}
427
+ onPress={() => sendOtp(method)}
468
428
  disabled={isBusy}
469
429
  style={({ pressed }) => [
470
430
  styles.methodButton,
@@ -489,35 +449,6 @@ export function SparkVaultIdentityDialog({
489
449
  </View>
490
450
  )}
491
451
 
492
- {step === 'passkey' && (
493
- <View style={styles.body}>
494
- <Text style={[styles.title, { color: colors.text }]}>Use your passkey</Text>
495
- <Text style={[styles.subtitle, { color: colors.muted }]}>
496
- Confirm this sign-in with your device passkey.
497
- </Text>
498
- <View style={[styles.passkeyIcon, { backgroundColor: colors.primarySoft }]}>
499
- <Text style={styles.passkeyIconText}>🔑</Text>
500
- </View>
501
- {isBusy ? <ActivityIndicator color={colors.primary} /> : null}
502
- {error ? <Text style={[styles.error, { color: colors.error }]}>{error}</Text> : null}
503
- <PrimaryButton
504
- label="Try Again"
505
- colors={colors}
506
- disabled={isBusy}
507
- loading={isBusy}
508
- onPress={runPasskey}
509
- />
510
- {allowedTypes.length > 0 && fallbackOtpMethod(methodsForIdentity) ? (
511
- <TextButton
512
- label={fallbackLabel(fallbackOtpMethod(methodsForIdentity)!)}
513
- colors={colors}
514
- onPress={() => sendOtp(fallbackOtpMethod(methodsForIdentity)!)}
515
- disabled={isBusy}
516
- />
517
- ) : null}
518
- </View>
519
- )}
520
-
521
452
  {step === 'otp' && (
522
453
  <View style={styles.body}>
523
454
  <Text style={[styles.title, { color: colors.text }]}>{otpTitle(selectedMethod)}</Text>
@@ -662,28 +593,16 @@ function resolveInitialIdentityType(
662
593
 
663
594
  function getMethodsForIdentity(
664
595
  config: IdentityConfig | null,
665
- identityType: IdentityType,
666
- passkeyProvider?: MobilePasskeyProvider
596
+ identityType: IdentityType
667
597
  ): SupportedMethodId[] {
668
598
  const configuredMethods = config?.methods ?? ['otp_email'];
669
599
  return configuredMethods.filter((method): method is SupportedMethodId => {
670
600
  if (!SUPPORTED_METHODS.has(method)) return false;
671
- if (method === 'passkey') return Boolean(passkeyProvider);
672
601
  if (method === 'otp_email') return identityType === 'email';
673
602
  return identityType === 'phone';
674
603
  });
675
604
  }
676
605
 
677
- function getMethodsWithoutIdentity(
678
- config: IdentityConfig | null,
679
- passkeyProvider?: MobilePasskeyProvider
680
- ): SupportedMethodId[] {
681
- const configuredMethods = config?.methods ?? [];
682
- return configuredMethods.filter((method): method is SupportedMethodId => (
683
- method === 'passkey' && Boolean(passkeyProvider)
684
- ));
685
- }
686
-
687
606
  function parseIdentity(
688
607
  value: string,
689
608
  allowedTypes: IdentityType[]
@@ -716,32 +635,19 @@ function parseIdentity(
716
635
  return { ok: true, identity: phone, identityType: 'phone' };
717
636
  }
718
637
 
719
- function toOtpMethod(method: SupportedMethodId): OtpMethod | null {
720
- if (method === 'otp_email') return 'email';
638
+ function toOtpMethod(method: SupportedMethodId): OtpMethod {
721
639
  if (method === 'otp_sms') return 'sms';
722
640
  if (method === 'otp_voice') return 'voice';
723
- return null;
724
- }
725
-
726
- function fallbackOtpMethod(methods: SupportedMethodId[]): SupportedMethodId | null {
727
- return methods.find((method) => method !== 'passkey') ?? null;
728
- }
729
-
730
- function fallbackLabel(method: SupportedMethodId): string {
731
- if (method === 'otp_sms') return 'Use SMS code instead';
732
- if (method === 'otp_voice') return 'Use voice call instead';
733
- return 'Use email code instead';
641
+ return 'email';
734
642
  }
735
643
 
736
644
  function methodTitle(method: SupportedMethodId): string {
737
- if (method === 'passkey') return 'Passkey';
738
645
  if (method === 'otp_sms') return 'Text message';
739
646
  if (method === 'otp_voice') return 'Voice call';
740
647
  return 'Email code';
741
648
  }
742
649
 
743
650
  function methodDescription(method: SupportedMethodId): string {
744
- if (method === 'passkey') return 'Use Face ID, Touch ID, or your device passcode.';
745
651
  if (method === 'otp_sms') return 'Receive a one-time code by SMS.';
746
652
  if (method === 'otp_voice') return 'Receive a one-time code by phone call.';
747
653
  return 'Receive a one-time code by email.';
@@ -765,11 +671,16 @@ function otpTitle(method: SupportedMethodId | null): string {
765
671
  return 'Check your email';
766
672
  }
767
673
 
768
- function getHeaderLogo(branding: IdentityConfig['branding'], theme: 'light' | 'dark'): string | null {
674
+ function resolveLogoUri(
675
+ branding: IdentityConfig['branding'],
676
+ theme: 'light' | 'dark',
677
+ brokenLogoUri: string | null
678
+ ): string | null {
769
679
  if (!branding) return null;
770
- return theme === 'dark'
680
+ const uri = theme === 'dark'
771
681
  ? branding.logoDark || branding.logoLight
772
682
  : branding.logoLight || branding.logoDark;
683
+ return uri && uri !== brokenLogoUri ? uri : null;
773
684
  }
774
685
 
775
686
  function formatCountdown(seconds: number): string {
@@ -850,9 +761,17 @@ const styles = StyleSheet.create({
850
761
  alignItems: 'center',
851
762
  },
852
763
  logo: {
853
- width: 32,
854
- height: 32,
855
- marginRight: 10,
764
+ // Height is the header's; width follows the logo's own aspect ratio,
765
+ // bounded by the space left beside the close button.
766
+ height: 40,
767
+ maxWidth: '100%',
768
+ },
769
+ logoUnmeasured: {
770
+ // Before the image reports its shape. A square, not a zero-width box: iOS
771
+ // only loads an image into a non-zero frame, and a box with no width would
772
+ // leave the header permanently empty.
773
+ height: 40,
774
+ width: 40,
856
775
  },
857
776
  logoFallback: {
858
777
  width: 32,
@@ -965,15 +884,4 @@ const styles = StyleSheet.create({
965
884
  fontSize: 13,
966
885
  lineHeight: 18,
967
886
  },
968
- passkeyIcon: {
969
- width: 76,
970
- height: 76,
971
- borderRadius: 38,
972
- alignSelf: 'center',
973
- alignItems: 'center',
974
- justifyContent: 'center',
975
- },
976
- passkeyIconText: {
977
- fontSize: 34,
978
- },
979
887
  });