amogaddy's picture
Integra World Monitor (AGPL-3.0, self-hosted) nello Space: pagina, menu, e arricchimento notizie per la AI (part 7)
9d2d895 verified
Raw
History Blame Contribute Delete
1.85 kB
import { getRpcBaseUrl } from '@/services/rpc-client';
import { premiumFetch } from '@/services/premium-fetch';
import type { RunScenarioRequest, RunScenarioResponse, GetScenarioStatusResponse, ListScenarioTemplatesResponse, ScenarioResult, ScenarioImpactCountry, ScenarioResultTemplate, ScenarioTemplate } from '@/generated/client/worldmonitor/scenario/v1/service_client';
import { ScenarioServiceClient } from '@/services/generated-rpc-clients';
export type {
RunScenarioRequest,
RunScenarioResponse,
GetScenarioStatusResponse,
ListScenarioTemplatesResponse,
ScenarioResult,
ScenarioImpactCountry,
ScenarioResultTemplate,
ScenarioTemplate,
};
// RunScenario + GetScenarioStatus are PRO-gated — premiumFetch injects the
// Clerk Bearer token / API key. ListScenarioTemplates is public but harmless
// to route through the same fetch wrapper.
const client = new ScenarioServiceClient(getRpcBaseUrl(), { fetch: premiumFetch });
/**
* Enqueue a scenario job and return the resulting job id. Server validates
* scenarioId against the template registry (400 on unknown) and enforces
* per-IP 10/min rate limiting at the gateway.
*/
export async function runScenario(
req: RunScenarioRequest,
options?: { signal?: AbortSignal },
): Promise<RunScenarioResponse> {
return client.runScenario(req, { signal: options?.signal });
}
/**
* Poll a scenario job's lifecycle state. Returns status ∈
* {pending, processing, done, failed}; result is populated only when done.
*/
export async function getScenarioStatus(
jobId: string,
options?: { signal?: AbortSignal },
): Promise<GetScenarioStatusResponse> {
return client.getScenarioStatus({ jobId }, { signal: options?.signal });
}
export async function listScenarioTemplates(): Promise<ListScenarioTemplatesResponse> {
return client.listScenarioTemplates({});
}