@pymthouse/builder-sdk 0.3.1 → 0.4.1-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -28
- package/dist/{client-BHfjDvIe.d.ts → client-CauCfGa7.d.ts} +1 -1
- package/dist/{client-CvhJEhjV.d.cts → client-D1Xz-xlx.d.cts} +1 -1
- package/dist/config.cjs +0 -21
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +1 -5
- package/dist/config.d.ts +1 -5
- package/dist/config.js +1 -20
- package/dist/config.js.map +1 -1
- package/dist/device-initiate.cjs.map +1 -1
- package/dist/device-initiate.js.map +1 -1
- package/dist/device.cjs.map +1 -1
- package/dist/device.d.cts +1 -1
- package/dist/device.d.ts +1 -1
- package/dist/device.js.map +1 -1
- package/dist/env.cjs +13 -4
- package/dist/env.cjs.map +1 -1
- package/dist/env.d.cts +2 -2
- package/dist/env.d.ts +2 -2
- package/dist/env.js +13 -4
- package/dist/env.js.map +1 -1
- package/dist/index-B0ryx942.d.cts +66 -0
- package/dist/index-CvV5syf_.d.ts +66 -0
- package/dist/index.cjs +13 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -5
- package/dist/index.d.ts +29 -5
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/{ingest-DoKJTWU9.d.ts → proxy-JrT6raU_.d.cts} +5 -42
- package/dist/{ingest-B3Yi8Tb1.d.cts → proxy-U32DFNuj.d.ts} +5 -42
- package/dist/signer/server.cjs +799 -895
- package/dist/signer/server.cjs.map +1 -1
- package/dist/signer/server.d.cts +11 -15
- package/dist/signer/server.d.ts +11 -15
- package/dist/signer/server.js +799 -893
- package/dist/signer/server.js.map +1 -1
- package/dist/signer/webhook/adapters/api-key.cjs +82 -0
- package/dist/signer/webhook/adapters/api-key.cjs.map +1 -0
- package/dist/signer/webhook/adapters/api-key.d.cts +18 -0
- package/dist/signer/webhook/adapters/api-key.d.ts +18 -0
- package/dist/signer/webhook/adapters/api-key.js +80 -0
- package/dist/signer/webhook/adapters/api-key.js.map +1 -0
- package/dist/signer/webhook/adapters/composite.cjs +60 -0
- package/dist/signer/webhook/adapters/composite.cjs.map +1 -0
- package/dist/signer/webhook/adapters/composite.d.cts +5 -0
- package/dist/signer/webhook/adapters/composite.d.ts +5 -0
- package/dist/signer/webhook/adapters/composite.js +58 -0
- package/dist/signer/webhook/adapters/composite.js.map +1 -0
- package/dist/signer/webhook/adapters/oauth1.cjs +18 -0
- package/dist/signer/webhook/adapters/oauth1.cjs.map +1 -0
- package/dist/signer/webhook/adapters/oauth1.d.cts +19 -0
- package/dist/signer/webhook/adapters/oauth1.d.ts +19 -0
- package/dist/signer/webhook/adapters/oauth1.js +16 -0
- package/dist/signer/webhook/adapters/oauth1.js.map +1 -0
- package/dist/signer/webhook/adapters/oidc.cjs +533 -0
- package/dist/signer/webhook/adapters/oidc.cjs.map +1 -0
- package/dist/signer/webhook/adapters/oidc.d.cts +4 -0
- package/dist/signer/webhook/adapters/oidc.d.ts +4 -0
- package/dist/signer/webhook/adapters/oidc.js +526 -0
- package/dist/signer/webhook/adapters/oidc.js.map +1 -0
- package/dist/signer/webhook/adapters/trusted-headers.cjs +110 -0
- package/dist/signer/webhook/adapters/trusted-headers.cjs.map +1 -0
- package/dist/signer/webhook/adapters/trusted-headers.d.cts +18 -0
- package/dist/signer/webhook/adapters/trusted-headers.d.ts +18 -0
- package/dist/signer/webhook/adapters/trusted-headers.js +106 -0
- package/dist/signer/webhook/adapters/trusted-headers.js.map +1 -0
- package/dist/signer/webhook.cjs +759 -0
- package/dist/signer/webhook.cjs.map +1 -0
- package/dist/signer/webhook.d.cts +26 -0
- package/dist/signer/webhook.d.ts +26 -0
- package/dist/signer/webhook.js +732 -0
- package/dist/signer/webhook.js.map +1 -0
- package/dist/tokens.d.cts +1 -1
- package/dist/tokens.d.ts +1 -1
- package/dist/{types-_R1AwEZp.d.cts → types-BORaHW_x.d.cts} +5 -5
- package/dist/{types-_R1AwEZp.d.ts → types-BORaHW_x.d.ts} +5 -5
- package/dist/verifier-B-WFDMz6.d.cts +48 -0
- package/dist/verifier-B-WFDMz6.d.ts +48 -0
- package/dist/verify.cjs.map +1 -1
- package/dist/verify.d.cts +1 -1
- package/dist/verify.d.ts +1 -1
- package/dist/verify.js.map +1 -1
- package/package.json +30 -30
- package/dist/gateway/client/index.cjs +0 -492
- package/dist/gateway/client/index.cjs.map +0 -1
- package/dist/gateway/client/index.d.cts +0 -63
- package/dist/gateway/client/index.d.ts +0 -63
- package/dist/gateway/client/index.js +0 -489
- package/dist/gateway/client/index.js.map +0 -1
- package/dist/gateway/index.cjs +0 -16
- package/dist/gateway/index.cjs.map +0 -1
- package/dist/gateway/index.d.cts +0 -52
- package/dist/gateway/index.d.ts +0 -52
- package/dist/gateway/index.js +0 -10
- package/dist/gateway/index.js.map +0 -1
- package/dist/gateway/server/index.cjs +0 -1248
- package/dist/gateway/server/index.cjs.map +0 -1
- package/dist/gateway/server/index.d.cts +0 -31
- package/dist/gateway/server/index.d.ts +0 -31
- package/dist/gateway/server/index.js +0 -1233
- package/dist/gateway/server/index.js.map +0 -1
- package/gateway/proto/lp_rpc.proto +0 -542
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/string-utils.ts","../../../src/gateway/server/config.ts","../../../src/gateway/server/auth.ts","../../../src/gateway/types.ts","../../../src/gateway/server/capabilities.ts","../../../src/gateway/server/http-insecure.ts","../../../src/gateway/server/discovery.ts","../../../src/gateway/server/grpc-loader.ts","../../../src/gateway/server/signer-material.ts","../../../src/gateway/server/tofu.ts","../../../src/gateway/server/orch-grpc.ts","../../../src/gateway/server/payment-session.ts","../../../src/gateway/server/lv2v.ts","../../../src/gateway/server/session-store.ts","../../../src/gateway/server/trickle-relay.ts","../../../src/gateway/server/handlers.ts"],"names":["https","http","path","fileURLToPath","createRequire","host","tls","createHash","randomUUID"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Removes trailing `/` without regex (linear time). */\nexport function stripTrailingSlashes(value: string): string {\n let end = value.length;\n while (end > 0 && (value.codePointAt(end - 1) ?? 0) === 47) {\n end--;\n }\n return value.slice(0, end);\n}\n\nfunction endsWithIgnoreCase(value: string, suffix: string): boolean {\n if (suffix.length > value.length) {\n return false;\n }\n const start = value.length - suffix.length;\n for (let i = 0; i < suffix.length; i++) {\n const a = value.codePointAt(start + i) ?? 0;\n const b = suffix.codePointAt(i) ?? 0;\n if (a !== b && (a | 32) !== (b | 32)) {\n return false;\n }\n }\n return true;\n}\n\nfunction stripSuffixIgnoreCase(value: string, suffix: string): string {\n return endsWithIgnoreCase(value, suffix)\n ? value.slice(0, value.length - suffix.length)\n : value;\n}\n\n/** Issuer URL (`…/oidc`) → Builder API base (`…/api/v1`). Linear-time; no regex. */\nexport function stripOidcPathSuffix(issuerUrl: string): string {\n let base = stripTrailingSlashes(issuerUrl.trim());\n base = stripSuffixIgnoreCase(base, \"/oidc\");\n return stripTrailingSlashes(base);\n}\n\n/** Issuer URL (`…/api/v1/oidc`) → host origin for signer/API-key routes. Linear-time; no regex. */\nexport function stripIssuerOriginFromOidcUrl(issuerUrl: string): string {\n let base = stripTrailingSlashes(issuerUrl.trim());\n base = stripSuffixIgnoreCase(base, \"/api/v1/oidc\");\n base = stripSuffixIgnoreCase(base, \"/oidc\");\n return stripTrailingSlashes(base);\n}\n\n/** Validate gateway session ids before embedding in request URLs. */\nexport function isSafePathSegment(value: unknown): value is string {\n if (typeof value !== \"string\" || value.length === 0 || value.length > 128) {\n return false;\n }\n for (let i = 0; i < value.length; i++) {\n const c = value.codePointAt(i) ?? 0;\n const ok =\n (c >= 48 && c <= 57) ||\n (c >= 65 && c <= 90) ||\n (c >= 97 && c <= 122) ||\n c === 95 ||\n c === 45;\n if (!ok) {\n return false;\n }\n }\n return true;\n}\n\n/** Parse and validate an http(s) facade origin (no path). */\nexport function parseHttpOrigin(raw: string | undefined, fallback: string): string {\n const trimmed = (raw ?? fallback).trim();\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new TypeError(\"Origin must be a valid http(s) URL\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new TypeError(\"Origin must use http or https\");\n }\n return parsed.origin;\n}\n\n/** Build a validated DELETE URL for `/api/gateway/sessions/:id`. */\nexport function buildGatewaySessionDeleteUrl(origin: string, sessionId: string): URL {\n if (!isSafePathSegment(sessionId)) {\n throw new TypeError(\"Invalid gateway session id\");\n }\n return new URL(`/api/gateway/sessions/${encodeURIComponent(sessionId)}`, origin);\n}\n","import { stripIssuerOriginFromOidcUrl } from \"../../string-utils.js\";\n\nexport type GatewayServerConfig = {\n enabled: boolean;\n signerUrl: string;\n discoveryUrl?: string;\n discoveryTimeoutMs: number;\n useTofu: boolean;\n paymentIntervalMs: number;\n};\n\nexport function readGatewayConfigFromEnv(env: NodeJS.ProcessEnv = process.env): GatewayServerConfig | null {\n const enabled =\n env.GATEWAY_ENABLED === \"1\" || env.NEXT_PUBLIC_GATEWAY_ENABLED === \"1\";\n if (!enabled) {\n return null;\n }\n\n const issuerUrl = env.PYMTHOUSE_ISSUER_URL?.trim();\n const signerUrl =\n env.PYMTHOUSE_SIGNER_URL?.trim() ||\n env.SIGNER_PUBLIC_URL?.trim() ||\n (issuerUrl ? `${stripIssuerOriginFromOidcUrl(issuerUrl)}/api/signer` : \"\");\n\n if (!signerUrl) {\n return null;\n }\n\n const discoveryUrl =\n env.LIVEPEER_DISCOVERY_SERVICE_URL?.trim() ||\n env.GATEWAY_DISCOVERY_URL?.trim() ||\n undefined;\n\n const discoveryTimeoutMs = Number(env.GATEWAY_DISCOVERY_TIMEOUT_MS ?? \"60000\");\n const paymentIntervalMs = Number(env.GATEWAY_PAYMENT_INTERVAL_MS ?? \"2000\");\n\n return {\n enabled: true,\n signerUrl,\n discoveryUrl,\n discoveryTimeoutMs: Number.isFinite(discoveryTimeoutMs) ? discoveryTimeoutMs : 60_000,\n useTofu: env.GATEWAY_USE_TOFU !== \"0\",\n paymentIntervalMs: Number.isFinite(paymentIntervalMs) ? paymentIntervalMs : 2000,\n };\n}\n","function isAsciiWhitespace(code: number): boolean {\n return code <= 32;\n}\n\nfunction bearerTokenStart(header: string): number {\n const prefix = \"bearer\";\n if (header.length < prefix.length) {\n return -1;\n }\n for (let i = 0; i < prefix.length; i++) {\n if (((header.codePointAt(i) ?? 0) | 32) !== prefix.codePointAt(i)!) {\n return -1;\n }\n }\n let start = prefix.length;\n while (start < header.length && isAsciiWhitespace(header.codePointAt(start) ?? 0)) {\n start++;\n }\n return start < header.length ? start : -1;\n}\n\nexport function extractBearerToken(request: Request): string | null {\n const header = request.headers.get(\"Authorization\")?.trim();\n if (!header) {\n return null;\n }\n const start = bearerTokenStart(header);\n if (start < 0) {\n return null;\n }\n let end = header.length;\n while (end > start && isAsciiWhitespace(header.codePointAt(end - 1) ?? 0)) {\n end--;\n }\n return header.slice(start, end);\n}\n\nexport function unauthorizedResponse(message = \"unauthorized\"): Response {\n return Response.json({ error: message }, { status: 401 });\n}\n\nexport function forbiddenResponse(message = \"forbidden\"): Response {\n return Response.json({ error: message }, { status: 403 });\n}\n\nexport function disabledResponse(): Response {\n return Response.json(\n {\n error: \"gateway_disabled\",\n error_description: \"Set GATEWAY_ENABLED=1 to enable the browser gateway relay\",\n },\n { status: 503 },\n );\n}\n","/** Shared gateway types (browser + server). */\n\nexport const LIVE_VIDEO_TO_VIDEO_CAPABILITY_ID = 35;\n\nexport const DEFAULT_TRICKLE_MIME_TYPE = \"video/mp2t\";\n\nexport const DEFAULT_DISCOVERY_TIMEOUT_MS = 60_000;\n\n/** Trickle GET index: live edge (next write / most recent publish). */\nexport const TRICKLE_SEQ_LATEST = -1;\n\n/** Trickle GET index: current in-flight segment (nextWrite - 1). */\nexport const TRICKLE_SEQ_CURRENT = -2;\n\nexport type StartGatewaySessionRequest = {\n modelId: string;\n orchestratorUrl?: string;\n discoveryUrl?: string;\n params?: Record<string, unknown>;\n streamId?: string;\n requestId?: string;\n};\n\nexport type StartGatewaySessionResponse = {\n sessionId: string;\n manifestId: string;\n /** Trickle segment MIME (usually video/mp2t). */\n mimeType?: string;\n /** First trickle publish sequence index (from orch /next). */\n publishSeq?: number;\n /** Initial trickle subscribe index (default TRICKLE_SEQ_CURRENT / -2). */\n subscribeSeq?: number;\n};\n\nexport type GatewaySessionPublic = {\n sessionId: string;\n manifestId: string;\n mimeType: string;\n};\n\nexport type GatewaySegmentPublishResult = {\n seq: number;\n ok: boolean;\n};\n\nexport type GatewaySubscribeResult = {\n seq: number;\n data: ArrayBuffer;\n contentType: string;\n} | null;\n\n/** One completed trickle output segment from subscribeOutputSegment(). */\nexport type GatewayLiveSubscribeSegment = {\n data: ArrayBuffer;\n segmentSeq: number;\n latestSeq: number;\n /** Client index for the following GET (segmentSeq + 1 after a successful read). */\n nextSeq: number;\n /** Total bytes read from this segment response (used for progressive dedupe). */\n byteCount: number;\n};\n","import { LIVE_VIDEO_TO_VIDEO_CAPABILITY_ID } from \"../types.js\";\n\n/** Build discovery cap query value: `live-video-to-video/{modelId}`. */\nexport function modelCapabilityQuery(modelId: string): string {\n return `live-video-to-video/${modelId.trim()}`;\n}\n\n/** Plain object for OrchestratorRequest.capabilities via grpc proto-loader. */\nexport function buildLv2vCapabilitiesMessage(modelId: string): Record<string, unknown> {\n const capId = LIVE_VIDEO_TO_VIDEO_CAPABILITY_ID;\n return {\n capacities: { [capId]: 1 },\n constraints: {\n PerCapability: {\n [capId]: {\n models: {\n [modelId.trim()]: {},\n },\n },\n },\n },\n };\n}\n\nfunction capabilityForDiscoveryUrl(url: string, modelId: string): string {\n if (!url.includes(\"/v1/discovery/raw\")) {\n return modelCapabilityQuery(modelId);\n }\n if (!modelId.includes(\"/\")) {\n return modelId;\n }\n const segment = modelId.split(\"/\").pop();\n return segment ?? modelId;\n}\n\nexport function appendCapabilityQuery(url: string, modelId: string): string {\n const parsed = new URL(url);\n parsed.searchParams.append(\"caps\", capabilityForDiscoveryUrl(url, modelId));\n return parsed.toString();\n}\n","import http from \"node:http\";\nimport https from \"node:https\";\n\nexport type InsecureFetchInit = {\n method?: string;\n headers?: Record<string, string>;\n body?: Buffer | string | Uint8Array;\n timeoutMs?: number;\n signal?: AbortSignal;\n};\n\nconst insecureHttpsAgent = new https.Agent({\n rejectUnauthorized: false,\n});\n\nfunction encodeRequestBody(raw: InsecureFetchInit[\"body\"]): Buffer | undefined {\n if (raw === undefined) {\n return undefined;\n }\n if (raw instanceof Buffer) {\n return raw;\n }\n return Buffer.from(raw);\n}\n\nexport async function insecureFetch(\n url: string,\n init: InsecureFetchInit = {},\n): Promise<Response> {\n const parsed = new URL(url.includes(\"://\") ? url : `https://${url}`);\n const isHttps = parsed.protocol === \"https:\";\n const lib = isHttps ? https : http;\n const timeoutMs = init.timeoutMs ?? 60_000;\n\n const body = encodeRequestBody(init.body);\n const defaultMethod = body === undefined ? \"GET\" : \"POST\";\n\n return new Promise((resolve, reject) => {\n const headers = { ...init.headers };\n if (body !== undefined && !headers[\"Content-Length\"]) {\n headers[\"Content-Length\"] = String(body.length);\n }\n\n const req = lib.request(\n parsed,\n {\n method: init.method ?? defaultMethod,\n headers,\n agent: isHttps ? insecureHttpsAgent : undefined,\n rejectUnauthorized: false,\n },\n (res) => {\n const chunks: Buffer[] = [];\n res.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n res.on(\"end\", () => {\n const merged = Buffer.concat(chunks);\n const responseHeaders = new Headers();\n for (const [key, value] of Object.entries(res.headers)) {\n if (value === undefined) {\n continue;\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n responseHeaders.append(key, item);\n }\n } else {\n responseHeaders.set(key, value);\n }\n }\n resolve(\n new Response(merged, {\n status: res.statusCode ?? 0,\n headers: responseHeaders,\n }),\n );\n });\n },\n );\n\n const timer = setTimeout(() => {\n req.destroy(new Error(`Request timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n if (init.signal) {\n init.signal.addEventListener(\"abort\", () => {\n req.destroy(new Error(\"aborted\"));\n });\n }\n\n req.on(\"error\", (err) => {\n clearTimeout(timer);\n reject(err);\n });\n\n req.on(\"close\", () => clearTimeout(timer));\n\n if (body !== undefined) {\n req.write(body);\n }\n req.end();\n });\n}\n\nexport async function readJsonResponse<T = Record<string, unknown>>(\n response: Response,\n): Promise<T> {\n const text = await response.text();\n if (!text.trim()) {\n return {} as T;\n }\n return JSON.parse(text) as T;\n}\n\nexport function httpOrigin(url: string): string {\n const parsed = new URL(url.includes(\"://\") ? url : `https://${url}`);\n return `${parsed.protocol}//${parsed.host}`;\n}\n","import { appendCapabilityQuery } from \"./capabilities.js\";\nimport { httpOrigin, insecureFetch, readJsonResponse } from \"./http-insecure.js\";\nimport { DEFAULT_DISCOVERY_TIMEOUT_MS } from \"../types.js\";\n\nconst DISCOVERY_SERVICE_RAW_PATH = \"/v1/discovery/raw\";\n\nexport type DiscoverOrchestratorsInput = {\n orchestratorUrl?: string;\n discoveryUrl?: string;\n signerUrl?: string;\n signerHeaders?: Record<string, string>;\n modelId: string;\n discoveryTimeoutMs?: number;\n};\n\nfunction isDiscoveryServiceEndpoint(url: string): boolean {\n return url.includes(DISCOVERY_SERVICE_RAW_PATH);\n}\n\nfunction normalizeDiscoveryServiceUrl(url: string): string {\n const parsed = new URL(url.trim());\n let path = parsed.pathname.replace(/\\/$/, \"\");\n if (!path.endsWith(DISCOVERY_SERVICE_RAW_PATH)) {\n if (path.endsWith(\"/v1/discovery\") || !path) {\n path = DISCOVERY_SERVICE_RAW_PATH;\n }\n }\n parsed.pathname = path;\n if (!parsed.searchParams.has(\"serviceType\")) {\n parsed.searchParams.set(\"serviceType\", \"legacy\");\n }\n return parsed.toString();\n}\n\nfunction resolveDiscoveryEndpoint(input: DiscoverOrchestratorsInput): {\n url: string;\n headers?: Record<string, string>;\n discoveryService: boolean;\n} {\n if (input.orchestratorUrl?.trim()) {\n const list = input.orchestratorUrl.split(\",\").map((s) => s.trim()).filter(Boolean);\n if (list.length > 0) {\n return { url: \"\", headers: input.signerHeaders, discoveryService: false };\n }\n }\n\n if (input.discoveryUrl?.trim()) {\n let url = input.discoveryUrl.trim();\n const discoveryService = isDiscoveryServiceEndpoint(url);\n if (discoveryService) {\n url = normalizeDiscoveryServiceUrl(url);\n }\n url = appendCapabilityQuery(url, input.modelId);\n return {\n url,\n headers: input.signerHeaders,\n discoveryService,\n };\n }\n\n if (input.signerUrl?.trim()) {\n const url = appendCapabilityQuery(\n `${httpOrigin(input.signerUrl)}/discover-orchestrators`,\n input.modelId,\n );\n return { url, headers: input.signerHeaders, discoveryService: false };\n }\n\n throw new Error(\"discovery requires orchestratorUrl, discoveryUrl, or signerUrl\");\n}\n\nfunction pickDiscoveryAddress(record: Record<string, unknown>): string | undefined {\n if (typeof record.address === \"string\") {\n return record.address;\n }\n if (typeof record.url === \"string\") {\n return record.url;\n }\n return undefined;\n}\n\nfunction parseDiscoveryList(data: unknown): string[] {\n if (!Array.isArray(data)) {\n throw new TypeError(`Discovery response must be a JSON list, got ${typeof data}`);\n }\n const urls: string[] = [];\n for (const item of data) {\n if (!item || typeof item !== \"object\") {\n continue;\n }\n const record = item as Record<string, unknown>;\n const trimmed = pickDiscoveryAddress(record)?.trim();\n if (trimmed) {\n urls.push(trimmed);\n }\n }\n return urls;\n}\n\nexport async function discoverOrchestrators(\n input: DiscoverOrchestratorsInput,\n): Promise<string[]> {\n if (input.orchestratorUrl?.trim()) {\n return input.orchestratorUrl\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n }\n\n const { url, headers } = resolveDiscoveryEndpoint(input);\n const response = await insecureFetch(url, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n ...headers,\n },\n timeoutMs: input.discoveryTimeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS,\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Discovery failed HTTP ${response.status}: ${body.slice(0, 500)}`);\n }\n\n const data = await readJsonResponse(response);\n return parseDiscoveryList(data);\n}\n","import { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { buildLv2vCapabilitiesMessage } from \"./capabilities.js\";\n\nexport type OrchestratorInfoMessage = {\n transcoder?: string;\n SerializeToString?: () => Uint8Array;\n};\n\nexport type GrpcOrchestratorClient = {\n GetOrchestrator: (\n request: Record<string, unknown>,\n callback: (err: Error | null, response: OrchestratorInfoMessage) => void,\n ) => void;\n};\n\ntype GrpcModule = typeof import(\"@grpc/grpc-js\");\ntype ProtoLoaderModule = typeof import(\"@grpc/proto-loader\");\n\ntype ProtoRoot = {\n net: {\n Orchestrator: new (\n target: string,\n credentials: ReturnType<GrpcModule[\"ChannelCredentials\"][\"createSsl\"]>,\n options: Record<string, unknown>,\n ) => GrpcOrchestratorClient;\n Capabilities: {\n serialize: (payload: Record<string, unknown>) => Buffer;\n };\n OrchestratorInfo: {\n serialize: (payload: Record<string, unknown>) => Buffer;\n };\n };\n};\n\nlet cachedRoot: ProtoRoot | null = null;\n\nfunction protoPath(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n return path.resolve(here, \"../../../gateway/proto/lp_rpc.proto\");\n}\n\nfunction requireGrpcPeer<T>(label: string, load: () => T): T {\n try {\n return load();\n } catch {\n throw new Error(\n `${label} is required for @pymthouse/builder-sdk/gateway/server. Install peer dependencies: @grpc/grpc-js @grpc/proto-loader`,\n );\n }\n}\n\nexport function loadProtoRoot(): { grpc: GrpcModule; root: ProtoRoot } {\n const grpc = requireGrpcPeer(\"@grpc/grpc-js\", () =>\n createRequire(import.meta.url)(\"@grpc/grpc-js\"),\n ) as GrpcModule;\n if (cachedRoot) {\n return { grpc, root: cachedRoot };\n }\n\n const protoLoader = requireGrpcPeer(\"@grpc/proto-loader\", () =>\n createRequire(import.meta.url)(\"@grpc/proto-loader\"),\n ) as ProtoLoaderModule;\n\n const packageDefinition = protoLoader.loadSync(protoPath(), {\n keepCase: true,\n longs: String,\n enums: String,\n defaults: true,\n oneofs: true,\n });\n\n cachedRoot = grpc.loadPackageDefinition(packageDefinition) as unknown as ProtoRoot;\n return { grpc, root: cachedRoot };\n}\n\nexport function loadOrchestratorGrpc(): {\n grpc: GrpcModule;\n Orchestrator: ProtoRoot[\"net\"][\"Orchestrator\"];\n} {\n const { grpc, root } = loadProtoRoot();\n return { grpc, Orchestrator: root.net.Orchestrator };\n}\n\nexport function encodeCapabilitiesBase64(modelId: string): string {\n const { root } = loadProtoRoot();\n const bytes = root.net.Capabilities.serialize(buildLv2vCapabilitiesMessage(modelId));\n return Buffer.from(bytes).toString(\"base64\");\n}\n","import { httpOrigin, insecureFetch, readJsonResponse } from \"./http-insecure.js\";\n\nexport type SignerMaterial = {\n address: string;\n sig: string;\n};\n\nconst signerMaterialCache = new Map<string, SignerMaterial>();\n\nfunction cacheKey(signerUrl: string, headers?: Record<string, string>): string {\n const headerPart = headers\n ? JSON.stringify(Object.entries(headers).sort(([a], [b]) => a.localeCompare(b)))\n : \"\";\n return `${httpOrigin(signerUrl)}|${headerPart}`;\n}\n\nexport async function getSignerMaterial(\n signerUrl: string,\n signerHeaders?: Record<string, string>,\n): Promise<SignerMaterial> {\n if (!signerUrl.trim()) {\n return { address: \"\", sig: \"\" };\n }\n\n const key = cacheKey(signerUrl, signerHeaders);\n const cached = signerMaterialCache.get(key);\n if (cached) {\n return cached;\n }\n\n const url = `${httpOrigin(signerUrl)}/sign-orchestrator-info`;\n const response = await insecureFetch(url, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...signerHeaders,\n },\n body: Buffer.from(\"{}\"),\n timeoutMs: 5_000,\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Signer error HTTP ${response.status}: ${body.slice(0, 500)}`);\n }\n\n const data = await readJsonResponse<{ address?: string; signature?: string }>(response);\n const address = data.address?.trim() ?? \"\";\n const sig = data.signature?.trim() ?? \"\";\n if (!address || !sig) {\n throw new Error(\"Signer response missing address or signature\");\n }\n\n const material = { address, sig };\n signerMaterialCache.set(key, material);\n return material;\n}\n\nfunction hexToBytes(hex: string): Buffer {\n let value = hex.trim();\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) {\n value = value.slice(2);\n }\n if (value.length % 2 === 1) {\n value = `0${value}`;\n }\n return Buffer.from(value, \"hex\");\n}\n\nexport function signerMaterialToGrpcFields(material: SignerMaterial): {\n address: Buffer;\n sig: Buffer;\n} {\n return {\n address: hexToBytes(material.address),\n sig: hexToBytes(material.sig),\n };\n}\n","import tls from \"node:tls\";\n\nconst tofuCache = new Map<string, { rootPem: Buffer; authority: string }>();\n\nfunction splitHostPort(target: string): { host: string; port: number } {\n const trimmed = target.trim();\n if (trimmed.startsWith(\"[\")) {\n const host = trimmed.slice(1, trimmed.indexOf(\"]\"));\n const port = Number(trimmed.slice(trimmed.indexOf(\"]\") + 2));\n return { host, port };\n }\n const [host, portRaw] = trimmed.split(\":\");\n return { host, port: Number(portRaw) };\n}\n\nfunction isIpAddress(host: string): boolean {\n return /^\\d{1,3}(\\.\\d{1,3}){3}$/.test(host) || host.includes(\":\");\n}\n\nfunction authorityFromSan(\n san: { typ?: string; val?: string }[],\n): string | undefined {\n for (const entry of san) {\n if (entry.typ === \"DNS\" && entry.val) {\n return entry.val;\n }\n }\n for (const entry of san) {\n if (entry.typ === \"IP\" && entry.val) {\n return entry.val;\n }\n }\n return undefined;\n}\n\nfunction authorityFromSubject(cn: string | string[] | undefined): string {\n if (typeof cn === \"string\") {\n return cn;\n }\n if (Array.isArray(cn) && cn.length > 0) {\n return cn[0] ?? \"\";\n }\n return \"\";\n}\n\nfunction pickCertAuthority(cert: tls.PeerCertificate): string {\n const san = cert.subjectaltname?.split(\", \").map((entry) => {\n const [typ, val] = entry.split(\":\");\n return { typ, val };\n });\n if (san) {\n const fromSan = authorityFromSan(san);\n if (fromSan) {\n return fromSan;\n }\n }\n return authorityFromSubject(cert.subject?.CN);\n}\n\nasync function fetchTofuRootCert(target: string): Promise<{ rootPem: Buffer; authority: string }> {\n const { host, port } = splitHostPort(target);\n return new Promise((resolve, reject) => {\n const servername = isIpAddress(host) ? undefined : host;\n const socket = tls.connect(\n {\n host,\n port,\n servername,\n rejectUnauthorized: false,\n ALPNProtocols: [\"h2\"],\n },\n () => {\n const peer = socket.getPeerCertificate();\n socket.end();\n if (!peer?.raw) {\n reject(new Error(\"No peer certificate\"));\n return;\n }\n const pem = `-----BEGIN CERTIFICATE-----\\n${peer.raw\n .toString(\"base64\")\n .match(/.{1,64}/g)\n ?.join(\"\\n\")}\\n-----END CERTIFICATE-----\\n`;\n const authority = pickCertAuthority(peer) || host;\n resolve({ rootPem: Buffer.from(pem), authority });\n },\n );\n socket.on(\"error\", reject);\n socket.setTimeout(5000, () => {\n socket.destroy(new Error(\"TLS probe timeout\"));\n });\n });\n}\n\nexport function parseGrpcTarget(orchUrl: string): string {\n const url = orchUrl.includes(\"://\") ? orchUrl : `https://${orchUrl}`;\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") {\n throw new Error(`Only https orchestrator URLs are supported (got ${parsed.protocol})`);\n }\n return parsed.host;\n}\n\nexport async function trustOnFirstUse(target: string): Promise<{\n rootPem: Buffer;\n authority: string;\n}> {\n const cached = tofuCache.get(target);\n if (cached) {\n return cached;\n }\n const material = await fetchTofuRootCert(target);\n tofuCache.set(target, material);\n return material;\n}\n\nexport function evictTofuCache(target: string): void {\n tofuCache.delete(target);\n}\n\nexport function isCertVerifyError(message: string): boolean {\n return message.includes(\"CERTIFICATE_VERIFY_FAILED\");\n}\n","import { buildLv2vCapabilitiesMessage } from \"./capabilities.js\";\nimport {\n loadOrchestratorGrpc,\n loadProtoRoot,\n type OrchestratorInfoMessage,\n} from \"./grpc-loader.js\";\nimport { getSignerMaterial, signerMaterialToGrpcFields } from \"./signer-material.js\";\nimport {\n evictTofuCache,\n isCertVerifyError,\n parseGrpcTarget,\n trustOnFirstUse,\n} from \"./tofu.js\";\n\nexport async function getOrchestratorInfo(input: {\n orchUrl: string;\n signerUrl: string;\n signerHeaders?: Record<string, string>;\n modelId: string;\n useTofu?: boolean;\n}): Promise<OrchestratorInfoMessage> {\n const useTofu = input.useTofu !== false;\n const target = parseGrpcTarget(input.orchUrl);\n const signer = await getSignerMaterial(input.signerUrl, input.signerHeaders);\n const { address, sig } = signerMaterialToGrpcFields(signer);\n\n const request = {\n address,\n sig,\n capabilities: buildLv2vCapabilitiesMessage(input.modelId),\n ignoreCapacityCheck: true,\n };\n\n const maxAttempts = useTofu ? 2 : 1;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n try {\n return await callGetOrchestrator(target, request, useTofu);\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n if (useTofu && attempt === 0 && isCertVerifyError(lastError.message)) {\n evictTofuCache(target);\n continue;\n }\n throw lastError;\n }\n }\n\n throw lastError ?? new Error(\"GetOrchestrator failed\");\n}\n\nfunction callGetOrchestrator(\n target: string,\n request: Record<string, unknown>,\n useTofu: boolean,\n): Promise<OrchestratorInfoMessage> {\n return new Promise((resolve, reject) => {\n void (async () => {\n try {\n const { grpc, Orchestrator } = loadOrchestratorGrpc();\n let credentials: ReturnType<typeof grpc.credentials.createSsl>;\n let options: Record<string, unknown> = {};\n\n if (useTofu) {\n const { rootPem, authority } = await trustOnFirstUse(target);\n credentials = grpc.credentials.createSsl(rootPem);\n options = {\n \"grpc.ssl_target_name_override\": authority,\n \"grpc.default_authority\": authority,\n };\n } else {\n credentials = grpc.credentials.createSsl();\n }\n\n const client = new Orchestrator(target, credentials, options);\n client.GetOrchestrator(request, (err, response) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(response);\n });\n } catch (e) {\n reject(e);\n }\n })();\n });\n}\n\nexport function serializeOrchestratorInfo(info: OrchestratorInfoMessage): Buffer {\n if (typeof info.SerializeToString === \"function\") {\n return Buffer.from(info.SerializeToString());\n }\n\n // @grpc/proto-loader returns plain objects without SerializeToString.\n const { root } = loadProtoRoot();\n return Buffer.from(root.net.OrchestratorInfo.serialize({ ...info }));\n}\n","import type { OrchestratorInfoMessage } from \"./grpc-loader.js\";\nimport { httpOrigin, insecureFetch, readJsonResponse } from \"./http-insecure.js\";\nimport { getOrchestratorInfo, serializeOrchestratorInfo } from \"./orch-grpc.js\";\nimport { encodeCapabilitiesBase64 } from \"./grpc-loader.js\";\n\nexport type PaymentHeaders = {\n payment: string;\n segCreds: string;\n};\n\nexport class PaymentSession {\n private manifestId: string | null = null;\n private state: Record<string, string> | null = null;\n private orchestratorInfo: OrchestratorInfoMessage;\n\n constructor(\n private readonly signerUrl: string,\n orchestratorInfo: OrchestratorInfoMessage,\n private readonly signerHeaders: Record<string, string> | undefined,\n private readonly modelId: string,\n private readonly useTofu: boolean,\n ) {\n this.orchestratorInfo = orchestratorInfo;\n }\n\n setManifestId(manifestId: string): void {\n this.manifestId = manifestId.trim();\n }\n\n get transcoderUrl(): string {\n const url = this.orchestratorInfo.transcoder?.trim();\n if (!url) {\n throw new Error(\"OrchestratorInfo missing transcoder URL\");\n }\n return url;\n }\n\n async getPaymentHeaders(): Promise<PaymentHeaders> {\n if (!this.signerUrl.trim()) {\n return { payment: \"\", segCreds: \"\" };\n }\n\n let attempts = 0;\n while (true) {\n try {\n return await this.requestPayment();\n } catch (err) {\n if (attempts >= 3 || !(err instanceof SignerRefreshRequired)) {\n throw err;\n }\n this.orchestratorInfo = await getOrchestratorInfo({\n orchUrl: this.transcoderUrl,\n signerUrl: this.signerUrl,\n signerHeaders: this.signerHeaders,\n modelId: this.modelId,\n useTofu: this.useTofu,\n });\n attempts += 1;\n }\n }\n }\n\n async sendPayment(orchestratorUrl?: string): Promise<void> {\n const headers = await this.getPaymentHeaders();\n const target = orchestratorUrl?.trim() || this.transcoderUrl;\n const url = `${httpOrigin(target)}/payment`;\n const response = await insecureFetch(url, {\n method: \"POST\",\n headers: {\n \"Livepeer-Payment\": headers.payment,\n \"Livepeer-Segment\": headers.segCreds,\n },\n body: Buffer.alloc(0),\n timeoutMs: 5_000,\n });\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Payment POST failed HTTP ${response.status}: ${body.slice(0, 300)}`);\n }\n }\n\n private async requestPayment(): Promise<PaymentHeaders> {\n const url = `${httpOrigin(this.signerUrl)}/generate-live-payment`;\n const orchB64 = serializeOrchestratorInfo(this.orchestratorInfo).toString(\"base64\");\n const capsB64 = encodeCapabilitiesBase64(this.modelId);\n\n const payload: Record<string, unknown> = {\n orchestrator: orchB64,\n type: \"lv2v\",\n capabilities: capsB64,\n };\n if (this.manifestId) {\n payload.ManifestID = this.manifestId;\n }\n if (this.state) {\n payload.state = this.state;\n }\n\n const response = await insecureFetch(url, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...this.signerHeaders,\n },\n body: Buffer.from(JSON.stringify(payload)),\n timeoutMs: 10_000,\n });\n\n if (response.status === 480) {\n const orchHeader = response.headers.get(\"Livepeer-Orchestrator-URL\")?.trim();\n throw new SignerRefreshRequired(orchHeader ?? \"\");\n }\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`generate-live-payment HTTP ${response.status}: ${body.slice(0, 500)}`);\n }\n\n const data = await readJsonResponse<{\n payment?: string;\n segCreds?: string;\n state?: Record<string, string>;\n }>(response);\n\n const payment = data.payment ?? \"\";\n const segCreds = data.segCreds ?? \"\";\n if (!payment) {\n throw new Error(\"generate-live-payment missing payment field\");\n }\n if (!data.state || typeof data.state !== \"object\") {\n throw new Error(\"generate-live-payment missing state object\");\n }\n this.state = data.state;\n return { payment, segCreds };\n }\n}\n\nexport class SignerRefreshRequired extends Error {\n constructor(readonly orchestratorUrl: string) {\n super(\"Signer refresh required (HTTP 480)\");\n this.name = \"SignerRefreshRequired\";\n }\n}\n","import { discoverOrchestrators } from \"./discovery.js\";\nimport { getOrchestratorInfo } from \"./orch-grpc.js\";\nimport { httpOrigin, insecureFetch, readJsonResponse } from \"./http-insecure.js\";\nimport { PaymentSession } from \"./payment-session.js\";\nimport type { StartGatewaySessionRequest } from \"../types.js\";\nimport { DEFAULT_TRICKLE_MIME_TYPE } from \"../types.js\";\n\nexport type Lv2vJobResult = {\n manifestId: string;\n publishUrl: string;\n subscribeUrl: string;\n controlUrl?: string;\n eventsUrl?: string;\n mimeType: string;\n paymentSession: PaymentSession;\n orchestratorUrl: string;\n};\n\nexport type StartLv2vSessionInput = {\n request: StartGatewaySessionRequest;\n signerUrl: string;\n signerHeaders?: Record<string, string>;\n discoveryUrl?: string;\n discoveryTimeoutMs?: number;\n useTofu?: boolean;\n};\n\nexport async function startLv2vSession(input: StartLv2vSessionInput): Promise<Lv2vJobResult> {\n const orchList = await discoverOrchestrators({\n orchestratorUrl: input.request.orchestratorUrl,\n discoveryUrl: input.request.discoveryUrl ?? input.discoveryUrl,\n signerUrl: input.signerUrl,\n signerHeaders: input.signerHeaders,\n modelId: input.request.modelId,\n discoveryTimeoutMs: input.discoveryTimeoutMs,\n });\n\n if (orchList.length === 0) {\n throw new Error(\"No orchestrators discovered\");\n }\n\n const rejections: Array<{ url: string; reason: string }> = [];\n for (const orchUrl of orchList) {\n try {\n return await startLv2vOnOrchestrator(orchUrl, input);\n } catch (err) {\n rejections.push({\n url: orchUrl,\n reason: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n throw new Error(\n `All orchestrators failed (${rejections.length} tried): ${rejections\n .map((r) => `${r.url}: ${r.reason}`)\n .join(\"; \")}`,\n );\n}\n\nasync function startLv2vOnOrchestrator(\n orchUrl: string,\n input: StartLv2vSessionInput,\n): Promise<Lv2vJobResult> {\n const info = await getOrchestratorInfo({\n orchUrl,\n signerUrl: input.signerUrl,\n signerHeaders: input.signerHeaders,\n modelId: input.request.modelId,\n useTofu: input.useTofu,\n });\n\n const paymentSession = new PaymentSession(\n input.signerUrl,\n info,\n input.signerHeaders,\n input.request.modelId,\n input.useTofu !== false,\n );\n\n const paymentHeaders = await paymentSession.getPaymentHeaders();\n const transcoder = paymentSession.transcoderUrl;\n const url = `${httpOrigin(transcoder)}/live-video-to-video`;\n\n const body: Record<string, unknown> = {\n model_id: input.request.modelId,\n };\n if (input.request.params) {\n body.params = input.request.params;\n }\n if (input.request.streamId) {\n body.stream_id = input.request.streamId;\n }\n if (input.request.requestId) {\n body.gateway_request_id = input.request.requestId;\n }\n\n const response = await insecureFetch(url, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Livepeer-Payment\": paymentHeaders.payment,\n \"Livepeer-Segment\": paymentHeaders.segCreds,\n },\n body: Buffer.from(JSON.stringify(body)),\n timeoutMs: 10_000,\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`live-video-to-video HTTP ${response.status}: ${text.slice(0, 500)}`);\n }\n\n const data = await readJsonResponse<{\n manifest_id?: string;\n publish_url?: string;\n subscribe_url?: string;\n control_url?: string;\n events_url?: string;\n }>(response);\n\n const manifestId = data.manifest_id?.trim();\n const publishUrl = data.publish_url?.trim();\n const subscribeUrl = data.subscribe_url?.trim();\n if (!manifestId) {\n throw new Error(\"live-video-to-video response missing manifest_id\");\n }\n if (!publishUrl) {\n throw new Error(\"live-video-to-video response missing publish_url\");\n }\n if (!subscribeUrl) {\n throw new Error(\"live-video-to-video response missing subscribe_url\");\n }\n\n paymentSession.setManifestId(manifestId);\n\n return {\n manifestId,\n publishUrl,\n subscribeUrl,\n controlUrl: data.control_url?.trim(),\n eventsUrl: data.events_url?.trim(),\n mimeType: DEFAULT_TRICKLE_MIME_TYPE,\n paymentSession,\n orchestratorUrl: orchUrl,\n };\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type { PaymentSession } from \"./payment-session.js\";\n\nexport type GatewaySessionRecord = {\n id: string;\n ownerTokenHash: string;\n manifestId: string;\n publishUrl: string;\n subscribeUrl: string;\n controlUrl?: string;\n mimeType: string;\n paymentSession: PaymentSession;\n orchestratorUrl: string;\n publishSeq: number;\n subscribeSeq: number;\n trickleCreated: boolean;\n /** First segment POST to orch includes Lp-Trickle-Reset. */\n trickleResetSent: boolean;\n paymentInterval?: ReturnType<typeof setInterval>;\n closed: boolean;\n};\n\nconst SESSIONS_GLOBAL_KEY = Symbol.for(\"@pymthouse/builder-sdk/gateway-sessions\");\n\nfunction sessionsMap(): Map<string, GatewaySessionRecord> {\n const globalStore = globalThis as typeof globalThis & {\n [SESSIONS_GLOBAL_KEY]?: Map<string, GatewaySessionRecord>;\n };\n globalStore[SESSIONS_GLOBAL_KEY] ??= new Map();\n return globalStore[SESSIONS_GLOBAL_KEY];\n}\n\nexport function hashBearerToken(token: string): string {\n return createHash(\"sha256\").update(token.trim()).digest(\"hex\");\n}\n\nexport function createSessionId(): string {\n return randomUUID();\n}\n\nexport function putSession(record: GatewaySessionRecord): void {\n sessionsMap().set(record.id, record);\n}\n\nexport function getSession(sessionId: string): GatewaySessionRecord | undefined {\n return sessionsMap().get(sessionId);\n}\n\nexport function deleteSession(sessionId: string): boolean {\n return sessionsMap().delete(sessionId);\n}\n\nexport function assertSessionOwner(\n record: GatewaySessionRecord,\n ownerTokenHash: string,\n): void {\n if (record.ownerTokenHash !== ownerTokenHash) {\n throw new Error(\"Forbidden: session does not belong to this bearer token\");\n }\n}\n\nexport function closeSessionRecord(record: GatewaySessionRecord): void {\n if (record.closed) {\n return;\n }\n record.closed = true;\n if (record.paymentInterval) {\n clearInterval(record.paymentInterval);\n record.paymentInterval = undefined;\n }\n}\n","import { TRICKLE_SEQ_LATEST } from \"../types.js\";\nimport { insecureFetch } from \"./http-insecure.js\";\nimport type { GatewaySessionRecord } from \"./session-store.js\";\n\nfunction parseTrickleIntHeader(headers: Headers, name: string): number | null {\n const raw = headers.get(name);\n if (raw === null) {\n return null;\n }\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction publishBaseUrl(record: GatewaySessionRecord): string {\n return record.publishUrl.replace(/\\/$/, \"\");\n}\n\nfunction subscribeBaseUrl(record: GatewaySessionRecord): string {\n return record.subscribeUrl.replace(/\\/$/, \"\");\n}\n\nexport async function ensureTrickleChannel(record: GatewaySessionRecord): Promise<void> {\n if (record.trickleCreated) {\n return;\n }\n const response = await insecureFetch(record.publishUrl, {\n method: \"POST\",\n headers: {\n \"Expect-Content\": record.mimeType,\n },\n body: Buffer.alloc(0),\n timeoutMs: 10_000,\n });\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Trickle create failed HTTP ${response.status}: ${body.slice(0, 300)}`);\n }\n record.trickleCreated = true;\n}\n\n/** Resolve starting sequence from trickle GET {publishUrl}/next (matches Python publisher). */\nexport async function resolveTricklePublishSeq(record: GatewaySessionRecord): Promise<number> {\n await ensureTrickleChannel(record);\n const url = `${publishBaseUrl(record)}/next`;\n const response = await insecureFetch(url, {\n method: \"GET\",\n timeoutMs: 10_000,\n });\n if (!response.ok) {\n return 0;\n }\n const latest = response.headers.get(\"Lp-Trickle-Latest\");\n if (latest !== null) {\n const parsed = Number.parseInt(latest, 10);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return 0;\n}\n\nexport async function prepareTricklePublish(record: GatewaySessionRecord): Promise<void> {\n await ensureTrickleChannel(record);\n if (record.publishSeq < 0) {\n record.publishSeq = await resolveTricklePublishSeq(record);\n }\n}\n\nexport async function publishTrickleSegment(\n record: GatewaySessionRecord,\n seq: number,\n bytes: Buffer,\n contentType: string,\n): Promise<void> {\n await prepareTricklePublish(record);\n\n const url = `${publishBaseUrl(record)}/${seq}`;\n const headers: Record<string, string> = {\n \"Content-Type\": contentType,\n };\n if (!record.trickleResetSent) {\n headers[\"Lp-Trickle-Reset\"] = \"1\";\n record.trickleResetSent = true;\n }\n\n const response = await insecureFetch(url, {\n method: \"POST\",\n headers,\n body: bytes,\n timeoutMs: 120_000,\n });\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Trickle publish failed HTTP ${response.status}: ${body.slice(0, 300)}`);\n }\n\n record.publishSeq = Math.max(record.publishSeq, seq + 1);\n}\n\nexport type TrickleSubscribeResult =\n | {\n data: ReadableStream<Uint8Array>;\n contentType: string;\n segmentSeq: number;\n nextSeq: number;\n latestSeq: number;\n }\n | { wait: true; latestSeq: number };\n\n/** Leading-edge subscribe index via GET {subscribeUrl}/next (plain-text body + header). */\nexport async function resolveTrickleSubscribeSeq(record: GatewaySessionRecord): Promise<number> {\n const url = `${subscribeBaseUrl(record)}/next`;\n const response = await insecureFetch(url, {\n method: \"GET\",\n timeoutMs: 10_000,\n });\n if (!response.ok) {\n return TRICKLE_SEQ_LATEST;\n }\n const fromHeader = parseTrickleIntHeader(response.headers, \"Lp-Trickle-Latest\");\n if (fromHeader !== null) {\n return fromHeader;\n }\n const body = (await response.text()).trim();\n const fromBody = Number.parseInt(body, 10);\n return Number.isFinite(fromBody) ? fromBody : TRICKLE_SEQ_LATEST;\n}\n\nexport async function subscribeTrickleSegment(\n record: GatewaySessionRecord,\n seq: number,\n): Promise<TrickleSubscribeResult | null> {\n const url = `${subscribeBaseUrl(record)}/${seq}`;\n const response = await insecureFetch(url, {\n method: \"GET\",\n headers: record.trickleCreated ? { Connection: \"close\" } : undefined,\n timeoutMs: 30_000,\n });\n\n if (response.status === 404) {\n // Match TrickleSubscriber behavior: expose leading edge so caller can resync.\n const latest = await resolveTrickleSubscribeSeq(record);\n return { wait: true, latestSeq: latest };\n }\n\n if (response.status === 470) {\n const latestHeader = response.headers.get(\"Lp-Trickle-Latest\");\n const parsedLatest = latestHeader ? Number.parseInt(latestHeader, 10) : Number.NaN;\n const latest = Number.isFinite(parsedLatest)\n ? parsedLatest\n : await resolveTrickleSubscribeSeq(record);\n // Polling ahead of the live edge — wait for the orchestrator to catch up.\n if (latest < seq) {\n return { wait: true, latestSeq: latest };\n }\n // No progress possible yet (e.g. seq=-2, latest=-2): instruct caller to wait.\n if (latest === seq) {\n return { wait: true, latestSeq: latest };\n }\n return subscribeTrickleSegment(record, latest);\n }\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Trickle subscribe failed HTTP ${response.status}: ${body.slice(0, 300)}`);\n }\n\n const data = response.body;\n if (!data) {\n throw new Error(\"Trickle subscribe response missing body stream\");\n }\n const contentType = response.headers.get(\"Content-Type\") ?? record.mimeType;\n const segmentSeq =\n parseTrickleIntHeader(response.headers, \"Lp-Trickle-Seq\") ?? Math.max(seq, 0);\n const latestSeq =\n parseTrickleIntHeader(response.headers, \"Lp-Trickle-Latest\") ?? segmentSeq;\n return { data, contentType, segmentSeq, nextSeq: segmentSeq + 1, latestSeq };\n}\n\nexport async function closeTricklePublish(record: GatewaySessionRecord): Promise<void> {\n if (!record.trickleCreated) {\n return;\n }\n await insecureFetch(record.publishUrl, {\n method: \"DELETE\",\n timeoutMs: 5_000,\n }).catch(() => undefined);\n record.trickleCreated = false;\n}\n","import type { GatewayServerConfig } from \"./config.js\";\nimport {\n extractBearerToken,\n disabledResponse,\n forbiddenResponse,\n unauthorizedResponse,\n} from \"./auth.js\";\nimport { TRICKLE_SEQ_CURRENT } from \"../types.js\";\nimport { startLv2vSession } from \"./lv2v.js\";\nimport {\n assertSessionOwner,\n closeSessionRecord,\n createSessionId,\n deleteSession,\n getSession,\n hashBearerToken,\n putSession,\n} from \"./session-store.js\";\nimport {\n closeTricklePublish,\n prepareTricklePublish,\n publishTrickleSegment,\n subscribeTrickleSegment,\n} from \"./trickle-relay.js\";\nimport type { StartGatewaySessionRequest } from \"../types.js\";\n\nfunction signerHeadersFromBearer(token: string): Record<string, string> {\n return { Authorization: `Bearer ${token}` };\n}\n\nfunction startPaymentLoop(\n config: GatewayServerConfig,\n record: ReturnType<typeof getSession>,\n): void {\n if (!record || record.paymentInterval) {\n return;\n }\n record.paymentInterval = setInterval(() => {\n void record.paymentSession.sendPayment(record.orchestratorUrl).catch(() => undefined);\n }, config.paymentIntervalMs);\n}\n\nasync function parseStartGatewaySessionRequest(\n request: Request,\n config: GatewayServerConfig,\n): Promise<StartGatewaySessionRequest | Response> {\n try {\n const parsed: unknown = await request.json();\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return Response.json({ error: \"invalid_request\" }, { status: 400 });\n }\n const record = parsed as Record<string, unknown>;\n const modelId = typeof record.modelId === \"string\" ? record.modelId.trim() : \"\";\n if (!modelId) {\n return Response.json({ error: \"modelId is required\" }, { status: 400 });\n }\n return {\n modelId,\n orchestratorUrl:\n typeof record.orchestratorUrl === \"string\" ? record.orchestratorUrl : undefined,\n discoveryUrl:\n typeof record.discoveryUrl === \"string\" ? record.discoveryUrl : config.discoveryUrl,\n params:\n record.params && typeof record.params === \"object\" && !Array.isArray(record.params)\n ? (record.params as Record<string, unknown>)\n : undefined,\n streamId: typeof record.streamId === \"string\" ? record.streamId : undefined,\n requestId: typeof record.requestId === \"string\" ? record.requestId : undefined,\n };\n } catch {\n return Response.json({ error: \"invalid_json\" }, { status: 400 });\n }\n}\n\nasync function startGatewaySessionRecord(\n config: GatewayServerConfig,\n token: string,\n body: StartGatewaySessionRequest,\n): Promise<Response> {\n try {\n const job = await startLv2vSession({\n request: body,\n signerUrl: config.signerUrl,\n signerHeaders: signerHeadersFromBearer(token),\n discoveryUrl: config.discoveryUrl,\n discoveryTimeoutMs: config.discoveryTimeoutMs,\n useTofu: config.useTofu,\n });\n\n const sessionId = createSessionId();\n const ownerTokenHash = hashBearerToken(token);\n const sessionRecord = {\n id: sessionId,\n ownerTokenHash,\n manifestId: job.manifestId,\n publishUrl: job.publishUrl,\n subscribeUrl: job.subscribeUrl,\n controlUrl: job.controlUrl,\n mimeType: job.mimeType,\n paymentSession: job.paymentSession,\n orchestratorUrl: job.orchestratorUrl,\n publishSeq: -1,\n subscribeSeq: TRICKLE_SEQ_CURRENT,\n trickleCreated: false,\n trickleResetSent: false,\n closed: false,\n };\n putSession(sessionRecord);\n startPaymentLoop(config, sessionRecord);\n\n let publishSeq = 0;\n try {\n await prepareTricklePublish(sessionRecord);\n publishSeq = Math.max(0, sessionRecord.publishSeq);\n } catch (prepareErr) {\n const message = prepareErr instanceof Error ? prepareErr.message : String(prepareErr);\n return Response.json({ error: \"trickle_prepare_failed\", message }, { status: 502 });\n }\n\n return Response.json({\n sessionId,\n manifestId: job.manifestId,\n mimeType: job.mimeType,\n publishSeq,\n subscribeSeq: sessionRecord.subscribeSeq,\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return Response.json({ error: \"start_session_failed\", message }, { status: 502 });\n }\n}\n\nexport function createGatewayStartSessionHandler(config: GatewayServerConfig | null) {\n return async (request: Request): Promise<Response> => {\n if (!config) {\n return disabledResponse();\n }\n const token = extractBearerToken(request);\n if (!token) {\n return unauthorizedResponse();\n }\n\n const body = await parseStartGatewaySessionRequest(request, config);\n if (body instanceof Response) {\n return body;\n }\n return startGatewaySessionRecord(config, token, body);\n };\n}\n\nexport function createGatewayPublishSegmentHandler(config: GatewayServerConfig | null) {\n return async (\n request: Request,\n context: { params: Promise<{ id: string; seq: string }> },\n ): Promise<Response> => {\n if (!config) {\n return disabledResponse();\n }\n const token = extractBearerToken(request);\n if (!token) {\n return unauthorizedResponse();\n }\n\n const { id, seq: seqRaw } = await context.params;\n const seq = Number.parseInt(seqRaw, 10);\n if (!Number.isFinite(seq)) {\n return Response.json({ error: \"invalid_seq\" }, { status: 400 });\n }\n\n const record = getSession(id);\n if (!record || record.closed) {\n return Response.json({ error: \"session_not_found\" }, { status: 404 });\n }\n\n try {\n assertSessionOwner(record, hashBearerToken(token));\n } catch {\n return forbiddenResponse();\n }\n\n const bytes = Buffer.from(await request.arrayBuffer());\n const contentType =\n request.headers.get(\"Content-Type\")?.trim() || record.mimeType;\n\n try {\n await publishTrickleSegment(record, seq, bytes, contentType);\n record.publishSeq = Math.max(record.publishSeq, seq);\n return Response.json({ seq, ok: true });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return Response.json({ error: \"publish_failed\", message }, { status: 502 });\n }\n };\n}\n\nexport function createGatewaySubscribeSegmentHandler(config: GatewayServerConfig | null) {\n return async (\n request: Request,\n context: { params: Promise<{ id: string }> },\n ): Promise<Response> => {\n if (!config) {\n return disabledResponse();\n }\n const token = extractBearerToken(request);\n if (!token) {\n return unauthorizedResponse();\n }\n\n const { id } = await context.params;\n const record = getSession(id);\n if (!record || record.closed) {\n return Response.json({ error: \"session_not_found\" }, { status: 404 });\n }\n\n try {\n assertSessionOwner(record, hashBearerToken(token));\n } catch {\n return forbiddenResponse();\n }\n\n const url = new URL(request.url);\n const seqParam = url.searchParams.get(\"seq\");\n const seq =\n seqParam === null ? record.subscribeSeq : Number.parseInt(seqParam, 10);\n\n try {\n const segment = await subscribeTrickleSegment(record, seq);\n if (!segment) {\n return new Response(null, { status: 204 });\n }\n if (\"wait\" in segment) {\n return new Response(null, {\n status: 204,\n headers: {\n \"X-Gateway-Latest-Seq\": String(segment.latestSeq),\n \"X-Gateway-Wait\": \"1\",\n },\n });\n }\n record.subscribeSeq = segment.nextSeq;\n return new Response(segment.data, {\n status: 200,\n headers: {\n \"Content-Type\": segment.contentType,\n \"X-Gateway-Segment-Seq\": String(segment.segmentSeq),\n \"X-Gateway-Next-Seq\": String(segment.nextSeq),\n \"X-Gateway-Latest-Seq\": String(segment.latestSeq),\n },\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return Response.json({ error: \"subscribe_failed\", message }, { status: 502 });\n }\n };\n}\n\nexport function createGatewayStopSessionHandler(config: GatewayServerConfig | null) {\n return async (\n request: Request,\n context: { params: Promise<{ id: string }> },\n ): Promise<Response> => {\n if (!config) {\n return disabledResponse();\n }\n const token = extractBearerToken(request);\n if (!token) {\n return unauthorizedResponse();\n }\n\n const { id } = await context.params;\n const record = getSession(id);\n if (!record) {\n return new Response(null, { status: 204 });\n }\n\n try {\n assertSessionOwner(record, hashBearerToken(token));\n } catch {\n return forbiddenResponse();\n }\n\n closeSessionRecord(record);\n await closeTricklePublish(record).catch(() => undefined);\n deleteSession(id);\n return new Response(null, { status: 204 });\n };\n}\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
type GatewayServerConfig = {
|
|
2
|
-
enabled: boolean;
|
|
3
|
-
signerUrl: string;
|
|
4
|
-
discoveryUrl?: string;
|
|
5
|
-
discoveryTimeoutMs: number;
|
|
6
|
-
useTofu: boolean;
|
|
7
|
-
paymentIntervalMs: number;
|
|
8
|
-
};
|
|
9
|
-
declare function readGatewayConfigFromEnv(env?: NodeJS.ProcessEnv): GatewayServerConfig | null;
|
|
10
|
-
|
|
11
|
-
declare function createGatewayStartSessionHandler(config: GatewayServerConfig | null): (request: Request) => Promise<Response>;
|
|
12
|
-
declare function createGatewayPublishSegmentHandler(config: GatewayServerConfig | null): (request: Request, context: {
|
|
13
|
-
params: Promise<{
|
|
14
|
-
id: string;
|
|
15
|
-
seq: string;
|
|
16
|
-
}>;
|
|
17
|
-
}) => Promise<Response>;
|
|
18
|
-
declare function createGatewaySubscribeSegmentHandler(config: GatewayServerConfig | null): (request: Request, context: {
|
|
19
|
-
params: Promise<{
|
|
20
|
-
id: string;
|
|
21
|
-
}>;
|
|
22
|
-
}) => Promise<Response>;
|
|
23
|
-
declare function createGatewayStopSessionHandler(config: GatewayServerConfig | null): (request: Request, context: {
|
|
24
|
-
params: Promise<{
|
|
25
|
-
id: string;
|
|
26
|
-
}>;
|
|
27
|
-
}) => Promise<Response>;
|
|
28
|
-
|
|
29
|
-
declare function hashBearerToken(token: string): string;
|
|
30
|
-
|
|
31
|
-
export { type GatewayServerConfig, createGatewayPublishSegmentHandler, createGatewayStartSessionHandler, createGatewayStopSessionHandler, createGatewaySubscribeSegmentHandler, hashBearerToken, readGatewayConfigFromEnv };
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
type GatewayServerConfig = {
|
|
2
|
-
enabled: boolean;
|
|
3
|
-
signerUrl: string;
|
|
4
|
-
discoveryUrl?: string;
|
|
5
|
-
discoveryTimeoutMs: number;
|
|
6
|
-
useTofu: boolean;
|
|
7
|
-
paymentIntervalMs: number;
|
|
8
|
-
};
|
|
9
|
-
declare function readGatewayConfigFromEnv(env?: NodeJS.ProcessEnv): GatewayServerConfig | null;
|
|
10
|
-
|
|
11
|
-
declare function createGatewayStartSessionHandler(config: GatewayServerConfig | null): (request: Request) => Promise<Response>;
|
|
12
|
-
declare function createGatewayPublishSegmentHandler(config: GatewayServerConfig | null): (request: Request, context: {
|
|
13
|
-
params: Promise<{
|
|
14
|
-
id: string;
|
|
15
|
-
seq: string;
|
|
16
|
-
}>;
|
|
17
|
-
}) => Promise<Response>;
|
|
18
|
-
declare function createGatewaySubscribeSegmentHandler(config: GatewayServerConfig | null): (request: Request, context: {
|
|
19
|
-
params: Promise<{
|
|
20
|
-
id: string;
|
|
21
|
-
}>;
|
|
22
|
-
}) => Promise<Response>;
|
|
23
|
-
declare function createGatewayStopSessionHandler(config: GatewayServerConfig | null): (request: Request, context: {
|
|
24
|
-
params: Promise<{
|
|
25
|
-
id: string;
|
|
26
|
-
}>;
|
|
27
|
-
}) => Promise<Response>;
|
|
28
|
-
|
|
29
|
-
declare function hashBearerToken(token: string): string;
|
|
30
|
-
|
|
31
|
-
export { type GatewayServerConfig, createGatewayPublishSegmentHandler, createGatewayStartSessionHandler, createGatewayStopSessionHandler, createGatewaySubscribeSegmentHandler, hashBearerToken, readGatewayConfigFromEnv };
|