@atlasauth/solid 0.1.2 → 0.3.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 ADDED
@@ -0,0 +1,81 @@
1
+ # @atlasauth/solid changelog
2
+
3
+ ## 0.3.0
4
+ Requires `@atlasauth/js` 0.8.0.
5
+ - **Safer sign-out.** `signOut(options?: SignOutOptions)` now resolves `SignOutResult`
6
+ (`{ revoked: boolean; activeSessionId?: string }`) instead of `void` — on `AtlasClient.signOut` and
7
+ `useAuth().signOut`. Existing `await signOut()` call sites keep working.
8
+ - The session is tombstoned (in `localStorage`, per Frontend API origin, shared by every tab) BEFORE the
9
+ revoke, which is retried once; a reload, a token refresh, a sibling tab or a tab opened later never
10
+ re-adopts a signed-out session from a refresh cookie the revoke did not clear. Such a revoke is re-tried
11
+ in the background, and the tombstone dropped once it lands.
12
+ - `revoked: false` — the server never confirmed the revoke; this browser is signed out regardless.
13
+ `{ strict: true }` rejects with a `SignOutError` (`code: 'SIGN_OUT_REVOKE_FAILED'`, `sessionId`, `status`)
14
+ in that case, after the local sign-out.
15
+ - `activeSessionId` — a parked session the server promoted on revoke; it is adopted.
16
+ - With no cached token the revoke still runs (the current session, or `GET /v1/client`, names it).
17
+ - Another tab signing out of this session now signs this tab out too.
18
+ - Built on `SignOutGuard` from `@atlasauth/js`; unmounting `<AtlasProvider>` stops its watch and cancels
19
+ pending background re-tries (it never revokes).
20
+ - **OAuth popup landing.** On boot the provider completes a popup landing whose opener a
21
+ Cross-Origin-Opener-Policy severed (`#atlas_popup_result=…`): the result is relayed to the opener and the
22
+ window closes, or — with no opener listening — its ticket is exchanged here (or the page moves to its
23
+ `continuationUrl`). After a successful ticket exchange inside the Atlas popup the opener is woken and the
24
+ popup closes (`closeOAuthPopupAfterSignIn`); an ordinary tab never closes.
25
+ - **Email delivery.** The prebuilt widgets read `emailDelivery` from the instance settings they load:
26
+ - `<SignUp>` shows a "can't send email" notice (new catalog key `signUp.emailUnavailable`, en-US text
27
+ "This app can't send email right now. Try another sign-in method or contact the app owner.") instead of
28
+ the email + password form when `passwordSignUp` is `false`.
29
+ - `<SignIn>`'s first-factor step now offers the server's strategies through `offeredFirstFactors`: a
30
+ password field when `password` is offered, and "Email me a code" / "Email me a sign-in link" when
31
+ `email_code` / `email_link` are offered and email can be delivered (hidden when `available` is `false`).
32
+ - **Added** `SIGN_UP_TEXT['signUp.emailUnavailable']`.
33
+
34
+ ## 0.2.0
35
+ - **`<SignUp>` now creates accounts.** Its first step is a create-account form (the instance's
36
+ configured sign-up fields, email, password and the legal-consent row) that posts
37
+ `POST /v1/client/sign_ups`; the emailed-code step and the ticket exchange then run through the shared
38
+ flow. Previously `<SignUp>` rendered the sign-in identifier step and could not create an account.
39
+ - **Captcha renders automatically.** When the instance turns captcha on for a flow, `<SignUp>` and
40
+ `<SignIn>` show the provider's widget (Turnstile, hCaptcha, reCAPTCHA v2/v3/Enterprise) in the
41
+ configured mode (`visible`, `managed`, or `invisible` — run on submit), send its token as
42
+ `captcha_token`, answer the sign-in `needs_captcha` step (continuing as soon as it is solved), and on
43
+ `CAPTCHA_REQUIRED` / `CAPTCHA_FAILED` show a message and a fresh widget.
44
+ - **Changed:** the flow now shows field-scoped errors (e.g. a rejected password) as alerts too;
45
+ previously only form-level errors were shown. Inputs are re-created only when the step changes, so
46
+ typed values survive a refused submit.
47
+ - **Added** `SIGN_UP_TEXT` — the en-US strings of the create-account form and captcha, under the same
48
+ catalog keys as `@atlasauth/react`: `signUp.title`, `signUp.submit`, `signUp.emailLabel`,
49
+ `signUp.passwordLabel`, `signUp.optionalField`, `signUp.selectPlaceholder`, `signUp.consentAgree`,
50
+ `signUp.consentNotice`, `signUp.terms`, `signUp.privacy`, `signUp.and`, `captcha.prompt`,
51
+ `captcha.required`, `captcha.failed`.
52
+ - New element classes `atlas-captcha`, `atlas-consent`, `atlas-choices`, `atlas-choice`, `atlas-text`,
53
+ `atlas-link`.
54
+ - **`frontendApi` is validated at `<AtlasProvider>`.** A missing (or non-string) or malformed value now throws an
55
+ `AtlasConfigError` (from `@atlasauth/js`; `code: 'FRONTEND_API_REQUIRED'` or `'FRONTEND_API_INVALID'`)
56
+ instead of silently sending requests to relative URLs on the app's own origin. Accepted: an absolute
57
+ `https:` URL (`http:` only for localhost / local development hosts), or `"same-origin"` / a root-relative path such as `"/atlas"` for a reverse proxy.
58
+ - **Deprecated:** `frontendApi: ""` (the original same-origin spelling) still works as same-origin, with a
59
+ one-time console warning; use `"same-origin"` instead.
60
+
61
+ ## 0.1.2
62
+
63
+ ### Added
64
+ - `signOut()` now runs OIDC front-channel logout before clearing local state: the front-channel logout URLs returned when the session is revoked are loaded in hidden iframes (up to 5 seconds), so other apps signed in through the session are signed out in this browser too. Pass `signOut({ frontchannel: false })` to skip it. `signOut` on `AtlasClient` and `useAuth()` now accepts an optional `SignOutOptions`.
65
+
66
+ ## 0.1.1
67
+
68
+ ### Added
69
+ - `useAuth()` now also returns `status()` (`loading` | `signed_in` | `signed_out`) and `session()` (the active session, or `null`) accessors alongside `isLoaded` / `isSignedIn`.
70
+
71
+ ## 0.1.0
72
+
73
+ First published release.
74
+
75
+ ### Added
76
+ - `AtlasProvider` and `createAtlasClient()` for SolidJS, built on `@atlasauth/js`.
77
+ - Reactive accessors: `useAuth()`, `useUser()`, `useSession()` and `useAtlas()`.
78
+ - Guards: `SignedIn`, `SignedOut`, `AtlasLoading`, `AtlasLoaded` and `Protect`.
79
+ - Mountable `SignIn`, `SignUp` and `UserButton` components, plus `mountSignInWidget()`, `mountSignUpWidget()` and `mountUserButtonWidget()`.
80
+ - Types `AtlasUser`, `AtlasSession`, `SessionClaims`, `AuthStatus` and `AtlasState`.
81
+
@@ -1,4 +1,4 @@
1
- import { type ProtectCondition, type ProviderToken, type SignOutOptions } from '@atlasauth/js';
1
+ import { type ProtectCondition, type ProviderToken, type SignOutOptions, type SignOutResult } from '@atlasauth/js';
2
2
  import type { AuthStatus } from './provider';
