Archived
feat: route profile consumers through sessiond
This commit is contained in:
@@ -9,6 +9,10 @@ export type SessionDaemonAgentProfileResult =
|
||||
| { status: "unavailable"; error: string }
|
||||
| { status: "invalid"; error: string };
|
||||
|
||||
export interface SessionDaemonRequestClient {
|
||||
request(method: string, path: string, body?: unknown): Promise<{ statusCode: number; headers: Record<string, string>; body: string }>;
|
||||
}
|
||||
|
||||
export class SessionDaemonClient {
|
||||
private readonly baseUrl = sessiondHttpUrl();
|
||||
private readonly socketPath = sessiondSocketPath();
|
||||
@@ -19,33 +23,8 @@ export class SessionDaemonClient {
|
||||
return this.requestSocket(method, path, payload);
|
||||
}
|
||||
|
||||
async getActiveAgentProfile(): Promise<SessionDaemonAgentProfileResult> {
|
||||
let response: Awaited<ReturnType<SessionDaemonClient["request"]>>;
|
||||
try {
|
||||
response = await this.request("GET", "/runtime");
|
||||
} catch (error) {
|
||||
return { status: "unavailable", error: errorMessage(error) };
|
||||
}
|
||||
|
||||
if (response.statusCode < 200 || response.statusCode >= 300) {
|
||||
return { status: "unavailable", error: `session daemon runtime request returned HTTP ${String(response.statusCode)}` };
|
||||
}
|
||||
|
||||
let value: unknown;
|
||||
try {
|
||||
value = response.body === "" ? undefined : JSON.parse(response.body);
|
||||
} catch {
|
||||
return { status: "invalid", error: "session daemon runtime response was not valid JSON" };
|
||||
}
|
||||
|
||||
const runtime = parsePiWebRuntimeComponent(value);
|
||||
if (runtime?.component !== "sessiond") {
|
||||
return { status: "invalid", error: "session daemon runtime response was invalid" };
|
||||
}
|
||||
if (runtime.activeAgentProfile === undefined) {
|
||||
return { status: "invalid", error: "session daemon runtime response did not include an active agent profile" };
|
||||
}
|
||||
return { status: "available", profile: runtime.activeAgentProfile };
|
||||
getActiveAgentProfile(): Promise<SessionDaemonAgentProfileResult> {
|
||||
return getSessionDaemonActiveAgentProfile(this);
|
||||
}
|
||||
|
||||
connectWebSocket(path: string): WebSocket {
|
||||
@@ -103,6 +82,35 @@ export class SessionDaemonClient {
|
||||
}
|
||||
}
|
||||
|
||||
export async function getSessionDaemonActiveAgentProfile(client: SessionDaemonRequestClient): Promise<SessionDaemonAgentProfileResult> {
|
||||
let response: Awaited<ReturnType<SessionDaemonRequestClient["request"]>>;
|
||||
try {
|
||||
response = await client.request("GET", "/runtime");
|
||||
} catch (error) {
|
||||
return { status: "unavailable", error: errorMessage(error) };
|
||||
}
|
||||
|
||||
if (response.statusCode < 200 || response.statusCode >= 300) {
|
||||
return { status: "unavailable", error: `session daemon runtime request returned HTTP ${String(response.statusCode)}` };
|
||||
}
|
||||
|
||||
let value: unknown;
|
||||
try {
|
||||
value = response.body === "" ? undefined : JSON.parse(response.body);
|
||||
} catch {
|
||||
return { status: "invalid", error: "session daemon runtime response was not valid JSON" };
|
||||
}
|
||||
|
||||
const runtime = parsePiWebRuntimeComponent(value);
|
||||
if (runtime?.component !== "sessiond") {
|
||||
return { status: "invalid", error: "session daemon runtime response was invalid" };
|
||||
}
|
||||
if (runtime.activeAgentProfile === undefined) {
|
||||
return { status: "invalid", error: "session daemon runtime response did not include an active agent profile" };
|
||||
}
|
||||
return { status: "available", profile: runtime.activeAgentProfile };
|
||||
}
|
||||
|
||||
function errorMessage(error: unknown): string {
|
||||
return error instanceof Error ? error.message : String(error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user