posthog-js 1.131.1 → 1.131.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/array.full.js +1 -1
- package/dist/array.full.js.map +1 -1
- package/dist/array.js +1 -1
- package/dist/array.js.map +1 -1
- package/dist/es.js +1 -1
- package/dist/es.js.map +1 -1
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/src/request.js +1 -18
- package/lib/src/request.js.map +1 -1
- package/package.json +1 -1
package/lib/package.json
CHANGED
package/lib/src/request.js
CHANGED
|
@@ -30,7 +30,7 @@ import Config from './config';
|
|
|
30
30
|
import { Compression } from './types';
|
|
31
31
|
import { formDataToQuery } from './utils/request-utils';
|
|
32
32
|
import { logger } from './utils/logger';
|
|
33
|
-
import { fetch,
|
|
33
|
+
import { fetch, XMLHttpRequest, AbortController, navigator } from './utils/globals';
|
|
34
34
|
import { gzipSync, strToU8 } from 'fflate';
|
|
35
35
|
// eslint-disable-next-line compat/compat
|
|
36
36
|
export var SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch;
|
|
@@ -184,19 +184,6 @@ var _sendBeacon = function (options) {
|
|
|
184
184
|
// we don't want to throw errors here
|
|
185
185
|
}
|
|
186
186
|
};
|
|
187
|
-
var scriptRequest = function (options) {
|
|
188
|
-
var _a;
|
|
189
|
-
if (!document) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
var script = document.createElement('script');
|
|
193
|
-
script.type = 'text/javascript';
|
|
194
|
-
script.async = true;
|
|
195
|
-
script.defer = true;
|
|
196
|
-
script.src = options.url;
|
|
197
|
-
var s = document.getElementsByTagName('script')[0];
|
|
198
|
-
(_a = s.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(script, s);
|
|
199
|
-
};
|
|
200
187
|
var AVAILABLE_TRANSPORTS = [];
|
|
201
188
|
// We add the transports in order of preference
|
|
202
189
|
if (XMLHttpRequest) {
|
|
@@ -217,10 +204,6 @@ if (navigator === null || navigator === void 0 ? void 0 : navigator.sendBeacon)
|
|
|
217
204
|
method: _sendBeacon,
|
|
218
205
|
});
|
|
219
206
|
}
|
|
220
|
-
AVAILABLE_TRANSPORTS.push({
|
|
221
|
-
transport: undefined,
|
|
222
|
-
method: scriptRequest,
|
|
223
|
-
});
|
|
224
207
|
// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.
|
|
225
208
|
export var request = function (_options) {
|
|
226
209
|
var _a, _b, _c;
|
package/lib/src/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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","sourcesContent":["import { _base64Encode, each, find } from './utils'\nimport Config from './config'\nimport { Compression, RequestOptions, RequestResponse } from './types'\nimport { formDataToQuery } from './utils/request-utils'\n\nimport { logger } from './utils/logger'\nimport { fetch, document, XMLHttpRequest, AbortController, navigator } from './utils/globals'\nimport { gzipSync, strToU8 } from 'fflate'\n\n// eslint-disable-next-line compat/compat\nexport const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch\n\nconst CONTENT_TYPE_PLAIN = 'text/plain'\nconst CONTENT_TYPE_JSON = 'application/json'\nconst CONTENT_TYPE_FORM = 'application/x-www-form-urlencoded'\n\ntype EncodedBody = {\n contentType: string\n body: string | BlobPart\n}\n\nexport const extendURLParams = (url: string, params: Record<string, any>): string => {\n const [baseUrl, search] = url.split('?')\n const newParams = { ...params }\n\n search?.split('&').forEach((pair) => {\n const [key] = pair.split('=')\n delete newParams[key]\n })\n\n let newSearch = formDataToQuery(newParams)\n newSearch = newSearch ? (search ? search + '&' : '') + newSearch : search\n\n return `${baseUrl}?${newSearch}`\n}\n\nconst encodeToDataString = (data: string | Record<string, any>): string => {\n return 'data=' + encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data))\n}\n\nconst encodePostData = ({ data, compression }: RequestOptions): EncodedBody | undefined => {\n if (!data) {\n return\n }\n\n if (compression === Compression.GZipJS) {\n const gzipData = gzipSync(strToU8(JSON.stringify(data)), { mtime: 0 })\n return {\n contentType: CONTENT_TYPE_PLAIN,\n body: new Blob([gzipData], { type: CONTENT_TYPE_PLAIN }),\n }\n }\n\n if (compression === Compression.Base64) {\n const b64data = _base64Encode(JSON.stringify(data))\n\n return {\n contentType: CONTENT_TYPE_FORM,\n body: encodeToDataString(b64data),\n }\n }\n\n return {\n contentType: CONTENT_TYPE_JSON,\n body: JSON.stringify(data),\n }\n}\n\nconst xhr = (options: RequestOptions) => {\n const req = new XMLHttpRequest!()\n req.open(options.method || 'GET', options.url, true)\n const { contentType, body } = encodePostData(options) ?? {}\n\n each(options.headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (contentType) {\n req.setRequestHeader('Content-Type', contentType)\n }\n\n if (options.timeout) {\n req.timeout = options.timeout\n }\n // send the ph_optout cookie\n // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n req.withCredentials = true\n req.onreadystatechange = () => {\n // XMLHttpRequest.DONE == 4, except in safari 4\n if (req.readyState === 4) {\n const response: RequestResponse = {\n statusCode: req.status,\n text: req.responseText,\n }\n if (req.status === 200) {\n try {\n response.json = JSON.parse(req.responseText)\n } catch (e) {\n // logger.error(e)\n }\n }\n\n options.callback?.(response)\n }\n }\n req.send(body)\n}\n\nconst _fetch = (options: RequestOptions) => {\n const { contentType, body } = encodePostData(options) ?? {}\n\n // eslint-disable-next-line compat/compat\n const headers = new Headers()\n each(headers, function (headerValue, headerName) {\n headers.append(headerName, headerValue)\n })\n\n if (contentType) {\n headers.append('Content-Type', contentType)\n }\n\n const url = options.url\n let aborter: { signal: any; timeout: ReturnType<typeof setTimeout> } | null = null\n\n if (AbortController) {\n const controller = new AbortController()\n aborter = {\n signal: controller.signal,\n timeout: setTimeout(() => controller.abort(), options.timeout),\n }\n }\n\n fetch!(url, {\n method: options?.method || 'GET',\n headers,\n keepalive: options.method === 'POST',\n body,\n signal: aborter?.signal,\n })\n .then((response) => {\n return response.text().then((responseText) => {\n const res: RequestResponse = {\n statusCode: response.status,\n text: responseText,\n }\n\n if (response.status === 200) {\n try {\n res.json = JSON.parse(responseText)\n } catch (e) {\n logger.error(e)\n }\n }\n\n options.callback?.(res)\n })\n })\n .catch((error) => {\n logger.error(error)\n options.callback?.({ statusCode: 0, text: error })\n })\n .finally(() => (aborter ? clearTimeout(aborter.timeout) : null))\n\n return\n}\n\nconst _sendBeacon = (options: RequestOptions) => {\n // beacon documentation https://w3c.github.io/beacon/\n // beacons format the message and use the type property\n\n const url = extendURLParams(options.url, {\n beacon: '1',\n })\n\n try {\n const { contentType, body } = encodePostData(options) ?? {}\n // sendBeacon requires a blob so we convert it\n const sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body\n navigator!.sendBeacon!(url, sendBeaconBody)\n } catch (e) {\n // send beacon is a best-effort, fire-and-forget mechanism on page unload,\n // we don't want to throw errors here\n }\n}\n\nconst scriptRequest = (options: RequestOptions) => {\n if (!document) {\n return\n }\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.async = true\n script.defer = true\n script.src = options.url\n const s = document.getElementsByTagName('script')[0]\n s.parentNode?.insertBefore(script, s)\n}\n\nconst AVAILABLE_TRANSPORTS: { transport: RequestOptions['transport']; method: (options: RequestOptions) => void }[] = []\n\n// We add the transports in order of preference\n\nif (XMLHttpRequest) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'XHR',\n method: xhr,\n })\n}\n\nif (fetch) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'fetch',\n method: _fetch,\n })\n}\n\nif (navigator?.sendBeacon) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'sendBeacon',\n method: _sendBeacon,\n })\n}\n\nAVAILABLE_TRANSPORTS.push({\n transport: undefined,\n method: scriptRequest,\n})\n\n// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.\nexport const request = (_options: RequestOptions) => {\n // Clone the options so we don't modify the original object\n const options = { ..._options }\n options.timeout = options.timeout || 60000\n\n options.url = extendURLParams(options.url, {\n _: new Date().getTime().toString(),\n ver: Config.LIB_VERSION,\n compression: options.compression,\n })\n\n const transport = options.transport ?? 'XHR'\n\n const transportMethod =\n find(AVAILABLE_TRANSPORTS, (t) => t.transport === transport)?.method ?? AVAILABLE_TRANSPORTS[0].method\n\n if (!transportMethod) {\n throw new Error('No available transport method')\n }\n\n transportMethod(options)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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","sourcesContent":["import { _base64Encode, each, find } from './utils'\nimport Config from './config'\nimport { Compression, RequestOptions, RequestResponse } from './types'\nimport { formDataToQuery } from './utils/request-utils'\n\nimport { logger } from './utils/logger'\nimport { fetch, XMLHttpRequest, AbortController, navigator } from './utils/globals'\nimport { gzipSync, strToU8 } from 'fflate'\n\n// eslint-disable-next-line compat/compat\nexport const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch\n\nconst CONTENT_TYPE_PLAIN = 'text/plain'\nconst CONTENT_TYPE_JSON = 'application/json'\nconst CONTENT_TYPE_FORM = 'application/x-www-form-urlencoded'\n\ntype EncodedBody = {\n contentType: string\n body: string | BlobPart\n}\n\nexport const extendURLParams = (url: string, params: Record<string, any>): string => {\n const [baseUrl, search] = url.split('?')\n const newParams = { ...params }\n\n search?.split('&').forEach((pair) => {\n const [key] = pair.split('=')\n delete newParams[key]\n })\n\n let newSearch = formDataToQuery(newParams)\n newSearch = newSearch ? (search ? search + '&' : '') + newSearch : search\n\n return `${baseUrl}?${newSearch}`\n}\n\nconst encodeToDataString = (data: string | Record<string, any>): string => {\n return 'data=' + encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data))\n}\n\nconst encodePostData = ({ data, compression }: RequestOptions): EncodedBody | undefined => {\n if (!data) {\n return\n }\n\n if (compression === Compression.GZipJS) {\n const gzipData = gzipSync(strToU8(JSON.stringify(data)), { mtime: 0 })\n return {\n contentType: CONTENT_TYPE_PLAIN,\n body: new Blob([gzipData], { type: CONTENT_TYPE_PLAIN }),\n }\n }\n\n if (compression === Compression.Base64) {\n const b64data = _base64Encode(JSON.stringify(data))\n\n return {\n contentType: CONTENT_TYPE_FORM,\n body: encodeToDataString(b64data),\n }\n }\n\n return {\n contentType: CONTENT_TYPE_JSON,\n body: JSON.stringify(data),\n }\n}\n\nconst xhr = (options: RequestOptions) => {\n const req = new XMLHttpRequest!()\n req.open(options.method || 'GET', options.url, true)\n const { contentType, body } = encodePostData(options) ?? {}\n\n each(options.headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (contentType) {\n req.setRequestHeader('Content-Type', contentType)\n }\n\n if (options.timeout) {\n req.timeout = options.timeout\n }\n // send the ph_optout cookie\n // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n req.withCredentials = true\n req.onreadystatechange = () => {\n // XMLHttpRequest.DONE == 4, except in safari 4\n if (req.readyState === 4) {\n const response: RequestResponse = {\n statusCode: req.status,\n text: req.responseText,\n }\n if (req.status === 200) {\n try {\n response.json = JSON.parse(req.responseText)\n } catch (e) {\n // logger.error(e)\n }\n }\n\n options.callback?.(response)\n }\n }\n req.send(body)\n}\n\nconst _fetch = (options: RequestOptions) => {\n const { contentType, body } = encodePostData(options) ?? {}\n\n // eslint-disable-next-line compat/compat\n const headers = new Headers()\n each(headers, function (headerValue, headerName) {\n headers.append(headerName, headerValue)\n })\n\n if (contentType) {\n headers.append('Content-Type', contentType)\n }\n\n const url = options.url\n let aborter: { signal: any; timeout: ReturnType<typeof setTimeout> } | null = null\n\n if (AbortController) {\n const controller = new AbortController()\n aborter = {\n signal: controller.signal,\n timeout: setTimeout(() => controller.abort(), options.timeout),\n }\n }\n\n fetch!(url, {\n method: options?.method || 'GET',\n headers,\n keepalive: options.method === 'POST',\n body,\n signal: aborter?.signal,\n })\n .then((response) => {\n return response.text().then((responseText) => {\n const res: RequestResponse = {\n statusCode: response.status,\n text: responseText,\n }\n\n if (response.status === 200) {\n try {\n res.json = JSON.parse(responseText)\n } catch (e) {\n logger.error(e)\n }\n }\n\n options.callback?.(res)\n })\n })\n .catch((error) => {\n logger.error(error)\n options.callback?.({ statusCode: 0, text: error })\n })\n .finally(() => (aborter ? clearTimeout(aborter.timeout) : null))\n\n return\n}\n\nconst _sendBeacon = (options: RequestOptions) => {\n // beacon documentation https://w3c.github.io/beacon/\n // beacons format the message and use the type property\n\n const url = extendURLParams(options.url, {\n beacon: '1',\n })\n\n try {\n const { contentType, body } = encodePostData(options) ?? {}\n // sendBeacon requires a blob so we convert it\n const sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body\n navigator!.sendBeacon!(url, sendBeaconBody)\n } catch (e) {\n // send beacon is a best-effort, fire-and-forget mechanism on page unload,\n // we don't want to throw errors here\n }\n}\n\nconst AVAILABLE_TRANSPORTS: { transport: RequestOptions['transport']; method: (options: RequestOptions) => void }[] = []\n\n// We add the transports in order of preference\n\nif (XMLHttpRequest) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'XHR',\n method: xhr,\n })\n}\n\nif (fetch) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'fetch',\n method: _fetch,\n })\n}\n\nif (navigator?.sendBeacon) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'sendBeacon',\n method: _sendBeacon,\n })\n}\n\n// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.\nexport const request = (_options: RequestOptions) => {\n // Clone the options so we don't modify the original object\n const options = { ..._options }\n options.timeout = options.timeout || 60000\n\n options.url = extendURLParams(options.url, {\n _: new Date().getTime().toString(),\n ver: Config.LIB_VERSION,\n compression: options.compression,\n })\n\n const transport = options.transport ?? 'XHR'\n\n const transportMethod =\n find(AVAILABLE_TRANSPORTS, (t) => t.transport === transport)?.method ?? AVAILABLE_TRANSPORTS[0].method\n\n if (!transportMethod) {\n throw new Error('No available transport method')\n }\n\n transportMethod(options)\n}\n"]}
|
package/package.json
CHANGED