@opengeni/sdk 1.0.1 → 2.2.0-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.
- package/README.md +117 -2
- package/dist/artifacts.js +5 -5
- package/dist/automations-client.d.ts +17 -0
- package/dist/automations.d.ts +3 -0
- package/dist/automations.js +78 -0
- package/dist/automations.js.map +1 -0
- package/dist/{chunk-A5DC5WEM.js → chunk-C2H7HBNP.js} +22 -2
- package/dist/chunk-C2H7HBNP.js.map +1 -0
- package/dist/{chunk-GU6JF75T.js → chunk-C4DJPZRU.js} +1 -1
- package/dist/{chunk-GU6JF75T.js.map → chunk-C4DJPZRU.js.map} +1 -1
- package/dist/{chunk-TYZ4JL4J.js → chunk-G6LBVWKT.js} +2 -2
- package/dist/{chunk-4DV37UUA.js → chunk-GLDV5QY7.js} +16 -2
- package/dist/chunk-GLDV5QY7.js.map +1 -0
- package/dist/{chunk-ST5DDKJP.js → chunk-GW3EJ2GP.js} +52 -1
- package/dist/chunk-GW3EJ2GP.js.map +1 -0
- package/dist/{chunk-VWE2QIVO.js → chunk-XNG7YGR3.js} +23 -6
- package/dist/chunk-XNG7YGR3.js.map +1 -0
- package/dist/{chunk-YGH5P47G.js → chunk-YBQTKNTL.js} +696 -57
- package/dist/chunk-YBQTKNTL.js.map +1 -0
- package/dist/client.d.ts +151 -26
- package/dist/codex-realtime-controller.d.ts +1 -0
- package/dist/codex-realtime-controller.js +2 -2
- package/dist/company-brain.d.ts +32 -0
- package/dist/company-profile.d.ts +1 -1
- package/dist/core.js +4 -4
- package/dist/editable-artifacts/browser-session.d.ts +7 -3
- package/dist/editable-artifacts/controller.d.ts +4 -1
- package/dist/editable-artifacts/errors.d.ts +1 -1
- package/dist/editable-artifacts/http-live-transport.d.ts +6 -2
- package/dist/editable-artifacts/index.d.ts +2 -0
- package/dist/editable-artifacts/open-failure.d.ts +9 -0
- package/dist/editable-artifacts/types.d.ts +4 -3
- package/dist/editable-artifacts/worker/kernel-adapter.d.ts +1 -1
- package/dist/editable-artifacts-worker.js +44 -17
- package/dist/editable-artifacts-worker.js.map +1 -1
- package/dist/editable-artifacts.js +222 -119
- package/dist/editable-artifacts.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +61 -12
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +23 -0
- package/dist/interaction.js +4 -1
- package/dist/organization-private-session-settings.d.ts +6 -0
- package/dist/organization-private-session-settings.js +22 -0
- package/dist/organization-private-session-settings.js.map +1 -0
- package/dist/pr-review-client.d.ts +15 -0
- package/dist/pr-review.d.ts +4 -0
- package/dist/pr-review.js +56 -0
- package/dist/pr-review.js.map +1 -0
- package/dist/preference-registry.d.ts +8 -0
- package/dist/realtime.js +2 -2
- package/dist/retained-artifacts.d.ts +5 -1
- package/dist/types.d.ts +961 -13
- package/dist/workspace-instruction-policies.d.ts +22 -0
- package/dist/workspace-learning.d.ts +124 -0
- package/package.json +14 -2
- package/src/automations-client.ts +118 -0
- package/src/automations.ts +15 -0
- package/src/client.ts +974 -71
- package/src/codex-realtime-controller.ts +21 -0
- package/src/company-brain.ts +99 -0
- package/src/company-profile.ts +4 -1
- package/src/editable-artifacts/browser-session.ts +36 -22
- package/src/editable-artifacts/controller.ts +66 -45
- package/src/editable-artifacts/errors.ts +2 -0
- package/src/editable-artifacts/http-live-transport.ts +62 -37
- package/src/editable-artifacts/index.ts +6 -0
- package/src/editable-artifacts/open-failure.ts +79 -0
- package/src/editable-artifacts/storage.ts +31 -40
- package/src/editable-artifacts/types.ts +4 -3
- package/src/editable-artifacts/worker/kernel-adapter.ts +23 -7
- package/src/editable-artifacts/worker/runtime.ts +26 -13
- package/src/editable-artifacts/worker/wire-codec.ts +23 -5
- package/src/errors.ts +1 -1
- package/src/index.ts +131 -0
- package/src/interaction.ts +95 -0
- package/src/organization-private-session-settings.ts +33 -0
- package/src/pr-review-client.ts +84 -0
- package/src/pr-review.ts +15 -0
- package/src/preference-registry.ts +9 -0
- package/src/retained-artifacts.ts +101 -0
- package/src/stream.ts +13 -2
- package/src/types.ts +1101 -12
- package/src/workspace-instruction-policies.ts +24 -0
- package/src/workspace-learning.ts +138 -0
- package/dist/chunk-4DV37UUA.js.map +0 -1
- package/dist/chunk-A5DC5WEM.js.map +0 -1
- package/dist/chunk-ST5DDKJP.js.map +0 -1
- package/dist/chunk-VWE2QIVO.js.map +0 -1
- package/dist/chunk-YGH5P47G.js.map +0 -1
- /package/dist/{chunk-TYZ4JL4J.js.map → chunk-G6LBVWKT.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interaction.ts"],"sourcesContent":["import type { OpenGeniRequestOptions } from \"./client\";\nimport type { RetainedArtifactReference } from \"./types\";\n\n/** Public Browser/Computer protocol version. Driver and provider details stay private. */\nexport const INTERACTION_PROTOCOL_VERSION = 1 as const;\nexport const BROWSER_CONTROL_WEBSOCKET_PROTOCOL = \"opengeni.browser.v1\" as const;\nexport const COMPUTER_CONTROL_WEBSOCKET_PROTOCOL = \"opengeni.computer.v1\" as const;\nexport const BROWSER_CONTROL_WEBSOCKET_BEARER_PREFIX = \"opengeni.auth.\" as const;\nexport const BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES = 64 * 1024;\nexport const BROWSER_FRAME_MAX_BYTES = 24 * 1024 * 1024;\nexport const BROWSER_FRAME_MAX_DIMENSION = 32_768;\nexport const BROWSER_FRAME_MAX_PIXELS = 100_000_000;\n\n/** Latest-wins invalidation cursor for workspace Browser/Computer resources. */\nexport type WorkspaceInteractionRevisionEvent = {\n workspaceId: string;\n sequence: number;\n revision: number;\n type: \"workspace.interaction.changed\";\n occurredAt: string;\n};\n\nexport type InteractionJsonValue =\n | null\n | string\n | number\n | boolean\n | InteractionJsonValue[]\n | { [key: string]: InteractionJsonValue };\n\nexport type InteractionPlacement =\n | { kind: \"sandbox_group\"; sandboxGroupId: string }\n | { kind: \"connected_machine\"; sandboxId: string }\n | { kind: \"attached_device\"; deviceId: string }\n | { kind: \"external_provider\"; providerId: string; placementId: string };\n\nexport type AttachedBrowserDeviceCapabilities = {\n tabInventory: boolean;\n debuggerAttachment: boolean;\n semanticObservation: boolean;\n screenshots: boolean;\n liveFrames: boolean;\n humanInput: boolean;\n diagnostics: boolean;\n rawCdp: boolean;\n linkedComputer: boolean;\n};\n\n/** One live browser-profile endpoint on an enrolled machine. Saved, reusable\n * login state is represented separately by BrowserIdentity. */\nexport type AttachedBrowserDevice = {\n id: string;\n accountId: string;\n workspaceId: string;\n enrollmentId: string;\n name: string;\n profileLabel: string | null;\n browserName: string;\n browserVersion: string;\n extensionVersion: string;\n platform: \"linux\" | \"macos\" | \"windows\";\n architecture: \"x64\" | \"arm64\";\n state: \"connected\" | \"disconnected\";\n connectionGeneration: string;\n inventoryRevision: number;\n tabCount: number;\n capabilities: AttachedBrowserDeviceCapabilities;\n lastSeenAt: string;\n disconnectedAt: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type AttachedBrowserDeviceListResponse = {\n revision: number;\n devices: AttachedBrowserDevice[];\n};\n\nexport type InteractionControllerBinding = {\n controllerId: string;\n controllerGeneration: string;\n placementInstanceId: string;\n};\n\nexport type InteractionAssociation = {\n sessionId: string;\n turnId: string | null;\n attemptId: string | null;\n relationship: \"created\" | \"using\" | \"observing\" | \"related\";\n actorSubjectId: string;\n lastUsedAt: string;\n};\n\nexport type InteractionLifecycle =\n | \"starting\"\n | \"active\"\n | \"suspending\"\n | \"suspended\"\n | \"restoring\"\n | \"repair_required\"\n | \"lost\"\n | \"ending\"\n | \"ended\"\n | \"failed\";\n\nexport type BrowserSessionCapabilities = {\n semanticObservation: boolean;\n screenshots: boolean;\n liveFrames: boolean;\n humanInput: boolean;\n tabs: boolean;\n downloads: boolean;\n uploads: boolean;\n clipboard: boolean;\n permissions: boolean;\n diagnostics: boolean;\n rawCdp: boolean;\n linkedComputer: boolean;\n privateCheckpoint: boolean;\n identityPublication: boolean;\n parallelTargets: boolean;\n};\n\nexport type BrowserSession = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n lifecycle: InteractionLifecycle;\n placement: InteractionPlacement;\n controller: InteractionControllerBinding | null;\n driverId: string;\n engine: \"chromium\" | \"chrome\" | \"firefox\" | \"webkit\" | \"lightpanda\" | \"external\";\n engineVersion: string | null;\n headless: boolean;\n identityId: string | null;\n baseRevisionId: string | null;\n networkRouteId: string | null;\n linkedComputerSessionId: string | null;\n capabilities: BrowserSessionCapabilities;\n associations: InteractionAssociation[];\n createdBySubjectId: string;\n createdAt: string;\n lastUsedAt: string;\n failureCode: string | null;\n};\n\nexport type BrowserClipboard = {\n browserSessionId: string;\n controllerGeneration: string;\n revision: number;\n text: string;\n source: \"empty\" | \"write\" | \"clear\" | \"copy\" | \"paste\";\n sourceTargetId: string | null;\n updatedAt: string | null;\n};\n\nexport type InteractionCredentialAuthorityRef = {\n connectionId: string;\n connectionSubjectId: string | null;\n providerDomain: string;\n};\n\nexport type NetworkRouteConfiguration =\n | { kind: \"direct\" }\n | {\n kind: \"proxy\";\n protocol: \"http\" | \"https\" | \"socks5\";\n host: string;\n port: number;\n credential: InteractionCredentialAuthorityRef | null;\n }\n | {\n kind: \"managed\";\n providerId: string;\n routeId: string;\n egressClass: \"datacenter\" | \"residential\" | \"isp\";\n region: string | null;\n credential: InteractionCredentialAuthorityRef | null;\n }\n | { kind: \"tunnel\"; placement: InteractionPlacement; tunnelId: string };\n\nexport type NetworkRouteConsistency = {\n dns: \"placement\" | \"proxy\" | \"provider\";\n expectedPublicIp: string | null;\n expectedRegion: string | null;\n locale: string | null;\n timezone: string | null;\n geolocation: {\n latitude: number;\n longitude: number;\n accuracyMeters: number;\n } | null;\n webRtc: \"default\" | \"disable_non_proxied_udp\" | \"proxy_only\";\n stability: \"session\" | \"sticky\" | \"persistent\";\n};\n\nexport type NetworkRoute = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n status: \"active\" | \"archived\";\n configuration: NetworkRouteConfiguration;\n consistency: NetworkRouteConsistency;\n version: number;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type NetworkRouteListResponse = { revision: number; routes: NetworkRoute[] };\nexport type CreateNetworkRouteRequest = {\n operationId: string;\n name: string;\n configuration: NetworkRouteConfiguration;\n consistency: NetworkRouteConsistency;\n};\nexport type UpdateNetworkRouteRequest = {\n operationId: string;\n expectedVersion: number;\n name?: string | undefined;\n status?: \"active\" | \"archived\" | undefined;\n configuration?: NetworkRouteConfiguration | undefined;\n consistency?: NetworkRouteConsistency | undefined;\n};\nexport type NetworkRouteMutationResponse = {\n route: NetworkRoute;\n operationId: string;\n replayed: boolean;\n};\n\nexport type SiteAuthFieldPurpose = \"identifier\" | \"password\" | \"secret\" | \"totp\";\nexport type SiteAuthAuthority =\n | {\n id: string;\n kind: \"connection_fields\";\n label: string;\n credential: InteractionCredentialAuthorityRef;\n fields: Array<{\n id: string;\n purpose: SiteAuthFieldPurpose;\n credentialKey: string;\n digits?: number | undefined;\n periodSeconds?: number | undefined;\n algorithm?: \"sha1\" | \"sha256\" | \"sha512\" | undefined;\n }>;\n }\n | {\n id: string;\n kind: \"human\";\n label: string;\n fields: Array<{ id: string; purpose: SiteAuthFieldPurpose }>;\n }\n | {\n id: string;\n kind: \"external_provider\";\n label: string;\n adapterId: string;\n connectionId: string;\n credential: InteractionCredentialAuthorityRef | null;\n };\n\nexport type SiteAuthMethod = {\n id: string;\n kind: \"password\" | \"sso\" | \"magic_link\" | \"passkey\" | \"external\";\n label: string;\n authorityIds: string[];\n};\n\nexport type SiteAuthHealthPolicy = {\n mode: \"on_use\" | \"maintained\";\n intervalSeconds: number | null;\n automaticRepair: boolean;\n};\n\nexport type SiteAuthConnectionConfiguration = {\n name: string;\n accountLabel: string;\n origins: string[];\n loginUrl: string | null;\n verificationUrlPrefixes: string[];\n authorities: SiteAuthAuthority[];\n methods: SiteAuthMethod[];\n preferredIdentityId: string | null;\n preferredPlacement: InteractionPlacement | null;\n preferredNetworkRouteId: string | null;\n healthPolicy: SiteAuthHealthPolicy;\n};\n\nexport type SiteAuthConnection = SiteAuthConnectionConfiguration & {\n id: string;\n accountId: string;\n workspaceId: string;\n status: \"active\" | \"archived\";\n verificationState: \"unknown\" | \"verified\" | \"needs_repair\" | \"failed\";\n lastVerifiedAt: string | null;\n lastVerifiedUrl: string | null;\n lastCheckedAt: string | null;\n nextCheckAt: string | null;\n maintenance: {\n action: \"health_check\" | \"repair\";\n sessionId: string | null;\n dueAt: string;\n startedAt: string | null;\n } | null;\n repairCode: string | null;\n version: number;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type SiteAuthConnectionListResponse = {\n revision: number;\n connections: SiteAuthConnection[];\n};\nexport type CreateSiteAuthConnectionRequest = SiteAuthConnectionConfiguration & {\n operationId: string;\n};\nexport type UpdateSiteAuthConnectionRequest = Partial<SiteAuthConnectionConfiguration> & {\n operationId: string;\n expectedVersion: number;\n status?: \"active\" | \"archived\" | undefined;\n};\nexport type SiteAuthConnectionMutationResponse = {\n connection: SiteAuthConnection;\n operationId: string;\n replayed: boolean;\n};\n\nexport type AuthRun = {\n id: string;\n accountId: string;\n workspaceId: string;\n siteAuthConnectionId: string;\n browserSessionId: string;\n targetId: string;\n controllerGeneration: string;\n targetGeneration: string;\n documentGeneration: string | null;\n purpose: \"authenticate\" | \"health_check\" | \"repair\";\n methodId: string | null;\n authorityId: string | null;\n state:\n | \"discovering\"\n | \"awaiting_choice\"\n | \"awaiting_secret\"\n | \"awaiting_external_action\"\n | \"working\"\n | \"verified\"\n | \"failed\"\n | \"cancelled\";\n choices: Array<{ id: string; label: string; methodId: string }>;\n pendingFields: Array<{ id: string; label: string; purpose: SiteAuthFieldPurpose }>;\n externalAction: {\n kind: \"push\" | \"security_key\" | \"passkey\" | \"device\" | \"human\" | \"other\";\n label: string;\n expiresAt: string | null;\n } | null;\n interventionId: string | null;\n verifiedUrl: string | null;\n failureCode: string | null;\n version: number;\n operationId: string;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n settledAt: string | null;\n};\n\nexport type AuthRunListResponse = { runs: AuthRun[] };\nexport type AuthRunMutationResponse = { run: AuthRun; operationId: string; replayed: boolean };\nexport type StartAuthRunRequest = {\n operationId: string;\n siteAuthConnectionId: string;\n targetId: string;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n purpose?: \"authenticate\" | \"health_check\" | \"repair\" | undefined;\n methodId?: string | undefined;\n authorityId?: string | undefined;\n};\nexport type ReportAuthRunRequest = {\n operationId: string;\n expectedVersion: number;\n methodId?: string | undefined;\n authorityId?: string | undefined;\n state:\n | \"awaiting_choice\"\n | \"awaiting_secret\"\n | \"awaiting_external_action\"\n | \"working\"\n | \"failed\"\n | \"cancelled\";\n choices?: AuthRun[\"choices\"] | undefined;\n pendingFields?: AuthRun[\"pendingFields\"] | undefined;\n externalAction?: AuthRun[\"externalAction\"] | undefined;\n failureCode?: string | null | undefined;\n};\nexport type ProtectedAuthFillRequest = {\n operationId: string;\n expectedVersion: number;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n expectedFrameId: string | null;\n authorityId: string;\n fields: Array<{ fieldId: string; locator: BrowserLocator }>;\n submit:\n | { type: \"none\" }\n | { type: \"click\"; locator: BrowserLocator }\n | { type: \"press\"; key: string; locator?: BrowserLocator | undefined };\n};\nexport type ProtectedAuthFillResponse = {\n run: AuthRun;\n status: \"submitted\" | \"working\" | \"needs_human\" | \"stale\" | \"failed\";\n operationId: string;\n replayed: boolean;\n};\nexport type ExternalAuthRunRequest = {\n operationId: string;\n expectedVersion: number;\n action: \"start\" | \"poll\";\n};\nexport type ExternalAuthRunResponse = {\n run: AuthRun;\n status: \"working\" | \"needs_human\" | \"ready_to_verify\" | \"failed\";\n operationId: string;\n replayed: boolean;\n};\nexport type ExternalAuthInteractiveRequest = {\n operationId: string;\n expectedVersion: number;\n};\nexport type ExternalAuthInteractiveResponse = {\n authRunId: string;\n url: string;\n expiresAt: string | null;\n};\nexport type VerifyAuthRunRequest = { operationId: string; expectedVersion: number };\n\nexport type InteractionIntervention = {\n id: string;\n accountId: string;\n workspaceId: string;\n resourceKind: \"browser_session\" | \"computer_session\";\n resourceId: string;\n targetId: string;\n controllerGeneration: string;\n targetGeneration: string;\n documentGeneration: string | null;\n kind: \"manual_login\" | \"mfa\" | \"external_action\" | \"confirmation\" | \"other\";\n reason: string;\n status: \"open\" | \"completed\" | \"dismissed\" | \"expired\" | \"cancelled\";\n authRunId: string | null;\n originatingSessionId: string;\n originatingTurnId: string | null;\n originatingAttemptId: string | null;\n originatingToolOperationId: string | null;\n responseActorSubjectId: string | null;\n version: number;\n operationId: string;\n expiresAt: string;\n createdAt: string;\n updatedAt: string;\n settledAt: string | null;\n};\nexport type InteractionInterventionListResponse = {\n interventions: InteractionIntervention[];\n};\nexport type CreateInteractionInterventionRequest = {\n operationId: string;\n resourceKind: \"browser_session\" | \"computer_session\";\n resourceId: string;\n targetId: string;\n expectedControllerGeneration: string;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n kind: InteractionIntervention[\"kind\"];\n reason: string;\n authRunId?: string | undefined;\n expiresInSeconds?: number | undefined;\n};\nexport type ResolveInteractionInterventionRequest = {\n operationId: string;\n expectedVersion: number;\n outcome: \"completed\" | \"dismissed\";\n};\nexport type InteractionInterventionMutationResponse = {\n intervention: InteractionIntervention;\n operationId: string;\n replayed: boolean;\n};\n\nexport type BrowserIdentityStatus = \"active\" | \"archived\";\nexport type BrowserRevisionComponentKind =\n | \"chromium_profile\"\n | \"normalized_web_state\"\n | \"provider_snapshot\";\nexport type BrowserRevisionPortability = \"portable\" | \"provider_bound\" | \"placement_bound\";\n\nexport type BrowserRevisionMaterialization = {\n portability: BrowserRevisionPortability;\n reason: string | null;\n platform: \"linux\" | \"macos\" | \"windows\" | null;\n architecture: \"x64\" | \"arm64\" | null;\n engine: \"chromium\" | \"chrome\" | \"firefox\" | \"webkit\" | \"lightpanda\" | \"external\";\n engineVersion: string | null;\n driverId: string;\n driverSchemaVersion: number;\n profileCrypto: \"chromium_basic\" | \"chromium_mock_keychain\" | \"platform_bound\";\n providerId: string | null;\n placement: InteractionPlacement | null;\n};\n\nexport type BrowserRevisionComponent = {\n id: string;\n kind: BrowserRevisionComponentKind;\n format: string;\n artifactDigest: string;\n sizeBytes: number;\n materialization: BrowserRevisionMaterialization;\n};\n\nexport type BrowserRevision = {\n id: string;\n accountId: string;\n workspaceId: string;\n identityId: string;\n parentRevisionId: string | null;\n ordinal: number;\n sourceBrowserSessionId: string;\n manifestDigest: string;\n components: BrowserRevisionComponent[];\n createdBySubjectId: string;\n createdAt: string;\n};\n\nexport type BrowserIdentity = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n status: BrowserIdentityStatus;\n version: number;\n defaultRevisionId: string | null;\n headGeneration: number;\n revisionCount: number;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type BrowserIdentityListResponse = {\n revision: number;\n identities: BrowserIdentity[];\n};\n\nexport type BrowserRevisionListResponse = {\n identity: BrowserIdentity;\n revisions: BrowserRevision[];\n};\n\nexport type CreateBrowserIdentityRequest = {\n operationId: string;\n name: string;\n};\n\nexport type UpdateBrowserIdentityRequest = {\n operationId: string;\n expectedVersion: number;\n name?: string | undefined;\n status?: BrowserIdentityStatus | undefined;\n defaultRevisionId?: string | undefined;\n};\n\nexport type BrowserIdentityMutationResponse = {\n identity: BrowserIdentity;\n operationId: string;\n replayed: boolean;\n};\n\nexport type PublishBrowserRevisionRequest = {\n operationId: string;\n identityId: string;\n expectedHeadGeneration: number;\n advanceDefault?: boolean | undefined;\n};\n\nexport type PublishBrowserRevisionResponse = {\n identity: BrowserIdentity;\n revision: BrowserRevision;\n outcome: \"saved_as_default\" | \"saved_not_default\";\n replayed: boolean;\n};\n\nexport type BrowserTarget = {\n id: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetGeneration: string;\n documentGeneration: string | null;\n kind: \"page\" | \"popup\" | \"background_page\" | \"worker\";\n title: string;\n url: string;\n selected: boolean;\n attached: boolean;\n createdAt: string;\n};\n\nexport type BrowserDownloadStatus =\n | \"in_progress\"\n | \"completed\"\n | \"cancelled\"\n | \"failed\"\n | \"unavailable\";\n\n/** One browser-produced file. Its bytes remain private to the exact browser\n * controller until an explicit save publishes them into the workspace. */\nexport type BrowserDownload = {\n id: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string | null;\n filename: string;\n status: BrowserDownloadStatus;\n receivedBytes: number;\n totalBytes: number | null;\n sha256: string | null;\n version: number;\n startedAt: string;\n settledAt: string | null;\n failureCode: string | null;\n};\n\nexport type BrowserDownloadListResponse = {\n browserSessionId: string;\n controllerGeneration: string;\n downloads: BrowserDownload[];\n};\n\nexport type BrowserDownloadSaveRequest = {\n operationId: string;\n destinationPath: string;\n overwrite?: boolean | undefined;\n};\n\nexport type BrowserDownloadSaveResponse = {\n download: BrowserDownload;\n destinationPath: string;\n fileId: string;\n operationId: string;\n replayed: boolean;\n};\n\nexport type InteractionRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type InteractionRedactedValue = {\n redacted: true;\n reason: \"password\" | \"payment\" | \"private\" | \"policy\";\n};\n\nexport type InteractionSemanticNode = {\n ref: string;\n role: string;\n identifier?: string | undefined;\n name?: string | undefined;\n description?: string | undefined;\n value?: string | InteractionRedactedValue | undefined;\n states: string[];\n bounds?: InteractionRect | undefined;\n actions: string[];\n children?: InteractionSemanticNode[] | undefined;\n native?: { platform: \"dom\" | \"mac_ax\" | \"at_spi\" | \"uia\"; data: unknown } | undefined;\n};\n\nexport type InteractionSemanticSnapshot = {\n kind: \"snapshot\";\n roots: InteractionSemanticNode[];\n nodeCount: number;\n};\n\nexport type InteractionSemanticDiff = {\n kind: \"diff\";\n baseObservationId: string;\n removedRefs: string[];\n changed: InteractionSemanticNode[];\n};\n\nexport type InteractionDiagnosticSummary = {\n consoleErrorCount: number;\n failedRequestCount: number;\n downloadCount: number;\n pageErrorCount: number;\n};\n\nexport type BrowserDialog = {\n type: \"alert\" | \"confirm\" | \"prompt\" | \"beforeunload\";\n message: string;\n defaultPrompt: string;\n openedAt: string;\n};\n\nexport type BrowserObservation = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n observationId: string;\n browserSessionId: string;\n target: BrowserTarget;\n frameId: string | null;\n semantic: InteractionSemanticSnapshot | InteractionSemanticDiff | null;\n screenshot: RetainedArtifactReference | null;\n focusedRef: string | null;\n changedRegions: InteractionRect[];\n diagnostics: InteractionDiagnosticSummary;\n dialog: BrowserDialog | null;\n observedAt: string;\n};\n\nexport type BrowserDiagnosticKind = \"console\" | \"page_error\" | \"failed_request\" | \"download\";\n\nexport type BrowserDiagnosticEntry = {\n sequence: number;\n kind: BrowserDiagnosticKind;\n level: \"debug\" | \"info\" | \"warning\" | \"error\" | null;\n message: string;\n url: string | null;\n method: string | null;\n status: number | null;\n filename: string | null;\n occurredAt: string;\n};\n\nexport type BrowserDiagnosticBatch = {\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n targetGeneration: string;\n entries: BrowserDiagnosticEntry[];\n cursor: number;\n truncated: boolean;\n};\n\nexport type BrowserLocator =\n | { kind: \"ref\"; ref: string }\n | {\n kind: \"role\";\n role: string;\n name?: string | undefined;\n exact?: boolean | undefined;\n }\n | { kind: \"label\"; text: string }\n | { kind: \"text\"; text: string }\n | { kind: \"placeholder\"; text: string }\n | { kind: \"test_id\"; value: string }\n | { kind: \"css\"; selector: string };\n\nexport type BrowserPermission =\n | \"geolocation\"\n | \"notifications\"\n | \"camera\"\n | \"microphone\"\n | \"midi\"\n | \"midi_sysex\"\n | \"sensors\"\n | \"idle_detection\"\n | \"local_fonts\"\n | \"window_management\";\n\nexport type BrowserPermissionSetting = \"granted\" | \"denied\" | \"prompt\";\n\nexport type BrowserAction =\n | { type: \"navigate\"; url: string }\n | {\n type: \"click\";\n locator: BrowserLocator;\n button?: \"left\" | \"right\" | \"middle\" | undefined;\n }\n | { type: \"double_click\"; locator: BrowserLocator }\n | { type: \"hover\"; locator: BrowserLocator }\n | { type: \"fill\"; locator: BrowserLocator; value: string }\n | { type: \"type\"; locator?: BrowserLocator | undefined; text: string }\n | { type: \"press\"; locator?: BrowserLocator | undefined; key: string }\n | { type: \"select\"; locator: BrowserLocator; values: string[] }\n | { type: \"check\"; locator: BrowserLocator; checked: boolean }\n | {\n type: \"scroll\";\n locator?: BrowserLocator | undefined;\n deltaX: number;\n deltaY: number;\n }\n | { type: \"drag\"; from: BrowserLocator; to: BrowserLocator }\n | {\n type: \"pointer\";\n action: \"click\" | \"double_click\" | \"move\" | \"scroll\" | \"drag\";\n x: number;\n y: number;\n endX?: number | undefined;\n endY?: number | undefined;\n deltaX?: number | undefined;\n deltaY?: number | undefined;\n button?: \"left\" | \"right\" | \"middle\" | undefined;\n clickCount?: 1 | 2 | undefined;\n }\n | {\n type: \"handle_dialog\";\n response: \"accept\" | \"dismiss\";\n promptText?: string | undefined;\n }\n | { type: \"upload\"; locator: BrowserLocator; workspaceFileIds: string[] }\n | {\n type: \"clipboard\";\n operation: \"write\" | \"clear\" | \"copy\" | \"paste\";\n text?: string | undefined;\n locator?: BrowserLocator | undefined;\n content?: \"selection\" | \"value\" | \"text\" | undefined;\n }\n | {\n type: \"permission\";\n permission: BrowserPermission;\n setting: BrowserPermissionSetting;\n }\n | {\n type: \"wait\";\n condition: \"load\" | \"network_idle\" | \"visible\" | \"hidden\";\n locator?: BrowserLocator | undefined;\n timeoutMs?: number | undefined;\n };\n\nexport type BrowserActionBatch = { type: \"batch\"; actions: BrowserAction[] };\n\nexport type InteractionError = {\n code:\n | \"resource_not_found\"\n | \"resource_unavailable\"\n | \"controller_stale\"\n | \"target_not_found\"\n | \"target_stale\"\n | \"observation_stale\"\n | \"document_stale\"\n | \"frame_stale\"\n | \"locator_not_found\"\n | \"locator_ambiguous\"\n | \"unsupported\"\n | \"permission_denied\"\n | \"machine_locked\"\n | \"attempt_stale\"\n | \"operation_conflict\"\n | \"outcome_unknown\"\n | \"invalid_action\"\n | \"timeout\"\n | \"controller_lost\"\n | \"driver_failed\";\n message: string;\n retryable: boolean;\n details?: Record<string, InteractionJsonValue> | undefined;\n};\n\nexport type InteractionOperationState =\n | \"prepared\"\n | \"dispatched\"\n | \"completed\"\n | \"failed\"\n | \"outcome_unknown\";\n\nexport type InteractionLifecycleOperationReceipt = {\n operationId: string;\n resourceKind: \"browser_session\" | \"computer_session\";\n resourceId: string;\n kind: \"create\" | \"resume\" | \"suspend\" | \"end\" | \"publish\";\n state: InteractionOperationState;\n replayed: boolean;\n error: InteractionError | null;\n createdAt: string;\n dispatchedAt: string | null;\n settledAt: string | null;\n};\n\nexport type CreateBrowserSessionRequest = {\n operationId: string;\n sessionId: string;\n name?: string | undefined;\n initialUrl?: string | undefined;\n headless?: boolean | undefined;\n engine?: \"chromium\" | \"lightpanda\" | undefined;\n placement?: InteractionPlacement | undefined;\n identityId?: string | undefined;\n baseRevisionId?: string | undefined;\n networkRouteId?: string | undefined;\n linkedComputerSessionId?: string | undefined;\n};\n\nexport type BrowserSessionListResponse = {\n revision: number;\n sessions: BrowserSession[];\n};\n\nexport type BrowserSessionMutationResponse = {\n session: BrowserSession;\n operation: InteractionLifecycleOperationReceipt;\n};\n\nexport type BrowserSessionLifecycleRequest = { operationId: string };\nexport type BrowserOpenTargetRequest = { url?: string | undefined };\n\nexport type BrowserTargetListResponse = {\n browserSessionId: string;\n controllerGeneration: string;\n targets: BrowserTarget[];\n};\n\nexport type InteractionFrameStreamAttachment<RelayKind extends 3 | 4 = 3 | 4> =\n | { kind: \"direct_websocket\"; url: string; protocols: string[] }\n | {\n kind: \"relay\";\n url: string;\n token: string;\n channel: {\n channelId: string;\n workspaceId: string;\n agentId: string;\n kind: RelayKind;\n port: number;\n };\n };\n\nexport type ComputerFrameStreamAttachment =\n | InteractionFrameStreamAttachment<4>\n | { kind: \"direct_rfb\"; url: string; protocols: string[] };\n\nexport type BrowserSessionAttachment = {\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n stream: InteractionFrameStreamAttachment<3>;\n expiresAt: string;\n};\n\nexport type BrowserSessionAttachmentRequest = {\n targetId: string;\n expiresInSeconds?: number | undefined;\n stream?: BrowserFrameStreamOptions | undefined;\n};\n\nexport type BrowserActionRequest = {\n operationId: string;\n targetId: string;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n expectedFrameId: string | null;\n observationMode?: \"full\" | \"none\" | undefined;\n action: BrowserAction | BrowserActionBatch;\n};\n\nexport type BrowserActionReceipt = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n operationId: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n state: InteractionOperationState;\n dispatchedAt: string | null;\n settledAt: string | null;\n observation: BrowserObservation | null;\n error: InteractionError | null;\n};\n\nexport type BrowserSessionHeartbeatResponse = {\n browserSessionId: string;\n controllerGeneration: string;\n alive: true;\n};\n\nexport type ComputerSessionCapabilities = {\n semanticObservation: boolean;\n appDiscovery: boolean;\n appLaunch: boolean;\n windowCapture: boolean;\n screenCapture: boolean;\n semanticActions: boolean;\n pointerInput: boolean;\n keyboardInput: boolean;\n clipboard: boolean;\n backgroundActions: boolean;\n parallelApps: boolean;\n};\n\nexport type ComputerClipboard = {\n computerSessionId: string;\n controllerGeneration: string;\n text: string | null;\n truncated: boolean;\n observedAt: string;\n};\n\nexport type ComputerSession = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n lifecycle: InteractionLifecycle;\n placement: InteractionPlacement;\n controller: InteractionControllerBinding | null;\n platform: \"linux\" | \"macos\" | \"windows\" | null;\n adapter: string | null;\n seatId: string | null;\n displayId: string | null;\n capabilities: ComputerSessionCapabilities | null;\n associations: InteractionAssociation[];\n createdBySubjectId: string;\n createdAt: string;\n lastUsedAt: string;\n failureCode: string | null;\n};\n\nexport type ComputerTarget = {\n id: string;\n computerSessionId: string;\n controllerGeneration: string;\n targetGeneration: string;\n kind: \"app\" | \"window\" | \"screen\";\n applicationId: string | null;\n processId: number | null;\n title: string;\n bounds: InteractionRect | null;\n focused: boolean;\n};\n\nexport type ComputerObservation = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n observationId: string;\n computerSessionId: string;\n target: ComputerTarget;\n frameId: string | null;\n semantic: InteractionSemanticSnapshot | InteractionSemanticDiff | null;\n screenshot: RetainedArtifactReference | null;\n focusedRef: string | null;\n changedRegions: InteractionRect[];\n observedAt: string;\n};\n\nexport type ComputerLocator =\n | { kind: \"ref\"; ref: string }\n | {\n kind: \"role\";\n role: string;\n name?: string | undefined;\n exact?: boolean | undefined;\n }\n | { kind: \"label\"; text: string; exact?: boolean | undefined }\n | { kind: \"text\"; text: string; exact?: boolean | undefined }\n | { kind: \"identifier\"; value: string };\n\nexport type ComputerAction =\n | {\n type: \"semantic\";\n locator: ComputerLocator;\n action:\n | \"invoke\"\n | \"focus\"\n | \"set_value\"\n | \"increment\"\n | \"decrement\"\n | \"select\"\n | \"deselect\"\n | \"expand\"\n | \"collapse\"\n | \"show_menu\"\n | \"scroll_into_view\";\n value?: string | number | boolean | undefined;\n }\n | {\n type: \"pointer\";\n frameId: string;\n action: \"click\" | \"double_click\" | \"move\" | \"scroll\" | \"drag\";\n x: number;\n y: number;\n endX?: number | undefined;\n endY?: number | undefined;\n deltaX?: number | undefined;\n deltaY?: number | undefined;\n button?: \"left\" | \"right\" | \"middle\" | undefined;\n }\n | { type: \"keyboard\"; action: \"type\" | \"press\"; value: string }\n | {\n type: \"clipboard\";\n operation: \"write\" | \"clear\" | \"copy\" | \"paste\";\n text?: string | undefined;\n }\n | { type: \"focus\"; targetId: string }\n | { type: \"launch\"; applicationId: string };\n\nexport type CreateComputerSessionRequest = {\n operationId: string;\n sessionId: string;\n name?: string | undefined;\n placement?: InteractionPlacement | undefined;\n};\n\nexport type ComputerSessionListResponse = {\n revision: number;\n sessions: ComputerSession[];\n};\n\nexport type ComputerSessionMutationResponse = {\n session: ComputerSession;\n operation: InteractionLifecycleOperationReceipt;\n};\n\nexport type ComputerSessionLifecycleRequest = { operationId: string };\n\nexport type ComputerTargetListResponse = {\n computerSessionId: string;\n controllerGeneration: string;\n targets: ComputerTarget[];\n};\n\nexport type InteractionFrameStreamOptions = {\n format?: \"jpeg\" | \"png\" | undefined;\n quality?: number | undefined;\n maxWidth?: number | undefined;\n maxHeight?: number | undefined;\n everyNthFrame?: number | undefined;\n};\n\nexport type ComputerFrameStreamOptions = InteractionFrameStreamOptions;\n\nexport type ComputerSessionAttachment = {\n computerSessionId: string;\n controllerGeneration: string;\n targetId: string;\n stream: ComputerFrameStreamAttachment;\n expiresAt: string;\n};\n\nexport type ComputerSessionAttachmentRequest = {\n targetId: string;\n expiresInSeconds?: number | undefined;\n stream?: ComputerFrameStreamOptions | undefined;\n};\n\nexport type ComputerActionRequest = {\n operationId: string;\n targetId: string;\n expectedTargetGeneration: string;\n expectedObservationId: string | null;\n expectedFrameId: string | null;\n action: ComputerAction;\n};\n\nexport type ComputerActionReceipt = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n operationId: string;\n computerSessionId: string;\n controllerGeneration: string;\n targetId: string;\n state: InteractionOperationState;\n dispatchedAt: string | null;\n settledAt: string | null;\n observation: ComputerObservation | null;\n error: InteractionError | null;\n};\n\nexport type ComputerSessionHeartbeatResponse = {\n computerSessionId: string;\n controllerGeneration: string;\n alive: true;\n};\n\nexport type BrowserDiagnosticsOptions = {\n kinds?: BrowserDiagnosticKind[] | undefined;\n after?: number | undefined;\n limit?: number | undefined;\n signal?: AbortSignal | undefined;\n};\n\n/** The exact HTTP surface needed by the framework-free interaction client. */\nexport interface InteractionTransport {\n listNetworkRoutes(\n workspaceId: string,\n options?: NetworkRouteListOptions,\n ): Promise<NetworkRouteListResponse>;\n getNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<NetworkRoute>;\n createNetworkRoute(\n workspaceId: string,\n request: CreateNetworkRouteRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<NetworkRouteMutationResponse>;\n updateNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n request: UpdateNetworkRouteRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<NetworkRouteMutationResponse>;\n listSiteAuthConnections(\n workspaceId: string,\n options?: SiteAuthConnectionListOptions,\n ): Promise<SiteAuthConnectionListResponse>;\n getSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<SiteAuthConnection>;\n createSiteAuthConnection(\n workspaceId: string,\n request: CreateSiteAuthConnectionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<SiteAuthConnectionMutationResponse>;\n updateSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n request: UpdateSiteAuthConnectionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<SiteAuthConnectionMutationResponse>;\n listAuthRuns(workspaceId: string, options?: AuthRunListOptions): Promise<AuthRunListResponse>;\n getAuthRun(\n workspaceId: string,\n authRunId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRun>;\n startBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n request: StartAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRunMutationResponse>;\n reportBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ReportAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRunMutationResponse>;\n protectedBrowserAuthFill(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ProtectedAuthFillRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ProtectedAuthFillResponse>;\n advanceExternalBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ExternalAuthRunResponse>;\n openExternalBrowserAuthFlow(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthInteractiveRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ExternalAuthInteractiveResponse>;\n verifyBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: VerifyAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRunMutationResponse>;\n listInteractionInterventions(\n workspaceId: string,\n options?: InteractionInterventionListOptions,\n ): Promise<InteractionInterventionListResponse>;\n getInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<InteractionIntervention>;\n createInteractionIntervention(\n workspaceId: string,\n request: CreateInteractionInterventionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<InteractionInterventionMutationResponse>;\n resolveInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n request: ResolveInteractionInterventionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<InteractionInterventionMutationResponse>;\n listAttachedBrowsers(\n workspaceId: string,\n options?: AttachedBrowserDeviceListOptions,\n ): Promise<AttachedBrowserDeviceListResponse>;\n getAttachedBrowser(\n workspaceId: string,\n deviceId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<AttachedBrowserDevice>;\n listBrowserIdentities(\n workspaceId: string,\n options?: BrowserIdentityListOptions,\n ): Promise<BrowserIdentityListResponse>;\n getBrowserIdentity(\n workspaceId: string,\n identityId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserIdentity>;\n createBrowserIdentity(\n workspaceId: string,\n request: CreateBrowserIdentityRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserIdentityMutationResponse>;\n updateBrowserIdentity(\n workspaceId: string,\n identityId: string,\n request: UpdateBrowserIdentityRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserIdentityMutationResponse>;\n listBrowserRevisions(\n workspaceId: string,\n identityId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserRevisionListResponse>;\n listBrowserSessions(\n workspaceId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionListResponse>;\n getBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSession>;\n readBrowserClipboard(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserClipboard>;\n listBrowserDownloads(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDownloadListResponse>;\n getBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDownload>;\n saveBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n request: BrowserDownloadSaveRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDownloadSaveResponse>;\n createBrowserSession(\n workspaceId: string,\n request: CreateBrowserSessionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n listBrowserTargets(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserTargetListResponse>;\n openBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n request?: BrowserOpenTargetRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserObservation>;\n selectBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserObservation>;\n closeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserTargetListResponse>;\n observeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserObservation>;\n actInBrowser(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserActionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserActionReceipt>;\n getBrowserActionReceipt(\n workspaceId: string,\n browserSessionId: string,\n operationId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserActionReceipt>;\n listBrowserDiagnostics(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: BrowserDiagnosticsOptions,\n ): Promise<BrowserDiagnosticBatch>;\n attachBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionAttachmentRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionAttachment>;\n heartbeatBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionHeartbeatResponse>;\n publishBrowserRevision(\n workspaceId: string,\n browserSessionId: string,\n request: PublishBrowserRevisionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<PublishBrowserRevisionResponse>;\n suspendBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n resumeBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n endBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n listComputerSessions(\n workspaceId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionListResponse>;\n getComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSession>;\n readComputerClipboard(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerClipboard>;\n createComputerSession(\n workspaceId: string,\n request: CreateComputerSessionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionMutationResponse>;\n listComputerTargets(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerTargetListResponse>;\n observeComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerObservation>;\n actInComputer(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerActionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerActionReceipt>;\n getComputerActionReceipt(\n workspaceId: string,\n computerSessionId: string,\n operationId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerActionReceipt>;\n attachComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionAttachmentRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionAttachment>;\n heartbeatComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionHeartbeatResponse>;\n endComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionMutationResponse>;\n}\n\n/** @deprecated Use InteractionTransport. */\nexport type BrowserInteractionTransport = InteractionTransport;\n\nexport type BrowserIdentityListOptions = OpenGeniRequestOptions & {\n includeArchived?: boolean | undefined;\n};\n\nexport type NetworkRouteListOptions = OpenGeniRequestOptions & {\n includeArchived?: boolean | undefined;\n};\n\nexport type SiteAuthConnectionListOptions = OpenGeniRequestOptions & {\n includeArchived?: boolean | undefined;\n};\n\nexport type AuthRunListOptions = OpenGeniRequestOptions & {\n browserSessionId?: string | undefined;\n siteAuthConnectionId?: string | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type InteractionInterventionListOptions = OpenGeniRequestOptions & {\n resourceKind?: \"browser_session\" | \"computer_session\" | undefined;\n resourceId?: string | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type AttachedBrowserDeviceListOptions = OpenGeniRequestOptions & {\n includeDisconnected?: boolean | undefined;\n};\n\nexport type BrowserDownloadSaveOptions = OpenGeniRequestOptions & {\n operationId?: string | undefined;\n overwrite?: boolean | undefined;\n};\n\nexport type CurrentOrOpenBrowserOptions = {\n workspaceId: string;\n associationSessionId: string;\n operationId?: string | undefined;\n name?: string | undefined;\n initialUrl?: string | undefined;\n headless?: boolean | undefined;\n placement?: InteractionPlacement | undefined;\n identityId?: string | undefined;\n baseRevisionId?: string | undefined;\n networkRouteId?: string | undefined;\n linkedComputerSessionId?: string | undefined;\n signal?: AbortSignal | undefined;\n};\n\nexport type CurrentOrOpenComputerOptions = {\n workspaceId: string;\n associationSessionId: string;\n operationId?: string | undefined;\n name?: string | undefined;\n placement?: InteractionPlacement | undefined;\n signal?: AbortSignal | undefined;\n};\n\n/** Framework-free resource facade over the public interaction HTTP API. */\nexport class OpenGeniInteractionClient {\n readonly attachedBrowsers: AttachedBrowserDeviceCollection;\n readonly authRuns: AuthRunCollection;\n readonly browsers: BrowserSessionCollection;\n readonly computers: ComputerSessionCollection;\n readonly identities: BrowserIdentityCollection;\n readonly interventions: InteractionInterventionCollection;\n readonly networkRoutes: NetworkRouteCollection;\n readonly siteAuthConnections: SiteAuthConnectionCollection;\n\n constructor(transport: BrowserInteractionTransport) {\n this.attachedBrowsers = new AttachedBrowserDeviceCollection(transport);\n this.authRuns = new AuthRunCollection(transport);\n this.browsers = new BrowserSessionCollection(transport);\n this.computers = new ComputerSessionCollection(transport);\n this.identities = new BrowserIdentityCollection(transport);\n this.interventions = new InteractionInterventionCollection(transport);\n this.networkRoutes = new NetworkRouteCollection(transport);\n this.siteAuthConnections = new SiteAuthConnectionCollection(transport);\n }\n}\n\nexport class NetworkRouteCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: NetworkRouteListOptions = {},\n ): Promise<NetworkRouteListResponse> {\n return await this.transport.listNetworkRoutes(workspaceId, options);\n }\n\n route(workspaceId: string, networkRouteId: string): NetworkRouteResource {\n return new NetworkRouteResource(this.transport, workspaceId, networkRouteId);\n }\n\n async create(\n workspaceId: string,\n request: CreateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteResource> {\n const response = await this.transport.createNetworkRoute(workspaceId, request, options);\n return this.route(workspaceId, response.route.id);\n }\n}\n\nexport class NetworkRouteResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<NetworkRoute> {\n return await this.transport.getNetworkRoute(this.workspaceId, this.id, options);\n }\n\n async update(\n request: UpdateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteMutationResponse> {\n return await this.transport.updateNetworkRoute(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class SiteAuthConnectionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: SiteAuthConnectionListOptions = {},\n ): Promise<SiteAuthConnectionListResponse> {\n return await this.transport.listSiteAuthConnections(workspaceId, options);\n }\n\n connection(workspaceId: string, connectionId: string): SiteAuthConnectionResource {\n return new SiteAuthConnectionResource(this.transport, workspaceId, connectionId);\n }\n\n async create(\n workspaceId: string,\n request: CreateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionResource> {\n const response = await this.transport.createSiteAuthConnection(workspaceId, request, options);\n return this.connection(workspaceId, response.connection.id);\n }\n}\n\nexport class SiteAuthConnectionResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<SiteAuthConnection> {\n return await this.transport.getSiteAuthConnection(this.workspaceId, this.id, options);\n }\n\n async update(\n request: UpdateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionMutationResponse> {\n return await this.transport.updateSiteAuthConnection(\n this.workspaceId,\n this.id,\n request,\n options,\n );\n }\n}\n\nexport class AuthRunCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(workspaceId: string, options: AuthRunListOptions = {}): Promise<AuthRunListResponse> {\n return await this.transport.listAuthRuns(workspaceId, options);\n }\n\n async get(\n workspaceId: string,\n authRunId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRun> {\n return await this.transport.getAuthRun(workspaceId, authRunId, options);\n }\n\n run(workspaceId: string, browserSessionId: string, authRunId: string): AuthRunResource {\n return new AuthRunResource(this.transport, workspaceId, browserSessionId, authRunId);\n }\n}\n\nexport class BrowserAuthRunCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n ) {}\n\n async list(\n options: Omit<AuthRunListOptions, \"browserSessionId\"> = {},\n ): Promise<AuthRunListResponse> {\n return await this.transport.listAuthRuns(this.workspaceId, {\n ...options,\n browserSessionId: this.browserSessionId,\n });\n }\n\n run(authRunId: string): AuthRunResource {\n return new AuthRunResource(this.transport, this.workspaceId, this.browserSessionId, authRunId);\n }\n\n async start(\n request: StartAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunResource> {\n const response = await this.transport.startBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n request,\n options,\n );\n return this.run(response.run.id);\n }\n}\n\nexport class AuthRunResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<AuthRun> {\n const run = await this.transport.getAuthRun(this.workspaceId, this.id, options);\n if (run.browserSessionId !== this.browserSessionId) {\n throw new Error(\"AuthRun belongs to another BrowserSession\");\n }\n return run;\n }\n\n async report(\n request: ReportAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.transport.reportBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n async protectedFill(\n request: ProtectedAuthFillRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ProtectedAuthFillResponse> {\n return await this.transport.protectedBrowserAuthFill(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n async advanceExternal(\n request: ExternalAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthRunResponse> {\n return await this.transport.advanceExternalBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n /** Human-session helper. Hosted provider URLs never appear in model tools. */\n async openExternalFlow(\n request: ExternalAuthInteractiveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthInteractiveResponse> {\n return await this.transport.openExternalBrowserAuthFlow(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n async verify(\n request: VerifyAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.transport.verifyBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n}\n\nexport class InteractionInterventionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: InteractionInterventionListOptions = {},\n ): Promise<InteractionInterventionListResponse> {\n return await this.transport.listInteractionInterventions(workspaceId, options);\n }\n\n intervention(workspaceId: string, interventionId: string): InteractionInterventionResource {\n return new InteractionInterventionResource(this.transport, workspaceId, interventionId);\n }\n\n async create(\n workspaceId: string,\n request: CreateInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionResource> {\n const response = await this.transport.createInteractionIntervention(\n workspaceId,\n request,\n options,\n );\n return this.intervention(workspaceId, response.intervention.id);\n }\n}\n\nexport class InteractionInterventionResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<InteractionIntervention> {\n return await this.transport.getInteractionIntervention(this.workspaceId, this.id, options);\n }\n\n async resolve(\n request: ResolveInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionMutationResponse> {\n return await this.transport.resolveInteractionIntervention(\n this.workspaceId,\n this.id,\n request,\n options,\n );\n }\n}\n\nexport class AttachedBrowserDeviceCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: AttachedBrowserDeviceListOptions = {},\n ): Promise<AttachedBrowserDeviceListResponse> {\n return await this.transport.listAttachedBrowsers(workspaceId, options);\n }\n\n device(workspaceId: string, deviceId: string): AttachedBrowserDeviceResource {\n return new AttachedBrowserDeviceResource(this.transport, workspaceId, deviceId);\n }\n}\n\nexport class AttachedBrowserDeviceResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<AttachedBrowserDevice> {\n return await this.transport.getAttachedBrowser(this.workspaceId, this.id, options);\n }\n}\n\nexport class BrowserIdentityCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: BrowserIdentityListOptions = {},\n ): Promise<BrowserIdentityListResponse> {\n return await this.transport.listBrowserIdentities(workspaceId, options);\n }\n\n identity(workspaceId: string, identityId: string): BrowserIdentityResource {\n return new BrowserIdentityResource(this.transport, workspaceId, identityId);\n }\n\n async create(\n workspaceId: string,\n request: CreateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityResource> {\n const response = await this.transport.createBrowserIdentity(workspaceId, request, options);\n return this.identity(workspaceId, response.identity.id);\n }\n}\n\nexport class BrowserIdentityResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<BrowserIdentity> {\n return await this.transport.getBrowserIdentity(this.workspaceId, this.id, options);\n }\n\n async revisions(options: OpenGeniRequestOptions = {}): Promise<BrowserRevisionListResponse> {\n return await this.transport.listBrowserRevisions(this.workspaceId, this.id, options);\n }\n\n async update(\n request: UpdateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityMutationResponse> {\n return await this.transport.updateBrowserIdentity(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class BrowserSessionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionListResponse> {\n return await this.transport.listBrowserSessions(workspaceId, options);\n }\n\n session(workspaceId: string, browserSessionId: string): BrowserSessionResource {\n return new BrowserSessionResource(this.transport, workspaceId, browserSessionId);\n }\n\n async open(\n workspaceId: string,\n request: CreateBrowserSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionResource> {\n const response = await this.transport.createBrowserSession(workspaceId, request, options);\n return this.session(workspaceId, response.session.id);\n }\n\n async currentOrOpen(options: CurrentOrOpenBrowserOptions): Promise<BrowserSessionResource> {\n const requestOptions = options.signal ? { signal: options.signal } : {};\n const listed = await this.list(options.workspaceId, requestOptions);\n const current = newestRelevantBrowser(listed.sessions, options.associationSessionId);\n if (current) {\n const resource = this.session(options.workspaceId, current.id);\n if (current.lifecycle === \"suspended\") {\n await resource.resume(\n { operationId: options.operationId ?? crypto.randomUUID() },\n requestOptions,\n );\n }\n return resource;\n }\n return await this.open(\n options.workspaceId,\n {\n operationId: options.operationId ?? crypto.randomUUID(),\n sessionId: options.associationSessionId,\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.initialUrl !== undefined ? { initialUrl: options.initialUrl } : {}),\n ...(options.headless !== undefined ? { headless: options.headless } : {}),\n ...(options.placement !== undefined ? { placement: options.placement } : {}),\n ...(options.identityId !== undefined ? { identityId: options.identityId } : {}),\n ...(options.baseRevisionId !== undefined ? { baseRevisionId: options.baseRevisionId } : {}),\n ...(options.networkRouteId !== undefined ? { networkRouteId: options.networkRouteId } : {}),\n ...(options.linkedComputerSessionId !== undefined\n ? { linkedComputerSessionId: options.linkedComputerSessionId }\n : {}),\n },\n requestOptions,\n );\n }\n}\n\nexport class BrowserSessionResource {\n readonly auth: BrowserAuthRunCollection;\n readonly clipboard: BrowserClipboardResource;\n readonly downloads: BrowserDownloadCollection;\n readonly tabs: BrowserTargetCollection;\n /** Alias for hosts that prefer the protocol term. */\n readonly targets: BrowserTargetCollection;\n\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {\n this.auth = new BrowserAuthRunCollection(transport, workspaceId, id);\n this.clipboard = new BrowserClipboardResource(transport, workspaceId, id);\n this.downloads = new BrowserDownloadCollection(transport, workspaceId, id);\n this.tabs = new BrowserTargetCollection(transport, workspaceId, id);\n this.targets = this.tabs;\n }\n\n async get(options: OpenGeniRequestOptions = {}): Promise<BrowserSession> {\n return await this.transport.getBrowserSession(this.workspaceId, this.id, options);\n }\n\n async observe(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.transport.observeBrowserTarget(this.workspaceId, this.id, targetId, options);\n }\n\n async act(\n request: BrowserActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.transport.actInBrowser(this.workspaceId, this.id, request, options);\n }\n\n async receipt(\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.transport.getBrowserActionReceipt(\n this.workspaceId,\n this.id,\n operationId,\n options,\n );\n }\n\n async diagnostics(\n targetId: string,\n options: BrowserDiagnosticsOptions = {},\n ): Promise<BrowserDiagnosticBatch> {\n return await this.transport.listBrowserDiagnostics(\n this.workspaceId,\n this.id,\n targetId,\n options,\n );\n }\n\n async attach(\n request: BrowserSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionAttachment> {\n return await this.transport.attachBrowserSession(this.workspaceId, this.id, request, options);\n }\n\n async heartbeat(options: OpenGeniRequestOptions = {}): Promise<BrowserSessionHeartbeatResponse> {\n return await this.transport.heartbeatBrowserSession(this.workspaceId, this.id, options);\n }\n\n async publishRevision(\n request: PublishBrowserRevisionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<PublishBrowserRevisionResponse> {\n return await this.transport.publishBrowserRevision(this.workspaceId, this.id, request, options);\n }\n\n async suspend(\n request: BrowserSessionLifecycleRequest = {\n operationId: crypto.randomUUID(),\n },\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.transport.suspendBrowserSession(this.workspaceId, this.id, request, options);\n }\n\n async resume(\n request: BrowserSessionLifecycleRequest = {\n operationId: crypto.randomUUID(),\n },\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.transport.resumeBrowserSession(this.workspaceId, this.id, request, options);\n }\n\n async end(\n request: BrowserSessionLifecycleRequest = {\n operationId: crypto.randomUUID(),\n },\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.transport.endBrowserSession(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class BrowserClipboardResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n ) {}\n\n async read(options: OpenGeniRequestOptions = {}): Promise<BrowserClipboard> {\n const clipboard = await this.transport.readBrowserClipboard(\n this.workspaceId,\n this.browserSessionId,\n options,\n );\n if (clipboard.browserSessionId !== this.browserSessionId) {\n throw new Error(\"Browser clipboard belongs to another BrowserSession\");\n }\n return clipboard;\n }\n}\n\nexport class BrowserDownloadCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n ) {}\n\n async list(options: OpenGeniRequestOptions = {}): Promise<BrowserDownloadListResponse> {\n return await this.transport.listBrowserDownloads(\n this.workspaceId,\n this.browserSessionId,\n options,\n );\n }\n\n download(downloadId: string): BrowserDownloadResource {\n return new BrowserDownloadResource(\n this.transport,\n this.workspaceId,\n this.browserSessionId,\n downloadId,\n );\n }\n}\n\nexport class BrowserDownloadResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<BrowserDownload> {\n const download = await this.transport.getBrowserDownload(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n options,\n );\n if (download.browserSessionId !== this.browserSessionId) {\n throw new Error(\"BrowserDownload belongs to another BrowserSession\");\n }\n return download;\n }\n\n /** Publish this exact private browser download into the source session's\n * workspace. Pass an operationId when the caller needs retry identity across\n * process boundaries; otherwise one is generated for this call. */\n async saveToWorkspace(\n destinationPath: string,\n options: BrowserDownloadSaveOptions = {},\n ): Promise<BrowserDownloadSaveResponse> {\n const { operationId = crypto.randomUUID(), overwrite = false, ...requestOptions } = options;\n const response = await this.transport.saveBrowserDownload(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n { operationId, destinationPath, overwrite },\n requestOptions,\n );\n if (\n response.download.id !== this.id ||\n response.download.browserSessionId !== this.browserSessionId\n ) {\n throw new Error(\"BrowserDownload save returned another resource\");\n }\n return response;\n }\n}\n\nexport class BrowserTargetCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n private readonly workspaceId: string,\n private readonly browserSessionId: string,\n ) {}\n\n async list(options: OpenGeniRequestOptions = {}): Promise<BrowserTargetListResponse> {\n return await this.transport.listBrowserTargets(\n this.workspaceId,\n this.browserSessionId,\n options,\n );\n }\n\n async open(url?: string, options: OpenGeniRequestOptions = {}): Promise<BrowserObservation> {\n return await this.transport.openBrowserTarget(\n this.workspaceId,\n this.browserSessionId,\n url === undefined ? {} : { url },\n options,\n );\n }\n\n async select(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.transport.selectBrowserTarget(\n this.workspaceId,\n this.browserSessionId,\n targetId,\n options,\n );\n }\n\n async close(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.transport.closeBrowserTarget(\n this.workspaceId,\n this.browserSessionId,\n targetId,\n options,\n );\n }\n}\n\nexport class ComputerSessionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionListResponse> {\n return await this.transport.listComputerSessions(workspaceId, options);\n }\n\n session(workspaceId: string, computerSessionId: string): ComputerSessionResource {\n return new ComputerSessionResource(this.transport, workspaceId, computerSessionId);\n }\n\n async open(\n workspaceId: string,\n request: CreateComputerSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionResource> {\n const response = await this.transport.createComputerSession(workspaceId, request, options);\n return this.session(workspaceId, response.session.id);\n }\n\n async currentOrOpen(options: CurrentOrOpenComputerOptions): Promise<ComputerSessionResource> {\n const requestOptions = options.signal ? { signal: options.signal } : {};\n const listed = await this.list(options.workspaceId, requestOptions);\n const current = newestRelevantComputer(listed.sessions, options.associationSessionId);\n if (current) {\n return this.session(options.workspaceId, current.id);\n }\n return await this.open(\n options.workspaceId,\n {\n operationId: options.operationId ?? crypto.randomUUID(),\n sessionId: options.associationSessionId,\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.placement !== undefined ? { placement: options.placement } : {}),\n },\n requestOptions,\n );\n }\n}\n\nexport class ComputerSessionResource {\n readonly targets: ComputerTargetCollection;\n /** Native application/window targets are also the public app collection. */\n readonly apps: ComputerTargetCollection;\n readonly clipboard: ComputerClipboardResource;\n\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {\n this.targets = new ComputerTargetCollection(transport, workspaceId, id);\n this.apps = this.targets;\n this.clipboard = new ComputerClipboardResource(transport, workspaceId, id);\n }\n\n async get(options: OpenGeniRequestOptions = {}): Promise<ComputerSession> {\n return await this.transport.getComputerSession(this.workspaceId, this.id, options);\n }\n\n async observe(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerObservation> {\n return await this.transport.observeComputerTarget(this.workspaceId, this.id, targetId, options);\n }\n\n async act(\n request: ComputerActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.transport.actInComputer(this.workspaceId, this.id, request, options);\n }\n\n async receipt(\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.transport.getComputerActionReceipt(\n this.workspaceId,\n this.id,\n operationId,\n options,\n );\n }\n\n async attach(\n request: ComputerSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionAttachment> {\n return await this.transport.attachComputerSession(this.workspaceId, this.id, request, options);\n }\n\n async heartbeat(options: OpenGeniRequestOptions = {}): Promise<ComputerSessionHeartbeatResponse> {\n return await this.transport.heartbeatComputerSession(this.workspaceId, this.id, options);\n }\n\n async end(\n request: ComputerSessionLifecycleRequest = { operationId: crypto.randomUUID() },\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionMutationResponse> {\n return await this.transport.endComputerSession(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class ComputerClipboardResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly computerSessionId: string,\n ) {}\n\n async read(options: OpenGeniRequestOptions = {}): Promise<ComputerClipboard> {\n const clipboard = await this.transport.readComputerClipboard(\n this.workspaceId,\n this.computerSessionId,\n options,\n );\n if (clipboard.computerSessionId !== this.computerSessionId) {\n throw new Error(\"Computer clipboard belongs to another ComputerSession\");\n }\n return clipboard;\n }\n}\n\nexport class ComputerTargetCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n private readonly workspaceId: string,\n private readonly computerSessionId: string,\n ) {}\n\n async list(options: OpenGeniRequestOptions = {}): Promise<ComputerTargetListResponse> {\n return await this.transport.listComputerTargets(\n this.workspaceId,\n this.computerSessionId,\n options,\n );\n }\n}\n\nexport type BrowserFrameMetadata = {\n frameId: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n targetGeneration: string;\n documentGeneration: string;\n sequence: number;\n mediaType: \"image/jpeg\" | \"image/png\";\n width: number;\n height: number;\n deviceScaleFactor: number;\n scrollX: number;\n scrollY: number;\n capturedAt: string;\n};\n\nexport type BrowserFrame = BrowserFrameMetadata & { data: Uint8Array };\n\nexport type ComputerFrameMetadata = {\n frameId: string;\n computerSessionId: string;\n controllerGeneration: string;\n targetId: string;\n targetGeneration: string;\n sequence: number;\n mediaType: \"image/jpeg\" | \"image/png\";\n width: number;\n height: number;\n capturedAt: string;\n sha256: string;\n};\n\nexport type ComputerFrame = ComputerFrameMetadata & { data: Uint8Array };\n\nexport type BrowserFrameStreamOptions = InteractionFrameStreamOptions;\n\n/** Convert a short-lived HTTP attachment URL into its browser WebSocket URL. */\nexport function browserFrameSocketUrl(\n attachment: BrowserSessionAttachment,\n options: BrowserFrameStreamOptions = {},\n): string {\n if (attachment.stream.kind !== \"direct_websocket\") {\n throw new Error(\"relay browser attachments are opened through the relay protocol\");\n }\n const url = new URL(attachment.stream.url);\n if (url.protocol === \"http:\") url.protocol = \"ws:\";\n else if (url.protocol === \"https:\") url.protocol = \"wss:\";\n else if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") {\n throw new Error(\"browser frame attachment did not contain an HTTP or WebSocket URL\");\n }\n if (options.format !== undefined) url.searchParams.set(\"format\", options.format);\n setBoundedIntegerQuery(url, \"quality\", options.quality, 1, 100);\n setBoundedIntegerQuery(url, \"maxWidth\", options.maxWidth, 1, 4_096);\n setBoundedIntegerQuery(url, \"maxHeight\", options.maxHeight, 1, 4_096);\n setBoundedIntegerQuery(url, \"everyNthFrame\", options.everyNthFrame, 1, 60);\n return url.toString();\n}\n\n/** Convert a direct ComputerSession attachment into its WebSocket URL. */\nexport function computerFrameSocketUrl(\n attachment: ComputerSessionAttachment,\n options: ComputerFrameStreamOptions = {},\n): string {\n if (attachment.stream.kind !== \"direct_websocket\") {\n throw new Error(\"relay computer attachments are opened through the relay protocol\");\n }\n const url = new URL(attachment.stream.url);\n if (url.protocol === \"http:\") url.protocol = \"ws:\";\n else if (url.protocol === \"https:\") url.protocol = \"wss:\";\n else if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") {\n throw new Error(\"computer frame attachment did not contain an HTTP or WebSocket URL\");\n }\n if (options.format !== undefined) url.searchParams.set(\"format\", options.format);\n setBoundedIntegerQuery(url, \"quality\", options.quality, 1, 100);\n setBoundedIntegerQuery(url, \"maxWidth\", options.maxWidth, 1, 4_096);\n setBoundedIntegerQuery(url, \"maxHeight\", options.maxHeight, 1, 4_096);\n setBoundedIntegerQuery(url, \"everyNthFrame\", options.everyNthFrame, 1, 60);\n return url.toString();\n}\n\n/** Decode one bounded binary frame message from the placement controller. */\nexport function decodeBrowserFrameMessage(message: ArrayBuffer | Uint8Array): BrowserFrame {\n const bytes = message instanceof Uint8Array ? message : new Uint8Array(message);\n if (\n bytes.byteLength < 5 ||\n bytes.byteLength > 4 + BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES + BROWSER_FRAME_MAX_BYTES\n ) {\n throw new Error(\"browser frame message is truncated or too large\");\n }\n const metadataLength = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(\n 0,\n false,\n );\n if (\n metadataLength < 1 ||\n metadataLength > BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES ||\n metadataLength + 4 >= bytes.byteLength\n ) {\n throw new Error(\"browser frame metadata length is invalid\");\n }\n let value: unknown;\n try {\n value = JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes.subarray(4, 4 + metadataLength)),\n );\n } catch {\n throw new Error(\"browser frame metadata is invalid JSON\");\n }\n const metadata = parseBrowserFrameMetadata(value);\n const data = bytes.slice(4 + metadataLength);\n if (data.byteLength < 1 || data.byteLength > BROWSER_FRAME_MAX_BYTES) {\n throw new Error(\"browser frame image is empty or too large\");\n }\n const dimensions = imageDimensions(data, metadata.mediaType);\n if (dimensions.width !== metadata.width || dimensions.height !== metadata.height) {\n throw new Error(\"browser frame image dimensions do not match metadata\");\n }\n return { ...metadata, data };\n}\n\n/** Decode and authenticate one bounded ComputerSession frame. Computer frames\n * carry a content digest because native capture adapters may cross process and\n * relay boundaries before reaching the SDK. */\nexport async function decodeComputerFrameMessage(\n message: ArrayBuffer | Uint8Array,\n): Promise<ComputerFrame> {\n const bytes = message instanceof Uint8Array ? message : new Uint8Array(message);\n if (\n bytes.byteLength < 5 ||\n bytes.byteLength > 4 + BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES + BROWSER_FRAME_MAX_BYTES\n ) {\n throw new Error(\"computer frame message is truncated or too large\");\n }\n const metadataLength = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(\n 0,\n false,\n );\n if (\n metadataLength < 1 ||\n metadataLength > BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES ||\n metadataLength + 4 >= bytes.byteLength\n ) {\n throw new Error(\"computer frame metadata length is invalid\");\n }\n let value: unknown;\n try {\n value = JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes.subarray(4, 4 + metadataLength)),\n );\n } catch {\n throw new Error(\"computer frame metadata is invalid JSON\");\n }\n const metadata = parseComputerFrameMetadata(value);\n const data = bytes.slice(4 + metadataLength);\n if (data.byteLength < 1 || data.byteLength > BROWSER_FRAME_MAX_BYTES) {\n throw new Error(\"computer frame image is empty or too large\");\n }\n const dimensions = imageDimensions(data, metadata.mediaType);\n if (dimensions.width !== metadata.width || dimensions.height !== metadata.height) {\n throw new Error(\"computer frame image dimensions do not match metadata\");\n }\n if ((await sha256Hex(data)) !== metadata.sha256) {\n throw new Error(\"computer frame digest does not match image\");\n }\n return { ...metadata, data };\n}\n\nexport function parseBrowserFrameMetadata(value: unknown): BrowserFrameMetadata {\n if (!isRecord(value)) throw new Error(\"browser frame metadata is invalid\");\n const allowed = new Set([\n \"frameId\",\n \"browserSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"documentGeneration\",\n \"sequence\",\n \"mediaType\",\n \"width\",\n \"height\",\n \"deviceScaleFactor\",\n \"scrollX\",\n \"scrollY\",\n \"capturedAt\",\n ]);\n if (Object.keys(value).some((key) => !allowed.has(key))) {\n throw new Error(\"browser frame metadata contains unknown fields\");\n }\n const strings = [\n \"frameId\",\n \"browserSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"documentGeneration\",\n \"mediaType\",\n \"capturedAt\",\n ] as const;\n for (const key of strings) {\n const item = value[key];\n const max = key === \"targetId\" ? 512 : key === \"capturedAt\" ? 128 : 256;\n if (typeof item !== \"string\" || item.length < 1 || utf8Bytes(item) > max) {\n throw new Error(\"browser frame metadata is invalid\");\n }\n }\n const numbers = [\n \"sequence\",\n \"width\",\n \"height\",\n \"deviceScaleFactor\",\n \"scrollX\",\n \"scrollY\",\n ] as const;\n for (const key of numbers) {\n if (typeof value[key] !== \"number\" || !Number.isFinite(value[key])) {\n throw new Error(\"browser frame metadata is invalid\");\n }\n }\n const metadata = value as unknown as BrowserFrameMetadata;\n if (\n !Number.isSafeInteger(metadata.sequence) ||\n metadata.sequence < 0 ||\n !Number.isSafeInteger(metadata.width) ||\n !Number.isSafeInteger(metadata.height)\n ) {\n throw new Error(\"browser frame metadata integers are invalid\");\n }\n assertImageDimensions(metadata.width, metadata.height);\n if (\n metadata.deviceScaleFactor <= 0 ||\n metadata.deviceScaleFactor > 16 ||\n Math.abs(metadata.scrollX) > 1_000_000_000 ||\n Math.abs(metadata.scrollY) > 1_000_000_000\n ) {\n throw new Error(\"browser frame geometry metadata is invalid\");\n }\n if (metadata.mediaType !== \"image/jpeg\" && metadata.mediaType !== \"image/png\") {\n throw new Error(\"browser frame media type is invalid\");\n }\n if (!isUuid(metadata.browserSessionId)) throw new Error(\"browser frame session id is invalid\");\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(metadata.controllerGeneration)) {\n throw new Error(\"browser frame controller generation is invalid\");\n }\n if (!Number.isFinite(new Date(metadata.capturedAt).valueOf())) {\n throw new Error(\"browser frame timestamp is invalid\");\n }\n return metadata;\n}\n\nexport function parseComputerFrameMetadata(value: unknown): ComputerFrameMetadata {\n if (!isRecord(value)) throw new Error(\"computer frame metadata is invalid\");\n const allowed = new Set([\n \"frameId\",\n \"computerSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"sequence\",\n \"mediaType\",\n \"width\",\n \"height\",\n \"capturedAt\",\n \"sha256\",\n ]);\n if (Object.keys(value).some((key) => !allowed.has(key))) {\n throw new Error(\"computer frame metadata contains unknown fields\");\n }\n const strings = [\n \"frameId\",\n \"computerSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"mediaType\",\n \"capturedAt\",\n \"sha256\",\n ] as const;\n for (const key of strings) {\n const item = value[key];\n const max = key === \"targetId\" ? 512 : key === \"capturedAt\" ? 128 : 256;\n if (typeof item !== \"string\" || item.length < 1 || utf8Bytes(item) > max) {\n throw new Error(\"computer frame metadata is invalid\");\n }\n }\n const metadata = value as unknown as ComputerFrameMetadata;\n if (\n !Number.isSafeInteger(metadata.sequence) ||\n metadata.sequence < 0 ||\n !Number.isSafeInteger(metadata.width) ||\n !Number.isSafeInteger(metadata.height)\n ) {\n throw new Error(\"computer frame metadata integers are invalid\");\n }\n assertImageDimensions(metadata.width, metadata.height);\n if (metadata.mediaType !== \"image/jpeg\" && metadata.mediaType !== \"image/png\") {\n throw new Error(\"computer frame media type is invalid\");\n }\n if (!isUuid(metadata.computerSessionId)) {\n throw new Error(\"computer frame session id is invalid\");\n }\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(metadata.controllerGeneration)) {\n throw new Error(\"computer frame controller generation is invalid\");\n }\n if (!Number.isFinite(new Date(metadata.capturedAt).valueOf())) {\n throw new Error(\"computer frame timestamp is invalid\");\n }\n if (!/^[0-9a-f]{64}$/u.test(metadata.sha256)) {\n throw new Error(\"computer frame digest is invalid\");\n }\n return metadata;\n}\n\nfunction newestRelevantBrowser(\n sessions: readonly BrowserSession[],\n associationSessionId: string,\n): BrowserSession | null {\n const live = sessions.filter(\n (session) =>\n ![\"ending\", \"ended\", \"failed\", \"lost\"].includes(session.lifecycle) &&\n session.associations.some((association) => association.sessionId === associationSessionId),\n );\n live.sort(\n (left, right) =>\n browserRelevance(right, associationSessionId) - browserRelevance(left, associationSessionId),\n );\n return live[0] ?? null;\n}\n\nfunction newestRelevantComputer(\n sessions: readonly ComputerSession[],\n associationSessionId: string,\n): ComputerSession | null {\n const live = sessions.filter(\n (session) =>\n [\"starting\", \"active\", \"restoring\"].includes(session.lifecycle) &&\n session.associations.some((association) => association.sessionId === associationSessionId),\n );\n live.sort(\n (left, right) =>\n computerRelevance(right, associationSessionId) -\n computerRelevance(left, associationSessionId),\n );\n return live[0] ?? null;\n}\n\nfunction browserRelevance(session: BrowserSession, associationSessionId: string): number {\n const association = session.associations\n .filter((item) => item.sessionId === associationSessionId)\n .map((item) => Date.parse(item.lastUsedAt))\n .filter(Number.isFinite)\n .reduce((best, timestamp) => Math.max(best, timestamp), 0);\n const used = Date.parse(session.lastUsedAt);\n return Math.max(association, Number.isFinite(used) ? used : 0);\n}\n\nfunction computerRelevance(session: ComputerSession, associationSessionId: string): number {\n const association = session.associations\n .filter((item) => item.sessionId === associationSessionId)\n .map((item) => Date.parse(item.lastUsedAt))\n .filter(Number.isFinite)\n .reduce((best, timestamp) => Math.max(best, timestamp), 0);\n const used = Date.parse(session.lastUsedAt);\n return Math.max(association, Number.isFinite(used) ? used : 0);\n}\n\nfunction setBoundedIntegerQuery(\n url: URL,\n name: string,\n value: number | undefined,\n min: number,\n max: number,\n): void {\n if (value === undefined) return;\n if (!Number.isSafeInteger(value) || value < min || value > max) {\n throw new Error(`browser frame ${name} must be an integer between ${min} and ${max}`);\n }\n url.searchParams.set(name, String(value));\n}\n\nfunction imageDimensions(\n data: Uint8Array,\n mediaType: BrowserFrameMetadata[\"mediaType\"],\n): { width: number; height: number } {\n const dimensions = mediaType === \"image/png\" ? pngDimensions(data) : jpegDimensions(data);\n assertImageDimensions(dimensions.width, dimensions.height);\n return dimensions;\n}\n\nfunction assertImageDimensions(width: number, height: number): void {\n if (\n !Number.isSafeInteger(width) ||\n !Number.isSafeInteger(height) ||\n width < 1 ||\n height < 1 ||\n width > BROWSER_FRAME_MAX_DIMENSION ||\n height > BROWSER_FRAME_MAX_DIMENSION ||\n width * height > BROWSER_FRAME_MAX_PIXELS\n ) {\n throw new Error(\"browser image dimensions exceed their bounded envelope\");\n }\n}\n\nfunction pngDimensions(data: Uint8Array): { width: number; height: number } {\n const signature = [137, 80, 78, 71, 13, 10, 26, 10];\n if (\n data.byteLength < 24 ||\n !signature.every((byte, index) => data[index] === byte) ||\n String.fromCharCode(...data.slice(12, 16)) !== \"IHDR\"\n ) {\n throw new Error(\"browser returned an invalid PNG image\");\n }\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return { width: view.getUint32(16), height: view.getUint32(20) };\n}\n\nfunction jpegDimensions(data: Uint8Array): { width: number; height: number } {\n if (data.byteLength < 4 || data[0] !== 0xff || data[1] !== 0xd8) {\n throw new Error(\"browser returned an invalid JPEG image\");\n }\n let offset = 2;\n while (offset + 3 < data.byteLength) {\n if (data[offset] !== 0xff) {\n offset += 1;\n continue;\n }\n let marker = data[offset + 1]!;\n while (marker === 0xff) {\n offset += 1;\n marker = data[offset + 1]!;\n }\n if (\n marker === 0xd8 ||\n marker === 0xd9 ||\n marker === 0x01 ||\n (marker >= 0xd0 && marker <= 0xd7)\n ) {\n offset += 2;\n continue;\n }\n if (offset + 3 >= data.byteLength) break;\n const length = (data[offset + 2]! << 8) | data[offset + 3]!;\n if (length < 2 || offset + 2 + length > data.byteLength) break;\n if (isJpegStartOfFrame(marker)) {\n if (length < 7 || offset + 8 >= data.byteLength) break;\n return {\n height: (data[offset + 5]! << 8) | data[offset + 6]!,\n width: (data[offset + 7]! << 8) | data[offset + 8]!,\n };\n }\n offset += 2 + length;\n }\n throw new Error(\"browser returned a JPEG without dimensions\");\n}\n\nfunction isJpegStartOfFrame(marker: number): boolean {\n return (\n (marker >= 0xc0 && marker <= 0xc3) ||\n (marker >= 0xc5 && marker <= 0xc7) ||\n (marker >= 0xc9 && marker <= 0xcb) ||\n (marker >= 0xcd && marker <= 0xcf)\n );\n}\n\nfunction utf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\nasync function sha256Hex(value: Uint8Array): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) throw new Error(\"computer frame digest verification is unavailable\");\n const copy = new Uint8Array(value.byteLength);\n copy.set(value);\n const digest = new Uint8Array(await subtle.digest(\"SHA-256\", copy));\n return [...digest].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction isUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editable-artifacts/worker/rpc-protocol.ts","../src/editable-artifacts/worker/wire-codec.ts"],"sourcesContent":["const FRAME_MAGIC = new Uint8Array([0x4f, 0x47, 0x41, 0x57, 0x52, 0x50, 0x43, 0x31]); // OGAWRPC1\nconst FRAME_HEADER_BYTES = 36;\nconst FRAME_VERSION = 1;\nconst DEFAULT_MAX_METADATA_BYTES = 1024 * 1024;\nconst DEFAULT_MAX_SEGMENT_BYTES = 128 * 1024 * 1024;\nconst DEFAULT_MAX_TOTAL_SEGMENT_BYTES = 512 * 1024 * 1024;\nconst DEFAULT_MAX_SEGMENTS = 4_096;\n\nexport const enum ArtifactWorkerRpcKind {\n Initialize = 1,\n Reset = 2,\n LoadSnapshot = 3,\n ApplyRecovered = 4,\n ReconcileCommitted = 5,\n ReplacePending = 6,\n AuthorPending = 7,\n Cancel = 8,\n Dispose = 9,\n QuerySpreadsheet = 10,\n Response = 128,\n Error = 129,\n}\n\nexport type ArtifactWorkerRpcMessage = {\n frame: ArrayBuffer;\n segments: ArrayBuffer[];\n};\n\nexport type ArtifactWorkerRpcLimits = {\n maxMetadataBytes: number;\n maxSegmentBytes: number;\n maxTotalSegmentBytes: number;\n maxSegments: number;\n};\n\nexport type DecodedArtifactWorkerRpcFrame = {\n kind: ArtifactWorkerRpcKind;\n generation: number;\n requestId: number;\n flags: number;\n metadata: Uint8Array;\n segments: Uint8Array[];\n};\n\nexport const DEFAULT_ARTIFACT_WORKER_RPC_LIMITS: Readonly<ArtifactWorkerRpcLimits> = Object.freeze({\n maxMetadataBytes: DEFAULT_MAX_METADATA_BYTES,\n maxSegmentBytes: DEFAULT_MAX_SEGMENT_BYTES,\n maxTotalSegmentBytes: DEFAULT_MAX_TOTAL_SEGMENT_BYTES,\n maxSegments: DEFAULT_MAX_SEGMENTS,\n});\n\nexport class ArtifactWorkerProtocolError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string, options?: { cause?: unknown }) {\n super(message, options?.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"ArtifactWorkerProtocolError\";\n this.code = code;\n }\n}\n\nexport function encodeArtifactWorkerRpcMessage(input: {\n kind: ArtifactWorkerRpcKind;\n generation: number;\n requestId: number;\n flags?: number;\n metadata?: Uint8Array;\n /** Every buffer must already be exclusively owned by this message. */\n segments?: ArrayBuffer[];\n limits?: Readonly<ArtifactWorkerRpcLimits>;\n}): ArtifactWorkerRpcMessage {\n const limits = validateLimits(input.limits ?? DEFAULT_ARTIFACT_WORKER_RPC_LIMITS);\n const generation = unsignedInt(input.generation, \"generation\");\n const requestId = unsignedInt(input.requestId, \"requestId\");\n if (generation === 0 || requestId === 0) {\n throw protocolError(\"invalid_number\", \"generation and requestId must be nonzero\");\n }\n const flags = unsignedInt(input.flags ?? 0, \"flags\");\n const kind = unsignedShort(input.kind, \"kind\");\n if (!isKnownKind(kind)) throw protocolError(\"unknown_kind\", `unknown RPC kind ${kind}`);\n const metadata = input.metadata ?? new Uint8Array();\n if (!(metadata instanceof Uint8Array))\n throw protocolError(\"invalid_frame\", \"metadata must be bytes\");\n if (metadata.byteLength > limits.maxMetadataBytes) {\n throw protocolError(\"metadata_too_large\", \"RPC metadata exceeds its configured byte limit\");\n }\n const segments = input.segments ?? [];\n if (\n !Array.isArray(segments) ||\n segments.length > limits.maxSegments ||\n segments.length > 0xffff\n ) {\n throw protocolError(\"segments_too_large\", \"RPC segment count exceeds its configured limit\");\n }\n let totalSegmentBytes = 0;\n const uniqueSegments = new Set<ArrayBuffer>();\n for (const segment of segments) {\n if (!(segment instanceof ArrayBuffer)) {\n throw protocolError(\"invalid_segment\", \"RPC segments must be transferable ArrayBuffers\");\n }\n if (segment.byteLength > limits.maxSegmentBytes) {\n throw protocolError(\"segment_too_large\", \"RPC segment exceeds its configured byte limit\");\n }\n if (uniqueSegments.has(segment)) {\n throw protocolError(\"invalid_segment\", \"RPC segments must not alias one transferable buffer\");\n }\n uniqueSegments.add(segment);\n totalSegmentBytes = checkedAdd(totalSegmentBytes, segment.byteLength, \"RPC segment bytes\");\n if (totalSegmentBytes > limits.maxTotalSegmentBytes) {\n throw protocolError(\"segments_too_large\", \"RPC segments exceed their aggregate byte limit\");\n }\n }\n\n const segmentTableBytes = checkedMultiply(segments.length, 4, \"RPC segment table\");\n const frameBytes = checkedAdd(\n checkedAdd(FRAME_HEADER_BYTES, metadata.byteLength, \"RPC frame\"),\n segmentTableBytes,\n \"RPC frame\",\n );\n const frame = new Uint8Array(frameBytes);\n const view = new DataView(frame.buffer);\n frame.set(FRAME_MAGIC, 0);\n view.setUint16(8, FRAME_VERSION, true);\n view.setUint16(10, kind, true);\n view.setUint32(12, generation, true);\n view.setUint32(16, requestId, true);\n view.setUint32(20, flags, true);\n view.setUint32(24, metadata.byteLength, true);\n view.setUint16(28, segments.length, true);\n view.setUint16(30, 0, true);\n view.setUint32(32, 0, true);\n frame.set(metadata, FRAME_HEADER_BYTES);\n let offset = FRAME_HEADER_BYTES + metadata.byteLength;\n for (const segment of segments) {\n view.setUint32(offset, segment.byteLength, true);\n offset += 4;\n }\n view.setUint32(32, checksum32(frame), true);\n return { frame: frame.buffer, segments };\n}\n\nexport function decodeArtifactWorkerRpcMessage(\n input: unknown,\n limitsInput: Readonly<ArtifactWorkerRpcLimits> = DEFAULT_ARTIFACT_WORKER_RPC_LIMITS,\n): DecodedArtifactWorkerRpcFrame {\n const limits = validateLimits(limitsInput);\n if (!isPlainRecord(input)) throw protocolError(\"invalid_frame\", \"RPC message must be a record\");\n const keys = Object.keys(input);\n if (keys.length !== 2 || !keys.includes(\"frame\") || !keys.includes(\"segments\")) {\n throw protocolError(\"invalid_frame\", \"RPC message contains unknown or missing fields\");\n }\n const frameBuffer = dataProperty(input, \"frame\");\n const rawSegments = dataProperty(input, \"segments\");\n if (!(frameBuffer instanceof ArrayBuffer)) {\n throw protocolError(\"invalid_frame\", \"RPC frame must be a transferable ArrayBuffer\");\n }\n if (!Array.isArray(rawSegments))\n throw protocolError(\"invalid_frame\", \"RPC segments must be an array\");\n if (frameBuffer.byteLength < FRAME_HEADER_BYTES)\n throw protocolError(\"truncated\", \"RPC frame is truncated\");\n if (\n frameBuffer.byteLength >\n FRAME_HEADER_BYTES + limits.maxMetadataBytes + limits.maxSegments * 4\n ) {\n throw protocolError(\"metadata_too_large\", \"RPC frame exceeds its configured byte limit\");\n }\n const frame = new Uint8Array(frameBuffer);\n for (let index = 0; index < FRAME_MAGIC.length; index += 1) {\n if (frame[index] !== FRAME_MAGIC[index])\n throw protocolError(\"bad_magic\", \"invalid RPC frame magic\");\n }\n const view = new DataView(frameBuffer);\n const version = view.getUint16(8, true);\n if (version !== FRAME_VERSION) {\n throw protocolError(\"unsupported_version\", `unsupported RPC frame version ${version}`);\n }\n const kind = view.getUint16(10, true);\n if (!isKnownKind(kind)) throw protocolError(\"unknown_kind\", `unknown RPC kind ${kind}`);\n const generation = view.getUint32(12, true);\n const requestId = view.getUint32(16, true);\n if (generation === 0 || requestId === 0) {\n throw protocolError(\"noncanonical\", \"generation and requestId must be nonzero\");\n }\n const flags = view.getUint32(20, true);\n const metadataBytes = view.getUint32(24, true);\n const segmentCount = view.getUint16(28, true);\n if (view.getUint16(30, true) !== 0) {\n throw protocolError(\"noncanonical\", \"reserved RPC frame bits are set\");\n }\n if (metadataBytes > limits.maxMetadataBytes) {\n throw protocolError(\"metadata_too_large\", \"RPC metadata exceeds its configured byte limit\");\n }\n if (segmentCount > limits.maxSegments || rawSegments.length !== segmentCount) {\n throw protocolError(\"invalid_segment\", \"RPC segment count does not match its frame\");\n }\n const expectedFrameBytes = checkedAdd(\n checkedAdd(FRAME_HEADER_BYTES, metadataBytes, \"RPC frame\"),\n checkedMultiply(segmentCount, 4, \"RPC segment table\"),\n \"RPC frame\",\n );\n if (frame.byteLength !== expectedFrameBytes) {\n throw protocolError(\"trailing_bytes\", \"RPC frame has a truncated or trailing payload\");\n }\n const expectedChecksum = view.getUint32(32, true);\n view.setUint32(32, 0, true);\n const actualChecksum = checksum32(frame);\n view.setUint32(32, expectedChecksum, true);\n if (expectedChecksum !== actualChecksum) {\n throw protocolError(\"checksum_mismatch\", \"RPC frame checksum does not match\");\n }\n const segments: Uint8Array[] = [];\n const uniqueBuffers = new Set<ArrayBuffer>([frameBuffer]);\n let totalSegmentBytes = 0;\n let tableOffset = FRAME_HEADER_BYTES + metadataBytes;\n for (let index = 0; index < segmentCount; index += 1) {\n const expectedBytes = view.getUint32(tableOffset, true);\n tableOffset += 4;\n const segment = rawSegments[index];\n if (!(segment instanceof ArrayBuffer) || segment.byteLength !== expectedBytes) {\n throw protocolError(\n \"invalid_segment\",\n `RPC segment ${index} does not match its declared length`,\n );\n }\n if (uniqueBuffers.has(segment)) {\n throw protocolError(\"invalid_segment\", \"RPC frame and segments must use distinct buffers\");\n }\n uniqueBuffers.add(segment);\n if (segment.byteLength > limits.maxSegmentBytes) {\n throw protocolError(\"segment_too_large\", `RPC segment ${index} exceeds its configured limit`);\n }\n totalSegmentBytes = checkedAdd(totalSegmentBytes, segment.byteLength, \"RPC segment bytes\");\n if (totalSegmentBytes > limits.maxTotalSegmentBytes) {\n throw protocolError(\"segments_too_large\", \"RPC segments exceed their aggregate byte limit\");\n }\n segments.push(new Uint8Array(segment));\n }\n return {\n kind: kind as ArtifactWorkerRpcKind,\n generation,\n requestId,\n flags,\n metadata: frame.slice(FRAME_HEADER_BYTES, FRAME_HEADER_BYTES + metadataBytes),\n segments,\n };\n}\n\nexport function transferListForArtifactWorkerRpcMessage(\n message: ArtifactWorkerRpcMessage,\n): Transferable[] {\n return [message.frame, ...message.segments];\n}\n\n/** Creates a private transferable copy; transferring never detaches caller-owned bytes. */\nexport function ownedTransferBuffer(bytes: Uint8Array): ArrayBuffer {\n if (!(bytes instanceof Uint8Array))\n throw protocolError(\"invalid_segment\", \"expected byte segment\");\n return bytes.slice().buffer;\n}\n\nexport class ArtifactWorkerBinaryWriter {\n private readonly chunks: Uint8Array[] = [];\n private size = 0;\n\n constructor(private readonly maximumBytes = DEFAULT_MAX_METADATA_BYTES) {\n positiveSafeInteger(maximumBytes, \"maximumBytes\");\n }\n\n u8(value: number): this {\n unsignedByte(value, \"u8\");\n return this.append(new Uint8Array([value]));\n }\n\n u16(value: number): this {\n unsignedShort(value, \"u16\");\n const bytes = new Uint8Array(2);\n new DataView(bytes.buffer).setUint16(0, value, true);\n return this.append(bytes);\n }\n\n u32(value: number): this {\n unsignedInt(value, \"u32\");\n const bytes = new Uint8Array(4);\n new DataView(bytes.buffer).setUint32(0, value, true);\n return this.append(bytes);\n }\n\n safeUint(value: number): this {\n nonNegativeSafeInteger(value, \"safeUint\");\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setBigUint64(0, BigInt(value), true);\n return this.append(bytes);\n }\n\n f64(value: number): this {\n if (!Number.isFinite(value)) throw protocolError(\"invalid_number\", \"f64 must be finite\");\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setFloat64(0, value, true);\n return this.append(bytes);\n }\n\n string(value: string, maximumBytes = 256 * 1024): this {\n if (typeof value !== \"string\") throw protocolError(\"invalid_string\", \"expected a string\");\n if (!isWellFormedUnicode(value)) {\n throw protocolError(\"invalid_string\", \"string contains an unpaired UTF-16 surrogate\");\n }\n const bytes = new TextEncoder().encode(value);\n if (bytes.byteLength > maximumBytes)\n throw protocolError(\"string_too_large\", \"string exceeds its byte limit\");\n this.u32(bytes.byteLength);\n return this.append(bytes);\n }\n\n optionalString(value: string | null, maximumBytes = 256 * 1024): this {\n this.u8(value === null ? 0 : 1);\n if (value !== null) this.string(value, maximumBytes);\n return this;\n }\n\n frontier(\n value: readonly Readonly<{ replicaId: string; counter: number }>[],\n maximumActors = 1_024,\n ): this {\n const entries = validateFrontier(value, maximumActors);\n this.u32(entries.length);\n for (const [actor, counter] of entries) {\n this.string(actor, 256);\n this.safeUint(counter);\n }\n return this;\n }\n\n finish(): Uint8Array {\n const output = new Uint8Array(this.size);\n let offset = 0;\n for (const chunk of this.chunks) {\n output.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return output;\n }\n\n private append(bytes: Uint8Array): this {\n this.size = checkedAdd(this.size, bytes.byteLength, \"binary metadata\");\n if (this.size > this.maximumBytes) {\n throw protocolError(\"metadata_too_large\", \"binary metadata exceeds its configured limit\");\n }\n this.chunks.push(bytes);\n return this;\n }\n}\n\nexport class ArtifactWorkerBinaryReader {\n private readonly view: DataView;\n private offset = 0;\n\n constructor(private readonly bytes: Uint8Array) {\n if (!(bytes instanceof Uint8Array))\n throw protocolError(\"invalid_frame\", \"metadata must be bytes\");\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n }\n\n u8(): number {\n this.require(1);\n const value = this.view.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n\n u16(): number {\n this.require(2);\n const value = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return value;\n }\n\n u32(): number {\n this.require(4);\n const value = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return value;\n }\n\n safeUint(): number {\n this.require(8);\n const value = this.view.getBigUint64(this.offset, true);\n this.offset += 8;\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw protocolError(\"invalid_number\", \"RPC unsigned integer exceeds JavaScript safe range\");\n }\n return Number(value);\n }\n\n f64(): number {\n this.require(8);\n const value = this.view.getFloat64(this.offset, true);\n this.offset += 8;\n if (!Number.isFinite(value)) throw protocolError(\"invalid_number\", \"non-finite RPC number\");\n return value;\n }\n\n string(maximumBytes = 256 * 1024): string {\n const length = this.u32();\n if (length > maximumBytes)\n throw protocolError(\"string_too_large\", \"RPC string exceeds its byte limit\");\n this.require(length);\n const bytes = this.bytes.subarray(this.offset, this.offset + length);\n this.offset += length;\n try {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n } catch (error) {\n throw protocolError(\"invalid_utf8\", \"RPC string is not valid UTF-8\", error);\n }\n }\n\n optionalString(maximumBytes = 256 * 1024): string | null {\n const present = this.u8();\n if (present === 0) return null;\n if (present !== 1) throw protocolError(\"noncanonical\", \"invalid optional-string tag\");\n return this.string(maximumBytes);\n }\n\n frontier(maximumActors = 1_024): readonly Readonly<{ replicaId: string; counter: number }>[] {\n const count = this.u32();\n if (count > maximumActors)\n throw protocolError(\"frontier_too_large\", \"causal frontier exceeds its actor limit\");\n const entries: Array<Readonly<{ replicaId: string; counter: number }>> = [];\n let previous = \"\";\n for (let index = 0; index < count; index += 1) {\n const actor = this.string(256);\n if (!actor || (index > 0 && compareCodeUnits(previous, actor) >= 0)) {\n throw protocolError(\n \"noncanonical\",\n \"causal frontier actors must be unique and code-unit sorted\",\n );\n }\n const counter = this.safeUint();\n entries.push(Object.freeze({ replicaId: actor, counter }));\n previous = actor;\n }\n return Object.freeze(entries);\n }\n\n done(): void {\n if (this.offset !== this.bytes.byteLength) {\n throw protocolError(\"trailing_bytes\", \"RPC metadata contains trailing bytes\");\n }\n }\n\n remaining(): number {\n return this.bytes.byteLength - this.offset;\n }\n\n private require(length: number): void {\n if (length < 0 || this.offset + length > this.bytes.byteLength) {\n throw protocolError(\"truncated\", \"RPC metadata is truncated\");\n }\n }\n}\n\nfunction validateFrontier(\n value: readonly Readonly<{ replicaId: string; counter: number }>[],\n maximumActors: number,\n): Array<readonly [string, number]> {\n if (!Array.isArray(value))\n throw protocolError(\"invalid_frontier\", \"causal frontier must be an array\");\n const entries: Array<readonly [string, number]> = [];\n for (const entry of value) {\n if (!isPlainRecord(entry))\n throw protocolError(\"invalid_frontier\", \"causal frontier entry is invalid\");\n const keys = Object.keys(entry);\n if (keys.length !== 2 || !keys.includes(\"replicaId\") || !keys.includes(\"counter\")) {\n throw protocolError(\"invalid_frontier\", \"causal frontier entry has unknown fields\");\n }\n const actor = dataProperty(entry, \"replicaId\");\n const counter = dataProperty(entry, \"counter\");\n if (typeof actor !== \"string\" || typeof counter !== \"number\") {\n throw protocolError(\"invalid_frontier\", \"causal frontier entry has invalid fields\");\n }\n entries.push([actor, counter]);\n }\n if (entries.length > maximumActors) {\n throw protocolError(\"frontier_too_large\", \"causal frontier exceeds its actor limit\");\n }\n for (const [actor, counter] of entries) {\n if (!actor || new TextEncoder().encode(actor).byteLength > 256) {\n throw protocolError(\"invalid_frontier\", \"causal frontier actor is invalid\");\n }\n nonNegativeSafeInteger(counter, `causal frontier counter for ${actor}`);\n }\n const sorted = entries.slice().sort(([left], [right]) => compareCodeUnits(left, right));\n for (let index = 0; index < entries.length; index += 1) {\n if (entries[index]![0] !== sorted[index]![0]) {\n throw protocolError(\"noncanonical\", \"causal frontier must already be code-unit sorted\");\n }\n if (index > 0 && entries[index - 1]![0] === entries[index]![0]) {\n throw protocolError(\"noncanonical\", \"causal frontier contains a duplicate replica\");\n }\n }\n return entries;\n}\n\nfunction validateLimits(input: Readonly<ArtifactWorkerRpcLimits>): ArtifactWorkerRpcLimits {\n const limits = {\n maxMetadataBytes: positiveSafeInteger(input.maxMetadataBytes, \"maxMetadataBytes\"),\n maxSegmentBytes: positiveSafeInteger(input.maxSegmentBytes, \"maxSegmentBytes\"),\n maxTotalSegmentBytes: positiveSafeInteger(input.maxTotalSegmentBytes, \"maxTotalSegmentBytes\"),\n maxSegments: positiveSafeInteger(input.maxSegments, \"maxSegments\"),\n };\n if (limits.maxSegments > 0xffff) {\n throw protocolError(\"invalid_limit\", \"maxSegments exceeds the frame encoding limit\");\n }\n return limits;\n}\n\nfunction isKnownKind(kind: number): boolean {\n return (\n (kind >= ArtifactWorkerRpcKind.Initialize && kind <= ArtifactWorkerRpcKind.QuerySpreadsheet) ||\n kind === ArtifactWorkerRpcKind.Response ||\n kind === ArtifactWorkerRpcKind.Error\n );\n}\n\nfunction checksum32(bytes: Uint8Array): number {\n let hash = 0x811c9dc5;\n for (const byte of bytes) {\n hash ^= byte;\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return hash;\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction isWellFormedUnicode(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const following = value.charCodeAt(index + 1);\n if (!(following >= 0xdc00 && following <= 0xdfff)) return false;\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n return false;\n }\n }\n return true;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction dataProperty(record: Record<string, unknown>, key: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(record, key);\n if (!descriptor || !(\"value\" in descriptor)) {\n throw protocolError(\"invalid_frame\", `RPC ${key} must be a data property`);\n }\n return descriptor.value;\n}\n\nfunction unsignedByte(value: number, label: string): number {\n if (!Number.isInteger(value) || value < 0 || value > 0xff) {\n throw protocolError(\"invalid_number\", `${label} must be an unsigned byte`);\n }\n return value;\n}\n\nfunction unsignedShort(value: number, label: string): number {\n if (!Number.isInteger(value) || value < 0 || value > 0xffff) {\n throw protocolError(\"invalid_number\", `${label} must be an unsigned 16-bit integer`);\n }\n return value;\n}\n\nfunction unsignedInt(value: number, label: string): number {\n if (!Number.isInteger(value) || value < 0 || value > 0xffffffff) {\n throw protocolError(\"invalid_number\", `${label} must be an unsigned 32-bit integer`);\n }\n return value;\n}\n\nfunction positiveSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw protocolError(\"invalid_limit\", `${label} must be a positive safe integer`);\n }\n return value;\n}\n\nfunction nonNegativeSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw protocolError(\"invalid_number\", `${label} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction checkedAdd(left: number, right: number, label: string): number {\n const result = left + right;\n if (!Number.isSafeInteger(result)) throw protocolError(\"size_overflow\", `${label} overflow`);\n return result;\n}\n\nfunction checkedMultiply(left: number, right: number, label: string): number {\n const result = left * right;\n if (!Number.isSafeInteger(result)) throw protocolError(\"size_overflow\", `${label} overflow`);\n return result;\n}\n\nfunction protocolError(\n code: string,\n message: string,\n cause?: unknown,\n): ArtifactWorkerProtocolError {\n return new ArtifactWorkerProtocolError(\n code,\n message,\n cause === undefined ? undefined : { cause },\n );\n}\n","import {\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { MAX_COMMITTED_TRANSACTION_BYTES } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport type {\n EditableArtifactBlockedPending,\n EditableArtifactCommittedTransaction,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactSnapshot,\n EditableArtifactWorkerKernel,\n} from \"../types\";\nimport {\n ArtifactWorkerBinaryReader,\n ArtifactWorkerBinaryWriter,\n ArtifactWorkerProtocolError,\n} from \"./rpc-protocol\";\n\nconst MAX_ID_BYTES = 256;\nconst MAX_VERSION_BYTES = 512;\nconst MAX_ERROR_BYTES = 8 * 1024;\nconst MAX_URL_BYTES = 8 * 1024;\nconst SHA256_PATTERN = /^sha256:[0-9a-f]{64}$/;\nconst HARD_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst HARD_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst HARD_MAX_INTENT_BYTES = EDITABLE_ARTIFACT_INTENT_MAX_BYTES;\nconst HARD_MAX_COMMITTED_TRANSACTION_BYTES = MAX_COMMITTED_TRANSACTION_BYTES;\nconst HARD_MAX_QUERY_BYTES = 256;\nconst HARD_MAX_QUERY_RESPONSE_BYTES = 8 * 1024 * 1024;\nconst HARD_MAX_PENDING_TRANSACTIONS = 1_024;\n\nexport type ArtifactWorkerInitializeInput = {\n modality: EditableArtifactModality;\n kernelVersion: string;\n protocolVersion: number;\n modelSchemaVersion: number;\n commandVersion: number;\n wasmGlueUrl: string;\n wasmBinaryUrl: string;\n maximumSnapshotBytes: number;\n maximumCommandBytes: number;\n maximumIntentBytes: number;\n maximumCommittedTransactionBytes: number;\n maximumQueryBytes: number;\n maximumQueryResponseBytes: number;\n maximumPendingTransactions: number;\n};\n\nexport type ArtifactWorkerAuthorPendingInput = Parameters<\n EditableArtifactWorkerKernel[\"authorPending\"]\n>[0];\n\nexport type ArtifactWorkerErrorPayload = {\n code: string;\n message: string;\n retryable: boolean;\n};\n\nexport function encodeInitialize(input: ArtifactWorkerInitializeInput): Uint8Array {\n validateInitializeLimits(input);\n const writer = new ArtifactWorkerBinaryWriter();\n writer\n .u8(modalityTag(input.modality))\n .string(requireVersion(input.kernelVersion, \"kernelVersion\"), MAX_VERSION_BYTES)\n .u32(positiveSafeInteger(input.protocolVersion, \"protocolVersion\"))\n .u32(positiveSafeInteger(input.modelSchemaVersion, \"modelSchemaVersion\"))\n .u32(positiveSafeInteger(input.commandVersion, \"commandVersion\"))\n .string(requireUrl(input.wasmGlueUrl, \"wasmGlueUrl\"), MAX_URL_BYTES)\n .string(requireUrl(input.wasmBinaryUrl, \"wasmBinaryUrl\"), MAX_URL_BYTES)\n .safeUint(positiveSafeInteger(input.maximumSnapshotBytes, \"maximumSnapshotBytes\"))\n .safeUint(positiveSafeInteger(input.maximumCommandBytes, \"maximumCommandBytes\"))\n .safeUint(positiveSafeInteger(input.maximumIntentBytes, \"maximumIntentBytes\"))\n .safeUint(\n positiveSafeInteger(\n input.maximumCommittedTransactionBytes,\n \"maximumCommittedTransactionBytes\",\n ),\n )\n .safeUint(positiveSafeInteger(input.maximumQueryBytes, \"maximumQueryBytes\"))\n .safeUint(positiveSafeInteger(input.maximumQueryResponseBytes, \"maximumQueryResponseBytes\"))\n .safeUint(positiveSafeInteger(input.maximumPendingTransactions, \"maximumPendingTransactions\"));\n return writer.finish();\n}\n\nexport function decodeInitialize(bytes: Uint8Array): ArtifactWorkerInitializeInput {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const value = {\n modality: decodeModality(reader.u8()),\n kernelVersion: requireVersion(reader.string(MAX_VERSION_BYTES), \"kernelVersion\"),\n protocolVersion: positiveSafeInteger(reader.u32(), \"protocolVersion\"),\n modelSchemaVersion: positiveSafeInteger(reader.u32(), \"modelSchemaVersion\"),\n commandVersion: positiveSafeInteger(reader.u32(), \"commandVersion\"),\n wasmGlueUrl: requireUrl(reader.string(MAX_URL_BYTES), \"wasmGlueUrl\"),\n wasmBinaryUrl: requireUrl(reader.string(MAX_URL_BYTES), \"wasmBinaryUrl\"),\n maximumSnapshotBytes: positiveSafeInteger(reader.safeUint(), \"maximumSnapshotBytes\"),\n maximumCommandBytes: positiveSafeInteger(reader.safeUint(), \"maximumCommandBytes\"),\n maximumIntentBytes: positiveSafeInteger(reader.safeUint(), \"maximumIntentBytes\"),\n maximumCommittedTransactionBytes: positiveSafeInteger(\n reader.safeUint(),\n \"maximumCommittedTransactionBytes\",\n ),\n maximumQueryBytes: positiveSafeInteger(reader.safeUint(), \"maximumQueryBytes\"),\n maximumQueryResponseBytes: positiveSafeInteger(reader.safeUint(), \"maximumQueryResponseBytes\"),\n maximumPendingTransactions: positiveSafeInteger(\n reader.safeUint(),\n \"maximumPendingTransactions\",\n ),\n };\n reader.done();\n validateInitializeLimits(value);\n return value;\n}\n\nexport function encodeSnapshotMetadata(snapshot: EditableArtifactSnapshot): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter();\n writer\n .u8(modalityTag(snapshot.modality))\n .string(requireIdentifier(snapshot.artifactId, \"snapshot.artifactId\"), MAX_ID_BYTES)\n .safeUint(nonNegativeSafeInteger(snapshot.sequence, \"snapshot.sequence\"))\n .string(requireSha256(snapshot.stateHash, \"snapshot.stateHash\"), 71)\n .string(requireSha256(snapshot.digest, \"snapshot.digest\"), 71)\n .string(requireVersion(snapshot.kernelVersion, \"snapshot.kernelVersion\"), MAX_VERSION_BYTES)\n .u32(positiveSafeInteger(snapshot.modelSchemaVersion, \"snapshot.modelSchemaVersion\"));\n if (snapshot.modality === \"spreadsheet\") {\n writer\n .frontier(snapshot.causalFrontier)\n .u32(positiveSafeInteger(snapshot.protocolVersion, \"snapshot.protocolVersion\"));\n } else {\n writer.safeUint(nonNegativeSafeInteger(snapshot.nativeRevision, \"snapshot.nativeRevision\"));\n }\n return writer.finish();\n}\n\nexport function decodeSnapshotMetadata(\n bytes: Uint8Array,\n snapshotBytes: Uint8Array,\n): EditableArtifactSnapshot {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const modality = decodeModality(reader.u8());\n const common = {\n artifactId: requireIdentifier(reader.string(MAX_ID_BYTES), \"snapshot.artifactId\"),\n sequence: nonNegativeSafeInteger(reader.safeUint(), \"snapshot.sequence\"),\n stateHash: requireSha256(reader.string(71), \"snapshot.stateHash\"),\n digest: requireSha256(reader.string(71), \"snapshot.digest\"),\n kernelVersion: requireVersion(reader.string(MAX_VERSION_BYTES), \"snapshot.kernelVersion\"),\n modelSchemaVersion: positiveSafeInteger(reader.u32(), \"snapshot.modelSchemaVersion\"),\n bytes: snapshotBytes,\n } as const;\n const value: EditableArtifactSnapshot =\n modality === \"spreadsheet\"\n ? {\n ...common,\n modality,\n causalFrontier: reader.frontier(),\n protocolVersion: positiveSafeInteger(reader.u32(), \"snapshot.protocolVersion\"),\n }\n : {\n ...common,\n modality,\n nativeRevision: nonNegativeSafeInteger(reader.safeUint(), \"snapshot.nativeRevision\"),\n };\n reader.done();\n return Object.freeze(value);\n}\n\nexport function encodeCommittedMetadata(\n transaction: EditableArtifactCommittedTransaction,\n): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter();\n encodeCommittedFields(writer, transaction);\n return writer.finish();\n}\n\nexport function decodeCommittedMetadata(\n bytes: Uint8Array,\n committedTransactionBytes: Uint8Array,\n): EditableArtifactCommittedTransaction {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const modality = decodeModality(reader.u8());\n const common = {\n artifactId: requireIdentifier(reader.string(MAX_ID_BYTES), \"transaction.artifactId\"),\n transactionId: requireIdentifier(reader.string(MAX_ID_BYTES), \"transaction.transactionId\"),\n requestHash: requireSha256(reader.string(71), \"transaction.requestHash\"),\n startSequence: positiveSafeInteger(reader.safeUint(), \"transaction.startSequence\"),\n endSequence: positiveSafeInteger(reader.safeUint(), \"transaction.endSequence\"),\n priorStateHash: requireSha256(reader.string(71), \"transaction.priorStateHash\"),\n stateHash: requireSha256(reader.string(71), \"transaction.stateHash\"),\n committedTransactionBytes,\n } as const;\n const value: EditableArtifactCommittedTransaction =\n modality === \"spreadsheet\"\n ? {\n ...common,\n modality,\n causalFrontier: reader.frontier(),\n protocolVersion: positiveSafeInteger(reader.u32(), \"transaction.protocolVersion\"),\n }\n : {\n ...common,\n modality,\n priorNativeRevision: nonNegativeSafeInteger(\n reader.safeUint(),\n \"transaction.priorNativeRevision\",\n ),\n nativeRevision: nonNegativeSafeInteger(reader.safeUint(), \"transaction.nativeRevision\"),\n commitProtocolVersion: positiveSafeInteger(\n reader.u32(),\n \"transaction.commitProtocolVersion\",\n ),\n };\n reader.done();\n if (value.endSequence < value.startSequence) {\n throw wireError(\"invalid_sequence\", \"transaction endSequence precedes startSequence\");\n }\n return Object.freeze(value);\n}\n\nexport function encodePendingListMetadata(\n transactions: readonly EditableArtifactPendingTransaction[],\n): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter();\n if (!Array.isArray(transactions))\n throw wireError(\"invalid_pending\", \"pending transactions must be an array\");\n writer.u32(transactions.length);\n for (const transaction of transactions) encodePendingFields(writer, transaction);\n return writer.finish();\n}\n\nexport function decodePendingListMetadata(\n bytes: Uint8Array,\n segments: readonly Uint8Array[],\n maximumTransactions: number,\n): readonly EditableArtifactPendingTransaction[] {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const count = reader.u32();\n if (count > maximumTransactions || count * 2 !== segments.length) {\n throw wireError(\"invalid_pending\", \"pending metadata and command segments do not match\");\n }\n const transactions: EditableArtifactPendingTransaction[] = [];\n for (let index = 0; index < count; index += 1) {\n transactions.push(decodePendingFields(reader, segments[index * 2]!, segments[index * 2 + 1]!));\n }\n reader.done();\n return Object.freeze(transactions);\n}\n\nexport function encodeReconcileMetadata(\n committed: EditableArtifactCommittedTransaction,\n pending: readonly EditableArtifactPendingTransaction[],\n): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter();\n encodeCommittedFields(writer, committed);\n writer.u32(pending.length);\n for (const transaction of pending) encodePendingFields(writer, transaction);\n return writer.finish();\n}\n\nexport function decodeReconcileMetadata(\n bytes: Uint8Array,\n segments: readonly Uint8Array[],\n maximumPendingTransactions: number,\n): {\n committed: EditableArtifactCommittedTransaction;\n pending: readonly EditableArtifactPendingTransaction[];\n} {\n if (segments.length < 1) throw wireError(\"invalid_segment\", \"reconcile requires operation bytes\");\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const committed = decodeCommittedFields(reader, segments[0]!);\n if (committed.endSequence < committed.startSequence) {\n throw wireError(\"invalid_sequence\", \"transaction endSequence precedes startSequence\");\n }\n const count = reader.u32();\n if (count > maximumPendingTransactions || segments.length !== count * 2 + 1) {\n throw wireError(\"invalid_pending\", \"reconcile pending metadata and segments do not match\");\n }\n const pending: EditableArtifactPendingTransaction[] = [];\n for (let index = 0; index < count; index += 1) {\n pending.push(decodePendingFields(reader, segments[index * 2 + 1]!, segments[index * 2 + 2]!));\n }\n reader.done();\n return { committed, pending: Object.freeze(pending) };\n}\n\nexport function encodeAuthorPendingMetadata(input: ArtifactWorkerAuthorPendingInput): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter();\n encodeAuthorPendingFields(writer, input);\n return writer.finish();\n}\n\nexport function decodeAuthorPendingMetadata(\n bytes: Uint8Array,\n commandBytes: Uint8Array,\n): ArtifactWorkerAuthorPendingInput {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const value = decodeAuthorPendingFields(reader, commandBytes);\n reader.done();\n return value;\n}\n\nexport function encodeStateResponse(stateHash: string, digest?: string): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter(256);\n writer\n .string(requireSha256(stateHash, \"stateHash\"), 71)\n .optionalString(digest === undefined ? null : requireSha256(digest, \"digest\"), 71);\n return writer.finish();\n}\n\nexport function decodeStateResponse(bytes: Uint8Array): { stateHash: string; digest?: string } {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const stateHash = requireSha256(reader.string(71), \"stateHash\");\n const digest = reader.optionalString(71);\n reader.done();\n return digest === null ? { stateHash } : { stateHash, digest: requireSha256(digest, \"digest\") };\n}\n\nexport function encodeProjectionResponse(\n blockedPending: readonly EditableArtifactBlockedPending[],\n stateHash?: string,\n): Uint8Array {\n if (!Array.isArray(blockedPending) || blockedPending.length > HARD_MAX_PENDING_TRANSACTIONS) {\n throw wireError(\"invalid_pending\", \"blocked pending result exceeds its item limit\");\n }\n const writer = new ArtifactWorkerBinaryWriter();\n writer.optionalString(stateHash === undefined ? null : requireSha256(stateHash, \"stateHash\"), 71);\n writer.u32(blockedPending.length);\n const seen = new Set<string>();\n for (const blocked of blockedPending) {\n const clientTransactionId = requireIdentifier(\n blocked.clientTransactionId,\n \"blocked.clientTransactionId\",\n );\n if (seen.has(clientTransactionId))\n throw wireError(\"noncanonical\", \"blocked transaction is duplicated\");\n seen.add(clientTransactionId);\n writer.string(clientTransactionId, MAX_ID_BYTES).string(requireErrorCode(blocked.code), 128);\n }\n return writer.finish();\n}\n\nexport function decodeProjectionResponse(bytes: Uint8Array): {\n stateHash?: string;\n blockedPending: readonly EditableArtifactBlockedPending[];\n} {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const stateHash = reader.optionalString(71);\n const count = reader.u32();\n if (count > HARD_MAX_PENDING_TRANSACTIONS) {\n throw wireError(\"invalid_pending\", \"blocked pending result exceeds its item limit\");\n }\n const blockedPending: EditableArtifactBlockedPending[] = [];\n const seen = new Set<string>();\n for (let index = 0; index < count; index += 1) {\n const clientTransactionId = requireIdentifier(\n reader.string(MAX_ID_BYTES),\n \"blocked.clientTransactionId\",\n );\n if (seen.has(clientTransactionId))\n throw wireError(\"noncanonical\", \"blocked transaction is duplicated\");\n seen.add(clientTransactionId);\n blockedPending.push(\n Object.freeze({ clientTransactionId, code: requireErrorCode(reader.string(128)) }),\n );\n }\n reader.done();\n return {\n ...(stateHash === null ? {} : { stateHash: requireSha256(stateHash, \"stateHash\") }),\n blockedPending: Object.freeze(blockedPending),\n };\n}\n\nexport function encodeErrorPayload(error: ArtifactWorkerErrorPayload): Uint8Array {\n const writer = new ArtifactWorkerBinaryWriter(MAX_ERROR_BYTES * 2 + 32);\n writer\n .string(requireErrorCode(error.code), 128)\n .string(requireBoundedString(error.message, \"error.message\", MAX_ERROR_BYTES), MAX_ERROR_BYTES)\n .u8(error.retryable ? 1 : 0);\n return writer.finish();\n}\n\nexport function decodeErrorPayload(bytes: Uint8Array): ArtifactWorkerErrorPayload {\n const reader = new ArtifactWorkerBinaryReader(bytes);\n const value = {\n code: requireErrorCode(reader.string(128)),\n message: requireBoundedString(reader.string(MAX_ERROR_BYTES), \"error.message\", MAX_ERROR_BYTES),\n retryable: decodeBoolean(reader.u8(), \"error.retryable\"),\n };\n reader.done();\n return value;\n}\n\nexport function sha256Hex(bytes: Uint8Array): Promise<string> {\n if (!(bytes instanceof Uint8Array))\n throw wireError(\"invalid_bytes\", \"SHA-256 input must be bytes\");\n const owned = new Uint8Array(bytes);\n return globalThis.crypto.subtle\n .digest(\"SHA-256\", owned)\n .then(\n (digest) =>\n `sha256:${[...new Uint8Array(digest)]\n .map((value) => value.toString(16).padStart(2, \"0\"))\n .join(\"\")}`,\n );\n}\n\nexport function requireMatchingHash(actual: string, expected: string, label: string): void {\n requireSha256(actual, `${label}.actual`);\n requireSha256(expected, `${label}.expected`);\n if (actual !== expected)\n throw wireError(\"kernel_diverged\", `${label} hash does not match authority`);\n}\n\nfunction encodeCommittedFields(\n writer: ArtifactWorkerBinaryWriter,\n transaction: EditableArtifactCommittedTransaction,\n): void {\n writer\n .u8(modalityTag(transaction.modality))\n .string(requireIdentifier(transaction.artifactId, \"transaction.artifactId\"), MAX_ID_BYTES)\n .string(requireIdentifier(transaction.transactionId, \"transaction.transactionId\"), MAX_ID_BYTES)\n .string(requireSha256(transaction.requestHash, \"transaction.requestHash\"), 71)\n .safeUint(positiveSafeInteger(transaction.startSequence, \"transaction.startSequence\"))\n .safeUint(positiveSafeInteger(transaction.endSequence, \"transaction.endSequence\"))\n .string(requireSha256(transaction.priorStateHash, \"transaction.priorStateHash\"), 71)\n .string(requireSha256(transaction.stateHash, \"transaction.stateHash\"), 71);\n if (transaction.modality === \"spreadsheet\") {\n writer\n .frontier(transaction.causalFrontier)\n .u32(positiveSafeInteger(transaction.protocolVersion, \"transaction.protocolVersion\"));\n } else {\n writer\n .safeUint(\n nonNegativeSafeInteger(transaction.priorNativeRevision, \"transaction.priorNativeRevision\"),\n )\n .safeUint(nonNegativeSafeInteger(transaction.nativeRevision, \"transaction.nativeRevision\"))\n .u32(\n positiveSafeInteger(transaction.commitProtocolVersion, \"transaction.commitProtocolVersion\"),\n );\n }\n}\n\nfunction decodeCommittedFields(\n reader: ArtifactWorkerBinaryReader,\n committedTransactionBytes: Uint8Array,\n): EditableArtifactCommittedTransaction {\n const modality = decodeModality(reader.u8());\n const common = {\n artifactId: requireIdentifier(reader.string(MAX_ID_BYTES), \"transaction.artifactId\"),\n transactionId: requireIdentifier(reader.string(MAX_ID_BYTES), \"transaction.transactionId\"),\n requestHash: requireSha256(reader.string(71), \"transaction.requestHash\"),\n startSequence: positiveSafeInteger(reader.safeUint(), \"transaction.startSequence\"),\n endSequence: positiveSafeInteger(reader.safeUint(), \"transaction.endSequence\"),\n priorStateHash: requireSha256(reader.string(71), \"transaction.priorStateHash\"),\n stateHash: requireSha256(reader.string(71), \"transaction.stateHash\"),\n committedTransactionBytes,\n } as const;\n return Object.freeze(\n modality === \"spreadsheet\"\n ? {\n ...common,\n modality,\n causalFrontier: reader.frontier(),\n protocolVersion: positiveSafeInteger(reader.u32(), \"transaction.protocolVersion\"),\n }\n : {\n ...common,\n modality,\n priorNativeRevision: nonNegativeSafeInteger(\n reader.safeUint(),\n \"transaction.priorNativeRevision\",\n ),\n nativeRevision: nonNegativeSafeInteger(reader.safeUint(), \"transaction.nativeRevision\"),\n commitProtocolVersion: positiveSafeInteger(\n reader.u32(),\n \"transaction.commitProtocolVersion\",\n ),\n },\n );\n}\n\nfunction modalityTag(modality: EditableArtifactModality): number {\n switch (modality) {\n case \"document\":\n return 1;\n case \"spreadsheet\":\n return 2;\n case \"presentation\":\n return 3;\n }\n}\n\nfunction decodeModality(tag: number): EditableArtifactModality {\n if (tag === 1) return \"document\";\n if (tag === 2) return \"spreadsheet\";\n if (tag === 3) return \"presentation\";\n throw wireError(\"invalid_modality\", \"artifact modality tag is invalid\");\n}\n\nfunction encodePendingFields(\n writer: ArtifactWorkerBinaryWriter,\n transaction: EditableArtifactPendingTransaction,\n): void {\n writer\n .u8(modalityTag(transaction.modality))\n .string(requireIdentifier(transaction.artifactId, \"pending.artifactId\"), MAX_ID_BYTES)\n .string(\n requireIdentifier(transaction.clientTransactionId, \"pending.clientTransactionId\"),\n MAX_ID_BYTES,\n )\n .string(requireSha256(transaction.requestHash, \"pending.requestHash\"), 71)\n .u32(positiveSafeInteger(transaction.protocolVersion, \"pending.protocolVersion\"))\n .u32(positiveSafeInteger(transaction.modelSchemaVersion, \"pending.modelSchemaVersion\"))\n .u32(positiveSafeInteger(transaction.commandVersion, \"pending.commandVersion\"))\n .string(requireReplicaId(transaction.replicaId, \"pending.replicaId\"), 16)\n .safeUint(positiveSafeInteger(transaction.replicaCounter, \"pending.replicaCounter\"))\n .optionalString(\n transaction.previousLocalTransactionId === null\n ? null\n : requireIdentifier(\n transaction.previousLocalTransactionId,\n \"pending.previousLocalTransactionId\",\n ),\n MAX_ID_BYTES,\n )\n .safeUint(\n nonNegativeSafeInteger(transaction.observedHeadSequence, \"pending.observedHeadSequence\"),\n );\n if (transaction.modality === \"spreadsheet\") {\n writer.frontier(transaction.causalBase).u32(transaction.selectiveUndoTargets.length);\n encodeSortedIdentifiers(\n writer,\n transaction.selectiveUndoTargets,\n \"pending.selectiveUndoTargets\",\n );\n } else {\n writer.safeUint(\n nonNegativeSafeInteger(transaction.observedNativeRevision, \"pending.observedNativeRevision\"),\n );\n }\n writer.safeUint(nonNegativeSafeInteger(transaction.createdAt, \"pending.createdAt\"));\n}\n\nfunction decodePendingFields(\n reader: ArtifactWorkerBinaryReader,\n commandBytes: Uint8Array,\n intentBytes: Uint8Array,\n): EditableArtifactPendingTransaction {\n const modality = decodeModality(reader.u8());\n const artifactId = requireIdentifier(reader.string(MAX_ID_BYTES), \"pending.artifactId\");\n const clientTransactionId = requireIdentifier(\n reader.string(MAX_ID_BYTES),\n \"pending.clientTransactionId\",\n );\n const requestHash = requireSha256(reader.string(71), \"pending.requestHash\");\n const protocolVersion = positiveSafeInteger(reader.u32(), \"pending.protocolVersion\");\n const modelSchemaVersion = positiveSafeInteger(reader.u32(), \"pending.modelSchemaVersion\");\n const commandVersion = positiveSafeInteger(reader.u32(), \"pending.commandVersion\");\n const replicaId = requireReplicaId(reader.string(16), \"pending.replicaId\");\n const replicaCounter = positiveSafeInteger(reader.safeUint(), \"pending.replicaCounter\");\n const previousLocalTransactionId = optionalIdentifier(\n reader.optionalString(MAX_ID_BYTES),\n \"pending.previousLocalTransactionId\",\n );\n const observedHeadSequence = nonNegativeSafeInteger(\n reader.safeUint(),\n \"pending.observedHeadSequence\",\n );\n const common = {\n artifactId,\n clientTransactionId,\n requestHash,\n protocolVersion,\n modelSchemaVersion,\n commandVersion,\n replicaId,\n replicaCounter,\n previousLocalTransactionId,\n observedHeadSequence,\n commandBytes,\n intentBytes,\n } as const;\n if (modality === \"spreadsheet\") {\n const causalBase = reader.frontier();\n const selectiveUndoTargets = decodeSortedIdentifiers(\n reader,\n reader.u32(),\n \"pending.selectiveUndoTargets\",\n );\n return Object.freeze({\n ...common,\n modality,\n causalBase,\n selectiveUndoTargets,\n createdAt: nonNegativeSafeInteger(reader.safeUint(), \"pending.createdAt\"),\n });\n }\n const observedNativeRevision = nonNegativeSafeInteger(\n reader.safeUint(),\n \"pending.observedNativeRevision\",\n );\n return Object.freeze({\n ...common,\n modality,\n observedNativeRevision,\n createdAt: nonNegativeSafeInteger(reader.safeUint(), \"pending.createdAt\"),\n });\n}\n\nfunction encodeAuthorPendingFields(\n writer: ArtifactWorkerBinaryWriter,\n input: ArtifactWorkerAuthorPendingInput,\n): void {\n writer\n .u8(modalityTag(input.modality))\n .u32(positiveSafeInteger(input.protocolVersion, \"author.protocolVersion\"))\n .string(requireVersion(input.kernelVersion, \"author.kernelVersion\"), MAX_VERSION_BYTES)\n .u32(positiveSafeInteger(input.modelSchemaVersion, \"author.modelSchemaVersion\"))\n .u32(positiveSafeInteger(input.commandVersion, \"author.commandVersion\"))\n .string(requireIdentifier(input.artifactId, \"author.artifactId\"), MAX_ID_BYTES)\n .string(\n requireIdentifier(input.clientTransactionId, \"author.clientTransactionId\"),\n MAX_ID_BYTES,\n )\n .string(requireReplicaId(input.replicaId, \"author.replicaId\"), 16)\n .safeUint(positiveSafeInteger(input.replicaCounter, \"author.replicaCounter\"))\n .optionalString(\n input.previousLocalTransactionId === null\n ? null\n : requireIdentifier(input.previousLocalTransactionId, \"author.previousLocalTransactionId\"),\n MAX_ID_BYTES,\n )\n .safeUint(nonNegativeSafeInteger(input.observedHeadSequence, \"author.observedHeadSequence\"));\n if (input.modality === \"spreadsheet\") {\n const causalBase = input.causalBase ?? [];\n const selectiveUndoTargets = input.selectiveUndoTargets ?? [];\n writer.frontier(causalBase).u32(selectiveUndoTargets.length);\n encodeSortedIdentifiers(writer, selectiveUndoTargets, \"author.selectiveUndoTargets\");\n }\n writer.safeUint(input.commandBytes.byteLength);\n writer.safeUint(nonNegativeSafeInteger(input.createdAt, \"author.createdAt\"));\n}\n\nfunction decodeAuthorPendingFields(\n reader: ArtifactWorkerBinaryReader,\n commandBytes: Uint8Array,\n): ArtifactWorkerAuthorPendingInput {\n const modality = decodeModality(reader.u8());\n const value: ArtifactWorkerAuthorPendingInput = {\n modality,\n protocolVersion: positiveSafeInteger(reader.u32(), \"author.protocolVersion\"),\n kernelVersion: requireVersion(reader.string(MAX_VERSION_BYTES), \"author.kernelVersion\"),\n modelSchemaVersion: positiveSafeInteger(reader.u32(), \"author.modelSchemaVersion\"),\n commandVersion: positiveSafeInteger(reader.u32(), \"author.commandVersion\"),\n artifactId: requireIdentifier(reader.string(MAX_ID_BYTES), \"author.artifactId\"),\n clientTransactionId: requireIdentifier(\n reader.string(MAX_ID_BYTES),\n \"author.clientTransactionId\",\n ),\n replicaId: requireReplicaId(reader.string(16), \"author.replicaId\"),\n replicaCounter: positiveSafeInteger(reader.safeUint(), \"author.replicaCounter\"),\n previousLocalTransactionId: optionalIdentifier(\n reader.optionalString(MAX_ID_BYTES),\n \"author.previousLocalTransactionId\",\n ),\n observedHeadSequence: nonNegativeSafeInteger(reader.safeUint(), \"author.observedHeadSequence\"),\n ...(modality === \"spreadsheet\"\n ? {\n causalBase: reader.frontier(),\n selectiveUndoTargets: decodeSortedIdentifiers(\n reader,\n reader.u32(),\n \"author.selectiveUndoTargets\",\n ),\n }\n : {}),\n commandBytes,\n createdAt: 0,\n };\n const declaredCommandBytes = reader.safeUint();\n if (declaredCommandBytes !== commandBytes.byteLength) {\n throw wireError(\"invalid_segment\", \"author command length does not match its segment\");\n }\n value.createdAt = nonNegativeSafeInteger(reader.safeUint(), \"author.createdAt\");\n return Object.freeze(value);\n}\n\nfunction requireUrl(value: string, label: string): string {\n const bounded = requireBoundedString(value, label, MAX_URL_BYTES);\n let url: URL;\n try {\n url = new URL(bounded);\n } catch (error) {\n throw wireError(\"invalid_url\", `${label} must be an absolute URL`, error);\n }\n if (!new Set([\"https:\", \"http:\", \"file:\"]).has(url.protocol)) {\n throw wireError(\"invalid_url\", `${label} uses an unsupported URL scheme`);\n }\n if (url.username || url.password || url.hash) {\n throw wireError(\"invalid_url\", `${label} must not contain credentials or a fragment`);\n }\n url.username = \"\";\n url.password = \"\";\n if (url.href !== bounded) {\n throw wireError(\"noncanonical\", `${label} must be a canonical URL without credentials`);\n }\n return bounded;\n}\n\nfunction requireIdentifier(value: string, label: string): string {\n const bounded = requireBoundedString(value, label, MAX_ID_BYTES);\n if (/\\p{Cc}/u.test(bounded))\n throw wireError(\"invalid_identifier\", `${label} contains control characters`);\n return bounded;\n}\n\nfunction requireVersion(value: string, label: string): string {\n const bounded = requireBoundedString(value, label, MAX_VERSION_BYTES);\n if (/\\p{Cc}/u.test(bounded))\n throw wireError(\"invalid_identifier\", `${label} contains control characters`);\n return bounded;\n}\n\nfunction optionalIdentifier(value: string | null, label: string): string | null {\n return value === null ? null : requireIdentifier(value, label);\n}\n\nfunction requireReplicaId(value: string, label: string): string {\n if (!/^(?!0{16}$)[0-9a-f]{16}$/.test(value)) {\n throw wireError(\n \"invalid_identifier\",\n `${label} must be 16 lowercase nonzero hexadecimal digits`,\n );\n }\n return value;\n}\n\nfunction requireSha256(value: string, label: string): string {\n if (!SHA256_PATTERN.test(value))\n throw wireError(\"invalid_hash\", `${label} must be 64 lowercase hex characters`);\n return value;\n}\n\nfunction requireErrorCode(value: string): string {\n if (!/^[a-z][a-z0-9_]{0,127}$/.test(value))\n throw wireError(\"invalid_error\", \"invalid worker error code\");\n return value;\n}\n\nfunction requireBoundedString(value: string, label: string, maximumBytes: number): string {\n if (typeof value !== \"string\" || value.length === 0)\n throw wireError(\"invalid_string\", `${label} is empty`);\n if (new TextEncoder().encode(value).byteLength > maximumBytes) {\n throw wireError(\"string_too_large\", `${label} exceeds its byte limit`);\n }\n return value;\n}\n\nfunction positiveSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value <= 0)\n throw wireError(\"invalid_number\", `${label} must be positive`);\n return value;\n}\n\nfunction nonNegativeSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw wireError(\"invalid_number\", `${label} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction decodeBoolean(value: number, label: string): boolean {\n if (value === 0) return false;\n if (value === 1) return true;\n throw wireError(\"noncanonical\", `${label} has an invalid boolean tag`);\n}\n\nfunction encodeSortedIdentifiers(\n writer: ArtifactWorkerBinaryWriter,\n values: readonly string[],\n label: string,\n): void {\n if (!Array.isArray(values) || values.length > 10_000) {\n throw wireError(\"invalid_identifiers\", `${label} exceeds its item limit`);\n }\n let previous = \"\";\n for (let index = 0; index < values.length; index += 1) {\n const value = requireIdentifier(values[index]!, `${label}[${index}]`);\n if (index > 0 && previous >= value) {\n throw wireError(\"noncanonical\", `${label} must be unique and code-unit sorted`);\n }\n writer.string(value, MAX_ID_BYTES);\n previous = value;\n }\n}\n\nfunction decodeSortedIdentifiers(\n reader: ArtifactWorkerBinaryReader,\n count: number,\n label: string,\n): readonly string[] {\n if (count > 10_000) throw wireError(\"invalid_identifiers\", `${label} exceeds its item limit`);\n const values: string[] = [];\n let previous = \"\";\n for (let index = 0; index < count; index += 1) {\n const value = requireIdentifier(reader.string(MAX_ID_BYTES), `${label}[${index}]`);\n if (index > 0 && previous >= value) {\n throw wireError(\"noncanonical\", `${label} must be unique and code-unit sorted`);\n }\n values.push(value);\n previous = value;\n }\n return Object.freeze(values);\n}\n\nfunction wireError(code: string, message: string, cause?: unknown): ArtifactWorkerProtocolError {\n return new ArtifactWorkerProtocolError(\n code,\n message,\n cause === undefined ? undefined : { cause },\n );\n}\n\nfunction validateInitializeLimits(input: ArtifactWorkerInitializeInput): void {\n requireVersion(input.kernelVersion, \"kernelVersion\");\n for (const [value, label] of [\n [input.protocolVersion, \"protocolVersion\"],\n [input.modelSchemaVersion, \"modelSchemaVersion\"],\n [input.commandVersion, \"commandVersion\"],\n ] as const) {\n positiveSafeInteger(value, label);\n if (value > 65_535) throw wireError(\"invalid_version\", `${label} exceeds uint16`);\n }\n const limits = [\n [input.maximumSnapshotBytes, HARD_MAX_SNAPSHOT_BYTES, \"maximumSnapshotBytes\"],\n [input.maximumCommandBytes, HARD_MAX_COMMAND_BYTES, \"maximumCommandBytes\"],\n [input.maximumIntentBytes, HARD_MAX_INTENT_BYTES, \"maximumIntentBytes\"],\n [\n input.maximumCommittedTransactionBytes,\n HARD_MAX_COMMITTED_TRANSACTION_BYTES,\n \"maximumCommittedTransactionBytes\",\n ],\n [input.maximumQueryBytes, HARD_MAX_QUERY_BYTES, \"maximumQueryBytes\"],\n [input.maximumQueryResponseBytes, HARD_MAX_QUERY_RESPONSE_BYTES, \"maximumQueryResponseBytes\"],\n [input.maximumPendingTransactions, HARD_MAX_PENDING_TRANSACTIONS, \"maximumPendingTransactions\"],\n ] as const;\n for (const [value, maximum, label] of limits) {\n positiveSafeInteger(value, label);\n if (value > maximum)\n throw wireError(\"invalid_limit\", `${label} exceeds the hard safety ceiling`);\n }\n}\n"],"mappings":"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","names":["positiveSafeInteger","nonNegativeSafeInteger"]}
|