nestjs-oauth2
Version:
NestJS OAuth2 Client
59 lines (58 loc) • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OAuthImplement = void 0;
const oauth_1 = require("oauth");
class OAuthImplement {
constructor(provider) {
this.provider = provider;
this.defaultRedirectUri = `${this.provider.redirectOrigin}/oauth/${this.provider.name}/callback`;
}
getOAuth2({ mode }) {
if (mode === "authorize") {
return new oauth_1.OAuth2(this.provider.clientId, this.provider.clientSecret, new URL(this.provider.authorizeUrl).origin, new URL(this.provider.authorizeUrl).pathname);
}
if (mode === "accessToken") {
return new oauth_1.OAuth2(this.provider.clientId, this.provider.clientSecret, new URL(this.provider.accessTokenUrl).origin, "", new URL(this.provider.accessTokenUrl).pathname);
}
}
getAuthorizeUrl({ state }) {
return this.getOAuth2({ mode: "authorize" }).getAuthorizeUrl({
response_type: "code",
redirect_uri: this.provider.redirectUri || this.defaultRedirectUri,
state,
scope: this.provider.scope || "",
});
}
getAccessToken({ code }) {
return new Promise((resolve, reject) => {
this.getOAuth2({ mode: "accessToken" }).getOAuthAccessToken(code, {
grant_type: "authorization_code",
redirect_uri: this.provider.redirectUri || this.defaultRedirectUri,
}, (err, accessToken, refreshToken, results) => {
if (err) {
reject(err);
}
else {
resolve(Object.assign({ accessToken,
refreshToken, tokenType: results.token_type, expiresIn: results.expires_in }, results));
}
});
});
}
refreshAccessToken({ refreshToken, }) {
return new Promise((resolve, reject) => {
this.getOAuth2({ mode: "accessToken" }).getOAuthAccessToken(refreshToken, {
grant_type: "refresh_token",
}, (err, accessToken, refreshToken, results) => {
if (err) {
reject(err);
}
else {
resolve(Object.assign({ accessToken,
refreshToken, tokenType: results.token_type, expiresIn: results.expires_in }, results));
}
});
});
}
}
exports.OAuthImplement = OAuthImplement;