@kiwicom/smart-faq
Version:
170 lines (139 loc) • 4.91 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.fetchQuery = fetchQuery;
exports.default = exports.ERROR_FORBIDDEN = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _relayRuntime = require("relay-runtime");
var _idx = _interopRequireDefault(require("idx"));
var _translationUtils = require("../helpers/translationUtils");
// @noflow
require('isomorphic-fetch'); // used when smart FAQ installed as dependency
var uri = 'https://graphql.kiwi.com';
var cache = new _relayRuntime.QueryResponseCache({
size: 200,
ttl: 30 * 60 * 1000
});
var ERROR_FORBIDDEN = 'Forbidden 403';
exports.ERROR_FORBIDDEN = ERROR_FORBIDDEN;
function fetchQuery(_x, _x2, _x3) {
return _fetchQuery.apply(this, arguments);
}
function _fetchQuery() {
_fetchQuery = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee2(headers, operation, variables) {
var response, json;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return fetch(process.env.GRAPHQL_URI || uri, {
method: 'POST',
headers: headers,
body: JSON.stringify({
query: operation.text,
// GraphQL text from input
variables: variables,
operationName: operation.name
})
});
case 2:
response = _context2.sent;
_context2.next = 5;
return response.json();
case 5:
json = _context2.sent;
if (!(json.errors && json.errors.length > 0 && json.errors.some(function (error) {
return (0, _idx.default)(error, function (_) {
return _.extensions.proxy.statusCode;
}) === '403';
}))) {
_context2.next = 8;
break;
}
throw new Error(ERROR_FORBIDDEN);
case 8:
return _context2.abrupt("return", json);
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return _fetchQuery.apply(this, arguments);
}
var buildQueryFetcher = function buildQueryFetcher() {
var token
/*: string*/
= arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var locale
/*: string*/
= arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _translationUtils.DEFAULT_LOCALE;
return (
/*#__PURE__*/
function () {
var _ref = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee(operation, variables, cacheConfig) {
var forceFetch, isQuery, cachedData, headers, json;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
forceFetch = cacheConfig.force;
isQuery = operation.operationKind === 'query';
if (!(!forceFetch && isQuery)) {
_context.next = 6;
break;
}
cachedData = cache.get(operation.text, variables);
if (!cachedData) {
_context.next = 6;
break;
}
return _context.abrupt("return", cachedData);
case 6:
headers = {
'Content-Type': 'application/json',
'Accept-Language': locale,
Authorization: token
};
_context.next = 9;
return fetchQuery(headers, operation, variables);
case 9:
json = _context.sent;
if (!forceFetch && isQuery) {
cache.set(operation.text, variables, json);
}
return _context.abrupt("return", json);
case 12:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function (_x4, _x5, _x6) {
return _ref.apply(this, arguments);
};
}()
);
};
var createEnvironment = function createEnvironment(token
/*: ?string*/
, locale
/*: ?string*/
) {
return new _relayRuntime.Environment({
network: _relayRuntime.Network.create(buildQueryFetcher(token, locale)),
store: new _relayRuntime.Store(new _relayRuntime.RecordSource())
});
};
var _default = createEnvironment;
exports.default = _default;