a6a4ceee86
* fixing up typing * better dynamic loader mechanism * buildReqLoaders cleanup * added caching to loaders * ensuring all loaders are async * fe2 plugins error handling fix * feat(shared): true-myth result structures & other auth policy improvements * moving workspaceCore loaders to correct place
40 lines
1016 B
TypeScript
40 lines
1016 B
TypeScript
import { LogicError } from '@speckle/ui-components'
|
|
import { fakeMixpanelClient, type MixpanelClient } from '~/lib/common/helpers/mp'
|
|
import { useServersideMixpanelClientBuilder } from '~/lib/core/clients/mpServer'
|
|
|
|
/**
|
|
* mixpanel only supports being ran on the server-side! So it's only going to be accessible
|
|
* in SSR execution branches
|
|
*/
|
|
|
|
type LimitedMixpanel = MixpanelClient
|
|
|
|
const fakeLimitedMixpanel = fakeMixpanelClient
|
|
|
|
export default defineNuxtPlugin(async () => {
|
|
const logger = useLogger()
|
|
|
|
let mixpanel: LimitedMixpanel | undefined = undefined
|
|
|
|
try {
|
|
const build = useServersideMixpanelClientBuilder()
|
|
mixpanel = (await build()) || undefined
|
|
} catch (e) {
|
|
logger.warn(e, 'Failed to load mixpanel in SSR')
|
|
}
|
|
|
|
if (!mixpanel) {
|
|
// Implement mocked version
|
|
mixpanel = fakeLimitedMixpanel()
|
|
}
|
|
|
|
return {
|
|
provide: {
|
|
mixpanel: () => {
|
|
if (!mixpanel) throw new LogicError('Mixpanel unexpectedly not defined')
|
|
return mixpanel
|
|
}
|
|
}
|
|
}
|
|
})
|