hippofish/packages/megalodon/src/oauth.ts
2023-07-06 02:16:51 +00:00

109 lines
2.3 KiB
TypeScript

/**
* OAuth
* Response data when oauth request.
**/
namespace OAuth {
export type AppDataFromServer = {
id: string
name: string
website: string | null
redirect_uri: string
client_id: string
client_secret: string
}
export type TokenDataFromServer = {
access_token: string
token_type: string
scope: string
created_at: number
expires_in: number | null
refresh_token: string | null
}
export class AppData {
public url: string | null
public session_token: string | null
constructor(
public id: string,
public name: string,
public website: string | null,
public redirect_uri: string,
public client_id: string,
public client_secret: string
) {
this.url = null
this.session_token = null
}
/**
* Serialize raw application data from server
* @param raw from server
*/
static from(raw: AppDataFromServer) {
return new this(raw.id, raw.name, raw.website, raw.redirect_uri, raw.client_id, raw.client_secret)
}
get redirectUri() {
return this.redirect_uri
}
get clientId() {
return this.client_id
}
get clientSecret() {
return this.client_secret
}
}
export class TokenData {
public _scope: string
constructor(
public access_token: string,
public token_type: string,
scope: string,
public created_at: number,
public expires_in: number | null = null,
public refresh_token: string | null = null
) {
this._scope = scope
}
/**
* Serialize raw token data from server
* @param raw from server
*/
static from(raw: TokenDataFromServer) {
return new this(raw.access_token, raw.token_type, raw.scope, raw.created_at, raw.expires_in, raw.refresh_token)
}
/**
* OAuth Aceess Token
*/
get accessToken() {
return this.access_token
}
get tokenType() {
return this.token_type
}
get scope() {
return this._scope
}
/**
* Application ID
*/
get createdAt() {
return this.created_at
}
get expiresIn() {
return this.expires_in
}
/**
* OAuth Refresh Token
*/
get refreshToken() {
return this.refresh_token
}
}
}
export default OAuth