@iaurelius/accounts-expo 0.4.0 → 0.5.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/README.md +73 -5
- package/dist/core.d.ts +18 -11
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +355 -73
- package/dist/core.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/react.d.ts +7 -0
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -0
- package/dist/react.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -82,15 +82,76 @@ page's bot check (Turnstile) cannot run on a native screen: the per-address and
|
|
|
82
82
|
apply.
|
|
83
83
|
|
|
84
84
|
- Both steps throw an `OAuthError`. A refusal keeps the application's code (`INVALID_OTP`,
|
|
85
|
-
`ACCOUNT_LOCKED`, `ACCOUNT_OTP_LIMITED`, `
|
|
85
|
+
`ACCOUNT_LOCKED`, `ACCOUNT_OTP_LIMITED`, `sign_in_page_required`…). A limit without a code of its own
|
|
86
86
|
is `too_many_requests` (`status` 429), and a `5xx` or no answer `temporarily_unavailable`; both carry
|
|
87
87
|
`retryAfter` in seconds when the application says how long to wait. None of them touches the session
|
|
88
88
|
the device already had.
|
|
89
|
+
- `sign_in_page_required` is an account with a step your screen cannot show (a passkey the application
|
|
90
|
+
requires, an invitation to accept): open the hosted page with `signIn()`.
|
|
89
91
|
- The code for the session waits up to a minute, like the hosted sign-in's code exchange, and is sent
|
|
90
92
|
once: the application spends it (and issues a refresh token) as soon as it arrives, so giving up after
|
|
91
93
|
10 seconds would waste it and sending it again would only be refused.
|
|
92
94
|
- If the person signs out while the code is on its way, they stay signed out and the refresh token its
|
|
93
95
|
answer brings is revoked. A refresh of the session before, still on its way, does not bring that one back.
|
|
96
|
+
- Signing in while already signed in ("use another account") replaces the session: once the new one is on the
|
|
97
|
+
device, the refresh token of the one before is revoked, so it does not stay alive at your application.
|
|
98
|
+
|
|
99
|
+
### Organizations
|
|
100
|
+
|
|
101
|
+
Where the application has organizations, a person who belongs to several chooses one when signing in,
|
|
102
|
+
and can change it later. Both happen on your own screens, with no browser. The organizations are the
|
|
103
|
+
ones the person can use your app in: those that have your API (your `audience`) and where they have a
|
|
104
|
+
role in it. Pass `audience` to `<AccountsProvider>`: without it there is no list.
|
|
105
|
+
|
|
106
|
+
**Choosing one to sign in.** `signInWithEmailCode` does not sign in yet: it resolves with
|
|
107
|
+
`isSignedIn: false` and the list in `organizationChoice`. Show it and call `chooseOrganization`:
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
const { organizationChoice, signInWithEmailCode, chooseOrganization } = useAuth();
|
|
111
|
+
|
|
112
|
+
await signInWithEmailCode(email, code);
|
|
113
|
+
// organizationChoice: [{ slug: "acme", name: "Acme", role: "editor", orgRole: "member" }, …] or null
|
|
114
|
+
|
|
115
|
+
{organizationChoice?.map((o) => (
|
|
116
|
+
<Button key={o.slug} title={o.name} onPress={() => chooseOrganization(o.slug)} />
|
|
117
|
+
))}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
- The person has 5 minutes to choose, and each sign-in takes one choice. A refusal
|
|
121
|
+
(`organization_not_available`, `invalid_continuation` once the time is up) ends that sign-in and
|
|
122
|
+
`organizationChoice` goes back to `null`: start again with a new code. A `429`, a `5xx` or no answer
|
|
123
|
+
leave the choice open to try again; if the application had already taken the choice (its answer was
|
|
124
|
+
lost, or it failed on the way), that second try is refused (`invalid_continuation`), nothing of the
|
|
125
|
+
first is left alive, and the person starts again.
|
|
126
|
+
- With one organization, or none, `signInWithEmailCode` signs in as before.
|
|
127
|
+
- `signOut()` drops a choice that is waiting. The list is kept in memory only, never on the device.
|
|
128
|
+
- An application that does not offer the choice yet answers as it did: `signInWithEmailCode` throws
|
|
129
|
+
`organization_required`, and the hosted page (`signIn()`) is where to choose.
|
|
130
|
+
|
|
131
|
+
**Changing it later.** `organization` is the one the session is in, `listOrganizations()` the ones to
|
|
132
|
+
offer, and `switchOrganization(slug)` changes to another:
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
const { organization, listOrganizations, switchOrganization } = useAuth();
|
|
136
|
+
|
|
137
|
+
const all = await listOrganizations(); // [{ slug, name, role, orgRole }, …]
|
|
138
|
+
await switchOrganization("globex"); // new tokens; getToken() gives one for globex from now on
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
- The device gets new tokens for that organization, and the ones it had stop working. The person and
|
|
142
|
+
their profile are the same. Asking for the organization the session is already in asks nothing.
|
|
143
|
+
A `getToken({ forceRefresh: true })` within 30 seconds of the change gives the token the change
|
|
144
|
+
brought, as after a refresh: a 401 for a request sent just before it is not a reason to renew again.
|
|
145
|
+
- A refusal (`organization_not_available`: not one of theirs with your app; `sign_in_page_required`)
|
|
146
|
+
throws and changes nothing.
|
|
147
|
+
- If no answer comes, or the application asks to wait (`429`, `5xx`), it throws
|
|
148
|
+
`temporarily_unavailable` (or `too_many_requests`) and the person stays signed in where they were.
|
|
149
|
+
The change stays asked for, because the application may have made it already: the SDK finishes it at
|
|
150
|
+
the next `getToken()`, the next `switchOrganization` or the next start of the app, with the tokens the
|
|
151
|
+
device has. Until then `getToken()` gives the token it has while it lasts.
|
|
152
|
+
- `signOut()` during a change, or after one that never got its answer, leaves the person signed out and
|
|
153
|
+
nothing of the change alive: revoking the token the device has ends, in the application, what it made
|
|
154
|
+
instead of it. Signing in over such a session does the same, once the new session is kept.
|
|
94
155
|
|
|
95
156
|
### Tokens and the network
|
|
96
157
|
|
|
@@ -98,8 +159,10 @@ apply.
|
|
|
98
159
|
lasts, `getToken()` gives it at once and the refresh goes on in the background, so a network that hangs holds
|
|
99
160
|
no call; once it has expired, `getToken()` waits for the refresh. When your API refuses one (a 401), ask once
|
|
100
161
|
with `getToken({ forceRefresh: true })`:
|
|
101
|
-
- Several refusals of the same token make a single refresh, and a token that a forced
|
|
102
|
-
30 seconds ago is given again
|
|
162
|
+
- Several refusals of the same token make a single refresh, and a token that a refresh (forced, or the one
|
|
163
|
+
in the background) gave less than 30 seconds ago is given again: an API that always answers 401 cannot use
|
|
164
|
+
up the application's limit, and a 401 for the token you held just before a refresh replaced it gets the
|
|
165
|
+
new one at once.
|
|
103
166
|
- It resolves to `null` only when the session is over (then sign the person out). If no new token can be had
|
|
104
167
|
now (no network, or the application asked to wait), it throws an `OAuthError` (exported by this package) with `error: "temporarily_unavailable"`:
|
|
105
168
|
the person is still signed in; try again later.
|
|
@@ -109,8 +172,12 @@ apply.
|
|
|
109
172
|
except those to the token endpoint:
|
|
110
173
|
- A refresh that gets no answer in 8 seconds is sent once more, at once and identical, and that second try
|
|
111
174
|
waits up to a minute. When the application processes a refresh it rotates the refresh token, and it answers
|
|
112
|
-
the old one again
|
|
113
|
-
|
|
175
|
+
the old one again with the same tokens for two minutes. Sending it again early is what keeps the second
|
|
176
|
+
try within that time.
|
|
177
|
+
- The new refresh token is kept on the device as soon as the answer arrives, before the profile is read
|
|
178
|
+
again: an app that iOS or Android ends right then starts next time with a token that still refreshes.
|
|
179
|
+
And if the answer never arrived at all (the phone was locked while it was on its way), the application
|
|
180
|
+
takes the token the device still has, however late, as long as nobody has used the one it never got.
|
|
114
181
|
- The sign-in's code exchange waits up to a minute and is sent once more if no answer comes. A code sent twice
|
|
115
182
|
is refused and the refresh token it issued is revoked, so none is left alive on no device.
|
|
116
183
|
|
|
@@ -121,6 +188,7 @@ apply.
|
|
|
121
188
|
- **On the device:** tokens stay in SecureStore, split in parts because Android is unreliable past 2 KB.
|
|
122
189
|
- **Revocation:** a person who is banned or signed out everywhere is out at the next refresh. Sign-out revokes the refresh token.
|
|
123
190
|
- **Refresh:** only a refusal for good signs the person out: a `4xx` with an OAuth error, such as `invalid_grant` (revoked, banned), `invalid_client`, `invalid_scope` or `invalid_target` (your `audience` changed). A `429` (many phones behind one carrier IP), a `5xx`, no answer or a `4xx` without an OAuth error (a firewall's page) keeps the session and its refresh token; the access token serves while it lasts, and no refresh is tried again before the server's `Retry-After`. A refreshed ID token must be the same person (`iss`, `sub`, `aud`), and userinfo's `sub` must match.
|
|
191
|
+
- **Organizations:** the list comes only after the emailed code is verified. What finishes a sign-in that had one to choose is used once, lasts 5 minutes, and is kept in memory, never on the device. A change of organization is a new sign-in of the app, and the one it replaces ends: the refresh token the device had no longer refreshes. Its new ID token must be the same person (`iss`, `sub`, `aud`).
|
|
124
192
|
- **Sign-out during a refresh or a sign-in:** a refresh that was on its way when the person signed out (or signed in again) does not bring the old session back, and a sign-in (hosted page or your own screen) that was on its way when they signed out does not sign them in: its answer is dropped and its refresh token revoked. A sign-in answer whose ID token is not for that sign-in is refused, and its refresh token revoked too.
|
|
125
193
|
- **Bundle size:** the package uses no Node APIs and no WebCrypto (`expo-crypto` instead), and does not pull jose into your bundle.
|
|
126
194
|
|
package/dist/core.d.ts
CHANGED
|
@@ -18,11 +18,22 @@ export type Crypto = {
|
|
|
18
18
|
randomString(bytes: number): string;
|
|
19
19
|
sha256Base64Url(input: string): Promise<string>;
|
|
20
20
|
};
|
|
21
|
+
/** An organization the person can use this app in: `role` is theirs in the app's product, `orgRole` in the organization. */
|
|
22
|
+
export type Organization = {
|
|
23
|
+
slug: string;
|
|
24
|
+
name: string;
|
|
25
|
+
role: string;
|
|
26
|
+
orgRole: string;
|
|
27
|
+
};
|
|
21
28
|
export type AccountsState = {
|
|
22
29
|
isLoaded: boolean;
|
|
23
30
|
isSignedIn: boolean;
|
|
24
31
|
user: SessionUser | null;
|
|
25
32
|
sessionId: string | null;
|
|
33
|
+
/** The organization the session is in (its slug), when the access token says so: one for your `audience`. */
|
|
34
|
+
organization: string | null;
|
|
35
|
+
/** A sign-in on your own screen that has an organization left to choose: the ones to offer (chooseOrganization). */
|
|
36
|
+
organizationChoice: Organization[] | null;
|
|
26
37
|
};
|
|
27
38
|
export type ClientOptions = {
|
|
28
39
|
publishableKey: string;
|
|
@@ -54,24 +65,20 @@ export declare function createAccountsClient(o: ClientOptions): {
|
|
|
54
65
|
load(): Promise<AccountsState>;
|
|
55
66
|
/** Opens the hosted page; resolves once the person is back (signed in, or unchanged if they closed it). */
|
|
56
67
|
signIn: () => Promise<AccountsState>;
|
|
57
|
-
/** Your own sign-in screen instead of the hosted page: a code to the email, then the code. */
|
|
68
|
+
/** Your own sign-in screen instead of the hosted page: a code to the email, then the code, then (in several organizations) which one. */
|
|
58
69
|
sendEmailCode: (email: string) => Promise<{
|
|
59
70
|
waitlist: boolean;
|
|
60
71
|
}>;
|
|
61
72
|
signInWithEmailCode: (email: string, code: string) => Promise<AccountsState>;
|
|
73
|
+
chooseOrganization: (slug: string) => Promise<AccountsState>;
|
|
62
74
|
/** The same, on "create an account". */
|
|
63
75
|
signUp: () => Promise<AccountsState>;
|
|
64
|
-
|
|
65
|
-
* An access token for your API; null when signed out. One about to expire is refreshed: while it still lasts it
|
|
66
|
-
* is given at once and the refresh goes on in the background; once expired, the call waits for the refresh.
|
|
67
|
-
* forceRefresh: a new one even if this one still lasts (your API just refused it). Compare-and-refresh: several
|
|
68
|
-
* refusals of the same token make one refresh, and a token a forced refresh gave less than 30 s ago is given
|
|
69
|
-
* again instead of rotating once more. If no new token can be had now (no answer, a 429), it throws an
|
|
70
|
-
* OAuthError (temporarily_unavailable) and the session stays; it resolves to null only when the session is over.
|
|
71
|
-
*/
|
|
72
|
-
getToken(opts?: {
|
|
76
|
+
getToken: (opts?: {
|
|
73
77
|
forceRefresh?: boolean;
|
|
74
|
-
})
|
|
78
|
+
}) => Promise<string | null>;
|
|
79
|
+
/** The person's organizations for this app, and the session in another of them, without the hosted page. */
|
|
80
|
+
listOrganizations: () => Promise<Organization[]>;
|
|
81
|
+
switchOrganization: (slug: string) => Promise<AccountsState>;
|
|
75
82
|
/** Out here (the refresh token revoked) and, unless told otherwise, on the hosted pages too. */
|
|
76
83
|
signOut(opts?: {
|
|
77
84
|
endSession?: boolean;
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/core.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// The Expo SDK's logic, without Expo: sign-in on the hosted page in an authentication session (PKCE
|
|
2
|
-
// S256, state, nonce, RFC 9207's iss)
|
|
3
|
-
//
|
|
4
|
-
//
|
|
2
|
+
// S256, state, nonce, RFC 9207's iss) or on the app's own screens (a code to the email, an organization to
|
|
3
|
+
// choose), the session kept in a secure store, an access token that refreshes itself, changing organization,
|
|
4
|
+
// and sign-out. The platform's parts (store, browser, crypto) are passed in: src/expo.ts gives Expo's; the
|
|
5
|
+
// tests give Node's and the platform's own server.
|
|
5
6
|
import { OAuthError, authorizationUrl, endSessionUrl, exchangeCode, fetchUserInfo, issuerFromPublishableKey, readIdToken, refreshBackoff, refreshTokens, retryAfterOf, revokeToken, sameIdentity, sessionEnded, userFromClaims, } from "@iaurelius/accounts/oidc";
|
|
6
7
|
const now = () => Math.floor(Date.now() / 1000);
|
|
7
8
|
/**
|
|
@@ -20,7 +21,7 @@ const REFRESH_FIRST_TRY_MS = 8_000;
|
|
|
20
21
|
* alive on no device and the person would need a new code.
|
|
21
22
|
*/
|
|
22
23
|
const TOKEN_TIMEOUT_MS = 60_000;
|
|
23
|
-
/** A forced refresh (getToken({ forceRefresh: true })) at most this often: the token
|
|
24
|
+
/** A forced refresh (getToken({ forceRefresh: true })) at most this often after any refresh: the token that one got is given again. */
|
|
24
25
|
const FORCE_COOLDOWN_MS = 30_000;
|
|
25
26
|
/** fetch that gives up after `ms` (React Native's has no timeout of its own). */
|
|
26
27
|
function withTimeout(f, ms) {
|
|
@@ -89,6 +90,41 @@ export function queryOf(url) {
|
|
|
89
90
|
}
|
|
90
91
|
return out;
|
|
91
92
|
}
|
|
93
|
+
/** "Not now": no answer, a limit, a failure of the application, a change already under way. Anything else it refused for good. */
|
|
94
|
+
const notNow = (e) => e instanceof OAuthError && (e.status === 429 || e.status === 408 || e.status >= 500 || e.error === "switch_in_progress");
|
|
95
|
+
/** The organizations of an answer of the application (the sign-in's list, userinfo's `orgs`). */
|
|
96
|
+
function organizationsOf(v) {
|
|
97
|
+
if (!Array.isArray(v))
|
|
98
|
+
return [];
|
|
99
|
+
const out = [];
|
|
100
|
+
for (const x of v) {
|
|
101
|
+
if (!x || typeof x.slug !== "string" || !x.slug)
|
|
102
|
+
continue;
|
|
103
|
+
out.push({ slug: x.slug, name: typeof x.name === "string" && x.name ? x.name : x.slug, role: typeof x.role === "string" ? x.role : "", orgRole: typeof x.org_role === "string" ? x.org_role : "" });
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
/** The organization an access token is for (`org_slug`), if it is a JWT that says so. */
|
|
108
|
+
function organizationOf(accessToken) {
|
|
109
|
+
try {
|
|
110
|
+
const slug = readIdToken(accessToken).org_slug;
|
|
111
|
+
return typeof slug === "string" && slug ? slug : null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** The token endpoint's answer, as the application's native routes relay it. */
|
|
118
|
+
function tokenSet(t) {
|
|
119
|
+
if (typeof t.access_token !== "string")
|
|
120
|
+
throw new OAuthError("invalid_response", "No access token.");
|
|
121
|
+
return {
|
|
122
|
+
accessToken: t.access_token,
|
|
123
|
+
expiresAt: now() + (typeof t.expires_in === "number" ? t.expires_in : 300),
|
|
124
|
+
...(typeof t.refresh_token === "string" && { refreshToken: t.refresh_token }),
|
|
125
|
+
...(typeof t.id_token === "string" && { idToken: t.id_token }),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
92
128
|
export function createAccountsClient(o) {
|
|
93
129
|
const issuer = issuerFromPublishableKey(o.publishableKey);
|
|
94
130
|
const fetch = withTimeout(o.fetch, o.requestTimeoutMs ?? 10_000);
|
|
@@ -100,8 +136,13 @@ export function createAccountsClient(o) {
|
|
|
100
136
|
const codeCreds = { ...creds, fetch: sentTwiceIfUnanswered(longest, longest) };
|
|
101
137
|
const store = chunked(o.storage);
|
|
102
138
|
const key = `accounts.${o.clientId.replace(/[^A-Za-z0-9._-]/g, "_")}`;
|
|
139
|
+
// A change of organization that is not settled yet (below, switchOrganization): the one asked for.
|
|
140
|
+
const switchKey = `${key}.switch`;
|
|
141
|
+
let switchTo = null;
|
|
142
|
+
// A sign-in on the app's own screen with an organization left to choose: in memory only (it lasts 5 minutes).
|
|
143
|
+
let choice = null;
|
|
103
144
|
let session = null;
|
|
104
|
-
let state = { isLoaded: false, isSignedIn: false, user: null, sessionId: null };
|
|
145
|
+
let state = { isLoaded: false, isSignedIn: false, user: null, sessionId: null, organization: null, organizationChoice: null };
|
|
105
146
|
const listeners = new Set();
|
|
106
147
|
function publish(loaded = true) {
|
|
107
148
|
let user = null;
|
|
@@ -111,18 +152,31 @@ export function createAccountsClient(o) {
|
|
|
111
152
|
user = userFromClaims({ ...c, ...session.u, sub: c.sub });
|
|
112
153
|
sid = typeof c.sid === "string" ? c.sid : null;
|
|
113
154
|
}
|
|
114
|
-
state = { isLoaded: loaded, isSignedIn: !!session, user, sessionId: sid };
|
|
155
|
+
state = { isLoaded: loaded, isSignedIn: !!session, user, sessionId: sid, organization: session ? organizationOf(session.at) : null, organizationChoice: choice ? choice.organizations : null };
|
|
115
156
|
for (const l of listeners)
|
|
116
157
|
l(state);
|
|
117
158
|
}
|
|
159
|
+
// One write to the device at a time, in the order they were asked for. expo-secure-store keeps that order
|
|
160
|
+
// itself (one serial queue); a store that does not could run the removal of a sign-out ahead of the write
|
|
161
|
+
// of a refresh, or of a sign-in, that was still saving, and leave that session on the device.
|
|
162
|
+
let writing = Promise.resolve();
|
|
118
163
|
async function save(s) {
|
|
119
164
|
session = s;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
165
|
+
const write = writing.then(() => (s ? store.set(key, JSON.stringify(s)) : store.remove(key)));
|
|
166
|
+
writing = write.catch(() => undefined); // a write that fails is its caller's error, not the next write's
|
|
167
|
+
await write;
|
|
168
|
+
// No session, no change of organization to settle.
|
|
169
|
+
if (!s)
|
|
170
|
+
await noteSwitch(null);
|
|
124
171
|
publish();
|
|
125
172
|
}
|
|
173
|
+
/** The change of organization asked for and not settled yet, on record on the device: a write like any other, in its turn. */
|
|
174
|
+
async function noteSwitch(slug) {
|
|
175
|
+
switchTo = slug;
|
|
176
|
+
const write = writing.then(() => (slug ? o.storage.set(switchKey, slug) : o.storage.remove(switchKey)));
|
|
177
|
+
writing = write.catch(() => undefined);
|
|
178
|
+
await write;
|
|
179
|
+
}
|
|
126
180
|
/** The profile from userinfo, only if it is about `sub` (the ID token's person). */
|
|
127
181
|
async function profile(accessToken, sub) {
|
|
128
182
|
const c = await fetchUserInfo({ issuer, accessToken, fetch, sub });
|
|
@@ -151,8 +205,10 @@ export function createAccountsClient(o) {
|
|
|
151
205
|
await revokeToken(creds, { token: t.refreshToken, hint: "refresh_token" });
|
|
152
206
|
return false;
|
|
153
207
|
};
|
|
154
|
-
// The last
|
|
155
|
-
|
|
208
|
+
// The last refresh: the token it got, and when (compare-and-refresh, H-X04). Any refresh, not only a forced
|
|
209
|
+
// one: the API refuses the token an app was given before a refresh in the background replaced it, and what
|
|
210
|
+
// that app is asking for is the one that refresh got.
|
|
211
|
+
let latest = { to: "", at: 0 };
|
|
156
212
|
// One refresh at a time: two screens asking for a token at once share it (the refresh token rotates).
|
|
157
213
|
let refreshing = null;
|
|
158
214
|
/**
|
|
@@ -204,12 +260,23 @@ export function createAccountsClient(o) {
|
|
|
204
260
|
return null;
|
|
205
261
|
}
|
|
206
262
|
const it = t.idToken ?? s.it;
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const next = { at: t.accessToken, rt: t.refreshToken ?? s.rt, it, exp: t.expiresAt, u };
|
|
263
|
+
// The new refresh token goes on the device before anything else is asked: the application has
|
|
264
|
+
// already rotated the one the device holds, and an app suspended or ended while the profile was on
|
|
265
|
+
// its way (a phone locked, 7-nov-2026) came back with a token that no longer refreshed.
|
|
266
|
+
const next = { at: t.accessToken, rt: t.refreshToken ?? s.rt, it, exp: t.expiresAt, u: s.u };
|
|
267
|
+
// Noted before it is saved: from that moment the session has the new token, and a forced refresh
|
|
268
|
+
// that arrives while it is being written, or while the profile is read, is answered with it.
|
|
269
|
+
latest = { to: next.at, at: Date.now() };
|
|
211
270
|
await save(next);
|
|
212
|
-
|
|
271
|
+
const u = await profile(t.accessToken, readIdToken(it).sub);
|
|
272
|
+
// Signed out, or signed in again, meanwhile: that stands, and took the token stored above with it.
|
|
273
|
+
if (started !== epoch || session !== next)
|
|
274
|
+
return session;
|
|
275
|
+
if (!u)
|
|
276
|
+
return next;
|
|
277
|
+
const named = { ...next, u };
|
|
278
|
+
await save(named);
|
|
279
|
+
return named;
|
|
213
280
|
}
|
|
214
281
|
finally {
|
|
215
282
|
refreshing = null;
|
|
@@ -229,14 +296,15 @@ export function createAccountsClient(o) {
|
|
|
229
296
|
throw new OAuthError("invalid_id_token", "The ID token is not for this sign-in.");
|
|
230
297
|
}
|
|
231
298
|
/**
|
|
232
|
-
* A request to the application's native
|
|
233
|
-
*
|
|
234
|
-
* the first request that reaches it, so a second one would
|
|
299
|
+
* A request to the application's native routes (no browser). The code for the session, the organization chosen
|
|
300
|
+
* and a change of organization wait as long as a code exchange (TOKEN_TIMEOUT_MS), and are sent once: the
|
|
301
|
+
* application spends the code (and the continuation) on the first request that reaches it, so a second one would
|
|
302
|
+
* only be refused. Asking for the code to be mailed has the ordinary wait.
|
|
235
303
|
*/
|
|
236
|
-
async function
|
|
304
|
+
async function nativeRequest(path, body) {
|
|
237
305
|
let res;
|
|
238
306
|
try {
|
|
239
|
-
res = await (path === "
|
|
307
|
+
res = await (path === "email-code" ? fetch : longest)(`${issuer}/api/native/${path}`, {
|
|
240
308
|
method: "POST",
|
|
241
309
|
headers: { "content-type": "application/json", accept: "application/json" },
|
|
242
310
|
body: JSON.stringify({ client_id: o.clientId, ...body }),
|
|
@@ -245,18 +313,24 @@ export function createAccountsClient(o) {
|
|
|
245
313
|
catch (e) {
|
|
246
314
|
throw new OAuthError("temporarily_unavailable", `Could not reach ${issuer}: ${e?.message ?? e}`, 503);
|
|
247
315
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
316
|
+
return { res, data: (await res.json().catch(() => ({}))) };
|
|
317
|
+
}
|
|
318
|
+
/** A refusal of those routes, with the application's code. Never anything else of the answer: it may carry a continuation. */
|
|
319
|
+
function nativeError(res, data) {
|
|
320
|
+
// A 429 or a 5xx without the application's code (Better Auth's limiter answers {"message": …}) is "not now", with
|
|
321
|
+
// its Retry-After: too_many_requests (the application's own code for a limit) or temporarily_unavailable.
|
|
322
|
+
const code = typeof data.code === "string" ? data.code
|
|
323
|
+
: typeof data.error === "string" ? data.error
|
|
324
|
+
: res.status === 429 ? "too_many_requests"
|
|
325
|
+
: res.status >= 500 ? "temporarily_unavailable"
|
|
326
|
+
: "invalid_response";
|
|
327
|
+
const message = typeof data.message === "string" ? data.message : typeof data.error_description === "string" ? data.error_description : undefined;
|
|
328
|
+
return new OAuthError(code, message, res.status, retryAfterOf(res.headers));
|
|
329
|
+
}
|
|
330
|
+
async function nativeCall(path, body) {
|
|
331
|
+
const { res, data } = await nativeRequest(path, body);
|
|
332
|
+
if (!res.ok)
|
|
333
|
+
throw nativeError(res, data);
|
|
260
334
|
return data;
|
|
261
335
|
}
|
|
262
336
|
/** The app's own sign-in screen, step 1: a code to that email. `waitlist` when the application takes
|
|
@@ -267,21 +341,67 @@ export function createAccountsClient(o) {
|
|
|
267
341
|
}
|
|
268
342
|
/**
|
|
269
343
|
* Step 2: the code, for the session. Someone new signs up the same way where the application is public. A refusal,
|
|
270
|
-
* a 429, a 5xx or no answer throws and leaves whatever session the device had as it was.
|
|
344
|
+
* a 429, a 5xx or no answer throws and leaves whatever session the device had as it was. A person in several
|
|
345
|
+
* organizations is not signed in yet: `organizationChoice` (in the state this resolves to) lists them, and
|
|
346
|
+
* chooseOrganization finishes the sign-in.
|
|
271
347
|
*/
|
|
272
348
|
async function signInWithEmailCode(email, code) {
|
|
273
349
|
const started = epoch;
|
|
274
350
|
const nonce = o.crypto.randomString(24);
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
351
|
+
const { res, data } = await nativeRequest("token", { email, code, nonce, resource: o.audience });
|
|
352
|
+
const offered = res.status === 409 && data.code === "organization_required" ? organizationsOf(data.organizations) : [];
|
|
353
|
+
if (offered.length && typeof data.continuation === "string" && data.continuation) {
|
|
354
|
+
// Signed out, or signed in, while the code was on its way: that stands (the application forgets this one by itself).
|
|
355
|
+
if (started !== epoch)
|
|
356
|
+
return state;
|
|
357
|
+
choice = { continuation: data.continuation, nonce, organizations: offered };
|
|
358
|
+
publish();
|
|
359
|
+
return state;
|
|
360
|
+
}
|
|
361
|
+
if (!res.ok)
|
|
362
|
+
throw nativeError(res, data);
|
|
363
|
+
return adopt(started, tokenSet(data), nonce);
|
|
364
|
+
}
|
|
365
|
+
// One request per continuation: the application takes it once, and a second one ends what the first got.
|
|
366
|
+
let choosing = null;
|
|
367
|
+
/**
|
|
368
|
+
* Step 3, only with `organizationChoice`: the organization (its slug), for the session. A refusal throws and the
|
|
369
|
+
* sign-in is over (the application takes each choice once: start again with a new code); a 429, a 5xx or no
|
|
370
|
+
* answer throws and leaves the choice open for another try.
|
|
371
|
+
*/
|
|
372
|
+
function chooseOrganization(slug) {
|
|
373
|
+
const c = choice;
|
|
374
|
+
if (!c)
|
|
375
|
+
return Promise.reject(new OAuthError("invalid_request", "There is no sign-in waiting for an organization."));
|
|
376
|
+
choosing ??= (async () => {
|
|
377
|
+
const started = epoch;
|
|
378
|
+
try {
|
|
379
|
+
const { res, data } = await nativeRequest("token", { continuation: c.continuation, organization: slug });
|
|
380
|
+
if (!res.ok) {
|
|
381
|
+
const e = nativeError(res, data);
|
|
382
|
+
if (notNow(e))
|
|
383
|
+
throw e;
|
|
384
|
+
// Refused for good: that continuation is spent.
|
|
385
|
+
if (choice === c)
|
|
386
|
+
choice = null;
|
|
387
|
+
publish();
|
|
388
|
+
throw e;
|
|
389
|
+
}
|
|
390
|
+
if (choice === c)
|
|
391
|
+
choice = null;
|
|
392
|
+
try {
|
|
393
|
+
return await adopt(started, tokenSet(data), c.nonce);
|
|
394
|
+
}
|
|
395
|
+
catch (e) {
|
|
396
|
+
publish();
|
|
397
|
+
throw e;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
finally {
|
|
401
|
+
choosing = null;
|
|
402
|
+
}
|
|
403
|
+
})();
|
|
404
|
+
return choosing;
|
|
285
405
|
}
|
|
286
406
|
/**
|
|
287
407
|
* A sign-in's tokens become the device's session. Their ID token has to be for this sign-in; if not, the refresh
|
|
@@ -304,7 +424,22 @@ export function createAccountsClient(o) {
|
|
|
304
424
|
if (!(await sameEpoch(started, t)))
|
|
305
425
|
return state;
|
|
306
426
|
epoch++;
|
|
307
|
-
|
|
427
|
+
// Another sign-in: nothing of the one before is left to finish (an organization to choose, a change of it).
|
|
428
|
+
choice = null;
|
|
429
|
+
// The session this one takes the place of ("use another account", an app that signs in again) ends at
|
|
430
|
+
// the application too, once the new one is on the device: its refresh token would stay alive there, on
|
|
431
|
+
// no device, for as long as its sign-in (30 days). A refresh of it still on its way revokes what it gets
|
|
432
|
+
// (sameEpoch); this is for the token already stored, the one a refresh had just saved included.
|
|
433
|
+
const replaced = session;
|
|
434
|
+
// Nothing is waited for between the check of the epoch above and the session below: a sign-out that
|
|
435
|
+
// landed in between would find the session of before, and this one would then be kept over it (NAT-01).
|
|
436
|
+
// Both writes are only queued here, the record of an unsettled change first: on the device it goes
|
|
437
|
+
// before the new session does.
|
|
438
|
+
const cleared = switchTo ? noteSwitch(null) : undefined;
|
|
439
|
+
const saved = save({ at: t.accessToken, rt: t.refreshToken, it: t.idToken, exp: t.expiresAt, u });
|
|
440
|
+
await Promise.all([cleared, saved]);
|
|
441
|
+
if (replaced?.rt && replaced.rt !== t.refreshToken)
|
|
442
|
+
await revokeToken(creds, { token: replaced.rt, hint: "refresh_token" });
|
|
308
443
|
return state;
|
|
309
444
|
}
|
|
310
445
|
async function signIn(prompt) {
|
|
@@ -332,6 +467,161 @@ export function createAccountsClient(o) {
|
|
|
332
467
|
const t = await exchangeCode(codeCreds, { code: q.code, redirectUri: o.redirectUri, codeVerifier: verifier, resource: o.audience });
|
|
333
468
|
return adopt(started, t, nonce);
|
|
334
469
|
}
|
|
470
|
+
// ---- changing organization
|
|
471
|
+
// The application gives the device a new sign-in for the organization asked for and ends the one it replaces as
|
|
472
|
+
// soon as the new one exists. If its answer never arrives, the refresh token on the device is one the token endpoint
|
|
473
|
+
// no longer takes: only the change itself, asked again with that token, gets the new one (the application keeps it
|
|
474
|
+
// for whoever presents the old one). So a change is on record on the device before it is sent, and until it is
|
|
475
|
+
// settled nothing else presents that refresh token: no refresh (getToken gives the token it has while it lasts),
|
|
476
|
+
// and at the next start the change goes first.
|
|
477
|
+
let switching = null;
|
|
478
|
+
const switchBackoff = refreshBackoff();
|
|
479
|
+
/** Sends the change on record and takes its answer. Rejects when it could not be settled now, or was refused. */
|
|
480
|
+
function settleSwitch() {
|
|
481
|
+
switching ??= (async () => {
|
|
482
|
+
try {
|
|
483
|
+
// A refresh on its way rotates the token this presents: after it.
|
|
484
|
+
while (refreshing)
|
|
485
|
+
await refreshing.catch(() => undefined);
|
|
486
|
+
const s = session;
|
|
487
|
+
const slug = switchTo;
|
|
488
|
+
if (!slug)
|
|
489
|
+
return;
|
|
490
|
+
if (!s?.rt)
|
|
491
|
+
return void (await noteSwitch(null));
|
|
492
|
+
const started = epoch;
|
|
493
|
+
let t;
|
|
494
|
+
try {
|
|
495
|
+
t = tokenSet(await nativeCall("switch", { refresh_token: s.rt, organization: slug, resource: o.audience }));
|
|
496
|
+
}
|
|
497
|
+
catch (e) {
|
|
498
|
+
if (notNow(e))
|
|
499
|
+
switchBackoff.failed(e);
|
|
500
|
+
else if (started === epoch) {
|
|
501
|
+
// Refused for good: nothing changed. The application rotates the refresh token it is shown before it
|
|
502
|
+
// looks at the organization, so the one on the device is renewed now, while the application still
|
|
503
|
+
// answers it (and if the session is over, this is what says so).
|
|
504
|
+
await noteSwitch(null);
|
|
505
|
+
await fresh(true).catch(() => undefined);
|
|
506
|
+
}
|
|
507
|
+
throw e;
|
|
508
|
+
}
|
|
509
|
+
switchBackoff.succeeded();
|
|
510
|
+
if (!(await sameEpoch(started, t)))
|
|
511
|
+
return;
|
|
512
|
+
// The same person, for this app, from this application (as a refresh's ID token); else the session ends here.
|
|
513
|
+
if (!t.idToken || !sameIdentity(s.it, t.idToken, { issuer, clientId: o.clientId })) {
|
|
514
|
+
if (t.refreshToken)
|
|
515
|
+
await revokeToken(creds, { token: t.refreshToken, hint: "refresh_token" });
|
|
516
|
+
await save(null);
|
|
517
|
+
throw new OAuthError("invalid_id_token", "The answer is not for this session.");
|
|
518
|
+
}
|
|
519
|
+
epoch++;
|
|
520
|
+
// As a refresh's (fresh()): this token takes the place of the one the app was using, and an API that
|
|
521
|
+
// refuses that one right after the change (a request of the organization before) is asking for this one.
|
|
522
|
+
latest = { to: t.accessToken, at: Date.now() };
|
|
523
|
+
// The new sign-in on the device first, then the record of the change: an app ended in between asks again
|
|
524
|
+
// at its next start with a token that works, never with one that does not.
|
|
525
|
+
await save({ at: t.accessToken, rt: t.refreshToken, it: t.idToken, exp: t.expiresAt, u: s.u });
|
|
526
|
+
await noteSwitch(null);
|
|
527
|
+
publish();
|
|
528
|
+
}
|
|
529
|
+
finally {
|
|
530
|
+
switching = null;
|
|
531
|
+
}
|
|
532
|
+
})();
|
|
533
|
+
return switching;
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* The session, in another of the person's organizations (its slug, from listOrganizations): new tokens for it, and
|
|
537
|
+
* the ones the device had stop working. A refusal throws and changes nothing. If no answer comes (or a 429, a
|
|
538
|
+
* 5xx), it throws `temporarily_unavailable` and the change stays asked for: it is finished by the next getToken(),
|
|
539
|
+
* the next call here or the next start of the app, whichever comes first.
|
|
540
|
+
*/
|
|
541
|
+
async function switchOrganization(slug) {
|
|
542
|
+
if (switching)
|
|
543
|
+
await switching.catch(() => undefined);
|
|
544
|
+
if (!session)
|
|
545
|
+
throw new OAuthError("login_required", "Not signed in.", 401);
|
|
546
|
+
// Already there, with nothing left to settle (a second tap): nothing to ask.
|
|
547
|
+
if (!switchTo && organizationOf(session.at) === slug)
|
|
548
|
+
return state;
|
|
549
|
+
const before = switchTo;
|
|
550
|
+
try {
|
|
551
|
+
await noteSwitch(slug);
|
|
552
|
+
}
|
|
553
|
+
catch (e) {
|
|
554
|
+
// Not on record on the device: not asked for, and never sent without its record. What was asked for
|
|
555
|
+
// before stays as it was: a change still to settle keeps being the one (its record is what the device
|
|
556
|
+
// has, and the refresh token may be one only that change can present). Unless something else has
|
|
557
|
+
// changed it meanwhile (a sign-out, another change asked for).
|
|
558
|
+
if (switchTo === slug)
|
|
559
|
+
switchTo = before;
|
|
560
|
+
throw e;
|
|
561
|
+
}
|
|
562
|
+
await settleSwitch();
|
|
563
|
+
return state;
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* An access token for your API; null when signed out. One about to expire is refreshed: while it still lasts it
|
|
567
|
+
* is given at once and the refresh goes on in the background; once expired, the call waits for the refresh.
|
|
568
|
+
* forceRefresh: a new one even if this one still lasts (your API just refused it). Compare-and-refresh: several
|
|
569
|
+
* refusals of the same token make one refresh, and a token a refresh (forced or not) gave less than 30 s ago is given
|
|
570
|
+
* again instead of rotating once more. If no new token can be had now (no answer, a 429), it throws an
|
|
571
|
+
* OAuthError (temporarily_unavailable) and the session stays; it resolves to null only when the session is over.
|
|
572
|
+
*/
|
|
573
|
+
async function getToken(opts = {}) {
|
|
574
|
+
if (switchTo) {
|
|
575
|
+
// A change of organization to settle first: until then the refresh token is the change's to present.
|
|
576
|
+
const before = session;
|
|
577
|
+
const lasting = (x) => (x && x.exp > now() ? x.at : null);
|
|
578
|
+
const mayAsk = !!switching || !switchBackoff.waiting;
|
|
579
|
+
if (mayAsk && opts.forceRefresh !== true && lasting(before)) {
|
|
580
|
+
settleSwitch().catch(() => undefined); // in the background: the token in hand is good meanwhile (R-03)
|
|
581
|
+
return lasting(before);
|
|
582
|
+
}
|
|
583
|
+
if (mayAsk)
|
|
584
|
+
await settleSwitch().catch(() => undefined);
|
|
585
|
+
if (switchTo) {
|
|
586
|
+
if (opts.forceRefresh === true && session)
|
|
587
|
+
throw new OAuthError("temporarily_unavailable", "Could not get a new token now; the person is still signed in. Try again in a moment.", 503, switchBackoff.waiting ? Math.ceil(switchBackoff.waiting / 1000) : undefined);
|
|
588
|
+
return lasting(session);
|
|
589
|
+
}
|
|
590
|
+
// Settled: the new sign-in's token (refused for good: the session as it was, below).
|
|
591
|
+
if (session !== before)
|
|
592
|
+
return session?.at ?? null;
|
|
593
|
+
}
|
|
594
|
+
if (opts.forceRefresh !== true)
|
|
595
|
+
return (await fresh())?.at ?? null;
|
|
596
|
+
const s = session;
|
|
597
|
+
if (!s)
|
|
598
|
+
return null;
|
|
599
|
+
if (s.at === latest.to && Date.now() - latest.at < FORCE_COOLDOWN_MS)
|
|
600
|
+
return s.at;
|
|
601
|
+
await fresh(true);
|
|
602
|
+
const after = session;
|
|
603
|
+
if (!after)
|
|
604
|
+
return null;
|
|
605
|
+
if (after.at === s.at)
|
|
606
|
+
throw new OAuthError("temporarily_unavailable", "Could not get a new token now; the person is still signed in. Try again in a moment.", 503, backoff.waiting ? Math.ceil(backoff.waiting / 1000) : undefined);
|
|
607
|
+
return after.at;
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* The organizations the person can use this app in (those with your API's product), for a switcher: what the
|
|
611
|
+
* application's userinfo says for a token of your `audience`. `state.organization` is the one the session is in.
|
|
612
|
+
*/
|
|
613
|
+
async function listOrganizations() {
|
|
614
|
+
const accessToken = await getToken();
|
|
615
|
+
// No token now (expired, and no way to renew it at the moment) is not "signed out".
|
|
616
|
+
if (!accessToken && session)
|
|
617
|
+
throw new OAuthError("temporarily_unavailable", "Could not read the organizations now. Try again in a moment.", 503);
|
|
618
|
+
if (!accessToken)
|
|
619
|
+
throw new OAuthError("login_required", "Not signed in.", 401);
|
|
620
|
+
const claims = await fetchUserInfo({ issuer, accessToken, fetch });
|
|
621
|
+
if (!claims)
|
|
622
|
+
throw new OAuthError("temporarily_unavailable", "Could not read the organizations now. Try again in a moment.", 503);
|
|
623
|
+
return organizationsOf(claims.orgs);
|
|
624
|
+
}
|
|
335
625
|
return {
|
|
336
626
|
get state() {
|
|
337
627
|
return state;
|
|
@@ -354,49 +644,41 @@ export function createAccountsClient(o) {
|
|
|
354
644
|
catch {
|
|
355
645
|
session = null;
|
|
356
646
|
}
|
|
647
|
+
// A change of organization the app was ended in the middle of: before anything else presents the refresh token.
|
|
648
|
+
const unsettled = await Promise.resolve(o.storage.get(switchKey)).catch(() => null);
|
|
649
|
+
if (unsettled && !session)
|
|
650
|
+
await noteSwitch(null);
|
|
651
|
+
else
|
|
652
|
+
switchTo = unsettled || null;
|
|
357
653
|
// What the device has, at once (offline, or on a slow network, the app does not wait); then fresh.
|
|
358
654
|
publish();
|
|
359
|
-
|
|
655
|
+
if (switchTo)
|
|
656
|
+
await settleSwitch().catch(() => undefined);
|
|
657
|
+
if (!switchTo)
|
|
658
|
+
await fresh(false, true);
|
|
360
659
|
publish();
|
|
361
660
|
return state;
|
|
362
661
|
},
|
|
363
662
|
/** Opens the hosted page; resolves once the person is back (signed in, or unchanged if they closed it). */
|
|
364
663
|
signIn: () => signIn(),
|
|
365
|
-
/** Your own sign-in screen instead of the hosted page: a code to the email, then the code. */
|
|
664
|
+
/** Your own sign-in screen instead of the hosted page: a code to the email, then the code, then (in several organizations) which one. */
|
|
366
665
|
sendEmailCode,
|
|
367
666
|
signInWithEmailCode,
|
|
667
|
+
chooseOrganization,
|
|
368
668
|
/** The same, on "create an account". */
|
|
369
669
|
signUp: () => signIn("create"),
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
* refusals of the same token make one refresh, and a token a forced refresh gave less than 30 s ago is given
|
|
375
|
-
* again instead of rotating once more. If no new token can be had now (no answer, a 429), it throws an
|
|
376
|
-
* OAuthError (temporarily_unavailable) and the session stays; it resolves to null only when the session is over.
|
|
377
|
-
*/
|
|
378
|
-
async getToken(opts = {}) {
|
|
379
|
-
if (opts.forceRefresh !== true)
|
|
380
|
-
return (await fresh())?.at ?? null;
|
|
381
|
-
const s = session;
|
|
382
|
-
if (!s)
|
|
383
|
-
return null;
|
|
384
|
-
if (s.at === forced.to && Date.now() - forced.at < FORCE_COOLDOWN_MS)
|
|
385
|
-
return s.at;
|
|
386
|
-
await fresh(true);
|
|
387
|
-
const after = session;
|
|
388
|
-
if (!after)
|
|
389
|
-
return null;
|
|
390
|
-
if (after.at === s.at)
|
|
391
|
-
throw new OAuthError("temporarily_unavailable", "Could not get a new token now; the person is still signed in. Try again in a moment.", 503, backoff.waiting ? Math.ceil(backoff.waiting / 1000) : undefined);
|
|
392
|
-
forced = { to: after.at, at: Date.now() };
|
|
393
|
-
return after.at;
|
|
394
|
-
},
|
|
670
|
+
getToken,
|
|
671
|
+
/** The person's organizations for this app, and the session in another of them, without the hosted page. */
|
|
672
|
+
listOrganizations,
|
|
673
|
+
switchOrganization,
|
|
395
674
|
/** Out here (the refresh token revoked) and, unless told otherwise, on the hosted pages too. */
|
|
396
675
|
async signOut(opts = {}) {
|
|
397
676
|
const s = session;
|
|
398
677
|
epoch++; // a refresh on its way now will not bring the session back
|
|
678
|
+
choice = null; // nor is a sign-in waiting for its organization left to finish
|
|
399
679
|
await save(null);
|
|
680
|
+
// With a change of organization that was never settled too: revoking the token the device has ends, in the
|
|
681
|
+
// application, whatever it made instead of it (a sign-in whose answer never arrived).
|
|
400
682
|
if (s?.rt)
|
|
401
683
|
await revokeToken(creds, { token: s.rt, hint: "refresh_token" });
|
|
402
684
|
if (s && opts.endSession !== false)
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,2GAA2G;AAC3G,6GAA6G;AAC7G,2GAA2G;AAC3G,mDAAmD;AACnD,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,GAIf,MAAM,0BAA0B,CAAC;AA4ClC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,uIAAuI;AACvI,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,iFAAiF;AACjF,SAAS,WAAW,CAAC,CAAwB,EAAE,EAAU;IACvD,MAAM,IAAI,GAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,KAAgB,EAAE,KAAgB;IAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,IAAI,GAAG,IAAI;IACnD,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjG,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK;YAClB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACnI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;gBAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1E,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kIAAkI;AAClI,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,CAAC;AAExJ,iGAAiG;AACjG,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,CAA8B,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,SAAS;QAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtM,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AACD,yFAAyF;AACzF,SAAS,cAAc,CAAC,WAAmB;IACzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAI,WAAW,CAAC,WAAW,CAA6B,CAAC,QAAQ,CAAC;QAC5E,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AACD,gFAAgF;AAChF,SAAS,QAAQ,CAAC,CAA0B;IAC1C,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;QAAE,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IACrG,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,YAAY;QAC3B,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAgB;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,gBAAgB,IAAI,MAAM,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IACtD,kHAAkH;IAClH,kGAAkG;IAClG,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,IAAI,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC/F,MAAM,YAAY,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACrH,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE,CAAC;IACtE,mGAAmG;IACnG,MAAM,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;IAClC,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,8GAA8G;IAC9G,IAAI,MAAM,GAAkF,IAAI,CAAC;IACjG,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,KAAK,GAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC7I,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IAExD,SAAS,OAAO,CAAC,MAAM,GAAG,IAAI;QAC5B,IAAI,IAAI,GAAuB,IAAI,CAAC;QACpC,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,GAAG,cAAc,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1D,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,KAAK,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/L,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,0GAA0G;IAC1G,0GAA0G;IAC1G,8FAA8F;IAC9F,IAAI,OAAO,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAClD,KAAK,UAAU,IAAI,CAAC,CAAgB;QAClC,OAAO,GAAG,CAAC,CAAC;QACZ,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9F,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,iEAAiE;QACzG,MAAM,KAAK,CAAC;QACZ,mDAAmD;QACnD,IAAI,CAAC,CAAC;YAAE,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,8HAA8H;IAC9H,KAAK,UAAU,UAAU,CAAC,IAAmB;QAC3C,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACxG,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,oFAAoF;IACpF,KAAK,UAAU,OAAO,CAAC,WAAmB,EAAE,GAAW;QACrD,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,MAAM,CAAC,GAAY,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACnD,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,SAAS;YAAE,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;QAC/E,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI;YAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1D,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO;YAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACtE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4GAA4G;IAC5G,yGAAyG;IACzG,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,2GAA2G;IAC3G,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,KAAK,EAAE,OAAe,EAAE,CAA4B,EAAE,EAAE;QACxE,IAAI,OAAO,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,CAAC,CAAC,YAAY;YAAE,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/F,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,4GAA4G;IAC5G,2GAA2G;IAC3G,sDAAsD;IACtD,IAAI,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAE/B,sGAAsG;IACtG,IAAI,UAAU,GAAkC,IAAI,CAAC;IACrD;;;;;OAKG;IACH,KAAK,UAAU,KAAK,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK;QAC9C,MAAM,CAAC,GAAG,OAAO,CAAC;QAClB,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB,IAAI,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE;gBAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,UAAU,KAAK,CAAC,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC;oBACH,CAAC,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvF,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,oGAAoG;oBACpG,4FAA4F;oBAC5F,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpB,IAAI,OAAO,KAAK,KAAK;4BAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;wBACxC,OAAO,OAAO,CAAC;oBACjB,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAClB,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClC,CAAC;gBACD,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAAE,OAAO,OAAO,CAAC;gBACnD,oGAAoG;gBACpG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;oBAClF,IAAI,CAAC,CAAC,YAAY;wBAAE,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;oBAC/F,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC7B,8FAA8F;gBAC9F,mGAAmG;gBACnG,wFAAwF;gBACxF,MAAM,IAAI,GAAW,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrG,iGAAiG;gBACjG,6FAA6F;gBAC7F,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5D,mGAAmG;gBACnG,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI;oBAAE,OAAO,OAAO,CAAC;gBAC1D,IAAI,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACpB,MAAM,KAAK,GAAW,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC;YACf,CAAC;oBAAS,CAAC;gBACT,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,sEAAsE;QACnG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,0GAA0G;IAC1G,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;QAChD,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;YACnJ,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAC;IACtF,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,aAAa,CAAC,IAAuC,EAAE,IAA6B;QACjG,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,eAAe,IAAI,EAAE,EAAE;gBACpF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,mBAAmB,MAAM,KAAM,CAAW,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,EAAE,CAAC;IACxF,CAAC;IACD,8HAA8H;IAC9H,SAAS,WAAW,CAAC,GAAa,EAAE,IAA6B;QAC/D,kHAAkH;QAClH,0GAA0G;QAC1G,MAAM,IAAI,GACR,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;YACzC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;gBAC7C,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,mBAAmB;oBAC1C,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,yBAAyB;wBAC/C,CAAC,CAAC,kBAAkB,CAAC;QACvB,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;QAClJ,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,KAAK,UAAU,UAAU,CAAI,IAAuC,EAAE,IAA6B;QACjG,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAS,CAAC;IACnB,CAAC;IAED;yEACqE;IACrE,KAAK,UAAU,aAAa,CAAC,KAAa;QACxC,MAAM,CAAC,GAAG,MAAM,UAAU,CAAyB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,IAAY;QAC5D,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvH,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACjF,qHAAqH;YACrH,IAAI,OAAO,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC;YACpC,MAAM,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;YAC5E,OAAO,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,yGAAyG;IACzG,IAAI,QAAQ,GAAkC,IAAI,CAAC;IACnD;;;;OAIG;IACH,SAAS,kBAAkB,CAAC,IAAY;QACtC,MAAM,CAAC,GAAG,MAAM,CAAC;QACjB,IAAI,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,iBAAiB,EAAE,kDAAkD,CAAC,CAAC,CAAC;QACrH,QAAQ,KAAK,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACjC,IAAI,MAAM,CAAC,CAAC,CAAC;wBAAE,MAAM,CAAC,CAAC;oBACvB,gDAAgD;oBAChD,IAAI,MAAM,KAAK,CAAC;wBAAE,MAAM,GAAG,IAAI,CAAC;oBAChC,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,IAAI,MAAM,KAAK,CAAC;oBAAE,MAAM,GAAG,IAAI,CAAC;gBAChC,IAAI,CAAC;oBACH,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,CAAC;gBACV,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,KAAK,CAAC,OAAe,EAAE,CAAW,EAAE,KAAa;QAC9D,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAC;YACzG,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,YAAY;gBAAE,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;YAC/F,MAAM,CAAC,CAAC;QACV,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,KAAK,EAAE,CAAC;QACR,4GAA4G;QAC5G,MAAM,GAAG,IAAI,CAAC;QACd,sGAAsG;QACtG,uGAAuG;QACvG,yGAAyG;QACzG,gGAAgG;QAChG,MAAM,QAAQ,GAAG,OAAO,CAAC;QACzB,oGAAoG;QACpG,wGAAwG;QACxG,mGAAmG;QACnG,+BAA+B;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAClG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACpC,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,YAAY;YAAE,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5H,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,MAAiB;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3K,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,0BAA0B;QAClE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,6CAA6C,CAAC,CAAC;QAC/G,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe;gBAAE,OAAO,KAAK,CAAC;YAC9C,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,kDAAkD,CAAC,CAAC;QACjH,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;QAChF,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpI,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,6BAA6B;IAC7B,gHAAgH;IAChH,qHAAqH;IACrH,mHAAmH;IACnH,+GAA+G;IAC/G,iHAAiH;IACjH,+CAA+C;IAC/C,IAAI,SAAS,GAAyB,IAAI,CAAC;IAC3C,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;IAEvC,iHAAiH;IACjH,SAAS,YAAY;QACnB,SAAS,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC;gBACH,kEAAkE;gBAClE,OAAO,UAAU;oBAAE,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,OAAO,CAAC;gBAClB,MAAM,IAAI,GAAG,QAAQ,CAAC;gBACtB,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,IAAI,CAAC,CAAC,EAAE,EAAE;oBAAE,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAW,CAAC;gBAChB,IAAI,CAAC;oBACH,CAAC,GAAG,QAAQ,CAAC,MAAM,UAAU,CAA0B,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACvI,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,MAAM,CAAC,CAAC,CAAC;wBAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAClC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;wBAC3B,qGAAqG;wBACrG,kGAAkG;wBAClG,iEAAiE;wBACjE,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;wBACvB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;oBAC3C,CAAC;oBACD,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAAE,OAAO;gBAC3C,8GAA8G;gBAC9G,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;oBACnF,IAAI,CAAC,CAAC,YAAY;wBAAE,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;oBAC/F,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,qCAAqC,CAAC,CAAC;gBAClF,CAAC;gBACD,KAAK,EAAE,CAAC;gBACR,qGAAqG;gBACrG,yGAAyG;gBACzG,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC/C,yGAAyG;gBACzG,2EAA2E;gBAC3E,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/F,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,kBAAkB,CAAC,IAAY;QAC5C,IAAI,SAAS;YAAE,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC5E,6EAA6E;QAC7E,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACnE,MAAM,MAAM,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oGAAoG;YACpG,sGAAsG;YACtG,iGAAiG;YACjG,+DAA+D;YAC/D,IAAI,QAAQ,KAAK,IAAI;gBAAE,QAAQ,GAAG,MAAM,CAAC;YACzC,MAAM,CAAC,CAAC;QACV,CAAC;QACD,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,UAAU,QAAQ,CAAC,IAAI,GAA+B,EAAE;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,qGAAqG;YACrG,MAAM,MAAM,GAAG,OAAO,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACrD,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,gEAAgE;gBACvG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,MAAM;gBAAE,MAAM,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO;oBAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,sFAAsF,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACrQ,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YACD,qFAAqF;YACrF,IAAI,OAAO,KAAK,MAAM;gBAAE,OAAO,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC;QACrD,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;YAAE,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;QACnE,MAAM,CAAC,GAAG,OAAO,CAAC;QAClB,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,iBAAiB;YAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,OAAwB,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;YAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,sFAAsF,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrO,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,KAAK,UAAU,iBAAiB;QAC9B,MAAM,WAAW,GAAG,MAAM,QAAQ,EAAE,CAAC;QACrC,oFAAoF;QACpF,IAAI,CAAC,WAAW,IAAI,OAAO;YAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,8DAA8D,EAAE,GAAG,CAAC,CAAC;QAClJ,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,8DAA8D,EAAE,GAAG,CAAC,CAAC;QAClI,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,IAAI,KAAK;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,SAAS,CAAC,CAA6B;YACrC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC;QACJ,CAAC;QACD,0GAA0G;QAC1G,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnD,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5G,IAAI,OAAO;oBAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,gHAAgH;YAChH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACpF,IAAI,SAAS,IAAI,CAAC,OAAO;gBAAE,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;;gBAC7C,QAAQ,GAAG,SAAS,IAAI,IAAI,CAAC;YAClC,mGAAmG;YACnG,OAAO,EAAE,CAAC;YACV,IAAI,QAAQ;gBAAE,MAAM,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ;gBAAE,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QACD,2GAA2G;QAC3G,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;QACtB,yIAAyI;QACzI,aAAa;QACb,mBAAmB;QACnB,kBAAkB;QAClB,wCAAwC;QACxC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9B,QAAQ;QACR,4GAA4G;QAC5G,iBAAiB;QACjB,kBAAkB;QAClB,gGAAgG;QAChG,KAAK,CAAC,OAAO,CAAC,IAAI,GAA6B,EAAE;YAC/C,MAAM,CAAC,GAAG,OAAO,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,2DAA2D;YACpE,MAAM,GAAG,IAAI,CAAC,CAAC,+DAA+D;YAC9E,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,2GAA2G;YAC3G,sFAAsF;YACtF,IAAI,CAAC,EAAE,EAAE;gBAAE,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK;gBAChC,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export { SignedIn, SignedOut, useAuth, useUser, type AccountsProviderProps } fro
|
|
|
4
4
|
export { completeSignIn };
|
|
5
5
|
/** What getToken({ forceRefresh: true }) throws when no new token can be had now (error "temporarily_unavailable"). */
|
|
6
6
|
export { OAuthError } from "@iaurelius/accounts/oidc";
|
|
7
|
-
export type { AccountsState, SessionUser } from "./core.js";
|
|
7
|
+
export type { AccountsState, Organization, SessionUser } from "./core.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,cAAc,EAA6C,MAAM,WAAW,CAAC;AAG1G,eAAO,MAAM,gBAAgB,oKAA4G,CAAC;AAC1I,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,uHAAuH;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,cAAc,EAA6C,MAAM,WAAW,CAAC;AAG1G,eAAO,MAAM,gBAAgB,oKAA4G,CAAC;AAC1I,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,uHAAuH;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/react.d.ts
CHANGED
|
@@ -28,6 +28,10 @@ export declare function useAuth(): {
|
|
|
28
28
|
isSignedIn: boolean;
|
|
29
29
|
userId: string | null;
|
|
30
30
|
sessionId: string | null;
|
|
31
|
+
/** The organization the session is in (its slug), when your API's token says so. */
|
|
32
|
+
organization: string | null;
|
|
33
|
+
/** Signing in on your own screen with an organization left to choose: the ones to offer. Null otherwise. */
|
|
34
|
+
organizationChoice: import("./core.js").Organization[] | null;
|
|
31
35
|
getToken: (opts?: {
|
|
32
36
|
forceRefresh?: boolean;
|
|
33
37
|
}) => Promise<string | null>;
|
|
@@ -37,6 +41,9 @@ export declare function useAuth(): {
|
|
|
37
41
|
waitlist: boolean;
|
|
38
42
|
}>;
|
|
39
43
|
signInWithEmailCode: (email: string, code: string) => Promise<AccountsState>;
|
|
44
|
+
chooseOrganization: (slug: string) => Promise<AccountsState>;
|
|
45
|
+
listOrganizations: () => Promise<import("./core.js").Organization[]>;
|
|
46
|
+
switchOrganization: (slug: string) => Promise<AccountsState>;
|
|
40
47
|
signOut: (opts?: {
|
|
41
48
|
endSession?: boolean;
|
|
42
49
|
}) => Promise<void>;
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,EAA6C,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAInI,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oHAAoH;IACpH,cAAc,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,QAAQ,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CAAC;AAEnJ,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,2FACmF,qBAAqB,iCActJ;AAQD,wBAAgB,OAAO;IAGnB,QAAQ;IACR,UAAU;IACV,MAAM;IACN,SAAS;IACT,QAAQ;;;IACR,MAAM;IACN,MAAM;IACN,aAAa;;;IACb,mBAAmB;IACnB,OAAO;;;EAEV;AAED,wBAAgB,OAAO;IAEZ,QAAQ;IAAkB,UAAU;IAAoB,IAAI;EACtE;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,sCAG9D;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,sCAG/D"}
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,EAA6C,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAInI,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oHAAoH;IACpH,cAAc,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,QAAQ,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CAAC;AAEnJ,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,2FACmF,qBAAqB,iCActJ;AAQD,wBAAgB,OAAO;IAGnB,QAAQ;IACR,UAAU;IACV,MAAM;IACN,SAAS;IACT,oFAAoF;IACpF,YAAY;IACZ,4GAA4G;IAC5G,kBAAkB;IAClB,QAAQ;;;IACR,MAAM;IACN,MAAM;IACN,aAAa;;;IACb,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,OAAO;;;EAEV;AAED,wBAAgB,OAAO;IAEZ,QAAQ;IAAkB,UAAU;IAAoB,IAAI;EACtE;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,sCAG9D;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,sCAG/D"}
|
package/dist/react.js
CHANGED
|
@@ -28,11 +28,18 @@ export function useAuth() {
|
|
|
28
28
|
isSignedIn: state.isSignedIn,
|
|
29
29
|
userId: state.user?.id ?? null,
|
|
30
30
|
sessionId: state.sessionId,
|
|
31
|
+
/** The organization the session is in (its slug), when your API's token says so. */
|
|
32
|
+
organization: state.organization,
|
|
33
|
+
/** Signing in on your own screen with an organization left to choose: the ones to offer. Null otherwise. */
|
|
34
|
+
organizationChoice: state.organizationChoice,
|
|
31
35
|
getToken: client.getToken,
|
|
32
36
|
signIn: client.signIn,
|
|
33
37
|
signUp: client.signUp,
|
|
34
38
|
sendEmailCode: client.sendEmailCode,
|
|
35
39
|
signInWithEmailCode: client.signInWithEmailCode,
|
|
40
|
+
chooseOrganization: client.chooseOrganization,
|
|
41
|
+
listOrganizations: client.listOrganizations,
|
|
42
|
+
switchOrganization: client.switchOrganization,
|
|
36
43
|
signOut: client.signOut,
|
|
37
44
|
};
|
|
38
45
|
}
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iaurelius/accounts-expo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Accounts by iAurelius for Expo: sign-in on the hosted page in an authentication session, tokens in SecureStore, useAuth() and getToken() that refreshes itself.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"auth",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@iaurelius/accounts": "^0.
|
|
38
|
+
"@iaurelius/accounts": "^0.5.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"expo-crypto": "*",
|