polyv-rum-sdk 0.1.8 → 0.1.10
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.js +0 -1
- package/dist/index.mjs +0 -1
- package/package.json +5 -2
- package/.github/workflows/publish.yml +0 -34
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/jest.config.cjs +0 -8
- package/src/__tests__/SLSWebTrackingAdapter.test.ts +0 -46
- package/src/__tests__/config.test.ts +0 -76
- package/src/core/MitoSLSAdapter.ts +0 -469
- package/src/core/config.ts +0 -338
- package/src/core/env.ts +0 -17
- package/src/index.ts +0 -26
- package/src/transport/SLSWebTrackingAdapter.ts +0 -626
- package/src/types/aliyun-web-track-browser-es.d.ts +0 -4
- package/src/types/external.d.ts +0 -8
- package/src/vue2/RUMManager.vue2.ts +0 -487
- package/src/vue2/plugin.vue2.ts +0 -56
- package/src/vue3/RUMManager.vue3.ts +0 -56
- package/src/vue3/plugin.vue3.ts +0 -40
- package/tsconfig.json +0 -16
package/dist/index.js
CHANGED
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polyv-rum-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
8
11
|
"scripts": {
|
|
9
|
-
"build": "tsup src/index.ts --format cjs,esm --dts --
|
|
12
|
+
"build": "tsup src/index.ts --format cjs,esm --dts --clean",
|
|
10
13
|
"dev": "tsup src/index.ts --watch --format cjs,esm --dts --sourcemap",
|
|
11
14
|
"lint": "eslint 'src/**/*.{ts,tsx}'",
|
|
12
15
|
"test": "jest",
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
name: Publish polyv-rum-sdk
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
tags:
|
|
6
|
-
- 'v*.*.*'
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
publish:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
|
|
12
|
-
steps:
|
|
13
|
-
- name: Checkout
|
|
14
|
-
uses: actions/checkout@v4
|
|
15
|
-
|
|
16
|
-
- name: Use Node.js
|
|
17
|
-
uses: actions/setup-node@v4
|
|
18
|
-
with:
|
|
19
|
-
node-version: 20
|
|
20
|
-
registry-url: 'https://registry.npmjs.org/'
|
|
21
|
-
|
|
22
|
-
- name: Install dependencies
|
|
23
|
-
run: npm ci
|
|
24
|
-
|
|
25
|
-
- name: Run tests
|
|
26
|
-
run: npm test
|
|
27
|
-
|
|
28
|
-
- name: Build package
|
|
29
|
-
run: npm run build
|
|
30
|
-
|
|
31
|
-
- name: Publish to npm
|
|
32
|
-
env:
|
|
33
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
34
|
-
run: npm publish --access public
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/env.ts","../src/core/config.ts","../src/core/MitoSLSAdapter.ts","../src/transport/SLSWebTrackingAdapter.ts","../src/vue2/plugin.vue2.ts","../src/vue2/RUMManager.vue2.ts","../src/vue3/plugin.vue3.ts","../src/vue3/RUMManager.vue3.ts"],"sourcesContent":["export * from './core/env';\nexport * from './core/config';\nexport * from './core/MitoSLSAdapter';\nexport * from './transport/SLSWebTrackingAdapter';\n\nexport * as vue2 from './vue2/plugin.vue2';\nexport {\n initRUMSystem as initRUMSystemVue2,\n trackEvent as trackEventVue2,\n trackPerformance as trackPerformanceVue2,\n trackAction as trackActionVue2,\n trackMetric as trackMetricVue2,\n getBreadcrumbs as getBreadcrumbsVue2,\n enableRUM as enableRUMVue2,\n disableRUM as disableRUMVue2,\n getRUMConfig as getRUMConfigVue2,\n destroyRUM as destroyRUMVue2,\n getRUMManager as getRUMManagerVue2,\n RUMPluginVue2\n} from './vue2/plugin.vue2';\n\nexport * as vue3 from './vue3/plugin.vue3';\nexport {\n createRUMPluginVue3,\n useRUM\n} from './vue3/plugin.vue3';\n","export interface RUMEnv {\n [key: string]: string | undefined;\n}\n\nexport const getRUMEnv = (): RUMEnv => {\n if (typeof window !== 'undefined' && (window as any).VUE_APP_ENV) {\n return (window as any).VUE_APP_ENV as RUMEnv;\n }\n\n if (typeof process !== 'undefined' && (process as any).env) {\n return (process as any).env as RUMEnv;\n }\n\n return {};\n};\n\nexport const RUM_ENV: RUMEnv = getRUMEnv();\n","import type { RUMEnv } from './env';\nimport { getRUMEnv } from './env';\n\nconst getEnv = (key: string, defaultValue = ''): string => {\n const env: RUMEnv = getRUMEnv();\n if (env && Object.prototype.hasOwnProperty.call(env, key)) {\n return (env as any)[key] || defaultValue;\n }\n return defaultValue;\n};\n\nconst isProduction = getEnv('NODE_ENV') === 'production';\nconst isDebugEnabled = getEnv('VUE_APP_RUM_DEBUG', 'false') === 'true';\n\nconst getSessionId = (): string => {\n if (typeof sessionStorage === 'undefined') {\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n let sessionId = sessionStorage.getItem('rum_session_id');\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n sessionStorage.setItem('rum_session_id', sessionId);\n }\n return sessionId;\n};\n\nconst getMetricType = (data: any): string => {\n switch (data.type) {\n case 'performance':\n return 'duration';\n case 'xhr':\n return 'xhr';\n case 'fetch':\n return 'fetch';\n case 'click':\n return 'click';\n case 'route':\n return 'route';\n case 'error':\n return 'error';\n default:\n return 'unknown';\n }\n};\n\nconst extractValue = (data: any): number => {\n switch (data.type) {\n case 'performance':\n return data.duration || 0;\n case 'xhr':\n case 'fetch':\n return data.duration || data.status || 0;\n case 'click':\n case 'error':\n return 1;\n default:\n return 1;\n }\n};\n\nexport interface SlsConfig {\n host: string;\n project: string;\n logstore: string;\n time: number;\n count: number;\n topic: string;\n source: string;\n enabled: boolean;\n debug: boolean;\n appName: string;\n appVersion: string;\n retryCount: number;\n retryInterval: number;\n}\n\nexport const slsConfig: SlsConfig = {\n host: getEnv('VUE_APP_SLS_HOST'),\n project: getEnv('VUE_APP_SLS_PROJECT'),\n logstore: getEnv('VUE_APP_SLS_LOGSTORE'),\n time: 10,\n count: 10,\n topic: 'rum-monitor',\n source: 'web',\n enabled: getEnv('VUE_APP_SLS_ENABLED', 'false') === 'true',\n debug: isDebugEnabled,\n appName: getEnv('VUE_APP_RUM_APP_NAME', 'rum-app'),\n appVersion: getEnv('PACKAGE_VERSION', '1.0.0'),\n retryCount: 3,\n retryInterval: 2000\n};\n\nif (typeof console !== 'undefined' && isDebugEnabled) {\n console.log('🔧 SLS Config:', {\n enabled: slsConfig.enabled,\n debug: slsConfig.debug,\n host: slsConfig.host,\n project: slsConfig.project,\n logstore: slsConfig.logstore,\n envCheck: {\n VUE_APP_SLS_ENABLED: getEnv('VUE_APP_SLS_ENABLED'),\n VUE_APP_RUM_DEBUG: getEnv('VUE_APP_RUM_DEBUG')\n }\n });\n}\n\nexport interface MitoSampleRateConfig {\n error: number;\n click: number;\n route: number;\n custom: number;\n xhr: number;\n}\n\nexport interface MitoConfig {\n dsn: string | null;\n appName: string;\n appVersion: string;\n environment: string;\n debug: boolean;\n maxBreadcrumbs: number;\n sampleRate: MitoSampleRateConfig;\n vue: {\n Vue?: any;\n lifecycle: boolean;\n performance: boolean;\n };\n network: {\n xhr: boolean;\n fetch: boolean;\n ignoreUrls: (string | RegExp)[];\n responseSizeLimit: number;\n };\n error: {\n javascript: boolean;\n promise: boolean;\n resource: boolean;\n ignoreErrors: (string | RegExp)[];\n };\n user: {\n click: boolean;\n route: boolean;\n performance: boolean;\n sensitiveSelectors: string[];\n };\n breadcrumb: {\n console: boolean;\n dom: boolean;\n navigation: boolean;\n customTypes: string[];\n };\n transport: {\n type: 'xhr' | 'fetch' | 'image';\n batch: {\n size: number;\n interval: number;\n immediateOnError: boolean;\n };\n retry: {\n times: number;\n interval: number;\n };\n };\n}\n\nexport const mitoConfig: MitoConfig = {\n dsn: getEnv('VUE_APP_RUM_DSN', '') || null,\n appName: 'live-admin-v3',\n appVersion: getEnv('PACKAGE_VERSION', '1.0.0'),\n environment: getEnv('NODE_ENV', 'development'),\n debug: isDebugEnabled,\n maxBreadcrumbs: 20,\n sampleRate: {\n error: 1.0,\n click: isProduction ? 0.1 : 1.0,\n route: 1.0,\n custom: 1.0,\n xhr: isProduction ? 0.5 : 1.0\n },\n vue: {\n Vue: undefined,\n lifecycle: true,\n performance: true\n },\n network: {\n xhr: true,\n fetch: true,\n ignoreUrls: [/sls\\.aliyuncs\\.com/, /file:\\/\\//],\n responseSizeLimit: 500\n },\n error: {\n javascript: true,\n promise: true,\n resource: true,\n ignoreErrors: [/third-party/, /Network timeout/]\n },\n user: {\n click: true,\n route: true,\n performance: true,\n sensitiveSelectors: [\n 'input[type=\"password\"]',\n 'input[name*=\"password\"]',\n 'input[name*=\"token\"]',\n 'textarea[name*=\"secret\"]'\n ]\n },\n breadcrumb: {\n console: isDebugEnabled,\n dom: true,\n navigation: true,\n customTypes: ['vue', 'vuex', 'axios']\n },\n transport: {\n type: 'xhr',\n batch: {\n size: 10,\n interval: 5000,\n immediateOnError: true\n },\n retry: {\n times: 3,\n interval: 2000\n }\n }\n};\n\nexport interface TransformContext {\n store?: any;\n router?: any;\n}\n\nexport const getUserInfo = (store?: any): any => {\n try {\n if (!store || !store.state) {\n return {};\n }\n\n const userModule = store.state.user || {};\n const userInfo = userModule.userInfo || userModule || {};\n const getters = store.getters || {};\n\n return {\n userId: userInfo.userId || userInfo.id || getters['user/userId'],\n userName: userInfo.userName || userInfo.contact || userInfo.name,\n accountId: userInfo.accountId,\n email: userInfo.email,\n roles: userInfo.roles || [],\n permissions: getters['user/permissions'] || userInfo.permissions || []\n };\n } catch (error) {\n console.warn('Failed to get user info from store:', error);\n return {};\n }\n};\n\nexport const transformDataForSLS = (data: any, context: TransformContext = {}): any => {\n const timestamp = new Date().toISOString();\n const userInfo = getUserInfo(context.store);\n\n const dimensions: Record<string, any> = {\n pageTitle: typeof document !== 'undefined' ? document.title : '',\n path: typeof window !== 'undefined' ? window.location.pathname : '',\n search: typeof window !== 'undefined' ? window.location.search : '',\n hash: typeof window !== 'undefined' ? window.location.hash : '',\n ...(userInfo && {\n userId: userInfo.userId,\n userName: userInfo.userName,\n accountId: userInfo.accountId,\n userEmail: userInfo.email,\n userRoles: (userInfo.roles || []).join(','),\n userPermissions: (userInfo.permissions || []).join(',')\n }),\n ...data.customData\n };\n\n if (data.type === 'click') {\n const target = data.target || {};\n const page = data.page || {};\n\n dimensions.clickBizId = data.bizId;\n dimensions.clickTargetTag = target.tagName;\n dimensions.clickTargetId = target.id;\n dimensions.clickTargetClass = target.className;\n dimensions.clickTargetSelector = target.selector;\n dimensions.clickTargetText = target.textContent;\n\n dimensions.clickPageUrl = page.url;\n dimensions.clickPagePath = page.path;\n dimensions.clickPageTitle = page.title;\n\n dimensions.clickX = data.x;\n dimensions.clickY = data.y;\n }\n\n return {\n __time__: Math.floor(Date.now() / 1000),\n __source__: 'live-admin-v3',\n timestamp,\n environment: mitoConfig.environment,\n sessionId: getSessionId(),\n user: userInfo,\n dataType: data.type || 'unknown',\n metricType: getMetricType(data),\n value: extractValue(data),\n event: {\n type: data.type,\n url:\n typeof window !== 'undefined' && window.location\n ? window.location.href\n : '',\n userAgent:\n typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n referrer:\n typeof document !== 'undefined' ? document.referrer : undefined\n },\n techStack: {\n vue: (context as any).Vue?.version || 'unknown',\n platform:\n typeof navigator !== 'undefined' ? navigator.platform : 'unknown',\n language:\n typeof navigator !== 'undefined' ? navigator.language : 'unknown'\n },\n rawData: isDebugEnabled ? data : undefined,\n dimensions\n };\n};\n\nexport const shouldReport = (data: any): boolean => {\n const dataType = data.type as keyof MitoSampleRateConfig;\n const sampleRate = (mitoConfig.sampleRate as any)[dataType] || 0;\n\n if (sampleRate === 0) return false;\n if (sampleRate === 1) return true;\n\n return Math.random() < sampleRate;\n};\n","import * as Mito from '@mitojs/browser';\nimport {\n mitoConfig,\n slsConfig,\n transformDataForSLS,\n shouldReport,\n type MitoConfig,\n type TransformContext\n} from './config';\nimport {\n SLSWebTrackingAdapter,\n type SLSAdapterConfig\n} from '../transport/SLSWebTrackingAdapter';\n\nexport interface MitoSLSAdapterOptions extends MitoConfig {\n slsConfigOverride?: Partial<SLSAdapterConfig>;\n}\n\nexport class MitoSLSAdapter {\n private options: MitoSLSAdapterOptions;\n private mitoInstance: any = null;\n private slsAdapter: SLSWebTrackingAdapter | null = null;\n private store: any = null;\n private router: any = null;\n private isInitialized = false;\n\n constructor(options: Partial<MitoSLSAdapterOptions> = {}) {\n this.options = {\n ...mitoConfig,\n ...options\n } as MitoSLSAdapterOptions;\n\n this.handleDataReport = this.handleDataReport.bind(this);\n this.handleRouteChange = this.handleRouteChange.bind(this);\n this.handleError = this.handleError.bind(this);\n this.addBreadcrumb = this.addBreadcrumb.bind(this);\n }\n\n addBreadcrumb(payload: any): void {\n if (!this.mitoInstance || !this.mitoInstance.breadcrumb) {\n return;\n }\n\n const breadcrumb = this.mitoInstance.breadcrumb;\n\n if (typeof breadcrumb.add === 'function') {\n breadcrumb.add(payload);\n return;\n }\n\n if (typeof breadcrumb.push === 'function') {\n breadcrumb.push(payload);\n }\n }\n\n async init(context: TransformContext & { Vue?: any } = {}): Promise<void> {\n if (this.isInitialized) {\n console.warn('MitoSLSAdapter already initialized');\n return;\n }\n\n this.store = context.store;\n this.router = context.router;\n\n if (!this.options.dsn) {\n console.warn(\n 'MitoSLSAdapter: DSN not configured, RUM system will run in simulation mode'\n );\n }\n\n try {\n const slsConfigOverride = this.options.slsConfigOverride || {};\n this.slsAdapter = new SLSWebTrackingAdapter({\n ...slsConfig,\n ...slsConfigOverride\n });\n await this.slsAdapter.init();\n\n this.mitoInstance = Mito.init({\n dsn: this.options.dsn || undefined,\n debug: this.options.debug,\n maxBreadcrumbs: this.options.maxBreadcrumbs,\n Vue: context.Vue || this.options.vue?.Vue,\n framework: {\n vue: true\n },\n beforeDataReport: this.handleDataReport,\n silent: !this.options.debug,\n silentConsole: !this.options.debug,\n enableUrlHash: true,\n enableUserAgent: true,\n enableHistory: true,\n performance: {\n enable: this.options.user.performance,\n sampleRate: (this.options.sampleRate as any).performance || 1.0\n },\n user: {\n enableClickTrack: this.options.user.click,\n clickTrackSampleRate: (this.options.sampleRate as any).click,\n ignoreSelector: this.options.user.sensitiveSelectors.join(', ')\n },\n api: {\n enableApiMonitor: this.options.network.xhr,\n apiMonitorSampleRate: (this.options.sampleRate as any).xhr,\n ignoreUrls: this.options.network.ignoreUrls,\n requestSizeLimit: this.options.network.responseSizeLimit * 1024\n }\n } as any);\n\n this.setupVueIntegration();\n this.setupRouterIntegration();\n this.setupErrorHandling();\n\n this.isInitialized = true;\n if (this.options.debug) {\n console.log('MitoSLSAdapter initialized successfully');\n }\n } catch (error) {\n console.error('Failed to initialize MitoSLSAdapter:', error);\n this.handleError(error);\n }\n }\n\n private setupVueIntegration(): void {\n if (!this.store) {\n console.warn('Vuex store not provided, some features may be limited');\n return;\n }\n\n this.store.subscribe((mutation: any) => {\n try {\n if (this.shouldTrackMutation(mutation)) {\n this.addBreadcrumb({\n type: 'vuex',\n message: `Vuex: ${mutation.type}`,\n category: 'vuex',\n data: {\n mutation: mutation.type,\n payload: mutation.payload\n }\n });\n }\n } catch (error) {\n console.warn('Failed to track Vuex mutation:', error);\n }\n });\n\n if (this.options.debug) {\n console.log('Vue integration configured');\n }\n }\n\n private setupRouterIntegration(): void {\n if (!this.router) {\n console.warn('Vue router not provided, route tracking disabled');\n return;\n }\n\n this.router.afterEach((to: any, from: any) => {\n try {\n this.handleRouteChange(to, from);\n } catch (error) {\n console.warn('Failed to handle route change:', error);\n }\n });\n\n if (this.options.debug) {\n console.log('Router integration configured');\n }\n }\n\n private setupErrorHandling(): void {\n if (this.options.debug) {\n console.log('Error handling configured');\n }\n }\n\n handleDataReport(data: any): boolean | void {\n try {\n if (this.options.debug) {\n console.log('🔍 MitoJS Data Report:', {\n type: data.type,\n timestamp: data.t || Date.now(),\n data\n });\n }\n\n if (!shouldReport(data)) {\n if (this.options.debug) {\n console.log('⏭️ Data filtered by sampling rate:', data.type);\n }\n return false;\n }\n\n const slsData = transformDataForSLS(data, {\n store: this.store,\n router: this.router\n });\n\n this.sendToSLS(slsData);\n\n return false;\n } catch (error) {\n console.error('Failed to handle data report:', error);\n return false;\n }\n }\n\n handleRouteChange(to: any, from: any): void {\n try {\n const routeData = {\n type: 'route',\n from: {\n path: from.fullPath,\n name: from.name,\n params: from.params,\n query: from.query\n },\n to: {\n path: to.fullPath,\n name: to.name,\n params: to.params,\n query: to.query\n },\n timestamp: Date.now()\n };\n\n this.addBreadcrumb({\n type: 'route',\n message: `Route: ${from.fullPath} -> ${to.fullPath}`,\n category: 'navigation',\n data: routeData\n });\n\n if (shouldReport(routeData)) {\n const slsData = transformDataForSLS(routeData, {\n store: this.store,\n router: this.router\n });\n this.sendToSLS(slsData);\n }\n } catch (error) {\n console.error('Failed to handle route change:', error);\n }\n }\n\n handleError(error: any): void {\n try {\n const errorData = {\n type: 'error',\n message: error?.message || 'Unknown error',\n stack: error?.stack,\n name: error?.name,\n timestamp: Date.now()\n };\n\n this.addBreadcrumb({\n type: 'error',\n message: errorData.message,\n category: 'error',\n data: errorData\n });\n\n if (shouldReport(errorData)) {\n const slsData = transformDataForSLS(errorData, {\n store: this.store,\n router: this.router\n });\n this.sendToSLS(slsData);\n }\n } catch (e) {\n console.error('Failed to handle error:', e);\n }\n }\n\n async sendToSLS(data: any): Promise<void> {\n try {\n if (!this.slsAdapter) {\n if (this.options.debug) {\n console.log('📝 RUM Data [SIMULATION MODE]:', data);\n }\n return;\n }\n\n const slsLogData = this.transformDataForSLSLog(data);\n if (this.options.debug) {\n console.log('🔧 Transformed SLS Log Data:', slsLogData);\n }\n\n await this.slsAdapter.sendLog(slsLogData);\n\n if (this.options.debug) {\n console.log('✅ RUM Data sent to SLS successfully');\n }\n } catch (error) {\n console.error('❌ Failed to send data to SLS:', error);\n\n if (this.options.debug) {\n console.log('🔄 RUM Data [FALLBACK MODE]:', data);\n }\n }\n }\n\n transformDataForSLSLog(data: any): any {\n return {\n eventType: data.dataType || data.event?.type || 'unknown',\n category: this.getEventCategory(data.dataType),\n level: this.getEventLevel(data.dataType),\n ...data.event,\n ...data.dimensions,\n ...data.rawData\n };\n }\n\n getEventCategory(dataType: string): string {\n switch (dataType) {\n case 'error':\n return 'error';\n case 'performance':\n return 'performance';\n case 'click':\n case 'route':\n return 'user';\n case 'xhr':\n return 'general';\n default:\n return 'general';\n }\n }\n\n getEventLevel(dataType: string): string {\n switch (dataType) {\n case 'error':\n return 'error';\n case 'xhr':\n return 'warn';\n default:\n return 'info';\n }\n }\n\n getUserInfoFromStore(): any {\n try {\n const user = this.store?.state?.user || {};\n return {\n userId: user.userId || user.id,\n userName: user.userName || user.name,\n accountId: user.accountId\n };\n } catch (error) {\n console.warn('Failed to get user info from store:', error);\n return {};\n }\n }\n\n shouldTrackMutation(mutation: any): boolean {\n const ignoredMutations = ['SET_LOADING', 'SET_CURRENT_PAGE', 'UPDATE_MOUSE_POSITION'];\n return !ignoredMutations.includes(mutation.type);\n }\n\n trackEvent(eventData: Record<string, any>): void {\n try {\n const customData = {\n type: 'custom',\n timestamp: Date.now(),\n ...eventData\n };\n\n this.addBreadcrumb({\n type: 'custom',\n message: `Custom Event: ${eventData.name || 'unknown'}`,\n category: 'custom',\n data: customData\n });\n\n if (shouldReport(customData)) {\n const slsData = transformDataForSLS(customData, {\n store: this.store,\n router: this.router\n });\n this.sendToSLS(slsData);\n }\n } catch (error) {\n console.error('Failed to track custom event:', error);\n }\n }\n\n setUser(userInfo: {\n userId?: string;\n userName?: string;\n email?: string;\n accountId?: string;\n roles?: string[];\n }): void {\n try {\n if (this.mitoInstance && this.mitoInstance.setUser) {\n this.mitoInstance.setUser({\n id: userInfo.userId,\n username: userInfo.userName,\n email: userInfo.email\n });\n }\n\n if (this.slsAdapter && userInfo.userId) {\n this.slsAdapter.setUserId(userInfo.userId);\n }\n } catch (error) {\n console.error('Failed to set user info:', error);\n }\n }\n\n getBreadcrumbs(): any[] {\n try {\n return this.mitoInstance?.getBreadcrumbs?.() || [];\n } catch (error) {\n console.error('Failed to get breadcrumbs:', error);\n return [];\n }\n }\n\n destroy(): void {\n try {\n if (typeof window !== 'undefined') {\n window.removeEventListener('error', this.handleError as any);\n window.removeEventListener(\n 'unhandledrejection',\n this.handleError as any\n );\n }\n\n if (this.mitoInstance && this.mitoInstance.destroy) {\n this.mitoInstance.destroy();\n }\n\n if (this.slsAdapter) {\n this.slsAdapter.destroy();\n }\n\n this.isInitialized = false;\n if (this.options.debug) {\n console.log('MitoSLSAdapter destroyed');\n }\n } catch (error) {\n console.error('Failed to destroy MitoSLSAdapter:', error);\n }\n }\n}\n\nlet instance: MitoSLSAdapter | null = null;\n\nexport const getMitoAdapter = (\n options: Partial<MitoSLSAdapterOptions> = {}\n): MitoSLSAdapter => {\n if (!instance) {\n instance = new MitoSLSAdapter(options);\n }\n return instance;\n};\n\nexport const initRUMCore = async (\n context: TransformContext & { Vue?: any },\n options: Partial<MitoSLSAdapterOptions> = {}\n): Promise<MitoSLSAdapter> => {\n const adapter = getMitoAdapter(options);\n await adapter.init(context);\n return adapter;\n};\n\nexport const getRUMCoreInstance = (): MitoSLSAdapter | null => instance;\n","import SlsTracker from '@aliyun-sls/web-track-browser/dist/web-track-browser.es.js';\nimport { getRUMEnv } from '../core/env';\n\nconst getEnv = (key: string, defaultValue = ''): string => {\n const env = getRUMEnv();\n if (env && Object.prototype.hasOwnProperty.call(env, key)) {\n return (env as any)[key] || defaultValue;\n }\n return defaultValue;\n};\n\nexport interface SLSAdapterConfig {\n host?: string;\n project?: string;\n logstore?: string;\n time?: number;\n count?: number;\n topic?: string;\n source?: string;\n environment?: string;\n debug?: boolean;\n enabled?: boolean;\n userId?: string | null;\n sessionId?: string;\n appName?: string;\n appVersion?: string;\n retryCount?: number;\n retryInterval?: number;\n}\n\nexport class SLSWebTrackingAdapter {\n private config: Required<SLSAdapterConfig>;\n private slsTracker: any = null;\n private isInitialized = false;\n private isDestroyed = false;\n private pendingLogs: any[] = [];\n private retryQueue: Array<{\n data: any;\n error: Error;\n timestamp: number;\n retryCount: number;\n }> = [];\n\n constructor(config: SLSAdapterConfig = {}) {\n this.config = {\n host:\n config.host || getEnv('VUE_APP_SLS_HOST') || '',\n project:\n config.project || getEnv('VUE_APP_SLS_PROJECT') || '',\n logstore:\n config.logstore || getEnv('VUE_APP_SLS_LOGSTORE') || '',\n time: config.time ?? 10,\n count: config.count ?? 10,\n topic: config.topic || 'rum-monitor',\n source: config.source || 'web',\n environment: config.environment || getEnv('NODE_ENV', 'development'),\n debug: config.debug ?? (getEnv('VUE_APP_RUM_DEBUG', 'false') === 'true'),\n enabled: config.enabled ?? true,\n userId: config.userId ?? null,\n sessionId: config.sessionId || this.generateSessionId(),\n appName:\n config.appName || getEnv('VUE_APP_RUM_APP_NAME', 'rum-app'),\n appVersion: config.appVersion || getEnv('PACKAGE_VERSION', '1.0.0'),\n retryCount: config.retryCount ?? 3,\n retryInterval: config.retryInterval ?? 2000\n };\n\n this.handleBeforeSend = this.handleBeforeSend.bind(this);\n this.handleError = this.handleError.bind(this);\n }\n\n async init(): Promise<void> {\n if (this.isInitialized) {\n console.warn('SLSWebTrackingAdapter already initialized');\n return;\n }\n\n if (this.isDestroyed) {\n throw new Error(\n 'SLSWebTrackingAdapter has been destroyed, cannot reinitialize'\n );\n }\n\n if (!this.config.enabled) {\n if (this.config.debug) {\n console.log('SLSWebTrackingAdapter is disabled');\n }\n return;\n }\n\n if (this.config.debug) {\n console.log('🚀 Initializing SLSWebTrackingAdapter...', {\n config: this.config,\n SlsTracker: typeof SlsTracker\n });\n }\n\n try {\n this.slsTracker = new (SlsTracker as any)({\n host: this.config.host,\n project: this.config.project,\n logstore: this.config.logstore,\n time: this.config.time,\n count: this.config.count,\n topic: this.config.topic,\n source: this.config.source,\n autoPopulateFields: false,\n beforeSend: this.handleBeforeSend\n });\n\n this.isInitialized = true;\n\n if (this.config.debug) {\n console.log('✅ SLSWebTrackingAdapter initialized successfully', {\n project: this.config.project,\n logstore: this.config.logstore,\n host: this.config.host,\n trackerInstance: !!this.slsTracker\n });\n }\n\n await this.sendLog({\n type: 'system',\n category: 'init',\n message: 'SLS WebTracking adapter initialized successfully',\n level: 'info',\n timestamp: Date.now()\n });\n } catch (error: any) {\n console.error('❌ Failed to initialize SLSWebTrackingAdapter:', error);\n this.handleError(error);\n throw error;\n }\n }\n\n async sendLog(data: Record<string, any>): Promise<void> {\n if (this.config.debug) {\n console.log('📤 Sending log to SLS...', {\n originalData: data,\n isReady: this.checkReady(),\n hasTracker: !!this.slsTracker,\n isInitialized: this.isInitialized\n });\n }\n\n if (!this.checkReady()) {\n if (this.config.debug) {\n console.log('❌ SLS adapter not ready, skipping log send');\n }\n return;\n }\n\n try {\n const logData = await this.transformLogData(data);\n\n if (this.config.debug) {\n console.log('🔧 Transformed SLS Log Data:', logData);\n }\n\n await this.slsTracker.send(logData);\n\n if (this.config.debug) {\n console.log('✅ Log sent to SLS successfully');\n }\n } catch (error: any) {\n console.error('❌ Failed to send log to SLS:', error);\n await this.handleSendError(data, error);\n }\n }\n\n async sendBatchLogs(logs: Record<string, any>[]): Promise<void> {\n if (!this.checkReady()) {\n return;\n }\n\n if (!Array.isArray(logs) || logs.length === 0) {\n return;\n }\n\n try {\n const transformedLogs = await Promise.all(\n logs.map((log) => this.transformLogData(log))\n );\n\n for (const logData of transformedLogs) {\n await this.slsTracker.send(logData);\n }\n\n if (this.config.debug) {\n console.log(\n `Batch sent ${transformedLogs.length} logs to SLS successfully`\n );\n }\n } catch (error) {\n console.error('Failed to send batch logs to SLS:', error);\n\n for (const log of logs) {\n await this.handleSendError(log, error as any);\n }\n }\n }\n\n async transformLogData(data: Record<string, any>): Promise<Record<string, any>> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const logData: Record<string, any> = {\n __time__: timestamp,\n __source__: this.config.source,\n\n // 基础信息\n event_type: data.eventType || data.type || 'unknown',\n category: data.category || 'general',\n level: data.level || 'info',\n client_timestamp: Date.now(),\n\n // 应用信息\n app_name: this.config.appName,\n // app_version: this.config.appVersion,\n environment: this.config.environment,\n\n // 会话信息\n session_id: this.config.sessionId,\n\n // 页面信息\n page_url:\n typeof window !== 'undefined' && window.location\n ? window.location.href\n : '',\n page_title:\n typeof document !== 'undefined' ? document.title : undefined,\n page_path:\n typeof window !== 'undefined' && window.location\n ? window.location.pathname\n : '',\n\n // 用户代理信息\n user_agent:\n typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n language:\n typeof navigator !== 'undefined' ? navigator.language : undefined\n };\n\n // 用户标识,优先使用上游数据\n if (this.config.userId) {\n logData.user_id = this.config.userId;\n }\n if (data.userId) {\n logData.user_id = data.userId;\n }\n if (data.userName) {\n logData.user_name = data.userName;\n }\n\n let isInternalUser = false;\n if (data.userEmail && typeof data.userEmail === 'string') {\n const emailParts = data.userEmail.split('@');\n if (emailParts.length === 2) {\n const domain = emailParts[1].toLowerCase();\n const internalDomains = getEnv(\n 'VUE_APP_RUM_INTERNAL_EMAIL_DOMAINS',\n 'polyv.net,polyv.com'\n )\n .split(',')\n .map((item) => item.trim().toLowerCase())\n .filter(Boolean);\n if (internalDomains.length > 0 && domain) {\n isInternalUser = internalDomains.some((internalDomain) => {\n if (!internalDomain) return false;\n return (\n domain === internalDomain ||\n domain.endsWith(`.${internalDomain}`)\n );\n });\n }\n }\n }\n\n logData.is_internal_user = isInternalUser;\n\n // 根据事件类型添加特定字段\n if (logData.event_type === 'error') {\n this.addErrorFields(logData, data);\n } else if (\n logData.event_type === 'xhr' ||\n logData.event_type === 'fetch'\n ) {\n this.addApiFields(logData, data);\n } else if (logData.event_type === 'click') {\n this.addClickFields(logData, data);\n }\n\n // 添加 detail_json,仅保留 hash 信息\n try {\n let hash = '';\n if (data && typeof data.hash === 'string') {\n hash = data.hash;\n } else if (\n data &&\n data.dimensions &&\n typeof data.dimensions.hash === 'string'\n ) {\n hash = data.dimensions.hash;\n } else if (\n typeof window !== 'undefined' &&\n typeof window.location !== 'undefined'\n ) {\n hash = window.location.hash || '';\n }\n\n logData.detail_json = JSON.stringify({ hash });\n } catch (error) {\n console.warn('Failed to serialize detail data:', error);\n logData.detail_json = JSON.stringify({\n error: 'Failed to serialize data'\n });\n }\n\n return logData;\n }\n\n private addErrorFields(\n logData: Record<string, any>,\n data: Record<string, any>\n ): void {\n if (data.message) {\n logData.error_message = String(data.message);\n }\n\n if (data.stack) {\n logData.error_stack = String(data.stack);\n }\n\n if (data.filename) {\n logData.error_filename = data.filename;\n }\n\n if (data.lineno) {\n logData.error_lineno = String(data.lineno);\n }\n\n if (data.colno) {\n logData.error_colno = String(data.colno);\n }\n\n if (data.name) {\n logData.error_name = data.name;\n }\n }\n\n private addApiFields(\n logData: Record<string, any>,\n data: Record<string, any>\n ): void {\n if (data.url) {\n logData.api_url = data.url;\n }\n\n if (data.method) {\n logData.api_method = data.method;\n }\n\n if (data.status !== undefined) {\n logData.api_status = Number(data.status);\n }\n\n if (data.duration !== undefined) {\n logData.api_duration = Number(data.duration);\n }\n\n if (data.responseSize !== undefined) {\n logData.api_response_size = Number(data.responseSize);\n }\n }\n\n private addClickFields(\n logData: Record<string, any>,\n data: Record<string, any>\n ): void {\n if (data.clickBizId || data.bizId) {\n logData.click_biz_id = data.clickBizId || data.bizId;\n }\n\n if (data.target) {\n logData.click_target = data.target;\n }\n\n if (data.selector) {\n logData.click_selector = data.selector;\n }\n\n if (data.text) {\n logData.click_text = data.text;\n }\n\n if (data.x !== undefined) {\n logData.click_x = Number(data.x);\n }\n\n if (data.y !== undefined) {\n logData.click_y = Number(data.y);\n }\n }\n\n private filterSensitiveData(data: Record<string, any>): Record<string, any> {\n const sensitivePatterns = [\n /password/i,\n /token/i,\n /secret/i,\n /key/i,\n /auth/i,\n /credential/i\n ];\n\n const filtered: Record<string, any> = { ...data };\n\n Object.keys(filtered).forEach((key) => {\n const value = filtered[key];\n if (typeof value === 'string') {\n if (sensitivePatterns.some((pattern) => pattern.test(key))) {\n filtered[key] = '[FILTERED]';\n }\n\n if (filtered[key].length > 500) {\n filtered[key] = `${filtered[key].substring(0, 500)}...`;\n }\n }\n });\n\n return filtered;\n }\n\n private async handleSendError(data: any, error: Error): Promise<void> {\n const retryItem = {\n data,\n error,\n timestamp: Date.now(),\n retryCount: 0\n };\n\n this.retryQueue.push(retryItem);\n\n if (this.shouldRetry(error)) {\n setTimeout(() => {\n this.retryFailedLogs();\n }, this.config.retryInterval);\n }\n }\n\n private async retryFailedLogs(): Promise<void> {\n if (this.retryQueue.length === 0) {\n return;\n }\n\n const itemsToRetry = this.retryQueue.filter(\n (item) => item.retryCount < this.config.retryCount\n );\n\n this.retryQueue = this.retryQueue.filter(\n (item) => item.retryCount >= this.config.retryCount\n );\n\n for (const item of itemsToRetry) {\n try {\n item.retryCount++;\n await this.sendLog(item.data);\n\n const index = this.retryQueue.indexOf(item);\n if (index > -1) {\n this.retryQueue.splice(index, 1);\n }\n } catch (error) {\n console.warn(\n `Retry failed for log (attempt ${item.retryCount}):`,\n error\n );\n\n if (item.retryCount < this.config.retryCount) {\n setTimeout(() => {\n this.retryFailedLogs();\n }, this.config.retryInterval * item.retryCount);\n } else {\n console.error('Max retry attempts reached, dropping log:', item.data);\n }\n }\n }\n }\n\n private shouldRetry(error: Error): boolean {\n const retryableErrors = [\n 'Network timeout',\n 'Connection failed',\n 'Service unavailable',\n 'Rate limit exceeded'\n ];\n\n return retryableErrors.some(\n (pattern) => (error.message && error.message.includes(pattern))\n );\n }\n\n private handleError(error: Error): void {\n console.error('SLSWebTrackingAdapter Error:', error);\n }\n\n private checkReady(): boolean {\n if (!this.config.enabled) {\n return false;\n }\n\n if (!this.isInitialized) {\n console.warn('SLSWebTrackingAdapter not initialized');\n return false;\n }\n\n if (!this.slsTracker) {\n console.warn('SLS Tracker not available');\n return false;\n }\n\n return true;\n }\n\n private generateSessionId(): string {\n if (typeof sessionStorage !== 'undefined') {\n let sessionId = sessionStorage.getItem('sls_session_id');\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random()\n .toString(36)\n .substring(2, 9)}`;\n sessionStorage.setItem('sls_session_id', sessionId);\n }\n return sessionId;\n }\n\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n handleBeforeSend(logData: any): boolean | Record<string, any> {\n try {\n const dataSize = JSON.stringify(logData).length;\n const maxSize = 1024 * 1024; // 1MB\n\n if (dataSize > maxSize) {\n console.warn('Log data too large, skipping:', dataSize);\n return false;\n }\n\n const filteredData = this.filterSensitiveData(logData);\n\n if (this.config.debug) {\n console.log('Log before send:', filteredData);\n }\n\n return filteredData;\n } catch (error) {\n console.error('Error in beforeSend handler:', error);\n return false;\n }\n }\n\n setUserId(userId: string): void {\n this.config.userId = userId;\n }\n\n updateConfig(newConfig: Partial<SLSAdapterConfig>): void {\n this.config = { ...this.config, ...newConfig };\n }\n\n getConfig(): SLSAdapterConfig {\n return { ...this.config };\n }\n\n getStats(): {\n isInitialized: boolean;\n isDestroyed: boolean;\n pendingLogsCount: number;\n retryQueueCount: number;\n config: {\n project: string | undefined;\n logstore: string | undefined;\n enabled: boolean | undefined;\n };\n } {\n return {\n isInitialized: this.isInitialized,\n isDestroyed: this.isDestroyed,\n pendingLogsCount: this.pendingLogs.length,\n retryQueueCount: this.retryQueue.length,\n config: {\n project: this.config.project,\n logstore: this.config.logstore,\n enabled: this.config.enabled\n }\n };\n }\n\n destroy(): void {\n if (this.isDestroyed) {\n return;\n }\n\n try {\n if (this.retryQueue.length > 0 && this.config.debug) {\n console.warn(\n `Destroying adapter with ${this.retryQueue.length} items in retry queue`\n );\n }\n\n if (this.slsTracker && this.slsTracker.destroy) {\n this.slsTracker.destroy();\n }\n\n this.isDestroyed = true;\n this.isInitialized = false;\n this.slsTracker = null;\n this.pendingLogs = [];\n this.retryQueue = [];\n\n if (this.config.debug) {\n console.log('SLSWebTrackingAdapter destroyed');\n }\n } catch (error) {\n console.error('Error destroying SLSWebTrackingAdapter:', error);\n }\n }\n}\n","import {\n RUMManagerVue2,\n type RUMManagerContext\n} from './RUMManager.vue2';\nimport type { MitoSLSAdapterOptions } from '../core/MitoSLSAdapter';\n\nconst rumManagerVue2 = new RUMManagerVue2();\n\nexport const initRUMSystem = (\n context: RUMManagerContext,\n options: Partial<MitoSLSAdapterOptions> = {}\n) => rumManagerVue2.init(context, options);\n\nexport const trackEvent = (\n eventName: string,\n eventData?: Record<string, any>\n) => rumManagerVue2.trackEvent(eventName, eventData || {});\n\nexport const trackPerformance = (performanceData: Record<string, any>) =>\n rumManagerVue2.trackPerformance(performanceData);\n\nexport const trackAction = (\n action: string,\n actionData?: Record<string, any>\n) => rumManagerVue2.trackAction(action, actionData || {});\n\nexport const trackMetric = (\n metricName: string,\n value: number,\n dimensions?: Record<string, any>\n) => rumManagerVue2.trackMetric(metricName, value, dimensions || {});\n\nexport const getBreadcrumbs = () => rumManagerVue2.getBreadcrumbs();\n\nexport const enableRUM = () => rumManagerVue2.enable();\nexport const disableRUM = () => rumManagerVue2.disable();\nexport const getRUMConfig = () => rumManagerVue2.getConfig();\nexport const destroyRUM = () => rumManagerVue2.destroy();\nexport const getRUMManager = () => rumManagerVue2;\n\nexport const RUMPluginVue2 = {\n install(Vue: any) {\n Vue.prototype.$rum = {\n trackEvent,\n trackPerformance,\n trackAction,\n trackMetric,\n getBreadcrumbs,\n enable: enableRUM,\n disable: disableRUM,\n getConfig: getRUMConfig\n };\n\n (Vue as any).$rumManager = rumManagerVue2;\n }\n};\n","import { mitoConfig, slsConfig, type TransformContext } from '../core/config';\nimport { getRUMEnv } from '../core/env';\nimport {\n initRUMCore,\n type MitoSLSAdapterOptions\n} from '../core/MitoSLSAdapter';\n\nexport interface RUMManagerContext extends TransformContext {\n Vue?: any;\n}\n\nexport class RUMManagerVue2 {\n private adapter: any = null;\n private isInitialized = false;\n private isEnabled = true;\n private context: RUMManagerContext = {};\n\n async init(\n context: RUMManagerContext,\n options: Partial<MitoSLSAdapterOptions> = {}\n ): Promise<void> {\n try {\n if (!this.shouldEnableRUM()) {\n if (mitoConfig.debug) {\n console.log('RUM system is disabled');\n }\n return;\n }\n\n if (this.isInitialized) {\n if (mitoConfig.debug) {\n console.log('RUM system already initialized');\n }\n return;\n }\n\n this.context = {\n store: context.store,\n router: context.router,\n Vue: context.Vue,\n ...context\n };\n\n const mergedOptions: Partial<MitoSLSAdapterOptions> = {\n ...mitoConfig,\n ...options,\n vue: {\n ...(mitoConfig as any).vue,\n ...(options as any).vue\n }\n };\n\n this.adapter = await initRUMCore(\n {\n store: this.context.store,\n router: this.context.router,\n Vue: this.context.Vue\n },\n mergedOptions\n );\n\n this.setUserInfo();\n this.setupUserStateListener();\n this.setupUserInteractionTracking();\n\n this.trackInitialRoute();\n\n this.isInitialized = true;\n if (mitoConfig.debug) {\n console.log('RUM system initialized successfully');\n }\n } catch (error) {\n console.error('Failed to initialize RUM system:', error);\n }\n }\n\n private shouldEnableRUM(): boolean {\n if (!this.isEnabled) {\n return false;\n }\n\n const env = getRUMEnv();\n\n const rumEnabled = (env as any).VUE_APP_RUM_ENABLED;\n if (rumEnabled !== undefined) {\n return rumEnabled === 'true';\n }\n\n const mode = (env as any).MODE;\n const isProdEnv = mode === 'prod' || mode === 'production';\n\n return !isProdEnv;\n }\n\n private setUserInfo(): void {\n if (!this.context.store) {\n return;\n }\n\n try {\n const userModule = this.context.store.state.user || {};\n const user = userModule.userInfo || userModule || {};\n\n if (this.adapter && user.userId) {\n this.adapter.setUser({\n userId: user.userId,\n userName: user.userName,\n accountId: user.accountId,\n roles: user.roles,\n email: user.email\n });\n }\n } catch (error) {\n console.warn('Failed to set user info:', error);\n }\n }\n\n private setupUserStateListener(): void {\n if (!this.context.store) {\n return;\n }\n\n this.context.store.subscribe((mutation: any) => {\n if (mutation.type.includes('user')) {\n this.setUserInfo();\n }\n });\n }\n\n private setupUserInteractionTracking(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n document.addEventListener(\n 'click',\n (event: MouseEvent) => {\n try {\n const originalTarget = event.target as HTMLElement | null;\n\n const findClosest = (el: any, selector: string): HTMLElement | null =>\n el && typeof el.closest === 'function' ? el.closest(selector) : null;\n\n let target = findClosest(originalTarget, '[rum-id],[rum-name]');\n\n if (!target) {\n target = findClosest(\n originalTarget,\n 'button, a, [role=\"button\"], [role=\"link\"]'\n );\n }\n\n if (!target && originalTarget && window.getComputedStyle) {\n const style = window.getComputedStyle(originalTarget);\n if (style.cursor === 'pointer') {\n target = originalTarget;\n }\n }\n\n if (!target) {\n return;\n }\n\n const getAttr = (el: any, name: string): string | null =>\n el && typeof el.getAttribute === 'function'\n ? el.getAttribute(name)\n : null;\n\n let bizId =\n getAttr(target, 'rum-id') || getAttr(target, 'rum-name') || '';\n\n if (!bizId) {\n const tagName = target.tagName\n ? target.tagName.toLowerCase()\n : 'element';\n\n const classList = (target.className || '')\n .toString()\n .split(/\\s+/)\n .filter((c: string) => c.trim());\n const primaryClass = classList[0] || 'no-class';\n\n const getLabel = (el: any): string => {\n if (!el) return '';\n const text = (el.textContent || '').trim();\n if (text) return text;\n const ariaLabel = getAttr(el, 'aria-label');\n if (ariaLabel) return ariaLabel;\n const title = getAttr(el, 'title');\n if (title) return title;\n const alt = getAttr(el, 'alt');\n if (alt) return alt;\n const placeholder = getAttr(el, 'placeholder');\n if (placeholder) return placeholder;\n const value = typeof el.value === 'string' ? el.value.trim() : '';\n if (value) return value;\n return '';\n };\n\n const label = getLabel(target);\n const safeLabel =\n (label || primaryClass).replace(/\\s+/g, '_').slice(0, 32) ||\n 'no_label';\n\n const route = (this.context?.router as any)?.currentRoute || {};\n\n const buildRouteKey = (r: any): string => {\n try {\n if (!r) return 'unknown_route';\n\n if (r.name) {\n return String(r.name);\n }\n\n if (Array.isArray(r.matched) && r.matched.length > 0) {\n const record = r.matched[r.matched.length - 1];\n if (record && record.path) {\n return record.path;\n }\n }\n\n if (r.path) {\n return r.path;\n }\n } catch {\n // ignore\n }\n\n return window.location.pathname || 'unknown_route';\n };\n\n const routeKey = buildRouteKey(route);\n\n let indexSuffix = '';\n try {\n const parent = target.parentNode as HTMLElement | null;\n if (parent && parent.children && parent.children.length) {\n const siblings = Array.from(parent.children).filter(\n (el) =>\n el.tagName === target.tagName &&\n (el as HTMLElement).className === target.className\n );\n const index = siblings.indexOf(target);\n if (index >= 0) {\n indexSuffix = `[${index}]`;\n }\n }\n } catch {\n // ignore\n }\n\n bizId = `${routeKey}|${tagName}.${primaryClass}${indexSuffix}|${safeLabel}`;\n }\n\n const targetInfo = {\n tagName: target.tagName,\n className: target.className,\n id: target.id,\n textContent: target.textContent?.substring(0, 50) || '',\n selector: this.getCSSSelector(target)\n };\n\n this.trackAction('click', {\n type: 'click',\n bizId,\n x: event.clientX,\n y: event.clientY,\n target: targetInfo,\n page: {\n url: window.location.href,\n title: document.title,\n path: window.location.pathname\n },\n timestamp: Date.now()\n });\n } catch (error) {\n console.warn('Failed to track click event:', error);\n }\n },\n true\n );\n\n document.addEventListener('visibilitychange', () => {});\n\n if (mitoConfig.debug) {\n console.log('User interaction tracking configured');\n }\n }\n\n private trackInitialRoute(): void {\n if (!this.context.router || !this.adapter) {\n return;\n }\n\n try {\n const router = this.context.router as any;\n const currentRoute =\n router.currentRoute || (router.app && router.app.$route) || {};\n\n const from = {\n path: currentRoute.fullPath || currentRoute.path,\n name: currentRoute.name,\n params: currentRoute.params,\n query: currentRoute.query\n };\n\n const to = { ...from };\n\n const adapter: any = this.adapter;\n if (adapter && typeof adapter.handleRouteChange === 'function') {\n adapter.handleRouteChange(to, from);\n }\n } catch (error) {\n if (mitoConfig.debug) {\n console.warn('Failed to track initial route:', error);\n }\n }\n }\n\n private getCSSSelector(element: Element | null): string {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return '';\n }\n\n const path: string[] = [];\n let current: Element | null = element;\n\n while (current && current.nodeType === Node.ELEMENT_NODE) {\n let selector = current.tagName.toLowerCase();\n\n if (current.id) {\n selector += `#${current.id}`;\n path.unshift(selector);\n break;\n }\n\n if ((current as HTMLElement).className) {\n const classes = (current as HTMLElement).className\n .split(' ')\n .filter((c) => c.trim());\n if (classes.length > 0) {\n selector += `.${classes[0]}`;\n }\n }\n\n path.unshift(selector);\n current = current.parentElement;\n\n if (path.length > 5) {\n break;\n }\n }\n\n return path.join(' > ');\n }\n\n trackEvent(eventName: string, eventData: Record<string, any> = {}): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: eventName,\n ...eventData\n });\n } catch (error) {\n console.error('Failed to track event:', error);\n }\n }\n\n trackPerformance(performanceData: Record<string, any>): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: 'performance',\n type: 'performance',\n ...performanceData\n });\n } catch (error) {\n console.error('Failed to track performance:', error);\n }\n }\n\n trackAction(action: string, actionData: Record<string, any> = {}): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: 'user_action',\n action,\n ...actionData\n });\n } catch (error) {\n console.error('Failed to track action:', error);\n }\n }\n\n trackMetric(\n metricName: string,\n value: number,\n dimensions: Record<string, any> = {}\n ): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: 'metric',\n metricName,\n value,\n dimensions\n });\n } catch (error) {\n console.error('Failed to track metric:', error);\n }\n }\n\n getBreadcrumbs(): any[] {\n if (!this.checkRUMAvailable()) {\n return [];\n }\n\n try {\n return this.adapter.getBreadcrumbs();\n } catch (error) {\n console.error('Failed to get breadcrumbs:', error);\n return [];\n }\n }\n\n enable(): void {\n this.isEnabled = true;\n if (mitoConfig.debug) {\n console.log('RUM system enabled');\n }\n }\n\n disable(): void {\n this.isEnabled = false;\n if (mitoConfig.debug) {\n console.log('RUM system disabled');\n }\n }\n\n private checkRUMAvailable(): boolean {\n return this.isEnabled && this.isInitialized && !!this.adapter;\n }\n\n getConfig(): Record<string, any> {\n return {\n isInitialized: this.isInitialized,\n isEnabled: this.isEnabled,\n environment: mitoConfig.environment,\n debug: mitoConfig.debug,\n sls: {\n enabled: slsConfig.enabled,\n configured: true,\n project: slsConfig.project,\n logstore: slsConfig.logstore\n }\n };\n }\n\n destroy(): void {\n try {\n if (this.adapter) {\n this.adapter.destroy();\n this.adapter = null;\n }\n\n this.isInitialized = false;\n this.context = {} as RUMManagerContext;\n if (mitoConfig.debug) {\n console.log('RUM system destroyed');\n }\n } catch (error) {\n console.error('Failed to destroy RUM system:', error);\n }\n }\n}\n","import type { App } from 'vue';\nimport * as Vue from 'vue';\nimport type { MitoSLSAdapterOptions } from '../core/MitoSLSAdapter';\nimport { RUMManagerVue3 } from './RUMManager.vue3';\n\nexport interface RUMVue3PluginOptions {\n store?: any;\n router?: any;\n coreOptions?: Partial<MitoSLSAdapterOptions>;\n}\n\nexport function createRUMPluginVue3(options: RUMVue3PluginOptions) {\n const manager = new RUMManagerVue3();\n\n return {\n install(app: App) {\n manager.init(\n { store: options.store, router: options.router },\n options.coreOptions || {}\n );\n\n (app.config.globalProperties as any).$rum = {\n trackEvent: manager.trackEvent.bind(manager),\n trackPerformance: manager.trackPerformance.bind(manager),\n trackAction: manager.trackAction.bind(manager),\n trackMetric: manager.trackMetric.bind(manager),\n getBreadcrumbs: manager.getBreadcrumbs.bind(manager),\n enable: manager.enable.bind(manager),\n disable: manager.disable.bind(manager),\n getConfig: manager.getConfig.bind(manager)\n };\n\n app.provide('rum', manager);\n }\n };\n}\n\nexport function useRUM(): RUMManagerVue3 | undefined {\n return Vue.inject<RUMManagerVue3>('rum');\n}\n","import type { TransformContext } from '../core/config';\nimport type { MitoSLSAdapterOptions } from '../core/MitoSLSAdapter';\nimport { RUMManagerVue2 } from '../vue2/RUMManager.vue2';\n\nexport interface RUMManagerContextVue3 extends TransformContext {}\n\nexport class RUMManagerVue3 {\n private inner = new RUMManagerVue2();\n\n init(\n context: RUMManagerContextVue3,\n options: Partial<MitoSLSAdapterOptions> = {}\n ): Promise<void> {\n return this.inner.init(context as any, options);\n }\n\n trackEvent(eventName: string, eventData: Record<string, any> = {}): void {\n this.inner.trackEvent(eventName, eventData);\n }\n\n trackPerformance(performanceData: Record<string, any>): void {\n this.inner.trackPerformance(performanceData);\n }\n\n trackAction(action: string, actionData: Record<string, any> = {}): void {\n this.inner.trackAction(action, actionData);\n }\n\n trackMetric(\n metricName: string,\n value: number,\n dimensions: Record<string, any> = {}\n ): void {\n this.inner.trackMetric(metricName, value, dimensions);\n }\n\n getBreadcrumbs(): any[] {\n return this.inner.getBreadcrumbs();\n }\n\n enable(): void {\n this.inner.enable();\n }\n\n disable(): void {\n this.inner.disable();\n }\n\n getConfig(): Record<string, any> {\n return this.inner.getConfig();\n }\n\n destroy(): void {\n this.inner.destroy();\n }\n}\n"],"mappings":"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","names":["getEnv","SlsTracker","Vue"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/env.ts","../src/core/config.ts","../src/core/MitoSLSAdapter.ts","../src/transport/SLSWebTrackingAdapter.ts","../src/vue2/plugin.vue2.ts","../src/vue2/RUMManager.vue2.ts","../src/vue3/plugin.vue3.ts","../src/vue3/RUMManager.vue3.ts"],"sourcesContent":["export interface RUMEnv {\n [key: string]: string | undefined;\n}\n\nexport const getRUMEnv = (): RUMEnv => {\n if (typeof window !== 'undefined' && (window as any).VUE_APP_ENV) {\n return (window as any).VUE_APP_ENV as RUMEnv;\n }\n\n if (typeof process !== 'undefined' && (process as any).env) {\n return (process as any).env as RUMEnv;\n }\n\n return {};\n};\n\nexport const RUM_ENV: RUMEnv = getRUMEnv();\n","import type { RUMEnv } from './env';\nimport { getRUMEnv } from './env';\n\nconst getEnv = (key: string, defaultValue = ''): string => {\n const env: RUMEnv = getRUMEnv();\n if (env && Object.prototype.hasOwnProperty.call(env, key)) {\n return (env as any)[key] || defaultValue;\n }\n return defaultValue;\n};\n\nconst isProduction = getEnv('NODE_ENV') === 'production';\nconst isDebugEnabled = getEnv('VUE_APP_RUM_DEBUG', 'false') === 'true';\n\nconst getSessionId = (): string => {\n if (typeof sessionStorage === 'undefined') {\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n let sessionId = sessionStorage.getItem('rum_session_id');\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n sessionStorage.setItem('rum_session_id', sessionId);\n }\n return sessionId;\n};\n\nconst getMetricType = (data: any): string => {\n switch (data.type) {\n case 'performance':\n return 'duration';\n case 'xhr':\n return 'xhr';\n case 'fetch':\n return 'fetch';\n case 'click':\n return 'click';\n case 'route':\n return 'route';\n case 'error':\n return 'error';\n default:\n return 'unknown';\n }\n};\n\nconst extractValue = (data: any): number => {\n switch (data.type) {\n case 'performance':\n return data.duration || 0;\n case 'xhr':\n case 'fetch':\n return data.duration || data.status || 0;\n case 'click':\n case 'error':\n return 1;\n default:\n return 1;\n }\n};\n\nexport interface SlsConfig {\n host: string;\n project: string;\n logstore: string;\n time: number;\n count: number;\n topic: string;\n source: string;\n enabled: boolean;\n debug: boolean;\n appName: string;\n appVersion: string;\n retryCount: number;\n retryInterval: number;\n}\n\nexport const slsConfig: SlsConfig = {\n host: getEnv('VUE_APP_SLS_HOST'),\n project: getEnv('VUE_APP_SLS_PROJECT'),\n logstore: getEnv('VUE_APP_SLS_LOGSTORE'),\n time: 10,\n count: 10,\n topic: 'rum-monitor',\n source: 'web',\n enabled: getEnv('VUE_APP_SLS_ENABLED', 'false') === 'true',\n debug: isDebugEnabled,\n appName: getEnv('VUE_APP_RUM_APP_NAME', 'rum-app'),\n appVersion: getEnv('PACKAGE_VERSION', '1.0.0'),\n retryCount: 3,\n retryInterval: 2000\n};\n\nif (typeof console !== 'undefined' && isDebugEnabled) {\n console.log('🔧 SLS Config:', {\n enabled: slsConfig.enabled,\n debug: slsConfig.debug,\n host: slsConfig.host,\n project: slsConfig.project,\n logstore: slsConfig.logstore,\n envCheck: {\n VUE_APP_SLS_ENABLED: getEnv('VUE_APP_SLS_ENABLED'),\n VUE_APP_RUM_DEBUG: getEnv('VUE_APP_RUM_DEBUG')\n }\n });\n}\n\nexport interface MitoSampleRateConfig {\n error: number;\n click: number;\n route: number;\n custom: number;\n xhr: number;\n}\n\nexport interface MitoConfig {\n dsn: string | null;\n appName: string;\n appVersion: string;\n environment: string;\n debug: boolean;\n maxBreadcrumbs: number;\n sampleRate: MitoSampleRateConfig;\n vue: {\n Vue?: any;\n lifecycle: boolean;\n performance: boolean;\n };\n network: {\n xhr: boolean;\n fetch: boolean;\n ignoreUrls: (string | RegExp)[];\n responseSizeLimit: number;\n };\n error: {\n javascript: boolean;\n promise: boolean;\n resource: boolean;\n ignoreErrors: (string | RegExp)[];\n };\n user: {\n click: boolean;\n route: boolean;\n performance: boolean;\n sensitiveSelectors: string[];\n };\n breadcrumb: {\n console: boolean;\n dom: boolean;\n navigation: boolean;\n customTypes: string[];\n };\n transport: {\n type: 'xhr' | 'fetch' | 'image';\n batch: {\n size: number;\n interval: number;\n immediateOnError: boolean;\n };\n retry: {\n times: number;\n interval: number;\n };\n };\n}\n\nexport const mitoConfig: MitoConfig = {\n dsn: getEnv('VUE_APP_RUM_DSN', '') || null,\n appName: 'live-admin-v3',\n appVersion: getEnv('PACKAGE_VERSION', '1.0.0'),\n environment: getEnv('NODE_ENV', 'development'),\n debug: isDebugEnabled,\n maxBreadcrumbs: 20,\n sampleRate: {\n error: 1.0,\n click: isProduction ? 0.1 : 1.0,\n route: 1.0,\n custom: 1.0,\n xhr: isProduction ? 0.5 : 1.0\n },\n vue: {\n Vue: undefined,\n lifecycle: true,\n performance: true\n },\n network: {\n xhr: true,\n fetch: true,\n ignoreUrls: [/sls\\.aliyuncs\\.com/, /file:\\/\\//],\n responseSizeLimit: 500\n },\n error: {\n javascript: true,\n promise: true,\n resource: true,\n ignoreErrors: [/third-party/, /Network timeout/]\n },\n user: {\n click: true,\n route: true,\n performance: true,\n sensitiveSelectors: [\n 'input[type=\"password\"]',\n 'input[name*=\"password\"]',\n 'input[name*=\"token\"]',\n 'textarea[name*=\"secret\"]'\n ]\n },\n breadcrumb: {\n console: isDebugEnabled,\n dom: true,\n navigation: true,\n customTypes: ['vue', 'vuex', 'axios']\n },\n transport: {\n type: 'xhr',\n batch: {\n size: 10,\n interval: 5000,\n immediateOnError: true\n },\n retry: {\n times: 3,\n interval: 2000\n }\n }\n};\n\nexport interface TransformContext {\n store?: any;\n router?: any;\n}\n\nexport const getUserInfo = (store?: any): any => {\n try {\n if (!store || !store.state) {\n return {};\n }\n\n const userModule = store.state.user || {};\n const userInfo = userModule.userInfo || userModule || {};\n const getters = store.getters || {};\n\n return {\n userId: userInfo.userId || userInfo.id || getters['user/userId'],\n userName: userInfo.userName || userInfo.contact || userInfo.name,\n accountId: userInfo.accountId,\n email: userInfo.email,\n roles: userInfo.roles || [],\n permissions: getters['user/permissions'] || userInfo.permissions || []\n };\n } catch (error) {\n console.warn('Failed to get user info from store:', error);\n return {};\n }\n};\n\nexport const transformDataForSLS = (data: any, context: TransformContext = {}): any => {\n const timestamp = new Date().toISOString();\n const userInfo = getUserInfo(context.store);\n\n const dimensions: Record<string, any> = {\n pageTitle: typeof document !== 'undefined' ? document.title : '',\n path: typeof window !== 'undefined' ? window.location.pathname : '',\n search: typeof window !== 'undefined' ? window.location.search : '',\n hash: typeof window !== 'undefined' ? window.location.hash : '',\n ...(userInfo && {\n userId: userInfo.userId,\n userName: userInfo.userName,\n accountId: userInfo.accountId,\n userEmail: userInfo.email,\n userRoles: (userInfo.roles || []).join(','),\n userPermissions: (userInfo.permissions || []).join(',')\n }),\n ...data.customData\n };\n\n if (data.type === 'click') {\n const target = data.target || {};\n const page = data.page || {};\n\n dimensions.clickBizId = data.bizId;\n dimensions.clickTargetTag = target.tagName;\n dimensions.clickTargetId = target.id;\n dimensions.clickTargetClass = target.className;\n dimensions.clickTargetSelector = target.selector;\n dimensions.clickTargetText = target.textContent;\n\n dimensions.clickPageUrl = page.url;\n dimensions.clickPagePath = page.path;\n dimensions.clickPageTitle = page.title;\n\n dimensions.clickX = data.x;\n dimensions.clickY = data.y;\n }\n\n return {\n __time__: Math.floor(Date.now() / 1000),\n __source__: 'live-admin-v3',\n timestamp,\n environment: mitoConfig.environment,\n sessionId: getSessionId(),\n user: userInfo,\n dataType: data.type || 'unknown',\n metricType: getMetricType(data),\n value: extractValue(data),\n event: {\n type: data.type,\n url:\n typeof window !== 'undefined' && window.location\n ? window.location.href\n : '',\n userAgent:\n typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n referrer:\n typeof document !== 'undefined' ? document.referrer : undefined\n },\n techStack: {\n vue: (context as any).Vue?.version || 'unknown',\n platform:\n typeof navigator !== 'undefined' ? navigator.platform : 'unknown',\n language:\n typeof navigator !== 'undefined' ? navigator.language : 'unknown'\n },\n rawData: isDebugEnabled ? data : undefined,\n dimensions\n };\n};\n\nexport const shouldReport = (data: any): boolean => {\n const dataType = data.type as keyof MitoSampleRateConfig;\n const sampleRate = (mitoConfig.sampleRate as any)[dataType] || 0;\n\n if (sampleRate === 0) return false;\n if (sampleRate === 1) return true;\n\n return Math.random() < sampleRate;\n};\n","import * as Mito from '@mitojs/browser';\nimport {\n mitoConfig,\n slsConfig,\n transformDataForSLS,\n shouldReport,\n type MitoConfig,\n type TransformContext\n} from './config';\nimport {\n SLSWebTrackingAdapter,\n type SLSAdapterConfig\n} from '../transport/SLSWebTrackingAdapter';\n\nexport interface MitoSLSAdapterOptions extends MitoConfig {\n slsConfigOverride?: Partial<SLSAdapterConfig>;\n}\n\nexport class MitoSLSAdapter {\n private options: MitoSLSAdapterOptions;\n private mitoInstance: any = null;\n private slsAdapter: SLSWebTrackingAdapter | null = null;\n private store: any = null;\n private router: any = null;\n private isInitialized = false;\n\n constructor(options: Partial<MitoSLSAdapterOptions> = {}) {\n this.options = {\n ...mitoConfig,\n ...options\n } as MitoSLSAdapterOptions;\n\n this.handleDataReport = this.handleDataReport.bind(this);\n this.handleRouteChange = this.handleRouteChange.bind(this);\n this.handleError = this.handleError.bind(this);\n this.addBreadcrumb = this.addBreadcrumb.bind(this);\n }\n\n addBreadcrumb(payload: any): void {\n if (!this.mitoInstance || !this.mitoInstance.breadcrumb) {\n return;\n }\n\n const breadcrumb = this.mitoInstance.breadcrumb;\n\n if (typeof breadcrumb.add === 'function') {\n breadcrumb.add(payload);\n return;\n }\n\n if (typeof breadcrumb.push === 'function') {\n breadcrumb.push(payload);\n }\n }\n\n async init(context: TransformContext & { Vue?: any } = {}): Promise<void> {\n if (this.isInitialized) {\n console.warn('MitoSLSAdapter already initialized');\n return;\n }\n\n this.store = context.store;\n this.router = context.router;\n\n if (!this.options.dsn) {\n console.warn(\n 'MitoSLSAdapter: DSN not configured, RUM system will run in simulation mode'\n );\n }\n\n try {\n const slsConfigOverride = this.options.slsConfigOverride || {};\n this.slsAdapter = new SLSWebTrackingAdapter({\n ...slsConfig,\n ...slsConfigOverride\n });\n await this.slsAdapter.init();\n\n this.mitoInstance = Mito.init({\n dsn: this.options.dsn || undefined,\n debug: this.options.debug,\n maxBreadcrumbs: this.options.maxBreadcrumbs,\n Vue: context.Vue || this.options.vue?.Vue,\n framework: {\n vue: true\n },\n beforeDataReport: this.handleDataReport,\n silent: !this.options.debug,\n silentConsole: !this.options.debug,\n enableUrlHash: true,\n enableUserAgent: true,\n enableHistory: true,\n performance: {\n enable: this.options.user.performance,\n sampleRate: (this.options.sampleRate as any).performance || 1.0\n },\n user: {\n enableClickTrack: this.options.user.click,\n clickTrackSampleRate: (this.options.sampleRate as any).click,\n ignoreSelector: this.options.user.sensitiveSelectors.join(', ')\n },\n api: {\n enableApiMonitor: this.options.network.xhr,\n apiMonitorSampleRate: (this.options.sampleRate as any).xhr,\n ignoreUrls: this.options.network.ignoreUrls,\n requestSizeLimit: this.options.network.responseSizeLimit * 1024\n }\n } as any);\n\n this.setupVueIntegration();\n this.setupRouterIntegration();\n this.setupErrorHandling();\n\n this.isInitialized = true;\n if (this.options.debug) {\n console.log('MitoSLSAdapter initialized successfully');\n }\n } catch (error) {\n console.error('Failed to initialize MitoSLSAdapter:', error);\n this.handleError(error);\n }\n }\n\n private setupVueIntegration(): void {\n if (!this.store) {\n console.warn('Vuex store not provided, some features may be limited');\n return;\n }\n\n this.store.subscribe((mutation: any) => {\n try {\n if (this.shouldTrackMutation(mutation)) {\n this.addBreadcrumb({\n type: 'vuex',\n message: `Vuex: ${mutation.type}`,\n category: 'vuex',\n data: {\n mutation: mutation.type,\n payload: mutation.payload\n }\n });\n }\n } catch (error) {\n console.warn('Failed to track Vuex mutation:', error);\n }\n });\n\n if (this.options.debug) {\n console.log('Vue integration configured');\n }\n }\n\n private setupRouterIntegration(): void {\n if (!this.router) {\n console.warn('Vue router not provided, route tracking disabled');\n return;\n }\n\n this.router.afterEach((to: any, from: any) => {\n try {\n this.handleRouteChange(to, from);\n } catch (error) {\n console.warn('Failed to handle route change:', error);\n }\n });\n\n if (this.options.debug) {\n console.log('Router integration configured');\n }\n }\n\n private setupErrorHandling(): void {\n if (this.options.debug) {\n console.log('Error handling configured');\n }\n }\n\n handleDataReport(data: any): boolean | void {\n try {\n if (this.options.debug) {\n console.log('🔍 MitoJS Data Report:', {\n type: data.type,\n timestamp: data.t || Date.now(),\n data\n });\n }\n\n if (!shouldReport(data)) {\n if (this.options.debug) {\n console.log('⏭️ Data filtered by sampling rate:', data.type);\n }\n return false;\n }\n\n const slsData = transformDataForSLS(data, {\n store: this.store,\n router: this.router\n });\n\n this.sendToSLS(slsData);\n\n return false;\n } catch (error) {\n console.error('Failed to handle data report:', error);\n return false;\n }\n }\n\n handleRouteChange(to: any, from: any): void {\n try {\n const routeData = {\n type: 'route',\n from: {\n path: from.fullPath,\n name: from.name,\n params: from.params,\n query: from.query\n },\n to: {\n path: to.fullPath,\n name: to.name,\n params: to.params,\n query: to.query\n },\n timestamp: Date.now()\n };\n\n this.addBreadcrumb({\n type: 'route',\n message: `Route: ${from.fullPath} -> ${to.fullPath}`,\n category: 'navigation',\n data: routeData\n });\n\n if (shouldReport(routeData)) {\n const slsData = transformDataForSLS(routeData, {\n store: this.store,\n router: this.router\n });\n this.sendToSLS(slsData);\n }\n } catch (error) {\n console.error('Failed to handle route change:', error);\n }\n }\n\n handleError(error: any): void {\n try {\n const errorData = {\n type: 'error',\n message: error?.message || 'Unknown error',\n stack: error?.stack,\n name: error?.name,\n timestamp: Date.now()\n };\n\n this.addBreadcrumb({\n type: 'error',\n message: errorData.message,\n category: 'error',\n data: errorData\n });\n\n if (shouldReport(errorData)) {\n const slsData = transformDataForSLS(errorData, {\n store: this.store,\n router: this.router\n });\n this.sendToSLS(slsData);\n }\n } catch (e) {\n console.error('Failed to handle error:', e);\n }\n }\n\n async sendToSLS(data: any): Promise<void> {\n try {\n if (!this.slsAdapter) {\n if (this.options.debug) {\n console.log('📝 RUM Data [SIMULATION MODE]:', data);\n }\n return;\n }\n\n const slsLogData = this.transformDataForSLSLog(data);\n if (this.options.debug) {\n console.log('🔧 Transformed SLS Log Data:', slsLogData);\n }\n\n await this.slsAdapter.sendLog(slsLogData);\n\n if (this.options.debug) {\n console.log('✅ RUM Data sent to SLS successfully');\n }\n } catch (error) {\n console.error('❌ Failed to send data to SLS:', error);\n\n if (this.options.debug) {\n console.log('🔄 RUM Data [FALLBACK MODE]:', data);\n }\n }\n }\n\n transformDataForSLSLog(data: any): any {\n return {\n eventType: data.dataType || data.event?.type || 'unknown',\n category: this.getEventCategory(data.dataType),\n level: this.getEventLevel(data.dataType),\n ...data.event,\n ...data.dimensions,\n ...data.rawData\n };\n }\n\n getEventCategory(dataType: string): string {\n switch (dataType) {\n case 'error':\n return 'error';\n case 'performance':\n return 'performance';\n case 'click':\n case 'route':\n return 'user';\n case 'xhr':\n return 'general';\n default:\n return 'general';\n }\n }\n\n getEventLevel(dataType: string): string {\n switch (dataType) {\n case 'error':\n return 'error';\n case 'xhr':\n return 'warn';\n default:\n return 'info';\n }\n }\n\n getUserInfoFromStore(): any {\n try {\n const user = this.store?.state?.user || {};\n return {\n userId: user.userId || user.id,\n userName: user.userName || user.name,\n accountId: user.accountId\n };\n } catch (error) {\n console.warn('Failed to get user info from store:', error);\n return {};\n }\n }\n\n shouldTrackMutation(mutation: any): boolean {\n const ignoredMutations = ['SET_LOADING', 'SET_CURRENT_PAGE', 'UPDATE_MOUSE_POSITION'];\n return !ignoredMutations.includes(mutation.type);\n }\n\n trackEvent(eventData: Record<string, any>): void {\n try {\n const customData = {\n type: 'custom',\n timestamp: Date.now(),\n ...eventData\n };\n\n this.addBreadcrumb({\n type: 'custom',\n message: `Custom Event: ${eventData.name || 'unknown'}`,\n category: 'custom',\n data: customData\n });\n\n if (shouldReport(customData)) {\n const slsData = transformDataForSLS(customData, {\n store: this.store,\n router: this.router\n });\n this.sendToSLS(slsData);\n }\n } catch (error) {\n console.error('Failed to track custom event:', error);\n }\n }\n\n setUser(userInfo: {\n userId?: string;\n userName?: string;\n email?: string;\n accountId?: string;\n roles?: string[];\n }): void {\n try {\n if (this.mitoInstance && this.mitoInstance.setUser) {\n this.mitoInstance.setUser({\n id: userInfo.userId,\n username: userInfo.userName,\n email: userInfo.email\n });\n }\n\n if (this.slsAdapter && userInfo.userId) {\n this.slsAdapter.setUserId(userInfo.userId);\n }\n } catch (error) {\n console.error('Failed to set user info:', error);\n }\n }\n\n getBreadcrumbs(): any[] {\n try {\n return this.mitoInstance?.getBreadcrumbs?.() || [];\n } catch (error) {\n console.error('Failed to get breadcrumbs:', error);\n return [];\n }\n }\n\n destroy(): void {\n try {\n if (typeof window !== 'undefined') {\n window.removeEventListener('error', this.handleError as any);\n window.removeEventListener(\n 'unhandledrejection',\n this.handleError as any\n );\n }\n\n if (this.mitoInstance && this.mitoInstance.destroy) {\n this.mitoInstance.destroy();\n }\n\n if (this.slsAdapter) {\n this.slsAdapter.destroy();\n }\n\n this.isInitialized = false;\n if (this.options.debug) {\n console.log('MitoSLSAdapter destroyed');\n }\n } catch (error) {\n console.error('Failed to destroy MitoSLSAdapter:', error);\n }\n }\n}\n\nlet instance: MitoSLSAdapter | null = null;\n\nexport const getMitoAdapter = (\n options: Partial<MitoSLSAdapterOptions> = {}\n): MitoSLSAdapter => {\n if (!instance) {\n instance = new MitoSLSAdapter(options);\n }\n return instance;\n};\n\nexport const initRUMCore = async (\n context: TransformContext & { Vue?: any },\n options: Partial<MitoSLSAdapterOptions> = {}\n): Promise<MitoSLSAdapter> => {\n const adapter = getMitoAdapter(options);\n await adapter.init(context);\n return adapter;\n};\n\nexport const getRUMCoreInstance = (): MitoSLSAdapter | null => instance;\n","import SlsTracker from '@aliyun-sls/web-track-browser/dist/web-track-browser.es.js';\nimport { getRUMEnv } from '../core/env';\n\nconst getEnv = (key: string, defaultValue = ''): string => {\n const env = getRUMEnv();\n if (env && Object.prototype.hasOwnProperty.call(env, key)) {\n return (env as any)[key] || defaultValue;\n }\n return defaultValue;\n};\n\nexport interface SLSAdapterConfig {\n host?: string;\n project?: string;\n logstore?: string;\n time?: number;\n count?: number;\n topic?: string;\n source?: string;\n environment?: string;\n debug?: boolean;\n enabled?: boolean;\n userId?: string | null;\n sessionId?: string;\n appName?: string;\n appVersion?: string;\n retryCount?: number;\n retryInterval?: number;\n}\n\nexport class SLSWebTrackingAdapter {\n private config: Required<SLSAdapterConfig>;\n private slsTracker: any = null;\n private isInitialized = false;\n private isDestroyed = false;\n private pendingLogs: any[] = [];\n private retryQueue: Array<{\n data: any;\n error: Error;\n timestamp: number;\n retryCount: number;\n }> = [];\n\n constructor(config: SLSAdapterConfig = {}) {\n this.config = {\n host:\n config.host || getEnv('VUE_APP_SLS_HOST') || '',\n project:\n config.project || getEnv('VUE_APP_SLS_PROJECT') || '',\n logstore:\n config.logstore || getEnv('VUE_APP_SLS_LOGSTORE') || '',\n time: config.time ?? 10,\n count: config.count ?? 10,\n topic: config.topic || 'rum-monitor',\n source: config.source || 'web',\n environment: config.environment || getEnv('NODE_ENV', 'development'),\n debug: config.debug ?? (getEnv('VUE_APP_RUM_DEBUG', 'false') === 'true'),\n enabled: config.enabled ?? true,\n userId: config.userId ?? null,\n sessionId: config.sessionId || this.generateSessionId(),\n appName:\n config.appName || getEnv('VUE_APP_RUM_APP_NAME', 'rum-app'),\n appVersion: config.appVersion || getEnv('PACKAGE_VERSION', '1.0.0'),\n retryCount: config.retryCount ?? 3,\n retryInterval: config.retryInterval ?? 2000\n };\n\n this.handleBeforeSend = this.handleBeforeSend.bind(this);\n this.handleError = this.handleError.bind(this);\n }\n\n async init(): Promise<void> {\n if (this.isInitialized) {\n console.warn('SLSWebTrackingAdapter already initialized');\n return;\n }\n\n if (this.isDestroyed) {\n throw new Error(\n 'SLSWebTrackingAdapter has been destroyed, cannot reinitialize'\n );\n }\n\n if (!this.config.enabled) {\n if (this.config.debug) {\n console.log('SLSWebTrackingAdapter is disabled');\n }\n return;\n }\n\n if (this.config.debug) {\n console.log('🚀 Initializing SLSWebTrackingAdapter...', {\n config: this.config,\n SlsTracker: typeof SlsTracker\n });\n }\n\n try {\n this.slsTracker = new (SlsTracker as any)({\n host: this.config.host,\n project: this.config.project,\n logstore: this.config.logstore,\n time: this.config.time,\n count: this.config.count,\n topic: this.config.topic,\n source: this.config.source,\n autoPopulateFields: false,\n beforeSend: this.handleBeforeSend\n });\n\n this.isInitialized = true;\n\n if (this.config.debug) {\n console.log('✅ SLSWebTrackingAdapter initialized successfully', {\n project: this.config.project,\n logstore: this.config.logstore,\n host: this.config.host,\n trackerInstance: !!this.slsTracker\n });\n }\n\n await this.sendLog({\n type: 'system',\n category: 'init',\n message: 'SLS WebTracking adapter initialized successfully',\n level: 'info',\n timestamp: Date.now()\n });\n } catch (error: any) {\n console.error('❌ Failed to initialize SLSWebTrackingAdapter:', error);\n this.handleError(error);\n throw error;\n }\n }\n\n async sendLog(data: Record<string, any>): Promise<void> {\n if (this.config.debug) {\n console.log('📤 Sending log to SLS...', {\n originalData: data,\n isReady: this.checkReady(),\n hasTracker: !!this.slsTracker,\n isInitialized: this.isInitialized\n });\n }\n\n if (!this.checkReady()) {\n if (this.config.debug) {\n console.log('❌ SLS adapter not ready, skipping log send');\n }\n return;\n }\n\n try {\n const logData = await this.transformLogData(data);\n\n if (this.config.debug) {\n console.log('🔧 Transformed SLS Log Data:', logData);\n }\n\n await this.slsTracker.send(logData);\n\n if (this.config.debug) {\n console.log('✅ Log sent to SLS successfully');\n }\n } catch (error: any) {\n console.error('❌ Failed to send log to SLS:', error);\n await this.handleSendError(data, error);\n }\n }\n\n async sendBatchLogs(logs: Record<string, any>[]): Promise<void> {\n if (!this.checkReady()) {\n return;\n }\n\n if (!Array.isArray(logs) || logs.length === 0) {\n return;\n }\n\n try {\n const transformedLogs = await Promise.all(\n logs.map((log) => this.transformLogData(log))\n );\n\n for (const logData of transformedLogs) {\n await this.slsTracker.send(logData);\n }\n\n if (this.config.debug) {\n console.log(\n `Batch sent ${transformedLogs.length} logs to SLS successfully`\n );\n }\n } catch (error) {\n console.error('Failed to send batch logs to SLS:', error);\n\n for (const log of logs) {\n await this.handleSendError(log, error as any);\n }\n }\n }\n\n async transformLogData(data: Record<string, any>): Promise<Record<string, any>> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const logData: Record<string, any> = {\n __time__: timestamp,\n __source__: this.config.source,\n\n // 基础信息\n event_type: data.eventType || data.type || 'unknown',\n category: data.category || 'general',\n level: data.level || 'info',\n client_timestamp: Date.now(),\n\n // 应用信息\n app_name: this.config.appName,\n // app_version: this.config.appVersion,\n environment: this.config.environment,\n\n // 会话信息\n session_id: this.config.sessionId,\n\n // 页面信息\n page_url:\n typeof window !== 'undefined' && window.location\n ? window.location.href\n : '',\n page_title:\n typeof document !== 'undefined' ? document.title : undefined,\n page_path:\n typeof window !== 'undefined' && window.location\n ? window.location.pathname\n : '',\n\n // 用户代理信息\n user_agent:\n typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n language:\n typeof navigator !== 'undefined' ? navigator.language : undefined\n };\n\n // 用户标识,优先使用上游数据\n if (this.config.userId) {\n logData.user_id = this.config.userId;\n }\n if (data.userId) {\n logData.user_id = data.userId;\n }\n if (data.userName) {\n logData.user_name = data.userName;\n }\n\n let isInternalUser = false;\n if (data.userEmail && typeof data.userEmail === 'string') {\n const emailParts = data.userEmail.split('@');\n if (emailParts.length === 2) {\n const domain = emailParts[1].toLowerCase();\n const internalDomains = getEnv(\n 'VUE_APP_RUM_INTERNAL_EMAIL_DOMAINS',\n 'polyv.net,polyv.com'\n )\n .split(',')\n .map((item) => item.trim().toLowerCase())\n .filter(Boolean);\n if (internalDomains.length > 0 && domain) {\n isInternalUser = internalDomains.some((internalDomain) => {\n if (!internalDomain) return false;\n return (\n domain === internalDomain ||\n domain.endsWith(`.${internalDomain}`)\n );\n });\n }\n }\n }\n\n logData.is_internal_user = isInternalUser;\n\n // 根据事件类型添加特定字段\n if (logData.event_type === 'error') {\n this.addErrorFields(logData, data);\n } else if (\n logData.event_type === 'xhr' ||\n logData.event_type === 'fetch'\n ) {\n this.addApiFields(logData, data);\n } else if (logData.event_type === 'click') {\n this.addClickFields(logData, data);\n }\n\n // 添加 detail_json,仅保留 hash 信息\n try {\n let hash = '';\n if (data && typeof data.hash === 'string') {\n hash = data.hash;\n } else if (\n data &&\n data.dimensions &&\n typeof data.dimensions.hash === 'string'\n ) {\n hash = data.dimensions.hash;\n } else if (\n typeof window !== 'undefined' &&\n typeof window.location !== 'undefined'\n ) {\n hash = window.location.hash || '';\n }\n\n logData.detail_json = JSON.stringify({ hash });\n } catch (error) {\n console.warn('Failed to serialize detail data:', error);\n logData.detail_json = JSON.stringify({\n error: 'Failed to serialize data'\n });\n }\n\n return logData;\n }\n\n private addErrorFields(\n logData: Record<string, any>,\n data: Record<string, any>\n ): void {\n if (data.message) {\n logData.error_message = String(data.message);\n }\n\n if (data.stack) {\n logData.error_stack = String(data.stack);\n }\n\n if (data.filename) {\n logData.error_filename = data.filename;\n }\n\n if (data.lineno) {\n logData.error_lineno = String(data.lineno);\n }\n\n if (data.colno) {\n logData.error_colno = String(data.colno);\n }\n\n if (data.name) {\n logData.error_name = data.name;\n }\n }\n\n private addApiFields(\n logData: Record<string, any>,\n data: Record<string, any>\n ): void {\n if (data.url) {\n logData.api_url = data.url;\n }\n\n if (data.method) {\n logData.api_method = data.method;\n }\n\n if (data.status !== undefined) {\n logData.api_status = Number(data.status);\n }\n\n if (data.duration !== undefined) {\n logData.api_duration = Number(data.duration);\n }\n\n if (data.responseSize !== undefined) {\n logData.api_response_size = Number(data.responseSize);\n }\n }\n\n private addClickFields(\n logData: Record<string, any>,\n data: Record<string, any>\n ): void {\n if (data.clickBizId || data.bizId) {\n logData.click_biz_id = data.clickBizId || data.bizId;\n }\n\n if (data.target) {\n logData.click_target = data.target;\n }\n\n if (data.selector) {\n logData.click_selector = data.selector;\n }\n\n if (data.text) {\n logData.click_text = data.text;\n }\n\n if (data.x !== undefined) {\n logData.click_x = Number(data.x);\n }\n\n if (data.y !== undefined) {\n logData.click_y = Number(data.y);\n }\n }\n\n private filterSensitiveData(data: Record<string, any>): Record<string, any> {\n const sensitivePatterns = [\n /password/i,\n /token/i,\n /secret/i,\n /key/i,\n /auth/i,\n /credential/i\n ];\n\n const filtered: Record<string, any> = { ...data };\n\n Object.keys(filtered).forEach((key) => {\n const value = filtered[key];\n if (typeof value === 'string') {\n if (sensitivePatterns.some((pattern) => pattern.test(key))) {\n filtered[key] = '[FILTERED]';\n }\n\n if (filtered[key].length > 500) {\n filtered[key] = `${filtered[key].substring(0, 500)}...`;\n }\n }\n });\n\n return filtered;\n }\n\n private async handleSendError(data: any, error: Error): Promise<void> {\n const retryItem = {\n data,\n error,\n timestamp: Date.now(),\n retryCount: 0\n };\n\n this.retryQueue.push(retryItem);\n\n if (this.shouldRetry(error)) {\n setTimeout(() => {\n this.retryFailedLogs();\n }, this.config.retryInterval);\n }\n }\n\n private async retryFailedLogs(): Promise<void> {\n if (this.retryQueue.length === 0) {\n return;\n }\n\n const itemsToRetry = this.retryQueue.filter(\n (item) => item.retryCount < this.config.retryCount\n );\n\n this.retryQueue = this.retryQueue.filter(\n (item) => item.retryCount >= this.config.retryCount\n );\n\n for (const item of itemsToRetry) {\n try {\n item.retryCount++;\n await this.sendLog(item.data);\n\n const index = this.retryQueue.indexOf(item);\n if (index > -1) {\n this.retryQueue.splice(index, 1);\n }\n } catch (error) {\n console.warn(\n `Retry failed for log (attempt ${item.retryCount}):`,\n error\n );\n\n if (item.retryCount < this.config.retryCount) {\n setTimeout(() => {\n this.retryFailedLogs();\n }, this.config.retryInterval * item.retryCount);\n } else {\n console.error('Max retry attempts reached, dropping log:', item.data);\n }\n }\n }\n }\n\n private shouldRetry(error: Error): boolean {\n const retryableErrors = [\n 'Network timeout',\n 'Connection failed',\n 'Service unavailable',\n 'Rate limit exceeded'\n ];\n\n return retryableErrors.some(\n (pattern) => (error.message && error.message.includes(pattern))\n );\n }\n\n private handleError(error: Error): void {\n console.error('SLSWebTrackingAdapter Error:', error);\n }\n\n private checkReady(): boolean {\n if (!this.config.enabled) {\n return false;\n }\n\n if (!this.isInitialized) {\n console.warn('SLSWebTrackingAdapter not initialized');\n return false;\n }\n\n if (!this.slsTracker) {\n console.warn('SLS Tracker not available');\n return false;\n }\n\n return true;\n }\n\n private generateSessionId(): string {\n if (typeof sessionStorage !== 'undefined') {\n let sessionId = sessionStorage.getItem('sls_session_id');\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random()\n .toString(36)\n .substring(2, 9)}`;\n sessionStorage.setItem('sls_session_id', sessionId);\n }\n return sessionId;\n }\n\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n handleBeforeSend(logData: any): boolean | Record<string, any> {\n try {\n const dataSize = JSON.stringify(logData).length;\n const maxSize = 1024 * 1024; // 1MB\n\n if (dataSize > maxSize) {\n console.warn('Log data too large, skipping:', dataSize);\n return false;\n }\n\n const filteredData = this.filterSensitiveData(logData);\n\n if (this.config.debug) {\n console.log('Log before send:', filteredData);\n }\n\n return filteredData;\n } catch (error) {\n console.error('Error in beforeSend handler:', error);\n return false;\n }\n }\n\n setUserId(userId: string): void {\n this.config.userId = userId;\n }\n\n updateConfig(newConfig: Partial<SLSAdapterConfig>): void {\n this.config = { ...this.config, ...newConfig };\n }\n\n getConfig(): SLSAdapterConfig {\n return { ...this.config };\n }\n\n getStats(): {\n isInitialized: boolean;\n isDestroyed: boolean;\n pendingLogsCount: number;\n retryQueueCount: number;\n config: {\n project: string | undefined;\n logstore: string | undefined;\n enabled: boolean | undefined;\n };\n } {\n return {\n isInitialized: this.isInitialized,\n isDestroyed: this.isDestroyed,\n pendingLogsCount: this.pendingLogs.length,\n retryQueueCount: this.retryQueue.length,\n config: {\n project: this.config.project,\n logstore: this.config.logstore,\n enabled: this.config.enabled\n }\n };\n }\n\n destroy(): void {\n if (this.isDestroyed) {\n return;\n }\n\n try {\n if (this.retryQueue.length > 0 && this.config.debug) {\n console.warn(\n `Destroying adapter with ${this.retryQueue.length} items in retry queue`\n );\n }\n\n if (this.slsTracker && this.slsTracker.destroy) {\n this.slsTracker.destroy();\n }\n\n this.isDestroyed = true;\n this.isInitialized = false;\n this.slsTracker = null;\n this.pendingLogs = [];\n this.retryQueue = [];\n\n if (this.config.debug) {\n console.log('SLSWebTrackingAdapter destroyed');\n }\n } catch (error) {\n console.error('Error destroying SLSWebTrackingAdapter:', error);\n }\n }\n}\n","import {\n RUMManagerVue2,\n type RUMManagerContext\n} from './RUMManager.vue2';\nimport type { MitoSLSAdapterOptions } from '../core/MitoSLSAdapter';\n\nconst rumManagerVue2 = new RUMManagerVue2();\n\nexport const initRUMSystem = (\n context: RUMManagerContext,\n options: Partial<MitoSLSAdapterOptions> = {}\n) => rumManagerVue2.init(context, options);\n\nexport const trackEvent = (\n eventName: string,\n eventData?: Record<string, any>\n) => rumManagerVue2.trackEvent(eventName, eventData || {});\n\nexport const trackPerformance = (performanceData: Record<string, any>) =>\n rumManagerVue2.trackPerformance(performanceData);\n\nexport const trackAction = (\n action: string,\n actionData?: Record<string, any>\n) => rumManagerVue2.trackAction(action, actionData || {});\n\nexport const trackMetric = (\n metricName: string,\n value: number,\n dimensions?: Record<string, any>\n) => rumManagerVue2.trackMetric(metricName, value, dimensions || {});\n\nexport const getBreadcrumbs = () => rumManagerVue2.getBreadcrumbs();\n\nexport const enableRUM = () => rumManagerVue2.enable();\nexport const disableRUM = () => rumManagerVue2.disable();\nexport const getRUMConfig = () => rumManagerVue2.getConfig();\nexport const destroyRUM = () => rumManagerVue2.destroy();\nexport const getRUMManager = () => rumManagerVue2;\n\nexport const RUMPluginVue2 = {\n install(Vue: any) {\n Vue.prototype.$rum = {\n trackEvent,\n trackPerformance,\n trackAction,\n trackMetric,\n getBreadcrumbs,\n enable: enableRUM,\n disable: disableRUM,\n getConfig: getRUMConfig\n };\n\n (Vue as any).$rumManager = rumManagerVue2;\n }\n};\n","import { mitoConfig, slsConfig, type TransformContext } from '../core/config';\nimport { getRUMEnv } from '../core/env';\nimport {\n initRUMCore,\n type MitoSLSAdapterOptions\n} from '../core/MitoSLSAdapter';\n\nexport interface RUMManagerContext extends TransformContext {\n Vue?: any;\n}\n\nexport class RUMManagerVue2 {\n private adapter: any = null;\n private isInitialized = false;\n private isEnabled = true;\n private context: RUMManagerContext = {};\n\n async init(\n context: RUMManagerContext,\n options: Partial<MitoSLSAdapterOptions> = {}\n ): Promise<void> {\n try {\n if (!this.shouldEnableRUM()) {\n if (mitoConfig.debug) {\n console.log('RUM system is disabled');\n }\n return;\n }\n\n if (this.isInitialized) {\n if (mitoConfig.debug) {\n console.log('RUM system already initialized');\n }\n return;\n }\n\n this.context = {\n store: context.store,\n router: context.router,\n Vue: context.Vue,\n ...context\n };\n\n const mergedOptions: Partial<MitoSLSAdapterOptions> = {\n ...mitoConfig,\n ...options,\n vue: {\n ...(mitoConfig as any).vue,\n ...(options as any).vue\n }\n };\n\n this.adapter = await initRUMCore(\n {\n store: this.context.store,\n router: this.context.router,\n Vue: this.context.Vue\n },\n mergedOptions\n );\n\n this.setUserInfo();\n this.setupUserStateListener();\n this.setupUserInteractionTracking();\n\n this.trackInitialRoute();\n\n this.isInitialized = true;\n if (mitoConfig.debug) {\n console.log('RUM system initialized successfully');\n }\n } catch (error) {\n console.error('Failed to initialize RUM system:', error);\n }\n }\n\n private shouldEnableRUM(): boolean {\n if (!this.isEnabled) {\n return false;\n }\n\n const env = getRUMEnv();\n\n const rumEnabled = (env as any).VUE_APP_RUM_ENABLED;\n if (rumEnabled !== undefined) {\n return rumEnabled === 'true';\n }\n\n const mode = (env as any).MODE;\n const isProdEnv = mode === 'prod' || mode === 'production';\n\n return !isProdEnv;\n }\n\n private setUserInfo(): void {\n if (!this.context.store) {\n return;\n }\n\n try {\n const userModule = this.context.store.state.user || {};\n const user = userModule.userInfo || userModule || {};\n\n if (this.adapter && user.userId) {\n this.adapter.setUser({\n userId: user.userId,\n userName: user.userName,\n accountId: user.accountId,\n roles: user.roles,\n email: user.email\n });\n }\n } catch (error) {\n console.warn('Failed to set user info:', error);\n }\n }\n\n private setupUserStateListener(): void {\n if (!this.context.store) {\n return;\n }\n\n this.context.store.subscribe((mutation: any) => {\n if (mutation.type.includes('user')) {\n this.setUserInfo();\n }\n });\n }\n\n private setupUserInteractionTracking(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n document.addEventListener(\n 'click',\n (event: MouseEvent) => {\n try {\n const originalTarget = event.target as HTMLElement | null;\n\n const findClosest = (el: any, selector: string): HTMLElement | null =>\n el && typeof el.closest === 'function' ? el.closest(selector) : null;\n\n let target = findClosest(originalTarget, '[rum-id],[rum-name]');\n\n if (!target) {\n target = findClosest(\n originalTarget,\n 'button, a, [role=\"button\"], [role=\"link\"]'\n );\n }\n\n if (!target && originalTarget && window.getComputedStyle) {\n const style = window.getComputedStyle(originalTarget);\n if (style.cursor === 'pointer') {\n target = originalTarget;\n }\n }\n\n if (!target) {\n return;\n }\n\n const getAttr = (el: any, name: string): string | null =>\n el && typeof el.getAttribute === 'function'\n ? el.getAttribute(name)\n : null;\n\n let bizId =\n getAttr(target, 'rum-id') || getAttr(target, 'rum-name') || '';\n\n if (!bizId) {\n const tagName = target.tagName\n ? target.tagName.toLowerCase()\n : 'element';\n\n const classList = (target.className || '')\n .toString()\n .split(/\\s+/)\n .filter((c: string) => c.trim());\n const primaryClass = classList[0] || 'no-class';\n\n const getLabel = (el: any): string => {\n if (!el) return '';\n const text = (el.textContent || '').trim();\n if (text) return text;\n const ariaLabel = getAttr(el, 'aria-label');\n if (ariaLabel) return ariaLabel;\n const title = getAttr(el, 'title');\n if (title) return title;\n const alt = getAttr(el, 'alt');\n if (alt) return alt;\n const placeholder = getAttr(el, 'placeholder');\n if (placeholder) return placeholder;\n const value = typeof el.value === 'string' ? el.value.trim() : '';\n if (value) return value;\n return '';\n };\n\n const label = getLabel(target);\n const safeLabel =\n (label || primaryClass).replace(/\\s+/g, '_').slice(0, 32) ||\n 'no_label';\n\n const route = (this.context?.router as any)?.currentRoute || {};\n\n const buildRouteKey = (r: any): string => {\n try {\n if (!r) return 'unknown_route';\n\n if (r.name) {\n return String(r.name);\n }\n\n if (Array.isArray(r.matched) && r.matched.length > 0) {\n const record = r.matched[r.matched.length - 1];\n if (record && record.path) {\n return record.path;\n }\n }\n\n if (r.path) {\n return r.path;\n }\n } catch {\n // ignore\n }\n\n return window.location.pathname || 'unknown_route';\n };\n\n const routeKey = buildRouteKey(route);\n\n let indexSuffix = '';\n try {\n const parent = target.parentNode as HTMLElement | null;\n if (parent && parent.children && parent.children.length) {\n const siblings = Array.from(parent.children).filter(\n (el) =>\n el.tagName === target.tagName &&\n (el as HTMLElement).className === target.className\n );\n const index = siblings.indexOf(target);\n if (index >= 0) {\n indexSuffix = `[${index}]`;\n }\n }\n } catch {\n // ignore\n }\n\n bizId = `${routeKey}|${tagName}.${primaryClass}${indexSuffix}|${safeLabel}`;\n }\n\n const targetInfo = {\n tagName: target.tagName,\n className: target.className,\n id: target.id,\n textContent: target.textContent?.substring(0, 50) || '',\n selector: this.getCSSSelector(target)\n };\n\n this.trackAction('click', {\n type: 'click',\n bizId,\n x: event.clientX,\n y: event.clientY,\n target: targetInfo,\n page: {\n url: window.location.href,\n title: document.title,\n path: window.location.pathname\n },\n timestamp: Date.now()\n });\n } catch (error) {\n console.warn('Failed to track click event:', error);\n }\n },\n true\n );\n\n document.addEventListener('visibilitychange', () => {});\n\n if (mitoConfig.debug) {\n console.log('User interaction tracking configured');\n }\n }\n\n private trackInitialRoute(): void {\n if (!this.context.router || !this.adapter) {\n return;\n }\n\n try {\n const router = this.context.router as any;\n const currentRoute =\n router.currentRoute || (router.app && router.app.$route) || {};\n\n const from = {\n path: currentRoute.fullPath || currentRoute.path,\n name: currentRoute.name,\n params: currentRoute.params,\n query: currentRoute.query\n };\n\n const to = { ...from };\n\n const adapter: any = this.adapter;\n if (adapter && typeof adapter.handleRouteChange === 'function') {\n adapter.handleRouteChange(to, from);\n }\n } catch (error) {\n if (mitoConfig.debug) {\n console.warn('Failed to track initial route:', error);\n }\n }\n }\n\n private getCSSSelector(element: Element | null): string {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return '';\n }\n\n const path: string[] = [];\n let current: Element | null = element;\n\n while (current && current.nodeType === Node.ELEMENT_NODE) {\n let selector = current.tagName.toLowerCase();\n\n if (current.id) {\n selector += `#${current.id}`;\n path.unshift(selector);\n break;\n }\n\n if ((current as HTMLElement).className) {\n const classes = (current as HTMLElement).className\n .split(' ')\n .filter((c) => c.trim());\n if (classes.length > 0) {\n selector += `.${classes[0]}`;\n }\n }\n\n path.unshift(selector);\n current = current.parentElement;\n\n if (path.length > 5) {\n break;\n }\n }\n\n return path.join(' > ');\n }\n\n trackEvent(eventName: string, eventData: Record<string, any> = {}): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: eventName,\n ...eventData\n });\n } catch (error) {\n console.error('Failed to track event:', error);\n }\n }\n\n trackPerformance(performanceData: Record<string, any>): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: 'performance',\n type: 'performance',\n ...performanceData\n });\n } catch (error) {\n console.error('Failed to track performance:', error);\n }\n }\n\n trackAction(action: string, actionData: Record<string, any> = {}): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: 'user_action',\n action,\n ...actionData\n });\n } catch (error) {\n console.error('Failed to track action:', error);\n }\n }\n\n trackMetric(\n metricName: string,\n value: number,\n dimensions: Record<string, any> = {}\n ): void {\n if (!this.checkRUMAvailable()) {\n return;\n }\n\n try {\n this.adapter.trackEvent({\n name: 'metric',\n metricName,\n value,\n dimensions\n });\n } catch (error) {\n console.error('Failed to track metric:', error);\n }\n }\n\n getBreadcrumbs(): any[] {\n if (!this.checkRUMAvailable()) {\n return [];\n }\n\n try {\n return this.adapter.getBreadcrumbs();\n } catch (error) {\n console.error('Failed to get breadcrumbs:', error);\n return [];\n }\n }\n\n enable(): void {\n this.isEnabled = true;\n if (mitoConfig.debug) {\n console.log('RUM system enabled');\n }\n }\n\n disable(): void {\n this.isEnabled = false;\n if (mitoConfig.debug) {\n console.log('RUM system disabled');\n }\n }\n\n private checkRUMAvailable(): boolean {\n return this.isEnabled && this.isInitialized && !!this.adapter;\n }\n\n getConfig(): Record<string, any> {\n return {\n isInitialized: this.isInitialized,\n isEnabled: this.isEnabled,\n environment: mitoConfig.environment,\n debug: mitoConfig.debug,\n sls: {\n enabled: slsConfig.enabled,\n configured: true,\n project: slsConfig.project,\n logstore: slsConfig.logstore\n }\n };\n }\n\n destroy(): void {\n try {\n if (this.adapter) {\n this.adapter.destroy();\n this.adapter = null;\n }\n\n this.isInitialized = false;\n this.context = {} as RUMManagerContext;\n if (mitoConfig.debug) {\n console.log('RUM system destroyed');\n }\n } catch (error) {\n console.error('Failed to destroy RUM system:', error);\n }\n }\n}\n","import type { App } from 'vue';\nimport * as Vue from 'vue';\nimport type { MitoSLSAdapterOptions } from '../core/MitoSLSAdapter';\nimport { RUMManagerVue3 } from './RUMManager.vue3';\n\nexport interface RUMVue3PluginOptions {\n store?: any;\n router?: any;\n coreOptions?: Partial<MitoSLSAdapterOptions>;\n}\n\nexport function createRUMPluginVue3(options: RUMVue3PluginOptions) {\n const manager = new RUMManagerVue3();\n\n return {\n install(app: App) {\n manager.init(\n { store: options.store, router: options.router },\n options.coreOptions || {}\n );\n\n (app.config.globalProperties as any).$rum = {\n trackEvent: manager.trackEvent.bind(manager),\n trackPerformance: manager.trackPerformance.bind(manager),\n trackAction: manager.trackAction.bind(manager),\n trackMetric: manager.trackMetric.bind(manager),\n getBreadcrumbs: manager.getBreadcrumbs.bind(manager),\n enable: manager.enable.bind(manager),\n disable: manager.disable.bind(manager),\n getConfig: manager.getConfig.bind(manager)\n };\n\n app.provide('rum', manager);\n }\n };\n}\n\nexport function useRUM(): RUMManagerVue3 | undefined {\n return Vue.inject<RUMManagerVue3>('rum');\n}\n","import type { TransformContext } from '../core/config';\nimport type { MitoSLSAdapterOptions } from '../core/MitoSLSAdapter';\nimport { RUMManagerVue2 } from '../vue2/RUMManager.vue2';\n\nexport interface RUMManagerContextVue3 extends TransformContext {}\n\nexport class RUMManagerVue3 {\n private inner = new RUMManagerVue2();\n\n init(\n context: RUMManagerContextVue3,\n options: Partial<MitoSLSAdapterOptions> = {}\n ): Promise<void> {\n return this.inner.init(context as any, options);\n }\n\n trackEvent(eventName: string, eventData: Record<string, any> = {}): void {\n this.inner.trackEvent(eventName, eventData);\n }\n\n trackPerformance(performanceData: Record<string, any>): void {\n this.inner.trackPerformance(performanceData);\n }\n\n trackAction(action: string, actionData: Record<string, any> = {}): void {\n this.inner.trackAction(action, actionData);\n }\n\n trackMetric(\n metricName: string,\n value: number,\n dimensions: Record<string, any> = {}\n ): void {\n this.inner.trackMetric(metricName, value, dimensions);\n }\n\n getBreadcrumbs(): any[] {\n return this.inner.getBreadcrumbs();\n }\n\n enable(): void {\n this.inner.enable();\n }\n\n disable(): void {\n this.inner.disable();\n }\n\n getConfig(): Record<string, any> {\n return this.inner.getConfig();\n }\n\n destroy(): void {\n this.inner.destroy();\n }\n}\n"],"mappings":"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","names":["getEnv","Vue"]}
|
package/jest.config.cjs
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { SLSWebTrackingAdapter } from '../transport/SLSWebTrackingAdapter';
|
|
2
|
-
|
|
3
|
-
jest.mock(
|
|
4
|
-
'@aliyun-sls/web-track-browser/dist/web-track-browser.es.js',
|
|
5
|
-
() => {
|
|
6
|
-
return jest.fn().mockImplementation(() => ({
|
|
7
|
-
send: jest.fn().mockResolvedValue(undefined),
|
|
8
|
-
destroy: jest.fn()
|
|
9
|
-
}));
|
|
10
|
-
}
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
describe('SLSWebTrackingAdapter', () => {
|
|
14
|
-
beforeAll(() => {
|
|
15
|
-
(global as any).window = {
|
|
16
|
-
location: {
|
|
17
|
-
href: 'http://localhost:3000/#/test',
|
|
18
|
-
pathname: '/test',
|
|
19
|
-
hash: '#/test'
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
(global as any).document = {
|
|
23
|
-
title: 'Test Page'
|
|
24
|
-
};
|
|
25
|
-
(global as any).navigator = {
|
|
26
|
-
userAgent: 'TestAgent',
|
|
27
|
-
language: 'en-US'
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('initializes and can send a basic log', async () => {
|
|
32
|
-
const adapter = new SLSWebTrackingAdapter({
|
|
33
|
-
enabled: true,
|
|
34
|
-
debug: false
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
await adapter.init();
|
|
38
|
-
|
|
39
|
-
await expect(
|
|
40
|
-
adapter.sendLog({ type: 'custom', message: 'hello' })
|
|
41
|
-
).resolves.toBeUndefined();
|
|
42
|
-
|
|
43
|
-
const stats = adapter.getStats();
|
|
44
|
-
expect(stats.isInitialized).toBe(true);
|
|
45
|
-
});
|
|
46
|
-
});
|