@atlasauth/expo 0.10.0 → 0.11.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/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # @atlasauth/expo changelog
2
2
 
3
+ ## 0.11.0
4
+
5
+ - Default React Native sign-in, sign-up, second-factor and security screens; the sign-up screen view-model handles second-factor setup and required actions.
6
+ - Breaking for type imports: the exported types are now named `SecuritySectionViewModel`, `SignInScreenViewModel` and `SignUpScreenViewModel`.
7
+
3
8
  ## 0.9.0 — 2026-11-14
4
9
 
5
10
  - `useSignInScreen()` and `useSecuritySection(kind)` drive your own native sign-in and account-security screens, with step-up handled inside.
package/dist/index.d.ts CHANGED
@@ -14,3 +14,5 @@ export * from './account-security-hook';
14
14
  export * from './step-up';
15
15
  export * from './screens';
16
16
  export * from './screens-hook';
17
+ export * from './native-screens';
18
+ export { DEFAULT_SCREEN_STRINGS, DEFAULT_SCREEN_THEME, renderAuthScreen, renderField, renderSecuritySection, type AuthActions, type FieldValues, type RenderEnv, type ScreenPrimitives, type ScreenStyles, type ScreenTheme, type SecurityActions, } from './native-screens-render';
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.installAtlasCaptchaSolver = exports.atlasHeadlessCaptchaSolver = exports.solveAtlasChallengeNative = exports.getCaptchaToken = exports.AtlasLoaded = exports.AtlasLoading = exports.Protect = exports.SignedOut = exports.SignedIn = exports.useOrganization = exports.useSessionList = exports.useSession = exports.useUser = exports.useAuth = void 0;
17
+ exports.renderSecuritySection = exports.renderField = exports.renderAuthScreen = exports.DEFAULT_SCREEN_THEME = exports.DEFAULT_SCREEN_STRINGS = exports.installAtlasCaptchaSolver = exports.atlasHeadlessCaptchaSolver = exports.solveAtlasChallengeNative = exports.getCaptchaToken = exports.AtlasLoaded = exports.AtlasLoading = exports.Protect = exports.SignedOut = exports.SignedIn = exports.useOrganization = exports.useSessionList = exports.useSession = exports.useUser = exports.useAuth = void 0;
18
18
  // Expo provider (wraps @atlasauth/react, swaps the cookie transport for an
19
19
  // expo-secure-store-backed token cache) + the token cache itself.
20
20
  __exportStar(require("./token-cache"), exports);
@@ -65,4 +65,13 @@ __exportStar(require("./step-up"), exports);
65
65
  // Sign-in and account-security screens as view-models (steps, methods, fields, human errors, step-up inside).
66
66
  __exportStar(require("./screens"), exports);
67
67
  __exportStar(require("./screens-hook"), exports);
