diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-06-10 11:55:09 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-06-10 11:55:09 -0500 |
commit | faddda83f04b46bcdaab5c225cab696fc7a820cd (patch) | |
tree | 8a7cacb04f0a480d90a8e5dc9f9daae00f27c802 /src/state/models/session.ts | |
parent | 967f9fc474f2903dd2c12ef4f662ead1592ea26c (diff) | |
download | voidsky-faddda83f04b46bcdaab5c225cab696fc7a820cd.tar.zst |
(WIP) Add initial API client
Diffstat (limited to 'src/state/models/session.ts')
-rw-r--r-- | src/state/models/session.ts | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/state/models/session.ts b/src/state/models/session.ts index 675feb8bc..a550e2174 100644 --- a/src/state/models/session.ts +++ b/src/state/models/session.ts @@ -1,14 +1,69 @@ -import {Instance, SnapshotOut, types} from 'mobx-state-tree' +import {Instance, SnapshotOut, types, flow} from 'mobx-state-tree' +import {UserConfig} from '../../api' +import {withEnvironment} from '../env' export const SessionModel = types .model('Session') .props({ isAuthed: types.boolean, + uiState: types.enumeration('idle', ['idle', 'working']), + uiError: types.maybe(types.string), + + // TODO: these should be stored somewhere secret + serverUrl: types.maybe(types.string), + secretKeyStr: types.maybe(types.string), + rootAuthToken: types.maybe(types.string), }) + .views(self => ({ + get hasAccount() { + return self.serverUrl && self.secretKeyStr && self.rootAuthToken + }, + })) + .extend(withEnvironment) .actions(self => ({ setAuthed: (v: boolean) => { self.isAuthed = v }, + loadAccount: flow(function* () { + if (!self.hasAccount) { + return false + } + self.uiState = 'working' + self.uiError = undefined + try { + const cfg = yield UserConfig.hydrate({ + serverUrl: self.serverUrl, + secretKeyStr: self.secretKeyStr, + rootAuthToken: self.rootAuthToken, + }) + self.environment.api.setUserCfg(cfg) + self.isAuthed = true + self.uiState = 'idle' + return true + } catch (e: any) { + console.error('Failed to create test account', e) + self.uiError = e.toString() + self.uiState = 'idle' + return false + } + }), + createTestAccount: flow(function* (serverUrl: string) { + self.uiState = 'working' + self.uiError = undefined + try { + const cfg = yield UserConfig.createTest(serverUrl) + const state = yield cfg.serialize() + self.serverUrl = state.serverUrl + self.secretKeyStr = state.secretKeyStr + self.rootAuthToken = state.rootAuthToken + self.isAuthed = true + self.environment.api.setUserCfg(cfg) + } catch (e: any) { + console.error('Failed to create test account', e) + self.uiError = e.toString() + } + self.uiState = 'idle' + }), })) export interface Session extends Instance<typeof SessionModel> {} @@ -17,5 +72,6 @@ export interface SessionSnapshot extends SnapshotOut<typeof SessionModel> {} export function createDefaultSession() { return { isAuthed: false, + uiState: 'idle', } } |