@ohbug/browser 2.5.2 → 2.5.4

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/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Client, EventTypes, defineExtension } from "@ohbug/core";
2
- import { getGlobal, getOhbugObject, getSelector, parseUrl, replace } from "@ohbug/utils";
2
+ import { getCircularReplacer, getGlobal, getOhbugObject, getSelector, parseUrl, replace } from "@ohbug/utils";
3
3
  import ErrorStackParser from "error-stack-parser";
4
4
  //#region src/replaceAddEventListener.ts
5
5
  const access$2 = "addEventListener" in getGlobal();
@@ -592,16 +592,6 @@ const extension = defineExtension({
592
592
  });
593
593
  //#endregion
594
594
  //#region src/notifier.ts
595
- const getCircularReplacer = () => {
596
- const seen = /* @__PURE__ */ new WeakSet();
597
- return (_, value) => {
598
- if (typeof value === "object" && value !== null) {
599
- if (seen.has(value)) return;
600
- seen.add(value);
601
- }
602
- return value;
603
- };
604
- };
605
595
  function notifier(event) {
606
596
  const { client } = getOhbugObject();
607
597
  const url = client.__config.endpoint;
@@ -624,7 +614,7 @@ function notifier(event) {
624
614
  }
625
615
  //#endregion
626
616
  //#region src/version.ts
627
- const version = "__VERSION__";
617
+ const version = "2.5.4";
628
618
  //#endregion
629
619
  //#region src/client.ts
630
620
  function createClient(config, handleDestroy) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["access","global","listener","global","access","global","global","global","listener","global"],"sources":["../src/replaceAddEventListener.ts","../src/capture/action/captureClick.ts","../src/capture/action/captureUrlChange.ts","../src/capture/console/captureConsole.ts","../src/handle/uncaughtErrorHandler.ts","../src/handle/resourceErrorHandler.ts","../src/handle/unhandledrejectionErrorHandler.ts","../src/handle/unknownErrorHandler.ts","../src/handle/ajaxErrorHandler.ts","../src/handle/fetchErrorHandler.ts","../src/handle/websocketErrorHandler.ts","../src/dispatch/scriptDispatcher.ts","../src/dispatch/networkDispatcher.ts","../src/capture/network/getParams.ts","../src/capture/network/captureAjaxError.ts","../src/capture/network/captureFetchError.ts","../src/capture/network/captureWebSocketError.ts","../src/capture/script/captureUncaughtError.ts","../src/capture/script/captureUnhandledrejectionError.ts","../src/capture/index.ts","../src/destroy.ts","../src/device.ts","../src/extension.ts","../src/notifier.ts","../src/version.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["import { getGlobal, replace } from \"@ohbug/utils\";\n\nconst global = getGlobal<Window>();\nconst access = \"addEventListener\" in global;\nconst EventTargetProto = EventTarget?.prototype;\nconst EventTargetOriginal = access\n ? { addEventListener: EventTarget.prototype.addEventListener.bind(EventTarget.prototype) }\n : {};\n\nexport function replaceAddEventListener() {\n EventTargetProto.addEventListener = replace(\n EventTargetProto,\n \"addEventListener\",\n (origin) =>\n function call(this: any, type: string, listener: any, options: any) {\n const wrappedListener = (...args: any[]) => {\n return listener.apply(this, args);\n };\n return origin.call(this, type, wrappedListener, options);\n },\n );\n}\n\nexport function removeReplaceAddEventListener() {\n if (access && EventTargetOriginal.addEventListener) {\n const EventTargetProto = EventTarget?.prototype;\n EventTargetProto.addEventListener = EventTargetOriginal.addEventListener;\n }\n}\n","import { getGlobal, getOhbugObject, getSelector } from \"@ohbug/utils\";\n\nconst global = getGlobal<Window>();\n\nfunction listener(e: MouseEvent) {\n if (e.target) {\n const { client } = getOhbugObject<Window>();\n const { tagName, id, className, name, src, nodeType } = e.target as any;\n\n if (\n (tagName as string).toUpperCase() !== \"HTML\" &&\n (tagName as string).toUpperCase() !== \"BODY\"\n ) {\n const selector = getSelector(e);\n\n client.addAction(\n \"click node\",\n {\n tagName,\n id: id || undefined,\n className: className || undefined,\n name: name || undefined,\n src: src || undefined,\n nodeType: nodeType || undefined,\n selector: selector || undefined,\n },\n \"click\",\n );\n }\n }\n}\n\nexport function captureClick() {\n global?.document?.addEventListener?.(\"click\", listener);\n}\n\nexport function removeCaptureClick() {\n global?.document?.removeEventListener?.(\"click\", listener);\n}\n","import { getGlobal, getOhbugObject, parseUrl, replace } from \"@ohbug/utils\";\n\nconst global = getGlobal<Window>();\nlet lastHref: string | undefined;\n\nfunction handleUrlChange(from?: string, to?: string) {\n const { client } = getOhbugObject<Window>();\n const parsedHref = parseUrl(global?.location?.href);\n let parsedFrom = parseUrl(from as string);\n const parsedTo = parseUrl(to as string);\n\n if (!parsedFrom.path) {\n parsedFrom = parsedHref;\n }\n\n lastHref = to;\n\n let targetFrom = from;\n let targetTo = to;\n\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n targetTo = parsedTo.relative;\n }\n\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n targetFrom = parsedFrom.relative;\n }\n\n if (targetFrom === targetTo) return;\n\n client.addAction(\n `navigation to ${to}`,\n {\n from,\n to,\n },\n \"navigation\",\n );\n}\n\nfunction historyReplacement(original: (data: any, title: string, url?: string) => void) {\n return function call(this: any, data: any, title: string, url?: string) {\n if (url) {\n handleUrlChange(lastHref, String(url));\n }\n\n return original.apply(this, [data, title, url]);\n };\n}\n\nconst historyOriginal = {\n pushState: global?.history?.pushState?.bind(global?.history),\n replaceState: global?.history?.replaceState?.bind(global?.history),\n onpopstate: global?.onpopstate,\n};\nfunction historyListener() {\n historyOriginal.pushState = replace(global?.history, \"pushState\", historyReplacement);\n historyOriginal.replaceState = replace(global?.history, \"replaceState\", historyReplacement);\n historyOriginal.onpopstate = replace(\n global,\n \"onpopstate\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n const current = global?.location?.href;\n handleUrlChange(lastHref, current);\n return origin?.apply(this, args);\n },\n );\n}\n\nfunction hashListener(e: Event) {\n const { oldURL, newURL } = e as HashChangeEvent;\n handleUrlChange(oldURL, newURL);\n}\n\nexport function captureUrlChange() {\n // history\n historyListener();\n // hash\n global?.addEventListener?.(\"hashchange\", hashListener, true);\n}\n\nexport function removeCaptureUrlChange() {\n // history\n global.history.pushState = historyOriginal.pushState;\n global.history.replaceState = historyOriginal.replaceState;\n global.onpopstate = historyOriginal.onpopstate;\n // hash\n global?.removeEventListener?.(\"hashchange\", hashListener, true);\n}\n","/* eslint-disable no-console */\n\nimport { getOhbugObject, replace } from \"@ohbug/utils\";\n\ntype Level = \"log\" | \"info\" | \"warn\" | \"error\";\nconst levels: Level[] = [\"log\", \"info\", \"warn\", \"error\"];\nconst consoleOriginal = Object.keys(levels).reduce<Record<Level, any>>(\n (acc, cur: string) => ({\n ...acc,\n // @ts-expect-error 修改了原生的console\n [cur]: console[cur],\n }),\n {\n log: null,\n info: null,\n warn: null,\n error: null,\n },\n);\n\nexport function captureConsole() {\n const { client } = getOhbugObject<Window>();\n levels.forEach((level) => {\n consoleOriginal[level] = replace(\n console,\n level,\n (origin) =>\n function call(this: any, ...args: any[]) {\n const isOhbugConsole = args.some(\n (arg) => typeof arg === \"string\" && arg.includes(\"Ohbug\"),\n );\n if (!isOhbugConsole) {\n client.addAction(`console.${level}`, args, \"console\");\n }\n\n return origin.apply(this, args);\n },\n );\n });\n}\n\nexport function removeCaptureConsole() {\n if (console) {\n levels.forEach((level) => {\n console[level] = consoleOriginal[level];\n });\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\nimport ErrorStackParser from \"error-stack-parser\";\n\nexport interface UncaughtErrorDetail extends OhbugBaseDetail {\n name: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n stack: string;\n}\n\nexport function uncaughtErrorHandler(e: ErrorEvent) {\n const detail: UncaughtErrorDetail = {\n name: e?.error?.name,\n message: e?.message || e?.error?.message,\n filename: e?.filename,\n lineno: e?.lineno,\n colno: e?.colno,\n stack: e?.error?.stack,\n };\n if (e.error) {\n try {\n const stackFrame = ErrorStackParser.parse(e.error)?.[0];\n if (stackFrame) {\n detail.filename = stackFrame.fileName;\n detail.lineno = stackFrame.lineNumber;\n detail.colno = stackFrame.columnNumber;\n }\n } catch {}\n }\n\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<UncaughtErrorDetail>({\n category: \"error\",\n type: EventTypes.UNCAUGHT_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject, getSelector } from \"@ohbug/utils\";\n\nexport interface ResourceErrorDetail extends OhbugBaseDetail {\n src: string;\n tagName: string;\n id: string;\n className: string;\n name: string;\n // https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType\n nodeType: number;\n selector: string;\n}\n\nexport function resourceErrorHandler(e: ErrorEvent) {\n const target = (e.target || e.srcElement) as any;\n\n const selector = getSelector(e);\n\n const detail: ResourceErrorDetail = {\n src: target && target.src,\n tagName: target && target.tagName,\n id: target && target.id,\n className: target && target.className,\n name: target && target.name,\n // https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType\n nodeType: target && target.nodeType,\n selector,\n };\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<ResourceErrorDetail>({\n category: \"error\",\n type: EventTypes.RESOURCE_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\nimport ErrorStackParser from \"error-stack-parser\";\n\nexport interface UnhandledrejectionErrorDetail extends OhbugBaseDetail {\n name: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n stack: string;\n}\n\nexport function unhandledrejectionErrorHandler(e: PromiseRejectionEvent) {\n const detail: UnhandledrejectionErrorDetail = {\n name: e?.reason?.name,\n message: e?.reason?.message || e?.reason,\n stack: e?.reason?.stack,\n };\n if (e.reason) {\n try {\n const stackFrame = ErrorStackParser.parse(e.reason)?.[0];\n if (stackFrame) {\n detail.filename = stackFrame.fileName;\n detail.lineno = stackFrame.lineNumber;\n detail.colno = stackFrame.columnNumber;\n }\n } catch {}\n }\n\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<UnhandledrejectionErrorDetail>({\n category: \"error\",\n type: EventTypes.UNHANDLEDREJECTION_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\nimport ErrorStackParser from \"error-stack-parser\";\n\nexport interface UnknownErrorDetail extends OhbugBaseDetail {\n name: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n stack: string;\n}\n\nexport function unknownErrorHandler(e: any) {\n const detail: UnknownErrorDetail = {\n name: e?.error?.name,\n message: e?.message || e?.error?.message,\n filename: e?.filename,\n lineno: e?.lineno,\n colno: e?.colno,\n stack: e?.error?.stack,\n };\n if (e.error) {\n try {\n const stackFrame = ErrorStackParser.parse(e.error)?.[0];\n if (stackFrame) {\n detail.filename = stackFrame.fileName;\n detail.lineno = stackFrame.lineNumber;\n detail.colno = stackFrame.columnNumber;\n }\n } catch {}\n }\n\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<UnknownErrorDetail>({\n category: \"error\",\n type: EventTypes.UNKNOWN_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nexport interface AjaxErrorDetail extends OhbugBaseDetail {\n req: {\n url: string;\n method: string;\n data?: string;\n params?: string;\n };\n res: {\n response: string;\n status: number;\n statusText?: string;\n };\n}\n\nexport function ajaxErrorHandler(detail: AjaxErrorDetail) {\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<AjaxErrorDetail>({\n category: \"error\",\n type: EventTypes.AJAX_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nexport interface FetchErrorDetail extends OhbugBaseDetail {\n req: {\n url: string;\n method: string;\n data?: string;\n params?: string;\n };\n res: {\n status: number;\n statusText?: string;\n };\n}\n\nexport function fetchErrorHandler(detail: FetchErrorDetail) {\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<FetchErrorDetail>({\n category: \"error\",\n type: EventTypes.FETCH_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nexport interface WebsocketErrorDetail extends OhbugBaseDetail {\n url: string;\n params?: string;\n timeStamp: number;\n readyState: number;\n protocol: string;\n extensions: string;\n binaryType: string;\n bufferedAmount: number;\n}\n\nexport function websocketErrorHandler(detail: WebsocketErrorDetail) {\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<WebsocketErrorDetail>({\n category: \"error\",\n type: EventTypes.WEBSOCKET_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import {\n resourceErrorHandler,\n uncaughtErrorHandler,\n unhandledrejectionErrorHandler,\n unknownErrorHandler,\n} from \"../handle\";\n\nexport function scriptDispatcher(e: ErrorEvent | PromiseRejectionEvent) {\n try {\n const { type } = e;\n if (type === \"error\") {\n const targetEvent = e as ErrorEvent;\n const { message, error } = targetEvent;\n const immutableTarget = e.target || e.srcElement;\n if (message && error) {\n uncaughtErrorHandler(targetEvent);\n } else if (immutableTarget) {\n resourceErrorHandler(targetEvent);\n }\n } else if (type === \"unhandledrejection\") {\n unhandledrejectionErrorHandler(e as PromiseRejectionEvent);\n } else {\n unknownErrorHandler(e);\n }\n } catch (error) {\n unknownErrorHandler(error);\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\n\nimport {\n ajaxErrorHandler,\n fetchErrorHandler,\n unknownErrorHandler,\n websocketErrorHandler,\n} from \"../handle\";\n\nexport function networkDispatcher(type: string, detail: any) {\n try {\n switch (type) {\n case EventTypes.AJAX_ERROR:\n ajaxErrorHandler(detail);\n break;\n case EventTypes.FETCH_ERROR:\n fetchErrorHandler(detail);\n break;\n case EventTypes.WEBSOCKET_ERROR:\n websocketErrorHandler(detail);\n break;\n default:\n break;\n }\n } catch (error) {\n unknownErrorHandler(error);\n }\n}\n","// https://stackoverflow.com/questions/8648892/how-to-convert-url-parameters-to-a-javascript-object\nconst groupParamsByKey = (params: URLSearchParams) =>\n [...params.entries()].reduce<Record<string, any>>((acc, tuple) => {\n // getting the key and value from each tuple\n const [key, val] = tuple;\n // eslint-disable-next-line no-prototype-builtins\n if (acc.hasOwnProperty(key)) {\n // if the current key is already an array, we'll add the value to it\n if (Array.isArray(acc[key])) {\n acc[key] = [...acc[key], val];\n } else {\n // if it's not an array, but contains a value, we'll convert it into an array\n // and add the current value to it\n acc[key] = [acc[key], val];\n }\n } else {\n // plain assignment if no special case is present\n acc[key] = val;\n }\n return acc;\n }, {});\n\nexport function getParams(data: string) {\n try {\n const location = new URL(data);\n const url = location.origin + location.pathname;\n const searchParams = location.search ? location.searchParams : undefined;\n const params = searchParams ? JSON.stringify(groupParamsByKey(searchParams)) : undefined;\n return {\n url,\n params,\n };\n } catch {\n const location = data.split(\"?\");\n const url = location?.[0];\n const search = location?.[1];\n const searchParams = search ? new URLSearchParams(search) : undefined;\n const params = searchParams ? JSON.stringify(groupParamsByKey(searchParams)) : undefined;\n return {\n url,\n params,\n };\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport { getGlobal, getOhbugObject, replace } from \"@ohbug/utils\";\n\nimport { networkDispatcher } from \"../../dispatch\";\nimport type { AjaxErrorDetail } from \"../../handle\";\nimport { getParams } from \"./getParams\";\n\nconst global = getGlobal<Window>();\nconst access = \"XMLHttpRequest\" in global;\nconst xhrOriginal = access\n ? {\n open: XMLHttpRequest.prototype.open.bind(XMLHttpRequest.prototype),\n send: XMLHttpRequest.prototype.send.bind(XMLHttpRequest.prototype),\n }\n : {};\n\n/**\n * capture AJAX_ERROR\n */\nexport function captureAjaxError() {\n if (!access) return;\n\n const { client } = getOhbugObject<Window>();\n\n const desc = {\n method: \"\",\n url: \"\",\n };\n\n const xhrProto = XMLHttpRequest?.prototype;\n\n xhrOriginal.open = replace(\n xhrProto,\n \"open\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n const [method, url] = args;\n desc.method = method;\n desc.url = url;\n return origin.apply(this, args);\n },\n );\n\n xhrOriginal.send = replace(\n xhrProto,\n \"send\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n this.addEventListener(\"readystatechange\", function handle(this: any) {\n if (this.readyState === 4) {\n if (desc.url !== client.__config.endpoint) {\n const { url, params } = getParams(desc.url);\n const detail: AjaxErrorDetail = {\n req: {\n url,\n method: desc.method,\n data: args[0],\n params,\n },\n res: {\n status: this.status,\n statusText: this.statusText,\n response: this.response,\n },\n };\n\n client.addAction(\"ajax\", detail, \"ajax\");\n if (!this.status || this.status >= 400) {\n networkDispatcher(EventTypes.AJAX_ERROR, detail);\n }\n }\n }\n });\n return origin.apply(this, args);\n },\n );\n}\n\nexport function removeCaptureAjaxError() {\n if (access && xhrOriginal.open && xhrOriginal.send) {\n const xhrProto = XMLHttpRequest?.prototype;\n xhrProto.open = xhrOriginal.open;\n xhrProto.send = xhrOriginal.send;\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport { getGlobal, getOhbugObject, replace } from \"@ohbug/utils\";\n\nimport { networkDispatcher } from \"../../dispatch\";\nimport type { FetchErrorDetail } from \"../../handle\";\nimport { getParams } from \"./getParams\";\n\nconst global = getGlobal<Window>();\nconst access = \"fetch\" in global;\n\nlet fetchOriginal = access ? global.fetch.bind(global) : null;\n/**\n * capture FETCH_ERROR\n */\nexport function captureFetchError() {\n if (!access) return;\n\n const { client } = getOhbugObject<Window>();\n\n fetchOriginal = replace(\n global,\n \"fetch\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n return origin.apply(this, args).then(\n (res: Response) => {\n const [originalUrl, conf] = args;\n const { url, params } = getParams(originalUrl);\n const detail: FetchErrorDetail = {\n req: {\n url,\n method: conf && conf.method,\n data: conf && conf.body,\n params,\n },\n res: {\n status: res.status,\n statusText: res.statusText,\n },\n };\n client.addAction(\"fetch\", detail, \"fetch\");\n\n if (!res.status || res.status >= 400) {\n networkDispatcher(EventTypes.FETCH_ERROR, detail);\n }\n\n return res;\n },\n (err: Error) => {\n const [originalUrl, conf] = args;\n const { url, params } = getParams(originalUrl);\n const detail: FetchErrorDetail = {\n req: {\n url,\n method: conf && conf.method,\n data: conf && conf.body,\n params,\n },\n res: {\n status: 0,\n statusText: err.message,\n },\n };\n networkDispatcher(EventTypes.FETCH_ERROR, detail);\n throw err;\n },\n );\n },\n );\n}\n\nexport function removeCaptureFetchError() {\n if (access && fetchOriginal) {\n global.fetch = fetchOriginal;\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport { getGlobal } from \"@ohbug/utils\";\n\nimport { networkDispatcher } from \"../../dispatch\";\nimport type { WebsocketErrorDetail } from \"../../handle\";\nimport { getParams } from \"./getParams\";\n\nconst global = getGlobal<Window>();\n\n/**\n * capture WEBSOCKET_ERROR\n */\nexport function captureWebSocketError() {\n if (!(\"WebSocket\" in global)) return;\n\n const wsProto = WebSocket?.prototype;\n\n const backup = Object.getOwnPropertyDescriptor(wsProto, \"onerror\");\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(wsProto, \"onerror\", {\n set() {\n // eslint-disable-next-line prefer-rest-params\n const args = arguments;\n const arg = args[0];\n backup?.set?.call(this, function call(this: any, e: any) {\n const {\n target: {\n url: originalUrl,\n readyState,\n protocol,\n extensions,\n binaryType,\n bufferedAmount,\n },\n timeStamp,\n } = e;\n const { url, params } = getParams(originalUrl);\n const detail: WebsocketErrorDetail = {\n url,\n params,\n timeStamp,\n readyState,\n protocol,\n extensions,\n binaryType,\n bufferedAmount,\n };\n networkDispatcher(EventTypes.WEBSOCKET_ERROR, detail);\n arg.apply(this, args);\n });\n },\n });\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport { scriptDispatcher } from \"../../dispatch\";\n\nconst global = getGlobal<Window>();\n\nfunction listener(e: ErrorEvent) {\n scriptDispatcher(e);\n}\n\n/**\n * capture UNCAUGHT_ERROR RESOURCE_ERROR\n */\nexport function captureUncaughtError() {\n global?.addEventListener?.(\"error\", listener, true);\n}\n\nexport function removeCaptureUncaughtError() {\n global?.removeEventListener?.(\"error\", listener, true);\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport { scriptDispatcher } from \"../../dispatch\";\n\nconst global = getGlobal<Window>();\n\nfunction listener(e: PromiseRejectionEvent) {\n scriptDispatcher(e);\n}\n\n/**\n * capture UNHANDLEDREJECTION_ERROR\n */\nexport function captureUnhandledrejectionError() {\n global?.addEventListener?.(\"unhandledrejection\", listener, true);\n}\n\nexport function removeCaptureUnhandledrejectionError() {\n global?.removeEventListener?.(\"unhandledrejection\", listener, true);\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport { replaceAddEventListener } from \"../replaceAddEventListener\";\nimport { captureClick, removeCaptureClick } from \"./action/captureClick\";\nimport { captureUrlChange, removeCaptureUrlChange } from \"./action/captureUrlChange\";\nimport { captureConsole, removeCaptureConsole } from \"./console/captureConsole\";\nimport { captureAjaxError, removeCaptureAjaxError } from \"./network/captureAjaxError\";\nimport { captureFetchError, removeCaptureFetchError } from \"./network/captureFetchError\";\nimport { captureWebSocketError } from \"./network/captureWebSocketError\";\nimport { captureUncaughtError, removeCaptureUncaughtError } from \"./script/captureUncaughtError\";\nimport {\n captureUnhandledrejectionError,\n removeCaptureUnhandledrejectionError,\n} from \"./script/captureUnhandledrejectionError\";\n\nexport function captureAction() {\n captureUrlChange();\n captureClick();\n}\nexport function removeCaptureAction() {\n removeCaptureUrlChange();\n removeCaptureClick();\n}\n\nexport { captureConsole, removeCaptureConsole };\n\nexport function captureNetwork() {\n captureAjaxError();\n captureFetchError();\n captureWebSocketError();\n}\nexport function removeCaptureNetwork() {\n removeCaptureAjaxError();\n removeCaptureFetchError();\n}\n\nexport function captureScript() {\n const global = getGlobal<Window>();\n if (!global.addEventListener) return;\n\n captureUncaughtError();\n captureUnhandledrejectionError();\n}\nexport function removeCaptureScript() {\n removeCaptureUncaughtError();\n removeCaptureUnhandledrejectionError();\n}\n\nexport function handleCapture() {\n replaceAddEventListener();\n captureScript();\n captureNetwork();\n captureAction();\n captureConsole();\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport {\n removeCaptureAction,\n removeCaptureConsole,\n removeCaptureNetwork,\n removeCaptureScript,\n} from \"./capture\";\nimport { removeReplaceAddEventListener } from \"./replaceAddEventListener\";\n\nconst global = getGlobal<Window>();\n\nexport function destroy() {\n removeReplaceAddEventListener();\n removeCaptureScript();\n removeCaptureNetwork();\n removeCaptureAction();\n removeCaptureConsole();\n}\n\nexport function handleDestroy() {\n global?.addEventListener?.(\n \"unload\",\n () => {\n destroy();\n },\n true,\n );\n}\n","import type { OhbugDevice, OhbugGetDevice } from \"@ohbug/types\";\n\nexport const device: OhbugGetDevice = () => {\n const ohbugDevice: OhbugDevice = {};\n if (navigator) {\n const {\n language,\n userAgent,\n // @ts-expect-error Chromium only\n connection,\n } = navigator;\n ohbugDevice.language = language;\n ohbugDevice.userAgent = userAgent;\n if (connection) {\n // Chromium only\n ohbugDevice.connection = {\n downlink: connection.downlink,\n effectiveType: connection.effectiveType,\n rtt: connection.rtt,\n };\n }\n }\n if (document) {\n const { title, referrer } = document;\n ohbugDevice.title = title;\n ohbugDevice.referrer = referrer;\n }\n if (window.location) {\n const { href: url } = window.location;\n ohbugDevice.url = url;\n }\n return ohbugDevice;\n};\n","import { defineExtension } from \"@ohbug/core\";\n\nimport { handleCapture } from \"./capture\";\nimport { handleDestroy } from \"./destroy\";\n\nexport const extension = defineExtension({\n name: \"OhbugBrowser\",\n onSetup: () => {\n handleCapture();\n handleDestroy();\n },\n});\n","import type { OhbugEventWithMethods } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nconst getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: any, value: any) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n }\n return value;\n };\n};\n\nexport function notifier<D>(event: OhbugEventWithMethods<D>) {\n const { client } = getOhbugObject<Window>();\n const url = client.__config.endpoint!;\n\n return new Promise((resolve, reject) => {\n const json = JSON.stringify(event, getCircularReplacer());\n if (navigator.sendBeacon) {\n const result = navigator.sendBeacon(url, json);\n resolve(result);\n } else {\n const xhr = new XMLHttpRequest();\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status >= 200 && xhr.status < 300) {\n return resolve(xhr.response);\n }\n reject(xhr);\n }\n };\n xhr.open(\"POST\", url);\n xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n xhr.send(json);\n }\n });\n}\n","export const version = \"__VERSION__\";\n","import { Client } from \"@ohbug/core\";\nimport type { OhbugClient, OhbugConfig, OhbugSDK } from \"@ohbug/types\";\nimport { getGlobal } from \"@ohbug/utils\";\n\nimport { destroy } from \"./destroy\";\nimport { device } from \"./device\";\nimport { extension } from \"./extension\";\nimport { notifier } from \"./notifier\";\nimport { version } from \"./version\";\n\ninterface OhbugBrowserClient {\n __client: OhbugClient | null;\n setup: (config: OhbugConfig) => OhbugClient;\n}\n\nfunction createClient(config: OhbugConfig, handleDestroy: () => void) {\n const global = getGlobal<Window>();\n\n const sdk: OhbugSDK = {\n platform: \"ohbug-browser\",\n version,\n };\n const client = new Client({\n sdk,\n config,\n device,\n notifier: config.notifier ?? notifier,\n destroy: handleDestroy,\n });\n\n global.__OHBUG__ = { client };\n client.use(extension);\n client.__logger.info(\n `%c @ohbug/browser %c Detected Ohbug v${version} %c`,\n \"background:#333; padding: 2px 1px; color: #FFF\",\n \"background:#FF6F61; padding: 2px 1px; color: #FFF\",\n \"background:transparent\",\n );\n return client;\n}\n\nexport const BrowserClient: OhbugBrowserClient = {\n __client: null,\n setup(config: OhbugConfig) {\n function destroyClient() {\n const global = getGlobal<Window>();\n\n destroy();\n BrowserClient.__client = null;\n // @ts-expect-error noop\n global.__OHBUG__ = undefined;\n }\n\n if (BrowserClient.__client) {\n BrowserClient.__client.__logger?.warn(\"setup() has been called. Ignored.\");\n return BrowserClient.__client;\n }\n\n BrowserClient.__client = createClient(config, destroyClient);\n return BrowserClient.__client;\n },\n};\n","import { BrowserClient } from \"./client\";\n\nexport type {\n UncaughtErrorDetail,\n ResourceErrorDetail,\n UnhandledrejectionErrorDetail,\n UnknownErrorDetail,\n AjaxErrorDetail,\n FetchErrorDetail,\n WebsocketErrorDetail,\n} from \"./handle\";\n\nexport default BrowserClient;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["access","global","listener","global","access","global","global","global","listener","global"],"sources":["../src/replaceAddEventListener.ts","../src/capture/action/captureClick.ts","../src/capture/action/captureUrlChange.ts","../src/capture/console/captureConsole.ts","../src/handle/uncaughtErrorHandler.ts","../src/handle/resourceErrorHandler.ts","../src/handle/unhandledrejectionErrorHandler.ts","../src/handle/unknownErrorHandler.ts","../src/handle/ajaxErrorHandler.ts","../src/handle/fetchErrorHandler.ts","../src/handle/websocketErrorHandler.ts","../src/dispatch/scriptDispatcher.ts","../src/dispatch/networkDispatcher.ts","../src/capture/network/getParams.ts","../src/capture/network/captureAjaxError.ts","../src/capture/network/captureFetchError.ts","../src/capture/network/captureWebSocketError.ts","../src/capture/script/captureUncaughtError.ts","../src/capture/script/captureUnhandledrejectionError.ts","../src/capture/index.ts","../src/destroy.ts","../src/device.ts","../src/extension.ts","../src/notifier.ts","../src/version.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["import { getGlobal, replace } from \"@ohbug/utils\";\n\nconst global = getGlobal<Window>();\nconst access = \"addEventListener\" in global;\nconst EventTargetProto = EventTarget?.prototype;\nconst EventTargetOriginal = access\n ? { addEventListener: EventTarget.prototype.addEventListener.bind(EventTarget.prototype) }\n : {};\n\nexport function replaceAddEventListener() {\n EventTargetProto.addEventListener = replace(\n EventTargetProto,\n \"addEventListener\",\n (origin) =>\n function call(this: any, type: string, listener: any, options: any) {\n const wrappedListener = (...args: any[]) => {\n return listener.apply(this, args);\n };\n return origin.call(this, type, wrappedListener, options);\n },\n );\n}\n\nexport function removeReplaceAddEventListener() {\n if (access && EventTargetOriginal.addEventListener) {\n const EventTargetProto = EventTarget?.prototype;\n EventTargetProto.addEventListener = EventTargetOriginal.addEventListener;\n }\n}\n","import { getGlobal, getOhbugObject, getSelector } from \"@ohbug/utils\";\n\nconst global = getGlobal<Window>();\n\nfunction listener(e: MouseEvent) {\n if (e.target) {\n const { client } = getOhbugObject<Window>();\n const { tagName, id, className, name, src, nodeType } = e.target as any;\n\n if (\n (tagName as string).toUpperCase() !== \"HTML\" &&\n (tagName as string).toUpperCase() !== \"BODY\"\n ) {\n const selector = getSelector(e);\n\n client.addAction(\n \"click node\",\n {\n tagName,\n id: id || undefined,\n className: className || undefined,\n name: name || undefined,\n src: src || undefined,\n nodeType: nodeType || undefined,\n selector: selector || undefined,\n },\n \"click\",\n );\n }\n }\n}\n\nexport function captureClick() {\n global?.document?.addEventListener?.(\"click\", listener);\n}\n\nexport function removeCaptureClick() {\n global?.document?.removeEventListener?.(\"click\", listener);\n}\n","import { getGlobal, getOhbugObject, parseUrl, replace } from \"@ohbug/utils\";\n\nconst global = getGlobal<Window>();\nlet lastHref: string | undefined;\n\nfunction handleUrlChange(from?: string, to?: string) {\n const { client } = getOhbugObject<Window>();\n const parsedHref = parseUrl(global?.location?.href);\n let parsedFrom = parseUrl(from as string);\n const parsedTo = parseUrl(to as string);\n\n if (!parsedFrom.path) {\n parsedFrom = parsedHref;\n }\n\n lastHref = to;\n\n let targetFrom = from;\n let targetTo = to;\n\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n targetTo = parsedTo.relative;\n }\n\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n targetFrom = parsedFrom.relative;\n }\n\n if (targetFrom === targetTo) return;\n\n client.addAction(\n `navigation to ${to}`,\n {\n from,\n to,\n },\n \"navigation\",\n );\n}\n\nfunction historyReplacement(original: (data: any, title: string, url?: string) => void) {\n return function call(this: any, data: any, title: string, url?: string) {\n if (url) {\n handleUrlChange(lastHref, String(url));\n }\n\n return original.apply(this, [data, title, url]);\n };\n}\n\nconst historyOriginal = {\n pushState: global?.history?.pushState?.bind(global?.history),\n replaceState: global?.history?.replaceState?.bind(global?.history),\n onpopstate: global?.onpopstate,\n};\nfunction historyListener() {\n historyOriginal.pushState = replace(global?.history, \"pushState\", historyReplacement);\n historyOriginal.replaceState = replace(global?.history, \"replaceState\", historyReplacement);\n historyOriginal.onpopstate = replace(\n global,\n \"onpopstate\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n const current = global?.location?.href;\n handleUrlChange(lastHref, current);\n return origin?.apply(this, args);\n },\n );\n}\n\nfunction hashListener(e: Event) {\n const { oldURL, newURL } = e as HashChangeEvent;\n handleUrlChange(oldURL, newURL);\n}\n\nexport function captureUrlChange() {\n // history\n historyListener();\n // hash\n global?.addEventListener?.(\"hashchange\", hashListener, true);\n}\n\nexport function removeCaptureUrlChange() {\n // history\n global.history.pushState = historyOriginal.pushState;\n global.history.replaceState = historyOriginal.replaceState;\n global.onpopstate = historyOriginal.onpopstate;\n // hash\n global?.removeEventListener?.(\"hashchange\", hashListener, true);\n}\n","/* eslint-disable no-console */\n\nimport { getOhbugObject, replace } from \"@ohbug/utils\";\n\ntype Level = \"log\" | \"info\" | \"warn\" | \"error\";\nconst levels: Level[] = [\"log\", \"info\", \"warn\", \"error\"];\nconst consoleOriginal = Object.keys(levels).reduce<Record<Level, any>>(\n (acc, cur: string) => ({\n ...acc,\n // @ts-expect-error 修改了原生的console\n [cur]: console[cur],\n }),\n {\n log: null,\n info: null,\n warn: null,\n error: null,\n },\n);\n\nexport function captureConsole() {\n const { client } = getOhbugObject<Window>();\n levels.forEach((level) => {\n consoleOriginal[level] = replace(\n console,\n level,\n (origin) =>\n function call(this: any, ...args: any[]) {\n const isOhbugConsole = args.some(\n (arg) => typeof arg === \"string\" && arg.includes(\"Ohbug\"),\n );\n if (!isOhbugConsole) {\n client.addAction(`console.${level}`, args, \"console\");\n }\n\n return origin.apply(this, args);\n },\n );\n });\n}\n\nexport function removeCaptureConsole() {\n if (console) {\n levels.forEach((level) => {\n console[level] = consoleOriginal[level];\n });\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\nimport ErrorStackParser from \"error-stack-parser\";\n\nexport interface UncaughtErrorDetail extends OhbugBaseDetail {\n name: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n stack: string;\n}\n\nexport function uncaughtErrorHandler(e: ErrorEvent) {\n const detail: UncaughtErrorDetail = {\n name: e?.error?.name,\n message: e?.message || e?.error?.message,\n filename: e?.filename,\n lineno: e?.lineno,\n colno: e?.colno,\n stack: e?.error?.stack,\n };\n if (e.error) {\n try {\n const stackFrame = ErrorStackParser.parse(e.error)?.[0];\n if (stackFrame) {\n detail.filename = stackFrame.fileName;\n detail.lineno = stackFrame.lineNumber;\n detail.colno = stackFrame.columnNumber;\n }\n } catch {}\n }\n\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<UncaughtErrorDetail>({\n category: \"error\",\n type: EventTypes.UNCAUGHT_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject, getSelector } from \"@ohbug/utils\";\n\nexport interface ResourceErrorDetail extends OhbugBaseDetail {\n src: string;\n tagName: string;\n id: string;\n className: string;\n name: string;\n // https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType\n nodeType: number;\n selector: string;\n}\n\nexport function resourceErrorHandler(e: ErrorEvent) {\n const target = (e.target || e.srcElement) as any;\n\n const selector = getSelector(e);\n\n const detail: ResourceErrorDetail = {\n src: target && target.src,\n tagName: target && target.tagName,\n id: target && target.id,\n className: target && target.className,\n name: target && target.name,\n // https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType\n nodeType: target && target.nodeType,\n selector,\n };\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<ResourceErrorDetail>({\n category: \"error\",\n type: EventTypes.RESOURCE_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\nimport ErrorStackParser from \"error-stack-parser\";\n\nexport interface UnhandledrejectionErrorDetail extends OhbugBaseDetail {\n name: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n stack: string;\n}\n\nexport function unhandledrejectionErrorHandler(e: PromiseRejectionEvent) {\n const detail: UnhandledrejectionErrorDetail = {\n name: e?.reason?.name,\n message: e?.reason?.message || e?.reason,\n stack: e?.reason?.stack,\n };\n if (e.reason) {\n try {\n const stackFrame = ErrorStackParser.parse(e.reason)?.[0];\n if (stackFrame) {\n detail.filename = stackFrame.fileName;\n detail.lineno = stackFrame.lineNumber;\n detail.colno = stackFrame.columnNumber;\n }\n } catch {}\n }\n\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<UnhandledrejectionErrorDetail>({\n category: \"error\",\n type: EventTypes.UNHANDLEDREJECTION_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\nimport ErrorStackParser from \"error-stack-parser\";\n\nexport interface UnknownErrorDetail extends OhbugBaseDetail {\n name: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n stack: string;\n}\n\nexport function unknownErrorHandler(e: any) {\n const detail: UnknownErrorDetail = {\n name: e?.error?.name,\n message: e?.message || e?.error?.message,\n filename: e?.filename,\n lineno: e?.lineno,\n colno: e?.colno,\n stack: e?.error?.stack,\n };\n if (e.error) {\n try {\n const stackFrame = ErrorStackParser.parse(e.error)?.[0];\n if (stackFrame) {\n detail.filename = stackFrame.fileName;\n detail.lineno = stackFrame.lineNumber;\n detail.colno = stackFrame.columnNumber;\n }\n } catch {}\n }\n\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<UnknownErrorDetail>({\n category: \"error\",\n type: EventTypes.UNKNOWN_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nexport interface AjaxErrorDetail extends OhbugBaseDetail {\n req: {\n url: string;\n method: string;\n data?: string;\n params?: string;\n };\n res: {\n response: string;\n status: number;\n statusText?: string;\n };\n}\n\nexport function ajaxErrorHandler(detail: AjaxErrorDetail) {\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<AjaxErrorDetail>({\n category: \"error\",\n type: EventTypes.AJAX_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nexport interface FetchErrorDetail extends OhbugBaseDetail {\n req: {\n url: string;\n method: string;\n data?: string;\n params?: string;\n };\n res: {\n status: number;\n statusText?: string;\n };\n}\n\nexport function fetchErrorHandler(detail: FetchErrorDetail) {\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<FetchErrorDetail>({\n category: \"error\",\n type: EventTypes.FETCH_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport type { OhbugBaseDetail } from \"@ohbug/types\";\nimport { getOhbugObject } from \"@ohbug/utils\";\n\nexport interface WebsocketErrorDetail extends OhbugBaseDetail {\n url: string;\n params?: string;\n timeStamp: number;\n readyState: number;\n protocol: string;\n extensions: string;\n binaryType: string;\n bufferedAmount: number;\n}\n\nexport function websocketErrorHandler(detail: WebsocketErrorDetail) {\n const { client } = getOhbugObject<Window>();\n const event = client.createEvent<WebsocketErrorDetail>({\n category: \"error\",\n type: EventTypes.WEBSOCKET_ERROR,\n detail,\n });\n void client.notify(event);\n}\n","import {\n resourceErrorHandler,\n uncaughtErrorHandler,\n unhandledrejectionErrorHandler,\n unknownErrorHandler,\n} from \"../handle\";\n\nexport function scriptDispatcher(e: ErrorEvent | PromiseRejectionEvent) {\n try {\n const { type } = e;\n if (type === \"error\") {\n const targetEvent = e as ErrorEvent;\n const { message, error } = targetEvent;\n const immutableTarget = e.target || e.srcElement;\n if (message && error) {\n uncaughtErrorHandler(targetEvent);\n } else if (immutableTarget) {\n resourceErrorHandler(targetEvent);\n }\n } else if (type === \"unhandledrejection\") {\n unhandledrejectionErrorHandler(e as PromiseRejectionEvent);\n } else {\n unknownErrorHandler(e);\n }\n } catch (error) {\n unknownErrorHandler(error);\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\n\nimport {\n ajaxErrorHandler,\n fetchErrorHandler,\n unknownErrorHandler,\n websocketErrorHandler,\n} from \"../handle\";\n\nexport function networkDispatcher(type: string, detail: any) {\n try {\n switch (type) {\n case EventTypes.AJAX_ERROR:\n ajaxErrorHandler(detail);\n break;\n case EventTypes.FETCH_ERROR:\n fetchErrorHandler(detail);\n break;\n case EventTypes.WEBSOCKET_ERROR:\n websocketErrorHandler(detail);\n break;\n default:\n break;\n }\n } catch (error) {\n unknownErrorHandler(error);\n }\n}\n","// https://stackoverflow.com/questions/8648892/how-to-convert-url-parameters-to-a-javascript-object\nconst groupParamsByKey = (params: URLSearchParams) =>\n [...params.entries()].reduce<Record<string, any>>((acc, tuple) => {\n // getting the key and value from each tuple\n const [key, val] = tuple;\n // eslint-disable-next-line no-prototype-builtins\n if (acc.hasOwnProperty(key)) {\n // if the current key is already an array, we'll add the value to it\n if (Array.isArray(acc[key])) {\n acc[key] = [...acc[key], val];\n } else {\n // if it's not an array, but contains a value, we'll convert it into an array\n // and add the current value to it\n acc[key] = [acc[key], val];\n }\n } else {\n // plain assignment if no special case is present\n acc[key] = val;\n }\n return acc;\n }, {});\n\nexport function getParams(data: string) {\n try {\n const location = new URL(data);\n const url = location.origin + location.pathname;\n const searchParams = location.search ? location.searchParams : undefined;\n const params = searchParams ? JSON.stringify(groupParamsByKey(searchParams)) : undefined;\n return {\n url,\n params,\n };\n } catch {\n const location = data.split(\"?\");\n const url = location?.[0];\n const search = location?.[1];\n const searchParams = search ? new URLSearchParams(search) : undefined;\n const params = searchParams ? JSON.stringify(groupParamsByKey(searchParams)) : undefined;\n return {\n url,\n params,\n };\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport { getGlobal, getOhbugObject, replace } from \"@ohbug/utils\";\n\nimport { networkDispatcher } from \"../../dispatch\";\nimport type { AjaxErrorDetail } from \"../../handle\";\nimport { getParams } from \"./getParams\";\n\nconst global = getGlobal<Window>();\nconst access = \"XMLHttpRequest\" in global;\nconst xhrOriginal = access\n ? {\n open: XMLHttpRequest.prototype.open.bind(XMLHttpRequest.prototype),\n send: XMLHttpRequest.prototype.send.bind(XMLHttpRequest.prototype),\n }\n : {};\n\n/**\n * capture AJAX_ERROR\n */\nexport function captureAjaxError() {\n if (!access) return;\n\n const { client } = getOhbugObject<Window>();\n\n const desc = {\n method: \"\",\n url: \"\",\n };\n\n const xhrProto = XMLHttpRequest?.prototype;\n\n xhrOriginal.open = replace(\n xhrProto,\n \"open\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n const [method, url] = args;\n desc.method = method;\n desc.url = url;\n return origin.apply(this, args);\n },\n );\n\n xhrOriginal.send = replace(\n xhrProto,\n \"send\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n this.addEventListener(\"readystatechange\", function handle(this: any) {\n if (this.readyState === 4) {\n if (desc.url !== client.__config.endpoint) {\n const { url, params } = getParams(desc.url);\n const detail: AjaxErrorDetail = {\n req: {\n url,\n method: desc.method,\n data: args[0],\n params,\n },\n res: {\n status: this.status,\n statusText: this.statusText,\n response: this.response,\n },\n };\n\n client.addAction(\"ajax\", detail, \"ajax\");\n if (!this.status || this.status >= 400) {\n networkDispatcher(EventTypes.AJAX_ERROR, detail);\n }\n }\n }\n });\n return origin.apply(this, args);\n },\n );\n}\n\nexport function removeCaptureAjaxError() {\n if (access && xhrOriginal.open && xhrOriginal.send) {\n const xhrProto = XMLHttpRequest?.prototype;\n xhrProto.open = xhrOriginal.open;\n xhrProto.send = xhrOriginal.send;\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport { getGlobal, getOhbugObject, replace } from \"@ohbug/utils\";\n\nimport { networkDispatcher } from \"../../dispatch\";\nimport type { FetchErrorDetail } from \"../../handle\";\nimport { getParams } from \"./getParams\";\n\nconst global = getGlobal<Window>();\nconst access = \"fetch\" in global;\n\nlet fetchOriginal = access ? global.fetch.bind(global) : null;\n/**\n * capture FETCH_ERROR\n */\nexport function captureFetchError() {\n if (!access) return;\n\n const { client } = getOhbugObject<Window>();\n\n fetchOriginal = replace(\n global,\n \"fetch\",\n (origin) =>\n function call(this: any, ...args: any[]) {\n return origin.apply(this, args).then(\n (res: Response) => {\n const [originalUrl, conf] = args;\n const { url, params } = getParams(originalUrl);\n const detail: FetchErrorDetail = {\n req: {\n url,\n method: conf && conf.method,\n data: conf && conf.body,\n params,\n },\n res: {\n status: res.status,\n statusText: res.statusText,\n },\n };\n client.addAction(\"fetch\", detail, \"fetch\");\n\n if (!res.status || res.status >= 400) {\n networkDispatcher(EventTypes.FETCH_ERROR, detail);\n }\n\n return res;\n },\n (err: Error) => {\n const [originalUrl, conf] = args;\n const { url, params } = getParams(originalUrl);\n const detail: FetchErrorDetail = {\n req: {\n url,\n method: conf && conf.method,\n data: conf && conf.body,\n params,\n },\n res: {\n status: 0,\n statusText: err.message,\n },\n };\n networkDispatcher(EventTypes.FETCH_ERROR, detail);\n throw err;\n },\n );\n },\n );\n}\n\nexport function removeCaptureFetchError() {\n if (access && fetchOriginal) {\n global.fetch = fetchOriginal;\n }\n}\n","import { EventTypes } from \"@ohbug/core\";\nimport { getGlobal } from \"@ohbug/utils\";\n\nimport { networkDispatcher } from \"../../dispatch\";\nimport type { WebsocketErrorDetail } from \"../../handle\";\nimport { getParams } from \"./getParams\";\n\nconst global = getGlobal<Window>();\n\n/**\n * capture WEBSOCKET_ERROR\n */\nexport function captureWebSocketError() {\n if (!(\"WebSocket\" in global)) return;\n\n const wsProto = WebSocket?.prototype;\n\n const backup = Object.getOwnPropertyDescriptor(wsProto, \"onerror\");\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(wsProto, \"onerror\", {\n set() {\n // eslint-disable-next-line prefer-rest-params\n const args = arguments;\n const arg = args[0];\n backup?.set?.call(this, function call(this: any, e: any) {\n const {\n target: {\n url: originalUrl,\n readyState,\n protocol,\n extensions,\n binaryType,\n bufferedAmount,\n },\n timeStamp,\n } = e;\n const { url, params } = getParams(originalUrl);\n const detail: WebsocketErrorDetail = {\n url,\n params,\n timeStamp,\n readyState,\n protocol,\n extensions,\n binaryType,\n bufferedAmount,\n };\n networkDispatcher(EventTypes.WEBSOCKET_ERROR, detail);\n arg.apply(this, args);\n });\n },\n });\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport { scriptDispatcher } from \"../../dispatch\";\n\nconst global = getGlobal<Window>();\n\nfunction listener(e: ErrorEvent) {\n scriptDispatcher(e);\n}\n\n/**\n * capture UNCAUGHT_ERROR RESOURCE_ERROR\n */\nexport function captureUncaughtError() {\n global?.addEventListener?.(\"error\", listener, true);\n}\n\nexport function removeCaptureUncaughtError() {\n global?.removeEventListener?.(\"error\", listener, true);\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport { scriptDispatcher } from \"../../dispatch\";\n\nconst global = getGlobal<Window>();\n\nfunction listener(e: PromiseRejectionEvent) {\n scriptDispatcher(e);\n}\n\n/**\n * capture UNHANDLEDREJECTION_ERROR\n */\nexport function captureUnhandledrejectionError() {\n global?.addEventListener?.(\"unhandledrejection\", listener, true);\n}\n\nexport function removeCaptureUnhandledrejectionError() {\n global?.removeEventListener?.(\"unhandledrejection\", listener, true);\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport { replaceAddEventListener } from \"../replaceAddEventListener\";\nimport { captureClick, removeCaptureClick } from \"./action/captureClick\";\nimport { captureUrlChange, removeCaptureUrlChange } from \"./action/captureUrlChange\";\nimport { captureConsole, removeCaptureConsole } from \"./console/captureConsole\";\nimport { captureAjaxError, removeCaptureAjaxError } from \"./network/captureAjaxError\";\nimport { captureFetchError, removeCaptureFetchError } from \"./network/captureFetchError\";\nimport { captureWebSocketError } from \"./network/captureWebSocketError\";\nimport { captureUncaughtError, removeCaptureUncaughtError } from \"./script/captureUncaughtError\";\nimport {\n captureUnhandledrejectionError,\n removeCaptureUnhandledrejectionError,\n} from \"./script/captureUnhandledrejectionError\";\n\nexport function captureAction() {\n captureUrlChange();\n captureClick();\n}\nexport function removeCaptureAction() {\n removeCaptureUrlChange();\n removeCaptureClick();\n}\n\nexport { captureConsole, removeCaptureConsole };\n\nexport function captureNetwork() {\n captureAjaxError();\n captureFetchError();\n captureWebSocketError();\n}\nexport function removeCaptureNetwork() {\n removeCaptureAjaxError();\n removeCaptureFetchError();\n}\n\nexport function captureScript() {\n const global = getGlobal<Window>();\n if (!global.addEventListener) return;\n\n captureUncaughtError();\n captureUnhandledrejectionError();\n}\nexport function removeCaptureScript() {\n removeCaptureUncaughtError();\n removeCaptureUnhandledrejectionError();\n}\n\nexport function handleCapture() {\n replaceAddEventListener();\n captureScript();\n captureNetwork();\n captureAction();\n captureConsole();\n}\n","import { getGlobal } from \"@ohbug/utils\";\n\nimport {\n removeCaptureAction,\n removeCaptureConsole,\n removeCaptureNetwork,\n removeCaptureScript,\n} from \"./capture\";\nimport { removeReplaceAddEventListener } from \"./replaceAddEventListener\";\n\nconst global = getGlobal<Window>();\n\nexport function destroy() {\n removeReplaceAddEventListener();\n removeCaptureScript();\n removeCaptureNetwork();\n removeCaptureAction();\n removeCaptureConsole();\n}\n\nexport function handleDestroy() {\n global?.addEventListener?.(\n \"unload\",\n () => {\n destroy();\n },\n true,\n );\n}\n","import type { OhbugDevice, OhbugGetDevice } from \"@ohbug/types\";\n\nexport const device: OhbugGetDevice = () => {\n const ohbugDevice: OhbugDevice = {};\n if (navigator) {\n const {\n language,\n userAgent,\n // @ts-expect-error Chromium only\n connection,\n } = navigator;\n ohbugDevice.language = language;\n ohbugDevice.userAgent = userAgent;\n if (connection) {\n // Chromium only\n ohbugDevice.connection = {\n downlink: connection.downlink,\n effectiveType: connection.effectiveType,\n rtt: connection.rtt,\n };\n }\n }\n if (document) {\n const { title, referrer } = document;\n ohbugDevice.title = title;\n ohbugDevice.referrer = referrer;\n }\n if (window.location) {\n const { href: url } = window.location;\n ohbugDevice.url = url;\n }\n return ohbugDevice;\n};\n","import { defineExtension } from \"@ohbug/core\";\n\nimport { handleCapture } from \"./capture\";\nimport { handleDestroy } from \"./destroy\";\n\nexport const extension = defineExtension({\n name: \"OhbugBrowser\",\n onSetup: () => {\n handleCapture();\n handleDestroy();\n },\n});\n","import type { OhbugEventWithMethods } from \"@ohbug/types\";\nimport { getCircularReplacer, getOhbugObject } from \"@ohbug/utils\";\n\nexport function notifier<D>(event: OhbugEventWithMethods<D>) {\n const { client } = getOhbugObject<Window>();\n const url = client.__config.endpoint!;\n\n return new Promise((resolve, reject) => {\n const json = JSON.stringify(event, getCircularReplacer());\n if (navigator.sendBeacon) {\n const result = navigator.sendBeacon(url, json);\n resolve(result);\n } else {\n const xhr = new XMLHttpRequest();\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status >= 200 && xhr.status < 300) {\n return resolve(xhr.response);\n }\n reject(xhr);\n }\n };\n xhr.open(\"POST\", url);\n xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n xhr.send(json);\n }\n });\n}\n","declare const __VERSION__: string;\nexport const version: string = __VERSION__;\n","import { Client } from \"@ohbug/core\";\nimport type { OhbugClient, OhbugConfig, OhbugSDK } from \"@ohbug/types\";\nimport { getGlobal } from \"@ohbug/utils\";\n\nimport { destroy } from \"./destroy\";\nimport { device } from \"./device\";\nimport { extension } from \"./extension\";\nimport { notifier } from \"./notifier\";\nimport { version } from \"./version\";\n\ninterface OhbugBrowserClient {\n __client: OhbugClient | null;\n setup: (config: OhbugConfig) => OhbugClient;\n}\n\nfunction createClient(config: OhbugConfig, handleDestroy: () => void) {\n const global = getGlobal<Window>();\n\n const sdk: OhbugSDK = {\n platform: \"ohbug-browser\",\n version,\n };\n const client = new Client({\n sdk,\n config,\n device,\n notifier: config.notifier ?? notifier,\n destroy: handleDestroy,\n });\n\n global.__OHBUG__ = { client };\n client.use(extension);\n client.__logger.info(\n `%c @ohbug/browser %c Detected Ohbug v${version} %c`,\n \"background:#333; padding: 2px 1px; color: #FFF\",\n \"background:#FF6F61; padding: 2px 1px; color: #FFF\",\n \"background:transparent\",\n );\n return client;\n}\n\nexport const BrowserClient: OhbugBrowserClient = {\n __client: null,\n setup(config: OhbugConfig) {\n function destroyClient() {\n const global = getGlobal<Window>();\n\n destroy();\n BrowserClient.__client = null;\n // @ts-expect-error noop\n global.__OHBUG__ = undefined;\n }\n\n if (BrowserClient.__client) {\n BrowserClient.__client.__logger?.warn(\"setup() has been called. Ignored.\");\n return BrowserClient.__client;\n }\n\n BrowserClient.__client = createClient(config, destroyClient);\n return BrowserClient.__client;\n },\n};\n","import { BrowserClient } from \"./client\";\n\nexport type {\n UncaughtErrorDetail,\n ResourceErrorDetail,\n UnhandledrejectionErrorDetail,\n UnknownErrorDetail,\n AjaxErrorDetail,\n FetchErrorDetail,\n WebsocketErrorDetail,\n} from \"./handle\";\n\nexport default BrowserClient;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohbug/browser",
3
- "version": "2.5.2",
3
+ "version": "2.5.4",
4
4
  "description": "Ohbug SDK for browsers",
5
5
  "homepage": "https://github.com/ohbug-org/ohbug#readme",
6
6
  "bugs": {
@@ -31,9 +31,9 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "error-stack-parser": "^2.1.4",
34
- "@ohbug/core": "2.2.2",
35
- "@ohbug/utils": "2.0.9",
36
- "@ohbug/types": "2.2.2"
34
+ "@ohbug/core": "2.2.3",
35
+ "@ohbug/types": "2.2.2",
36
+ "@ohbug/utils": "2.0.10"
37
37
  },
38
38
  "scripts": {
39
39
  "dev": "vp pack --watch"