From b82840df3b57d0b17f2f58600876c4ee5529b81a Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:53:55 -0300 Subject: [PATCH] feat: add download analytics --- .../events/torrenting/start-game-download.ts | 3 ++ src/main/services/hydra-analytics.ts | 34 +++++++++++++++++++ src/main/vite-env.d.ts | 1 + 3 files changed, 38 insertions(+) create mode 100644 src/main/services/hydra-analytics.ts 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; }