@atlasauth/react 0.19.0 → 0.21.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 +14 -0
- package/dist/AtlasProvider.js +17 -1
- package/dist/AtlasProvider.js.map +1 -1
- package/dist/account-factors.d.ts +14 -0
- package/dist/account-factors.js +195 -0
- package/dist/account-factors.js.map +1 -0
- package/dist/account.d.ts +12 -1
- package/dist/account.js +92 -3
- package/dist/account.js.map +1 -1
- package/dist/app-launcher.d.ts +11 -0
- package/dist/app-launcher.js +28 -0
- package/dist/app-launcher.js.map +1 -0
- package/dist/billing.d.ts +25 -4
- package/dist/billing.js +40 -22
- package/dist/billing.js.map +1 -1
- package/dist/compat-amplify.d.ts +116 -0
- package/dist/compat-amplify.js +212 -0
- package/dist/compat-amplify.js.map +1 -0
- package/dist/compat-baas.d.ts +155 -0
- package/dist/compat-baas.js +401 -0
- package/dist/compat-baas.js.map +1 -0
- package/dist/compat-descope.d.ts +85 -0
- package/dist/compat-descope.js +191 -0
- package/dist/compat-descope.js.map +1 -0
- package/dist/compat-firebase.d.ts +67 -0
- package/dist/compat-firebase.js +166 -0
- package/dist/compat-firebase.js.map +1 -0
- package/dist/compat-kinde.d.ts +166 -0
- package/dist/compat-kinde.js +184 -0
- package/dist/compat-kinde.js.map +1 -0
- package/dist/compat-msal.d.ts +84 -0
- package/dist/compat-msal.js +158 -0
- package/dist/compat-msal.js.map +1 -0
- package/dist/compat-okta.d.ts +102 -0
- package/dist/compat-okta.js +240 -0
- package/dist/compat-okta.js.map +1 -0
- package/dist/compat.d.ts +11 -1
- package/dist/compat.js +27 -1
- package/dist/compat.js.map +1 -1
- package/dist/components.d.ts +12 -1
- package/dist/components.js +26 -2
- package/dist/components.js.map +1 -1
- package/dist/connected-accounts.d.ts +36 -0
- package/dist/connected-accounts.js +107 -0
- package/dist/connected-accounts.js.map +1 -0
- package/dist/delegated-ui.d.ts +49 -0
- package/dist/delegated-ui.js +42 -0
- package/dist/delegated-ui.js.map +1 -0
- package/dist/flow.d.ts +37 -1
- package/dist/flow.js +111 -2
- package/dist/flow.js.map +1 -1
- package/dist/i18n.js +14 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/marketing.d.ts +31 -0
- package/dist/marketing.js +64 -0
- package/dist/marketing.js.map +1 -0
- package/dist/mfa-steps.d.ts +9 -0
- package/dist/mfa-steps.js +51 -0
- package/dist/mfa-steps.js.map +1 -1
- package/dist/organization-admin.d.ts +38 -0
- package/dist/organization-admin.js +192 -0
- package/dist/organization-admin.js.map +1 -0
- package/dist/organization.d.ts +8 -1
- package/dist/organization.js +15 -2
- package/dist/organization.js.map +1 -1
- package/dist/profile-completion.d.ts +11 -0
- package/dist/profile-completion.js +49 -0
- package/dist/profile-completion.js.map +1 -0
- package/dist/profile-traits.d.ts +37 -0
- package/dist/profile-traits.js +143 -0
- package/dist/profile-traits.js.map +1 -0
- package/dist/sign-up.js +48 -7
- package/dist/sign-up.js.map +1 -1
- package/dist/styles.js +6 -4
- package/dist/styles.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.descopeUserFrom = descopeUserFrom;
|
|
5
|
+
exports.descopeClaimsFrom = descopeClaimsFrom;
|
|
6
|
+
exports.useDescopeSessionCompat = useDescopeSessionCompat;
|
|
7
|
+
exports.useDescopeUserCompat = useDescopeUserCompat;
|
|
8
|
+
exports.useDescopeCompat = useDescopeCompat;
|
|
9
|
+
exports.getDescopeSessionTokenCompat = getDescopeSessionTokenCompat;
|
|
10
|
+
/**
|
|
11
|
+
* Drop-in helpers for apps moving to Atlas from Descope (`@descope/react-sdk`,
|
|
12
|
+
* and the client half of `@descope/nextjs-sdk`).
|
|
13
|
+
*
|
|
14
|
+
* `atlas migrate code --from descope` rewrites `useSession()`, `useUser()`,
|
|
15
|
+
* `useDescope()` and awaited `getSessionToken()` calls onto these, so the
|
|
16
|
+
* migrated components keep reading the Descope shapes they were written against
|
|
17
|
+
* (`{ isAuthenticated, isSessionLoading, sessionToken }`, `user.userId`,
|
|
18
|
+
* `user.userTenants`, …). Each one is a projection over the `<AtlasProvider>`
|
|
19
|
+
* state; move call sites to `useAuth()` / `useUser()` at your own pace.
|
|
20
|
+
*
|
|
21
|
+
* Where Atlas and Descope differ:
|
|
22
|
+
* - Descope's project-wide roles and permissions are Atlas app roles: they
|
|
23
|
+
* come from the session's `app_roles` / `app_permissions` claims. Tenant
|
|
24
|
+
* roles are organization roles: `userTenants` lists every membership (one
|
|
25
|
+
* role each); the claims' `tenants` holds the active organization.
|
|
26
|
+
* - `customAttributes` is the user's `publicMetadata`.
|
|
27
|
+
* - `useDescopeCompat()` only has `logout()` and `refresh()`; the codemod
|
|
28
|
+
* leaves every other `useDescope()` member for you to port.
|
|
29
|
+
*/
|
|
30
|
+
const react_1 = require("react");
|
|
31
|
+
const AtlasProvider_1 = require("./AtlasProvider");
|
|
32
|
+
const active_atlas_1 = require("./active-atlas");
|
|
33
|
+
function stringList(value) {
|
|
34
|
+
return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Project an Atlas user onto Descope's user shape: organization memberships
|
|
38
|
+
* become `userTenants`, the session's app roles `roleNames`.
|
|
39
|
+
*/
|
|
40
|
+
function descopeUserFrom(user, memberships = [], claims = null) {
|
|
41
|
+
if (!user)
|
|
42
|
+
return undefined;
|
|
43
|
+
const emails = user.email_addresses ?? [];
|
|
44
|
+
const email = emails.find((e) => e.primary) ?? emails.find((e) => e.verified) ?? emails[0];
|
|
45
|
+
const phones = user.phone_numbers ?? [];
|
|
46
|
+
const phone = phones.find((p) => p.primary) ?? phones[0];
|
|
47
|
+
const name = [user.first_name, user.last_name].filter(Boolean).join(' ').trim();
|
|
48
|
+
const out = {
|
|
49
|
+
userId: user.id,
|
|
50
|
+
loginIds: [email?.email_address, phone?.phone_number, user.username].filter((v) => Boolean(v)),
|
|
51
|
+
verifiedEmail: email?.verified ?? false,
|
|
52
|
+
verifiedPhone: phone?.verified ?? false,
|
|
53
|
+
roleNames: stringList(claims?.app_roles),
|
|
54
|
+
userTenants: memberships.map((m) => ({
|
|
55
|
+
tenantId: m.organization.id,
|
|
56
|
+
tenantName: m.organization.name,
|
|
57
|
+
roleNames: m.role ? [m.role] : [],
|
|
58
|
+
})),
|
|
59
|
+
customAttributes: { ...user.public_metadata },
|
|
60
|
+
};
|
|
61
|
+
if (email)
|
|
62
|
+
out.email = email.email_address;
|
|
63
|
+
if (phone)
|
|
64
|
+
out.phone = phone.phone_number;
|
|
65
|
+
if (name)
|
|
66
|
+
out.name = name;
|
|
67
|
+
if (user.first_name)
|
|
68
|
+
out.givenName = user.first_name;
|
|
69
|
+
if (user.last_name)
|
|
70
|
+
out.familyName = user.last_name;
|
|
71
|
+
if (user.image_url)
|
|
72
|
+
out.picture = user.image_url;
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Project Atlas session claims onto Descope's: top-level `roles` / `permissions`
|
|
77
|
+
* are the app roles and their permissions (`app_roles` / `app_permissions`),
|
|
78
|
+
* `tenants` holds the active organization's role and permissions.
|
|
79
|
+
*/
|
|
80
|
+
function descopeClaimsFrom(claims) {
|
|
81
|
+
if (!claims)
|
|
82
|
+
return undefined;
|
|
83
|
+
const tenants = {};
|
|
84
|
+
if (claims.org_id) {
|
|
85
|
+
tenants[claims.org_id] = {
|
|
86
|
+
roles: claims.org_role ? [claims.org_role] : [],
|
|
87
|
+
permissions: [...(claims.org_permissions ?? [])],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return { ...claims, roles: stringList(claims.app_roles), permissions: stringList(claims.app_permissions), tenants };
|
|
91
|
+
}
|
|
92
|
+
/** The `exp` (unix seconds) of a JWT, or undefined when it cannot be read. */
|
|
93
|
+
function tokenExp(token) {
|
|
94
|
+
try {
|
|
95
|
+
const payload = token.split('.')[1];
|
|
96
|
+
if (!payload)
|
|
97
|
+
return undefined;
|
|
98
|
+
const json = JSON.parse(atob(payload.replace(/-/g, '+').replace(/_/g, '/')));
|
|
99
|
+
return typeof json.exp === 'number' ? json.exp : undefined;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* `useSession()` from Descope, on Atlas: `{ isAuthenticated, isSessionLoading,
|
|
107
|
+
* isSessionFetched, sessionToken, claims }`. `sessionToken` is the Atlas session
|
|
108
|
+
* JWT; Atlas session tokens are short-lived, so it is fetched again shortly
|
|
109
|
+
* before each one expires. `isSessionLoading` stays true until the first token
|
|
110
|
+
* is in hand, so a component that waits for it never sends `Bearer undefined`.
|
|
111
|
+
*/
|
|
112
|
+
function useDescopeSessionCompat() {
|
|
113
|
+
const atlas = (0, AtlasProvider_1.useAtlas)();
|
|
114
|
+
const signedIn = atlas.status === 'signed_in';
|
|
115
|
+
const [token, setToken] = (0, react_1.useState)(undefined);
|
|
116
|
+
// The latest getToken, without re-running the effect when its identity changes.
|
|
117
|
+
const getToken = (0, react_1.useRef)(atlas.getToken);
|
|
118
|
+
getToken.current = atlas.getToken;
|
|
119
|
+
const sessionKey = signedIn ? `${atlas.user?.id ?? ''}:${atlas.claims?.sid ?? ''}` : '';
|
|
120
|
+
(0, react_1.useEffect)(() => {
|
|
121
|
+
if (!sessionKey) {
|
|
122
|
+
setToken(undefined);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
let cancelled = false;
|
|
126
|
+
let timer;
|
|
127
|
+
const load = async () => {
|
|
128
|
+
const next = await getToken.current().catch(() => null);
|
|
129
|
+
if (cancelled)
|
|
130
|
+
return;
|
|
131
|
+
setToken(next ?? undefined);
|
|
132
|
+
const exp = next ? tokenExp(next) : undefined;
|
|
133
|
+
const wait = exp ? Math.max(5_000, exp * 1000 - Date.now() - 10_000) : 30_000;
|
|
134
|
+
timer = setTimeout(() => void load(), wait);
|
|
135
|
+
};
|
|
136
|
+
void load();
|
|
137
|
+
return () => {
|
|
138
|
+
cancelled = true;
|
|
139
|
+
if (timer)
|
|
140
|
+
clearTimeout(timer);
|
|
141
|
+
};
|
|
142
|
+
}, [sessionKey]);
|
|
143
|
+
return {
|
|
144
|
+
isAuthenticated: signedIn,
|
|
145
|
+
isSessionLoading: atlas.status === 'loading' || (signedIn && token === undefined),
|
|
146
|
+
isSessionFetched: atlas.status !== 'loading',
|
|
147
|
+
sessionToken: signedIn ? token : undefined,
|
|
148
|
+
claims: signedIn ? descopeClaimsFrom(atlas.claims) : undefined,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** `useUser()` from Descope, on Atlas: `{ user, isUserLoading, isUserFetched }`. */
|
|
152
|
+
function useDescopeUserCompat() {
|
|
153
|
+
const atlas = (0, AtlasProvider_1.useAtlas)();
|
|
154
|
+
return {
|
|
155
|
+
user: atlas.status === 'signed_in' ? descopeUserFrom(atlas.user, atlas.memberships, atlas.claims) : undefined,
|
|
156
|
+
isUserLoading: atlas.status === 'loading',
|
|
157
|
+
isUserFetched: atlas.status !== 'loading',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* `useDescope()` from Descope, on Atlas — the session members only: `logout()`
|
|
162
|
+
* signs out (revoking the session) and `refresh()` reloads the session. Both
|
|
163
|
+
* resolve `{ ok: true }` like the Descope SDK's responses. Stable across renders,
|
|
164
|
+
* so it can sit in a `useCallback` dependency list as the Descope SDK did.
|
|
165
|
+
*/
|
|
166
|
+
function useDescopeCompat() {
|
|
167
|
+
const { signOut, reload } = (0, AtlasProvider_1.useAtlas)();
|
|
168
|
+
return (0, react_1.useMemo)(() => ({
|
|
169
|
+
async logout() {
|
|
170
|
+
await signOut();
|
|
171
|
+
return { ok: true };
|
|
172
|
+
},
|
|
173
|
+
async refresh() {
|
|
174
|
+
await reload();
|
|
175
|
+
return { ok: true };
|
|
176
|
+
},
|
|
177
|
+
}), [signOut, reload]);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* `getSessionToken()` from Descope, on Atlas. Descope's is synchronous; Atlas
|
|
181
|
+
* mints tokens asynchronously, so this resolves the token (`await` it). Like
|
|
182
|
+
* Descope it yields an empty string when nobody is signed in, or when no
|
|
183
|
+
* `<AtlasProvider>` is mounted.
|
|
184
|
+
*/
|
|
185
|
+
async function getDescopeSessionTokenCompat() {
|
|
186
|
+
const atlas = (0, active_atlas_1.getActiveAtlas)();
|
|
187
|
+
if (!atlas || atlas.status !== 'signed_in')
|
|
188
|
+
return '';
|
|
189
|
+
return (await atlas.getToken()) ?? '';
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=compat-descope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat-descope.js","sourceRoot":"","sources":["../src/compat-descope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { AtlasUser } from './types';
|
|
2
|
+
import { type ActiveAtlas } from './active-atlas';
|
|
3
|
+
/** The fields of a Firebase `User` apps read, plus the token methods. */
|
|
4
|
+
export interface FirebaseCompatUser {
|
|
5
|
+
uid: string;
|
|
6
|
+
/** The Firebase uid this user had before the move, when the import kept it. */
|
|
7
|
+
firebaseUid: string | null;
|
|
8
|
+
email: string | null;
|
|
9
|
+
emailVerified: boolean;
|
|
10
|
+
displayName: string | null;
|
|
11
|
+
photoURL: string | null;
|
|
12
|
+
phoneNumber: string | null;
|
|
13
|
+
isAnonymous: false;
|
|
14
|
+
providerId: 'atlas';
|
|
15
|
+
tenantId: null;
|
|
16
|
+
metadata: {
|
|
17
|
+
creationTime?: string;
|
|
18
|
+
lastSignInTime?: string;
|
|
19
|
+
};
|
|
20
|
+
providerData: Array<{
|
|
21
|
+
providerId: string;
|
|
22
|
+
uid: string;
|
|
23
|
+
email: string | null;
|
|
24
|
+
}>;
|
|
25
|
+
/** The Atlas session JWT (the ID-token analogue). */
|
|
26
|
+
getIdToken(forceRefresh?: boolean): Promise<string>;
|
|
27
|
+
getIdTokenResult(forceRefresh?: boolean): Promise<FirebaseCompatIdTokenResult>;
|
|
28
|
+
reload(): Promise<void>;
|
|
29
|
+
toJSON(): Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
export interface FirebaseCompatIdTokenResult {
|
|
32
|
+
token: string;
|
|
33
|
+
claims: Record<string, unknown>;
|
|
34
|
+
expirationTime: string;
|
|
35
|
+
issuedAtTime: string;
|
|
36
|
+
authTime: string;
|
|
37
|
+
signInProvider: 'atlas';
|
|
38
|
+
signInSecondFactor: string | null;
|
|
39
|
+
}
|
|
40
|
+
/** Project an Atlas user onto Firebase's `User` shape (null when signed out). */
|
|
41
|
+
export declare function firebaseUserFrom(user: AtlasUser | null, atlas?: ActiveAtlas | null): FirebaseCompatUser | null;
|
|
42
|
+
type Observer = ((user: FirebaseCompatUser | null) => void) | {
|
|
43
|
+
next?: (user: FirebaseCompatUser | null) => void;
|
|
44
|
+
};
|
|
45
|
+
/** `onAuthStateChanged(auth, next)`: fires on sign-in and sign-out. Returns the unsubscribe. */
|
|
46
|
+
export declare function onFirebaseAuthStateChangedCompat(_auth: unknown, next: Observer, _error?: unknown): () => void;
|
|
47
|
+
/** `onIdTokenChanged(auth, next)`: also fires when the session token is refreshed. */
|
|
48
|
+
export declare function onFirebaseIdTokenChangedCompat(_auth: unknown, next: Observer, _error?: unknown): () => void;
|
|
49
|
+
/** `signOut(auth)`. */
|
|
50
|
+
export declare function firebaseSignOutCompat(_auth?: unknown): Promise<void>;
|
|
51
|
+
/** `getIdToken(user, forceRefresh)`: the Atlas session JWT. */
|
|
52
|
+
export declare function getFirebaseIdTokenCompat(_user?: unknown, _forceRefresh?: boolean): Promise<string>;
|
|
53
|
+
/** `auth.currentUser`, read imperatively. */
|
|
54
|
+
export declare function getFirebaseCurrentUserCompat(): FirebaseCompatUser | null;
|
|
55
|
+
/**
|
|
56
|
+
* `signInWithRedirect(auth, provider)`: sends the browser to your Atlas
|
|
57
|
+
* sign-in page (social buttons there replace the provider object), returning
|
|
58
|
+
* to the current page afterwards.
|
|
59
|
+
*/
|
|
60
|
+
export declare function firebaseSignInWithRedirectCompat(_auth?: unknown, _provider?: unknown, options?: {
|
|
61
|
+
signInUrl?: string;
|
|
62
|
+
}): Promise<void>;
|
|
63
|
+
/** `useAuthState(auth)` from react-firebase-hooks: `[user, loading, error]`. */
|
|
64
|
+
export declare function useFirebaseAuthStateCompat(_auth?: unknown): [FirebaseCompatUser | null | undefined, boolean, undefined];
|
|
65
|
+
/** `useIdToken(auth)` from react-firebase-hooks: `[user, loading, error]`, re-rendering on token refresh. */
|
|
66
|
+
export declare function useFirebaseIdTokenCompat(_auth?: unknown): [FirebaseCompatUser | null | undefined, boolean, undefined];
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.firebaseUserFrom = firebaseUserFrom;
|
|
5
|
+
exports.onFirebaseAuthStateChangedCompat = onFirebaseAuthStateChangedCompat;
|
|
6
|
+
exports.onFirebaseIdTokenChangedCompat = onFirebaseIdTokenChangedCompat;
|
|
7
|
+
exports.firebaseSignOutCompat = firebaseSignOutCompat;
|
|
8
|
+
exports.getFirebaseIdTokenCompat = getFirebaseIdTokenCompat;
|
|
9
|
+
exports.getFirebaseCurrentUserCompat = getFirebaseCurrentUserCompat;
|
|
10
|
+
exports.firebaseSignInWithRedirectCompat = firebaseSignInWithRedirectCompat;
|
|
11
|
+
exports.useFirebaseAuthStateCompat = useFirebaseAuthStateCompat;
|
|
12
|
+
exports.useFirebaseIdTokenCompat = useFirebaseIdTokenCompat;
|
|
13
|
+
/**
|
|
14
|
+
* Firebase Auth (`firebase/auth`, `react-firebase-hooks/auth`) compatibility
|
|
15
|
+
* helpers. `atlas migrate code --from firebase` rewrites the session-reading
|
|
16
|
+
* half of the Firebase client SDK onto these, keeping its call shapes: the
|
|
17
|
+
* `auth` argument is accepted and ignored (the session is the `<AtlasProvider>`
|
|
18
|
+
* on the page), observers get a `User`-shaped object, and `getIdToken(user)`
|
|
19
|
+
* resolves the Atlas session JWT.
|
|
20
|
+
*
|
|
21
|
+
* `uid` is the ATLAS user id. A database keyed on Firebase uids should look
|
|
22
|
+
* users up by their external id (Atlas keeps the Firebase uid there) or be
|
|
23
|
+
* re-keyed; `firebaseUid` carries the old id when the import recorded it.
|
|
24
|
+
*/
|
|
25
|
+
const react_1 = require("react");
|
|
26
|
+
const AtlasProvider_1 = require("./AtlasProvider");
|
|
27
|
+
const components_shared_1 = require("./components-shared");
|
|
28
|
+
const compat_1 = require("./compat");
|
|
29
|
+
const active_atlas_1 = require("./active-atlas");
|
|
30
|
+
function legacyUid(user) {
|
|
31
|
+
const meta = user.public_metadata ?? {};
|
|
32
|
+
for (const key of ['firebase_uid', 'external_id', 'legacy_id']) {
|
|
33
|
+
const v = meta[key];
|
|
34
|
+
if (typeof v === 'string' && v)
|
|
35
|
+
return v;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
async function tokenOf(atlas) {
|
|
40
|
+
const token = await atlas.getToken();
|
|
41
|
+
if (!token)
|
|
42
|
+
throw new Error('getIdToken: the user is signed out.');
|
|
43
|
+
return token;
|
|
44
|
+
}
|
|
45
|
+
function isoFromSeconds(v) {
|
|
46
|
+
return new Date(typeof v === 'number' ? v * 1000 : Date.now()).toUTCString();
|
|
47
|
+
}
|
|
48
|
+
/** Project an Atlas user onto Firebase's `User` shape (null when signed out). */
|
|
49
|
+
function firebaseUserFrom(user, atlas = (0, active_atlas_1.getActiveAtlas)()) {
|
|
50
|
+
if (!user)
|
|
51
|
+
return null;
|
|
52
|
+
const email = (0, compat_1.primaryEmail)(user);
|
|
53
|
+
const phone = (user.phone_numbers ?? []).find((p) => p.primary) ?? user.phone_numbers?.[0];
|
|
54
|
+
const claims = atlas?.claims ?? null;
|
|
55
|
+
const live = () => atlas ?? (0, active_atlas_1.requireActive)('FirebaseCompatUser');
|
|
56
|
+
const projected = {
|
|
57
|
+
uid: user.id,
|
|
58
|
+
firebaseUid: legacyUid(user),
|
|
59
|
+
email: email?.address ?? null,
|
|
60
|
+
emailVerified: email?.verified ?? false,
|
|
61
|
+
displayName: (0, compat_1.displayName)(user),
|
|
62
|
+
photoURL: user.image_url,
|
|
63
|
+
phoneNumber: phone?.phone_number ?? null,
|
|
64
|
+
isAnonymous: false,
|
|
65
|
+
providerId: 'atlas',
|
|
66
|
+
tenantId: null,
|
|
67
|
+
metadata: {},
|
|
68
|
+
providerData: email ? [{ providerId: 'password', uid: email.address, email: email.address }] : [],
|
|
69
|
+
getIdToken: () => tokenOf(live()),
|
|
70
|
+
async getIdTokenResult() {
|
|
71
|
+
const a = live();
|
|
72
|
+
const token = await tokenOf(a);
|
|
73
|
+
const c = (a.claims ?? claims ?? {});
|
|
74
|
+
return {
|
|
75
|
+
token,
|
|
76
|
+
claims: c,
|
|
77
|
+
expirationTime: isoFromSeconds(c.exp),
|
|
78
|
+
issuedAtTime: isoFromSeconds(c.iat),
|
|
79
|
+
authTime: isoFromSeconds(c.auth_time ?? c.iat),
|
|
80
|
+
signInProvider: 'atlas',
|
|
81
|
+
signInSecondFactor: null,
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
async reload() {
|
|
85
|
+
await live().reload();
|
|
86
|
+
},
|
|
87
|
+
toJSON() {
|
|
88
|
+
const { getIdToken: _a, getIdTokenResult: _b, reload: _c, toJSON: _d, ...plain } = projected;
|
|
89
|
+
return plain;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
return projected;
|
|
93
|
+
}
|
|
94
|
+
function notify(observer, user) {
|
|
95
|
+
if (typeof observer === 'function')
|
|
96
|
+
observer(user);
|
|
97
|
+
else
|
|
98
|
+
observer.next?.(user);
|
|
99
|
+
}
|
|
100
|
+
function observe(observer, everyTokenChange) {
|
|
101
|
+
let lastStatus = null;
|
|
102
|
+
let lastId = null;
|
|
103
|
+
let lastExp = null;
|
|
104
|
+
const listener = (atlas) => {
|
|
105
|
+
if (!atlas || atlas.status === 'loading')
|
|
106
|
+
return;
|
|
107
|
+
const id = atlas.status === 'signed_in' ? (atlas.user?.id ?? null) : null;
|
|
108
|
+
const exp = atlas.claims?.exp ?? null;
|
|
109
|
+
const changed = lastStatus === null || id !== lastId || (everyTokenChange && exp !== lastExp);
|
|
110
|
+
lastStatus = atlas.status;
|
|
111
|
+
lastId = id;
|
|
112
|
+
lastExp = exp;
|
|
113
|
+
if (changed)
|
|
114
|
+
notify(observer, atlas.status === 'signed_in' ? firebaseUserFrom(atlas.user, atlas) : null);
|
|
115
|
+
};
|
|
116
|
+
const unsubscribe = (0, active_atlas_1.onActiveAtlasChange)(listener);
|
|
117
|
+
const current = (0, active_atlas_1.getActiveAtlas)();
|
|
118
|
+
if (current)
|
|
119
|
+
listener(current);
|
|
120
|
+
return unsubscribe;
|
|
121
|
+
}
|
|
122
|
+
/** `onAuthStateChanged(auth, next)`: fires on sign-in and sign-out. Returns the unsubscribe. */
|
|
123
|
+
function onFirebaseAuthStateChangedCompat(_auth, next, _error) {
|
|
124
|
+
return observe(next, false);
|
|
125
|
+
}
|
|
126
|
+
/** `onIdTokenChanged(auth, next)`: also fires when the session token is refreshed. */
|
|
127
|
+
function onFirebaseIdTokenChangedCompat(_auth, next, _error) {
|
|
128
|
+
return observe(next, true);
|
|
129
|
+
}
|
|
130
|
+
/** `signOut(auth)`. */
|
|
131
|
+
async function firebaseSignOutCompat(_auth) {
|
|
132
|
+
await (0, active_atlas_1.requireActive)('firebaseSignOutCompat').signOut();
|
|
133
|
+
}
|
|
134
|
+
/** `getIdToken(user, forceRefresh)`: the Atlas session JWT. */
|
|
135
|
+
async function getFirebaseIdTokenCompat(_user, _forceRefresh) {
|
|
136
|
+
return tokenOf((0, active_atlas_1.requireActive)('getFirebaseIdTokenCompat'));
|
|
137
|
+
}
|
|
138
|
+
/** `auth.currentUser`, read imperatively. */
|
|
139
|
+
function getFirebaseCurrentUserCompat() {
|
|
140
|
+
const atlas = (0, active_atlas_1.getActiveAtlas)();
|
|
141
|
+
return atlas?.status === 'signed_in' ? firebaseUserFrom(atlas.user, atlas) : null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* `signInWithRedirect(auth, provider)`: sends the browser to your Atlas
|
|
145
|
+
* sign-in page (social buttons there replace the provider object), returning
|
|
146
|
+
* to the current page afterwards.
|
|
147
|
+
*/
|
|
148
|
+
async function firebaseSignInWithRedirectCompat(_auth, _provider, options = {}) {
|
|
149
|
+
const back = typeof window !== 'undefined' ? window.location.href : undefined;
|
|
150
|
+
(0, components_shared_1.navigateTo)((0, components_shared_1.withRedirect)(options.signInUrl ?? '/sign-in', back));
|
|
151
|
+
}
|
|
152
|
+
/** `useAuthState(auth)` from react-firebase-hooks: `[user, loading, error]`. */
|
|
153
|
+
function useFirebaseAuthStateCompat(_auth) {
|
|
154
|
+
const atlas = (0, AtlasProvider_1.useAtlas)();
|
|
155
|
+
if (atlas.status === 'loading')
|
|
156
|
+
return [undefined, true, undefined];
|
|
157
|
+
return [atlas.status === 'signed_in' ? firebaseUserFrom(atlas.user, (0, active_atlas_1.getActiveAtlas)()) : null, false, undefined];
|
|
158
|
+
}
|
|
159
|
+
/** `useIdToken(auth)` from react-firebase-hooks: `[user, loading, error]`, re-rendering on token refresh. */
|
|
160
|
+
function useFirebaseIdTokenCompat(_auth) {
|
|
161
|
+
const state = useFirebaseAuthStateCompat();
|
|
162
|
+
const [, setTick] = (0, react_1.useState)(0);
|
|
163
|
+
(0, react_1.useEffect)(() => observe(() => setTick((t) => t + 1), true), []);
|
|
164
|
+
return state;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=compat-firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat-firebase.js","sourceRoot":"","sources":["../src/compat-firebase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { AuthStatus } from './active-atlas';
|
|
2
|
+
import type { AtlasOrganizationMembership, AtlasUser, SessionClaims } from './types';
|
|
3
|
+
/** The user object Kinde's `getUser()` / `user` expose. */
|
|
4
|
+
export interface KindeCompatUser {
|
|
5
|
+
id: string;
|
|
6
|
+
email: string | null;
|
|
7
|
+
given_name: string | null;
|
|
8
|
+
family_name: string | null;
|
|
9
|
+
picture: string | null;
|
|
10
|
+
username: string | null;
|
|
11
|
+
phone_number: string | null;
|
|
12
|
+
}
|
|
13
|
+
/** `getPermission(key)`. */
|
|
14
|
+
export interface KindeCompatPermission {
|
|
15
|
+
isGranted: boolean;
|
|
16
|
+
orgCode: string | null;
|
|
17
|
+
}
|
|
18
|
+
/** `getPermissions()` / `permissions`. */
|
|
19
|
+
export interface KindeCompatPermissions {
|
|
20
|
+
permissions: string[];
|
|
21
|
+
orgCode: string | null;
|
|
22
|
+
}
|
|
23
|
+
/** `getOrganization()` / `organization`. `orgCode` is the Atlas organization id. */
|
|
24
|
+
export interface KindeCompatOrganization {
|
|
25
|
+
orgCode: string | null;
|
|
26
|
+
orgName: string | null;
|
|
27
|
+
}
|
|
28
|
+
/** `getUserOrganizations()` / `userOrganizations`. */
|
|
29
|
+
export interface KindeCompatUserOrganizations {
|
|
30
|
+
orgCodes: string[];
|
|
31
|
+
orgs: Array<{
|
|
32
|
+
code: string;
|
|
33
|
+
name: string | null;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
/** `getClaim(name)`. */
|
|
37
|
+
export interface KindeCompatClaim {
|
|
38
|
+
name: string;
|
|
39
|
+
value: unknown;
|
|
40
|
+
}
|
|
41
|
+
/** `getFlag(code, defaultValue)`: always the default (Atlas has no feature flags). */
|
|
42
|
+
export interface KindeCompatFlag<T> {
|
|
43
|
+
code: string;
|
|
44
|
+
type: 'boolean' | 'string' | 'integer';
|
|
45
|
+
value: T;
|
|
46
|
+
is_default: true;
|
|
47
|
+
defaultValue: T;
|
|
48
|
+
}
|
|
49
|
+
/** The provider state the projections read. */
|
|
50
|
+
export interface KindeCompatState {
|
|
51
|
+
status: AuthStatus;
|
|
52
|
+
user: AtlasUser | null;
|
|
53
|
+
claims: SessionClaims | null;
|
|
54
|
+
memberships?: AtlasOrganizationMembership[];
|
|
55
|
+
}
|
|
56
|
+
/** Project an Atlas user onto Kinde's user shape. */
|
|
57
|
+
export declare function kindeUserFrom(user: AtlasUser | null): KindeCompatUser | null;
|
|
58
|
+
/**
|
|
59
|
+
* Pure projection of the provider state onto the members `useKindeAuth()` and
|
|
60
|
+
* `useKindeBrowserClient()` share. Exported for tests and custom wiring.
|
|
61
|
+
*/
|
|
62
|
+
export declare function kindeSessionFrom(state: KindeCompatState): {
|
|
63
|
+
getFlag<T>(code: string, defaultValue: T, _type?: string): KindeCompatFlag<T>;
|
|
64
|
+
getBooleanFlag(_code: string, defaultValue?: boolean): boolean | undefined;
|
|
65
|
+
getStringFlag(_code: string, defaultValue?: string): string | undefined;
|
|
66
|
+
getIntegerFlag(_code: string, defaultValue?: number): number | undefined;
|
|
67
|
+
isLoading: boolean;
|
|
68
|
+
isAuthenticated: boolean;
|
|
69
|
+
user: KindeCompatUser | null;
|
|
70
|
+
permissions: KindeCompatPermissions;
|
|
71
|
+
organization: KindeCompatOrganization | null;
|
|
72
|
+
userOrganizations: KindeCompatUserOrganizations | null;
|
|
73
|
+
/** The decoded Atlas session claims (Kinde's decoded access token). */
|
|
74
|
+
accessToken: SessionClaims | null;
|
|
75
|
+
getUser: () => KindeCompatUser | null;
|
|
76
|
+
getPermission: (key: string) => KindeCompatPermission;
|
|
77
|
+
getPermissions: () => KindeCompatPermissions;
|
|
78
|
+
getOrganization: () => KindeCompatOrganization | null;
|
|
79
|
+
getUserOrganizations: () => KindeCompatUserOrganizations | null;
|
|
80
|
+
getAccessToken: () => SessionClaims | null;
|
|
81
|
+
/** A claim of the Atlas session token, as `{ name, value }`; null when signed out. */
|
|
82
|
+
getClaim: (name: string, _tokenType?: string) => KindeCompatClaim | null;
|
|
83
|
+
};
|
|
84
|
+
/** Options `login()` / `register()` understand (others are accepted and ignored). */
|
|
85
|
+
export interface KindeCompatLoginOptions {
|
|
86
|
+
app_state?: {
|
|
87
|
+
redirectTo?: string;
|
|
88
|
+
[key: string]: unknown;
|
|
89
|
+
};
|
|
90
|
+
redirectURL?: string;
|
|
91
|
+
post_login_redirect_url?: string;
|
|
92
|
+
/** Where your Atlas sign-in page lives (default `/sign-in`). */
|
|
93
|
+
signInUrl?: string;
|
|
94
|
+
/** Where your Atlas sign-up page lives (default `/sign-up`). */
|
|
95
|
+
signUpUrl?: string;
|
|
96
|
+
[option: string]: unknown;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* `useKindeAuth()` from `@kinde-oss/kinde-auth-react`, on Atlas. `login()` and
|
|
100
|
+
* `register()` open your Atlas sign-in / sign-up pages; `logout(url?)` signs out
|
|
101
|
+
* and goes to `url` (default `/`); `getToken()` resolves the Atlas session JWT.
|
|
102
|
+
*/
|
|
103
|
+
export declare function useKindeAuthCompat(): {
|
|
104
|
+
error: undefined;
|
|
105
|
+
login: (options?: KindeCompatLoginOptions) => Promise<void>;
|
|
106
|
+
register: (options?: KindeCompatLoginOptions) => Promise<void>;
|
|
107
|
+
logout: (options?: string | {
|
|
108
|
+
redirectUrl?: string;
|
|
109
|
+
returnTo?: string;
|
|
110
|
+
}) => Promise<void>;
|
|
111
|
+
getToken: () => Promise<string | undefined>;
|
|
112
|
+
getFlag<T>(code: string, defaultValue: T, _type?: string): KindeCompatFlag<T>;
|
|
113
|
+
getBooleanFlag(_code: string, defaultValue?: boolean): boolean | undefined;
|
|
114
|
+
getStringFlag(_code: string, defaultValue?: string): string | undefined;
|
|
115
|
+
getIntegerFlag(_code: string, defaultValue?: number): number | undefined;
|
|
116
|
+
isLoading: boolean;
|
|
117
|
+
isAuthenticated: boolean;
|
|
118
|
+
user: KindeCompatUser | null;
|
|
119
|
+
permissions: KindeCompatPermissions;
|
|
120
|
+
organization: KindeCompatOrganization | null;
|
|
121
|
+
userOrganizations: KindeCompatUserOrganizations | null;
|
|
122
|
+
/** The decoded Atlas session claims (Kinde's decoded access token). */
|
|
123
|
+
accessToken: SessionClaims | null;
|
|
124
|
+
getUser: () => KindeCompatUser | null;
|
|
125
|
+
getPermission: (key: string) => KindeCompatPermission;
|
|
126
|
+
getPermissions: () => KindeCompatPermissions;
|
|
127
|
+
getOrganization: () => KindeCompatOrganization | null;
|
|
128
|
+
getUserOrganizations: () => KindeCompatUserOrganizations | null;
|
|
129
|
+
getAccessToken: () => SessionClaims | null;
|
|
130
|
+
/** A claim of the Atlas session token, as `{ name, value }`; null when signed out. */
|
|
131
|
+
getClaim: (name: string, _tokenType?: string) => KindeCompatClaim | null;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* `useKindeBrowserClient()` from `@kinde-oss/kinde-auth-nextjs`, on Atlas.
|
|
135
|
+
* `accessTokenRaw` / `getToken()` hold the latest Atlas session JWT (null until the
|
|
136
|
+
* first one is fetched); for a request, prefer `await useAuth().getToken()`, which
|
|
137
|
+
* is always fresh. `refreshData()` reloads the user and session.
|
|
138
|
+
*/
|
|
139
|
+
export declare function useKindeBrowserClientCompat(): {
|
|
140
|
+
error: null;
|
|
141
|
+
accessTokenRaw: string | null;
|
|
142
|
+
accessTokenEncoded: string | null;
|
|
143
|
+
getAccessTokenRaw: () => string | null;
|
|
144
|
+
getToken: () => string | null;
|
|
145
|
+
refreshData: () => Promise<void>;
|
|
146
|
+
getFlag<T>(code: string, defaultValue: T, _type?: string): KindeCompatFlag<T>;
|
|
147
|
+
getBooleanFlag(_code: string, defaultValue?: boolean): boolean | undefined;
|
|
148
|
+
getStringFlag(_code: string, defaultValue?: string): string | undefined;
|
|
149
|
+
getIntegerFlag(_code: string, defaultValue?: number): number | undefined;
|
|
150
|
+
isLoading: boolean;
|
|
151
|
+
isAuthenticated: boolean;
|
|
152
|
+
user: KindeCompatUser | null;
|
|
153
|
+
permissions: KindeCompatPermissions;
|
|
154
|
+
organization: KindeCompatOrganization | null;
|
|
155
|
+
userOrganizations: KindeCompatUserOrganizations | null;
|
|
156
|
+
/** The decoded Atlas session claims (Kinde's decoded access token). */
|
|
157
|
+
accessToken: SessionClaims | null;
|
|
158
|
+
getUser: () => KindeCompatUser | null;
|
|
159
|
+
getPermission: (key: string) => KindeCompatPermission;
|
|
160
|
+
getPermissions: () => KindeCompatPermissions;
|
|
161
|
+
getOrganization: () => KindeCompatOrganization | null;
|
|
162
|
+
getUserOrganizations: () => KindeCompatUserOrganizations | null;
|
|
163
|
+
getAccessToken: () => SessionClaims | null;
|
|
164
|
+
/** A claim of the Atlas session token, as `{ name, value }`; null when signed out. */
|
|
165
|
+
getClaim: (name: string, _tokenType?: string) => KindeCompatClaim | null;
|
|
166
|
+
};
|