UNPKG

@workflow-manager/runner

Version:

CLI runner for in-memory and markdown workflow orchestration using ATEP-like envelopes

82 lines (81 loc) 2.85 kB
import { resolveAuthToken } from "./config.js"; const DEFAULT_REMOTE_URL = "https://whairnylpdvxxgbygbzu.supabase.co"; const DEFAULT_PUBLISHABLE_KEY = "sb_publishable_t5VATQUjIOtHrtK3wFi5Cw_Q088yz0Z"; function remoteBaseUrl() { return process.env.WORKFLOW_MANAGER_REMOTE_URL ?? DEFAULT_REMOTE_URL; } function publishableKey() { return process.env.WORKFLOW_MANAGER_REMOTE_PUBLISHABLE_KEY ?? DEFAULT_PUBLISHABLE_KEY; } function buildHeaders(body, token) { const headers = { apikey: publishableKey(), }; if (body !== undefined) { headers["Content-Type"] = "application/json"; } if (token) { headers.Authorization = `Bearer ${token}`; } return headers; } async function remoteFetch(path, init = {}, requireAuth = false) { const token = resolveAuthToken(); if (requireAuth && !token) { throw new Error("Not authenticated. Run `wfm auth login --token <token>` first."); } const res = await fetch(`${remoteBaseUrl()}/functions/v1/${path}`, { ...init, headers: { ...buildHeaders(init.body, token), ...(init.headers ?? {}), }, }); const text = await res.text(); const payload = text ? JSON.parse(text) : {}; if (!res.ok) { const message = typeof payload.error === "string" ? payload.error : typeof payload.message === "string" ? payload.message : `Remote request failed with status ${res.status}`; throw new Error(message); } return payload; } export async function fetchWhoAmI() { return remoteFetch("auth-whoami", { method: "GET" }, true); } export async function searchRemoteWorkflows(query) { const params = new URLSearchParams(); if (query.trim()) { params.set("q", query.trim()); } return remoteFetch(`search-workflows?${params.toString()}`, { method: "GET" }); } export async function publishRemoteWorkflow(request) { return remoteFetch("publish-workflow", { method: "POST", body: JSON.stringify(request), }, true); } export async function pullRemoteWorkflow(owner, slug, version) { const params = new URLSearchParams({ owner, slug }); if (version) { params.set("version", version); } return remoteFetch(`pull-workflow?${params.toString()}`, { method: "GET" }); } export async function trackRunTelemetry(payload) { return remoteFetch("track-run-telemetry", { method: "POST", body: JSON.stringify(payload), }, true); } export async function fetchWorkflowRunInsights(workflowKey) { const params = new URLSearchParams(); if (workflowKey) { params.set("workflowKey", workflowKey); } return remoteFetch(`workflow-run-insights${params.toString() ? `?${params.toString()}` : ""}`, { method: "GET" }, true); }