firefish/packages/megalodon/src/oauth.ts

123 lines
2.2 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;