mirror of
https://github.com/misskey-dev/misskey.git
synced 2025-04-15 15:43:17 +09:00

Some checks failed
Check copyright year / check_copyright_year (push) Has been cancelled
API report (misskey.js) / report (push) Has been cancelled
Check SPDX-License-Identifier / check-spdx-license-id (push) Has been cancelled
Dockle / dockle (push) Has been cancelled
Lint / pnpm_install (push) Has been cancelled
Publish Docker image (develop) / Build (linux/amd64) (push) Has been cancelled
Publish Docker image (develop) / Build (linux/arm64) (push) Has been cancelled
Release Manager: sync changelog with PR / edit (push) Has been cancelled
Storybook / build (push) Has been cancelled
Test (backend) / Unit tests (backend) (22.11.0) (push) Has been cancelled
Test (backend) / E2E tests (backend) (22.11.0) (push) Has been cancelled
Test (federation) / Federation test (22.11.0) (push) Has been cancelled
Test (frontend) / Unit tests (frontend) (22.11.0) (push) Has been cancelled
Test (frontend) / E2E tests (frontend) (chrome, 22.11.0) (push) Has been cancelled
Test (misskey.js) / Unit tests (misskey.js) (22.11.0) (push) Has been cancelled
Test (production install and build) / Production build (22.11.0) (push) Has been cancelled
api.json validation / validate-api-json (22.11.0) (push) Has been cancelled
Lint / typecheck (sw) (push) Has been cancelled
Lint / lint (backend) (push) Has been cancelled
Lint / lint (frontend) (push) Has been cancelled
Publish Docker image (develop) / merge (push) Has been cancelled
Lint / lint (frontend-embed) (push) Has been cancelled
Lint / lint (frontend-shared) (push) Has been cancelled
Lint / lint (misskey-bubble-game) (push) Has been cancelled
Lint / lint (misskey-js) (push) Has been cancelled
Lint / lint (misskey-reversi) (push) Has been cancelled
Lint / lint (sw) (push) Has been cancelled
Lint / typecheck (backend) (push) Has been cancelled
Lint / typecheck (misskey-js) (push) Has been cancelled
* wip backend * wip frontend * build misskey-js * implement control panel * fix * introduce analytics wrapper * spdx * Update analytics.ts * Update common.ts * wip * wip * wip * wip * wip * Update CHANGELOG.md --------- Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
108 lines
3.0 KiB
TypeScript
108 lines
3.0 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import * as Misskey from 'misskey-js';
|
|
import type { AnalyticsInstance, AnalyticsPlugin } from 'analytics';
|
|
|
|
/**
|
|
* analytics moduleを読み込まなくても動作するようにするためのラッパー
|
|
*/
|
|
class AnalyticsProxy implements AnalyticsInstance {
|
|
private analytics?: AnalyticsInstance;
|
|
|
|
constructor(analytics?: AnalyticsInstance) {
|
|
if (analytics) {
|
|
this.analytics = analytics;
|
|
}
|
|
}
|
|
|
|
public setAnalytics(analytics: AnalyticsInstance) {
|
|
if (this.analytics) {
|
|
throw new Error('Analytics instance already exists.');
|
|
}
|
|
this.analytics = analytics;
|
|
}
|
|
|
|
public identify(...args: Parameters<AnalyticsInstance['identify']>) {
|
|
return this.analytics?.identify(...args) ?? Promise.resolve();
|
|
}
|
|
|
|
public track(...args: Parameters<AnalyticsInstance['track']>) {
|
|
return this.analytics?.track(...args) ?? Promise.resolve();
|
|
}
|
|
|
|
public page(...args: Parameters<AnalyticsInstance['page']>) {
|
|
return this.analytics?.page(...args) ?? Promise.resolve();
|
|
}
|
|
|
|
public user(...args: Parameters<AnalyticsInstance['user']>) {
|
|
return this.analytics?.user(...args) ?? Promise.resolve();
|
|
}
|
|
|
|
public reset(...args: Parameters<AnalyticsInstance['reset']>) {
|
|
return this.analytics?.reset(...args) ?? Promise.resolve();
|
|
}
|
|
|
|
public ready(...args: Parameters<AnalyticsInstance['ready']>) {
|
|
return this.analytics?.ready(...args) ?? function () { void 0; };
|
|
}
|
|
|
|
public on(...args: Parameters<AnalyticsInstance['on']>) {
|
|
return this.analytics?.on(...args) ?? function () { void 0; };
|
|
}
|
|
|
|
public once(...args: Parameters<AnalyticsInstance['once']>) {
|
|
return this.analytics?.once(...args) ?? function () { void 0; };
|
|
}
|
|
|
|
public getState(...args: Parameters<AnalyticsInstance['getState']>) {
|
|
return this.analytics?.getState(...args) ?? Promise.resolve();
|
|
}
|
|
|
|
public get storage() {
|
|
return this.analytics?.storage ?? {
|
|
getItem: () => null,
|
|
setItem: () => void 0,
|
|
removeItem: () => void 0,
|
|
};
|
|
}
|
|
|
|
public get plugins() {
|
|
return this.analytics?.plugins ?? {
|
|
enable: (p, c) => Promise.resolve(c ? c() : void 0),
|
|
disable: (p, c) => Promise.resolve(c ? c() : void 0),
|
|
};
|
|
}
|
|
}
|
|
|
|
export const analytics = new AnalyticsProxy();
|
|
|
|
export async function initAnalytics(instance: Misskey.entities.MetaDetailed) {
|
|
// アナリティクスプロバイダに関する設定がひとつもない場合は、アナリティクスモジュールを読み込まない
|
|
if (!instance.googleAnalyticsMeasurementId) {
|
|
return;
|
|
}
|
|
|
|
const { default: Analytics } = await import('analytics');
|
|
const plugins: AnalyticsPlugin[] = [];
|
|
|
|
// Google Analytics
|
|
if (instance.googleAnalyticsMeasurementId) {
|
|
const { default: googleAnalytics } = await import('@analytics/google-analytics');
|
|
|
|
plugins.push(googleAnalytics({
|
|
measurementIds: [instance.googleAnalyticsMeasurementId],
|
|
debug: _DEV_,
|
|
}));
|
|
}
|
|
|
|
analytics.setAnalytics(Analytics({
|
|
app: 'misskey',
|
|
version: _VERSION_,
|
|
debug: _DEV_,
|
|
plugins,
|
|
}));
|
|
}
|