UNPKG

@sethub/sdk

Version:

<div align="center"> <h1> SetHub SDK </h1>

217 lines (216 loc) 11.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SetHub = void 0; const client_1 = require("./http/client"); const version_1 = require("./version"); const index_1 = require("./services/activity/index"); const index_2 = require("./services/admin/index"); const index_3 = require("./services/applications/index"); const index_4 = require("./services/authentication/index"); const index_5 = require("./services/invitations/index"); const index_6 = require("./services/members/index"); const index_7 = require("./services/projects/index"); const index_8 = require("./services/update-sets/index"); const profiles_1 = require("./services/profiles"); __exportStar(require("./services/activity/protocols/activity"), exports); __exportStar(require("./services/activity/protocols/list.protocol"), exports); __exportStar(require("./services/admin/protocols/get-overview.protocol"), exports); __exportStar(require("./services/applications/protocols/application"), exports); __exportStar(require("./services/applications/protocols/create.protocol"), exports); __exportStar(require("./services/applications/protocols/delete.protocol"), exports); __exportStar(require("./services/applications/protocols/get-details.protocol"), exports); __exportStar(require("./services/applications/protocols/list.protocol"), exports); __exportStar(require("./services/applications/protocols/update.protocol"), exports); __exportStar(require("./services/authentication/protocols/authentication"), exports); __exportStar(require("./services/authentication/protocols/sign-in-with-email-and-password.protocols"), exports); __exportStar(require("./services/authentication/protocols/sign-up.protocols"), exports); __exportStar(require("./services/invitations/protocols/invitation"), exports); __exportStar(require("./services/invitations/protocols/accept.protocol"), exports); __exportStar(require("./services/invitations/protocols/create.protocol"), exports); __exportStar(require("./services/invitations/protocols/delete.protocol"), exports); __exportStar(require("./services/invitations/protocols/list.protocol"), exports); __exportStar(require("./services/invitations/protocols/reject.protocol"), exports); __exportStar(require("./services/invitations/protocols/update-role.protocol"), exports); __exportStar(require("./services/members/protocols/member"), exports); __exportStar(require("./services/members/protocols/activate-access.protocol"), exports); __exportStar(require("./services/members/protocols/deactivate-access.protocol"), exports); __exportStar(require("./services/members/protocols/list-editors.protocol"), exports); __exportStar(require("./services/members/protocols/list.protocol"), exports); __exportStar(require("./services/members/protocols/update-role.protocol"), exports); __exportStar(require("./services/profiles/protocols/profile"), exports); __exportStar(require("./services/profiles/protocols/get-my.protocol"), exports); __exportStar(require("./services/projects/protocols/project"), exports); __exportStar(require("./services/projects/protocols/create.protocol"), exports); __exportStar(require("./services/projects/protocols/delete.protocol"), exports); __exportStar(require("./services/projects/protocols/get-details.protocol"), exports); __exportStar(require("./services/projects/protocols/list-mine.protocol"), exports); __exportStar(require("./services/projects/protocols/update.protocol"), exports); __exportStar(require("./services/update-sets/protocols/update-set"), exports); __exportStar(require("./services/update-sets/protocols/get-details.protocol"), exports); __exportStar(require("./services/update-sets/protocols/create.protocol"), exports); __exportStar(require("./services/update-sets/protocols/delete.protocol"), exports); __exportStar(require("./services/update-sets/protocols/list.protocol"), exports); __exportStar(require("./services/update-sets/protocols/update.protocol"), exports); const AUTHENTICATION_ROUTES = [ '/v1/auth/login', '/v1/auth/refresh', ]; class SetHub { constructor(options) { this.options = options; this.isRefreshingAccessToken = false; this.failedRequestsQueue = []; this.accessToken = null; this.refreshToken = null; this.httpClient = new client_1.HttpClient({ baseURL: options.baseURL, requestInterceptors: [ this.setupMetaHeadersInterceptor.bind(this), this.authenticatedRoutesInterceptor.bind(this) ], responseInterceptors: [ this.refreshAuthenticationInterceptor.bind(this), this.storeAuthenticationOutputInterceptor.bind(this) ] }); this.admin = new index_2.Admin(this.httpClient); this.authentication = new index_4.Authentication(this.httpClient); this.projects = new index_7.Projects(this.httpClient); this.projectActivity = new index_1.ProjectActivity(this.httpClient); this.projectApplications = new index_3.ProjectApplication(this.httpClient); this.projectInvitations = new index_5.ProjectInvitations(this.httpClient); this.projectMembers = new index_6.ProjectMembers(this.httpClient); this.projectUpdateSets = new index_8.ProjectUpdateSets(this.httpClient); this.profiles = new profiles_1.Profiles(this.httpClient); } async setupMetaHeadersInterceptor(config) { config.headers.set('X-Client-ID', String(this.options.client.id || "").trim() || 'unknown'); config.headers.set('X-Client-Name', String(this.options.client.name || "").trim() || 'unknown'); config.headers.set('X-Client-Version', String(this.options.client.version || "").trim() || 'unknown'); config.headers.set('X-SDK-Version', version_1.sdkVersion); config.headers.set('X-Platform', String(this.options.platform.name || "").trim() || 'unknown'); config.headers.set('X-Platform-Version', String(this.options.platform.version || "").trim() || 'unknown'); return config; } async authenticatedRoutesInterceptor(config) { if (this.options.logRequests) { console.log(`${config.method} ${config.url} ${this.accessToken ? '(with auth)' : ''}`); } const urlPathname = new URL(config.url, this.options.baseURL).pathname; const routeRequiresAuthentication = !AUTHENTICATION_ROUTES.includes(urlPathname); if (routeRequiresAuthentication) { if (this.options.authenticationStore) { const storedAuthentication = await this.options.authenticationStore.get(); if (storedAuthentication) { this.accessToken = storedAuthentication.accessToken; this.refreshToken = storedAuthentication.refreshToken; } } if (this.accessToken) { // TODO: Só incluir o token se forem rotas privadas config.headers.set('Authorization', `Bearer ${this.accessToken}`); } } return config; } async refreshAuthenticationInterceptor(config, response) { var _a; if (response.ok) { return response; } const errorResponse = response; const authenticationExpired = errorResponse.statusCode === 401 && ((_a = errorResponse.body) === null || _a === void 0 ? void 0 : _a.code) === 'token.expired'; if (!authenticationExpired) { return response; } if (!this.refreshToken) { return response; } if (!this.isRefreshingAccessToken) { this.isRefreshingAccessToken = true; this.refreshAccessToken() .then((refreshTokenResponse) => { if (!refreshTokenResponse.ok) { throw refreshTokenResponse; } return refreshTokenResponse.body; }) .then(async (refreshTokenResponse) => { this.accessToken = refreshTokenResponse.access_token; this.refreshToken = refreshTokenResponse.refresh_token; if (this.options.authenticationStore) { await this.options.authenticationStore.store({ accessToken: refreshTokenResponse.access_token, refreshToken: refreshTokenResponse.refresh_token }); } this.failedRequestsQueue.forEach((request) => { request.onSuccess(refreshTokenResponse.access_token); }); this.failedRequestsQueue = []; }) .catch(async (refreshTokenError) => { if (this.options.authenticationStore) { await this.options.authenticationStore.remove(); } this.failedRequestsQueue.forEach((request) => { request.onFailure(refreshTokenError); }); this.failedRequestsQueue = []; if (this.options.onLogout) { this.options.onLogout(); } }) .finally(() => { this.isRefreshingAccessToken = false; }); return new Promise((resolve, reject) => { this.failedRequestsQueue.push({ onSuccess: (updatedAccessToken) => { config.headers.set('Authorization', `Bearer ${updatedAccessToken}`); resolve(this.httpClient.request(config)); }, onFailure: reject }); }); } return errorResponse; } async storeAuthenticationOutputInterceptor(config, response) { if (!response.ok) { return response; } const isAuthenticationResponse = AUTHENTICATION_ROUTES.includes(config.url); if (isAuthenticationResponse) { const body = response.body; if (this.options.authenticationStore) { await this.options.authenticationStore.store({ accessToken: body.access_token, refreshToken: body.refresh_token }); } this.accessToken = body.access_token; this.refreshToken = body.refresh_token; } return response; } async refreshAccessToken() { return this.httpClient.post('/v1/auth/refresh', { refresh_token: this.refreshToken }); } } exports.SetHub = SetHub;