@opengeni/sdk 4.0.2 → 5.0.3-canary.0

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.
Files changed (48) hide show
  1. package/README.md +58 -9
  2. package/dist/artifact-client.d.ts +18 -8
  3. package/dist/artifacts.js +4 -4
  4. package/dist/browser.js +2 -2
  5. package/dist/chat/ids.d.ts +3 -3
  6. package/dist/chat/index.js +38 -51
  7. package/dist/chat/index.js.map +1 -1
  8. package/dist/chat/opengeni.d.ts +10 -12
  9. package/dist/chat/types.d.ts +7 -3
  10. package/dist/{chunk-O23OOWJK.js → chunk-4YAL54F3.js} +2 -2
  11. package/dist/{chunk-UW22XVCT.js → chunk-ARGX7UY4.js} +97 -2
  12. package/dist/chunk-ARGX7UY4.js.map +1 -0
  13. package/dist/chunk-J5USCWPE.js +195 -0
  14. package/dist/chunk-J5USCWPE.js.map +1 -0
  15. package/dist/{chunk-WNEGCYCE.js → chunk-TARU5CD2.js} +1 -1
  16. package/dist/chunk-TARU5CD2.js.map +1 -0
  17. package/dist/{chunk-3IZMCD2K.js → chunk-TOB3B4ZJ.js} +28 -41
  18. package/dist/chunk-TOB3B4ZJ.js.map +1 -0
  19. package/dist/{chunk-2H7P45YQ.js → chunk-UQGHX4DI.js} +173 -7
  20. package/dist/chunk-UQGHX4DI.js.map +1 -0
  21. package/dist/client.d.ts +39 -4
  22. package/dist/core.js +3 -3
  23. package/dist/document-authority.js +3 -3
  24. package/dist/editable-artifacts.js +1 -1
  25. package/dist/embedding-client.d.ts +72 -0
  26. package/dist/index.d.ts +4 -1
  27. package/dist/index.js +13 -8
  28. package/dist/index.js.map +1 -1
  29. package/dist/site-tool-bridge.d.ts +39 -0
  30. package/dist/site.d.ts +2 -0
  31. package/dist/site.js +7 -3
  32. package/dist/types.d.ts +23 -12
  33. package/package.json +3 -2
  34. package/src/artifact-client.ts +38 -63
  35. package/src/chat/ids.ts +3 -3
  36. package/src/chat/opengeni.ts +41 -57
  37. package/src/chat/types.ts +7 -3
  38. package/src/client.ts +253 -12
  39. package/src/embedding-client.ts +308 -0
  40. package/src/index.ts +16 -1
  41. package/src/site-tool-bridge.ts +141 -0
  42. package/src/site.ts +7 -0
  43. package/src/types.ts +18 -6
  44. package/dist/chunk-2H7P45YQ.js.map +0 -1
  45. package/dist/chunk-3IZMCD2K.js.map +0 -1
  46. package/dist/chunk-UW22XVCT.js.map +0 -1
  47. package/dist/chunk-WNEGCYCE.js.map +0 -1
  48. /package/dist/{chunk-O23OOWJK.js.map → chunk-4YAL54F3.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/artifact-client.ts"],"sourcesContent":["import { OpenGeniDocumentAuthorityClient } from \"./document-authority-client\";\nimport type { FetchResponse } from \"./client\";\nimport type {\n CreateEditableArtifactMaterializationRequest,\n CreateEditableArtifactResourceRequest,\n EditableArtifactListResource,\n EditableArtifactMaterializationJobResource,\n EditableArtifactPinnedVersionResource,\n EditableArtifactResource,\n ImportEditableArtifactResourceRequest,\n ListSessionEditableArtifactResourcesOptions,\n PinEditableArtifactVersionRequest,\n ReadEditableArtifactMaterializationOptions,\n ReadEditableArtifactResourceOptions,\n} from \"./editable-artifact-resources\";\nimport type {\n CreateWorkspaceArtifactRequest,\n PublishWorkspaceArtifactVersionRequest,\n RollbackWorkspaceArtifactRequest,\n SetWorkspaceArtifactStatusRequest,\n WorkspaceArtifactContentResponse,\n WorkspaceArtifactDetailResponse,\n WorkspaceArtifactListOptions,\n WorkspaceArtifactListResponse,\n WorkspaceArtifactMutationResponse,\n} from \"./workspace-artifacts\";\n\n/** Public SDK client. Optional operator and artifact operations stay out of the console core. */\nexport class OpenGeniClient extends OpenGeniDocumentAuthorityClient {\n async createEditableArtifact(\n workspaceId: string,\n request: CreateEditableArtifactResourceRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactResource> {\n return await this.requestJson<EditableArtifactResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts`,\n request,\n {},\n options,\n );\n }\n\n async importEditableArtifact(\n workspaceId: string,\n request: ImportEditableArtifactResourceRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactResource> {\n return await this.requestJson<EditableArtifactResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/imports`,\n request,\n {},\n options,\n );\n }\n\n async getEditableArtifact(\n workspaceId: string,\n artifactId: string,\n options: ReadEditableArtifactResourceOptions,\n ): Promise<EditableArtifactResource> {\n return await this.requestJson<EditableArtifactResource>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}`,\n undefined,\n { replicaId: options.replicaId },\n options,\n );\n }\n\n async listSessionEditableArtifacts(\n workspaceId: string,\n sourceSessionId: string,\n options: ListSessionEditableArtifactResourcesOptions,\n ): Promise<EditableArtifactListResource> {\n return await this.requestJson<EditableArtifactListResource>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts`,\n undefined,\n { sourceSessionId, replicaId: options.replicaId },\n options,\n );\n }\n\n async pinEditableArtifactVersion(\n workspaceId: string,\n artifactId: string,\n request: PinEditableArtifactVersionRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactPinnedVersionResource> {\n return await this.requestJson<EditableArtifactPinnedVersionResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/versions`,\n request,\n {},\n options,\n );\n }\n\n async createEditableArtifactMaterialization(\n workspaceId: string,\n artifactId: string,\n request: CreateEditableArtifactMaterializationRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactMaterializationJobResource> {\n return await this.requestJson<EditableArtifactMaterializationJobResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations`,\n request,\n {},\n options,\n );\n }\n\n async getEditableArtifactMaterialization(\n workspaceId: string,\n artifactId: string,\n jobId: string,\n options: ReadEditableArtifactMaterializationOptions,\n ): Promise<EditableArtifactMaterializationJobResource> {\n return await this.requestJson<EditableArtifactMaterializationJobResource>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations/${encodeURIComponent(jobId)}`,\n undefined,\n { replicaId: options.replicaId },\n options,\n );\n }\n\n /** The caller owns the returned bounded response stream. */\n async downloadEditableArtifactMaterialization(\n workspaceId: string,\n artifactId: string,\n jobId: string,\n options: ReadEditableArtifactMaterializationOptions,\n ): Promise<FetchResponse> {\n return await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations/${encodeURIComponent(jobId)}/download`,\n { replicaId: options.replicaId },\n options,\n );\n }\n\n async listWorkspaceArtifacts(\n workspaceId: string,\n options: WorkspaceArtifactListOptions = {},\n ): Promise<WorkspaceArtifactListResponse> {\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.status) query.set(\"status\", options.status);\n if (options.sourceSessionId) query.set(\"sourceSessionId\", options.sourceSessionId);\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<WorkspaceArtifactListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/published-artifacts${suffix}`,\n );\n }\n\n async getWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n ): Promise<WorkspaceArtifactDetailResponse> {\n return await this.requestJson<WorkspaceArtifactDetailResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}`,\n );\n }\n\n async getWorkspaceArtifactContent(\n workspaceId: string,\n artifactId: string,\n versionId?: string,\n ): Promise<WorkspaceArtifactContentResponse> {\n const query = versionId ? `?versionId=${encodeURIComponent(versionId)}` : \"\";\n return await this.requestJson<WorkspaceArtifactContentResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/content${query}`,\n );\n }\n\n async createWorkspaceArtifact(\n workspaceId: string,\n request: CreateWorkspaceArtifactRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/published-artifacts`,\n request,\n );\n }\n\n async publishWorkspaceArtifactVersion(\n workspaceId: string,\n artifactId: string,\n request: PublishWorkspaceArtifactVersionRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/versions`,\n request,\n );\n }\n\n async rollbackWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n request: RollbackWorkspaceArtifactRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/rollback`,\n request,\n );\n }\n\n async setWorkspaceArtifactStatus(\n workspaceId: string,\n artifactId: string,\n request: SetWorkspaceArtifactStatusRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/status`,\n request,\n );\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../contracts/src/site-session-http.ts","../src/site-http.ts","../src/site.ts"],"sourcesContent":["const SITE_WORKSPACE_PREFIX = \"/v1/workspaces/site-host\";\n\n/** A Site/Codemode SDK request named a route outside the proxied surface. */\nexport class SiteSessionPathError extends Error {\n readonly code = \"site_session_path_unsupported\";\n\n constructor() {\n super(\"Unsupported Site session API path\");\n this.name = \"SiteSessionPathError\";\n }\n}\n\n/** Route browser/preview SDK requests to the host workspace. This is a URL\n * boundary, not an endpoint or HTTP-method allowlist. Ordinary API handlers\n * authorize every operation with the viewer or agent's existing authority. */\nexport function siteSessionPath(\n path: string,\n workspaceId: string,\n _method = \"GET\",\n siteId?: string,\n): string {\n const pathname = path.split(\"?\")[0]!;\n const workspace =\n pathname === SITE_WORKSPACE_PREFIX || pathname.startsWith(`${SITE_WORKSPACE_PREFIX}/`);\n const context = pathname === \"/v1/config/client\";\n if (\n (!workspace && !context) ||\n /[%\\\\#\\u0000-\\u0020\\u007f]/u.test(pathname) ||\n pathname.split(\"/\").some((p) => p === \".\" || p === \"..\")\n ) {\n throw new SiteSessionPathError();\n }\n const rewritten = path.replace(\n \"/workspaces/site-host\",\n `/workspaces/${encodeURIComponent(workspaceId)}`,\n );\n // Preview has no published Site identity. Never widen a Site-only list to the workspace.\n const url = new URL(rewritten, \"http://site.invalid\");\n if (url.searchParams.get(\"originSiteId\") === \"current\" && workspaceId !== \"site-host\") {\n url.searchParams.set(\"originSiteId\", siteId ?? \"00000000-0000-0000-0000-000000000000\");\n return url.pathname + url.search;\n }\n return rewritten;\n}\n","/** HTTP transport for the ordinary SDK. One response port per request keeps\n * event streams incremental and cancellation independent of other requests. */\nexport const SITE_HTTP = \"opengeni.site.http\";\nexport const SITE_WORKSPACE = \"site-host\";\nexport type SiteHttpRequest = {\n type: typeof SITE_HTTP;\n requestId: string;\n path: string;\n method: string;\n headers: [string, string][];\n body?: string;\n};\n\nimport { siteSessionPath } from \"@opengeni/contracts/site-session-http\";\nexport { siteSessionPath } from \"@opengeni/contracts/site-session-http\";\n\nexport function isSiteHttpRequest(value: unknown): value is SiteHttpRequest {\n if (!value || typeof value !== \"object\") return false;\n const v = value as SiteHttpRequest;\n return (\n v.type === SITE_HTTP &&\n typeof v.requestId === \"string\" &&\n typeof v.path === \"string\" &&\n typeof v.method === \"string\" &&\n /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(v.method) &&\n (v.body === undefined || typeof v.body === \"string\") &&\n Array.isArray(v.headers) &&\n v.headers.every(\n (h) => Array.isArray(h) && h.length === 2 && h.every((x) => typeof x === \"string\"),\n )\n );\n}\n\nexport async function serveSiteHttp(\n message: SiteHttpRequest,\n port: MessagePort,\n fetchResponse: (request: SiteHttpRequest, signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n): Promise<void> {\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n let wake: (() => void) | undefined;\n let pulling = false;\n const onMessage = (event: MessageEvent) => {\n if (event.data === \"pull\") {\n pulling = true;\n wake?.();\n }\n };\n const abort = () => {\n void reader?.cancel(signal.reason).catch(() => {});\n wake?.();\n };\n port.addEventListener(\"message\", onMessage);\n signal.addEventListener(\"abort\", abort, { once: true });\n port.start();\n try {\n if (signal.aborted) throw signal.reason;\n const response = await fetchResponse(message, signal);\n reader = response.body?.getReader();\n port.postMessage({ status: response.status, headers: [...response.headers], body: !!reader });\n if (reader)\n while (!signal.aborted) {\n if (!pulling)\n await new Promise<void>((resolve) => {\n wake = resolve;\n });\n wake = undefined;\n if (signal.aborted) break;\n pulling = false;\n const part = await reader.read();\n if (part.done) {\n port.postMessage({ done: true });\n break;\n }\n port.postMessage({ chunk: part.value });\n }\n if (signal.aborted) throw signal.reason;\n } catch (error) {\n port.postMessage({ error: error instanceof Error ? error.message : \"Site request failed\" });\n } finally {\n signal.removeEventListener(\"abort\", abort);\n port.removeEventListener(\"message\", onMessage);\n await reader?.cancel().catch(() => {});\n port.close();\n }\n}\n\nexport async function sitePortFetch(\n port: MessagePort,\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> {\n const request = new Request(input, init);\n const url = new URL(request.url);\n const path = `${url.pathname}${url.search}`;\n siteSessionPath(path, SITE_WORKSPACE, request.method);\n const channel = new MessageChannel();\n const requestId = crypto.randomUUID();\n const body = request.body ? await request.text() : undefined;\n return await new Promise<Response>((resolve, reject) => {\n let controller: ReadableStreamDefaultController<Uint8Array> | undefined;\n let finished = false;\n const cleanup = () => {\n finished = true;\n request.signal.removeEventListener(\"abort\", abort);\n channel.port1.close();\n };\n const abort = () => {\n if (finished) return;\n port.postMessage({ type: \"opengeni.site.cancel\", version: 2, requestId });\n const error = request.signal.reason ?? new DOMException(\"Cancelled\", \"AbortError\");\n controller?.error(error);\n reject(error);\n cleanup();\n };\n channel.port1.onmessage = (event) => {\n const data = event.data;\n if (data.error) {\n const error = new Error(data.error);\n controller?.error(error);\n reject(error);\n cleanup();\n } else if (data.status) {\n const stream = data.body\n ? new ReadableStream<Uint8Array>({\n start(c) {\n controller = c;\n },\n pull() {\n channel.port1.postMessage(\"pull\");\n },\n cancel() {\n controller = undefined;\n abort();\n },\n })\n : null;\n resolve(new Response(stream, { status: data.status, headers: data.headers }));\n if (!data.body) cleanup();\n } else if (data.done) {\n controller?.close();\n cleanup();\n } else if (data.chunk) controller?.enqueue(data.chunk);\n };\n if (request.signal.aborted) {\n abort();\n return;\n }\n request.signal.addEventListener(\"abort\", abort, { once: true });\n port.postMessage(\n {\n type: SITE_HTTP,\n requestId,\n path,\n method: request.method,\n headers: [...request.headers],\n ...(body === undefined ? {} : { body }),\n } satisfies SiteHttpRequest,\n [channel.port2],\n );\n });\n}\n","import {\n OpenGeniToolsClient,\n type OpenGeniToolTransport,\n type OpenGeniWorkspaceTools,\n} from \"./tools\";\nimport { OpenGeniClient } from \"./client\";\nimport { sitePortFetch, siteSessionPath, SITE_WORKSPACE } from \"./site-http\";\nexport {\n isSiteHttpRequest,\n serveSiteHttp,\n siteSessionPath,\n type SiteHttpRequest,\n} from \"./site-http\";\nimport type {\n ToolGatewayCallRequest,\n ToolGatewayCallResponse,\n ToolGatewayCatalog,\n ToolGatewayDeclarationsResponse,\n} from \"./types\";\n\nexport const OPENGENI_SITE_BRIDGE_VERSION = 2 as const;\nexport const OPENGENI_SITE_BRIDGE_CONNECT = \"opengeni.site.connect\" as const;\nexport const OPENGENI_SITE_BRIDGE_READY = \"opengeni.site.ready\" as const;\nexport const OPENGENI_SITE_BRIDGE_REQUEST = \"opengeni.site.request\" as const;\nexport const OPENGENI_SITE_BRIDGE_RESPONSE = \"opengeni.site.response\" as const;\nexport const OPENGENI_SITE_BRIDGE_CANCEL = \"opengeni.site.cancel\" as const;\nexport const OPENGENI_SITE_BRIDGE_BOOTSTRAP_GLOBAL = \"__opengeniSiteBridgeBootstrapV2\" as const;\nexport const OPENGENI_SITE_LOCAL_CODEMODE_PATH = \"/__opengeni/site-tools\" as const;\n\nexport type OpenGeniSiteBridgeConnectMessage = {\n type: typeof OPENGENI_SITE_BRIDGE_CONNECT;\n version: typeof OPENGENI_SITE_BRIDGE_VERSION;\n};\n\nexport type OpenGeniSiteBridgeReadyMessage = {\n type: typeof OPENGENI_SITE_BRIDGE_READY;\n version: typeof OPENGENI_SITE_BRIDGE_VERSION;\n};\n\n/** Site-originated calls cannot carry host-only approval tokens or Site-version authority. */\nexport type OpenGeniSiteToolCallRequest = Omit<\n ToolGatewayCallRequest,\n \"approvalToken\" | \"siteArtifactId\" | \"siteVersionId\"\n>;\n\n/** Host-filtered catalog projection. Tenant routing context never enters Site code. */\nexport type OpenGeniSiteToolCatalog = Omit<ToolGatewayCatalog, \"accountId\" | \"workspaceId\">;\n\nexport type OpenGeniSiteWorkspaceTools = OpenGeniWorkspaceTools<OpenGeniSiteToolCatalog>;\n\nexport type OpenGeniSiteBridgeRequestMessage = {\n type: typeof OPENGENI_SITE_BRIDGE_REQUEST;\n version: typeof OPENGENI_SITE_BRIDGE_VERSION;\n requestId: string;\n} & (\n | { method: \"catalog\" }\n | { method: \"call\"; payload: OpenGeniSiteToolCallRequest }\n | { method: \"declarations\" }\n);\n\nexport type OpenGeniSiteBridgeCancelMessage = {\n type: typeof OPENGENI_SITE_BRIDGE_CANCEL;\n version: typeof OPENGENI_SITE_BRIDGE_VERSION;\n requestId: string;\n};\n\nexport type OpenGeniSiteBridgeResponseMessage = {\n type: typeof OPENGENI_SITE_BRIDGE_RESPONSE;\n version: typeof OPENGENI_SITE_BRIDGE_VERSION;\n requestId: string;\n} & (\n | {\n ok: true;\n value: OpenGeniSiteToolCatalog | ToolGatewayCallResponse | ToolGatewayDeclarationsResponse;\n }\n | {\n ok: false;\n error: {\n code: string;\n message: string;\n retryable: boolean;\n outcomeUnknown?: boolean;\n };\n }\n);\n\nexport type OpenGeniSiteClient = {\n /** Ordinary SDK, including React session/composer methods and SSE streams. */\n readonly client: OpenGeniClient;\n /** Host-bound routing alias, not a credential or a caller-selected tenant. */\n readonly workspaceId: string;\n /** Workspace-bound typed facade. The parent host owns workspace identity and credentials. */\n readonly tools: OpenGeniSiteWorkspaceTools;\n close(): void;\n};\n\nexport type OpenGeniSiteClientOptions = {\n /** Advanced embedding seam; ordinary Sites accept bootstrap only from their exact parent. */\n parentWindow?: MessageEventSource;\n /** Advanced embedding seam for listening to the host's document-bound bootstrap message. */\n siteWindow?: Pick<Window, \"parent\" | \"addEventListener\" | \"removeEventListener\">;\n /** Test/embedding seam for an already document-bound host bootstrap port. */\n bootstrapPort?: MessagePort;\n connectTimeoutMs?: number;\n requestTimeoutMs?: number;\n createMessageChannel?: () => MessageChannel;\n /** Local-preview seam. Top-level pages use this same-origin Codemode proxy automatically. */\n localCodemodePath?: string | false;\n /** Test/embedding seam for local-preview requests. */\n fetch?: typeof globalThis.fetch;\n};\n\nexport class OpenGeniSiteBridgeError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly retryable = false,\n readonly outcomeUnknown = false,\n ) {\n super(message);\n this.name = \"OpenGeniSiteBridgeError\";\n }\n}\n\n/**\n * Create the browser client used by a Site. Published iframes use the parent\n * MessagePort; top-level sandbox previews use the same-origin Codemode adapter.\n * Credentials remain in the selected host and never enter Site code.\n */\nexport function createOpenGeniSiteClient(\n options: OpenGeniSiteClientOptions = {},\n): OpenGeniSiteClient {\n const transport = shouldUseLocalCodemode(options)\n ? new OpenGeniSiteLocalCodemodeTransport(options)\n : new OpenGeniSiteBridgeTransport(options);\n return {\n client: new OpenGeniClient({\n baseUrl: \"https://site.opengeni.invalid\",\n fetch: (input, init) => transport.fetch(input, init),\n }),\n workspaceId: SITE_WORKSPACE,\n tools: new OpenGeniToolsClient(transport).forWorkspace(\"site-host\"),\n close: () => transport.close(),\n };\n}\n\nclass OpenGeniSiteLocalCodemodeTransport implements OpenGeniToolTransport {\n private readonly fetchImpl: typeof globalThis.fetch;\n private readonly basePath: string;\n\n constructor(options: OpenGeniSiteClientOptions) {\n this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);\n const configured = options.localCodemodePath;\n this.basePath = (\n typeof configured === \"string\" ? configured : OPENGENI_SITE_LOCAL_CODEMODE_PATH\n ).replace(/\\/+$/u, \"\");\n }\n\n close(): void {}\n\n async fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const request = new Request(input, init);\n const url = new URL(request.url);\n const path = `${url.pathname}${url.search}`;\n siteSessionPath(path, SITE_WORKSPACE, request.method);\n return this.fetchImpl(`${this.basePath}/sdk${path}`, {\n method: request.method,\n headers: request.headers,\n signal: request.signal,\n ...(request.body ? { body: await request.text() } : {}),\n });\n }\n\n async requestJson<T>(\n method: string,\n path: string,\n body?: unknown,\n _query?: Record<string, string>,\n options: { signal?: AbortSignal } = {},\n ): Promise<T> {\n const suffix = localCodemodeSuffix(method, path);\n const response = await this.fetchImpl(`${this.basePath}${suffix}`, {\n method,\n ...(options.signal ? { signal: options.signal } : {}),\n ...(body === undefined\n ? {}\n : {\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n }),\n });\n const value = (await response.json()) as unknown;\n if (response.ok) return value as T;\n const envelope = isRecord(value) && isRecord(value.error) ? value.error : {};\n throw new OpenGeniSiteBridgeError(\n typeof envelope.code === \"string\" ? envelope.code : \"local_codemode_error\",\n typeof envelope.message === \"string\"\n ? envelope.message\n : `Local Site tool request failed with HTTP ${response.status}`,\n envelope.retryable === true,\n envelope.outcomeUnknown === true,\n );\n }\n}\n\nfunction shouldUseLocalCodemode(options: OpenGeniSiteClientOptions): boolean {\n if (options.localCodemodePath === false || options.bootstrapPort) return false;\n if (typeof options.localCodemodePath === \"string\") return true;\n const siteWindow = options.siteWindow ?? globalThis.window;\n return Boolean(siteWindow && siteWindow.parent === siteWindow);\n}\n\nfunction localCodemodeSuffix(method: string, path: string): string {\n if (method === \"GET\" && path.endsWith(\"/tools/catalog\")) return \"/catalog\";\n if (method === \"GET\" && path.endsWith(\"/tools/declarations\")) return \"/declarations\";\n if (method === \"POST\" && path.endsWith(\"/tools/calls\")) return \"/calls\";\n throw new OpenGeniSiteBridgeError(\"unsupported_request\", \"Unsupported Site tool request\");\n}\n\nexport function isOpenGeniSiteBridgeConnectMessage(\n value: unknown,\n): value is OpenGeniSiteBridgeConnectMessage {\n return (\n isRecord(value) &&\n value.type === OPENGENI_SITE_BRIDGE_CONNECT &&\n value.version === OPENGENI_SITE_BRIDGE_VERSION\n );\n}\n\nexport function isOpenGeniSiteBridgeRequestMessage(\n value: unknown,\n): value is OpenGeniSiteBridgeRequestMessage {\n if (\n !isRecord(value) ||\n value.type !== OPENGENI_SITE_BRIDGE_REQUEST ||\n value.version !== OPENGENI_SITE_BRIDGE_VERSION ||\n typeof value.requestId !== \"string\" ||\n !value.requestId\n ) {\n return false;\n }\n if (value.method === \"catalog\" || value.method === \"declarations\") return true;\n return value.method === \"call\" && isRecord(value.payload);\n}\n\nexport function isOpenGeniSiteBridgeCancelMessage(\n value: unknown,\n): value is OpenGeniSiteBridgeCancelMessage {\n return (\n isRecord(value) &&\n value.type === OPENGENI_SITE_BRIDGE_CANCEL &&\n value.version === OPENGENI_SITE_BRIDGE_VERSION &&\n typeof value.requestId === \"string\" &&\n Boolean(value.requestId)\n );\n}\n\n/** Strip every host-only field before a call crosses the Site boundary. */\nexport function sanitizeOpenGeniSiteToolCallRequest(\n value: ToolGatewayCallRequest,\n): OpenGeniSiteToolCallRequest {\n return {\n ...(value.operationId === undefined ? {} : { operationId: value.operationId }),\n catalogDigest: value.catalogDigest,\n identity: value.identity,\n arguments: value.arguments,\n };\n}\n\nclass OpenGeniSiteBridgeTransport implements OpenGeniToolTransport {\n private readonly options: OpenGeniSiteClientOptions;\n private readonly bootstrap: SiteBridgeBootstrap;\n private port: MessagePort | null = null;\n private connecting: Promise<MessagePort> | null = null;\n private closed = false;\n\n constructor(options: OpenGeniSiteClientOptions) {\n this.options = options;\n this.bootstrap = createSiteBridgeBootstrap(options);\n }\n\n async fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n return sitePortFetch(await this.connect(), input, init);\n }\n\n async requestJson<T>(\n method: string,\n path: string,\n body?: unknown,\n _query?: Record<string, string>,\n requestOptions: { signal?: AbortSignal; timeoutMs?: number } = {},\n ): Promise<T> {\n if (method === \"GET\" && path.endsWith(\"/tools/catalog\")) {\n return (await this.request({ method: \"catalog\" }, requestOptions)) as T;\n }\n if (method === \"GET\" && path.endsWith(\"/tools/declarations\")) {\n return (await this.request({ method: \"declarations\" }, requestOptions)) as T;\n }\n if (method === \"POST\" && path.endsWith(\"/tools/calls\")) {\n if (!isRecord(body)) throw new TypeError(\"Site tool call payload is required\");\n return (await this.request(\n {\n method: \"call\",\n payload: sanitizeOpenGeniSiteToolCallRequest(body as ToolGatewayCallRequest),\n },\n requestOptions,\n )) as T;\n }\n throw new OpenGeniSiteBridgeError(\"unsupported_request\", \"Unsupported Site bridge request\");\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.bootstrap.close();\n this.port?.close();\n this.port = null;\n }\n\n private async request(\n request:\n | { method: \"catalog\" }\n | { method: \"call\"; payload: OpenGeniSiteToolCallRequest }\n | { method: \"declarations\" },\n options: { signal?: AbortSignal; timeoutMs?: number },\n ): Promise<unknown> {\n const port = await this.connect();\n const requestId = crypto.randomUUID();\n const timeoutMs = positiveTimeout(\n options.timeoutMs ?? this.options.requestTimeoutMs ?? 120_000,\n \"requestTimeoutMs\",\n );\n return await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n cleanup();\n cancel(port, requestId);\n reject(\n request.method === \"call\"\n ? new OpenGeniSiteBridgeError(\n \"timeout\",\n \"Site tool request timed out after execution may have started\",\n false,\n true,\n )\n : new OpenGeniSiteBridgeError(\"timeout\", \"Site tool request timed out\", true),\n );\n }, timeoutMs);\n const abort = () => {\n cleanup();\n cancel(port, requestId);\n reject(options.signal?.reason ?? new DOMException(\"Request aborted\", \"AbortError\"));\n };\n const onMessage = (event: MessageEvent<unknown>) => {\n const response = event.data;\n if (\n !isRecord(response) ||\n response.type !== OPENGENI_SITE_BRIDGE_RESPONSE ||\n response.version !== OPENGENI_SITE_BRIDGE_VERSION ||\n response.requestId !== requestId ||\n typeof response.ok !== \"boolean\"\n ) {\n return;\n }\n cleanup();\n if (response.ok) {\n resolve(response.value);\n return;\n }\n const error = isRecord(response.error) ? response.error : {};\n reject(\n new OpenGeniSiteBridgeError(\n typeof error.code === \"string\" ? error.code : \"bridge_error\",\n typeof error.message === \"string\" ? error.message : \"Site tool request failed\",\n error.retryable === true,\n error.outcomeUnknown === true,\n ),\n );\n };\n const cleanup = () => {\n clearTimeout(timeout);\n options.signal?.removeEventListener(\"abort\", abort);\n port.removeEventListener(\"message\", onMessage);\n };\n if (options.signal?.aborted) {\n abort();\n return;\n }\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n port.addEventListener(\"message\", onMessage);\n port.postMessage({\n type: OPENGENI_SITE_BRIDGE_REQUEST,\n version: OPENGENI_SITE_BRIDGE_VERSION,\n requestId,\n ...request,\n } satisfies OpenGeniSiteBridgeRequestMessage);\n });\n }\n\n private async connect(): Promise<MessagePort> {\n if (this.closed) throw new OpenGeniSiteBridgeError(\"closed\", \"Site bridge is closed\");\n if (this.port) return this.port;\n if (this.connecting) return await this.connecting;\n const channel = (this.options.createMessageChannel ?? (() => new MessageChannel()))();\n const timeoutMs = positiveTimeout(this.options.connectTimeoutMs ?? 10_000, \"connectTimeoutMs\");\n this.connecting = new Promise<MessagePort>((resolve, reject) => {\n let active = true;\n const timeout = setTimeout(() => {\n cleanup();\n channel.port1.close();\n reject(new OpenGeniSiteBridgeError(\"host_timeout\", \"OpenGeni Site host did not respond\"));\n }, timeoutMs);\n const onMessage = (event: MessageEvent<unknown>) => {\n const message = event.data;\n if (\n !isRecord(message) ||\n message.type !== OPENGENI_SITE_BRIDGE_READY ||\n message.version !== OPENGENI_SITE_BRIDGE_VERSION\n ) {\n return;\n }\n cleanup();\n this.port = channel.port1;\n resolve(channel.port1);\n };\n const cleanup = () => {\n active = false;\n clearTimeout(timeout);\n channel.port1.removeEventListener(\"message\", onMessage);\n };\n channel.port1.addEventListener(\"message\", onMessage);\n channel.port1.start();\n void this.bootstrap\n .port()\n .then((bootstrapPort) => {\n if (!active) return;\n if (this.closed) throw new OpenGeniSiteBridgeError(\"closed\", \"Site bridge is closed\");\n bootstrapPort.postMessage(\n {\n type: OPENGENI_SITE_BRIDGE_CONNECT,\n version: OPENGENI_SITE_BRIDGE_VERSION,\n } satisfies OpenGeniSiteBridgeConnectMessage,\n [channel.port2],\n );\n })\n .catch((error) => {\n cleanup();\n channel.port1.close();\n reject(error);\n });\n }).finally(() => {\n this.connecting = null;\n });\n return await this.connecting;\n }\n}\n\ntype SiteBridgeBootstrap = {\n port: () => Promise<MessagePort>;\n close: () => void;\n};\n\nfunction createSiteBridgeBootstrap(options: OpenGeniSiteClientOptions): SiteBridgeBootstrap {\n if (options.bootstrapPort) {\n return {\n port: async () => options.bootstrapPort!,\n close: () => options.bootstrapPort?.close(),\n };\n }\n const siteWindow = options.siteWindow ?? globalThis.window;\n const parentWindow = options.parentWindow ?? siteWindow?.parent;\n if (!siteWindow || !parentWindow || parentWindow === siteWindow) {\n return {\n port: async () => {\n throw new OpenGeniSiteBridgeError(\n \"host_unavailable\",\n \"OpenGeni Site client must run inside a hosted iframe\",\n );\n },\n close: () => undefined,\n };\n }\n const retainedPort = retainedSiteBridgeBootstrapPort(siteWindow);\n if (retainedPort) {\n return {\n port: async () => retainedPort,\n close: () => undefined,\n };\n }\n let settledPort: MessagePort | null = null;\n let rejectBootstrap: ((reason?: unknown) => void) | null = null;\n const onMessage = (event: MessageEvent<unknown>) => {\n if (\n event.source !== parentWindow ||\n !isOpenGeniSiteBridgeReadyMessage(event.data) ||\n event.ports.length !== 1\n ) {\n return;\n }\n cleanup();\n settledPort = event.ports[0]!;\n settledPort.start();\n retainSiteBridgeBootstrapPort(siteWindow, settledPort);\n resolveBootstrap?.(settledPort);\n };\n let resolveBootstrap: ((port: MessagePort) => void) | null = null;\n const cleanup = () => siteWindow.removeEventListener(\"message\", onMessage as EventListener);\n const port = new Promise<MessagePort>((resolve, reject) => {\n resolveBootstrap = resolve;\n rejectBootstrap = reject;\n siteWindow.addEventListener(\"message\", onMessage as EventListener);\n });\n void port.catch(() => undefined);\n return {\n port: async () => await port,\n close: () => {\n cleanup();\n rejectBootstrap?.(new OpenGeniSiteBridgeError(\"closed\", \"Site bridge is closed\"));\n resolveBootstrap = null;\n rejectBootstrap = null;\n },\n };\n}\n\nfunction retainedSiteBridgeBootstrapPort(\n siteWindow: OpenGeniSiteClientOptions[\"siteWindow\"],\n): MessagePort | null {\n const state = (siteWindow as unknown as Record<string, unknown>)[\n OPENGENI_SITE_BRIDGE_BOOTSTRAP_GLOBAL\n ];\n if (!isRecord(state)) return null;\n const candidate = state.port as Partial<MessagePort> | undefined;\n return candidate &&\n typeof candidate.postMessage === \"function\" &&\n typeof candidate.addEventListener === \"function\" &&\n typeof candidate.start === \"function\"\n ? (candidate as MessagePort)\n : null;\n}\n\nfunction retainSiteBridgeBootstrapPort(\n siteWindow: OpenGeniSiteClientOptions[\"siteWindow\"],\n port: MessagePort,\n): void {\n try {\n Object.defineProperty(siteWindow, OPENGENI_SITE_BRIDGE_BOOTSTRAP_GLOBAL, {\n configurable: true,\n value: { port },\n });\n } catch {\n // The bootstrap event still serves the current client when the embedding\n // window refuses extension; only late construction loses this fallback.\n }\n}\n\nfunction isOpenGeniSiteBridgeReadyMessage(value: unknown): value is OpenGeniSiteBridgeReadyMessage {\n return (\n isRecord(value) &&\n value.type === OPENGENI_SITE_BRIDGE_READY &&\n value.version === OPENGENI_SITE_BRIDGE_VERSION\n );\n}\n\nfunction cancel(port: MessagePort, requestId: string): void {\n port.postMessage({\n type: OPENGENI_SITE_BRIDGE_CANCEL,\n version: OPENGENI_SITE_BRIDGE_VERSION,\n requestId,\n } satisfies OpenGeniSiteBridgeCancelMessage);\n}\n\nfunction positiveTimeout(value: number, label: string): number {\n if (!Number.isFinite(value) || value <= 0) throw new RangeError(`${label} must be positive`);\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, any> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":[]}