diff options
author | dan <dan.abramov@gmail.com> | 2024-05-01 02:55:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-01 02:55:43 +0100 |
commit | 39807a86309ccfeeffbd054808c0e78e42ff940e (patch) | |
tree | 43e5bd4d79c127aad384317ce177bbec70a6ec06 /src/state/session/types.ts | |
parent | 66ad5543f1fb74c8e75edba7d626cdeeb8297d44 (diff) | |
download | voidsky-39807a86309ccfeeffbd054808c0e78e42ff940e.tar.zst |
[Session] Refactor to prepare for V2 (#3781)
* Move types to another file Co-authored-by: dan <dan.abramov@gmail.com> * Move utilities out Co-authored-by: dan <dan.abramov@gmail.com> * Move PUBLIC_BSKY_AGENT Co-authored-by: dan <dan.abramov@gmail.com> * Move createPersistSessionHandler inline Co-authored-by: dan <dan.abramov@gmail.com> * Call configureModeration when clearing account too This ensures that the app labelers get reset in a test environment. Co-authored-by: dan <dan.abramov@gmail.com> * Make guest configureModeration sync, non-guest async * Extract isSessionExpired Co-authored-by: dan <dan.abramov@gmail.com> * Flip isSessionExpired condition Co-authored-by: dan <dan.abramov@gmail.com> * Extract agentToSessionAccount Co-authored-by: dan <dan.abramov@gmail.com> * Extract createAgent* Co-authored-by: dan <dan.abramov@gmail.com> * Simplify isSessionExpired --------- Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/state/session/types.ts')
-rw-r--r-- | src/state/session/types.ts | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/state/session/types.ts b/src/state/session/types.ts new file mode 100644 index 000000000..3c7e7d253 --- /dev/null +++ b/src/state/session/types.ts @@ -0,0 +1,65 @@ +import {LogEvents} from '#/lib/statsig/statsig' +import {PersistedAccount} from '#/state/persisted' + +export type SessionAccount = PersistedAccount + +export type SessionState = { + isInitialLoad: boolean + isSwitchingAccounts: boolean + accounts: SessionAccount[] + currentAccount: SessionAccount | undefined +} +export type SessionStateContext = SessionState & { + hasSession: boolean +} +export type SessionApiContext = { + createAccount: (props: { + service: string + email: string + password: string + handle: string + inviteCode?: string + verificationPhone?: string + verificationCode?: string + }) => Promise<void> + login: ( + props: { + service: string + identifier: string + password: string + authFactorToken?: string | undefined + }, + logContext: LogEvents['account:loggedIn']['logContext'], + ) => Promise<void> + /** + * A full logout. Clears the `currentAccount` from session, AND removes + * access tokens from all accounts, so that returning as any user will + * require a full login. + */ + logout: ( + logContext: LogEvents['account:loggedOut']['logContext'], + ) => Promise<void> + /** + * A partial logout. Clears the `currentAccount` from session, but DOES NOT + * clear access tokens from accounts, allowing the user to return to their + * other accounts without logging in. + * + * Used when adding a new account, deleting an account. + */ + clearCurrentAccount: () => void + initSession: (account: SessionAccount) => Promise<void> + resumeSession: (account?: SessionAccount) => Promise<void> + removeAccount: (account: SessionAccount) => void + selectAccount: ( + account: SessionAccount, + logContext: LogEvents['account:loggedIn']['logContext'], + ) => Promise<void> + updateCurrentAccount: ( + account: Partial< + Pick< + SessionAccount, + 'handle' | 'email' | 'emailConfirmed' | 'emailAuthFactor' + > + >, + ) => void +} |