@elastic/apm-rum
Version:
Elastic APM JavaScript agent
1,553 lines (1,283 loc) • 609 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["elastic-apm-rum"] = factory();
else
root["elastic-apm-rum"] = factory();
})(self, function() {
return /******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../rum-core/dist/es/bootstrap.js":
/*!****************************************!*\
!*** ../rum-core/dist/es/bootstrap.js ***!
\****************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ bootstrap: function() { return /* binding */ bootstrap; }
/* harmony export */ });
/* harmony import */ var _common_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common/utils */ "../rum-core/dist/es/common/utils.js");
/* harmony import */ var _common_patching__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common/patching */ "../rum-core/dist/es/common/patching/index.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "../rum-core/dist/es/state.js");
var enabled = false;
function bootstrap() {
if ((0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.isPlatformSupported)()) {
(0,_common_patching__WEBPACK_IMPORTED_MODULE_1__.patchAll)();
_state__WEBPACK_IMPORTED_MODULE_2__.state.bootstrapTime = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.now)();
enabled = true;
} else if (_common_utils__WEBPACK_IMPORTED_MODULE_0__.isBrowser) {
console.log('[Elastic APM] platform is not supported!');
}
return enabled;
}
/***/ }),
/***/ "../rum-core/dist/es/common/after-frame.js":
/*!*************************************************!*\
!*** ../rum-core/dist/es/common/after-frame.js ***!
\*************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": function() { return /* binding */ afterFrame; }
/* harmony export */ });
var RAF_TIMEOUT = 100;
function afterFrame(callback) {
var handler = function handler() {
clearTimeout(timeout);
cancelAnimationFrame(raf);
setTimeout(callback);
};
var timeout = setTimeout(handler, RAF_TIMEOUT);
var raf = requestAnimationFrame(handler);
}
/***/ }),
/***/ "../rum-core/dist/es/common/apm-server.js":
/*!************************************************!*\
!*** ../rum-core/dist/es/common/apm-server.js ***!
\************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _queue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./queue */ "../rum-core/dist/es/common/queue.js");
/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./throttle */ "../rum-core/dist/es/common/throttle.js");
/* harmony import */ var _ndjson__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ndjson */ "../rum-core/dist/es/common/ndjson.js");
/* harmony import */ var _truncate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./truncate */ "../rum-core/dist/es/common/truncate.js");
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "../rum-core/dist/es/common/constants.js");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "../rum-core/dist/es/common/utils.js");
/* harmony import */ var _polyfills__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./polyfills */ "../rum-core/dist/es/common/polyfills.js");
/* harmony import */ var _compress__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./compress */ "../rum-core/dist/es/common/compress.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../state */ "../rum-core/dist/es/state.js");
/* harmony import */ var _http_fetch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./http/fetch */ "../rum-core/dist/es/common/http/fetch.js");
/* harmony import */ var _http_xhr__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./http/xhr */ "../rum-core/dist/es/common/http/xhr.js");
var THROTTLE_INTERVAL = 60000;
var ApmServer = function () {
function ApmServer(configService, loggingService) {
this._configService = configService;
this._loggingService = loggingService;
this.queue = undefined;
this.throttleEvents = _utils__WEBPACK_IMPORTED_MODULE_0__.noop;
}
var _proto = ApmServer.prototype;
_proto.init = function init() {
var _this = this;
var queueLimit = this._configService.get('queueLimit');
var flushInterval = this._configService.get('flushInterval');
var limit = this._configService.get('eventsLimit');
var onFlush = function onFlush(events) {
var promise = _this.sendEvents(events);
if (promise) {
promise.catch(function (reason) {
_this._loggingService.warn('Failed sending events!', _this._constructError(reason));
});
}
};
this.queue = new _queue__WEBPACK_IMPORTED_MODULE_1__["default"](onFlush, {
queueLimit: queueLimit,
flushInterval: flushInterval
});
this.throttleEvents = (0,_throttle__WEBPACK_IMPORTED_MODULE_2__["default"])(this.queue.add.bind(this.queue), function () {
return _this._loggingService.warn('Dropped events due to throttling!');
}, {
limit: limit,
interval: THROTTLE_INTERVAL
});
this._configService.observeEvent(_constants__WEBPACK_IMPORTED_MODULE_3__.QUEUE_FLUSH, function () {
_this.queue.flush();
});
};
_proto._postJson = function _postJson(endPoint, payload) {
var _this2 = this;
var headers = {
'Content-Type': 'application/x-ndjson'
};
var apmRequest = this._configService.get('apmRequest');
var params = {
payload: payload,
headers: headers,
beforeSend: apmRequest
};
return (0,_compress__WEBPACK_IMPORTED_MODULE_4__.compressPayload)(params).catch(function (error) {
if (_state__WEBPACK_IMPORTED_MODULE_5__.__DEV__) {
_this2._loggingService.debug('Compressing the payload using CompressionStream API failed', error.message);
}
return params;
}).then(function (result) {
return _this2._makeHttpRequest('POST', endPoint, result);
}).then(function (_ref) {
var responseText = _ref.responseText;
return responseText;
});
};
_proto._constructError = function _constructError(reason) {
var url = reason.url,
status = reason.status,
responseText = reason.responseText;
if (typeof status == 'undefined') {
return reason;
}
var message = url + ' HTTP status: ' + status;
if (_state__WEBPACK_IMPORTED_MODULE_5__.__DEV__ && responseText) {
try {
var serverErrors = [];
var response = JSON.parse(responseText);
if (response.errors && response.errors.length > 0) {
response.errors.forEach(function (err) {
return serverErrors.push(err.message);
});
message += ' ' + serverErrors.join(',');
}
} catch (e) {
this._loggingService.debug('Error parsing response from APM server', e);
}
}
return new Error(message);
};
_proto._makeHttpRequest = function _makeHttpRequest(method, url, _temp) {
var _ref2 = _temp === void 0 ? {} : _temp,
_ref2$timeout = _ref2.timeout,
timeout = _ref2$timeout === void 0 ? _constants__WEBPACK_IMPORTED_MODULE_3__.HTTP_REQUEST_TIMEOUT : _ref2$timeout,
payload = _ref2.payload,
headers = _ref2.headers,
beforeSend = _ref2.beforeSend;
var sendCredentials = this._configService.get('sendCredentials');
if (!beforeSend && (0,_http_fetch__WEBPACK_IMPORTED_MODULE_6__.shouldUseFetchWithKeepAlive)(method, payload)) {
return (0,_http_fetch__WEBPACK_IMPORTED_MODULE_6__.sendFetchRequest)(method, url, {
keepalive: true,
timeout: timeout,
payload: payload,
headers: headers,
sendCredentials: sendCredentials
}).catch(function (reason) {
if (reason instanceof TypeError) {
return (0,_http_xhr__WEBPACK_IMPORTED_MODULE_7__.sendXHR)(method, url, {
timeout: timeout,
payload: payload,
headers: headers,
beforeSend: beforeSend,
sendCredentials: sendCredentials
});
}
throw reason;
});
}
return (0,_http_xhr__WEBPACK_IMPORTED_MODULE_7__.sendXHR)(method, url, {
timeout: timeout,
payload: payload,
headers: headers,
beforeSend: beforeSend,
sendCredentials: sendCredentials
});
};
_proto.fetchConfig = function fetchConfig(serviceName, environment) {
var _this3 = this;
var _this$getEndpoints = this.getEndpoints(),
configEndpoint = _this$getEndpoints.configEndpoint;
if (!serviceName) {
return _polyfills__WEBPACK_IMPORTED_MODULE_8__.Promise.reject('serviceName is required for fetching central config.');
}
configEndpoint += "?service.name=" + serviceName;
if (environment) {
configEndpoint += "&service.environment=" + environment;
}
var localConfig = this._configService.getLocalConfig();
if (localConfig) {
configEndpoint += "&ifnonematch=" + localConfig.etag;
}
var apmRequest = this._configService.get('apmRequest');
return this._makeHttpRequest('GET', configEndpoint, {
timeout: 5000,
beforeSend: apmRequest
}).then(function (xhr) {
var status = xhr.status,
responseText = xhr.responseText;
if (status === 304) {
return localConfig;
} else {
var remoteConfig = JSON.parse(responseText);
var etag = xhr.getResponseHeader('etag');
if (etag) {
remoteConfig.etag = etag.replace(/["]/g, '');
_this3._configService.setLocalConfig(remoteConfig, true);
}
return remoteConfig;
}
}).catch(function (reason) {
var error = _this3._constructError(reason);
return _polyfills__WEBPACK_IMPORTED_MODULE_8__.Promise.reject(error);
});
};
_proto.createMetaData = function createMetaData() {
var cfg = this._configService;
var metadata = {
service: {
name: cfg.get('serviceName'),
version: cfg.get('serviceVersion'),
agent: {
name: 'rum-js',
version: cfg.version
},
language: {
name: 'javascript'
},
environment: cfg.get('environment')
},
labels: cfg.get('context.tags')
};
return (0,_truncate__WEBPACK_IMPORTED_MODULE_9__.truncateModel)(_truncate__WEBPACK_IMPORTED_MODULE_9__.METADATA_MODEL, metadata);
};
_proto.addError = function addError(error) {
var _this$throttleEvents;
this.throttleEvents((_this$throttleEvents = {}, _this$throttleEvents[_constants__WEBPACK_IMPORTED_MODULE_3__.ERRORS] = error, _this$throttleEvents));
};
_proto.addTransaction = function addTransaction(transaction) {
var _this$throttleEvents2;
this.throttleEvents((_this$throttleEvents2 = {}, _this$throttleEvents2[_constants__WEBPACK_IMPORTED_MODULE_3__.TRANSACTIONS] = transaction, _this$throttleEvents2));
};
_proto.ndjsonErrors = function ndjsonErrors(errors, compress) {
var key = compress ? 'e' : 'error';
return errors.map(function (error) {
var _NDJSON$stringify;
return _ndjson__WEBPACK_IMPORTED_MODULE_10__["default"].stringify((_NDJSON$stringify = {}, _NDJSON$stringify[key] = compress ? (0,_compress__WEBPACK_IMPORTED_MODULE_4__.compressError)(error) : error, _NDJSON$stringify));
});
};
_proto.ndjsonMetricsets = function ndjsonMetricsets(metricsets) {
return metricsets.map(function (metricset) {
return _ndjson__WEBPACK_IMPORTED_MODULE_10__["default"].stringify({
metricset: metricset
});
}).join('');
};
_proto.ndjsonTransactions = function ndjsonTransactions(transactions, compress) {
var _this4 = this;
var key = compress ? 'x' : 'transaction';
return transactions.map(function (tr) {
var _NDJSON$stringify2;
var spans = '',
breakdowns = '';
if (!compress) {
if (tr.spans) {
spans = tr.spans.map(function (span) {
return _ndjson__WEBPACK_IMPORTED_MODULE_10__["default"].stringify({
span: span
});
}).join('');
delete tr.spans;
}
if (tr.breakdown) {
breakdowns = _this4.ndjsonMetricsets(tr.breakdown);
delete tr.breakdown;
}
}
return _ndjson__WEBPACK_IMPORTED_MODULE_10__["default"].stringify((_NDJSON$stringify2 = {}, _NDJSON$stringify2[key] = compress ? (0,_compress__WEBPACK_IMPORTED_MODULE_4__.compressTransaction)(tr) : tr, _NDJSON$stringify2)) + spans + breakdowns;
});
};
_proto.sendEvents = function sendEvents(events) {
var _payload, _NDJSON$stringify3;
if (events.length === 0) {
return;
}
var transactions = [];
var errors = [];
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event[_constants__WEBPACK_IMPORTED_MODULE_3__.TRANSACTIONS]) {
transactions.push(event[_constants__WEBPACK_IMPORTED_MODULE_3__.TRANSACTIONS]);
}
if (event[_constants__WEBPACK_IMPORTED_MODULE_3__.ERRORS]) {
errors.push(event[_constants__WEBPACK_IMPORTED_MODULE_3__.ERRORS]);
}
}
if (transactions.length === 0 && errors.length === 0) {
return;
}
var cfg = this._configService;
var payload = (_payload = {}, _payload[_constants__WEBPACK_IMPORTED_MODULE_3__.TRANSACTIONS] = transactions, _payload[_constants__WEBPACK_IMPORTED_MODULE_3__.ERRORS] = errors, _payload);
var filteredPayload = cfg.applyFilters(payload);
if (!filteredPayload) {
this._loggingService.warn('Dropped payload due to filtering!');
return;
}
var apiVersion = cfg.get('apiVersion');
var compress = apiVersion > 2;
var ndjson = [];
var metadata = this.createMetaData();
var metadataKey = compress ? 'm' : 'metadata';
ndjson.push(_ndjson__WEBPACK_IMPORTED_MODULE_10__["default"].stringify((_NDJSON$stringify3 = {}, _NDJSON$stringify3[metadataKey] = compress ? (0,_compress__WEBPACK_IMPORTED_MODULE_4__.compressMetadata)(metadata) : metadata, _NDJSON$stringify3)));
ndjson = ndjson.concat(this.ndjsonErrors(filteredPayload[_constants__WEBPACK_IMPORTED_MODULE_3__.ERRORS], compress), this.ndjsonTransactions(filteredPayload[_constants__WEBPACK_IMPORTED_MODULE_3__.TRANSACTIONS], compress));
var ndjsonPayload = ndjson.join('');
var _this$getEndpoints2 = this.getEndpoints(),
intakeEndpoint = _this$getEndpoints2.intakeEndpoint;
return this._postJson(intakeEndpoint, ndjsonPayload);
};
_proto.getEndpoints = function getEndpoints() {
var serverUrl = this._configService.get('serverUrl');
var apiVersion = this._configService.get('apiVersion');
var serverUrlPrefix = this._configService.get('serverUrlPrefix') || "/intake/v" + apiVersion + "/rum/events";
var intakeEndpoint = serverUrl + serverUrlPrefix;
var configEndpoint = serverUrl + "/config/v1/rum/agents";
return {
intakeEndpoint: intakeEndpoint,
configEndpoint: configEndpoint
};
};
return ApmServer;
}();
/* harmony default export */ __webpack_exports__["default"] = (ApmServer);
/***/ }),
/***/ "../rum-core/dist/es/common/compress.js":
/*!**********************************************!*\
!*** ../rum-core/dist/es/common/compress.js ***!
\**********************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ compressError: function() { return /* binding */ compressError; },
/* harmony export */ compressMetadata: function() { return /* binding */ compressMetadata; },
/* harmony export */ compressMetricsets: function() { return /* binding */ compressMetricsets; },
/* harmony export */ compressPayload: function() { return /* binding */ compressPayload; },
/* harmony export */ compressTransaction: function() { return /* binding */ compressTransaction; }
/* harmony export */ });
/* harmony import */ var _polyfills__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./polyfills */ "../rum-core/dist/es/common/polyfills.js");
/* harmony import */ var _performance_monitoring_navigation_marks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../performance-monitoring/navigation/marks */ "../rum-core/dist/es/performance-monitoring/navigation/marks.js");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "../rum-core/dist/es/common/utils.js");
function compressStackFrames(frames) {
return frames.map(function (frame) {
return {
ap: frame.abs_path,
f: frame.filename,
fn: frame.function,
li: frame.lineno,
co: frame.colno
};
});
}
function compressResponse(response) {
return {
ts: response.transfer_size,
ebs: response.encoded_body_size,
dbs: response.decoded_body_size
};
}
function compressHTTP(http) {
var compressed = {};
var method = http.method,
status_code = http.status_code,
url = http.url,
response = http.response;
compressed.url = url;
if (method) {
compressed.mt = method;
}
if (status_code) {
compressed.sc = status_code;
}
if (response) {
compressed.r = compressResponse(response);
}
return compressed;
}
function compressContext(context) {
if (!context) {
return null;
}
var compressed = {};
var page = context.page,
http = context.http,
response = context.response,
destination = context.destination,
user = context.user,
custom = context.custom;
if (page) {
compressed.p = {
rf: page.referer,
url: page.url
};
}
if (http) {
compressed.h = compressHTTP(http);
}
if (response) {
compressed.r = compressResponse(response);
}
if (destination) {
var service = destination.service;
compressed.dt = {
se: {
n: service.name,
t: service.type,
rc: service.resource
},
ad: destination.address,
po: destination.port
};
}
if (user) {
compressed.u = {
id: user.id,
un: user.username,
em: user.email
};
}
if (custom) {
compressed.cu = custom;
}
return compressed;
}
function compressMarks(marks) {
if (!marks) {
return null;
}
var compressedNtMarks = compressNavigationTimingMarks(marks.navigationTiming);
var compressed = {
nt: compressedNtMarks,
a: compressAgentMarks(compressedNtMarks, marks.agent)
};
return compressed;
}
function compressNavigationTimingMarks(ntMarks) {
if (!ntMarks) {
return null;
}
var compressed = {};
_performance_monitoring_navigation_marks__WEBPACK_IMPORTED_MODULE_0__.COMPRESSED_NAV_TIMING_MARKS.forEach(function (mark, index) {
var mapping = _performance_monitoring_navigation_marks__WEBPACK_IMPORTED_MODULE_0__.NAVIGATION_TIMING_MARKS[index];
compressed[mark] = ntMarks[mapping];
});
return compressed;
}
function compressAgentMarks(compressedNtMarks, agentMarks) {
var compressed = {};
if (compressedNtMarks) {
compressed = {
fb: compressedNtMarks.rs,
di: compressedNtMarks.di,
dc: compressedNtMarks.dc
};
}
if (agentMarks) {
var fp = agentMarks.firstContentfulPaint;
var lp = agentMarks.largestContentfulPaint;
if (fp) {
compressed.fp = fp;
}
if (lp) {
compressed.lp = lp;
}
}
if (Object.keys(compressed).length === 0) {
return null;
}
return compressed;
}
function compressMetadata(metadata) {
var service = metadata.service,
labels = metadata.labels;
var agent = service.agent,
language = service.language;
return {
se: {
n: service.name,
ve: service.version,
a: {
n: agent.name,
ve: agent.version
},
la: {
n: language.name
},
en: service.environment
},
l: labels
};
}
function compressTransaction(transaction) {
var spans = transaction.spans.map(function (span) {
var spanData = {
id: span.id,
n: span.name,
t: span.type,
s: span.start,
d: span.duration,
c: compressContext(span.context),
o: span.outcome,
sr: span.sample_rate
};
if (span.parent_id !== transaction.id) {
spanData.pid = span.parent_id;
}
if (span.sync === true) {
spanData.sy = true;
}
if (span.subtype) {
spanData.su = span.subtype;
}
if (span.action) {
spanData.ac = span.action;
}
return spanData;
});
var tr = {
id: transaction.id,
pid: transaction.parent_id,
tid: transaction.trace_id,
n: transaction.name,
t: transaction.type,
d: transaction.duration,
c: compressContext(transaction.context),
k: compressMarks(transaction.marks),
me: compressMetricsets(transaction.breakdown),
y: spans,
yc: {
sd: spans.length
},
sm: transaction.sampled,
sr: transaction.sample_rate,
o: transaction.outcome
};
if (transaction.experience) {
var _transaction$experien = transaction.experience,
cls = _transaction$experien.cls,
fid = _transaction$experien.fid,
tbt = _transaction$experien.tbt,
longtask = _transaction$experien.longtask;
tr.exp = {
cls: cls,
fid: fid,
tbt: tbt,
lt: longtask
};
}
if (transaction.session) {
var _transaction$session = transaction.session,
id = _transaction$session.id,
sequence = _transaction$session.sequence;
tr.ses = {
id: id,
seq: sequence
};
}
return tr;
}
function compressError(error) {
var exception = error.exception;
var compressed = {
id: error.id,
cl: error.culprit,
ex: {
mg: exception.message,
st: compressStackFrames(exception.stacktrace),
t: error.type
},
c: compressContext(error.context)
};
var transaction = error.transaction;
if (transaction) {
compressed.tid = error.trace_id;
compressed.pid = error.parent_id;
compressed.xid = error.transaction_id;
compressed.x = {
t: transaction.type,
sm: transaction.sampled
};
}
return compressed;
}
function compressMetricsets(breakdowns) {
return breakdowns.map(function (_ref) {
var span = _ref.span,
samples = _ref.samples;
return {
y: {
t: span.type
},
sa: {
ysc: {
v: samples['span.self_time.count'].value
},
yss: {
v: samples['span.self_time.sum.us'].value
}
}
};
});
}
function compressPayload(params, type) {
if (type === void 0) {
type = 'gzip';
}
var isCompressionStreamSupported = typeof CompressionStream === 'function';
return new _polyfills__WEBPACK_IMPORTED_MODULE_1__.Promise(function (resolve) {
if (!isCompressionStreamSupported) {
return resolve(params);
}
if ((0,_utils__WEBPACK_IMPORTED_MODULE_2__.isBeaconInspectionEnabled)()) {
return resolve(params);
}
var payload = params.payload,
headers = params.headers,
beforeSend = params.beforeSend;
var payloadStream = new Blob([payload]).stream();
var compressedStream = payloadStream.pipeThrough(new CompressionStream(type));
return new Response(compressedStream).blob().then(function (payload) {
headers['Content-Encoding'] = type;
return resolve({
payload: payload,
headers: headers,
beforeSend: beforeSend
});
});
});
}
/***/ }),
/***/ "../rum-core/dist/es/common/config-service.js":
/*!****************************************************!*\
!*** ../rum-core/dist/es/common/config-service.js ***!
\****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "../rum-core/dist/es/common/utils.js");
/* harmony import */ var _event_handler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./event-handler */ "../rum-core/dist/es/common/event-handler.js");
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "../rum-core/dist/es/common/constants.js");
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function getConfigFromScript() {
var script = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getCurrentScript)();
var config = getDataAttributesFromNode(script);
return config;
}
function getDataAttributesFromNode(node) {
if (!node) {
return {};
}
var dataAttrs = {};
var dataRegex = /^data-([\w-]+)$/;
var attrs = node.attributes;
for (var i = 0; i < attrs.length; i++) {
var attr = attrs[i];
if (dataRegex.test(attr.nodeName)) {
var key = attr.nodeName.match(dataRegex)[1];
var camelCasedkey = key.split('-').map(function (value, index) {
return index > 0 ? value.charAt(0).toUpperCase() + value.substring(1) : value;
}).join('');
dataAttrs[camelCasedkey] = attr.value || attr.nodeValue;
}
}
return dataAttrs;
}
var Config = function () {
function Config() {
this.config = {
serviceName: '',
serviceVersion: '',
environment: '',
serverUrl: 'http://localhost:8200',
serverUrlPrefix: '',
active: true,
instrument: true,
disableInstrumentations: [],
logLevel: 'warn',
breakdownMetrics: false,
ignoreTransactions: [],
eventsLimit: 80,
queueLimit: -1,
flushInterval: 500,
distributedTracing: true,
distributedTracingOrigins: [],
distributedTracingHeaderName: 'traceparent',
pageLoadTraceId: '',
pageLoadSpanId: '',
pageLoadSampled: false,
pageLoadParentId: '',
pageLoadTransactionName: '',
propagateTracestate: false,
transactionSampleRate: 1.0,
centralConfig: false,
monitorLongtasks: true,
apiVersion: 2,
context: {},
session: false,
apmRequest: null,
sendCredentials: false
};
this.events = new _event_handler__WEBPACK_IMPORTED_MODULE_1__["default"]();
this.filters = [];
this.version = '';
}
var _proto = Config.prototype;
_proto.init = function init() {
var scriptData = getConfigFromScript();
this.setConfig(scriptData);
};
_proto.setVersion = function setVersion(version) {
this.version = version;
};
_proto.addFilter = function addFilter(cb) {
if (typeof cb !== 'function') {
throw new Error('Argument to must be function');
}
this.filters.push(cb);
};
_proto.applyFilters = function applyFilters(data) {
for (var i = 0; i < this.filters.length; i++) {
data = this.filters[i](data);
if (!data) {
return;
}
}
return data;
};
_proto.get = function get(key) {
return key.split('.').reduce(function (obj, objKey) {
return obj && obj[objKey];
}, this.config);
};
_proto.setUserContext = function setUserContext(userContext) {
if (userContext === void 0) {
userContext = {};
}
var context = {};
var _userContext = userContext,
id = _userContext.id,
username = _userContext.username,
email = _userContext.email;
if (typeof id === 'number' || typeof id === 'string') {
context.id = id;
}
if (typeof username === 'string') {
context.username = username;
}
if (typeof email === 'string') {
context.email = email;
}
this.config.context.user = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.extend)(this.config.context.user || {}, context);
};
_proto.setCustomContext = function setCustomContext(customContext) {
if (customContext === void 0) {
customContext = {};
}
this.config.context.custom = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.extend)(this.config.context.custom || {}, customContext);
};
_proto.addLabels = function addLabels(tags) {
var _this = this;
if (!this.config.context.tags) {
this.config.context.tags = {};
}
var keys = Object.keys(tags);
keys.forEach(function (k) {
return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.setLabel)(k, tags[k], _this.config.context.tags);
});
};
_proto.setConfig = function setConfig(properties) {
if (properties === void 0) {
properties = {};
}
var _properties = properties,
transactionSampleRate = _properties.transactionSampleRate,
serverUrl = _properties.serverUrl;
if (serverUrl) {
properties.serverUrl = serverUrl.replace(/\/+$/, '');
}
if (!(0,_utils__WEBPACK_IMPORTED_MODULE_0__.isUndefined)(transactionSampleRate)) {
if (transactionSampleRate < 0.0001 && transactionSampleRate > 0) {
transactionSampleRate = 0.0001;
}
properties.transactionSampleRate = Math.round(transactionSampleRate * 10000) / 10000;
}
this.config = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.merge)(this.config, properties);
this.events.send(_constants__WEBPACK_IMPORTED_MODULE_2__.CONFIG_CHANGE, [this.config]);
};
_proto.validate = function validate(properties) {
if (properties === void 0) {
properties = {};
}
var requiredKeys = ['serviceName', 'serverUrl'];
var allKeys = Object.keys(this.config);
var errors = {
missing: [],
invalid: [],
unknown: []
};
Object.keys(properties).forEach(function (key) {
if (requiredKeys.indexOf(key) !== -1 && !properties[key]) {
errors.missing.push(key);
}
if (allKeys.indexOf(key) === -1) {
errors.unknown.push(key);
}
});
if (properties.serviceName && !/^[a-zA-Z0-9 _-]+$/.test(properties.serviceName)) {
errors.invalid.push({
key: 'serviceName',
value: properties.serviceName,
allowed: 'a-z, A-Z, 0-9, _, -, <space>'
});
}
var sampleRate = properties.transactionSampleRate;
if (typeof sampleRate !== 'undefined' && (typeof sampleRate !== 'number' || isNaN(sampleRate) || sampleRate < 0 || sampleRate > 1)) {
errors.invalid.push({
key: 'transactionSampleRate',
value: sampleRate,
allowed: 'Number between 0 and 1'
});
}
return errors;
};
_proto.getLocalConfig = function getLocalConfig() {
var storage = sessionStorage;
if (this.config.session) {
storage = localStorage;
}
var config = storage.getItem(_constants__WEBPACK_IMPORTED_MODULE_2__.LOCAL_CONFIG_KEY);
if (config) {
return JSON.parse(config);
}
};
_proto.setLocalConfig = function setLocalConfig(config, merge) {
if (config) {
if (merge) {
var prevConfig = this.getLocalConfig();
config = _extends({}, prevConfig, config);
}
var storage = sessionStorage;
if (this.config.session) {
storage = localStorage;
}
storage.setItem(_constants__WEBPACK_IMPORTED_MODULE_2__.LOCAL_CONFIG_KEY, JSON.stringify(config));
}
};
_proto.dispatchEvent = function dispatchEvent(name, args) {
this.events.send(name, args);
};
_proto.observeEvent = function observeEvent(name, fn) {
return this.events.observe(name, fn);
};
return Config;
}();
/* harmony default export */ __webpack_exports__["default"] = (Config);
/***/ }),
/***/ "../rum-core/dist/es/common/constants.js":
/*!***********************************************!*\
!*** ../rum-core/dist/es/common/constants.js ***!
\***********************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ ADD_EVENT_LISTENER_STR: function() { return /* binding */ ADD_EVENT_LISTENER_STR; },
/* harmony export */ AFTER_EVENT: function() { return /* binding */ AFTER_EVENT; },
/* harmony export */ APM_SERVER: function() { return /* binding */ APM_SERVER; },
/* harmony export */ BEFORE_EVENT: function() { return /* binding */ BEFORE_EVENT; },
/* harmony export */ CLICK: function() { return /* binding */ CLICK; },
/* harmony export */ CONFIG_CHANGE: function() { return /* binding */ CONFIG_CHANGE; },
/* harmony export */ CONFIG_SERVICE: function() { return /* binding */ CONFIG_SERVICE; },
/* harmony export */ ERROR: function() { return /* binding */ ERROR; },
/* harmony export */ ERRORS: function() { return /* binding */ ERRORS; },
/* harmony export */ ERROR_LOGGING: function() { return /* binding */ ERROR_LOGGING; },
/* harmony export */ EVENT: function() { return /* binding */ EVENT; },
/* harmony export */ EVENT_TARGET: function() { return /* binding */ EVENT_TARGET; },
/* harmony export */ FETCH: function() { return /* binding */ FETCH; },
/* harmony export */ FIRST_CONTENTFUL_PAINT: function() { return /* binding */ FIRST_CONTENTFUL_PAINT; },
/* harmony export */ FIRST_INPUT: function() { return /* binding */ FIRST_INPUT; },
/* harmony export */ HISTORY: function() { return /* binding */ HISTORY; },
/* harmony export */ HTTP_REQUEST_TIMEOUT: function() { return /* binding */ HTTP_REQUEST_TIMEOUT; },
/* harmony export */ HTTP_REQUEST_TYPE: function() { return /* binding */ HTTP_REQUEST_TYPE; },
/* harmony export */ INVOKE: function() { return /* binding */ INVOKE; },
/* harmony export */ KEYWORD_LIMIT: function() { return /* binding */ KEYWORD_LIMIT; },
/* harmony export */ LARGEST_CONTENTFUL_PAINT: function() { return /* binding */ LARGEST_CONTENTFUL_PAINT; },
/* harmony export */ LAYOUT_SHIFT: function() { return /* binding */ LAYOUT_SHIFT; },
/* harmony export */ LOCAL_CONFIG_KEY: function() { return /* binding */ LOCAL_CONFIG_KEY; },
/* harmony export */ LOGGING_SERVICE: function() { return /* binding */ LOGGING_SERVICE; },
/* harmony export */ LONG_TASK: function() { return /* binding */ LONG_TASK; },
/* harmony export */ MAX_SPAN_DURATION: function() { return /* binding */ MAX_SPAN_DURATION; },
/* harmony export */ MEASURE: function() { return /* binding */ MEASURE; },
/* harmony export */ NAME_UNKNOWN: function() { return /* binding */ NAME_UNKNOWN; },
/* harmony export */ NAVIGATION: function() { return /* binding */ NAVIGATION; },
/* harmony export */ OUTCOME_FAILURE: function() { return /* binding */ OUTCOME_FAILURE; },
/* harmony export */ OUTCOME_SUCCESS: function() { return /* binding */ OUTCOME_SUCCESS; },
/* harmony export */ OUTCOME_UNKNOWN: function() { return /* binding */ OUTCOME_UNKNOWN; },
/* harmony export */ PAGE_EXIT: function() { return /* binding */ PAGE_EXIT; },
/* harmony export */ PAGE_LOAD: function() { return /* binding */ PAGE_LOAD; },
/* harmony export */ PAGE_LOAD_DELAY: function() { return /* binding */ PAGE_LOAD_DELAY; },
/* harmony export */ PAINT: function() { return /* binding */ PAINT; },
/* harmony export */ PERFORMANCE_MONITORING: function() { return /* binding */ PERFORMANCE_MONITORING; },
/* harmony export */ QUEUE_ADD_TRANSACTION: function() { return /* binding */ QUEUE_ADD_TRANSACTION; },
/* harmony export */ QUEUE_FLUSH: function() { return /* binding */ QUEUE_FLUSH; },
/* harmony export */ REMOVE_EVENT_LISTENER_STR: function() { return /* binding */ REMOVE_EVENT_LISTENER_STR; },
/* harmony export */ RESOURCE: function() { return /* binding */ RESOURCE; },
/* harmony export */ RESOURCE_INITIATOR_TYPES: function() { return /* binding */ RESOURCE_INITIATOR_TYPES; },
/* harmony export */ REUSABILITY_THRESHOLD: function() { return /* binding */ REUSABILITY_THRESHOLD; },
/* harmony export */ ROUTE_CHANGE: function() { return /* binding */ ROUTE_CHANGE; },
/* harmony export */ SCHEDULE: function() { return /* binding */ SCHEDULE; },
/* harmony export */ SESSION_TIMEOUT: function() { return /* binding */ SESSION_TIMEOUT; },
/* harmony export */ TEMPORARY_TYPE: function() { return /* binding */ TEMPORARY_TYPE; },
/* harmony export */ TRANSACTIONS: function() { return /* binding */ TRANSACTIONS; },
/* harmony export */ TRANSACTION_END: function() { return /* binding */ TRANSACTION_END; },
/* harmony export */ TRANSACTION_IGNORE: function() { return /* binding */ TRANSACTION_IGNORE; },
/* harmony export */ TRANSACTION_SERVICE: function() { return /* binding */ TRANSACTION_SERVICE; },
/* harmony export */ TRANSACTION_START: function() { return /* binding */ TRANSACTION_START; },
/* harmony export */ TRANSACTION_TYPE_ORDER: function() { return /* binding */ TRANSACTION_TYPE_ORDER; },
/* harmony export */ TRUNCATED_TYPE: function() { return /* binding */ TRUNCATED_TYPE; },
/* harmony export */ TYPE_CUSTOM: function() { return /* binding */ TYPE_CUSTOM; },
/* harmony export */ USER_INTERACTION: function() { return /* binding */ USER_INTERACTION; },
/* harmony export */ USER_TIMING_THRESHOLD: function() { return /* binding */ USER_TIMING_THRESHOLD; },
/* harmony export */ XMLHTTPREQUEST: function() { return /* binding */ XMLHTTPREQUEST; }
/* harmony export */ });
var SCHEDULE = 'schedule';
var INVOKE = 'invoke';
var ADD_EVENT_LISTENER_STR = 'addEventListener';
var REMOVE_EVENT_LISTENER_STR = 'removeEventListener';
var RESOURCE_INITIATOR_TYPES = ['link', 'css', 'script', 'img', 'xmlhttprequest', 'fetch', 'beacon', 'iframe'];
var REUSABILITY_THRESHOLD = 5000;
var MAX_SPAN_DURATION = 5 * 60 * 1000;
var PAGE_LOAD_DELAY = 1000;
var PAGE_LOAD = 'page-load';
var ROUTE_CHANGE = 'route-change';
var TYPE_CUSTOM = 'custom';
var USER_INTERACTION = 'user-interaction';
var HTTP_REQUEST_TYPE = 'http-request';
var TEMPORARY_TYPE = 'temporary';
var NAME_UNKNOWN = 'Unknown';
var PAGE_EXIT = 'page-exit';
var TRANSACTION_TYPE_ORDER = [PAGE_LOAD, ROUTE_CHANGE, USER_INTERACTION, HTTP_REQUEST_TYPE, TYPE_CUSTOM, TEMPORARY_TYPE];
var OUTCOME_SUCCESS = 'success';
var OUTCOME_FAILURE = 'failure';
var OUTCOME_UNKNOWN = 'unknown';
var USER_TIMING_THRESHOLD = 60;
var TRANSACTION_START = 'transaction:start';
var TRANSACTION_END = 'transaction:end';
var CONFIG_CHANGE = 'config:change';
var QUEUE_FLUSH = 'queue:flush';
var QUEUE_ADD_TRANSACTION = 'queue:add_transaction';
var TRANSACTION_IGNORE = 'transaction:ignore';
var XMLHTTPREQUEST = 'xmlhttprequest';
var FETCH = 'fetch';
var HISTORY = 'history';
var EVENT_TARGET = 'eventtarget';
var CLICK = 'click';
var ERROR = 'error';
var BEFORE_EVENT = ':before';
var AFTER_EVENT = ':after';
var LOCAL_CONFIG_KEY = 'elastic_apm_config';
var LONG_TASK = 'longtask';
var PAINT = 'paint';
var MEASURE = 'measure';
var NAVIGATION = 'navigation';
var RESOURCE = 'resource';
var FIRST_CONTENTFUL_PAINT = 'first-contentful-paint';
var LARGEST_CONTENTFUL_PAINT = 'largest-contentful-paint';
var FIRST_INPUT = 'first-input';
var LAYOUT_SHIFT = 'layout-shift';
var EVENT = 'event';
var ERRORS = 'errors';
var TRANSACTIONS = 'transactions';
var CONFIG_SERVICE = 'ConfigService';
var LOGGING_SERVICE = 'LoggingService';
var TRANSACTION_SERVICE = 'TransactionService';
var APM_SERVER = 'ApmServer';
var PERFORMANCE_MONITORING = 'PerformanceMonitoring';
var ERROR_LOGGING = 'ErrorLogging';
var TRUNCATED_TYPE = '.truncated';
var KEYWORD_LIMIT = 1024;
var SESSION_TIMEOUT = 30 * 60000;
var HTTP_REQUEST_TIMEOUT = 10000;
/***/ }),
/***/ "../rum-core/dist/es/common/context.js":
/*!*********************************************!*\
!*** ../rum-core/dist/es/common/context.js ***!
\*********************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ addSpanContext: function() { return /* binding */ addSpanContext; },
/* harmony export */ addTransactionContext: function() { return /* binding */ addTransactionContext; },
/* harmony export */ getPageContext: function() { return /* binding */ getPageContext; }
/* harmony export */ });
/* harmony import */ var _url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./url */ "../rum-core/dist/es/common/url.js");
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "../rum-core/dist/es/common/constants.js");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "../rum-core/dist/es/common/utils.js");
var _excluded = ["tags"];
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
var LEFT_SQUARE_BRACKET = 91;
var RIGHT_SQUARE_BRACKET = 93;
var EXTERNAL = 'external';
var RESOURCE = 'resource';
var HARD_NAVIGATION = 'hard-navigation';
function getPortNumber(port, protocol) {
if (port === '') {
port = protocol === 'http:' ? '80' : protocol === 'https:' ? '443' : '';
}
return port;
}
function getResponseContext(perfTimingEntry) {
var transferSize = perfTimingEntry.transferSize,
encodedBodySize = perfTimingEntry.encodedBodySize,
decodedBodySize = perfTimingEntry.decodedBodySize,
serverTiming = perfTimingEntry.serverTiming;
var respContext = {
transfer_size: transferSize,
encoded_body_size: encodedBodySize,
decoded_body_size: decodedBodySize
};
var serverTimingStr = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getServerTimingInfo)(serverTiming);
if (serverTimingStr) {
respContext.headers = {
'server-timing': serverTimingStr
};
}
return respContext;
}
function getDestination(parsedUrl) {
var port = parsedUrl.port,
protocol = parsedUrl.protocol,
hostname = parsedUrl.hostname;
var portNumber = getPortNumber(port, protocol);
var ipv6Hostname = hostname.charCodeAt(0) === LEFT_SQUARE_BRACKET && hostname.charCodeAt(hostname.length - 1) === RIGHT_SQUARE_BRACKET;
var address = hostname;
if (ipv6Hostname) {
address = hostname.slice(1, -1);
}
return {
service: {
resource: hostname + ':' + portNumber,
name: '',
type: ''
},
address: address,
port: Number(portNumber)
};
}
function getResourceContext(data) {
var entry = data.entry,
url = data.url;
var parsedUrl = new _url__WEBPACK_IMPORTED_MODULE_1__.Url(url);
var destination = getDestination(parsedUrl);
return {
http: {
url: url,
response: getResponseContext(entry)
},
destination: destination
};
}
function getExternalContext(data) {
var url = data.url,
method = data.method,
target = data.target,
response = data.response;
var parsedUrl = new _url__WEBPACK_IMPORTED_MODULE_1__.Url(url);
var destination = getDestination(parsedUrl);
var context = {
http: {
method: method,
url: parsedUrl.href
},
destination: destination
};
var statusCode;
if (target && typeof target.status !== 'undefined') {
statusCode = target.status;
} else if (response) {
statusCode = response.status;
}
context.http.status_code = statusCode;
return context;
}
function getNavigationContext(data) {
var url = data.url;
var parsedUrl = new _url__WEBPACK_IMPORTED_MODULE_1__.Url(url);
var destination = getDestination(parsedUrl);
return {
destination: destination
};
}
function getPageContext() {
return {
page: {
referer: document.referrer,
url: location.href
}
};
}
function addSpanContext(span, data) {
if (!data) {
return;
}
var type = span.type;
var context;
switch (type) {
case EXTERNAL:
context = getExternalContext(data);
break;
case RESOURCE:
context = getResourceContext(data);
break;
case HARD_NAVIGATION:
context = getNavigationContext(data);
break;
}
span.addContext(context);
}
function addTransactionContext(transaction, _temp) {
var _ref = _temp === void 0 ? {} : _temp,
tags = _ref.tags,
configContext = _objectWithoutPropertiesLoose(_ref, _excluded);
var pageContext = getPageContext();
var responseContext = {};
if (transaction.type === _constants__WEBPACK_IMPORTED_MODULE_2__.PAGE_EXIT) {
transaction.ensureContext();
if (transaction.context.page && transaction.context.page.url) {
pageContext.page.url = transaction.context.page.url;
}
} else if (transaction.type === _constants__WEBPACK_IMPORTED_MODULE_2__.PAGE_LOAD && (0,_utils__WEBPACK_IMPORTED_MODULE_0__.isPerfTimelineSupported)()) {
var entries = _utils__WEBPACK_IMPORTED_MODULE_0__.PERF.getEntriesByType(_constants__WEBPACK_IMPORTED_MODULE_2__.NAVIGATION);
if (entries && entries.length > 0) {
responseContext = {
response: getResponseContext(entries[0])
};
}
}
transaction.addContext(pageContext, responseContext, configContext);
}
/***/ }),
/***/ "../rum-core/dist/es/common/event-handler.js":
/*!***************************************************!*\
!*** ../rum-core/dist/es/common/event-handler.js ***!
\***************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ "../rum-core/dist/es/common/constants.js");
var EventHandler = function () {
function EventHandler() {
this.observers = {};
}
var _proto = EventHandler.prototype;
_proto.observe = function observe(name, fn) {
var _this = this;
if (typeof fn === 'function') {
if (!this.observers[name]) {
this.observers[name] = [];
}
this.observers[name].push(fn);
return function () {
var index = _this.observers[name].indexOf(fn);
if (index > -1) {
_this.observers[name].splice(index, 1);
}
};
}
};
_proto.sendOnly = function sendOnly(name, args) {
var obs = this.observers[name];
if (obs) {
obs.forEach(function (fn) {
try {
fn.apply(undefined, args);
} catch (error) {
console.log(error, error.stack);
}
});
}
};
_proto.send = function send(name, args) {
this.sendOnly(name + _constants__WEBPACK_IMPORTED_MODULE_0__.BEFORE_EVENT, args);
this.sendOnly(name, args);
this.sendOnly(name + _constants__WEBPACK_IMPORTED_MODULE_0__.AFTER_EVENT, args);
};
return EventHandler;
}();
/* harmony default export */ __webpack_exports__["default"] = (EventHandler);
/***/ }),
/***/ "../rum-core/dist/es/common/http/fetch.js":
/*!************************************************!*\
!*** ../rum-core/dist/es/common/http/fetch.js ***!
\************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ BYTE_LIMIT: function() { return /* binding */ BYTE_LIMIT; },
/* harmony export */ isFetchSupported: function() { return /* binding */ isFetchSupported; },
/* harmony export */ sendFetchRequest: function() { return /* binding */ sendFetchRequest; },
/* harmony export */ shouldUseFetchWithKeepAlive: function() { return /* binding */ shouldUseFetchWithKeepAlive; }
/* harmony export */ });
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants */ "../rum-core/dist/es/common/constants.js");
/* harmony import */ var _response_status__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./response-status */ "../rum-core/dist/es/common/http/response-status.js");
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
var BYTE_LIMIT = 60 * 1000;
function shouldUseFetchWithKeepAlive(method, payload) {
if (!isFetchSupported()) {
return false;
}
var isKeepAliveSupported = ('keepalive' in new Request(''));
if (!isKeepAliveSupported) {
return false;
}
var size = calculateSize(payload);
return method === 'POST' && size < BYTE_LIMIT;
}
f