From 4ba41f97158efa0a64bfca1c84d2e128db7a959f Mon Sep 17 00:00:00 2001 From: Bruno Gelatti Date: Tue, 16 Dec 2025 14:07:32 -0300 Subject: [PATCH 1/3] feat: add info method to Analysis class Added public info() method to retrieve analysis metadata including ID, name, run location, and active status. --- src/modules/Analysis/Analysis.ts | 11 ++++++++++- src/modules/Analysis/analysis.types.ts | 10 +++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/modules/Analysis/Analysis.ts b/src/modules/Analysis/Analysis.ts index cedd3b0ce..7efa2599e 100644 --- a/src/modules/Analysis/Analysis.ts +++ b/src/modules/Analysis/Analysis.ts @@ -3,7 +3,7 @@ import TagoIOModule from "../../common/TagoIOModule.ts"; import { openSSEListening } from "../../infrastructure/apiSSE.ts"; import getRegionObj, { setRuntimeRegion } from "../../regions.ts"; import ConsoleService from "../Services/Console.ts"; -import type { AnalysisConstructorParams, AnalysisEnvironment, analysisFunction } from "./analysis.types.ts"; +import type { AnalysisConstructorParams, AnalysisEnvironment, analysisFunction, AnalysisItem } from "./analysis.types.ts"; /** * Analysis execution context for TagoIO @@ -211,6 +211,15 @@ class Analysis extends TagoIOModule { return new Analysis(analysis, params); } + + public async info(): Promise { + const result = await this.doRequest({ + path: "/info", + method: "GET", + }); + + return result; + } } export default Analysis; diff --git a/src/modules/Analysis/analysis.types.ts b/src/modules/Analysis/analysis.types.ts index ceeae6e3d..9075d150c 100644 --- a/src/modules/Analysis/analysis.types.ts +++ b/src/modules/Analysis/analysis.types.ts @@ -1,4 +1,5 @@ import type { Regions, RegionsObj } from "../../regions.ts"; +import type { GenericID } from "../../common/common.types.ts"; type analysisFunction = (context: any, data: any) => any; @@ -24,6 +25,13 @@ interface AnalysisConstructorParams { loadEnvOnProcess?: boolean; } +interface AnalysisItem { + id: GenericID; + name: string; + run_on: "tago" | "external"; + active: boolean; +} + interface AnalysisEnvironment { [key: string]: string; } @@ -40,4 +48,4 @@ interface TagoContext { log: (...args: any[]) => void; } -export type { AnalysisConstructorParams, analysisFunction, AnalysisEnvironment, TagoContext }; +export type { AnalysisConstructorParams, analysisFunction, AnalysisEnvironment, TagoContext, AnalysisItem }; From 8175234b51310f98f48e86f38398f6fa3388315c Mon Sep 17 00:00:00 2001 From: Bruno Gelatti Date: Tue, 16 Dec 2025 14:07:32 -0300 Subject: [PATCH 2/3] refactor: extract getTDeployRegion function and integrate with PDF service Extracted TDeploy region validation logic into reusable getTDeployRegion function. Updated PDF service to dynamically use TDeploy endpoints when configured. --- src/modules/Services/PDF.ts | 5 ++++- src/regions.ts | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/modules/Services/PDF.ts b/src/modules/Services/PDF.ts index b988f9c99..d0b5079a9 100644 --- a/src/modules/Services/PDF.ts +++ b/src/modules/Services/PDF.ts @@ -1,4 +1,5 @@ import TagoIOModule, { type GenericModuleParams } from "../../common/TagoIOModule.ts"; +import { getTDeployRegion } from "../../regions.ts"; interface PDFResult { status: boolean; @@ -92,7 +93,9 @@ class PDFService extends TagoIOModule { */ public async generate(params: PDFParams): Promise { try { - const response = await fetch("https://pdf.middleware.tago.io", { + const tdeploy = getTDeployRegion(this.params.region); + const pdfUri = tdeploy ? `https://pdf.${tdeploy}.tagoio.net` : "https://pdf.middleware.tago.io"; + const response = await fetch(pdfUri, { method: "POST", headers: { "Content-Type": "application/json", diff --git a/src/regions.ts b/src/regions.ts index 96ed60dfc..8e2af69bd 100644 --- a/src/regions.ts +++ b/src/regions.ts @@ -52,6 +52,18 @@ const regionsDefinition: Record = { /** Runtime region cache */ let runtimeRegion: RegionsObj | undefined; +/** + * Extracts TDeploy region configuration if present + * @param region Region configuration + * @returns RegionsObj with TDeploy endpoints or undefined + */ +function getTDeployRegion(region?: Regions | RegionsObj): string { + if (region && typeof region === "object" && "tdeploy" in region && region.tdeploy) { + return region.tdeploy.trim(); + } + return undefined; +} + /** * Get connection URI for Realtime and API * @internal @@ -59,14 +71,12 @@ let runtimeRegion: RegionsObj | undefined; */ function getConnectionURI(region?: Regions | RegionsObj): RegionsObj { // Handle tdeploy in RegionsObj - takes precedence - if (region && typeof region === "object" && "tdeploy" in region && region.tdeploy) { - const tdeploy = region.tdeploy.trim(); - if (tdeploy) { - return { + const tdeploy = getTDeployRegion(region); + if (tdeploy) { + return { api: `https://api.${tdeploy}.tagoio.net`, sse: `https://sse.${tdeploy}.tagoio.net/events`, }; - } } let normalizedRegion = region; @@ -138,4 +148,4 @@ function setRuntimeRegion(region: RegionsObj): void { export default getConnectionURI; export type { Regions, RegionsObj }; -export { regionsDefinition, setRuntimeRegion }; +export { regionsDefinition, setRuntimeRegion, getTDeployRegion }; From 1c009e1fe1015363c3ed8d17c002a0351de988ce Mon Sep 17 00:00:00 2001 From: Bruno Gelatti Date: Tue, 16 Dec 2025 15:12:45 -0300 Subject: [PATCH 3/3] docs: correct getTDeployRegion return type documentation Fixed JSDoc return description to accurately reflect that the function returns a TDeploy id string, not a RegionsObj. --- src/regions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/regions.ts b/src/regions.ts index 8e2af69bd..2ccd5208f 100644 --- a/src/regions.ts +++ b/src/regions.ts @@ -55,7 +55,7 @@ let runtimeRegion: RegionsObj | undefined; /** * Extracts TDeploy region configuration if present * @param region Region configuration - * @returns RegionsObj with TDeploy endpoints or undefined + * @returns TDeploy id or undefined */ function getTDeployRegion(region?: Regions | RegionsObj): string { if (region && typeof region === "object" && "tdeploy" in region && region.tdeploy) {