diff --git a/package.json b/package.json index d7286fb..820fb10 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@intlify/unplugin-vue-i18n": "^6.0.8", "@octokit/core": "^7.0.6", "@octokit/rest": "^22.0.1", + "@openpanel/web": "^1.3.0", "@tailwindcss/postcss": "^4.1.16", "@tanstack/vue-query": "^5.92.9", "@toycode/markdown-it-class": "^1.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c13e51b..412414c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: '@octokit/rest': specifier: ^22.0.1 version: 22.0.1 + '@openpanel/web': + specifier: ^1.3.0 + version: 1.3.0 '@tailwindcss/postcss': specifier: ^4.1.16 version: 4.1.16 @@ -1384,6 +1387,12 @@ packages: '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} + '@openpanel/sdk@1.3.0': + resolution: {integrity: sha512-VK/1oawBjGdxA+oYtqcWlNXlLT1zRJ9tslHoMvqqsqlcLNOhH26ltcHpyGp5RhtIF7uIkCltiicALfFN7fyldw==} + + '@openpanel/web@1.3.0': + resolution: {integrity: sha512-geUPcn35oMqWlBS7rB4ejP6qzKGs4VDAZhoSw9MD3q/UYkD/pfTEx70z1ydGVJMjHREdXoAL1XVhBLdZmu1gsw==} + '@parcel/watcher-android-arm64@2.5.0': resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} engines: {node: '>= 10.0.0'} @@ -1653,6 +1662,12 @@ packages: cpu: [x64] os: [win32] + '@rrweb/types@2.0.0-alpha.20': + resolution: {integrity: sha512-RbnDgKxA/odwB1R4gF7eUUj+rdSrq6ROQJsnMw7MIsGzlbSYvJeZN8YY4XqU0G6sKJvXI6bSzk7w/G94jNwzhw==} + + '@rrweb/utils@2.0.0-alpha.20': + resolution: {integrity: sha512-MTQOmhPRe39C0fYaCnnVYOufQsyGzwNXpUStKiyFSfGLUJrzuwhbRoUAKR5w6W2j5XuA0bIz3ZDIBztkquOhLw==} + '@rushstack/eslint-patch@1.14.1': resolution: {integrity: sha512-jGTk8UD/RdjsNZW8qq10r0RBvxL8OWtoT+kImlzPDFilmozzM+9QmIJsmze9UiSBrFU45ZxhTYBypn9q9z/VfQ==} @@ -1778,6 +1793,9 @@ packages: '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/css-font-loading-module@0.0.7': + resolution: {integrity: sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -2215,6 +2233,9 @@ packages: peerDependencies: vue: ^3.5.0 + '@xstate/fsm@1.6.5': + resolution: {integrity: sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==} + abab@1.0.4: resolution: {integrity: sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -2474,6 +2495,10 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + base64-arraybuffer@1.0.2: + resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} + engines: {node: '>= 0.6.0'} + base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} @@ -4634,6 +4659,9 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -5274,6 +5302,15 @@ packages: roughjs@4.6.6: resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + rrdom@2.0.0-alpha.20: + resolution: {integrity: sha512-hoqjS4662LtBp82qEz9GrqU36UpEmCvTA2Hns3qdF7cklLFFy3G+0Th8hLytJENleHHWxsB5nWJ3eXz5mSRxdQ==} + + rrweb-snapshot@2.0.0-alpha.20: + resolution: {integrity: sha512-YTNf9YVeaGRo/jxY3FKBge2c/Ojd/KTHmuWloUSB+oyPXuY73ZeeG873qMMmhIpqEn7hn7aBF1eWEQmP7wjf8A==} + + rrweb@2.0.0-alpha.20: + resolution: {integrity: sha512-CZKDlm+j1VA50Ko3gnMbpvguCAleljsTNXPnVk9aeNP8o6T6kolRbISHyDZpqZ4G+bdDLlQOignPP3jEsXs8Gg==} + rsvp@3.6.2: resolution: {integrity: sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==} engines: {node: 0.12.* || 4.* || 6.* || >= 7.*} @@ -7577,6 +7614,14 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 + '@openpanel/sdk@1.3.0': {} + + '@openpanel/web@1.3.0': + dependencies: + '@openpanel/sdk': 1.3.0 + '@rrweb/types': 2.0.0-alpha.20 + rrweb: 2.0.0-alpha.20 + '@parcel/watcher-android-arm64@2.5.0': optional: true @@ -7767,6 +7812,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true + '@rrweb/types@2.0.0-alpha.20': {} + + '@rrweb/utils@2.0.0-alpha.20': {} + '@rushstack/eslint-patch@1.14.1': {} '@surma/rollup-plugin-off-main-thread@2.2.3': @@ -7870,6 +7919,8 @@ snapshots: dependencies: '@types/deep-eql': 4.0.2 + '@types/css-font-loading-module@0.0.7': {} + '@types/d3-array@3.2.1': {} '@types/d3-axis@3.0.6': @@ -8472,6 +8523,8 @@ snapshots: dependencies: vue: 3.5.18(typescript@5.9.3) + '@xstate/fsm@1.6.5': {} + abab@1.0.4: {} acorn-globals@3.1.0: @@ -8790,6 +8843,8 @@ snapshots: balanced-match@4.0.4: {} + base64-arraybuffer@1.0.2: {} + base@0.11.2: dependencies: cache-base: 1.0.1 @@ -11246,6 +11301,8 @@ snapshots: minipass@7.1.3: {} + mitt@3.0.1: {} + mixin-deep@1.3.2: dependencies: for-in: 1.0.2 @@ -11905,6 +11962,25 @@ snapshots: points-on-curve: 0.2.0 points-on-path: 0.2.1 + rrdom@2.0.0-alpha.20: + dependencies: + rrweb-snapshot: 2.0.0-alpha.20 + + rrweb-snapshot@2.0.0-alpha.20: + dependencies: + postcss: 8.5.6 + + rrweb@2.0.0-alpha.20: + dependencies: + '@rrweb/types': 2.0.0-alpha.20 + '@rrweb/utils': 2.0.0-alpha.20 + '@types/css-font-loading-module': 0.0.7 + '@xstate/fsm': 1.6.5 + base64-arraybuffer: 1.0.2 + mitt: 3.0.1 + rrdom: 2.0.0-alpha.20 + rrweb-snapshot: 2.0.0-alpha.20 + rsvp@3.6.2: {} run-applescript@5.0.0: diff --git a/src/analytics/openpanel.ts b/src/analytics/openpanel.ts new file mode 100644 index 0000000..241f100 --- /dev/null +++ b/src/analytics/openpanel.ts @@ -0,0 +1,9 @@ +import { OpenPanel } from "@openpanel/web" + +export const op = new OpenPanel({ + apiUrl: "https://api.panel.apoena.dev", + clientId: "038a6aac-19bb-4a7f-9aae-2d0201fead5b", + trackScreenViews: true, + trackOutgoingLinks: true, + trackAttributes: true, +}) diff --git a/src/main.ts b/src/main.ts index 1d9f1fe..441a6fb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,6 +10,7 @@ import { messages } from "@/locales/message" import { router } from "@/router/router" import App from "./App.vue" +import "@/analytics/openpanel" const i18n = createI18n({ locale: "en",