99 lines
2.3 KiB
TypeScript
99 lines
2.3 KiB
TypeScript
import { useStorage } from "@vueuse/core";
|
|
import { call } from "frappe-ui";
|
|
import "../../../frappe/frappe/public/js/lib/posthog.js";
|
|
|
|
const APP = "lms";
|
|
const SITENAME = window.location.hostname;
|
|
|
|
declare global {
|
|
interface Window {
|
|
posthog: any;
|
|
}
|
|
}
|
|
|
|
const telemetry = useStorage("telemetry", {
|
|
enabled: false,
|
|
project_id: "",
|
|
host: "",
|
|
});
|
|
|
|
export async function init() {
|
|
await set_enabled();
|
|
if (!telemetry.value.enabled) return;
|
|
try {
|
|
await set_credentials();
|
|
window.posthog.init(telemetry.value.project_id, {
|
|
api_host: telemetry.value.host,
|
|
autocapture: false,
|
|
person_profiles: "always",
|
|
capture_pageview: true,
|
|
capture_pageleave: true,
|
|
disable_session_recording: false,
|
|
session_recording: {
|
|
maskAllInputs: false,
|
|
maskInputOptions: {
|
|
password: true,
|
|
},
|
|
},
|
|
loaded: (posthog) => {
|
|
window.posthog = posthog;
|
|
window.posthog.identify(SITENAME);
|
|
},
|
|
});
|
|
} catch (e) {
|
|
console.trace("Failed to initialize telemetry", e);
|
|
telemetry.value.enabled = false;
|
|
}
|
|
}
|
|
|
|
async function set_enabled() {
|
|
if (telemetry.value.enabled) return;
|
|
|
|
await call("lms.lms.telemetry.is_enabled").then((res) => {
|
|
telemetry.value.enabled = res;
|
|
});
|
|
}
|
|
|
|
async function set_credentials() {
|
|
if (!telemetry.value.enabled) return;
|
|
if (telemetry.value.project_id && telemetry.value.host) return;
|
|
|
|
await call("lms.lms.telemetry.get_credentials").then((res) => {
|
|
telemetry.value.project_id = res.project_id;
|
|
telemetry.value.host = res.telemetry_host;
|
|
});
|
|
}
|
|
|
|
interface CaptureOptions {
|
|
data: {
|
|
user: string;
|
|
[key: string]: string | number | boolean | object;
|
|
};
|
|
}
|
|
|
|
export function capture(
|
|
event: string,
|
|
options: CaptureOptions = { data: { user: "" } }
|
|
) {
|
|
if (!telemetry.value.enabled) return;
|
|
window.posthog.capture(`${APP}_${event}`, options);
|
|
}
|
|
|
|
export function recordSession() {
|
|
if (!telemetry.value.enabled) return;
|
|
if (window.posthog && window.posthog.__loaded) {
|
|
window.posthog.startSessionRecording();
|
|
}
|
|
}
|
|
|
|
export function stopSession() {
|
|
if (!telemetry.value.enabled) return;
|
|
if (
|
|
window.posthog &&
|
|
window.posthog.__loaded &&
|
|
window.posthog.sessionRecordingStarted()
|
|
) {
|
|
window.posthog.stopSessionRecording();
|
|
}
|
|
}
|