@atlasauth/react 0.14.0 → 0.16.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/AtlasProvider.d.ts +1 -0
  3. package/dist/AtlasProvider.js +34 -5
  4. package/dist/AtlasProvider.js.map +1 -1
  5. package/dist/account.d.ts +12 -1
  6. package/dist/account.js +6 -9
  7. package/dist/account.js.map +1 -1
  8. package/dist/active-atlas.d.ts +29 -0
  9. package/dist/active-atlas.js +40 -0
  10. package/dist/active-atlas.js.map +1 -0
  11. package/dist/billing.d.ts +30 -1
  12. package/dist/billing.js +86 -14
  13. package/dist/billing.js.map +1 -1
  14. package/dist/captcha.js +1 -1
  15. package/dist/captcha.js.map +1 -1
  16. package/dist/compat.d.ts +307 -0
  17. package/dist/compat.js +387 -0
  18. package/dist/compat.js.map +1 -0
  19. package/dist/components.d.ts +5 -1
  20. package/dist/components.js +16 -1
  21. package/dist/components.js.map +1 -1
  22. package/dist/device-authorization.d.ts +42 -0
  23. package/dist/device-authorization.js +137 -0
  24. package/dist/device-authorization.js.map +1 -0
  25. package/dist/flow.d.ts +22 -1
  26. package/dist/flow.js +8 -1
  27. package/dist/flow.js.map +1 -1
  28. package/dist/i18n.js +15 -0
  29. package/dist/i18n.js.map +1 -1
  30. package/dist/index.js +3 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/policies.d.ts +114 -0
  33. package/dist/policies.js +324 -0
  34. package/dist/policies.js.map +1 -0
  35. package/dist/sign-in.js +9 -2
  36. package/dist/sign-in.js.map +1 -1
  37. package/dist/sign-up.d.ts +3 -0
  38. package/dist/sign-up.js +36 -7
  39. package/dist/sign-up.js.map +1 -1
  40. package/dist/styles.d.ts +1 -28
  41. package/dist/styles.js +3 -1
  42. package/dist/styles.js.map +1 -1
  43. package/dist/types.d.ts +33 -0
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.js +1 -1
  46. package/package.json +15 -4
