fusion-plugin-rpc
Version:
Fetch data on the server and client with an RPC style interface.
140 lines (120 loc) • 14.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fusionCore = require("fusion-core");
var _fusionPluginUniversalEvents = require("fusion-plugin-universal-events");
var _fusionPluginI18n = require("fusion-plugin-i18n");
var _fusionTokens = require("fusion-tokens");
var _tokens = require("./tokens.js");
var _utils = require("./utils.js");
/** Copyright (c) 2018 Uber Technologies, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*
*/
/* eslint-env browser */
const statKey = 'rpc:method-client';
class RPC {
constructor({
fetch,
emitter,
rpcConfig,
queryParams
}) {
this.fetch = fetch;
this.config = rpcConfig || {};
this.emitter = emitter;
this.queryParams = queryParams;
this.apiPath = (0, _utils.formatApiPath)(rpcConfig && rpcConfig.apiPath ? rpcConfig.apiPath : 'api');
}
request(rpcId, args, headers, options) {
if (!this.fetch) {
throw new Error('fusion-plugin-rpc requires `fetch`');
}
if (!this.emitter) {
throw new Error('Missing emitter registered to UniversalEventsToken');
}
const fetch = this.fetch;
const emitter = this.emitter;
const apiPath = this.apiPath;
const startTime = Date.now();
const queryParams = this.queryParams.length > 0 ? `?${this.queryParams.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&')}` : '';
return fetch(`${apiPath}${rpcId}${queryParams}`, args instanceof FormData ? { ...options,
method: 'POST',
headers: { // Content-Type will be set automatically
...(headers || {})
},
body: args
} : { ...options,
method: 'POST',
// $FlowFixMe
headers: {
'Content-Type': 'application/json',
...(headers || {})
},
body: JSON.stringify(args || {})
}).then(r => r.json()).then(args => {
const {
status,
data
} = args;
if (status === 'success') {
emitter.emit(statKey, {
method: rpcId,
status: 'success',
timing: Date.now() - startTime
});
return data;
} else {
emitter.emit(statKey, {
method: rpcId,
error: data,
status: 'failure',
timing: Date.now() - startTime
});
return Promise.reject(data ? data : {});
}
});
}
}
const pluginFactory = () => (0, _fusionCore.createPlugin)({
deps: {
fetch: _fusionTokens.FetchToken,
emitter: _fusionPluginUniversalEvents.UniversalEventsToken,
i18n: _fusionPluginI18n.I18nToken.optional,
rpcConfig: _tokens.RPCHandlersConfigToken.optional,
queryParams: _tokens.RPCQueryParamsToken.optional
},
provides: deps => {
const {
fetch = window.fetch,
emitter,
rpcConfig,
i18n,
queryParams
} = deps;
return {
from: (0, _fusionCore.memoize)(ctx => {
const queryParamsValue = queryParams && queryParams.from(ctx) || [];
const locale = i18n && i18n.from(ctx).locale || '';
const localeCode = typeof locale === 'string' ? locale : locale.code;
if (localeCode) {
queryParamsValue.push(['localeCode', localeCode]);
}
return new RPC({
fetch,
emitter,
rpcConfig,
queryParams: queryParamsValue
});
})
};
}
});
var _default = false && pluginFactory();
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9icm93c2VyLmpzIl0sIm5hbWVzIjpbInN0YXRLZXkiLCJSUEMiLCJjb25zdHJ1Y3RvciIsImZldGNoIiwiZW1pdHRlciIsInJwY0NvbmZpZyIsInF1ZXJ5UGFyYW1zIiwiY29uZmlnIiwiYXBpUGF0aCIsInJlcXVlc3QiLCJycGNJZCIsImFyZ3MiLCJoZWFkZXJzIiwib3B0aW9ucyIsIkVycm9yIiwic3RhcnRUaW1lIiwiRGF0ZSIsIm5vdyIsImxlbmd0aCIsIm1hcCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsIkZvcm1EYXRhIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aGVuIiwiciIsImpzb24iLCJzdGF0dXMiLCJkYXRhIiwiZW1pdCIsInRpbWluZyIsImVycm9yIiwiUHJvbWlzZSIsInJlamVjdCIsInBsdWdpbkZhY3RvcnkiLCJkZXBzIiwiRmV0Y2hUb2tlbiIsIlVuaXZlcnNhbEV2ZW50c1Rva2VuIiwiaTE4biIsIkkxOG5Ub2tlbiIsIm9wdGlvbmFsIiwiUlBDSGFuZGxlcnNDb25maWdUb2tlbiIsIlJQQ1F1ZXJ5UGFyYW1zVG9rZW4iLCJwcm92aWRlcyIsIndpbmRvdyIsImZyb20iLCJjdHgiLCJxdWVyeVBhcmFtc1ZhbHVlIiwibG9jYWxlIiwibG9jYWxlQ29kZSIsImNvZGUiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBVUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBTUE7O0FBdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBdUJBLE1BQU1BLE9BQU8sR0FBRyxtQkFBaEI7O0FBRUEsTUFBTUMsR0FBTixDQUFVO0FBUVJDLEVBQUFBLFdBQVcsQ0FBQztBQUFDQyxJQUFBQSxLQUFEO0FBQVFDLElBQUFBLE9BQVI7QUFBaUJDLElBQUFBLFNBQWpCO0FBQTRCQyxJQUFBQTtBQUE1QixHQUFELEVBQStEO0FBQ3hFLFNBQUtILEtBQUwsR0FBYUEsS0FB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QUNELGVBQU8sSUFBSXJELEdBQUosQ0FBUTtBQUNiRSxVQUFBQSxLQURhO0FBRWJDLFVBQUFBLE9BRmE7QUFHYkMsVUFBQUEsU0FIYTtBQUliQyxVQUFBQSxXQUFXLEVBQUU4QztBQUpBLFNBQVIsQ0FBUDtBQU1ELE9BYks7QUFERCxLQUFQO0FBZ0JEO0FBakNVLENBQWIsQ0FERjs7ZUFxQ2lCLFNBQWViLGFBQWEsRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICovXG5cbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG5pbXBvcnQge2NyZWF0ZVBsdWdpbiwgbWVtb2l6ZSwgdHlwZSBDb250ZXh0fSBmcm9tICdmdXNpb24tY29yZSc7XG5pbXBvcnQge1VuaXZlcnNhbEV2ZW50c1Rva2VufSBmcm9tICdmdXNpb24tcGx1Z2luLXVuaXZlcnNhbC1ldmVudHMnO1xuaW1wb3J0IHtJMThuVG9rZW59IGZyb20gJ2Z1c2lvbi1wbHVnaW4taTE4bic7XG5pbXBvcnQge0ZldGNoVG9rZW59IGZyb20gJ2Z1c2lvbi10b2tlbnMnO1xuaW1wb3J0IHR5cGUge0ZldGNofSBmcm9tICdmdXNpb24tdG9rZW5zJztcblxuaW1wb3J0IHtcbiAgdHlwZSBIYW5kbGVyVHlwZSxcbiAgUlBDSGFuZGxlcnNDb25maWdUb2tlbixcbiAgUlBDUXVlcnlQYXJhbXNUb2tlbixcbn0gZnJvbSAnLi90b2tlbnMuanMnO1xuaW1wb3J0IHR5cGUge1JQQ1BsdWdpblR5cGUsIElFbWl0dGVyLCBSUENDb25maWdUeXBlfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7Zm9ybWF0QXBpUGF0aH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbnR5cGUgSW5pdGlhbGl6YXRpb25PcHRzID0ge1xuICBmZXRjaDogRmV0Y2gsXG4gIGVtaXR0ZXI6IElFbWl0dGVyLFxuICBxdWVyeVBhcmFtczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT4sXG4gIHJwY0NvbmZpZzogP1JQQ0NvbmZpZ1R5cGUsXG59O1xuXG5jb25zdCBzdGF0S2V5ID0gJ3JwYzptZXRob2QtY2xpZW50JztcblxuY2xhc3MgUlBDIHtcbiAgY3R4OiA/Q29udGV4dDtcbiAgZW1pdHRlcjogP0lFbWl0dGVyO1xuICBoYW5kbGVyczogP0hhbmRsZXJUeXBlO1xuICBxdWVyeVBhcmFtczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT47XG4gIGZldGNoOiA/RmV0Y2g7XG4gIGNvbmZpZzogP1JQQ0NvbmZpZ1R5cGU7XG4gIGFwaVBhdGg6IHN0cmluZztcbiAgY29uc3RydWN0b3Ioe2ZldGNoLCBlbWl0dGVyLCBycGNDb25maWcsIHF1ZXJ5UGFyYW1zfTogSW5pdGlhbGl6YXRpb25PcHRzKSB7XG4gICAgdGhpcy5mZXRjaCA9IGZldGNoO1xuICAgIHRoaXMuY29uZmlnID0gcnBjQ29uZmlnIHx8IHt9O1xuICAgIHRoaXMuZW1pdHRlciA9IGVtaXR0ZXI7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zO1xuXG4gICAgdGhpcy5hcGlQYXRoID0gZm9ybWF0QXBpUGF0aChcbiAgICAgIHJwY0NvbmZpZyAmJiBycGNDb25maWcuYXBpUGF0aCA/IHJwY0NvbmZpZy5hcGlQYXRoIDogJ2FwaSdcbiAgICApO1xuICB9XG5cbiAgcmVxdWVzdDxUQXJncywgVFJlc3VsdD4oXG4gICAgcnBjSWQ6IHN0cmluZyxcbiAgICBhcmdzOiBUQXJncyxcbiAgICBoZWFkZXJzOiA/e1tzdHJpbmddOiBzdHJpbmd9LFxuICAgIG9wdGlvbnM6ID9SZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuZmV0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZnVzaW9uLXBsdWdpbi1ycGMgcmVxdWlyZXMgYGZldGNoYCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW1pdHRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGVtaXR0ZXIgcmVnaXN0ZXJlZCB0byBVbml2ZXJzYWxFdmVudHNUb2tlbicpO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaCA9IHRoaXMuZmV0Y2g7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuZW1pdHRlcjtcbiAgICBjb25zdCBhcGlQYXRoID0gdGhpcy5hcGlQYXRoO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgPyR7dGhpcy5xdWVyeVBhcmFtc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKFtrLCB2XSkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignJicpfWBcbiAgICAgICAgOiAnJztcblxuICAgIHJldHVybiBmZXRjaChcbiAgICAgIGAke2FwaVBhdGh9JHtycGNJZH0ke3F1ZXJ5UGFyYW1zfWAsXG4gICAgICBhcmdzIGluc3RhbmNlb2YgRm9ybURhdGFcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIC8vIENvbnRlbnQtVHlwZSB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5XG4gICAgICAgICAgICAgIC4uLihoZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBhcmdzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgIC4uLihoZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShhcmdzIHx8IHt9KSxcbiAgICAgICAgICB9XG4gICAgKVxuICAgICAgLnRoZW4oKHIpID0+IHIuanNvbigpKVxuICAgICAgLnRoZW4oKGFyZ3MpID0+IHtcbiAgICAgICAgY29uc3Qge3N0YXR1cywgZGF0YX0gPSBhcmdzO1xuICAgICAgICBpZiAoc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICBlbWl0dGVyLmVtaXQoc3RhdEtleSwge1xuICAgICAgICAgICAgbWV0aG9kOiBycGNJZCxcbiAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgdGltaW5nOiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtaXR0ZXIuZW1pdChzdGF0S2V5LCB7XG4gICAgICAgICAgICBtZXRob2Q6IHJwY0lkLFxuICAgICAgICAgICAgZXJyb3I6IGRhdGEsXG4gICAgICAgICAgICBzdGF0dXM6ICdmYWlsdXJlJyxcbiAgICAgICAgICAgIHRpbWluZzogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGF0YSA/IGRhdGEgOiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHBsdWdpbkZhY3Rvcnk6ICgpID0+IFJQQ1BsdWdpblR5cGUgPSAoKSA9PlxuICBjcmVhdGVQbHVnaW4oe1xuICAgIGRlcHM6IHtcbiAgICAgIGZldGNoOiBGZXRjaFRva2VuLFxuICAgICAgZW1pdHRlcjogVW5pdmVyc2FsRXZlbnRzVG9rZW4sXG4gICAgICBpMThuOiBJMThuVG9rZW4ub3B0aW9uYWwsXG4gICAgICBycGNDb25maWc6IFJQQ0hhbmRsZXJzQ29uZmlnVG9rZW4ub3B0aW9uYWwsXG4gICAgICBxdWVyeVBhcmFtczogUlBDUXVlcnlQYXJhbXNUb2tlbi5vcHRpb25hbCxcbiAgICB9LFxuICAgIHByb3ZpZGVzOiAoZGVwcykgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmZXRjaCA9IHdpbmRvdy5mZXRjaCxcbiAgICAgICAgZW1pdHRlcixcbiAgICAgICAgcnBjQ29uZmlnLFxuICAgICAgICBpMThuLFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIH0gPSBkZXBzO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiBtZW1vaXplKChjdHgpID0+IHtcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtc1ZhbHVlID0gKHF1ZXJ5UGFyYW1zICYmIHF1ZXJ5UGFyYW1zLmZyb20oY3R4KSkgfHwgW107XG4gICAgICAgICAgY29uc3QgbG9jYWxlID0gKGkxOG4gJiYgaTE4bi5mcm9tKGN0eCkubG9jYWxlKSB8fCAnJztcbiAgICAgICAgICBjb25zdCBsb2NhbGVDb2RlID0gdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycgPyBsb2NhbGUgOiBsb2NhbGUuY29kZTtcbiAgICAgICAgICBpZiAobG9jYWxlQ29kZSkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXNWYWx1ZS5wdXNoKFsnbG9jYWxlQ29kZScsIGxvY2FsZUNvZGVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBSUEMoe1xuICAgICAgICAgICAgZmV0Y2gsXG4gICAgICAgICAgICBlbWl0dGVyLFxuICAgICAgICAgICAgcnBjQ29uZmlnLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zVmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9LFxuICB9KTtcblxuZXhwb3J0IGRlZmF1bHQgKChfX0JST1dTRVJfXyAmJiBwbHVnaW5GYWN0b3J5KCk6IGFueSk6IFJQQ1BsdWdpblR5cGUpO1xuIl19