68
+ // Default React Native screens (sign-in, sign-up, second factor, account security) built on those view-models,
69
+ // and the element builders behind them (themeable, testable without a renderer).
70
+ __exportStar(require("./native-screens"), exports);
71
+ var native_screens_render_1 = require("./native-screens-render");
72
+ Object.defineProperty(exports, "DEFAULT_SCREEN_STRINGS", { enumerable: true, get: function () { return native_screens_render_1.DEFAULT_SCREEN_STRINGS; } });
73
+ Object.defineProperty(exports, "DEFAULT_SCREEN_THEME", { enumerable: true, get: function () { return native_screens_render_1.DEFAULT_SCREEN_THEME; } });
74
+ Object.defineProperty(exports, "renderAuthScreen", { enumerable: true, get: function () { return native_screens_render_1.renderAuthScreen; } });
75
+ Object.defineProperty(exports, "renderField", { enumerable: true, get: function () { return native_screens_render_1.renderField; } });
76
+ Object.defineProperty(exports, "renderSecuritySection", { enumerable: true, get: function () { return native_screens_render_1.renderSecuritySection; } });
68
77
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2EAA2E;AAC3E,kEAAkE;AAClE,gDAA8B;AAC9B,gDAA8B;AAC9B,kDAAgC;AAEhC,8EAA8E;AAC9E,mDAAiC;AAEjC;;;;;;;;;;GAUG;AACH,0CAW0B;AAVxB,gGAAA,OAAO,OAAA;AACP,gGAAA,OAAO,OAAA;AACP,mGAAA,UAAU,OAAA;AACV,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,qGAAA,YAAY,OAAA;AACZ,oGAAA,WAAW,OAAA;AAGb,oGAAoG;AACpG,6CAA2B;AAE3B,mGAAmG;AACnG,2CAAyB;AACzB,2CAAyB;AACzB,iDAA+B;AAC/B,iDAA+B;AAC/B,qDAAmC;AAEnC,mFAAmF;AACnF,+EAA+E;AAC/E,4DAA4D;AAC5D,wDAOiC;AAN/B,+GAAA,eAAe,OAAA;AACf,yHAAA,yBAAyB,OAAA;AACzB,0HAAA,0BAA0B,OAAA;AAC1B,yHAAA,yBAAyB,OAAA;AAI3B,0DAAwC;AACxC,4CAA0B;AAE1B,8GAA8G;AAC9G,4CAA0B;AAC1B,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2EAA2E;AAC3E,kEAAkE;AAClE,gDAA8B;AAC9B,gDAA8B;AAC9B,kDAAgC;AAEhC,8EAA8E;AAC9E,mDAAiC;AAEjC;;;;;;;;;;GAUG;AACH,0CAW0B;AAVxB,gGAAA,OAAO,OAAA;AACP,gGAAA,OAAO,OAAA;AACP,mGAAA,UAAU,OAAA;AACV,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,qGAAA,YAAY,OAAA;AACZ,oGAAA,WAAW,OAAA;AAGb,oGAAoG;AACpG,6CAA2B;AAE3B,mGAAmG;AACnG,2CAAyB;AACzB,2CAAyB;AACzB,iDAA+B;AAC/B,iDAA+B;AAC/B,qDAAmC;AAEnC,mFAAmF;AACnF,+EAA+E;AAC/E,4DAA4D;AAC5D,wDAOiC;AAN/B,+GAAA,eAAe,OAAA;AACf,yHAAA,yBAAyB,OAAA;AACzB,0HAAA,0BAA0B,OAAA;AAC1B,yHAAA,yBAAyB,OAAA;AAI3B,0DAAwC;AACxC,4CAA0B;AAE1B,8GAA8G;AAC9G,4CAA0B;AAC1B,iDAA+B;AAE/B,+GAA+G;AAC/G,iFAAiF;AACjF,mDAAiC;AACjC,iEAaiC;AAZ/B,+HAAA,sBAAsB,OAAA;AACtB,6HAAA,oBAAoB,OAAA;AACpB,yHAAA,gBAAgB,OAAA;AAChB,oHAAA,WAAW,OAAA;AACX,8HAAA,qBAAqB,OAAA"}
@@ -0,0 +1,112 @@
1
+ import { type ComponentType, type ReactElement } from 'react';
2
+ import type { ScreenField, SecuritySectionView, SignInMethod, SignInScreenView } from '@atlasauth/js';
3
+ type Any = ComponentType<any> | string;
4
+ /** The `react-native` components the screens draw with. */
5
+ export interface ScreenPrimitives {
6
+ View: Any;
7
+ Text: Any;
8
+ TextInput: Any;
9
+ Pressable: Any;
10
+ ScrollView: Any;
11
+ ActivityIndicator: Any;
12
+ Switch: Any;
13
+ }
14
+ /** Colours and sizes the default screens use. Override any of them with `theme`. */
15
+ export interface ScreenTheme {
16
+ background: string;
17
+ text: string;
18
+ muted: string;
19
+ primary: string;
20
+ primaryText: string;
21
+ border: string;
22
+ danger: string;
23
+ radius: number;
24
+ spacing: number;
25
+ fontSize: number;
26
+ }
27
+ export declare const DEFAULT_SCREEN_THEME: ScreenTheme;
28
+ /** Style objects merged over the themed defaults, by element role. */
29
+ export interface ScreenStyles {
30
+ root?: object;
31
+ title?: object;
32
+ text?: object;
33
+ label?: object;
34
+ input?: object;
35
+ button?: object;
36
+ buttonText?: object;
37
+ primaryButton?: object;
38
+ primaryButtonText?: object;
39
+ link?: object;
40
+ error?: object;
41
+ chip?: object;
42
+ chipSelected?: object;
43
+ row?: object;
44
+ code?: object;
45
+ }
46
+ /** Every string the screens show, English by default. Override any key (a translation, different wording). */
47
+ export declare const DEFAULT_SCREEN_STRINGS: Record<string, string>;
48
+ export interface RenderEnv {
49
+ ui: ScreenPrimitives;
50
+ theme?: Partial<ScreenTheme>;
51
+ styles?: ScreenStyles;
52
+ strings?: Record<string, string>;
53
+ /** Open a link (a policy, a verification page); the default screens call `Linking.openURL`. */
54
+ onLink?: (href: string) => void;
55
+ }
56
+ /** Field values the person typed, by field name. A multi-select holds a list; everything else a string. */
57
+ export type FieldValues = Record<string, string | string[]>;
58
+ /** The text shown for a field: the server's label for a journey field, a known string for the built-in ones. */
59
+ export declare function fieldLabel(field: ScreenField, strings?: Record<string, string>): string;
60
+ /** One field: a text box, a switch, a list of choices or a reference box, by `kind`. */
61
+ export declare function renderField(env: RenderEnv, field: ScreenField, value: string | string[] | undefined, onChange: (next: string | string[]) => void): ReactElement;
62
+ /** What a screen can do, as the view-model offers it. A sign-in screen and a sign-up screen both satisfy it. */
63
+ export interface AuthActions {
64
+ submit(values?: Record<string, string>): Promise<void>;
65
+ selectMethod(method: SignInMethod): Promise<void>;
66
+ sendCode(): Promise<void>;
67
+ resend(): Promise<void>;
68
+ signInWithPasskey?(): Promise<void>;
69
+ signInWithApple?(): Promise<void>;
70
+ signInWithGoogle?(): Promise<void>;
71
+ acknowledgeRecoveryCodes(): Promise<void>;
72
+ acceptPolicies(): Promise<void>;
73
+ startIdentityVerification(redirectUrl?: string): Promise<void>;
74
+ checkIdentityVerification(): Promise<void>;
75
+ /** journey_form: keep the answers so far. The bound screens call it (debounced) as the person types. */
76
+ saveDraft?(values?: Record<string, string>): Promise<void>;
77
+ reset(): void;
78
+ }
79
+ export interface AuthScreenProps {
80
+ view: SignInScreenView;
81
+ actions: AuthActions;
82
+ values: FieldValues;
83
+ onValues: (next: FieldValues) => void;
84
+ }
85
+ /** A list value as a form submits it: a multi-select travels comma-joined. */
86
+ export declare const toSubmitValues: (values: FieldValues) => Record<string, string>;
87
+ /** The whole screen for the view's current step. */
88
+ export declare function renderAuthScreen(env: RenderEnv, p: AuthScreenProps): ReactElement;
89
+ /** What a security section can do. */
90
+ export interface SecurityActions {
91
+ remove(id: string): Promise<void>;
92
+ revokeOthers(): Promise<void>;
93
+ startTotp(): Promise<void>;
94
+ startSms(phone: string): Promise<void>;
95
+ addPhone(phone: string): Promise<void>;
96
+ verifyPhone(id: string): Promise<void>;
97
+ makePrimary(id: string): Promise<void>;
98
+ addPasskey(): Promise<void>;
99
+ regenerateCodes(): Promise<void>;
100
+ acknowledgeCodes(): void;
101
+ cancel(): void;
102
+ submit(values: Record<string, string>): Promise<void>;
103
+ }
104
+ export interface SecurityScreenProps {
105
+ view: SecuritySectionView;
106
+ actions: SecurityActions;
107
+ values: FieldValues;
108
+ onValues: (next: FieldValues) => void;
109
+ }
110
+ /** One account-security section: the list (with its row actions), or the step of a flow inside it. */
111
+ export declare function renderSecuritySection(env: RenderEnv, p: SecurityScreenProps): ReactElement;
112
+ export {};
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toSubmitValues = exports.DEFAULT_SCREEN_STRINGS = exports.DEFAULT_SCREEN_THEME = void 0;
4
+ exports.fieldLabel = fieldLabel;
5
+ exports.renderField = renderField;
6
+ exports.renderAuthScreen = renderAuthScreen;
7
+ exports.renderSecuritySection = renderSecuritySection;
8
+ const react_1 = require("react");
9
+ exports.DEFAULT_SCREEN_THEME = {
10
+ background: '#ffffff',
11
+ text: '#111827',
12
+ muted: '#6b7280',
13
+ primary: '#2563eb',
14
+ primaryText: '#ffffff',
15
+ border: '#d1d5db',
16
+ danger: '#b91c1c',
17
+ radius: 8,
18
+ spacing: 12,
19
+ fontSize: 16,
20
+ };
21
+ /** Every string the screens show, English by default. Override any key (a translation, different wording). */
22
+ exports.DEFAULT_SCREEN_STRINGS = {
23
+ 'step.details': 'Create your account',
24
+ 'step.identifier': 'Sign in',
25
+ 'step.first_factor': 'Enter your password',
26
+ 'step.second_factor': 'Confirm it is you',
27
+ 'step.captcha': 'Security check',
28
+ 'step.redirect': 'Continuing',
29
+ 'step.enroll_second_factor': 'Set up a second factor',
30
+ 'step.recovery_codes': 'Save your recovery codes',
31
+ 'step.policies': 'Accept to continue',
32
+ 'step.email_verification': 'Check your email',
33
+ 'step.required_action': 'One more step',
34
+ 'step.other': 'Continue in the app',
35
+ 'step.complete': 'You are signed in',
36
+ 'field.identifier': 'Email, phone or username',
37
+ 'field.email': 'Email',
38
+ 'field.password': 'Password',
39
+ 'field.new_password': 'New password',
40
+ 'field.code': 'Code',
41
+ 'field.second_code': 'Next code',
42
+ 'field.phone': 'Phone number',
43
+ 'field.first_name': 'First name',
44
+ 'field.last_name': 'Last name',
45
+ 'field.username': 'Username',
46
+ 'method.password': 'Password',
47
+ 'method.email_code': 'Email me a code',
48
+ 'method.passkey': 'Passkey',
49
+ 'method.apple': 'Continue with Apple',
50
+ 'method.google': 'Continue with Google',
51
+ 'method.totp': 'Authenticator app',
52
+ 'method.sms': 'Text message',
53
+ 'method.backup_code': 'Recovery code',
54
+ 'action.continue': 'Continue',
55
+ 'action.send_code': 'Send a code',
56
+ 'action.resend': 'Send again',
57
+ 'action.skip': 'Skip for now',
58
+ 'action.accept': 'Accept',
59
+ 'action.saved_codes': 'I saved them',
60
+ 'action.open': 'Open',
61
+ 'action.check': 'I have done it',
62
+ 'action.start_over': 'Start over',
63
+ 'action.back': 'Back',
64
+ 'action.remove': 'Remove',
65
+ 'action.add_passkey': 'Add a passkey',
66
+ 'action.authenticator': 'Set up an authenticator app',
67
+ 'action.sms': 'Add a text message number',
68
+ 'action.sign_out_others': 'Sign out other devices',
69
+ 'action.new_codes': 'Make new recovery codes',
70
+ 'action.add_phone': 'Add a phone number',
71
+ 'action.make_primary': 'Make primary',
72
+ 'action.verify': 'Verify',
73
+ 'text.secret': 'Or type this key into your authenticator app:',
74
+ 'text.sent_to': 'We sent a code to {to}.',
75
+ 'text.legal': 'I agree to the terms and privacy policy',
76
+ 'text.terms': 'Terms',
77
+ 'text.privacy': 'Privacy',
78
+ 'text.current': 'This device',
79
+ 'text.primary': 'Primary',
80
+ 'text.unverified': 'Not verified',
81
+ 'text.empty': 'Nothing here yet.',
82
+ 'text.loading': 'Loading',
83
+ 'text.step_up': 'For your security, sign in again to continue.',
84
+ 'section.sessions': 'Devices and sessions',
85
+ 'section.mfa': 'Second factor',
86
+ 'section.passkeys': 'Passkeys',
87
+ 'section.phones': 'Phone numbers',
88
+ 'section.recovery_codes': 'Recovery codes',
89
+ 'section.connected_accounts': 'Connected accounts',
90
+ 'section.password': 'Password',
91
+ 'step.totp_enroll': 'Set up an authenticator app',
92
+ 'step.sms_verify': 'Confirm your number',
93
+ 'step.phone_verify': 'Confirm your number',
94
+ 'step.change_password': 'Change your password',
95
+ 'step.set_password': 'Set a password',
96
+ 'field.current_password': 'Current password',
97
+ };
98
+ const t = (strings, key, vars) => {
99
+ const template = strings?.[key] ?? exports.DEFAULT_SCREEN_STRINGS[key] ?? key;
100
+ return vars ? template.replace(/\{(\w+)\}/g, (m, n) => vars[n] ?? m) : template;
101
+ };
102
+ const el = (type, props, ...children) => (0, react_1.createElement)(type, props, ...children);
103
+ const themeOf = (env) => ({ ...exports.DEFAULT_SCREEN_THEME, ...env.theme });
104
+ function look(env) {
105
+ const th = themeOf(env);
106
+ const s = env.styles ?? {};
107
+ return {
108
+ th,
109
+ root: { backgroundColor: th.background, padding: th.spacing * 1.5, gap: th.spacing, ...s.root },
110
+ title: { color: th.text, fontSize: th.fontSize * 1.5, fontWeight: '600', ...s.title },
111
+ text: { color: th.text, fontSize: th.fontSize, ...s.text },
112
+ muted: { color: th.muted, fontSize: th.fontSize * 0.9, ...s.text },
113
+ label: { color: th.muted, fontSize: th.fontSize * 0.85, marginBottom: 4, ...s.label },
114
+ input: { borderWidth: 1, borderColor: th.border, borderRadius: th.radius, padding: th.spacing, color: th.text, fontSize: th.fontSize, ...s.input },
115
+ button: { borderWidth: 1, borderColor: th.border, borderRadius: th.radius, padding: th.spacing, alignItems: 'center', ...s.button },
116
+ buttonText: { color: th.text, fontSize: th.fontSize, ...s.buttonText },
117
+ primary: { backgroundColor: th.primary, borderColor: th.primary, ...s.primaryButton },
118
+ primaryText: { color: th.primaryText, fontSize: th.fontSize, fontWeight: '600', ...s.primaryButtonText },
119
+ link: { color: th.primary, fontSize: th.fontSize, ...s.link },
120
+ error: { color: th.danger, fontSize: th.fontSize * 0.95, ...s.error },
121
+ chip: { borderWidth: 1, borderColor: th.border, borderRadius: th.radius, paddingVertical: 6, paddingHorizontal: th.spacing, ...s.chip },
122
+ chipOn: { backgroundColor: th.primary, borderColor: th.primary, ...s.chipSelected },
123
+ row: { flexDirection: 'row', flexWrap: 'wrap', gap: th.spacing / 2, alignItems: 'center', ...s.row },
124
+ code: { color: th.text, fontFamily: 'Courier', fontSize: th.fontSize, ...s.code },
125
+ };
126
+ }
127
+ /** A pressable that reads as a button (`primary`) or a text link (`link`). */
128
+ function button(env, label, onPress, kind = 'plain', extra = {}) {
129
+ const l = look(env);
130
+ const { ui } = env;
131
+ if (kind === 'link') {
132
+ return el(ui.Pressable, { key: label, accessibilityRole: 'link', onPress, ...extra }, el(ui.Text, { style: l.link }, label));
133
+ }
134
+ return el(ui.Pressable, { key: label, accessibilityRole: 'button', onPress, style: kind === 'primary' ? [l.button, l.primary] : l.button, ...extra }, el(ui.Text, { style: kind === 'primary' ? l.primaryText : l.buttonText }, label));
135
+ }
136
+ const KEYBOARD = { email: 'email-address', phone: 'phone-pad', number: 'numeric', code: 'number-pad', file: 'url' };
137
+ const AUTOCOMPLETE = {
138
+ username: 'username',
139
+ 'current-password': 'current-password',
140
+ 'new-password': 'new-password',
141
+ 'one-time-code': 'one-time-code',
142
+ tel: 'tel',
143
+ email: 'email',
144
+ off: 'off',
145
+ };
146
+ /** The text shown for a field: the server's label for a journey field, a known string for the built-in ones. */
147
+ function fieldLabel(field, strings) {
148
+ if (field.label)
149
+ return field.label + (field.required ? ' *' : '');
150
+ const key = `field.${field.name}`;
151
+ return strings?.[key] ?? exports.DEFAULT_SCREEN_STRINGS[key] ?? field.name;
152
+ }
153
+ /** One field: a text box, a switch, a list of choices or a reference box, by `kind`. */
154
+ function renderField(env, field, value, onChange) {
155
+ const l = look(env);
156
+ const { ui } = env;
157
+ const label = fieldLabel(field, env.strings);
158
+ const help = field.help ? el(ui.Text, { key: 'help', style: l.muted }, field.help) : null;
159
+ if (field.kind === 'checkbox') {
160
+ const on = value === 'true';
161
+ return el(ui.View, { key: field.name, style: l.row }, el(ui.Switch, { value: on, onValueChange: (v) => onChange(v ? 'true' : 'false'), accessibilityLabel: label }), el(ui.Text, { style: l.text }, label + ' '),
162
+ // Only an https link is ever offered.
163
+ field.link && field.link.url.startsWith('https://') ? button(env, field.link.text, () => env.onLink?.(field.link.url), 'link') : null, help);
164
+ }
165
+ if (field.kind === 'select' || field.kind === 'multi_select') {
166
+ const multi = field.kind === 'multi_select';
167
+ const picked = Array.isArray(value) ? value : value ? [value] : [];
168
+ return el(ui.View, { key: field.name }, el(ui.Text, { style: l.label }, label), el(ui.View, { style: l.row }, (field.options ?? []).map((o) => {
169
+ const on = picked.includes(o);
170
+ return el(ui.Pressable, {
171
+ key: o,
172
+ accessibilityRole: multi ? 'checkbox' : 'radio',
173
+ accessibilityState: { selected: on, checked: on },
174
+ onPress: () => onChange(multi ? (on ? picked.filter((x) => x !== o) : [...picked, o]) : o),
175
+ style: on ? [l.chip, l.chipOn] : l.chip,
176
+ }, el(ui.Text, { style: on ? l.primaryText : l.buttonText }, field.optionLabels?.[o] ?? o));
177
+ })), help);
178
+ }
179
+ const text = typeof value === 'string' ? value : '';
180
+ return el(ui.View, { key: field.name }, el(ui.Text, { style: l.label }, label), el(ui.TextInput, {
181
+ value: text,
182
+ onChangeText: (v) => onChange(v),
183
+ secureTextEntry: field.secure,
184
+ autoComplete: AUTOCOMPLETE[field.autoComplete],
185
+ autoCapitalize: field.kind === 'text' || field.kind === 'textarea' ? undefined : 'none',
186
+ autoCorrect: false,
187
+ keyboardType: KEYBOARD[field.kind],
188
+ multiline: field.kind === 'textarea',
189
+ placeholder: field.kind === 'date' ? 'YYYY-MM-DD' : field.placeholder,
190
+ accessibilityLabel: label,
191
+ style: l.input,
192
+ }), help);
193
+ }
194
+ /** A list value as a form submits it: a multi-select travels comma-joined. */
195
+ const toSubmitValues = (values) => Object.fromEntries(Object.entries(values).map(([k, v]) => [k, Array.isArray(v) ? v.join(',') : v]));
196
+ exports.toSubmitValues = toSubmitValues;
197
+ const SIGN_IN_METHOD_LABEL = (m) => `method.${m}`;
198
+ /** The whole screen for the view's current step. */
199
+ function renderAuthScreen(env, p) {
200
+ const { view, actions } = p;
201
+ const l = look(env);
202
+ const { ui } = env;
203
+ const s = env.strings;
204
+ const set = (name) => (next) => p.onValues({ ...p.values, [name]: next });
205
+ const submit = () => void actions.submit((0, exports.toSubmitValues)(p.values));
206
+ const kids = [];
207
+ const heading = view.requiredAction?.title || t(s, `step.${view.step}`);
208
+ kids.push(el(ui.Text, { key: 'title', accessibilityRole: 'header', style: l.title }, heading));
209
+ if (view.requiredAction?.intro)
210
+ kids.push(el(ui.Text, { key: 'intro', style: l.text }, view.requiredAction.intro));
211
+ if (view.sentTo)
212
+ kids.push(el(ui.Text, { key: 'sent', style: l.muted }, t(s, 'text.sent_to', { to: view.sentTo })));
213
+ if (view.error)
214
+ kids.push(el(ui.Text, { key: 'error', accessibilityRole: 'alert', style: l.error }, view.error));
215
+ if (view.busy)
216
+ kids.push(el(ui.ActivityIndicator, { key: 'busy' }));
217
+ // The one-tap sign-ins sit above the form on the identifier step.
218
+ if (view.step === 'identifier') {
219
+ for (const m of view.alternatives) {
220
+ const run = m === 'passkey' ? actions.signInWithPasskey : m === 'apple' ? actions.signInWithApple : actions.signInWithGoogle;
221
+ if (run)
222
+ kids.push(button(env, t(s, SIGN_IN_METHOD_LABEL(m)), () => void run(), 'plain', { key: `alt-${m}` }));
223
+ }
224
+ }
225
+ // Choose among methods (a password or an emailed code; an authenticator, a text, a recovery code).
226
+ if (view.methods.length > 1) {
227
+ kids.push(el(ui.View, { key: 'methods', style: l.row }, view.methods.map((m) => el(ui.Pressable, { key: m, accessibilityRole: 'radio', accessibilityState: { selected: view.method === m }, onPress: () => void actions.selectMethod(m), style: view.method === m ? [l.chip, l.chipOn] : l.chip }, el(ui.Text, { style: view.method === m ? l.primaryText : l.buttonText }, t(s, SIGN_IN_METHOD_LABEL(m)))))));
228
+ }
229
+ // Setting up an authenticator app: the key to type, and a slot for a QR code the app draws.
230
+ if (view.enrollment?.totp) {
231
+ kids.push(el(ui.Text, { key: 'secret-hint', style: l.muted }, t(s, 'text.secret')));
232
+ kids.push(el(ui.Text, { key: 'secret', selectable: true, style: l.code }, view.enrollment.totp.secret));
233
+ }
234
+ if (view.step === 'recovery_codes' && view.recoveryCodes) {
235
+ kids.push(el(ui.View, { key: 'codes' }, view.recoveryCodes.map((c) => el(ui.Text, { key: c, selectable: true, style: l.code }, c))));
236
+ kids.push(button(env, t(s, 'action.saved_codes'), () => void actions.acknowledgeRecoveryCodes(), 'primary', { key: 'saved' }));
237
+ return screen(env, kids);
238
+ }
239
+ if (view.step === 'policies') {
240
+ for (const policy of view.policies) {
241
+ kids.push(el(ui.Text, { key: policy.policy_id, style: l.text }, policy.title));
242
+ if (policy.reaccept && policy.summary_of_changes)
243
+ kids.push(el(ui.Text, { key: `${policy.policy_id}-s`, style: l.muted }, policy.summary_of_changes));
244
+ }
245
+ kids.push(button(env, t(s, 'action.accept'), () => void actions.acceptPolicies(), 'primary', { key: 'accept' }));
246
+ return screen(env, kids);
247
+ }
248
+ // identity_verification and a custom step send the person elsewhere.
249
+ const ra = view.requiredAction;
250
+ if (ra && (ra.kind === 'identity_verification' || ra.kind === 'custom')) {
251
+ if (ra.url)
252
+ kids.push(button(env, t(s, 'action.open'), () => env.onLink?.(ra.url), 'plain', { key: 'open' }));
253
+ if (ra.kind === 'identity_verification') {
254
+ kids.push(button(env, t(s, ra.status ? 'action.check' : 'action.continue'), () => void (ra.status ? actions.checkIdentityVerification() : actions.startIdentityVerification()), 'primary', { key: 'idv' }));
255
+ }
256
+ return screen(env, kids);
257
+ }
258
+ for (const field of view.fields) {
259
+ const raw = p.values[field.name];
260
+ const shown = raw === undefined && field.value !== undefined ? (Array.isArray(field.value) ? field.value : String(field.value)) : raw;
261
+ kids.push(renderField(env, field, shown, (next) => p.onValues({ ...p.values, [field.name]: next })));
262
+ }
263
+ // Legal consent on a sign-up form: one switch, with the links the instance published.
264
+ if (view.step === 'details' && view.legal && (view.legal.termsUrl || view.legal.privacyUrl)) {
265
+ kids.push(el(ui.View, { key: 'legal', style: l.row }, el(ui.Switch, { value: p.values.consent === 'true', onValueChange: (v) => set('consent')(v ? 'true' : 'false'), accessibilityLabel: t(s, 'text.legal') }), el(ui.Text, { style: l.text }, t(s, 'text.legal') + ' '), view.legal.termsUrl?.startsWith('https://') ? button(env, t(s, 'text.terms'), () => env.onLink?.(view.legal.termsUrl), 'link', { key: 'terms' }) : null, view.legal.privacyUrl?.startsWith('https://') ? button(env, t(s, 'text.privacy'), () => env.onLink?.(view.legal.privacyUrl), 'link', { key: 'privacy' }) : null));
266
+ }
267
+ if (view.needsSend)
268
+ kids.push(button(env, t(s, 'action.send_code'), () => void actions.sendCode(), 'plain', { key: 'send' }));
269
+ else if (view.codeSent)
270
+ kids.push(button(env, t(s, 'action.resend'), () => void actions.resend(), 'link', { key: 'resend' }));
271
+ if (view.fields.length > 0 || view.step === 'second_factor') {
272
+ kids.push(button(env, t(s, 'action.continue'), submit, 'primary', { key: 'submit', disabled: view.busy }));
273
+ }
274
+ if (ra?.skippable)
275
+ kids.push(button(env, t(s, 'action.skip'), () => void actions.submit({ skip: 'true' }), 'link', { key: 'skip' }));
276
+ if (view.step !== 'identifier' && view.step !== 'details' && view.step !== 'complete')
277
+ kids.push(button(env, t(s, 'action.start_over'), () => actions.reset(), 'link', { key: 'reset' }));
278
+ return screen(env, kids);
279
+ }
280
+ function screen(env, kids) {
281
+ return el(env.ui.ScrollView, { keyboardShouldPersistTaps: 'handled', contentContainerStyle: look(env).root }, ...kids);
282
+ }
283
+ /** One account-security section: the list (with its row actions), or the step of a flow inside it. */
284
+ function renderSecuritySection(env, p) {
285
+ const { view, actions } = p;
286
+ const l = look(env);
287
+ const { ui } = env;
288
+ const s = env.strings;
289
+ const kids = [];
290
+ kids.push(el(ui.Text, { key: 'title', accessibilityRole: 'header', style: l.title }, view.step === 'list' ? t(s, `section.${view.kind}`) : t(s, `step.${view.step}`)));
291
+ if (view.stepUpRequired)
292
+ kids.push(el(ui.Text, { key: 'stepup', accessibilityRole: 'alert', style: l.error }, t(s, 'text.step_up')));
293
+ else if (view.error)
294
+ kids.push(el(ui.Text, { key: 'error', accessibilityRole: 'alert', style: l.error }, view.error));
295
+ if (view.loading || view.busy)
296
+ kids.push(el(ui.ActivityIndicator, { key: 'busy' }));
297
+ if (view.step === 'recovery_codes' && view.recoveryCodes) {
298
+ kids.push(el(ui.View, { key: 'codes' }, view.recoveryCodes.map((c) => el(ui.Text, { key: c, selectable: true, style: l.code }, c))));
299
+ kids.push(button(env, t(s, 'action.saved_codes'), () => actions.acknowledgeCodes(), 'primary', { key: 'saved' }));
300
+ return el(ui.View, { style: l.root }, ...kids);
301
+ }
302
+ if (view.step !== 'list') {
303
+ if (view.enrollment) {
304
+ kids.push(el(ui.Text, { key: 'secret-hint', style: l.muted }, t(s, 'text.secret')));
305
+ kids.push(el(ui.Text, { key: 'secret', selectable: true, style: l.code }, view.enrollment.secret));
306
+ }
307
+ if (view.sentTo)
308
+ kids.push(el(ui.Text, { key: 'sent', style: l.muted }, t(s, 'text.sent_to', { to: view.sentTo })));
309
+ for (const f of view.fields) {
310
+ kids.push(renderField(env, { name: f.name, kind: f.kind, autoComplete: f.autoComplete, secure: f.secure }, p.values[f.name], (next) => p.onValues({ ...p.values, [f.name]: next })));
311
+ }
312
+ kids.push(button(env, t(s, 'action.continue'), () => void actions.submit((0, exports.toSubmitValues)(p.values)), 'primary', { key: 'submit' }));
313
+ kids.push(button(env, t(s, 'action.back'), () => actions.cancel(), 'link', { key: 'back' }));
314
+ return el(ui.View, { style: l.root }, ...kids);
315
+ }
316
+ if (view.items.length === 0 && !view.loading)
317
+ kids.push(el(ui.Text, { key: 'empty', style: l.muted }, t(s, 'text.empty')));
318
+ for (const item of view.items) {
319
+ const tags = [item.current ? t(s, 'text.current') : null, item.primary ? t(s, 'text.primary') : null, item.verified ? null : t(s, 'text.unverified')].filter(Boolean).join(' · ');
320
+ kids.push(el(ui.View, { key: item.id, style: l.row }, el(ui.View, { style: { flexShrink: 1 } }, el(ui.Text, { style: l.text }, item.label ?? item.id), item.detail || tags ? el(ui.Text, { style: l.muted }, [item.detail, tags].filter(Boolean).join(' · ')) : null), view.actions.includes('make_primary') && item.verified && !item.primary ? button(env, t(s, 'action.make_primary'), () => void actions.makePrimary(item.id), 'link', { key: 'primary' }) : null, view.actions.includes('verify_phone') && !item.verified ? button(env, t(s, 'action.verify'), () => void actions.verifyPhone(item.id), 'link', { key: 'verify' }) : null, view.actions.includes('remove') && !item.current ? button(env, t(s, 'action.remove'), () => void actions.remove(item.id), 'link', { key: 'remove' }) : null));
321
+ }
322
+ if (view.actions.includes('revoke_others'))
323
+ kids.push(button(env, t(s, 'action.sign_out_others'), () => void actions.revokeOthers(), 'plain', { key: 'others' }));
324
+ if (view.actions.includes('start_totp'))
325
+ kids.push(button(env, t(s, 'action.authenticator'), () => void actions.startTotp(), 'plain', { key: 'totp' }));
326
+ if (view.actions.includes('start_sms')) {
327
+ kids.push(renderField(env, { name: 'phone', kind: 'phone', autoComplete: 'tel', secure: false }, p.values.phone, (next) => p.onValues({ ...p.values, phone: next })));
328
+ kids.push(button(env, t(s, 'action.sms'), () => void actions.startSms(String(p.values.phone ?? '')), 'plain', { key: 'sms' }));
329
+ }
330
+ if (view.actions.includes('add_phone')) {
331
+ kids.push(renderField(env, { name: 'phone', kind: 'phone', autoComplete: 'tel', secure: false }, p.values.phone, (next) => p.onValues({ ...p.values, phone: next })));
332
+ kids.push(button(env, t(s, 'action.add_phone'), () => void actions.addPhone(String(p.values.phone ?? '')), 'plain', { key: 'add-phone' }));
333
+ }
334
+ if (view.kind === 'passkeys')
335
+ kids.push(button(env, t(s, 'action.add_passkey'), () => void actions.addPasskey(), 'plain', { key: 'passkey' }));
336
+ if (view.actions.includes('regenerate_codes'))
337
+ kids.push(button(env, t(s, 'action.new_codes'), () => void actions.regenerateCodes(), 'plain', { key: 'codes-new' }));
338
+ if (view.kind === 'password' && view.fields.length > 0) {
339
+ for (const f of view.fields) {
340
+ kids.push(renderField(env, { name: f.name, kind: f.kind, autoComplete: f.autoComplete, secure: f.secure }, p.values[f.name], (next) => p.onValues({ ...p.values, [f.name]: next })));
341
+ }
342
+ kids.push(button(env, t(s, 'action.continue'), () => void actions.submit((0, exports.toSubmitValues)(p.values)), 'primary', { key: 'submit' }));
343
+ }
344
+ return el(ui.View, { style: l.root }, ...kids);
345
+ }
346
+ //# sourceMappingURL=native-screens-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-screens-render.js","sourceRoot":"","sources":["../src/native-screens-render.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type ReactElement } from 'react';
2
+ import type { SecuritySectionKind } from '@atlasauth/js';
3
+ import { useSignInScreen, useSignUpScreen } from './screens-hook';
4
+ import type { SecuritySectionSetup, SignInScreenSetup } from './screens';
5
+ import { type ScreenStyles, type ScreenTheme } from './native-screens-render';
6
+ /** Props every default screen takes. */
7
+ export interface NativeScreenProps {
8
+ /** Colours and sizes merged over the defaults. */
9
+ theme?: Partial<ScreenTheme>;
10
+ /** Style objects by element role, merged over the themed defaults. */
11
+ styles?: ScreenStyles;
12
+ /** Override any string (a translation, different wording). Keys are in `DEFAULT_SCREEN_STRINGS`. */
13
+ strings?: Record<string, string>;
14
+ /** Open a link (a policy, a verification page). Default: `Linking.openURL`. */
15
+ onLink?: (href: string) => void;
16
+ }
17
+ /** The sign-in screen: identifier, password or code, second factor, and every step a journey adds. */
18
+ export declare function SignInScreen(props: NativeScreenProps & {
19
+ setup?: SignInScreenSetup;
20
+ onComplete?: () => void;
21
+ }): ReactElement | null;
22
+ /** The create-account screen: details, then verify email, policies, second-factor setup and the journey's own steps. */
23
+ export declare function SignUpScreen(props: NativeScreenProps & {
24
+ setup?: Pick<SignInScreenSetup, 'localization' | 'passkey'>;
25
+ onComplete?: () => void;
26
+ }): ReactElement | null;
27
+ /**
28
+ * Only the second-factor steps of a screen you already hold (`const screen = useSignInScreen()`): the challenge
29
+ * (`second_factor`), setting one up (`enroll_second_factor`) and the recovery codes. Renders nothing on any other
30
+ * step, so it sits next to your own screens for the others.
31
+ */
32
+ export declare function SecondFactorScreen(props: NativeScreenProps & {
33
+ screen: ReturnType<typeof useSignInScreen> | ReturnType<typeof useSignUpScreen>;
34
+ }): ReactElement | null;
35
+ /** One account-security section: sessions, second factor, passkeys, phone numbers, recovery codes, connected accounts or the password. */
36
+ export declare function SecuritySection(props: NativeScreenProps & {
37
+ kind: SecuritySectionKind;
38
+ setup?: SecuritySectionSetup;
39
+ }): ReactElement;
40
+ /** Every security section in a scrolling list; pass `kinds` to choose and order them. */
41
+ export declare function SecurityScreen(props: NativeScreenProps & {
42
+ kinds?: SecuritySectionKind[];
43
+ setup?: SecuritySectionSetup;
44
+ }): ReactElement;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignInScreen = SignInScreen;
4
+ exports.SignUpScreen = SignUpScreen;
5
+ exports.SecondFactorScreen = SecondFactorScreen;
6
+ exports.SecuritySection = SecuritySection;
7
+ exports.SecurityScreen = SecurityScreen;
8
+ const react_1 = require("react");
9
+ const react_native_1 = require("react-native");
10
+ const screens_hook_1 = require("./screens-hook");
11
+ const native_screens_render_1 = require("./native-screens-render");
12
+ /*
13
+ * Default React Native screens for sign-in, sign-up, the second factor and account security. Thin on purpose:
14
+ * each is one view-model from `useSignInScreen` / `useSignUpScreen` / `useSecuritySection` drawn with React
15
+ * Native primitives. Theme them with `theme` and `styles`, translate them with `strings`, or skip them and draw
16
+ * the same view-model yourself. Nothing is rendered in a web view.
17
+ */
18
+ const ui = { View: react_native_1.View, Text: react_native_1.Text, TextInput: react_native_1.TextInput, Pressable: react_native_1.Pressable, ScrollView: react_native_1.ScrollView, ActivityIndicator: react_native_1.ActivityIndicator, Switch: react_native_1.Switch };
19
+ const envOf = (p) => ({
20
+ ui,
21
+ ...(p.theme ? { theme: p.theme } : {}),
22
+ ...(p.styles ? { styles: p.styles } : {}),
23
+ ...(p.strings ? { strings: p.strings } : {}),
24
+ onLink: p.onLink ?? ((href) => void react_native_1.Linking.openURL(href)),
25
+ });
26
+ /** Keep a journey form's answers on the server a moment after the person stops typing. */
27
+ function useDraftSaver(save, active) {
28
+ const timer = (0, react_1.useRef)(null);
29
+ (0, react_1.useEffect)(() => () => {
30
+ if (timer.current)
31
+ clearTimeout(timer.current);
32
+ }, []);
33
+ return (0, react_1.useCallback)((values) => {
34
+ if (!save || !active)
35
+ return;
36
+ if (timer.current)
37
+ clearTimeout(timer.current);
38
+ timer.current = setTimeout(() => void save(values), 800);
39
+ }, [save, active]);
40
+ }
41
+ function AuthSurface(props) {
42
+ const { screen } = props;
43
+ const [values, setValues] = (0, react_1.useState)({});
44
+ const view = screen.view;
45
+ const saveDraft = useDraftSaver(screen.saveDraft?.bind(screen), view.requiredAction?.kind === 'journey_form');
46
+ // Values typed on one step never leak into the next.
47
+ const last = (0, react_1.useRef)(view.step + (view.requiredAction?.kind ?? ''));
48
+ (0, react_1.useEffect)(() => {
49
+ const now = view.step + (view.requiredAction?.kind ?? '');
50
+ if (now !== last.current) {
51
+ last.current = now;
52
+ setValues({});
53
+ }
54
+ }, [view.step, view.requiredAction?.kind]);
55
+ (0, react_1.useEffect)(() => {
56
+ if (view.step === 'complete')
57
+ props.onComplete?.();
58
+ }, [view.step]); // eslint-disable-line react-hooks/exhaustive-deps
59
+ if (props.steps && !props.steps.includes(view.step))
60
+ return null;
61
+ return (0, native_screens_render_1.renderAuthScreen)(envOf(props), {
62
+ view,
63
+ actions: screen,
64
+ values,
65
+ onValues: (next) => {
66
+ setValues(next);
67
+ saveDraft(Object.fromEntries(Object.entries(next).map(([k, v]) => [k, Array.isArray(v) ? v.join(',') : v])));
68
+ },
69
+ });
70
+ }
71
+ /** The sign-in screen: identifier, password or code, second factor, and every step a journey adds. */
72
+ function SignInScreen(props) {
73
+ const screen = (0, screens_hook_1.useSignInScreen)(props.setup);
74
+ return (0, react_1.createElement)(AuthSurface, { ...props, screen });
75
+ }
76
+ /** The create-account screen: details, then verify email, policies, second-factor setup and the journey's own steps. */
77
+ function SignUpScreen(props) {
78
+ const screen = (0, screens_hook_1.useSignUpScreen)(props.setup);
79
+ return (0, react_1.createElement)(AuthSurface, { ...props, screen });
80
+ }
81
+ /**
82
+ * Only the second-factor steps of a screen you already hold (`const screen = useSignInScreen()`): the challenge
83
+ * (`second_factor`), setting one up (`enroll_second_factor`) and the recovery codes. Renders nothing on any other
84
+ * step, so it sits next to your own screens for the others.
85
+ */
86
+ function SecondFactorScreen(props) {
87
+ return (0, react_1.createElement)(AuthSurface, { ...props, screen: props.screen, steps: ['second_factor', 'enroll_second_factor', 'recovery_codes'] });
88
+ }
89
+ /** One account-security section: sessions, second factor, passkeys, phone numbers, recovery codes, connected accounts or the password. */
90
+ function SecuritySection(props) {
91
+ const section = (0, screens_hook_1.useSecuritySection)(props.kind, props.setup);
92
+ const [values, setValues] = (0, react_1.useState)({});
93
+ return (0, native_screens_render_1.renderSecuritySection)(envOf(props), { view: section.view, actions: section, values, onValues: setValues });
94
+ }
95
+ /** Every security section in a scrolling list; pass `kinds` to choose and order them. */
96
+ function SecurityScreen(props) {
97
+ const kinds = props.kinds ?? ['password', 'mfa', 'passkeys', 'recovery_codes', 'phones', 'sessions', 'connected_accounts'];
98
+ return (0, react_1.createElement)(react_native_1.ScrollView, null, ...kinds.map((kind) => (0, react_1.createElement)(SecuritySection, { key: kind, kind, theme: props.theme, styles: props.styles, strings: props.strings, onLink: props.onLink, setup: props.setup })));
99
+ }
100
+ //# sourceMappingURL=native-screens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-screens.js","sourceRoot":"","sources":["../src/native-screens.tsx"],"names":[],"mappings":";;AA4FA,oCAGC;AAGD,oCAGC;AAOD,gDAEC;AAGD,0CAIC;AAGD,wCAOC;AA/HD,iCAAmG;AACnG,+CAAgH;AAEhH,iDAAsF;AAEtF,mEAQiC;AAEjC;;;;;GAKG;AAEH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAJ,mBAAI,EAAE,IAAI,EAAJ,mBAAI,EAAE,SAAS,EAAT,wBAAS,EAAE,SAAS,EAAT,wBAAS,EAAE,UAAU,EAAV,yBAAU,EAAE,iBAAiB,EAAjB,gCAAiB,EAAE,MAAM,EAAN,qBAAM,EAAE,CAAC;AAcvF,MAAM,KAAK,GAAG,CAAC,CAAoB,EAAa,EAAE,CAAC,CAAC;IAClD,EAAE;IACF,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,sBAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D,CAAC,CAAC;AAEH,0FAA0F;AAC1F,SAAS,aAAa,CAAC,IAAqE,EAAE,MAAe;IAC3G,MAAM,KAAK,GAAG,IAAA,cAAM,EAAuC,IAAI,CAAC,CAAC;IACjE,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACnB,IAAI,KAAK,CAAC,OAAO;YAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,IAAA,mBAAW,EAChB,CAAC,MAA8B,EAAE,EAAE;QACjC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC7B,IAAI,KAAK,CAAC,OAAO;YAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,IAAI,EAAE,MAAM,CAAC,CACf,CAAC;AACJ,CAAC;AAID,SAAS,WAAW,CAAC,KAAsG;IACzH,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAc,EAAE,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,cAAc,CAAC,CAAC;IAC9G,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACnE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;YACnB,SAAS,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;IACrD,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kDAAkD;IACnE,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,OAAO,IAAA,wCAAgB,EAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACpC,IAAI;QACJ,OAAO,EAAE,MAAM;QACf,MAAM;QACN,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjB,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,SAAgB,YAAY,CAAC,KAAiF;IAC5G,MAAM,MAAM,GAAG,IAAA,8BAAe,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,IAAA,qBAAa,EAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,wHAAwH;AACxH,SAAgB,YAAY,CAAC,KAAmH;IAC9I,MAAM,MAAM,GAAG,IAAA,8BAAe,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,IAAA,qBAAa,EAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAA8G;IAC/I,OAAO,IAAA,qBAAa,EAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAyC,EAAE,KAAK,EAAE,CAAC,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAC/K,CAAC;AAED,0IAA0I;AAC1I,SAAgB,eAAe,CAAC,KAAsF;IACpH,MAAM,OAAO,GAAG,IAAA,iCAAkB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAc,EAAE,CAAC,CAAC;IACtD,OAAO,IAAA,6CAAqB,EAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACpH,CAAC;AAED,yFAAyF;AACzF,SAAgB,cAAc,CAAC,KAA0F;IACvH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAK,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,CAA2B,CAAC;IACtJ,OAAO,IAAA,qBAAa,EAClB,yBAAU,EACV,IAAI,EACJ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,qBAAa,EAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CACxL,CAAC;AACJ,CAAC"}
@@ -27,9 +27,39 @@ export declare function useSignInScreen(setup?: SignInScreenSetup): {
27
27
  startIdentityVerification(redirectUrl?: string): Promise<void>;
28
28
  checkIdentityVerification(): Promise<void>;
29
29
  submitCaptcha(token: string): Promise<void>;
30
+ saveDraft(values?: Record<string, string>): Promise<void>;
31
+ uploadFile(field: string, file: Blob): Promise<string | null>;
30
32
  reset(): void;
31
33
  view: SignInScreenView;
32
34
  };
