@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
70 lines (69 loc) • 2.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const PluggableElementBase_1 = __importDefault(require("./PluggableElementBase"));
const map_obj_1 = __importDefault(require("../util/map-obj"));
const tracks_1 = require("../util/tracks");
const types_1 = require("../util/types");
class RpcMethodType extends PluggableElementBase_1.default {
constructor(pluginManager) {
super();
this.pluginManager = pluginManager;
}
async serializeArguments(args, rpcDriverClassName) {
const blobMap = (0, tracks_1.getBlobMap)();
await this.augmentLocationObjects(args, rpcDriverClassName);
return { ...args, blobMap };
}
async serializeNewAuthArguments(loc, rpcDriverClassName) {
const rootModel = this.pluginManager.rootModel;
if (!(0, types_1.isAppRootModel)(rootModel) || loc.internetAccountPreAuthorization) {
return loc;
}
const account = rootModel.findAppropriateInternetAccount(loc);
if (account && rpcDriverClassName !== 'MainThreadRpcDriver') {
loc.internetAccountPreAuthorization =
await account.getPreAuthorizationInformation(loc);
}
return loc;
}
async deserializeArguments(args, _rpcDriverClassName) {
if (args.blobMap) {
(0, tracks_1.setBlobMap)(args.blobMap);
}
return args;
}
async serializeReturn(originalReturn, _args, _rpcDriverClassName) {
return originalReturn;
}
async deserializeReturn(serializedReturn, _args, _rpcDriverClassName) {
var _a;
let r;
try {
r = await serializedReturn;
}
catch (error) {
if ((0, types_1.isAuthNeededException)(error)) {
const retryAccount = (_a = this.pluginManager.rootModel) === null || _a === void 0 ? void 0 : _a.createEphemeralInternetAccount(`HTTPBasicInternetAccount-${new URL(error.url).origin}`, {}, error.url);
throw new types_1.RetryError('Retrying with created internet account', retryAccount.internetAccountId);
}
throw error;
}
return r;
}
async augmentLocationObjects(thing, rpcDriverClassName) {
const uris = [];
(0, map_obj_1.default)(thing, val => {
if ((0, types_1.isUriLocation)(val)) {
uris.push(val);
}
});
for (const uri of uris) {
await this.serializeNewAuthArguments(uri, rpcDriverClassName);
}
return thing;
}
}
exports.default = RpcMethodType;