package/dist/compat.js ADDED
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LoginRequiredError = exports.getActiveAtlas = void 0;
5
+ exports.primaryEmail = primaryEmail;
6
+ exports.displayName = displayName;
7
+ exports.signInRedirect = signInRedirect;
8
+ exports.nextAuthSessionFrom = nextAuthSessionFrom;
9
+ exports.useNextAuthSession = useNextAuthSession;
10
+ exports.getNextAuthSession = getNextAuthSession;
11
+ exports.nextAuthSignIn = nextAuthSignIn;
12
+ exports.nextAuthSignOut = nextAuthSignOut;
13
+ exports.auth0UserFrom = auth0UserFrom;
14
+ exports.useAuth0Compat = useAuth0Compat;
15
+ exports.useAuth0UserCompat = useAuth0UserCompat;
16
+ exports.withAuthenticationRequiredCompat = withAuthenticationRequiredCompat;
17
+ exports.supabaseUserFrom = supabaseUserFrom;
18
+ exports.getSupabaseUserCompat = getSupabaseUserCompat;
19
+ exports.getSupabaseSessionCompat = getSupabaseSessionCompat;
20
+ exports.useSupabaseUserCompat = useSupabaseUserCompat;
21
+ exports.useSupabaseSessionCompat = useSupabaseSessionCompat;
22
+ exports.supabaseSignOutCompat = supabaseSignOutCompat;
23
+ exports.supabaseSignInWithOAuthCompat = supabaseSignInWithOAuthCompat;
24
+ exports.onSupabaseAuthStateChangeCompat = onSupabaseAuthStateChangeCompat;
25
+ exports.betterAuthSessionFrom = betterAuthSessionFrom;
26
+ exports.createBetterAuthCompatClient = createBetterAuthCompatClient;
27
+ /**
28
+ * Drop-in compatibility helpers for apps moving to Atlas from Auth.js (NextAuth),
29
+ * Auth0 (auth0-react / nextjs-auth0), Supabase Auth and Better Auth.
30
+ *
31
+ * `atlas migrate code --from <vendor>` rewrites an app's imports onto these, so
32
+ * the migrated code keeps the shapes it was written against (`{ data, status }`
33
+ * from `useSession`, `{ isAuthenticated, user }` from `useAuth0`, …) and compiles
34
+ * and runs on day one. Each helper is a thin projection over the native hooks
35
+ * (`useUser`, `useAuth`); once migrated, move call sites to those at your own pace.
36
+ *
37
+ * The imperative helpers (`nextAuthSignOut()`, `getSupabaseUserCompat()`, …) work
38
+ * outside React components too: they act on the `<AtlasProvider>` mounted on the
39
+ * page. Calling one with no provider mounted throws a clear error.
40
+ */
41
+ const react_1 = require("react");
42
+ const AtlasProvider_1 = require("./AtlasProvider");
43
+ const components_shared_1 = require("./components-shared");
44
+ const active_atlas_1 = require("./active-atlas");
45
+ var active_atlas_2 = require("./active-atlas");
46
+ Object.defineProperty(exports, "getActiveAtlas", { enumerable: true, get: function () { return active_atlas_2.getActiveAtlas; } });
47
+ // ---- shared user projection --------------------------------------------------
48
+ /** The primary email address, else the first verified one, else any. */
49
+ function primaryEmail(user) {
50
+ const list = user?.email_addresses ?? [];
51
+ const pick = list.find((e) => e.primary) ?? list.find((e) => e.verified) ?? list[0];
52
+ return pick ? { address: pick.email_address, verified: pick.verified } : null;
53
+ }
54
+ /** A display name: first + last, else the username, else null. */
55
+ function displayName(user) {
56
+ if (!user)
57
+ return null;
58
+ const full = [user.first_name, user.last_name].filter(Boolean).join(' ').trim();
59
+ return full || user.username || null;
60
+ }
61
+ function expiresIso(claims) {
62
+ const exp = typeof claims?.exp === 'number' ? claims.exp * 1000 : Date.now() + 60_000;
63
+ return new Date(exp).toISOString();
64
+ }
65
+ function signInUrlWith(options = {}) {
66
+ return (0, components_shared_1.withRedirect)(options.signInUrl ?? '/sign-in', options.redirectUrl);
67
+ }
68
+ /** Send the browser to your sign-in page, returning to `redirectUrl` afterwards. */
69
+ function signInRedirect(options = {}) {
70
+ (0, components_shared_1.navigateTo)(signInUrlWith(options));
71
+ }
72
+ async function signOutThenGo(helper, returnTo) {
73
+ await (0, active_atlas_1.requireActive)(helper).signOut();
74
+ if (returnTo !== false)
75
+ (0, components_shared_1.navigateTo)(returnTo ?? '/');
76
+ }
77
+ /** Pure projection of the provider state onto next-auth's session shape. */
78
+ function nextAuthSessionFrom(state) {
79
+ if (state.status === 'loading')
80
+ return { data: null, status: 'loading' };
81
+ if (state.status !== 'signed_in' || !state.user)
82
+ return { data: null, status: 'unauthenticated' };
83
+ const email = primaryEmail(state.user);
84
+ return {
85
+ data: {
86
+ user: {
87
+ id: state.user.id,
88
+ name: displayName(state.user),
89
+ email: email?.address ?? null,
90
+ image: state.user.image_url,
91
+ },
92
+ expires: expiresIso(state.claims),
93
+ },
94
+ status: 'authenticated',
95
+ };
96
+ }
97
+ /** `useSession()` from `next-auth/react`, on Atlas: `{ data, status, update }`. */
98
+ function useNextAuthSession() {
99
+ const atlas = (0, AtlasProvider_1.useAtlas)();
100
+ const projected = nextAuthSessionFrom(atlas);
101
+ return {
102
+ ...projected,
103
+ update: async () => {
104
+ await atlas.reload();
105
+ const now = (0, active_atlas_1.getActiveAtlas)() ?? atlas;
106
+ return nextAuthSessionFrom(now).data;
107
+ },
108
+ };
109
+ }
110
+ /** `getSession()` from `next-auth/react` (client side): the current session or null. */
111
+ async function getNextAuthSession() {
112
+ return nextAuthSessionFrom((0, active_atlas_1.requireActive)('getNextAuthSession')).data;
113
+ }
114
+ /**
115
+ * `signIn()` from `next-auth/react`: opens your Atlas sign-in page. The provider
116
+ * argument is accepted for compatibility; the sign-in page lists every enabled
117
+ * method (render `<SocialSignInButton provider="github" />` to go straight to one).
118
+ */
119
+ async function nextAuthSignIn(_provider, options = {}) {
120
+ signInRedirect({ signInUrl: options.signInUrl, redirectUrl: options.redirectTo ?? options.callbackUrl });
121
+ }
122
+ /** `signOut()` from `next-auth/react`: signs out, then goes to `callbackUrl` (default `/`). */
123
+ async function nextAuthSignOut(options = {}) {
124
+ await signOutThenGo('nextAuthSignOut', options.redirect === false ? false : (options.redirectTo ?? options.callbackUrl));
125
+ }
126
+ /** Project an Atlas user onto the OIDC profile shape Auth0 SDKs return. */
127
+ function auth0UserFrom(user, claims = null) {
128
+ if (!user)
129
+ return undefined;
130
+ const email = primaryEmail(user);
131
+ const out = { sub: user.id };
132
+ const name = displayName(user);
133
+ if (name)
134
+ out.name = name;
135
+ if (user.first_name)
136
+ out.given_name = user.first_name;
137
+ if (user.last_name)
138
+ out.family_name = user.last_name;
139
+ if (user.username)
140
+ out.nickname = user.username;
141
+ if (user.image_url)
142
+ out.picture = user.image_url;
143
+ if (email) {
144
+ out.email = email.address;
145
+ out.email_verified = email.verified;
146
+ }
147
+ if (claims?.org_id)
148
+ out.org_id = claims.org_id;
149
+ return out;
150
+ }
151
+ /** Thrown by `getAccessTokenSilently()` when nobody is signed in (Auth0's `login_required`). */
152
+ class LoginRequiredError extends Error {
153
+ error = 'login_required';
154
+ constructor() {
155
+ super('Login required');
156
+ this.name = 'LoginRequiredError';
157
+ }
158
+ }
159
+ exports.LoginRequiredError = LoginRequiredError;
160
+ /** `useAuth0()` from `@auth0/auth0-react`, on Atlas. */
161
+ function useAuth0Compat() {
162
+ const atlas = (0, AtlasProvider_1.useAtlas)();
163
+ return {
164
+ isLoading: atlas.status === 'loading',
165
+ isAuthenticated: atlas.status === 'signed_in',
166
+ user: atlas.status === 'signed_in' ? auth0UserFrom(atlas.user, atlas.claims) : undefined,
167
+ error: undefined,
168
+ loginWithRedirect: async (options = {}) => signInRedirect({ signInUrl: options.signInUrl, redirectUrl: options.appState?.returnTo }),
169
+ logout: async (options = {}) => {
170
+ await atlas.signOut();
171
+ if (options.openUrl !== false)
172
+ (0, components_shared_1.navigateTo)(options.logoutParams?.returnTo ?? '/');
173
+ },
174
+ getAccessTokenSilently: async (options) => {
175
+ const token = await atlas.getToken(options);
176
+ if (!token)
177
+ throw new LoginRequiredError();
178
+ return token;
179
+ },
180
+ getIdTokenClaims: async () => atlas.claims ?? undefined,
181
+ };
182
+ }
183
+ /** `useUser()` from `@auth0/nextjs-auth0/client` (v3) or `@auth0/nextjs-auth0` (v4). */
184
+ function useAuth0UserCompat() {
185
+ const atlas = (0, AtlasProvider_1.useAtlas)();
186
+ const refresh = async () => {
187
+ await atlas.reload();
188
+ };
189
+ return {
190
+ user: atlas.status === 'signed_in' ? auth0UserFrom(atlas.user, atlas.claims) : undefined,
191
+ error: undefined,
192
+ isLoading: atlas.status === 'loading',
193
+ checkSession: refresh,
194
+ invalidate: refresh,
195
+ };
196
+ }
197
+ /**
198
+ * `withAuthenticationRequired(Component, options)` from `@auth0/auth0-react` (and
199
+ * nextjs-auth0's client `withPageAuthRequired`): renders the component only for a
200
+ * signed-in user and sends everyone else to your sign-in page.
201
+ */
202
+ function withAuthenticationRequiredCompat(Component, options = {}) {
203
+ function Guarded(props) {
204
+ const { status } = (0, AtlasProvider_1.useAtlas)();
205
+ (0, react_1.useEffect)(() => {
206
+ if (status !== 'signed_out')
207
+ return;
208
+ const returnTo = typeof options.returnTo === 'function'
209
+ ? options.returnTo()
210
+ : (options.returnTo ?? (typeof window === 'undefined' ? undefined : window.location.href));
211
+ signInRedirect({ signInUrl: options.signInUrl, redirectUrl: returnTo });
212
+ }, [status]);
213
+ if (status === 'signed_in')
214
+ return (0, react_1.createElement)(Component, props);
215
+ return (0, react_1.createElement)(react_1.Fragment, null, options.onRedirecting?.() ?? null);
216
+ }
217
+ Guarded.displayName = `withAuthenticationRequired(${Component.displayName ?? Component.name ?? 'Component'})`;
218
+ return Guarded;
219
+ }
220
+ function supabaseUserFrom(user) {
221
+ if (!user)
222
+ return null;
223
+ const email = primaryEmail(user);
224
+ const phone = (user.phone_numbers ?? []).find((p) => p.primary) ?? user.phone_numbers?.[0];
225
+ const name = displayName(user);
226
+ return {
227
+ id: user.id,
228
+ aud: 'authenticated',
229
+ role: 'authenticated',
230
+ ...(email ? { email: email.address } : {}),
231
+ ...(email?.verified ? { email_confirmed_at: new Date(0).toISOString() } : {}),
232
+ ...(phone ? { phone: phone.phone_number } : {}),
233
+ user_metadata: {
234
+ ...user.unsafe_metadata,
235
+ ...(name ? { full_name: name, name } : {}),
236
+ ...(user.image_url ? { avatar_url: user.image_url } : {}),
237
+ },
238
+ app_metadata: { ...user.public_metadata },
239
+ };
240
+ }
241
+ /** `supabase.auth.getUser()` in the browser. */
242
+ async function getSupabaseUserCompat() {
243
+ const atlas = (0, active_atlas_1.requireActive)('getSupabaseUserCompat');
244
+ return { data: { user: atlas.status === 'signed_in' ? supabaseUserFrom(atlas.user) : null }, error: null };
245
+ }
246
+ /** `supabase.auth.getSession()` in the browser; `access_token` is the Atlas session JWT. */
247
+ async function getSupabaseSessionCompat() {
248
+ const atlas = (0, active_atlas_1.requireActive)('getSupabaseSessionCompat');
249
+ const user = atlas.status === 'signed_in' ? supabaseUserFrom(atlas.user) : null;
250
+ const token = user ? await atlas.getToken() : null;
251
+ if (!user || !token)
252
+ return { data: { session: null }, error: null };
253
+ return { data: { session: { access_token: token, expires_at: atlas.claims?.exp, user } }, error: null };
254
+ }
255
+ /** `useUser()` from `@supabase/auth-helpers-react`: the user, or null. */
256
+ function useSupabaseUserCompat() {
257
+ const atlas = (0, AtlasProvider_1.useAtlas)();
258
+ return atlas.status === 'signed_in' ? supabaseUserFrom(atlas.user) : null;
259
+ }
260
+ /** `useSession()` from `@supabase/auth-helpers-react`: `{ user, expires_at }`, or null. */
261
+ function useSupabaseSessionCompat() {
262
+ const atlas = (0, AtlasProvider_1.useAtlas)();
263
+ const user = atlas.status === 'signed_in' ? supabaseUserFrom(atlas.user) : null;
264
+ return user ? { user, expires_at: atlas.claims?.exp } : null;
265
+ }
266
+ /** `supabase.auth.signOut()` in the browser. */
267
+ async function supabaseSignOutCompat() {
268
+ await (0, active_atlas_1.requireActive)('supabaseSignOutCompat').signOut();
269
+ return { error: null };
270
+ }
271
+ /** `supabase.auth.signInWithOAuth({ provider, options: { redirectTo } })`: opens your sign-in page. */
272
+ async function supabaseSignInWithOAuthCompat(credentials = {}) {
273
+ const url = signInUrlWith({ signInUrl: credentials.options?.signInUrl, redirectUrl: credentials.options?.redirectTo });
274
+ (0, components_shared_1.navigateTo)(url);
275
+ return { data: { provider: credentials.provider, url }, error: null };
276
+ }
277
+ /**
278
+ * `supabase.auth.onAuthStateChange(callback)`: the callback fires with
279
+ * `SIGNED_IN` / `SIGNED_OUT` / `USER_UPDATED` as the Atlas session changes.
280
+ */
281
+ function onSupabaseAuthStateChangeCompat(callback) {
282
+ let last = { status: null, user: null };
283
+ const listener = (atlas) => {
284
+ const status = atlas?.status ?? null;
285
+ if (status === 'loading' || status === null)
286
+ return;
287
+ const current = status === 'signed_in' ? (atlas.user ?? null) : null;
288
+ let event = null;
289
+ if (last.status === null)
290
+ event = 'INITIAL_SESSION';
291
+ else if (status === 'signed_out')
292
+ event = last.status === 'signed_in' ? 'SIGNED_OUT' : null;
293
+ else if (last.status !== 'signed_in' || last.user?.id !== current?.id)
294
+ event = 'SIGNED_IN';
295
+ // Same user, new profile object: the provider reloaded the user.
296
+ else if (current !== last.user)
297
+ event = 'USER_UPDATED';
298
+ last = { status, user: current };
299
+ const mapped = supabaseUserFrom(current);
300
+ if (event)
301
+ callback(event, mapped ? { user: mapped } : null);
302
+ };
303
+ const unsubscribe = (0, active_atlas_1.onActiveAtlasChange)(listener);
304
+ const current = (0, active_atlas_1.getActiveAtlas)();
305
+ if (current)
306
+ listener(current);
307
+ return { data: { subscription: { unsubscribe } } };
308
+ }
309
+ function betterAuthSessionFrom(state) {
310
+ if (state.status !== 'signed_in' || !state.user)
311
+ return null;
312
+ const email = primaryEmail(state.user);
313
+ return {
314
+ user: {
315
+ id: state.user.id,
316
+ email: email?.address ?? null,
317
+ emailVerified: email?.verified ?? false,
318
+ name: displayName(state.user),
319
+ image: state.user.image_url,
320
+ },
321
+ session: {
322
+ id: state.claims?.sid ?? '',
323
+ userId: state.user.id,
324
+ expiresAt: new Date(expiresIso(state.claims)),
325
+ activeOrganizationId: state.claims?.org_id ?? null,
326
+ },
327
+ };
328
+ }
329
+ /**
330
+ * `createAuthClient()` from `better-auth/react`, on Atlas. The returned object has
331
+ * the same `useSession`, `getSession`, `signIn.social`, `signIn.email`, `signUp.email`
332
+ * and `signOut` members. The sign-in/up members open your Atlas pages (Atlas
333
+ * collects credentials on its own forms, never in app code).
334
+ */
335
+ function createBetterAuthCompatClient(options = {}) {
336
+ const goSignIn = (callbackURL) => (0, components_shared_1.navigateTo)((0, components_shared_1.withRedirect)(options.signInUrl ?? '/sign-in', callbackURL));
337
+ const goSignUp = (callbackURL) => (0, components_shared_1.navigateTo)((0, components_shared_1.withRedirect)(options.signUpUrl ?? '/sign-up', callbackURL));
338
+ const ok = (data) => ({ data, error: null });
339
+ return {
340
+ /** Type-only, like Better Auth's `authClient.$Infer.Session`. */
341
+ $Infer: {},
342
+ useSession() {
343
+ const atlas = (0, AtlasProvider_1.useAtlas)();
344
+ return {
345
+ data: betterAuthSessionFrom(atlas),
346
+ isPending: atlas.status === 'loading',
347
+ error: null,
348
+ refetch: async () => {
349
+ await atlas.reload();
350
+ },
351
+ };
352
+ },
353
+ async getSession() {
354
+ return ok(betterAuthSessionFrom((0, active_atlas_1.requireActive)('authClient.getSession')));
355
+ },
356
+ signIn: {
357
+ async social(input = {}) {
358
+ goSignIn(input.callbackURL);
359
+ return ok({ redirect: true });
360
+ },
361
+ async email(input = {}) {
362
+ goSignIn(input.callbackURL);
363
+ return ok({ redirect: true });
364
+ },
365
+ async magicLink(input = {}) {
366
+ goSignIn(input.callbackURL);
367
+ return ok({ redirect: true });
368
+ },
369
+ async passkey() {
370
+ goSignIn();
371
+ return ok({ redirect: true });
372
+ },
373
+ },
374
+ signUp: {
375
+ async email(input = {}) {
376
+ goSignUp(input.callbackURL);
377
+ return ok({ redirect: true });
378
+ },
379
+ },
380
+ async signOut(input = {}) {
381
+ await (0, active_atlas_1.requireActive)('authClient.signOut').signOut();
382
+ input.fetchOptions?.onSuccess?.();
383
+ return ok({ success: true });
384
+ },
385
+ };
386
+ }
387
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.js","sourceRoot":"","sources":["../src/compat.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,8 @@ export { SignedIn, SignedOut, AtlasLoading, AtlasLoaded, Protect, MultisessionAp
19
19
  export type { FlowProps, GoogleButtonMode, ProviderUnavailableReason } from './flow';
20
20
  export { SignIn, SocialSignInButton, useSignIn } from './sign-in';
21
21
  export { SignUp, useSignUp } from './sign-up';
22
+ export type { PolicyGateProps, PolicyModalProps, UsePoliciesOptions, UsePoliciesResult } from './policies';
23
+ export { PolicyAcceptStep, PolicyClickwrap, PolicyConsent, PolicyGate, PolicyModal, PolicyScrollQueue, PolicyViewer, usePolicies, usePolicyState, usePolicyText, } from './policies';
22
24
  export type { MenuActionProps, MenuLinkProps } from './user-button';
23
25
  export { UserButton, UserAvatar } from './user-button';
24
26
  export type { AuthButtonProps } from './auth-buttons';
@@ -26,7 +28,7 @@ export { SignInButton, SignUpButton, SignOutButton, RedirectToSignIn, RedirectTo
26
28
  export { OrganizationSwitcher, useOrganizationList, CreateOrganization, OrganizationList, OrganizationProfile, OrganizationAuditLog, useOrganizationAuditLog, useOrganizationProfile, } from './organization';
27
29
  export type { OrganizationAuditLogEntry } from './organization';
28
30
  export type { OrganizationProfileProps } from './organization';
29
- export type { ProfilePageProps, ProfileLinkProps } from './account';
31
+ export type { ProfilePageProps, ProfileLinkProps, ManagePasskeysProps } from './account';
30
32
  export { ActiveSessions, ProfileCard, ManageMfa, ManagePasskeys, ManagePhoneNumbers, UserProfile, } from './account';
31
33
  export { useWaitlist, Waitlist } from './waitlist';
32
34
  export { ImpersonationBanner, useImpersonation } from './impersonation';
@@ -34,5 +36,7 @@ export type { ImpersonationBannerProps, UseImpersonationReturn } from './imperso
34
36
  export { useReverification, ReverificationPrompt, isReverificationCancelled, type Reverification } from './reverification';
35
37
  export type { ApiKeysProps, ApiKeysStatus, ApiKeyClaimsFieldsContext, UseApiKeysResult, CreateUserApiKeyInput, CreatedUserApiKey, UserApiKey, } from './api-keys';
36
38
  export { ApiKeys, useApiKeys } from './api-keys';
39
+ export type { DeviceAuthorizationProps, DeviceAuthorizationStatus, UseDeviceAuthorizationResult, } from './device-authorization';
40
+ export { DeviceAuthorization, useDeviceAuthorization } from './device-authorization';
37
41
  export type { CheckoutParams } from './billing';
38
42
  export { useBilling, useCheckout, useSubscription, useInvoices, usePaymentMethods, PricingTable, Invoices, EmbeddedCheckout, } from './billing';
@@ -17,7 +17,8 @@
17
17
  * @atlasauth/js. See `flow.tsx` for that shell.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.EmbeddedCheckout = exports.Invoices = exports.PricingTable = exports.usePaymentMethods = exports.useInvoices = exports.useSubscription = exports.useCheckout = exports.useBilling = exports.useApiKeys = exports.ApiKeys = exports.isReverificationCancelled = exports.ReverificationPrompt = exports.useReverification = exports.useImpersonation = exports.ImpersonationBanner = exports.Waitlist = exports.useWaitlist = exports.UserProfile = exports.ManagePhoneNumbers = exports.ManagePasskeys = exports.ManageMfa = exports.ProfileCard = exports.ActiveSessions = exports.useOrganizationProfile = exports.useOrganizationAuditLog = exports.OrganizationAuditLog = exports.OrganizationProfile = exports.OrganizationList = exports.CreateOrganization = exports.useOrganizationList = exports.OrganizationSwitcher = exports.RedirectToSignUp = exports.RedirectToSignIn = exports.SignOutButton = exports.SignUpButton = exports.SignInButton = exports.UserAvatar = exports.UserButton = exports.useSignUp = exports.SignUp = exports.useSignIn = exports.SocialSignInButton = exports.SignIn = exports.MultisessionAppSupport = exports.Protect = exports.AtlasLoaded = exports.AtlasLoading = exports.SignedOut = exports.SignedIn = void 0;
20
+ exports.ApiKeys = exports.isReverificationCancelled = exports.ReverificationPrompt = exports.useReverification = exports.useImpersonation = exports.ImpersonationBanner = exports.Waitlist = exports.useWaitlist = exports.UserProfile = exports.ManagePhoneNumbers = exports.ManagePasskeys = exports.ManageMfa = exports.ProfileCard = exports.ActiveSessions = exports.useOrganizationProfile = exports.useOrganizationAuditLog = exports.OrganizationAuditLog = exports.OrganizationProfile = exports.OrganizationList = exports.CreateOrganization = exports.useOrganizationList = exports.OrganizationSwitcher = exports.RedirectToSignUp = exports.RedirectToSignIn = exports.SignOutButton = exports.SignUpButton = exports.SignInButton = exports.UserAvatar = exports.UserButton = exports.usePolicyText = exports.usePolicyState = exports.usePolicies = exports.PolicyViewer = exports.PolicyScrollQueue = exports.PolicyModal = exports.PolicyGate = exports.PolicyConsent = exports.PolicyClickwrap = exports.PolicyAcceptStep = exports.useSignUp = exports.SignUp = exports.useSignIn = exports.SocialSignInButton = exports.SignIn = exports.MultisessionAppSupport = exports.Protect = exports.AtlasLoaded = exports.AtlasLoading = exports.SignedOut = exports.SignedIn = void 0;
21
+ exports.EmbeddedCheckout = exports.Invoices = exports.PricingTable = exports.usePaymentMethods = exports.useInvoices = exports.useSubscription = exports.useCheckout = exports.useBilling = exports.useDeviceAuthorization = exports.DeviceAuthorization = exports.useApiKeys = void 0;
21
22
  // Control / conditional-rendering components.
22
23
  var control_components_1 = require("./control-components");
23
24
  Object.defineProperty(exports, "SignedIn", { enumerable: true, get: function () { return control_components_1.SignedIn; } });
@@ -33,6 +34,17 @@ Object.defineProperty(exports, "useSignIn", { enumerable: true, get: function ()
33
34
  var sign_up_1 = require("./sign-up");
34
35
  Object.defineProperty(exports, "SignUp", { enumerable: true, get: function () { return sign_up_1.SignUp; } });
35
36
  Object.defineProperty(exports, "useSignUp", { enumerable: true, get: function () { return sign_up_1.useSignUp; } });
37
+ var policies_1 = require("./policies");
38
+ Object.defineProperty(exports, "PolicyAcceptStep", { enumerable: true, get: function () { return policies_1.PolicyAcceptStep; } });
39
+ Object.defineProperty(exports, "PolicyClickwrap", { enumerable: true, get: function () { return policies_1.PolicyClickwrap; } });
40
+ Object.defineProperty(exports, "PolicyConsent", { enumerable: true, get: function () { return policies_1.PolicyConsent; } });
41
+ Object.defineProperty(exports, "PolicyGate", { enumerable: true, get: function () { return policies_1.PolicyGate; } });
42
+ Object.defineProperty(exports, "PolicyModal", { enumerable: true, get: function () { return policies_1.PolicyModal; } });
43
+ Object.defineProperty(exports, "PolicyScrollQueue", { enumerable: true, get: function () { return policies_1.PolicyScrollQueue; } });
44
+ Object.defineProperty(exports, "PolicyViewer", { enumerable: true, get: function () { return policies_1.PolicyViewer; } });
45
+ Object.defineProperty(exports, "usePolicies", { enumerable: true, get: function () { return policies_1.usePolicies; } });
46
+ Object.defineProperty(exports, "usePolicyState", { enumerable: true, get: function () { return policies_1.usePolicyState; } });
47
+ Object.defineProperty(exports, "usePolicyText", { enumerable: true, get: function () { return policies_1.usePolicyText; } });
36
48
  var user_button_1 = require("./user-button");
37
49
  Object.defineProperty(exports, "UserButton", { enumerable: true, get: function () { return user_button_1.UserButton; } });
38
50
  Object.defineProperty(exports, "UserAvatar", { enumerable: true, get: function () { return user_button_1.UserAvatar; } });
@@ -75,6 +87,9 @@ Object.defineProperty(exports, "isReverificationCancelled", { enumerable: true,
75
87
  var api_keys_1 = require("./api-keys");
76
88
  Object.defineProperty(exports, "ApiKeys", { enumerable: true, get: function () { return api_keys_1.ApiKeys; } });
77
89
  Object.defineProperty(exports, "useApiKeys", { enumerable: true, get: function () { return api_keys_1.useApiKeys; } });
90
+ var device_authorization_1 = require("./device-authorization");
91
+ Object.defineProperty(exports, "DeviceAuthorization", { enumerable: true, get: function () { return device_authorization_1.DeviceAuthorization; } });
92
+ Object.defineProperty(exports, "useDeviceAuthorization", { enumerable: true, get: function () { return device_authorization_1.useDeviceAuthorization; } });
78
93
  var billing_1 = require("./billing");
79
94
  Object.defineProperty(exports, "useBilling", { enumerable: true, get: function () { return billing_1.useBilling; } });
80
95
  Object.defineProperty(exports, "useCheckout", { enumerable: true, get: function () { return billing_1.useCheckout; } });
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAEH,8CAA8C;AAC9C,2DAO8B;AAN5B,8GAAA,QAAQ,OAAA;AACR,+GAAA,SAAS,OAAA;AACT,kHAAA,YAAY,OAAA;AACZ,iHAAA,WAAW,OAAA;AACX,6GAAA,OAAO,OAAA;AACP,4HAAA,sBAAsB,OAAA;AAKxB,qCAAkE;AAAzD,iGAAA,MAAM,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,oGAAA,SAAS,OAAA;AAC9C,qCAA8C;AAArC,iGAAA,MAAM,OAAA;AAAE,oGAAA,SAAS,OAAA;AAI1B,6CAAuD;AAA9C,yGAAA,UAAU,OAAA;AAAE,yGAAA,UAAU,OAAA;AAI/B,+CAMwB;AALtB,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,gHAAA,gBAAgB,OAAA;AAGlB,iBAAiB;AACjB,+CASwB;AARtB,oHAAA,oBAAoB,OAAA;AACpB,mHAAA,mBAAmB,OAAA;AACnB,kHAAA,kBAAkB,OAAA;AAClB,gHAAA,gBAAgB,OAAA;AAChB,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AACpB,uHAAA,uBAAuB,OAAA;AACvB,sHAAA,sBAAsB,OAAA;AAOxB,qCAOmB;AANjB,yGAAA,cAAc,OAAA;AACd,sGAAA,WAAW,OAAA;AACX,oGAAA,SAAS,OAAA;AACT,yGAAA,cAAc,OAAA;AACd,6GAAA,kBAAkB,OAAA;AAClB,sGAAA,WAAW,OAAA;AAGb,YAAY;AACZ,uCAAmD;AAA1C,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAE9B,kEAAkE;AAClE,iDAAwE;AAA/D,oHAAA,mBAAmB,OAAA;AAAE,iHAAA,gBAAgB,OAAA;AAG9C,0BAA0B;AAC1B,mDAA2H;AAAlH,mHAAA,iBAAiB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AAAE,2HAAA,yBAAyB,OAAA;AAY3E,uCAAiD;AAAxC,mGAAA,OAAO,OAAA;AAAE,sGAAA,UAAU,OAAA;AAI5B,qCASmB;AARjB,qGAAA,UAAU,OAAA;AACV,sGAAA,WAAW,OAAA;AACX,0GAAA,eAAe,OAAA;AACf,sGAAA,WAAW,OAAA;AACX,4GAAA,iBAAiB,OAAA;AACjB,uGAAA,YAAY,OAAA;AACZ,mGAAA,QAAQ,OAAA;AACR,2GAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;AAEH,8CAA8C;AAC9C,2DAO8B;AAN5B,8GAAA,QAAQ,OAAA;AACR,+GAAA,SAAS,OAAA;AACT,kHAAA,YAAY,OAAA;AACZ,iHAAA,WAAW,OAAA;AACX,6GAAA,OAAO,OAAA;AACP,4HAAA,sBAAsB,OAAA;AAKxB,qCAAkE;AAAzD,iGAAA,MAAM,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,oGAAA,SAAS,OAAA;AAC9C,qCAA8C;AAArC,iGAAA,MAAM,OAAA;AAAE,oGAAA,SAAS,OAAA;AAE1B,uCAWoB;AAVlB,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AACf,yGAAA,aAAa,OAAA;AACb,sGAAA,UAAU,OAAA;AACV,uGAAA,WAAW,OAAA;AACX,6GAAA,iBAAiB,OAAA;AACjB,wGAAA,YAAY,OAAA;AACZ,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,yGAAA,aAAa,OAAA;AAKf,6CAAuD;AAA9C,yGAAA,UAAU,OAAA;AAAE,yGAAA,UAAU,OAAA;AAI/B,+CAMwB;AALtB,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,gHAAA,gBAAgB,OAAA;AAGlB,iBAAiB;AACjB,+CASwB;AARtB,oHAAA,oBAAoB,OAAA;AACpB,mHAAA,mBAAmB,OAAA;AACnB,kHAAA,kBAAkB,OAAA;AAClB,gHAAA,gBAAgB,OAAA;AAChB,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AACpB,uHAAA,uBAAuB,OAAA;AACvB,sHAAA,sBAAsB,OAAA;AAOxB,qCAOmB;AANjB,yGAAA,cAAc,OAAA;AACd,sGAAA,WAAW,OAAA;AACX,oGAAA,SAAS,OAAA;AACT,yGAAA,cAAc,OAAA;AACd,6GAAA,kBAAkB,OAAA;AAClB,sGAAA,WAAW,OAAA;AAGb,YAAY;AACZ,uCAAmD;AAA1C,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAE9B,kEAAkE;AAClE,iDAAwE;AAA/D,oHAAA,mBAAmB,OAAA;AAAE,iHAAA,gBAAgB,OAAA;AAG9C,0BAA0B;AAC1B,mDAA2H;AAAlH,mHAAA,iBAAiB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AAAE,2HAAA,yBAAyB,OAAA;AAY3E,uCAAiD;AAAxC,mGAAA,OAAO,OAAA;AAAE,sGAAA,UAAU,OAAA;AAO5B,+DAAqF;AAA5E,2HAAA,mBAAmB,OAAA;AAAE,8HAAA,sBAAsB,OAAA;AAIpD,qCASmB;AARjB,qGAAA,UAAU,OAAA;AACV,sGAAA,WAAW,OAAA;AACX,0GAAA,eAAe,OAAA;AACf,sGAAA,WAAW,OAAA;AACX,4GAAA,iBAAiB,OAAA;AACjB,uGAAA,YAAY,OAAA;AACZ,mGAAA,QAAQ,OAAA;AACR,2GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,42 @@
1
+ import { type DeviceAuthorization as DeviceAuthorizationRecord } from '@atlasauth/js';
2
+ import { useReverification } from './reverification';
3
+ /**
4
+ * Device sign-in (RFC 8628) on YOUR page: the signed-in user enters the code
5
+ * their TV / console / CLI shows, sees which app is asking for what, and allows
6
+ * or denies it — instead of being sent to the hosted `/oauth2/device` page.
7
+ *
8
+ * `useDeviceAuthorization()` is the headless half (look up, approve, deny), with
9
+ * the step-up wired in: when the application requires a recent re-authentication
10
+ * to approve a device, a stale session parks the approval and flips
11
+ * `reverification.needsReverification`; `completeReverification(...)` finishes it.
12
+ * `<DeviceAuthorization/>` is the drop-in UI built on it. It reads a
13
+ * `?user_code=` from the page URL, so it works as the verification URI too.
14
+ */
15
+ export type DeviceAuthorizationStatus = 'idle' | 'busy' | 'review' | 'approved' | 'denied' | 'error';
16
+ export interface UseDeviceAuthorizationResult {
17
+ status: DeviceAuthorizationStatus;
18
+ /** The device sign-in being reviewed, after a successful lookup. */
19
+ authorization: DeviceAuthorizationRecord | null;
20
+ error: string | null;
21
+ lookup(userCode: string): Promise<DeviceAuthorizationRecord | null>;
22
+ approve(): Promise<void>;
23
+ deny(): Promise<void>;
24
+ /** Back to entering a code. */
25
+ reset(): void;
26
+ reverification: ReturnType<typeof useReverification>;
27
+ }
28
+ export declare function useDeviceAuthorization(): UseDeviceAuthorizationResult;
29
+ export interface DeviceAuthorizationProps {
30
+ /** Start with this code (otherwise `?user_code=` on the page URL, if present). */
31
+ userCode?: string;
32
+ /** Called once the device sign-in is approved. */
33
+ onApproved?: (authorization: DeviceAuthorizationRecord) => void;
34
+ /** Called once it is denied. */
35
+ onDenied?: (authorization: DeviceAuthorizationRecord) => void;
36
+ }
37
+ /**
38
+ * Drop-in device approval: a code field, then the app's name, the access it
39
+ * asks for and the code to compare against the device, with Allow / Deny — and
40
+ * the "confirm it's you" prompt when the application requires it.
41
+ */
42
+ export declare function DeviceAuthorization(props: DeviceAuthorizationProps): import("react").JSX.Element;