feat: access token generic para permitir customização

This commit is contained in:
Leandro Costa 2023-06-16 19:06:10 -03:00
parent 4b61c118ad
commit 477d9fc6a7
3 changed files with 46 additions and 52 deletions

View file

@ -13,7 +13,7 @@ import {
} from "./lhisp-oauth-client.t";
import logger from "lhisp-logger";
export class LhispOauthClient {
export class LhispOauthClient<iAccessToken extends AccessToken = AccessToken> {
protected authUrl: string;
protected apiUrl: string;
protected clientId: string;
@ -27,8 +27,10 @@ export class LhispOauthClient {
protected headers?: Headers;
protected grantType?: string;
protected agent: https.Agent;
protected accessToken?: AccessToken;
protected refreshToken?: AccessToken;
protected accessToken?: iAccessToken;
protected refreshToken?: iAccessToken;
protected tokenCreatedAt = 0;
protected tokenExpiresIn = 0;
protected sendAuthCredentialsOnRequestBody?: boolean;
constructor(params: LhispOauthClientConstructorParams) {
@ -75,16 +77,16 @@ export class LhispOauthClient {
}
}
isTokenValid(token: AccessToken) {
if (!token) return false;
if (!token.created_at) return false;
const timeDiff = (Date.now() - token.created_at) / 1000;
return timeDiff < token.expires_in - 10;
isTokenValid() {
if (!this.accessToken) return false;
if (!this.tokenCreatedAt) return false;
const timeDiff = (Date.now() - this.tokenCreatedAt) / 1000;
return timeDiff < this.tokenExpiresIn - 10;
}
async getAccessToken(): Promise<AccessToken> {
async getAccessToken(): Promise<iAccessToken> {
try {
if (this.accessToken && this.isTokenValid(this.accessToken)) {
if (this.accessToken && this.isTokenValid()) {
return this.accessToken;
}
@ -113,21 +115,18 @@ export class LhispOauthClient {
data: authRequestOpt.data,
contentType: this.authContentType,
});
const response = await axios.request(authRequestOpt);
return this.buildAccessToken(response.data);
const resp = await axios.request<iAccessToken>(authRequestOpt);
this.accessToken = this.buildAccessToken(resp.data);
this.tokenCreatedAt = new Date().getTime();
return this.accessToken;
} catch (error) {
logger.error({ message: "LhispOauthClient.getAccessToken", error });
throw error;
}
}
buildAccessToken(data: Omit<AccessToken, "created_at">): AccessToken {
this.accessToken = {
...data,
created_at: Date.now(),
};
return this.accessToken;
buildAccessToken(data: any) {
return data as iAccessToken;
}
getAuthToken() {
@ -143,14 +142,10 @@ export class LhispOauthClient {
}: ExecutarRequestParams): Promise<ResponseType> {
try {
await this.getAccessToken();
if (!this.accessToken?.token_type) {
console.log("## LHOAUTH2 NO TOKEN ?:", this.accessToken);
}
let headers = {
"Content-Type": contentType,
[this.tokenHeaderName]: this.getAuthToken(),
// ...this.headers
};
const response = await axios.request<ResponseType>({