3
3
  import type { AtlasSession, AtlasUser } from './types';
4
4
  /**
@@ -39,7 +39,8 @@ export declare function useAuth(): {
39
39
  orgRole: () => string | null;
40
40
  getToken: () => Promise<string | null>;
41
41
  getProviderToken: (provider: string) => Promise<ProviderToken | null>;
42
- signOut: (options?: SignOutOptions) => Promise<void>;
42
+ /** Resolves `{ revoked, activeSessionId? }`; see `AtlasClient.signOut`. */
43
+ signOut: (options?: SignOutOptions) => Promise<SignOutResult>;
43
44
  /** Mirrors `<Protect>`, for logic that is not a render decision. */
44
45
  has: (condition: ProtectCondition) => boolean;
45
46
  };
package/dist/accessors.js CHANGED
@@ -1,4 +1,4 @@
1
- import { evaluate } from '@atlasauth/js';
1
+ import { evaluate, } from '@atlasauth/js';
2
2
  import { useAtlas } from './context';
3
3
  /**
4
4
  * The Solid peer of React's hooks and Vue's composables.
@@ -1 +1 @@
1
- {"version":3,"file":"accessors.js","sourceRoot":"","sources":["../src/accessors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC;;;;;;;;;GASG;AAEH,MAAM,UAAU,OAAO;IAWrB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QACjD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;QACrD,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;QAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IAIxB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO;IAiBrB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QACjD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;QACrD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;QAC9C,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;QACjD,KAAK,EAAE,GAAG,EAAE,CAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAA6B,IAAI,IAAI;QACxE,OAAO,EAAE,GAAG,EAAE,CAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAA+B,IAAI,IAAI;QAC5E,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO;KACrE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"accessors.js","sourceRoot":"","sources":["../src/accessors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,GAKT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC;;;;;;;;;GASG;AAEH,MAAM,UAAU,OAAO;IAWrB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QACjD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;QACrD,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;QAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IAIxB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO;IAkBrB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QACjD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;QACrD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;QAC9C,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;QACjD,KAAK,EAAE,GAAG,EAAE,CAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAA6B,IAAI,IAAI;QACxE,OAAO,EAAE,GAAG,EAAE,CAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAA+B,IAAI,IAAI;QAC5E,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO;KACrE,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type JSX } from 'solid-js';
2
- import { type ProviderToken, type SignOutOptions } from '@atlasauth/js';
2
+ import { type ProviderToken, type SignOutOptions, type SignOutResult } from '@atlasauth/js';
3
3
  import type { AtlasOrganizationMembership, AtlasSession, AtlasUser, SessionClaims } from './types';
4
4
  /**
5
5
  * The Solid peer of React's `<AtlasProvider>` and Vue's `createAtlas()` plugin.
@@ -54,7 +54,15 @@ export interface AtlasClient {
54
54
  * is never exposed.
55
55
  */
56
56
  getProviderToken(provider: string): Promise<ProviderToken | null>;
57
- signOut(options?: SignOutOptions): Promise<void>;
57
+ /**
58
+ * Sign out of the current session. Resolves `{ revoked, activeSessionId? }`:
59
+ * `revoked: false` means the server never confirmed the revoke (this browser
60
+ * is signed out regardless, and never re-adopts the session); with
61
+ * `{ strict: true }` that case rejects with a `SignOutError` instead, after
62
+ * the local sign-out. `activeSessionId` is a parked session the server
63
+ * promoted, which is adopted.
64
+ */
65
+ signOut(options?: SignOutOptions): Promise<SignOutResult>;
58
66
  setActiveOrganization(organizationId: string | null): Promise<void>;