35
+ /**
36
+ * The create-account screen as a view-model: `const { view, submit, saveDraft } = useSignUpScreen()`. Starts at
37
+ * `view.step === 'details'` (`view.fields`, `view.legal`); after the account is made it walks the same steps as
38
+ * sign-in: verify the email, policies, second-factor setup, recovery codes, and the required actions and journey
39
+ * forms a sign-up journey adds (`required_action`, with typed `view.fields` and `saveDraft()` to resume later).
40
+ */
41
+ export declare function useSignUpScreen(setup?: Pick<SignInScreenSetup, 'localization' | 'passkey'>): {
42
+ getView: () => SignInScreenView;
43
+ subscribe: (listener: (view: SignInScreenView) => void) => () => void;
44
+ selectMethod: (method: import("@atlasauth/js").SignInMethod) => Promise<void>;
45
+ sendCode: () => Promise<void>;
46
+ resend: () => Promise<void>;
47
+ submit: (values?: Record<string, string>) => Promise<void>;
48
+ acknowledgeRecoveryCodes: () => Promise<void>;
49
+ acceptPolicies: (options?: {
50
+ only?: string[];
51
+ scrolledToEnd?: boolean;
52
+ viewMs?: number;
53
+ }) => Promise<void>;
54
+ startIdentityVerification: (redirectUrl?: string) => Promise<void>;
55
+ checkIdentityVerification: () => Promise<void>;
56
+ submitCaptcha: (token: string) => Promise<void>;
57
+ saveDraft: (values?: Record<string, string>) => Promise<void>;
58
+ uploadFile: (field: string, file: Blob) => Promise<string | null>;
59
+ reset: () => void;
60
+ flow: import("@atlasauth/js").SignUpFlow;
61
+ view: SignInScreenView;
62
+ };
33
63
  /**
34
64
  * One account-security section as a view-model, step-up handled inside:
35
65
  * `const { view, remove, startTotp, submit } = useSecuritySection('mfa', { choose })`.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useSignInScreen = useSignInScreen;
4
+ exports.useSignUpScreen = useSignUpScreen;
4
5
  exports.useSecuritySection = useSecuritySection;
5
6
  const react_1 = require("react");
6
7
  const policies_1 = require("./policies");
@@ -19,6 +20,18 @@ function useSignInScreen(setup = {}) {
19
20
  const view = (0, react_1.useSyncExternalStore)(screen.subscribe, screen.getView, screen.getView);
20
21
  return { view, ...screen };
21
22
  }
23
+ /**
24
+ * The create-account screen as a view-model: `const { view, submit, saveDraft } = useSignUpScreen()`. Starts at
25
+ * `view.step === 'details'` (`view.fields`, `view.legal`); after the account is made it walks the same steps as
26
+ * sign-in: verify the email, policies, second-factor setup, recovery codes, and the required actions and journey
27
+ * forms a sign-up journey adds (`required_action`, with typed `view.fields` and `saveDraft()` to resume later).
28
+ */
29
+ function useSignUpScreen(setup = {}) {
30
+ const client = (0, policies_1.useExpoFapiClient)();
31
+ const screen = (0, react_1.useMemo)(() => (0, screens_1.createExpoSignUpScreen)(client, setup), [client]); // eslint-disable-line react-hooks/exhaustive-deps
32
+ const view = (0, react_1.useSyncExternalStore)(screen.subscribe, screen.getView, screen.getView);
33
+ return { view, ...screen };
34
+ }
22
35
  /**
23
36
  * One account-security section as a view-model, step-up handled inside:
24
37
  * `const { view, remove, startTotp, submit } = useSecuritySection('mfa', { choose })`.
@@ -1 +1 @@
1
- {"version":3,"file":"screens-hook.js","sourceRoot":"","sources":["../src/screens-hook.ts"],"names":[],"mappings":";;AAYA,0CAMC;AAMD,gDAkBC;AA1CD,iCAA8D;AAE9D,yCAA+C;AAC/C,uCAAiI;AAEjI;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAA2B,EAAE;IAC3D,MAAM,MAAM,GAAG,IAAA,4BAAiB,GAAE,CAAC;IACnC,gGAAgG;IAChG,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,gCAAsB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kDAAkD;IACjI,MAAM,IAAI,GAAqB,IAAA,4BAAoB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtG,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,IAAyB,EAAE,QAA8B,EAAE;IAC5F,MAAM,MAAM,GAAG,IAAA,4BAAiB,GAAE,CAAC;IACnC,wEAAwE;IACxE,MAAM,MAAM,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,MAAM,OAAO,GAAG,IAAA,eAAO,EACrB,GAAG,EAAE,CACH,IAAA,mCAAyB,EAAC,MAAM,EAAE,IAAI,EAAE;QACtC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,SAAU,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7H,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClF,CAAC;IACJ,uDAAuD;IACvD,CAAC,MAAM,EAAE,IAAI,CAAC,CACf,CAAC;IACF,MAAM,IAAI,GAAwB,IAAA,4BAAoB,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5G,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"screens-hook.js","sourceRoot":"","sources":["../src/screens-hook.ts"],"names":[],"mappings":";;AAYA,0CAMC;AAQD,0CAKC;AAMD,gDAkBC;AAvDD,iCAA8D;AAE9D,yCAA+C;AAC/C,uCAAyJ;AAEzJ;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAA2B,EAAE;IAC3D,MAAM,MAAM,GAAG,IAAA,4BAAiB,GAAE,CAAC;IACnC,gGAAgG;IAChG,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,gCAAsB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kDAAkD;IACjI,MAAM,IAAI,GAAqB,IAAA,4BAAoB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtG,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAA6D,EAAE;IAC7F,MAAM,MAAM,GAAG,IAAA,4BAAiB,GAAE,CAAC;IACnC,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,gCAAsB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kDAAkD;IACjI,MAAM,IAAI,GAAqB,IAAA,4BAAoB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtG,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,IAAyB,EAAE,QAA8B,EAAE;IAC5F,MAAM,MAAM,GAAG,IAAA,4BAAiB,GAAE,CAAC;IACnC,wEAAwE;IACxE,MAAM,MAAM,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,MAAM,OAAO,GAAG,IAAA,eAAO,EACrB,GAAG,EAAE,CACH,IAAA,mCAAyB,EAAC,MAAM,EAAE,IAAI,EAAE;QACtC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,SAAU,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7H,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClF,CAAC;IACJ,uDAAuD;IACvD,CAAC,MAAM,EAAE,IAAI,CAAC,CACf,CAAC;IACF,MAAM,IAAI,GAAwB,IAAA,4BAAoB,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5G,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;AAC9B,CAAC"}
package/dist/screens.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import { type ErrorStrings, type FapiClient, type FieldError, type NativeSignInProvider, type PasskeyAssertionProvider, type SecuritySectionKind, type StepUpFlowOptions } from '@atlasauth/js';
10
10
  import { type AppleAuthenticationLike, type GoogleSigninLike } from './social';
11
- export type { ScreenField, SectionField, SecurityItem, SecuritySection, SecuritySectionKind, SecuritySectionStep, SecuritySectionView, SignInMethod, SignInScreen, SignInScreenStep, SignInScreenView, } from '@atlasauth/js';
11
+ export type { ScreenField, SectionField, SecurityItem, SecuritySection as SecuritySectionViewModel, SecuritySectionKind, SecuritySectionStep, SecuritySectionView, SignInMethod, SignInScreen as SignInScreenViewModel, SignInScreenStep, SignInScreenView, SignUpScreen as SignUpScreenViewModel, } from '@atlasauth/js';
12
12
  /** A passkey provider for a phone: `@atlasauth/expo-passkeys`'s `nativePasskeySignIn(Passkey)` and `nativePasskeyAssertion(Passkey)`. */
