@supernovaio/cli
Version:
Supernova.io Command Line Interface
112 lines (110 loc) • 4.73 kB
JavaScript
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fd165838-8d44-528c-a75a-ccb2b15efc41")}catch(e){}}();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { SentryTraced } from "@sentry/nestjs";
import fetch from "node-fetch";
import { authUrlForEnvironment, TargetEnv } from "../types/environment.js";
import { AuthResponseSchema, RefreshTokenResponseSchema, TokensResponseSchema } from "../types/login.js";
export class AuthService {
async getAuthUrlFromServer(env, codeChallenge) {
const { result: { authorizeUrl, readKey }, } = await fetch(authUrlForEnvironment(env), {
body: JSON.stringify({
codeChallenge,
}),
headers: {
"Content-Type": "application/json",
},
method: "POST",
})
.then(res => res.json())
.then(async (data) => AuthResponseSchema.parse(data));
return { authorizeUrl, readKey };
}
async getTokensFromServer(env, verifier, readKey) {
let success = false;
let tokens;
let repeatCounts = 300;
while (!success && repeatCounts-- > 0) {
success = await fetch(`${authUrlForEnvironment(env)}?read_key=${readKey}&code_verifier=${verifier}`)
.then(response => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.json();
})
.then(async (data) => {
const body = TokensResponseSchema.parse(data);
if (body.result.status === "Success") {
tokens = body.result.tokens;
return true;
}
await this.sleep();
return false;
});
}
return tokens;
}
async refreshToken(env, refreshToken) {
if (!refreshToken)
return undefined;
const authUrl = `${authUrlForEnvironment(env)}/token`;
const response = await fetch(authUrl, {
body: JSON.stringify({
grant_type: "refresh_token",
refresh_token: refreshToken,
}),
headers: {
"Content-Type": "application/json",
},
method: "POST",
});
if (!response.ok) {
return undefined;
}
const responseJson = await response.json();
const parsedResponse = RefreshTokenResponseSchema.safeParse(responseJson);
if (!parsedResponse.success) {
return undefined;
}
const { tokens } = parsedResponse.data.result;
return { ...tokens, refreshToken };
}
sleep(ms = 5000) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
}
__decorate([
SentryTraced(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], AuthService.prototype, "getAuthUrlFromServer", null);
__decorate([
SentryTraced(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String, String]),
__metadata("design:returntype", Promise)
], AuthService.prototype, "getTokensFromServer", null);
__decorate([
SentryTraced(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], AuthService.prototype, "refreshToken", null);
__decorate([
SentryTraced(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", void 0)
], AuthService.prototype, "sleep", null);
//# sourceMappingURL=auth.service.js.map
//# debugId=fd165838-8d44-528c-a75a-ccb2b15efc41