59
67
  reload(): Promise<void>;
60
68
  /**
@@ -71,7 +79,14 @@ export interface AtlasClient {
71
79
  }
72
80
  export interface AtlasProviderProps {
73
81
  publishableKey: string;
74
- /** The instance's FAPI origin. Empty for same-origin. */
82
+ /**
83
+ * The instance's Frontend API: an absolute URL such as
84
+ * `"https://auth.example.com"`, or `"same-origin"` / a path such as `"/atlas"`
85
+ * behind a reverse proxy on the app's own origin. Required at runtime — a
86
+ * missing or malformed value throws an `AtlasConfigError`
87
+ * (`FRONTEND_API_REQUIRED` / `FRONTEND_API_INVALID`). Optional in the type
88
+ * only so existing call sites keep compiling.
89
+ */
75
90
  frontendApi?: string;
76
91
  /** Injected in tests to drive the client through a mocked network. */
77
92
  fetchImpl?: typeof fetch;
package/dist/provider.js CHANGED
@@ -2,7 +2,7 @@ import { onCleanup, onMount } from 'solid-js';
2
2
  import { createStore } from 'solid-js/store';
3
3
  import { isServer } from 'solid-js/web';
4
4
  import { h } from './h';
5
- import { FapiClient, TokenCache, getProviderToken as fetchProviderToken, msUntilRefresh, readExpiry, readRedirectResult, stripRedirectParams, runFrontChannelLogoutFromResponse, } from '@atlasauth/js';
5
+ import { FapiClient, SignOutGuard, TokenCache, closeOAuthPopupAfterSignIn, completeOAuthPopupLanding, getProviderToken as fetchProviderToken, mapOAuthPopupPayload, msUntilRefresh, readExpiry, readRedirectResult, resolveFrontendApi, stripRedirectParams, } from '@atlasauth/js';
6
6
  import { AtlasContext } from './context';
7
7
  import { mountSignInWidget, mountSignUpWidget, mountUserButtonWidget } from './widgets';
8
8
  /**
@@ -12,7 +12,9 @@ import { mountSignInWidget, mountSignUpWidget, mountUserButtonWidget } from './w
12
12
  */
