@amplitude/ampli
Version:
Amplitude CLI
57 lines (56 loc) • 2.15 kB
JavaScript
;
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));
}