UNPKG

@jbrowse/plugin-authentication

Version:

JBrowse 2 Authentication

66 lines (65 loc) 2.88 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const jsx_runtime_1 = require("react/jsx-runtime"); const configuration_1 = require("@jbrowse/core/configuration"); const mobx_state_tree_1 = require("mobx-state-tree"); const OAuthModel_1 = require("../OAuthModel"); const DropboxIcon_1 = __importDefault(require("./DropboxIcon")); const util_1 = require("./util"); const model_1 = __importDefault(require("../OAuthModel/model")); const stateModelFactory = (configSchema) => { return (0, model_1.default)(OAuthModel_1.configSchema) .named('DropboxOAuthInternetAccount') .props({ type: mobx_state_tree_1.types.literal('DropboxOAuthInternetAccount'), configuration: (0, configuration_1.ConfigurationReference)(configSchema), }) .views(() => ({ get toggleContents() { return (0, jsx_runtime_1.jsx)(DropboxIcon_1.default, {}); }, get selectorLabel() { return 'Enter Dropbox share link'; }, })) .actions(self => ({ getFetcher(location) { return async (input, init) => { const authToken = await self.getToken(location); const newInit = self.addAuthHeaderToInit({ ...init, method: 'POST' }, authToken); newInit.headers.append('Dropbox-API-Arg', JSON.stringify({ url: input })); const response = await fetch('https://content.dropboxapi.com/2/sharing/get_shared_link_file', newInit); if (!response.ok) { throw new Error(await (0, util_1.getDescriptiveErrorMessage)(response)); } return response; }; }, async validateToken(token, location) { const response = await fetch('https://api.dropboxapi.com/2/sharing/get_shared_link_metadata', { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ url: location.uri, }), }); if (!response.ok) { const refreshToken = self.retrieveRefreshToken(); if (refreshToken) { self.removeRefreshToken(); const newToken = await self.exchangeRefreshForAccessToken(refreshToken); return this.validateToken(newToken, location); } throw new Error(await (0, util_1.getDescriptiveErrorMessage)(response, 'Token could not be validated')); } return token; }, })); }; exports.default = stateModelFactory;