diff --git a/admin/package-lock.json b/admin/package-lock.json index 39903f3..13d7000 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -8,6 +8,8 @@ "name": "admin", "version": "0.1.0", "dependencies": { + "@bufbuild/connect": "^0.13.0", + "@bufbuild/protobuf": "^2.11.0", "@types/node-cron": "^3.0.11", "argon2": "^0.44.0", "bcrypt": "^5.1.1", @@ -272,6 +274,22 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/connect": { + "version": "0.13.0", + "resolved": "https://registry.npmmirror.com/@bufbuild/connect/-/connect-0.13.0.tgz", + "integrity": "sha512-eZSMbVLyUFtXiZNORgCEvv580xKZeYQdMOWj2i/nxOcpXQcrEzTMTA7SZzWv4k4gveWCOSRoWmYDeOhfWXJv0g==", + "deprecated": "Connect has moved to its own org @connectrpc and has a stable v1. Run `npx @connectrpc/connect-migrate@latest` to update. See https://github.com/connectrpc/connect-es/releases/tag/v0.13.1 for details.", + "license": "Apache-2.0", + "peerDependencies": { + "@bufbuild/protobuf": "^1.2.1" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.11.0", + "resolved": "https://registry.npmmirror.com/@bufbuild/protobuf/-/protobuf-2.11.0.tgz", + "integrity": "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@emnapi/core": { "version": "1.10.0", "dev": true, diff --git a/admin/package.json b/admin/package.json index 9d0a27b..5d20c74 100644 --- a/admin/package.json +++ b/admin/package.json @@ -13,6 +13,8 @@ "test:ui": "playwright test --ui" }, "dependencies": { + "@bufbuild/connect": "^0.13.0", + "@bufbuild/protobuf": "^2.11.0", "@types/node-cron": "^3.0.11", "argon2": "^0.44.0", "bcrypt": "^5.1.1", diff --git a/admin/src/app/api/admin/ai/models/route.ts b/admin/src/app/api/admin/ai/models/route.ts index 3cf4068..bb87549 100644 --- a/admin/src/app/api/admin/ai/models/route.ts +++ b/admin/src/app/api/admin/ai/models/route.ts @@ -1,40 +1,48 @@ import { NextRequest, NextResponse } from "next/server"; -import { RUST_BACKEND_URL, ADMIN_API_SHARED_KEY } from "@/lib/env"; +import { createModel, updateModel, deleteModel } from "@/lib/adminrpc/client"; export const runtime = "nodejs"; -async function adminFetch(path: string, method: string, body?: unknown) { - if (!ADMIN_API_SHARED_KEY) { - return NextResponse.json({ error: "ADMIN_API_SHARED_KEY 未配置" }, { status: 500 }); - } - const res = await fetch(`${RUST_BACKEND_URL}${path}`, { - method, - headers: { "Content-Type": "application/json", "x-admin-api-key": ADMIN_API_SHARED_KEY }, - body: body ? JSON.stringify(body) : undefined, - signal: AbortSignal.timeout(30_000), - }); - const data = await res.json(); - if (!res.ok) return NextResponse.json(data, { status: res.status }); - return NextResponse.json(data); -} - // POST /api/admin/ai/models — create model export async function POST(req: NextRequest) { - return adminFetch("/api/admin/ai/models", "POST", await req.json()); + try { + const body = await req.json(); + const data = await createModel(body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Create model error:", msg); + return NextResponse.json({ error: `创建失败: ${msg}` }, { status: 500 }); + } } // PATCH /api/admin/ai/models?id={id} — update model export async function PATCH(req: NextRequest) { - const { searchParams } = new URL(req.url); - const id = searchParams.get("id"); - if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); - return adminFetch(`/api/admin/ai/models/${id}`, "PATCH", await req.json()); + try { + const { searchParams } = new URL(req.url); + const id = searchParams.get("id"); + if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + const body = await req.json(); + const data = await updateModel(id, body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Update model error:", msg); + return NextResponse.json({ error: `更新失败: ${msg}` }, { status: 500 }); + } } // DELETE /api/admin/ai/models?id={id} — delete model export async function DELETE(req: NextRequest) { - const { searchParams } = new URL(req.url); - const id = searchParams.get("id"); - if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); - return adminFetch(`/api/admin/ai/models/${id}`, "DELETE"); + try { + const { searchParams } = new URL(req.url); + const id = searchParams.get("id"); + if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + const data = await deleteModel(id); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Delete model error:", msg); + return NextResponse.json({ error: `删除失败: ${msg}` }, { status: 500 }); + } } diff --git a/admin/src/app/api/admin/ai/pricing/[id]/route.ts b/admin/src/app/api/admin/ai/pricing/[id]/route.ts index 07bfb72..bc85bf4 100644 --- a/admin/src/app/api/admin/ai/pricing/[id]/route.ts +++ b/admin/src/app/api/admin/ai/pricing/[id]/route.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from "next/server"; -import { RUST_BACKEND_URL, ADMIN_API_SHARED_KEY } from "@/lib/env"; +import { updatePricing } from "@/lib/adminrpc/client"; export const runtime = "nodejs"; @@ -8,18 +8,14 @@ export async function PATCH( req: NextRequest, { params }: { params: Promise<{ id: string }> } ) { - const { id } = await params; - if (!ADMIN_API_SHARED_KEY) { - return NextResponse.json({ error: "ADMIN_API_SHARED_KEY 未配置" }, { status: 500 }); + try { + const { id } = await params; + const body = await req.json(); + const data = await updatePricing(id, body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Update pricing error:", msg); + return NextResponse.json({ error: `更新失败: ${msg}` }, { status: 500 }); } - const body = await req.json(); - const res = await fetch(`${RUST_BACKEND_URL}/api/admin/ai/pricing/${id}`, { - method: "PATCH", - headers: { "Content-Type": "application/json", "x-admin-api-key": ADMIN_API_SHARED_KEY }, - body: JSON.stringify(body), - signal: AbortSignal.timeout(30_000), - }); - const data = await res.json(); - if (!res.ok) return NextResponse.json(data, { status: res.status }); - return NextResponse.json(data); } diff --git a/admin/src/app/api/admin/ai/providers/route.ts b/admin/src/app/api/admin/ai/providers/route.ts index fab02ef..2117605 100644 --- a/admin/src/app/api/admin/ai/providers/route.ts +++ b/admin/src/app/api/admin/ai/providers/route.ts @@ -1,40 +1,48 @@ import { NextRequest, NextResponse } from "next/server"; -import { RUST_BACKEND_URL, ADMIN_API_SHARED_KEY } from "@/lib/env"; +import { createProvider, updateProvider, deleteProvider } from "@/lib/adminrpc/client"; export const runtime = "nodejs"; -async function adminFetch(path: string, method: string, body?: unknown) { - if (!ADMIN_API_SHARED_KEY) { - return NextResponse.json({ error: "ADMIN_API_SHARED_KEY 未配置" }, { status: 500 }); - } - const res = await fetch(`${RUST_BACKEND_URL}${path}`, { - method, - headers: { "Content-Type": "application/json", "x-admin-api-key": ADMIN_API_SHARED_KEY }, - body: body ? JSON.stringify(body) : undefined, - signal: AbortSignal.timeout(30_000), - }); - const data = await res.json(); - if (!res.ok) return NextResponse.json(data, { status: res.status }); - return NextResponse.json(data); -} - // POST /api/admin/ai/providers — create provider export async function POST(req: NextRequest) { - return adminFetch("/api/admin/ai/providers", "POST", await req.json()); + try { + const body = await req.json(); + const data = await createProvider(body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Create provider error:", msg); + return NextResponse.json({ error: `创建失败: ${msg}` }, { status: 500 }); + } } // PATCH /api/admin/ai/providers?id={id} — update provider export async function PATCH(req: NextRequest) { - const { searchParams } = new URL(req.url); - const id = searchParams.get("id"); - if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); - return adminFetch(`/api/admin/ai/providers/${id}`, "PATCH", await req.json()); + try { + const { searchParams } = new URL(req.url); + const id = searchParams.get("id"); + if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + const body = await req.json(); + const data = await updateProvider(id, body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Update provider error:", msg); + return NextResponse.json({ error: `更新失败: ${msg}` }, { status: 500 }); + } } // DELETE /api/admin/ai/providers?id={id} — delete provider export async function DELETE(req: NextRequest) { - const { searchParams } = new URL(req.url); - const id = searchParams.get("id"); - if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); - return adminFetch(`/api/admin/ai/providers/${id}`, "DELETE"); + try { + const { searchParams } = new URL(req.url); + const id = searchParams.get("id"); + if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + const data = await deleteProvider(id); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Delete provider error:", msg); + return NextResponse.json({ error: `删除失败: ${msg}` }, { status: 500 }); + } } diff --git a/admin/src/app/api/admin/ai/versions/route.ts b/admin/src/app/api/admin/ai/versions/route.ts index 5e323e5..3553d0d 100644 --- a/admin/src/app/api/admin/ai/versions/route.ts +++ b/admin/src/app/api/admin/ai/versions/route.ts @@ -1,40 +1,48 @@ import { NextRequest, NextResponse } from "next/server"; -import { RUST_BACKEND_URL, ADMIN_API_SHARED_KEY } from "@/lib/env"; +import { createVersion, updateVersion, deleteVersion } from "@/lib/adminrpc/client"; export const runtime = "nodejs"; -async function adminFetch(path: string, method: string, body?: unknown) { - if (!ADMIN_API_SHARED_KEY) { - return NextResponse.json({ error: "ADMIN_API_SHARED_KEY 未配置" }, { status: 500 }); - } - const res = await fetch(`${RUST_BACKEND_URL}${path}`, { - method, - headers: { "Content-Type": "application/json", "x-admin-api-key": ADMIN_API_SHARED_KEY }, - body: body ? JSON.stringify(body) : undefined, - signal: AbortSignal.timeout(30_000), - }); - const data = await res.json(); - if (!res.ok) return NextResponse.json(data, { status: res.status }); - return NextResponse.json(data); -} - // POST /api/admin/ai/versions — create version export async function POST(req: NextRequest) { - return adminFetch("/api/admin/ai/versions", "POST", await req.json()); + try { + const body = await req.json(); + const data = await createVersion(body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Create version error:", msg); + return NextResponse.json({ error: `创建失败: ${msg}` }, { status: 500 }); + } } // PATCH /api/admin/ai/versions?id={id} — update version export async function PATCH(req: NextRequest) { - const { searchParams } = new URL(req.url); - const id = searchParams.get("id"); - if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); - return adminFetch(`/api/admin/ai/versions/${id}`, "PATCH", await req.json()); + try { + const { searchParams } = new URL(req.url); + const id = searchParams.get("id"); + if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + const body = await req.json(); + const data = await updateVersion(id, body); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Update version error:", msg); + return NextResponse.json({ error: `更新失败: ${msg}` }, { status: 500 }); + } } // DELETE /api/admin/ai/versions?id={id} — delete version export async function DELETE(req: NextRequest) { - const { searchParams } = new URL(req.url); - const id = searchParams.get("id"); - if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); - return adminFetch(`/api/admin/ai/versions/${id}`, "DELETE"); + try { + const { searchParams } = new URL(req.url); + const id = searchParams.get("id"); + if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + const data = await deleteVersion(id); + return NextResponse.json(data); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + console.error("Delete version error:", msg); + return NextResponse.json({ error: `删除失败: ${msg}` }, { status: 500 }); + } } diff --git a/admin/src/app/api/platform/ai/sync/route.ts b/admin/src/app/api/platform/ai/sync/route.ts index fd8d060..0081922 100644 --- a/admin/src/app/api/platform/ai/sync/route.ts +++ b/admin/src/app/api/platform/ai/sync/route.ts @@ -1,48 +1,18 @@ import { NextResponse } from "next/server"; -import { RUST_BACKEND_URL, ADMIN_API_SHARED_KEY } from "@/lib/env"; +import { syncModels } from "@/lib/adminrpc/client"; export const runtime = "nodejs"; /** - * Trigger AI model sync via Rust backend. - * Calls POST /api/admin/ai/sync on the Rust app. + * Trigger AI model sync via adminrpc gRPC. */ export async function POST() { - if (!ADMIN_API_SHARED_KEY) { - return NextResponse.json( - { error: "ADMIN_API_SHARED_KEY 未配置" }, - { status: 500 } - ); - } - try { - const url = `${RUST_BACKEND_URL}/api/admin/ai/sync`; - const res = await fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - "x-admin-api-key": ADMIN_API_SHARED_KEY, - }, - // Timeout: 2 minutes for sync - signal: AbortSignal.timeout(120_000), - }); - - if (!res.ok) { - const body = await res.text(); - return NextResponse.json( - { error: `同步失败: ${res.status} ${body}` }, - { status: res.status } - ); - } - - const data = await res.json(); + const data = await syncModels(); return NextResponse.json(data); } catch (e) { const msg = e instanceof Error ? e.message : String(e); console.error("AI sync error:", msg); - return NextResponse.json( - { error: `同步失败: ${msg}` }, - { status: 500 } - ); + return NextResponse.json({ error: `同步失败: ${msg}` }, { status: 500 }); } } diff --git a/admin/src/app/api/platform/alerts/check/route.ts b/admin/src/app/api/platform/alerts/check/route.ts index e877a60..0e28d91 100644 --- a/admin/src/app/api/platform/alerts/check/route.ts +++ b/admin/src/app/api/platform/alerts/check/route.ts @@ -1,47 +1,18 @@ import { NextResponse } from "next/server"; -import { RUST_BACKEND_URL, ADMIN_API_SHARED_KEY } from "@/lib/env"; +import { checkAlerts } from "@/lib/adminrpc/client"; export const runtime = "nodejs"; /** - * Trigger workspace billing alert check via Rust backend. - * Calls POST /api/admin/alerts/check on the Rust app. + * Trigger workspace billing alert check via adminrpc gRPC. */ export async function POST() { - if (!ADMIN_API_SHARED_KEY) { - return NextResponse.json( - { error: "ADMIN_API_SHARED_KEY 未配置" }, - { status: 500 } - ); - } - try { - const url = `${RUST_BACKEND_URL}/api/admin/alerts/check`; - const res = await fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - "x-admin-api-key": ADMIN_API_SHARED_KEY, - }, - signal: AbortSignal.timeout(60_000), - }); - - if (!res.ok) { - const body = await res.text(); - return NextResponse.json( - { error: `检查失败: ${res.status} ${body}` }, - { status: res.status } - ); - } - - const data = await res.json(); + const data = await checkAlerts(); return NextResponse.json(data); } catch (e) { const msg = e instanceof Error ? e.message : String(e); console.error("Alert check error:", msg); - return NextResponse.json( - { error: `检查失败: ${msg}` }, - { status: 500 } - ); + return NextResponse.json({ error: `检查失败: ${msg}` }, { status: 500 }); } } diff --git a/admin/src/lib/adminrpc/client.ts b/admin/src/lib/adminrpc/client.ts new file mode 100644 index 0000000..77f834c --- /dev/null +++ b/admin/src/lib/adminrpc/client.ts @@ -0,0 +1,270 @@ +/** + * AdminRPC gRPC client for Node.js environment. + * + * Uses raw HTTP/1.1 with the tonic gRPC server. + * All methods pass body_json as a JSON string (matching the proto design). + */ + +import { create, toBinary, fromBinary } from "@bufbuild/protobuf"; +import type { IncomingMessage } from "node:http"; +import { ADMIN_RPC_URL } from "@/lib/env"; + +// Import schemas from generated proto +import * as admin from "./generated/proto/admin_pb"; + +// ─── Low-level gRPC-Web over HTTP/1.1 ──────────────────────────────────────── + +function grpcRequest( + baseUrl: string, + servicePath: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + schema: any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + responseSchema: any, + body: Uint8Array, +): Promise { + return new Promise((resolve, reject) => { + const url = new URL(baseUrl); + const isHttps = url.protocol === "https:"; + // eslint-disable-next-line @typescript-eslint/no-require-imports + const http = (isHttps ? require("node:https") : require("node:http")) as typeof import("node:http"); + + const req = http.request( + { + hostname: url.hostname, + port: url.port || (isHttps ? 443 : 80), + path: servicePath, + method: "POST", + headers: { + "Content-Type": "application/grpc-web+proto", + "X-Grpc-Web": "1", + "TE": "trailers", + "User-Agent": "admin-module/1.0", + "Content-Length": body.byteLength, + }, + }, + (res: IncomingMessage) => { + const chunks: Buffer[] = []; + res.on("data", (chunk: Buffer) => chunks.push(chunk)); + res.on("end", () => { + const data = Buffer.concat(chunks); + if (data.length === 0) { + const grpcStatus = res.headers["grpc-status"]; + if (grpcStatus && grpcStatus !== "0") { + reject(new Error(`gRPC error ${grpcStatus}: ${res.headers["grpc-message"] || ""}`)); + return; + } + resolve(new Uint8Array(0)); + return; + } + // gRPC-web body format: [0x00, 4-byte big-endian length, payload...] + if (data[0] === 0x00 && data.length > 5) { + const bodyBytes = data.slice(5); + resolve(new Uint8Array(bodyBytes.buffer, bodyBytes.byteOffset, bodyBytes.byteLength)); + } else { + resolve(new Uint8Array(data.buffer, data.byteOffset, data.byteLength)); + } + }); + }, + ); + req.on("error", reject); + req.write(body); + req.end(); + }); +} + +// ─── Message encoding / decoding ────────────────────────────────────────────── + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function encode(schema: any, init: Record): Uint8Array { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const msg = create(schema as any, init as any); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return toBinary(schema as any, msg as any); +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function decode(schema: any, bytes: Uint8Array): any { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return fromBinary(schema as any, bytes) as any; +} + +// ─── AI: Sync Models ────────────────────────────────────────────────────────── + +export async function syncModels(): Promise { + const body = encode(admin.SyncModelsRequestSchema, {}); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/SyncModels", + admin.SyncModelsRequestSchema, + admin.SyncModelsResponseSchema, + body, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.SyncModelsResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +// ─── AI: Check Alerts ───────────────────────────────────────────────────────── + +export async function checkAlerts(): Promise { + const body = encode(admin.CheckAlertsRequestSchema, {}); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/CheckAlerts", + admin.CheckAlertsRequestSchema, + admin.CheckAlertsResponseSchema, + body, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.CheckAlertsResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +// ─── AI: Provider CRUD ──────────────────────────────────────────────────────── + +export async function createProvider(body: unknown): Promise { + const msgBody = encode(admin.CreateProviderRequestSchema, { bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/CreateProvider", + admin.CreateProviderRequestSchema, + admin.ProviderResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.ProviderResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +export async function updateProvider(id: string, body: unknown): Promise { + const msgBody = encode(admin.UpdateProviderRequestSchema, { id, bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/UpdateProvider", + admin.UpdateProviderRequestSchema, + admin.ProviderResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.ProviderResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +export async function deleteProvider(id: string): Promise<{ deleted: boolean }> { + const msgBody = encode(admin.DeleteProviderRequestSchema, { id }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/DeleteProvider", + admin.DeleteProviderRequestSchema, + admin.DeleteResponseSchema, + msgBody, + ); + if (bytes.length === 0) return { deleted: false }; + const resp = decode(admin.DeleteResponseSchema, bytes); + return { deleted: resp.deleted }; +} + +// ─── AI: Model CRUD ─────────────────────────────────────────────────────────── + +export async function createModel(body: unknown): Promise { + const msgBody = encode(admin.CreateModelRequestSchema, { bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/CreateModel", + admin.CreateModelRequestSchema, + admin.ModelResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.ModelResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +export async function updateModel(id: string, body: unknown): Promise { + const msgBody = encode(admin.UpdateModelRequestSchema, { id, bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/UpdateModel", + admin.UpdateModelRequestSchema, + admin.ModelResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.ModelResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +export async function deleteModel(id: string): Promise<{ deleted: boolean }> { + const msgBody = encode(admin.DeleteModelRequestSchema, { id }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/DeleteModel", + admin.DeleteModelRequestSchema, + admin.DeleteResponseSchema, + msgBody, + ); + if (bytes.length === 0) return { deleted: false }; + const resp = decode(admin.DeleteResponseSchema, bytes); + return { deleted: resp.deleted }; +} + +// ─── AI: Version CRUD ───────────────────────────────────────────────────────── + +export async function createVersion(body: unknown): Promise { + const msgBody = encode(admin.CreateVersionRequestSchema, { bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/CreateVersion", + admin.CreateVersionRequestSchema, + admin.VersionResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.VersionResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +export async function updateVersion(id: string, body: unknown): Promise { + const msgBody = encode(admin.UpdateVersionRequestSchema, { id, bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/UpdateVersion", + admin.UpdateVersionRequestSchema, + admin.VersionResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.VersionResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} + +export async function deleteVersion(id: string): Promise<{ deleted: boolean }> { + const msgBody = encode(admin.DeleteVersionRequestSchema, { id }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/DeleteVersion", + admin.DeleteVersionRequestSchema, + admin.DeleteResponseSchema, + msgBody, + ); + if (bytes.length === 0) return { deleted: false }; + const resp = decode(admin.DeleteResponseSchema, bytes); + return { deleted: resp.deleted }; +} + +// ─── AI: Pricing Update ─────────────────────────────────────────────────────── + +export async function updatePricing(id: string, body: unknown): Promise { + const msgBody = encode(admin.UpdatePricingRequestSchema, { id, bodyJson: JSON.stringify(body) }); + const bytes = await grpcRequest( + ADMIN_RPC_URL, + "/admin.SessionAdmin/UpdatePricing", + admin.UpdatePricingRequestSchema, + admin.PricingResponseSchema, + msgBody, + ); + if (bytes.length === 0) return {}; + const resp = decode(admin.PricingResponseSchema, bytes); + return JSON.parse(resp.bodyJson || "{}"); +} diff --git a/admin/src/lib/adminrpc/generated/proto/admin_connect.d.ts b/admin/src/lib/adminrpc/generated/proto/admin_connect.d.ts new file mode 100644 index 0000000..88c4971 --- /dev/null +++ b/admin/src/lib/adminrpc/generated/proto/admin_connect.d.ts @@ -0,0 +1,225 @@ +// @generated by protoc-gen-connect-es v0.13.0 +// @generated from file proto/admin.proto (package admin, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import { CheckAlertsRequest, CheckAlertsResponse, CreateModelRequest, CreateProviderRequest, CreateVersionRequest, DeleteModelRequest, DeleteProviderRequest, DeleteResponse, DeleteVersionRequest, ExportMetricsCsvRequest, ExportMetricsCsvResponse, GetMetricsRequest, GetMetricsResponse, GetUserInfoRequest, GetUserInfoResponse, GetUserStatusRequest, GetUserStatusResponse, GetWorkspaceOnlineUsersRequest, GetWorkspaceOnlineUsersResponse, IsUserOnlineRequest, IsUserOnlineResponse, KickUserFromWorkspaceRequest, KickUserFromWorkspaceResponse, KickUserRequest, KickUserResponse, ListUserSessionsRequest, ListUserSessionsResponse, ListWorkspaceSessionsRequest, ListWorkspaceSessionsResponse, ModelResponse, PricingResponse, ProviderResponse, SyncModelsRequest, SyncModelsResponse, UpdateModelRequest, UpdatePricingRequest, UpdateProviderRequest, UpdateVersionRequest, VersionResponse } from "./admin_pb.js"; +import { MethodKind } from "@bufbuild/protobuf"; + +/** + * @generated from service admin.SessionAdmin + */ +export declare const SessionAdmin: { + readonly typeName: "admin.SessionAdmin", + readonly methods: { + /** + * @generated from rpc admin.SessionAdmin.ListWorkspaceSessions + */ + readonly listWorkspaceSessions: { + readonly name: "ListWorkspaceSessions", + readonly I: typeof ListWorkspaceSessionsRequest, + readonly O: typeof ListWorkspaceSessionsResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.ListUserSessions + */ + readonly listUserSessions: { + readonly name: "ListUserSessions", + readonly I: typeof ListUserSessionsRequest, + readonly O: typeof ListUserSessionsResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.KickUserFromWorkspace + */ + readonly kickUserFromWorkspace: { + readonly name: "KickUserFromWorkspace", + readonly I: typeof KickUserFromWorkspaceRequest, + readonly O: typeof KickUserFromWorkspaceResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.KickUser + */ + readonly kickUser: { + readonly name: "KickUser", + readonly I: typeof KickUserRequest, + readonly O: typeof KickUserResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetUserStatus + */ + readonly getUserStatus: { + readonly name: "GetUserStatus", + readonly I: typeof GetUserStatusRequest, + readonly O: typeof GetUserStatusResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetUserInfo + */ + readonly getUserInfo: { + readonly name: "GetUserInfo", + readonly I: typeof GetUserInfoRequest, + readonly O: typeof GetUserInfoResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetWorkspaceOnlineUsers + */ + readonly getWorkspaceOnlineUsers: { + readonly name: "GetWorkspaceOnlineUsers", + readonly I: typeof GetWorkspaceOnlineUsersRequest, + readonly O: typeof GetWorkspaceOnlineUsersResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.IsUserOnline + */ + readonly isUserOnline: { + readonly name: "IsUserOnline", + readonly I: typeof IsUserOnlineRequest, + readonly O: typeof IsUserOnlineResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetMetrics + */ + readonly getMetrics: { + readonly name: "GetMetrics", + readonly I: typeof GetMetricsRequest, + readonly O: typeof GetMetricsResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.ExportMetricsCsv + */ + readonly exportMetricsCsv: { + readonly name: "ExportMetricsCsv", + readonly I: typeof ExportMetricsCsvRequest, + readonly O: typeof ExportMetricsCsvResponse, + readonly kind: MethodKind.Unary, + }, + /** + * AI + * + * @generated from rpc admin.SessionAdmin.SyncModels + */ + readonly syncModels: { + readonly name: "SyncModels", + readonly I: typeof SyncModelsRequest, + readonly O: typeof SyncModelsResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.CheckAlerts + */ + readonly checkAlerts: { + readonly name: "CheckAlerts", + readonly I: typeof CheckAlertsRequest, + readonly O: typeof CheckAlertsResponse, + readonly kind: MethodKind.Unary, + }, + /** + * AI Provider + * + * @generated from rpc admin.SessionAdmin.CreateProvider + */ + readonly createProvider: { + readonly name: "CreateProvider", + readonly I: typeof CreateProviderRequest, + readonly O: typeof ProviderResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateProvider + */ + readonly updateProvider: { + readonly name: "UpdateProvider", + readonly I: typeof UpdateProviderRequest, + readonly O: typeof ProviderResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteProvider + */ + readonly deleteProvider: { + readonly name: "DeleteProvider", + readonly I: typeof DeleteProviderRequest, + readonly O: typeof DeleteResponse, + readonly kind: MethodKind.Unary, + }, + /** + * AI Model + * + * @generated from rpc admin.SessionAdmin.CreateModel + */ + readonly createModel: { + readonly name: "CreateModel", + readonly I: typeof CreateModelRequest, + readonly O: typeof ModelResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateModel + */ + readonly updateModel: { + readonly name: "UpdateModel", + readonly I: typeof UpdateModelRequest, + readonly O: typeof ModelResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteModel + */ + readonly deleteModel: { + readonly name: "DeleteModel", + readonly I: typeof DeleteModelRequest, + readonly O: typeof DeleteResponse, + readonly kind: MethodKind.Unary, + }, + /** + * AI Version + * + * @generated from rpc admin.SessionAdmin.CreateVersion + */ + readonly createVersion: { + readonly name: "CreateVersion", + readonly I: typeof CreateVersionRequest, + readonly O: typeof VersionResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateVersion + */ + readonly updateVersion: { + readonly name: "UpdateVersion", + readonly I: typeof UpdateVersionRequest, + readonly O: typeof VersionResponse, + readonly kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteVersion + */ + readonly deleteVersion: { + readonly name: "DeleteVersion", + readonly I: typeof DeleteVersionRequest, + readonly O: typeof DeleteResponse, + readonly kind: MethodKind.Unary, + }, + /** + * AI Pricing + * + * @generated from rpc admin.SessionAdmin.UpdatePricing + */ + readonly updatePricing: { + readonly name: "UpdatePricing", + readonly I: typeof UpdatePricingRequest, + readonly O: typeof PricingResponse, + readonly kind: MethodKind.Unary, + }, + } +}; + diff --git a/admin/src/lib/adminrpc/generated/proto/admin_connect.js b/admin/src/lib/adminrpc/generated/proto/admin_connect.js new file mode 100644 index 0000000..b359311 --- /dev/null +++ b/admin/src/lib/adminrpc/generated/proto/admin_connect.js @@ -0,0 +1,225 @@ +// @generated by protoc-gen-connect-es v0.13.0 +// @generated from file proto/admin.proto (package admin, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import { CheckAlertsRequest, CheckAlertsResponse, CreateModelRequest, CreateProviderRequest, CreateVersionRequest, DeleteModelRequest, DeleteProviderRequest, DeleteResponse, DeleteVersionRequest, ExportMetricsCsvRequest, ExportMetricsCsvResponse, GetMetricsRequest, GetMetricsResponse, GetUserInfoRequest, GetUserInfoResponse, GetUserStatusRequest, GetUserStatusResponse, GetWorkspaceOnlineUsersRequest, GetWorkspaceOnlineUsersResponse, IsUserOnlineRequest, IsUserOnlineResponse, KickUserFromWorkspaceRequest, KickUserFromWorkspaceResponse, KickUserRequest, KickUserResponse, ListUserSessionsRequest, ListUserSessionsResponse, ListWorkspaceSessionsRequest, ListWorkspaceSessionsResponse, ModelResponse, PricingResponse, ProviderResponse, SyncModelsRequest, SyncModelsResponse, UpdateModelRequest, UpdatePricingRequest, UpdateProviderRequest, UpdateVersionRequest, VersionResponse } from "./admin_pb.js"; +import { MethodKind } from "@bufbuild/protobuf"; + +/** + * @generated from service admin.SessionAdmin + */ +export const SessionAdmin = { + typeName: "admin.SessionAdmin", + methods: { + /** + * @generated from rpc admin.SessionAdmin.ListWorkspaceSessions + */ + listWorkspaceSessions: { + name: "ListWorkspaceSessions", + I: ListWorkspaceSessionsRequest, + O: ListWorkspaceSessionsResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.ListUserSessions + */ + listUserSessions: { + name: "ListUserSessions", + I: ListUserSessionsRequest, + O: ListUserSessionsResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.KickUserFromWorkspace + */ + kickUserFromWorkspace: { + name: "KickUserFromWorkspace", + I: KickUserFromWorkspaceRequest, + O: KickUserFromWorkspaceResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.KickUser + */ + kickUser: { + name: "KickUser", + I: KickUserRequest, + O: KickUserResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetUserStatus + */ + getUserStatus: { + name: "GetUserStatus", + I: GetUserStatusRequest, + O: GetUserStatusResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetUserInfo + */ + getUserInfo: { + name: "GetUserInfo", + I: GetUserInfoRequest, + O: GetUserInfoResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetWorkspaceOnlineUsers + */ + getWorkspaceOnlineUsers: { + name: "GetWorkspaceOnlineUsers", + I: GetWorkspaceOnlineUsersRequest, + O: GetWorkspaceOnlineUsersResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.IsUserOnline + */ + isUserOnline: { + name: "IsUserOnline", + I: IsUserOnlineRequest, + O: IsUserOnlineResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.GetMetrics + */ + getMetrics: { + name: "GetMetrics", + I: GetMetricsRequest, + O: GetMetricsResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.ExportMetricsCsv + */ + exportMetricsCsv: { + name: "ExportMetricsCsv", + I: ExportMetricsCsvRequest, + O: ExportMetricsCsvResponse, + kind: MethodKind.Unary, + }, + /** + * AI + * + * @generated from rpc admin.SessionAdmin.SyncModels + */ + syncModels: { + name: "SyncModels", + I: SyncModelsRequest, + O: SyncModelsResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.CheckAlerts + */ + checkAlerts: { + name: "CheckAlerts", + I: CheckAlertsRequest, + O: CheckAlertsResponse, + kind: MethodKind.Unary, + }, + /** + * AI Provider + * + * @generated from rpc admin.SessionAdmin.CreateProvider + */ + createProvider: { + name: "CreateProvider", + I: CreateProviderRequest, + O: ProviderResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateProvider + */ + updateProvider: { + name: "UpdateProvider", + I: UpdateProviderRequest, + O: ProviderResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteProvider + */ + deleteProvider: { + name: "DeleteProvider", + I: DeleteProviderRequest, + O: DeleteResponse, + kind: MethodKind.Unary, + }, + /** + * AI Model + * + * @generated from rpc admin.SessionAdmin.CreateModel + */ + createModel: { + name: "CreateModel", + I: CreateModelRequest, + O: ModelResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateModel + */ + updateModel: { + name: "UpdateModel", + I: UpdateModelRequest, + O: ModelResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteModel + */ + deleteModel: { + name: "DeleteModel", + I: DeleteModelRequest, + O: DeleteResponse, + kind: MethodKind.Unary, + }, + /** + * AI Version + * + * @generated from rpc admin.SessionAdmin.CreateVersion + */ + createVersion: { + name: "CreateVersion", + I: CreateVersionRequest, + O: VersionResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateVersion + */ + updateVersion: { + name: "UpdateVersion", + I: UpdateVersionRequest, + O: VersionResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteVersion + */ + deleteVersion: { + name: "DeleteVersion", + I: DeleteVersionRequest, + O: DeleteResponse, + kind: MethodKind.Unary, + }, + /** + * AI Pricing + * + * @generated from rpc admin.SessionAdmin.UpdatePricing + */ + updatePricing: { + name: "UpdatePricing", + I: UpdatePricingRequest, + O: PricingResponse, + kind: MethodKind.Unary, + }, + } +}; + diff --git a/admin/src/lib/adminrpc/generated/proto/admin_pb.d.ts b/admin/src/lib/adminrpc/generated/proto/admin_pb.d.ts new file mode 100644 index 0000000..c26b6d9 --- /dev/null +++ b/admin/src/lib/adminrpc/generated/proto/admin_pb.d.ts @@ -0,0 +1,1017 @@ +// @generated by protoc-gen-es v2.11.0 +// @generated from file proto/admin.proto (package admin, syntax proto3) +/* eslint-disable */ + +import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import type { Message } from "@bufbuild/protobuf"; +import type { Timestamp } from "@bufbuild/protobuf/wkt"; + +/** + * Describes the file proto/admin.proto. + */ +export declare const file_proto_admin: GenFile; + +/** + * @generated from message admin.UserSession + */ +export declare type UserSession = Message<"admin.UserSession"> & { + /** + * @generated from field: string session_id = 1; + */ + sessionId: string; + + /** + * @generated from field: string user_id = 2; + */ + userId: string; + + /** + * @generated from field: string workspace_id = 3; + */ + workspaceId: string; + + /** + * @generated from field: optional string ip_address = 4; + */ + ipAddress?: string; + + /** + * @generated from field: optional string user_agent = 5; + */ + userAgent?: string; + + /** + * @generated from field: google.protobuf.Timestamp connected_at = 6; + */ + connectedAt?: Timestamp; + + /** + * @generated from field: google.protobuf.Timestamp last_heartbeat = 7; + */ + lastHeartbeat?: Timestamp; +}; + +/** + * Describes the message admin.UserSession. + * Use `create(UserSessionSchema)` to create a new message. + */ +export declare const UserSessionSchema: GenMessage; + +/** + * @generated from message admin.SessionInfo + */ +export declare type SessionInfo = Message<"admin.SessionInfo"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; + + /** + * @generated from field: uint32 session_count = 2; + */ + sessionCount: number; + + /** + * @generated from field: repeated string workspaces = 3; + */ + workspaces: string[]; + + /** + * @generated from field: optional admin.UserSession latest_session = 4; + */ + latestSession?: UserSession; +}; + +/** + * Describes the message admin.SessionInfo. + * Use `create(SessionInfoSchema)` to create a new message. + */ +export declare const SessionInfoSchema: GenMessage; + +/** + * @generated from message admin.ListWorkspaceSessionsRequest + */ +export declare type ListWorkspaceSessionsRequest = Message<"admin.ListWorkspaceSessionsRequest"> & { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId: string; +}; + +/** + * Describes the message admin.ListWorkspaceSessionsRequest. + * Use `create(ListWorkspaceSessionsRequestSchema)` to create a new message. + */ +export declare const ListWorkspaceSessionsRequestSchema: GenMessage; + +/** + * @generated from message admin.ListWorkspaceSessionsResponse + */ +export declare type ListWorkspaceSessionsResponse = Message<"admin.ListWorkspaceSessionsResponse"> & { + /** + * @generated from field: repeated admin.UserSession sessions = 1; + */ + sessions: UserSession[]; +}; + +/** + * Describes the message admin.ListWorkspaceSessionsResponse. + * Use `create(ListWorkspaceSessionsResponseSchema)` to create a new message. + */ +export declare const ListWorkspaceSessionsResponseSchema: GenMessage; + +/** + * @generated from message admin.ListUserSessionsRequest + */ +export declare type ListUserSessionsRequest = Message<"admin.ListUserSessionsRequest"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; +}; + +/** + * Describes the message admin.ListUserSessionsRequest. + * Use `create(ListUserSessionsRequestSchema)` to create a new message. + */ +export declare const ListUserSessionsRequestSchema: GenMessage; + +/** + * @generated from message admin.ListUserSessionsResponse + */ +export declare type ListUserSessionsResponse = Message<"admin.ListUserSessionsResponse"> & { + /** + * @generated from field: repeated admin.UserSession sessions = 1; + */ + sessions: UserSession[]; +}; + +/** + * Describes the message admin.ListUserSessionsResponse. + * Use `create(ListUserSessionsResponseSchema)` to create a new message. + */ +export declare const ListUserSessionsResponseSchema: GenMessage; + +/** + * @generated from message admin.KickUserFromWorkspaceRequest + */ +export declare type KickUserFromWorkspaceRequest = Message<"admin.KickUserFromWorkspaceRequest"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; + + /** + * @generated from field: string workspace_id = 2; + */ + workspaceId: string; +}; + +/** + * Describes the message admin.KickUserFromWorkspaceRequest. + * Use `create(KickUserFromWorkspaceRequestSchema)` to create a new message. + */ +export declare const KickUserFromWorkspaceRequestSchema: GenMessage; + +/** + * @generated from message admin.KickUserFromWorkspaceResponse + */ +export declare type KickUserFromWorkspaceResponse = Message<"admin.KickUserFromWorkspaceResponse"> & { + /** + * @generated from field: uint32 kicked_count = 1; + */ + kickedCount: number; +}; + +/** + * Describes the message admin.KickUserFromWorkspaceResponse. + * Use `create(KickUserFromWorkspaceResponseSchema)` to create a new message. + */ +export declare const KickUserFromWorkspaceResponseSchema: GenMessage; + +/** + * @generated from message admin.KickUserRequest + */ +export declare type KickUserRequest = Message<"admin.KickUserRequest"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; +}; + +/** + * Describes the message admin.KickUserRequest. + * Use `create(KickUserRequestSchema)` to create a new message. + */ +export declare const KickUserRequestSchema: GenMessage; + +/** + * @generated from message admin.KickUserResponse + */ +export declare type KickUserResponse = Message<"admin.KickUserResponse"> & { + /** + * @generated from field: uint32 kicked_count = 1; + */ + kickedCount: number; +}; + +/** + * Describes the message admin.KickUserResponse. + * Use `create(KickUserResponseSchema)` to create a new message. + */ +export declare const KickUserResponseSchema: GenMessage; + +/** + * @generated from message admin.GetUserStatusRequest + */ +export declare type GetUserStatusRequest = Message<"admin.GetUserStatusRequest"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; +}; + +/** + * Describes the message admin.GetUserStatusRequest. + * Use `create(GetUserStatusRequestSchema)` to create a new message. + */ +export declare const GetUserStatusRequestSchema: GenMessage; + +/** + * @generated from message admin.GetUserStatusResponse + */ +export declare type GetUserStatusResponse = Message<"admin.GetUserStatusResponse"> & { + /** + * @generated from field: admin.OnlineStatus status = 1; + */ + status: OnlineStatus; +}; + +/** + * Describes the message admin.GetUserStatusResponse. + * Use `create(GetUserStatusResponseSchema)` to create a new message. + */ +export declare const GetUserStatusResponseSchema: GenMessage; + +/** + * @generated from message admin.GetUserInfoRequest + */ +export declare type GetUserInfoRequest = Message<"admin.GetUserInfoRequest"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; +}; + +/** + * Describes the message admin.GetUserInfoRequest. + * Use `create(GetUserInfoRequestSchema)` to create a new message. + */ +export declare const GetUserInfoRequestSchema: GenMessage; + +/** + * @generated from message admin.GetUserInfoResponse + */ +export declare type GetUserInfoResponse = Message<"admin.GetUserInfoResponse"> & { + /** + * @generated from field: optional admin.SessionInfo info = 1; + */ + info?: SessionInfo; +}; + +/** + * Describes the message admin.GetUserInfoResponse. + * Use `create(GetUserInfoResponseSchema)` to create a new message. + */ +export declare const GetUserInfoResponseSchema: GenMessage; + +/** + * @generated from message admin.GetWorkspaceOnlineUsersRequest + */ +export declare type GetWorkspaceOnlineUsersRequest = Message<"admin.GetWorkspaceOnlineUsersRequest"> & { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId: string; +}; + +/** + * Describes the message admin.GetWorkspaceOnlineUsersRequest. + * Use `create(GetWorkspaceOnlineUsersRequestSchema)` to create a new message. + */ +export declare const GetWorkspaceOnlineUsersRequestSchema: GenMessage; + +/** + * @generated from message admin.GetWorkspaceOnlineUsersResponse + */ +export declare type GetWorkspaceOnlineUsersResponse = Message<"admin.GetWorkspaceOnlineUsersResponse"> & { + /** + * @generated from field: repeated string user_ids = 1; + */ + userIds: string[]; +}; + +/** + * Describes the message admin.GetWorkspaceOnlineUsersResponse. + * Use `create(GetWorkspaceOnlineUsersResponseSchema)` to create a new message. + */ +export declare const GetWorkspaceOnlineUsersResponseSchema: GenMessage; + +/** + * @generated from message admin.IsUserOnlineRequest + */ +export declare type IsUserOnlineRequest = Message<"admin.IsUserOnlineRequest"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; +}; + +/** + * Describes the message admin.IsUserOnlineRequest. + * Use `create(IsUserOnlineRequestSchema)` to create a new message. + */ +export declare const IsUserOnlineRequestSchema: GenMessage; + +/** + * @generated from message admin.IsUserOnlineResponse + */ +export declare type IsUserOnlineResponse = Message<"admin.IsUserOnlineResponse"> & { + /** + * @generated from field: bool online = 1; + */ + online: boolean; +}; + +/** + * Describes the message admin.IsUserOnlineResponse. + * Use `create(IsUserOnlineResponseSchema)` to create a new message. + */ +export declare const IsUserOnlineResponseSchema: GenMessage; + +/** + * @generated from message admin.GetMetricsRequest + */ +export declare type GetMetricsRequest = Message<"admin.GetMetricsRequest"> & { + /** + * filter by instance_id substring + * + * @generated from field: string instance_filter = 1; + */ + instanceFilter: string; + + /** + * max snapshots per instance (default 100) + * + * @generated from field: uint32 limit = 2; + */ + limit: number; +}; + +/** + * Describes the message admin.GetMetricsRequest. + * Use `create(GetMetricsRequestSchema)` to create a new message. + */ +export declare const GetMetricsRequestSchema: GenMessage; + +/** + * @generated from message admin.GetMetricsResponse + */ +export declare type GetMetricsResponse = Message<"admin.GetMetricsResponse"> & { + /** + * @generated from field: repeated admin.InstanceMetrics instances = 1; + */ + instances: InstanceMetrics[]; +}; + +/** + * Describes the message admin.GetMetricsResponse. + * Use `create(GetMetricsResponseSchema)` to create a new message. + */ +export declare const GetMetricsResponseSchema: GenMessage; + +/** + * @generated from message admin.InstanceMetrics + */ +export declare type InstanceMetrics = Message<"admin.InstanceMetrics"> & { + /** + * @generated from field: string instance_id = 1; + */ + instanceId: string; + + /** + * @generated from field: int64 timestamp_secs = 2; + */ + timestampSecs: bigint; + + /** + * HTTP metrics, key = metric name, value = JSON value + * + * @generated from field: map http = 3; + */ + http: { [key: string]: string }; + + /** + * Room/room metrics + * + * @generated from field: map room = 4; + */ + room: { [key: string]: string }; +}; + +/** + * Describes the message admin.InstanceMetrics. + * Use `create(InstanceMetricsSchema)` to create a new message. + */ +export declare const InstanceMetricsSchema: GenMessage; + +/** + * @generated from message admin.ExportMetricsCsvRequest + */ +export declare type ExportMetricsCsvRequest = Message<"admin.ExportMetricsCsvRequest"> & { + /** + * @generated from field: string instance_filter = 1; + */ + instanceFilter: string; +}; + +/** + * Describes the message admin.ExportMetricsCsvRequest. + * Use `create(ExportMetricsCsvRequestSchema)` to create a new message. + */ +export declare const ExportMetricsCsvRequestSchema: GenMessage; + +/** + * @generated from message admin.ExportMetricsCsvResponse + */ +export declare type ExportMetricsCsvResponse = Message<"admin.ExportMetricsCsvResponse"> & { + /** + * @generated from field: string csv = 1; + */ + csv: string; +}; + +/** + * Describes the message admin.ExportMetricsCsvResponse. + * Use `create(ExportMetricsCsvResponseSchema)` to create a new message. + */ +export declare const ExportMetricsCsvResponseSchema: GenMessage; + +/** + * @generated from message admin.SyncModelsRequest + */ +export declare type SyncModelsRequest = Message<"admin.SyncModelsRequest"> & { +}; + +/** + * Describes the message admin.SyncModelsRequest. + * Use `create(SyncModelsRequestSchema)` to create a new message. + */ +export declare const SyncModelsRequestSchema: GenMessage; + +/** + * @generated from message admin.SyncModelsResponse + */ +export declare type SyncModelsResponse = Message<"admin.SyncModelsResponse"> & { + /** + * Serialized SyncModelsResponse JSON + * + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.SyncModelsResponse. + * Use `create(SyncModelsResponseSchema)` to create a new message. + */ +export declare const SyncModelsResponseSchema: GenMessage; + +/** + * @generated from message admin.CheckAlertsRequest + */ +export declare type CheckAlertsRequest = Message<"admin.CheckAlertsRequest"> & { +}; + +/** + * Describes the message admin.CheckAlertsRequest. + * Use `create(CheckAlertsRequestSchema)` to create a new message. + */ +export declare const CheckAlertsRequestSchema: GenMessage; + +/** + * @generated from message admin.CheckAlertsResponse + */ +export declare type CheckAlertsResponse = Message<"admin.CheckAlertsResponse"> & { + /** + * Serialized CheckAlertsResponse JSON + * + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.CheckAlertsResponse. + * Use `create(CheckAlertsResponseSchema)` to create a new message. + */ +export declare const CheckAlertsResponseSchema: GenMessage; + +/** + * @generated from message admin.CreateProviderRequest + */ +export declare type CreateProviderRequest = Message<"admin.CreateProviderRequest"> & { + /** + * Serialized AdminCreateProvider JSON + * + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.CreateProviderRequest. + * Use `create(CreateProviderRequestSchema)` to create a new message. + */ +export declare const CreateProviderRequestSchema: GenMessage; + +/** + * @generated from message admin.UpdateProviderRequest + */ +export declare type UpdateProviderRequest = Message<"admin.UpdateProviderRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * Serialized AdminUpdateProvider JSON + * + * @generated from field: string body_json = 2; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.UpdateProviderRequest. + * Use `create(UpdateProviderRequestSchema)` to create a new message. + */ +export declare const UpdateProviderRequestSchema: GenMessage; + +/** + * @generated from message admin.DeleteProviderRequest + */ +export declare type DeleteProviderRequest = Message<"admin.DeleteProviderRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; +}; + +/** + * Describes the message admin.DeleteProviderRequest. + * Use `create(DeleteProviderRequestSchema)` to create a new message. + */ +export declare const DeleteProviderRequestSchema: GenMessage; + +/** + * @generated from message admin.ProviderResponse + */ +export declare type ProviderResponse = Message<"admin.ProviderResponse"> & { + /** + * Serialized response JSON + * + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.ProviderResponse. + * Use `create(ProviderResponseSchema)` to create a new message. + */ +export declare const ProviderResponseSchema: GenMessage; + +/** + * @generated from message admin.CreateModelRequest + */ +export declare type CreateModelRequest = Message<"admin.CreateModelRequest"> & { + /** + * Serialized AdminCreateModel JSON + * + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.CreateModelRequest. + * Use `create(CreateModelRequestSchema)` to create a new message. + */ +export declare const CreateModelRequestSchema: GenMessage; + +/** + * @generated from message admin.UpdateModelRequest + */ +export declare type UpdateModelRequest = Message<"admin.UpdateModelRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * Serialized AdminUpdateModel JSON + * + * @generated from field: string body_json = 2; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.UpdateModelRequest. + * Use `create(UpdateModelRequestSchema)` to create a new message. + */ +export declare const UpdateModelRequestSchema: GenMessage; + +/** + * @generated from message admin.DeleteModelRequest + */ +export declare type DeleteModelRequest = Message<"admin.DeleteModelRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; +}; + +/** + * Describes the message admin.DeleteModelRequest. + * Use `create(DeleteModelRequestSchema)` to create a new message. + */ +export declare const DeleteModelRequestSchema: GenMessage; + +/** + * @generated from message admin.ModelResponse + */ +export declare type ModelResponse = Message<"admin.ModelResponse"> & { + /** + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.ModelResponse. + * Use `create(ModelResponseSchema)` to create a new message. + */ +export declare const ModelResponseSchema: GenMessage; + +/** + * @generated from message admin.CreateVersionRequest + */ +export declare type CreateVersionRequest = Message<"admin.CreateVersionRequest"> & { + /** + * Serialized AdminCreateVersion JSON + * + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.CreateVersionRequest. + * Use `create(CreateVersionRequestSchema)` to create a new message. + */ +export declare const CreateVersionRequestSchema: GenMessage; + +/** + * @generated from message admin.UpdateVersionRequest + */ +export declare type UpdateVersionRequest = Message<"admin.UpdateVersionRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * Serialized AdminUpdateVersion JSON + * + * @generated from field: string body_json = 2; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.UpdateVersionRequest. + * Use `create(UpdateVersionRequestSchema)` to create a new message. + */ +export declare const UpdateVersionRequestSchema: GenMessage; + +/** + * @generated from message admin.DeleteVersionRequest + */ +export declare type DeleteVersionRequest = Message<"admin.DeleteVersionRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; +}; + +/** + * Describes the message admin.DeleteVersionRequest. + * Use `create(DeleteVersionRequestSchema)` to create a new message. + */ +export declare const DeleteVersionRequestSchema: GenMessage; + +/** + * @generated from message admin.VersionResponse + */ +export declare type VersionResponse = Message<"admin.VersionResponse"> & { + /** + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.VersionResponse. + * Use `create(VersionResponseSchema)` to create a new message. + */ +export declare const VersionResponseSchema: GenMessage; + +/** + * @generated from message admin.UpdatePricingRequest + */ +export declare type UpdatePricingRequest = Message<"admin.UpdatePricingRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * Serialized AdminUpdatePricing JSON + * + * @generated from field: string body_json = 2; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.UpdatePricingRequest. + * Use `create(UpdatePricingRequestSchema)` to create a new message. + */ +export declare const UpdatePricingRequestSchema: GenMessage; + +/** + * @generated from message admin.PricingResponse + */ +export declare type PricingResponse = Message<"admin.PricingResponse"> & { + /** + * @generated from field: string body_json = 1; + */ + bodyJson: string; +}; + +/** + * Describes the message admin.PricingResponse. + * Use `create(PricingResponseSchema)` to create a new message. + */ +export declare const PricingResponseSchema: GenMessage; + +/** + * @generated from message admin.DeleteResponse + */ +export declare type DeleteResponse = Message<"admin.DeleteResponse"> & { + /** + * @generated from field: bool deleted = 1; + */ + deleted: boolean; +}; + +/** + * Describes the message admin.DeleteResponse. + * Use `create(DeleteResponseSchema)` to create a new message. + */ +export declare const DeleteResponseSchema: GenMessage; + +/** + * @generated from enum admin.OnlineStatus + */ +export enum OnlineStatus { + /** + * @generated from enum value: ONLINE_STATUS_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: ONLINE_STATUS_ONLINE = 1; + */ + ONLINE = 1, + + /** + * @generated from enum value: ONLINE_STATUS_IDLE = 2; + */ + IDLE = 2, + + /** + * @generated from enum value: ONLINE_STATUS_OFFLINE = 3; + */ + OFFLINE = 3, +} + +/** + * Describes the enum admin.OnlineStatus. + */ +export declare const OnlineStatusSchema: GenEnum; + +/** + * @generated from service admin.SessionAdmin + */ +export declare const SessionAdmin: GenService<{ + /** + * @generated from rpc admin.SessionAdmin.ListWorkspaceSessions + */ + listWorkspaceSessions: { + methodKind: "unary"; + input: typeof ListWorkspaceSessionsRequestSchema; + output: typeof ListWorkspaceSessionsResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.ListUserSessions + */ + listUserSessions: { + methodKind: "unary"; + input: typeof ListUserSessionsRequestSchema; + output: typeof ListUserSessionsResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.KickUserFromWorkspace + */ + kickUserFromWorkspace: { + methodKind: "unary"; + input: typeof KickUserFromWorkspaceRequestSchema; + output: typeof KickUserFromWorkspaceResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.KickUser + */ + kickUser: { + methodKind: "unary"; + input: typeof KickUserRequestSchema; + output: typeof KickUserResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.GetUserStatus + */ + getUserStatus: { + methodKind: "unary"; + input: typeof GetUserStatusRequestSchema; + output: typeof GetUserStatusResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.GetUserInfo + */ + getUserInfo: { + methodKind: "unary"; + input: typeof GetUserInfoRequestSchema; + output: typeof GetUserInfoResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.GetWorkspaceOnlineUsers + */ + getWorkspaceOnlineUsers: { + methodKind: "unary"; + input: typeof GetWorkspaceOnlineUsersRequestSchema; + output: typeof GetWorkspaceOnlineUsersResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.IsUserOnline + */ + isUserOnline: { + methodKind: "unary"; + input: typeof IsUserOnlineRequestSchema; + output: typeof IsUserOnlineResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.GetMetrics + */ + getMetrics: { + methodKind: "unary"; + input: typeof GetMetricsRequestSchema; + output: typeof GetMetricsResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.ExportMetricsCsv + */ + exportMetricsCsv: { + methodKind: "unary"; + input: typeof ExportMetricsCsvRequestSchema; + output: typeof ExportMetricsCsvResponseSchema; + }, + /** + * AI + * + * @generated from rpc admin.SessionAdmin.SyncModels + */ + syncModels: { + methodKind: "unary"; + input: typeof SyncModelsRequestSchema; + output: typeof SyncModelsResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.CheckAlerts + */ + checkAlerts: { + methodKind: "unary"; + input: typeof CheckAlertsRequestSchema; + output: typeof CheckAlertsResponseSchema; + }, + /** + * AI Provider + * + * @generated from rpc admin.SessionAdmin.CreateProvider + */ + createProvider: { + methodKind: "unary"; + input: typeof CreateProviderRequestSchema; + output: typeof ProviderResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateProvider + */ + updateProvider: { + methodKind: "unary"; + input: typeof UpdateProviderRequestSchema; + output: typeof ProviderResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteProvider + */ + deleteProvider: { + methodKind: "unary"; + input: typeof DeleteProviderRequestSchema; + output: typeof DeleteResponseSchema; + }, + /** + * AI Model + * + * @generated from rpc admin.SessionAdmin.CreateModel + */ + createModel: { + methodKind: "unary"; + input: typeof CreateModelRequestSchema; + output: typeof ModelResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateModel + */ + updateModel: { + methodKind: "unary"; + input: typeof UpdateModelRequestSchema; + output: typeof ModelResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteModel + */ + deleteModel: { + methodKind: "unary"; + input: typeof DeleteModelRequestSchema; + output: typeof DeleteResponseSchema; + }, + /** + * AI Version + * + * @generated from rpc admin.SessionAdmin.CreateVersion + */ + createVersion: { + methodKind: "unary"; + input: typeof CreateVersionRequestSchema; + output: typeof VersionResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.UpdateVersion + */ + updateVersion: { + methodKind: "unary"; + input: typeof UpdateVersionRequestSchema; + output: typeof VersionResponseSchema; + }, + /** + * @generated from rpc admin.SessionAdmin.DeleteVersion + */ + deleteVersion: { + methodKind: "unary"; + input: typeof DeleteVersionRequestSchema; + output: typeof DeleteResponseSchema; + }, + /** + * AI Pricing + * + * @generated from rpc admin.SessionAdmin.UpdatePricing + */ + updatePricing: { + methodKind: "unary"; + input: typeof UpdatePricingRequestSchema; + output: typeof PricingResponseSchema; + }, +}>; + diff --git a/admin/src/lib/adminrpc/generated/proto/admin_pb.js b/admin/src/lib/adminrpc/generated/proto/admin_pb.js new file mode 100644 index 0000000..1ad75f0 --- /dev/null +++ b/admin/src/lib/adminrpc/generated/proto/admin_pb.js @@ -0,0 +1,325 @@ +// @generated by protoc-gen-es v2.11.0 +// @generated from file proto/admin.proto (package admin, syntax proto3) +/* eslint-disable */ + +import { enumDesc, fileDesc, messageDesc, serviceDesc, tsEnum } from "@bufbuild/protobuf/codegenv2"; +import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; + +/** + * Describes the file proto/admin.proto. + */ +export const file_proto_admin = /*@__PURE__*/ + fileDesc("ChFwcm90by9hZG1pbi5wcm90bxIFYWRtaW4i/gEKC1VzZXJTZXNzaW9uEhIKCnNlc3Npb25faWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAyABKAkSFwoKaXBfYWRkcmVzcxgEIAEoCUgAiAEBEhcKCnVzZXJfYWdlbnQYBSABKAlIAYgBARIwCgxjb25uZWN0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjIKDmxhc3RfaGVhcnRiZWF0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEINCgtfaXBfYWRkcmVzc0INCgtfdXNlcl9hZ2VudCKNAQoLU2Vzc2lvbkluZm8SDwoHdXNlcl9pZBgBIAEoCRIVCg1zZXNzaW9uX2NvdW50GAIgASgNEhIKCndvcmtzcGFjZXMYAyADKAkSLwoObGF0ZXN0X3Nlc3Npb24YBCABKAsyEi5hZG1pbi5Vc2VyU2Vzc2lvbkgAiAEBQhEKD19sYXRlc3Rfc2Vzc2lvbiI0ChxMaXN0V29ya3NwYWNlU2Vzc2lvbnNSZXF1ZXN0EhQKDHdvcmtzcGFjZV9pZBgBIAEoCSJFCh1MaXN0V29ya3NwYWNlU2Vzc2lvbnNSZXNwb25zZRIkCghzZXNzaW9ucxgBIAMoCzISLmFkbWluLlVzZXJTZXNzaW9uIioKF0xpc3RVc2VyU2Vzc2lvbnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkiQAoYTGlzdFVzZXJTZXNzaW9uc1Jlc3BvbnNlEiQKCHNlc3Npb25zGAEgAygLMhIuYWRtaW4uVXNlclNlc3Npb24iRQocS2lja1VzZXJGcm9tV29ya3NwYWNlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhQKDHdvcmtzcGFjZV9pZBgCIAEoCSI1Ch1LaWNrVXNlckZyb21Xb3Jrc3BhY2VSZXNwb25zZRIUCgxraWNrZWRfY291bnQYASABKA0iIgoPS2lja1VzZXJSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkiKAoQS2lja1VzZXJSZXNwb25zZRIUCgxraWNrZWRfY291bnQYASABKA0iJwoUR2V0VXNlclN0YXR1c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCSI8ChVHZXRVc2VyU3RhdHVzUmVzcG9uc2USIwoGc3RhdHVzGAEgASgOMhMuYWRtaW4uT25saW5lU3RhdHVzIiUKEkdldFVzZXJJbmZvUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJIkUKE0dldFVzZXJJbmZvUmVzcG9uc2USJQoEaW5mbxgBIAEoCzISLmFkbWluLlNlc3Npb25JbmZvSACIAQFCBwoFX2luZm8iNgoeR2V0V29ya3NwYWNlT25saW5lVXNlcnNSZXF1ZXN0EhQKDHdvcmtzcGFjZV9pZBgBIAEoCSIzCh9HZXRXb3Jrc3BhY2VPbmxpbmVVc2Vyc1Jlc3BvbnNlEhAKCHVzZXJfaWRzGAEgAygJIiYKE0lzVXNlck9ubGluZVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCSImChRJc1VzZXJPbmxpbmVSZXNwb25zZRIOCgZvbmxpbmUYASABKAgiOwoRR2V0TWV0cmljc1JlcXVlc3QSFwoPaW5zdGFuY2VfZmlsdGVyGAEgASgJEg0KBWxpbWl0GAIgASgNIj8KEkdldE1ldHJpY3NSZXNwb25zZRIpCglpbnN0YW5jZXMYASADKAsyFi5hZG1pbi5JbnN0YW5jZU1ldHJpY3Mi+AEKD0luc3RhbmNlTWV0cmljcxITCgtpbnN0YW5jZV9pZBgBIAEoCRIWCg50aW1lc3RhbXBfc2VjcxgCIAEoAxIuCgRodHRwGAMgAygLMiAuYWRtaW4uSW5zdGFuY2VNZXRyaWNzLkh0dHBFbnRyeRIuCgRyb29tGAQgAygLMiAuYWRtaW4uSW5zdGFuY2VNZXRyaWNzLlJvb21FbnRyeRorCglIdHRwRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARorCglSb29tRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIyChdFeHBvcnRNZXRyaWNzQ3N2UmVxdWVzdBIXCg9pbnN0YW5jZV9maWx0ZXIYASABKAkiJwoYRXhwb3J0TWV0cmljc0NzdlJlc3BvbnNlEgsKA2NzdhgBIAEoCSITChFTeW5jTW9kZWxzUmVxdWVzdCInChJTeW5jTW9kZWxzUmVzcG9uc2USEQoJYm9keV9qc29uGAEgASgJIhQKEkNoZWNrQWxlcnRzUmVxdWVzdCIoChNDaGVja0FsZXJ0c1Jlc3BvbnNlEhEKCWJvZHlfanNvbhgBIAEoCSIqChVDcmVhdGVQcm92aWRlclJlcXVlc3QSEQoJYm9keV9qc29uGAEgASgJIjYKFVVwZGF0ZVByb3ZpZGVyUmVxdWVzdBIKCgJpZBgBIAEoCRIRCglib2R5X2pzb24YAiABKAkiIwoVRGVsZXRlUHJvdmlkZXJSZXF1ZXN0EgoKAmlkGAEgASgJIiUKEFByb3ZpZGVyUmVzcG9uc2USEQoJYm9keV9qc29uGAEgASgJIicKEkNyZWF0ZU1vZGVsUmVxdWVzdBIRCglib2R5X2pzb24YASABKAkiMwoSVXBkYXRlTW9kZWxSZXF1ZXN0EgoKAmlkGAEgASgJEhEKCWJvZHlfanNvbhgCIAEoCSIgChJEZWxldGVNb2RlbFJlcXVlc3QSCgoCaWQYASABKAkiIgoNTW9kZWxSZXNwb25zZRIRCglib2R5X2pzb24YASABKAkiKQoUQ3JlYXRlVmVyc2lvblJlcXVlc3QSEQoJYm9keV9qc29uGAEgASgJIjUKFFVwZGF0ZVZlcnNpb25SZXF1ZXN0EgoKAmlkGAEgASgJEhEKCWJvZHlfanNvbhgCIAEoCSIiChREZWxldGVWZXJzaW9uUmVxdWVzdBIKCgJpZBgBIAEoCSIkCg9WZXJzaW9uUmVzcG9uc2USEQoJYm9keV9qc29uGAEgASgJIjUKFFVwZGF0ZVByaWNpbmdSZXF1ZXN0EgoKAmlkGAEgASgJEhEKCWJvZHlfanNvbhgCIAEoCSIkCg9QcmljaW5nUmVzcG9uc2USEQoJYm9keV9qc29uGAEgASgJIiEKDkRlbGV0ZVJlc3BvbnNlEg8KB2RlbGV0ZWQYASABKAgqegoMT25saW5lU3RhdHVzEh0KGU9OTElORV9TVEFUVVNfVU5TUEVDSUZJRUQQABIYChRPTkxJTkVfU1RBVFVTX09OTElORRABEhYKEk9OTElORV9TVEFUVVNfSURMRRACEhkKFU9OTElORV9TVEFUVVNfT0ZGTElORRADMv8MCgxTZXNzaW9uQWRtaW4SYgoVTGlzdFdvcmtzcGFjZVNlc3Npb25zEiMuYWRtaW4uTGlzdFdvcmtzcGFjZVNlc3Npb25zUmVxdWVzdBokLmFkbWluLkxpc3RXb3Jrc3BhY2VTZXNzaW9uc1Jlc3BvbnNlElMKEExpc3RVc2VyU2Vzc2lvbnMSHi5hZG1pbi5MaXN0VXNlclNlc3Npb25zUmVxdWVzdBofLmFkbWluLkxpc3RVc2VyU2Vzc2lvbnNSZXNwb25zZRJiChVLaWNrVXNlckZyb21Xb3Jrc3BhY2USIy5hZG1pbi5LaWNrVXNlckZyb21Xb3Jrc3BhY2VSZXF1ZXN0GiQuYWRtaW4uS2lja1VzZXJGcm9tV29ya3NwYWNlUmVzcG9uc2USOwoIS2lja1VzZXISFi5hZG1pbi5LaWNrVXNlclJlcXVlc3QaFy5hZG1pbi5LaWNrVXNlclJlc3BvbnNlEkoKDUdldFVzZXJTdGF0dXMSGy5hZG1pbi5HZXRVc2VyU3RhdHVzUmVxdWVzdBocLmFkbWluLkdldFVzZXJTdGF0dXNSZXNwb25zZRJECgtHZXRVc2VySW5mbxIZLmFkbWluLkdldFVzZXJJbmZvUmVxdWVzdBoaLmFkbWluLkdldFVzZXJJbmZvUmVzcG9uc2USaAoXR2V0V29ya3NwYWNlT25saW5lVXNlcnMSJS5hZG1pbi5HZXRXb3Jrc3BhY2VPbmxpbmVVc2Vyc1JlcXVlc3QaJi5hZG1pbi5HZXRXb3Jrc3BhY2VPbmxpbmVVc2Vyc1Jlc3BvbnNlEkcKDElzVXNlck9ubGluZRIaLmFkbWluLklzVXNlck9ubGluZVJlcXVlc3QaGy5hZG1pbi5Jc1VzZXJPbmxpbmVSZXNwb25zZRJBCgpHZXRNZXRyaWNzEhguYWRtaW4uR2V0TWV0cmljc1JlcXVlc3QaGS5hZG1pbi5HZXRNZXRyaWNzUmVzcG9uc2USUwoQRXhwb3J0TWV0cmljc0NzdhIeLmFkbWluLkV4cG9ydE1ldHJpY3NDc3ZSZXF1ZXN0Gh8uYWRtaW4uRXhwb3J0TWV0cmljc0NzdlJlc3BvbnNlEkEKClN5bmNNb2RlbHMSGC5hZG1pbi5TeW5jTW9kZWxzUmVxdWVzdBoZLmFkbWluLlN5bmNNb2RlbHNSZXNwb25zZRJECgtDaGVja0FsZXJ0cxIZLmFkbWluLkNoZWNrQWxlcnRzUmVxdWVzdBoaLmFkbWluLkNoZWNrQWxlcnRzUmVzcG9uc2USRwoOQ3JlYXRlUHJvdmlkZXISHC5hZG1pbi5DcmVhdGVQcm92aWRlclJlcXVlc3QaFy5hZG1pbi5Qcm92aWRlclJlc3BvbnNlEkcKDlVwZGF0ZVByb3ZpZGVyEhwuYWRtaW4uVXBkYXRlUHJvdmlkZXJSZXF1ZXN0GhcuYWRtaW4uUHJvdmlkZXJSZXNwb25zZRJFCg5EZWxldGVQcm92aWRlchIcLmFkbWluLkRlbGV0ZVByb3ZpZGVyUmVxdWVzdBoVLmFkbWluLkRlbGV0ZVJlc3BvbnNlEj4KC0NyZWF0ZU1vZGVsEhkuYWRtaW4uQ3JlYXRlTW9kZWxSZXF1ZXN0GhQuYWRtaW4uTW9kZWxSZXNwb25zZRI+CgtVcGRhdGVNb2RlbBIZLmFkbWluLlVwZGF0ZU1vZGVsUmVxdWVzdBoULmFkbWluLk1vZGVsUmVzcG9uc2USPwoLRGVsZXRlTW9kZWwSGS5hZG1pbi5EZWxldGVNb2RlbFJlcXVlc3QaFS5hZG1pbi5EZWxldGVSZXNwb25zZRJECg1DcmVhdGVWZXJzaW9uEhsuYWRtaW4uQ3JlYXRlVmVyc2lvblJlcXVlc3QaFi5hZG1pbi5WZXJzaW9uUmVzcG9uc2USRAoNVXBkYXRlVmVyc2lvbhIbLmFkbWluLlVwZGF0ZVZlcnNpb25SZXF1ZXN0GhYuYWRtaW4uVmVyc2lvblJlc3BvbnNlEkMKDURlbGV0ZVZlcnNpb24SGy5hZG1pbi5EZWxldGVWZXJzaW9uUmVxdWVzdBoVLmFkbWluLkRlbGV0ZVJlc3BvbnNlEkQKDVVwZGF0ZVByaWNpbmcSGy5hZG1pbi5VcGRhdGVQcmljaW5nUmVxdWVzdBoWLmFkbWluLlByaWNpbmdSZXNwb25zZUJLCgljb20uYWRtaW5CCkFkbWluUHJvdG9QAaICA0FYWKoCBUFkbWluygIFQWRtaW7iAhFBZG1pblxHUEJNZXRhZGF0YeoCBUFkbWluYgZwcm90bzM", [file_google_protobuf_timestamp]); + +/** + * Describes the message admin.UserSession. + * Use `create(UserSessionSchema)` to create a new message. + */ +export const UserSessionSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 0); + +/** + * Describes the message admin.SessionInfo. + * Use `create(SessionInfoSchema)` to create a new message. + */ +export const SessionInfoSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 1); + +/** + * Describes the message admin.ListWorkspaceSessionsRequest. + * Use `create(ListWorkspaceSessionsRequestSchema)` to create a new message. + */ +export const ListWorkspaceSessionsRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 2); + +/** + * Describes the message admin.ListWorkspaceSessionsResponse. + * Use `create(ListWorkspaceSessionsResponseSchema)` to create a new message. + */ +export const ListWorkspaceSessionsResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 3); + +/** + * Describes the message admin.ListUserSessionsRequest. + * Use `create(ListUserSessionsRequestSchema)` to create a new message. + */ +export const ListUserSessionsRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 4); + +/** + * Describes the message admin.ListUserSessionsResponse. + * Use `create(ListUserSessionsResponseSchema)` to create a new message. + */ +export const ListUserSessionsResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 5); + +/** + * Describes the message admin.KickUserFromWorkspaceRequest. + * Use `create(KickUserFromWorkspaceRequestSchema)` to create a new message. + */ +export const KickUserFromWorkspaceRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 6); + +/** + * Describes the message admin.KickUserFromWorkspaceResponse. + * Use `create(KickUserFromWorkspaceResponseSchema)` to create a new message. + */ +export const KickUserFromWorkspaceResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 7); + +/** + * Describes the message admin.KickUserRequest. + * Use `create(KickUserRequestSchema)` to create a new message. + */ +export const KickUserRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 8); + +/** + * Describes the message admin.KickUserResponse. + * Use `create(KickUserResponseSchema)` to create a new message. + */ +export const KickUserResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 9); + +/** + * Describes the message admin.GetUserStatusRequest. + * Use `create(GetUserStatusRequestSchema)` to create a new message. + */ +export const GetUserStatusRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 10); + +/** + * Describes the message admin.GetUserStatusResponse. + * Use `create(GetUserStatusResponseSchema)` to create a new message. + */ +export const GetUserStatusResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 11); + +/** + * Describes the message admin.GetUserInfoRequest. + * Use `create(GetUserInfoRequestSchema)` to create a new message. + */ +export const GetUserInfoRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 12); + +/** + * Describes the message admin.GetUserInfoResponse. + * Use `create(GetUserInfoResponseSchema)` to create a new message. + */ +export const GetUserInfoResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 13); + +/** + * Describes the message admin.GetWorkspaceOnlineUsersRequest. + * Use `create(GetWorkspaceOnlineUsersRequestSchema)` to create a new message. + */ +export const GetWorkspaceOnlineUsersRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 14); + +/** + * Describes the message admin.GetWorkspaceOnlineUsersResponse. + * Use `create(GetWorkspaceOnlineUsersResponseSchema)` to create a new message. + */ +export const GetWorkspaceOnlineUsersResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 15); + +/** + * Describes the message admin.IsUserOnlineRequest. + * Use `create(IsUserOnlineRequestSchema)` to create a new message. + */ +export const IsUserOnlineRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 16); + +/** + * Describes the message admin.IsUserOnlineResponse. + * Use `create(IsUserOnlineResponseSchema)` to create a new message. + */ +export const IsUserOnlineResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 17); + +/** + * Describes the message admin.GetMetricsRequest. + * Use `create(GetMetricsRequestSchema)` to create a new message. + */ +export const GetMetricsRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 18); + +/** + * Describes the message admin.GetMetricsResponse. + * Use `create(GetMetricsResponseSchema)` to create a new message. + */ +export const GetMetricsResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 19); + +/** + * Describes the message admin.InstanceMetrics. + * Use `create(InstanceMetricsSchema)` to create a new message. + */ +export const InstanceMetricsSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 20); + +/** + * Describes the message admin.ExportMetricsCsvRequest. + * Use `create(ExportMetricsCsvRequestSchema)` to create a new message. + */ +export const ExportMetricsCsvRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 21); + +/** + * Describes the message admin.ExportMetricsCsvResponse. + * Use `create(ExportMetricsCsvResponseSchema)` to create a new message. + */ +export const ExportMetricsCsvResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 22); + +/** + * Describes the message admin.SyncModelsRequest. + * Use `create(SyncModelsRequestSchema)` to create a new message. + */ +export const SyncModelsRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 23); + +/** + * Describes the message admin.SyncModelsResponse. + * Use `create(SyncModelsResponseSchema)` to create a new message. + */ +export const SyncModelsResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 24); + +/** + * Describes the message admin.CheckAlertsRequest. + * Use `create(CheckAlertsRequestSchema)` to create a new message. + */ +export const CheckAlertsRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 25); + +/** + * Describes the message admin.CheckAlertsResponse. + * Use `create(CheckAlertsResponseSchema)` to create a new message. + */ +export const CheckAlertsResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 26); + +/** + * Describes the message admin.CreateProviderRequest. + * Use `create(CreateProviderRequestSchema)` to create a new message. + */ +export const CreateProviderRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 27); + +/** + * Describes the message admin.UpdateProviderRequest. + * Use `create(UpdateProviderRequestSchema)` to create a new message. + */ +export const UpdateProviderRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 28); + +/** + * Describes the message admin.DeleteProviderRequest. + * Use `create(DeleteProviderRequestSchema)` to create a new message. + */ +export const DeleteProviderRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 29); + +/** + * Describes the message admin.ProviderResponse. + * Use `create(ProviderResponseSchema)` to create a new message. + */ +export const ProviderResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 30); + +/** + * Describes the message admin.CreateModelRequest. + * Use `create(CreateModelRequestSchema)` to create a new message. + */ +export const CreateModelRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 31); + +/** + * Describes the message admin.UpdateModelRequest. + * Use `create(UpdateModelRequestSchema)` to create a new message. + */ +export const UpdateModelRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 32); + +/** + * Describes the message admin.DeleteModelRequest. + * Use `create(DeleteModelRequestSchema)` to create a new message. + */ +export const DeleteModelRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 33); + +/** + * Describes the message admin.ModelResponse. + * Use `create(ModelResponseSchema)` to create a new message. + */ +export const ModelResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 34); + +/** + * Describes the message admin.CreateVersionRequest. + * Use `create(CreateVersionRequestSchema)` to create a new message. + */ +export const CreateVersionRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 35); + +/** + * Describes the message admin.UpdateVersionRequest. + * Use `create(UpdateVersionRequestSchema)` to create a new message. + */ +export const UpdateVersionRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 36); + +/** + * Describes the message admin.DeleteVersionRequest. + * Use `create(DeleteVersionRequestSchema)` to create a new message. + */ +export const DeleteVersionRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 37); + +/** + * Describes the message admin.VersionResponse. + * Use `create(VersionResponseSchema)` to create a new message. + */ +export const VersionResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 38); + +/** + * Describes the message admin.UpdatePricingRequest. + * Use `create(UpdatePricingRequestSchema)` to create a new message. + */ +export const UpdatePricingRequestSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 39); + +/** + * Describes the message admin.PricingResponse. + * Use `create(PricingResponseSchema)` to create a new message. + */ +export const PricingResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 40); + +/** + * Describes the message admin.DeleteResponse. + * Use `create(DeleteResponseSchema)` to create a new message. + */ +export const DeleteResponseSchema = /*@__PURE__*/ + messageDesc(file_proto_admin, 41); + +/** + * Describes the enum admin.OnlineStatus. + */ +export const OnlineStatusSchema = /*@__PURE__*/ + enumDesc(file_proto_admin, 0); + +/** + * @generated from enum admin.OnlineStatus + */ +export const OnlineStatus = /*@__PURE__*/ + tsEnum(OnlineStatusSchema); + +/** + * @generated from service admin.SessionAdmin + */ +export const SessionAdmin = /*@__PURE__*/ + serviceDesc(file_proto_admin, 0); +