You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/oaer/lib/main.ts

80 lines
1.4 KiB
TypeScript

/*
* main.ts
* Copyright (C) 2024 veypi <i@veypi.com>
* 2024-07-04 14:34
* Distributed under terms of the MIT license.
*/
import './assets/css/oaer.scss'
import bus from './bus'
import logic from './logic'
import ui from './components'
import api from './api'
export default new class {
private ui?: ui
constructor() {
}
local() {
return logic.user
}
access() {
return logic.token.app.access
}
init(host?: string, code?: string) {
if (host) {
logic.host = host
}
if (code) {
logic.token.refresh.set(code)
}
return logic.init()
}
render_ui(domid = 'voa') {
if (!this.ui) {
this.ui = new ui()
}
let root = document.querySelector('#' + domid)
if (root) {
this.ui.mount(root)
} else {
console.warn(`not found <div id="${domid}"></div>`)
}
}
isValid() {
return logic.token.refresh.isVaild()
}
login() {
bus.emit('login')
}
logout() {
bus.emit('logout')
}
on(evt: string, fn: (d?: any) => void) {
bus.on(evt, fn)
}
api() {
return {
user: {
Get: api.user.Get,
List: api.user.List,
},
app: {
Get: api.app.Get,
List: api.app.List,
},
}
}
Token() {
return logic.token.app.raw()
}
TokenRefresh() {
return new Promise<string>((resolve, reject) => {
logic.token.app.update().then((e) => { resolve(e.raw()) }).catch(() => reject)
})
}
}