From edb608d9a35e7f0a33121adcb23e0bc57ae83a69 Mon Sep 17 00:00:00 2001 From: devin-cwd Date: Tue, 24 Sep 2024 15:59:58 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=E5=86=85=E7=BD=AE=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6key=E5=8A=A0=E5=89=8D=E7=BC=80=E2=80=9C$=E2=80=9D,=20i?= =?UTF-8?q?d=20=E9=95=BF=E5=BA=A6=E6=94=B9=E4=B8=BA64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/analytics/README.md | 5 ++++ packages/analytics/src/constant.ts | 2 +- packages/analytics/src/events/click.ts | 10 +++---- packages/analytics/src/events/inp.ts | 4 +-- packages/analytics/src/events/lcp.ts | 4 +-- packages/analytics/src/events/performance.ts | 30 ++++++++++---------- packages/analytics/src/events/pv.ts | 12 ++++---- 7 files changed, 36 insertions(+), 31 deletions(-) diff --git a/packages/analytics/README.md b/packages/analytics/README.md index b74ce25..b3e4b2e 100644 --- a/packages/analytics/README.md +++ b/packages/analytics/README.md @@ -22,3 +22,8 @@ 1. 事件数据字段从 data 更改为 properties; 2. 修复导入时自运行 storage,导致服务端渲染报错问题; + +# TODO + +1. 支持在 html 引入; +2. 支持错误告警上报; diff --git a/packages/analytics/src/constant.ts b/packages/analytics/src/constant.ts index ba2632b..bbafb50 100644 --- a/packages/analytics/src/constant.ts +++ b/packages/analytics/src/constant.ts @@ -1,6 +1,6 @@ export const Constant = { OA_PREFIX: 'oa', // 本地存储key的前缀 - ID_LENGTH: 36, // 标识id长度 + ID_LENGTH: 64, // 标识id长度 OA_ENABLED: '1', // 开启采集标识 OA_DISABLED: '0', // 关闭采集标识 SESSION_EXPIRE_TIME: 30 * 60 * 1000, // 会话标识有效期 diff --git a/packages/analytics/src/events/click.ts b/packages/analytics/src/events/click.ts index a2ba36d..4b8b837 100644 --- a/packages/analytics/src/events/click.ts +++ b/packages/analytics/src/events/click.ts @@ -9,11 +9,11 @@ async function handleClick(e: MouseEvent, customData?: (event: MouseEvent) => Pr const cData = isFunction(customData) ? await customData(e) : {}; return { - url: window.location.href, - pageX, - pageY, - documentScrollLeft: scrollLeft, - documentScrollTop: scrollTop, + $url: window.location.href, + $pageX: pageX, + $pageY: pageY, + $documentScrollLeft: scrollLeft, + $documentScrollTop: scrollTop, ...cData, }; } diff --git a/packages/analytics/src/events/inp.ts b/packages/analytics/src/events/inp.ts index a364111..c35d690 100644 --- a/packages/analytics/src/events/inp.ts +++ b/packages/analytics/src/events/inp.ts @@ -7,8 +7,8 @@ export default { return new Promise((resolve) => { onINP((m) => { resolve({ - url: window.location.href, - inp: m.value, + $url: window.location.href, + $inp: m.value, }); }); }); diff --git a/packages/analytics/src/events/lcp.ts b/packages/analytics/src/events/lcp.ts index 397ba62..5596366 100644 --- a/packages/analytics/src/events/lcp.ts +++ b/packages/analytics/src/events/lcp.ts @@ -7,8 +7,8 @@ export default { return new Promise((resolve) => { onLCP((m) => { resolve({ - url: window.location.href, - lcp: m.value, + $url: window.location.href, + $lcp: m.value, }); }); }); diff --git a/packages/analytics/src/events/performance.ts b/packages/analytics/src/events/performance.ts index 6363094..cc16d25 100644 --- a/packages/analytics/src/events/performance.ts +++ b/packages/analytics/src/events/performance.ts @@ -2,12 +2,12 @@ import { OpenEventKeys } from './_keys'; import { onFCP, onTTFB } from 'web-vitals'; interface PerformanceData { - url: string; - fcp: number; - ttfb: number; - load: number; - navigationEntry?: PerformanceNavigationTiming; - connection: { + $url: string; + $fcp: number; + $ttfb: number; + $load: number; + $navigationEntry?: PerformanceNavigationTiming; + $connection: { downlink: Megabit; // 有效带宽估算(单位:Mbps/s) effectiveType: EffectiveConnectionType; // 连接的有效类型 rtt: Millisecond; // 当前连接的往返时延评估 @@ -29,11 +29,11 @@ export default { collector: () => { return new Promise((resolve) => { const data: PerformanceData = { - url: window.location.href, - fcp: -1, - ttfb: -1, - load: -1, - connection: getConnection(), + $url: window.location.href, + $fcp: -1, + $ttfb: -1, + $load: -1, + $connection: getConnection(), }; let doneFcp = false; let doneTtfb = false; @@ -45,16 +45,16 @@ export default { }; onFCP((m) => { - data.fcp = m.value; + data.$fcp = m.value; doneFcp = true; doResolve(); }); onTTFB((m) => { doneTtfb = true; const entry = m.entries[0]; - data.ttfb = m.value; - data.navigationEntry = entry; - data.load = entry.domComplete - entry.startTime; + data.$ttfb = m.value; + data.$navigationEntry = entry; + data.$load = entry.domComplete - entry.startTime; doResolve(); }); }); diff --git a/packages/analytics/src/events/pv.ts b/packages/analytics/src/events/pv.ts index 4d9e1b6..a338a36 100644 --- a/packages/analytics/src/events/pv.ts +++ b/packages/analytics/src/events/pv.ts @@ -4,12 +4,12 @@ export default { event: OpenEventKeys.PV, collector: () => { return { - url: window.location.href, - path: window.location.pathname, - hash: window.location.hash, - search: window.location.search, - title: document.title, - referrer: document.referrer, + $url: window.location.href, + $path: window.location.pathname, + $hash: window.location.hash, + $search: window.location.search, + $title: document.title, + $referrer: document.referrer, }; }, }; -- Gitee From e05a09305601d240f7ed051e99f4d079fb11f25e Mon Sep 17 00:00:00 2001 From: devin-cwd Date: Tue, 24 Sep 2024 16:54:42 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20id=E4=BD=BF=E7=94=A8uuid=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .npmrc | 1 + packages/analytics/package.json | 4 +++- packages/analytics/src/constant.ts | 1 - packages/analytics/src/open-analytics.ts | 4 ++-- packages/analytics/src/utils.ts | 17 +++-------------- pnpm-lock.yaml | 24 ++++++++++++++++++++++++ 6 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b3851f8 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=http://registry.npmmirror.com diff --git a/packages/analytics/package.json b/packages/analytics/package.json index a2f3cbf..ad77b2d 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -1,6 +1,6 @@ { "name": "@opensig/open-analytics", - "version": "0.0.5", + "version": "0.0.6", "description": "opendesign analytics", "main": "dist/open-analytics.mjs", "types": "dist/open-analytics.d.ts", @@ -14,12 +14,14 @@ }, "devDependencies": { "@types/ua-parser-js": "^0.7.39", + "@types/uuid": "^10.0.0", "typescript": "~5.3.3", "vite": "^5.3.4", "vite-plugin-dts": "^3.7.3" }, "dependencies": { "ua-parser-js": "^1.0.38", + "uuid": "^10.0.0", "web-vitals": "^4.2.2" }, "publishConfig": { diff --git a/packages/analytics/src/constant.ts b/packages/analytics/src/constant.ts index bbafb50..13d198a 100644 --- a/packages/analytics/src/constant.ts +++ b/packages/analytics/src/constant.ts @@ -1,6 +1,5 @@ export const Constant = { OA_PREFIX: 'oa', // 本地存储key的前缀 - ID_LENGTH: 64, // 标识id长度 OA_ENABLED: '1', // 开启采集标识 OA_DISABLED: '0', // 关闭采集标识 SESSION_EXPIRE_TIME: 30 * 60 * 1000, // 会话标识有效期 diff --git a/packages/analytics/src/open-analytics.ts b/packages/analytics/src/open-analytics.ts index ff2aab5..07cbd08 100644 --- a/packages/analytics/src/open-analytics.ts +++ b/packages/analytics/src/open-analytics.ts @@ -43,7 +43,7 @@ function initHeader(keys: StoreKeyIns, appId: string): EventHeader { const aKey = keys.client; const client = store.getAlways(aKey, { defaultValue: () => ({ - id: uniqueId('', Constant.ID_LENGTH), + id: uniqueId(), }), setOption: { expire: Date.now() + Constant.CLIENT_EXPIRE_TIME, @@ -70,7 +70,7 @@ function initHeader(keys: StoreKeyIns, appId: string): EventHeader { function getSessionId(sKey: string) { const session = store.getAlways(sKey, { defaultValue: () => ({ - id: uniqueId('', Constant.ID_LENGTH), + id: uniqueId(), }), setOption: { expire: Date.now() + Constant.SESSION_EXPIRE_TIME, diff --git a/packages/analytics/src/utils.ts b/packages/analytics/src/utils.ts index a7ccf5b..a86fd82 100644 --- a/packages/analytics/src/utils.ts +++ b/packages/analytics/src/utils.ts @@ -1,20 +1,9 @@ +import { v4 as uuidV4 } from 'uuid'; /** * 生成随机字符串 - * @param prefix 前缀 - * @param length 字符串长度 */ -export function uniqueId(prefix: string = '', length: number = 8, Separator: string = '-'): string { - const gen = (len: number): string => { - if (len <= 11) { - return Math.random() - .toString(36) - .slice(2, 2 + len) - .padEnd(len, '0'); - } else { - return gen(11) + gen(len - 11); - } - }; - return prefix ? `${prefix}${Separator}${gen(length)}` : gen(length); +export function uniqueId(): string { + return uuidV4(); } /** * 判断是否是函数 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44f6ba7..ce91add 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: ua-parser-js: specifier: ^1.0.38 version: 1.0.38 + uuid: + specifier: ^10.0.0 + version: 10.0.0 web-vitals: specifier: ^4.2.2 version: 4.2.2 @@ -39,6 +42,9 @@ importers: '@types/ua-parser-js': specifier: ^0.7.39 version: 0.7.39 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 typescript: specifier: ~5.3.3 version: 5.3.3 @@ -477,6 +483,7 @@ packages: resolution: {integrity: sha512-r+SI2t8srMPYZeoa1w0o/AfoVt9akI1ihgazGYPQGRilVAkuzMGiTtexNZkrPkQsyFrvqq/ni8f3zOnHw4hUbA==} cpu: [arm] os: [linux] + libc: [glibc] requiresBuild: true optional: true @@ -484,6 +491,7 @@ packages: resolution: {integrity: sha512-+tYiL4QVjtI3KliKBGtUU7yhw0GMcJJuB9mLTCEauHEsqfk49gtUBXGtGP3h1LW8MbaTY6rSFIQV1XOBps1gBA==} cpu: [arm] os: [linux] + libc: [musl] requiresBuild: true optional: true @@ -491,6 +499,7 @@ packages: resolution: {integrity: sha512-OR5DcvZiYN75mXDNQQxlQPTv4D+uNCUsmSCSY2FolLf9W5I4DSoJyg7z9Ea3TjKfhPSGgMJiey1aWvlWuBzMtg==} cpu: [arm64] os: [linux] + libc: [glibc] requiresBuild: true optional: true @@ -498,6 +507,7 @@ packages: resolution: {integrity: sha512-Hw3jSfWdUSauEYFBSFIte6I8m6jOj+3vifLg8EU3lreWulAUpch4JBjDMtlKosrBzkr0kwKgL9iCfjA8L3geoA==} cpu: [arm64] os: [linux] + libc: [musl] requiresBuild: true optional: true @@ -505,6 +515,7 @@ packages: resolution: {integrity: sha512-rhjvoPBhBwVnJRq/+hi2Q3EMiVF538/o9dBuj9TVLclo9DuONqt5xfWSaE6MYiFKpo/lFPJ/iSI72rYWw5Hc7w==} cpu: [ppc64] os: [linux] + libc: [glibc] requiresBuild: true optional: true @@ -512,6 +523,7 @@ packages: resolution: {integrity: sha512-EAz6vjPwHHs2qOCnpQkw4xs14XJq84I81sDRGPEjKPFVPBw7fwvtwhVjcZR6SLydCv8zNK8YGFblKWd/vRmP8g==} cpu: [riscv64] os: [linux] + libc: [glibc] requiresBuild: true optional: true @@ -519,6 +531,7 @@ packages: resolution: {integrity: sha512-IJSUX1xb8k/zN9j2I7B5Re6B0NNJDJ1+soezjNojhT8DEVeDNptq2jgycCOpRhyGj0+xBn7Cq+PK7Q+nd2hxLA==} cpu: [s390x] os: [linux] + libc: [glibc] requiresBuild: true optional: true @@ -526,6 +539,7 @@ packages: resolution: {integrity: sha512-OgaToJ8jSxTpgGkZSkwKE+JQGihdcaqnyHEFOSAU45utQ+yLruE1dkonB2SDI8t375wOKgNn8pQvaWY9kPzxDQ==} cpu: [x64] os: [linux] + libc: [glibc] requiresBuild: true optional: true @@ -533,6 +547,7 @@ packages: resolution: {integrity: sha512-5V3mPpWkB066XZZBgSd1lwozBk7tmOkKtquyCJ6T4LN3mzKENXyBwWNQn8d0Ci81hvlBw5RoFgleVpL6aScLYg==} cpu: [x64] os: [linux] + libc: [musl] requiresBuild: true optional: true @@ -633,6 +648,10 @@ packages: resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} dev: true + /@types/uuid@10.0.0: + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + dev: true + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1975,6 +1994,11 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + dev: false + /validator@13.12.0: resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} engines: {node: '>= 0.10'} -- Gitee From 045a78f608767e03c7f38467054747c14fb4ab0e Mon Sep 17 00:00:00 2001 From: devin-cwd Date: Tue, 24 Sep 2024 16:56:02 +0800 Subject: [PATCH 3/3] release v6 --- packages/analytics/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/analytics/README.md b/packages/analytics/README.md index b3e4b2e..4294838 100644 --- a/packages/analytics/README.md +++ b/packages/analytics/README.md @@ -23,6 +23,11 @@ 1. 事件数据字段从 data 更改为 properties; 2. 修复导入时自运行 storage,导致服务端渲染报错问题; +# 0.0.6 + +1. 内置事件字段添加前缀"$" +2. cid,sid 使用 uuid 生成 + # TODO 1. 支持在 html 引入; -- Gitee