UNPKG

@amplitude/ampli

Version:

Amplitude CLI

57 lines (56 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const graphql_request_1 = require("graphql-request"); const constants_1 = require("../constants"); const generated_1 = require("./generated"); const sentry_1 = require("../sentry"); const types_1 = require("../types"); const settings_1 = require("../settings"); const proxy_1 = require("../util/http/proxy"); const MAX_RETRY_COUNT = 3; const BASE_RETRY_INTERVAL = 10000; const REQUEST_TIMEOUT = 30000; function getActionName(action) { var _a; const requestedDocumentName = ((_a = action.toString().match(/exports\.(.*)Document/)) === null || _a === void 0 ? void 0 : _a.pop()) || 'Unknown'; return `GraphQL:${requestedDocumentName}`; } async function getAmpliGraphQLClient(headers, zone) { var _a, _b, _c; let apiZone; if (zone != null) { apiZone = zone; } else { const settings = settings_1.getSettings(); apiZone = (_c = (_a = settings.getZone()) !== null && _a !== void 0 ? _a : (_b = settings.projectUser()) === null || _b === void 0 ? void 0 : _b.zone) !== null && _c !== void 0 ? _c : types_1.DEFAULT_ZONE; } return Object.assign(Object.assign({}, generated_1.getSdk(new graphql_request_1.GraphQLClient(constants_1.APP_SETTINGS.ampli(apiZone).apiUrl, { headers, agent: proxy_1.createHttpProxyAgent(), timeout: REQUEST_TIMEOUT, }), async (action) => { const actionName = getActionName(action); sentry_1.default.addBreadcrumb({ message: actionName, level: sentry_1.Severity.Info, }); return callAction(action, 1); })), { zone: apiZone }); } exports.default = getAmpliGraphQLClient; async function callAction(action, retryCount) { try { return await action(); } catch (e) { if ((!e.response || e.response.status >= 500) && retryCount < MAX_RETRY_COUNT) { await sleep(retryCount * BASE_RETRY_INTERVAL); return callAction(action, retryCount + 1); } throw e; } } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }