[Session] Convert account to session data explicitly (#4446)
* Extract a variable * Extract sessionAccountToSession * Convert account to session data on assignmentzio/stable
parent
5159495274
commit
7ddbc392c3
|
@ -38,21 +38,7 @@ export async function createAgentAndResume(
|
||||||
}
|
}
|
||||||
const gates = tryFetchGates(storedAccount.did, 'prefer-low-latency')
|
const gates = tryFetchGates(storedAccount.did, 'prefer-low-latency')
|
||||||
const moderation = configureModerationForAccount(agent, storedAccount)
|
const moderation = configureModerationForAccount(agent, storedAccount)
|
||||||
const prevSession: AtpSessionData = {
|
const prevSession: AtpSessionData = sessionAccountToSession(storedAccount)
|
||||||
// Sorted in the same property order as when returned by BskyAgent (alphabetical).
|
|
||||||
accessJwt: storedAccount.accessJwt ?? '',
|
|
||||||
did: storedAccount.did,
|
|
||||||
email: storedAccount.email,
|
|
||||||
emailAuthFactor: storedAccount.emailAuthFactor,
|
|
||||||
emailConfirmed: storedAccount.emailConfirmed,
|
|
||||||
handle: storedAccount.handle,
|
|
||||||
refreshJwt: storedAccount.refreshJwt ?? '',
|
|
||||||
/**
|
|
||||||
* @see https://github.com/bluesky-social/atproto/blob/c5d36d5ba2a2c2a5c4f366a5621c06a5608e361e/packages/api/src/agent.ts#L188
|
|
||||||
*/
|
|
||||||
active: storedAccount.active ?? true,
|
|
||||||
status: storedAccount.status,
|
|
||||||
}
|
|
||||||
if (isSessionExpired(storedAccount)) {
|
if (isSessionExpired(storedAccount)) {
|
||||||
await networkRetry(1, () => agent.resumeSession(prevSession))
|
await networkRetry(1, () => agent.resumeSession(prevSession))
|
||||||
} else {
|
} else {
|
||||||
|
@ -253,3 +239,23 @@ export function agentToSessionAccount(
|
||||||
pdsUrl: agent.pdsUrl?.toString(),
|
pdsUrl: agent.pdsUrl?.toString(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function sessionAccountToSession(
|
||||||
|
account: SessionAccount,
|
||||||
|
): AtpSessionData {
|
||||||
|
return {
|
||||||
|
// Sorted in the same property order as when returned by BskyAgent (alphabetical).
|
||||||
|
accessJwt: account.accessJwt ?? '',
|
||||||
|
did: account.did,
|
||||||
|
email: account.email,
|
||||||
|
emailAuthFactor: account.emailAuthFactor,
|
||||||
|
emailConfirmed: account.emailConfirmed,
|
||||||
|
handle: account.handle,
|
||||||
|
refreshJwt: account.refreshJwt ?? '',
|
||||||
|
/**
|
||||||
|
* @see https://github.com/bluesky-social/atproto/blob/c5d36d5ba2a2c2a5c4f366a5621c06a5608e361e/packages/api/src/agent.ts#L188
|
||||||
|
*/
|
||||||
|
active: account.active ?? true,
|
||||||
|
status: account.status,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import {
|
||||||
createAgentAndCreateAccount,
|
createAgentAndCreateAccount,
|
||||||
createAgentAndLogin,
|
createAgentAndLogin,
|
||||||
createAgentAndResume,
|
createAgentAndResume,
|
||||||
|
sessionAccountToSession,
|
||||||
} from './agent'
|
} from './agent'
|
||||||
import {getInitialState, reducer} from './reducer'
|
import {getInitialState, reducer} from './reducer'
|
||||||
|
|
||||||
|
@ -175,8 +176,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
||||||
if (syncedAccount.did !== state.currentAgentState.did) {
|
if (syncedAccount.did !== state.currentAgentState.did) {
|
||||||
resumeSession(syncedAccount)
|
resumeSession(syncedAccount)
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore we checked for `refreshJwt` above
|
const agent = state.currentAgentState.agent as BskyAgent
|
||||||
state.currentAgentState.agent.session = syncedAccount
|
agent.session = sessionAccountToSession(syncedAccount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue