summaryrefslogtreecommitdiff
path: root/shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js
init commit
Diffstat (limited to 'shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js')
-rw-r--r--shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js b/shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js
new file mode 100644
index 0000000..4cb34a0
--- /dev/null
+++ b/shared/logger/node_modules/@sentry/browser/esm/transports/xhr.js
@@ -0,0 +1,52 @@
+import { createTransport } from '@sentry/core';
+import { SyncPromise } from '@sentry/utils';
+
+/**
+ * The DONE ready state for XmlHttpRequest
+ *
+ * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined
+ * (e.g. during testing, it is `undefined`)
+ *
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}
+ */
+const XHR_READYSTATE_DONE = 4;
+
+/**
+ * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.
+ */
+function makeXHRTransport(options) {
+ function makeRequest(request) {
+ return new SyncPromise((resolve, reject) => {
+ const xhr = new XMLHttpRequest();
+
+ xhr.onerror = reject;
+
+ xhr.onreadystatechange = () => {
+ if (xhr.readyState === XHR_READYSTATE_DONE) {
+ resolve({
+ statusCode: xhr.status,
+ headers: {
+ 'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),
+ 'retry-after': xhr.getResponseHeader('Retry-After'),
+ },
+ });
+ }
+ };
+
+ xhr.open('POST', options.url);
+
+ for (const header in options.headers) {
+ if (Object.prototype.hasOwnProperty.call(options.headers, header)) {
+ xhr.setRequestHeader(header, options.headers[header]);
+ }
+ }
+
+ xhr.send(request.body);
+ });
+ }
+
+ return createTransport(options, makeRequest);
+}
+
+export { makeXHRTransport };
+//# sourceMappingURL=xhr.js.map