diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index deac1d2c..a8a250f6 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -9,6 +9,7 @@ import { createGame } from "@main/services/library-sync"; import { steamUrlBuilder } from "@shared"; import { dataSource } from "@main/data-source"; import { DownloadQueue, Game } from "@main/entity"; +import { HydraAnalytics } from "@main/services/hydra-analytics"; const startGameDownload = async ( _event: Electron.IpcMainInvokeEvent, @@ -90,6 +91,8 @@ const startGameDownload = async ( logger.error("Failed to create game download", err); }); + HydraAnalytics.postDownload(payload.uri).catch(() => {}); + await DownloadManager.cancelDownload(updatedGame!.id); await DownloadManager.startDownload(updatedGame!); diff --git a/src/main/services/hydra-analytics.ts b/src/main/services/hydra-analytics.ts new file mode 100644 index 00000000..f4a6b24c --- /dev/null +++ b/src/main/services/hydra-analytics.ts @@ -0,0 +1,34 @@ +import { userSubscriptionRepository } from "@main/repository"; +import axios from "axios"; +import { appVersion } from "@main/constants"; + +export class HydraAnalytics { + private static instance = axios.create({ + baseURL: import.meta.env.MAIN_VITE_ANALYTICS_API_URL, + headers: { "User-Agent": `Hydra Launcher v${appVersion}` }, + }); + + private static async hasActiveSubscription() { + const userSubscription = await userSubscriptionRepository.findOne({ + where: { id: 1 }, + }); + + return ( + userSubscription?.expiresAt && userSubscription.expiresAt > new Date() + ); + } + + static async postDownload(hash: string) { + const hasSubscription = await this.hasActiveSubscription(); + + return this.instance + .post("/track", { + event: "download", + attributes: { + hash, + hasSubscription, + }, + }) + .then((response) => response.data); + } +} diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts index c070dcc7..86aa9d33 100644 --- a/src/main/vite-env.d.ts +++ b/src/main/vite-env.d.ts @@ -3,6 +3,7 @@ interface ImportMetaEnv { readonly MAIN_VITE_STEAMGRIDDB_API_KEY: string; readonly MAIN_VITE_API_URL: string; + readonly MAIN_VITE_ANALYTICS_API_URL: string; readonly MAIN_VITE_AUTH_URL: string; readonly MAIN_VITE_CHECKOUT_URL: string; }