UNPKG

@dodi-smart/nuki-graphql-api

Version:
98 lines 3.76 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkAuthSession = exports.authHolder = void 0; const api_1 = require("./api"); const logger_1 = require("./logger"); const utils_1 = require("./utils"); class AuthHolder { constructor() { this._clientId = (0, utils_1.required)('NUKI_CLIENT_ID'); this._clientSecret = (0, utils_1.required)('NUKI_CLIENT_SECRET'); this._appClient = new api_1.NukiClient({ TOKEN: process.env.NUKI_ACCESS_TOKEN || process.env.NUKI_API_KEY }); } get clientId() { return this._clientId; } get clientSecret() { return this._clientSecret; } get appClient() { return this._appClient; } get auth() { return this._auth; } set auth(auth) { this._auth = auth; this._appClient = new api_1.NukiClient({ TOKEN: auth.accessToken }); } } exports.authHolder = new AuthHolder(); const refreshSession = (refresh_token) => __awaiter(void 0, void 0, void 0, function* () { try { const session = yield new api_1.NukiClient().oAuth2.refreshToken({ client_id: exports.authHolder.clientId, client_secret: exports.authHolder.clientSecret, grant_type: api_1.TokenRequestRefreshGrant.grant_type.REFRESH_TOKEN, refresh_token }); if (session.access_token) { exports.authHolder.auth = { accessToken: session.access_token, refreshToken: (0, utils_1.fixStringNullable)(session.refresh_token) }; logger_1.logger.info('Session successfully refreshed!'); return exports.authHolder.auth; } else { throw new Error('Refreshing session failed!'); } } catch (e) { logger_1.logger.error(e); } }); const checkAuthSession = (providedAuth) => __awaiter(void 0, void 0, void 0, function* () { const { accessToken, refreshToken } = providedAuth; if (!exports.authHolder.auth) { exports.authHolder.auth = { accessToken, refreshToken }; } if (accessToken) { try { yield exports.authHolder.appClient.account.getAccount(); logger_1.logger.debug('Successful probe request, continue...'); } catch (e) { if (e.status === 401 && refreshToken) { logger_1.logger.info('Expired access token, refreshing session...'); return yield refreshSession(refreshToken); } else { throw Error("'provideAuth()' does not provide the required auth parameters"); } } } else if (refreshToken) { logger_1.logger.info('Missing access token, refreshing session...'); return yield refreshSession(refreshToken); } else { throw Error("'provideAuth()' does not provide the required auth parameters"); } }); exports.checkAuthSession = checkAuthSession; //# sourceMappingURL=session.js.map