frappe-ui 0.1.250 → 0.1.251
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/frappe/index.js +3 -1
- package/frappe/telemetry.ts +81 -0
- package/package.json +1 -1
package/frappe/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// components dependent on frappe backend
|
|
2
2
|
export * from './Link'
|
|
3
|
+
export { default as Filter } from './Filter/Filter.vue'
|
|
3
4
|
|
|
4
5
|
// help components
|
|
5
6
|
export { default as HelpModal } from './Help/HelpModal.vue'
|
|
@@ -26,4 +27,5 @@ export { useOnboarding } from './Onboarding/onboarding.js'
|
|
|
26
27
|
export { showHelpModal, minimize } from './Help/help.js'
|
|
27
28
|
export { showHelpCenter } from './HelpCenter/helpCenter.js'
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
// plugins
|
|
31
|
+
export { default as telemetryPlugin } from './telemetry.ts'
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { call } from 'frappe-ui'
|
|
2
|
+
import type { App } from 'vue'
|
|
3
|
+
// @ts-expect-error
|
|
4
|
+
import { pulse_provider } from '../../../frappe/frappe/public/js/telemetry/pulse.js'
|
|
5
|
+
|
|
6
|
+
type TelemetryPluginOptions = {
|
|
7
|
+
app_name: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare global {
|
|
11
|
+
interface Window {
|
|
12
|
+
frappe: any
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
type TelemetryConfig = {
|
|
17
|
+
is_enabled: boolean
|
|
18
|
+
capture: (event_name: string, data?: any) => void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
install(app: App, options = {} as TelemetryPluginOptions): void {
|
|
23
|
+
initializeFrappeBoot()
|
|
24
|
+
enableTelemetry(app, options.app_name)
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const silentCall = <T>(method: string): Promise<T> => {
|
|
29
|
+
// To prevent console errors/logs from being shown
|
|
30
|
+
const originalError = console.error
|
|
31
|
+
const originalLog = console.log
|
|
32
|
+
console.error = () => {}
|
|
33
|
+
console.log = () => {}
|
|
34
|
+
|
|
35
|
+
return call(method).finally(() => {
|
|
36
|
+
console.log = originalLog
|
|
37
|
+
console.error = originalError
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const enableTelemetry = (app: App, app_name: string): void => {
|
|
42
|
+
silentCall<boolean>('frappe.utils.telemetry.pulse.client.is_enabled')
|
|
43
|
+
.then((is_enabled: boolean) => {
|
|
44
|
+
setupTelemetry(app, is_enabled, app_name)
|
|
45
|
+
})
|
|
46
|
+
.catch(() => {
|
|
47
|
+
console.warn('Failed to fetch telemetry settings. Disabling telemetry.')
|
|
48
|
+
setupTelemetry(app, false, app_name)
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const setupTelemetry = (
|
|
53
|
+
app: App,
|
|
54
|
+
is_enabled: boolean,
|
|
55
|
+
app_name: string,
|
|
56
|
+
): void => {
|
|
57
|
+
window.frappe.boot.enable_telemetry = is_enabled
|
|
58
|
+
window.frappe.boot.telemetry_provider = is_enabled ? ['pulse'] : []
|
|
59
|
+
|
|
60
|
+
if (is_enabled) {
|
|
61
|
+
setupPulseProvider(app_name)
|
|
62
|
+
app.config.globalProperties.$telemetry = {
|
|
63
|
+
is_enabled: pulse_provider.is_enabled,
|
|
64
|
+
capture: pulse_provider.capture,
|
|
65
|
+
} as TelemetryConfig
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const setupPulseProvider = (app_name: string): void => {
|
|
70
|
+
const originalCapture = pulse_provider.capture
|
|
71
|
+
pulse_provider.capture = (event_name: string, data: any = {}) =>
|
|
72
|
+
originalCapture(event_name, app_name, data)
|
|
73
|
+
pulse_provider.init()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const initializeFrappeBoot = (): void => {
|
|
77
|
+
window.frappe ??= {}
|
|
78
|
+
window.frappe.boot = {
|
|
79
|
+
...window.frappe.boot,
|
|
80
|
+
}
|
|
81
|
+
}
|