13
13
  export function createAtlasClient(options) {
14
14
  const publishableKey = options.publishableKey;
15
- const baseUrl = options.frontendApi ?? '';
15
+ // Throws on a missing/invalid value rather than quietly sending every request
16
+ // to a relative path on the app's origin.
17
+ const baseUrl = resolveFrontendApi(options.frontendApi, { component: '<AtlasProvider>' });
16
18
  const doFetch = options.fetchImpl ?? fetch;
17
19
  const [state, setState] = createStore({
18
20
  status: 'loading',
@@ -44,7 +46,16 @@ export function createAtlasClient(options) {
44
46
  ...init?.headers,
45
47
  },
46
48
  });
49
+ // Sessions this browser signed out of (shared by every tab, per Frontend
50
+ // API): never re-adopted from a still-valid refresh cookie, even when the
51
+ // revoke did not reach the server — not by a reload or refresh, nor by a tab
52
+ // opened later. The guard also re-tries such a revoke in the background.
53
+ const guard = new SignOutGuard({ request: call, frontendApi: baseUrl });
47
54
  const applyToken = (jwt, sessionId) => {
55
+ // A refresh that was in flight when the user signed out must not put the
56
+ // signed-out session's token back.
57
+ if (guard.isSignedOut(sessionId))
58
+ return;
48
59
  const expiresAt = readExpiry(jwt);
49
60
  if (!expiresAt)
50
61
  return;
@@ -73,7 +84,11 @@ export function createAtlasClient(options) {
73
84
  if (!response.ok)
74
85
  throw new Error('boot failed');
75
86
  const body = (await response.json());
76
- if (!body.session || !body.user) {
87
+ // A session this browser signed out of (the revoke never landed, so the
88
+ // refresh cookie still works): stay signed out; the guard re-tries the
89
+ // revoke in the background and drops the tombstone once it lands.
90
+ const refused = !!body.session && guard.refuse(body.session.id);
91
+ if (!body.session || !body.user || refused) {
77
92
  cache.clear();
78
93
  setState({ status: 'signed_out', user: null, session: null, claims: null, memberships: [] });
79
94
  scheduleRefresh();
@@ -130,19 +145,17 @@ export function createAtlasClient(options) {
130
145
  const fapiClient = new FapiClient({ publishableKey, baseUrl, fetchImpl: doFetch });
131
146
  const getProviderToken = (provider) => fetchProviderToken(fapiClient, provider);
132
147
  const signOut = async (options) => {
133
- const current = cache.peek();
134
- if (current) {
135
- const revoked = await call(`/v1/client/sessions/${current.sessionId}/revoke`, {
136
- method: 'POST',
137
- }).catch(() => undefined);
138
- // OIDC Front-Channel Logout: let the apps signed in through this session
139
- // clear theirs in this browser (hidden iframes, capped at 5 s). Best-effort.
140
- if (options?.frontchannel !== false)
141
- await runFrontChannelLogoutFromResponse(revoked);
142
- }
148
+ // Tombstone → revoke (retried once) → front-channel logout. With no cached
149
+ // token (a boot that carried no JWT) the store's session, or failing that
150
+ // `GET /v1/client`, names the session — the revoke works from the cookies.
151
+ const attempt = await guard.revoke(cache.peek()?.sessionId ?? state.session?.id ?? null, options);
143
152
  cache.clear();
144
153
  setState({ status: 'signed_out', user: null, session: null, claims: null, memberships: [] });
145
154
  scheduleRefresh();
155
+ // The server promoted a parked session on revoke: adopt it.
156
+ if (guard.promoted(attempt))
157
+ await reload();
158
+ return guard.settle(attempt, options);
146
159
  };
147
160
  const setActiveOrganization = async (organizationId) => {
148
161
  const current = cache.peek();
@@ -168,19 +181,41 @@ export function createAtlasClient(options) {
168
181
  * boots signed-out — exactly as intended.
169
182
  */
170
183
  const boot = async () => {
171
- const result = !isServer && typeof window !== 'undefined'
172
- ? readRedirectResult(window.location.search)
173
- : null;
184
+ const browser = !isServer && typeof window !== 'undefined';
185
+ const fromUrl = browser ? readRedirectResult(window.location.search) : null;
186
+ let result = fromUrl;
187
+ // This page may be the landing of a sign-in popup whose opener a
188
+ // Cross-Origin-Opener-Policy severed (`#atlas_popup_result=…`): relay the
189
+ // result to the opener and close. When no opener takes it (its tab is
190
+ // gone), finish the sign-in here like a redirect.
191
+ const landing = browser ? await completeOAuthPopupLanding().catch(() => null) : null;
192
+ if (landing && !landing.delivered) {
193
+ const outcome = mapOAuthPopupPayload(landing.payload);
194
+ if (outcome?.ticket && outcome.attemptId) {
195
+ result = { attemptId: outcome.attemptId, ticket: outcome.ticket };
196
+ }
197
+ else if (outcome?.continuationUrl) {
198
+ // A second factor / connect / provider error: the redirect flow's page.
199
+ window.location.replace(outcome.continuationUrl);
200
+ return;
201
+ }
202
+ }
203
+ let exchanged = false;
174
204
  if (result?.ticket) {
175
- await call('/v1/client/tickets/exchange', {
205
+ const response = await call('/v1/client/tickets/exchange', {
176
206
  method: 'POST',
177
207
  body: JSON.stringify({ attempt_id: result.attemptId, ticket: result.ticket }),
178
208
  }).catch(() => undefined);
209
+ exchanged = !!response?.ok;
179
210
  }
180
- if (result && typeof window !== 'undefined') {
211
+ if (fromUrl && browser) {
181
212
  window.history.replaceState({}, document.title, stripRedirectParams(window.location.href));
182
213
  }
183
214
  await reload();
215
+ // Signed in inside the Atlas popup: hand back to the waiting opener and
216
+ // close (a no-op in an ordinary tab).
217
+ if (exchanged)
218
+ void closeOAuthPopupAfterSignIn();
184
219
  };
185
220
  // `client` is referenced inside the mount seams; the arrows only run once the
186
221
  // `const` is initialised, so the self-reference is sound.
@@ -198,14 +233,23 @@ export function createAtlasClient(options) {
198
233
  mountSignUp: (el) => mountSignUpWidget(client, el),
199
234
  mountUserButton: (el) => mountUserButtonWidget(client, el),
200
235
  };
201
- // Clear the refresh timer WITHOUT revoking the session — the provider calls
202
- // this on unmount. `signOut()` would log the user out server-side, which is
236
+ // Another tab signed out of THIS session (its tombstone reached the shared
237
+ // store): drop the token and re-check, which refuses the session.
238
+ const stopWatching = guard.watch(() => state.session?.id ?? cache.peek()?.sessionId, () => {
239
+ cache.clear();
240
+ void reload();
241
+ });
242
+ // Clear the refresh timer, the sibling-tab watch and any scheduled background
243
+ // revoke re-try WITHOUT revoking the session — the provider calls this on
244
+ // unmount. `signOut()` would log the user out server-side, which is
203
245
  // emphatically not what unmounting a React/Vue/Solid tree should do.
204
246
  const dispose = () => {
205
247
  if (timer) {
206
248
  clearTimeout(timer);
207
249
  timer = null;
208
250
  }
251
+ stopWatching();
252
+ guard.dispose();
209
253
  };
210
254
  return { client, boot, dispose };
211
255
  }
@@ -225,7 +269,8 @@ export function AtlasProvider(props) {
225
269
  onMount(() => {
226
270
  void boot();
227
271
  });
228
- // The client's refresh timer is a resource that outlives a render; drop it
272
+ // The client's refresh timer, sibling-tab watch and background revoke
273
+ // re-tries outlive a render; drop them (stop + dispose the sign-out guard)
229
274
  // when the provider unmounts so a torn-down app does not keep polling.
230
275
  onCleanup(dispose);
231
276
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
package/dist/widgets.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import { type JSX } from 'solid-js';
2
2
  import type { AtlasClient } from './provider';
3
+ /**
4
+ * The en-US strings of the create-account form and the captcha, under the same
5
+ * catalog keys `@atlasauth/react` uses (`@atlasauth/localizations`).
6
+ */
7
+ export declare const SIGN_UP_TEXT: Record<string, string>;
3
8
  export declare function mountSignInWidget(client: AtlasClient, el: HTMLElement): () => void;
4
9
  export declare function mountSignUpWidget(client: AtlasClient, el: HTMLElement): () => void;
5
10
  export declare function mountUserButtonWidget(client: AtlasClient, el: HTMLElement): () => void;
package/dist/widgets.js CHANGED
@@ -1,7 +1,7 @@
1
- import { Show, createEffect, createSignal, onCleanup, onMount } from 'solid-js';
1
+ import { Show, createEffect, createMemo, createSignal, onCleanup, onMount, } from 'solid-js';
2
2
  import { isServer, render } from 'solid-js/web';
3
3
  import { h } from './h';
4
- import { FapiClient, advance, flowFromPending, nextStep, pollAttempt, shouldKeepPolling, } from '@atlasauth/js';
4
+ import { EMAIL_UNAVAILABLE_MESSAGE, FapiClient, advanceWithCaptcha, createCaptchaController, createSignUp, fetchInstanceSettings, flowFromPending, flowNeedsCaptcha, nextStep, offeredFirstFactors, pollAttempt, prepareFactor, shouldKeepPolling, signInCaptchaOptions, } from '@atlasauth/js';
5
5
  import { useAtlas } from './context';
6
6
  /** A labelled, UNCONTROLLED input — its value is read from the form's
7
7
  * `FormData` on submit, which sidesteps per-keystroke signal churn for a plain
@@ -12,11 +12,53 @@ function field(name, label, type = 'text') {
12
12
  h('input', { class: 'atlas-input', name, type }),
13
13
  ]);
14
14
  }
15
- /** Form-level (non-field) errors, rendered as an alert. */
15
+ /** The flow's errors, rendered as alerts. Field-scoped ones (e.g. a rejected
16
+ * password) are included: these forms have no per-field error slot, and an
17
+ * error the user never sees is a form they cannot get past. */
16
18
  function renderErrors(errors) {
17
- return errors
18
- .filter((error) => !error.param)
19
- .map((error) => h('p', { class: 'atlas-error', role: 'alert' }, error.message));
19
+ return errors.map((error) => h('p', { class: 'atlas-error', role: 'alert' }, error.message));
20
+ }
21
+ /**
22
+ * The en-US strings of the create-account form and the captcha, under the same
23
+ * catalog keys `@atlasauth/react` uses (`@atlasauth/localizations`).
24
+ */
25
+ export const SIGN_UP_TEXT = {
26
+ 'signUp.title': 'Sign up',
27
+ 'signUp.submit': 'Continue',
28
+ 'signUp.emailLabel': 'Email address',
29
+ 'signUp.passwordLabel': 'Password',
30
+ 'signUp.optionalField': '{label} (optional)',
31
+ 'signUp.selectPlaceholder': 'Select…',
32
+ 'signUp.consentAgree': 'I agree to the',
33
+ 'signUp.consentNotice': 'By continuing you agree to the',
34
+ 'signUp.terms': 'Terms of Service',
35
+ 'signUp.privacy': 'Privacy Policy',
36
+ 'signUp.and': 'and',
37
+ 'signUp.emailUnavailable': EMAIL_UNAVAILABLE_MESSAGE,
38
+ 'captcha.prompt': 'Complete the security check to continue.',
39
+ 'captcha.required': 'Please complete the security check, then try again.',
40
+ 'captcha.failed': "The security check didn't pass. Please try again.",
41
+ };
42
+ const t = (key, vars = {}) => (SIGN_UP_TEXT[key] ?? key).replace(/\{(\w+)\}/g, (m, name) => vars[name] ?? m);
43
+ /**
44
+ * The element a flow's captcha widget draws into, while `drawn()` says the flow
45
+ * needs one (see `createCaptchaController` in `@atlasauth/js`). The controller is
46
+ * attached once the element is in the document and detached when it leaves.
47
+ */
48
+ function captchaSlot(controller, drawn) {
49
+ return (() => {
50
+ if (!drawn())
51
+ return null;
52
+ const el = document.createElement('div');
53
+ el.className = 'atlas-captcha';
54
+ el.setAttribute('data-atlas-captcha', '');
55
+ queueMicrotask(() => {
56
+ if (el.isConnected)
57
+ controller.attach(el);
58
+ });
59
+ onCleanup(() => controller.attach(null));
60
+ return el;
61
+ });
20
62
  }
21
63
  /** The fields for the current server-driven step. The `unknown`/default branch
22
64
  * says so out loud rather than rendering a blank box the user cannot act on. */
@@ -39,6 +81,10 @@ function renderFields(kind) {
39
81
  return [field('code', 'Email code')];
40
82
  case 'collect_new_password':
41
83
  return [field('password', 'New password', 'password')];
84
+ case 'collect_captcha':
85
+ // §5 the server withheld the attempt until a captcha clears. Solving the
86
+ // widget resubmits the identifier on its own; the button retries.
87
+ return [h('p', { class: 'atlas-text' }, t('captcha.prompt'))];
42
88
  case 'await_oauth':
43
89
  return [h('p', 'Continue in the window that opened.')];
44
90
  case 'done':
@@ -47,41 +93,221 @@ function renderFields(kind) {
47
93
  return [h('p', { class: 'atlas-error' }, 'This step needs an updated app. Please reload.')];
48
94
  }
49
95
  }
50
- function renderSubmit(kind, busy) {
51
- if (kind === 'done' || kind === 'await_oauth')
96
+ /** The "this app can't send email" state, in place of a form that would need it. */
97
+ function emailUnavailable() {
98
+ return h('p', { class: 'atlas-error', role: 'alert' }, t('signUp.emailUnavailable'));
99
+ }
100
+ /** A first factor's strategy name — the server sends plain names; tolerate `{ strategy }` entries too. */
101
+ function strategyNames(strategies) {
102
+ return strategies
103
+ .map((s) => (typeof s === 'string' ? s : s?.strategy))
104
+ .filter((s) => typeof s === 'string');
105
+ }
106
+ /**
107
+ * The first-factor step: the factors this app can actually offer
108
+ * (`offeredFirstFactors` — no email code / link while it cannot deliver email).
109
+ * A password field when `password` is offered (or the server sent no list), a
110
+ * button per emailed factor, and the "can't send email" notice when nothing is
111
+ * left. Once a code was sent only the code field remains, so the submit is
112
+ * the email-code attempt.
113
+ */
114
+ function renderFirstFactor(offered, listed, sent, send) {
115
+ if (sent === 'email_code')
116
+ return [field('code', 'Email code')];
117
+ if (sent === 'email_link')
118
+ return [h('p', { class: 'atlas-text' }, 'Check your email for a sign-in link.')];
119
+ const out = [];
120
+ if (!listed || offered.includes('password'))
121
+ out.push(field('password', 'Password', 'password'));
122
+ if (offered.includes('email_code')) {
123
+ out.push(h('button', { class: 'atlas-link', type: 'button', onClick: () => send('email_code') }, 'Email me a code'));
124
+ }
125
+ if (offered.includes('email_link')) {
126
+ out.push(h('button', { class: 'atlas-link', type: 'button', onClick: () => send('email_link') }, 'Email me a sign-in link'));
127
+ }
128
+ if (!out.length)
129
+ out.push(emailUnavailable());
130
+ return out;
131
+ }
132
+ function renderSubmit(kind, busy, hidden = false) {
133
+ if (hidden || kind === 'done' || kind === 'await_oauth')
52
134
  return null;
53
135
  return h('button', { class: 'atlas-button', type: 'submit', disabled: busy }, 'Continue');
54
136
  }
137
+ /** One configured sign-up field's control (uncontrolled — read from `FormData`). */
138
+ function signUpControl(f) {
139
+ switch (f.type) {
140
+ case 'checkbox':
141
+ return h('input', { type: 'checkbox', name: f.key, value: 'true' });
142
+ case 'select':
143
+ return h('select', { class: 'atlas-input', name: f.key, required: f.required }, [
144
+ h('option', { value: '' }, f.placeholder ?? t('signUp.selectPlaceholder')),
145
+ ...f.options.map((o) => h('option', { value: o }, o)),
146
+ ]);
147
+ case 'textarea':
148
+ return h('textarea', {
149
+ class: 'atlas-input',
150
+ name: f.key,
151
+ rows: 3,
152
+ required: f.required,
153
+ placeholder: f.placeholder ?? undefined,
154
+ });
155
+ case 'radio':
156
+ case 'multiselect':
157
+ return h('span', { class: 'atlas-choices' }, f.options.map((o) => h('label', { class: 'atlas-choice' }, [
158
+ h('input', { type: f.type === 'radio' ? 'radio' : 'checkbox', name: f.key, value: o }),
159
+ o,
160
+ ])));
161
+ default: {
162
+ const type = ['email', 'tel', 'url', 'number', 'date'].includes(f.type) ? f.type : 'text';
163
+ return h('input', {
164
+ class: 'atlas-input',
165
+ type,
166
+ name: f.key,
167
+ required: f.required,
168
+ placeholder: f.placeholder ?? undefined,
169
+ });
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * The create-account step's fields: the instance's configured extra fields,
175
+ * email + password, and the legal-consent row. Re-rendered only when the
176
+ * settings change, so what the user typed survives a refused submit.
177
+ */
178
+ function renderSignUpFields(settings) {
179
+ const legal = settings?.legal;
180
+ const showLegal = !!legal && (!!legal.termsUrl || !!legal.privacyUrl);
181
+ const links = [];
182
+ if (legal?.termsUrl) {
183
+ links.push(h('a', { class: 'atlas-link', href: legal.termsUrl, target: '_blank', rel: 'noopener noreferrer' }, t('signUp.terms')));
184
+ }
185
+ if (legal?.privacyUrl) {
186
+ if (links.length)
187
+ links.push(` ${t('signUp.and')} `);
188
+ links.push(h('a', { class: 'atlas-link', href: legal.privacyUrl, target: '_blank', rel: 'noopener noreferrer' }, t('signUp.privacy')));
189
+ }
190
+ return [
191
+ ...(settings?.signUpFields ?? []).map((f) =>
192
+ // A choice group holds several inputs, so it can't sit inside one <label>.
193
+ h(f.type === 'radio' || f.type === 'multiselect' ? 'div' : 'label', { class: 'atlas-field' }, [
194
+ h('span', f.required ? f.label : t('signUp.optionalField', { label: f.label })),
195
+ signUpControl(f),
196
+ ])),
197
+ h('label', { class: 'atlas-field' }, [
198
+ h('span', t('signUp.emailLabel')),
199
+ h('input', { class: 'atlas-input', name: 'email', type: 'email', autocomplete: 'email', required: true }),
200
+ ]),
201
+ h('label', { class: 'atlas-field' }, [
202
+ h('span', t('signUp.passwordLabel')),
203
+ h('input', { class: 'atlas-input', name: 'password', type: 'password', autocomplete: 'new-password', required: true }),
204
+ ]),
205
+ showLegal
206
+ ? h('label', { class: 'atlas-consent' }, [
207
+ legal.required ? h('input', { type: 'checkbox', name: 'consent', value: 'true', required: true }) : null,
208
+ h('span', { class: 'atlas-text' }, [
209
+ t(legal.required ? 'signUp.consentAgree' : 'signUp.consentNotice'),
210
+ ' ',
211
+ ...links,
212
+ '.',
213
+ ]),
214
+ ])
215
+ : null,
216
+ ];
217
+ }
218
+ /** Read a form into values; repeated names (a multiselect) are comma-joined,
219
+ * the same encoding as React, the embed widget and the hosted page. */
220
+ function formValues(form) {
221
+ const values = {};
222
+ new FormData(form).forEach((value, key) => {
223
+ values[key] = key in values ? `${values[key]}, ${String(value)}` : String(value);
224
+ });
225
+ return values;
226
+ }
55
227
  /**
56
228
  * The server-driven sign-in / sign-up flow. Never decides what comes next: it
57
229
  * drives through `advance` (the driver owns the step→endpoint mapping) and
58
- * renders whatever `status` the server returned. `<SignIn>` and `<SignUp>` are
59
- * the same driver — only the title differs, exactly as in React and Vue.
230
+ * renders whatever `status` the server returned. In `sign-up` mode the first
231
+ * step is the create-account form, which POSTs `/v1/client/sign_ups`; from there
232
+ * it is the same driver (the emailed-code step, then the ticket exchange). Both
233
+ * draw the instance's captcha when it is required.
60
234
  */
61
235
  function Flow(props) {
62
236
  const client = props.client;
63
237
  const fapi = new FapiClient({ publishableKey: client.publishableKey, baseUrl: client.frontendApi });
64
238
  // Seeded from a redirect that returned mid-flow (OAuth owing a second
65
239
  // factor), so the user resumes at the demanded step instead of restarting.
66
- const [state, setState] = createSignal(flowFromPending(client.pendingAttempt));
240
+ const [state, setStateRaw] = createSignal(props.mode === 'sign-in' ? flowFromPending(client.pendingAttempt) : flowFromPending(null));
241
+ const [settings, setSettingsRaw] = createSignal(null);
242
+ // §5 the per-flow captcha, driven by the instance's settings so turning it on
243
+ // in the dashboard needs no code change. Configured synchronously with every
244
+ // state / settings change, before the view reads `drawn`.
245
+ const captcha = createCaptchaController();
246
+ const signUpCaptcha = createCaptchaController();
247
+ const [captchaDrawn, setCaptchaDrawn] = createSignal(false);
248
+ const [signUpCaptchaDrawn, setSignUpCaptchaDrawn] = createSignal(false);
249
+ let identifier = '';
250
+ const syncCaptcha = () => {
251
+ const current = settings();
252
+ const flow = state();
253
+ if (props.mode === 'sign-in') {
254
+ captcha.configure(signInCaptchaOptions(current?.captchaFlows.signIn, flow, () => submit({})));
255
+ }
256
+ else {
257
+ const signUpFlow = current?.captchaFlows.signUp;
258
+ signUpCaptcha.configure({ flow: signUpFlow, active: !flow.attempt && flowNeedsCaptcha(signUpFlow) });
259
+ }
260
+ setCaptchaDrawn(captcha.needed);
261
+ setSignUpCaptchaDrawn(signUpCaptcha.needed);
262
+ };
263
+ const setState = (next) => {
264
+ setStateRaw(next);
265
+ syncCaptcha();
266
+ };
267
+ if (!isServer) {
268
+ void fetchInstanceSettings(fapi).then((loaded) => {
269
+ if (!loaded)
270
+ return;
271
+ setSettingsRaw(loaded);
272
+ syncCaptcha();
273
+ });
274
+ }
275
+ onCleanup(() => {
276
+ captcha.destroy();
277
+ signUpCaptcha.destroy();
278
+ });
279
+ // A completion response carries a one-time ticket (§7.1). FAPI is
280
+ // cross-origin to the app and cannot set the cookie on its own response,
281
+ // so exchange the ticket over a request THEN re-boot, so the rest of the
282
+ // app sees a signed-in user — and no session token ever rode in a URL.
283
+ const finish = async (next) => {
284
+ setState(next);
285
+ if (next.attempt?.status === 'complete') {
286
+ if (next.ticket) {
287
+ await fapi.post('/v1/client/tickets/exchange', {
288
+ attempt_id: next.attempt.id,
289
+ ticket: next.ticket,
290
+ });
291
+ }
292
+ await client.reload();
293
+ }
294
+ };
67
295
  const submit = (values) => {
68
296
  void (async () => {
69
297
  setState((s) => ({ ...s, busy: true, errors: [] }));
70
- const next = await advance(fapi, state(), values);
71
- setState(next);
72
- // A completion response carries a one-time ticket (§7.1). FAPI is
73
- // cross-origin to the app and cannot set the cookie on its own response,
74
- // so exchange the ticket over a request THEN re-boot, so the rest of the
75
- // app sees a signed-in user — and no session token ever rode in a URL.
76
- if (next.attempt?.status === 'complete') {
77
- if (next.ticket) {
78
- await fapi.post('/v1/client/tickets/exchange', {
79
- attempt_id: next.attempt.id,
80
- ticket: next.ticket,
81
- });
82
- }
83
- await client.reload();
84
- }
298
+ const out = await advanceWithCaptcha(fapi, state(), values, { captcha, identifier, t });
299
+ identifier = out.identifier;
300
+ await finish(out.state);
301
+ })();
302
+ };
303
+ const create = (values) => {
304
+ void (async () => {
305
+ setState((s) => ({ ...s, busy: true, errors: [] }));
306
+ // The consent box is `required` when the instance requires agreement, so a
307
+ // submitted form always carries it then; without a requirement it is moot.
308
+ const { consent, ...rest } = values;
309
+ const agreed = settings()?.legal.required ? consent === 'true' : true;
310
+ await finish(await createSignUp(fapi, rest, { consent: agreed, captcha: signUpCaptcha, t }));
85
311
  })();
86
312
  };
87
313
  // §5.3 magic-link poll: a sign-in finished on another device. Restart on each
@@ -113,26 +339,67 @@ function Flow(props) {
113
339
  }, 2_000);
114
340
  });
115
341
  onCleanup(stopPolling);
116
- const step = () => {
342
+ // The step KIND, memoized, so the inputs are re-created only when the step
343
+ // changes — not on every busy/error update, which would wipe what was typed.
344
+ const kind = createMemo(() => {
345
+ const attempt = state().attempt;
346
+ if (!attempt)
347
+ return props.mode === 'sign-up' ? 'create_account' : 'collect_identifier';
348
+ return nextStep(attempt).kind;
349
+ });
350
+ // §email delivery: the first factors this app can offer, keyed as a string so
351
+ // the inputs are re-created only when the offer itself changes.
352
+ const firstFactor = createMemo(() => {
117
353
  const attempt = state().attempt;
118
- return attempt ? nextStep(attempt) : { kind: 'collect_identifier' };
354
+ const step = attempt ? nextStep(attempt) : null;
355
+ if (step?.kind !== 'collect_first_factor')
356
+ return '';
357
+ const listed = strategyNames(step.strategies ?? []);
358
+ const offered = offeredFirstFactors(listed, settings()?.emailDelivery);
359
+ return `${listed.length ? 'listed' : 'unlisted'}:${offered.join(',')}`;
360
+ });
361
+ const [emailSent, setEmailSent] = createSignal(null);
362
+ createEffect(() => {
363
+ kind();
364
+ setEmailSent(null);
365
+ });
366
+ const sendEmailFactor = (strategy) => {
367
+ void (async () => {
368
+ setState((s) => ({ ...s, busy: true, errors: [] }));
369
+ const next = await prepareFactor(fapi, state(), strategy);
370
+ setState(next);
371
+ if (!next.errors.length)
372
+ setEmailSent(strategy);
373
+ })();
119
374
  };
375
+ // §email delivery: a password sign-up needs a verification email; when the
376
+ // app cannot send one, say so instead of a form that cannot finish.
377
+ const signUpBlocked = () => kind() === 'create_account' && settings()?.emailDelivery?.passwordSignUp === false;
120
378
  return h('form', {
121
379
  class: 'atlas-card',
122
380
  onSubmit: (event) => {
123
381
  event.preventDefault();
124
- const form = event.currentTarget;
125
- const values = {};
126
- new FormData(form).forEach((value, key) => {
127
- values[key] = String(value);
128
- });
129
- submit(values);
382
+ const values = formValues(event.currentTarget);
383
+ if (kind() === 'create_account')
384
+ create(values);
385
+ else
386
+ submit(values);
130
387
  },
131
388
  }, [
132
389
  h('h1', { class: 'atlas-title' }, props.title),
133
390
  () => renderErrors(state().errors),
134
- () => renderFields(step().kind),
135
- () => renderSubmit(step().kind, state().busy),
391
+ () => {
392
+ if (kind() === 'create_account')
393
+ return signUpBlocked() ? emailUnavailable() : renderSignUpFields(settings());
394
+ if (kind() === 'collect_first_factor') {
395
+ const [listed, offered] = firstFactor().split(':');
396
+ return renderFirstFactor(offered ? offered.split(',') : [], listed === 'listed', emailSent(), sendEmailFactor);
397
+ }
398
+ return renderFields(kind());
399
+ },
400
+ captchaSlot(signUpCaptcha, () => kind() === 'create_account' && !signUpBlocked() && signUpCaptchaDrawn()),
401
+ captchaSlot(captcha, () => (kind() === 'collect_identifier' || kind() === 'collect_captcha') && captchaDrawn()),
402
+ () => renderSubmit(kind(), state().busy, signUpBlocked() || emailSent() === 'email_link'),
136
403
  ]);
137
404
  }
138
405
  /** The signed-in user's avatar + a menu whose only built-in action is sign-out
@@ -168,10 +435,10 @@ function UserButtonView(client) {
168
435
  // --- Mount seams, called by the client's `mountX` methods. `render` returns the
169
436
  // disposer that `onCleanup` later invokes to tear the nested root down. ---
170
437
  export function mountSignInWidget(client, el) {
171
- return render(() => Flow({ client, title: 'Sign in' }), el);
438
+ return render(() => Flow({ client, title: 'Sign in', mode: 'sign-in' }), el);
172
439
  }
173
440
  export function mountSignUpWidget(client, el) {
174
- return render(() => Flow({ client, title: 'Sign up' }), el);
441
+ return render(() => Flow({ client, title: 'Sign up', mode: 'sign-up' }), el);
175
442
  }
176
443
  export function mountUserButtonWidget(client, el) {
177
444
  return render(() => UserButtonView(client), el);
@@ -1 +1 @@
1
- {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../src/widgets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../src/widgets.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasauth/solid",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  }
12
12
  },
13
13
  "dependencies": {
14
- "@atlasauth/js": "0.5.0"
14
+ "@atlasauth/js": "0.8.0"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "solid-js": ">=1.8"
@@ -28,7 +28,8 @@
28
28
  },
29
29
  "files": [
30
30
  "dist",
31
- "README.md"
31
+ "README.md",
32
+ "CHANGELOG.md"
32
33
  ],
33
34
  "repository": {
34
35
  "type": "git",