@workflow-manager/runner
Version:
CLI runner for in-memory and markdown workflow orchestration using ATEP-like envelopes
82 lines (81 loc) • 2.85 kB
JavaScript
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);
}