Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 190x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 94x 94x 94x 94x 94x 95x 95x 95x 94x 95x 95x 95x 95x 93x 93x 95x 95x 95x 95x 95x 95x 190x 188x 93x 190x 190x 190x 188x 188x | import { HttpClient } from '@angular/common/http';
import { inject, Injectable } from '@angular/core';
import { MatomoInitializerService } from 'ngx-matomo-client';
import { firstValueFrom, Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class InitService {
apiUrl = "";
isUrlFound$: Subject<boolean> = new Subject();
constructor(private http: HttpClient) { }
async initUrls() {
this.createMatomoConfig();
return this.findApiUrl();
}
async findApiUrl() {
const protocol = window.location.protocol;
const hostname = window.location.hostname.toLowerCase();
const apiUrls = [];
Iif (hostname !== "localhost" && hostname.includes('.')) {
apiUrls.push(protocol + "//api." + hostname);
}
Iif (hostname !== "frontend-service") {
apiUrls.push(protocol + "//" + hostname + ':5001');
}
apiUrls.push(protocol + "//backend-service"); // For ci
const apiUrl: string = "";
for (const url of apiUrls) {
const isUrlValid = await this.checkApiUrl(url);
Eif (isUrlValid) {
// this.apiUrl$.next(url);
this.apiUrl = url;
console.log('found api url', url);
this.isUrlFound$.next(true);
return url;
}
}
this.isUrlFound$.next(false);
return apiUrl;
}
async checkApiUrl(url: string): Promise<boolean> {
try {
const response = await firstValueFrom(this.http.get<any>(url)); // eslint-disable-line @typescript-eslint/no-explicit-any
return typeof response === 'object' && 'twinpad_version' in response;
}
catch (e) {
console.error('catched', e);
return false;
}
}
async createMatomoConfig() {
const matomoInitializer = inject(MatomoInitializerService);
const config = {
siteId: 1,
trackerUrl: "",
};
const foundUrl = await this.findAnalyticsUrl();
Iif (foundUrl) {
config.trackerUrl = foundUrl;
}
// if no matomo found, the initialization will fail gracefully
matomoInitializer.initializeTracker(config);
}
async findAnalyticsUrl() {
const protocol = window.location.protocol;
const hostname = window.location.hostname.toLowerCase();
const analyticsUrls = [
protocol + "//analytics." + hostname,
protocol + "//" + hostname + ":22604"
];
const analyticsUrl: string = "";
for (const url of analyticsUrls) {
const isUrlValid = await this.checkAnalyticsUrl(url + "/matomo.js");
Iif (isUrlValid) {
return url;
}
}
return analyticsUrl;
}
async checkAnalyticsUrl(url: string): Promise<boolean> {
try {
const response = await firstValueFrom(this.http.get(url, { responseType: "text" }));
return response.includes("tracking client");
}
catch (e) {
console.warn('Error fetching analytics url:', e);
return false;
}
}
}
|