@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.
Files changed (82) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/AtlasProvider.js +17 -1
  3. package/dist/AtlasProvider.js.map +1 -1
  4. package/dist/account-factors.d.ts +14 -0
  5. package/dist/account-factors.js +195 -0
  6. package/dist/account-factors.js.map +1 -0
  7. package/dist/account.d.ts +12 -1
  8. package/dist/account.js +92 -3
  9. package/dist/account.js.map +1 -1
  10. package/dist/app-launcher.d.ts +11 -0
  11. package/dist/app-launcher.js +28 -0
  12. package/dist/app-launcher.js.map +1 -0
  13. package/dist/billing.d.ts +25 -4
  14. package/dist/billing.js +40 -22
  15. package/dist/billing.js.map +1 -1
  16. package/dist/compat-amplify.d.ts +116 -0
  17. package/dist/compat-amplify.js +212 -0
  18. package/dist/compat-amplify.js.map +1 -0
  19. package/dist/compat-baas.d.ts +155 -0
  20. package/dist/compat-baas.js +401 -0
  21. package/dist/compat-baas.js.map +1 -0
  22. package/dist/compat-descope.d.ts +85 -0
  23. package/dist/compat-descope.js +191 -0
  24. package/dist/compat-descope.js.map +1 -0
  25. package/dist/compat-firebase.d.ts +67 -0
  26. package/dist/compat-firebase.js +166 -0
  27. package/dist/compat-firebase.js.map +1 -0
  28. package/dist/compat-kinde.d.ts +166 -0
  29. package/dist/compat-kinde.js +184 -0
  30. package/dist/compat-kinde.js.map +1 -0
  31. package/dist/compat-msal.d.ts +84 -0
  32. package/dist/compat-msal.js +158 -0
  33. package/dist/compat-msal.js.map +1 -0
  34. package/dist/compat-okta.d.ts +102 -0
  35. package/dist/compat-okta.js +240 -0
  36. package/dist/compat-okta.js.map +1 -0
  37. package/dist/compat.d.ts +11 -1
  38. package/dist/compat.js +27 -1
  39. package/dist/compat.js.map +1 -1
  40. package/dist/components.d.ts +12 -1
  41. package/dist/components.js +26 -2
  42. package/dist/components.js.map +1 -1
  43. package/dist/connected-accounts.d.ts +36 -0
  44. package/dist/connected-accounts.js +107 -0
  45. package/dist/connected-accounts.js.map +1 -0
  46. package/dist/delegated-ui.d.ts +49 -0
  47. package/dist/delegated-ui.js +42 -0
  48. package/dist/delegated-ui.js.map +1 -0
  49. package/dist/flow.d.ts +37 -1
  50. package/dist/flow.js +111 -2
  51. package/dist/flow.js.map +1 -1
  52. package/dist/i18n.js +14 -0
  53. package/dist/i18n.js.map +1 -1
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.js +5 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/marketing.d.ts +31 -0
  58. package/dist/marketing.js +64 -0
  59. package/dist/marketing.js.map +1 -0
  60. package/dist/mfa-steps.d.ts +9 -0
  61. package/dist/mfa-steps.js +51 -0
  62. package/dist/mfa-steps.js.map +1 -1
  63. package/dist/organization-admin.d.ts +38 -0
  64. package/dist/organization-admin.js +192 -0
  65. package/dist/organization-admin.js.map +1 -0
  66. package/dist/organization.d.ts +8 -1
  67. package/dist/organization.js +15 -2
  68. package/dist/organization.js.map +1 -1
  69. package/dist/profile-completion.d.ts +11 -0
  70. package/dist/profile-completion.js +49 -0
  71. package/dist/profile-completion.js.map +1 -0
  72. package/dist/profile-traits.d.ts +37 -0
  73. package/dist/profile-traits.js +143 -0
  74. package/dist/profile-traits.js.map +1 -0
  75. package/dist/sign-up.js +48 -7
  76. package/dist/sign-up.js.map +1 -1
  77. package/dist/styles.js +6 -4
  78. package/dist/styles.js.map +1 -1
  79. package/dist/types.d.ts +8 -0
  80. package/dist/version.d.ts +1 -1
  81. package/dist/version.js +1 -1
  82. package/package.json +5 -5
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.kindeUserFrom = kindeUserFrom;
5
+ exports.kindeSessionFrom = kindeSessionFrom;
6
+ exports.useKindeAuthCompat = useKindeAuthCompat;
7
+ exports.useKindeBrowserClientCompat = useKindeBrowserClientCompat;
8
+ /**
9
+ * Drop-in helpers for apps moving to Atlas from Kinde (`@kinde-oss/kinde-auth-react`
10
+ * and the browser side of `@kinde-oss/kinde-auth-nextjs`).
11
+ *
12
+ * `atlas migrate code --from kinde` rewrites `useKindeAuth()` to
13
+ * {@link useKindeAuthCompat} and `useKindeBrowserClient()` to
14
+ * {@link useKindeBrowserClientCompat}, so call sites keep the Kinde shapes
15
+ * (`user.given_name`, `getPermission(key).isGranted`, `organization.orgCode`, …)
16
+ * and run on day one. Both are thin projections over the `<AtlasProvider>` state;
17
+ * move call sites to `useUser()` / `useAuth()` / `useOrganization()` at your own pace.
18
+ *
19
+ * What maps, and how:
20
+ * - the user → Kinde's `{ id, email, given_name, family_name, picture, username, phone_number }`;
21
+ * - permissions → the session's organization permissions plus its app-level
22
+ * permissions (`org_permissions` / `app_permissions` claims);
23
+ * - the organization → the active Atlas organization (`orgCode` is its id);
24
+ * - `accessToken` / `getAccessToken()` → the decoded Atlas session claims, and the
25
+ * raw token is the Atlas session JWT;
26
+ * - feature flags have no Atlas counterpart: the flag getters always return the
27
+ * default value you pass (the codemod marks every call site).
28
+ *
29
+ * Every getter works with or without `await`, so code written for either the
30
+ * synchronous (v4) or the asynchronous (v5) Kinde React API keeps working.
31
+ */
32
+ const react_1 = require("react");
33
+ const AtlasProvider_1 = require("./AtlasProvider");
34
+ const components_shared_1 = require("./components-shared");
35
+ /** Project an Atlas user onto Kinde's user shape. */
36
+ function kindeUserFrom(user) {
37
+ if (!user)
38
+ return null;
39
+ const emails = user.email_addresses ?? [];
40
+ const email = emails.find((e) => e.primary) ?? emails.find((e) => e.verified) ?? emails[0];
41
+ const phones = user.phone_numbers ?? [];
42
+ const phone = phones.find((p) => p.primary) ?? phones[0];
43
+ return {
44
+ id: user.id,
45
+ email: email?.email_address ?? null,
46
+ given_name: user.first_name,
47
+ family_name: user.last_name,
48
+ picture: user.image_url,
49
+ username: user.username,
50
+ phone_number: phone?.phone_number ?? null,
51
+ };
52
+ }
53
+ /** Organization permissions plus app-level permissions, deduplicated. */
54
+ function heldPermissions(claims) {
55
+ const out = new Set();
56
+ for (const list of [claims?.org_permissions, claims?.app_permissions]) {
57
+ if (!Array.isArray(list))
58
+ continue;
59
+ for (const p of list)
60
+ if (typeof p === 'string')
61
+ out.add(p);
62
+ }
63
+ return [...out];
64
+ }
65
+ function flagType(value) {
66
+ return typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'integer' : 'string';
67
+ }
68
+ /** The flag getters: Atlas has no feature flags, so each returns the default it is given. */
69
+ function flagGetters() {
70
+ return {
71
+ getFlag(code, defaultValue, _type) {
72
+ return { code, type: flagType(defaultValue), value: defaultValue, is_default: true, defaultValue };
73
+ },
74
+ getBooleanFlag(_code, defaultValue) {
75
+ return defaultValue;
76
+ },
77
+ getStringFlag(_code, defaultValue) {
78
+ return defaultValue;
79
+ },
80
+ getIntegerFlag(_code, defaultValue) {
81
+ return defaultValue;
82
+ },
83
+ };
84
+ }
85
+ /**
86
+ * Pure projection of the provider state onto the members `useKindeAuth()` and
87
+ * `useKindeBrowserClient()` share. Exported for tests and custom wiring.
88
+ */
89
+ function kindeSessionFrom(state) {
90
+ const signedIn = state.status === 'signed_in';
91
+ const claims = signedIn ? state.claims : null;
92
+ const orgCode = claims?.org_id ?? null;
93
+ const memberships = signedIn ? (state.memberships ?? []) : [];
94
+ const active = memberships.find((m) => m.organization.id === orgCode) ?? null;
95
+ const user = signedIn ? kindeUserFrom(state.user) : null;
96
+ const permissions = { permissions: heldPermissions(claims), orgCode };
97
+ const organization = orgCode
98
+ ? { orgCode, orgName: active?.organization.name ?? null }
99
+ : null;
100
+ const userOrganizations = signedIn
101
+ ? {
102
+ orgCodes: memberships.map((m) => m.organization.id),
103
+ orgs: memberships.map((m) => ({ code: m.organization.id, name: m.organization.name })),
104
+ }
105
+ : null;
106
+ return {
107
+ isLoading: state.status === 'loading',
108
+ isAuthenticated: signedIn,
109
+ user,
110
+ permissions,
111
+ organization,
112
+ userOrganizations,
113
+ /** The decoded Atlas session claims (Kinde's decoded access token). */
114
+ accessToken: claims,
115
+ getUser: () => user,
116
+ getPermission: (key) => ({
117
+ isGranted: permissions.permissions.includes(key),
118
+ orgCode,
119
+ }),
120
+ getPermissions: () => permissions,
121
+ getOrganization: () => organization,
122
+ getUserOrganizations: () => userOrganizations,
123
+ getAccessToken: () => claims,
124
+ /** A claim of the Atlas session token, as `{ name, value }`; null when signed out. */
125
+ getClaim: (name, _tokenType) => claims ? { name, value: claims[name] ?? null } : null,
126
+ ...flagGetters(),
127
+ };
128
+ }
129
+ function returnPath(options) {
130
+ return options.app_state?.redirectTo ?? options.redirectURL ?? options.post_login_redirect_url;
131
+ }
132
+ /**
133
+ * `useKindeAuth()` from `@kinde-oss/kinde-auth-react`, on Atlas. `login()` and
134
+ * `register()` open your Atlas sign-in / sign-up pages; `logout(url?)` signs out
135
+ * and goes to `url` (default `/`); `getToken()` resolves the Atlas session JWT.
136
+ */
137
+ function useKindeAuthCompat() {
138
+ const atlas = (0, AtlasProvider_1.useAtlas)();
139
+ return {
140
+ ...kindeSessionFrom(atlas),
141
+ error: undefined,
142
+ login: async (options = {}) => (0, components_shared_1.navigateTo)((0, components_shared_1.withRedirect)(options.signInUrl ?? '/sign-in', returnPath(options))),
143
+ register: async (options = {}) => (0, components_shared_1.navigateTo)((0, components_shared_1.withRedirect)(options.signUpUrl ?? '/sign-up', returnPath(options))),
144
+ logout: async (options) => {
145
+ await atlas.signOut();
146
+ const to = typeof options === 'string' ? options : (options?.redirectUrl ?? options?.returnTo);
147
+ (0, components_shared_1.navigateTo)(to ?? '/');
148
+ },
149
+ getToken: async () => (await atlas.getToken()) ?? undefined,
150
+ };
151
+ }
152
+ /**
153
+ * `useKindeBrowserClient()` from `@kinde-oss/kinde-auth-nextjs`, on Atlas.
154
+ * `accessTokenRaw` / `getToken()` hold the latest Atlas session JWT (null until the
155
+ * first one is fetched); for a request, prefer `await useAuth().getToken()`, which
156
+ * is always fresh. `refreshData()` reloads the user and session.
157
+ */
158
+ function useKindeBrowserClientCompat() {
159
+ const atlas = (0, AtlasProvider_1.useAtlas)();
160
+ const [token, setToken] = (0, react_1.useState)(null);
161
+ (0, react_1.useEffect)(() => {
162
+ if (atlas.status !== 'signed_in') {
163
+ setToken(null);
164
+ return;
165
+ }
166
+ let live = true;
167
+ void atlas.getToken().then((t) => live && setToken(t), () => live && setToken(null));
168
+ return () => {
169
+ live = false;
170
+ };
171
+ }, [atlas.status, atlas.claims]);
172
+ return {
173
+ ...kindeSessionFrom(atlas),
174
+ error: null,
175
+ accessTokenRaw: token,
176
+ accessTokenEncoded: token,
177
+ getAccessTokenRaw: () => token,
178
+ getToken: () => token,
179
+ refreshData: async () => {
180
+ await atlas.reload();
181
+ },
182
+ };
183
+ }
184
+ //# sourceMappingURL=compat-kinde.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-kinde.js","sourceRoot":"","sources":["../src/compat-kinde.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { AtlasUser } from './types';
2
+ /** MSAL's `AccountInfo`, as far as apps read it. */
3
+ export interface MsalCompatAccount {
4
+ homeAccountId: string;
5
+ localAccountId: string;
6
+ environment: string;
7
+ tenantId: string;
8
+ username: string;
9
+ name?: string;
10
+ idTokenClaims?: Record<string, unknown>;
11
+ }
12
+ export interface MsalCompatAuthResult {
13
+ accessToken: string;
14
+ idToken: string;
15
+ account: MsalCompatAccount;
16
+ scopes: string[];
17
+ expiresOn: Date | null;
18
+ tokenType: 'Bearer';
19
+ idTokenClaims: Record<string, unknown>;
20
+ uniqueId: string;
21
+ tenantId: string;
22
+ fromCache: boolean;
23
+ }
24
+ /** Thrown like MSAL's `InteractionRequiredAuthError` when nobody is signed in. */
25
+ export declare class MsalCompatInteractionRequiredError extends Error {
26
+ readonly errorCode = "interaction_required";
27
+ constructor();
28
+ }
29
+ export declare function msalAccountFrom(user: AtlasUser | null, claims?: Record<string, unknown> | null): MsalCompatAccount | null;
30
+ /** `PublicClientApplication`, answered by the Atlas session. The config is accepted and ignored. */
31
+ export declare class MsalCompatClient {
32
+ constructor(_config?: unknown);
33
+ /** `PublicClientApplication.createPublicClientApplication(config)`. */
34
+ static createPublicClientApplication(config?: unknown): Promise<MsalCompatClient>;
35
+ initialize(): Promise<void>;
36
+ handleRedirectPromise(_hash?: string): Promise<MsalCompatAuthResult | null>;
37
+ getAllAccounts(): MsalCompatAccount[];
38
+ getActiveAccount(): MsalCompatAccount | null;
39
+ getAccountByHomeId(id: string): MsalCompatAccount | null;
40
+ getAccountByLocalId(id: string): MsalCompatAccount | null;
41
+ getAccountByUsername(username: string): MsalCompatAccount | null;
42
+ /** There is one account: the signed-in user. */
43
+ setActiveAccount(_account: MsalCompatAccount | null): void;
44
+ acquireTokenSilent(request?: {
45
+ scopes?: string[];
46
+ account?: unknown;
47
+ }): Promise<MsalCompatAuthResult>;
48
+ acquireTokenPopup(request?: {
49
+ scopes?: string[];
50
+ }): Promise<MsalCompatAuthResult>;
51
+ acquireTokenRedirect(request?: {
52
+ redirectUri?: string;
53
+ }): Promise<void>;
54
+ loginRedirect(request?: {
55
+ redirectUri?: string;
56
+ redirectStartPage?: string;
57
+ }): Promise<void>;
58
+ /** There is no popup sign-in: this opens the sign-in page in the window. */
59
+ loginPopup(request?: {
60
+ redirectUri?: string;
61
+ }): Promise<MsalCompatAuthResult>;
62
+ logoutRedirect(request?: {
63
+ postLogoutRedirectUri?: string;
64
+ }): Promise<void>;
65
+ logoutPopup(request?: {
66
+ postLogoutRedirectUri?: string;
67
+ mainWindowRedirectUri?: string;
68
+ }): Promise<void>;
69
+ /** MSAL events have no Atlas counterpart; the callback never fires. */
70
+ addEventCallback(_callback: unknown): string | null;
71
+ removeEventCallback(_id: string): void;
72
+ }
73
+ /** The single client `useMsalCompat().instance` returns. */
74
+ export declare const msalCompatInstance: MsalCompatClient;
75
+ /** `useMsal()`: `{ instance, accounts, inProgress }`. */
76
+ export declare function useMsalCompat(): {
77
+ instance: MsalCompatClient;
78
+ accounts: MsalCompatAccount[];
79
+ inProgress: 'startup' | 'none';
80
+ };
81
+ /** `useIsAuthenticated()`. */
82
+ export declare function useIsAuthenticatedCompat(_matchAccount?: unknown): boolean;
83
+ /** `useAccount(accountIdentifiers)`: the signed-in account, or null. */
84
+ export declare function useAccountCompat(_accountIdentifiers?: unknown): MsalCompatAccount | null;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.msalCompatInstance = exports.MsalCompatClient = exports.MsalCompatInteractionRequiredError = void 0;
5
+ exports.msalAccountFrom = msalAccountFrom;
6
+ exports.useMsalCompat = useMsalCompat;
7
+ exports.useIsAuthenticatedCompat = useIsAuthenticatedCompat;
8
+ exports.useAccountCompat = useAccountCompat;
9
+ /**
10
+ * MSAL (Azure AD B2C / Microsoft Entra External ID) compatibility helpers, for
11
+ * `atlas migrate code --from azure-ad-b2c` / `--from entra-external-id`.
12
+ *
13
+ * - `MsalCompatClient` stands in for `PublicClientApplication`: the account
14
+ * and token methods apps call (`getAllAccounts`, `getActiveAccount`,
15
+ * `acquireTokenSilent`, `loginRedirect`, `logoutRedirect`, …) answer from
16
+ * the `<AtlasProvider>` session; `acquireTokenSilent` resolves the Atlas
17
+ * session JWT as both `accessToken` and `idToken`.
18
+ * - `useMsalCompat`, `useIsAuthenticatedCompat`, `useAccountCompat` keep the
19
+ * `@azure/msal-react` hook shapes.
20
+ *
21
+ * `localAccountId` / `homeAccountId` are the ATLAS user id; the directory
22
+ * object id (`oid`) the user had is kept by the import as their external id.
23
+ */
24
+ const AtlasProvider_1 = require("./AtlasProvider");
25
+ const components_shared_1 = require("./components-shared");
26
+ const compat_1 = require("./compat");
27
+ const active_atlas_1 = require("./active-atlas");
28
+ /** Thrown like MSAL's `InteractionRequiredAuthError` when nobody is signed in. */
29
+ class MsalCompatInteractionRequiredError extends Error {
30
+ errorCode = 'interaction_required';
31
+ constructor() {
32
+ super('interaction_required: no signed-in user');
33
+ this.name = 'InteractionRequiredAuthError';
34
+ }
35
+ }
36
+ exports.MsalCompatInteractionRequiredError = MsalCompatInteractionRequiredError;
37
+ function msalAccountFrom(user, claims = null) {
38
+ if (!user)
39
+ return null;
40
+ const email = (0, compat_1.primaryEmail)(user)?.address;
41
+ const name = (0, compat_1.displayName)(user) ?? undefined;
42
+ return {
43
+ homeAccountId: user.id,
44
+ localAccountId: user.id,
45
+ environment: 'atlas',
46
+ tenantId: 'atlas',
47
+ username: email ?? user.username ?? user.id,
48
+ ...(name ? { name } : {}),
49
+ idTokenClaims: { ...(claims ?? {}), ...(email ? { emails: [email], email } : {}), ...(name ? { name } : {}) },
50
+ };
51
+ }
52
+ function current() {
53
+ const atlas = (0, active_atlas_1.getActiveAtlas)();
54
+ return atlas?.status === 'signed_in' ? msalAccountFrom(atlas.user, atlas.claims ?? null) : null;
55
+ }
56
+ function goToSignIn(redirectUri) {
57
+ const back = redirectUri ?? (typeof window !== 'undefined' ? window.location.href : undefined);
58
+ (0, components_shared_1.navigateTo)((0, components_shared_1.withRedirect)('/sign-in', back));
59
+ }
60
+ /** `PublicClientApplication`, answered by the Atlas session. The config is accepted and ignored. */
61
+ class MsalCompatClient {
62
+ constructor(_config) { }
63
+ /** `PublicClientApplication.createPublicClientApplication(config)`. */
64
+ static async createPublicClientApplication(config) {
65
+ return new MsalCompatClient(config);
66
+ }
67
+ async initialize() { }
68
+ async handleRedirectPromise(_hash) {
69
+ return null;
70
+ }
71
+ getAllAccounts() {
72
+ const account = current();
73
+ return account ? [account] : [];
74
+ }
75
+ getActiveAccount() {
76
+ return current();
77
+ }
78
+ getAccountByHomeId(id) {
79
+ const account = current();
80
+ return account && account.homeAccountId === id ? account : null;
81
+ }
82
+ getAccountByLocalId(id) {
83
+ return this.getAccountByHomeId(id);
84
+ }
85
+ getAccountByUsername(username) {
86
+ const account = current();
87
+ return account && account.username.toLowerCase() === username.toLowerCase() ? account : null;
88
+ }
89
+ /** There is one account: the signed-in user. */
90
+ setActiveAccount(_account) { }
91
+ async acquireTokenSilent(request = {}) {
92
+ const atlas = (0, active_atlas_1.requireActive)('acquireTokenSilent');
93
+ const account = current();
94
+ const token = account ? await atlas.getToken() : null;
95
+ if (!account || !token)
96
+ throw new MsalCompatInteractionRequiredError();
97
+ const exp = typeof atlas.claims?.exp === 'number' ? new Date(atlas.claims.exp * 1000) : null;
98
+ return {
99
+ accessToken: token,
100
+ idToken: token,
101
+ account,
102
+ scopes: request.scopes ?? [],
103
+ expiresOn: exp,
104
+ tokenType: 'Bearer',
105
+ idTokenClaims: account.idTokenClaims ?? {},
106
+ uniqueId: account.localAccountId,
107
+ tenantId: account.tenantId,
108
+ fromCache: true,
109
+ };
110
+ }
111
+ async acquireTokenPopup(request = {}) {
112
+ return this.acquireTokenSilent(request);
113
+ }
114
+ async acquireTokenRedirect(request = {}) {
115
+ if (!current())
116
+ goToSignIn(request.redirectUri);
117
+ }
118
+ async loginRedirect(request = {}) {
119
+ goToSignIn(request.redirectStartPage ?? request.redirectUri);
120
+ }
121
+ /** There is no popup sign-in: this opens the sign-in page in the window. */
122
+ async loginPopup(request = {}) {
123
+ goToSignIn(request.redirectUri);
124
+ return new Promise(() => undefined);
125
+ }
126
+ async logoutRedirect(request = {}) {
127
+ await (0, active_atlas_1.requireActive)('logoutRedirect').signOut();
128
+ if (request.postLogoutRedirectUri)
129
+ (0, components_shared_1.navigateTo)(request.postLogoutRedirectUri);
130
+ }
131
+ async logoutPopup(request = {}) {
132
+ await this.logoutRedirect({ postLogoutRedirectUri: request.mainWindowRedirectUri ?? request.postLogoutRedirectUri });
133
+ }
134
+ /** MSAL events have no Atlas counterpart; the callback never fires. */
135
+ addEventCallback(_callback) {
136
+ return null;
137
+ }
138
+ removeEventCallback(_id) { }
139
+ }
140
+ exports.MsalCompatClient = MsalCompatClient;
141
+ /** The single client `useMsalCompat().instance` returns. */
142
+ exports.msalCompatInstance = new MsalCompatClient();
143
+ /** `useMsal()`: `{ instance, accounts, inProgress }`. */
144
+ function useMsalCompat() {
145
+ const atlas = (0, AtlasProvider_1.useAtlas)();
146
+ const account = atlas.status === 'signed_in' ? msalAccountFrom(atlas.user) : null;
147
+ return { instance: exports.msalCompatInstance, accounts: account ? [account] : [], inProgress: atlas.status === 'loading' ? 'startup' : 'none' };
148
+ }
149
+ /** `useIsAuthenticated()`. */
150
+ function useIsAuthenticatedCompat(_matchAccount) {
151
+ return (0, AtlasProvider_1.useAtlas)().status === 'signed_in';
152
+ }
153
+ /** `useAccount(accountIdentifiers)`: the signed-in account, or null. */
154
+ function useAccountCompat(_accountIdentifiers) {
155
+ const atlas = (0, AtlasProvider_1.useAtlas)();
156
+ return atlas.status === 'signed_in' ? msalAccountFrom(atlas.user) : null;
157
+ }
158
+ //# sourceMappingURL=compat-msal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-msal.js","sourceRoot":"","sources":["../src/compat-msal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { AtlasUser, SessionClaims } from './types';
2
+ import { type ActiveAtlas } from './active-atlas';
3
+ /** The OIDC user claims okta-auth-js's `getUser()` / `token.getUserInfo()` resolve to. */
4
+ export interface OktaCompatUserClaims {
5
+ sub: string;
6
+ name?: string;
7
+ given_name?: string;
8
+ family_name?: string;
9
+ preferred_username?: string;
10
+ email?: string;
11
+ email_verified?: boolean;
12
+ picture?: string;
13
+ [claim: string]: unknown;
14
+ }
15
+ /** okta-auth-js's `AuthState`: `null` while loading, then signed in or not. */
16
+ export interface OktaCompatAuthState {
17
+ isAuthenticated: boolean;
18
+ /** The Atlas session token, with the user's profile claims merged into its claims. */
19
+ idToken?: {
20
+ idToken: string;
21
+ claims: OktaCompatUserClaims & SessionClaims;
22
+ };
23
+ /** The Atlas session token and its claims. */
24
+ accessToken?: {
25
+ accessToken: string;
26
+ claims: SessionClaims;
27
+ };
28
+ }
29
+ export interface OktaAuthCompatOptions {
30
+ /** Where your Atlas sign-in page lives (default `/sign-in`). */
31
+ signInUrl?: string;
32
+ /** Where `signOut()` goes when the call does not say (okta-auth-js's option of the same name). Default `/`. */
33
+ postLogoutRedirectUri?: string;
34
+ /** okta-auth-js options (`issuer`, `clientId`, `redirectUri`, `scopes`, `pkce`, …) are accepted and ignored. */
35
+ [option: string]: unknown;
36
+ }
37
+ export interface OktaCompatSignInOptions {
38
+ /** Where to land after sign-in (sent to the sign-in page as `redirect_url`). */
39
+ originalUri?: string;
40
+ [option: string]: unknown;
41
+ }
42
+ export interface OktaCompatSignOutOptions {
43
+ postLogoutRedirectUri?: string;
44
+ [option: string]: unknown;
45
+ }
46
+ /** okta-auth-js's `AuthSdkError`, thrown when a call needs a signed-in user. */
47
+ export declare class OktaCompatAuthSdkError extends Error {
48
+ readonly errorCode = "INTERNAL";
49
+ readonly errorSummary: string;
50
+ constructor(message: string);
51
+ }
52
+ /** Project an Atlas user onto the OIDC user claims Okta returns. */
53
+ export declare function oktaUserFrom(user: AtlasUser | null): OktaCompatUserClaims | null;
54
+ /**
55
+ * Pure projection of the provider state onto okta-auth-js's `AuthState`.
56
+ * `token` is the session token: `undefined` while it is being read (the state
57
+ * is then `null`, as Okta's is before its first evaluation), `null` when there
58
+ * is none.
59
+ */
60
+ export declare function oktaAuthStateFrom(state: Pick<ActiveAtlas, 'status' | 'user' | 'claims'>, token: string | null | undefined): OktaCompatAuthState | null;
61
+ /** okta-auth-js's `toRelativeUrl(path, baseUrl)`: an absolute URL loses its `baseUrl` prefix. */
62
+ export declare function toRelativeUrlCompat(path?: string, baseUrl?: string): string;
63
+ /**
64
+ * `new OktaAuth(config)` from `@okta/okta-auth-js`, on Atlas, for a React app
65
+ * that renders `<AtlasProvider>`. The config is accepted and ignored apart from
66
+ * `signInUrl` and `postLogoutRedirectUri`: sign-in runs on your Atlas pages and
67
+ * the provider holds the session.
68
+ */
69
+ export declare class OktaAuthCompat {
70
+ readonly options: OktaAuthCompatOptions;
71
+ /** okta-auth-js's `oktaAuth.token` namespace (`getUserInfo` only). */
72
+ readonly token: {
73
+ getUserInfo(): Promise<OktaCompatUserClaims>;
74
+ };
75
+ private readonly atlas;
76
+ private cached;
77
+ private pending;
78
+ /**
79
+ * @param atlas Where the provider state comes from. Internal: the hook passes
80
+ * its own; by default the `<AtlasProvider>` mounted on the page.
81
+ */
82
+ constructor(options?: OktaAuthCompatOptions, atlas?: () => ActiveAtlas);
83
+ /** Open your Atlas sign-in page, coming back to `originalUri` afterwards. */
84
+ signInWithRedirect(options?: OktaCompatSignInOptions): Promise<void>;
85
+ /** Sign out, then go to `postLogoutRedirectUri` (default `/`). */
86
+ signOut(options?: OktaCompatSignOutOptions): Promise<void>;
87
+ isAuthenticated(): Promise<boolean>;
88
+ /** The signed-in user's claims; throws `AuthSdkError` when nobody is signed in, like Okta. */
89
+ getUser(): Promise<OktaCompatUserClaims>;
90
+ /** The session token on hand (synchronous, like okta-auth-js), refreshed in the background. */
91
+ getAccessToken(): string | undefined;
92
+ /** Atlas has one session token: the same value as `getAccessToken()`. */
93
+ getIdToken(): string | undefined;
94
+ /** Read a fresh session token now (the async form of `getAccessToken()`). */
95
+ getFreshAccessToken(): Promise<string | undefined>;
96
+ private current;
97
+ }
98
+ /** `useOktaAuth()` from `@okta/okta-react`, on Atlas: `{ oktaAuth, authState }`. */
99
+ export declare function useOktaAuthCompat(): {
100
+ oktaAuth: OktaAuthCompat;
101
+ authState: OktaCompatAuthState | null;
102
+ };