13
13
  export interface NativePasskeyProvider {
14
14
  /** Passkey sign-in (the one-tap button). */
@@ -26,6 +26,8 @@ export interface SignInScreenSetup {
26
26
  }
27
27
  /** The sign-in screen model on a client; separated from React so it is testable with a fake one. */
28
28
  export declare function createExpoSignInScreen(client: FapiClient, setup?: SignInScreenSetup): import("@atlasauth/js").SignInScreen;
29
+ /** The sign-up screen model on a client: the details form, then every step a journey or the policies add. */
30
+ export declare function createExpoSignUpScreen(client: FapiClient, setup?: Pick<SignInScreenSetup, 'localization' | 'passkey'>): import("@atlasauth/js").SignUpScreen;
29
31
  export interface SecuritySectionSetup {
30
32
  localization?: ErrorStrings | null;
31
33
  /** Asks the person to re-authenticate when the server requires it (see `useStepUp`). Without it the view says `stepUpRequired`. */
package/dist/screens.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createExpoSignInScreen = createExpoSignInScreen;
4
+ exports.createExpoSignUpScreen = createExpoSignUpScreen;
4
5
  exports.createExpoSecuritySection = createExpoSecuritySection;
5
6
  /**
6
7
  * View-models for native sign-in and account-security screens, bound to the provider's bearer-authenticated client.
@@ -25,6 +26,14 @@ function createExpoSignInScreen(client, setup = {}) {
25
26
  },
26
27
  });
27
28
  }
29
+ /** The sign-up screen model on a client: the details form, then every step a journey or the policies add. */
30
+ function createExpoSignUpScreen(client, setup = {}) {
31
+ return (0, js_1.createSignUpScreen)({
32
+ client,
33
+ ...(setup.localization !== undefined ? { localization: setup.localization } : {}),
34
+ ...(setup.passkey?.assertion ? { passkeyAssertion: setup.passkey.assertion } : {}),
35
+ });
36
+ }
28
37
  /** One security section model on a client; separated from React so it is testable with a fake one. */
29
38
  function createExpoSecuritySection(client, kind, setup = {}) {
30
39
  return (0, js_1.createSecuritySection)({
@@ -1 +1 @@
1
- {"version":3,"file":"screens.js","sourceRoot":"","sources":["../src/screens.ts"],"names":[],"mappings":";;AAqDA,wDAWC;AAYD,8DASC;AArFD;;;;;;;GAOG;AACH,sCAUuB;AACvB,qCAA0H;AAiC1H,oGAAoG;AACpG,SAAgB,sBAAsB,CAAC,MAAkB,EAAE,QAA2B,EAAE;IACtF,OAAO,IAAA,uBAAkB,EAAC;QACxB,MAAM;QACN,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,YAAY,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAA,4BAAmB,EAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,6BAAoB,EAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE;KACF,CAAC,CAAC;AACL,CAAC;AAWD,sGAAsG;AACtG,SAAgB,yBAAyB,CAAC,MAAkB,EAAE,IAAyB,EAAE,QAA8B,EAAE;IACvH,OAAO,IAAA,0BAAqB,EAAC;QAC3B,MAAM;QACN,IAAI;QACJ,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"screens.js","sourceRoot":"","sources":["../src/screens.ts"],"names":[],"mappings":";;AAuDA,wDAWC;AAGD,wDAMC;AAYD,8DASC;AAhGD;;;;;;;GAOG;AACH,sCAWuB;AACvB,qCAA0H;AAkC1H,oGAAoG;AACpG,SAAgB,sBAAsB,CAAC,MAAkB,EAAE,QAA2B,EAAE;IACtF,OAAO,IAAA,uBAAkB,EAAC;QACxB,MAAM;QACN,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,YAAY,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAA,4BAAmB,EAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,6BAAoB,EAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE;KACF,CAAC,CAAC;AACL,CAAC;AAED,6GAA6G;AAC7G,SAAgB,sBAAsB,CAAC,MAAkB,EAAE,QAA6D,EAAE;IACxH,OAAO,IAAA,uBAAkB,EAAC;QACxB,MAAM;QACN,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC,CAAC;AACL,CAAC;AAWD,sGAAsG;AACtG,SAAgB,yBAAyB,CAAC,MAAkB,EAAE,IAAyB,EAAE,QAA8B,EAAE;IACvH,OAAO,IAAA,0BAAqB,EAAC;QAC3B,MAAM;QACN,IAAI;QACJ,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC"}
package/dist/step-up.d.ts CHANGED
@@ -5,10 +5,12 @@ export type UseStepUpOptions = Omit<StepUpFlowOptions, 'client'>;
5
5
  /** The step-up calls bound to a client; separated from React so it is testable with a fake one. */
6
6
  export declare function createExpoStepUp(client: FapiClient, options: UseStepUpOptions): {
7
7
  withStepUp<T>(call: () => Promise<import("@atlasauth/js").FapiResponse<T>>): Promise<import("@atlasauth/js").FapiResponse<T>>;
8
+ withPolicy<T>(policy: string, fn: () => Promise<T>): Promise<T>;
8
9
  reauthenticate(action?: string): Promise<import("@atlasauth/js").StepUpResult>;
9
10
  };
10
11
  /** `withStepUp(call)` and `reauthenticate()` on the provider's bearer-authenticated client. */
11
12
  export declare function useStepUp(options: UseStepUpOptions): {
12
13
  withStepUp<T>(call: () => Promise<import("@atlasauth/js").FapiResponse<T>>): Promise<import("@atlasauth/js").FapiResponse<T>>;
14
+ withPolicy<T>(policy: string, fn: () => Promise<T>): Promise<T>;
13
15
  reauthenticate(action?: string): Promise<import("@atlasauth/js").StepUpResult>;
14
16
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasauth/expo",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
@@ -25,7 +25,7 @@
25
25
  "./dist/index.js"
26
26
  ],
27
27
  "dependencies": {
28
- "@atlasauth/react": "^0.35.0",
28
+ "@atlasauth/react": "^0.36.0",
29
29
  "@atlasauth/react-native": "^0.8.0"
30
30
  },
31
31
  "peerDependencies": {
@@ -58,7 +58,7 @@
58
58
  "react": "^18.3.1",
59
59
  "typescript": "^5.6.3",
60
60
  "vitest": "^3.2.7",
61
- "@atlasauth/js": "0.44.0"
61
+ "@atlasauth/js": "0.45.0"
62
62
  },
63
63
  "publishConfig": {
64
64
  "access": "public"