@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 +4 -35
- package/dist/identity-dialog.d.ts +2 -7
- package/dist/identity-dialog.js +62 -133
- package/dist/identity-dialog.js.map +1 -1
- package/package.json +1 -1
- package/src/identity-dialog.tsx +89 -181
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
|
|
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
|
|
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
|
|
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,
|
|
14
|
+
export declare function SparkVaultIdentityDialog({ client, visible, initialIdentity, initialIdentityType, onSuccess, onCancel, onError, }: SparkVaultIdentityDialogProps): import("react/jsx-runtime").JSX.Element;
|
package/dist/identity-dialog.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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
|
|
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,
|
|
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:
|
|
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
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
-
|
|
231
|
-
}, [
|
|
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,
|
|
307
|
-
const headerLogo = getHeaderLogo(branding, effectiveTheme);
|
|
243
|
+
}, [client, initialIdentity, initialIdentityType, reportError]);
|
|
308
244
|
const companyName = branding?.companyName || 'SparkVault';
|
|
309
|
-
|
|
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: () =>
|
|
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 === '
|
|
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
|
|
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
|
|
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
|
|
400
|
+
function resolveLogoUri(branding, theme, brokenLogoUri) {
|
|
470
401
|
if (!branding)
|
|
471
402
|
return null;
|
|
472
|
-
|
|
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
|
|
553
|
-
|
|
554
|
-
|
|
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":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,KAAK,EACL,oBAAoB,EACpB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,IAAI,EACJ,SAAS,EACT,IAAI,GACL,MAAM,cAAc,CAAC;AAwBtB;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAC3F,MAAM,WAAW,GAAG,4BAA4B,CAAC;AACjD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,MAAM,UAAU,wBAAwB,CAAC,EACvC,MAAM,EACN,OAAO,EACP,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,OAAO,GACuB;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAa,SAAS,CAAC,CAAC;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAe,mBAAmB,IAAI,OAAO,CAAC,CAAC;IAC/F,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IACrF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,6EAA6E;IAC7E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAA8C,IAAI,CAAC,CAAC;IACpG,iFAAiF;IACjF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;IAClC,MAAM,cAAc,GAAG,QAAQ,EAAE,SAAS,IAAI,OAAO,CAAC;IACtD,MAAM,MAAM,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IACpE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,EACjD,CAAC,MAAM,EAAE,YAAY,CAAC,CACvB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;QACjC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;QACzC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,OAAO,CAAC,SAAS,CAAC,CAAC;QACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,CAAC,EAAE,CAAC,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QACnC,eAAe,CAAC,mBAAmB,IAAI,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE;aACjC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,SAAS,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACjE,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAC3D,eAAe,CAAC,0BAA0B,CAAC,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACpG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,wDAAwD,CAAC,CAAC;gBACnE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,SAAS,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACjE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACjC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAC5D,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC,CAAC;QAEF,eAAe,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAEtB,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,EAAE,MAA4B,EAAE,SAAiB,EAAE,EAAE;QAC5F,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;YAAE,OAAO;QACpD,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,GAAY,EAAE,QAAgB,EAAE,EAAE;QACjE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5B,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QACxB,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,WAAW,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAC/B,MAAyB,EACzB,cAAc,GAAG,QAAQ,EACzB,kBAAkB,GAAG,YAAY,EACjC,EAAE;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACtD,QAAQ,EAAE,cAAc;gBACxB,YAAY,EAAE,kBAAkB;gBAChC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACpD,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC/B,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,CAAC,EAAE,CAAC,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACpD,WAAW,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;QACvD,CAAC;gBAAS,CAAC;YACT,IAAI,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IAElD,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,IAAI,MAAM;YAAE,OAAO;QAEnB,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACzE,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,kEAAkE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAChC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAClC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEb,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtD,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC7C,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE1C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACtD,QAAQ;gBACR,GAAG;gBACH,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;YACH,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACpD,MAAM,QAAQ,GAAG,GAA4D,CAAC;YAC9E,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC5B,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;gBAC9B,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,EAAE,CAAC,CAAC;YACX,WAAW,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAC1C,CAAC;gBAAS,CAAC;YACT,IAAI,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9B,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;QACzC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,OAAO,CAAC,SAAS,CAAC,CAAC;QAEnB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE;aACjC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACpD,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAC3D,eAAe,CAAC,0BAA0B,CAAC,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACpG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,wDAAwD,CAAC,CAAC;gBACnE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;gBAAE,OAAO;YACpD,WAAW,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;YACnD,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhE,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,IAAI,YAAY,CAAC;IAC1D,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,6EAA6E;IAC7E,6BAA6B;IAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,YAAY,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAExF,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAE,OAAO,EAAE,WAAW,QAAC,aAAa,EAAC,MAAM,EAAC,cAAc,EAAE,YAAY,YACpF,KAAC,oBAAoB,IACnB,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACvD,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,YAE9D,KAAC,UAAU,IACT,qBAAqB,EAAE,MAAM,CAAC,aAAa,EAC3C,yBAAyB,EAAC,SAAS,YAEnC,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,aACtF,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,aACxB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YACtB,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,KAAK,IACJ,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EACxB,KAAK,EACH,eAAe,KAAK,IAAI;4CACtB,CAAC,CAAC,MAAM,CAAC,cAAc;4CACvB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,EAErD,UAAU,EAAC,SAAS,EACpB,iBAAiB,EAAC,OAAO,EACzB,kBAAkB,EAAE,WAAW,EAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;4CAChB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;4CACnD,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;gDAAE,OAAO;4CACtC,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;4CACnC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CACzB,OAAO,EAAE,GAAG,KAAK,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW;gDAC7D,CAAC,CAAC,OAAO;gDACT,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAClC,CAAC,CAAC;wCACL,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,GACxC,CACH,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,YACzE,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,YAC9D,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GACjC,GACF,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,YAAG,WAAW,GAAQ,IAC9E,CACJ,GACI,EACP,KAAC,SAAS,IACR,iBAAiB,EAAC,QAAQ,EAC1B,kBAAkB,EAAC,6BAA6B,EAChD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,EAAE,EACX,KAAK,EAAE,MAAM,CAAC,WAAW,YAEzB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,uBAAU,GACxD,IACP,EAEN,IAAI,KAAK,SAAS,IAAI,CACrB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,aAAa,aAC/B,KAAC,iBAAiB,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAI,EAC5C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,2CAAmC,IACtF,CACR,EAEA,IAAI,KAAK,UAAU,IAAI,CACtB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,wBAAgB,EACnE,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YACpD,gBAAgB,CAAC,YAAY,CAAC,GAC1B,EACP,KAAC,SAAS,IACR,KAAK,EAAE,QAAQ,EACf,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;wCACtB,WAAW,CAAC,KAAK,CAAC,CAAC;wCACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;wCACb,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4CAC5B,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wCAChG,CAAC;oCACH,CAAC,EACD,WAAW,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAC9C,oBAAoB,EAAE,MAAM,CAAC,WAAW,EACxC,cAAc,EAAC,MAAM,EACrB,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EACxD,YAAY,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EACtE,QAAQ,EAAE,CAAC,MAAM,EACjB,KAAK,EAAE;wCACL,MAAM,CAAC,KAAK;wCACZ;4CACE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;4CACjD,KAAK,EAAE,MAAM,CAAC,IAAI;4CAClB,eAAe,EAAE,MAAM,CAAC,KAAK;yCAC9B;qCACF,GACD,EACD,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YAAG,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EACpF,KAAC,aAAa,IACZ,KAAK,EAAC,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,MAAM,EACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAC7B,IACG,CACR,EAEA,IAAI,KAAK,SAAS,IAAI,CACrB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,gCAAwB,EAC1E,QAAQ,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YAAG,QAAQ,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC7F,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,UAAU,YAC3B,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC9B,MAAC,SAAS,IAER,iBAAiB,EAAC,QAAQ,EAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;4CACtB,MAAM,CAAC,YAAY;4CACnB;gDACE,WAAW,EAAE,MAAM,CAAC,MAAM;gDAC1B,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;gDACxD,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;6CAC1B;yCACF,aAED,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,YAAG,WAAW,CAAC,MAAM,CAAC,GAAQ,EACvF,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YAC7D,iBAAiB,CAAC,MAAM,CAAC,GACrB,KAhBF,MAAM,CAiBD,CACb,CAAC,GACG,EACN,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YAAG,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EACnF,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzB,KAAC,UAAU,IAAC,KAAK,EAAC,0BAA0B,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAI,CACpG,CAAC,CAAC,CAAC,IAAI,IACH,CACR,EAEA,IAAI,KAAK,KAAK,IAAI,CACjB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,YAAG,QAAQ,CAAC,cAAc,CAAC,GAAQ,EACtF,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,gDACrB,IAAI,EACpC,KAAC,IAAI,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAG,QAAQ,GAAQ,IACpE,EACP,KAAC,SAAS,IACR,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;wCACtB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wCAC7C,QAAQ,CAAC,EAAE,CAAC,CAAC;oCACf,CAAC,EACD,WAAW,EAAC,QAAQ,EACpB,oBAAoB,EAAE,MAAM,CAAC,WAAW,EACxC,YAAY,EAAC,YAAY,EACzB,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,CAAC,MAAM,IAAI,SAAS,KAAK,SAAS,EAC5C,KAAK,EAAE;wCACL,MAAM,CAAC,QAAQ;wCACf;4CACE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;4CACjD,KAAK,EAAE,MAAM,CAAC,IAAI;4CAClB,eAAe,EAAE,MAAM,CAAC,KAAK;yCAC9B;qCACF,GACD,EACF,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,YAC9F,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,SAAS,EAAE,GAChE,EACN,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YAAG,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EACpF,KAAC,aAAa,IACZ,KAAK,EAAC,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,SAAS,KAAK,SAAS,EAC/D,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,GACxB,EACF,KAAC,UAAU,IAAC,KAAK,EAAC,aAAa,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAI,IACtF,CACR,EAEA,IAAI,KAAK,OAAO,IAAI,CACnB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,oCAA4B,EAC/E,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,YAAG,KAAK,GAAQ,EACpE,KAAC,aAAa,IACZ,KAAK,EAAC,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,GAC1B,IACG,CACR,IACI,GACI,GACQ,GACjB,CACT,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,UAA+B,EAAE,SAAiB;IACzE,OAAO,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC;AAC1C,CAAC;AASD,SAAS,aAAa,CAAC,EACrB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,GAOR;IACC,OAAO,CACL,KAAC,SAAS,IACR,iBAAiB,EAAC,QAAQ,EAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACtB,MAAM,CAAC,aAAa;YACpB;gBACE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;gBACzD,OAAO,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxC;SACF,YAEA,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,iBAAiB,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,YAAG,KAAK,GAAQ,CACvF,GACS,CACb,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,GAMR;IACC,OAAO,CACL,KAAC,SAAS,IAAC,iBAAiB,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,YAClG,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,YAAG,KAAK,GAAQ,GAChG,CACb,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA6B;IAC1D,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAwB,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;AAClH,CAAC;AAED,SAAS,0BAA0B,CACjC,QAA4B,EAC5B,YAAsC,EACtC,YAA4B;IAE5B,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IAC7E,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACvF,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA6B,EAC7B,YAA0B;IAE1B,MAAM,iBAAiB,GAAG,MAAM,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3D,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAA+B,EAAE;QACtE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,MAAM,KAAK,WAAW;YAAE,OAAO,YAAY,KAAK,OAAO,CAAC;QAC5D,OAAO,YAAY,KAAK,OAAO,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,YAA4B;IAE5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,YAAY,GAAiB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACtG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,4CAA4C;SAC9H,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1G,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC;IAChD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC;IAChD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAyB;IAClD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,iCAAiC,CAAC;IACnE,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,wCAAwC,CAAC;IAC5E,OAAO,mCAAmC,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,YAA4B;IACpD,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,+CAA+C,CAAC;IAC7H,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,sCAAsC,CAAC;IAClF,OAAO,uCAAuC,CAAC;AACjD,CAAC;AAED,SAAS,mBAAmB,CAAC,YAA4B;IACvD,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,kCAAkC,CAAC;IAChH,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,cAAc,CAAC;IAC1D,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,QAAQ,CAAC,MAAgC;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAC;IACvD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,kBAAkB,CAAC;IACtD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CACrB,QAAoC,EACpC,KAAuB,EACvB,aAA4B;IAE5B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,KAAK,KAAK,MAAM;QAC1B,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS;QACzC,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC5C,OAAO,GAAG,IAAI,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;IACtC,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,QAAQ,GAAG,sBAAsB;IAChE,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,wBAAwB;IAClC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB,QAAQ,EAAE,sBAAsB;IAChC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE;QACR,IAAI,EAAE,CAAC;KACR;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,CAAC;QACX,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAE,EAAE;KACZ;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,UAAU,CAAC,aAAa;QACrC,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACtC,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,EAAE;KACd;IACD,MAAM,EAAE;QACN,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,YAAY,EAAE,EAAE;KACjB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;KACrB;IACD,IAAI,EAAE;QACJ,qEAAqE;QACrE,qDAAqD;QACrD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,MAAM;KACjB;IACD,cAAc,EAAE;QACd,0EAA0E;QAC1E,2EAA2E;QAC3E,sCAAsC;QACtC,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;KACV;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,EAAE;KAChB;IACD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;KAClB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,aAAa,EAAE;QACb,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,GAAG,EAAE,EAAE;KACR;IACD,IAAI,EAAE;QACJ,GAAG,EAAE,EAAE;KACR;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,CAAC;KACjB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;KACb;IACD,KAAK,EAAE;QACL,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,iBAAiB,EAAE,EAAE;QACrB,QAAQ,EAAE,EAAE;KACb;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,iBAAiB,EAAE,EAAE;QACrB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,QAAQ;KACpB;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,QAAQ;KACpB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;IACD,aAAa,EAAE;QACb,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,EAAE;KACtB;IACD,iBAAiB,EAAE;QACjB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;KAClB;IACD,UAAU,EAAE;QACV,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;KAClB;IACD,UAAU,EAAE;QACV,GAAG,EAAE,EAAE;KACR;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,EAAE;KACZ;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,CAAC;KAChB;IACD,iBAAiB,EAAE;QACjB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/identity-dialog.tsx
CHANGED
|
@@ -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' | '
|
|
24
|
+
type DialogStep = 'loading' | 'identity' | 'methods' | 'otp' | 'error';
|
|
27
25
|
type OtpMethod = 'email' | 'sms' | 'voice';
|
|
28
|
-
type SupportedMethodId = '
|
|
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
|
-
|
|
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
|
|
81
|
-
() => getMethodsForIdentity(config, identityType
|
|
82
|
-
[config, identityType
|
|
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,
|
|
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:
|
|
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
|
|
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
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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
|
-
|
|
298
|
-
|
|
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,
|
|
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
|
-
{
|
|
388
|
-
<Image
|
|
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
|
-
|
|
391
|
-
<
|
|
392
|
-
{
|
|
393
|
-
|
|
394
|
-
|
|
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={() =>
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
854
|
-
|
|
855
|
-
|
|
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
|
});
|