UNPKG

@dodi-smart/ttlock-graphql-api

Version:
96 lines 3.61 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 logger_1 = require("./logger"); const utils_1 = require("./utils"); const ttlock_api_1 = require("@dodi-smart/ttlock-api"); class AuthHolder { constructor() { this._clientId = (0, utils_1.required)('TTLOCK_CLIENT_ID'); this._clientSecret = (0, utils_1.required)('TTLOCK_CLIENT_SECRET'); } get clientId() { return this._clientId; } get clientSecret() { return this._clientSecret; } get auth() { return this._auth; } set auth(auth) { this._auth = auth; } } exports.authHolder = new AuthHolder(); const appClient = new ttlock_api_1.OAuthApi(); const lockClinet = new ttlock_api_1.LockApi(); const refreshSession = (refreshToken) => __awaiter(void 0, void 0, void 0, function* () { var _a; try { const session = yield appClient.token({ clientId: exports.authHolder.clientId, clientSecret: exports.authHolder.clientSecret, grantType: 'refresh_token', refreshToken }); if (session.errcode) { throw new Error((_a = session.errmsg) !== null && _a !== void 0 ? _a : ''); } if (session.accessToken) { exports.authHolder.auth = { accessToken: session.accessToken, refreshToken: (0, utils_1.fixStringNullable)(session.refreshToken) }; return exports.authHolder.auth; } else { throw new Error('Refreshing session failed!'); } } catch (e) { logger_1.logger.error(`token: ${e}`); } }); const checkAuthSession = (providedAuth) => __awaiter(void 0, void 0, void 0, function* () { const { clientId } = exports.authHolder; const { accessToken, refreshToken } = providedAuth; if (accessToken) { const probeRequest = yield lockClinet.getLocks({ clientId, accessToken, date: new Date().getTime(), pageNo: 1, pageSize: 10 }); if (probeRequest.errcode === 10004 && refreshToken) { logger_1.logger.info('Expired access token, refreshing session...'); return yield refreshSession(refreshToken); } else { logger_1.logger.debug('Successful probe request, continue...'); exports.authHolder.auth = { accessToken, refreshToken }; } } 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