From 19f689797bb60b6bed61181142b9045154c76e4e Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 11:31:37 +0300 Subject: [PATCH 01/78] feat: add RuntimeClient, RuntimeProvider, and ConnectRPC proto gen (Phase 1) Introduce the foundation for replacing the global mutable `runtime` store with scoped Svelte context. - Generate ConnectRPC TypeScript service descriptors for RuntimeService, QueryService, and ConnectorService via buf (new buf.gen.runtime.yaml) - Add RuntimeClient class that encapsulates transport, JWT lifecycle, and lazy service client creation - Add RuntimeProvider component that creates a RuntimeClient, sets it in Svelte context, and bridges to the global store for unmigrated consumers - Add useRuntimeClient() context helper - Wire RuntimeProvider into web-admin project layout with {#key} on host::instanceId for correct re-mounting on project navigation - Wire RuntimeProvider into web-local root layout - Extract JWT expiry constants to shared constants.ts --- Makefile | 1 + proto/buf.gen.runtime.yaml | 16 + .../[organization]/[project]/+layout.svelte | 42 +- .../proto/gen/rill/runtime/v1/api_connect.ts | 610 ++++++++++++++++++ .../gen/rill/runtime/v1/connectors_connect.ts | 94 +++ .../gen/rill/runtime/v1/queries_connect.ts | 405 ++++++++++++ web-common/src/runtime-client/constants.ts | 6 + web-common/src/runtime-client/http-client.ts | 9 +- .../runtime-client/v2/RuntimeProvider.svelte | 37 ++ web-common/src/runtime-client/v2/context.ts | 19 + web-common/src/runtime-client/v2/index.ts | 2 + .../src/runtime-client/v2/runtime-client.ts | 115 ++++ web-local/src/routes/+layout.svelte | 29 +- 13 files changed, 1353 insertions(+), 32 deletions(-) create mode 100644 proto/buf.gen.runtime.yaml create mode 100644 web-common/src/proto/gen/rill/runtime/v1/api_connect.ts create mode 100644 web-common/src/proto/gen/rill/runtime/v1/connectors_connect.ts create mode 100644 web-common/src/proto/gen/rill/runtime/v1/queries_connect.ts create mode 100644 web-common/src/runtime-client/v2/RuntimeProvider.svelte create mode 100644 web-common/src/runtime-client/v2/context.ts create mode 100644 web-common/src/runtime-client/v2/index.ts create mode 100644 web-common/src/runtime-client/v2/runtime-client.ts diff --git a/Makefile b/Makefile index d268f0d5e34..0e046eba401 100644 --- a/Makefile +++ b/Makefile @@ -56,6 +56,7 @@ proto.generate: cd proto && buf generate --exclude-path rill/ui cd proto && buf generate --template buf.gen.openapi-admin.yaml --path rill/admin cd proto && buf generate --template buf.gen.openapi-runtime.yaml --path rill/runtime + cd proto && buf generate --template buf.gen.runtime.yaml --path rill/runtime cd proto && buf generate --template buf.gen.local.yaml --path rill/local cd proto && buf generate --template buf.gen.ui.yaml go run -ldflags="-X main.Version=$(shell git describe --tags $(shell git rev-list --tags --max-count=1))" \ diff --git a/proto/buf.gen.runtime.yaml b/proto/buf.gen.runtime.yaml new file mode 100644 index 00000000000..fe6bc5ba89b --- /dev/null +++ b/proto/buf.gen.runtime.yaml @@ -0,0 +1,16 @@ +version: v2 +managed: + enabled: true + override: + - file_option: go_package_prefix + value: github.com/rilldata/rill/proto/gen + disable: + - module: buf.build/googleapis/googleapis + file_option: go_package_prefix + - module: buf.build/envoyproxy/protoc-gen-validate + file_option: go_package_prefix +plugins: + - remote: buf.build/connectrpc/es:v1.4.0 + out: ../web-common/src/proto/gen + opt: + - target=ts diff --git a/web-admin/src/routes/[organization]/[project]/+layout.svelte b/web-admin/src/routes/[organization]/[project]/+layout.svelte index c983cb6b533..46f07e16c6e 100644 --- a/web-admin/src/routes/[organization]/[project]/+layout.svelte +++ b/web-admin/src/routes/[organization]/[project]/+layout.svelte @@ -51,10 +51,10 @@ import { viewAsUserStore } from "@rilldata/web-admin/features/view-as-user/viewAsUserStore"; import ErrorPage from "@rilldata/web-common/components/ErrorPage.svelte"; import { metricsService } from "@rilldata/web-common/metrics/initMetrics"; - import RuntimeProvider from "@rilldata/web-common/runtime-client/RuntimeProvider.svelte"; + import RuntimeProvider from "@rilldata/web-common/runtime-client/v2/RuntimeProvider.svelte"; import { RUNTIME_ACCESS_TOKEN_DEFAULT_TTL } from "@rilldata/web-common/runtime-client/constants"; import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; - import type { AuthContext } from "@rilldata/web-common/runtime-client/runtime-store"; + import type { AuthContext } from "@rilldata/web-common/runtime-client/v2/runtime-client"; import type { CreateQueryOptions } from "@tanstack/svelte-query"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { getRuntimeServiceListResourcesQueryKey } from "@rilldata/web-common/runtime-client"; @@ -205,6 +205,20 @@ : "user" ) as AuthContext; + // Derive effective runtime connection props + $: effectiveHost = + mockedUserId && mockedUserDeploymentCredentials + ? mockedUserDeploymentCredentials.runtimeHost + : projectData?.deployment?.runtimeHost; + $: effectiveInstanceId = + mockedUserId && mockedUserDeploymentCredentials + ? mockedUserDeploymentCredentials.instanceId + : projectData?.deployment?.runtimeInstanceId; + $: effectiveJwt = + mockedUserId && mockedUserDeploymentCredentials + ? mockedUserDeploymentCredentials.accessToken + : projectData?.jwt; + // Load telemetry client with relevant context $: if (project && $user.data?.user?.id) { metricsService?.loadCloudFields({ @@ -247,19 +261,15 @@ : "There was an error deploying your project. Please contact support."} /> {:else if isProjectAvailable} - - - + {#key `${effectiveHost}::${effectiveInstanceId}`} + + + + {/key} {/if} {/if} diff --git a/web-common/src/proto/gen/rill/runtime/v1/api_connect.ts b/web-common/src/proto/gen/rill/runtime/v1/api_connect.ts new file mode 100644 index 00000000000..204bcbbd6f9 --- /dev/null +++ b/web-common/src/proto/gen/rill/runtime/v1/api_connect.ts @@ -0,0 +1,610 @@ +// @generated by protoc-gen-connect-es v1.4.0 with parameter "target=ts" +// @generated from file rill/runtime/v1/api.proto (package rill.runtime.v1, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import { AnalyzeConnectorsRequest, AnalyzeConnectorsResponse, AnalyzeVariablesRequest, AnalyzeVariablesResponse, CompleteRequest, CompleteResponse, CompleteStreamingRequest, CompleteStreamingResponse, CreateDirectoryRequest, CreateDirectoryResponse, CreateInstanceRequest, CreateInstanceResponse, CreateTriggerRequest, CreateTriggerResponse, DeleteFileRequest, DeleteFileResponse, DeleteInstanceRequest, DeleteInstanceResponse, EditInstanceRequest, EditInstanceResponse, ForkConversationRequest, ForkConversationResponse, GenerateCanvasFileRequest, GenerateCanvasFileResponse, GenerateMetricsViewFileRequest, GenerateMetricsViewFileResponse, GenerateRendererRequest, GenerateRendererResponse, GenerateResolverRequest, GenerateResolverResponse, GetConversationRequest, GetConversationResponse, GetExploreRequest, GetExploreResponse, GetFileRequest, GetFileResponse, GetInstanceRequest, GetInstanceResponse, GetLogsRequest, GetLogsResponse, GetModelPartitionsRequest, GetModelPartitionsResponse, GetResourceRequest, GetResourceResponse, GitCommitRequest, GitCommitResponse, GitMergeToBranchRequest, GitMergeToBranchResponse, GitPullRequest, GitPullResponse, GitPushRequest, GitPushResponse, GitStatusRequest, GitStatusResponse, GitSwitchBranchRequest, GitSwitchBranchResponse, HealthRequest, HealthResponse, InstanceHealthRequest, InstanceHealthResponse, IssueDevJWTRequest, IssueDevJWTResponse, ListConnectorDriversRequest, ListConnectorDriversResponse, ListConversationsRequest, ListConversationsResponse, ListExamplesRequest, ListExamplesResponse, ListFilesRequest, ListFilesResponse, ListGitBranchesRequest, ListGitBranchesResponse, ListGitCommitsRequest, ListGitCommitsResponse, ListInstancesRequest, ListInstancesResponse, ListNotifierConnectorsRequest, ListNotifierConnectorsResponse, ListResourcesRequest, ListResourcesResponse, ListToolsRequest, ListToolsResponse, PingRequest, PingResponse, PutFileRequest, PutFileResponse, QueryResolverRequest, QueryResolverResponse, ReloadConfigRequest, ReloadConfigResponse, RenameFileRequest, RenameFileResponse, RestoreGitCommitRequest, RestoreGitCommitResponse, ShareConversationRequest, ShareConversationResponse, UnpackEmptyRequest, UnpackEmptyResponse, UnpackExampleRequest, UnpackExampleResponse, WatchFilesRequest, WatchFilesResponse, WatchLogsRequest, WatchLogsResponse, WatchResourcesRequest, WatchResourcesResponse } from "./api_pb.js"; +import { MethodKind } from "@bufbuild/protobuf"; + +/** + * RuntimeService is a data infrastructure proxy and orchestrator based on Rill SQL. + * It has a concept of instances, which are fully isolated data projects, enabling optional multi-tenancy. + * + * @generated from service rill.runtime.v1.RuntimeService + */ +export const RuntimeService = { + typeName: "rill.runtime.v1.RuntimeService", + methods: { + /** + * Ping returns information about the runtime + * + * @generated from rpc rill.runtime.v1.RuntimeService.Ping + */ + ping: { + name: "Ping", + I: PingRequest, + O: PingResponse, + kind: MethodKind.Unary, + }, + /** + * Health runs a health check on the runtime. + * + * @generated from rpc rill.runtime.v1.RuntimeService.Health + */ + health: { + name: "Health", + I: HealthRequest, + O: HealthResponse, + kind: MethodKind.Unary, + }, + /** + * InstanceHealth runs a health check on a specific instance. + * + * @generated from rpc rill.runtime.v1.RuntimeService.InstanceHealth + */ + instanceHealth: { + name: "InstanceHealth", + I: InstanceHealthRequest, + O: InstanceHealthResponse, + kind: MethodKind.Unary, + }, + /** + * ListInstances lists all the instances currently managed by the runtime + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListInstances + */ + listInstances: { + name: "ListInstances", + I: ListInstancesRequest, + O: ListInstancesResponse, + kind: MethodKind.Unary, + }, + /** + * GetInstance returns information about a specific instance + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetInstance + */ + getInstance: { + name: "GetInstance", + I: GetInstanceRequest, + O: GetInstanceResponse, + kind: MethodKind.Unary, + }, + /** + * CreateInstance creates a new instance + * + * @generated from rpc rill.runtime.v1.RuntimeService.CreateInstance + */ + createInstance: { + name: "CreateInstance", + I: CreateInstanceRequest, + O: CreateInstanceResponse, + kind: MethodKind.Unary, + }, + /** + * EditInstance edits an existing instance + * + * @generated from rpc rill.runtime.v1.RuntimeService.EditInstance + */ + editInstance: { + name: "EditInstance", + I: EditInstanceRequest, + O: EditInstanceResponse, + kind: MethodKind.Unary, + }, + /** + * DeleteInstance deletes an instance + * + * @generated from rpc rill.runtime.v1.RuntimeService.DeleteInstance + */ + deleteInstance: { + name: "DeleteInstance", + I: DeleteInstanceRequest, + O: DeleteInstanceResponse, + kind: MethodKind.Unary, + }, + /** + * ReloadConfig pulls the latest configuration from the admin service and triggers a repo pull. + * If the instance doesn't have an admin connector, this RPC does nothing. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ReloadConfig + */ + reloadConfig: { + name: "ReloadConfig", + I: ReloadConfigRequest, + O: ReloadConfigResponse, + kind: MethodKind.Unary, + }, + /** + * ListFiles lists all the files matching a glob in a repo. + * The files are sorted by their full path. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListFiles + */ + listFiles: { + name: "ListFiles", + I: ListFilesRequest, + O: ListFilesResponse, + kind: MethodKind.Unary, + }, + /** + * WatchFiles streams repo file update events. It is not supported on all backends. + * + * @generated from rpc rill.runtime.v1.RuntimeService.WatchFiles + */ + watchFiles: { + name: "WatchFiles", + I: WatchFilesRequest, + O: WatchFilesResponse, + kind: MethodKind.ServerStreaming, + }, + /** + * GetFile returns the contents of a specific file in a repo. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetFile + */ + getFile: { + name: "GetFile", + I: GetFileRequest, + O: GetFileResponse, + kind: MethodKind.Unary, + }, + /** + * PutFile creates or updates a file in a repo + * + * @generated from rpc rill.runtime.v1.RuntimeService.PutFile + */ + putFile: { + name: "PutFile", + I: PutFileRequest, + O: PutFileResponse, + kind: MethodKind.Unary, + }, + /** + * CreateDirectory create a directory for the given path + * + * @generated from rpc rill.runtime.v1.RuntimeService.CreateDirectory + */ + createDirectory: { + name: "CreateDirectory", + I: CreateDirectoryRequest, + O: CreateDirectoryResponse, + kind: MethodKind.Unary, + }, + /** + * DeleteFile deletes a file from a repo + * + * @generated from rpc rill.runtime.v1.RuntimeService.DeleteFile + */ + deleteFile: { + name: "DeleteFile", + I: DeleteFileRequest, + O: DeleteFileResponse, + kind: MethodKind.Unary, + }, + /** + * RenameFile renames a file in a repo + * + * @generated from rpc rill.runtime.v1.RuntimeService.RenameFile + */ + renameFile: { + name: "RenameFile", + I: RenameFileRequest, + O: RenameFileResponse, + kind: MethodKind.Unary, + }, + /** + * ListExamples lists all the examples embedded into binary + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListExamples + */ + listExamples: { + name: "ListExamples", + I: ListExamplesRequest, + O: ListExamplesResponse, + kind: MethodKind.Unary, + }, + /** + * UnpackExample unpacks an example project + * + * @generated from rpc rill.runtime.v1.RuntimeService.UnpackExample + */ + unpackExample: { + name: "UnpackExample", + I: UnpackExampleRequest, + O: UnpackExampleResponse, + kind: MethodKind.Unary, + }, + /** + * UnpackEmpty unpacks an empty project + * + * @generated from rpc rill.runtime.v1.RuntimeService.UnpackEmpty + */ + unpackEmpty: { + name: "UnpackEmpty", + I: UnpackEmptyRequest, + O: UnpackEmptyResponse, + kind: MethodKind.Unary, + }, + /** + * GenerateMetricsViewFile generates a metrics view YAML file from a table in an OLAP database + * + * @generated from rpc rill.runtime.v1.RuntimeService.GenerateMetricsViewFile + */ + generateMetricsViewFile: { + name: "GenerateMetricsViewFile", + I: GenerateMetricsViewFileRequest, + O: GenerateMetricsViewFileResponse, + kind: MethodKind.Unary, + }, + /** + * GenerateCanvasFile generates a canvas YAML file from a metrics view + * + * @generated from rpc rill.runtime.v1.RuntimeService.GenerateCanvasFile + */ + generateCanvasFile: { + name: "GenerateCanvasFile", + I: GenerateCanvasFileRequest, + O: GenerateCanvasFileResponse, + kind: MethodKind.Unary, + }, + /** + * GenerateResolver generates resolver and resolver properties from a table or a metrics view + * + * @generated from rpc rill.runtime.v1.RuntimeService.GenerateResolver + */ + generateResolver: { + name: "GenerateResolver", + I: GenerateResolverRequest, + O: GenerateResolverResponse, + kind: MethodKind.Unary, + }, + /** + * GenerateRenderer generates a component renderer and renderer properties from a resolver and resolver properties + * + * @generated from rpc rill.runtime.v1.RuntimeService.GenerateRenderer + */ + generateRenderer: { + name: "GenerateRenderer", + I: GenerateRendererRequest, + O: GenerateRendererResponse, + kind: MethodKind.Unary, + }, + /** + * QueryResolver queries a resolver with the given properties and arguments + * + * @generated from rpc rill.runtime.v1.RuntimeService.QueryResolver + */ + queryResolver: { + name: "QueryResolver", + I: QueryResolverRequest, + O: QueryResolverResponse, + kind: MethodKind.Unary, + }, + /** + * GetLogs returns recent logs from a controller + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetLogs + */ + getLogs: { + name: "GetLogs", + I: GetLogsRequest, + O: GetLogsResponse, + kind: MethodKind.Unary, + }, + /** + * WatchLogs streams new logs emitted from a controller + * + * @generated from rpc rill.runtime.v1.RuntimeService.WatchLogs + */ + watchLogs: { + name: "WatchLogs", + I: WatchLogsRequest, + O: WatchLogsResponse, + kind: MethodKind.ServerStreaming, + }, + /** + * ListResources lists the resources stored in the catalog + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListResources + */ + listResources: { + name: "ListResources", + I: ListResourcesRequest, + O: ListResourcesResponse, + kind: MethodKind.Unary, + }, + /** + * WatchResources streams updates to catalog resources (including creation and deletion events) + * + * @generated from rpc rill.runtime.v1.RuntimeService.WatchResources + */ + watchResources: { + name: "WatchResources", + I: WatchResourcesRequest, + O: WatchResourcesResponse, + kind: MethodKind.ServerStreaming, + }, + /** + * GetResource looks up a specific catalog resource + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetResource + */ + getResource: { + name: "GetResource", + I: GetResourceRequest, + O: GetResourceResponse, + kind: MethodKind.Unary, + }, + /** + * GetExplore is a convenience RPC that combines looking up an Explore resource and its underlying MetricsView into one network call. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetExplore + */ + getExplore: { + name: "GetExplore", + I: GetExploreRequest, + O: GetExploreResponse, + kind: MethodKind.Unary, + }, + /** + * GetModelPartitions returns the partitions of a model + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetModelPartitions + */ + getModelPartitions: { + name: "GetModelPartitions", + I: GetModelPartitionsRequest, + O: GetModelPartitionsResponse, + kind: MethodKind.Unary, + }, + /** + * CreateTrigger submits a refresh trigger, which will asynchronously refresh the specified resources. + * Triggers are ephemeral resources that will be cleaned up by the controller. + * + * @generated from rpc rill.runtime.v1.RuntimeService.CreateTrigger + */ + createTrigger: { + name: "CreateTrigger", + I: CreateTriggerRequest, + O: CreateTriggerResponse, + kind: MethodKind.Unary, + }, + /** + * ListConnectorDrivers returns a description of all the connector drivers registed in the runtime, + * including their configuration specs and the capabilities they support. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListConnectorDrivers + */ + listConnectorDrivers: { + name: "ListConnectorDrivers", + I: ListConnectorDriversRequest, + O: ListConnectorDriversResponse, + kind: MethodKind.Unary, + }, + /** + * AnalyzeConnectors scans all the project files and returns information about all referenced connectors. + * + * @generated from rpc rill.runtime.v1.RuntimeService.AnalyzeConnectors + */ + analyzeConnectors: { + name: "AnalyzeConnectors", + I: AnalyzeConnectorsRequest, + O: AnalyzeConnectorsResponse, + kind: MethodKind.Unary, + }, + /** + * ListNotifierConnectors returns the names of all configured connectors that can be used as notifiers. + * This API is much faster than AnalyzeConnectors and can be called without admin-level permissions. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListNotifierConnectors + */ + listNotifierConnectors: { + name: "ListNotifierConnectors", + I: ListNotifierConnectorsRequest, + O: ListNotifierConnectorsResponse, + kind: MethodKind.Unary, + }, + /** + * ListConversations lists all AI chat conversations for an instance. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListConversations + */ + listConversations: { + name: "ListConversations", + I: ListConversationsRequest, + O: ListConversationsResponse, + kind: MethodKind.Unary, + }, + /** + * GetConversation returns a specific AI chat conversation. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GetConversation + */ + getConversation: { + name: "GetConversation", + I: GetConversationRequest, + O: GetConversationResponse, + kind: MethodKind.Unary, + }, + /** + * ShareConversation enables sharing of the conversation by adding metadata. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ShareConversation + */ + shareConversation: { + name: "ShareConversation", + I: ShareConversationRequest, + O: ShareConversationResponse, + kind: MethodKind.Unary, + }, + /** + * ForkConversation creates a new conversation by copying messages from an existing one. + * If its the owner then all messages will be copied, otherwise only messages up to the session.SharedUntilMessageID are copied. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ForkConversation + */ + forkConversation: { + name: "ForkConversation", + I: ForkConversationRequest, + O: ForkConversationResponse, + kind: MethodKind.Unary, + }, + /** + * ListTools lists metadata about all AI tools that calls to Complete(Streaming) may invoke. + * Note that it covers all registered tools, but the current user may not have access to all of them. + * + * @generated from rpc rill.runtime.v1.RuntimeService.ListTools + */ + listTools: { + name: "ListTools", + I: ListToolsRequest, + O: ListToolsResponse, + kind: MethodKind.Unary, + }, + /** + * Complete runs a language model completion (LLM chat) using the configured AI connector. + * + * @generated from rpc rill.runtime.v1.RuntimeService.Complete + */ + complete: { + name: "Complete", + I: CompleteRequest, + O: CompleteResponse, + kind: MethodKind.Unary, + }, + /** + * CompleteStreaming runs an AI-powered chat completion, optionally invoking agents or tool calls available in Rill. + * + * @generated from rpc rill.runtime.v1.RuntimeService.CompleteStreaming + */ + completeStreaming: { + name: "CompleteStreaming", + I: CompleteStreamingRequest, + O: CompleteStreamingResponse, + kind: MethodKind.ServerStreaming, + }, + /** + * IssueDevJWT issues a JWT for mimicking a user in local development. + * + * @generated from rpc rill.runtime.v1.RuntimeService.IssueDevJWT + */ + issueDevJWT: { + name: "IssueDevJWT", + I: IssueDevJWTRequest, + O: IssueDevJWTResponse, + kind: MethodKind.Unary, + }, + /** + * AnalyzeVariables scans `Source`, `Model` and `Connector` resources in the catalog for use of an environment variable + * + * @generated from rpc rill.runtime.v1.RuntimeService.AnalyzeVariables + */ + analyzeVariables: { + name: "AnalyzeVariables", + I: AnalyzeVariablesRequest, + O: AnalyzeVariablesResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc rill.runtime.v1.RuntimeService.ListGitCommits + */ + listGitCommits: { + name: "ListGitCommits", + I: ListGitCommitsRequest, + O: ListGitCommitsResponse, + kind: MethodKind.Unary, + }, + /** + * GitStatus returns the current status of the local git repo. This is equivalent to doing a `git fetch` followed by running `git status`. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GitStatus + */ + gitStatus: { + name: "GitStatus", + I: GitStatusRequest, + O: GitStatusResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc rill.runtime.v1.RuntimeService.ListGitBranches + */ + listGitBranches: { + name: "ListGitBranches", + I: ListGitBranchesRequest, + O: ListGitBranchesResponse, + kind: MethodKind.Unary, + }, + /** + * GitCommit commits the local changes to the git repo equivalent to `git commit -am ` command. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GitCommit + */ + gitCommit: { + name: "GitCommit", + I: GitCommitRequest, + O: GitCommitResponse, + kind: MethodKind.Unary, + }, + /** + * RestoreGitCommit creates a new commit that restores the state of the repo to the specified commit SHA. + * This effectively discards all the changes made after the specified commit. + * + * @generated from rpc rill.runtime.v1.RuntimeService.RestoreGitCommit + */ + restoreGitCommit: { + name: "RestoreGitCommit", + I: RestoreGitCommitRequest, + O: RestoreGitCommitResponse, + kind: MethodKind.Unary, + }, + /** + * GitMergeToBranch merges current branch to the specified branch. + * Note: this is not the same as `git merge `, but rather `git checkout ` followed by `git merge `. + * It restores back to the original branch after the merge. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GitMergeToBranch + */ + gitMergeToBranch: { + name: "GitMergeToBranch", + I: GitMergeToBranchRequest, + O: GitMergeToBranchResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc rill.runtime.v1.RuntimeService.GitSwitchBranch + */ + gitSwitchBranch: { + name: "GitSwitchBranch", + I: GitSwitchBranchRequest, + O: GitSwitchBranchResponse, + kind: MethodKind.Unary, + }, + /** + * GitPull fetches the latest changes from the remote git repo equivalent to `git pull` command. + * If there are any merge conflicts the pull is aborted. + * Force can be set to true to force the pull and overwrite any local changes. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GitPull + */ + gitPull: { + name: "GitPull", + I: GitPullRequest, + O: GitPullResponse, + kind: MethodKind.Unary, + }, + /** + * GitPush pushes the local changes to the remote git repo equivalent to `git push` command. + * It only pushes the changes to the existing remote repo. + * + * @generated from rpc rill.runtime.v1.RuntimeService.GitPush + */ + gitPush: { + name: "GitPush", + I: GitPushRequest, + O: GitPushResponse, + kind: MethodKind.Unary, + }, + } +} as const; + diff --git a/web-common/src/proto/gen/rill/runtime/v1/connectors_connect.ts b/web-common/src/proto/gen/rill/runtime/v1/connectors_connect.ts new file mode 100644 index 00000000000..ba9bcec6e68 --- /dev/null +++ b/web-common/src/proto/gen/rill/runtime/v1/connectors_connect.ts @@ -0,0 +1,94 @@ +// @generated by protoc-gen-connect-es v1.4.0 with parameter "target=ts" +// @generated from file rill/runtime/v1/connectors.proto (package rill.runtime.v1, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import { GetTableRequest, GetTableResponse, ListBucketsRequest, ListBucketsResponse, ListDatabaseSchemasRequest, ListDatabaseSchemasResponse, ListObjectsRequest, ListObjectsResponse, ListTablesRequest, ListTablesResponse, OLAPGetTableRequest, OLAPGetTableResponse, OLAPListTablesRequest, OLAPListTablesResponse } from "./connectors_pb.js"; +import { MethodKind } from "@bufbuild/protobuf"; + +/** + * @generated from service rill.runtime.v1.ConnectorService + */ +export const ConnectorService = { + typeName: "rill.runtime.v1.ConnectorService", + methods: { + /** + * ListBuckets lists buckets accessible with the configured credentials. + * + * @generated from rpc rill.runtime.v1.ConnectorService.ListBuckets + */ + listBuckets: { + name: "ListBuckets", + I: ListBucketsRequest, + O: ListBucketsResponse, + kind: MethodKind.Unary, + }, + /** + * ListObjects lists objects for the given bucket. + * + * @generated from rpc rill.runtime.v1.ConnectorService.ListObjects + */ + listObjects: { + name: "ListObjects", + I: ListObjectsRequest, + O: ListObjectsResponse, + kind: MethodKind.Unary, + }, + /** + * OLAPListTables list all tables across all databases in an OLAP + * + * @generated from rpc rill.runtime.v1.ConnectorService.OLAPListTables + */ + oLAPListTables: { + name: "OLAPListTables", + I: OLAPListTablesRequest, + O: OLAPListTablesResponse, + kind: MethodKind.Unary, + }, + /** + * OLAPGetTable returns metadata about a table or view in an OLAP + * + * @generated from rpc rill.runtime.v1.ConnectorService.OLAPGetTable + */ + oLAPGetTable: { + name: "OLAPGetTable", + I: OLAPGetTableRequest, + O: OLAPGetTableResponse, + kind: MethodKind.Unary, + }, + /** + * ListDatabaseSchemas list all schemas across databases + * + * @generated from rpc rill.runtime.v1.ConnectorService.ListDatabaseSchemas + */ + listDatabaseSchemas: { + name: "ListDatabaseSchemas", + I: ListDatabaseSchemasRequest, + O: ListDatabaseSchemasResponse, + kind: MethodKind.Unary, + }, + /** + * ListTables list all tables for database and database_schema provided + * + * @generated from rpc rill.runtime.v1.ConnectorService.ListTables + */ + listTables: { + name: "ListTables", + I: ListTablesRequest, + O: ListTablesResponse, + kind: MethodKind.Unary, + }, + /** + * GetTable returns metadata about a table or view + * + * @generated from rpc rill.runtime.v1.ConnectorService.GetTable + */ + getTable: { + name: "GetTable", + I: GetTableRequest, + O: GetTableResponse, + kind: MethodKind.Unary, + }, + } +} as const; + diff --git a/web-common/src/proto/gen/rill/runtime/v1/queries_connect.ts b/web-common/src/proto/gen/rill/runtime/v1/queries_connect.ts new file mode 100644 index 00000000000..1c68c818d99 --- /dev/null +++ b/web-common/src/proto/gen/rill/runtime/v1/queries_connect.ts @@ -0,0 +1,405 @@ +// @generated by protoc-gen-connect-es v1.4.0 with parameter "target=ts" +// @generated from file rill/runtime/v1/queries.proto (package rill.runtime.v1, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import { ColumnCardinalityRequest, ColumnCardinalityResponse, ColumnDescriptiveStatisticsRequest, ColumnDescriptiveStatisticsResponse, ColumnNullCountRequest, ColumnNullCountResponse, ColumnNumericHistogramRequest, ColumnNumericHistogramResponse, ColumnRollupIntervalRequest, ColumnRollupIntervalResponse, ColumnRugHistogramRequest, ColumnRugHistogramResponse, ColumnTimeGrainRequest, ColumnTimeGrainResponse, ColumnTimeRangeRequest, ColumnTimeRangeResponse, ColumnTimeSeriesRequest, ColumnTimeSeriesResponse, ColumnTopKRequest, ColumnTopKResponse, ConvertExpressionToMetricsSQLRequest, ConvertExpressionToMetricsSQLResponse, ExportReportRequest, ExportReportResponse, ExportRequest, ExportResponse, MetricsViewAggregationRequest, MetricsViewAggregationResponse, MetricsViewAnnotationsRequest, MetricsViewAnnotationsResponse, MetricsViewComparisonRequest, MetricsViewComparisonResponse, MetricsViewRowsRequest, MetricsViewRowsResponse, MetricsViewSchemaRequest, MetricsViewSchemaResponse, MetricsViewSearchRequest, MetricsViewSearchResponse, MetricsViewTimeRangeRequest, MetricsViewTimeRangeResponse, MetricsViewTimeRangesRequest, MetricsViewTimeRangesResponse, MetricsViewTimeSeriesRequest, MetricsViewTimeSeriesResponse, MetricsViewToplistRequest, MetricsViewToplistResponse, MetricsViewTotalsRequest, MetricsViewTotalsResponse, QueryBatchRequest, QueryBatchResponse, QueryRequest, QueryResponse, ResolveCanvasRequest, ResolveCanvasResponse, ResolveComponentRequest, ResolveComponentResponse, ResolveTemplatedStringRequest, ResolveTemplatedStringResponse, TableCardinalityRequest, TableCardinalityResponse, TableColumnsRequest, TableColumnsResponse, TableRowsRequest, TableRowsResponse } from "./queries_pb.js"; +import { MethodKind } from "@bufbuild/protobuf"; + +/** + * @generated from service rill.runtime.v1.QueryService + */ +export const QueryService = { + typeName: "rill.runtime.v1.QueryService", + methods: { + /** + * Query runs a SQL query against the instance's OLAP datastore. + * + * @generated from rpc rill.runtime.v1.QueryService.Query + */ + query: { + name: "Query", + I: QueryRequest, + O: QueryResponse, + kind: MethodKind.Unary, + }, + /** + * Batch request with different queries + * + * @generated from rpc rill.runtime.v1.QueryService.QueryBatch + */ + queryBatch: { + name: "QueryBatch", + I: QueryBatchRequest, + O: QueryBatchResponse, + kind: MethodKind.ServerStreaming, + }, + /** + * Export builds a URL to download the results of a query as a file. + * + * @generated from rpc rill.runtime.v1.QueryService.Export + */ + export: { + name: "Export", + I: ExportRequest, + O: ExportResponse, + kind: MethodKind.Unary, + }, + /** + * ExportReport builds a URL to download the results of a query as a file. + * + * @generated from rpc rill.runtime.v1.QueryService.ExportReport + */ + exportReport: { + name: "ExportReport", + I: ExportReportRequest, + O: ExportReportResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewAggregation is a generic API for running group-by/pivot queries against a metrics view. + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewAggregation + */ + metricsViewAggregation: { + name: "MetricsViewAggregation", + I: MetricsViewAggregationRequest, + O: MetricsViewAggregationResponse, + kind: MethodKind.Unary, + }, + /** + * + * Deprecated - use MetricsViewComparison instead. + * MetricsViewToplist returns the top dimension values of a metrics view sorted by one or more measures. + * It's a convenience API for querying a metrics view. + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewToplist + */ + metricsViewToplist: { + name: "MetricsViewToplist", + I: MetricsViewToplistRequest, + O: MetricsViewToplistResponse, + kind: MethodKind.Unary, + }, + /** + * + * MetricsViewComparison returns a toplist containing comparison data of another toplist (same dimension/measure but a different time range). + * Returns a toplist without comparison data if comparison time range is omitted. + * + * ie. comparsion toplist: + * | measure1_base | measure1_previous | measure1__delta_abs | measure1__delta_rel | dimension | + * |---------------|---------------------|---------------------|--------------------|-----------| + * | 2 | 2 | 0 | 0 | Safari | + * | 1 | 0 | 1 | N/A | Chrome | + * | 0 | 4 | -4 | -1.0 | Firefox | + * + * ie. toplist: + * | measure1 | measure2 | dimension | + * |----------|----------|-----------| + * | 2 | 45 | Safari | + * | 1 | 350 | Chrome | + * | 0 | 25 | Firefox | + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewComparison + */ + metricsViewComparison: { + name: "MetricsViewComparison", + I: MetricsViewComparisonRequest, + O: MetricsViewComparisonResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewTimeSeries returns time series for the measures in the metrics view. + * It's a convenience API for querying a metrics view. + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewTimeSeries + */ + metricsViewTimeSeries: { + name: "MetricsViewTimeSeries", + I: MetricsViewTimeSeriesRequest, + O: MetricsViewTimeSeriesResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewTotals returns totals over a time period for the measures in a metrics view. + * It's a convenience API for querying a metrics view. + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewTotals + */ + metricsViewTotals: { + name: "MetricsViewTotals", + I: MetricsViewTotalsRequest, + O: MetricsViewTotalsResponse, + kind: MethodKind.Unary, + }, + /** + * + * MetricsViewRows returns the underlying model rows matching a metrics view time range and filter(s). + * + * ie. without granularity + * | column1 | column2 | dimension | + * |---------|---------|-----------| + * | 2 | 2 | Safari | + * | 1 | 0 | Chrome | + * | 0 | 4 | Firefox | + * + * ie. with granularity + * | timestamp__day0 | column1 | column2 | dimension | + * |----------------------|---------|---------|-----------| + * | 2022-01-01T00:00:00Z | 2 | 2 | Safari | + * | 2022-01-01T00:00:00Z | 1 | 0 | Chrome | + * | 2022-01-01T00:00:00Z | 0 | 4 | Firefox | + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewRows + */ + metricsViewRows: { + name: "MetricsViewRows", + I: MetricsViewRowsRequest, + O: MetricsViewRowsResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewTimeRange Get the time range summaries (min, max) for time column in a metrics view. + * Deprecated: use MetricsViewTimeRanges instead. + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewTimeRange + */ + metricsViewTimeRange: { + name: "MetricsViewTimeRange", + I: MetricsViewTimeRangeRequest, + O: MetricsViewTimeRangeResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewSchema Get the data types of measures and dimensions + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewSchema + */ + metricsViewSchema: { + name: "MetricsViewSchema", + I: MetricsViewSchemaRequest, + O: MetricsViewSchemaResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewSearch Get the data types of measures and dimensions + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewSearch + */ + metricsViewSearch: { + name: "MetricsViewSearch", + I: MetricsViewSearchRequest, + O: MetricsViewSearchResponse, + kind: MethodKind.Unary, + }, + /** + * MetricsViewTimeRanges resolves time ranges for a metrics view. + * + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewTimeRanges + */ + metricsViewTimeRanges: { + name: "MetricsViewTimeRanges", + I: MetricsViewTimeRangesRequest, + O: MetricsViewTimeRangesResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc rill.runtime.v1.QueryService.MetricsViewAnnotations + */ + metricsViewAnnotations: { + name: "MetricsViewAnnotations", + I: MetricsViewAnnotationsRequest, + O: MetricsViewAnnotationsResponse, + kind: MethodKind.Unary, + }, + /** + * ConvertExpressionToMetricsSQL converts a filter expression to a SQL filter string. + * + * @generated from rpc rill.runtime.v1.QueryService.ConvertExpressionToMetricsSQL + */ + convertExpressionToMetricsSQL: { + name: "ConvertExpressionToMetricsSQL", + I: ConvertExpressionToMetricsSQLRequest, + O: ConvertExpressionToMetricsSQLResponse, + kind: MethodKind.Unary, + }, + /** + * ResolveCanvas is a convenience API that returns a canvas and all its referenced components and metrics views. + * + * @generated from rpc rill.runtime.v1.QueryService.ResolveCanvas + */ + resolveCanvas: { + name: "ResolveCanvas", + I: ResolveCanvasRequest, + O: ResolveCanvasResponse, + kind: MethodKind.Unary, + }, + /** + * ResolveComponent resolves renderer for a Component resource. + * + * @generated from rpc rill.runtime.v1.QueryService.ResolveComponent + */ + resolveComponent: { + name: "ResolveComponent", + I: ResolveComponentRequest, + O: ResolveComponentResponse, + kind: MethodKind.Unary, + }, + /** + * ResolveTemplatedString resolves a templated strings. + * + * @generated from rpc rill.runtime.v1.QueryService.ResolveTemplatedString + */ + resolveTemplatedString: { + name: "ResolveTemplatedString", + I: ResolveTemplatedStringRequest, + O: ResolveTemplatedStringResponse, + kind: MethodKind.Unary, + }, + /** + * ColumnRollupInterval returns the minimum time granularity (as well as the time range) for a specified timestamp column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnRollupInterval + */ + columnRollupInterval: { + name: "ColumnRollupInterval", + I: ColumnRollupIntervalRequest, + O: ColumnRollupIntervalResponse, + kind: MethodKind.Unary, + }, + /** + * Get TopK elements from a table for a column given an agg function + * agg function and k are optional, defaults are count(*) and 50 respectively + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnTopK + */ + columnTopK: { + name: "ColumnTopK", + I: ColumnTopKRequest, + O: ColumnTopKResponse, + kind: MethodKind.Unary, + }, + /** + * Get the number of nulls in a column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnNullCount + */ + columnNullCount: { + name: "ColumnNullCount", + I: ColumnNullCountRequest, + O: ColumnNullCountResponse, + kind: MethodKind.Unary, + }, + /** + * Get basic stats for a numeric column like min, max, mean, stddev, etc + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnDescriptiveStatistics + */ + columnDescriptiveStatistics: { + name: "ColumnDescriptiveStatistics", + I: ColumnDescriptiveStatisticsRequest, + O: ColumnDescriptiveStatisticsResponse, + kind: MethodKind.Unary, + }, + /** + * Estimates the smallest time grain present in the column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnTimeGrain + */ + columnTimeGrain: { + name: "ColumnTimeGrain", + I: ColumnTimeGrainRequest, + O: ColumnTimeGrainResponse, + kind: MethodKind.Unary, + }, + /** + * Get the histogram for values in a column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnNumericHistogram + */ + columnNumericHistogram: { + name: "ColumnNumericHistogram", + I: ColumnNumericHistogramRequest, + O: ColumnNumericHistogramResponse, + kind: MethodKind.Unary, + }, + /** + * Get outliers for a numeric column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnRugHistogram + */ + columnRugHistogram: { + name: "ColumnRugHistogram", + I: ColumnRugHistogramRequest, + O: ColumnRugHistogramResponse, + kind: MethodKind.Unary, + }, + /** + * Get the time range summaries (min, max) for a column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnTimeRange + */ + columnTimeRange: { + name: "ColumnTimeRange", + I: ColumnTimeRangeRequest, + O: ColumnTimeRangeResponse, + kind: MethodKind.Unary, + }, + /** + * Get cardinality for a column + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnCardinality + */ + columnCardinality: { + name: "ColumnCardinality", + I: ColumnCardinalityRequest, + O: ColumnCardinalityResponse, + kind: MethodKind.Unary, + }, + /** + * Generate time series for the given measures (aggregation expressions) along with the sparkline timeseries + * + * @generated from rpc rill.runtime.v1.QueryService.ColumnTimeSeries + */ + columnTimeSeries: { + name: "ColumnTimeSeries", + I: ColumnTimeSeriesRequest, + O: ColumnTimeSeriesResponse, + kind: MethodKind.Unary, + }, + /** + * TableCardinality returns row count + * + * @generated from rpc rill.runtime.v1.QueryService.TableCardinality + */ + tableCardinality: { + name: "TableCardinality", + I: TableCardinalityRequest, + O: TableCardinalityResponse, + kind: MethodKind.Unary, + }, + /** + * TableColumns returns column profiles + * + * @generated from rpc rill.runtime.v1.QueryService.TableColumns + */ + tableColumns: { + name: "TableColumns", + I: TableColumnsRequest, + O: TableColumnsResponse, + kind: MethodKind.Unary, + }, + /** + * TableRows returns table rows + * + * @generated from rpc rill.runtime.v1.QueryService.TableRows + */ + tableRows: { + name: "TableRows", + I: TableRowsRequest, + O: TableRowsResponse, + kind: MethodKind.Unary, + }, + } +} as const; + diff --git a/web-common/src/runtime-client/constants.ts b/web-common/src/runtime-client/constants.ts index 011d0419851..521df5e4c5d 100644 --- a/web-common/src/runtime-client/constants.ts +++ b/web-common/src/runtime-client/constants.ts @@ -1,2 +1,8 @@ // The TTL is actually set in the Admin server – we just use the value for some frontend logic export const RUNTIME_ACCESS_TOKEN_DEFAULT_TTL = 30 * 60 * 1000; // 30 minutes + +// Extra buffer to ensure the JWT hasn't expired by the time it reaches the server +export const JWT_EXPIRY_WARNING_WINDOW = 2 * 1000; + +// Interval to recheck JWT freshness while waiting for a refresh +export const CHECK_RUNTIME_STORE_FOR_JWT_INTERVAL = 50; diff --git a/web-common/src/runtime-client/http-client.ts b/web-common/src/runtime-client/http-client.ts index 6601cdc1ba9..4b5fbe140db 100644 --- a/web-common/src/runtime-client/http-client.ts +++ b/web-common/src/runtime-client/http-client.ts @@ -3,7 +3,11 @@ import type { HTTPError, } from "@rilldata/web-common/runtime-client/fetchWrapper"; import { get } from "svelte/store"; -import { RUNTIME_ACCESS_TOKEN_DEFAULT_TTL } from "./constants"; +import { + RUNTIME_ACCESS_TOKEN_DEFAULT_TTL, + JWT_EXPIRY_WARNING_WINDOW, + CHECK_RUNTIME_STORE_FOR_JWT_INTERVAL, +} from "./constants"; import { HttpRequestQueue } from "./http-request-queue/HttpRequestQueue"; import { type JWT, runtime } from "./runtime-store"; @@ -41,9 +45,6 @@ export const httpClient = async ( return (await httpRequestQueue.add(interceptedConfig)) as Promise; }; -const JWT_EXPIRY_WARNING_WINDOW = 2 * 1000; // Extra time to ensure that the JWT is not expired when it ultimately reaches the server -const CHECK_RUNTIME_STORE_FOR_JWT_INTERVAL = 50; // Interval to recheck JWT freshness in milliseconds - /** * If the JWT has expired, or is close to expiring, wait for a fresh one. */ diff --git a/web-common/src/runtime-client/v2/RuntimeProvider.svelte b/web-common/src/runtime-client/v2/RuntimeProvider.svelte new file mode 100644 index 00000000000..a7402a85fd0 --- /dev/null +++ b/web-common/src/runtime-client/v2/RuntimeProvider.svelte @@ -0,0 +1,37 @@ + + +{#if host && instanceId} + +{/if} diff --git a/web-common/src/runtime-client/v2/context.ts b/web-common/src/runtime-client/v2/context.ts new file mode 100644 index 00000000000..789bbc609a1 --- /dev/null +++ b/web-common/src/runtime-client/v2/context.ts @@ -0,0 +1,19 @@ +import { getContext } from "svelte"; +import type { RuntimeClient } from "./runtime-client"; + +export const RUNTIME_CONTEXT_KEY = Symbol("runtime-client"); + +/** + * Returns the RuntimeClient set by the nearest ancestor RuntimeProvider. + * Must be called during component initialization (top-level ` - -
- {#if data.initialized} - - - - {#if $deploy} - + + +
+ {#if data.initialized} + + + + {#if $deploy} + + {/if} {/if} - {/if} - -
-
+ +
+
+
{#if $overlay !== null} From ba367e847fb5e1f547ad91a61518e71af783b028 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 11:37:11 +0300 Subject: [PATCH 02/78] feat: add TanStack Query hook code generator (Phase 2) Add a build-time code generator that reads ConnectRPC *_connect.ts service descriptors and produces TanStack Query hooks for Svelte. For each unary query method, generates 4 tiers: raw RPC function, query key factory, query options factory, and convenience createQuery hook. Mutation methods get 3 tiers: raw function, mutation options, and createMutation hook. Output: 59 queries + 28 mutations across QueryService, RuntimeService, and ConnectorService. Streaming methods (watchFiles, watchResources, watchLogs, completeStreaming, queryBatch) are skipped. Generated hooks take RuntimeClient as first argument and inject instanceId automatically, matching the Phase 1 context architecture. --- Makefile | 1 + web-common/package.json | 1 + .../scripts/generate-query-hooks-config.ts | 81 + web-common/scripts/generate-query-hooks.ts | 363 ++ .../v2/gen/connector-service.ts | 462 +++ web-common/src/runtime-client/v2/gen/index.ts | 5 + .../runtime-client/v2/gen/query-service.ts | 2001 +++++++++++ .../runtime-client/v2/gen/runtime-service.ts | 2934 +++++++++++++++++ 8 files changed, 5848 insertions(+) create mode 100644 web-common/scripts/generate-query-hooks-config.ts create mode 100644 web-common/scripts/generate-query-hooks.ts create mode 100644 web-common/src/runtime-client/v2/gen/connector-service.ts create mode 100644 web-common/src/runtime-client/v2/gen/index.ts create mode 100644 web-common/src/runtime-client/v2/gen/query-service.ts create mode 100644 web-common/src/runtime-client/v2/gen/runtime-service.ts diff --git a/Makefile b/Makefile index 0e046eba401..35827f4c95c 100644 --- a/Makefile +++ b/Makefile @@ -66,5 +66,6 @@ proto.generate: scripts/convert-openapi-v2-to-v3/convert.go --force --public-only \ proto/gen/rill/admin/v1/admin.swagger.yaml proto/gen/rill/admin/v1/public.openapi.yaml npm run generate:runtime-client -w web-common + npm run generate:query-hooks -w web-common npm run generate:client -w web-admin \ No newline at end of file diff --git a/web-common/package.json b/web-common/package.json index 9b89aa91a61..877ccad2a26 100644 --- a/web-common/package.json +++ b/web-common/package.json @@ -6,6 +6,7 @@ "lint": "prettier --check . && eslint .", "format": "prettier --write .", "generate:runtime-client": "svelte-kit sync && orval --config ./orval.config.ts", + "generate:query-hooks": "tsx scripts/generate-query-hooks.ts", "generate:sveltekit": "svelte-kit sync", "generate:template-schema": "ts-json-schema-generator --path 'src/features/canvas/components/types.ts' --type TemplateSpec -o ../runtime/parser/data/component-template-v1.json", "test": "vitest run", diff --git a/web-common/scripts/generate-query-hooks-config.ts b/web-common/scripts/generate-query-hooks-config.ts new file mode 100644 index 00000000000..9d933431938 --- /dev/null +++ b/web-common/scripts/generate-query-hooks-config.ts @@ -0,0 +1,81 @@ +/** + * Classification config for the query hooks code generator. + * Determines whether each RPC method produces a query or mutation hook, + * or should be skipped entirely (streaming methods). + */ + +export type MethodClassification = "query" | "mutation" | "skip"; + +/** + * Per-service overrides. Methods not listed here fall through to the + * service-level default classifier. + */ +export const methodOverrides: Record< + string, + Record +> = { + QueryService: { + // Semantically write operations + export: "mutation", + exportReport: "mutation", + query: "mutation", + // Streaming + queryBatch: "skip", + }, + RuntimeService: { + // Streaming + watchFiles: "skip", + watchLogs: "skip", + watchResources: "skip", + completeStreaming: "skip", + // Explicitly classified as queries (despite not matching Get/List prefix) + issueDevJWT: "query", + analyzeConnectors: "query", + analyzeVariables: "query", + queryResolver: "query", + }, + ConnectorService: { + // All methods are queries (no overrides needed) + }, +}; + +/** + * Default classifier for methods not in the override map. + * RuntimeService uses prefix-based classification; other services default to query. + */ +export function classifyMethod( + serviceName: string, + methodName: string, +): MethodClassification { + // Check overrides first + const overrides = methodOverrides[serviceName]; + if (overrides && methodName in overrides) { + return overrides[methodName]; + } + + // Service-specific defaults + if (serviceName === "RuntimeService") { + const queryPrefixes = [ + "get", + "list", + "ping", + "health", + "instanceHealth", + ]; + const lowerMethod = methodName.charAt(0).toLowerCase() + methodName.slice(1); + if (queryPrefixes.some((p) => lowerMethod.startsWith(p))) { + return "query"; + } + return "mutation"; + } + + if (serviceName === "QueryService") { + return "query"; + } + + if (serviceName === "ConnectorService") { + return "query"; + } + + return "query"; +} diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts new file mode 100644 index 00000000000..d5667e573fe --- /dev/null +++ b/web-common/scripts/generate-query-hooks.ts @@ -0,0 +1,363 @@ +/** + * Code generator: reads ConnectRPC *_connect.ts service descriptors and + * produces TanStack Query hooks for Svelte. + * + * Usage: tsx scripts/generate-query-hooks.ts + * + * Output: src/runtime-client/v2/gen/{query-service,runtime-service,connector-service}.ts + */ + +import * as fs from "node:fs"; +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +import { MethodKind } from "@bufbuild/protobuf"; +import { classifyMethod, type MethodClassification } from "./generate-query-hooks-config"; + +// --- Service descriptors --- + +import { QueryService } from "../src/proto/gen/rill/runtime/v1/queries_connect"; +import { RuntimeService } from "../src/proto/gen/rill/runtime/v1/api_connect"; +import { ConnectorService } from "../src/proto/gen/rill/runtime/v1/connectors_connect"; + +interface ServiceDef { + typeName: string; + methods: Record< + string, + { + name: string; + I: { typeName: string }; + O: { typeName: string }; + kind: MethodKind; + } + >; +} + +interface MethodInfo { + /** camelCase method name as it appears in the service descriptor (e.g. "metricsViewAggregation") */ + methodKey: string; + /** PascalCase method name from the proto (e.g. "MetricsViewAggregation") */ + methodName: string; + /** Request message type name (e.g. "MetricsViewAggregationRequest") */ + inputType: string; + /** Response message type name (e.g. "MetricsViewAggregationResponse") */ + outputType: string; + classification: MethodClassification; +} + +// --- Helpers --- + +function pascalCase(s: string): string { + return s.charAt(0).toUpperCase() + s.slice(1); +} + +function extractShortName(typeName: string): string { + // "rill.runtime.v1.MetricsViewAggregationRequest" -> "MetricsViewAggregationRequest" + const parts = typeName.split("."); + return parts[parts.length - 1]; +} + +function getServiceShortName(typeName: string): string { + // "rill.runtime.v1.QueryService" -> "QueryService" + return extractShortName(typeName); +} + +function getServiceClientProp(serviceName: string): string { + // "QueryService" -> "queryService", "RuntimeService" -> "runtimeService" + return serviceName.charAt(0).toLowerCase() + serviceName.slice(1); +} + +/** kebab-case for output filename */ +function toKebabCase(s: string): string { + return s + .replace(/([a-z])([A-Z])/g, "$1-$2") + .replace(/([A-Z])([A-Z][a-z])/g, "$1-$2") + .toLowerCase(); +} + +/** Derive the _pb.ts module path that exports the request/response types */ +function getProtoImportPath(serviceName: string): string { + const fileMap: Record = { + QueryService: "queries_pb", + RuntimeService: "api_pb", + ConnectorService: "connectors_pb", + }; + return `../../../proto/gen/rill/runtime/v1/${fileMap[serviceName]}`; +} + +// --- Method extraction --- + +function extractMethods(service: ServiceDef): MethodInfo[] { + const serviceName = getServiceShortName(service.typeName); + const methods: MethodInfo[] = []; + + for (const [key, method] of Object.entries(service.methods)) { + if (method.kind !== MethodKind.Unary) { + // Skip streaming methods automatically + continue; + } + + const classification = classifyMethod(serviceName, key); + if (classification === "skip") continue; + + methods.push({ + methodKey: key, + methodName: method.name, + inputType: extractShortName(method.I.typeName), + outputType: extractShortName(method.O.typeName), + classification, + }); + } + + return methods; +} + +// --- Code generation --- + +function generateServiceFile(service: ServiceDef): string { + const serviceName = getServiceShortName(service.typeName); + const serviceClientProp = getServiceClientProp(serviceName); + const protoImportPath = getProtoImportPath(serviceName); + const methods = extractMethods(service); + + const queryMethods = methods.filter((m) => m.classification === "query"); + const mutationMethods = methods.filter( + (m) => m.classification === "mutation", + ); + + // Collect all request/response types we need to import + const protoTypes = new Set(); + for (const m of methods) { + protoTypes.add(m.inputType); + protoTypes.add(m.outputType); + } + + const lines: string[] = []; + + // Header + lines.push(`// Generated by generate-query-hooks.ts — DO NOT EDIT`); + lines.push(``); + lines.push(`import type { RuntimeClient } from "../runtime-client";`); + lines.push( + `import type { PartialMessage } from "@bufbuild/protobuf";`, + ); + lines.push( + `import {`, + ` createQuery,`, + ` createMutation,`, + ` type CreateQueryOptions,`, + ` type CreateQueryResult,`, + ` type QueryClient,`, + ` type QueryFunction,`, + ` type QueryKey,`, + ` type CreateMutationOptions,`, + ` type CreateMutationResult,`, + `} from "@tanstack/svelte-query";`, + ); + + // Proto type imports + const sortedTypes = [...protoTypes].sort(); + lines.push( + `import {`, + ...sortedTypes.map((t, i) => + ` ${t}${i < sortedTypes.length - 1 ? "," : ""}`, + ), + `} from "${protoImportPath}";`, + ); + + lines.push(``); + + // --- Query methods --- + for (const m of queryMethods) { + const fnPrefix = `${serviceClientProp.charAt(0).toLowerCase() + serviceClientProp.slice(1)}${pascalCase(m.methodKey)}`; + // Use the same naming convention: serviceName + methodName (e.g. queryServiceMetricsViewAggregation) + + const fullName = `${serviceClientProp}${pascalCase(m.methodKey)}`; + const keyFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}QueryKey`; + const optsFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}QueryOptions`; + const hookName = `create${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}`; + + // Tier 1: Raw function + lines.push( + `/**`, + ` * Raw RPC call: ${serviceName}.${m.methodName}`, + ` */`, + `export function ${fullName}(`, + ` client: RuntimeClient,`, + ` request: PartialMessage>,`, + ` options?: { signal?: AbortSignal },`, + `): Promise<${m.outputType}> {`, + ` return client.${serviceClientProp}.${m.methodKey}(`, + ` { instanceId: client.instanceId, ...request },`, + ` { signal: options?.signal },`, + ` );`, + `}`, + ``, + ); + + // Tier 2: Query key + lines.push( + `export function ${keyFnName}(`, + ` instanceId: string,`, + ` request?: PartialMessage>,`, + `): QueryKey {`, + ` return ["${serviceName}", "${m.methodKey}", instanceId, request ?? {}] as const;`, + `}`, + ``, + ); + + // Tier 3: Query options + lines.push( + `export function ${optsFnName}(`, + ` client: RuntimeClient,`, + ` request: PartialMessage>,`, + ` options?: {`, + ` query?: Partial>;`, + ` },`, + `): CreateQueryOptions<${m.outputType}> & { queryKey: QueryKey } {`, + ` const queryKey = ${keyFnName}(client.instanceId, request);`, + ` const queryFn: QueryFunction<${m.outputType}> = ({ signal }) =>`, + ` ${fullName}(client, request, { signal });`, + ` return {`, + ` queryKey,`, + ` queryFn,`, + ` enabled: !!client.instanceId,`, + ` ...options?.query,`, + ` };`, + `}`, + ``, + ); + + // Tier 4: Convenience hook + lines.push( + `export function ${hookName}(`, + ` client: RuntimeClient,`, + ` request: PartialMessage>,`, + ` options?: {`, + ` query?: Partial>;`, + ` },`, + ` queryClient?: QueryClient,`, + `): CreateQueryResult<${m.outputType}> {`, + ` const queryOptions = ${optsFnName}(client, request, options);`, + ` return createQuery(queryOptions, queryClient);`, + `}`, + ``, + ); + } + + // --- Mutation methods --- + for (const m of mutationMethods) { + const fullName = `${serviceClientProp}${pascalCase(m.methodKey)}`; + const mutOptsFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}MutationOptions`; + const mutHookName = `create${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}Mutation`; + + // Raw function + lines.push( + `/**`, + ` * Raw RPC call (mutation): ${serviceName}.${m.methodName}`, + ` */`, + `export function ${fullName}(`, + ` client: RuntimeClient,`, + ` request: PartialMessage>,`, + `): Promise<${m.outputType}> {`, + ` return client.${serviceClientProp}.${m.methodKey}(`, + ` { instanceId: client.instanceId, ...request },`, + ` );`, + `}`, + ``, + ); + + // Mutation options + lines.push( + `export function ${mutOptsFnName}(`, + ` client: RuntimeClient,`, + ` options?: Partial>>>,`, + `): CreateMutationOptions<${m.outputType}, unknown, PartialMessage>> {`, + ` return {`, + ` mutationFn: (request) => ${fullName}(client, request),`, + ` ...options,`, + ` };`, + `}`, + ``, + ); + + // Mutation hook + lines.push( + `export function ${mutHookName}(`, + ` client: RuntimeClient,`, + ` options?: Partial>>>,`, + ` queryClient?: QueryClient,`, + `): CreateMutationResult<${m.outputType}, unknown, PartialMessage>> {`, + ` const mutationOptions = ${mutOptsFnName}(client, options);`, + ` return createMutation(mutationOptions, queryClient);`, + `}`, + ``, + ); + } + + return lines.join("\n"); +} + +function generateIndex(serviceNames: string[]): string { + const lines = [`// Generated by generate-query-hooks.ts — DO NOT EDIT`, ``]; + for (const name of serviceNames) { + lines.push(`export * from "./${toKebabCase(name)}";`); + } + lines.push(``); + return lines.join("\n"); +} + +// --- Main --- + +const outDir = path.resolve( + __dirname, + "../src/runtime-client/v2/gen", +); + +fs.mkdirSync(outDir, { recursive: true }); + +const services: { descriptor: ServiceDef; name: string }[] = [ + { descriptor: QueryService as unknown as ServiceDef, name: "QueryService" }, + { + descriptor: RuntimeService as unknown as ServiceDef, + name: "RuntimeService", + }, + { + descriptor: ConnectorService as unknown as ServiceDef, + name: "ConnectorService", + }, +]; + +let totalQueries = 0; +let totalMutations = 0; + +for (const { descriptor, name } of services) { + const code = generateServiceFile(descriptor); + const fileName = `${toKebabCase(name)}.ts`; + const filePath = path.join(outDir, fileName); + fs.writeFileSync(filePath, code); + + const methods = extractMethods(descriptor); + const queries = methods.filter((m) => m.classification === "query").length; + const mutations = methods.filter( + (m) => m.classification === "mutation", + ).length; + const skipped = Object.keys(descriptor.methods).length - methods.length; + totalQueries += queries; + totalMutations += mutations; + + console.log( + ` ${fileName}: ${queries} queries, ${mutations} mutations, ${skipped} skipped`, + ); +} + +// Generate barrel index +const indexCode = generateIndex(services.map((s) => s.name)); +fs.writeFileSync(path.join(outDir, "index.ts"), indexCode); + +console.log( + `\nTotal: ${totalQueries} queries, ${totalMutations} mutations`, +); +console.log(`Output: ${outDir}`); diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts new file mode 100644 index 00000000000..f8006491856 --- /dev/null +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -0,0 +1,462 @@ +// Generated by generate-query-hooks.ts — DO NOT EDIT + +import type { RuntimeClient } from "../runtime-client"; +import type { PartialMessage } from "@bufbuild/protobuf"; +import { + createQuery, + createMutation, + type CreateQueryOptions, + type CreateQueryResult, + type QueryClient, + type QueryFunction, + type QueryKey, + type CreateMutationOptions, + type CreateMutationResult, +} from "@tanstack/svelte-query"; +import { + GetTableRequest, + GetTableResponse, + ListBucketsRequest, + ListBucketsResponse, + ListDatabaseSchemasRequest, + ListDatabaseSchemasResponse, + ListObjectsRequest, + ListObjectsResponse, + ListTablesRequest, + ListTablesResponse, + OLAPGetTableRequest, + OLAPGetTableResponse, + OLAPListTablesRequest, + OLAPListTablesResponse, +} from "../../../proto/gen/rill/runtime/v1/connectors_pb"; + +/** + * Raw RPC call: ConnectorService.ListBuckets + */ +export function connectorServiceListBuckets( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.listBuckets( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceListBucketsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "ConnectorService", + "listBuckets", + instanceId, + request ?? {}, + ] as const; +} + +export function getConnectorServiceListBucketsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceListBucketsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceListBuckets(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceListBuckets( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceListBucketsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: ConnectorService.ListObjects + */ +export function connectorServiceListObjects( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.listObjects( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceListObjectsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "ConnectorService", + "listObjects", + instanceId, + request ?? {}, + ] as const; +} + +export function getConnectorServiceListObjectsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceListObjectsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceListObjects(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceListObjects( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceListObjectsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: ConnectorService.OLAPListTables + */ +export function connectorServiceOLAPListTables( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.oLAPListTables( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceOLAPListTablesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "ConnectorService", + "oLAPListTables", + instanceId, + request ?? {}, + ] as const; +} + +export function getConnectorServiceOLAPListTablesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceOLAPListTablesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceOLAPListTables(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceOLAPListTables( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceOLAPListTablesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: ConnectorService.OLAPGetTable + */ +export function connectorServiceOLAPGetTable( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.oLAPGetTable( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceOLAPGetTableQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "ConnectorService", + "oLAPGetTable", + instanceId, + request ?? {}, + ] as const; +} + +export function getConnectorServiceOLAPGetTableQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceOLAPGetTableQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceOLAPGetTable(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceOLAPGetTable( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceOLAPGetTableQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: ConnectorService.ListDatabaseSchemas + */ +export function connectorServiceListDatabaseSchemas( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.listDatabaseSchemas( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceListDatabaseSchemasQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "ConnectorService", + "listDatabaseSchemas", + instanceId, + request ?? {}, + ] as const; +} + +export function getConnectorServiceListDatabaseSchemasQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceListDatabaseSchemasQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceListDatabaseSchemas(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceListDatabaseSchemas( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceListDatabaseSchemasQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: ConnectorService.ListTables + */ +export function connectorServiceListTables( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.listTables( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceListTablesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["ConnectorService", "listTables", instanceId, request ?? {}] as const; +} + +export function getConnectorServiceListTablesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceListTablesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceListTables(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceListTables( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceListTablesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: ConnectorService.GetTable + */ +export function connectorServiceGetTable( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.connectorService.getTable( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getConnectorServiceGetTableQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["ConnectorService", "getTable", instanceId, request ?? {}] as const; +} + +export function getConnectorServiceGetTableQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getConnectorServiceGetTableQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + connectorServiceGetTable(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createConnectorServiceGetTable( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getConnectorServiceGetTableQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} diff --git a/web-common/src/runtime-client/v2/gen/index.ts b/web-common/src/runtime-client/v2/gen/index.ts new file mode 100644 index 00000000000..a7cf632e105 --- /dev/null +++ b/web-common/src/runtime-client/v2/gen/index.ts @@ -0,0 +1,5 @@ +// Generated by generate-query-hooks.ts — DO NOT EDIT + +export * from "./query-service"; +export * from "./runtime-service"; +export * from "./connector-service"; diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts new file mode 100644 index 00000000000..0945495cf0f --- /dev/null +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -0,0 +1,2001 @@ +// Generated by generate-query-hooks.ts — DO NOT EDIT + +import type { RuntimeClient } from "../runtime-client"; +import type { PartialMessage } from "@bufbuild/protobuf"; +import { + createQuery, + createMutation, + type CreateQueryOptions, + type CreateQueryResult, + type QueryClient, + type QueryFunction, + type QueryKey, + type CreateMutationOptions, + type CreateMutationResult, +} from "@tanstack/svelte-query"; +import { + ColumnCardinalityRequest, + ColumnCardinalityResponse, + ColumnDescriptiveStatisticsRequest, + ColumnDescriptiveStatisticsResponse, + ColumnNullCountRequest, + ColumnNullCountResponse, + ColumnNumericHistogramRequest, + ColumnNumericHistogramResponse, + ColumnRollupIntervalRequest, + ColumnRollupIntervalResponse, + ColumnRugHistogramRequest, + ColumnRugHistogramResponse, + ColumnTimeGrainRequest, + ColumnTimeGrainResponse, + ColumnTimeRangeRequest, + ColumnTimeRangeResponse, + ColumnTimeSeriesRequest, + ColumnTimeSeriesResponse, + ColumnTopKRequest, + ColumnTopKResponse, + ConvertExpressionToMetricsSQLRequest, + ConvertExpressionToMetricsSQLResponse, + ExportReportRequest, + ExportReportResponse, + ExportRequest, + ExportResponse, + MetricsViewAggregationRequest, + MetricsViewAggregationResponse, + MetricsViewAnnotationsRequest, + MetricsViewAnnotationsResponse, + MetricsViewComparisonRequest, + MetricsViewComparisonResponse, + MetricsViewRowsRequest, + MetricsViewRowsResponse, + MetricsViewSchemaRequest, + MetricsViewSchemaResponse, + MetricsViewSearchRequest, + MetricsViewSearchResponse, + MetricsViewTimeRangeRequest, + MetricsViewTimeRangeResponse, + MetricsViewTimeRangesRequest, + MetricsViewTimeRangesResponse, + MetricsViewTimeSeriesRequest, + MetricsViewTimeSeriesResponse, + MetricsViewToplistRequest, + MetricsViewToplistResponse, + MetricsViewTotalsRequest, + MetricsViewTotalsResponse, + QueryRequest, + QueryResponse, + ResolveCanvasRequest, + ResolveCanvasResponse, + ResolveComponentRequest, + ResolveComponentResponse, + ResolveTemplatedStringRequest, + ResolveTemplatedStringResponse, + TableCardinalityRequest, + TableCardinalityResponse, + TableColumnsRequest, + TableColumnsResponse, + TableRowsRequest, + TableRowsResponse, +} from "../../../proto/gen/rill/runtime/v1/queries_pb"; + +/** + * Raw RPC call: QueryService.MetricsViewAggregation + */ +export function queryServiceMetricsViewAggregation( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewAggregation( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewAggregationQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewAggregation", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewAggregationQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewAggregationQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewAggregation(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewAggregation( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewAggregationQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewToplist + */ +export function queryServiceMetricsViewToplist( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewToplist( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewToplistQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewToplist", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewToplistQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewToplistQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewToplist(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewToplist( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewToplistQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewComparison + */ +export function queryServiceMetricsViewComparison( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewComparison( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewComparisonQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewComparison", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewComparisonQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewComparisonQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewComparison(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewComparison( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewComparisonQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewTimeSeries + */ +export function queryServiceMetricsViewTimeSeries( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewTimeSeries( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewTimeSeriesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewTimeSeries", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewTimeSeriesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewTimeSeriesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewTimeSeries(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewTimeSeries( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewTimeSeriesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewTotals + */ +export function queryServiceMetricsViewTotals( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewTotals( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewTotalsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewTotals", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewTotalsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewTotalsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewTotals(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewTotals( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewTotalsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewRows + */ +export function queryServiceMetricsViewRows( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewRows( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewRowsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewRows", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewRowsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewRowsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewRows(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewRows( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewRowsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewTimeRange + */ +export function queryServiceMetricsViewTimeRange( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewTimeRange( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewTimeRangeQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewTimeRange", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewTimeRangeQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewTimeRangeQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewTimeRange(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewTimeRange( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewTimeRangeQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewSchema + */ +export function queryServiceMetricsViewSchema( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewSchema( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewSchemaQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewSchema", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewSchemaQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewSchemaQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewSchema(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewSchema( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewSchemaQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewSearch + */ +export function queryServiceMetricsViewSearch( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewSearch( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewSearchQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewSearch", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewSearchQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewSearchQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewSearch(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewSearch( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewSearchQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewTimeRanges + */ +export function queryServiceMetricsViewTimeRanges( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewTimeRanges( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewTimeRangesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewTimeRanges", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewTimeRangesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewTimeRangesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewTimeRanges(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewTimeRanges( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewTimeRangesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.MetricsViewAnnotations + */ +export function queryServiceMetricsViewAnnotations( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.metricsViewAnnotations( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceMetricsViewAnnotationsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "metricsViewAnnotations", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceMetricsViewAnnotationsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceMetricsViewAnnotationsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceMetricsViewAnnotations(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceMetricsViewAnnotations( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceMetricsViewAnnotationsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ConvertExpressionToMetricsSQL + */ +export function queryServiceConvertExpressionToMetricsSQL( + client: RuntimeClient, + request: PartialMessage< + Omit + >, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.convertExpressionToMetricsSQL( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceConvertExpressionToMetricsSQLQueryKey( + instanceId: string, + request?: PartialMessage< + Omit + >, +): QueryKey { + return [ + "QueryService", + "convertExpressionToMetricsSQL", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( + client: RuntimeClient, + request: PartialMessage< + Omit + >, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { + queryKey: QueryKey; +} { + const queryKey = getQueryServiceConvertExpressionToMetricsSQLQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceConvertExpressionToMetricsSQL(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceConvertExpressionToMetricsSQL( + client: RuntimeClient, + request: PartialMessage< + Omit + >, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceConvertExpressionToMetricsSQLQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ResolveCanvas + */ +export function queryServiceResolveCanvas( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.resolveCanvas( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceResolveCanvasQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["QueryService", "resolveCanvas", instanceId, request ?? {}] as const; +} + +export function getQueryServiceResolveCanvasQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceResolveCanvasQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceResolveCanvas(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceResolveCanvas( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceResolveCanvasQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ResolveComponent + */ +export function queryServiceResolveComponent( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.resolveComponent( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceResolveComponentQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "resolveComponent", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceResolveComponentQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceResolveComponentQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceResolveComponent(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceResolveComponent( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceResolveComponentQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ResolveTemplatedString + */ +export function queryServiceResolveTemplatedString( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.resolveTemplatedString( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceResolveTemplatedStringQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "resolveTemplatedString", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceResolveTemplatedStringQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceResolveTemplatedStringQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceResolveTemplatedString(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceResolveTemplatedString( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceResolveTemplatedStringQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnRollupInterval + */ +export function queryServiceColumnRollupInterval( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnRollupInterval( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnRollupIntervalQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnRollupInterval", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnRollupIntervalQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnRollupIntervalQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnRollupInterval(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnRollupInterval( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnRollupIntervalQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnTopK + */ +export function queryServiceColumnTopK( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnTopK( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnTopKQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["QueryService", "columnTopK", instanceId, request ?? {}] as const; +} + +export function getQueryServiceColumnTopKQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnTopKQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnTopK(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnTopK( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnTopKQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnNullCount + */ +export function queryServiceColumnNullCount( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnNullCount( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnNullCountQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnNullCount", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnNullCountQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnNullCountQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnNullCount(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnNullCount( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnNullCountQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnDescriptiveStatistics + */ +export function queryServiceColumnDescriptiveStatistics( + client: RuntimeClient, + request: PartialMessage< + Omit + >, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnDescriptiveStatistics( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnDescriptiveStatisticsQueryKey( + instanceId: string, + request?: PartialMessage< + Omit + >, +): QueryKey { + return [ + "QueryService", + "columnDescriptiveStatistics", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( + client: RuntimeClient, + request: PartialMessage< + Omit + >, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { + queryKey: QueryKey; +} { + const queryKey = getQueryServiceColumnDescriptiveStatisticsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceColumnDescriptiveStatistics(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnDescriptiveStatistics( + client: RuntimeClient, + request: PartialMessage< + Omit + >, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnDescriptiveStatisticsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnTimeGrain + */ +export function queryServiceColumnTimeGrain( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnTimeGrain( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnTimeGrainQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnTimeGrain", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnTimeGrainQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnTimeGrainQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnTimeGrain(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnTimeGrain( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnTimeGrainQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnNumericHistogram + */ +export function queryServiceColumnNumericHistogram( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnNumericHistogram( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnNumericHistogramQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnNumericHistogram", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnNumericHistogramQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnNumericHistogramQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnNumericHistogram(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnNumericHistogram( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnNumericHistogramQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnRugHistogram + */ +export function queryServiceColumnRugHistogram( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnRugHistogram( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnRugHistogramQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnRugHistogram", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnRugHistogramQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnRugHistogramQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnRugHistogram(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnRugHistogram( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnRugHistogramQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnTimeRange + */ +export function queryServiceColumnTimeRange( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnTimeRange( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnTimeRangeQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnTimeRange", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnTimeRangeQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnTimeRangeQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnTimeRange(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnTimeRange( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnTimeRangeQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnCardinality + */ +export function queryServiceColumnCardinality( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnCardinality( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnCardinalityQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnCardinality", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnCardinalityQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnCardinalityQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnCardinality(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnCardinality( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnCardinalityQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.ColumnTimeSeries + */ +export function queryServiceColumnTimeSeries( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.columnTimeSeries( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceColumnTimeSeriesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "columnTimeSeries", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceColumnTimeSeriesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceColumnTimeSeriesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceColumnTimeSeries(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceColumnTimeSeries( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceColumnTimeSeriesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.TableCardinality + */ +export function queryServiceTableCardinality( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.tableCardinality( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceTableCardinalityQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "QueryService", + "tableCardinality", + instanceId, + request ?? {}, + ] as const; +} + +export function getQueryServiceTableCardinalityQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceTableCardinalityQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceTableCardinality(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceTableCardinality( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceTableCardinalityQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.TableColumns + */ +export function queryServiceTableColumns( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.tableColumns( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceTableColumnsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["QueryService", "tableColumns", instanceId, request ?? {}] as const; +} + +export function getQueryServiceTableColumnsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceTableColumnsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + queryServiceTableColumns(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceTableColumns( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceTableColumnsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: QueryService.TableRows + */ +export function queryServiceTableRows( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.queryService.tableRows( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getQueryServiceTableRowsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["QueryService", "tableRows", instanceId, request ?? {}] as const; +} + +export function getQueryServiceTableRowsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getQueryServiceTableRowsQueryKey(client.instanceId, request); + const queryFn: QueryFunction = ({ signal }) => + queryServiceTableRows(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createQueryServiceTableRows( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getQueryServiceTableRowsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call (mutation): QueryService.Query + */ +export function queryServiceQuery( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.queryService.query({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getQueryServiceQueryMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + QueryResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + QueryResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => queryServiceQuery(client, request), + ...options, + }; +} + +export function createQueryServiceQueryMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + QueryResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + QueryResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getQueryServiceQueryMutationOptions(client, options); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): QueryService.Export + */ +export function queryServiceExport( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.queryService.export({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getQueryServiceExportMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ExportResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + ExportResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => queryServiceExport(client, request), + ...options, + }; +} + +export function createQueryServiceExportMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ExportResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + ExportResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getQueryServiceExportMutationOptions(client, options); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): QueryService.ExportReport + */ +export function queryServiceExportReport( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.queryService.exportReport({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getQueryServiceExportReportMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ExportReportResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + ExportReportResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => queryServiceExportReport(client, request), + ...options, + }; +} + +export function createQueryServiceExportReportMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ExportReportResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + ExportReportResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getQueryServiceExportReportMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts new file mode 100644 index 00000000000..23e1b3db961 --- /dev/null +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -0,0 +1,2934 @@ +// Generated by generate-query-hooks.ts — DO NOT EDIT + +import type { RuntimeClient } from "../runtime-client"; +import type { PartialMessage } from "@bufbuild/protobuf"; +import { + createQuery, + createMutation, + type CreateQueryOptions, + type CreateQueryResult, + type QueryClient, + type QueryFunction, + type QueryKey, + type CreateMutationOptions, + type CreateMutationResult, +} from "@tanstack/svelte-query"; +import { + AnalyzeConnectorsRequest, + AnalyzeConnectorsResponse, + AnalyzeVariablesRequest, + AnalyzeVariablesResponse, + CompleteRequest, + CompleteResponse, + CreateDirectoryRequest, + CreateDirectoryResponse, + CreateInstanceRequest, + CreateInstanceResponse, + CreateTriggerRequest, + CreateTriggerResponse, + DeleteFileRequest, + DeleteFileResponse, + DeleteInstanceRequest, + DeleteInstanceResponse, + EditInstanceRequest, + EditInstanceResponse, + ForkConversationRequest, + ForkConversationResponse, + GenerateCanvasFileRequest, + GenerateCanvasFileResponse, + GenerateMetricsViewFileRequest, + GenerateMetricsViewFileResponse, + GenerateRendererRequest, + GenerateRendererResponse, + GenerateResolverRequest, + GenerateResolverResponse, + GetConversationRequest, + GetConversationResponse, + GetExploreRequest, + GetExploreResponse, + GetFileRequest, + GetFileResponse, + GetInstanceRequest, + GetInstanceResponse, + GetLogsRequest, + GetLogsResponse, + GetModelPartitionsRequest, + GetModelPartitionsResponse, + GetResourceRequest, + GetResourceResponse, + GitCommitRequest, + GitCommitResponse, + GitMergeToBranchRequest, + GitMergeToBranchResponse, + GitPullRequest, + GitPullResponse, + GitPushRequest, + GitPushResponse, + GitStatusRequest, + GitStatusResponse, + GitSwitchBranchRequest, + GitSwitchBranchResponse, + HealthRequest, + HealthResponse, + InstanceHealthRequest, + InstanceHealthResponse, + IssueDevJWTRequest, + IssueDevJWTResponse, + ListConnectorDriversRequest, + ListConnectorDriversResponse, + ListConversationsRequest, + ListConversationsResponse, + ListExamplesRequest, + ListExamplesResponse, + ListFilesRequest, + ListFilesResponse, + ListGitBranchesRequest, + ListGitBranchesResponse, + ListGitCommitsRequest, + ListGitCommitsResponse, + ListInstancesRequest, + ListInstancesResponse, + ListNotifierConnectorsRequest, + ListNotifierConnectorsResponse, + ListResourcesRequest, + ListResourcesResponse, + ListToolsRequest, + ListToolsResponse, + PingRequest, + PingResponse, + PutFileRequest, + PutFileResponse, + QueryResolverRequest, + QueryResolverResponse, + ReloadConfigRequest, + ReloadConfigResponse, + RenameFileRequest, + RenameFileResponse, + RestoreGitCommitRequest, + RestoreGitCommitResponse, + ShareConversationRequest, + ShareConversationResponse, + UnpackEmptyRequest, + UnpackEmptyResponse, + UnpackExampleRequest, + UnpackExampleResponse, +} from "../../../proto/gen/rill/runtime/v1/api_pb"; + +/** + * Raw RPC call: RuntimeService.Ping + */ +export function runtimeServicePing( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.ping( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServicePingQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "ping", instanceId, request ?? {}] as const; +} + +export function getRuntimeServicePingQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServicePingQueryKey(client.instanceId, request); + const queryFn: QueryFunction = ({ signal }) => + runtimeServicePing(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServicePing( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServicePingQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.Health + */ +export function runtimeServiceHealth( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.health( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceHealthQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "health", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceHealthQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceHealthQueryKey(client.instanceId, request); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceHealth(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceHealth( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceHealthQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.InstanceHealth + */ +export function runtimeServiceInstanceHealth( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.instanceHealth( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceInstanceHealthQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "instanceHealth", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceInstanceHealthQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceInstanceHealthQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceInstanceHealth(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceInstanceHealth( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceInstanceHealthQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListInstances + */ +export function runtimeServiceListInstances( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listInstances( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListInstancesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listInstances", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListInstancesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListInstancesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListInstances(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListInstances( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListInstancesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetInstance + */ +export function runtimeServiceGetInstance( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getInstance( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetInstanceQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "getInstance", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceGetInstanceQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetInstanceQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetInstance(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetInstance( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetInstanceQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListFiles + */ +export function runtimeServiceListFiles( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listFiles( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListFilesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "listFiles", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceListFilesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListFilesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListFiles(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListFiles( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListFilesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetFile + */ +export function runtimeServiceGetFile( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getFile( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetFileQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "getFile", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceGetFileQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetFileQueryKey(client.instanceId, request); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetFile(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetFile( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetFileQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListExamples + */ +export function runtimeServiceListExamples( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listExamples( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListExamplesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "listExamples", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceListExamplesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListExamplesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListExamples(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListExamples( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListExamplesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.QueryResolver + */ +export function runtimeServiceQueryResolver( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.queryResolver( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceQueryResolverQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "queryResolver", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceQueryResolverQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceQueryResolverQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceQueryResolver(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceQueryResolver( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceQueryResolverQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetLogs + */ +export function runtimeServiceGetLogs( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getLogs( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetLogsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "getLogs", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceGetLogsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetLogsQueryKey(client.instanceId, request); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetLogs(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetLogs( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetLogsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListResources + */ +export function runtimeServiceListResources( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listResources( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListResourcesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listResources", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListResourcesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListResourcesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListResources(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListResources( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListResourcesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetResource + */ +export function runtimeServiceGetResource( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getResource( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetResourceQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "getResource", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceGetResourceQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetResourceQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetResource(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetResource( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetResourceQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetExplore + */ +export function runtimeServiceGetExplore( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getExplore( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetExploreQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "getExplore", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceGetExploreQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetExploreQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetExplore(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetExplore( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetExploreQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetModelPartitions + */ +export function runtimeServiceGetModelPartitions( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getModelPartitions( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetModelPartitionsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "getModelPartitions", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceGetModelPartitionsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetModelPartitionsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetModelPartitions(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetModelPartitions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetModelPartitionsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListConnectorDrivers + */ +export function runtimeServiceListConnectorDrivers( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listConnectorDrivers( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListConnectorDriversQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listConnectorDrivers", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListConnectorDriversQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListConnectorDriversQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListConnectorDrivers(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListConnectorDrivers( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListConnectorDriversQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.AnalyzeConnectors + */ +export function runtimeServiceAnalyzeConnectors( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.analyzeConnectors( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceAnalyzeConnectorsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "analyzeConnectors", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceAnalyzeConnectorsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceAnalyzeConnectorsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceAnalyzeConnectors(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceAnalyzeConnectors( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceAnalyzeConnectorsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListNotifierConnectors + */ +export function runtimeServiceListNotifierConnectors( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listNotifierConnectors( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListNotifierConnectorsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listNotifierConnectors", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListNotifierConnectorsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListNotifierConnectorsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListNotifierConnectors(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListNotifierConnectors( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListNotifierConnectorsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListConversations + */ +export function runtimeServiceListConversations( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listConversations( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListConversationsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listConversations", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListConversationsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListConversationsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListConversations(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListConversations( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListConversationsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.GetConversation + */ +export function runtimeServiceGetConversation( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.getConversation( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceGetConversationQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "getConversation", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceGetConversationQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceGetConversationQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceGetConversation(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceGetConversation( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceGetConversationQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListTools + */ +export function runtimeServiceListTools( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listTools( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListToolsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "listTools", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceListToolsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListToolsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListTools(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListTools( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListToolsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.IssueDevJWT + */ +export function runtimeServiceIssueDevJWT( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.issueDevJWT( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceIssueDevJWTQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return ["RuntimeService", "issueDevJWT", instanceId, request ?? {}] as const; +} + +export function getRuntimeServiceIssueDevJWTQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceIssueDevJWTQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceIssueDevJWT(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceIssueDevJWT( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceIssueDevJWTQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.AnalyzeVariables + */ +export function runtimeServiceAnalyzeVariables( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.analyzeVariables( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceAnalyzeVariablesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "analyzeVariables", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceAnalyzeVariablesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceAnalyzeVariablesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceAnalyzeVariables(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceAnalyzeVariables( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceAnalyzeVariablesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListGitCommits + */ +export function runtimeServiceListGitCommits( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listGitCommits( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListGitCommitsQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listGitCommits", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListGitCommitsQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListGitCommitsQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListGitCommits(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListGitCommits( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListGitCommitsQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call: RuntimeService.ListGitBranches + */ +export function runtimeServiceListGitBranches( + client: RuntimeClient, + request: PartialMessage>, + options?: { signal?: AbortSignal }, +): Promise { + return client.runtimeService.listGitBranches( + { instanceId: client.instanceId, ...request }, + { signal: options?.signal }, + ); +} + +export function getRuntimeServiceListGitBranchesQueryKey( + instanceId: string, + request?: PartialMessage>, +): QueryKey { + return [ + "RuntimeService", + "listGitBranches", + instanceId, + request ?? {}, + ] as const; +} + +export function getRuntimeServiceListGitBranchesQueryOptions( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, +): CreateQueryOptions & { queryKey: QueryKey } { + const queryKey = getRuntimeServiceListGitBranchesQueryKey( + client.instanceId, + request, + ); + const queryFn: QueryFunction = ({ signal }) => + runtimeServiceListGitBranches(client, request, { signal }); + return { + queryKey, + queryFn, + enabled: !!client.instanceId, + ...options?.query, + }; +} + +export function createRuntimeServiceListGitBranches( + client: RuntimeClient, + request: PartialMessage>, + options?: { + query?: Partial>; + }, + queryClient?: QueryClient, +): CreateQueryResult { + const queryOptions = getRuntimeServiceListGitBranchesQueryOptions( + client, + request, + options, + ); + return createQuery(queryOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.CreateInstance + */ +export function runtimeServiceCreateInstance( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.createInstance({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceCreateInstanceMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CreateInstanceResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + CreateInstanceResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceCreateInstance(client, request), + ...options, + }; +} + +export function createRuntimeServiceCreateInstanceMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CreateInstanceResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + CreateInstanceResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceCreateInstanceMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.EditInstance + */ +export function runtimeServiceEditInstance( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.editInstance({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceEditInstanceMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + EditInstanceResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + EditInstanceResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceEditInstance(client, request), + ...options, + }; +} + +export function createRuntimeServiceEditInstanceMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + EditInstanceResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + EditInstanceResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceEditInstanceMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.DeleteInstance + */ +export function runtimeServiceDeleteInstance( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.deleteInstance({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceDeleteInstanceMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + DeleteInstanceResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + DeleteInstanceResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceDeleteInstance(client, request), + ...options, + }; +} + +export function createRuntimeServiceDeleteInstanceMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + DeleteInstanceResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + DeleteInstanceResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceDeleteInstanceMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.ReloadConfig + */ +export function runtimeServiceReloadConfig( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.reloadConfig({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceReloadConfigMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ReloadConfigResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + ReloadConfigResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceReloadConfig(client, request), + ...options, + }; +} + +export function createRuntimeServiceReloadConfigMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ReloadConfigResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + ReloadConfigResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceReloadConfigMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.PutFile + */ +export function runtimeServicePutFile( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.putFile({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServicePutFileMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + PutFileResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + PutFileResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServicePutFile(client, request), + ...options, + }; +} + +export function createRuntimeServicePutFileMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + PutFileResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + PutFileResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServicePutFileMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.CreateDirectory + */ +export function runtimeServiceCreateDirectory( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.createDirectory({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceCreateDirectoryMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CreateDirectoryResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + CreateDirectoryResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceCreateDirectory(client, request), + ...options, + }; +} + +export function createRuntimeServiceCreateDirectoryMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CreateDirectoryResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + CreateDirectoryResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceCreateDirectoryMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.DeleteFile + */ +export function runtimeServiceDeleteFile( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.deleteFile({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceDeleteFileMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + DeleteFileResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + DeleteFileResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceDeleteFile(client, request), + ...options, + }; +} + +export function createRuntimeServiceDeleteFileMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + DeleteFileResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + DeleteFileResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceDeleteFileMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.RenameFile + */ +export function runtimeServiceRenameFile( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.renameFile({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceRenameFileMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + RenameFileResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + RenameFileResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceRenameFile(client, request), + ...options, + }; +} + +export function createRuntimeServiceRenameFileMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + RenameFileResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + RenameFileResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceRenameFileMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.UnpackExample + */ +export function runtimeServiceUnpackExample( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.unpackExample({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceUnpackExampleMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + UnpackExampleResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + UnpackExampleResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceUnpackExample(client, request), + ...options, + }; +} + +export function createRuntimeServiceUnpackExampleMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + UnpackExampleResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + UnpackExampleResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceUnpackExampleMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.UnpackEmpty + */ +export function runtimeServiceUnpackEmpty( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.unpackEmpty({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceUnpackEmptyMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + UnpackEmptyResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + UnpackEmptyResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceUnpackEmpty(client, request), + ...options, + }; +} + +export function createRuntimeServiceUnpackEmptyMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + UnpackEmptyResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + UnpackEmptyResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceUnpackEmptyMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GenerateMetricsViewFile + */ +export function runtimeServiceGenerateMetricsViewFile( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.generateMetricsViewFile({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGenerateMetricsViewFileMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateMetricsViewFileResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GenerateMetricsViewFileResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => + runtimeServiceGenerateMetricsViewFile(client, request), + ...options, + }; +} + +export function createRuntimeServiceGenerateMetricsViewFileMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateMetricsViewFileResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GenerateMetricsViewFileResponse, + unknown, + PartialMessage> +> { + const mutationOptions = + getRuntimeServiceGenerateMetricsViewFileMutationOptions(client, options); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GenerateCanvasFile + */ +export function runtimeServiceGenerateCanvasFile( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.generateCanvasFile({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGenerateCanvasFileMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateCanvasFileResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GenerateCanvasFileResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGenerateCanvasFile(client, request), + ...options, + }; +} + +export function createRuntimeServiceGenerateCanvasFileMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateCanvasFileResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GenerateCanvasFileResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGenerateCanvasFileMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GenerateResolver + */ +export function runtimeServiceGenerateResolver( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.generateResolver({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGenerateResolverMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateResolverResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GenerateResolverResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGenerateResolver(client, request), + ...options, + }; +} + +export function createRuntimeServiceGenerateResolverMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateResolverResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GenerateResolverResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGenerateResolverMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GenerateRenderer + */ +export function runtimeServiceGenerateRenderer( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.generateRenderer({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGenerateRendererMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateRendererResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GenerateRendererResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGenerateRenderer(client, request), + ...options, + }; +} + +export function createRuntimeServiceGenerateRendererMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GenerateRendererResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GenerateRendererResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGenerateRendererMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.CreateTrigger + */ +export function runtimeServiceCreateTrigger( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.createTrigger({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceCreateTriggerMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CreateTriggerResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + CreateTriggerResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceCreateTrigger(client, request), + ...options, + }; +} + +export function createRuntimeServiceCreateTriggerMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CreateTriggerResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + CreateTriggerResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceCreateTriggerMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.ShareConversation + */ +export function runtimeServiceShareConversation( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.shareConversation({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceShareConversationMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ShareConversationResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + ShareConversationResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceShareConversation(client, request), + ...options, + }; +} + +export function createRuntimeServiceShareConversationMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ShareConversationResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + ShareConversationResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceShareConversationMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.ForkConversation + */ +export function runtimeServiceForkConversation( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.forkConversation({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceForkConversationMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ForkConversationResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + ForkConversationResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceForkConversation(client, request), + ...options, + }; +} + +export function createRuntimeServiceForkConversationMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + ForkConversationResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + ForkConversationResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceForkConversationMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.Complete + */ +export function runtimeServiceComplete( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.complete({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceCompleteMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CompleteResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + CompleteResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceComplete(client, request), + ...options, + }; +} + +export function createRuntimeServiceCompleteMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + CompleteResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + CompleteResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceCompleteMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GitStatus + */ +export function runtimeServiceGitStatus( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.gitStatus({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGitStatusMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitStatusResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GitStatusResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGitStatus(client, request), + ...options, + }; +} + +export function createRuntimeServiceGitStatusMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitStatusResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GitStatusResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGitStatusMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GitCommit + */ +export function runtimeServiceGitCommit( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.gitCommit({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGitCommitMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitCommitResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GitCommitResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGitCommit(client, request), + ...options, + }; +} + +export function createRuntimeServiceGitCommitMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitCommitResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GitCommitResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGitCommitMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.RestoreGitCommit + */ +export function runtimeServiceRestoreGitCommit( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.restoreGitCommit({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceRestoreGitCommitMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + RestoreGitCommitResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + RestoreGitCommitResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceRestoreGitCommit(client, request), + ...options, + }; +} + +export function createRuntimeServiceRestoreGitCommitMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + RestoreGitCommitResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + RestoreGitCommitResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceRestoreGitCommitMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GitMergeToBranch + */ +export function runtimeServiceGitMergeToBranch( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.gitMergeToBranch({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGitMergeToBranchMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitMergeToBranchResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GitMergeToBranchResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGitMergeToBranch(client, request), + ...options, + }; +} + +export function createRuntimeServiceGitMergeToBranchMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitMergeToBranchResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GitMergeToBranchResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGitMergeToBranchMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GitSwitchBranch + */ +export function runtimeServiceGitSwitchBranch( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.gitSwitchBranch({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGitSwitchBranchMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitSwitchBranchResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GitSwitchBranchResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGitSwitchBranch(client, request), + ...options, + }; +} + +export function createRuntimeServiceGitSwitchBranchMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitSwitchBranchResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GitSwitchBranchResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGitSwitchBranchMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GitPull + */ +export function runtimeServiceGitPull( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.gitPull({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGitPullMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitPullResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GitPullResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGitPull(client, request), + ...options, + }; +} + +export function createRuntimeServiceGitPullMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitPullResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GitPullResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGitPullMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} + +/** + * Raw RPC call (mutation): RuntimeService.GitPush + */ +export function runtimeServiceGitPush( + client: RuntimeClient, + request: PartialMessage>, +): Promise { + return client.runtimeService.gitPush({ + instanceId: client.instanceId, + ...request, + }); +} + +export function getRuntimeServiceGitPushMutationOptions( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitPushResponse, + unknown, + PartialMessage> + > + >, +): CreateMutationOptions< + GitPushResponse, + unknown, + PartialMessage> +> { + return { + mutationFn: (request) => runtimeServiceGitPush(client, request), + ...options, + }; +} + +export function createRuntimeServiceGitPushMutation( + client: RuntimeClient, + options?: Partial< + CreateMutationOptions< + GitPushResponse, + unknown, + PartialMessage> + > + >, + queryClient?: QueryClient, +): CreateMutationResult< + GitPushResponse, + unknown, + PartialMessage> +> { + const mutationOptions = getRuntimeServiceGitPushMutationOptions( + client, + options, + ); + return createMutation(mutationOptions, queryClient); +} From 8cdc22d856d6f71a52e11afded4621e68f5665d8 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 11:39:27 +0300 Subject: [PATCH 03/78] feat: update invalidation and query matching for dual key formats (Phase 3) Update cache invalidation and query matchers to support both the old URL-path query key format ("/v1/instances/{id}/...") and the new service/method format ("QueryService", "metricsViewAggregation", instanceId, request). This enables incremental migration: as consumers switch from Orval hooks to v2 generated hooks, both key formats are correctly matched for invalidation, profiling, metrics view, and component queries. --- web-common/src/runtime-client/invalidation.ts | 117 ++++++++++++++++-- .../src/runtime-client/query-matcher.ts | 106 +++++++++++++++- 2 files changed, 206 insertions(+), 17 deletions(-) diff --git a/web-common/src/runtime-client/invalidation.ts b/web-common/src/runtime-client/invalidation.ts index 0fe6eca83d1..2a02c660309 100644 --- a/web-common/src/runtime-client/invalidation.ts +++ b/web-common/src/runtime-client/invalidation.ts @@ -6,16 +6,78 @@ import { } from "@rilldata/web-common/runtime-client/query-matcher"; import type { Query, QueryClient } from "@tanstack/svelte-query"; -// invalidation helpers +// --- Query key format helpers --- +// During migration, queries may use either the old URL-path format +// (e.g. ["/v1/instances/{id}/..."]) or the new service/method format +// (e.g. ["QueryService", "metricsViewAggregation", instanceId, request]). + +/** Matches both old and new key formats for a given instanceId. */ +function isRuntimeQueryForInstance( + queryKey: readonly unknown[], + instanceId: string, +): boolean { + // New format: [ServiceName, methodName, instanceId, request] + if (queryKey.length >= 3 && queryKey[2] === instanceId) { + const svc = queryKey[0]; + return ( + svc === "QueryService" || + svc === "RuntimeService" || + svc === "ConnectorService" + ); + } + // Old format: ["/v1/instances/{instanceId}/..."] + return ( + typeof queryKey[0] === "string" && + queryKey[0].startsWith(`/v1/instances/${instanceId}`) + ); +} + +/** Checks if a query key matches a metrics view query (by name). */ +function isMetricsViewQueryKey( + queryKey: readonly unknown[], + metricsViewName: string, +): boolean { + // New format: ["QueryService", "metricsView*", instanceId, { metricsViewName, ... }] + if ( + queryKey[0] === "QueryService" && + typeof queryKey[1] === "string" && + queryKey[1].startsWith("metricsView") + ) { + const request = queryKey[3]; + return ( + typeof request === "object" && + request !== null && + (request as Record).metricsViewName === metricsViewName + ); + } + return false; +} + +/** Checks if a query key matches a component resolve query (by name). */ +function isComponentResolveKey( + queryKey: readonly unknown[], + componentName: string, +): boolean { + // New format: ["QueryService", "resolveComponent", instanceId, { component: name }] + if (queryKey[0] === "QueryService" && queryKey[1] === "resolveComponent") { + const request = queryKey[3]; + return ( + typeof request === "object" && + request !== null && + (request as Record).component === componentName + ); + } + return false; +} + +// --- invalidation helpers --- export function invalidateRuntimeQueries( queryClient: QueryClient, instanceId: string, ) { return queryClient.resetQueries({ - predicate: (query) => - typeof query.queryKey[0] === "string" && - query.queryKey[0].startsWith(`/v1/instances/${instanceId}`), + predicate: (query) => isRuntimeQueryForInstance(query.queryKey, instanceId), }); } @@ -25,10 +87,14 @@ export function isMetricsViewQuery(queryHash: string, metricsViewName: string) { ); return r.test(queryHash); } + export function invalidationForMetricsViewData( query: Query, metricsViewName: string, ) { + // New key format + if (isMetricsViewQueryKey(query.queryKey, metricsViewName)) return true; + // Old key format return ( typeof query.queryKey[0] === "string" && isMetricsViewQuery(query.queryKey[0], metricsViewName) @@ -71,9 +137,21 @@ export async function invalidateAllMetricsViews( // Second, refetch the resource entries (which returns the available dimensions and measures) await queryClient.refetchQueries({ type: "active", - predicate: (query) => - typeof query.queryKey[0] === "string" && - query.queryKey[0].startsWith(`/v1/instances/${instanceId}/resource`), + predicate: (query) => { + const key = query.queryKey; + // New format: ["RuntimeService", "getResource" or "listResources", instanceId, ...] + if ( + key[0] === "RuntimeService" && + (key[1] === "getResource" || key[1] === "listResources") && + key[2] === instanceId + ) + return true; + // Old format + return ( + typeof key[0] === "string" && + key[0].startsWith(`/v1/instances/${instanceId}/resource`) + ); + }, }); // Third, reset queries for all metrics views. This will cause the active queries to refetch. @@ -81,11 +159,20 @@ export async function invalidateAllMetricsViews( // nor `queryClient.invalidateQueries` were working as expected. Perhaps there's a race condition somewhere. void queryClient.resetQueries({ predicate: (query: Query) => { + const key = query.queryKey; + // New format: ["QueryService", "metricsView*", instanceId, ...] + if ( + key[0] === "QueryService" && + typeof key[1] === "string" && + key[1].startsWith("metricsView") && + key[2] === instanceId + ) { + return true; + } + // Old format return ( - typeof query.queryKey[0] === "string" && - query.queryKey[0].startsWith( - `/v1/instances/${instanceId}/queries/metrics-views`, - ) + typeof key[0] === "string" && + key[0].startsWith(`/v1/instances/${instanceId}/queries/metrics-views`) ); }, }); @@ -134,14 +221,18 @@ export async function invalidateComponentData( `/v1/instances/[a-zA-Z0-9-]+/queries/components/${name}/resolve`, ); + const matchesComponent = (query: Query) => + isComponentResolveKey(query.queryKey, name) || + componentAPIRegex.test(query.queryHash); + queryClient.removeQueries({ - predicate: (query) => componentAPIRegex.test(query.queryHash), + predicate: matchesComponent, type: "inactive", }); if (failed) return; return queryClient.resetQueries({ - predicate: (query) => componentAPIRegex.test(query.queryHash), + predicate: matchesComponent, type: "active", }); } diff --git a/web-common/src/runtime-client/query-matcher.ts b/web-common/src/runtime-client/query-matcher.ts index f2d9425f7eb..b9f5aeb92f3 100644 --- a/web-common/src/runtime-client/query-matcher.ts +++ b/web-common/src/runtime-client/query-matcher.ts @@ -2,12 +2,34 @@ import type { Query } from "@tanstack/query-core"; import { ResourceKind } from "../features/entity-management/resource-selectors"; export function isRuntimeQuery(query: Query): boolean { - const [apiPath] = query.queryKey as string[]; - return apiPath.startsWith("/v1/instances/"); + const key = query.queryKey; + // New format: [ServiceName, methodName, instanceId, request] + const svc = key[0]; + if ( + svc === "QueryService" || + svc === "RuntimeService" || + svc === "ConnectorService" + ) { + return true; + } + // Old format: ["/v1/instances/..."] + return typeof svc === "string" && svc.startsWith("/v1/instances/"); } export function isGetResourceMetricsViewQuery(query: Query): boolean { - const [apiPath, queryParams] = query.queryKey; // Renamed for clarity + const key = query.queryKey; + // New format: ["RuntimeService", "getResource", instanceId, { "name.kind": ... }] + if (key[0] === "RuntimeService" && key[1] === "getResource") { + const request = key[3]; + return ( + typeof request === "object" && + request !== null && + (request as Record)["name.kind"] === + ResourceKind.MetricsView + ); + } + // Old format + const [apiPath, queryParams] = key; if ( typeof apiPath !== "string" || typeof queryParams !== "object" || @@ -16,7 +38,8 @@ export function isGetResourceMetricsViewQuery(query: Query): boolean { return false; return ( apiPath.startsWith("/v1/instances/") && - queryParams["name.kind"] === ResourceKind.MetricsView + (queryParams as Record)["name.kind"] === + ResourceKind.MetricsView ); } @@ -42,6 +65,35 @@ export enum QueryRequestType { TableRows = "rows", } +// New format method names that correspond to profiling queries +const profilingMethods = new Set([ + "columnRollupInterval", + "columnTopK", + "columnNullCount", + "columnDescriptiveStatistics", + "columnTimeGrain", + "columnNumericHistogram", + "columnRugHistogram", + "columnTimeRange", + "columnCardinality", + "columnTimeSeries", + "tableCardinality", + "tableColumns", + "tableRows", +]); + +const tableProfilingMethods = new Set([ + "tableCardinality", + "tableColumns", + "tableRows", +]); + +/** Extract the table name from a new-format profiling query's request object */ +function getTableNameFromRequest(request: unknown): string | undefined { + if (typeof request !== "object" || request === null) return undefined; + return (request as Record).tableName as string | undefined; +} + const TableProfilingQuery: Partial> = { [QueryRequestType.TableCardinality]: true, [QueryRequestType.TableColumns]: true, @@ -58,7 +110,33 @@ function isOlapQuery(queryHash: string, name: string) { ); } +function isNewFormatOlapQuery(query: Query, name: string): boolean { + const key = query.queryKey; + if ( + key[0] === "ConnectorService" && + (key[1] === "oLAPGetTable" || key[1] === "oLAPListTables") + ) { + const request = key[3]; + return ( + typeof request === "object" && + request !== null && + (request as Record).table === name + ); + } + return false; +} + export function isProfilingQuery(query: Query, name: string): boolean { + // New format + if ( + query.queryKey[0] === "QueryService" && + profilingMethods.has(query.queryKey[1] as string) + ) { + const tableName = getTableNameFromRequest(query.queryKey[3]); + return tableName === name; + } + if (isNewFormatOlapQuery(query, name)) return true; + // Old format const queryExtractorMatch = ProfilingQueryExtractor.exec(query.queryHash); if (!queryExtractorMatch) return isOlapQuery(query.queryHash, name); @@ -67,6 +145,16 @@ export function isProfilingQuery(query: Query, name: string): boolean { } export function isTableProfilingQuery(query: Query, name: string): boolean { + // New format + if ( + query.queryKey[0] === "QueryService" && + tableProfilingMethods.has(query.queryKey[1] as string) + ) { + const tableName = getTableNameFromRequest(query.queryKey[3]); + return tableName === name; + } + if (isNewFormatOlapQuery(query, name)) return true; + // Old format const queryExtractorMatch = ProfilingQueryExtractor.exec(query.queryHash); if (!queryExtractorMatch) return isOlapQuery(query.queryHash, name); @@ -75,6 +163,16 @@ export function isTableProfilingQuery(query: Query, name: string): boolean { } export function isColumnProfilingQuery(query: Query, name: string) { + // New format + if ( + query.queryKey[0] === "QueryService" && + profilingMethods.has(query.queryKey[1] as string) && + !tableProfilingMethods.has(query.queryKey[1] as string) + ) { + const tableName = getTableNameFromRequest(query.queryKey[3]); + return tableName === name; + } + // Old format const queryExtractorMatch = ProfilingQueryExtractor.exec(query.queryHash); if (!queryExtractorMatch) return false; From 3aaa80dc7f5b9720149d25ab090705173a6b8fdf Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 12:07:30 +0300 Subject: [PATCH 04/78] fix: resolve type errors in generated query hooks The generator was producing `PartialMessage>`, but `Omit<...>` strips the `Message` constraint that `PartialMessage` requires. Fix by swapping to `Omit, "instanceId">`. Also detect at generation time whether each request type actually has an `instanceId` field; methods like `ListInstances` and `IssueDevJWT` don't have it and should not receive auto-injection. --- web-common/scripts/generate-query-hooks.ts | 49 +- .../v2/gen/connector-service.ts | 56 +- .../runtime-client/v2/gen/query-service.ts | 278 +++++----- .../runtime-client/v2/gen/runtime-service.ts | 480 +++++++++--------- 4 files changed, 440 insertions(+), 423 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index d5667e573fe..cd0d86d5450 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -28,7 +28,8 @@ interface ServiceDef { string, { name: string; - I: { typeName: string }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + I: { typeName: string; new (): any }; O: { typeName: string }; kind: MethodKind; } @@ -45,6 +46,8 @@ interface MethodInfo { /** Response message type name (e.g. "MetricsViewAggregationResponse") */ outputType: string; classification: MethodClassification; + /** Whether the request type has an instanceId field */ + hasInstanceId: boolean; } // --- Helpers --- @@ -102,12 +105,15 @@ function extractMethods(service: ServiceDef): MethodInfo[] { const classification = classifyMethod(serviceName, key); if (classification === "skip") continue; + const hasInstanceId = "instanceId" in new method.I(); + methods.push({ methodKey: key, methodName: method.name, inputType: extractShortName(method.I.typeName), outputType: extractShortName(method.O.typeName), classification, + hasInstanceId, }); } @@ -171,14 +177,19 @@ function generateServiceFile(service: ServiceDef): string { // --- Query methods --- for (const m of queryMethods) { - const fnPrefix = `${serviceClientProp.charAt(0).toLowerCase() + serviceClientProp.slice(1)}${pascalCase(m.methodKey)}`; - // Use the same naming convention: serviceName + methodName (e.g. queryServiceMetricsViewAggregation) - const fullName = `${serviceClientProp}${pascalCase(m.methodKey)}`; const keyFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}QueryKey`; const optsFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}QueryOptions`; const hookName = `create${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}`; + // Request type: omit instanceId when the proto message has it (client injects it) + const requestType = m.hasInstanceId + ? `Omit, "instanceId">` + : `PartialMessage<${m.inputType}>`; + const requestSpread = m.hasInstanceId + ? `{ instanceId: client.instanceId, ...request }` + : `request`; + // Tier 1: Raw function lines.push( `/**`, @@ -186,11 +197,11 @@ function generateServiceFile(service: ServiceDef): string { ` */`, `export function ${fullName}(`, ` client: RuntimeClient,`, - ` request: PartialMessage>,`, + ` request: ${requestType},`, ` options?: { signal?: AbortSignal },`, `): Promise<${m.outputType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, - ` { instanceId: client.instanceId, ...request },`, + ` ${requestSpread},`, ` { signal: options?.signal },`, ` );`, `}`, @@ -201,7 +212,7 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${keyFnName}(`, ` instanceId: string,`, - ` request?: PartialMessage>,`, + ` request?: ${requestType},`, `): QueryKey {`, ` return ["${serviceName}", "${m.methodKey}", instanceId, request ?? {}] as const;`, `}`, @@ -212,7 +223,7 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${optsFnName}(`, ` client: RuntimeClient,`, - ` request: PartialMessage>,`, + ` request: ${requestType},`, ` options?: {`, ` query?: Partial>;`, ` },`, @@ -234,7 +245,7 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${hookName}(`, ` client: RuntimeClient,`, - ` request: PartialMessage>,`, + ` request: ${requestType},`, ` options?: {`, ` query?: Partial>;`, ` },`, @@ -253,6 +264,14 @@ function generateServiceFile(service: ServiceDef): string { const mutOptsFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}MutationOptions`; const mutHookName = `create${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}Mutation`; + // Request type: omit instanceId when the proto message has it + const requestType = m.hasInstanceId + ? `Omit, "instanceId">` + : `PartialMessage<${m.inputType}>`; + const requestSpread = m.hasInstanceId + ? `{ instanceId: client.instanceId, ...request }` + : `request`; + // Raw function lines.push( `/**`, @@ -260,10 +279,10 @@ function generateServiceFile(service: ServiceDef): string { ` */`, `export function ${fullName}(`, ` client: RuntimeClient,`, - ` request: PartialMessage>,`, + ` request: ${requestType},`, `): Promise<${m.outputType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, - ` { instanceId: client.instanceId, ...request },`, + ` ${requestSpread},`, ` );`, `}`, ``, @@ -273,8 +292,8 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${mutOptsFnName}(`, ` client: RuntimeClient,`, - ` options?: Partial>>>,`, - `): CreateMutationOptions<${m.outputType}, unknown, PartialMessage>> {`, + ` options?: Partial>,`, + `): CreateMutationOptions<${m.outputType}, unknown, ${requestType}> {`, ` return {`, ` mutationFn: (request) => ${fullName}(client, request),`, ` ...options,`, @@ -287,9 +306,9 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${mutHookName}(`, ` client: RuntimeClient,`, - ` options?: Partial>>>,`, + ` options?: Partial>,`, ` queryClient?: QueryClient,`, - `): CreateMutationResult<${m.outputType}, unknown, PartialMessage>> {`, + `): CreateMutationResult<${m.outputType}, unknown, ${requestType}> {`, ` const mutationOptions = ${mutOptsFnName}(client, options);`, ` return createMutation(mutationOptions, queryClient);`, `}`, diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index f8006491856..ab996a238f9 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -35,7 +35,7 @@ import { */ export function connectorServiceListBuckets( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.listBuckets( @@ -46,7 +46,7 @@ export function connectorServiceListBuckets( export function getConnectorServiceListBucketsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "ConnectorService", @@ -58,7 +58,7 @@ export function getConnectorServiceListBucketsQueryKey( export function getConnectorServiceListBucketsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -79,7 +79,7 @@ export function getConnectorServiceListBucketsQueryOptions( export function createConnectorServiceListBuckets( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -98,7 +98,7 @@ export function createConnectorServiceListBuckets( */ export function connectorServiceListObjects( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.listObjects( @@ -109,7 +109,7 @@ export function connectorServiceListObjects( export function getConnectorServiceListObjectsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "ConnectorService", @@ -121,7 +121,7 @@ export function getConnectorServiceListObjectsQueryKey( export function getConnectorServiceListObjectsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -142,7 +142,7 @@ export function getConnectorServiceListObjectsQueryOptions( export function createConnectorServiceListObjects( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -161,7 +161,7 @@ export function createConnectorServiceListObjects( */ export function connectorServiceOLAPListTables( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.oLAPListTables( @@ -172,7 +172,7 @@ export function connectorServiceOLAPListTables( export function getConnectorServiceOLAPListTablesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "ConnectorService", @@ -184,7 +184,7 @@ export function getConnectorServiceOLAPListTablesQueryKey( export function getConnectorServiceOLAPListTablesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -205,7 +205,7 @@ export function getConnectorServiceOLAPListTablesQueryOptions( export function createConnectorServiceOLAPListTables( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -224,7 +224,7 @@ export function createConnectorServiceOLAPListTables( */ export function connectorServiceOLAPGetTable( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.oLAPGetTable( @@ -235,7 +235,7 @@ export function connectorServiceOLAPGetTable( export function getConnectorServiceOLAPGetTableQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "ConnectorService", @@ -247,7 +247,7 @@ export function getConnectorServiceOLAPGetTableQueryKey( export function getConnectorServiceOLAPGetTableQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -268,7 +268,7 @@ export function getConnectorServiceOLAPGetTableQueryOptions( export function createConnectorServiceOLAPGetTable( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -287,7 +287,7 @@ export function createConnectorServiceOLAPGetTable( */ export function connectorServiceListDatabaseSchemas( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.listDatabaseSchemas( @@ -298,7 +298,7 @@ export function connectorServiceListDatabaseSchemas( export function getConnectorServiceListDatabaseSchemasQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "ConnectorService", @@ -310,7 +310,7 @@ export function getConnectorServiceListDatabaseSchemasQueryKey( export function getConnectorServiceListDatabaseSchemasQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -331,7 +331,7 @@ export function getConnectorServiceListDatabaseSchemasQueryOptions( export function createConnectorServiceListDatabaseSchemas( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -350,7 +350,7 @@ export function createConnectorServiceListDatabaseSchemas( */ export function connectorServiceListTables( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.listTables( @@ -361,14 +361,14 @@ export function connectorServiceListTables( export function getConnectorServiceListTablesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["ConnectorService", "listTables", instanceId, request ?? {}] as const; } export function getConnectorServiceListTablesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -389,7 +389,7 @@ export function getConnectorServiceListTablesQueryOptions( export function createConnectorServiceListTables( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -408,7 +408,7 @@ export function createConnectorServiceListTables( */ export function connectorServiceGetTable( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.connectorService.getTable( @@ -419,14 +419,14 @@ export function connectorServiceGetTable( export function getConnectorServiceGetTableQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["ConnectorService", "getTable", instanceId, request ?? {}] as const; } export function getConnectorServiceGetTableQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -447,7 +447,7 @@ export function getConnectorServiceGetTableQueryOptions( export function createConnectorServiceGetTable( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index 0945495cf0f..3370d890d54 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -83,7 +83,7 @@ import { */ export function queryServiceMetricsViewAggregation( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewAggregation( @@ -94,7 +94,7 @@ export function queryServiceMetricsViewAggregation( export function getQueryServiceMetricsViewAggregationQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -106,7 +106,7 @@ export function getQueryServiceMetricsViewAggregationQueryKey( export function getQueryServiceMetricsViewAggregationQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -127,7 +127,7 @@ export function getQueryServiceMetricsViewAggregationQueryOptions( export function createQueryServiceMetricsViewAggregation( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -146,7 +146,7 @@ export function createQueryServiceMetricsViewAggregation( */ export function queryServiceMetricsViewToplist( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewToplist( @@ -157,7 +157,7 @@ export function queryServiceMetricsViewToplist( export function getQueryServiceMetricsViewToplistQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -169,7 +169,7 @@ export function getQueryServiceMetricsViewToplistQueryKey( export function getQueryServiceMetricsViewToplistQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -190,7 +190,7 @@ export function getQueryServiceMetricsViewToplistQueryOptions( export function createQueryServiceMetricsViewToplist( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -209,7 +209,7 @@ export function createQueryServiceMetricsViewToplist( */ export function queryServiceMetricsViewComparison( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewComparison( @@ -220,7 +220,7 @@ export function queryServiceMetricsViewComparison( export function getQueryServiceMetricsViewComparisonQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -232,7 +232,7 @@ export function getQueryServiceMetricsViewComparisonQueryKey( export function getQueryServiceMetricsViewComparisonQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -253,7 +253,7 @@ export function getQueryServiceMetricsViewComparisonQueryOptions( export function createQueryServiceMetricsViewComparison( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -272,7 +272,7 @@ export function createQueryServiceMetricsViewComparison( */ export function queryServiceMetricsViewTimeSeries( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewTimeSeries( @@ -283,7 +283,7 @@ export function queryServiceMetricsViewTimeSeries( export function getQueryServiceMetricsViewTimeSeriesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -295,7 +295,7 @@ export function getQueryServiceMetricsViewTimeSeriesQueryKey( export function getQueryServiceMetricsViewTimeSeriesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -316,7 +316,7 @@ export function getQueryServiceMetricsViewTimeSeriesQueryOptions( export function createQueryServiceMetricsViewTimeSeries( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -335,7 +335,7 @@ export function createQueryServiceMetricsViewTimeSeries( */ export function queryServiceMetricsViewTotals( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewTotals( @@ -346,7 +346,7 @@ export function queryServiceMetricsViewTotals( export function getQueryServiceMetricsViewTotalsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -358,7 +358,7 @@ export function getQueryServiceMetricsViewTotalsQueryKey( export function getQueryServiceMetricsViewTotalsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -379,7 +379,7 @@ export function getQueryServiceMetricsViewTotalsQueryOptions( export function createQueryServiceMetricsViewTotals( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -398,7 +398,7 @@ export function createQueryServiceMetricsViewTotals( */ export function queryServiceMetricsViewRows( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewRows( @@ -409,7 +409,7 @@ export function queryServiceMetricsViewRows( export function getQueryServiceMetricsViewRowsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -421,7 +421,7 @@ export function getQueryServiceMetricsViewRowsQueryKey( export function getQueryServiceMetricsViewRowsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -442,7 +442,7 @@ export function getQueryServiceMetricsViewRowsQueryOptions( export function createQueryServiceMetricsViewRows( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -461,7 +461,7 @@ export function createQueryServiceMetricsViewRows( */ export function queryServiceMetricsViewTimeRange( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewTimeRange( @@ -472,7 +472,7 @@ export function queryServiceMetricsViewTimeRange( export function getQueryServiceMetricsViewTimeRangeQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -484,7 +484,7 @@ export function getQueryServiceMetricsViewTimeRangeQueryKey( export function getQueryServiceMetricsViewTimeRangeQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -505,7 +505,7 @@ export function getQueryServiceMetricsViewTimeRangeQueryOptions( export function createQueryServiceMetricsViewTimeRange( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -524,7 +524,7 @@ export function createQueryServiceMetricsViewTimeRange( */ export function queryServiceMetricsViewSchema( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewSchema( @@ -535,7 +535,7 @@ export function queryServiceMetricsViewSchema( export function getQueryServiceMetricsViewSchemaQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -547,7 +547,7 @@ export function getQueryServiceMetricsViewSchemaQueryKey( export function getQueryServiceMetricsViewSchemaQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -568,7 +568,7 @@ export function getQueryServiceMetricsViewSchemaQueryOptions( export function createQueryServiceMetricsViewSchema( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -587,7 +587,7 @@ export function createQueryServiceMetricsViewSchema( */ export function queryServiceMetricsViewSearch( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewSearch( @@ -598,7 +598,7 @@ export function queryServiceMetricsViewSearch( export function getQueryServiceMetricsViewSearchQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -610,7 +610,7 @@ export function getQueryServiceMetricsViewSearchQueryKey( export function getQueryServiceMetricsViewSearchQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -631,7 +631,7 @@ export function getQueryServiceMetricsViewSearchQueryOptions( export function createQueryServiceMetricsViewSearch( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -650,7 +650,7 @@ export function createQueryServiceMetricsViewSearch( */ export function queryServiceMetricsViewTimeRanges( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewTimeRanges( @@ -661,7 +661,7 @@ export function queryServiceMetricsViewTimeRanges( export function getQueryServiceMetricsViewTimeRangesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -673,7 +673,7 @@ export function getQueryServiceMetricsViewTimeRangesQueryKey( export function getQueryServiceMetricsViewTimeRangesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -694,7 +694,7 @@ export function getQueryServiceMetricsViewTimeRangesQueryOptions( export function createQueryServiceMetricsViewTimeRanges( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -713,7 +713,7 @@ export function createQueryServiceMetricsViewTimeRanges( */ export function queryServiceMetricsViewAnnotations( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.metricsViewAnnotations( @@ -724,7 +724,7 @@ export function queryServiceMetricsViewAnnotations( export function getQueryServiceMetricsViewAnnotationsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -736,7 +736,7 @@ export function getQueryServiceMetricsViewAnnotationsQueryKey( export function getQueryServiceMetricsViewAnnotationsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -757,7 +757,7 @@ export function getQueryServiceMetricsViewAnnotationsQueryOptions( export function createQueryServiceMetricsViewAnnotations( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -776,8 +776,9 @@ export function createQueryServiceMetricsViewAnnotations( */ export function queryServiceConvertExpressionToMetricsSQL( client: RuntimeClient, - request: PartialMessage< - Omit + request: Omit< + PartialMessage, + "instanceId" >, options?: { signal?: AbortSignal }, ): Promise { @@ -789,8 +790,9 @@ export function queryServiceConvertExpressionToMetricsSQL( export function getQueryServiceConvertExpressionToMetricsSQLQueryKey( instanceId: string, - request?: PartialMessage< - Omit + request?: Omit< + PartialMessage, + "instanceId" >, ): QueryKey { return [ @@ -803,8 +805,9 @@ export function getQueryServiceConvertExpressionToMetricsSQLQueryKey( export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( client: RuntimeClient, - request: PartialMessage< - Omit + request: Omit< + PartialMessage, + "instanceId" >, options?: { query?: Partial>; @@ -829,8 +832,9 @@ export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( export function createQueryServiceConvertExpressionToMetricsSQL( client: RuntimeClient, - request: PartialMessage< - Omit + request: Omit< + PartialMessage, + "instanceId" >, options?: { query?: Partial>; @@ -850,7 +854,7 @@ export function createQueryServiceConvertExpressionToMetricsSQL( */ export function queryServiceResolveCanvas( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.resolveCanvas( @@ -861,14 +865,14 @@ export function queryServiceResolveCanvas( export function getQueryServiceResolveCanvasQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["QueryService", "resolveCanvas", instanceId, request ?? {}] as const; } export function getQueryServiceResolveCanvasQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -889,7 +893,7 @@ export function getQueryServiceResolveCanvasQueryOptions( export function createQueryServiceResolveCanvas( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -908,7 +912,7 @@ export function createQueryServiceResolveCanvas( */ export function queryServiceResolveComponent( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.resolveComponent( @@ -919,7 +923,7 @@ export function queryServiceResolveComponent( export function getQueryServiceResolveComponentQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -931,7 +935,7 @@ export function getQueryServiceResolveComponentQueryKey( export function getQueryServiceResolveComponentQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -952,7 +956,7 @@ export function getQueryServiceResolveComponentQueryOptions( export function createQueryServiceResolveComponent( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -971,7 +975,7 @@ export function createQueryServiceResolveComponent( */ export function queryServiceResolveTemplatedString( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.resolveTemplatedString( @@ -982,7 +986,7 @@ export function queryServiceResolveTemplatedString( export function getQueryServiceResolveTemplatedStringQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -994,7 +998,7 @@ export function getQueryServiceResolveTemplatedStringQueryKey( export function getQueryServiceResolveTemplatedStringQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1015,7 +1019,7 @@ export function getQueryServiceResolveTemplatedStringQueryOptions( export function createQueryServiceResolveTemplatedString( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1034,7 +1038,7 @@ export function createQueryServiceResolveTemplatedString( */ export function queryServiceColumnRollupInterval( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnRollupInterval( @@ -1045,7 +1049,7 @@ export function queryServiceColumnRollupInterval( export function getQueryServiceColumnRollupIntervalQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1057,7 +1061,7 @@ export function getQueryServiceColumnRollupIntervalQueryKey( export function getQueryServiceColumnRollupIntervalQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1078,7 +1082,7 @@ export function getQueryServiceColumnRollupIntervalQueryOptions( export function createQueryServiceColumnRollupInterval( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1097,7 +1101,7 @@ export function createQueryServiceColumnRollupInterval( */ export function queryServiceColumnTopK( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnTopK( @@ -1108,14 +1112,14 @@ export function queryServiceColumnTopK( export function getQueryServiceColumnTopKQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["QueryService", "columnTopK", instanceId, request ?? {}] as const; } export function getQueryServiceColumnTopKQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1136,7 +1140,7 @@ export function getQueryServiceColumnTopKQueryOptions( export function createQueryServiceColumnTopK( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1155,7 +1159,7 @@ export function createQueryServiceColumnTopK( */ export function queryServiceColumnNullCount( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnNullCount( @@ -1166,7 +1170,7 @@ export function queryServiceColumnNullCount( export function getQueryServiceColumnNullCountQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1178,7 +1182,7 @@ export function getQueryServiceColumnNullCountQueryKey( export function getQueryServiceColumnNullCountQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1199,7 +1203,7 @@ export function getQueryServiceColumnNullCountQueryOptions( export function createQueryServiceColumnNullCount( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1218,8 +1222,9 @@ export function createQueryServiceColumnNullCount( */ export function queryServiceColumnDescriptiveStatistics( client: RuntimeClient, - request: PartialMessage< - Omit + request: Omit< + PartialMessage, + "instanceId" >, options?: { signal?: AbortSignal }, ): Promise { @@ -1231,8 +1236,9 @@ export function queryServiceColumnDescriptiveStatistics( export function getQueryServiceColumnDescriptiveStatisticsQueryKey( instanceId: string, - request?: PartialMessage< - Omit + request?: Omit< + PartialMessage, + "instanceId" >, ): QueryKey { return [ @@ -1245,8 +1251,9 @@ export function getQueryServiceColumnDescriptiveStatisticsQueryKey( export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( client: RuntimeClient, - request: PartialMessage< - Omit + request: Omit< + PartialMessage, + "instanceId" >, options?: { query?: Partial>; @@ -1271,8 +1278,9 @@ export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( export function createQueryServiceColumnDescriptiveStatistics( client: RuntimeClient, - request: PartialMessage< - Omit + request: Omit< + PartialMessage, + "instanceId" >, options?: { query?: Partial>; @@ -1292,7 +1300,7 @@ export function createQueryServiceColumnDescriptiveStatistics( */ export function queryServiceColumnTimeGrain( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnTimeGrain( @@ -1303,7 +1311,7 @@ export function queryServiceColumnTimeGrain( export function getQueryServiceColumnTimeGrainQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1315,7 +1323,7 @@ export function getQueryServiceColumnTimeGrainQueryKey( export function getQueryServiceColumnTimeGrainQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1336,7 +1344,7 @@ export function getQueryServiceColumnTimeGrainQueryOptions( export function createQueryServiceColumnTimeGrain( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1355,7 +1363,7 @@ export function createQueryServiceColumnTimeGrain( */ export function queryServiceColumnNumericHistogram( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnNumericHistogram( @@ -1366,7 +1374,7 @@ export function queryServiceColumnNumericHistogram( export function getQueryServiceColumnNumericHistogramQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1378,7 +1386,7 @@ export function getQueryServiceColumnNumericHistogramQueryKey( export function getQueryServiceColumnNumericHistogramQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1399,7 +1407,7 @@ export function getQueryServiceColumnNumericHistogramQueryOptions( export function createQueryServiceColumnNumericHistogram( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1418,7 +1426,7 @@ export function createQueryServiceColumnNumericHistogram( */ export function queryServiceColumnRugHistogram( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnRugHistogram( @@ -1429,7 +1437,7 @@ export function queryServiceColumnRugHistogram( export function getQueryServiceColumnRugHistogramQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1441,7 +1449,7 @@ export function getQueryServiceColumnRugHistogramQueryKey( export function getQueryServiceColumnRugHistogramQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1462,7 +1470,7 @@ export function getQueryServiceColumnRugHistogramQueryOptions( export function createQueryServiceColumnRugHistogram( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1481,7 +1489,7 @@ export function createQueryServiceColumnRugHistogram( */ export function queryServiceColumnTimeRange( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnTimeRange( @@ -1492,7 +1500,7 @@ export function queryServiceColumnTimeRange( export function getQueryServiceColumnTimeRangeQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1504,7 +1512,7 @@ export function getQueryServiceColumnTimeRangeQueryKey( export function getQueryServiceColumnTimeRangeQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1525,7 +1533,7 @@ export function getQueryServiceColumnTimeRangeQueryOptions( export function createQueryServiceColumnTimeRange( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1544,7 +1552,7 @@ export function createQueryServiceColumnTimeRange( */ export function queryServiceColumnCardinality( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnCardinality( @@ -1555,7 +1563,7 @@ export function queryServiceColumnCardinality( export function getQueryServiceColumnCardinalityQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1567,7 +1575,7 @@ export function getQueryServiceColumnCardinalityQueryKey( export function getQueryServiceColumnCardinalityQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1588,7 +1596,7 @@ export function getQueryServiceColumnCardinalityQueryOptions( export function createQueryServiceColumnCardinality( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1607,7 +1615,7 @@ export function createQueryServiceColumnCardinality( */ export function queryServiceColumnTimeSeries( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.columnTimeSeries( @@ -1618,7 +1626,7 @@ export function queryServiceColumnTimeSeries( export function getQueryServiceColumnTimeSeriesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1630,7 +1638,7 @@ export function getQueryServiceColumnTimeSeriesQueryKey( export function getQueryServiceColumnTimeSeriesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1651,7 +1659,7 @@ export function getQueryServiceColumnTimeSeriesQueryOptions( export function createQueryServiceColumnTimeSeries( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1670,7 +1678,7 @@ export function createQueryServiceColumnTimeSeries( */ export function queryServiceTableCardinality( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.tableCardinality( @@ -1681,7 +1689,7 @@ export function queryServiceTableCardinality( export function getQueryServiceTableCardinalityQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "QueryService", @@ -1693,7 +1701,7 @@ export function getQueryServiceTableCardinalityQueryKey( export function getQueryServiceTableCardinalityQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1714,7 +1722,7 @@ export function getQueryServiceTableCardinalityQueryOptions( export function createQueryServiceTableCardinality( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1733,7 +1741,7 @@ export function createQueryServiceTableCardinality( */ export function queryServiceTableColumns( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.tableColumns( @@ -1744,14 +1752,14 @@ export function queryServiceTableColumns( export function getQueryServiceTableColumnsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["QueryService", "tableColumns", instanceId, request ?? {}] as const; } export function getQueryServiceTableColumnsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1772,7 +1780,7 @@ export function getQueryServiceTableColumnsQueryOptions( export function createQueryServiceTableColumns( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1791,7 +1799,7 @@ export function createQueryServiceTableColumns( */ export function queryServiceTableRows( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.queryService.tableRows( @@ -1802,14 +1810,14 @@ export function queryServiceTableRows( export function getQueryServiceTableRowsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["QueryService", "tableRows", instanceId, request ?? {}] as const; } export function getQueryServiceTableRowsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1827,7 +1835,7 @@ export function getQueryServiceTableRowsQueryOptions( export function createQueryServiceTableRows( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1846,7 +1854,7 @@ export function createQueryServiceTableRows( */ export function queryServiceQuery( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.queryService.query({ instanceId: client.instanceId, @@ -1860,13 +1868,13 @@ export function getQueryServiceQueryMutationOptions( CreateMutationOptions< QueryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< QueryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => queryServiceQuery(client, request), @@ -1880,14 +1888,14 @@ export function createQueryServiceQueryMutation( CreateMutationOptions< QueryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< QueryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getQueryServiceQueryMutationOptions(client, options); return createMutation(mutationOptions, queryClient); @@ -1898,7 +1906,7 @@ export function createQueryServiceQueryMutation( */ export function queryServiceExport( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.queryService.export({ instanceId: client.instanceId, @@ -1912,13 +1920,13 @@ export function getQueryServiceExportMutationOptions( CreateMutationOptions< ExportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< ExportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => queryServiceExport(client, request), @@ -1932,14 +1940,14 @@ export function createQueryServiceExportMutation( CreateMutationOptions< ExportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< ExportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getQueryServiceExportMutationOptions(client, options); return createMutation(mutationOptions, queryClient); @@ -1950,7 +1958,7 @@ export function createQueryServiceExportMutation( */ export function queryServiceExportReport( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.queryService.exportReport({ instanceId: client.instanceId, @@ -1964,13 +1972,13 @@ export function getQueryServiceExportReportMutationOptions( CreateMutationOptions< ExportReportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< ExportReportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => queryServiceExportReport(client, request), @@ -1984,14 +1992,14 @@ export function createQueryServiceExportReportMutation( CreateMutationOptions< ExportReportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< ExportReportResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getQueryServiceExportReportMutationOptions( client, diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index 23e1b3db961..9eec39ca3d7 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -119,25 +119,22 @@ import { */ export function runtimeServicePing( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService.ping( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); + return client.runtimeService.ping(request, { signal: options?.signal }); } export function getRuntimeServicePingQueryKey( instanceId: string, - request?: PartialMessage>, + request?: PartialMessage, ): QueryKey { return ["RuntimeService", "ping", instanceId, request ?? {}] as const; } export function getRuntimeServicePingQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -155,7 +152,7 @@ export function getRuntimeServicePingQueryOptions( export function createRuntimeServicePing( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -174,25 +171,22 @@ export function createRuntimeServicePing( */ export function runtimeServiceHealth( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService.health( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); + return client.runtimeService.health(request, { signal: options?.signal }); } export function getRuntimeServiceHealthQueryKey( instanceId: string, - request?: PartialMessage>, + request?: PartialMessage, ): QueryKey { return ["RuntimeService", "health", instanceId, request ?? {}] as const; } export function getRuntimeServiceHealthQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -210,7 +204,7 @@ export function getRuntimeServiceHealthQueryOptions( export function createRuntimeServiceHealth( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -229,7 +223,7 @@ export function createRuntimeServiceHealth( */ export function runtimeServiceInstanceHealth( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.instanceHealth( @@ -240,7 +234,7 @@ export function runtimeServiceInstanceHealth( export function getRuntimeServiceInstanceHealthQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -252,7 +246,7 @@ export function getRuntimeServiceInstanceHealthQueryKey( export function getRuntimeServiceInstanceHealthQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -273,7 +267,7 @@ export function getRuntimeServiceInstanceHealthQueryOptions( export function createRuntimeServiceInstanceHealth( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -292,18 +286,17 @@ export function createRuntimeServiceInstanceHealth( */ export function runtimeServiceListInstances( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService.listInstances( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); + return client.runtimeService.listInstances(request, { + signal: options?.signal, + }); } export function getRuntimeServiceListInstancesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: PartialMessage, ): QueryKey { return [ "RuntimeService", @@ -315,7 +308,7 @@ export function getRuntimeServiceListInstancesQueryKey( export function getRuntimeServiceListInstancesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -336,7 +329,7 @@ export function getRuntimeServiceListInstancesQueryOptions( export function createRuntimeServiceListInstances( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -355,7 +348,7 @@ export function createRuntimeServiceListInstances( */ export function runtimeServiceGetInstance( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getInstance( @@ -366,14 +359,14 @@ export function runtimeServiceGetInstance( export function getRuntimeServiceGetInstanceQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "getInstance", instanceId, request ?? {}] as const; } export function getRuntimeServiceGetInstanceQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -394,7 +387,7 @@ export function getRuntimeServiceGetInstanceQueryOptions( export function createRuntimeServiceGetInstance( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -413,7 +406,7 @@ export function createRuntimeServiceGetInstance( */ export function runtimeServiceListFiles( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listFiles( @@ -424,14 +417,14 @@ export function runtimeServiceListFiles( export function getRuntimeServiceListFilesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "listFiles", instanceId, request ?? {}] as const; } export function getRuntimeServiceListFilesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -452,7 +445,7 @@ export function getRuntimeServiceListFilesQueryOptions( export function createRuntimeServiceListFiles( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -471,7 +464,7 @@ export function createRuntimeServiceListFiles( */ export function runtimeServiceGetFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getFile( @@ -482,14 +475,14 @@ export function runtimeServiceGetFile( export function getRuntimeServiceGetFileQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "getFile", instanceId, request ?? {}] as const; } export function getRuntimeServiceGetFileQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -507,7 +500,7 @@ export function getRuntimeServiceGetFileQueryOptions( export function createRuntimeServiceGetFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -526,25 +519,24 @@ export function createRuntimeServiceGetFile( */ export function runtimeServiceListExamples( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService.listExamples( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); + return client.runtimeService.listExamples(request, { + signal: options?.signal, + }); } export function getRuntimeServiceListExamplesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: PartialMessage, ): QueryKey { return ["RuntimeService", "listExamples", instanceId, request ?? {}] as const; } export function getRuntimeServiceListExamplesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -565,7 +557,7 @@ export function getRuntimeServiceListExamplesQueryOptions( export function createRuntimeServiceListExamples( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -584,7 +576,7 @@ export function createRuntimeServiceListExamples( */ export function runtimeServiceQueryResolver( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.queryResolver( @@ -595,7 +587,7 @@ export function runtimeServiceQueryResolver( export function getRuntimeServiceQueryResolverQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -607,7 +599,7 @@ export function getRuntimeServiceQueryResolverQueryKey( export function getRuntimeServiceQueryResolverQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -628,7 +620,7 @@ export function getRuntimeServiceQueryResolverQueryOptions( export function createRuntimeServiceQueryResolver( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -647,7 +639,7 @@ export function createRuntimeServiceQueryResolver( */ export function runtimeServiceGetLogs( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getLogs( @@ -658,14 +650,14 @@ export function runtimeServiceGetLogs( export function getRuntimeServiceGetLogsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "getLogs", instanceId, request ?? {}] as const; } export function getRuntimeServiceGetLogsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -683,7 +675,7 @@ export function getRuntimeServiceGetLogsQueryOptions( export function createRuntimeServiceGetLogs( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -702,7 +694,7 @@ export function createRuntimeServiceGetLogs( */ export function runtimeServiceListResources( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listResources( @@ -713,7 +705,7 @@ export function runtimeServiceListResources( export function getRuntimeServiceListResourcesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -725,7 +717,7 @@ export function getRuntimeServiceListResourcesQueryKey( export function getRuntimeServiceListResourcesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -746,7 +738,7 @@ export function getRuntimeServiceListResourcesQueryOptions( export function createRuntimeServiceListResources( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -765,7 +757,7 @@ export function createRuntimeServiceListResources( */ export function runtimeServiceGetResource( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getResource( @@ -776,14 +768,14 @@ export function runtimeServiceGetResource( export function getRuntimeServiceGetResourceQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "getResource", instanceId, request ?? {}] as const; } export function getRuntimeServiceGetResourceQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -804,7 +796,7 @@ export function getRuntimeServiceGetResourceQueryOptions( export function createRuntimeServiceGetResource( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -823,7 +815,7 @@ export function createRuntimeServiceGetResource( */ export function runtimeServiceGetExplore( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getExplore( @@ -834,14 +826,14 @@ export function runtimeServiceGetExplore( export function getRuntimeServiceGetExploreQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "getExplore", instanceId, request ?? {}] as const; } export function getRuntimeServiceGetExploreQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -862,7 +854,7 @@ export function getRuntimeServiceGetExploreQueryOptions( export function createRuntimeServiceGetExplore( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -881,7 +873,7 @@ export function createRuntimeServiceGetExplore( */ export function runtimeServiceGetModelPartitions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getModelPartitions( @@ -892,7 +884,7 @@ export function runtimeServiceGetModelPartitions( export function getRuntimeServiceGetModelPartitionsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -904,7 +896,7 @@ export function getRuntimeServiceGetModelPartitionsQueryKey( export function getRuntimeServiceGetModelPartitionsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -925,7 +917,7 @@ export function getRuntimeServiceGetModelPartitionsQueryOptions( export function createRuntimeServiceGetModelPartitions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -944,18 +936,17 @@ export function createRuntimeServiceGetModelPartitions( */ export function runtimeServiceListConnectorDrivers( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService.listConnectorDrivers( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); + return client.runtimeService.listConnectorDrivers(request, { + signal: options?.signal, + }); } export function getRuntimeServiceListConnectorDriversQueryKey( instanceId: string, - request?: PartialMessage>, + request?: PartialMessage, ): QueryKey { return [ "RuntimeService", @@ -967,7 +958,7 @@ export function getRuntimeServiceListConnectorDriversQueryKey( export function getRuntimeServiceListConnectorDriversQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -988,7 +979,7 @@ export function getRuntimeServiceListConnectorDriversQueryOptions( export function createRuntimeServiceListConnectorDrivers( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -1007,7 +998,7 @@ export function createRuntimeServiceListConnectorDrivers( */ export function runtimeServiceAnalyzeConnectors( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.analyzeConnectors( @@ -1018,7 +1009,7 @@ export function runtimeServiceAnalyzeConnectors( export function getRuntimeServiceAnalyzeConnectorsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1030,7 +1021,7 @@ export function getRuntimeServiceAnalyzeConnectorsQueryKey( export function getRuntimeServiceAnalyzeConnectorsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1051,7 +1042,7 @@ export function getRuntimeServiceAnalyzeConnectorsQueryOptions( export function createRuntimeServiceAnalyzeConnectors( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1070,7 +1061,7 @@ export function createRuntimeServiceAnalyzeConnectors( */ export function runtimeServiceListNotifierConnectors( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listNotifierConnectors( @@ -1081,7 +1072,7 @@ export function runtimeServiceListNotifierConnectors( export function getRuntimeServiceListNotifierConnectorsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1093,7 +1084,7 @@ export function getRuntimeServiceListNotifierConnectorsQueryKey( export function getRuntimeServiceListNotifierConnectorsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1114,7 +1105,7 @@ export function getRuntimeServiceListNotifierConnectorsQueryOptions( export function createRuntimeServiceListNotifierConnectors( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1133,7 +1124,7 @@ export function createRuntimeServiceListNotifierConnectors( */ export function runtimeServiceListConversations( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listConversations( @@ -1144,7 +1135,7 @@ export function runtimeServiceListConversations( export function getRuntimeServiceListConversationsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1156,7 +1147,7 @@ export function getRuntimeServiceListConversationsQueryKey( export function getRuntimeServiceListConversationsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1177,7 +1168,7 @@ export function getRuntimeServiceListConversationsQueryOptions( export function createRuntimeServiceListConversations( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1196,7 +1187,7 @@ export function createRuntimeServiceListConversations( */ export function runtimeServiceGetConversation( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.getConversation( @@ -1207,7 +1198,7 @@ export function runtimeServiceGetConversation( export function getRuntimeServiceGetConversationQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1219,7 +1210,7 @@ export function getRuntimeServiceGetConversationQueryKey( export function getRuntimeServiceGetConversationQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1240,7 +1231,7 @@ export function getRuntimeServiceGetConversationQueryOptions( export function createRuntimeServiceGetConversation( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1259,7 +1250,7 @@ export function createRuntimeServiceGetConversation( */ export function runtimeServiceListTools( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listTools( @@ -1270,14 +1261,14 @@ export function runtimeServiceListTools( export function getRuntimeServiceListToolsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return ["RuntimeService", "listTools", instanceId, request ?? {}] as const; } export function getRuntimeServiceListToolsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1298,7 +1289,7 @@ export function getRuntimeServiceListToolsQueryOptions( export function createRuntimeServiceListTools( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1317,25 +1308,24 @@ export function createRuntimeServiceListTools( */ export function runtimeServiceIssueDevJWT( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService.issueDevJWT( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); + return client.runtimeService.issueDevJWT(request, { + signal: options?.signal, + }); } export function getRuntimeServiceIssueDevJWTQueryKey( instanceId: string, - request?: PartialMessage>, + request?: PartialMessage, ): QueryKey { return ["RuntimeService", "issueDevJWT", instanceId, request ?? {}] as const; } export function getRuntimeServiceIssueDevJWTQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -1356,7 +1346,7 @@ export function getRuntimeServiceIssueDevJWTQueryOptions( export function createRuntimeServiceIssueDevJWT( client: RuntimeClient, - request: PartialMessage>, + request: PartialMessage, options?: { query?: Partial>; }, @@ -1375,7 +1365,7 @@ export function createRuntimeServiceIssueDevJWT( */ export function runtimeServiceAnalyzeVariables( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.analyzeVariables( @@ -1386,7 +1376,7 @@ export function runtimeServiceAnalyzeVariables( export function getRuntimeServiceAnalyzeVariablesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1398,7 +1388,7 @@ export function getRuntimeServiceAnalyzeVariablesQueryKey( export function getRuntimeServiceAnalyzeVariablesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1419,7 +1409,7 @@ export function getRuntimeServiceAnalyzeVariablesQueryOptions( export function createRuntimeServiceAnalyzeVariables( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1438,7 +1428,7 @@ export function createRuntimeServiceAnalyzeVariables( */ export function runtimeServiceListGitCommits( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listGitCommits( @@ -1449,7 +1439,7 @@ export function runtimeServiceListGitCommits( export function getRuntimeServiceListGitCommitsQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1461,7 +1451,7 @@ export function getRuntimeServiceListGitCommitsQueryKey( export function getRuntimeServiceListGitCommitsQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1482,7 +1472,7 @@ export function getRuntimeServiceListGitCommitsQueryOptions( export function createRuntimeServiceListGitCommits( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1501,7 +1491,7 @@ export function createRuntimeServiceListGitCommits( */ export function runtimeServiceListGitBranches( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService.listGitBranches( @@ -1512,7 +1502,7 @@ export function runtimeServiceListGitBranches( export function getRuntimeServiceListGitBranchesQueryKey( instanceId: string, - request?: PartialMessage>, + request?: Omit, "instanceId">, ): QueryKey { return [ "RuntimeService", @@ -1524,7 +1514,7 @@ export function getRuntimeServiceListGitBranchesQueryKey( export function getRuntimeServiceListGitBranchesQueryOptions( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1545,7 +1535,7 @@ export function getRuntimeServiceListGitBranchesQueryOptions( export function createRuntimeServiceListGitBranches( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, options?: { query?: Partial>; }, @@ -1564,7 +1554,7 @@ export function createRuntimeServiceListGitBranches( */ export function runtimeServiceCreateInstance( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.createInstance({ instanceId: client.instanceId, @@ -1578,13 +1568,13 @@ export function getRuntimeServiceCreateInstanceMutationOptions( CreateMutationOptions< CreateInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< CreateInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceCreateInstance(client, request), @@ -1598,14 +1588,14 @@ export function createRuntimeServiceCreateInstanceMutation( CreateMutationOptions< CreateInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< CreateInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceCreateInstanceMutationOptions( client, @@ -1619,7 +1609,7 @@ export function createRuntimeServiceCreateInstanceMutation( */ export function runtimeServiceEditInstance( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.editInstance({ instanceId: client.instanceId, @@ -1633,13 +1623,13 @@ export function getRuntimeServiceEditInstanceMutationOptions( CreateMutationOptions< EditInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< EditInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceEditInstance(client, request), @@ -1653,14 +1643,14 @@ export function createRuntimeServiceEditInstanceMutation( CreateMutationOptions< EditInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< EditInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceEditInstanceMutationOptions( client, @@ -1674,7 +1664,7 @@ export function createRuntimeServiceEditInstanceMutation( */ export function runtimeServiceDeleteInstance( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.deleteInstance({ instanceId: client.instanceId, @@ -1688,13 +1678,13 @@ export function getRuntimeServiceDeleteInstanceMutationOptions( CreateMutationOptions< DeleteInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< DeleteInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceDeleteInstance(client, request), @@ -1708,14 +1698,14 @@ export function createRuntimeServiceDeleteInstanceMutation( CreateMutationOptions< DeleteInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< DeleteInstanceResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceDeleteInstanceMutationOptions( client, @@ -1729,7 +1719,7 @@ export function createRuntimeServiceDeleteInstanceMutation( */ export function runtimeServiceReloadConfig( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.reloadConfig({ instanceId: client.instanceId, @@ -1743,13 +1733,13 @@ export function getRuntimeServiceReloadConfigMutationOptions( CreateMutationOptions< ReloadConfigResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< ReloadConfigResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceReloadConfig(client, request), @@ -1763,14 +1753,14 @@ export function createRuntimeServiceReloadConfigMutation( CreateMutationOptions< ReloadConfigResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< ReloadConfigResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceReloadConfigMutationOptions( client, @@ -1784,7 +1774,7 @@ export function createRuntimeServiceReloadConfigMutation( */ export function runtimeServicePutFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.putFile({ instanceId: client.instanceId, @@ -1798,13 +1788,13 @@ export function getRuntimeServicePutFileMutationOptions( CreateMutationOptions< PutFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< PutFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServicePutFile(client, request), @@ -1818,14 +1808,14 @@ export function createRuntimeServicePutFileMutation( CreateMutationOptions< PutFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< PutFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServicePutFileMutationOptions( client, @@ -1839,7 +1829,7 @@ export function createRuntimeServicePutFileMutation( */ export function runtimeServiceCreateDirectory( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.createDirectory({ instanceId: client.instanceId, @@ -1853,13 +1843,13 @@ export function getRuntimeServiceCreateDirectoryMutationOptions( CreateMutationOptions< CreateDirectoryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< CreateDirectoryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceCreateDirectory(client, request), @@ -1873,14 +1863,14 @@ export function createRuntimeServiceCreateDirectoryMutation( CreateMutationOptions< CreateDirectoryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< CreateDirectoryResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceCreateDirectoryMutationOptions( client, @@ -1894,7 +1884,7 @@ export function createRuntimeServiceCreateDirectoryMutation( */ export function runtimeServiceDeleteFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.deleteFile({ instanceId: client.instanceId, @@ -1908,13 +1898,13 @@ export function getRuntimeServiceDeleteFileMutationOptions( CreateMutationOptions< DeleteFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< DeleteFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceDeleteFile(client, request), @@ -1928,14 +1918,14 @@ export function createRuntimeServiceDeleteFileMutation( CreateMutationOptions< DeleteFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< DeleteFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceDeleteFileMutationOptions( client, @@ -1949,7 +1939,7 @@ export function createRuntimeServiceDeleteFileMutation( */ export function runtimeServiceRenameFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.renameFile({ instanceId: client.instanceId, @@ -1963,13 +1953,13 @@ export function getRuntimeServiceRenameFileMutationOptions( CreateMutationOptions< RenameFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< RenameFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceRenameFile(client, request), @@ -1983,14 +1973,14 @@ export function createRuntimeServiceRenameFileMutation( CreateMutationOptions< RenameFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< RenameFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceRenameFileMutationOptions( client, @@ -2004,7 +1994,7 @@ export function createRuntimeServiceRenameFileMutation( */ export function runtimeServiceUnpackExample( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.unpackExample({ instanceId: client.instanceId, @@ -2018,13 +2008,13 @@ export function getRuntimeServiceUnpackExampleMutationOptions( CreateMutationOptions< UnpackExampleResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< UnpackExampleResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceUnpackExample(client, request), @@ -2038,14 +2028,14 @@ export function createRuntimeServiceUnpackExampleMutation( CreateMutationOptions< UnpackExampleResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< UnpackExampleResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceUnpackExampleMutationOptions( client, @@ -2059,7 +2049,7 @@ export function createRuntimeServiceUnpackExampleMutation( */ export function runtimeServiceUnpackEmpty( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.unpackEmpty({ instanceId: client.instanceId, @@ -2073,13 +2063,13 @@ export function getRuntimeServiceUnpackEmptyMutationOptions( CreateMutationOptions< UnpackEmptyResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< UnpackEmptyResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceUnpackEmpty(client, request), @@ -2093,14 +2083,14 @@ export function createRuntimeServiceUnpackEmptyMutation( CreateMutationOptions< UnpackEmptyResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< UnpackEmptyResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceUnpackEmptyMutationOptions( client, @@ -2114,7 +2104,7 @@ export function createRuntimeServiceUnpackEmptyMutation( */ export function runtimeServiceGenerateMetricsViewFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.generateMetricsViewFile({ instanceId: client.instanceId, @@ -2128,13 +2118,13 @@ export function getRuntimeServiceGenerateMetricsViewFileMutationOptions( CreateMutationOptions< GenerateMetricsViewFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GenerateMetricsViewFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => @@ -2149,14 +2139,14 @@ export function createRuntimeServiceGenerateMetricsViewFileMutation( CreateMutationOptions< GenerateMetricsViewFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GenerateMetricsViewFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGenerateMetricsViewFileMutationOptions(client, options); @@ -2168,7 +2158,7 @@ export function createRuntimeServiceGenerateMetricsViewFileMutation( */ export function runtimeServiceGenerateCanvasFile( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.generateCanvasFile({ instanceId: client.instanceId, @@ -2182,13 +2172,13 @@ export function getRuntimeServiceGenerateCanvasFileMutationOptions( CreateMutationOptions< GenerateCanvasFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GenerateCanvasFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGenerateCanvasFile(client, request), @@ -2202,14 +2192,14 @@ export function createRuntimeServiceGenerateCanvasFileMutation( CreateMutationOptions< GenerateCanvasFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GenerateCanvasFileResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGenerateCanvasFileMutationOptions( client, @@ -2223,7 +2213,7 @@ export function createRuntimeServiceGenerateCanvasFileMutation( */ export function runtimeServiceGenerateResolver( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.generateResolver({ instanceId: client.instanceId, @@ -2237,13 +2227,13 @@ export function getRuntimeServiceGenerateResolverMutationOptions( CreateMutationOptions< GenerateResolverResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GenerateResolverResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGenerateResolver(client, request), @@ -2257,14 +2247,14 @@ export function createRuntimeServiceGenerateResolverMutation( CreateMutationOptions< GenerateResolverResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GenerateResolverResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGenerateResolverMutationOptions( client, @@ -2278,7 +2268,7 @@ export function createRuntimeServiceGenerateResolverMutation( */ export function runtimeServiceGenerateRenderer( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.generateRenderer({ instanceId: client.instanceId, @@ -2292,13 +2282,13 @@ export function getRuntimeServiceGenerateRendererMutationOptions( CreateMutationOptions< GenerateRendererResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GenerateRendererResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGenerateRenderer(client, request), @@ -2312,14 +2302,14 @@ export function createRuntimeServiceGenerateRendererMutation( CreateMutationOptions< GenerateRendererResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GenerateRendererResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGenerateRendererMutationOptions( client, @@ -2333,7 +2323,7 @@ export function createRuntimeServiceGenerateRendererMutation( */ export function runtimeServiceCreateTrigger( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.createTrigger({ instanceId: client.instanceId, @@ -2347,13 +2337,13 @@ export function getRuntimeServiceCreateTriggerMutationOptions( CreateMutationOptions< CreateTriggerResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< CreateTriggerResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceCreateTrigger(client, request), @@ -2367,14 +2357,14 @@ export function createRuntimeServiceCreateTriggerMutation( CreateMutationOptions< CreateTriggerResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< CreateTriggerResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceCreateTriggerMutationOptions( client, @@ -2388,7 +2378,7 @@ export function createRuntimeServiceCreateTriggerMutation( */ export function runtimeServiceShareConversation( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.shareConversation({ instanceId: client.instanceId, @@ -2402,13 +2392,13 @@ export function getRuntimeServiceShareConversationMutationOptions( CreateMutationOptions< ShareConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< ShareConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceShareConversation(client, request), @@ -2422,14 +2412,14 @@ export function createRuntimeServiceShareConversationMutation( CreateMutationOptions< ShareConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< ShareConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceShareConversationMutationOptions( client, @@ -2443,7 +2433,7 @@ export function createRuntimeServiceShareConversationMutation( */ export function runtimeServiceForkConversation( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.forkConversation({ instanceId: client.instanceId, @@ -2457,13 +2447,13 @@ export function getRuntimeServiceForkConversationMutationOptions( CreateMutationOptions< ForkConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< ForkConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceForkConversation(client, request), @@ -2477,14 +2467,14 @@ export function createRuntimeServiceForkConversationMutation( CreateMutationOptions< ForkConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< ForkConversationResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceForkConversationMutationOptions( client, @@ -2498,7 +2488,7 @@ export function createRuntimeServiceForkConversationMutation( */ export function runtimeServiceComplete( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.complete({ instanceId: client.instanceId, @@ -2512,13 +2502,13 @@ export function getRuntimeServiceCompleteMutationOptions( CreateMutationOptions< CompleteResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< CompleteResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceComplete(client, request), @@ -2532,14 +2522,14 @@ export function createRuntimeServiceCompleteMutation( CreateMutationOptions< CompleteResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< CompleteResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceCompleteMutationOptions( client, @@ -2553,7 +2543,7 @@ export function createRuntimeServiceCompleteMutation( */ export function runtimeServiceGitStatus( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.gitStatus({ instanceId: client.instanceId, @@ -2567,13 +2557,13 @@ export function getRuntimeServiceGitStatusMutationOptions( CreateMutationOptions< GitStatusResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GitStatusResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGitStatus(client, request), @@ -2587,14 +2577,14 @@ export function createRuntimeServiceGitStatusMutation( CreateMutationOptions< GitStatusResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GitStatusResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGitStatusMutationOptions( client, @@ -2608,7 +2598,7 @@ export function createRuntimeServiceGitStatusMutation( */ export function runtimeServiceGitCommit( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.gitCommit({ instanceId: client.instanceId, @@ -2622,13 +2612,13 @@ export function getRuntimeServiceGitCommitMutationOptions( CreateMutationOptions< GitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGitCommit(client, request), @@ -2642,14 +2632,14 @@ export function createRuntimeServiceGitCommitMutation( CreateMutationOptions< GitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGitCommitMutationOptions( client, @@ -2663,7 +2653,7 @@ export function createRuntimeServiceGitCommitMutation( */ export function runtimeServiceRestoreGitCommit( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.restoreGitCommit({ instanceId: client.instanceId, @@ -2677,13 +2667,13 @@ export function getRuntimeServiceRestoreGitCommitMutationOptions( CreateMutationOptions< RestoreGitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< RestoreGitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceRestoreGitCommit(client, request), @@ -2697,14 +2687,14 @@ export function createRuntimeServiceRestoreGitCommitMutation( CreateMutationOptions< RestoreGitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< RestoreGitCommitResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceRestoreGitCommitMutationOptions( client, @@ -2718,7 +2708,7 @@ export function createRuntimeServiceRestoreGitCommitMutation( */ export function runtimeServiceGitMergeToBranch( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.gitMergeToBranch({ instanceId: client.instanceId, @@ -2732,13 +2722,13 @@ export function getRuntimeServiceGitMergeToBranchMutationOptions( CreateMutationOptions< GitMergeToBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GitMergeToBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGitMergeToBranch(client, request), @@ -2752,14 +2742,14 @@ export function createRuntimeServiceGitMergeToBranchMutation( CreateMutationOptions< GitMergeToBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GitMergeToBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGitMergeToBranchMutationOptions( client, @@ -2773,7 +2763,7 @@ export function createRuntimeServiceGitMergeToBranchMutation( */ export function runtimeServiceGitSwitchBranch( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.gitSwitchBranch({ instanceId: client.instanceId, @@ -2787,13 +2777,13 @@ export function getRuntimeServiceGitSwitchBranchMutationOptions( CreateMutationOptions< GitSwitchBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GitSwitchBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGitSwitchBranch(client, request), @@ -2807,14 +2797,14 @@ export function createRuntimeServiceGitSwitchBranchMutation( CreateMutationOptions< GitSwitchBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GitSwitchBranchResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGitSwitchBranchMutationOptions( client, @@ -2828,7 +2818,7 @@ export function createRuntimeServiceGitSwitchBranchMutation( */ export function runtimeServiceGitPull( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.gitPull({ instanceId: client.instanceId, @@ -2842,13 +2832,13 @@ export function getRuntimeServiceGitPullMutationOptions( CreateMutationOptions< GitPullResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GitPullResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGitPull(client, request), @@ -2862,14 +2852,14 @@ export function createRuntimeServiceGitPullMutation( CreateMutationOptions< GitPullResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GitPullResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGitPullMutationOptions( client, @@ -2883,7 +2873,7 @@ export function createRuntimeServiceGitPullMutation( */ export function runtimeServiceGitPush( client: RuntimeClient, - request: PartialMessage>, + request: Omit, "instanceId">, ): Promise { return client.runtimeService.gitPush({ instanceId: client.instanceId, @@ -2897,13 +2887,13 @@ export function getRuntimeServiceGitPushMutationOptions( CreateMutationOptions< GitPushResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, ): CreateMutationOptions< GitPushResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { return { mutationFn: (request) => runtimeServiceGitPush(client, request), @@ -2917,14 +2907,14 @@ export function createRuntimeServiceGitPushMutation( CreateMutationOptions< GitPushResponse, unknown, - PartialMessage> + Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< GitPushResponse, unknown, - PartialMessage> + Omit, "instanceId"> > { const mutationOptions = getRuntimeServiceGitPushMutationOptions( client, From 366c809532b5a836b309b03462ceb527d18ad60a Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 12:34:01 +0300 Subject: [PATCH 05/78] fix: prevent reactive loop in runtime store bridge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When RuntimeProvider calls setRuntime with no JWT (local dev), the equality check compared authContext ("user") against current.jwt?.authContext (undefined), always returning false. This caused the store to emit a new value on every call, triggering an infinite reactive loop: RuntimeProvider bridge → store update → layout re-render → bridge again. Fix by treating JWT as unchanged when both old and new JWT are absent, regardless of authContext. --- web-common/src/runtime-client/runtime-store.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/web-common/src/runtime-client/runtime-store.ts b/web-common/src/runtime-client/runtime-store.ts index ea2ddce7de5..dba748f1a7e 100644 --- a/web-common/src/runtime-client/runtime-store.ts +++ b/web-common/src/runtime-client/runtime-store.ts @@ -44,11 +44,14 @@ const createRuntimeStore = () => { update((current) => { // Don't update the store if the values have not changed // (especially, don't update the JWT `receivedAt`) + const jwtUnchanged = jwt + ? jwt === current.jwt?.token && + authContext === current.jwt?.authContext + : !current.jwt; if ( host === current.host && instanceId === current.instanceId && - jwt === current.jwt?.token && - authContext === current.jwt?.authContext + jwtUnchanged ) { return current; } From 13adf06be65472aa0cf1cc800f8797a1ac7102d5 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 14:13:15 +0300 Subject: [PATCH 06/78] feat: add JSON bridge to v2 code generator (Phase 4) Generated hooks now accept/return Orval-compatible types (V1*) in their public API, converting to/from proto internally via fromJson/toJson. This lets consumers switch to v2 hooks without changing their existing type usage (V1Expression, V1Resource, etc.). The generator reads the Orval schemas file at generation time to determine which V1 types exist. Response types always use V1 (100% coverage). Request types use V1 when available (~25%, POST endpoints) and fall back to PartialMessage for GET endpoints. --- web-common/scripts/generate-query-hooks.ts | 132 +- .../v2/gen/connector-service.ts | 193 +-- .../runtime-client/v2/gen/query-service.ts | 1058 ++++++++------ .../runtime-client/v2/gen/runtime-service.ts | 1246 ++++++++++------- 4 files changed, 1572 insertions(+), 1057 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index cd0d86d5450..7a1c8a08e44 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -90,6 +90,38 @@ function getProtoImportPath(serviceName: string): string { return `../../../proto/gen/rill/runtime/v1/${fileMap[serviceName]}`; } +// --- JSON bridge: Orval type helpers --- + +/** Read Orval schemas to discover available V1 types at generation time */ +const orvalSchemaPath = path.resolve( + __dirname, + "../src/runtime-client/gen/index.schemas.ts", +); +const orvalSchemaContent = fs.readFileSync(orvalSchemaPath, "utf-8"); +const availableOrvalTypes = new Set(); +for (const match of orvalSchemaContent.matchAll( + /^export (?:type|interface) (\w+)/gm, +)) { + availableOrvalTypes.add(match[1]); +} + +const ORVAL_IMPORT_PATH = "../../gen/index.schemas"; + +function orvalTypeName(protoTypeName: string): string { + return `V1${protoTypeName}`; +} + +function hasOrvalType(protoTypeName: string): boolean { + return availableOrvalTypes.has(orvalTypeName(protoTypeName)); +} + +/** Get the public-facing type for a request or response */ +function publicType(protoTypeName: string): string { + return hasOrvalType(protoTypeName) + ? orvalTypeName(protoTypeName) + : `PartialMessage<${protoTypeName}>`; +} + // --- Method extraction --- function extractMethods(service: ServiceDef): MethodInfo[] { @@ -133,11 +165,26 @@ function generateServiceFile(service: ServiceDef): string { (m) => m.classification === "mutation", ); - // Collect all request/response types we need to import + // Collect proto types (value imports; needed for fromJson/toJson calls) const protoTypes = new Set(); + // Collect Orval types (type-only imports; used in public API signatures) + const orvalTypes = new Set(); + // Track whether PartialMessage is needed (for request types without V1 counterparts) + let needsPartialMessage = false; + for (const m of methods) { protoTypes.add(m.inputType); - protoTypes.add(m.outputType); + + if (hasOrvalType(m.inputType)) { + orvalTypes.add(orvalTypeName(m.inputType)); + } else { + needsPartialMessage = true; + // Still need proto type for PartialMessage<> reference + } + + if (hasOrvalType(m.outputType)) { + orvalTypes.add(orvalTypeName(m.outputType)); + } } const lines: string[] = []; @@ -146,9 +193,14 @@ function generateServiceFile(service: ServiceDef): string { lines.push(`// Generated by generate-query-hooks.ts — DO NOT EDIT`); lines.push(``); lines.push(`import type { RuntimeClient } from "../runtime-client";`); + + // @bufbuild/protobuf imports (JsonValue always needed; PartialMessage conditional) + const bufImports: string[] = ["JsonValue"]; + if (needsPartialMessage) bufImports.unshift("PartialMessage"); lines.push( - `import type { PartialMessage } from "@bufbuild/protobuf";`, + `import type { ${bufImports.join(", ")} } from "@bufbuild/protobuf";`, ); + lines.push( `import {`, ` createQuery,`, @@ -163,12 +215,24 @@ function generateServiceFile(service: ServiceDef): string { `} from "@tanstack/svelte-query";`, ); - // Proto type imports - const sortedTypes = [...protoTypes].sort(); + // Orval type imports (type-only; for public API signatures) + if (orvalTypes.size > 0) { + const sortedOrval = [...orvalTypes].sort(); + lines.push( + `import type {`, + ...sortedOrval.map( + (t, i) => ` ${t}${i < sortedOrval.length - 1 ? "," : ""}`, + ), + `} from "${ORVAL_IMPORT_PATH}";`, + ); + } + + // Proto type imports (value imports; needed for fromJson calls) + const sortedProto = [...protoTypes].sort(); lines.push( `import {`, - ...sortedTypes.map((t, i) => - ` ${t}${i < sortedTypes.length - 1 ? "," : ""}`, + ...sortedProto.map( + (t, i) => ` ${t}${i < sortedProto.length - 1 ? "," : ""}`, ), `} from "${protoImportPath}";`, ); @@ -182,15 +246,19 @@ function generateServiceFile(service: ServiceDef): string { const optsFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}QueryOptions`; const hookName = `create${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}`; - // Request type: omit instanceId when the proto message has it (client injects it) + // Public-facing request type (V1 Orval when available, PartialMessage fallback) + const inputPublic = publicType(m.inputType); const requestType = m.hasInstanceId - ? `Omit, "instanceId">` - : `PartialMessage<${m.inputType}>`; + ? `Omit<${inputPublic}, "instanceId">` + : inputPublic; const requestSpread = m.hasInstanceId ? `{ instanceId: client.instanceId, ...request }` : `request`; - // Tier 1: Raw function + // Public-facing response type (always V1 Orval) + const responseType = publicType(m.outputType); + + // Tier 1: Raw function (JSON bridge: fromJson on input, toJson on output) lines.push( `/**`, ` * Raw RPC call: ${serviceName}.${m.methodName}`, @@ -199,11 +267,11 @@ function generateServiceFile(service: ServiceDef): string { ` client: RuntimeClient,`, ` request: ${requestType},`, ` options?: { signal?: AbortSignal },`, - `): Promise<${m.outputType}> {`, + `): Promise<${responseType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, - ` ${requestSpread},`, + ` ${m.inputType}.fromJson(${requestSpread} as unknown as JsonValue),`, ` { signal: options?.signal },`, - ` );`, + ` ).then(r => r.toJson() as unknown as ${responseType});`, `}`, ``, ); @@ -225,11 +293,11 @@ function generateServiceFile(service: ServiceDef): string { ` client: RuntimeClient,`, ` request: ${requestType},`, ` options?: {`, - ` query?: Partial>;`, + ` query?: Partial>;`, ` },`, - `): CreateQueryOptions<${m.outputType}> & { queryKey: QueryKey } {`, + `): CreateQueryOptions<${responseType}> & { queryKey: QueryKey } {`, ` const queryKey = ${keyFnName}(client.instanceId, request);`, - ` const queryFn: QueryFunction<${m.outputType}> = ({ signal }) =>`, + ` const queryFn: QueryFunction<${responseType}> = ({ signal }) =>`, ` ${fullName}(client, request, { signal });`, ` return {`, ` queryKey,`, @@ -247,10 +315,10 @@ function generateServiceFile(service: ServiceDef): string { ` client: RuntimeClient,`, ` request: ${requestType},`, ` options?: {`, - ` query?: Partial>;`, + ` query?: Partial>;`, ` },`, ` queryClient?: QueryClient,`, - `): CreateQueryResult<${m.outputType}> {`, + `): CreateQueryResult<${responseType}> {`, ` const queryOptions = ${optsFnName}(client, request, options);`, ` return createQuery(queryOptions, queryClient);`, `}`, @@ -264,15 +332,19 @@ function generateServiceFile(service: ServiceDef): string { const mutOptsFnName = `get${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}MutationOptions`; const mutHookName = `create${pascalCase(serviceClientProp)}${pascalCase(m.methodKey)}Mutation`; - // Request type: omit instanceId when the proto message has it + // Public-facing request type (V1 Orval when available, PartialMessage fallback) + const inputPublic = publicType(m.inputType); const requestType = m.hasInstanceId - ? `Omit, "instanceId">` - : `PartialMessage<${m.inputType}>`; + ? `Omit<${inputPublic}, "instanceId">` + : inputPublic; const requestSpread = m.hasInstanceId ? `{ instanceId: client.instanceId, ...request }` : `request`; - // Raw function + // Public-facing response type (always V1 Orval) + const responseType = publicType(m.outputType); + + // Raw function (JSON bridge: fromJson on input, toJson on output) lines.push( `/**`, ` * Raw RPC call (mutation): ${serviceName}.${m.methodName}`, @@ -280,10 +352,10 @@ function generateServiceFile(service: ServiceDef): string { `export function ${fullName}(`, ` client: RuntimeClient,`, ` request: ${requestType},`, - `): Promise<${m.outputType}> {`, + `): Promise<${responseType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, - ` ${requestSpread},`, - ` );`, + ` ${m.inputType}.fromJson(${requestSpread} as unknown as JsonValue),`, + ` ).then(r => r.toJson() as unknown as ${responseType});`, `}`, ``, ); @@ -292,8 +364,8 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${mutOptsFnName}(`, ` client: RuntimeClient,`, - ` options?: Partial>,`, - `): CreateMutationOptions<${m.outputType}, unknown, ${requestType}> {`, + ` options?: Partial>,`, + `): CreateMutationOptions<${responseType}, unknown, ${requestType}> {`, ` return {`, ` mutationFn: (request) => ${fullName}(client, request),`, ` ...options,`, @@ -306,9 +378,9 @@ function generateServiceFile(service: ServiceDef): string { lines.push( `export function ${mutHookName}(`, ` client: RuntimeClient,`, - ` options?: Partial>,`, + ` options?: Partial>,`, ` queryClient?: QueryClient,`, - `): CreateMutationResult<${m.outputType}, unknown, ${requestType}> {`, + `): CreateMutationResult<${responseType}, unknown, ${requestType}> {`, ` const mutationOptions = ${mutOptsFnName}(client, options);`, ` return createMutation(mutationOptions, queryClient);`, `}`, diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index ab996a238f9..5d7fb9087b8 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -1,7 +1,7 @@ // Generated by generate-query-hooks.ts — DO NOT EDIT import type { RuntimeClient } from "../runtime-client"; -import type { PartialMessage } from "@bufbuild/protobuf"; +import type { PartialMessage, JsonValue } from "@bufbuild/protobuf"; import { createQuery, createMutation, @@ -13,21 +13,23 @@ import { type CreateMutationOptions, type CreateMutationResult, } from "@tanstack/svelte-query"; +import type { + V1GetTableResponse, + V1ListBucketsResponse, + V1ListDatabaseSchemasResponse, + V1ListObjectsResponse, + V1ListTablesResponse, + V1OLAPGetTableResponse, + V1OLAPListTablesResponse, +} from "../../gen/index.schemas"; import { GetTableRequest, - GetTableResponse, ListBucketsRequest, - ListBucketsResponse, ListDatabaseSchemasRequest, - ListDatabaseSchemasResponse, ListObjectsRequest, - ListObjectsResponse, ListTablesRequest, - ListTablesResponse, OLAPGetTableRequest, - OLAPGetTableResponse, OLAPListTablesRequest, - OLAPListTablesResponse, } from "../../../proto/gen/rill/runtime/v1/connectors_pb"; /** @@ -37,11 +39,16 @@ export function connectorServiceListBuckets( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.listBuckets( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .listBuckets( + ListBucketsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListBucketsResponse); } export function getConnectorServiceListBucketsQueryKey( @@ -60,14 +67,14 @@ export function getConnectorServiceListBucketsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceListBucketsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceListBuckets(client, request, { signal }); return { queryKey, @@ -81,10 +88,10 @@ export function createConnectorServiceListBuckets( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListBucketsQueryOptions( client, request, @@ -100,11 +107,16 @@ export function connectorServiceListObjects( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.listObjects( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .listObjects( + ListObjectsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListObjectsResponse); } export function getConnectorServiceListObjectsQueryKey( @@ -123,14 +135,14 @@ export function getConnectorServiceListObjectsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceListObjectsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceListObjects(client, request, { signal }); return { queryKey, @@ -144,10 +156,10 @@ export function createConnectorServiceListObjects( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListObjectsQueryOptions( client, request, @@ -163,11 +175,16 @@ export function connectorServiceOLAPListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.oLAPListTables( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .oLAPListTables( + OLAPListTablesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1OLAPListTablesResponse); } export function getConnectorServiceOLAPListTablesQueryKey( @@ -186,14 +203,14 @@ export function getConnectorServiceOLAPListTablesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceOLAPListTablesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceOLAPListTables(client, request, { signal }); return { queryKey, @@ -207,10 +224,10 @@ export function createConnectorServiceOLAPListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceOLAPListTablesQueryOptions( client, request, @@ -226,11 +243,16 @@ export function connectorServiceOLAPGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.oLAPGetTable( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .oLAPGetTable( + OLAPGetTableRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1OLAPGetTableResponse); } export function getConnectorServiceOLAPGetTableQueryKey( @@ -249,14 +271,14 @@ export function getConnectorServiceOLAPGetTableQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceOLAPGetTableQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceOLAPGetTable(client, request, { signal }); return { queryKey, @@ -270,10 +292,10 @@ export function createConnectorServiceOLAPGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceOLAPGetTableQueryOptions( client, request, @@ -289,11 +311,16 @@ export function connectorServiceListDatabaseSchemas( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.listDatabaseSchemas( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .listDatabaseSchemas( + ListDatabaseSchemasRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListDatabaseSchemasResponse); } export function getConnectorServiceListDatabaseSchemasQueryKey( @@ -312,14 +339,14 @@ export function getConnectorServiceListDatabaseSchemasQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceListDatabaseSchemasQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceListDatabaseSchemas(client, request, { signal }); return { queryKey, @@ -333,10 +360,10 @@ export function createConnectorServiceListDatabaseSchemas( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListDatabaseSchemasQueryOptions( client, request, @@ -352,11 +379,16 @@ export function connectorServiceListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.listTables( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .listTables( + ListTablesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListTablesResponse); } export function getConnectorServiceListTablesQueryKey( @@ -370,14 +402,14 @@ export function getConnectorServiceListTablesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceListTablesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceListTables(client, request, { signal }); return { queryKey, @@ -391,10 +423,10 @@ export function createConnectorServiceListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListTablesQueryOptions( client, request, @@ -410,11 +442,16 @@ export function connectorServiceGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.connectorService.getTable( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.connectorService + .getTable( + GetTableRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetTableResponse); } export function getConnectorServiceGetTableQueryKey( @@ -428,14 +465,14 @@ export function getConnectorServiceGetTableQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getConnectorServiceGetTableQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => connectorServiceGetTable(client, request, { signal }); return { queryKey, @@ -449,10 +486,10 @@ export function createConnectorServiceGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceGetTableQueryOptions( client, request, diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index 3370d890d54..084ddfe39b3 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -1,7 +1,7 @@ // Generated by generate-query-hooks.ts — DO NOT EDIT import type { RuntimeClient } from "../runtime-client"; -import type { PartialMessage } from "@bufbuild/protobuf"; +import type { PartialMessage, JsonValue } from "@bufbuild/protobuf"; import { createQuery, createMutation, @@ -13,69 +13,90 @@ import { type CreateMutationOptions, type CreateMutationResult, } from "@tanstack/svelte-query"; +import type { + V1ColumnCardinalityRequest, + V1ColumnCardinalityResponse, + V1ColumnDescriptiveStatisticsRequest, + V1ColumnDescriptiveStatisticsResponse, + V1ColumnNullCountRequest, + V1ColumnNullCountResponse, + V1ColumnNumericHistogramRequest, + V1ColumnNumericHistogramResponse, + V1ColumnRollupIntervalRequest, + V1ColumnRollupIntervalResponse, + V1ColumnRugHistogramRequest, + V1ColumnRugHistogramResponse, + V1ColumnTimeGrainRequest, + V1ColumnTimeGrainResponse, + V1ColumnTimeRangeRequest, + V1ColumnTimeRangeResponse, + V1ColumnTimeSeriesRequest, + V1ColumnTimeSeriesResponse, + V1ColumnTopKRequest, + V1ColumnTopKResponse, + V1ConvertExpressionToMetricsSQLResponse, + V1ExportReportResponse, + V1ExportResponse, + V1MetricsViewAggregationRequest, + V1MetricsViewAggregationResponse, + V1MetricsViewAnnotationsResponse, + V1MetricsViewComparisonRequest, + V1MetricsViewComparisonResponse, + V1MetricsViewRowsRequest, + V1MetricsViewRowsResponse, + V1MetricsViewSchemaResponse, + V1MetricsViewSearchResponse, + V1MetricsViewTimeRangeResponse, + V1MetricsViewTimeRangesResponse, + V1MetricsViewTimeSeriesRequest, + V1MetricsViewTimeSeriesResponse, + V1MetricsViewToplistRequest, + V1MetricsViewToplistResponse, + V1MetricsViewTotalsRequest, + V1MetricsViewTotalsResponse, + V1QueryResponse, + V1ResolveCanvasResponse, + V1ResolveComponentResponse, + V1ResolveTemplatedStringResponse, + V1TableCardinalityRequest, + V1TableCardinalityResponse, + V1TableColumnsRequest, + V1TableColumnsResponse, + V1TableRowsRequest, + V1TableRowsResponse, +} from "../../gen/index.schemas"; import { ColumnCardinalityRequest, - ColumnCardinalityResponse, ColumnDescriptiveStatisticsRequest, - ColumnDescriptiveStatisticsResponse, ColumnNullCountRequest, - ColumnNullCountResponse, ColumnNumericHistogramRequest, - ColumnNumericHistogramResponse, ColumnRollupIntervalRequest, - ColumnRollupIntervalResponse, ColumnRugHistogramRequest, - ColumnRugHistogramResponse, ColumnTimeGrainRequest, - ColumnTimeGrainResponse, ColumnTimeRangeRequest, - ColumnTimeRangeResponse, ColumnTimeSeriesRequest, - ColumnTimeSeriesResponse, ColumnTopKRequest, - ColumnTopKResponse, ConvertExpressionToMetricsSQLRequest, - ConvertExpressionToMetricsSQLResponse, ExportReportRequest, - ExportReportResponse, ExportRequest, - ExportResponse, MetricsViewAggregationRequest, - MetricsViewAggregationResponse, MetricsViewAnnotationsRequest, - MetricsViewAnnotationsResponse, MetricsViewComparisonRequest, - MetricsViewComparisonResponse, MetricsViewRowsRequest, - MetricsViewRowsResponse, MetricsViewSchemaRequest, - MetricsViewSchemaResponse, MetricsViewSearchRequest, - MetricsViewSearchResponse, MetricsViewTimeRangeRequest, - MetricsViewTimeRangeResponse, MetricsViewTimeRangesRequest, - MetricsViewTimeRangesResponse, MetricsViewTimeSeriesRequest, - MetricsViewTimeSeriesResponse, MetricsViewToplistRequest, - MetricsViewToplistResponse, MetricsViewTotalsRequest, - MetricsViewTotalsResponse, QueryRequest, - QueryResponse, ResolveCanvasRequest, - ResolveCanvasResponse, ResolveComponentRequest, - ResolveComponentResponse, ResolveTemplatedStringRequest, - ResolveTemplatedStringResponse, TableCardinalityRequest, - TableCardinalityResponse, TableColumnsRequest, - TableColumnsResponse, TableRowsRequest, - TableRowsResponse, } from "../../../proto/gen/rill/runtime/v1/queries_pb"; /** @@ -83,18 +104,23 @@ import { */ export function queryServiceMetricsViewAggregation( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewAggregation( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewAggregation( + MetricsViewAggregationRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewAggregationResponse); } export function getQueryServiceMetricsViewAggregationQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -106,17 +132,20 @@ export function getQueryServiceMetricsViewAggregationQueryKey( export function getQueryServiceMetricsViewAggregationQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewAggregationQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceMetricsViewAggregation(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceMetricsViewAggregation(client, request, { signal }); return { queryKey, queryFn, @@ -127,12 +156,12 @@ export function getQueryServiceMetricsViewAggregationQueryOptions( export function createQueryServiceMetricsViewAggregation( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewAggregationQueryOptions( client, request, @@ -146,18 +175,23 @@ export function createQueryServiceMetricsViewAggregation( */ export function queryServiceMetricsViewToplist( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewToplist( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewToplist( + MetricsViewToplistRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewToplistResponse); } export function getQueryServiceMetricsViewToplistQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -169,16 +203,16 @@ export function getQueryServiceMetricsViewToplistQueryKey( export function getQueryServiceMetricsViewToplistQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceMetricsViewToplistQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceMetricsViewToplist(client, request, { signal }); return { queryKey, @@ -190,12 +224,12 @@ export function getQueryServiceMetricsViewToplistQueryOptions( export function createQueryServiceMetricsViewToplist( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewToplistQueryOptions( client, request, @@ -209,18 +243,23 @@ export function createQueryServiceMetricsViewToplist( */ export function queryServiceMetricsViewComparison( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewComparison( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewComparison( + MetricsViewComparisonRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewComparisonResponse); } export function getQueryServiceMetricsViewComparisonQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -232,17 +271,20 @@ export function getQueryServiceMetricsViewComparisonQueryKey( export function getQueryServiceMetricsViewComparisonQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewComparisonQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceMetricsViewComparison(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceMetricsViewComparison(client, request, { signal }); return { queryKey, queryFn, @@ -253,12 +295,12 @@ export function getQueryServiceMetricsViewComparisonQueryOptions( export function createQueryServiceMetricsViewComparison( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewComparisonQueryOptions( client, request, @@ -272,18 +314,23 @@ export function createQueryServiceMetricsViewComparison( */ export function queryServiceMetricsViewTimeSeries( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewTimeSeries( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewTimeSeries( + MetricsViewTimeSeriesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewTimeSeriesResponse); } export function getQueryServiceMetricsViewTimeSeriesQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -295,17 +342,20 @@ export function getQueryServiceMetricsViewTimeSeriesQueryKey( export function getQueryServiceMetricsViewTimeSeriesQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewTimeSeriesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceMetricsViewTimeSeries(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceMetricsViewTimeSeries(client, request, { signal }); return { queryKey, queryFn, @@ -316,12 +366,12 @@ export function getQueryServiceMetricsViewTimeSeriesQueryOptions( export function createQueryServiceMetricsViewTimeSeries( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTimeSeriesQueryOptions( client, request, @@ -335,18 +385,23 @@ export function createQueryServiceMetricsViewTimeSeries( */ export function queryServiceMetricsViewTotals( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewTotals( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewTotals( + MetricsViewTotalsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewTotalsResponse); } export function getQueryServiceMetricsViewTotalsQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -358,16 +413,16 @@ export function getQueryServiceMetricsViewTotalsQueryKey( export function getQueryServiceMetricsViewTotalsQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceMetricsViewTotalsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceMetricsViewTotals(client, request, { signal }); return { queryKey, @@ -379,12 +434,12 @@ export function getQueryServiceMetricsViewTotalsQueryOptions( export function createQueryServiceMetricsViewTotals( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTotalsQueryOptions( client, request, @@ -398,18 +453,23 @@ export function createQueryServiceMetricsViewTotals( */ export function queryServiceMetricsViewRows( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewRows( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewRows( + MetricsViewRowsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewRowsResponse); } export function getQueryServiceMetricsViewRowsQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -421,16 +481,16 @@ export function getQueryServiceMetricsViewRowsQueryKey( export function getQueryServiceMetricsViewRowsQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceMetricsViewRowsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceMetricsViewRows(client, request, { signal }); return { queryKey, @@ -442,12 +502,12 @@ export function getQueryServiceMetricsViewRowsQueryOptions( export function createQueryServiceMetricsViewRows( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewRowsQueryOptions( client, request, @@ -463,11 +523,16 @@ export function queryServiceMetricsViewTimeRange( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewTimeRange( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewTimeRange( + MetricsViewTimeRangeRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewTimeRangeResponse); } export function getQueryServiceMetricsViewTimeRangeQueryKey( @@ -486,14 +551,14 @@ export function getQueryServiceMetricsViewTimeRangeQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceMetricsViewTimeRangeQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceMetricsViewTimeRange(client, request, { signal }); return { queryKey, @@ -507,10 +572,10 @@ export function createQueryServiceMetricsViewTimeRange( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTimeRangeQueryOptions( client, request, @@ -526,11 +591,16 @@ export function queryServiceMetricsViewSchema( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewSchema( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewSchema( + MetricsViewSchemaRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewSchemaResponse); } export function getQueryServiceMetricsViewSchemaQueryKey( @@ -549,14 +619,14 @@ export function getQueryServiceMetricsViewSchemaQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceMetricsViewSchemaQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceMetricsViewSchema(client, request, { signal }); return { queryKey, @@ -570,10 +640,10 @@ export function createQueryServiceMetricsViewSchema( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewSchemaQueryOptions( client, request, @@ -589,11 +659,16 @@ export function queryServiceMetricsViewSearch( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewSearch( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewSearch( + MetricsViewSearchRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewSearchResponse); } export function getQueryServiceMetricsViewSearchQueryKey( @@ -612,14 +687,14 @@ export function getQueryServiceMetricsViewSearchQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceMetricsViewSearchQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceMetricsViewSearch(client, request, { signal }); return { queryKey, @@ -633,10 +708,10 @@ export function createQueryServiceMetricsViewSearch( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewSearchQueryOptions( client, request, @@ -652,11 +727,16 @@ export function queryServiceMetricsViewTimeRanges( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewTimeRanges( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewTimeRanges( + MetricsViewTimeRangesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewTimeRangesResponse); } export function getQueryServiceMetricsViewTimeRangesQueryKey( @@ -675,15 +755,18 @@ export function getQueryServiceMetricsViewTimeRangesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewTimeRangesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceMetricsViewTimeRanges(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceMetricsViewTimeRanges(client, request, { signal }); return { queryKey, queryFn, @@ -696,10 +779,10 @@ export function createQueryServiceMetricsViewTimeRanges( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTimeRangesQueryOptions( client, request, @@ -715,11 +798,16 @@ export function queryServiceMetricsViewAnnotations( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.metricsViewAnnotations( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .metricsViewAnnotations( + MetricsViewAnnotationsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1MetricsViewAnnotationsResponse); } export function getQueryServiceMetricsViewAnnotationsQueryKey( @@ -738,15 +826,18 @@ export function getQueryServiceMetricsViewAnnotationsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewAnnotationsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceMetricsViewAnnotations(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceMetricsViewAnnotations(client, request, { signal }); return { queryKey, queryFn, @@ -759,10 +850,10 @@ export function createQueryServiceMetricsViewAnnotations( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewAnnotationsQueryOptions( client, request, @@ -781,11 +872,18 @@ export function queryServiceConvertExpressionToMetricsSQL( "instanceId" >, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.convertExpressionToMetricsSQL( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .convertExpressionToMetricsSQL( + ConvertExpressionToMetricsSQLRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then( + (r) => r.toJson() as unknown as V1ConvertExpressionToMetricsSQLResponse, + ); } export function getQueryServiceConvertExpressionToMetricsSQLQueryKey( @@ -810,16 +908,18 @@ export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( "instanceId" >, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceConvertExpressionToMetricsSQLQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ + const queryFn: QueryFunction = ({ signal, }) => queryServiceConvertExpressionToMetricsSQL(client, request, { signal }); return { @@ -837,10 +937,12 @@ export function createQueryServiceConvertExpressionToMetricsSQL( "instanceId" >, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceConvertExpressionToMetricsSQLQueryOptions( client, request, @@ -856,11 +958,16 @@ export function queryServiceResolveCanvas( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.resolveCanvas( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .resolveCanvas( + ResolveCanvasRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ResolveCanvasResponse); } export function getQueryServiceResolveCanvasQueryKey( @@ -874,14 +981,14 @@ export function getQueryServiceResolveCanvasQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceResolveCanvasQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceResolveCanvas(client, request, { signal }); return { queryKey, @@ -895,10 +1002,10 @@ export function createQueryServiceResolveCanvas( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceResolveCanvasQueryOptions( client, request, @@ -914,11 +1021,16 @@ export function queryServiceResolveComponent( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.resolveComponent( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .resolveComponent( + ResolveComponentRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ResolveComponentResponse); } export function getQueryServiceResolveComponentQueryKey( @@ -937,14 +1049,14 @@ export function getQueryServiceResolveComponentQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceResolveComponentQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceResolveComponent(client, request, { signal }); return { queryKey, @@ -958,10 +1070,10 @@ export function createQueryServiceResolveComponent( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceResolveComponentQueryOptions( client, request, @@ -977,11 +1089,16 @@ export function queryServiceResolveTemplatedString( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.resolveTemplatedString( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .resolveTemplatedString( + ResolveTemplatedStringRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ResolveTemplatedStringResponse); } export function getQueryServiceResolveTemplatedStringQueryKey( @@ -1000,15 +1117,18 @@ export function getQueryServiceResolveTemplatedStringQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceResolveTemplatedStringQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceResolveTemplatedString(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceResolveTemplatedString(client, request, { signal }); return { queryKey, queryFn, @@ -1021,10 +1141,10 @@ export function createQueryServiceResolveTemplatedString( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceResolveTemplatedStringQueryOptions( client, request, @@ -1038,18 +1158,23 @@ export function createQueryServiceResolveTemplatedString( */ export function queryServiceColumnRollupInterval( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnRollupInterval( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnRollupInterval( + ColumnRollupIntervalRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnRollupIntervalResponse); } export function getQueryServiceColumnRollupIntervalQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1061,16 +1186,16 @@ export function getQueryServiceColumnRollupIntervalQueryKey( export function getQueryServiceColumnRollupIntervalQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnRollupIntervalQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnRollupInterval(client, request, { signal }); return { queryKey, @@ -1082,12 +1207,12 @@ export function getQueryServiceColumnRollupIntervalQueryOptions( export function createQueryServiceColumnRollupInterval( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnRollupIntervalQueryOptions( client, request, @@ -1101,34 +1226,39 @@ export function createQueryServiceColumnRollupInterval( */ export function queryServiceColumnTopK( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnTopK( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnTopK( + ColumnTopKRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnTopKResponse); } export function getQueryServiceColumnTopKQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return ["QueryService", "columnTopK", instanceId, request ?? {}] as const; } export function getQueryServiceColumnTopKQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnTopKQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnTopK(client, request, { signal }); return { queryKey, @@ -1140,12 +1270,12 @@ export function getQueryServiceColumnTopKQueryOptions( export function createQueryServiceColumnTopK( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTopKQueryOptions( client, request, @@ -1159,18 +1289,23 @@ export function createQueryServiceColumnTopK( */ export function queryServiceColumnNullCount( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnNullCount( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnNullCount( + ColumnNullCountRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnNullCountResponse); } export function getQueryServiceColumnNullCountQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1182,16 +1317,16 @@ export function getQueryServiceColumnNullCountQueryKey( export function getQueryServiceColumnNullCountQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnNullCountQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnNullCount(client, request, { signal }); return { queryKey, @@ -1203,12 +1338,12 @@ export function getQueryServiceColumnNullCountQueryOptions( export function createQueryServiceColumnNullCount( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnNullCountQueryOptions( client, request, @@ -1222,24 +1357,25 @@ export function createQueryServiceColumnNullCount( */ export function queryServiceColumnDescriptiveStatistics( client: RuntimeClient, - request: Omit< - PartialMessage, - "instanceId" - >, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnDescriptiveStatistics( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnDescriptiveStatistics( + ColumnDescriptiveStatisticsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then( + (r) => r.toJson() as unknown as V1ColumnDescriptiveStatisticsResponse, + ); } export function getQueryServiceColumnDescriptiveStatisticsQueryKey( instanceId: string, - request?: Omit< - PartialMessage, - "instanceId" - >, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1251,21 +1387,18 @@ export function getQueryServiceColumnDescriptiveStatisticsQueryKey( export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( client: RuntimeClient, - request: Omit< - PartialMessage, - "instanceId" - >, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceColumnDescriptiveStatisticsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ + const queryFn: QueryFunction = ({ signal, }) => queryServiceColumnDescriptiveStatistics(client, request, { signal }); return { @@ -1278,15 +1411,12 @@ export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( export function createQueryServiceColumnDescriptiveStatistics( client: RuntimeClient, - request: Omit< - PartialMessage, - "instanceId" - >, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnDescriptiveStatisticsQueryOptions( client, request, @@ -1300,18 +1430,23 @@ export function createQueryServiceColumnDescriptiveStatistics( */ export function queryServiceColumnTimeGrain( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnTimeGrain( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnTimeGrain( + ColumnTimeGrainRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnTimeGrainResponse); } export function getQueryServiceColumnTimeGrainQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1323,16 +1458,16 @@ export function getQueryServiceColumnTimeGrainQueryKey( export function getQueryServiceColumnTimeGrainQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnTimeGrainQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnTimeGrain(client, request, { signal }); return { queryKey, @@ -1344,12 +1479,12 @@ export function getQueryServiceColumnTimeGrainQueryOptions( export function createQueryServiceColumnTimeGrain( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTimeGrainQueryOptions( client, request, @@ -1363,18 +1498,23 @@ export function createQueryServiceColumnTimeGrain( */ export function queryServiceColumnNumericHistogram( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnNumericHistogram( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnNumericHistogram( + ColumnNumericHistogramRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnNumericHistogramResponse); } export function getQueryServiceColumnNumericHistogramQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1386,17 +1526,20 @@ export function getQueryServiceColumnNumericHistogramQueryKey( export function getQueryServiceColumnNumericHistogramQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnNumericHistogramQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - queryServiceColumnNumericHistogram(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => queryServiceColumnNumericHistogram(client, request, { signal }); return { queryKey, queryFn, @@ -1407,12 +1550,12 @@ export function getQueryServiceColumnNumericHistogramQueryOptions( export function createQueryServiceColumnNumericHistogram( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnNumericHistogramQueryOptions( client, request, @@ -1426,18 +1569,23 @@ export function createQueryServiceColumnNumericHistogram( */ export function queryServiceColumnRugHistogram( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnRugHistogram( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnRugHistogram( + ColumnRugHistogramRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnRugHistogramResponse); } export function getQueryServiceColumnRugHistogramQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1449,16 +1597,16 @@ export function getQueryServiceColumnRugHistogramQueryKey( export function getQueryServiceColumnRugHistogramQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnRugHistogramQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnRugHistogram(client, request, { signal }); return { queryKey, @@ -1470,12 +1618,12 @@ export function getQueryServiceColumnRugHistogramQueryOptions( export function createQueryServiceColumnRugHistogram( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnRugHistogramQueryOptions( client, request, @@ -1489,18 +1637,23 @@ export function createQueryServiceColumnRugHistogram( */ export function queryServiceColumnTimeRange( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnTimeRange( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnTimeRange( + ColumnTimeRangeRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnTimeRangeResponse); } export function getQueryServiceColumnTimeRangeQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1512,16 +1665,16 @@ export function getQueryServiceColumnTimeRangeQueryKey( export function getQueryServiceColumnTimeRangeQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnTimeRangeQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnTimeRange(client, request, { signal }); return { queryKey, @@ -1533,12 +1686,12 @@ export function getQueryServiceColumnTimeRangeQueryOptions( export function createQueryServiceColumnTimeRange( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTimeRangeQueryOptions( client, request, @@ -1552,18 +1705,23 @@ export function createQueryServiceColumnTimeRange( */ export function queryServiceColumnCardinality( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnCardinality( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnCardinality( + ColumnCardinalityRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnCardinalityResponse); } export function getQueryServiceColumnCardinalityQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1575,16 +1733,16 @@ export function getQueryServiceColumnCardinalityQueryKey( export function getQueryServiceColumnCardinalityQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnCardinalityQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnCardinality(client, request, { signal }); return { queryKey, @@ -1596,12 +1754,12 @@ export function getQueryServiceColumnCardinalityQueryOptions( export function createQueryServiceColumnCardinality( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnCardinalityQueryOptions( client, request, @@ -1615,18 +1773,23 @@ export function createQueryServiceColumnCardinality( */ export function queryServiceColumnTimeSeries( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.columnTimeSeries( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .columnTimeSeries( + ColumnTimeSeriesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ColumnTimeSeriesResponse); } export function getQueryServiceColumnTimeSeriesQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1638,16 +1801,16 @@ export function getQueryServiceColumnTimeSeriesQueryKey( export function getQueryServiceColumnTimeSeriesQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceColumnTimeSeriesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceColumnTimeSeries(client, request, { signal }); return { queryKey, @@ -1659,12 +1822,12 @@ export function getQueryServiceColumnTimeSeriesQueryOptions( export function createQueryServiceColumnTimeSeries( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTimeSeriesQueryOptions( client, request, @@ -1678,18 +1841,23 @@ export function createQueryServiceColumnTimeSeries( */ export function queryServiceTableCardinality( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.tableCardinality( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .tableCardinality( + TableCardinalityRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1TableCardinalityResponse); } export function getQueryServiceTableCardinalityQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return [ "QueryService", @@ -1701,16 +1869,16 @@ export function getQueryServiceTableCardinalityQueryKey( export function getQueryServiceTableCardinalityQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceTableCardinalityQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceTableCardinality(client, request, { signal }); return { queryKey, @@ -1722,12 +1890,12 @@ export function getQueryServiceTableCardinalityQueryOptions( export function createQueryServiceTableCardinality( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceTableCardinalityQueryOptions( client, request, @@ -1741,34 +1909,39 @@ export function createQueryServiceTableCardinality( */ export function queryServiceTableColumns( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.tableColumns( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .tableColumns( + TableColumnsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1TableColumnsResponse); } export function getQueryServiceTableColumnsQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return ["QueryService", "tableColumns", instanceId, request ?? {}] as const; } export function getQueryServiceTableColumnsQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceTableColumnsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceTableColumns(client, request, { signal }); return { queryKey, @@ -1780,12 +1953,12 @@ export function getQueryServiceTableColumnsQueryOptions( export function createQueryServiceTableColumns( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceTableColumnsQueryOptions( client, request, @@ -1799,31 +1972,36 @@ export function createQueryServiceTableColumns( */ export function queryServiceTableRows( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { signal?: AbortSignal }, -): Promise { - return client.queryService.tableRows( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.queryService + .tableRows( + TableRowsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1TableRowsResponse); } export function getQueryServiceTableRowsQueryKey( instanceId: string, - request?: Omit, "instanceId">, + request?: Omit, ): QueryKey { return ["QueryService", "tableRows", instanceId, request ?? {}] as const; } export function getQueryServiceTableRowsQueryOptions( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getQueryServiceTableRowsQueryKey(client.instanceId, request); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => queryServiceTableRows(client, request, { signal }); return { queryKey, @@ -1835,12 +2013,12 @@ export function getQueryServiceTableRowsQueryOptions( export function createQueryServiceTableRows( client: RuntimeClient, - request: Omit, "instanceId">, + request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceTableRowsQueryOptions( client, request, @@ -1855,24 +2033,28 @@ export function createQueryServiceTableRows( export function queryServiceQuery( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.queryService.query({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.queryService + .query( + QueryRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1QueryResponse); } export function getQueryServiceQueryMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - QueryResponse, + V1QueryResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - QueryResponse, + V1QueryResponse, unknown, Omit, "instanceId"> > { @@ -1886,14 +2068,14 @@ export function createQueryServiceQueryMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - QueryResponse, + V1QueryResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - QueryResponse, + V1QueryResponse, unknown, Omit, "instanceId"> > { @@ -1907,24 +2089,28 @@ export function createQueryServiceQueryMutation( export function queryServiceExport( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.queryService.export({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.queryService + .export( + ExportRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1ExportResponse); } export function getQueryServiceExportMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ExportResponse, + V1ExportResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - ExportResponse, + V1ExportResponse, unknown, Omit, "instanceId"> > { @@ -1938,14 +2124,14 @@ export function createQueryServiceExportMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ExportResponse, + V1ExportResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - ExportResponse, + V1ExportResponse, unknown, Omit, "instanceId"> > { @@ -1959,24 +2145,28 @@ export function createQueryServiceExportMutation( export function queryServiceExportReport( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.queryService.exportReport({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.queryService + .exportReport( + ExportReportRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1ExportReportResponse); } export function getQueryServiceExportReportMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ExportReportResponse, + V1ExportReportResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - ExportReportResponse, + V1ExportReportResponse, unknown, Omit, "instanceId"> > { @@ -1990,14 +2180,14 @@ export function createQueryServiceExportReportMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ExportReportResponse, + V1ExportReportResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - ExportReportResponse, + V1ExportReportResponse, unknown, Omit, "instanceId"> > { diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index 9eec39ca3d7..fee8fd98ab3 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -1,7 +1,7 @@ // Generated by generate-query-hooks.ts — DO NOT EDIT import type { RuntimeClient } from "../runtime-client"; -import type { PartialMessage } from "@bufbuild/protobuf"; +import type { PartialMessage, JsonValue } from "@bufbuild/protobuf"; import { createQuery, createMutation, @@ -13,105 +13,109 @@ import { type CreateMutationOptions, type CreateMutationResult, } from "@tanstack/svelte-query"; +import type { + V1AnalyzeConnectorsResponse, + V1AnalyzeVariablesResponse, + V1CompleteResponse, + V1CreateDirectoryResponse, + V1CreateInstanceRequest, + V1CreateInstanceResponse, + V1CreateTriggerResponse, + V1DeleteFileResponse, + V1DeleteInstanceResponse, + V1EditInstanceResponse, + V1ForkConversationResponse, + V1GenerateCanvasFileResponse, + V1GenerateMetricsViewFileResponse, + V1GenerateRendererResponse, + V1GenerateResolverResponse, + V1GetConversationResponse, + V1GetExploreResponse, + V1GetFileResponse, + V1GetInstanceResponse, + V1GetLogsResponse, + V1GetModelPartitionsResponse, + V1GetResourceResponse, + V1GitCommitResponse, + V1GitMergeToBranchResponse, + V1GitPullResponse, + V1GitPushResponse, + V1GitStatusResponse, + V1GitSwitchBranchResponse, + V1HealthResponse, + V1InstanceHealthResponse, + V1IssueDevJWTRequest, + V1IssueDevJWTResponse, + V1ListConnectorDriversResponse, + V1ListConversationsResponse, + V1ListExamplesResponse, + V1ListFilesResponse, + V1ListGitBranchesResponse, + V1ListGitCommitsResponse, + V1ListInstancesResponse, + V1ListNotifierConnectorsResponse, + V1ListResourcesResponse, + V1ListToolsResponse, + V1PingResponse, + V1PutFileResponse, + V1QueryResolverResponse, + V1ReloadConfigResponse, + V1RenameFileResponse, + V1RestoreGitCommitResponse, + V1ShareConversationResponse, + V1UnpackEmptyResponse, + V1UnpackExampleResponse, +} from "../../gen/index.schemas"; import { AnalyzeConnectorsRequest, - AnalyzeConnectorsResponse, AnalyzeVariablesRequest, - AnalyzeVariablesResponse, CompleteRequest, - CompleteResponse, CreateDirectoryRequest, - CreateDirectoryResponse, CreateInstanceRequest, - CreateInstanceResponse, CreateTriggerRequest, - CreateTriggerResponse, DeleteFileRequest, - DeleteFileResponse, DeleteInstanceRequest, - DeleteInstanceResponse, EditInstanceRequest, - EditInstanceResponse, ForkConversationRequest, - ForkConversationResponse, GenerateCanvasFileRequest, - GenerateCanvasFileResponse, GenerateMetricsViewFileRequest, - GenerateMetricsViewFileResponse, GenerateRendererRequest, - GenerateRendererResponse, GenerateResolverRequest, - GenerateResolverResponse, GetConversationRequest, - GetConversationResponse, GetExploreRequest, - GetExploreResponse, GetFileRequest, - GetFileResponse, GetInstanceRequest, - GetInstanceResponse, GetLogsRequest, - GetLogsResponse, GetModelPartitionsRequest, - GetModelPartitionsResponse, GetResourceRequest, - GetResourceResponse, GitCommitRequest, - GitCommitResponse, GitMergeToBranchRequest, - GitMergeToBranchResponse, GitPullRequest, - GitPullResponse, GitPushRequest, - GitPushResponse, GitStatusRequest, - GitStatusResponse, GitSwitchBranchRequest, - GitSwitchBranchResponse, HealthRequest, - HealthResponse, InstanceHealthRequest, - InstanceHealthResponse, IssueDevJWTRequest, - IssueDevJWTResponse, ListConnectorDriversRequest, - ListConnectorDriversResponse, ListConversationsRequest, - ListConversationsResponse, ListExamplesRequest, - ListExamplesResponse, ListFilesRequest, - ListFilesResponse, ListGitBranchesRequest, - ListGitBranchesResponse, ListGitCommitsRequest, - ListGitCommitsResponse, ListInstancesRequest, - ListInstancesResponse, ListNotifierConnectorsRequest, - ListNotifierConnectorsResponse, ListResourcesRequest, - ListResourcesResponse, ListToolsRequest, - ListToolsResponse, PingRequest, - PingResponse, PutFileRequest, - PutFileResponse, QueryResolverRequest, - QueryResolverResponse, ReloadConfigRequest, - ReloadConfigResponse, RenameFileRequest, - RenameFileResponse, RestoreGitCommitRequest, - RestoreGitCommitResponse, ShareConversationRequest, - ShareConversationResponse, UnpackEmptyRequest, - UnpackEmptyResponse, UnpackExampleRequest, - UnpackExampleResponse, } from "../../../proto/gen/rill/runtime/v1/api_pb"; /** @@ -121,8 +125,12 @@ export function runtimeServicePing( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.ping(request, { signal: options?.signal }); +): Promise { + return client.runtimeService + .ping(PingRequest.fromJson(request as unknown as JsonValue), { + signal: options?.signal, + }) + .then((r) => r.toJson() as unknown as V1PingResponse); } export function getRuntimeServicePingQueryKey( @@ -136,11 +144,11 @@ export function getRuntimeServicePingQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServicePingQueryKey(client.instanceId, request); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServicePing(client, request, { signal }); return { queryKey, @@ -154,10 +162,10 @@ export function createRuntimeServicePing( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServicePingQueryOptions( client, request, @@ -173,8 +181,12 @@ export function runtimeServiceHealth( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.health(request, { signal: options?.signal }); +): Promise { + return client.runtimeService + .health(HealthRequest.fromJson(request as unknown as JsonValue), { + signal: options?.signal, + }) + .then((r) => r.toJson() as unknown as V1HealthResponse); } export function getRuntimeServiceHealthQueryKey( @@ -188,11 +200,11 @@ export function getRuntimeServiceHealthQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceHealthQueryKey(client.instanceId, request); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceHealth(client, request, { signal }); return { queryKey, @@ -206,10 +218,10 @@ export function createRuntimeServiceHealth( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceHealthQueryOptions( client, request, @@ -225,11 +237,16 @@ export function runtimeServiceInstanceHealth( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.instanceHealth( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .instanceHealth( + InstanceHealthRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1InstanceHealthResponse); } export function getRuntimeServiceInstanceHealthQueryKey( @@ -248,14 +265,14 @@ export function getRuntimeServiceInstanceHealthQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceInstanceHealthQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceInstanceHealth(client, request, { signal }); return { queryKey, @@ -269,10 +286,10 @@ export function createRuntimeServiceInstanceHealth( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceInstanceHealthQueryOptions( client, request, @@ -288,10 +305,13 @@ export function runtimeServiceListInstances( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listInstances(request, { - signal: options?.signal, - }); +): Promise { + return client.runtimeService + .listInstances( + ListInstancesRequest.fromJson(request as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListInstancesResponse); } export function getRuntimeServiceListInstancesQueryKey( @@ -310,14 +330,14 @@ export function getRuntimeServiceListInstancesQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListInstancesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListInstances(client, request, { signal }); return { queryKey, @@ -331,10 +351,10 @@ export function createRuntimeServiceListInstances( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListInstancesQueryOptions( client, request, @@ -350,11 +370,16 @@ export function runtimeServiceGetInstance( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getInstance( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getInstance( + GetInstanceRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetInstanceResponse); } export function getRuntimeServiceGetInstanceQueryKey( @@ -368,14 +393,14 @@ export function getRuntimeServiceGetInstanceQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetInstanceQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetInstance(client, request, { signal }); return { queryKey, @@ -389,10 +414,10 @@ export function createRuntimeServiceGetInstance( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetInstanceQueryOptions( client, request, @@ -408,11 +433,16 @@ export function runtimeServiceListFiles( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listFiles( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listFiles( + ListFilesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListFilesResponse); } export function getRuntimeServiceListFilesQueryKey( @@ -426,14 +456,14 @@ export function getRuntimeServiceListFilesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListFilesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListFiles(client, request, { signal }); return { queryKey, @@ -447,10 +477,10 @@ export function createRuntimeServiceListFiles( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListFilesQueryOptions( client, request, @@ -466,11 +496,16 @@ export function runtimeServiceGetFile( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getFile( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getFile( + GetFileRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetFileResponse); } export function getRuntimeServiceGetFileQueryKey( @@ -484,11 +519,11 @@ export function getRuntimeServiceGetFileQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetFileQueryKey(client.instanceId, request); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetFile(client, request, { signal }); return { queryKey, @@ -502,10 +537,10 @@ export function createRuntimeServiceGetFile( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetFileQueryOptions( client, request, @@ -521,10 +556,13 @@ export function runtimeServiceListExamples( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listExamples(request, { - signal: options?.signal, - }); +): Promise { + return client.runtimeService + .listExamples( + ListExamplesRequest.fromJson(request as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListExamplesResponse); } export function getRuntimeServiceListExamplesQueryKey( @@ -538,14 +576,14 @@ export function getRuntimeServiceListExamplesQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListExamplesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListExamples(client, request, { signal }); return { queryKey, @@ -559,10 +597,10 @@ export function createRuntimeServiceListExamples( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListExamplesQueryOptions( client, request, @@ -578,11 +616,16 @@ export function runtimeServiceQueryResolver( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.queryResolver( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .queryResolver( + QueryResolverRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1QueryResolverResponse); } export function getRuntimeServiceQueryResolverQueryKey( @@ -601,14 +644,14 @@ export function getRuntimeServiceQueryResolverQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceQueryResolverQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceQueryResolver(client, request, { signal }); return { queryKey, @@ -622,10 +665,10 @@ export function createRuntimeServiceQueryResolver( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceQueryResolverQueryOptions( client, request, @@ -641,11 +684,16 @@ export function runtimeServiceGetLogs( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getLogs( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getLogs( + GetLogsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetLogsResponse); } export function getRuntimeServiceGetLogsQueryKey( @@ -659,11 +707,11 @@ export function getRuntimeServiceGetLogsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetLogsQueryKey(client.instanceId, request); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetLogs(client, request, { signal }); return { queryKey, @@ -677,10 +725,10 @@ export function createRuntimeServiceGetLogs( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetLogsQueryOptions( client, request, @@ -696,11 +744,16 @@ export function runtimeServiceListResources( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listResources( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listResources( + ListResourcesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListResourcesResponse); } export function getRuntimeServiceListResourcesQueryKey( @@ -719,14 +772,14 @@ export function getRuntimeServiceListResourcesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListResourcesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListResources(client, request, { signal }); return { queryKey, @@ -740,10 +793,10 @@ export function createRuntimeServiceListResources( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListResourcesQueryOptions( client, request, @@ -759,11 +812,16 @@ export function runtimeServiceGetResource( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getResource( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getResource( + GetResourceRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetResourceResponse); } export function getRuntimeServiceGetResourceQueryKey( @@ -777,14 +835,14 @@ export function getRuntimeServiceGetResourceQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetResourceQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetResource(client, request, { signal }); return { queryKey, @@ -798,10 +856,10 @@ export function createRuntimeServiceGetResource( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetResourceQueryOptions( client, request, @@ -817,11 +875,16 @@ export function runtimeServiceGetExplore( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getExplore( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getExplore( + GetExploreRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetExploreResponse); } export function getRuntimeServiceGetExploreQueryKey( @@ -835,14 +898,14 @@ export function getRuntimeServiceGetExploreQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetExploreQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetExplore(client, request, { signal }); return { queryKey, @@ -856,10 +919,10 @@ export function createRuntimeServiceGetExplore( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetExploreQueryOptions( client, request, @@ -875,11 +938,16 @@ export function runtimeServiceGetModelPartitions( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getModelPartitions( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getModelPartitions( + GetModelPartitionsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetModelPartitionsResponse); } export function getRuntimeServiceGetModelPartitionsQueryKey( @@ -898,14 +966,14 @@ export function getRuntimeServiceGetModelPartitionsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetModelPartitionsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetModelPartitions(client, request, { signal }); return { queryKey, @@ -919,10 +987,10 @@ export function createRuntimeServiceGetModelPartitions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetModelPartitionsQueryOptions( client, request, @@ -938,10 +1006,13 @@ export function runtimeServiceListConnectorDrivers( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listConnectorDrivers(request, { - signal: options?.signal, - }); +): Promise { + return client.runtimeService + .listConnectorDrivers( + ListConnectorDriversRequest.fromJson(request as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListConnectorDriversResponse); } export function getRuntimeServiceListConnectorDriversQueryKey( @@ -960,14 +1031,14 @@ export function getRuntimeServiceListConnectorDriversQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListConnectorDriversQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListConnectorDrivers(client, request, { signal }); return { queryKey, @@ -981,10 +1052,10 @@ export function createRuntimeServiceListConnectorDrivers( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListConnectorDriversQueryOptions( client, request, @@ -1000,11 +1071,16 @@ export function runtimeServiceAnalyzeConnectors( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.analyzeConnectors( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .analyzeConnectors( + AnalyzeConnectorsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1AnalyzeConnectorsResponse); } export function getRuntimeServiceAnalyzeConnectorsQueryKey( @@ -1023,14 +1099,14 @@ export function getRuntimeServiceAnalyzeConnectorsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceAnalyzeConnectorsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceAnalyzeConnectors(client, request, { signal }); return { queryKey, @@ -1044,10 +1120,10 @@ export function createRuntimeServiceAnalyzeConnectors( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceAnalyzeConnectorsQueryOptions( client, request, @@ -1063,11 +1139,16 @@ export function runtimeServiceListNotifierConnectors( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listNotifierConnectors( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listNotifierConnectors( + ListNotifierConnectorsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListNotifierConnectorsResponse); } export function getRuntimeServiceListNotifierConnectorsQueryKey( @@ -1086,15 +1167,18 @@ export function getRuntimeServiceListNotifierConnectorsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListNotifierConnectorsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => - runtimeServiceListNotifierConnectors(client, request, { signal }); + const queryFn: QueryFunction = ({ + signal, + }) => runtimeServiceListNotifierConnectors(client, request, { signal }); return { queryKey, queryFn, @@ -1107,10 +1191,10 @@ export function createRuntimeServiceListNotifierConnectors( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListNotifierConnectorsQueryOptions( client, request, @@ -1126,11 +1210,16 @@ export function runtimeServiceListConversations( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listConversations( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listConversations( + ListConversationsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListConversationsResponse); } export function getRuntimeServiceListConversationsQueryKey( @@ -1149,14 +1238,14 @@ export function getRuntimeServiceListConversationsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListConversationsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListConversations(client, request, { signal }); return { queryKey, @@ -1170,10 +1259,10 @@ export function createRuntimeServiceListConversations( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListConversationsQueryOptions( client, request, @@ -1189,11 +1278,16 @@ export function runtimeServiceGetConversation( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.getConversation( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .getConversation( + GetConversationRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1GetConversationResponse); } export function getRuntimeServiceGetConversationQueryKey( @@ -1212,14 +1306,14 @@ export function getRuntimeServiceGetConversationQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceGetConversationQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetConversation(client, request, { signal }); return { queryKey, @@ -1233,10 +1327,10 @@ export function createRuntimeServiceGetConversation( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetConversationQueryOptions( client, request, @@ -1252,11 +1346,16 @@ export function runtimeServiceListTools( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listTools( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listTools( + ListToolsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListToolsResponse); } export function getRuntimeServiceListToolsQueryKey( @@ -1270,14 +1369,14 @@ export function getRuntimeServiceListToolsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListToolsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListTools(client, request, { signal }); return { queryKey, @@ -1291,10 +1390,10 @@ export function createRuntimeServiceListTools( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListToolsQueryOptions( client, request, @@ -1308,33 +1407,35 @@ export function createRuntimeServiceListTools( */ export function runtimeServiceIssueDevJWT( client: RuntimeClient, - request: PartialMessage, + request: V1IssueDevJWTRequest, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.issueDevJWT(request, { - signal: options?.signal, - }); +): Promise { + return client.runtimeService + .issueDevJWT(IssueDevJWTRequest.fromJson(request as unknown as JsonValue), { + signal: options?.signal, + }) + .then((r) => r.toJson() as unknown as V1IssueDevJWTResponse); } export function getRuntimeServiceIssueDevJWTQueryKey( instanceId: string, - request?: PartialMessage, + request?: V1IssueDevJWTRequest, ): QueryKey { return ["RuntimeService", "issueDevJWT", instanceId, request ?? {}] as const; } export function getRuntimeServiceIssueDevJWTQueryOptions( client: RuntimeClient, - request: PartialMessage, + request: V1IssueDevJWTRequest, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceIssueDevJWTQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceIssueDevJWT(client, request, { signal }); return { queryKey, @@ -1346,12 +1447,12 @@ export function getRuntimeServiceIssueDevJWTQueryOptions( export function createRuntimeServiceIssueDevJWT( client: RuntimeClient, - request: PartialMessage, + request: V1IssueDevJWTRequest, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceIssueDevJWTQueryOptions( client, request, @@ -1367,11 +1468,16 @@ export function runtimeServiceAnalyzeVariables( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.analyzeVariables( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .analyzeVariables( + AnalyzeVariablesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1AnalyzeVariablesResponse); } export function getRuntimeServiceAnalyzeVariablesQueryKey( @@ -1390,14 +1496,14 @@ export function getRuntimeServiceAnalyzeVariablesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceAnalyzeVariablesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceAnalyzeVariables(client, request, { signal }); return { queryKey, @@ -1411,10 +1517,10 @@ export function createRuntimeServiceAnalyzeVariables( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceAnalyzeVariablesQueryOptions( client, request, @@ -1430,11 +1536,16 @@ export function runtimeServiceListGitCommits( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listGitCommits( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listGitCommits( + ListGitCommitsRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListGitCommitsResponse); } export function getRuntimeServiceListGitCommitsQueryKey( @@ -1453,14 +1564,14 @@ export function getRuntimeServiceListGitCommitsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListGitCommitsQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListGitCommits(client, request, { signal }); return { queryKey, @@ -1474,10 +1585,10 @@ export function createRuntimeServiceListGitCommits( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListGitCommitsQueryOptions( client, request, @@ -1493,11 +1604,16 @@ export function runtimeServiceListGitBranches( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, -): Promise { - return client.runtimeService.listGitBranches( - { instanceId: client.instanceId, ...request }, - { signal: options?.signal }, - ); +): Promise { + return client.runtimeService + .listGitBranches( + ListGitBranchesRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + { signal: options?.signal }, + ) + .then((r) => r.toJson() as unknown as V1ListGitBranchesResponse); } export function getRuntimeServiceListGitBranchesQueryKey( @@ -1516,14 +1632,14 @@ export function getRuntimeServiceListGitBranchesQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceListGitBranchesQueryKey( client.instanceId, request, ); - const queryFn: QueryFunction = ({ signal }) => + const queryFn: QueryFunction = ({ signal }) => runtimeServiceListGitBranches(client, request, { signal }); return { queryKey, @@ -1537,10 +1653,10 @@ export function createRuntimeServiceListGitBranches( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListGitBranchesQueryOptions( client, request, @@ -1554,27 +1670,31 @@ export function createRuntimeServiceListGitBranches( */ export function runtimeServiceCreateInstance( client: RuntimeClient, - request: Omit, "instanceId">, -): Promise { - return client.runtimeService.createInstance({ - instanceId: client.instanceId, - ...request, - }); + request: Omit, +): Promise { + return client.runtimeService + .createInstance( + CreateInstanceRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1CreateInstanceResponse); } export function getRuntimeServiceCreateInstanceMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CreateInstanceResponse, + V1CreateInstanceResponse, unknown, - Omit, "instanceId"> + Omit > >, ): CreateMutationOptions< - CreateInstanceResponse, + V1CreateInstanceResponse, unknown, - Omit, "instanceId"> + Omit > { return { mutationFn: (request) => runtimeServiceCreateInstance(client, request), @@ -1586,16 +1706,16 @@ export function createRuntimeServiceCreateInstanceMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CreateInstanceResponse, + V1CreateInstanceResponse, unknown, - Omit, "instanceId"> + Omit > >, queryClient?: QueryClient, ): CreateMutationResult< - CreateInstanceResponse, + V1CreateInstanceResponse, unknown, - Omit, "instanceId"> + Omit > { const mutationOptions = getRuntimeServiceCreateInstanceMutationOptions( client, @@ -1610,24 +1730,28 @@ export function createRuntimeServiceCreateInstanceMutation( export function runtimeServiceEditInstance( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.editInstance({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .editInstance( + EditInstanceRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1EditInstanceResponse); } export function getRuntimeServiceEditInstanceMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - EditInstanceResponse, + V1EditInstanceResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - EditInstanceResponse, + V1EditInstanceResponse, unknown, Omit, "instanceId"> > { @@ -1641,14 +1765,14 @@ export function createRuntimeServiceEditInstanceMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - EditInstanceResponse, + V1EditInstanceResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - EditInstanceResponse, + V1EditInstanceResponse, unknown, Omit, "instanceId"> > { @@ -1665,24 +1789,28 @@ export function createRuntimeServiceEditInstanceMutation( export function runtimeServiceDeleteInstance( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.deleteInstance({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .deleteInstance( + DeleteInstanceRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1DeleteInstanceResponse); } export function getRuntimeServiceDeleteInstanceMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - DeleteInstanceResponse, + V1DeleteInstanceResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - DeleteInstanceResponse, + V1DeleteInstanceResponse, unknown, Omit, "instanceId"> > { @@ -1696,14 +1824,14 @@ export function createRuntimeServiceDeleteInstanceMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - DeleteInstanceResponse, + V1DeleteInstanceResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - DeleteInstanceResponse, + V1DeleteInstanceResponse, unknown, Omit, "instanceId"> > { @@ -1720,24 +1848,28 @@ export function createRuntimeServiceDeleteInstanceMutation( export function runtimeServiceReloadConfig( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.reloadConfig({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .reloadConfig( + ReloadConfigRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1ReloadConfigResponse); } export function getRuntimeServiceReloadConfigMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ReloadConfigResponse, + V1ReloadConfigResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - ReloadConfigResponse, + V1ReloadConfigResponse, unknown, Omit, "instanceId"> > { @@ -1751,14 +1883,14 @@ export function createRuntimeServiceReloadConfigMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ReloadConfigResponse, + V1ReloadConfigResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - ReloadConfigResponse, + V1ReloadConfigResponse, unknown, Omit, "instanceId"> > { @@ -1775,24 +1907,28 @@ export function createRuntimeServiceReloadConfigMutation( export function runtimeServicePutFile( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.putFile({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .putFile( + PutFileRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1PutFileResponse); } export function getRuntimeServicePutFileMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - PutFileResponse, + V1PutFileResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - PutFileResponse, + V1PutFileResponse, unknown, Omit, "instanceId"> > { @@ -1806,14 +1942,14 @@ export function createRuntimeServicePutFileMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - PutFileResponse, + V1PutFileResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - PutFileResponse, + V1PutFileResponse, unknown, Omit, "instanceId"> > { @@ -1830,24 +1966,28 @@ export function createRuntimeServicePutFileMutation( export function runtimeServiceCreateDirectory( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.createDirectory({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .createDirectory( + CreateDirectoryRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1CreateDirectoryResponse); } export function getRuntimeServiceCreateDirectoryMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CreateDirectoryResponse, + V1CreateDirectoryResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - CreateDirectoryResponse, + V1CreateDirectoryResponse, unknown, Omit, "instanceId"> > { @@ -1861,14 +2001,14 @@ export function createRuntimeServiceCreateDirectoryMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CreateDirectoryResponse, + V1CreateDirectoryResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - CreateDirectoryResponse, + V1CreateDirectoryResponse, unknown, Omit, "instanceId"> > { @@ -1885,24 +2025,28 @@ export function createRuntimeServiceCreateDirectoryMutation( export function runtimeServiceDeleteFile( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.deleteFile({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .deleteFile( + DeleteFileRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1DeleteFileResponse); } export function getRuntimeServiceDeleteFileMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - DeleteFileResponse, + V1DeleteFileResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - DeleteFileResponse, + V1DeleteFileResponse, unknown, Omit, "instanceId"> > { @@ -1916,14 +2060,14 @@ export function createRuntimeServiceDeleteFileMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - DeleteFileResponse, + V1DeleteFileResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - DeleteFileResponse, + V1DeleteFileResponse, unknown, Omit, "instanceId"> > { @@ -1940,24 +2084,28 @@ export function createRuntimeServiceDeleteFileMutation( export function runtimeServiceRenameFile( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.renameFile({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .renameFile( + RenameFileRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1RenameFileResponse); } export function getRuntimeServiceRenameFileMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - RenameFileResponse, + V1RenameFileResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - RenameFileResponse, + V1RenameFileResponse, unknown, Omit, "instanceId"> > { @@ -1971,14 +2119,14 @@ export function createRuntimeServiceRenameFileMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - RenameFileResponse, + V1RenameFileResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - RenameFileResponse, + V1RenameFileResponse, unknown, Omit, "instanceId"> > { @@ -1995,24 +2143,28 @@ export function createRuntimeServiceRenameFileMutation( export function runtimeServiceUnpackExample( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.unpackExample({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .unpackExample( + UnpackExampleRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1UnpackExampleResponse); } export function getRuntimeServiceUnpackExampleMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - UnpackExampleResponse, + V1UnpackExampleResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - UnpackExampleResponse, + V1UnpackExampleResponse, unknown, Omit, "instanceId"> > { @@ -2026,14 +2178,14 @@ export function createRuntimeServiceUnpackExampleMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - UnpackExampleResponse, + V1UnpackExampleResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - UnpackExampleResponse, + V1UnpackExampleResponse, unknown, Omit, "instanceId"> > { @@ -2050,24 +2202,28 @@ export function createRuntimeServiceUnpackExampleMutation( export function runtimeServiceUnpackEmpty( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.unpackEmpty({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .unpackEmpty( + UnpackEmptyRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1UnpackEmptyResponse); } export function getRuntimeServiceUnpackEmptyMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - UnpackEmptyResponse, + V1UnpackEmptyResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - UnpackEmptyResponse, + V1UnpackEmptyResponse, unknown, Omit, "instanceId"> > { @@ -2081,14 +2237,14 @@ export function createRuntimeServiceUnpackEmptyMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - UnpackEmptyResponse, + V1UnpackEmptyResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - UnpackEmptyResponse, + V1UnpackEmptyResponse, unknown, Omit, "instanceId"> > { @@ -2105,24 +2261,28 @@ export function createRuntimeServiceUnpackEmptyMutation( export function runtimeServiceGenerateMetricsViewFile( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.generateMetricsViewFile({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .generateMetricsViewFile( + GenerateMetricsViewFileRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GenerateMetricsViewFileResponse); } export function getRuntimeServiceGenerateMetricsViewFileMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateMetricsViewFileResponse, + V1GenerateMetricsViewFileResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GenerateMetricsViewFileResponse, + V1GenerateMetricsViewFileResponse, unknown, Omit, "instanceId"> > { @@ -2137,14 +2297,14 @@ export function createRuntimeServiceGenerateMetricsViewFileMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateMetricsViewFileResponse, + V1GenerateMetricsViewFileResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GenerateMetricsViewFileResponse, + V1GenerateMetricsViewFileResponse, unknown, Omit, "instanceId"> > { @@ -2159,24 +2319,28 @@ export function createRuntimeServiceGenerateMetricsViewFileMutation( export function runtimeServiceGenerateCanvasFile( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.generateCanvasFile({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .generateCanvasFile( + GenerateCanvasFileRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GenerateCanvasFileResponse); } export function getRuntimeServiceGenerateCanvasFileMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateCanvasFileResponse, + V1GenerateCanvasFileResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GenerateCanvasFileResponse, + V1GenerateCanvasFileResponse, unknown, Omit, "instanceId"> > { @@ -2190,14 +2354,14 @@ export function createRuntimeServiceGenerateCanvasFileMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateCanvasFileResponse, + V1GenerateCanvasFileResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GenerateCanvasFileResponse, + V1GenerateCanvasFileResponse, unknown, Omit, "instanceId"> > { @@ -2214,24 +2378,28 @@ export function createRuntimeServiceGenerateCanvasFileMutation( export function runtimeServiceGenerateResolver( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.generateResolver({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .generateResolver( + GenerateResolverRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GenerateResolverResponse); } export function getRuntimeServiceGenerateResolverMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateResolverResponse, + V1GenerateResolverResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GenerateResolverResponse, + V1GenerateResolverResponse, unknown, Omit, "instanceId"> > { @@ -2245,14 +2413,14 @@ export function createRuntimeServiceGenerateResolverMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateResolverResponse, + V1GenerateResolverResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GenerateResolverResponse, + V1GenerateResolverResponse, unknown, Omit, "instanceId"> > { @@ -2269,24 +2437,28 @@ export function createRuntimeServiceGenerateResolverMutation( export function runtimeServiceGenerateRenderer( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.generateRenderer({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .generateRenderer( + GenerateRendererRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GenerateRendererResponse); } export function getRuntimeServiceGenerateRendererMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateRendererResponse, + V1GenerateRendererResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GenerateRendererResponse, + V1GenerateRendererResponse, unknown, Omit, "instanceId"> > { @@ -2300,14 +2472,14 @@ export function createRuntimeServiceGenerateRendererMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GenerateRendererResponse, + V1GenerateRendererResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GenerateRendererResponse, + V1GenerateRendererResponse, unknown, Omit, "instanceId"> > { @@ -2324,24 +2496,28 @@ export function createRuntimeServiceGenerateRendererMutation( export function runtimeServiceCreateTrigger( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.createTrigger({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .createTrigger( + CreateTriggerRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1CreateTriggerResponse); } export function getRuntimeServiceCreateTriggerMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CreateTriggerResponse, + V1CreateTriggerResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - CreateTriggerResponse, + V1CreateTriggerResponse, unknown, Omit, "instanceId"> > { @@ -2355,14 +2531,14 @@ export function createRuntimeServiceCreateTriggerMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CreateTriggerResponse, + V1CreateTriggerResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - CreateTriggerResponse, + V1CreateTriggerResponse, unknown, Omit, "instanceId"> > { @@ -2379,24 +2555,28 @@ export function createRuntimeServiceCreateTriggerMutation( export function runtimeServiceShareConversation( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.shareConversation({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .shareConversation( + ShareConversationRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1ShareConversationResponse); } export function getRuntimeServiceShareConversationMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ShareConversationResponse, + V1ShareConversationResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - ShareConversationResponse, + V1ShareConversationResponse, unknown, Omit, "instanceId"> > { @@ -2410,14 +2590,14 @@ export function createRuntimeServiceShareConversationMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ShareConversationResponse, + V1ShareConversationResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - ShareConversationResponse, + V1ShareConversationResponse, unknown, Omit, "instanceId"> > { @@ -2434,24 +2614,28 @@ export function createRuntimeServiceShareConversationMutation( export function runtimeServiceForkConversation( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.forkConversation({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .forkConversation( + ForkConversationRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1ForkConversationResponse); } export function getRuntimeServiceForkConversationMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ForkConversationResponse, + V1ForkConversationResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - ForkConversationResponse, + V1ForkConversationResponse, unknown, Omit, "instanceId"> > { @@ -2465,14 +2649,14 @@ export function createRuntimeServiceForkConversationMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - ForkConversationResponse, + V1ForkConversationResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - ForkConversationResponse, + V1ForkConversationResponse, unknown, Omit, "instanceId"> > { @@ -2489,24 +2673,28 @@ export function createRuntimeServiceForkConversationMutation( export function runtimeServiceComplete( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.complete({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .complete( + CompleteRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1CompleteResponse); } export function getRuntimeServiceCompleteMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CompleteResponse, + V1CompleteResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - CompleteResponse, + V1CompleteResponse, unknown, Omit, "instanceId"> > { @@ -2520,14 +2708,14 @@ export function createRuntimeServiceCompleteMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - CompleteResponse, + V1CompleteResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - CompleteResponse, + V1CompleteResponse, unknown, Omit, "instanceId"> > { @@ -2544,24 +2732,28 @@ export function createRuntimeServiceCompleteMutation( export function runtimeServiceGitStatus( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.gitStatus({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .gitStatus( + GitStatusRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GitStatusResponse); } export function getRuntimeServiceGitStatusMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitStatusResponse, + V1GitStatusResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GitStatusResponse, + V1GitStatusResponse, unknown, Omit, "instanceId"> > { @@ -2575,14 +2767,14 @@ export function createRuntimeServiceGitStatusMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitStatusResponse, + V1GitStatusResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GitStatusResponse, + V1GitStatusResponse, unknown, Omit, "instanceId"> > { @@ -2599,24 +2791,28 @@ export function createRuntimeServiceGitStatusMutation( export function runtimeServiceGitCommit( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.gitCommit({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .gitCommit( + GitCommitRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GitCommitResponse); } export function getRuntimeServiceGitCommitMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitCommitResponse, + V1GitCommitResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GitCommitResponse, + V1GitCommitResponse, unknown, Omit, "instanceId"> > { @@ -2630,14 +2826,14 @@ export function createRuntimeServiceGitCommitMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitCommitResponse, + V1GitCommitResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GitCommitResponse, + V1GitCommitResponse, unknown, Omit, "instanceId"> > { @@ -2654,24 +2850,28 @@ export function createRuntimeServiceGitCommitMutation( export function runtimeServiceRestoreGitCommit( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.restoreGitCommit({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .restoreGitCommit( + RestoreGitCommitRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1RestoreGitCommitResponse); } export function getRuntimeServiceRestoreGitCommitMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - RestoreGitCommitResponse, + V1RestoreGitCommitResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - RestoreGitCommitResponse, + V1RestoreGitCommitResponse, unknown, Omit, "instanceId"> > { @@ -2685,14 +2885,14 @@ export function createRuntimeServiceRestoreGitCommitMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - RestoreGitCommitResponse, + V1RestoreGitCommitResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - RestoreGitCommitResponse, + V1RestoreGitCommitResponse, unknown, Omit, "instanceId"> > { @@ -2709,24 +2909,28 @@ export function createRuntimeServiceRestoreGitCommitMutation( export function runtimeServiceGitMergeToBranch( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.gitMergeToBranch({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .gitMergeToBranch( + GitMergeToBranchRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GitMergeToBranchResponse); } export function getRuntimeServiceGitMergeToBranchMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitMergeToBranchResponse, + V1GitMergeToBranchResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GitMergeToBranchResponse, + V1GitMergeToBranchResponse, unknown, Omit, "instanceId"> > { @@ -2740,14 +2944,14 @@ export function createRuntimeServiceGitMergeToBranchMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitMergeToBranchResponse, + V1GitMergeToBranchResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GitMergeToBranchResponse, + V1GitMergeToBranchResponse, unknown, Omit, "instanceId"> > { @@ -2764,24 +2968,28 @@ export function createRuntimeServiceGitMergeToBranchMutation( export function runtimeServiceGitSwitchBranch( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.gitSwitchBranch({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .gitSwitchBranch( + GitSwitchBranchRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GitSwitchBranchResponse); } export function getRuntimeServiceGitSwitchBranchMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitSwitchBranchResponse, + V1GitSwitchBranchResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GitSwitchBranchResponse, + V1GitSwitchBranchResponse, unknown, Omit, "instanceId"> > { @@ -2795,14 +3003,14 @@ export function createRuntimeServiceGitSwitchBranchMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitSwitchBranchResponse, + V1GitSwitchBranchResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GitSwitchBranchResponse, + V1GitSwitchBranchResponse, unknown, Omit, "instanceId"> > { @@ -2819,24 +3027,28 @@ export function createRuntimeServiceGitSwitchBranchMutation( export function runtimeServiceGitPull( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.gitPull({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .gitPull( + GitPullRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GitPullResponse); } export function getRuntimeServiceGitPullMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitPullResponse, + V1GitPullResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GitPullResponse, + V1GitPullResponse, unknown, Omit, "instanceId"> > { @@ -2850,14 +3062,14 @@ export function createRuntimeServiceGitPullMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitPullResponse, + V1GitPullResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GitPullResponse, + V1GitPullResponse, unknown, Omit, "instanceId"> > { @@ -2874,24 +3086,28 @@ export function createRuntimeServiceGitPullMutation( export function runtimeServiceGitPush( client: RuntimeClient, request: Omit, "instanceId">, -): Promise { - return client.runtimeService.gitPush({ - instanceId: client.instanceId, - ...request, - }); +): Promise { + return client.runtimeService + .gitPush( + GitPushRequest.fromJson({ + instanceId: client.instanceId, + ...request, + } as unknown as JsonValue), + ) + .then((r) => r.toJson() as unknown as V1GitPushResponse); } export function getRuntimeServiceGitPushMutationOptions( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitPushResponse, + V1GitPushResponse, unknown, Omit, "instanceId"> > >, ): CreateMutationOptions< - GitPushResponse, + V1GitPushResponse, unknown, Omit, "instanceId"> > { @@ -2905,14 +3121,14 @@ export function createRuntimeServiceGitPushMutation( client: RuntimeClient, options?: Partial< CreateMutationOptions< - GitPushResponse, + V1GitPushResponse, unknown, Omit, "instanceId"> > >, queryClient?: QueryClient, ): CreateMutationResult< - GitPushResponse, + V1GitPushResponse, unknown, Omit, "instanceId"> > { From 243dd495c2b8f74b5c2c8433cc4a0ce5526fe228 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 14:53:32 +0300 Subject: [PATCH 07/78] feat: add generic TData support to v2 query hooks for select transforms The generated hooks now accept a TData type parameter (defaulting to the response type), enabling select transforms that narrow the return type. This mirrors the Orval pattern and avoids forcing consumers to use derived stores as workarounds. --- web-common/scripts/generate-query-hooks.ts | 18 +- .../v2/gen/connector-service.ts | 140 ++-- .../runtime-client/v2/gen/query-service.ts | 636 +++++++++++++----- .../runtime-client/v2/gen/runtime-service.ts | 478 +++++++++---- 4 files changed, 907 insertions(+), 365 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index 7a1c8a08e44..ebf1635be73 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -287,15 +287,15 @@ function generateServiceFile(service: ServiceDef): string { ``, ); - // Tier 3: Query options + // Tier 3: Query options (generic TData for select support) lines.push( - `export function ${optsFnName}(`, + `export function ${optsFnName}(`, ` client: RuntimeClient,`, ` request: ${requestType},`, ` options?: {`, - ` query?: Partial>;`, + ` query?: Partial>;`, ` },`, - `): CreateQueryOptions<${responseType}> & { queryKey: QueryKey } {`, + `): CreateQueryOptions<${responseType}, Error, TData> & { queryKey: QueryKey } {`, ` const queryKey = ${keyFnName}(client.instanceId, request);`, ` const queryFn: QueryFunction<${responseType}> = ({ signal }) =>`, ` ${fullName}(client, request, { signal });`, @@ -304,21 +304,21 @@ function generateServiceFile(service: ServiceDef): string { ` queryFn,`, ` enabled: !!client.instanceId,`, ` ...options?.query,`, - ` };`, + ` } as CreateQueryOptions<${responseType}, Error, TData> & { queryKey: QueryKey };`, `}`, ``, ); - // Tier 4: Convenience hook + // Tier 4: Convenience hook (generic TData for select support) lines.push( - `export function ${hookName}(`, + `export function ${hookName}(`, ` client: RuntimeClient,`, ` request: ${requestType},`, ` options?: {`, - ` query?: Partial>;`, + ` query?: Partial>;`, ` },`, ` queryClient?: QueryClient,`, - `): CreateQueryResult<${responseType}> {`, + `): CreateQueryResult {`, ` const queryOptions = ${optsFnName}(client, request, options);`, ` return createQuery(queryOptions, queryClient);`, `}`, diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index 5d7fb9087b8..648aa855528 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -63,13 +63,17 @@ export function getConnectorServiceListBucketsQueryKey( ] as const; } -export function getConnectorServiceListBucketsQueryOptions( +export function getConnectorServiceListBucketsQueryOptions< + TData = V1ListBucketsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceListBucketsQueryKey( client.instanceId, request, @@ -81,17 +85,21 @@ export function getConnectorServiceListBucketsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceListBuckets( +export function createConnectorServiceListBuckets< + TData = V1ListBucketsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListBucketsQueryOptions( client, request, @@ -131,13 +139,17 @@ export function getConnectorServiceListObjectsQueryKey( ] as const; } -export function getConnectorServiceListObjectsQueryOptions( +export function getConnectorServiceListObjectsQueryOptions< + TData = V1ListObjectsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceListObjectsQueryKey( client.instanceId, request, @@ -149,17 +161,21 @@ export function getConnectorServiceListObjectsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceListObjects( +export function createConnectorServiceListObjects< + TData = V1ListObjectsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListObjectsQueryOptions( client, request, @@ -199,13 +215,17 @@ export function getConnectorServiceOLAPListTablesQueryKey( ] as const; } -export function getConnectorServiceOLAPListTablesQueryOptions( +export function getConnectorServiceOLAPListTablesQueryOptions< + TData = V1OLAPListTablesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceOLAPListTablesQueryKey( client.instanceId, request, @@ -217,17 +237,21 @@ export function getConnectorServiceOLAPListTablesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceOLAPListTables( +export function createConnectorServiceOLAPListTables< + TData = V1OLAPListTablesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceOLAPListTablesQueryOptions( client, request, @@ -267,13 +291,17 @@ export function getConnectorServiceOLAPGetTableQueryKey( ] as const; } -export function getConnectorServiceOLAPGetTableQueryOptions( +export function getConnectorServiceOLAPGetTableQueryOptions< + TData = V1OLAPGetTableResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceOLAPGetTableQueryKey( client.instanceId, request, @@ -285,17 +313,21 @@ export function getConnectorServiceOLAPGetTableQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceOLAPGetTable( +export function createConnectorServiceOLAPGetTable< + TData = V1OLAPGetTableResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceOLAPGetTableQueryOptions( client, request, @@ -335,13 +367,19 @@ export function getConnectorServiceListDatabaseSchemasQueryKey( ] as const; } -export function getConnectorServiceListDatabaseSchemasQueryOptions( +export function getConnectorServiceListDatabaseSchemasQueryOptions< + TData = V1ListDatabaseSchemasResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceListDatabaseSchemasQueryKey( client.instanceId, request, @@ -353,17 +391,23 @@ export function getConnectorServiceListDatabaseSchemasQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceListDatabaseSchemas( +export function createConnectorServiceListDatabaseSchemas< + TData = V1ListDatabaseSchemasResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListDatabaseSchemasQueryOptions( client, request, @@ -398,13 +442,17 @@ export function getConnectorServiceListTablesQueryKey( return ["ConnectorService", "listTables", instanceId, request ?? {}] as const; } -export function getConnectorServiceListTablesQueryOptions( +export function getConnectorServiceListTablesQueryOptions< + TData = V1ListTablesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceListTablesQueryKey( client.instanceId, request, @@ -416,17 +464,19 @@ export function getConnectorServiceListTablesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceListTables( +export function createConnectorServiceListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceListTablesQueryOptions( client, request, @@ -461,13 +511,17 @@ export function getConnectorServiceGetTableQueryKey( return ["ConnectorService", "getTable", instanceId, request ?? {}] as const; } -export function getConnectorServiceGetTableQueryOptions( +export function getConnectorServiceGetTableQueryOptions< + TData = V1GetTableResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getConnectorServiceGetTableQueryKey( client.instanceId, request, @@ -479,17 +533,19 @@ export function getConnectorServiceGetTableQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createConnectorServiceGetTable( +export function createConnectorServiceGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getConnectorServiceGetTableQueryOptions( client, request, diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index 084ddfe39b3..379f3b1cdfa 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -130,13 +130,17 @@ export function getQueryServiceMetricsViewAggregationQueryKey( ] as const; } -export function getQueryServiceMetricsViewAggregationQueryOptions( +export function getQueryServiceMetricsViewAggregationQueryOptions< + TData = V1MetricsViewAggregationResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceMetricsViewAggregationQueryKey( @@ -151,17 +155,23 @@ export function getQueryServiceMetricsViewAggregationQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewAggregation( +export function createQueryServiceMetricsViewAggregation< + TData = V1MetricsViewAggregationResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewAggregationQueryOptions( client, request, @@ -201,13 +211,19 @@ export function getQueryServiceMetricsViewToplistQueryKey( ] as const; } -export function getQueryServiceMetricsViewToplistQueryOptions( +export function getQueryServiceMetricsViewToplistQueryOptions< + TData = V1MetricsViewToplistResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewToplistQueryKey( client.instanceId, request, @@ -219,17 +235,23 @@ export function getQueryServiceMetricsViewToplistQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewToplist( +export function createQueryServiceMetricsViewToplist< + TData = V1MetricsViewToplistResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewToplistQueryOptions( client, request, @@ -269,13 +291,17 @@ export function getQueryServiceMetricsViewComparisonQueryKey( ] as const; } -export function getQueryServiceMetricsViewComparisonQueryOptions( +export function getQueryServiceMetricsViewComparisonQueryOptions< + TData = V1MetricsViewComparisonResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceMetricsViewComparisonQueryKey( @@ -290,17 +316,23 @@ export function getQueryServiceMetricsViewComparisonQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewComparison( +export function createQueryServiceMetricsViewComparison< + TData = V1MetricsViewComparisonResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewComparisonQueryOptions( client, request, @@ -340,13 +372,17 @@ export function getQueryServiceMetricsViewTimeSeriesQueryKey( ] as const; } -export function getQueryServiceMetricsViewTimeSeriesQueryOptions( +export function getQueryServiceMetricsViewTimeSeriesQueryOptions< + TData = V1MetricsViewTimeSeriesResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceMetricsViewTimeSeriesQueryKey( @@ -361,17 +397,23 @@ export function getQueryServiceMetricsViewTimeSeriesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewTimeSeries( +export function createQueryServiceMetricsViewTimeSeries< + TData = V1MetricsViewTimeSeriesResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTimeSeriesQueryOptions( client, request, @@ -411,13 +453,19 @@ export function getQueryServiceMetricsViewTotalsQueryKey( ] as const; } -export function getQueryServiceMetricsViewTotalsQueryOptions( +export function getQueryServiceMetricsViewTotalsQueryOptions< + TData = V1MetricsViewTotalsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewTotalsQueryKey( client.instanceId, request, @@ -429,17 +477,23 @@ export function getQueryServiceMetricsViewTotalsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewTotals( +export function createQueryServiceMetricsViewTotals< + TData = V1MetricsViewTotalsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTotalsQueryOptions( client, request, @@ -479,13 +533,19 @@ export function getQueryServiceMetricsViewRowsQueryKey( ] as const; } -export function getQueryServiceMetricsViewRowsQueryOptions( +export function getQueryServiceMetricsViewRowsQueryOptions< + TData = V1MetricsViewRowsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewRowsQueryKey( client.instanceId, request, @@ -497,17 +557,23 @@ export function getQueryServiceMetricsViewRowsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewRows( +export function createQueryServiceMetricsViewRows< + TData = V1MetricsViewRowsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewRowsQueryOptions( client, request, @@ -547,13 +613,19 @@ export function getQueryServiceMetricsViewTimeRangeQueryKey( ] as const; } -export function getQueryServiceMetricsViewTimeRangeQueryOptions( +export function getQueryServiceMetricsViewTimeRangeQueryOptions< + TData = V1MetricsViewTimeRangeResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewTimeRangeQueryKey( client.instanceId, request, @@ -565,17 +637,23 @@ export function getQueryServiceMetricsViewTimeRangeQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewTimeRange( +export function createQueryServiceMetricsViewTimeRange< + TData = V1MetricsViewTimeRangeResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTimeRangeQueryOptions( client, request, @@ -615,13 +693,19 @@ export function getQueryServiceMetricsViewSchemaQueryKey( ] as const; } -export function getQueryServiceMetricsViewSchemaQueryOptions( +export function getQueryServiceMetricsViewSchemaQueryOptions< + TData = V1MetricsViewSchemaResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewSchemaQueryKey( client.instanceId, request, @@ -633,17 +717,23 @@ export function getQueryServiceMetricsViewSchemaQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewSchema( +export function createQueryServiceMetricsViewSchema< + TData = V1MetricsViewSchemaResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewSchemaQueryOptions( client, request, @@ -683,13 +773,19 @@ export function getQueryServiceMetricsViewSearchQueryKey( ] as const; } -export function getQueryServiceMetricsViewSearchQueryOptions( +export function getQueryServiceMetricsViewSearchQueryOptions< + TData = V1MetricsViewSearchResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceMetricsViewSearchQueryKey( client.instanceId, request, @@ -701,17 +797,23 @@ export function getQueryServiceMetricsViewSearchQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewSearch( +export function createQueryServiceMetricsViewSearch< + TData = V1MetricsViewSearchResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewSearchQueryOptions( client, request, @@ -751,13 +853,17 @@ export function getQueryServiceMetricsViewTimeRangesQueryKey( ] as const; } -export function getQueryServiceMetricsViewTimeRangesQueryOptions( +export function getQueryServiceMetricsViewTimeRangesQueryOptions< + TData = V1MetricsViewTimeRangesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceMetricsViewTimeRangesQueryKey( @@ -772,17 +878,23 @@ export function getQueryServiceMetricsViewTimeRangesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewTimeRanges( +export function createQueryServiceMetricsViewTimeRanges< + TData = V1MetricsViewTimeRangesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewTimeRangesQueryOptions( client, request, @@ -822,13 +934,17 @@ export function getQueryServiceMetricsViewAnnotationsQueryKey( ] as const; } -export function getQueryServiceMetricsViewAnnotationsQueryOptions( +export function getQueryServiceMetricsViewAnnotationsQueryOptions< + TData = V1MetricsViewAnnotationsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceMetricsViewAnnotationsQueryKey( @@ -843,17 +959,23 @@ export function getQueryServiceMetricsViewAnnotationsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceMetricsViewAnnotations( +export function createQueryServiceMetricsViewAnnotations< + TData = V1MetricsViewAnnotationsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceMetricsViewAnnotationsQueryOptions( client, request, @@ -901,7 +1023,9 @@ export function getQueryServiceConvertExpressionToMetricsSQLQueryKey( ] as const; } -export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( +export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions< + TData = V1ConvertExpressionToMetricsSQLResponse, +>( client: RuntimeClient, request: Omit< PartialMessage, @@ -909,10 +1033,10 @@ export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( >, options?: { query?: Partial< - CreateQueryOptions + CreateQueryOptions >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceConvertExpressionToMetricsSQLQueryKey( @@ -927,10 +1051,16 @@ export function getQueryServiceConvertExpressionToMetricsSQLQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, - }; + } as CreateQueryOptions< + V1ConvertExpressionToMetricsSQLResponse, + Error, + TData + > & { queryKey: QueryKey }; } -export function createQueryServiceConvertExpressionToMetricsSQL( +export function createQueryServiceConvertExpressionToMetricsSQL< + TData = V1ConvertExpressionToMetricsSQLResponse, +>( client: RuntimeClient, request: Omit< PartialMessage, @@ -938,11 +1068,11 @@ export function createQueryServiceConvertExpressionToMetricsSQL( >, options?: { query?: Partial< - CreateQueryOptions + CreateQueryOptions >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceConvertExpressionToMetricsSQLQueryOptions( client, request, @@ -977,13 +1107,17 @@ export function getQueryServiceResolveCanvasQueryKey( return ["QueryService", "resolveCanvas", instanceId, request ?? {}] as const; } -export function getQueryServiceResolveCanvasQueryOptions( +export function getQueryServiceResolveCanvasQueryOptions< + TData = V1ResolveCanvasResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceResolveCanvasQueryKey( client.instanceId, request, @@ -995,17 +1129,21 @@ export function getQueryServiceResolveCanvasQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceResolveCanvas( +export function createQueryServiceResolveCanvas< + TData = V1ResolveCanvasResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceResolveCanvasQueryOptions( client, request, @@ -1045,13 +1183,19 @@ export function getQueryServiceResolveComponentQueryKey( ] as const; } -export function getQueryServiceResolveComponentQueryOptions( +export function getQueryServiceResolveComponentQueryOptions< + TData = V1ResolveComponentResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceResolveComponentQueryKey( client.instanceId, request, @@ -1063,17 +1207,23 @@ export function getQueryServiceResolveComponentQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceResolveComponent( +export function createQueryServiceResolveComponent< + TData = V1ResolveComponentResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceResolveComponentQueryOptions( client, request, @@ -1113,13 +1263,17 @@ export function getQueryServiceResolveTemplatedStringQueryKey( ] as const; } -export function getQueryServiceResolveTemplatedStringQueryOptions( +export function getQueryServiceResolveTemplatedStringQueryOptions< + TData = V1ResolveTemplatedStringResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceResolveTemplatedStringQueryKey( @@ -1134,17 +1288,23 @@ export function getQueryServiceResolveTemplatedStringQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceResolveTemplatedString( +export function createQueryServiceResolveTemplatedString< + TData = V1ResolveTemplatedStringResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceResolveTemplatedStringQueryOptions( client, request, @@ -1184,13 +1344,19 @@ export function getQueryServiceColumnRollupIntervalQueryKey( ] as const; } -export function getQueryServiceColumnRollupIntervalQueryOptions( +export function getQueryServiceColumnRollupIntervalQueryOptions< + TData = V1ColumnRollupIntervalResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnRollupIntervalQueryKey( client.instanceId, request, @@ -1202,17 +1368,23 @@ export function getQueryServiceColumnRollupIntervalQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnRollupInterval( +export function createQueryServiceColumnRollupInterval< + TData = V1ColumnRollupIntervalResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnRollupIntervalQueryOptions( client, request, @@ -1247,13 +1419,17 @@ export function getQueryServiceColumnTopKQueryKey( return ["QueryService", "columnTopK", instanceId, request ?? {}] as const; } -export function getQueryServiceColumnTopKQueryOptions( +export function getQueryServiceColumnTopKQueryOptions< + TData = V1ColumnTopKResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnTopKQueryKey( client.instanceId, request, @@ -1265,17 +1441,19 @@ export function getQueryServiceColumnTopKQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnTopK( +export function createQueryServiceColumnTopK( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTopKQueryOptions( client, request, @@ -1315,13 +1493,19 @@ export function getQueryServiceColumnNullCountQueryKey( ] as const; } -export function getQueryServiceColumnNullCountQueryOptions( +export function getQueryServiceColumnNullCountQueryOptions< + TData = V1ColumnNullCountResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnNullCountQueryKey( client.instanceId, request, @@ -1333,17 +1517,23 @@ export function getQueryServiceColumnNullCountQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnNullCount( +export function createQueryServiceColumnNullCount< + TData = V1ColumnNullCountResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnNullCountQueryOptions( client, request, @@ -1385,13 +1575,17 @@ export function getQueryServiceColumnDescriptiveStatisticsQueryKey( ] as const; } -export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( +export function getQueryServiceColumnDescriptiveStatisticsQueryOptions< + TData = V1ColumnDescriptiveStatisticsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceColumnDescriptiveStatisticsQueryKey( @@ -1406,17 +1600,25 @@ export function getQueryServiceColumnDescriptiveStatisticsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, - }; + } as CreateQueryOptions< + V1ColumnDescriptiveStatisticsResponse, + Error, + TData + > & { queryKey: QueryKey }; } -export function createQueryServiceColumnDescriptiveStatistics( +export function createQueryServiceColumnDescriptiveStatistics< + TData = V1ColumnDescriptiveStatisticsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnDescriptiveStatisticsQueryOptions( client, request, @@ -1456,13 +1658,19 @@ export function getQueryServiceColumnTimeGrainQueryKey( ] as const; } -export function getQueryServiceColumnTimeGrainQueryOptions( +export function getQueryServiceColumnTimeGrainQueryOptions< + TData = V1ColumnTimeGrainResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnTimeGrainQueryKey( client.instanceId, request, @@ -1474,17 +1682,23 @@ export function getQueryServiceColumnTimeGrainQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnTimeGrain( +export function createQueryServiceColumnTimeGrain< + TData = V1ColumnTimeGrainResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTimeGrainQueryOptions( client, request, @@ -1524,13 +1738,17 @@ export function getQueryServiceColumnNumericHistogramQueryKey( ] as const; } -export function getQueryServiceColumnNumericHistogramQueryOptions( +export function getQueryServiceColumnNumericHistogramQueryOptions< + TData = V1ColumnNumericHistogramResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getQueryServiceColumnNumericHistogramQueryKey( @@ -1545,17 +1763,23 @@ export function getQueryServiceColumnNumericHistogramQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnNumericHistogram( +export function createQueryServiceColumnNumericHistogram< + TData = V1ColumnNumericHistogramResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnNumericHistogramQueryOptions( client, request, @@ -1595,13 +1819,19 @@ export function getQueryServiceColumnRugHistogramQueryKey( ] as const; } -export function getQueryServiceColumnRugHistogramQueryOptions( +export function getQueryServiceColumnRugHistogramQueryOptions< + TData = V1ColumnRugHistogramResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnRugHistogramQueryKey( client.instanceId, request, @@ -1613,17 +1843,23 @@ export function getQueryServiceColumnRugHistogramQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnRugHistogram( +export function createQueryServiceColumnRugHistogram< + TData = V1ColumnRugHistogramResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnRugHistogramQueryOptions( client, request, @@ -1663,13 +1899,19 @@ export function getQueryServiceColumnTimeRangeQueryKey( ] as const; } -export function getQueryServiceColumnTimeRangeQueryOptions( +export function getQueryServiceColumnTimeRangeQueryOptions< + TData = V1ColumnTimeRangeResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnTimeRangeQueryKey( client.instanceId, request, @@ -1681,17 +1923,23 @@ export function getQueryServiceColumnTimeRangeQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnTimeRange( +export function createQueryServiceColumnTimeRange< + TData = V1ColumnTimeRangeResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTimeRangeQueryOptions( client, request, @@ -1731,13 +1979,19 @@ export function getQueryServiceColumnCardinalityQueryKey( ] as const; } -export function getQueryServiceColumnCardinalityQueryOptions( +export function getQueryServiceColumnCardinalityQueryOptions< + TData = V1ColumnCardinalityResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnCardinalityQueryKey( client.instanceId, request, @@ -1749,17 +2003,23 @@ export function getQueryServiceColumnCardinalityQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnCardinality( +export function createQueryServiceColumnCardinality< + TData = V1ColumnCardinalityResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnCardinalityQueryOptions( client, request, @@ -1799,13 +2059,19 @@ export function getQueryServiceColumnTimeSeriesQueryKey( ] as const; } -export function getQueryServiceColumnTimeSeriesQueryOptions( +export function getQueryServiceColumnTimeSeriesQueryOptions< + TData = V1ColumnTimeSeriesResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceColumnTimeSeriesQueryKey( client.instanceId, request, @@ -1817,17 +2083,23 @@ export function getQueryServiceColumnTimeSeriesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceColumnTimeSeries( +export function createQueryServiceColumnTimeSeries< + TData = V1ColumnTimeSeriesResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceColumnTimeSeriesQueryOptions( client, request, @@ -1867,13 +2139,19 @@ export function getQueryServiceTableCardinalityQueryKey( ] as const; } -export function getQueryServiceTableCardinalityQueryOptions( +export function getQueryServiceTableCardinalityQueryOptions< + TData = V1TableCardinalityResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceTableCardinalityQueryKey( client.instanceId, request, @@ -1885,17 +2163,23 @@ export function getQueryServiceTableCardinalityQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceTableCardinality( +export function createQueryServiceTableCardinality< + TData = V1TableCardinalityResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceTableCardinalityQueryOptions( client, request, @@ -1930,13 +2214,17 @@ export function getQueryServiceTableColumnsQueryKey( return ["QueryService", "tableColumns", instanceId, request ?? {}] as const; } -export function getQueryServiceTableColumnsQueryOptions( +export function getQueryServiceTableColumnsQueryOptions< + TData = V1TableColumnsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceTableColumnsQueryKey( client.instanceId, request, @@ -1948,17 +2236,19 @@ export function getQueryServiceTableColumnsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceTableColumns( +export function createQueryServiceTableColumns( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceTableColumnsQueryOptions( client, request, @@ -1993,13 +2283,17 @@ export function getQueryServiceTableRowsQueryKey( return ["QueryService", "tableRows", instanceId, request ?? {}] as const; } -export function getQueryServiceTableRowsQueryOptions( +export function getQueryServiceTableRowsQueryOptions< + TData = V1TableRowsResponse, +>( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getQueryServiceTableRowsQueryKey(client.instanceId, request); const queryFn: QueryFunction = ({ signal }) => queryServiceTableRows(client, request, { signal }); @@ -2008,17 +2302,19 @@ export function getQueryServiceTableRowsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createQueryServiceTableRows( +export function createQueryServiceTableRows( client: RuntimeClient, request: Omit, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getQueryServiceTableRowsQueryOptions( client, request, diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index fee8fd98ab3..80c398ce894 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -140,13 +140,13 @@ export function getRuntimeServicePingQueryKey( return ["RuntimeService", "ping", instanceId, request ?? {}] as const; } -export function getRuntimeServicePingQueryOptions( +export function getRuntimeServicePingQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServicePingQueryKey(client.instanceId, request); const queryFn: QueryFunction = ({ signal }) => runtimeServicePing(client, request, { signal }); @@ -155,17 +155,19 @@ export function getRuntimeServicePingQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServicePing( +export function createRuntimeServicePing( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServicePingQueryOptions( client, request, @@ -196,13 +198,13 @@ export function getRuntimeServiceHealthQueryKey( return ["RuntimeService", "health", instanceId, request ?? {}] as const; } -export function getRuntimeServiceHealthQueryOptions( +export function getRuntimeServiceHealthQueryOptions( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { queryKey: QueryKey } { const queryKey = getRuntimeServiceHealthQueryKey(client.instanceId, request); const queryFn: QueryFunction = ({ signal }) => runtimeServiceHealth(client, request, { signal }); @@ -211,17 +213,19 @@ export function getRuntimeServiceHealthQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceHealth( +export function createRuntimeServiceHealth( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceHealthQueryOptions( client, request, @@ -261,13 +265,17 @@ export function getRuntimeServiceInstanceHealthQueryKey( ] as const; } -export function getRuntimeServiceInstanceHealthQueryOptions( +export function getRuntimeServiceInstanceHealthQueryOptions< + TData = V1InstanceHealthResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceInstanceHealthQueryKey( client.instanceId, request, @@ -279,17 +287,21 @@ export function getRuntimeServiceInstanceHealthQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceInstanceHealth( +export function createRuntimeServiceInstanceHealth< + TData = V1InstanceHealthResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceInstanceHealthQueryOptions( client, request, @@ -326,13 +338,17 @@ export function getRuntimeServiceListInstancesQueryKey( ] as const; } -export function getRuntimeServiceListInstancesQueryOptions( +export function getRuntimeServiceListInstancesQueryOptions< + TData = V1ListInstancesResponse, +>( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListInstancesQueryKey( client.instanceId, request, @@ -344,17 +360,21 @@ export function getRuntimeServiceListInstancesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListInstances( +export function createRuntimeServiceListInstances< + TData = V1ListInstancesResponse, +>( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListInstancesQueryOptions( client, request, @@ -389,13 +409,17 @@ export function getRuntimeServiceGetInstanceQueryKey( return ["RuntimeService", "getInstance", instanceId, request ?? {}] as const; } -export function getRuntimeServiceGetInstanceQueryOptions( +export function getRuntimeServiceGetInstanceQueryOptions< + TData = V1GetInstanceResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetInstanceQueryKey( client.instanceId, request, @@ -407,17 +431,19 @@ export function getRuntimeServiceGetInstanceQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetInstance( +export function createRuntimeServiceGetInstance( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetInstanceQueryOptions( client, request, @@ -452,13 +478,17 @@ export function getRuntimeServiceListFilesQueryKey( return ["RuntimeService", "listFiles", instanceId, request ?? {}] as const; } -export function getRuntimeServiceListFilesQueryOptions( +export function getRuntimeServiceListFilesQueryOptions< + TData = V1ListFilesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListFilesQueryKey( client.instanceId, request, @@ -470,17 +500,19 @@ export function getRuntimeServiceListFilesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListFiles( +export function createRuntimeServiceListFiles( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListFilesQueryOptions( client, request, @@ -515,13 +547,15 @@ export function getRuntimeServiceGetFileQueryKey( return ["RuntimeService", "getFile", instanceId, request ?? {}] as const; } -export function getRuntimeServiceGetFileQueryOptions( +export function getRuntimeServiceGetFileQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetFileQueryKey(client.instanceId, request); const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetFile(client, request, { signal }); @@ -530,17 +564,19 @@ export function getRuntimeServiceGetFileQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetFile( +export function createRuntimeServiceGetFile( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetFileQueryOptions( client, request, @@ -572,13 +608,17 @@ export function getRuntimeServiceListExamplesQueryKey( return ["RuntimeService", "listExamples", instanceId, request ?? {}] as const; } -export function getRuntimeServiceListExamplesQueryOptions( +export function getRuntimeServiceListExamplesQueryOptions< + TData = V1ListExamplesResponse, +>( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListExamplesQueryKey( client.instanceId, request, @@ -590,17 +630,21 @@ export function getRuntimeServiceListExamplesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListExamples( +export function createRuntimeServiceListExamples< + TData = V1ListExamplesResponse, +>( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListExamplesQueryOptions( client, request, @@ -640,13 +684,17 @@ export function getRuntimeServiceQueryResolverQueryKey( ] as const; } -export function getRuntimeServiceQueryResolverQueryOptions( +export function getRuntimeServiceQueryResolverQueryOptions< + TData = V1QueryResolverResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceQueryResolverQueryKey( client.instanceId, request, @@ -658,17 +706,21 @@ export function getRuntimeServiceQueryResolverQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceQueryResolver( +export function createRuntimeServiceQueryResolver< + TData = V1QueryResolverResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceQueryResolverQueryOptions( client, request, @@ -703,13 +755,15 @@ export function getRuntimeServiceGetLogsQueryKey( return ["RuntimeService", "getLogs", instanceId, request ?? {}] as const; } -export function getRuntimeServiceGetLogsQueryOptions( +export function getRuntimeServiceGetLogsQueryOptions( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetLogsQueryKey(client.instanceId, request); const queryFn: QueryFunction = ({ signal }) => runtimeServiceGetLogs(client, request, { signal }); @@ -718,17 +772,19 @@ export function getRuntimeServiceGetLogsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetLogs( +export function createRuntimeServiceGetLogs( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetLogsQueryOptions( client, request, @@ -768,13 +824,17 @@ export function getRuntimeServiceListResourcesQueryKey( ] as const; } -export function getRuntimeServiceListResourcesQueryOptions( +export function getRuntimeServiceListResourcesQueryOptions< + TData = V1ListResourcesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListResourcesQueryKey( client.instanceId, request, @@ -786,17 +846,21 @@ export function getRuntimeServiceListResourcesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListResources( +export function createRuntimeServiceListResources< + TData = V1ListResourcesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListResourcesQueryOptions( client, request, @@ -831,13 +895,17 @@ export function getRuntimeServiceGetResourceQueryKey( return ["RuntimeService", "getResource", instanceId, request ?? {}] as const; } -export function getRuntimeServiceGetResourceQueryOptions( +export function getRuntimeServiceGetResourceQueryOptions< + TData = V1GetResourceResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetResourceQueryKey( client.instanceId, request, @@ -849,17 +917,19 @@ export function getRuntimeServiceGetResourceQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetResource( +export function createRuntimeServiceGetResource( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetResourceQueryOptions( client, request, @@ -894,13 +964,17 @@ export function getRuntimeServiceGetExploreQueryKey( return ["RuntimeService", "getExplore", instanceId, request ?? {}] as const; } -export function getRuntimeServiceGetExploreQueryOptions( +export function getRuntimeServiceGetExploreQueryOptions< + TData = V1GetExploreResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetExploreQueryKey( client.instanceId, request, @@ -912,17 +986,19 @@ export function getRuntimeServiceGetExploreQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetExplore( +export function createRuntimeServiceGetExplore( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetExploreQueryOptions( client, request, @@ -962,13 +1038,19 @@ export function getRuntimeServiceGetModelPartitionsQueryKey( ] as const; } -export function getRuntimeServiceGetModelPartitionsQueryOptions( +export function getRuntimeServiceGetModelPartitionsQueryOptions< + TData = V1GetModelPartitionsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetModelPartitionsQueryKey( client.instanceId, request, @@ -980,17 +1062,23 @@ export function getRuntimeServiceGetModelPartitionsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetModelPartitions( +export function createRuntimeServiceGetModelPartitions< + TData = V1GetModelPartitionsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetModelPartitionsQueryOptions( client, request, @@ -1027,13 +1115,19 @@ export function getRuntimeServiceListConnectorDriversQueryKey( ] as const; } -export function getRuntimeServiceListConnectorDriversQueryOptions( +export function getRuntimeServiceListConnectorDriversQueryOptions< + TData = V1ListConnectorDriversResponse, +>( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListConnectorDriversQueryKey( client.instanceId, request, @@ -1045,17 +1139,23 @@ export function getRuntimeServiceListConnectorDriversQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListConnectorDrivers( +export function createRuntimeServiceListConnectorDrivers< + TData = V1ListConnectorDriversResponse, +>( client: RuntimeClient, request: PartialMessage, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListConnectorDriversQueryOptions( client, request, @@ -1095,13 +1195,19 @@ export function getRuntimeServiceAnalyzeConnectorsQueryKey( ] as const; } -export function getRuntimeServiceAnalyzeConnectorsQueryOptions( +export function getRuntimeServiceAnalyzeConnectorsQueryOptions< + TData = V1AnalyzeConnectorsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceAnalyzeConnectorsQueryKey( client.instanceId, request, @@ -1113,17 +1219,23 @@ export function getRuntimeServiceAnalyzeConnectorsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceAnalyzeConnectors( +export function createRuntimeServiceAnalyzeConnectors< + TData = V1AnalyzeConnectorsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceAnalyzeConnectorsQueryOptions( client, request, @@ -1163,13 +1275,17 @@ export function getRuntimeServiceListNotifierConnectorsQueryKey( ] as const; } -export function getRuntimeServiceListNotifierConnectorsQueryOptions( +export function getRuntimeServiceListNotifierConnectorsQueryOptions< + TData = V1ListNotifierConnectorsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { +): CreateQueryOptions & { queryKey: QueryKey; } { const queryKey = getRuntimeServiceListNotifierConnectorsQueryKey( @@ -1184,17 +1300,23 @@ export function getRuntimeServiceListNotifierConnectorsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListNotifierConnectors( +export function createRuntimeServiceListNotifierConnectors< + TData = V1ListNotifierConnectorsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListNotifierConnectorsQueryOptions( client, request, @@ -1234,13 +1356,19 @@ export function getRuntimeServiceListConversationsQueryKey( ] as const; } -export function getRuntimeServiceListConversationsQueryOptions( +export function getRuntimeServiceListConversationsQueryOptions< + TData = V1ListConversationsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListConversationsQueryKey( client.instanceId, request, @@ -1252,17 +1380,23 @@ export function getRuntimeServiceListConversationsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListConversations( +export function createRuntimeServiceListConversations< + TData = V1ListConversationsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListConversationsQueryOptions( client, request, @@ -1302,13 +1436,19 @@ export function getRuntimeServiceGetConversationQueryKey( ] as const; } -export function getRuntimeServiceGetConversationQueryOptions( +export function getRuntimeServiceGetConversationQueryOptions< + TData = V1GetConversationResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceGetConversationQueryKey( client.instanceId, request, @@ -1320,17 +1460,23 @@ export function getRuntimeServiceGetConversationQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceGetConversation( +export function createRuntimeServiceGetConversation< + TData = V1GetConversationResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceGetConversationQueryOptions( client, request, @@ -1365,13 +1511,17 @@ export function getRuntimeServiceListToolsQueryKey( return ["RuntimeService", "listTools", instanceId, request ?? {}] as const; } -export function getRuntimeServiceListToolsQueryOptions( +export function getRuntimeServiceListToolsQueryOptions< + TData = V1ListToolsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListToolsQueryKey( client.instanceId, request, @@ -1383,17 +1533,19 @@ export function getRuntimeServiceListToolsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListTools( +export function createRuntimeServiceListTools( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListToolsQueryOptions( client, request, @@ -1424,13 +1576,17 @@ export function getRuntimeServiceIssueDevJWTQueryKey( return ["RuntimeService", "issueDevJWT", instanceId, request ?? {}] as const; } -export function getRuntimeServiceIssueDevJWTQueryOptions( +export function getRuntimeServiceIssueDevJWTQueryOptions< + TData = V1IssueDevJWTResponse, +>( client: RuntimeClient, request: V1IssueDevJWTRequest, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceIssueDevJWTQueryKey( client.instanceId, request, @@ -1442,17 +1598,19 @@ export function getRuntimeServiceIssueDevJWTQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceIssueDevJWT( +export function createRuntimeServiceIssueDevJWT( client: RuntimeClient, request: V1IssueDevJWTRequest, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceIssueDevJWTQueryOptions( client, request, @@ -1492,13 +1650,19 @@ export function getRuntimeServiceAnalyzeVariablesQueryKey( ] as const; } -export function getRuntimeServiceAnalyzeVariablesQueryOptions( +export function getRuntimeServiceAnalyzeVariablesQueryOptions< + TData = V1AnalyzeVariablesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceAnalyzeVariablesQueryKey( client.instanceId, request, @@ -1510,17 +1674,23 @@ export function getRuntimeServiceAnalyzeVariablesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceAnalyzeVariables( +export function createRuntimeServiceAnalyzeVariables< + TData = V1AnalyzeVariablesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceAnalyzeVariablesQueryOptions( client, request, @@ -1560,13 +1730,17 @@ export function getRuntimeServiceListGitCommitsQueryKey( ] as const; } -export function getRuntimeServiceListGitCommitsQueryOptions( +export function getRuntimeServiceListGitCommitsQueryOptions< + TData = V1ListGitCommitsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListGitCommitsQueryKey( client.instanceId, request, @@ -1578,17 +1752,21 @@ export function getRuntimeServiceListGitCommitsQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListGitCommits( +export function createRuntimeServiceListGitCommits< + TData = V1ListGitCommitsResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial>; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListGitCommitsQueryOptions( client, request, @@ -1628,13 +1806,19 @@ export function getRuntimeServiceListGitBranchesQueryKey( ] as const; } -export function getRuntimeServiceListGitBranchesQueryOptions( +export function getRuntimeServiceListGitBranchesQueryOptions< + TData = V1ListGitBranchesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, -): CreateQueryOptions & { queryKey: QueryKey } { +): CreateQueryOptions & { + queryKey: QueryKey; +} { const queryKey = getRuntimeServiceListGitBranchesQueryKey( client.instanceId, request, @@ -1646,17 +1830,23 @@ export function getRuntimeServiceListGitBranchesQueryOptions( queryFn, enabled: !!client.instanceId, ...options?.query, + } as CreateQueryOptions & { + queryKey: QueryKey; }; } -export function createRuntimeServiceListGitBranches( +export function createRuntimeServiceListGitBranches< + TData = V1ListGitBranchesResponse, +>( client: RuntimeClient, request: Omit, "instanceId">, options?: { - query?: Partial>; + query?: Partial< + CreateQueryOptions + >; }, queryClient?: QueryClient, -): CreateQueryResult { +): CreateQueryResult { const queryOptions = getRuntimeServiceListGitBranchesQueryOptions( client, request, From a77cf00a038e2c1932cf6b5c419f5b8b694c568b Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 15:11:10 +0300 Subject: [PATCH 08/78] fix: strip undefined values before proto fromJson in JSON bridge Proto fromJson() rejects undefined field values, but callers may pass them (e.g., TanStack Query's pageParam starts as undefined, or reactive props that resolve asynchronously). Orval's HTTP client silently omitted undefined values; the JSON bridge must do the same. --- web-common/scripts/generate-query-hooks.ts | 15 +- .../v2/gen/connector-service.ts | 78 +-- .../runtime-client/v2/gen/query-service.ts | 318 +++++++----- .../runtime-client/v2/gen/runtime-service.ts | 473 +++++++++++------- 4 files changed, 546 insertions(+), 338 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index ebf1635be73..186974e314f 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -237,6 +237,17 @@ function generateServiceFile(service: ServiceDef): string { `} from "${protoImportPath}";`, ); + // Utility: strip undefined values before passing to proto fromJson + // (proto fromJson rejects undefined; Orval's HTTP client silently omitted them) + lines.push( + ``, + `/** Strip undefined values — proto fromJson rejects them */`, + `// eslint-disable-next-line @typescript-eslint/no-explicit-any`, + `function stripUndefined(obj: Record): Record {`, + ` return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));`, + `}`, + ); + lines.push(``); // --- Query methods --- @@ -269,7 +280,7 @@ function generateServiceFile(service: ServiceDef): string { ` options?: { signal?: AbortSignal },`, `): Promise<${responseType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, - ` ${m.inputType}.fromJson(${requestSpread} as unknown as JsonValue),`, + ` ${m.inputType}.fromJson(stripUndefined(${requestSpread}) as unknown as JsonValue),`, ` { signal: options?.signal },`, ` ).then(r => r.toJson() as unknown as ${responseType});`, `}`, @@ -354,7 +365,7 @@ function generateServiceFile(service: ServiceDef): string { ` request: ${requestType},`, `): Promise<${responseType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, - ` ${m.inputType}.fromJson(${requestSpread} as unknown as JsonValue),`, + ` ${m.inputType}.fromJson(stripUndefined(${requestSpread}) as unknown as JsonValue),`, ` ).then(r => r.toJson() as unknown as ${responseType});`, `}`, ``, diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index 648aa855528..a240b5cc2e3 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -32,6 +32,14 @@ import { OLAPListTablesRequest, } from "../../../proto/gen/rill/runtime/v1/connectors_pb"; +/** Strip undefined values — proto fromJson rejects them */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function stripUndefined(obj: Record): Record { + return Object.fromEntries( + Object.entries(obj).filter(([, v]) => v !== undefined), + ); +} + /** * Raw RPC call: ConnectorService.ListBuckets */ @@ -42,10 +50,12 @@ export function connectorServiceListBuckets( ): Promise { return client.connectorService .listBuckets( - ListBucketsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListBucketsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListBucketsResponse); @@ -118,10 +128,12 @@ export function connectorServiceListObjects( ): Promise { return client.connectorService .listObjects( - ListObjectsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListObjectsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListObjectsResponse); @@ -194,10 +206,12 @@ export function connectorServiceOLAPListTables( ): Promise { return client.connectorService .oLAPListTables( - OLAPListTablesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + OLAPListTablesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1OLAPListTablesResponse); @@ -270,10 +284,12 @@ export function connectorServiceOLAPGetTable( ): Promise { return client.connectorService .oLAPGetTable( - OLAPGetTableRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + OLAPGetTableRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1OLAPGetTableResponse); @@ -346,10 +362,12 @@ export function connectorServiceListDatabaseSchemas( ): Promise { return client.connectorService .listDatabaseSchemas( - ListDatabaseSchemasRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListDatabaseSchemasRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListDatabaseSchemasResponse); @@ -426,10 +444,12 @@ export function connectorServiceListTables( ): Promise { return client.connectorService .listTables( - ListTablesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListTablesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListTablesResponse); @@ -495,10 +515,12 @@ export function connectorServiceGetTable( ): Promise { return client.connectorService .getTable( - GetTableRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetTableRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetTableResponse); diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index 379f3b1cdfa..e4961c21dc4 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -99,6 +99,14 @@ import { TableRowsRequest, } from "../../../proto/gen/rill/runtime/v1/queries_pb"; +/** Strip undefined values — proto fromJson rejects them */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function stripUndefined(obj: Record): Record { + return Object.fromEntries( + Object.entries(obj).filter(([, v]) => v !== undefined), + ); +} + /** * Raw RPC call: QueryService.MetricsViewAggregation */ @@ -109,10 +117,12 @@ export function queryServiceMetricsViewAggregation( ): Promise { return client.queryService .metricsViewAggregation( - MetricsViewAggregationRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewAggregationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewAggregationResponse); @@ -190,10 +200,12 @@ export function queryServiceMetricsViewToplist( ): Promise { return client.queryService .metricsViewToplist( - MetricsViewToplistRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewToplistRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewToplistResponse); @@ -270,10 +282,12 @@ export function queryServiceMetricsViewComparison( ): Promise { return client.queryService .metricsViewComparison( - MetricsViewComparisonRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewComparisonRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewComparisonResponse); @@ -351,10 +365,12 @@ export function queryServiceMetricsViewTimeSeries( ): Promise { return client.queryService .metricsViewTimeSeries( - MetricsViewTimeSeriesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewTimeSeriesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewTimeSeriesResponse); @@ -432,10 +448,12 @@ export function queryServiceMetricsViewTotals( ): Promise { return client.queryService .metricsViewTotals( - MetricsViewTotalsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewTotalsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewTotalsResponse); @@ -512,10 +530,12 @@ export function queryServiceMetricsViewRows( ): Promise { return client.queryService .metricsViewRows( - MetricsViewRowsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewRowsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewRowsResponse); @@ -592,10 +612,12 @@ export function queryServiceMetricsViewTimeRange( ): Promise { return client.queryService .metricsViewTimeRange( - MetricsViewTimeRangeRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewTimeRangeRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewTimeRangeResponse); @@ -672,10 +694,12 @@ export function queryServiceMetricsViewSchema( ): Promise { return client.queryService .metricsViewSchema( - MetricsViewSchemaRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewSchemaRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewSchemaResponse); @@ -752,10 +776,12 @@ export function queryServiceMetricsViewSearch( ): Promise { return client.queryService .metricsViewSearch( - MetricsViewSearchRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewSearchRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewSearchResponse); @@ -832,10 +858,12 @@ export function queryServiceMetricsViewTimeRanges( ): Promise { return client.queryService .metricsViewTimeRanges( - MetricsViewTimeRangesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewTimeRangesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewTimeRangesResponse); @@ -913,10 +941,12 @@ export function queryServiceMetricsViewAnnotations( ): Promise { return client.queryService .metricsViewAnnotations( - MetricsViewAnnotationsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + MetricsViewAnnotationsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1MetricsViewAnnotationsResponse); @@ -997,10 +1027,12 @@ export function queryServiceConvertExpressionToMetricsSQL( ): Promise { return client.queryService .convertExpressionToMetricsSQL( - ConvertExpressionToMetricsSQLRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ConvertExpressionToMetricsSQLRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then( @@ -1091,10 +1123,12 @@ export function queryServiceResolveCanvas( ): Promise { return client.queryService .resolveCanvas( - ResolveCanvasRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ResolveCanvasRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ResolveCanvasResponse); @@ -1162,10 +1196,12 @@ export function queryServiceResolveComponent( ): Promise { return client.queryService .resolveComponent( - ResolveComponentRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ResolveComponentRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ResolveComponentResponse); @@ -1242,10 +1278,12 @@ export function queryServiceResolveTemplatedString( ): Promise { return client.queryService .resolveTemplatedString( - ResolveTemplatedStringRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ResolveTemplatedStringRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ResolveTemplatedStringResponse); @@ -1323,10 +1361,12 @@ export function queryServiceColumnRollupInterval( ): Promise { return client.queryService .columnRollupInterval( - ColumnRollupIntervalRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnRollupIntervalRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnRollupIntervalResponse); @@ -1403,10 +1443,12 @@ export function queryServiceColumnTopK( ): Promise { return client.queryService .columnTopK( - ColumnTopKRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnTopKRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnTopKResponse); @@ -1472,10 +1514,12 @@ export function queryServiceColumnNullCount( ): Promise { return client.queryService .columnNullCount( - ColumnNullCountRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnNullCountRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnNullCountResponse); @@ -1552,10 +1596,12 @@ export function queryServiceColumnDescriptiveStatistics( ): Promise { return client.queryService .columnDescriptiveStatistics( - ColumnDescriptiveStatisticsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnDescriptiveStatisticsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then( @@ -1637,10 +1683,12 @@ export function queryServiceColumnTimeGrain( ): Promise { return client.queryService .columnTimeGrain( - ColumnTimeGrainRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnTimeGrainRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnTimeGrainResponse); @@ -1717,10 +1765,12 @@ export function queryServiceColumnNumericHistogram( ): Promise { return client.queryService .columnNumericHistogram( - ColumnNumericHistogramRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnNumericHistogramRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnNumericHistogramResponse); @@ -1798,10 +1848,12 @@ export function queryServiceColumnRugHistogram( ): Promise { return client.queryService .columnRugHistogram( - ColumnRugHistogramRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnRugHistogramRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnRugHistogramResponse); @@ -1878,10 +1930,12 @@ export function queryServiceColumnTimeRange( ): Promise { return client.queryService .columnTimeRange( - ColumnTimeRangeRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnTimeRangeRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnTimeRangeResponse); @@ -1958,10 +2012,12 @@ export function queryServiceColumnCardinality( ): Promise { return client.queryService .columnCardinality( - ColumnCardinalityRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnCardinalityRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnCardinalityResponse); @@ -2038,10 +2094,12 @@ export function queryServiceColumnTimeSeries( ): Promise { return client.queryService .columnTimeSeries( - ColumnTimeSeriesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ColumnTimeSeriesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ColumnTimeSeriesResponse); @@ -2118,10 +2176,12 @@ export function queryServiceTableCardinality( ): Promise { return client.queryService .tableCardinality( - TableCardinalityRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + TableCardinalityRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1TableCardinalityResponse); @@ -2198,10 +2258,12 @@ export function queryServiceTableColumns( ): Promise { return client.queryService .tableColumns( - TableColumnsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + TableColumnsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1TableColumnsResponse); @@ -2267,10 +2329,12 @@ export function queryServiceTableRows( ): Promise { return client.queryService .tableRows( - TableRowsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + TableRowsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1TableRowsResponse); @@ -2332,10 +2396,12 @@ export function queryServiceQuery( ): Promise { return client.queryService .query( - QueryRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + QueryRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1QueryResponse); } @@ -2388,10 +2454,12 @@ export function queryServiceExport( ): Promise { return client.queryService .export( - ExportRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ExportRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1ExportResponse); } @@ -2444,10 +2512,12 @@ export function queryServiceExportReport( ): Promise { return client.queryService .exportReport( - ExportReportRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ExportReportRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1ExportReportResponse); } diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index 80c398ce894..7f4e61f6d3b 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -118,6 +118,14 @@ import { UnpackExampleRequest, } from "../../../proto/gen/rill/runtime/v1/api_pb"; +/** Strip undefined values — proto fromJson rejects them */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function stripUndefined(obj: Record): Record { + return Object.fromEntries( + Object.entries(obj).filter(([, v]) => v !== undefined), + ); +} + /** * Raw RPC call: RuntimeService.Ping */ @@ -127,9 +135,10 @@ export function runtimeServicePing( options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService - .ping(PingRequest.fromJson(request as unknown as JsonValue), { - signal: options?.signal, - }) + .ping( + PingRequest.fromJson(stripUndefined(request) as unknown as JsonValue), + { signal: options?.signal }, + ) .then((r) => r.toJson() as unknown as V1PingResponse); } @@ -185,9 +194,10 @@ export function runtimeServiceHealth( options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService - .health(HealthRequest.fromJson(request as unknown as JsonValue), { - signal: options?.signal, - }) + .health( + HealthRequest.fromJson(stripUndefined(request) as unknown as JsonValue), + { signal: options?.signal }, + ) .then((r) => r.toJson() as unknown as V1HealthResponse); } @@ -244,10 +254,12 @@ export function runtimeServiceInstanceHealth( ): Promise { return client.runtimeService .instanceHealth( - InstanceHealthRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + InstanceHealthRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1InstanceHealthResponse); @@ -320,7 +332,9 @@ export function runtimeServiceListInstances( ): Promise { return client.runtimeService .listInstances( - ListInstancesRequest.fromJson(request as unknown as JsonValue), + ListInstancesRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListInstancesResponse); @@ -393,10 +407,12 @@ export function runtimeServiceGetInstance( ): Promise { return client.runtimeService .getInstance( - GetInstanceRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetInstanceResponse); @@ -462,10 +478,12 @@ export function runtimeServiceListFiles( ): Promise { return client.runtimeService .listFiles( - ListFilesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListFilesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListFilesResponse); @@ -531,10 +549,12 @@ export function runtimeServiceGetFile( ): Promise { return client.runtimeService .getFile( - GetFileRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetFileResponse); @@ -595,7 +615,9 @@ export function runtimeServiceListExamples( ): Promise { return client.runtimeService .listExamples( - ListExamplesRequest.fromJson(request as unknown as JsonValue), + ListExamplesRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListExamplesResponse); @@ -663,10 +685,12 @@ export function runtimeServiceQueryResolver( ): Promise { return client.runtimeService .queryResolver( - QueryResolverRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + QueryResolverRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1QueryResolverResponse); @@ -739,10 +763,12 @@ export function runtimeServiceGetLogs( ): Promise { return client.runtimeService .getLogs( - GetLogsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetLogsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetLogsResponse); @@ -803,10 +829,12 @@ export function runtimeServiceListResources( ): Promise { return client.runtimeService .listResources( - ListResourcesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListResourcesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListResourcesResponse); @@ -879,10 +907,12 @@ export function runtimeServiceGetResource( ): Promise { return client.runtimeService .getResource( - GetResourceRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetResourceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetResourceResponse); @@ -948,10 +978,12 @@ export function runtimeServiceGetExplore( ): Promise { return client.runtimeService .getExplore( - GetExploreRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetExploreRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetExploreResponse); @@ -1017,10 +1049,12 @@ export function runtimeServiceGetModelPartitions( ): Promise { return client.runtimeService .getModelPartitions( - GetModelPartitionsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetModelPartitionsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetModelPartitionsResponse); @@ -1097,7 +1131,9 @@ export function runtimeServiceListConnectorDrivers( ): Promise { return client.runtimeService .listConnectorDrivers( - ListConnectorDriversRequest.fromJson(request as unknown as JsonValue), + ListConnectorDriversRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListConnectorDriversResponse); @@ -1174,10 +1210,12 @@ export function runtimeServiceAnalyzeConnectors( ): Promise { return client.runtimeService .analyzeConnectors( - AnalyzeConnectorsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + AnalyzeConnectorsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1AnalyzeConnectorsResponse); @@ -1254,10 +1292,12 @@ export function runtimeServiceListNotifierConnectors( ): Promise { return client.runtimeService .listNotifierConnectors( - ListNotifierConnectorsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListNotifierConnectorsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListNotifierConnectorsResponse); @@ -1335,10 +1375,12 @@ export function runtimeServiceListConversations( ): Promise { return client.runtimeService .listConversations( - ListConversationsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListConversationsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListConversationsResponse); @@ -1415,10 +1457,12 @@ export function runtimeServiceGetConversation( ): Promise { return client.runtimeService .getConversation( - GetConversationRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GetConversationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1GetConversationResponse); @@ -1495,10 +1539,12 @@ export function runtimeServiceListTools( ): Promise { return client.runtimeService .listTools( - ListToolsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListToolsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListToolsResponse); @@ -1563,9 +1609,12 @@ export function runtimeServiceIssueDevJWT( options?: { signal?: AbortSignal }, ): Promise { return client.runtimeService - .issueDevJWT(IssueDevJWTRequest.fromJson(request as unknown as JsonValue), { - signal: options?.signal, - }) + .issueDevJWT( + IssueDevJWTRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), + { signal: options?.signal }, + ) .then((r) => r.toJson() as unknown as V1IssueDevJWTResponse); } @@ -1629,10 +1678,12 @@ export function runtimeServiceAnalyzeVariables( ): Promise { return client.runtimeService .analyzeVariables( - AnalyzeVariablesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + AnalyzeVariablesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1AnalyzeVariablesResponse); @@ -1709,10 +1760,12 @@ export function runtimeServiceListGitCommits( ): Promise { return client.runtimeService .listGitCommits( - ListGitCommitsRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListGitCommitsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListGitCommitsResponse); @@ -1785,10 +1838,12 @@ export function runtimeServiceListGitBranches( ): Promise { return client.runtimeService .listGitBranches( - ListGitBranchesRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ListGitBranchesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), { signal: options?.signal }, ) .then((r) => r.toJson() as unknown as V1ListGitBranchesResponse); @@ -1864,10 +1919,12 @@ export function runtimeServiceCreateInstance( ): Promise { return client.runtimeService .createInstance( - CreateInstanceRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + CreateInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1CreateInstanceResponse); } @@ -1923,10 +1980,12 @@ export function runtimeServiceEditInstance( ): Promise { return client.runtimeService .editInstance( - EditInstanceRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + EditInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1EditInstanceResponse); } @@ -1982,10 +2041,12 @@ export function runtimeServiceDeleteInstance( ): Promise { return client.runtimeService .deleteInstance( - DeleteInstanceRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + DeleteInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1DeleteInstanceResponse); } @@ -2041,10 +2102,12 @@ export function runtimeServiceReloadConfig( ): Promise { return client.runtimeService .reloadConfig( - ReloadConfigRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ReloadConfigRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1ReloadConfigResponse); } @@ -2100,10 +2163,12 @@ export function runtimeServicePutFile( ): Promise { return client.runtimeService .putFile( - PutFileRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + PutFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1PutFileResponse); } @@ -2159,10 +2224,12 @@ export function runtimeServiceCreateDirectory( ): Promise { return client.runtimeService .createDirectory( - CreateDirectoryRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + CreateDirectoryRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1CreateDirectoryResponse); } @@ -2218,10 +2285,12 @@ export function runtimeServiceDeleteFile( ): Promise { return client.runtimeService .deleteFile( - DeleteFileRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + DeleteFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1DeleteFileResponse); } @@ -2277,10 +2346,12 @@ export function runtimeServiceRenameFile( ): Promise { return client.runtimeService .renameFile( - RenameFileRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + RenameFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1RenameFileResponse); } @@ -2336,10 +2407,12 @@ export function runtimeServiceUnpackExample( ): Promise { return client.runtimeService .unpackExample( - UnpackExampleRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + UnpackExampleRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1UnpackExampleResponse); } @@ -2395,10 +2468,12 @@ export function runtimeServiceUnpackEmpty( ): Promise { return client.runtimeService .unpackEmpty( - UnpackEmptyRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + UnpackEmptyRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1UnpackEmptyResponse); } @@ -2454,10 +2529,12 @@ export function runtimeServiceGenerateMetricsViewFile( ): Promise { return client.runtimeService .generateMetricsViewFile( - GenerateMetricsViewFileRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GenerateMetricsViewFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GenerateMetricsViewFileResponse); } @@ -2512,10 +2589,12 @@ export function runtimeServiceGenerateCanvasFile( ): Promise { return client.runtimeService .generateCanvasFile( - GenerateCanvasFileRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GenerateCanvasFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GenerateCanvasFileResponse); } @@ -2571,10 +2650,12 @@ export function runtimeServiceGenerateResolver( ): Promise { return client.runtimeService .generateResolver( - GenerateResolverRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GenerateResolverRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GenerateResolverResponse); } @@ -2630,10 +2711,12 @@ export function runtimeServiceGenerateRenderer( ): Promise { return client.runtimeService .generateRenderer( - GenerateRendererRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GenerateRendererRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GenerateRendererResponse); } @@ -2689,10 +2772,12 @@ export function runtimeServiceCreateTrigger( ): Promise { return client.runtimeService .createTrigger( - CreateTriggerRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + CreateTriggerRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1CreateTriggerResponse); } @@ -2748,10 +2833,12 @@ export function runtimeServiceShareConversation( ): Promise { return client.runtimeService .shareConversation( - ShareConversationRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ShareConversationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1ShareConversationResponse); } @@ -2807,10 +2894,12 @@ export function runtimeServiceForkConversation( ): Promise { return client.runtimeService .forkConversation( - ForkConversationRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + ForkConversationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1ForkConversationResponse); } @@ -2866,10 +2955,12 @@ export function runtimeServiceComplete( ): Promise { return client.runtimeService .complete( - CompleteRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + CompleteRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1CompleteResponse); } @@ -2925,10 +3016,12 @@ export function runtimeServiceGitStatus( ): Promise { return client.runtimeService .gitStatus( - GitStatusRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GitStatusRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GitStatusResponse); } @@ -2984,10 +3077,12 @@ export function runtimeServiceGitCommit( ): Promise { return client.runtimeService .gitCommit( - GitCommitRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GitCommitRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GitCommitResponse); } @@ -3043,10 +3138,12 @@ export function runtimeServiceRestoreGitCommit( ): Promise { return client.runtimeService .restoreGitCommit( - RestoreGitCommitRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + RestoreGitCommitRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1RestoreGitCommitResponse); } @@ -3102,10 +3199,12 @@ export function runtimeServiceGitMergeToBranch( ): Promise { return client.runtimeService .gitMergeToBranch( - GitMergeToBranchRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GitMergeToBranchRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GitMergeToBranchResponse); } @@ -3161,10 +3260,12 @@ export function runtimeServiceGitSwitchBranch( ): Promise { return client.runtimeService .gitSwitchBranch( - GitSwitchBranchRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GitSwitchBranchRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GitSwitchBranchResponse); } @@ -3220,10 +3321,12 @@ export function runtimeServiceGitPull( ): Promise { return client.runtimeService .gitPull( - GitPullRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GitPullRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GitPullResponse); } @@ -3279,10 +3382,12 @@ export function runtimeServiceGitPush( ): Promise { return client.runtimeService .gitPush( - GitPushRequest.fromJson({ - instanceId: client.instanceId, - ...request, - } as unknown as JsonValue), + GitPushRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), ) .then((r) => r.toJson() as unknown as V1GitPushResponse); } From 369e0b54dcfe044f45b067a1a2a86ecc28d254b6 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 15:31:10 +0300 Subject: [PATCH 09/78] fix: emit default values in proto toJson to match gRPC-Gateway output Proto3 toJson() omits fields with default values (0, "", false) by default. gRPC-Gateway includes them. This caused missing fields like low: 0 in histogram bins, breaking D3 scale computations and rendering blank histograms for columns with data starting near zero. --- web-common/scripts/generate-query-hooks.ts | 4 +- .../v2/gen/connector-service.ts | 47 ++- .../runtime-client/v2/gen/query-service.ts | 207 ++++++++++-- .../runtime-client/v2/gen/runtime-service.ts | 318 +++++++++++++++--- 4 files changed, 487 insertions(+), 89 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index 186974e314f..dab7be7f933 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -282,7 +282,7 @@ function generateServiceFile(service: ServiceDef): string { ` return client.${serviceClientProp}.${m.methodKey}(`, ` ${m.inputType}.fromJson(stripUndefined(${requestSpread}) as unknown as JsonValue),`, ` { signal: options?.signal },`, - ` ).then(r => r.toJson() as unknown as ${responseType});`, + ` ).then(r => r.toJson({ emitDefaultValues: true }) as unknown as ${responseType});`, `}`, ``, ); @@ -366,7 +366,7 @@ function generateServiceFile(service: ServiceDef): string { `): Promise<${responseType}> {`, ` return client.${serviceClientProp}.${m.methodKey}(`, ` ${m.inputType}.fromJson(stripUndefined(${requestSpread}) as unknown as JsonValue),`, - ` ).then(r => r.toJson() as unknown as ${responseType});`, + ` ).then(r => r.toJson({ emitDefaultValues: true }) as unknown as ${responseType});`, `}`, ``, ); diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index a240b5cc2e3..782e82a840a 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -58,7 +58,12 @@ export function connectorServiceListBuckets( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListBucketsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListBucketsResponse, + ); } export function getConnectorServiceListBucketsQueryKey( @@ -136,7 +141,12 @@ export function connectorServiceListObjects( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListObjectsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListObjectsResponse, + ); } export function getConnectorServiceListObjectsQueryKey( @@ -214,7 +224,12 @@ export function connectorServiceOLAPListTables( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1OLAPListTablesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1OLAPListTablesResponse, + ); } export function getConnectorServiceOLAPListTablesQueryKey( @@ -292,7 +307,12 @@ export function connectorServiceOLAPGetTable( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1OLAPGetTableResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1OLAPGetTableResponse, + ); } export function getConnectorServiceOLAPGetTableQueryKey( @@ -370,7 +390,12 @@ export function connectorServiceListDatabaseSchemas( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListDatabaseSchemasResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListDatabaseSchemasResponse, + ); } export function getConnectorServiceListDatabaseSchemasQueryKey( @@ -452,7 +477,12 @@ export function connectorServiceListTables( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListTablesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListTablesResponse, + ); } export function getConnectorServiceListTablesQueryKey( @@ -523,7 +553,10 @@ export function connectorServiceGetTable( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetTableResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GetTableResponse, + ); } export function getConnectorServiceGetTableQueryKey( diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index e4961c21dc4..f6988272e8f 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -125,7 +125,12 @@ export function queryServiceMetricsViewAggregation( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewAggregationResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewAggregationResponse, + ); } export function getQueryServiceMetricsViewAggregationQueryKey( @@ -208,7 +213,12 @@ export function queryServiceMetricsViewToplist( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewToplistResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewToplistResponse, + ); } export function getQueryServiceMetricsViewToplistQueryKey( @@ -290,7 +300,12 @@ export function queryServiceMetricsViewComparison( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewComparisonResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewComparisonResponse, + ); } export function getQueryServiceMetricsViewComparisonQueryKey( @@ -373,7 +388,12 @@ export function queryServiceMetricsViewTimeSeries( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewTimeSeriesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTimeSeriesResponse, + ); } export function getQueryServiceMetricsViewTimeSeriesQueryKey( @@ -456,7 +476,12 @@ export function queryServiceMetricsViewTotals( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewTotalsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTotalsResponse, + ); } export function getQueryServiceMetricsViewTotalsQueryKey( @@ -538,7 +563,12 @@ export function queryServiceMetricsViewRows( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewRowsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewRowsResponse, + ); } export function getQueryServiceMetricsViewRowsQueryKey( @@ -620,7 +650,12 @@ export function queryServiceMetricsViewTimeRange( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewTimeRangeResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTimeRangeResponse, + ); } export function getQueryServiceMetricsViewTimeRangeQueryKey( @@ -702,7 +737,12 @@ export function queryServiceMetricsViewSchema( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewSchemaResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewSchemaResponse, + ); } export function getQueryServiceMetricsViewSchemaQueryKey( @@ -784,7 +824,12 @@ export function queryServiceMetricsViewSearch( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewSearchResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewSearchResponse, + ); } export function getQueryServiceMetricsViewSearchQueryKey( @@ -866,7 +911,12 @@ export function queryServiceMetricsViewTimeRanges( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewTimeRangesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTimeRangesResponse, + ); } export function getQueryServiceMetricsViewTimeRangesQueryKey( @@ -949,7 +999,12 @@ export function queryServiceMetricsViewAnnotations( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1MetricsViewAnnotationsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewAnnotationsResponse, + ); } export function getQueryServiceMetricsViewAnnotationsQueryKey( @@ -1036,7 +1091,10 @@ export function queryServiceConvertExpressionToMetricsSQL( { signal: options?.signal }, ) .then( - (r) => r.toJson() as unknown as V1ConvertExpressionToMetricsSQLResponse, + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ConvertExpressionToMetricsSQLResponse, ); } @@ -1131,7 +1189,12 @@ export function queryServiceResolveCanvas( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ResolveCanvasResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ResolveCanvasResponse, + ); } export function getQueryServiceResolveCanvasQueryKey( @@ -1204,7 +1267,12 @@ export function queryServiceResolveComponent( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ResolveComponentResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ResolveComponentResponse, + ); } export function getQueryServiceResolveComponentQueryKey( @@ -1286,7 +1354,12 @@ export function queryServiceResolveTemplatedString( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ResolveTemplatedStringResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ResolveTemplatedStringResponse, + ); } export function getQueryServiceResolveTemplatedStringQueryKey( @@ -1369,7 +1442,12 @@ export function queryServiceColumnRollupInterval( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnRollupIntervalResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnRollupIntervalResponse, + ); } export function getQueryServiceColumnRollupIntervalQueryKey( @@ -1451,7 +1529,12 @@ export function queryServiceColumnTopK( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnTopKResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTopKResponse, + ); } export function getQueryServiceColumnTopKQueryKey( @@ -1522,7 +1605,12 @@ export function queryServiceColumnNullCount( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnNullCountResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnNullCountResponse, + ); } export function getQueryServiceColumnNullCountQueryKey( @@ -1605,7 +1693,10 @@ export function queryServiceColumnDescriptiveStatistics( { signal: options?.signal }, ) .then( - (r) => r.toJson() as unknown as V1ColumnDescriptiveStatisticsResponse, + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnDescriptiveStatisticsResponse, ); } @@ -1691,7 +1782,12 @@ export function queryServiceColumnTimeGrain( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnTimeGrainResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTimeGrainResponse, + ); } export function getQueryServiceColumnTimeGrainQueryKey( @@ -1773,7 +1869,12 @@ export function queryServiceColumnNumericHistogram( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnNumericHistogramResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnNumericHistogramResponse, + ); } export function getQueryServiceColumnNumericHistogramQueryKey( @@ -1856,7 +1957,12 @@ export function queryServiceColumnRugHistogram( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnRugHistogramResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnRugHistogramResponse, + ); } export function getQueryServiceColumnRugHistogramQueryKey( @@ -1938,7 +2044,12 @@ export function queryServiceColumnTimeRange( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnTimeRangeResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTimeRangeResponse, + ); } export function getQueryServiceColumnTimeRangeQueryKey( @@ -2020,7 +2131,12 @@ export function queryServiceColumnCardinality( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnCardinalityResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnCardinalityResponse, + ); } export function getQueryServiceColumnCardinalityQueryKey( @@ -2102,7 +2218,12 @@ export function queryServiceColumnTimeSeries( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ColumnTimeSeriesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTimeSeriesResponse, + ); } export function getQueryServiceColumnTimeSeriesQueryKey( @@ -2184,7 +2305,12 @@ export function queryServiceTableCardinality( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1TableCardinalityResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1TableCardinalityResponse, + ); } export function getQueryServiceTableCardinalityQueryKey( @@ -2266,7 +2392,12 @@ export function queryServiceTableColumns( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1TableColumnsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1TableColumnsResponse, + ); } export function getQueryServiceTableColumnsQueryKey( @@ -2337,7 +2468,10 @@ export function queryServiceTableRows( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1TableRowsResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1TableRowsResponse, + ); } export function getQueryServiceTableRowsQueryKey( @@ -2403,7 +2537,10 @@ export function queryServiceQuery( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1QueryResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1QueryResponse, + ); } export function getQueryServiceQueryMutationOptions( @@ -2461,7 +2598,10 @@ export function queryServiceExport( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1ExportResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1ExportResponse, + ); } export function getQueryServiceExportMutationOptions( @@ -2519,7 +2659,12 @@ export function queryServiceExportReport( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1ExportReportResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ExportReportResponse, + ); } export function getQueryServiceExportReportMutationOptions( diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index 7f4e61f6d3b..ae179bc69fa 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -139,7 +139,9 @@ export function runtimeServicePing( PingRequest.fromJson(stripUndefined(request) as unknown as JsonValue), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1PingResponse); + .then( + (r) => r.toJson({ emitDefaultValues: true }) as unknown as V1PingResponse, + ); } export function getRuntimeServicePingQueryKey( @@ -198,7 +200,10 @@ export function runtimeServiceHealth( HealthRequest.fromJson(stripUndefined(request) as unknown as JsonValue), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1HealthResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1HealthResponse, + ); } export function getRuntimeServiceHealthQueryKey( @@ -262,7 +267,12 @@ export function runtimeServiceInstanceHealth( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1InstanceHealthResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1InstanceHealthResponse, + ); } export function getRuntimeServiceInstanceHealthQueryKey( @@ -337,7 +347,12 @@ export function runtimeServiceListInstances( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListInstancesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListInstancesResponse, + ); } export function getRuntimeServiceListInstancesQueryKey( @@ -415,7 +430,12 @@ export function runtimeServiceGetInstance( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetInstanceResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetInstanceResponse, + ); } export function getRuntimeServiceGetInstanceQueryKey( @@ -486,7 +506,10 @@ export function runtimeServiceListFiles( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListFilesResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1ListFilesResponse, + ); } export function getRuntimeServiceListFilesQueryKey( @@ -557,7 +580,10 @@ export function runtimeServiceGetFile( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetFileResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GetFileResponse, + ); } export function getRuntimeServiceGetFileQueryKey( @@ -620,7 +646,12 @@ export function runtimeServiceListExamples( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListExamplesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListExamplesResponse, + ); } export function getRuntimeServiceListExamplesQueryKey( @@ -693,7 +724,12 @@ export function runtimeServiceQueryResolver( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1QueryResolverResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1QueryResolverResponse, + ); } export function getRuntimeServiceQueryResolverQueryKey( @@ -771,7 +807,10 @@ export function runtimeServiceGetLogs( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetLogsResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GetLogsResponse, + ); } export function getRuntimeServiceGetLogsQueryKey( @@ -837,7 +876,12 @@ export function runtimeServiceListResources( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListResourcesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListResourcesResponse, + ); } export function getRuntimeServiceListResourcesQueryKey( @@ -915,7 +959,12 @@ export function runtimeServiceGetResource( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetResourceResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetResourceResponse, + ); } export function getRuntimeServiceGetResourceQueryKey( @@ -986,7 +1035,12 @@ export function runtimeServiceGetExplore( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetExploreResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetExploreResponse, + ); } export function getRuntimeServiceGetExploreQueryKey( @@ -1057,7 +1111,12 @@ export function runtimeServiceGetModelPartitions( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetModelPartitionsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetModelPartitionsResponse, + ); } export function getRuntimeServiceGetModelPartitionsQueryKey( @@ -1136,7 +1195,12 @@ export function runtimeServiceListConnectorDrivers( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListConnectorDriversResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListConnectorDriversResponse, + ); } export function getRuntimeServiceListConnectorDriversQueryKey( @@ -1218,7 +1282,12 @@ export function runtimeServiceAnalyzeConnectors( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1AnalyzeConnectorsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1AnalyzeConnectorsResponse, + ); } export function getRuntimeServiceAnalyzeConnectorsQueryKey( @@ -1300,7 +1369,12 @@ export function runtimeServiceListNotifierConnectors( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListNotifierConnectorsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListNotifierConnectorsResponse, + ); } export function getRuntimeServiceListNotifierConnectorsQueryKey( @@ -1383,7 +1457,12 @@ export function runtimeServiceListConversations( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListConversationsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListConversationsResponse, + ); } export function getRuntimeServiceListConversationsQueryKey( @@ -1465,7 +1544,12 @@ export function runtimeServiceGetConversation( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1GetConversationResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetConversationResponse, + ); } export function getRuntimeServiceGetConversationQueryKey( @@ -1547,7 +1631,10 @@ export function runtimeServiceListTools( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListToolsResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1ListToolsResponse, + ); } export function getRuntimeServiceListToolsQueryKey( @@ -1615,7 +1702,12 @@ export function runtimeServiceIssueDevJWT( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1IssueDevJWTResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1IssueDevJWTResponse, + ); } export function getRuntimeServiceIssueDevJWTQueryKey( @@ -1686,7 +1778,12 @@ export function runtimeServiceAnalyzeVariables( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1AnalyzeVariablesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1AnalyzeVariablesResponse, + ); } export function getRuntimeServiceAnalyzeVariablesQueryKey( @@ -1768,7 +1865,12 @@ export function runtimeServiceListGitCommits( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListGitCommitsResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListGitCommitsResponse, + ); } export function getRuntimeServiceListGitCommitsQueryKey( @@ -1846,7 +1948,12 @@ export function runtimeServiceListGitBranches( ), { signal: options?.signal }, ) - .then((r) => r.toJson() as unknown as V1ListGitBranchesResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListGitBranchesResponse, + ); } export function getRuntimeServiceListGitBranchesQueryKey( @@ -1926,7 +2033,12 @@ export function runtimeServiceCreateInstance( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1CreateInstanceResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1CreateInstanceResponse, + ); } export function getRuntimeServiceCreateInstanceMutationOptions( @@ -1987,7 +2099,12 @@ export function runtimeServiceEditInstance( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1EditInstanceResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1EditInstanceResponse, + ); } export function getRuntimeServiceEditInstanceMutationOptions( @@ -2048,7 +2165,12 @@ export function runtimeServiceDeleteInstance( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1DeleteInstanceResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1DeleteInstanceResponse, + ); } export function getRuntimeServiceDeleteInstanceMutationOptions( @@ -2109,7 +2231,12 @@ export function runtimeServiceReloadConfig( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1ReloadConfigResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ReloadConfigResponse, + ); } export function getRuntimeServiceReloadConfigMutationOptions( @@ -2170,7 +2297,10 @@ export function runtimeServicePutFile( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1PutFileResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1PutFileResponse, + ); } export function getRuntimeServicePutFileMutationOptions( @@ -2231,7 +2361,12 @@ export function runtimeServiceCreateDirectory( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1CreateDirectoryResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1CreateDirectoryResponse, + ); } export function getRuntimeServiceCreateDirectoryMutationOptions( @@ -2292,7 +2427,12 @@ export function runtimeServiceDeleteFile( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1DeleteFileResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1DeleteFileResponse, + ); } export function getRuntimeServiceDeleteFileMutationOptions( @@ -2353,7 +2493,12 @@ export function runtimeServiceRenameFile( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1RenameFileResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1RenameFileResponse, + ); } export function getRuntimeServiceRenameFileMutationOptions( @@ -2414,7 +2559,12 @@ export function runtimeServiceUnpackExample( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1UnpackExampleResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1UnpackExampleResponse, + ); } export function getRuntimeServiceUnpackExampleMutationOptions( @@ -2475,7 +2625,12 @@ export function runtimeServiceUnpackEmpty( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1UnpackEmptyResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1UnpackEmptyResponse, + ); } export function getRuntimeServiceUnpackEmptyMutationOptions( @@ -2536,7 +2691,12 @@ export function runtimeServiceGenerateMetricsViewFile( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GenerateMetricsViewFileResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateMetricsViewFileResponse, + ); } export function getRuntimeServiceGenerateMetricsViewFileMutationOptions( @@ -2596,7 +2756,12 @@ export function runtimeServiceGenerateCanvasFile( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GenerateCanvasFileResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateCanvasFileResponse, + ); } export function getRuntimeServiceGenerateCanvasFileMutationOptions( @@ -2657,7 +2822,12 @@ export function runtimeServiceGenerateResolver( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GenerateResolverResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateResolverResponse, + ); } export function getRuntimeServiceGenerateResolverMutationOptions( @@ -2718,7 +2888,12 @@ export function runtimeServiceGenerateRenderer( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GenerateRendererResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateRendererResponse, + ); } export function getRuntimeServiceGenerateRendererMutationOptions( @@ -2779,7 +2954,12 @@ export function runtimeServiceCreateTrigger( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1CreateTriggerResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1CreateTriggerResponse, + ); } export function getRuntimeServiceCreateTriggerMutationOptions( @@ -2840,7 +3020,12 @@ export function runtimeServiceShareConversation( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1ShareConversationResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ShareConversationResponse, + ); } export function getRuntimeServiceShareConversationMutationOptions( @@ -2901,7 +3086,12 @@ export function runtimeServiceForkConversation( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1ForkConversationResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ForkConversationResponse, + ); } export function getRuntimeServiceForkConversationMutationOptions( @@ -2962,7 +3152,10 @@ export function runtimeServiceComplete( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1CompleteResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1CompleteResponse, + ); } export function getRuntimeServiceCompleteMutationOptions( @@ -3023,7 +3216,10 @@ export function runtimeServiceGitStatus( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GitStatusResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GitStatusResponse, + ); } export function getRuntimeServiceGitStatusMutationOptions( @@ -3084,7 +3280,10 @@ export function runtimeServiceGitCommit( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GitCommitResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GitCommitResponse, + ); } export function getRuntimeServiceGitCommitMutationOptions( @@ -3145,7 +3344,12 @@ export function runtimeServiceRestoreGitCommit( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1RestoreGitCommitResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1RestoreGitCommitResponse, + ); } export function getRuntimeServiceRestoreGitCommitMutationOptions( @@ -3206,7 +3410,12 @@ export function runtimeServiceGitMergeToBranch( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GitMergeToBranchResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GitMergeToBranchResponse, + ); } export function getRuntimeServiceGitMergeToBranchMutationOptions( @@ -3267,7 +3476,12 @@ export function runtimeServiceGitSwitchBranch( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GitSwitchBranchResponse); + .then( + (r) => + r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GitSwitchBranchResponse, + ); } export function getRuntimeServiceGitSwitchBranchMutationOptions( @@ -3328,7 +3542,10 @@ export function runtimeServiceGitPull( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GitPullResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GitPullResponse, + ); } export function getRuntimeServiceGitPullMutationOptions( @@ -3389,7 +3606,10 @@ export function runtimeServiceGitPush( }) as unknown as JsonValue, ), ) - .then((r) => r.toJson() as unknown as V1GitPushResponse); + .then( + (r) => + r.toJson({ emitDefaultValues: true }) as unknown as V1GitPushResponse, + ); } export function getRuntimeServiceGitPushMutationOptions( From 301244f7fd149a871ca8b5f15f2f437c5d8ed225 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 17:47:03 +0300 Subject: [PATCH 10/78] fix: deep-strip undefined values in `stripUndefined` for nested request objects The shallow `stripUndefined` only removed top-level undefined values. Nested objects like `timeRange: { start: undefined }` passed through to `fromJson()` which rejects undefined, causing JSON decode errors. --- web-common/scripts/generate-query-hooks.ts | 19 +++++++++++++++-- .../v2/gen/connector-service.ts | 21 +++++++++++++++---- .../runtime-client/v2/gen/query-service.ts | 21 +++++++++++++++---- .../runtime-client/v2/gen/runtime-service.ts | 21 +++++++++++++++---- 4 files changed, 68 insertions(+), 14 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index dab7be7f933..be1e95c5879 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -241,10 +241,25 @@ function generateServiceFile(service: ServiceDef): string { // (proto fromJson rejects undefined; Orval's HTTP client silently omitted them) lines.push( ``, - `/** Strip undefined values — proto fromJson rejects them */`, + `/** Deep-strip undefined values — proto fromJson rejects them */`, `// eslint-disable-next-line @typescript-eslint/no-explicit-any`, `function stripUndefined(obj: Record): Record {`, - ` return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));`, + ` const result: Record = {};`, + ` for (const [key, value] of Object.entries(obj)) {`, + ` if (value === undefined) continue;`, + ` if (Array.isArray(value)) {`, + ` result[key] = value.map((item) =>`, + ` item && typeof item === "object" && !Array.isArray(item)`, + ` ? stripUndefined(item)`, + ` : item,`, + ` );`, + ` } else if (value && typeof value === "object" && !(value instanceof Date)) {`, + ` result[key] = stripUndefined(value);`, + ` } else {`, + ` result[key] = value;`, + ` }`, + ` }`, + ` return result;`, `}`, ); diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index 782e82a840a..fafdd528f2e 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -32,12 +32,25 @@ import { OLAPListTablesRequest, } from "../../../proto/gen/rill/runtime/v1/connectors_pb"; -/** Strip undefined values — proto fromJson rejects them */ +/** Deep-strip undefined values — proto fromJson rejects them */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function stripUndefined(obj: Record): Record { - return Object.fromEntries( - Object.entries(obj).filter(([, v]) => v !== undefined), - ); + const result: Record = {}; + for (const [key, value] of Object.entries(obj)) { + if (value === undefined) continue; + if (Array.isArray(value)) { + result[key] = value.map((item) => + item && typeof item === "object" && !Array.isArray(item) + ? stripUndefined(item) + : item, + ); + } else if (value && typeof value === "object" && !(value instanceof Date)) { + result[key] = stripUndefined(value); + } else { + result[key] = value; + } + } + return result; } /** diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index f6988272e8f..209ca53c250 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -99,12 +99,25 @@ import { TableRowsRequest, } from "../../../proto/gen/rill/runtime/v1/queries_pb"; -/** Strip undefined values — proto fromJson rejects them */ +/** Deep-strip undefined values — proto fromJson rejects them */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function stripUndefined(obj: Record): Record { - return Object.fromEntries( - Object.entries(obj).filter(([, v]) => v !== undefined), - ); + const result: Record = {}; + for (const [key, value] of Object.entries(obj)) { + if (value === undefined) continue; + if (Array.isArray(value)) { + result[key] = value.map((item) => + item && typeof item === "object" && !Array.isArray(item) + ? stripUndefined(item) + : item, + ); + } else if (value && typeof value === "object" && !(value instanceof Date)) { + result[key] = stripUndefined(value); + } else { + result[key] = value; + } + } + return result; } /** diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index ae179bc69fa..5446b9b5a7a 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -118,12 +118,25 @@ import { UnpackExampleRequest, } from "../../../proto/gen/rill/runtime/v1/api_pb"; -/** Strip undefined values — proto fromJson rejects them */ +/** Deep-strip undefined values — proto fromJson rejects them */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function stripUndefined(obj: Record): Record { - return Object.fromEntries( - Object.entries(obj).filter(([, v]) => v !== undefined), - ); + const result: Record = {}; + for (const [key, value] of Object.entries(obj)) { + if (value === undefined) continue; + if (Array.isArray(value)) { + result[key] = value.map((item) => + item && typeof item === "object" && !Array.isArray(item) + ? stripUndefined(item) + : item, + ); + } else if (value && typeof value === "object" && !(value instanceof Date)) { + result[key] = stripUndefined(value); + } else { + result[key] = value; + } + } + return result; } /** From 840e75730b0e07f20b75a5bc64cd1bca5b0d4526 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Wed, 25 Feb 2026 12:29:57 +0300 Subject: [PATCH 11/78] feat: port request queue to ConnectRPC transport interceptor Port the two-level heap request queue as a ConnectRPC interceptor. Maps method names (instead of URLs) to priorities and controls concurrency via the same architecture as HttpRequestQueue. --- web-common/src/runtime-client/v2/heap.ts | 129 +++++++++ .../runtime-client/v2/request-priorities.ts | 37 +++ .../src/runtime-client/v2/request-queue.ts | 271 ++++++++++++++++++ .../src/runtime-client/v2/runtime-client.ts | 6 + 4 files changed, 443 insertions(+) create mode 100644 web-common/src/runtime-client/v2/heap.ts create mode 100644 web-common/src/runtime-client/v2/request-priorities.ts create mode 100644 web-common/src/runtime-client/v2/request-queue.ts diff --git a/web-common/src/runtime-client/v2/heap.ts b/web-common/src/runtime-client/v2/heap.ts new file mode 100644 index 00000000000..3780f3f019d --- /dev/null +++ b/web-common/src/runtime-client/v2/heap.ts @@ -0,0 +1,129 @@ +/** + * Generic binary max-heap with O(log n) insert/update and O(1) key-based lookup. + * Ported from http-request-queue/Heap.ts for use with ConnectRPC request queue. + */ +export class Heap { + private readonly array: Array = []; + private valueToIdxMap: Map = new Map(); + + constructor( + private readonly compareFunction: (a: Item, b: Item) => number, + private readonly keyGetter: (a: Item) => Key, + ) {} + + public empty() { + return this.array.length === 0; + } + + public peek(): Item { + return this.array[0]; + } + + public get(key: Key): Item | undefined { + const idx = this.valueToIdxMap.get(key); + if (idx === undefined) return undefined; + return this.array[idx]; + } + + public push(value: Item) { + this.setIndex(value, this.array.length); + this.array.push(value); + this.moveUp(this.array.length - 1); + } + + public pop() { + if (this.array.length > 0) { + const value = this.array[0]; + this.valueToIdxMap.delete(this.keyGetter(value)); + if (this.array.length > 1) { + this.array[0] = this.array.pop()!; + this.setIndex(this.array[0], 0); + this.moveDown(0); + } else { + this.array.pop(); + } + return value; + } + } + + public delete(value: Item | undefined, key?: Key) { + key ??= this.keyGetter(value!); + const idx = value?.index ?? this.valueToIdxMap.get(key); + if (idx === undefined || idx < 0) return; + + value = this.array[idx]; + this.valueToIdxMap.delete(key); + delete value.index; + if (idx < this.array.length - 1) { + this.array[idx] = this.array.pop()!; + this.array[idx].index = idx; + this.setIndex(this.array[idx], idx); + this.moveDown(idx); + } else { + this.array.pop(); + } + } + + public updateItem(value: Item) { + const idx = value.index ?? this.valueToIdxMap.get(this.keyGetter(value)); + if (idx === undefined || idx < 0) return; + if (!this.moveUp(idx)) { + this.moveDown(idx); + } + } + + private moveUp(idx: number) { + let movedUp = false; + while (idx > 0) { + const parentIdx = (idx - 1) >> 1; + if (this.compareFunction(this.array[idx], this.array[parentIdx]) > 0) { + this.swap(idx, parentIdx); + idx = parentIdx; + movedUp = true; + } else { + break; + } + } + return movedUp; + } + + private moveDown(idx: number) { + let movedDown = false; + while (idx < this.array.length) { + let childIdx = 2 * idx + 1; + + if (childIdx >= this.array.length) { + break; + } + + if ( + childIdx + 1 < this.array.length && + this.compareFunction(this.array[childIdx + 1], this.array[childIdx]) > 0 + ) { + childIdx++; + } + + if (this.compareFunction(this.array[childIdx], this.array[idx]) > 0) { + this.swap(idx, childIdx); + idx = childIdx; + movedDown = true; + } else { + break; + } + } + return movedDown; + } + + private swap(idx0: number, idx1: number) { + const val0 = this.array[idx0]; + this.array[idx0] = this.array[idx1]; + this.array[idx1] = val0; + this.setIndex(this.array[idx0], idx0); + this.setIndex(this.array[idx1], idx1); + } + + private setIndex(item: Item, index: number) { + this.valueToIdxMap.set(this.keyGetter(item), index); + item.index = index; + } +} diff --git a/web-common/src/runtime-client/v2/request-priorities.ts b/web-common/src/runtime-client/v2/request-priorities.ts new file mode 100644 index 00000000000..a9be73f4790 --- /dev/null +++ b/web-common/src/runtime-client/v2/request-priorities.ts @@ -0,0 +1,37 @@ +/** + * Priority mapping for ConnectRPC method names. + * Mirrors the URL-based priorities from http-request-queue/priorities.ts, + * mapped to ConnectRPC service method names instead of URL path segments. + */ + +// Maps ConnectRPC method names to priority weights. +// Higher priority = dispatched first. +const MethodPriorities: Record = { + // High priority: user-visible data + MetricsViewRows: 50, + MetricsViewTimeRange: 50, + ColumnProfile: 45, + + // Medium: charts and summaries + ColumnNullCount: 40, + TableCardinality: 35, + ColumnCardinality: 35, + MetricsViewAggregation: 30, + MetricsViewTimeSeries: 30, + NumericHistogram: 30, + MetricsViewTotals: 30, + + // Low: exploratory queries + MetricsViewToplist: 10, + RugHistogram: 10, + DescriptiveStatistics: 10, +}; + +export const DEFAULT_PRIORITY = 10; +export const ACTIVE_COLUMN_PRIORITY_OFFSET = 50; +export const ACTIVE_PRIORITY = 10; +export const INACTIVE_PRIORITY = 5; + +export function getPriorityForMethod(methodName: string): number { + return MethodPriorities[methodName] ?? DEFAULT_PRIORITY; +} diff --git a/web-common/src/runtime-client/v2/request-queue.ts b/web-common/src/runtime-client/v2/request-queue.ts new file mode 100644 index 00000000000..801c3c06118 --- /dev/null +++ b/web-common/src/runtime-client/v2/request-queue.ts @@ -0,0 +1,271 @@ +import type { Interceptor } from "@connectrpc/connect"; +import { appQueryStatusStore } from "../application-store"; +import { Heap } from "./heap"; +import { + ACTIVE_COLUMN_PRIORITY_OFFSET, + ACTIVE_PRIORITY, + INACTIVE_PRIORITY, + getPriorityForMethod, +} from "./request-priorities"; + +interface QueueEntry { + key: string; + weight: number; + id: number; + columnName?: string; + + resolve?: (value: unknown) => void; + reject?: (reason: unknown) => void; + fn?: () => Promise; + + index?: number; +} + +interface NameEntry { + name: string; + weight: number; + columnMap: Map>; + queryHeap: Heap; + + index?: number; +} + +function createNameHeap(): Heap { + return new Heap( + (a, b) => a.weight - b.weight, + (a) => a.name, + ); +} + +function createQueryHeap(): Heap { + return new Heap( + (a, b) => { + if (a.weight === b.weight) { + // equal weights: preserve insertion order (lower id = earlier) + return b.id - a.id; + } + return a.weight - b.weight; + }, + (a) => a.key, + ); +} + +function getDefaultConcurrency(): number { + try { + if ( + window.location.protocol === "https:" || + window.location.hostname !== "localhost" + ) { + return 200; + } + } catch { + // no-op: SSR or test environment + } + return 5; +} + +export class RequestQueue { + private readonly nameHeap = createNameHeap(); + private activeCount = 0; + private ids = 0; + private readonly maxConcurrent: number; + + constructor(opts?: { maxConcurrent?: number }) { + this.maxConcurrent = opts?.maxConcurrent ?? getDefaultConcurrency(); + } + + /** + * Queue a request. Resolves when the request function completes. + * The request won't fire until the queue has capacity. + */ + enqueue(opts: { + priority: number; + resourceName?: string; + columnName?: string; + signal?: AbortSignal; + fn: () => Promise; + }): Promise { + const resourceName = opts.resourceName ?? "__default__"; + const nameEntry = this.getNameEntry(resourceName); + + const entry: QueueEntry = { + key: `${opts.columnName ?? ""}:${this.ids}`, + weight: opts.priority, + id: this.ids++, + columnName: opts.columnName, + fn: opts.fn as () => Promise, + }; + + if (opts.columnName) { + if (!nameEntry.columnMap.has(opts.columnName)) { + nameEntry.columnMap.set(opts.columnName, []); + } + nameEntry.columnMap.get(opts.columnName)!.push(entry); + } + + nameEntry.queryHeap.push(entry); + + const promise = new Promise((resolve, reject) => { + entry.resolve = resolve as (value: unknown) => void; + entry.reject = reject; + }); + + // If already aborted, reject immediately + if (opts.signal?.aborted) { + nameEntry.queryHeap.delete(entry); + if (entry.columnName) { + this.clearEntryForColumn(nameEntry, entry); + } + if (nameEntry.queryHeap.empty()) { + this.nameHeap.delete(nameEntry); + } + entry.reject?.(opts.signal.reason); + return promise; + } + + // Handle abort while queued + opts.signal?.addEventListener( + "abort", + () => { + // Only remove if still queued (has fn; cleared on fire) + if (!entry.fn) return; + nameEntry.queryHeap.delete(entry); + if (entry.columnName) { + this.clearEntryForColumn(nameEntry, entry); + } + if (nameEntry.queryHeap.empty()) { + this.nameHeap.delete(nameEntry); + } + entry.reject?.(opts.signal!.reason); + }, + { once: true }, + ); + + this.drain(); + return promise; + } + + /** Boost or reduce priority for column-level queries (active column in Explore). */ + prioritiseColumn( + resourceName: string, + columnName: string, + active: boolean, + ): void { + const nameEntry = this.nameHeap.get(resourceName); + if (!nameEntry) return; + const columnEntries = nameEntry.columnMap.get(columnName); + if (!columnEntries) return; + for (const entry of columnEntries) { + if (active && entry.weight < ACTIVE_COLUMN_PRIORITY_OFFSET) { + entry.weight += ACTIVE_COLUMN_PRIORITY_OFFSET; + } else if (!active && entry.weight > ACTIVE_COLUMN_PRIORITY_OFFSET) { + entry.weight -= ACTIVE_COLUMN_PRIORITY_OFFSET; + } + nameEntry.queryHeap.updateItem(entry); + } + } + + /** Remove all queued requests for a resource (entity deleted/renamed). */ + removeByName(resourceName: string): void { + this.nameHeap.delete(undefined, resourceName); + } + + /** Deprioritize a resource (user navigated away). */ + inactiveByName(resourceName: string): void { + const nameEntry = this.nameHeap.get(resourceName); + if (!nameEntry) return; + nameEntry.weight = INACTIVE_PRIORITY; + this.nameHeap.updateItem(nameEntry); + } + + private drain(): void { + while (!this.nameHeap.empty() && this.activeCount < this.maxConcurrent) { + const topNameEntry = this.nameHeap.peek(); + const entry = topNameEntry.queryHeap.pop(); + if (!entry) break; + + this.fireEntry(entry); + this.activeCount++; + + if (entry.columnName && topNameEntry.columnMap.has(entry.columnName)) { + this.clearEntryForColumn(topNameEntry, entry); + } + + if (topNameEntry.queryHeap.empty()) { + this.nameHeap.pop(); + } + } + appQueryStatusStore.set(this.activeCount > 0); + } + + private async fireEntry(entry: QueueEntry): Promise { + const fn = entry.fn!; + entry.fn = undefined; // mark as fired + try { + const result = await fn(); + entry.resolve?.(result); + } catch (err) { + entry.reject?.(err); + } + this.activeCount--; + appQueryStatusStore.set(this.activeCount > 0); + this.drain(); + } + + private getNameEntry(name: string): NameEntry { + let nameEntry = this.nameHeap.get(name); + if (!nameEntry) { + nameEntry = { + name, + weight: ACTIVE_PRIORITY, + columnMap: new Map(), + queryHeap: createQueryHeap(), + }; + this.nameHeap.push(nameEntry); + } + return nameEntry; + } + + private clearEntryForColumn(nameEntry: NameEntry, entry: QueueEntry): void { + const entries = nameEntry.columnMap.get(entry.columnName!); + if (!entries) return; + const idx = entries.indexOf(entry); + if (idx !== -1) entries.splice(idx, 1); + } +} + +/** + * Extract the resource name from a ConnectRPC request message. + * Looks for common field patterns in runtime API request messages. + */ +function extractResourceName(req: { message: unknown }): string | undefined { + const msg = req.message as Record; + // MetricsView queries use metricsViewName or metricsView + if (typeof msg.metricsViewName === "string") return msg.metricsViewName; + if (typeof msg.metricsView === "string") return msg.metricsView; + // Column profiling queries use tableName + if (typeof msg.tableName === "string") return msg.tableName; + return undefined; +} + +/** + * Creates a ConnectRPC interceptor that routes requests through the RequestQueue. + * The interceptor wraps the `next()` call so the queue controls when requests fire. + */ +export function createQueueInterceptor(queue: RequestQueue): Interceptor { + return (next) => async (req) => { + const priority = getPriorityForMethod(req.method.name); + const resourceName = extractResourceName(req); + const columnName = (req.message as Record).columnName as + | string + | undefined; + + return queue.enqueue({ + priority, + resourceName, + columnName, + signal: req.signal, + fn: () => next(req), + }); + }; +} diff --git a/web-common/src/runtime-client/v2/runtime-client.ts b/web-common/src/runtime-client/v2/runtime-client.ts index fd664a52259..c600c2b1feb 100644 --- a/web-common/src/runtime-client/v2/runtime-client.ts +++ b/web-common/src/runtime-client/v2/runtime-client.ts @@ -8,12 +8,14 @@ import { JWT_EXPIRY_WARNING_WINDOW, CHECK_RUNTIME_STORE_FOR_JWT_INTERVAL, } from "../constants"; +import { RequestQueue, createQueueInterceptor } from "./request-queue"; export type AuthContext = "user" | "mock" | "magic" | "embed"; export class RuntimeClient { readonly instanceId: string; readonly transport: Transport; + readonly requestQueue: RequestQueue; // JWT state (mutable; read by the transport interceptor) private currentJwt: string | undefined; @@ -35,10 +37,14 @@ export class RuntimeClient { this.currentJwt = opts.jwt; this.jwtReceivedAt = opts.jwt ? Date.now() : 0; this.authContext = opts.authContext ?? "user"; + this.requestQueue = new RequestQueue(); this.transport = createConnectTransport({ baseUrl: opts.host, interceptors: [ + // Queue controls when requests fire (outermost: wraps everything) + createQueueInterceptor(this.requestQueue), + // JWT interceptor adds auth header just before the network call (next) => async (req) => { if (this.currentJwt) { await this.waitForFreshJwt(); From ae800e07e01e70063cbf62df6edfa9dd88fac367 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 11:51:12 +0300 Subject: [PATCH 12/78] refactor: migrate connectors and column-profile to v2 RuntimeClient MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate 8 files from the global runtime store to useRuntimeClient(): - ConnectorExplorer, ConnectorEntry, TableEntry, TableSchema, TableMenuItems, TableWorkspaceHeader, ConnectorRefreshButton - ColumnProfile Exercises all key migration patterns: - $runtime.instanceId → useRuntimeClient() + client.instanceId - Orval createQuery hooks → v2 generated hooks (request object style) - Orval createMutation → v2 generated mutation hooks - Structural type compatibility between proto and Orval response types --- .../column-profile/ColumnProfile.svelte | 17 +++---- .../connectors/ConnectorRefreshButton.svelte | 13 +++--- .../connectors/explorer/ConnectorEntry.svelte | 15 +++---- .../explorer/ConnectorExplorer.svelte | 45 ++++++++++--------- .../connectors/explorer/TableEntry.svelte | 7 +-- .../connectors/explorer/TableMenuItems.svelte | 5 ++- .../connectors/explorer/TableSchema.svelte | 7 +-- .../explorer/TableWorkspaceHeader.svelte | 6 +-- 8 files changed, 59 insertions(+), 56 deletions(-) diff --git a/web-common/src/features/column-profile/ColumnProfile.svelte b/web-common/src/features/column-profile/ColumnProfile.svelte index 442a016ff99..ef9421577f1 100644 --- a/web-common/src/features/column-profile/ColumnProfile.svelte +++ b/web-common/src/features/column-profile/ColumnProfile.svelte @@ -1,11 +1,11 @@ diff --git a/web-common/src/features/connectors/explorer/ConnectorEntry.svelte b/web-common/src/features/connectors/explorer/ConnectorEntry.svelte index 56214e50d8b..4887634c34f 100644 --- a/web-common/src/features/connectors/explorer/ConnectorEntry.svelte +++ b/web-common/src/features/connectors/explorer/ConnectorEntry.svelte @@ -1,11 +1,9 @@ diff --git a/web-common/src/features/connectors/explorer/TableEntry.svelte b/web-common/src/features/connectors/explorer/TableEntry.svelte index 5a9edd94756..763a1aaccc7 100644 --- a/web-common/src/features/connectors/explorer/TableEntry.svelte +++ b/web-common/src/features/connectors/explorer/TableEntry.svelte @@ -8,7 +8,7 @@ import TableMenuItems from "./TableMenuItems.svelte"; import TableSchema from "./TableSchema.svelte"; import { useIsModelingSupportedForConnectorOLAP as useIsModelingSupportedForConnector } from "../selectors"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "../../../runtime-client/v2"; import type { ConnectorExplorerStore } from "./connector-explorer-store"; import { makeFullyQualifiedTableName, @@ -27,14 +27,15 @@ let contextMenuOpen = false; + const client = useRuntimeClient(); + $: expandedStore = store.getItem(connector, database, databaseSchema, table); $: showSchema = $expandedStore; const { allowContextMenu, allowNavigateToTable, allowShowSchema } = store; - $: ({ instanceId: runtimeInstanceId } = $runtime); $: isModelingSupportedForConnector = useIsModelingSupportedForConnector( - runtimeInstanceId, + client.instanceId, connector, ); $: isModelingSupported = $isModelingSupportedForConnector.data; diff --git a/web-common/src/features/connectors/explorer/TableMenuItems.svelte b/web-common/src/features/connectors/explorer/TableMenuItems.svelte index f3de0cc180d..b0ee5c8dc83 100644 --- a/web-common/src/features/connectors/explorer/TableMenuItems.svelte +++ b/web-common/src/features/connectors/explorer/TableMenuItems.svelte @@ -10,7 +10,7 @@ MetricsEventScreenName, MetricsEventSpace, } from "@rilldata/web-common/metrics/service/MetricsTypes"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "../../../runtime-client/v2"; import { generateMetricsFromTable } from "../../metrics-views/ai-generation/generateMetricsView"; import { createSqlModelFromTable, @@ -27,7 +27,8 @@ export let isModelingSupported: boolean | undefined = false; export let isOlapConnector: boolean = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + $: ({ instanceId } = client); async function handleCreateModel( modelCreationFn: () => Promise<[string, string]>, diff --git a/web-common/src/features/connectors/explorer/TableSchema.svelte b/web-common/src/features/connectors/explorer/TableSchema.svelte index d4d42c8251d..673c3fdb9d1 100644 --- a/web-common/src/features/connectors/explorer/TableSchema.svelte +++ b/web-common/src/features/connectors/explorer/TableSchema.svelte @@ -2,16 +2,17 @@ import Tooltip from "../../../components/tooltip/Tooltip.svelte"; import TooltipContent from "../../../components/tooltip/TooltipContent.svelte"; import { useGetTable } from "../selectors"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "../../../runtime-client/v2"; export let connector: string; export let database: string = ""; // The backend interprets an empty string as the default database export let databaseSchema: string = ""; // The backend interprets an empty string as the default schema export let table: string; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + $: newTableQuery = useGetTable( - instanceId, + client.instanceId, connector, database, databaseSchema, diff --git a/web-common/src/features/connectors/explorer/TableWorkspaceHeader.svelte b/web-common/src/features/connectors/explorer/TableWorkspaceHeader.svelte index a5bf922344c..40c432e1331 100644 --- a/web-common/src/features/connectors/explorer/TableWorkspaceHeader.svelte +++ b/web-common/src/features/connectors/explorer/TableWorkspaceHeader.svelte @@ -9,7 +9,7 @@ import { WorkspaceHeader } from "../../../layout/workspace"; import { BehaviourEventMedium } from "../../../metrics/service/BehaviourEventTypes"; import { MetricsEventSpace } from "../../../metrics/service/MetricsTypes"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "../../../runtime-client/v2"; import { ResourceKind } from "../../entity-management/resource-selectors"; import { featureFlags } from "../../feature-flags"; import { useCreateMetricsViewFromTableUIAction } from "../../metrics-views/ai-generation/generateMetricsView"; @@ -21,10 +21,10 @@ const { ai } = featureFlags; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); $: createMetricsViewFromTable = useCreateMetricsViewFromTableUIAction( - instanceId, + client.instanceId, connector, database, databaseSchema, From d7603012e22ce10b49d13e9f425cbe5ede264b49 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 12:17:11 +0300 Subject: [PATCH 13/78] refactor: migrate more connectors components to v2 RuntimeClient Migrate DatabaseExplorer, DatabaseEntry, DatabaseSchemaEntry, TableInspector, and References to use useRuntimeClient() from context. This demonstrates eliminating instanceId prop drilling: child components now get the RuntimeClient from Svelte context instead of receiving instanceId as a prop from parents. --- .../connectors/explorer/ConnectorEntry.svelte | 2 +- .../connectors/explorer/DatabaseEntry.svelte | 7 ++-- .../explorer/DatabaseExplorer.svelte | 8 +++-- .../explorer/DatabaseSchemaEntry.svelte | 6 ++-- .../connectors/olap/TableInspector.svelte | 12 ++++--- .../models/inspector/References.svelte | 33 ++++++++----------- 6 files changed, 35 insertions(+), 33 deletions(-) diff --git a/web-common/src/features/connectors/explorer/ConnectorEntry.svelte b/web-common/src/features/connectors/explorer/ConnectorEntry.svelte index 4887634c34f..496d34ab8dd 100644 --- a/web-common/src/features/connectors/explorer/ConnectorEntry.svelte +++ b/web-common/src/features/connectors/explorer/ConnectorEntry.svelte @@ -65,7 +65,7 @@ {#if expanded} - + {/if} {/if} diff --git a/web-common/src/features/connectors/explorer/DatabaseEntry.svelte b/web-common/src/features/connectors/explorer/DatabaseEntry.svelte index 5a60f9708c1..41c5fc0807e 100644 --- a/web-common/src/features/connectors/explorer/DatabaseEntry.svelte +++ b/web-common/src/features/connectors/explorer/DatabaseEntry.svelte @@ -4,21 +4,23 @@ import CaretDownIcon from "../../../components/icons/CaretDownIcon.svelte"; import { LIST_SLIDE_DURATION as duration } from "../../../layout/config"; import type { V1AnalyzedConnector } from "../../../runtime-client"; + import { useRuntimeClient } from "../../../runtime-client/v2"; import DatabaseSchemaEntry from "./DatabaseSchemaEntry.svelte"; import { useListDatabaseSchemas } from "../selectors"; import type { ConnectorExplorerStore } from "./connector-explorer-store"; - export let instanceId: string; export let connector: V1AnalyzedConnector; export let database: string; export let store: ConnectorExplorerStore; + const client = useRuntimeClient(); + $: connectorName = connector?.name as string; $: expandedStore = store.getItem(connectorName, database); $: expanded = $expandedStore; $: databaseSchemasQuery = useListDatabaseSchemas( - instanceId, + client.instanceId, connectorName, database, ); @@ -60,7 +62,6 @@ {:else} {#each data as schema (schema)} {#each data as database (database)} - + {/each} {/if} diff --git a/web-common/src/features/connectors/explorer/DatabaseSchemaEntry.svelte b/web-common/src/features/connectors/explorer/DatabaseSchemaEntry.svelte index 0992754eb7f..3caf4639953 100644 --- a/web-common/src/features/connectors/explorer/DatabaseSchemaEntry.svelte +++ b/web-common/src/features/connectors/explorer/DatabaseSchemaEntry.svelte @@ -5,25 +5,27 @@ V1AnalyzedConnector, V1TableInfo, } from "../../../runtime-client"; + import { useRuntimeClient } from "../../../runtime-client/v2"; import TableEntry from "./TableEntry.svelte"; import { useInfiniteListTables } from "../selectors"; import Button from "../../../components/button/Button.svelte"; import type { ConnectorExplorerStore } from "./connector-explorer-store"; import { onMount } from "svelte"; - export let instanceId: string; export let connector: V1AnalyzedConnector; export let database: string; export let databaseSchema: string; export let store: ConnectorExplorerStore; + const client = useRuntimeClient(); + $: connectorName = connector?.name as string; $: expandedStore = store.getItem(connectorName, database, databaseSchema); $: expanded = $expandedStore; $: tablesQuery = useInfiniteListTables( - instanceId, + client.instanceId, connectorName, database, databaseSchema, diff --git a/web-common/src/features/connectors/olap/TableInspector.svelte b/web-common/src/features/connectors/olap/TableInspector.svelte index c7f6c94e7aa..2fa7214fdcf 100644 --- a/web-common/src/features/connectors/olap/TableInspector.svelte +++ b/web-common/src/features/connectors/olap/TableInspector.svelte @@ -8,8 +8,8 @@ import { createQueryServiceTableCardinality, createQueryServiceTableColumns, - } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + } from "@rilldata/web-common/runtime-client/v2/gen"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { slide } from "svelte/transition"; export let connector: string; @@ -21,15 +21,17 @@ let isReconciling = false; let hasUnsavedChanges = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); - $: cardinalityQuery = createQueryServiceTableCardinality(instanceId, table, { + $: cardinalityQuery = createQueryServiceTableCardinality(client, { + tableName: table, connector, database, databaseSchema, }); - $: profileColumnsQuery = createQueryServiceTableColumns(instanceId, table, { + $: profileColumnsQuery = createQueryServiceTableColumns(client, { + tableName: table, connector, database, databaseSchema, diff --git a/web-common/src/features/models/inspector/References.svelte b/web-common/src/features/models/inspector/References.svelte index 7c0b2f2bf31..3fa18246c65 100644 --- a/web-common/src/features/models/inspector/References.svelte +++ b/web-common/src/features/models/inspector/References.svelte @@ -4,29 +4,31 @@ import CollapsibleSectionTitle from "@rilldata/web-common/layout/CollapsibleSectionTitle.svelte"; import { LIST_SLIDE_DURATION } from "@rilldata/web-common/layout/config"; import { formatCompactInteger } from "@rilldata/web-common/lib/formatters"; + import type { V1ResourceName } from "@rilldata/web-common/runtime-client"; import { - type V1ResourceName, - createQueryServiceTableCardinality, createRuntimeServiceGetResource, - } from "@rilldata/web-common/runtime-client"; + createQueryServiceTableCardinality, + } from "@rilldata/web-common/runtime-client/v2/gen"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived } from "svelte/store"; import { slide } from "svelte/transition"; - import { runtime } from "../../../runtime-client/runtime-store"; import { removeLeadingSlash } from "../../entity-management/entity-mappers"; import WithModelResultTooltip from "./WithModelResultTooltip.svelte"; export let refs: V1ResourceName[]; export let modelHasError: boolean; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); let showReferences = true; $: referencedResourcesStore = derived( refs.map((ref) => { - return createRuntimeServiceGetResource(instanceId, { - "name.name": ref.name as string, - "name.kind": ref.kind as string, + return createRuntimeServiceGetResource(client, { + name: { + name: ref.name as string, + kind: ref.kind as string, + }, }); }), (refs) => refs.map((ref) => ref.data), @@ -35,18 +37,11 @@ $: referencedResourceCardinalitiesStore = derived( refs.map((ref) => { - return createQueryServiceTableCardinality( - instanceId, - ref.name as string, - {}, - { - query: { - select: (data) => +(data.cardinality ?? 0), - }, - }, - ); + return createQueryServiceTableCardinality(client, { + tableName: ref.name as string, + }); }), - (refs) => refs.map((ref) => ref.data), + (refs) => refs.map((ref) => Number(ref.data?.cardinality ?? 0)), ); $: referencedResourcesCardinalities = $referencedResourceCardinalitiesStore; From 133a4112b24e22a749254544ac1e5d42079f15bd Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 14:47:44 +0300 Subject: [PATCH 14/78] refactor: migrate column-profile, canvas, and remaining connectors to v2 RuntimeClient - column-profile/queries.ts: all functions accept RuntimeClient instead of instanceId - connectors/selectors.ts: useListDatabaseSchemas, useInfiniteListTables, useGetTable accept RuntimeClient; useIsModelingSupported* functions left as-is (callers out of scope) - Column profile components (NumericProfile, TimestampProfile, VarcharProfile, NestedProfile): replace $runtime with useRuntimeClient() - WorkspaceInspector: replace $runtime with useRuntimeClient(), switch Orval hooks to v2 - Canvas components (CanvasInitialization, KPIProvider, PageEditor): replace $runtime with useRuntimeClient(), switch Orval hooks to v2 - Update already-migrated callers to pass client instead of client.instanceId --- .../canvas/CanvasInitialization.svelte | 10 +- .../canvas/components/kpi/KPIProvider.svelte | 28 ++--- .../canvas/inspector/PageEditor.svelte | 16 +-- .../column-profile/ColumnProfile.svelte | 2 +- .../column-types/NestedProfile.svelte | 10 +- .../column-types/NumericProfile.svelte | 24 ++-- .../column-types/TimestampProfile.svelte | 8 +- .../column-types/VarcharProfile.svelte | 10 +- .../src/features/column-profile/queries.ts | 103 +++++++++--------- .../connectors/explorer/DatabaseEntry.svelte | 2 +- .../explorer/DatabaseExplorer.svelte | 2 +- .../explorer/DatabaseSchemaEntry.svelte | 2 +- .../connectors/explorer/TableSchema.svelte | 2 +- .../src/features/connectors/selectors.ts | 98 ++++++++++------- .../inspector/WorkspaceInspector.svelte | 36 +++--- 15 files changed, 186 insertions(+), 167 deletions(-) diff --git a/web-common/src/features/canvas/CanvasInitialization.svelte b/web-common/src/features/canvas/CanvasInitialization.svelte index 8be3de8d643..21fb9e3c1a9 100644 --- a/web-common/src/features/canvas/CanvasInitialization.svelte +++ b/web-common/src/features/canvas/CanvasInitialization.svelte @@ -13,10 +13,11 @@ import { onNavigate } from "$app/navigation"; import { writable } from "svelte/store"; import { - createQueryServiceResolveCanvas, type V1MetricsView, type V1ResolveCanvasResponse, } from "@rilldata/web-common/runtime-client"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; + import { createQueryServiceResolveCanvas } from "@rilldata/web-common/runtime-client/v2/gen"; import { ResourceKind, useResource, @@ -30,6 +31,8 @@ export let showBanner = false; export let projectId: string | undefined = undefined; + const client = useRuntimeClient(); + let resolvedStore: CanvasStore | undefined = undefined; $: ({ url } = $page); @@ -45,9 +48,8 @@ $: fetchedCanvasQuery = !existingStore ? createQueryServiceResolveCanvas( - instanceId, - canvasName, - {}, + client, + { canvas: canvasName }, { query: { retry: 5, diff --git a/web-common/src/features/canvas/components/kpi/KPIProvider.svelte b/web-common/src/features/canvas/components/kpi/KPIProvider.svelte index 96461e02066..0aae232c825 100644 --- a/web-common/src/features/canvas/components/kpi/KPIProvider.svelte +++ b/web-common/src/features/canvas/components/kpi/KPIProvider.svelte @@ -1,12 +1,12 @@ diff --git a/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte b/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte index f4e48219be1..0f5d69f99e5 100644 --- a/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte +++ b/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte @@ -1,7 +1,7 @@ diff --git a/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte b/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte index ff4a96f6912..1a1427b14ed 100644 --- a/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte +++ b/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte @@ -4,9 +4,11 @@ import InputLabel from "@rilldata/web-common/components/forms/InputLabel.svelte"; import Search from "@rilldata/web-common/components/search/Search.svelte"; import { getCanvasStore } from "@rilldata/web-common/features/canvas/state-managers/state-managers"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useMetricFieldData } from "../selectors"; + const client = useRuntimeClient(); + export let metricName: string; export let label: string | undefined = undefined; export let id: string; @@ -23,9 +25,7 @@ let open = false; let searchValue = ""; - $: ({ instanceId } = $runtime); - - $: ctx = getCanvasStore(canvasName, instanceId); + $: ctx = getCanvasStore(canvasName, client.instanceId); $: ({ getTimeDimensionForMetricView } = ctx.canvasEntity.metricsView); $: timeDimension = getTimeDimensionForMetricView(metricName); diff --git a/web-common/src/features/canvas/state-managers/state-managers.ts b/web-common/src/features/canvas/state-managers/state-managers.ts index f2035f05a6c..bf816bbbaf5 100644 --- a/web-common/src/features/canvas/state-managers/state-managers.ts +++ b/web-common/src/features/canvas/state-managers/state-managers.ts @@ -1,5 +1,6 @@ import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryClient } from "@tanstack/svelte-query"; import { type Writable } from "svelte/store"; import { CanvasEntity } from "../stores/canvas-entity"; @@ -8,6 +9,7 @@ import type { CanvasResponse } from "../selector"; export type CanvasStore = { runtime: Writable; + runtimeClient: RuntimeClient; canvasEntity: CanvasEntity; queryClient: QueryClient; }; @@ -58,6 +60,7 @@ export function setCanvasStore( canvasName: string, instanceId: string, response: CanvasResponse, + runtimeClient?: RuntimeClient, ): CanvasStore { const id = makeCanvasId(canvasName, instanceId); @@ -71,6 +74,7 @@ export function setCanvasStore( const canvasEntity = new CanvasEntity(canvasName, instanceId, response); const store: CanvasStore = { runtime: runtime, + runtimeClient: runtimeClient!, canvasEntity, queryClient, }; diff --git a/web-common/src/features/components/charts/ChartContainer.svelte b/web-common/src/features/components/charts/ChartContainer.svelte index 93781458ed7..7f0e9efb46d 100644 --- a/web-common/src/features/components/charts/ChartContainer.svelte +++ b/web-common/src/features/components/charts/ChartContainer.svelte @@ -8,7 +8,7 @@ import ExploreLink from "@rilldata/web-common/features/explores/explore-link/ExploreLink.svelte"; import { MetricsViewSelectors } from "@rilldata/web-common/features/metrics-views/metrics-view-selectors"; import { DashboardState_ActivePage } from "@rilldata/web-common/proto/gen/rill/ui/v1/dashboard_pb"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import Filter from "@rilldata/web-common/components/icons/Filter.svelte"; import FilterChipsReadOnly from "@rilldata/web-common/features/dashboards/filters/FilterChipsReadOnly.svelte"; @@ -37,6 +37,8 @@ export let organization: string | undefined = undefined; export let project: string | undefined = undefined; + const client = useRuntimeClient(); + let chartProvider: ChartProvider; $: { const chartConfig = CHART_CONFIG[chartType]; @@ -55,7 +57,7 @@ themeMode === "dark" ? "dark" : "light" ]; - $: metricsViewSelectors = new MetricsViewSelectors($runtime.instanceId); + $: metricsViewSelectors = new MetricsViewSelectors(client.instanceId); $: measures = metricsViewSelectors.getMeasuresForMetricView( $spec.metrics_view, @@ -66,7 +68,7 @@ ); $: chartDataQuery = chartProvider.createChartDataQuery( - runtime, + client, timeAndFilterStore, ); @@ -86,7 +88,7 @@ $: chartTitle = chartProvider?.chartTitle?.($chartData.fields) ?? ""; $: exploreAvailability = showExploreLink - ? useExploreAvailability($runtime.instanceId, $spec?.metrics_view) + ? useExploreAvailability(client.instanceId, $spec?.metrics_view) : readable({ isAvailable: false, exploreName: null, diff --git a/web-common/src/features/components/charts/cartesian/CartesianChartProvider.ts b/web-common/src/features/components/charts/cartesian/CartesianChartProvider.ts index 6a2ab4151f6..5383d81b7a2 100644 --- a/web-common/src/features/components/charts/cartesian/CartesianChartProvider.ts +++ b/web-common/src/features/components/charts/cartesian/CartesianChartProvider.ts @@ -17,15 +17,15 @@ import { import { mergeFilters } from "@rilldata/web-common/features/dashboards/pivot/pivot-merge-filters"; import { createInExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { TimeAndFilterStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import { - getQueryServiceMetricsViewAggregationQueryOptions, - type MetricsViewSpecMeasure, - type V1Expression, - type V1MetricsViewAggregationDimension, - type V1MetricsViewAggregationMeasure, - type V1TimeRange, +import type { + MetricsViewSpecMeasure, + V1Expression, + V1MetricsViewAggregationDimension, + V1MetricsViewAggregationMeasure, + V1TimeRange, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; +import { getQueryServiceMetricsViewAggregationQueryOptions } from "@rilldata/web-common/runtime-client/v2/gen"; import { createQuery, keepPreviousData } from "@tanstack/svelte-query"; import { derived, @@ -150,7 +150,7 @@ export class CartesianChartProvider { } createChartDataQuery( - runtime: Writable, + client: RuntimeClient, timeAndFilterStore: Readable, ): ChartDataQuery { const config = get(this.spec); @@ -199,8 +199,8 @@ export class CartesianChartProvider { // Create topN query for x dimension const topNXQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, @@ -208,7 +208,6 @@ export class CartesianChartProvider { comparisonTimeRange, showTimeComparison, } = $timeAndFilterStore; - const instanceId = $runtime.instanceId; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && config.x?.type === "nominal" && @@ -254,9 +253,9 @@ export class CartesianChartProvider { } return getQueryServiceMetricsViewAggregationQueryOptions( - instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures: topNMeasures, dimensions: [{ name: dimensionName }], sort: xAxisSort ? [xAxisSort] : undefined, @@ -278,8 +277,8 @@ export class CartesianChartProvider { // Create topN query for color dimension const topNColorQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && @@ -293,9 +292,9 @@ export class CartesianChartProvider { ); return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: [{ name: colorDimensionName }], sort: config?.y?.field @@ -317,8 +316,8 @@ export class CartesianChartProvider { const topNColorQuery = createQuery(topNColorQueryOptionsStore); const queryOptionsStore = derived( - [runtime, timeAndFilterStore, topNXQuery, topNColorQuery], - ([$runtime, $timeAndFilterStore, $topNXQuery, $topNColorQuery]) => { + [timeAndFilterStore, topNXQuery, topNColorQuery], + ([$timeAndFilterStore, $topNXQuery, $topNColorQuery]) => { const { timeRange, where, @@ -409,9 +408,9 @@ export class CartesianChartProvider { .flat(); return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures: measuresWithComparison, dimensions, where: combinedWhere, diff --git a/web-common/src/features/components/charts/circular/CircularChartProvider.ts b/web-common/src/features/components/charts/circular/CircularChartProvider.ts index ddcc90f3715..23465210994 100644 --- a/web-common/src/features/components/charts/circular/CircularChartProvider.ts +++ b/web-common/src/features/components/charts/circular/CircularChartProvider.ts @@ -10,14 +10,14 @@ import { isFieldConfig } from "@rilldata/web-common/features/components/charts/u import { mergeFilters } from "@rilldata/web-common/features/dashboards/pivot/pivot-merge-filters"; import { createInExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { TimeAndFilterStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import type { V1Expression } from "@rilldata/web-common/runtime-client"; -import { - getQueryServiceMetricsViewAggregationQueryOptions, - type V1MetricsViewAggregationDimension, - type V1MetricsViewAggregationMeasure, - type V1MetricsViewAggregationSort, +import type { + V1Expression, + V1MetricsViewAggregationDimension, + V1MetricsViewAggregationMeasure, + V1MetricsViewAggregationSort, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import { getQueryServiceMetricsViewAggregationQueryOptions } from "@rilldata/web-common/runtime-client/v2/gen"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, keepPreviousData } from "@tanstack/svelte-query"; import { derived, @@ -65,7 +65,7 @@ export class CircularChartProvider { } createChartDataQuery( - runtime: Writable, + client: RuntimeClient, timeAndFilterStore: Readable, ): ChartDataQuery { const config = get(this.spec); @@ -90,10 +90,9 @@ export class CircularChartProvider { // Create topN query for color dimension const topNColorQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; - const instanceId = $runtime.instanceId; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && !!colorDimensionName && @@ -103,9 +102,9 @@ export class CircularChartProvider { const topNWhere = getFilterWithNullHandling(where, config.color); return getQueryServiceMetricsViewAggregationQueryOptions( - instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: [{ name: colorDimensionName }], sort: colorSort ? [colorSort] : undefined, @@ -125,8 +124,8 @@ export class CircularChartProvider { const topNColorQuery = createQuery(topNColorQueryOptionsStore); const totalQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; const enabled = !!showTotal && @@ -136,9 +135,9 @@ export class CircularChartProvider { const totalWhere = getFilterWithNullHandling(where, config.color); return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, where: totalWhere, timeRange, @@ -155,8 +154,8 @@ export class CircularChartProvider { const totalQuery = createQuery(totalQueryOptionsStore); const queryOptionsStore = derived( - [runtime, timeAndFilterStore, topNColorQuery, totalQuery], - ([$runtime, $timeAndFilterStore, $topNColorQuery, $totalQuery]) => { + [timeAndFilterStore, topNColorQuery, totalQuery], + ([$timeAndFilterStore, $topNColorQuery, $totalQuery]) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; const topNColorData = $topNColorQuery?.data?.data; const enabled = @@ -192,9 +191,9 @@ export class CircularChartProvider { this.combinedWhere.set(combinedWhere); const queryOptions = getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions, where: combinedWhere, diff --git a/web-common/src/features/components/charts/combo/ComboChartProvider.ts b/web-common/src/features/components/charts/combo/ComboChartProvider.ts index 6d2911c3497..6c33d25a3c8 100644 --- a/web-common/src/features/components/charts/combo/ComboChartProvider.ts +++ b/web-common/src/features/components/charts/combo/ComboChartProvider.ts @@ -9,14 +9,14 @@ import { import { mergeFilters } from "@rilldata/web-common/features/dashboards/pivot/pivot-merge-filters"; import { createInExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { TimeAndFilterStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import { - getQueryServiceMetricsViewAggregationQueryOptions, - type MetricsViewSpecMeasure, - type V1Expression, - type V1MetricsViewAggregationDimension, - type V1MetricsViewAggregationMeasure, +import type { + MetricsViewSpecMeasure, + V1Expression, + V1MetricsViewAggregationDimension, + V1MetricsViewAggregationMeasure, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import { getQueryServiceMetricsViewAggregationQueryOptions } from "@rilldata/web-common/runtime-client/v2/gen"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, keepPreviousData } from "@tanstack/svelte-query"; import { derived, @@ -81,7 +81,7 @@ export class ComboChartProvider { } createChartDataQuery( - runtime: Writable, + client: RuntimeClient, timeAndFilterStore: Readable, ): ChartDataQuery { const config = get(this.spec); @@ -100,10 +100,9 @@ export class ComboChartProvider { const dimensionName = config.x?.field; const xAxisQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; - const instanceId = $runtime.instanceId; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && !!dimensionName && @@ -129,9 +128,9 @@ export class ComboChartProvider { ); return getQueryServiceMetricsViewAggregationQueryOptions( - instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures: xAxisMeasures, dimensions: [{ name: dimensionName }], sort: xAxisSort ? [xAxisSort] : undefined, @@ -151,8 +150,8 @@ export class ComboChartProvider { const xAxisQuery = createQuery(xAxisQueryOptionsStore); const queryOptionsStore = derived( - [runtime, timeAndFilterStore, xAxisQuery], - ([$runtime, $timeAndFilterStore, $xAxisQuery]) => { + [timeAndFilterStore, xAxisQuery], + ([$timeAndFilterStore, $xAxisQuery]) => { const { timeRange, where, timeGrain, hasTimeSeries } = $timeAndFilterStore; const xTopNData = $xAxisQuery?.data?.data; @@ -204,9 +203,9 @@ export class ComboChartProvider { } return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions, where: combinedWhere, diff --git a/web-common/src/features/components/charts/funnel/FunnelChartProvider.ts b/web-common/src/features/components/charts/funnel/FunnelChartProvider.ts index 886255e99ba..c3af6900701 100644 --- a/web-common/src/features/components/charts/funnel/FunnelChartProvider.ts +++ b/web-common/src/features/components/charts/funnel/FunnelChartProvider.ts @@ -8,14 +8,14 @@ import { import { mergeFilters } from "@rilldata/web-common/features/dashboards/pivot/pivot-merge-filters"; import { createInExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { TimeAndFilterStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import { - getQueryServiceMetricsViewAggregationQueryOptions, - type V1Expression, - type V1MetricsViewAggregationDimension, - type V1MetricsViewAggregationMeasure, - type V1MetricsViewAggregationSort, +import type { + V1Expression, + V1MetricsViewAggregationDimension, + V1MetricsViewAggregationMeasure, + V1MetricsViewAggregationSort, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import { getQueryServiceMetricsViewAggregationQueryOptions } from "@rilldata/web-common/runtime-client/v2/gen"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, keepPreviousData } from "@tanstack/svelte-query"; import { derived, @@ -77,7 +77,7 @@ export class FunnelChartProvider { } createChartDataQuery( - runtime: Writable, + client: RuntimeClient, timeAndFilterStore: Readable, ): ChartDataQuery { const config = get(this.spec); @@ -121,10 +121,9 @@ export class FunnelChartProvider { // Create topN query for stage dimension const topNStageQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; - const instanceId = $runtime.instanceId; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && !!stageDimensionName && @@ -134,9 +133,9 @@ export class FunnelChartProvider { const topNWhere = getFilterWithNullHandling(where, config.stage); return getQueryServiceMetricsViewAggregationQueryOptions( - instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: [{ name: stageDimensionName }], sort: stageSort ? [stageSort] : undefined, @@ -156,8 +155,8 @@ export class FunnelChartProvider { const topNStageQuery = createQuery(topNStageQueryOptionsStore); const queryOptionsStore = derived( - [runtime, timeAndFilterStore, topNStageQuery], - ([$runtime, $timeAndFilterStore, $topNStageQuery]) => { + [timeAndFilterStore, topNStageQuery], + ([$timeAndFilterStore, $topNStageQuery]) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; const topNStageData = $topNStageQuery?.data?.data; const enabled = @@ -204,9 +203,9 @@ export class FunnelChartProvider { this.combinedWhere.set(combinedWhere); const queryOptions = getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions, where: combinedWhere, diff --git a/web-common/src/features/components/charts/heatmap/HeatmapChartProvider.ts b/web-common/src/features/components/charts/heatmap/HeatmapChartProvider.ts index 3801150579c..e7ff792b60b 100644 --- a/web-common/src/features/components/charts/heatmap/HeatmapChartProvider.ts +++ b/web-common/src/features/components/charts/heatmap/HeatmapChartProvider.ts @@ -9,13 +9,13 @@ import { import { mergeFilters } from "@rilldata/web-common/features/dashboards/pivot/pivot-merge-filters"; import { createInExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { TimeAndFilterStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import { - getQueryServiceMetricsViewAggregationQueryOptions, - type V1Expression, - type V1MetricsViewAggregationDimension, - type V1MetricsViewAggregationMeasure, +import type { + V1Expression, + V1MetricsViewAggregationDimension, + V1MetricsViewAggregationMeasure, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import { getQueryServiceMetricsViewAggregationQueryOptions } from "@rilldata/web-common/runtime-client/v2/gen"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, keepPreviousData } from "@tanstack/svelte-query"; import { derived, @@ -68,7 +68,7 @@ export class HeatmapChartProvider { } createChartDataQuery( - runtime: Writable, + client: RuntimeClient, timeAndFilterStore: Readable, ): ChartDataQuery { const config = get(this.spec); @@ -81,10 +81,9 @@ export class HeatmapChartProvider { // Create top level options store for X axis const xAxisQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; - const instanceId = $runtime.instanceId; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && !!config.x?.field && @@ -105,9 +104,9 @@ export class HeatmapChartProvider { ); return getQueryServiceMetricsViewAggregationQueryOptions( - instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: [{ name: config.x?.field }], sort: xAxisSort ? [xAxisSort] : undefined, @@ -126,8 +125,8 @@ export class HeatmapChartProvider { // Create top level options store for Y axis const yAxisQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where, hasTimeSeries } = $timeAndFilterStore; const enabled = (!hasTimeSeries || (!!timeRange?.start && !!timeRange?.end)) && @@ -149,9 +148,9 @@ export class HeatmapChartProvider { ); return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: [{ name: config.y?.field }], sort: yAxisSort ? [yAxisSort] : undefined, @@ -172,8 +171,8 @@ export class HeatmapChartProvider { const yAxisQuery = createQuery(yAxisQueryOptionsStore); const queryOptionsStore = derived( - [runtime, timeAndFilterStore, xAxisQuery, yAxisQuery], - ([$runtime, $timeAndFilterStore, $xAxisQuery, $yAxisQuery]) => { + [timeAndFilterStore, xAxisQuery, yAxisQuery], + ([$timeAndFilterStore, $xAxisQuery, $yAxisQuery]) => { const { timeRange, where, timeGrain, hasTimeSeries } = $timeAndFilterStore; const xTopNData = $xAxisQuery?.data?.data; @@ -253,9 +252,9 @@ export class HeatmapChartProvider { } return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions, sort: diff --git a/web-common/src/features/components/charts/scatter/ScatterPlotChartProvider.ts b/web-common/src/features/components/charts/scatter/ScatterPlotChartProvider.ts index ca39171b84f..ab83c281be0 100644 --- a/web-common/src/features/components/charts/scatter/ScatterPlotChartProvider.ts +++ b/web-common/src/features/components/charts/scatter/ScatterPlotChartProvider.ts @@ -8,13 +8,13 @@ import { isFieldConfig } from "@rilldata/web-common/features/components/charts/u import { mergeFilters } from "@rilldata/web-common/features/dashboards/pivot/pivot-merge-filters"; import { createInExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { TimeAndFilterStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import { - getQueryServiceMetricsViewAggregationQueryOptions, - type V1Expression, - type V1MetricsViewAggregationDimension, - type V1MetricsViewAggregationMeasure, +import type { + V1Expression, + V1MetricsViewAggregationDimension, + V1MetricsViewAggregationMeasure, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import { getQueryServiceMetricsViewAggregationQueryOptions } from "@rilldata/web-common/runtime-client/v2/gen"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, keepPreviousData } from "@tanstack/svelte-query"; import { derived, @@ -49,7 +49,7 @@ export class ScatterPlotChartProvider { } createChartDataQuery( - runtime: Writable, + client: RuntimeClient, timeAndFilterStore: Readable, ): ChartDataQuery { const config = get(this.spec); @@ -93,8 +93,8 @@ export class ScatterPlotChartProvider { } const topNColorQueryOptionsStore = derived( - [runtime, timeAndFilterStore], - ([$runtime, $timeAndFilterStore]) => { + timeAndFilterStore, + ($timeAndFilterStore) => { const { timeRange, where } = $timeAndFilterStore; const enabled = !!timeRange?.start && @@ -109,9 +109,9 @@ export class ScatterPlotChartProvider { ); return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: [{ name: colorDimensionName }], sort: config?.y?.field @@ -133,8 +133,8 @@ export class ScatterPlotChartProvider { const topNColorQuery = createQuery(topNColorQueryOptionsStore); const queryOptionsStore = derived( - [runtime, timeAndFilterStore, topNColorQuery], - ([$runtime, $timeAndFilterStore, $topNColorQuery]) => { + [timeAndFilterStore, topNColorQuery], + ([$timeAndFilterStore, $topNColorQuery]) => { const { timeRange, where, timeGrain } = $timeAndFilterStore; const topNColorData = $topNColorQuery?.data?.data; const enabled = @@ -182,9 +182,9 @@ export class ScatterPlotChartProvider { this.combinedWhere.set(combinedWhere); return getQueryServiceMetricsViewAggregationQueryOptions( - $runtime.instanceId, - config.metrics_view, + client, { + metricsView: config.metrics_view, measures, dimensions: finalDimensions, where: combinedWhere, diff --git a/web-common/src/features/components/charts/types.ts b/web-common/src/features/components/charts/types.ts index aee4e863111..c48db0d185e 100644 --- a/web-common/src/features/components/charts/types.ts +++ b/web-common/src/features/components/charts/types.ts @@ -24,7 +24,6 @@ import { type MetricsViewSpecMeasure, type V1MetricsViewAggregationResponseDataItem, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import type { Color } from "chroma-js"; import type { TimeUnit } from "vega-lite/build/src/timeunit"; @@ -88,7 +87,7 @@ export type ChartType = export type ChartDataQuery = CreateQueryResult< V1MetricsViewAggregationResponse, - HTTPError + Error >; export type ChartFieldsMap = Record< @@ -102,7 +101,7 @@ export type ChartDataResult = { data: V1MetricsViewAggregationResponseDataItem[]; isFetching: boolean; fields: ChartFieldsMap; - error?: HTTPError | null; + error?: Error | null; theme: { primary: Color; secondary: Color }; domainValues?: ChartDomainValues; isDarkMode: boolean; From 25a80d115703811a7a0faae3f0871ad4924458eb Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 17:04:50 +0300 Subject: [PATCH 17/78] refactor: add runtimeClient to dashboard StateManagers and migrate core stores to v2 Bridge pattern: adds runtimeClient alongside runtime in StateManagers. Migrates validSpecStore and timeRangeSummaryStore to v2 hooks, removing runtime from their derived() dependencies. --- .../StateManagersProvider.svelte | 4 ++ .../state-managers/selectors/index.ts | 7 +-- .../state-managers/state-managers.ts | 45 ++++++++++++------- .../dashboards/stores/test-data/helpers.ts | 6 +++ 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte b/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte index bf6f8ca789d..d446c88b0a4 100644 --- a/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte +++ b/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte @@ -3,16 +3,20 @@ import { createStateManagers, DEFAULT_STORE_KEY } from "./state-managers"; import { useExploreState } from "../stores/dashboard-stores"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let metricsViewName: string | undefined; export let exploreName: string; export let visualEditing = false; + const client = useRuntimeClient(); + const stateManagers = metricsViewName ? createStateManagers({ queryClient, metricsViewName, exploreName, + runtimeClient: client, }) : undefined; diff --git a/web-common/src/features/dashboards/state-managers/selectors/index.ts b/web-common/src/features/dashboards/state-managers/selectors/index.ts index 684250e980f..719bb68492d 100644 --- a/web-common/src/features/dashboards/state-managers/selectors/index.ts +++ b/web-common/src/features/dashboards/state-managers/selectors/index.ts @@ -1,10 +1,7 @@ import { chartSelectors } from "@rilldata/web-common/features/dashboards/state-managers/selectors/charts"; import { measureFilterSelectors } from "@rilldata/web-common/features/dashboards/state-managers/selectors/measure-filters"; import type { ExploreValidSpecResponse } from "@rilldata/web-common/features/explores/selectors"; -import type { - RpcStatus, - V1MetricsViewTimeRangeResponse, -} from "@rilldata/web-common/runtime-client"; +import type { V1MetricsViewTimeRangeResponse } from "@rilldata/web-common/runtime-client"; import type { QueryClient, QueryObserverResult } from "@tanstack/svelte-query"; import { derived, type Readable } from "svelte/store"; import type { ExploreState } from "web-common/src/features/dashboards/stores/explore-state"; @@ -25,7 +22,7 @@ import { leaderboardSelectors } from "./leaderboard"; export type DashboardDataReadables = { dashboardStore: Readable; validSpecStore: Readable< - QueryObserverResult + QueryObserverResult >; timeRangeSummaryStore: Readable< QueryObserverResult diff --git a/web-common/src/features/dashboards/state-managers/state-managers.ts b/web-common/src/features/dashboards/state-managers/state-managers.ts index b88a58c21b8..b0115413619 100644 --- a/web-common/src/features/dashboards/state-managers/state-managers.ts +++ b/web-common/src/features/dashboards/state-managers/state-managers.ts @@ -1,17 +1,15 @@ import { type ExploreState } from "@rilldata/web-common/features/dashboards/stores/explore-state"; import { getDefaultExplorePreset } from "@rilldata/web-common/features/dashboards/url-state/getDefaultExplorePreset"; +import { type ExploreValidSpecResponse } from "@rilldata/web-common/features/explores/selectors"; import { - type ExploreValidSpecResponse, - useExploreValidSpec, -} from "@rilldata/web-common/features/explores/selectors"; -import { - type RpcStatus, type V1ExplorePreset, type V1MetricsViewTimeRangeResponse, - createQueryServiceMetricsViewTimeRange, } from "@rilldata/web-common/runtime-client"; import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; +import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client/v2/gen/runtime-service"; +import { createQueryServiceMetricsViewTimeRange } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import type { QueryClient, QueryObserverResult } from "@tanstack/svelte-query"; import { getContext } from "svelte"; import { @@ -40,6 +38,7 @@ import { export type StateManagers = { runtime: Writable; + runtimeClient: RuntimeClient; metricsViewName: Writable; exploreName: Writable; metricsStore: Readable; @@ -49,7 +48,7 @@ export type StateManagers = { QueryObserverResult >; validSpecStore: Readable< - QueryObserverResult + QueryObserverResult >; queryClient: QueryClient; updateDashboard: DashboardCallbackExecutor; @@ -81,10 +80,12 @@ export function createStateManagers({ queryClient, metricsViewName, exploreName, + runtimeClient, }: { queryClient: QueryClient; metricsViewName: string; exploreName: string; + runtimeClient: RuntimeClient; }): StateManagers { const metricsViewNameStore = writable(metricsViewName); const exploreNameStore = writable(exploreName); @@ -99,12 +100,21 @@ export function createStateManagers({ ); const validSpecStore: Readable< - QueryObserverResult - > = derived([runtime, exploreNameStore], ([r, exploreName], set) => - useExploreValidSpec( - r.instanceId, - exploreName, - undefined, + QueryObserverResult + > = derived([exploreNameStore], ([exploreName], set) => + createRuntimeServiceGetExplore( + runtimeClient, + { name: exploreName }, + { + query: { + select: (data) => + { + explore: data.explore?.explore?.state?.validSpec, + metricsView: data.metricsView?.metricsView?.state?.validSpec, + }, + enabled: !!exploreName, + }, + }, queryClient, ).subscribe(set), ); @@ -112,12 +122,12 @@ export function createStateManagers({ const timeRangeSummaryStore: Readable< QueryObserverResult > = derived( - [runtime, metricsViewNameStore, validSpecStore, dashboardStore], - ([runtime, mvName, validSpec, $dashboardStore], set) => + [metricsViewNameStore, validSpecStore, dashboardStore], + ([mvName, validSpec, $dashboardStore], set) => createQueryServiceMetricsViewTimeRange( - runtime.instanceId, - mvName, + runtimeClient, { + metricsViewName: mvName, timeDimension: $dashboardStore?.selectedTimeDimension, }, { @@ -158,6 +168,7 @@ export function createStateManagers({ return { runtime: runtime, + runtimeClient, metricsViewName: metricsViewNameStore, exploreName: exploreNameStore, metricsStore: metricsExplorerStore, diff --git a/web-common/src/features/dashboards/stores/test-data/helpers.ts b/web-common/src/features/dashboards/stores/test-data/helpers.ts index c1587dbf3fa..11d19973f58 100644 --- a/web-common/src/features/dashboards/stores/test-data/helpers.ts +++ b/web-common/src/features/dashboards/stores/test-data/helpers.ts @@ -1,5 +1,6 @@ import { QueryClient } from "@tanstack/svelte-query"; import { createStateManagers } from "@rilldata/web-common/features/dashboards/state-managers/state-managers"; +import { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { metricsExplorerStore } from "@rilldata/web-common/features/dashboards/stores/dashboard-stores"; import { createAndExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import type { ExploreState } from "@rilldata/web-common/features/dashboards/stores/explore-state"; @@ -120,10 +121,15 @@ export function initStateManagers(metricsViewName?: string) { }, }, }); + const runtimeClient = new RuntimeClient({ + host: "http://localhost", + instanceId: "test", + }); const stateManagers = createStateManagers({ queryClient, metricsViewName, exploreName, + runtimeClient, }); return { stateManagers, queryClient }; From 8392af2f2d9a1716c8877e526fb9842e35615ebc Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 17:04:57 +0300 Subject: [PATCH 18/78] refactor: migrate dashboard time-series and selector modules to v2 RuntimeClient Migrates 5 TS modules that receive StateManagers: timeseries-data-store, totals-data-store, multiple-dimension-queries, dimension-filters selector, and dashboard selectors. Removes ctx.runtime from derived() dependencies and switches to v2 query hooks. --- .../features/dashboards/selectors/index.ts | 20 +++++----- .../selectors/dimension-filters.ts | 6 +-- .../time-series/multiple-dimension-queries.ts | 27 +++++--------- .../time-series/timeseries-data-store.ts | 30 ++++++--------- .../time-series/totals-data-store.ts | 37 ++++++------------- 5 files changed, 45 insertions(+), 75 deletions(-) diff --git a/web-common/src/features/dashboards/selectors/index.ts b/web-common/src/features/dashboards/selectors/index.ts index dc434615b70..069a951ff98 100644 --- a/web-common/src/features/dashboards/selectors/index.ts +++ b/web-common/src/features/dashboards/selectors/index.ts @@ -1,22 +1,20 @@ -import { - type V1MetricsViewTimeRangeResponse, - createQueryServiceMetricsViewTimeRange, -} from "@rilldata/web-common/runtime-client"; +import type { V1MetricsViewTimeRangeResponse } from "@rilldata/web-common/runtime-client"; +import { createQueryServiceMetricsViewTimeRange } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import { derived } from "svelte/store"; import type { StateManagers } from "../state-managers/state-managers"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; export function createTimeRangeSummary( ctx: StateManagers, -): CreateQueryResult { +): CreateQueryResult { return derived( - [ctx.runtime, ctx.metricsViewName, ctx.validSpecStore], - ([runtime, metricsViewName, validSpec], set) => + [ctx.metricsViewName, ctx.validSpecStore], + ([metricsViewName, validSpec], set) => createQueryServiceMetricsViewTimeRange( - runtime.instanceId, - metricsViewName, - {}, + ctx.runtimeClient, + { + metricsViewName, + }, { query: { enabled: diff --git a/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts b/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts index be2072fa79a..879434458e5 100644 --- a/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts +++ b/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts @@ -85,10 +85,10 @@ export const selectedDimensionValues = ( export const useSelectedValuesForCompareDimension = (ctx: StateManagers) => { return derived( - [ctx.runtime, ctx.metricsViewName, ctx.dashboardStore], - ([runtime, metricsViewName, exploreState], set) => + [ctx.metricsViewName, ctx.dashboardStore], + ([metricsViewName, exploreState], set) => selectedDimensionValues( - runtime.instanceId, + ctx.runtimeClient.instanceId, [metricsViewName], exploreState.whereFilter, exploreState.selectedComparisonDimension ?? "", diff --git a/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts b/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts index b3a534e9d96..3f62d9cd944 100644 --- a/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts +++ b/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts @@ -26,9 +26,8 @@ import { type V1MetricsViewAggregationResponse, V1TimeGrain, type V1TimeSeriesValue, - createQueryServiceMetricsViewAggregation, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import { type CreateQueryResult, keepPreviousData, @@ -77,13 +76,12 @@ export function getDimensionValuesForComparison( ): Readable { return derived( [ - ctx.runtime, ctx.metricsViewName, ctx.dashboardStore, useTimeControlStore(ctx), dimensionSearchText, ], - ([runtime, name, dashboardStore, timeControls, searchText], set) => { + ([name, dashboardStore, timeControls, searchText], set) => { const isValidMeasureList = measures?.length > 0 && measures?.every((m) => m !== undefined); @@ -99,7 +97,7 @@ export function getDimensionValuesForComparison( let comparisonValues: (string | null)[] = []; if (surface === "chart") { return selectedDimensionValues( - runtime.instanceId, + ctx.runtimeClient.instanceId, [name], dashboardStore?.whereFilter, dimensionName, @@ -126,9 +124,9 @@ export function getDimensionValuesForComparison( return derived( createQueryServiceMetricsViewAggregation( - runtime.instanceId, - name, + ctx.runtimeClient, { + metricsView: name, measures: measures.map((measure) => ({ name: measure })), dimensions: [{ name: dimensionName }], where: sanitiseExpression( @@ -234,15 +232,10 @@ function getAggregationQueryForTopList( measures: string[], dimensionValues: DimensionTopList, isTimeComparison: boolean = false, -): CreateQueryResult { +): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - ctx.dashboardStore, - useTimeControlStore(ctx), - ], - ([runtime, metricsViewName, dashboardStore, timeStore], set) => { + [ctx.metricsViewName, ctx.dashboardStore, useTimeControlStore(ctx)], + ([metricsViewName, dashboardStore, timeStore], set) => { const dimensionName = dashboardStore?.selectedComparisonDimension; const timeGrain = timeStore?.selectedTimeRange?.interval || V1TimeGrain.TIME_GRAIN_DAY; @@ -273,9 +266,9 @@ function getAggregationQueryForTopList( }; return createQueryServiceMetricsViewAggregation( - runtime.instanceId, - metricsViewName, + ctx.runtimeClient, { + metricsView: metricsViewName, measures: measures.map((measure) => ({ name: measure })), dimensions: [ { name: dimensionName }, diff --git a/web-common/src/features/dashboards/time-series/timeseries-data-store.ts b/web-common/src/features/dashboards/time-series/timeseries-data-store.ts index 46a3cbe8319..64a70342b07 100644 --- a/web-common/src/features/dashboards/time-series/timeseries-data-store.ts +++ b/web-common/src/features/dashboards/time-series/timeseries-data-store.ts @@ -13,9 +13,8 @@ import { type V1MetricsViewAggregationResponse, type V1MetricsViewAggregationResponseDataItem, type V1MetricsViewTimeSeriesResponse, - createQueryServiceMetricsViewTimeSeries, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import { createQueryServiceMetricsViewTimeSeries } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import { keepPreviousData, type CreateQueryResult, @@ -55,21 +54,16 @@ export function createMetricsViewTimeSeries( ctx: StateManagers, measures: string[], isComparison = false, -): CreateQueryResult { +): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - ctx.dashboardStore, - useTimeControlStore(ctx), - ], - ([runtime, metricsViewName, dashboardStore, timeControls], set) => { + [ctx.metricsViewName, ctx.dashboardStore, useTimeControlStore(ctx)], + ([metricsViewName, dashboardStore, timeControls], set) => { const timeGrain = timeControls.selectedTimeRange?.interval; return createQueryServiceMetricsViewTimeSeries( - runtime.instanceId, - metricsViewName, + ctx.runtimeClient, { + metricsViewName, measureNames: measures, where: sanitiseExpression( mergeDimensionAndMeasureFilters( @@ -178,7 +172,7 @@ export function createTimeSeriesDataStore( }); let unfilteredTotals: - | CreateQueryResult + | CreateQueryResult | Writable = writable(null); if (dashboardStore?.selectedComparisonDimension) { @@ -189,10 +183,10 @@ export function createTimeSeriesDataStore( ); } let comparisonTimeSeries: - | CreateQueryResult + | CreateQueryResult | Writable = writable(null); let comparisonTotals: - | CreateQueryResult + | CreateQueryResult | Writable = writable(null); if (showComparison) { comparisonTimeSeries = createMetricsViewTimeSeries( @@ -248,13 +242,11 @@ export function createTimeSeriesDataStore( const error = {}; if (primary.error) { isError = true; - error["timeseries"] = ( - primary.error as HTTPError - ).response?.data?.message; + error["timeseries"] = (primary.error as Error).message; } if (primaryTotal.error) { isError = true; - error["totals"] = primaryTotal.error.response?.data?.message; + error["totals"] = (primaryTotal.error as Error).message; } const primaryIsFetching = primary.isFetching; const primaryTotalIsFetching = primaryTotal.isFetching; diff --git a/web-common/src/features/dashboards/time-series/totals-data-store.ts b/web-common/src/features/dashboards/time-series/totals-data-store.ts index be22d38801c..c447850f633 100644 --- a/web-common/src/features/dashboards/time-series/totals-data-store.ts +++ b/web-common/src/features/dashboards/time-series/totals-data-store.ts @@ -7,11 +7,8 @@ import { sanitiseExpression, } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import { useTimeControlStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; -import { - createQueryServiceMetricsViewAggregation, - type V1MetricsViewAggregationResponse, -} from "@rilldata/web-common/runtime-client"; -import { type HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { V1MetricsViewAggregationResponse } from "@rilldata/web-common/runtime-client"; +import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import { derived } from "svelte/store"; @@ -19,19 +16,14 @@ export function createTotalsForMeasure( ctx: StateManagers, measures: string[], isComparison = false, -): CreateQueryResult { +): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - useTimeControlStore(ctx), - ctx.dashboardStore, - ], - ([runtime, metricsViewName, timeControls, dashboard], set) => + [ctx.metricsViewName, useTimeControlStore(ctx), ctx.dashboardStore], + ([metricsViewName, timeControls, dashboard], set) => createQueryServiceMetricsViewAggregation( - runtime.instanceId, - metricsViewName, + ctx.runtimeClient, { + metricsView: metricsViewName, measures: measures.map((measure) => ({ name: measure })), where: sanitiseExpression( mergeDimensionAndMeasureFilters( @@ -65,15 +57,10 @@ export function createUnfilteredTotalsForMeasure( ctx: StateManagers, measures: string[], dimensionName: string, -): CreateQueryResult { +): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - useTimeControlStore(ctx), - ctx.dashboardStore, - ], - ([runtime, metricsViewName, timeControls, dashboard], set) => { + [ctx.metricsViewName, useTimeControlStore(ctx), ctx.dashboardStore], + ([metricsViewName, timeControls, dashboard], set) => { const filter = sanitiseExpression( mergeDimensionAndMeasureFilters( dashboard.whereFilter, @@ -88,9 +75,9 @@ export function createUnfilteredTotalsForMeasure( ); createQueryServiceMetricsViewAggregation( - runtime.instanceId, - metricsViewName, + ctx.runtimeClient, { + metricsView: metricsViewName, measures: measures.map((measure) => ({ name: measure })), where: updatedFilter, timeRange: { From b65d646367e42a9e312a68c6b1a85d903ee59317 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 17:11:41 +0300 Subject: [PATCH 19/78] refactor: migrate dashboard Svelte components from runtime store to useRuntimeClient Replaces direct `runtime` store imports with `useRuntimeClient()` across 13 dashboard Svelte components. Uses stable `client.instanceId` instead of reactive `$runtime.instanceId`. --- .../dashboards/big-number/MeasuresContainer.svelte | 5 +++-- .../dimension-search/GlobalDimensionSearchResults.svelte | 5 +++-- .../dashboards/dimension-table/DimensionDisplay.svelte | 9 +++++---- .../src/features/dashboards/filters/Filters.svelte | 5 +++-- .../filters/dimension-filters/DimensionFilter.svelte | 5 +++-- .../dimension-filters/DimensionFilterReadOnlyChip.svelte | 5 +++-- .../granular-access-policies/ViewAsButton.svelte | 5 +++-- .../dashboards/leaderboard/LeaderboardDisplay.svelte | 9 +++++---- .../features/dashboards/rows-viewer/RowsViewer.svelte | 5 +++-- .../dashboards/rows-viewer/RowsViewerAccordion.svelte | 8 ++++---- .../state-managers/loaders/DashboardStateManager.svelte | 6 ++++-- .../time-series/MetricsTimeSeriesCharts.svelte | 5 +++-- .../src/features/dashboards/workspace/Dashboard.svelte | 5 +++-- 13 files changed, 45 insertions(+), 32 deletions(-) diff --git a/web-common/src/features/dashboards/big-number/MeasuresContainer.svelte b/web-common/src/features/dashboards/big-number/MeasuresContainer.svelte index 3243b08d5d0..f2fa4dd9a36 100644 --- a/web-common/src/features/dashboards/big-number/MeasuresContainer.svelte +++ b/web-common/src/features/dashboards/big-number/MeasuresContainer.svelte @@ -4,7 +4,7 @@ import { useTimeControlStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; import { EntityStatus } from "@rilldata/web-common/features/entity-management/types"; import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { MEASURE_CONFIG } from "../config"; import MeasureBigNumber from "./MeasureBigNumber.svelte"; import DashboardVisibilityDropdown from "@rilldata/web-common/components/menu/DashboardVisibilityDropdown.svelte"; @@ -41,7 +41,8 @@ }, } = getStateManagers(); - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; const timeControlsStore = useTimeControlStore(getStateManagers()); diff --git a/web-common/src/features/dashboards/dimension-search/GlobalDimensionSearchResults.svelte b/web-common/src/features/dashboards/dimension-search/GlobalDimensionSearchResults.svelte index 21e7b59f6ba..89eaaee13be 100644 --- a/web-common/src/features/dashboards/dimension-search/GlobalDimensionSearchResults.svelte +++ b/web-common/src/features/dashboards/dimension-search/GlobalDimensionSearchResults.svelte @@ -6,7 +6,7 @@ useDimensionSearchResults, } from "@rilldata/web-common/features/dashboards/dimension-search/useDimensionSearchResults"; import { getStateManagers } from "@rilldata/web-common/features/dashboards/state-managers/state-managers"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { DropdownMenu, DropdownMenuContent, @@ -26,7 +26,8 @@ validSpecStore, } = getStateManagers(); - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; let results: ReturnType; $: if ( diff --git a/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte b/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte index 068a6809be3..d74150f4b86 100644 --- a/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte +++ b/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte @@ -16,7 +16,7 @@ type V1MetricsViewAggregationMeasure, type V1TimeRange, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { getComparisonRequestMeasures } from "../dashboard-utils"; import { mergeDimensionAndMeasureFilters } from "../filters/measure-filters/measure-filter-utils"; import { getSort } from "../leaderboard/leaderboard-utils"; @@ -64,12 +64,13 @@ $: metricsViewSpec = $validSpecStore.data?.metricsView ?? {}; - $: ({ name: dimensionName = "" } = dimension); + const client = useRuntimeClient(); + const { instanceId } = client; - $: ({ instanceId } = $runtime); + $: ({ name: dimensionName = "" } = dimension); $: selectedValues = selectedDimensionValues( - $runtime.instanceId, + client.instanceId, [metricsViewName], $dashboardStore.whereFilter, dimensionName, diff --git a/web-common/src/features/dashboards/filters/Filters.svelte b/web-common/src/features/dashboards/filters/Filters.svelte index 349089f4129..3fb84ca90c9 100644 --- a/web-common/src/features/dashboards/filters/Filters.svelte +++ b/web-common/src/features/dashboards/filters/Filters.svelte @@ -48,7 +48,7 @@ import Metadata from "../time-controls/super-pill/components/Metadata.svelte"; import { getValidComparisonOption } from "../time-controls/time-range-store"; import { getPinnedTimeZones } from "../url-state/getDefaultExplorePreset"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; const { rillTime } = featureFlags; @@ -101,7 +101,8 @@ let showDefaultItem = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; $: timeRangeQuery = useMetricsViewTimeRange(instanceId, metricsViewName); diff --git a/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilter.svelte b/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilter.svelte index 95745a1a663..1f092429409 100644 --- a/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilter.svelte +++ b/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilter.svelte @@ -21,7 +21,7 @@ import DimensionFilterFooter from "@rilldata/web-common/features/dashboards/filters/dimension-filters/DimensionFilterFooter.svelte"; import DimensionFilterModeSelector from "@rilldata/web-common/features/dashboards/filters/dimension-filters/DimensionFilterModeSelector.svelte"; import type { V1Expression } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { fly } from "svelte/transition"; import { useAllSearchResultsCount, @@ -67,7 +67,8 @@ : []; let curPinned = filterData.pinned; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; $: ({ name, diff --git a/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilterReadOnlyChip.svelte b/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilterReadOnlyChip.svelte index b3c3751cf4f..22882de39af 100644 --- a/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilterReadOnlyChip.svelte +++ b/web-common/src/features/dashboards/filters/dimension-filters/DimensionFilterReadOnlyChip.svelte @@ -6,7 +6,7 @@ useDimensionSearch, } from "@rilldata/web-common/features/dashboards/filters/dimension-filters/dimension-filter-values"; import DimensionFilterChipBody from "@rilldata/web-common/features/dashboards/filters/dimension-filters/DimensionFilterChipBody.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let name: string; export let metricsViewNames: string[]; @@ -19,7 +19,8 @@ export let timeEnd: string | undefined; export let pinned = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; $: effectiveLabel = isInclude ? label : `Exclude ${label}`; $: sanitisedSearchText = inputText?.replace(/^%/, "").replace(/%$/, ""); diff --git a/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte b/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte index fc50ec6e70e..eb18e2ecd33 100644 --- a/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte +++ b/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte @@ -8,7 +8,7 @@ import Check from "../../../components/icons/Check.svelte"; import EyeIcon from "../../../components/icons/EyeIcon.svelte"; import Spacer from "../../../components/icons/Spacer.svelte"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { selectedMockUserStore } from "./stores"; import { useMockUsers } from "./useMockUsers"; import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu"; @@ -18,7 +18,8 @@ let viewAsMenuOpen = false; let open = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; $: mockUsers = useMockUsers(instanceId); diff --git a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte index 488c2bc9685..62f27dbb32a 100644 --- a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte +++ b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte @@ -5,7 +5,7 @@ V1Expression, V1TimeRange, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { DimensionThresholdFilter } from "web-common/src/features/dashboards/stores/explore-state"; import Leaderboard from "./Leaderboard.svelte"; import LeaderboardControls from "./LeaderboardControls.svelte"; @@ -43,9 +43,10 @@ dashboardStore, } = StateManagers; - let parentElement: HTMLDivElement; + const client = useRuntimeClient(); + const { instanceId } = client; - $: ({ instanceId } = $runtime); + let parentElement: HTMLDivElement; // Reset column widths when the measure changes $: if ($leaderboardSortByMeasureName) { @@ -98,7 +99,7 @@ {parentElement} {timeControlsReady} selectedValues={selectedDimensionValues( - $runtime.instanceId, + client.instanceId, [metricsViewName], $dashboardStore.whereFilter, dimension.name, diff --git a/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte b/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte index 58e4113ad0f..3787fd3511b 100644 --- a/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte +++ b/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte @@ -7,7 +7,7 @@ createQueryServiceMetricsViewRows, type V1Expression, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { writable } from "svelte/store"; import { useExploreState } from "web-common/src/features/dashboards/stores/dashboard-stores"; import { PreviewTable } from "../../../components/preview-table"; @@ -19,7 +19,8 @@ export let filters: V1Expression | undefined; export let timeRange: TimeRangeString; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; const SAMPLE_SIZE = 10000; const FALLBACK_SAMPLE_SIZE = 1000; diff --git a/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte b/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte index da6a5e427db..87150ff1f75 100644 --- a/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte +++ b/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte @@ -7,8 +7,7 @@ import Resizer from "@rilldata/web-common/layout/Resizer.svelte"; import { formatCompactInteger } from "@rilldata/web-common/lib/formatters"; import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; - import { get } from "svelte/store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useExploreState } from "web-common/src/features/dashboards/stores/dashboard-stores"; import ExportMenu from "../../exports/ExportMenu.svelte"; import { featureFlags } from "../../feature-flags"; @@ -42,7 +41,8 @@ }, } = stateManagers; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; $: exploreState = useExploreState(exploreName); $: ({ whereFilter, dimensionThresholdFilters } = $exploreState); @@ -131,7 +131,7 @@ function getExportQuery() { return { metricsViewRowsRequest: { - instanceId: get(runtime).instanceId, + instanceId: client.instanceId, metricsViewName, timeStart: timeRange.start, timeEnd: timeRange.end, diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte index eb8a1daf600..e14d178c360 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte @@ -16,7 +16,7 @@ import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { onDestroy } from "svelte"; export let exploreName: string; @@ -26,7 +26,9 @@ | undefined = undefined; export let disableMostRecentDashboardState: boolean = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; + $: exploreSpecQuery = useExploreValidSpec(instanceId, exploreName); $: exploreSpec = $exploreSpecQuery.data?.explore ?? {}; $: metricsViewName = exploreSpec?.metricsView ?? ""; diff --git a/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte b/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte index dd1e0457b23..7ea077047e7 100644 --- a/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte +++ b/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte @@ -40,7 +40,7 @@ type AvailableTimeGrain, } from "@rilldata/web-common/lib/time/types"; import { type MetricsViewSpecMeasure } from "@rilldata/web-common/runtime-client/gen/index.schemas"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { DateTime } from "luxon"; import { Button } from "../../../components/button"; import Pivot from "../../../components/icons/Pivot.svelte"; @@ -95,7 +95,8 @@ } = $timeControlsStore); $: activeTimeGrain = selectedTimeRange?.interval; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; let scrubStart; let scrubEnd; diff --git a/web-common/src/features/dashboards/workspace/Dashboard.svelte b/web-common/src/features/dashboards/workspace/Dashboard.svelte index 32bde3d3b31..347ba0aad2f 100644 --- a/web-common/src/features/dashboards/workspace/Dashboard.svelte +++ b/web-common/src/features/dashboards/workspace/Dashboard.svelte @@ -12,7 +12,7 @@ import { readable, type Readable } from "svelte/store"; import { useExploreState } from "web-common/src/features/dashboards/stores/dashboard-stores"; import { DashboardState_ActivePage } from "../../../proto/gen/rill/ui/v1/dashboard_pb"; - import { runtime } from "../../../runtime-client/runtime-store"; + import { useRuntimeClient } from "../../../runtime-client/v2"; import { activeDashboardTheme } from "../../themes/active-dashboard-theme"; import { createResolvedThemeStore } from "../../themes/selectors"; import MeasuresContainer from "../big-number/MeasuresContainer.svelte"; @@ -52,7 +52,8 @@ let metricsWidth = DEFAULT_TIMESERIES_WIDTH; let resizing = false; - $: ({ instanceId } = $runtime); + const client = useRuntimeClient(); + const { instanceId } = client; $: ({ whereFilter, dimensionThresholdFilters, selectedTimeDimension } = $dashboardStore); From e7bc93b804c1a74bc4b57c36a6ad3205c30ccc01 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 17:49:03 +0300 Subject: [PATCH 20/78] fix: update test infrastructure for v2 ConnectRPC hooks - Add ConnectRPC URL routing to `DashboardFetchMocks` (handles `/rill.runtime.v1.{Service}/{Method}` requests with proper body decoding and RFC 3339 timestamp normalization) - Inject `RuntimeClient` context in test renders that mount components calling `useRuntimeClient()` --- .../dashboards/dashboard-fetch-mocks.ts | 79 ++++++++++++++++++- .../filters/test/render-filter-component.ts | 10 ++- .../loaders/DashboardStateManager.spec.ts | 12 ++- .../loaders/explore-web-view-store.spec.ts | 12 ++- .../most-recent-explore-state.spec.ts | 12 ++- 5 files changed, 119 insertions(+), 6 deletions(-) diff --git a/web-common/src/features/dashboards/dashboard-fetch-mocks.ts b/web-common/src/features/dashboards/dashboard-fetch-mocks.ts index 95d4dc1bc53..e5e63c90c9b 100644 --- a/web-common/src/features/dashboards/dashboard-fetch-mocks.ts +++ b/web-common/src/features/dashboards/dashboard-fetch-mocks.ts @@ -123,8 +123,17 @@ export class DashboardFetchMocks { ); } - private async fetchMock(url: string, body: string | undefined) { + private async fetchMock(url: string, body: string | Uint8Array | undefined) { const u = new URL(url); + + // ConnectRPC routes: POST to /rill.runtime.v1.{Service}/{Method} + const connectMatch = u.pathname.match( + /^\/rill\.runtime\.v1\.(\w+)\/(\w+)$/, + ); + if (connectMatch) { + return this.handleConnectRequest(connectMatch[1], connectMatch[2], body); + } + const [, , , , type, ...parts] = u.pathname.split("/"); let key: string; @@ -162,8 +171,9 @@ export class DashboardFetchMocks { ok: true, json: () => { if (body && parts[2] === "aggregation") { + const bodyText = typeof body === "string" ? body : ""; for (const { regex, response } of this.aggregationRequestMocks) { - if (!regex.test(body)) continue; + if (!regex.test(bodyText)) continue; return response; } } @@ -172,4 +182,69 @@ export class DashboardFetchMocks { headers: new Map([["content-type", "application/json"]]), }; } + + private async handleConnectRequest( + service: string, + method: string, + body: string | Uint8Array | undefined, + ) { + await asyncWait(1); + + // ConnectRPC may send body as Uint8Array or other typed array + let bodyStr: string; + if (typeof body === "string") { + bodyStr = body; + } else if (body && typeof body === "object") { + bodyStr = new TextDecoder().decode(body as ArrayBufferView); + } else { + bodyStr = ""; + } + const parsed = bodyStr ? JSON.parse(bodyStr) : {}; + let responseData: unknown; + + if (service === "RuntimeService" && method === "GetExplore") { + responseData = this.responses.get(`resources__explore__${parsed.name}`); + } else if ( + service === "QueryService" && + method === "MetricsViewTimeRange" + ) { + const stored = this.responses.get( + `queries__metrics-views__time-range-summary__${parsed.metricsViewName}`, + ); + if (stored?.timeRangeSummary) { + // Convert short dates to RFC 3339 for proto Timestamp compatibility + const s = stored.timeRangeSummary; + responseData = { + timeRangeSummary: { + ...s, + min: s.min && !s.min.includes("T") ? s.min + "T00:00:00Z" : s.min, + max: s.max && !s.max.includes("T") ? s.max + "T00:00:00Z" : s.max, + }, + }; + } else { + responseData = stored; + } + } else if ( + service === "QueryService" && + method === "MetricsViewAggregation" + ) { + for (const { regex, response } of this.aggregationRequestMocks) { + if (regex.test(bodyStr)) { + responseData = response; + break; + } + } + } + + // ConnectRPC expects status, ok, headers (Headers), json(), arrayBuffer() + const jsonBody = responseData ?? {}; + return { + status: 200, + ok: true, + headers: new Headers({ "content-type": "application/json" }), + json: async () => jsonBody, + arrayBuffer: async () => + new TextEncoder().encode(JSON.stringify(jsonBody)).buffer, + }; + } } diff --git a/web-common/src/features/dashboards/filters/test/render-filter-component.ts b/web-common/src/features/dashboards/filters/test/render-filter-component.ts index 04eb383c890..afec7c2c3fc 100644 --- a/web-common/src/features/dashboards/filters/test/render-filter-component.ts +++ b/web-common/src/features/dashboards/filters/test/render-filter-component.ts @@ -2,6 +2,10 @@ import Filters from "@rilldata/web-common/features/dashboards/filters/Filters.sv import { DEFAULT_STORE_KEY } from "@rilldata/web-common/features/dashboards/state-managers/state-managers"; import { AD_BIDS_METRICS_NAME } from "@rilldata/web-common/features/dashboards/stores/test-data/data"; import { initStateManagers } from "@rilldata/web-common/features/dashboards/stores/test-data/helpers"; +import { + RUNTIME_CONTEXT_KEY, + RuntimeClient, +} from "@rilldata/web-common/runtime-client/v2"; import { render } from "@testing-library/svelte"; export function renderFilterComponent(hasTimeSeries = false) { @@ -13,9 +17,13 @@ export function renderFilterComponent(hasTimeSeries = false) { metricsViewName: AD_BIDS_METRICS_NAME, hasTimeSeries, }, - context: new Map([ + context: new Map([ [DEFAULT_STORE_KEY as unknown as string, stateManagers as unknown], ["$$_queryClient", queryClient as unknown], + [ + RUNTIME_CONTEXT_KEY, + new RuntimeClient({ host: "http://localhost", instanceId: "test" }), + ], ]), }); diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.spec.ts b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.spec.ts index 88daa28dc92..244f7df0be9 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.spec.ts +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.spec.ts @@ -40,6 +40,10 @@ import { V1ExploreComparisonMode, V1TimeGrain, } from "@rilldata/web-common/runtime-client"; +import { + RUNTIME_CONTEXT_KEY, + RuntimeClient, +} from "@rilldata/web-common/runtime-client/v2"; import { render, screen, waitFor } from "@testing-library/svelte"; import { readable } from "svelte/store"; import { beforeEach, describe, expect, it, vi } from "vitest"; @@ -485,7 +489,13 @@ function renderDashboardStateManager( }, // TODO: we need to make sure every single query uses an explicit queryClient instead of the global one // only then we can use a fresh client here. - context: new Map([["$$_queryClient", queryClient]]), + context: new Map([ + ["$$_queryClient", queryClient], + [ + RUNTIME_CONTEXT_KEY, + new RuntimeClient({ host: "http://localhost", instanceId: "test" }), + ], + ]), }); return { queryClient, renderResults }; diff --git a/web-common/src/features/dashboards/state-managers/loaders/explore-web-view-store.spec.ts b/web-common/src/features/dashboards/state-managers/loaders/explore-web-view-store.spec.ts index 39a125ac3a3..48b1a7f678f 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/explore-web-view-store.spec.ts +++ b/web-common/src/features/dashboards/state-managers/loaders/explore-web-view-store.spec.ts @@ -30,6 +30,10 @@ import { import DashboardStateManagerTest from "@rilldata/web-common/features/dashboards/state-managers/loaders/test/DashboardStateManagerTest.svelte"; import { getCleanMetricsExploreForAssertion } from "@rilldata/web-common/features/dashboards/url-state/url-state-variations.spec"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; +import { + RUNTIME_CONTEXT_KEY, + RuntimeClient, +} from "@rilldata/web-common/runtime-client/v2"; import { render, screen, waitFor } from "@testing-library/svelte"; import { beforeEach, describe, expect, it, vi } from "vitest"; @@ -252,7 +256,13 @@ function renderDashboardStateManager() { }, // TODO: we need to make sure every single query uses an explicit queryClient instead of the global one // only then we can use a fresh client here. - context: new Map([["$$_queryClient", queryClient]]), + context: new Map([ + ["$$_queryClient", queryClient], + [ + RUNTIME_CONTEXT_KEY, + new RuntimeClient({ host: "http://localhost", instanceId: "test" }), + ], + ]), }); return { queryClient, renderResults }; diff --git a/web-common/src/features/dashboards/state-managers/most-recent-explore-state.spec.ts b/web-common/src/features/dashboards/state-managers/most-recent-explore-state.spec.ts index e4397b5f93d..bb7a6432511 100644 --- a/web-common/src/features/dashboards/state-managers/most-recent-explore-state.spec.ts +++ b/web-common/src/features/dashboards/state-managers/most-recent-explore-state.spec.ts @@ -31,6 +31,10 @@ import { DashboardState_LeaderboardSortDirection, DashboardState_LeaderboardSortType, } from "@rilldata/web-common/proto/gen/rill/ui/v1/dashboard_pb"; +import { + RUNTIME_CONTEXT_KEY, + RuntimeClient, +} from "@rilldata/web-common/runtime-client/v2"; import { render, screen, waitFor } from "@testing-library/svelte"; import { beforeEach, describe, expect, it, vi } from "vitest"; @@ -179,7 +183,13 @@ function renderDashboardStateManager() { }, // TODO: we need to make sure every single query uses an explicit queryClient instead of the global one // only then we can use a fresh client here. - context: new Map([["$$_queryClient", queryClient]]), + context: new Map([ + ["$$_queryClient", queryClient], + [ + RUNTIME_CONTEXT_KEY, + new RuntimeClient({ host: "http://localhost", instanceId: "test" }), + ], + ]), }); return { queryClient, renderResults }; From 2267e4d03585e4fbb77459486206b0c919064fce Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 18:03:04 +0300 Subject: [PATCH 21/78] refactor: migrate export and pivot-query modules from runtime store to v2 RuntimeClient Replace `get(runtime).instanceId` with explicit `instanceId` parameters in tdd-export, pivot-export, and dimension-table-export. Switch pivot-queries from Orval hook to v2 `createQueryServiceMetricsViewAggregation`, threading `runtimeClient` through `PivotDashboardContext`. --- .../aggregation-request-builder.spec.ts | 3 + .../dimension-table/dimension-table-export.ts | 6 +- .../dashboards/pivot/pivot-data-store.ts | 1 + .../features/dashboards/pivot/pivot-export.ts | 6 +- .../dashboards/pivot/pivot-queries.ts | 67 +++++++++---------- .../src/features/dashboards/pivot/types.ts | 2 + .../time-dimension-details/tdd-export.ts | 6 +- 7 files changed, 50 insertions(+), 41 deletions(-) diff --git a/web-common/src/features/dashboards/aggregation-request-builder.spec.ts b/web-common/src/features/dashboards/aggregation-request-builder.spec.ts index bd634aa8ef1..f1e0fe35295 100644 --- a/web-common/src/features/dashboards/aggregation-request-builder.spec.ts +++ b/web-common/src/features/dashboards/aggregation-request-builder.spec.ts @@ -211,6 +211,7 @@ describe("Report rows and columns", () => { it(testCase.title, async () => { await runTest(testCase, (exploreState, timeControlState) => getDimensionTableAggregationRequestForTime({ + instanceId: "", metricsViewName: AD_BIDS_METRICS_NAME, exploreState, timeRange: { @@ -369,6 +370,7 @@ describe("Report rows and columns", () => { testCase, (exploreState, timeControlState) => getTDDAggregationRequest({ + instanceId: "", metricsViewName: AD_BIDS_METRICS_NAME, exploreState, timeControlState, @@ -504,6 +506,7 @@ describe("Report rows and columns", () => { testCase, (exploreState, timeControlState) => getPivotAggregationRequest({ + instanceId: "", metricsViewName: AD_BIDS_METRICS_NAME, timeDimension: AD_BIDS_METRICS_3_MEASURES_DIMENSIONS_WITH_TIME.timeDimension!, diff --git a/web-common/src/features/dashboards/dimension-table/dimension-table-export.ts b/web-common/src/features/dashboards/dimension-table/dimension-table-export.ts index 5a08a66f914..2f0bed2b820 100644 --- a/web-common/src/features/dashboards/dimension-table/dimension-table-export.ts +++ b/web-common/src/features/dashboards/dimension-table/dimension-table-export.ts @@ -18,7 +18,6 @@ import type { V1Query, V1TimeRange, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { get } from "svelte/store"; import { buildWhereParamForDimensionTableAndTDDExports } from "../../exports/export-filters"; import { dimensionSearchText as dimensionSearchTextStore } from "../stores/dashboard-stores"; @@ -69,6 +68,7 @@ export function getDimensionTableExportQuery( const query: V1Query = { metricsViewAggregationRequest: getDimensionTableAggregationRequestForTime({ + instanceId: ctx.runtimeClient.instanceId, metricsViewName, exploreState, timeRange, @@ -81,12 +81,14 @@ export function getDimensionTableExportQuery( } export function getDimensionTableAggregationRequestForTime({ + instanceId, metricsViewName, exploreState, timeRange, comparisonTimeRange, dimensionSearchText, }: { + instanceId: string; metricsViewName: string; exploreState: ExploreState; timeRange: V1TimeRange; @@ -128,7 +130,7 @@ export function getDimensionTableAggregationRequestForTime({ ); return { - instanceId: get(runtime).instanceId, + instanceId, metricsView: metricsViewName, dimensions: [ { diff --git a/web-common/src/features/dashboards/pivot/pivot-data-store.ts b/web-common/src/features/dashboards/pivot/pivot-data-store.ts index 142f293fbac..e2a68c27113 100644 --- a/web-common/src/features/dashboards/pivot/pivot-data-store.ts +++ b/web-common/src/features/dashboards/pivot/pivot-data-store.ts @@ -724,6 +724,7 @@ export const usePivotForExplore = memoizeMetricsStore( (ctx: StateManagers) => { const pivotConfig = getPivotConfig(ctx); const pivotDashboardContext: PivotDashboardContext = { + runtimeClient: ctx.runtimeClient, metricsViewName: ctx.metricsViewName, queryClient: ctx.queryClient, enabled: !!ctx.dashboardStore, diff --git a/web-common/src/features/dashboards/pivot/pivot-export.ts b/web-common/src/features/dashboards/pivot/pivot-export.ts index b34e9aba28c..fb10e427b0a 100644 --- a/web-common/src/features/dashboards/pivot/pivot-export.ts +++ b/web-common/src/features/dashboards/pivot/pivot-export.ts @@ -12,7 +12,6 @@ import { type V1TimeRange, } from "@rilldata/web-common/runtime-client"; import { get } from "svelte/store"; -import { runtime } from "../../../runtime-client/runtime-store"; import type { StateManagers } from "../state-managers/state-managers"; import { getPivotConfig } from "./pivot-data-config"; import { prepareMeasureForComparison } from "./pivot-utils"; @@ -62,6 +61,7 @@ export function getPivotExportQuery(ctx: StateManagers, isScheduled: boolean) { const query: V1Query = { metricsViewAggregationRequest: getPivotAggregationRequest({ + instanceId: ctx.runtimeClient.instanceId, metricsViewName, timeDimension: exploreState.selectedTimeDimension || @@ -82,6 +82,7 @@ export function getPivotExportQuery(ctx: StateManagers, isScheduled: boolean) { } export function getPivotAggregationRequest({ + instanceId, metricsViewName, timeDimension, exploreState, @@ -93,6 +94,7 @@ export function getPivotAggregationRequest({ isFlat, pivotState, }: { + instanceId: string; metricsViewName: string; timeDimension: string; exploreState: ExploreState; @@ -179,7 +181,7 @@ export function getPivotAggregationRequest({ } return { - instanceId: get(runtime).instanceId, + instanceId, metricsView: metricsViewName, timeRange, comparisonTimeRange: comparisonTime, diff --git a/web-common/src/features/dashboards/pivot/pivot-queries.ts b/web-common/src/features/dashboards/pivot/pivot-queries.ts index 8d53d410431..6bc0105970c 100644 --- a/web-common/src/features/dashboards/pivot/pivot-queries.ts +++ b/web-common/src/features/dashboards/pivot/pivot-queries.ts @@ -11,10 +11,9 @@ import { type V1MetricsViewAggregationResponse, type V1MetricsViewAggregationResponseDataItem, type V1MetricsViewAggregationSort, - createQueryServiceMetricsViewAggregation, } from "@rilldata/web-common/runtime-client"; import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import { type CreateQueryResult, keepPreviousData, @@ -72,41 +71,39 @@ export function createPivotAggregationRowQuery( hasComparison = true; } - return derived( - [runtime, ctx.metricsViewName], - ([$runtime, metricsViewName], set) => - createQueryServiceMetricsViewAggregation( - $runtime.instanceId, - metricsViewName, - { - measures: prepareMeasureForComparison(measures), - dimensions, - where: sanitiseExpression(whereFilter, undefined), - timeRange: { - start: timeRange?.start ? timeRange.start : config.time.timeStart, - end: timeRange?.end ? timeRange.end : config.time.timeEnd, - timeDimension: config.time.timeDimension, - }, - comparisonTimeRange: - hasComparison && comparisonTime - ? { - start: comparisonTime.start, - end: comparisonTime.end, - timeDimension: config.time.timeDimension, - } - : undefined, - sort, - limit, - offset, + return derived([ctx.metricsViewName], ([metricsViewName], set) => + createQueryServiceMetricsViewAggregation( + ctx.runtimeClient, + { + metricsView: metricsViewName, + measures: prepareMeasureForComparison(measures), + dimensions, + where: sanitiseExpression(whereFilter, undefined), + timeRange: { + start: timeRange?.start ? timeRange.start : config.time.timeStart, + end: timeRange?.end ? timeRange.end : config.time.timeEnd, + timeDimension: config.time.timeDimension, }, - { - query: { - enabled: ctx.enabled, - placeholderData: keepPreviousData, - }, + comparisonTimeRange: + hasComparison && comparisonTime + ? { + start: comparisonTime.start, + end: comparisonTime.end, + timeDimension: config.time.timeDimension, + } + : undefined, + sort, + limit, + offset, + }, + { + query: { + enabled: ctx.enabled, + placeholderData: keepPreviousData, }, - ctx.queryClient, - ).subscribe(set), + }, + ctx.queryClient, + ).subscribe(set), ); } diff --git a/web-common/src/features/dashboards/pivot/types.ts b/web-common/src/features/dashboards/pivot/types.ts index 2e619a2ef69..1766f624c09 100644 --- a/web-common/src/features/dashboards/pivot/types.ts +++ b/web-common/src/features/dashboards/pivot/types.ts @@ -6,6 +6,7 @@ import type { V1MetricsViewAggregationResponseDataItem, V1TimeGrain, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryClient } from "@tanstack/svelte-query"; import type { ColumnDef, @@ -40,6 +41,7 @@ export interface PivotCell { } export interface PivotDashboardContext { + runtimeClient: RuntimeClient; metricsViewName: Readable; queryClient: QueryClient; enabled: boolean; diff --git a/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts b/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts index 3152cfb04f8..0a3404497ba 100644 --- a/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts +++ b/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts @@ -14,7 +14,6 @@ import type { V1Query, V1TimeRange, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { get } from "svelte/store"; import { buildWhereParamForDimensionTableAndTDDExports } from "../../exports/export-filters"; import { dimensionSearchText as dimensionSearchTextStore } from "../stores/dashboard-stores"; @@ -31,6 +30,7 @@ export function getTDDExportQuery( const query: V1Query = { metricsViewAggregationRequest: getTDDAggregationRequest({ + instanceId: ctx.runtimeClient.instanceId, metricsViewName, exploreState, timeControlState, @@ -45,6 +45,7 @@ export function getTDDExportQuery( } export function getTDDAggregationRequest({ + instanceId, metricsViewName, exploreState, timeControlState, @@ -53,6 +54,7 @@ export function getTDDAggregationRequest({ dimensionSearchText, isScheduled, }: { + instanceId: string; metricsViewName: string; exploreState: ExploreState; timeControlState: TimeControlState; @@ -94,7 +96,7 @@ export function getTDDAggregationRequest({ exploreState.selectedTimeDimension || metricsViewSpec.timeDimension || ""; return { - instanceId: get(runtime).instanceId, + instanceId, metricsView: metricsViewName, dimensions: [ { name: dimensionName }, From d4e0b175f3154b189487e6a3872d54b5267b7f04 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Tue, 24 Feb 2026 18:28:08 +0300 Subject: [PATCH 22/78] refactor: migrate time controls and time ranges from runtime store to explicit instanceId Add `instanceId` parameter to `deriveInterval()` and `resolveTimeRanges()` instead of reading from the global `runtime` store. Thread `instanceId` through callers: DashboardStateSync, Filters, FiltersForm, canvas TimeState, and explore-mappers utils. --- .../alerts/data-tab/AlertDialogDataTab.svelte | 2 +- .../src/features/canvas/stores/time-state.ts | 7 +++- .../dashboards/filters/Filters.svelte | 2 ++ .../loaders/DashboardStateSync.ts | 4 ++- .../time-controls/new-time-controls.ts | 32 ++++++++++++++----- .../time-controls/rill-time-ranges.ts | 4 +-- .../src/features/explore-mappers/utils.ts | 1 + .../BaseScheduledReportForm.svelte | 2 +- .../scheduled-reports/FiltersForm.svelte | 2 ++ 9 files changed, 41 insertions(+), 15 deletions(-) diff --git a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte index 8e7e72e1ff3..ff6794730e7 100644 --- a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte +++ b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte @@ -51,7 +51,7 @@
- + { - return deriveInterval(range, mvName, timeZone); + return deriveInterval( + range, + this.parent.instanceId, + mvName, + timeZone, + ); }); Promise.all(promises) diff --git a/web-common/src/features/dashboards/filters/Filters.svelte b/web-common/src/features/dashboards/filters/Filters.svelte index 3fb84ca90c9..45abbfcb8c6 100644 --- a/web-common/src/features/dashboards/filters/Filters.svelte +++ b/web-common/src/features/dashboards/filters/Filters.svelte @@ -235,6 +235,7 @@ const { interval, grain } = await deriveInterval( timeRangeName, + instanceId, metricsViewName, activeTimeZone, column, @@ -297,6 +298,7 @@ const { interval, grain } = await deriveInterval( alias, + instanceId, metricsViewName, tz, selectedTimeDimension, diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts index 9937c619c7e..6a1184b4d74 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts @@ -51,7 +51,7 @@ export class DashboardStateSync { } public constructor( - instanceId: string, + private readonly instanceId: string, metricsViewName: string, private readonly exploreName: string, private readonly extraPrefix: string | undefined, @@ -150,6 +150,7 @@ export class DashboardStateSync { initExploreState.selectedTimeRange, // initExploreState.selectedComparisonTimeRange, ] = await resolveTimeRanges( + this.instanceId, exploreSpec, [ initExploreState.selectedTimeRange, @@ -245,6 +246,7 @@ export class DashboardStateSync { partialExplore.selectedTimeRange, // partialExplore.selectedComparisonTimeRange, ] = await resolveTimeRanges( + this.instanceId, exploreSpec, [ partialExplore.selectedTimeRange, diff --git a/web-common/src/features/dashboards/time-controls/new-time-controls.ts b/web-common/src/features/dashboards/time-controls/new-time-controls.ts index c13883bdd1e..a07b420820c 100644 --- a/web-common/src/features/dashboards/time-controls/new-time-controls.ts +++ b/web-common/src/features/dashboards/time-controls/new-time-controls.ts @@ -165,9 +165,16 @@ class MetricsTimeControls { private _subrange = new IntervalStore(); private _comparisonRange = new IntervalStore(); private _showComparison: Writable = writable(false); + private _instanceId: string; private _metricsViewName: string; - constructor(maxStart: DateTime, maxEnd: DateTime, metricsViewName: string) { + constructor( + maxStart: DateTime, + maxEnd: DateTime, + instanceId: string, + metricsViewName: string, + ) { + this._instanceId = instanceId; this._metricsViewName = metricsViewName; const maxInterval = Interval.fromDateTimes( maxStart.setZone("UTC"), @@ -188,7 +195,7 @@ class MetricsTimeControls { if (rightAnchor) { const interval = await deriveInterval( iso, - + this._instanceId, this._metricsViewName, get(this._zone).name, ); @@ -204,7 +211,7 @@ class MetricsTimeControls { if (rightAnchor) { const interval = await deriveInterval( name, - + this._instanceId, this._metricsViewName, get(this._zone).name, ); @@ -284,11 +291,21 @@ class MetricsTimeControls { class TimeControls { private _timeControls = new Map(); - get(metricsViewName: string, maxStart?: DateTime, maxEnd?: DateTime) { + get( + metricsViewName: string, + instanceId?: string, + maxStart?: DateTime, + maxEnd?: DateTime, + ) { let store = this._timeControls.get(metricsViewName); - if (!store && maxStart && maxEnd) { - store = new MetricsTimeControls(maxStart, maxEnd, metricsViewName); + if (!store && maxStart && maxEnd && instanceId) { + store = new MetricsTimeControls( + maxStart, + maxEnd, + instanceId, + metricsViewName, + ); this._timeControls.set(metricsViewName, store); } else if (!store) { throw new Error("TimeControls.get() called without maxStart and maxEnd"); @@ -312,7 +329,6 @@ export function isRillPeriodToDate(value: string): value is RillPeriodToDate { return RILL_PERIOD_TO_DATE.includes(value as RillPeriodToDate); } -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { getAllowedGrains, GrainAliasToV1TimeGrain, @@ -331,6 +347,7 @@ import { getDefaultRangeBuckets } from "@rilldata/web-common/lib/time/defaults"; export async function deriveInterval( name: RillPeriodToDate | RillPreviousPeriod | ISODurationString | string, + instanceId: string, metricsViewName: string, activeTimeZone: string, timeDimension?: string, @@ -352,7 +369,6 @@ export async function deriveInterval( const parsed = parseRillTime(name); // We have a RillTime string - const instanceId = get(runtime).instanceId; const cacheBust = name.includes("now"); const response = await fetchTimeRanges({ diff --git a/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts b/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts index fe867c28821..a2446e11ec4 100644 --- a/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts +++ b/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts @@ -1,7 +1,5 @@ import { validateRillTime } from "@rilldata/web-common/features/dashboards/url-state/time-ranges/parser"; import type { DashboardTimeControls } from "@rilldata/web-common/lib/time/types"; -import { get } from "svelte/store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { getQueryServiceMetricsViewTimeRangesQueryKey, queryServiceMetricsViewTimeRanges, @@ -10,6 +8,7 @@ import { import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; export async function resolveTimeRanges( + instanceId: string, exploreSpec: V1ExploreSpec, timeRanges: (DashboardTimeControls | undefined)[], timeZone: string | undefined, @@ -40,7 +39,6 @@ export async function resolveTimeRanges( if (rillTimes.length === 0) return timeRangesToReturn; - const instanceId = get(runtime).instanceId; const metricsViewName = exploreSpec.metricsView!; try { diff --git a/web-common/src/features/explore-mappers/utils.ts b/web-common/src/features/explore-mappers/utils.ts index d40bd5f389c..69ce1e57001 100644 --- a/web-common/src/features/explore-mappers/utils.ts +++ b/web-common/src/features/explore-mappers/utils.ts @@ -102,6 +102,7 @@ export async function fillTimeRange( // Resolve time range overriding ref to `executionTime` and set to custom. // This keeps the time range consistent regardless of when the link is opened. [exploreState.selectedTimeRange] = await resolveTimeRanges( + get(runtime).instanceId, exploreSpec, [exploreState.selectedTimeRange], exploreState.selectedTimezone, diff --git a/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte b/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte index 76520ff58bf..ffa2612d7c1 100644 --- a/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte +++ b/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte @@ -126,7 +126,7 @@
- +
Date: Tue, 24 Feb 2026 19:19:11 +0300 Subject: [PATCH 23/78] refactor: migrate canvas, explores, and state-managers from runtime store to v2 RuntimeClient - Remove unused `runtime` property from dashboard and canvas StateManagers - Delete dead code: `getValidDashboardsQueryOptions` and `getMetricsViewSchemaOptions` - Migrate 10 canvas Svelte components to `useRuntimeClient()` - Migrate canvas markdown `util.ts` to accept explicit `instanceId` parameter - Migrate 2 explores Svelte components to `useRuntimeClient()` --- .../src/features/canvas/CanvasBuilder.svelte | 6 ++- .../canvas/CanvasDashboardEmbed.svelte | 6 ++- .../src/features/canvas/CanvasEditor.svelte | 6 ++- .../components/charts/CanvasChart.svelte | 6 ++- .../leaderboard/LeaderboardDisplay.svelte | 6 ++- .../components/markdown/Markdown.svelte | 8 +++- .../canvas/components/markdown/util.ts | 5 +-- .../canvas/filters/CanvasFilters.svelte | 6 ++- .../inspector/DefaultFilterDisplay.svelte | 6 ++- .../inspector/VisualCanvasEditing.svelte | 6 ++- .../filters/DimensionFiltersInput.svelte | 6 ++- .../inspector/filters/TimeFiltersInput.svelte | 6 ++- .../canvas/state-managers/state-managers.ts | 5 --- .../src/features/dashboards/selectors.ts | 45 ------------------- .../state-managers/state-managers.ts | 4 -- .../features/explores/ExploreMenuItems.svelte | 10 +++-- .../explores/ExplorePreviewCTAs.svelte | 5 ++- 17 files changed, 57 insertions(+), 85 deletions(-) diff --git a/web-common/src/features/canvas/CanvasBuilder.svelte b/web-common/src/features/canvas/CanvasBuilder.svelte index a121bf6a4b1..c3f57950eb3 100644 --- a/web-common/src/features/canvas/CanvasBuilder.svelte +++ b/web-common/src/features/canvas/CanvasBuilder.svelte @@ -6,7 +6,7 @@ type V1CanvasRow, type V1Resource, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { onDestroy } from "svelte"; import { get, writable } from "svelte/store"; import { parseDocument } from "yaml"; @@ -40,6 +40,8 @@ export let canvasName: string; export let openSidebar: () => void; + const runtimeClient = useRuntimeClient(); + let initialMousePosition: { x: number; y: number } | null = null; let clientWidth: number; let offset = { x: 0, y: 0 }; @@ -66,7 +68,7 @@ $: layoutRows = $_rows; - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); $: components = $componentsStore; diff --git a/web-common/src/features/canvas/CanvasDashboardEmbed.svelte b/web-common/src/features/canvas/CanvasDashboardEmbed.svelte index db4fcf52060..386e63c04a2 100644 --- a/web-common/src/features/canvas/CanvasDashboardEmbed.svelte +++ b/web-common/src/features/canvas/CanvasDashboardEmbed.svelte @@ -2,7 +2,7 @@ import CanvasDashboardWrapper from "./CanvasDashboardWrapper.svelte"; import { getCanvasStore } from "./state-managers/state-managers"; import StaticCanvasRow from "./StaticCanvasRow.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import Spinner from "../entity-management/Spinner.svelte"; import { EntityStatus } from "../entity-management/types"; import { derived } from "svelte/store"; @@ -14,7 +14,9 @@ export let canvasName: string; export let navigationEnabled: boolean = true; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); + + $: ({ instanceId } = runtimeClient); $: ({ canvasEntity: { diff --git a/web-common/src/features/canvas/CanvasEditor.svelte b/web-common/src/features/canvas/CanvasEditor.svelte index 5f1f7855aee..3eaa5dc2665 100644 --- a/web-common/src/features/canvas/CanvasEditor.svelte +++ b/web-common/src/features/canvas/CanvasEditor.svelte @@ -7,18 +7,20 @@ import { mapParseErrorToLine } from "@rilldata/web-common/features/metrics-views/errors"; import { removeCanvasStore } from "./state-managers/state-managers"; import type { V1ParseError } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let canvasName: string; export let fileArtifact: FileArtifact; export let autoSave: boolean; export let parseError: V1ParseError | undefined = undefined; + const runtimeClient = useRuntimeClient(); + $: ({ remoteContent } = fileArtifact); let editor: EditorView; - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); /** If the parse error changes, update the editor gutter. */ $: lineStatus = mapParseErrorToLine(parseError, $remoteContent ?? ""); diff --git a/web-common/src/features/canvas/components/charts/CanvasChart.svelte b/web-common/src/features/canvas/components/charts/CanvasChart.svelte index 549db57e3b1..4230d82a4bf 100644 --- a/web-common/src/features/canvas/components/charts/CanvasChart.svelte +++ b/web-common/src/features/canvas/components/charts/CanvasChart.svelte @@ -6,7 +6,7 @@ import Spinner from "@rilldata/web-common/features/entity-management/Spinner.svelte"; import { EntityStatus } from "@rilldata/web-common/features/entity-management/types"; import { themeControl } from "@rilldata/web-common/features/themes/theme-control"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived } from "svelte/store"; import type { CanvasChartSpec } from "."; import type { BaseChart } from "./BaseChart"; @@ -15,13 +15,15 @@ export let component: BaseChart; + const runtimeClient = useRuntimeClient(); + // Theme mode (light/dark) - separate from which theme is selected $: isThemeModeDark = derived( themeControl, ($themeControl) => $themeControl === "dark", ); - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); $: ({ specStore, diff --git a/web-common/src/features/canvas/components/leaderboard/LeaderboardDisplay.svelte b/web-common/src/features/canvas/components/leaderboard/LeaderboardDisplay.svelte index d95d2180d09..df27c0b7e65 100644 --- a/web-common/src/features/canvas/components/leaderboard/LeaderboardDisplay.svelte +++ b/web-common/src/features/canvas/components/leaderboard/LeaderboardDisplay.svelte @@ -13,7 +13,7 @@ import { selectedDimensionValues } from "@rilldata/web-common/features/dashboards/state-managers/selectors/dimension-filters"; import { createMeasureValueFormatter } from "@rilldata/web-common/lib/number-formatting/format-measure-value"; import type { MetricsViewSpecMeasure } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import ComponentHeader from "../../ComponentHeader.svelte"; import { getDimensionColumnWidth, @@ -23,13 +23,15 @@ export let component: LeaderboardComponent; + const runtimeClient = useRuntimeClient(); + let metricsViewName: string; let leaderboardMeasureNames: string[] = []; let dimensionNames: string[] = []; let numRows = 7; let leaderboardWrapperWidth = 0; - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); $: ({ specStore, diff --git a/web-common/src/features/canvas/components/markdown/Markdown.svelte b/web-common/src/features/canvas/components/markdown/Markdown.svelte index 3745a8e41d2..595e1e43e35 100644 --- a/web-common/src/features/canvas/components/markdown/Markdown.svelte +++ b/web-common/src/features/canvas/components/markdown/Markdown.svelte @@ -3,6 +3,7 @@ import { marked } from "marked"; import { createQuery } from "@tanstack/svelte-query"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { MarkdownCanvasComponent } from "./"; import { getPositionClasses, @@ -13,6 +14,8 @@ export let component: MarkdownCanvasComponent; + const runtimeClient = useRuntimeClient(); + $: specStore = component?.specStore; $: spec = specStore ? $specStore : undefined; $: content = spec?.content ?? ""; @@ -25,7 +28,10 @@ ? ($parentSpecStore?.data?.metricsViews ?? {}) : {}; - const queryOptionsStore = getResolveTemplatedStringQueryOptions(component); + const queryOptionsStore = getResolveTemplatedStringQueryOptions( + component, + runtimeClient.instanceId, + ); $: resolveQuery = createQuery(queryOptionsStore, queryClient); // Store the last successfully resolved content to prevent flashing during refetches diff --git a/web-common/src/features/canvas/components/markdown/util.ts b/web-common/src/features/canvas/components/markdown/util.ts index b3d234d6747..4c9c130a21d 100644 --- a/web-common/src/features/canvas/components/markdown/util.ts +++ b/web-common/src/features/canvas/components/markdown/util.ts @@ -10,7 +10,6 @@ import type { QueryServiceResolveTemplatedStringBody, } from "@rilldata/web-common/runtime-client"; import { getQueryServiceResolveTemplatedStringQueryOptions } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { derived } from "svelte/store"; import type { ParsedFilters } from "../../stores/filter-state"; import type { Readable } from "svelte/motion"; @@ -128,6 +127,7 @@ function buildRequestBody(params: { export function getResolveTemplatedStringQueryOptions( component: MarkdownCanvasComponent, + instanceId: string, ): Readable< ReturnType > { @@ -139,7 +139,6 @@ export function getResolveTemplatedStringQueryOptions( component.specStore, component.timeAndFilterStore, component.parent?.specStore ?? null, - runtime, component.parent.timeManager.hasTimeSeriesStore, ...Array.from(metricsViewFilters.values()).map((f) => f.parsed), ], @@ -147,14 +146,12 @@ export function getResolveTemplatedStringQueryOptions( spec, timeAndFilters, parentSpec, - runtimeState, hasTimeSeries, ...parsedMetricsViewFilters ]) => { const content = spec?.content ?? ""; const applyFormatting = spec?.apply_formatting === true; const needsTemplating = hasTemplatingSyntax(content); - const instanceId = runtimeState?.instanceId ?? ""; const metricsViews = parentSpec?.data?.metricsViews ?? {}; diff --git a/web-common/src/features/canvas/filters/CanvasFilters.svelte b/web-common/src/features/canvas/filters/CanvasFilters.svelte index c1633b7bc96..1145513b714 100644 --- a/web-common/src/features/canvas/filters/CanvasFilters.svelte +++ b/web-common/src/features/canvas/filters/CanvasFilters.svelte @@ -8,7 +8,7 @@ import MeasureFilter from "@rilldata/web-common/features/dashboards/filters/measure-filters/MeasureFilter.svelte"; import { getPanRangeForTimeRange } from "@rilldata/web-common/features/dashboards/state-managers/selectors/charts"; import SuperPill from "@rilldata/web-common/features/dashboards/time-controls/super-pill/SuperPill.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import CanvasComparisonPill from "./CanvasComparisonPill.svelte"; import CanvasFilterButton from "../../dashboards/filters/CanvasFilterButton.svelte"; import { Tooltip } from "bits-ui"; @@ -19,12 +19,14 @@ export let builder = false; export let canvasName: string; + const runtimeClient = useRuntimeClient(); + /** the height of a row of chips */ const ROW_HEIGHT = "26px"; let showDefaultItem = false; - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); $: ({ canvasEntity: { filterManager: { diff --git a/web-common/src/features/canvas/inspector/DefaultFilterDisplay.svelte b/web-common/src/features/canvas/inspector/DefaultFilterDisplay.svelte index 2962d0001dd..edae0c35984 100644 --- a/web-common/src/features/canvas/inspector/DefaultFilterDisplay.svelte +++ b/web-common/src/features/canvas/inspector/DefaultFilterDisplay.svelte @@ -1,5 +1,5 @@ diff --git a/web-common/src/features/chat/core/context/InlineContext.svelte b/web-common/src/features/chat/core/context/InlineContext.svelte index cb5b61e45ca..73c8f68ea62 100644 --- a/web-common/src/features/chat/core/context/InlineContext.svelte +++ b/web-common/src/features/chat/core/context/InlineContext.svelte @@ -6,6 +6,7 @@ import { type InlineContext } from "@rilldata/web-common/features/chat/core/context/inline-context.ts"; import InlineContextPicker from "@rilldata/web-common/features/chat/core/context/picker/InlineContextPicker.svelte"; import { InlineContextConfig } from "@rilldata/web-common/features/chat/core/context/config.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; type InlineContextReadonlyProps = { mode: "readonly"; @@ -25,7 +26,8 @@ let open = false; let tooltipOpen = false; - const contextMetadataStore = getInlineChatContextMetadata(); + const runtimeClient = useRuntimeClient(); + const contextMetadataStore = getInlineChatContextMetadata(runtimeClient); $: typeConfig = selectedChatContext.type ? InlineContextConfig[selectedChatContext.type] diff --git a/web-common/src/features/chat/core/context/metadata.ts b/web-common/src/features/chat/core/context/metadata.ts index 65d5261bc6b..329a51cd234 100644 --- a/web-common/src/features/chat/core/context/metadata.ts +++ b/web-common/src/features/chat/core/context/metadata.ts @@ -1,7 +1,7 @@ import { createQuery } from "@tanstack/svelte-query"; import { getValidMetricsViewsQueryOptions } from "@rilldata/web-common/features/dashboards/selectors.ts"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; -import { derived, get, type Readable } from "svelte/store"; +import { derived, type Readable } from "svelte/store"; import { createQueryServiceResolveCanvas, type MetricsViewSpecDimension, @@ -14,7 +14,7 @@ import { getClientFilteredResourcesQueryOptions, ResourceKind, } from "@rilldata/web-common/features/entity-management/resource-selectors.ts"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; /** * Metadata used to map a value to a label. @@ -34,9 +34,11 @@ export type MetricsViewMetadata = { * Creates a store that contains a map of metrics view names to their metadata. * Each metrics view metadata has a reference to its spec, and a map of for measure and dimension spec by their names. */ -export function getInlineChatContextMetadata(): Readable { +export function getInlineChatContextMetadata( + client: RuntimeClient, +): Readable { const metricsViewsQuery = createQuery( - getValidMetricsViewsQueryOptions(), + getValidMetricsViewsQueryOptions(client), queryClient, ); @@ -47,7 +49,7 @@ export function getInlineChatContextMetadata(): Readable queryClient, ); - const instanceId = get(runtime).instanceId; + const instanceId = client.instanceId; return derived( [metricsViewsQuery, canvasResourcesQuery], diff --git a/web-common/src/features/chat/core/context/picker/ExpandableOption.svelte b/web-common/src/features/chat/core/context/picker/ExpandableOption.svelte index cb95a5d6a49..2c47b08ce1c 100644 --- a/web-common/src/features/chat/core/context/picker/ExpandableOption.svelte +++ b/web-common/src/features/chat/core/context/picker/ExpandableOption.svelte @@ -15,6 +15,7 @@ import DelayedSpinner from "@rilldata/web-common/features/entity-management/DelayedSpinner.svelte"; import SimpleOption from "@rilldata/web-common/features/chat/core/context/picker/SimpleOption.svelte"; import { getInlineChatContextMetadata } from "@rilldata/web-common/features/chat/core/context/metadata.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let node: PickerTreeNode; export let selectedChatContext: InlineContext | null; @@ -27,9 +28,11 @@ const item = node.item; const context = item.context; + const runtimeClient = useRuntimeClient(); + const typeConfig = InlineContextConfig[context.type]; const typeLabel = typeConfig.typeLabel; - const contextMetadataStore = getInlineChatContextMetadata(); + const contextMetadataStore = getInlineChatContextMetadata(runtimeClient); $: icon = typeConfig?.getIcon?.(context, $contextMetadataStore); const selectedItemId = selectedChatContext ? getIdForContext(selectedChatContext) diff --git a/web-common/src/features/chat/core/context/picker/InlineContextPicker.svelte b/web-common/src/features/chat/core/context/picker/InlineContextPicker.svelte index 248d8f44027..4319a37280e 100644 --- a/web-common/src/features/chat/core/context/picker/InlineContextPicker.svelte +++ b/web-common/src/features/chat/core/context/picker/InlineContextPicker.svelte @@ -21,6 +21,7 @@ import { KeyboardNavigationManager } from "@rilldata/web-common/features/chat/core/context/picker/keyboard-navigation.ts"; import ExpandableOption from "@rilldata/web-common/features/chat/core/context/picker/ExpandableOption.svelte"; import SimpleOption from "@rilldata/web-common/features/chat/core/context/picker/SimpleOption.svelte"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let selectedChatContext: InlineContext | null = null; export let searchText: string = ""; @@ -32,12 +33,18 @@ ? getIdForContext(selectedChatContext) : null; + const runtimeClient = useRuntimeClient(); + const searchTextStore = writable(""); $: searchTextStore.set(searchText.replace(/^@/, "")); const uiState = new ContextPickerUIState(); const expandedParentsStore = uiState.expandedParentsStore; - const filteredOptions = getFilteredPickerItems(uiState, searchTextStore); + const filteredOptions = getFilteredPickerItems( + runtimeClient, + uiState, + searchTextStore, + ); $: pickerTree = buildPickerTree($filteredOptions); const keyboardNavigationManager = new KeyboardNavigationManager(uiState); diff --git a/web-common/src/features/chat/core/context/picker/SimpleOption.svelte b/web-common/src/features/chat/core/context/picker/SimpleOption.svelte index a4bc78d4c4b..c025dd479a7 100644 --- a/web-common/src/features/chat/core/context/picker/SimpleOption.svelte +++ b/web-common/src/features/chat/core/context/picker/SimpleOption.svelte @@ -8,14 +8,17 @@ import { CheckIcon } from "lucide-svelte"; import type { PickerItem } from "@rilldata/web-common/features/chat/core/context/picker/picker-tree.ts"; import { getInlineChatContextMetadata } from "@rilldata/web-common/features/chat/core/context/metadata.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let item: PickerItem; export let selectedChatContext: InlineContext | null; export let keyboardNavigationManager: KeyboardNavigationManager; export let onSelect: (ctx: InlineContext) => void; + const runtimeClient = useRuntimeClient(); + const typeConfig = InlineContextConfig[item.context.type]; - const contextMetadataStore = getInlineChatContextMetadata(); + const contextMetadataStore = getInlineChatContextMetadata(runtimeClient); $: icon = typeConfig?.getIcon?.(item.context, $contextMetadataStore); const selectedItemId = selectedChatContext ? getIdForContext(selectedChatContext) diff --git a/web-common/src/features/chat/core/context/picker/data/index.ts b/web-common/src/features/chat/core/context/picker/data/index.ts index e4ef37500a2..c67f5a4c903 100644 --- a/web-common/src/features/chat/core/context/picker/data/index.ts +++ b/web-common/src/features/chat/core/context/picker/data/index.ts @@ -7,6 +7,7 @@ import type { PickerItem } from "@rilldata/web-common/features/chat/core/context import { getCanvasesPickerOptions } from "@rilldata/web-common/features/chat/core/context/picker/data/canvases.ts"; import { getInlineChatContextMetadata } from "@rilldata/web-common/features/chat/core/context/metadata.ts"; import { InlineContextConfig } from "@rilldata/web-common/features/chat/core/context/config.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; /** * Creates a store that contains a list of options for each valid metrics view, canvases and sources/models. @@ -17,14 +18,15 @@ import { InlineContextConfig } from "@rilldata/web-common/features/chat/core/con * The list contains parents immediately followed by their children. */ export function getPickerOptions( + client: RuntimeClient, uiState: ContextPickerUIState, ): Readable { const isRillDev = !get(featureFlags.adminServer); return derived( [ - getInlineChatContextMetadata(), - getMetricsViewPickerOptions(), + getInlineChatContextMetadata(client), + getMetricsViewPickerOptions(client), getCanvasesPickerOptions(uiState), isRillDev ? getModelsPickerOptions(uiState) : readable(null), uiState.expandedParentsStore, diff --git a/web-common/src/features/chat/core/context/picker/data/metrics-views.ts b/web-common/src/features/chat/core/context/picker/data/metrics-views.ts index d8d5f58d89a..4f46b44e7dd 100644 --- a/web-common/src/features/chat/core/context/picker/data/metrics-views.ts +++ b/web-common/src/features/chat/core/context/picker/data/metrics-views.ts @@ -1,6 +1,7 @@ import { getActiveMetricsViewNameStore } from "@rilldata/web-common/features/dashboards/nav-utils.ts"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { getValidMetricsViewsQueryOptions } from "@rilldata/web-common/features/dashboards/selectors.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, type Readable } from "svelte/store"; import { createQuery } from "@tanstack/svelte-query"; import { @@ -17,14 +18,16 @@ import { getLatestConversationQueryOptions } from "@rilldata/web-common/features * 1st level: metrics view context options * 2nd level: measures and dimensions options for each metrics view */ -export function getMetricsViewPickerOptions(): Readable { +export function getMetricsViewPickerOptions( + client: RuntimeClient, +): Readable { const metricsViewsQuery = createQuery( - getValidMetricsViewsQueryOptions(), + getValidMetricsViewsQueryOptions(client), queryClient, ); const lastUsedMetricsViewStore = getLastUsedMetricsViewNameStore(); - const activeMetricsViewStore = getActiveMetricsViewNameStore(); + const activeMetricsViewStore = getActiveMetricsViewNameStore(client); return derived( [metricsViewsQuery, lastUsedMetricsViewStore, activeMetricsViewStore], diff --git a/web-common/src/features/chat/core/context/picker/filters.ts b/web-common/src/features/chat/core/context/picker/filters.ts index 18e34c57af0..299811a2388 100644 --- a/web-common/src/features/chat/core/context/picker/filters.ts +++ b/web-common/src/features/chat/core/context/picker/filters.ts @@ -2,6 +2,7 @@ import { ContextPickerUIState } from "@rilldata/web-common/features/chat/core/co import { derived, type Readable } from "svelte/store"; import { getPickerOptions } from "@rilldata/web-common/features/chat/core/context/picker/data"; import type { PickerItem } from "@rilldata/web-common/features/chat/core/context/picker/picker-tree.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; /** * Creates a store that contains a list of options that match the search text. @@ -10,11 +11,16 @@ import type { PickerItem } from "@rilldata/web-common/features/chat/core/context * 3. If any child options are present, retains the parent option as well. */ export function getFilteredPickerItems( + client: RuntimeClient, uiState: ContextPickerUIState, searchTextStore: Readable, ) { return derived( - [getPickerOptions(uiState), searchTextStore, uiState.expandedParentsStore], + [ + getPickerOptions(client, uiState), + searchTextStore, + uiState.expandedParentsStore, + ], ([options, searchText, expandedParents]) => { const filterFunction = (label: string, value: string) => searchText.length === 0 || diff --git a/web-common/src/features/dashboards/chat-context.ts b/web-common/src/features/dashboards/chat-context.ts index d63d436ce7c..bba6ad8b1bb 100644 --- a/web-common/src/features/dashboards/chat-context.ts +++ b/web-common/src/features/dashboards/chat-context.ts @@ -10,31 +10,35 @@ import type { RuntimeServiceCompleteBody, V1AnalystAgentContext, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, type Readable } from "svelte/store"; -const activeExploreContextStore = getActiveExploreContext(); - -export const dashboardChatConfig = { - agent: ToolName.ANALYST_AGENT, - additionalContextStoreGetter: () => activeExploreContextStore, // TODO: add canvas context as well - emptyChatLabel: "Happy to help explore your data", - placeholder: - "Type a question, or press @ to insert a metric, dimension, or measure.", - minChatHeight: "min-h-[4rem]", -} satisfies ChatConfig; +export function createDashboardChatConfig(client: RuntimeClient): ChatConfig { + const activeExploreContextStore = getActiveExploreContext(client); + return { + agent: ToolName.ANALYST_AGENT, + additionalContextStoreGetter: () => activeExploreContextStore, + emptyChatLabel: "Happy to help explore your data", + placeholder: + "Type a question, or press @ to insert a metric, dimension, or measure.", + minChatHeight: "min-h-[4rem]", + }; +} /** * Creates a store that contains the active explore context sent to the Complete API. * It returns RuntimeServiceCompleteBody with V1AnalystAgentContext that is passed to the API. */ -function getActiveExploreContext(): Readable< - Partial -> { +function getActiveExploreContext( + client: RuntimeClient, +): Readable> { const exploreNameStore = getExploreNameStore(); const exploreState = useStableExploreState(exploreNameStore); - const timeControlsStore = - createStableTimeControlStoreFromName(exploreNameStore); + const timeControlsStore = createStableTimeControlStoreFromName( + client, + exploreNameStore, + ); return derived( [exploreNameStore, exploreState, timeControlsStore], diff --git a/web-common/src/features/dashboards/nav-utils.ts b/web-common/src/features/dashboards/nav-utils.ts index 1fa05aa7775..c19aea7ff8c 100644 --- a/web-common/src/features/dashboards/nav-utils.ts +++ b/web-common/src/features/dashboards/nav-utils.ts @@ -3,6 +3,7 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/re import type { Page } from "@sveltejs/kit"; import { derived } from "svelte/store"; import { getExploreValidSpecQueryOptions } from "@rilldata/web-common/features/explores/selectors.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery } from "@tanstack/svelte-query"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; @@ -53,10 +54,10 @@ export function getCanvasNameStore() { }); } -export function getActiveMetricsViewNameStore() { +export function getActiveMetricsViewNameStore(client: RuntimeClient) { const exploreNameStore = getExploreNameStore(); const validSpecQuery = createQuery( - getExploreValidSpecQueryOptions(exploreNameStore), + getExploreValidSpecQueryOptions(client, exploreNameStore), queryClient, ); diff --git a/web-common/src/features/dashboards/selectors.ts b/web-common/src/features/dashboards/selectors.ts index 3d4db58bf43..1e6238ae361 100644 --- a/web-common/src/features/dashboards/selectors.ts +++ b/web-common/src/features/dashboards/selectors.ts @@ -24,7 +24,7 @@ import { type V1MetricsViewTimeRangeResponse, type V1Resource, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, type CreateQueryOptions, @@ -52,23 +52,19 @@ export function useMetricsView( ); } -export function getValidMetricsViewsQueryOptions() { - return derived(runtime, ({ instanceId }) => { - return getRuntimeServiceListResourcesQueryOptions( - instanceId, - { - kind: ResourceKind.MetricsView, - }, - { - query: { - select: (data) => - data?.resources?.filter( - (res) => !!res.metricsView?.state?.validSpec, - ), - }, +export function getValidMetricsViewsQueryOptions(client: RuntimeClient) { + return getRuntimeServiceListResourcesQueryOptions( + client.instanceId, + { + kind: ResourceKind.MetricsView, + }, + { + query: { + select: (data) => + data?.resources?.filter((res) => !!res.metricsView?.state?.validSpec), }, - ); - }); + }, + ); } export function useValidExplores(instanceId: string) { @@ -152,32 +148,30 @@ export function useMetricsViewTimeRange( } export function getMetricsViewTimeRangeFromExploreQueryOptions( + client: RuntimeClient, exploreNameStore: Readable, ) { const validSpecQuery = createQuery( - getExploreValidSpecQueryOptions(exploreNameStore), + getExploreValidSpecQueryOptions(client, exploreNameStore), queryClient, ); - return derived( - [runtime, validSpecQuery], - ([{ instanceId }, validSpecResp]) => { - const metricsViewSpec = validSpecResp.data?.metricsViewSpec ?? {}; - const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; - const metricsViewName = exploreSpec.metricsView ?? ""; + return derived([validSpecQuery], ([validSpecResp]) => { + const metricsViewSpec = validSpecResp.data?.metricsViewSpec ?? {}; + const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; + const metricsViewName = exploreSpec.metricsView ?? ""; - return getQueryServiceMetricsViewTimeRangeQueryOptions( - instanceId, - metricsViewName, - {}, - { - query: { - enabled: !!metricsViewSpec.timeDimension, - }, + return getQueryServiceMetricsViewTimeRangeQueryOptions( + client.instanceId, + metricsViewName, + {}, + { + query: { + enabled: !!metricsViewSpec.timeDimension, }, - ); - }, - ); + }, + ); + }); } export function hasValidMetricsViewTimeRange( diff --git a/web-common/src/features/dashboards/stores/get-explore-state-from-yaml-config.ts b/web-common/src/features/dashboards/stores/get-explore-state-from-yaml-config.ts index a436ad9db1e..6a6c9add412 100644 --- a/web-common/src/features/dashboards/stores/get-explore-state-from-yaml-config.ts +++ b/web-common/src/features/dashboards/stores/get-explore-state-from-yaml-config.ts @@ -7,6 +7,7 @@ import { getValidComparisonOption } from "@rilldata/web-common/features/dashboar import { convertPartialExploreStateToUrlParams } from "@rilldata/web-common/features/dashboards/url-state/convert-partial-explore-state-to-url-params"; import { ToLegacySortTypeMap } from "@rilldata/web-common/features/dashboards/url-state/legacyMappers"; import { getExploreValidSpecQueryOptions } from "@rilldata/web-common/features/explores/selectors"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { arrayUnorderedEquals } from "@rilldata/web-common/lib/arrayUtils"; import { ISODurationToTimePreset } from "@rilldata/web-common/lib/time/ranges"; import { isoDurationToFullTimeRange } from "@rilldata/web-common/lib/time/ranges/iso-ranges"; @@ -47,13 +48,14 @@ export function getExploreStateFromYAMLConfig( } export function createUrlForExploreYAMLDefaultState( + client: RuntimeClient, exploreNameStore: Readable, ) { const validSpecQuery = createQuery( - getExploreValidSpecQueryOptions(exploreNameStore), + getExploreValidSpecQueryOptions(client, exploreNameStore), ); const timeRangeQuery = createQuery( - getMetricsViewTimeRangeFromExploreQueryOptions(exploreNameStore), + getMetricsViewTimeRangeFromExploreQueryOptions(client, exploreNameStore), ); return derived( diff --git a/web-common/src/features/dashboards/stores/utils.ts b/web-common/src/features/dashboards/stores/utils.ts deleted file mode 100644 index 2a946dd165e..00000000000 --- a/web-common/src/features/dashboards/stores/utils.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { getMetricsViewTimeRangeFromExploreQueryOptions } from "@rilldata/web-common/features/dashboards/selectors.ts"; -import { metricsExplorerStore } from "@rilldata/web-common/features/dashboards/stores/dashboard-stores.ts"; -import { createAndExpression } from "@rilldata/web-common/features/dashboards/stores/filter-utils.ts"; -import type { FiltersState } from "@rilldata/web-common/features/dashboards/stores/Filters.ts"; -import type { TimeControlState } from "@rilldata/web-common/features/dashboards/stores/TimeControls.ts"; -import { getTimeControlState } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store.ts"; -import { getExploreValidSpecQueryOptions } from "@rilldata/web-common/features/explores/selectors.ts"; -import { createQuery } from "@tanstack/svelte-query"; -import { derived, type Readable } from "svelte/store"; - -export function getFilterStateFromNameStore( - exploreNameStore: Readable, -): Readable { - return derived( - [metricsExplorerStore, exploreNameStore], - ([metricsExplorerState, exploreName]) => { - const exploreState = metricsExplorerState.entities[exploreName]; - const filtersState: FiltersState = { - whereFilter: exploreState?.whereFilter ?? createAndExpression([]), - dimensionThresholdFilters: - exploreState?.dimensionThresholdFilters ?? [], - dimensionsWithInlistFilter: - exploreState?.dimensionsWithInlistFilter ?? [], - dimensionFilterExcludeMode: - exploreState?.dimensionFilterExcludeMode ?? new Map(), - }; - - return filtersState; - }, - ); -} - -export function getTimeControlsStateFromNameStore( - exploreNameStore: Readable, -) { - const validSpecQuery = createQuery( - getExploreValidSpecQueryOptions(exploreNameStore), - ); - const metricsViewTimeRangeQuery = createQuery( - getMetricsViewTimeRangeFromExploreQueryOptions(exploreNameStore), - ); - - return derived( - [ - metricsExplorerStore, - exploreNameStore, - validSpecQuery, - metricsViewTimeRangeQuery, - ], - ([metricsExplorerState, exploreName, validSpecResp, timeRangeResp]) => { - const exploreState = metricsExplorerState.entities[exploreName]; - const metricsViewSpec = validSpecResp.data?.metricsViewSpec ?? {}; - const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; - const timeRangeSummary = timeRangeResp.data?.timeRangeSummary; - - const exploreTimeControlState = exploreState - ? getTimeControlState( - metricsViewSpec, - exploreSpec, - timeRangeSummary, - exploreState, - ) - : undefined; - const timeControlState = { - selectedTimeRange: exploreTimeControlState?.selectedTimeRange, - selectedComparisonTimeRange: - exploreTimeControlState?.selectedComparisonTimeRange, - showTimeComparison: exploreTimeControlState?.showTimeComparison, - selectedTimezone: exploreState?.selectedTimezone, - }; - - return timeControlState; - }, - ); -} diff --git a/web-common/src/features/dashboards/time-controls/time-control-store.ts b/web-common/src/features/dashboards/time-controls/time-control-store.ts index ef3070db980..79e57ebdd7c 100644 --- a/web-common/src/features/dashboards/time-controls/time-control-store.ts +++ b/web-common/src/features/dashboards/time-controls/time-control-store.ts @@ -14,6 +14,7 @@ import { getExploreValidSpecQueryOptions, useExploreValidSpec, } from "@rilldata/web-common/features/explores/selectors"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import { getComparionRangeForScrub, @@ -266,14 +267,15 @@ export function createTimeControlStoreFromName( } export function createStableTimeControlStoreFromName( + client: RuntimeClient, exploreNameStore: Readable, ) { const validSpecQuery = createQuery( - getExploreValidSpecQueryOptions(exploreNameStore), + getExploreValidSpecQueryOptions(client, exploreNameStore), queryClient, ); const metricsViewTimeRangeQuery = createQuery( - getMetricsViewTimeRangeFromExploreQueryOptions(exploreNameStore), + getMetricsViewTimeRangeFromExploreQueryOptions(client, exploreNameStore), queryClient, ); const exploreStore = useStableExploreState(exploreNameStore); diff --git a/web-common/src/features/dashboards/url-state/get-rill-default-explore-url-params.ts b/web-common/src/features/dashboards/url-state/get-rill-default-explore-url-params.ts index 5da95a9b39d..5e19521484b 100644 --- a/web-common/src/features/dashboards/url-state/get-rill-default-explore-url-params.ts +++ b/web-common/src/features/dashboards/url-state/get-rill-default-explore-url-params.ts @@ -10,6 +10,7 @@ import { getExploreValidSpecQueryOptions, useExploreValidSpec, } from "@rilldata/web-common/features/explores/selectors"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { type V1ExploreSpec, type V1MetricsViewSpec, @@ -80,13 +81,14 @@ export function createRillDefaultExploreUrlParams( * TODO: replace {@link createRillDefaultExploreUrlParams} with this */ export function createRillDefaultExploreUrlParamsV2( + client: RuntimeClient, exploreNameStore: Readable, ) { const validSpecQuery = createQuery( - getExploreValidSpecQueryOptions(exploreNameStore), + getExploreValidSpecQueryOptions(client, exploreNameStore), ); const timeRangeQuery = createQuery( - getMetricsViewTimeRangeFromExploreQueryOptions(exploreNameStore), + getMetricsViewTimeRangeFromExploreQueryOptions(client, exploreNameStore), ); return derived( diff --git a/web-common/src/features/explores/selectors.ts b/web-common/src/features/explores/selectors.ts index b1dc56c2e35..39cba132490 100644 --- a/web-common/src/features/explores/selectors.ts +++ b/web-common/src/features/explores/selectors.ts @@ -1,4 +1,4 @@ -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { type CreateQueryOptions, type QueryFunction, @@ -77,11 +77,12 @@ export function useExploreValidSpec( } export function getExploreValidSpecQueryOptions( + client: RuntimeClient, exploreNameStore: Readable, ) { - return derived([runtime, exploreNameStore], ([{ instanceId }, exploreName]) => + return derived([exploreNameStore], ([exploreName]) => getRuntimeServiceGetExploreQueryOptions( - instanceId, + client.instanceId, { name: exploreName, }, From fb10785fdbd8bf93a32655c78af401764d75525c Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Wed, 25 Feb 2026 10:58:49 +0300 Subject: [PATCH 25/78] refactor: migrate web-common features from `runtime` store to `RuntimeClient` Migrate ~100 files across chat, alerts, scheduled reports, file management, entity management, workspaces, sources, models, metrics-views, connectors, explore-mappers, exports, and other features from the global `runtime` store to `useRuntimeClient()` / `RuntimeClient` parameter threading. Key changes: - Add `host` property to `RuntimeClient` class - Convert `canvasChatConfig` to `createCanvasChatConfig(client)` factory - Thread `RuntimeClient` through `Conversation` and `ConversationManager` - Migrate `resource-selectors.ts` query option factories to accept `client` - Migrate chat picker data (models, canvases) to accept `client` - Migrate `connectors/code-utils.ts`, `file-artifact.ts`, `new-files.ts`, `submitAddDataForm.ts`, `explore-mappers/*.ts` to accept instanceId/client - Migrate `vega-embed-options.ts` to accept `RuntimeClient` - Migrate `RillIntakeClient` to accept `host` parameter - All `.svelte` callers updated to use `useRuntimeClient()` --- .../ConnectedPreviewTable.svelte | 6 ++-- .../components/vega/VegaLiteRenderer.svelte | 4 +++ .../src/components/vega/VegaRenderer.svelte | 4 +++ .../src/components/vega/vega-embed-options.ts | 22 ++++++------ .../src/features/alerts/AlertForm.svelte | 5 +-- .../src/features/alerts/alert-preview-data.ts | 9 ++--- .../alerts/criteria-tab/AlertPreview.svelte | 4 +++ .../alerts/criteria-tab/CriteriaForm.svelte | 8 ++--- .../alerts/data-tab/AlertDialogDataTab.svelte | 18 +++++++--- .../alerts/data-tab/DataPreview.svelte | 4 +++ .../AlertDialogDeliveryTab.svelte | 8 ++--- .../features/canvas/CreateCanvasDialog.svelte | 4 +++ .../src/features/canvas/chat-context.ts | 30 ++++++++-------- .../src/features/chat/DashboardChat.svelte | 4 +-- .../features/chat/core/context/metadata.ts | 2 +- .../chat/core/context/picker/data/canvases.ts | 15 ++++---- .../chat/core/context/picker/data/index.ts | 4 +-- .../core/context/picker/data/metrics-views.ts | 6 ++-- .../chat/core/context/picker/data/models.ts | 10 +++--- .../chat/core/conversation-manager.ts | 21 +++++++----- .../src/features/chat/core/conversation.ts | 14 ++++++-- .../chat/core/messages/Messages.svelte | 9 ++--- .../core/messages/chart/ChartBlock.svelte | 6 ++-- .../core/messages/text/citation-url-mapper.ts | 2 +- web-common/src/features/chat/core/utils.ts | 34 ++++++++----------- .../chat/layouts/fullpage/FullPageChat.svelte | 7 ++-- .../chat/layouts/inline/InlineChat.svelte | 7 ++-- .../chat/layouts/sidebar/SidebarChat.svelte | 7 ++-- .../chat/layouts/sidebar/SidebarHeader.svelte | 5 +-- .../features/connectors/code-utils.spec.ts | 14 ++++++++ .../src/features/connectors/code-utils.ts | 13 +++---- .../connectors/explorer/TableMenuItems.svelte | 4 +++ .../explorer/TableWorkspaceHeader.svelte | 1 + .../filters/ExploreFilterChipsReadOnly.svelte | 8 ++++- .../ViewAsButton.svelte | 4 +-- .../resetSelectedMockUserAfterNavigate.ts | 7 ++-- .../granular-access-policies/updateDevJWT.ts | 4 +-- .../editor/FileWorkspaceHeader.svelte | 6 ++-- .../entity-management/AddAssetButton.svelte | 25 +++++++++----- .../CreateExploreDialog.svelte | 4 +++ .../FileAndResourceWatcher.svelte | 7 +++- .../entity-management/RenameAssetModal.svelte | 6 ++-- .../file-and-resource-watcher.ts | 10 ++++-- .../entity-management/file-artifact.ts | 10 +++--- .../entity-management/file-artifacts.ts | 11 ++++-- .../entity-management/resource-selectors.ts | 24 ++++++++----- .../explore-mappers/generate-explore-link.ts | 2 ++ ...dashboard-from-aggregation-request.spec.ts | 1 + .../get-dashboard-from-aggregation-request.ts | 1 + .../get-dashboard-from-comparison-request.ts | 2 ++ .../explore-mappers/get-mapped-explore-url.ts | 2 +- .../explore-mappers/map-to-explore.ts | 8 ++--- .../src/features/explore-mappers/utils.ts | 10 +++--- .../explores/explore-link/ExploreLink.svelte | 4 +++ .../src/features/exports/ExportMenu.svelte | 9 ++--- .../file-explorer/FileExplorer.svelte | 6 ++-- .../file-explorer/NavDirectoryEntry.svelte | 6 ++-- .../src/features/file-explorer/NavFile.svelte | 6 ++-- .../src/features/file-explorer/new-files.ts | 9 ++--- .../metrics-views/GoToDashboardButton.svelte | 19 ++++++++--- .../metrics-views/MetricsInspector.svelte | 5 +-- .../metrics-views/MetricsViewMenuItems.svelte | 12 +++++-- .../ai-generation/generateMetricsView.ts | 16 +++++++-- .../create-and-preview-explore.ts | 3 ++ .../metrics-views/editor/Placeholder.svelte | 6 ++-- ...asures-and-dimensions-for-metrics-views.ts | 9 ++--- .../incremental/ModelRefreshButton.svelte | 5 +-- .../models/navigation/ModelMenuItems.svelte | 9 +++-- .../models/partitions/PartitionsTable.svelte | 6 ++-- .../models/partitions/TriggerPartition.svelte | 5 +-- .../workspace/CreateDashboardButton.svelte | 6 ++-- .../models/workspace/ModelEditor.svelte | 6 ++-- .../workspace/ModelWorkspaceCTAs.svelte | 7 ++-- .../onboarding/OnboardingWorkspace.svelte | 11 +++--- .../navigation/GraphContainer.svelte | 6 ++-- .../quick-view/QuickView.svelte | 6 ++-- .../sample-data/GenerateSampleData.svelte | 7 ++-- .../sample-data/generate-sample-data.ts | 8 +++-- .../BaseScheduledReportForm.svelte | 17 ++++++---- .../scheduled-reports/ScheduleForm.svelte | 6 ++-- .../ScheduledReportDialog.svelte | 6 ++-- .../features/sources/errors/ErrorPane.svelte | 6 ++-- .../features/sources/modal/AddDataForm.svelte | 8 +++-- .../sources/modal/AddDataFormManager.ts | 28 ++++++++++++--- .../sources/modal/AddDataModal.svelte | 6 ++-- .../features/sources/modal/FileDrop.svelte | 6 ++-- .../sources/modal/LocalSourceUpload.svelte | 6 ++-- .../sources/modal/SourceImportedModal.svelte | 8 +++-- .../sources/modal/submitAddDataForm.ts | 32 +++++++++++------ .../sources/navigation/SourceMenuItems.svelte | 10 ++++-- .../features/visual-editing/ThemeInput.svelte | 6 ++-- .../src/features/welcome/ProjectCards.svelte | 6 ++-- .../workspaces/CanvasWorkspace.svelte | 25 +++++++++----- .../workspaces/ExploreWorkspace.svelte | 18 ++++++---- .../workspaces/MetricsWorkspace.svelte | 23 ++++++++----- .../features/workspaces/ModelWorkspace.svelte | 23 +++++++++---- .../workspaces/VisualExploreEditing.svelte | 13 ++++--- .../features/workspaces/VisualMetrics.svelte | 34 ++++++++++++------- .../workspaces/WorkspaceBreadcrumbs.svelte | 14 +++++--- .../src/layout/ApplicationHeader.svelte | 5 +-- web-common/src/metrics/initMetrics.ts | 7 ++-- .../src/metrics/service/RillIntakeClient.ts | 8 ++--- .../src/runtime-client/v2/runtime-client.ts | 2 ++ .../routes/(viz)/explore/[name]/+page.svelte | 5 ++- web-local/src/routes/+layout.svelte | 2 +- 105 files changed, 648 insertions(+), 337 deletions(-) diff --git a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte index cff98a5f205..ed2ac1e0d94 100644 --- a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte +++ b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte @@ -5,7 +5,9 @@ createQueryServiceTableColumns, createQueryServiceTableRows, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "../../runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; + + const runtimeClient = useRuntimeClient(); import WorkspaceError from "../WorkspaceError.svelte"; import type { VirtualizedTableColumns } from "../virtualized-table/types"; import PreviewTable from "./PreviewTable.svelte"; @@ -19,7 +21,7 @@ let columns: VirtualizedTableColumns[] | undefined; let rows: V1TableRowsResponseDataItem[] | undefined; - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); $: columnsQuery = createQueryServiceTableColumns(instanceId, table, { connector, diff --git a/web-common/src/components/vega/VegaLiteRenderer.svelte b/web-common/src/components/vega/VegaLiteRenderer.svelte index 52e774a2e92..f15d68a9039 100644 --- a/web-common/src/components/vega/VegaLiteRenderer.svelte +++ b/web-common/src/components/vega/VegaLiteRenderer.svelte @@ -1,6 +1,7 @@
diff --git a/web-common/src/features/canvas/CreateCanvasDialog.svelte b/web-common/src/features/canvas/CreateCanvasDialog.svelte index f22e598864a..427e3477023 100644 --- a/web-common/src/features/canvas/CreateCanvasDialog.svelte +++ b/web-common/src/features/canvas/CreateCanvasDialog.svelte @@ -9,12 +9,15 @@ import Select from "@rilldata/web-common/components/forms/Select.svelte"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; + import { useRuntimeClient } from "../../runtime-client/v2"; import { createResourceFile } from "../file-explorer/new-files"; export let open = false; export let metricsViews: V1Resource[]; export let wrapNavigation: (path: string | undefined) => Promise; + const runtimeClient = useRuntimeClient(); + let selectedMetricsView: V1Resource | undefined = undefined; $: metricsViewOptions = metricsViews.map((resource) => ({ @@ -25,6 +28,7 @@ async function createResource() { if (selectedMetricsView) { const newFilePath = await createResourceFile( + runtimeClient, ResourceKind.Canvas, selectedMetricsView, ); diff --git a/web-common/src/features/canvas/chat-context.ts b/web-common/src/features/canvas/chat-context.ts index 7d5a363b172..9f93edf9723 100644 --- a/web-common/src/features/canvas/chat-context.ts +++ b/web-common/src/features/canvas/chat-context.ts @@ -7,27 +7,29 @@ import type { V1AnalystAgentContext, } from "@rilldata/web-common/runtime-client"; import { getCanvasNameStore } from "@rilldata/web-common/features/dashboards/nav-utils.ts"; -import { derived, get, type Readable } from "svelte/store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; +import { derived, type Readable } from "svelte/store"; import { getCanvasStoreUnguarded } from "@rilldata/web-common/features/canvas/state-managers/state-managers.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; -export const canvasChatConfig = { - agent: ToolName.ANALYST_AGENT, - additionalContextStoreGetter: () => getActiveCanvasContext(), - emptyChatLabel: "Happy to help explore your data", - placeholder: - "Type a question, or press @ to insert a metric, dimension, or measure.", - minChatHeight: "min-h-[4rem]", -} satisfies ChatConfig; +export function createCanvasChatConfig(client: RuntimeClient): ChatConfig { + return { + agent: ToolName.ANALYST_AGENT, + additionalContextStoreGetter: () => getActiveCanvasContext(client), + emptyChatLabel: "Happy to help explore your data", + placeholder: + "Type a question, or press @ to insert a metric, dimension, or measure.", + minChatHeight: "min-h-[4rem]", + }; +} /** * Creates a store that contains the active explore context sent to the Complete API. * It returns RuntimeServiceCompleteBody with V1AnalystAgentContext that is passed to the API. */ -function getActiveCanvasContext(): Readable< - Partial -> { - const instanceId = get(runtime).instanceId; +function getActiveCanvasContext( + client: RuntimeClient, +): Readable> { + const instanceId = client.instanceId; const canvasNameStore = getCanvasNameStore(); return derived([canvasNameStore], ([canvasName], set) => { diff --git a/web-common/src/features/chat/DashboardChat.svelte b/web-common/src/features/chat/DashboardChat.svelte index a18fe0e98d4..d2cb5a949af 100644 --- a/web-common/src/features/chat/DashboardChat.svelte +++ b/web-common/src/features/chat/DashboardChat.svelte @@ -4,7 +4,7 @@ import { chatOpen } from "./layouts/sidebar/sidebar-store"; import { createDashboardChatConfig } from "@rilldata/web-common/features/dashboards/chat-context.ts"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.ts"; - import { canvasChatConfig } from "@rilldata/web-common/features/canvas/chat-context.ts"; + import { createCanvasChatConfig } from "@rilldata/web-common/features/canvas/chat-context.ts"; import ThemeProvider from "@rilldata/web-common/features/dashboards/ThemeProvider.svelte"; import { activeDashboardTheme } from "@rilldata/web-common/features/themes/active-dashboard-theme"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; @@ -17,7 +17,7 @@ $: chatConfig = kind === ResourceKind.Explore ? createDashboardChatConfig(runtimeClient) - : canvasChatConfig; + : createCanvasChatConfig(runtimeClient); const { dashboardChat } = featureFlags; diff --git a/web-common/src/features/chat/core/context/metadata.ts b/web-common/src/features/chat/core/context/metadata.ts index 329a51cd234..5c9d46c54eb 100644 --- a/web-common/src/features/chat/core/context/metadata.ts +++ b/web-common/src/features/chat/core/context/metadata.ts @@ -43,7 +43,7 @@ export function getInlineChatContextMetadata( ); const canvasResourcesQuery = createQuery( - getClientFilteredResourcesQueryOptions(ResourceKind.Canvas, (res) => + getClientFilteredResourcesQueryOptions(client, ResourceKind.Canvas, (res) => Boolean(res.canvas?.state?.validSpec), ), queryClient, diff --git a/web-common/src/features/chat/core/context/picker/data/canvases.ts b/web-common/src/features/chat/core/context/picker/data/canvases.ts index dad80361200..b66f5555de3 100644 --- a/web-common/src/features/chat/core/context/picker/data/canvases.ts +++ b/web-common/src/features/chat/core/context/picker/data/canvases.ts @@ -1,5 +1,5 @@ import type { PickerItem } from "@rilldata/web-common/features/chat/core/context/picker/picker-tree.ts"; -import { derived, get, type Readable } from "svelte/store"; +import { derived, type Readable } from "svelte/store"; import { getClientFilteredResourcesQueryOptions, ResourceKind, @@ -7,7 +7,6 @@ import { import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { getCanvasNameStore } from "@rilldata/web-common/features/dashboards/nav-utils.ts"; import { createQuery } from "@tanstack/svelte-query"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; import { getQueryServiceResolveCanvasQueryOptions } from "@rilldata/web-common/runtime-client"; import { getIdForContext, @@ -17,19 +16,21 @@ import { import { ContextPickerUIState } from "@rilldata/web-common/features/chat/core/context/picker/ui-state.ts"; import { getLatestConversationQueryOptions } from "@rilldata/web-common/features/chat/core/utils.ts"; import { MessageType } from "@rilldata/web-common/features/chat/core/types.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export function getCanvasesPickerOptions( + client: RuntimeClient, uiState: ContextPickerUIState, ): Readable { const canvasResourcesQuery = createQuery( - getClientFilteredResourcesQueryOptions(ResourceKind.Canvas, (res) => + getClientFilteredResourcesQueryOptions(client, ResourceKind.Canvas, (res) => Boolean(res.canvas?.state?.validSpec), ), queryClient, ); - const lastUsedCanvasNameStore = getLastUsedCanvasNameStore(); + const lastUsedCanvasNameStore = getLastUsedCanvasNameStore(client); const activeCanvasNameStore = getCanvasNameStore(); - const instanceId = get(runtime).instanceId; + const instanceId = client.instanceId; return derived( [canvasResourcesQuery, lastUsedCanvasNameStore, activeCanvasNameStore], @@ -133,9 +134,9 @@ function getCanvasComponentsQueryOptions( /** * Looks at the last conversation and returns the canvas used in the last message or tool call. */ -function getLastUsedCanvasNameStore() { +function getLastUsedCanvasNameStore(client: RuntimeClient) { const lastConversationQuery = createQuery( - getLatestConversationQueryOptions(), + getLatestConversationQueryOptions(client), queryClient, ); diff --git a/web-common/src/features/chat/core/context/picker/data/index.ts b/web-common/src/features/chat/core/context/picker/data/index.ts index c67f5a4c903..e6b895d86f3 100644 --- a/web-common/src/features/chat/core/context/picker/data/index.ts +++ b/web-common/src/features/chat/core/context/picker/data/index.ts @@ -27,8 +27,8 @@ export function getPickerOptions( [ getInlineChatContextMetadata(client), getMetricsViewPickerOptions(client), - getCanvasesPickerOptions(uiState), - isRillDev ? getModelsPickerOptions(uiState) : readable(null), + getCanvasesPickerOptions(client, uiState), + isRillDev ? getModelsPickerOptions(client, uiState) : readable(null), uiState.expandedParentsStore, ], ([metadata, metricsViewOptions, canvasOptions, filesOption]) => { diff --git a/web-common/src/features/chat/core/context/picker/data/metrics-views.ts b/web-common/src/features/chat/core/context/picker/data/metrics-views.ts index 4f46b44e7dd..f24348f5860 100644 --- a/web-common/src/features/chat/core/context/picker/data/metrics-views.ts +++ b/web-common/src/features/chat/core/context/picker/data/metrics-views.ts @@ -26,7 +26,7 @@ export function getMetricsViewPickerOptions( queryClient, ); - const lastUsedMetricsViewStore = getLastUsedMetricsViewNameStore(); + const lastUsedMetricsViewStore = getLastUsedMetricsViewNameStore(client); const activeMetricsViewStore = getActiveMetricsViewNameStore(client); return derived( @@ -88,9 +88,9 @@ export function getMetricsViewPickerOptions( /** * Looks at the last conversation and returns the metrics view used in the last message or tool call. */ -function getLastUsedMetricsViewNameStore() { +function getLastUsedMetricsViewNameStore(client: RuntimeClient) { const lastConversationQuery = createQuery( - getLatestConversationQueryOptions(), + getLatestConversationQueryOptions(client), queryClient, ); diff --git a/web-common/src/features/chat/core/context/picker/data/models.ts b/web-common/src/features/chat/core/context/picker/data/models.ts index 736912ce714..ceba9c6aaa2 100644 --- a/web-common/src/features/chat/core/context/picker/data/models.ts +++ b/web-common/src/features/chat/core/context/picker/data/models.ts @@ -14,10 +14,10 @@ import { } from "@rilldata/web-common/features/entity-management/resource-selectors.ts"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { derived, type Readable } from "svelte/store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; import { createQuery } from "@tanstack/svelte-query"; import { ContextPickerUIState } from "@rilldata/web-common/features/chat/core/context/picker/ui-state.ts"; import type { PickerItem } from "@rilldata/web-common/features/chat/core/context/picker/picker-tree.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; /** * Creates a store that contains a 2-level list of sources/model resources. @@ -26,17 +26,19 @@ import type { PickerItem } from "@rilldata/web-common/features/chat/core/context * NOTE: this only lists resources that are parsed as sources/models. Any parse errors will exclude the file. */ export function getModelsPickerOptions( + client: RuntimeClient, uiState: ContextPickerUIState, ): Readable { const modelResourcesQuery = createQuery( - getClientFilteredResourcesQueryOptions(ResourceKind.Model), + getClientFilteredResourcesQueryOptions(client, ResourceKind.Model), queryClient, ); const activeResourceStore = getActiveResourceStore(); return derived( - [runtime, modelResourcesQuery, activeResourceStore], - ([{ instanceId }, modelResourcesResp, activeResource], set) => { + [modelResourcesQuery, activeResourceStore], + ([modelResourcesResp, activeResource], set) => { + const instanceId = client.instanceId; const models = modelResourcesResp.data ?? []; const modelPickerItems: PickerItem[] = []; const modelQueryOptions: ReturnType< diff --git a/web-common/src/features/chat/core/conversation-manager.ts b/web-common/src/features/chat/core/conversation-manager.ts index 39aeb65e8e9..8937ae816ff 100644 --- a/web-common/src/features/chat/core/conversation-manager.ts +++ b/web-common/src/features/chat/core/conversation-manager.ts @@ -4,6 +4,7 @@ import { type RpcStatus, type V1ListConversationsResponse, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, type CreateQueryResult } from "@tanstack/svelte-query"; import { derived, get, type Readable } from "svelte/store"; import { Conversation } from "./conversation"; @@ -51,8 +52,12 @@ export class ConversationManager { private conversationSelector: ConversationSelector; private readonly agent?: string; + public get instanceId(): string { + return this.client.instanceId; + } + constructor( - public readonly instanceId: string, + private readonly client: RuntimeClient, options: ConversationManagerOptions, ) { this.agent = options.agent; @@ -110,7 +115,7 @@ export class ConversationManager { // Otherwise, create a conversation instance and store it const conversation = new Conversation( - this.instanceId, + this.client, $conversationId, this.agent, ); @@ -159,7 +164,7 @@ export class ConversationManager { private createNewConversation() { this.newConversationUnsub?.(); this.newConversation = new Conversation( - this.instanceId, + this.client, NEW_CONVERSATION_ID, this.agent, ); @@ -278,21 +283,21 @@ function getConversationManagerKey(instanceId: string, agent?: string): string { } /** - * Get or create a ConversationManager instance for the given instanceId and agent + * Get or create a ConversationManager instance for the given client and agent * - * @param instanceId - The project/instance identifier + * @param client - The RuntimeClient instance * @param options - Configuration options for the conversation manager instance * @returns The ConversationManager instance for this project and agent */ export function getConversationManager( - instanceId: string, + client: RuntimeClient, options: ConversationManagerOptions, ): ConversationManager { - const key = getConversationManagerKey(instanceId, options.agent); + const key = getConversationManagerKey(client.instanceId, options.agent); if (!conversationManagerInstances.has(key)) { conversationManagerInstances.set( key, - new ConversationManager(instanceId, options), + new ConversationManager(client, options), ); } return conversationManagerInstances.get(key)!; diff --git a/web-common/src/features/chat/core/conversation.ts b/web-common/src/features/chat/core/conversation.ts index fec4fa10153..9595d00f3cc 100644 --- a/web-common/src/features/chat/core/conversation.ts +++ b/web-common/src/features/chat/core/conversation.ts @@ -11,7 +11,7 @@ import { type V1GetConversationResponse, type V1Message, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { SSEFetchClient, SSEHttpError, @@ -80,6 +80,14 @@ export class Conversation { // Reactive store for conversationId - enables query to auto-update when ID changes private readonly conversationIdStore: Writable; + private get instanceId(): string { + return this.client.instanceId; + } + + public get runtimeClient(): RuntimeClient { + return this.client; + } + public get conversationId(): string { return get(this.conversationIdStore); } @@ -89,7 +97,7 @@ export class Conversation { } constructor( - private readonly instanceId: string, + private readonly client: RuntimeClient, initialConversationId: string, private readonly agent: string = ToolName.ANALYST_AGENT, ) { @@ -334,7 +342,7 @@ export class Conversation { this.ensureSSEClient(); this.sseClient!.stop(); - const baseUrl = `${get(runtime).host}/v1/instances/${this.instanceId}/ai/complete/stream?stream=messages`; + const baseUrl = `${this.client.host}/v1/instances/${this.instanceId}/ai/complete/stream?stream=messages`; const requestBody = { instanceId: this.instanceId, diff --git a/web-common/src/features/chat/core/messages/Messages.svelte b/web-common/src/features/chat/core/messages/Messages.svelte index 877603d5a1d..3db9cfd3808 100644 --- a/web-common/src/features/chat/core/messages/Messages.svelte +++ b/web-common/src/features/chat/core/messages/Messages.svelte @@ -1,9 +1,8 @@ diff --git a/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte b/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte index eb18e2ecd33..d5a5dd8d6b7 100644 --- a/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte +++ b/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte @@ -45,7 +45,7 @@ active={viewAsMenuOpen} removeTooltipText="Clear view" onRemove={() => { - updateDevJWT(queryClient, null); + updateDevJWT(queryClient, instanceId, null); }} >
@@ -62,7 +62,7 @@ {#each $mockUsers.data as user (user?.email)} { - updateDevJWT(queryClient, user); + updateDevJWT(queryClient, instanceId, user); }} class="flex gap-x-2 items-center" > diff --git a/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts b/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts index 7db87032c0e..e1c10eababf 100644 --- a/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts +++ b/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts @@ -13,7 +13,10 @@ import { get } from "svelte/store"; * under this scenario, the catalog entry returns a 404, and it's required to enter the top-level * `Dashboard.svelte` component. */ -export function resetSelectedMockUserAfterNavigate(queryClient: QueryClient) { +export function resetSelectedMockUserAfterNavigate( + queryClient: QueryClient, + instanceId: string, +) { beforeNavigate(({ to, from }) => { if (!to?.params || !from?.params) return; @@ -21,7 +24,7 @@ export function resetSelectedMockUserAfterNavigate(queryClient: QueryClient) { from.params.name !== to.params.name && get(selectedMockUserStore) !== null ) { - updateDevJWT(queryClient, null).catch(console.error); + updateDevJWT(queryClient, instanceId, null).catch(console.error); } }); } diff --git a/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts b/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts index da058a6a9a4..34440c8e10e 100644 --- a/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts +++ b/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts @@ -7,10 +7,10 @@ import { runtimeServiceIssueDevJWT } from "@rilldata/web-common/runtime-client"; import { invalidateAllMetricsViews } from "@rilldata/web-common/runtime-client/invalidation"; import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { QueryClient } from "@tanstack/svelte-query"; -import { get } from "svelte/store"; export async function updateDevJWT( queryClient: QueryClient, + instanceId: string, mockUser: MockUser | null, ) { selectedMockUserStore.set(mockUser); @@ -50,5 +50,5 @@ export async function updateDevJWT( } } - return invalidateAllMetricsViews(queryClient, get(runtime).instanceId); + return invalidateAllMetricsViews(queryClient, instanceId); } diff --git a/web-common/src/features/editor/FileWorkspaceHeader.svelte b/web-common/src/features/editor/FileWorkspaceHeader.svelte index 74544c99511..a4f1c596170 100644 --- a/web-common/src/features/editor/FileWorkspaceHeader.svelte +++ b/web-common/src/features/editor/FileWorkspaceHeader.svelte @@ -2,7 +2,9 @@ import { goto } from "$app/navigation"; import { splitFolderAndFileName } from "@rilldata/web-common/features/entity-management/file-path-utils"; import { handleEntityRename } from "@rilldata/web-common/features/entity-management/ui-actions"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; + + const runtimeClient = useRuntimeClient(); import { WorkspaceHeader } from "../../layout/workspace"; import type { ResourceKind } from "../entity-management/resource-selectors"; import { PROTECTED_FILES } from "../file-explorer/protected-paths"; @@ -18,7 +20,7 @@ $: [, fileName] = splitFolderAndFileName(filePath); $: isProtectedFile = PROTECTED_FILES.includes(filePath); - $: ({ instanceId } = $runtime); + $: ({ instanceId } = runtimeClient); const onChangeCallback = async (newTitle: string) => { const route = await handleEntityRename( diff --git a/web-common/src/features/entity-management/AddAssetButton.svelte b/web-common/src/features/entity-management/AddAssetButton.svelte index be170347e06..e23b139d8ed 100644 --- a/web-common/src/features/entity-management/AddAssetButton.svelte +++ b/web-common/src/features/entity-management/AddAssetButton.svelte @@ -17,7 +17,7 @@ createRuntimeServiceCreateDirectory, createRuntimeServicePutFile, } from "../../runtime-client"; - import { runtime } from "../../runtime-client/runtime-store"; + import { useRuntimeClient } from "../../runtime-client/v2"; import { useIsModelingSupportedForDefaultOlapDriverOLAP as useIsModelingSupportedForDefaultOlapDriver } from "../connectors/selectors"; import { directoryState } from "../file-explorer/directory-store"; import { createResourceAndNavigate } from "../file-explorer/new-files"; @@ -42,7 +42,8 @@ const createFile = createRuntimeServicePutFile(); const createFolder = createRuntimeServiceCreateDirectory(); - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); + $: ({ instanceId } = runtimeClient); const { developerChat } = featureFlags; $: currentFile = $page.params.file; @@ -173,7 +174,8 @@ aria-label="Add Model" class="flex gap-x-2" disabled={!isModelingSupported} - on:click={() => createResourceAndNavigate(ResourceKind.Model)} + on:click={() => + createResourceAndNavigate(runtimeClient, ResourceKind.Model)} > createResourceAndNavigate(ResourceKind.MetricsView)} + on:click={() => + createResourceAndNavigate(runtimeClient, ResourceKind.MetricsView)} > { if (metricsViews.length === 1) { void createResourceAndNavigate( + runtimeClient, ResourceKind.Explore, metricsViews.pop(), ); @@ -233,7 +237,8 @@ createResourceAndNavigate(ResourceKind.Canvas)} + on:click={() => + createResourceAndNavigate(runtimeClient, ResourceKind.Canvas)} disabled={metricsViews.length === 0} >
@@ -273,7 +278,8 @@ createResourceAndNavigate(ResourceKind.API)} + on:click={() => + createResourceAndNavigate(runtimeClient, ResourceKind.API)} > createResourceAndNavigate(ResourceKind.Theme)} + on:click={() => + createResourceAndNavigate(runtimeClient, ResourceKind.Theme)} > - diff --git a/web-common/src/features/entity-management/FileAndResourceWatcher.svelte b/web-common/src/features/entity-management/FileAndResourceWatcher.svelte index ee482a120d6..9c16a71e0ac 100644 --- a/web-common/src/features/entity-management/FileAndResourceWatcher.svelte +++ b/web-common/src/features/entity-management/FileAndResourceWatcher.svelte @@ -27,7 +27,7 @@ $: status = $statusStore; onMount(() => { - void fileArtifacts.init(runtimeClient, queryClient, instanceId); + void fileArtifacts.init(runtimeClient, queryClient); return () => fileAndResourceWatcher.close(true); }); diff --git a/web-common/src/features/explores/ExploreMenuItems.svelte b/web-common/src/features/explores/ExploreMenuItems.svelte index 9fa1d26ab7b..658e5f4c504 100644 --- a/web-common/src/features/explores/ExploreMenuItems.svelte +++ b/web-common/src/features/explores/ExploreMenuItems.svelte @@ -1,7 +1,6 @@ diff --git a/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte b/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte index 2e247f9cca3..b746ae6adb3 100644 --- a/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte +++ b/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte @@ -82,7 +82,7 @@ ? props.exploreName : getDashboardNameFromReport(props.reportSpec); - $: validExploreSpec = useExploreValidSpec(instanceId, exploreName); + $: validExploreSpec = useExploreValidSpec(runtimeClient, exploreName); $: exploreSpec = $validExploreSpec.data?.explore ?? {}; $: metricsViewName = exploreSpec.metricsView ?? ""; @@ -271,8 +271,10 @@ if (props.mode === "edit") { await queryClient.invalidateQueries({ queryKey: getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.name": reportName, - "name.kind": ResourceKind.Report, + name: { + name: reportName, + kind: ResourceKind.Report, + }, }), }); } diff --git a/web-common/src/features/sources/modal/SourceImportedModal.svelte b/web-common/src/features/sources/modal/SourceImportedModal.svelte index 5757c385b05..f0cfa39b2e3 100644 --- a/web-common/src/features/sources/modal/SourceImportedModal.svelte +++ b/web-common/src/features/sources/modal/SourceImportedModal.svelte @@ -12,7 +12,6 @@ import { BehaviourEventMedium } from "../../../metrics/service/BehaviourEventTypes"; import { MetricsEventSpace } from "../../../metrics/service/MetricsTypes"; import type { V1Resource } from "../../../runtime-client"; - import type { HTTPError } from "../../../runtime-client/fetchWrapper"; import { extractFileName } from "../../entity-management/file-path-utils"; import { featureFlags } from "../../feature-flags"; import { @@ -27,7 +26,7 @@ const runtimeClient = useRuntimeClient(); let fileArtifact: FileArtifact; - let sourceQuery: CreateQueryResult; + let sourceQuery: CreateQueryResult; $: sourceName = extractFileName(sourcePath ?? ""); diff --git a/web-common/src/runtime-client/query-matcher.ts b/web-common/src/runtime-client/query-matcher.ts index b9f5aeb92f3..3c6306f600b 100644 --- a/web-common/src/runtime-client/query-matcher.ts +++ b/web-common/src/runtime-client/query-matcher.ts @@ -18,29 +18,18 @@ export function isRuntimeQuery(query: Query): boolean { export function isGetResourceMetricsViewQuery(query: Query): boolean { const key = query.queryKey; - // New format: ["RuntimeService", "getResource", instanceId, { "name.kind": ... }] + // Format: ["RuntimeService", "getResource", instanceId, { name: { kind, name } }] if (key[0] === "RuntimeService" && key[1] === "getResource") { const request = key[3]; + if (typeof request !== "object" || request === null) return false; + const name = (request as Record).name; return ( - typeof request === "object" && - request !== null && - (request as Record)["name.kind"] === - ResourceKind.MetricsView + typeof name === "object" && + name !== null && + (name as Record).kind === ResourceKind.MetricsView ); } - // Old format - const [apiPath, queryParams] = key; - if ( - typeof apiPath !== "string" || - typeof queryParams !== "object" || - queryParams === null - ) - return false; - return ( - apiPath.startsWith("/v1/instances/") && - (queryParams as Record)["name.kind"] === - ResourceKind.MetricsView - ); + return false; } export enum QueryRequestType { diff --git a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte index 9cd47bbfa29..bb345969ee6 100644 --- a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte +++ b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte @@ -15,7 +15,6 @@ import WorkspaceContainer from "@rilldata/web-common/layout/workspace/WorkspaceContainer.svelte"; import WorkspaceEditorContainer from "@rilldata/web-common/layout/workspace/WorkspaceEditorContainer.svelte"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { onMount } from "svelte"; import type { PageData } from "./$types"; @@ -33,7 +32,6 @@ let editor: EditorView; - $: ({ instanceId } = $runtime); $: ({ fileArtifact } = data); $: ({ @@ -51,7 +49,7 @@ $: workspace = workspaces.get(resourceKind ?? $inferredResourceKind); - $: resourceQuery = getResource(queryClient, instanceId); + $: resourceQuery = getResource(queryClient); $: resource = $resourceQuery.data; @@ -61,7 +59,7 @@ : getExtensionsForFile(path); // Parse error for the editor banner - $: parseErrorQuery = getParseError(queryClient, instanceId); + $: parseErrorQuery = getParseError(queryClient); $: parseError = $parseErrorQuery; onMount(() => { diff --git a/web-local/src/routes/(viz)/explore/[name]/+page.svelte b/web-local/src/routes/(viz)/explore/[name]/+page.svelte index e08ec243bf6..c31f8a34866 100644 --- a/web-local/src/routes/(viz)/explore/[name]/+page.svelte +++ b/web-local/src/routes/(viz)/explore/[name]/+page.svelte @@ -12,6 +12,7 @@ import StateManagersProvider from "@rilldata/web-common/features/dashboards/state-managers/StateManagersProvider.svelte"; import { useProjectParser } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; + import { isHTTPError } from "@rilldata/web-common/lib/errors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; @@ -37,7 +38,7 @@ ...(explore.meta?.filePaths ?? []), ...(metricsView.meta?.filePaths ?? []), ]; - $: exploreQuery = useExploreValidSpec(instanceId, exploreName); + $: exploreQuery = useExploreValidSpec(runtimeClient, exploreName); $: measures = $exploreQuery.data?.explore?.measures ?? []; $: projectParserQuery = useProjectParser(queryClient, instanceId, { enabled: $selectedMockUserStore?.admin, @@ -62,7 +63,9 @@ (error) => filePaths.includes(error.filePath as string), ); $: mockUserHasNoAccess = - $selectedMockUserStore && $exploreQuery.error?.response?.status === 404; + $selectedMockUserStore && + isHTTPError($exploreQuery.error) && + $exploreQuery.error.response.status === 404; onNavigate(({ from, to }) => { const changedDashboard = @@ -80,7 +83,9 @@ {#if measures.length === 0 && $selectedMockUserStore !== null} @@ -92,7 +97,9 @@ /> {:else if mockUserHasNoAccess} From 4ddc1d5165a58b15f18923b242078b0cd5c430bc Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 11:54:54 +0300 Subject: [PATCH 33/78] fix: provide RuntimeClient to TopNavigationBar via global store MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TopNavigationBar renders in the root layout ABOVE RuntimeProvider, so Svelte context-based `tryUseRuntimeClient()` always returned null. This broke breadcrumbs (empty visualization list) and crashed canvas pages (CanvasBookmarks called `useRuntimeClient()` which threw). Add `runtimeClientStore` — a module-level writable store that RuntimeProvider populates on mount. TopNavigationBar subscribes reactively. A new `RuntimeContextBridge` component sets Svelte context for child components (bookmarks, state managers) that call `useRuntimeClient()`. --- .../navigation/TopNavigationBar.svelte | 86 +++++++++++-------- .../v2/RuntimeContextBridge.svelte | 18 ++++ .../runtime-client/v2/RuntimeProvider.svelte | 16 ++-- web-common/src/runtime-client/v2/context.ts | 11 +++ web-common/src/runtime-client/v2/index.ts | 1 + 5 files changed, 86 insertions(+), 46 deletions(-) create mode 100644 web-common/src/runtime-client/v2/RuntimeContextBridge.svelte diff --git a/web-admin/src/features/navigation/TopNavigationBar.svelte b/web-admin/src/features/navigation/TopNavigationBar.svelte index 3ee8372d9b7..fbe7460e134 100644 --- a/web-admin/src/features/navigation/TopNavigationBar.svelte +++ b/web-admin/src/features/navigation/TopNavigationBar.svelte @@ -14,7 +14,8 @@ import StateManagersProvider from "@rilldata/web-common/features/dashboards/state-managers/StateManagersProvider.svelte"; import { useExplore } from "@rilldata/web-common/features/explores/selectors"; import { featureFlags } from "@rilldata/web-common/features/feature-flags"; - import { tryUseRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; + import { runtimeClientStore } from "@rilldata/web-common/runtime-client/v2"; + import RuntimeContextBridge from "@rilldata/web-common/runtime-client/v2/RuntimeContextBridge.svelte"; import { readable } from "svelte/store"; import { createAdminServiceGetCurrentUser, @@ -57,7 +58,10 @@ dashboardChat, stickyDashboardState, } = featureFlags; - const runtimeClient = tryUseRuntimeClient(); + // TopNavigationBar renders in the root layout, ABOVE RuntimeProvider. + // Subscribe to the global store so we reactively get the client when + // RuntimeProvider mounts on project pages. + $: runtimeClient = $runtimeClientStore; $: instanceId = runtimeClient?.instanceId ?? ""; @@ -304,46 +308,52 @@ {manageOrgMembers} /> {/if} - {#if onMetricsExplorerPage && isDashboardValid} - {#if exploreSpec} - {#key dashboard} - - - {#if $dimensionSearch && ready} - + {#if runtimeClient} + {#key runtimeClient} + + {#if onMetricsExplorerPage && isDashboardValid} + {#if exploreSpec} + {#key dashboard} + + + {#if $dimensionSearch && ready} + + {/if} + {#if $dashboardChat && !onPublicURLPage} + + {/if} + {#if hasUserAccess} + + {#if $alertsFlag} + + {/if} + + {/if} + + {/key} {/if} + {/if} + + {#if onCanvasDashboardPage && hasUserAccess} {#if $dashboardChat && !onPublicURLPage} {/if} - {#if hasUserAccess} - - {#if $alertsFlag} - - {/if} - - {/if} - - {/key} - {/if} - {/if} - - {#if onCanvasDashboardPage && hasUserAccess} - {#if $dashboardChat && !onPublicURLPage} - - {/if} - - + + + {/if} + + {/key} {/if} {#if $user.isSuccess} {#if $user.data && $user.data.user} diff --git a/web-common/src/runtime-client/v2/RuntimeContextBridge.svelte b/web-common/src/runtime-client/v2/RuntimeContextBridge.svelte new file mode 100644 index 00000000000..d279035a882 --- /dev/null +++ b/web-common/src/runtime-client/v2/RuntimeContextBridge.svelte @@ -0,0 +1,18 @@ + + + diff --git a/web-common/src/runtime-client/v2/RuntimeProvider.svelte b/web-common/src/runtime-client/v2/RuntimeProvider.svelte index a7402a85fd0..b6436bb7ccd 100644 --- a/web-common/src/runtime-client/v2/RuntimeProvider.svelte +++ b/web-common/src/runtime-client/v2/RuntimeProvider.svelte @@ -2,9 +2,9 @@ import { setContext, onDestroy } from "svelte"; import { useQueryClient } from "@tanstack/svelte-query"; import { RuntimeClient, type AuthContext } from "./runtime-client"; - import { RUNTIME_CONTEXT_KEY } from "./context"; + import { RUNTIME_CONTEXT_KEY, runtimeClientStore } from "./context"; import { invalidateRuntimeQueries } from "../invalidation"; - import { runtime } from "../runtime-store"; // BRIDGE (temporary) + import { featureFlags } from "../../features/feature-flags"; const queryClient = useQueryClient(); @@ -16,6 +16,8 @@ // Created once per mount. If host/instanceId change, the parent's {#key} re-mounts us. const client = new RuntimeClient({ host, instanceId, jwt, authContext }); setContext(RUNTIME_CONTEXT_KEY, client); + runtimeClientStore.set(client); + featureFlags.setRuntimeClient(client); // Handle JWT-only changes (15-min refresh, View As with same host) $: { @@ -24,12 +26,10 @@ void invalidateRuntimeQueries(queryClient, instanceId); } - // BRIDGE (temporary): keep global store in sync for unmigrated Orval consumers - $: runtime - .setRuntime(queryClient, host, instanceId, jwt, authContext) - .catch(console.error); - - onDestroy(() => client.dispose()); + onDestroy(() => { + runtimeClientStore.set(null); + client.dispose(); + }); {#if host && instanceId} diff --git a/web-common/src/runtime-client/v2/context.ts b/web-common/src/runtime-client/v2/context.ts index 9d6a1e0c459..59ac88d7e18 100644 --- a/web-common/src/runtime-client/v2/context.ts +++ b/web-common/src/runtime-client/v2/context.ts @@ -1,8 +1,19 @@ import { getContext } from "svelte"; +import { writable } from "svelte/store"; import type { RuntimeClient } from "./runtime-client"; export const RUNTIME_CONTEXT_KEY = Symbol("runtime-client"); +/** + * Module-level store that mirrors the active RuntimeClient. + * Set by RuntimeProvider on mount, cleared on destroy. + * + * Used by components that render OUTSIDE RuntimeProvider's subtree + * (e.g. TopNavigationBar in the root layout) but need reactive + * access to the current RuntimeClient. + */ +export const runtimeClientStore = writable(null); + /** * Returns the RuntimeClient set by the nearest ancestor RuntimeProvider. * Must be called during component initialization (top-level ` +``` + +## State Management Patterns + +| Pattern | Use When | Example | +| ------------------------ | -------------------------------------------------- | ------------------------ | +| Direct TanStack Query | Single component, simple data (1-2 queries) | Query in component | +| TypeScript Query Factory | Complex query logic, reusable across components | `useFilteredTableData()` | +| ES6 Classes | Client state + server coordination, business logic | `ChatStateManager` | + +**Key principle**: TanStack Query owns server state. Classes own client state and coordinate between them. + +### URL as Source of Truth + +When state can be represented in the URL, it should be: + +- Shareable links that restore exact state +- Browser back/forward works intuitively +- Bookmarkable views + +**URL-appropriate**: filters, time ranges, tabs, search queries, pagination +**Not URL-appropriate**: loading states, hover/focus, sensitive data, rapidly changing state + +## File Organization + +- Organize by semantic features (user flows), not file types +- Each sub-feature contains all layers (UI, logic, state) for that flow +- Use `shared/` for cross-cutting concerns +- Co-locate documentation with code (`README.md` in each sub-feature) +- Target ~8 files per directory maximum +- `web-common/src/lib/` is for low-level, domain-agnostic utilities only + +``` +features/my-feature/ +├── user-flow-1/ # Everything for flow 1 +├── user-flow-2/ # Everything for flow 2 +└── shared/ # Shared utilities + +# NOT this: +features/my-feature/ +├── components/ # UI layer +├── lib/ # Logic layer +└── utils/ # Utility layer +``` + +## General + +- Comments communicate to other developers, not to AI assistants +- Our app is an SPA — no need for `if (browser)` blocks in `+page.ts` diff --git a/web-common/src/features/chat/core/citation-url-utils.ts b/web-common/src/features/chat/core/citation-url-utils.ts index 45cb594997b..b263ce4ac32 100644 --- a/web-common/src/features/chat/core/citation-url-utils.ts +++ b/web-common/src/features/chat/core/citation-url-utils.ts @@ -10,34 +10,32 @@ import { ToolName, } from "@rilldata/web-common/features/chat/core/types.ts"; import { error } from "@sveltejs/kit"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; -import httpClient from "@rilldata/web-common/runtime-client/http-client.ts"; + +interface RuntimeInfo { + host: string; + instanceId: string; + jwt?: { token: string } | undefined; +} export async function fetchMessage( - runtime: Runtime, + runtime: RuntimeInfo, conversationId: string, messageId: string, ) { try { - const toolCallResp = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceGetAIMessageQueryKey( - runtime.instanceId, - conversationId, - messageId, - ), - queryFn: ({ signal }) => - httpClient({ - url: `/v1/instances/${runtime.instanceId}/ai/conversations/${conversationId}/messages/${messageId}`, - method: "GET", - baseUrl: runtime.host, - headers: runtime.jwt - ? { - Authorization: `Bearer ${runtime.jwt?.token}`, - } - : undefined, - signal, - }), - }); + const headers: Record = {}; + if (runtime.jwt) { + headers["Authorization"] = `Bearer ${runtime.jwt.token}`; + } + const resp = await fetch( + `${runtime.host}/v1/instances/${runtime.instanceId}/ai/conversations/${conversationId}/messages/${messageId}`, + { headers }, + ); + if (!resp.ok) { + const data = await resp.json().catch(() => ({})); + throw { response: { status: resp.status, data } }; + } + const toolCallResp = (await resp.json()) as V1GetAIMessageResponse; // 200 response should always have a message. return toolCallResp.message!; diff --git a/web-common/src/features/chat/core/conversation.spec.ts b/web-common/src/features/chat/core/conversation.spec.ts index 437e814e50a..c36fed1aef2 100644 --- a/web-common/src/features/chat/core/conversation.spec.ts +++ b/web-common/src/features/chat/core/conversation.spec.ts @@ -143,9 +143,8 @@ describe("Conversation", () => { // Assert: fork API called correctly expect(runtimeServiceForkConversation).toHaveBeenCalledWith( - INSTANCE_ID, - ORIGINAL_CONVERSATION_ID, - {}, + mockRuntimeClient, + { conversationId: ORIGINAL_CONVERSATION_ID }, ); // Assert: cache updated with forked conversation diff --git a/web-common/src/features/chat/core/conversation.ts b/web-common/src/features/chat/core/conversation.ts index a2a5d3c6bad..83452d72b71 100644 --- a/web-common/src/features/chat/core/conversation.ts +++ b/web-common/src/features/chat/core/conversation.ts @@ -473,11 +473,9 @@ export class Conversation { private async forkConversation(): Promise { const originalConversationId = this.conversationId; - const response = await runtimeServiceForkConversation( - this.instanceId, - this.conversationId, - {}, - ); + const response = await runtimeServiceForkConversation(this.client, { + conversationId: this.conversationId, + }); if (!response.conversationId) { throw new Error("Fork response missing conversation ID"); diff --git a/web-common/src/features/feature-flags.ts b/web-common/src/features/feature-flags.ts index b704d3d22b0..426b3a587ae 100644 --- a/web-common/src/features/feature-flags.ts +++ b/web-common/src/features/feature-flags.ts @@ -6,7 +6,7 @@ import { type V1GetInstanceResponse, type V1InstanceFeatureFlags, } from "../runtime-client"; -import { runtime } from "../runtime-client/runtime-store"; +import type { RuntimeClient } from "../runtime-client/v2"; class FeatureFlag { private _internal = false; @@ -67,29 +67,28 @@ class FeatureFlags { generateCanvas = new FeatureFlag("user", false); stickyDashboardState = new FeatureFlag("user", false); + private flagsUnsub?: () => void; + constructor() { this.ready = new Promise((resolve) => { this._resolveReady = resolve; }); + } - // Responsively update flags based on rill.yaml - // BRIDGE (temporary): subscribes to runtime store; will be replaced by - // RuntimeProvider calling setRuntimeClient() once per-runtime scoping lands - runtime.subscribe((runtime) => { - if (!runtime?.instanceId) return; - - createRuntimeServiceGetInstance( - runtime.instanceId, - undefined, - { - query: { - select: (data) => data?.instance?.featureFlags, - }, + setRuntimeClient(client: RuntimeClient) { + this.flagsUnsub?.(); + + this.flagsUnsub = createRuntimeServiceGetInstance( + client.instanceId, + undefined, + { + query: { + select: (data) => data?.instance?.featureFlags, }, - queryClient, - ).subscribe((features) => { - if (features.data) this.updateFlags(features.data); - }); + }, + queryClient, + ).subscribe((features) => { + if (features.data) this.updateFlags(features.data); }); } diff --git a/web-common/src/runtime-client/index.ts b/web-common/src/runtime-client/index.ts index 3c1d1eec400..daafdbd2245 100644 --- a/web-common/src/runtime-client/index.ts +++ b/web-common/src/runtime-client/index.ts @@ -1,4 +1,4 @@ export * from "./gen/index.schemas"; -export * from "./gen/runtime-service/runtime-service"; -export * from "./gen/query-service/query-service"; -export * from "./gen/connector-service/connector-service"; +export * from "./v2/gen/runtime-service"; +export * from "./v2/gen/query-service"; +export * from "./v2/gen/connector-service"; From 21920943c4da9882a9c200efdc6c42eb7af7a271 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 14:14:17 +0300 Subject: [PATCH 37/78] refactor: migrate all remaining consumers to v2 RuntimeClient signatures Update ~120 files to use RuntimeClient as first argument instead of instanceId string, use nested request objects instead of flat dot-notation keys, and fix proto Timestamp type incompatibilities. Add getLocalRuntimeClient() singleton for web-local SvelteKit load functions. --- web-admin/src/features/alerts/selectors.ts | 34 +++-- web-admin/src/features/bookmarks/selectors.ts | 9 +- .../listing/deploying-dashboards.ts | 99 ++++++------- .../features/dashboards/listing/selectors.ts | 27 ++-- .../src/features/projects/download-report.ts | 36 +++-- web-admin/src/features/projects/selectors.ts | 5 +- .../src/features/projects/status/selectors.ts | 36 ++--- .../public-urls/CreatePublicURLForm.svelte | 2 +- .../features/scheduled-reports/selectors.ts | 30 ++-- web-admin/src/lib/refetch-interval-store.ts | 2 +- .../[organization]/[project]/+layout.svelte | 2 +- .../[project]/-/alerts/[alert]/+layout.ts | 2 +- .../[project]/-/open-query/+page.ts | 2 +- .../[project]/-/reports/[report]/+layout.ts | 2 +- .../-/reports/[report]/export/+page.svelte | 12 +- .../src/features/alerts/AlertForm.svelte | 2 +- .../src/features/alerts/alert-preview-data.ts | 5 +- .../src/features/alerts/create-alert-utils.ts | 5 +- .../alerts/delivery-tab/notifiers-utils.ts | 15 +- .../canvas/components/markdown/util.ts | 12 +- .../features/canvas/components/pivot/util.ts | 1 + .../canvas/state-managers/state-managers.ts | 7 +- .../src/features/canvas/stores/time-state.ts | 7 +- .../features/chat/core/citation-url-utils.ts | 1 - .../chat/core/context/picker/data/canvases.ts | 10 +- .../chat/core/context/picker/data/models.ts | 9 +- .../chat/core/conversation-manager.ts | 2 +- .../features/chat/core/conversation.spec.ts | 4 +- .../src/features/chat/core/conversation.ts | 28 ++-- .../messages/text/citation-url-mapper.spec.ts | 5 +- .../core/messages/text/citation-url-mapper.ts | 6 +- web-common/src/features/chat/core/utils.ts | 6 +- .../chat/share/ShareChatPopover.svelte | 2 +- .../features/connectors/code-utils.spec.ts | 33 +++-- .../src/features/connectors/code-utils.ts | 55 +++++--- .../useDimensionSearchResults.ts | 6 +- .../dimension-table/DimensionDisplay.svelte | 2 +- .../dashboards/filters/Filters.svelte | 4 +- .../dimension-filter-values.ts | 13 +- .../resetSelectedMockUserAfterNavigate.ts | 7 +- .../granular-access-policies/updateDevJWT.ts | 26 +--- .../granular-access-policies/useMockUsers.ts | 5 +- .../useSecurityPolicyCheck.ts | 12 +- .../leaderboard/LeaderboardDisplay.svelte | 2 +- .../dashboards/pivot/pivot-data-store.ts | 2 +- .../dashboards/pivot/pivot-expansion.ts | 2 +- .../dashboards/pivot/pivot-queries.ts | 2 +- .../features/dashboards/pivot/pivot-utils.ts | 2 +- .../src/features/dashboards/selectors.ts | 58 ++++---- .../loaders/DashboardStateDataLoader.ts | 14 +- .../loaders/DashboardStateManager.svelte | 9 +- .../loaders/DashboardStateSync.ts | 9 +- .../selectors/dimension-filters.ts | 7 +- .../stores/ExploreMetricsViewMetadata.ts | 7 +- .../time-controls/new-time-controls.ts | 21 +-- .../time-controls/rill-time-ranges.ts | 24 ++-- .../time-controls/time-control-store.ts | 6 +- .../time-series/annotations-selectors.ts | 17 +-- .../time-series/multiple-dimension-queries.ts | 2 +- .../editor/FileWorkspaceHeader.svelte | 4 +- .../FileAndResourceWatcher.svelte | 1 + .../src/features/entity-management/actions.ts | 39 +++--- .../features/entity-management/dag-utils.ts | 10 +- .../features/entity-management/error-utils.ts | 7 +- .../file-and-resource-watcher.ts | 52 +++---- .../entity-management/file-artifact.ts | 25 ++-- .../entity-management/file-artifacts.ts | 21 ++- .../entity-management/file-selectors.ts | 49 ++++--- .../entity-management/project-parser.ts | 12 +- .../resource-invalidations.ts | 3 +- .../entity-management/resource-selectors.ts | 79 ++++++----- .../features/entity-management/ui-actions.ts | 7 +- .../explore-mappers/explore-validation.ts | 8 +- .../explore-mappers/generate-explore-link.ts | 5 +- ...dashboard-from-aggregation-request.spec.ts | 7 +- .../get-dashboard-from-aggregation-request.ts | 8 +- .../get-dashboard-from-comparison-request.ts | 4 +- .../explore-mappers/get-mapped-explore-url.ts | 16 +-- .../explore-mappers/map-to-explore.ts | 15 +- .../features/explore-mappers/open-query.ts | 3 +- .../src/features/explore-mappers/types.ts | 3 +- .../src/features/explore-mappers/utils.ts | 38 +++-- web-common/src/features/explores/selectors.ts | 28 ++-- web-common/src/features/feature-flags.ts | 4 +- .../src/features/file-explorer/new-files.ts | 4 +- .../file-explorer/transform-file-list.ts | 4 +- .../metrics-views/MetricsInspector.svelte | 4 +- .../create-and-preview-explore.ts | 2 +- ...asures-and-dimensions-for-metrics-views.ts | 5 +- .../metrics-views/metrics-view-selectors.ts | 5 +- .../models/navigation/ModelMenuItems.svelte | 2 +- .../models/partitions/TriggerPartition.svelte | 2 +- web-common/src/features/models/selectors.ts | 15 +- web-common/src/features/project/selectors.ts | 5 +- .../sample-data/generate-sample-data.ts | 3 +- .../scheduled-reports/FiltersForm.svelte | 5 +- .../scheduled-reports/fields/selectors.ts | 119 ++++++++-------- .../src/features/scheduled-reports/utils.ts | 5 +- .../features/sources/modal/AddDataForm.svelte | 4 +- .../sources/modal/AddDataFormManager.ts | 25 ++-- .../sources/modal/SourceImportedModal.svelte | 2 +- .../features/sources/modal/createSource.ts | 5 +- .../sources/modal/submitAddDataForm.ts | 130 +++++++----------- .../sources/navigation/SourceMenuItems.svelte | 2 +- web-common/src/features/sources/selectors.ts | 28 ++-- web-common/src/features/templates/utils.ts | 2 +- web-common/src/features/themes/selectors.ts | 9 +- .../welcome/is-project-initialized.ts | 13 +- .../workspaces/CanvasWorkspace.svelte | 7 +- .../workspaces/ExploreWorkspace.svelte | 7 +- .../workspaces/MetricsWorkspace.svelte | 7 +- .../features/workspaces/ModelWorkspace.svelte | 7 +- web-common/src/lib/errors.ts | 24 ++++ web-common/src/runtime-client/invalidation.ts | 2 +- .../src/runtime-client/query-options.ts | 4 +- web-local/src/hooks.client.ts | 6 +- web-local/src/lib/local-runtime-config.ts | 15 ++ web-local/src/lib/time-ranges-test.ts | 17 +-- .../message/[messageId]/+layout.ts | 11 +- .../message/[messageId]/-/open/+page.ts | 7 +- .../routes/(viz)/explore/[name]/+page.svelte | 6 +- .../src/routes/(viz)/explore/[name]/+page.ts | 6 +- web-local/src/routes/+layout.ts | 10 +- 123 files changed, 896 insertions(+), 862 deletions(-) create mode 100644 web-common/src/lib/errors.ts diff --git a/web-admin/src/features/alerts/selectors.ts b/web-admin/src/features/alerts/selectors.ts index 104a1ad347f..3adbfa250f9 100644 --- a/web-admin/src/features/alerts/selectors.ts +++ b/web-admin/src/features/alerts/selectors.ts @@ -9,18 +9,19 @@ import { createRuntimeServiceListResources, } from "@rilldata/web-common/runtime-client"; import type { V1AlertSpec } from "@rilldata/web-common/runtime-client/gen/index.schemas"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { smartRefetchIntervalFunc } from "@rilldata/web-admin/lib/refetch-interval-store"; import { derived, type Readable, readable } from "svelte/store"; -export function useAlerts(instanceId: string, enabled = true) { +export function useAlerts(client: RuntimeClient, enabled = true) { return createRuntimeServiceListResources( - instanceId, + client, { kind: ResourceKind.Alert, }, { query: { - enabled: enabled && !!instanceId, + enabled: enabled && !!client.instanceId, refetchOnMount: true, refetchInterval: smartRefetchIntervalFunc, }, @@ -28,19 +29,17 @@ export function useAlerts(instanceId: string, enabled = true) { ); } -export function useAlert(instanceId: string, name: string) { - return createRuntimeServiceGetResource(instanceId, { - "name.name": name, - "name.kind": ResourceKind.Alert, +export function useAlert(client: RuntimeClient, name: string) { + return createRuntimeServiceGetResource(client, { + name: { name, kind: ResourceKind.Alert }, }); } -export function useAlertDashboardName(instanceId: string, name: string) { +export function useAlertDashboardName(client: RuntimeClient, name: string) { return createRuntimeServiceGetResource( - instanceId, + client, { - "name.name": name, - "name.kind": ResourceKind.Alert, + name: { name, kind: ResourceKind.Alert }, }, { query: { @@ -93,12 +92,11 @@ export function useAlertOwnerName( ); } -export function useIsAlertCreatedByCode(instanceId: string, name: string) { +export function useIsAlertCreatedByCode(client: RuntimeClient, name: string) { return createRuntimeServiceGetResource( - instanceId, + client, { - "name.name": name, - "name.kind": ResourceKind.Alert, + name: { name, kind: ResourceKind.Alert }, }, { query: { @@ -110,7 +108,7 @@ export function useIsAlertCreatedByCode(instanceId: string, name: string) { } export function useAlertDashboardState( - instanceId: string, + client: RuntimeClient, alertSpec: V1AlertSpec | undefined, ) { if (!alertSpec) { @@ -130,7 +128,7 @@ export function useAlertDashboardState( } return createRuntimeServiceGetExplore( - instanceId, + client, { name: exploreName }, { query: { @@ -138,7 +136,7 @@ export function useAlertDashboardState( getDashboardStateFromUrl( webState, data.metricsView?.metricsView?.state?.validSpec ?? {}, - data.explore?.explore?.state?.validSpec, + data.explore?.explore?.state?.validSpec!, ), }, }, diff --git a/web-admin/src/features/bookmarks/selectors.ts b/web-admin/src/features/bookmarks/selectors.ts index d93906ad15c..8d7c29d809d 100644 --- a/web-admin/src/features/bookmarks/selectors.ts +++ b/web-admin/src/features/bookmarks/selectors.ts @@ -26,7 +26,8 @@ import { getDefaultExplorePreset } from "@rilldata/web-common/features/dashboard import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery, type CreateQueryResult } from "@tanstack/svelte-query"; import { derived, type Readable } from "svelte/store"; @@ -89,7 +90,7 @@ export function isHomeBookmark(bookmark: V1Bookmark) { export function getHomeBookmarkExploreState( projectId: string, - instanceId: string, + client: RuntimeClient, metricsViewName: string, exploreName: string, ): CompoundQueryResult | null> { @@ -97,8 +98,8 @@ export function getHomeBookmarkExploreState( return getCompoundQuery( [ getBookmarks(projectId, ResourceKind.Explore, exploreName), - useExploreValidSpec(instanceId, exploreName), - useMetricsViewTimeRange(instanceId, metricsViewName), + useExploreValidSpec(client, exploreName), + useMetricsViewTimeRange(client, metricsViewName), ], ([bookmarksResp, exploreSpecResp, timeRangeResp]) => { const homeBookmark = bookmarksResp?.bookmarks?.find(isHomeBookmark); diff --git a/web-admin/src/features/dashboards/listing/deploying-dashboards.ts b/web-admin/src/features/dashboards/listing/deploying-dashboards.ts index 6fc40eb9b52..f1863ece99d 100644 --- a/web-admin/src/features/dashboards/listing/deploying-dashboards.ts +++ b/web-admin/src/features/dashboards/listing/deploying-dashboards.ts @@ -4,6 +4,7 @@ import { V1ReconcileStatus, type V1Resource, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import { isResourceReconciling, @@ -11,7 +12,7 @@ import { } from "@rilldata/web-admin/lib/refetch-interval-store.ts"; export function useDeployingDashboards( - instanceId: string, + client: RuntimeClient, orgName: string, projName: string, deployingDashboard: string | null, @@ -19,61 +20,65 @@ export function useDeployingDashboards( redirectPath: string | null; dashboardsErrored: boolean; }> { - return createRuntimeServiceListResources(instanceId, undefined, { - query: { - select: (data) => { - const resources = data.resources ?? []; - const dashboards = resources.filter(isDashboard); + return createRuntimeServiceListResources( + client, + {}, + { + query: { + select: (data) => { + const resources = data.resources ?? []; + const dashboards = resources.filter(isDashboard); - const reconciling = getDashboardsReconciling( - dashboards, - deployingDashboard, - ); - if (reconciling) { - return { - redirectPath: null, - dashboardsErrored: false, - }; - } + const reconciling = getDashboardsReconciling( + dashboards, + deployingDashboard, + ); + if (reconciling) { + return { + redirectPath: null, + dashboardsErrored: false, + }; + } - const dashboardsErrored = getDashboardsErrored( - dashboards, - deployingDashboard, - ); - if (dashboardsErrored) { - return { - // Redirect to status page if dashboards errored - redirectPath: `/${orgName}/${projName}/-/status`, - dashboardsErrored, - }; - } + const dashboardsErrored = getDashboardsErrored( + dashboards, + deployingDashboard, + ); + if (dashboardsErrored) { + return { + // Redirect to status page if dashboards errored + redirectPath: `/${orgName}/${projName}/-/status`, + dashboardsErrored, + }; + } + + const dashboard = dashboards.find( + (res) => res.meta?.name?.name === deployingDashboard, + ); - const dashboard = dashboards.find( - (res) => res.meta?.name?.name === deployingDashboard, - ); + // Redirect to home page if no specific dashboard was deployed + if (!deployingDashboard || !dashboard?.meta?.name) { + return { + redirectPath: `/${orgName}/${projName}`, + dashboardsErrored: false, + }; + } - // Redirect to home page if no specific dashboard was deployed - if (!deployingDashboard || !dashboard?.meta?.name) { + const resourceRoute = + dashboard.meta.name.kind === ResourceKind.Explore + ? "explore" + : "canvas"; + const redirectPath = `/${orgName}/${projName}/${resourceRoute}/${dashboard.meta.name.name}`; return { - redirectPath: `/${orgName}/${projName}`, + redirectPath, dashboardsErrored: false, }; - } - - const resourceRoute = - dashboard.meta.name.kind === ResourceKind.Explore - ? "explore" - : "canvas"; - const redirectPath = `/${orgName}/${projName}/${resourceRoute}/${dashboard.meta.name.name}`; - return { - redirectPath, - dashboardsErrored: false, - }; + }, + refetchInterval: smartRefetchIntervalFunc, + enabled: Boolean(client.instanceId && orgName && projName), }, - refetchInterval: smartRefetchIntervalFunc, - enabled: Boolean(instanceId && orgName && projName), }, - }); + ); } function getDashboardsReconciling( diff --git a/web-admin/src/features/dashboards/listing/selectors.ts b/web-admin/src/features/dashboards/listing/selectors.ts index 41f711b47d1..48d7d9a34dc 100644 --- a/web-admin/src/features/dashboards/listing/selectors.ts +++ b/web-admin/src/features/dashboards/listing/selectors.ts @@ -2,18 +2,19 @@ import { createAdminServiceGetProject } from "@rilldata/web-admin/client"; import { useValidExplores } from "@rilldata/web-common/features/dashboards/selectors"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; import { createRuntimeServiceListResources } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import { derived } from "svelte/store"; import { smartRefetchIntervalFunc } from "@rilldata/web-admin/lib/refetch-interval-store"; export function useDashboardsLastUpdated( - instanceId: string, + client: RuntimeClient, organization: string, project: string, ) { return derived( [ - useValidExplores(instanceId), + useValidExplores(client), createAdminServiceGetProject(organization, project), ], ([dashboardsResp, projResp]) => { @@ -26,7 +27,7 @@ export function useDashboardsLastUpdated( const max = Math.max( ...dashboardsResp.data.map((res) => - new Date(res.meta.stateUpdatedOn).getTime(), + new Date(res.meta!.stateUpdatedOn!).getTime(), ), ); return new Date(max); @@ -35,15 +36,19 @@ export function useDashboardsLastUpdated( } export function useDashboards( - instanceId: string, + client: RuntimeClient, ): CreateQueryResult { - return createRuntimeServiceListResources(instanceId, undefined, { - query: { - select: (data) => { - return data.resources.filter((res) => res.canvas || res.explore); + return createRuntimeServiceListResources( + client, + {}, + { + query: { + select: (data) => { + return data.resources.filter((res) => res.canvas || res.explore); + }, + enabled: !!client.instanceId, + refetchInterval: smartRefetchIntervalFunc, }, - enabled: !!instanceId, - refetchInterval: smartRefetchIntervalFunc, }, - }); + ); } diff --git a/web-admin/src/features/projects/download-report.ts b/web-admin/src/features/projects/download-report.ts index f6506526309..3755193b844 100644 --- a/web-admin/src/features/projects/download-report.ts +++ b/web-admin/src/features/projects/download-report.ts @@ -1,18 +1,18 @@ // TODO: move this file once other parts are merged +import { Timestamp } from "@bufbuild/protobuf"; import { - createQueryServiceExportReport, + queryServiceExportReport, type RpcStatus, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createMutation, type CreateMutationOptions, } from "@tanstack/svelte-query"; import type { MutationFunction } from "@tanstack/svelte-query"; -import { get } from "svelte/store"; export type DownloadReportRequest = { - instanceId: string; reportId: string; executionTime: string; originBaseUrl: string; @@ -22,31 +22,29 @@ export type DownloadReportRequest = { export function createDownloadReportMutation< TError = { response: { data: RpcStatus } }, TContext = unknown, ->(options?: { - mutation?: CreateMutationOptions< - Awaited>, - TError, - { data: DownloadReportRequest }, - TContext - >; -}) { +>( + client: RuntimeClient, + options?: { + mutation?: CreateMutationOptions< + Awaited>, + TError, + { data: DownloadReportRequest }, + TContext + >; + }, +) { const { mutation: mutationOptions } = options ?? {}; - const exporter = createQueryServiceExportReport(); const mutationFn: MutationFunction< Awaited>, { data: DownloadReportRequest } > = async (props) => { const { data } = props ?? {}; - if (!data.instanceId) throw new Error("Missing instanceId"); - const exportResp = await get(exporter).mutateAsync({ - instanceId: data.instanceId, + const exportResp = await queryServiceExportReport(client, { report: data.reportId, - data: { - executionTime: data.executionTime, - originBaseUrl: data.originBaseUrl, - }, + executionTime: Timestamp.fromJson(data.executionTime), + originBaseUrl: data.originBaseUrl, }); const downloadUrl = `${data.host}${exportResp.downloadUrlPath}`; window.open(downloadUrl, "_self"); diff --git a/web-admin/src/features/projects/selectors.ts b/web-admin/src/features/projects/selectors.ts index 08414e86f7c..cff2ecbe642 100644 --- a/web-admin/src/features/projects/selectors.ts +++ b/web-admin/src/features/projects/selectors.ts @@ -20,6 +20,7 @@ import { useResourceV2, } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, type Readable } from "svelte/store"; export function getProjectPermissions(orgName: string, projName: string) { @@ -150,9 +151,9 @@ export async function fetchProjectDeploymentDetails( }; } -export function useGithubLastSynced(instanceId: string) { +export function useGithubLastSynced(client: RuntimeClient) { return useResourceV2( - instanceId, + client, SingletonProjectParserName, ResourceKind.ProjectParser, { diff --git a/web-admin/src/features/projects/status/selectors.ts b/web-admin/src/features/projects/status/selectors.ts index 198da316fdb..30297c7df59 100644 --- a/web-admin/src/features/projects/status/selectors.ts +++ b/web-admin/src/features/projects/status/selectors.ts @@ -9,7 +9,8 @@ import { type V1OlapTableInfo, type V1Resource, } from "@rilldata/web-common/runtime-client"; -import { connectorServiceOLAPListTables } from "@rilldata/web-common/runtime-client/gen/connector-service/connector-service"; +import { connectorServiceOLAPListTables } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createInfiniteQuery } from "@tanstack/svelte-query"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { derived, type Readable } from "svelte/store"; @@ -49,9 +50,9 @@ export function filterResourcesForDisplay( ); } -export function useResources(instanceId: string) { +export function useResources(client: RuntimeClient) { return createRuntimeServiceListResources( - instanceId, + client, {}, { query: { @@ -81,7 +82,7 @@ export function useResources(instanceId: string) { */ export function useInfiniteTablesList( params: Readable<{ - instanceId: string; + client: RuntimeClient; connector: string; searchPattern?: string; }>, @@ -90,18 +91,17 @@ export function useInfiniteTablesList( queryKey: [ "/v1/olap/tables-infinite", { - instanceId: $p.instanceId, + instanceId: $p.client.instanceId, connector: $p.connector, searchPattern: $p.searchPattern, }, ], - enabled: !!$p.instanceId && !!$p.connector, + enabled: !!$p.client.instanceId && !!$p.connector, initialPageParam: undefined as string | undefined, getNextPageParam: (lastPage: { nextPageToken?: string }) => lastPage?.nextPageToken || undefined, queryFn: ({ pageParam }: { pageParam?: string }) => - connectorServiceOLAPListTables({ - instanceId: $p.instanceId, + connectorServiceOLAPListTables($p.client, { connector: $p.connector, searchPattern: $p.searchPattern, pageToken: pageParam, @@ -142,24 +142,28 @@ export function buildModelResourcesMap( /** * Fetches model resources and maps them by their result table name. */ -export function useModelResources(instanceId: string) { +export function useModelResources(client: RuntimeClient) { return createRuntimeServiceListResources( - instanceId, + client, { kind: ResourceKind.Model }, { query: { select: (data: V1ListResourcesResponse) => buildModelResourcesMap(data.resources), - enabled: !!instanceId, + enabled: !!client.instanceId, }, }, ); } -export function useRuntimeVersion() { - return createRuntimeServicePing({ - query: { - staleTime: 60000, // Cache for 1 minute +export function useRuntimeVersion(client: RuntimeClient) { + return createRuntimeServicePing( + client, + {}, + { + query: { + staleTime: 60000, // Cache for 1 minute + }, }, - }); + ); } diff --git a/web-admin/src/features/public-urls/CreatePublicURLForm.svelte b/web-admin/src/features/public-urls/CreatePublicURLForm.svelte index eb3633a9783..6959c4ca998 100644 --- a/web-admin/src/features/public-urls/CreatePublicURLForm.svelte +++ b/web-admin/src/features/public-urls/CreatePublicURLForm.svelte @@ -21,7 +21,7 @@ import { useTimeControlStore } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { copyToClipboard } from "@rilldata/web-common/lib/actions/copy-to-clipboard"; - import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; + import type { HTTPError } from "@rilldata/web-common/lib/errors"; import { useQueryClient } from "@tanstack/svelte-query"; import { Pencil } from "lucide-svelte"; import { DateTime } from "luxon"; diff --git a/web-admin/src/features/scheduled-reports/selectors.ts b/web-admin/src/features/scheduled-reports/selectors.ts index eccb3973b4a..88ff2d22e4c 100644 --- a/web-admin/src/features/scheduled-reports/selectors.ts +++ b/web-admin/src/features/scheduled-reports/selectors.ts @@ -5,17 +5,18 @@ import { createRuntimeServiceGetResource, createRuntimeServiceListResources, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { smartRefetchIntervalFunc } from "@rilldata/web-admin/lib/refetch-interval-store"; -export function useReports(instanceId: string, enabled = true) { +export function useReports(client: RuntimeClient, enabled = true) { return createRuntimeServiceListResources( - instanceId, + client, { kind: ResourceKind.Report, }, { query: { - enabled: enabled && !!instanceId, + enabled: enabled && !!client.instanceId, refetchOnMount: true, refetchInterval: smartRefetchIntervalFunc, }, @@ -23,24 +24,22 @@ export function useReports(instanceId: string, enabled = true) { ); } -export function useReport(instanceId: string, name: string) { - return createRuntimeServiceGetResource(instanceId, { - "name.name": name, - "name.kind": ResourceKind.Report, +export function useReport(client: RuntimeClient, name: string) { + return createRuntimeServiceGetResource(client, { + name: { name, kind: ResourceKind.Report }, }); } -export function useReportDashboardName(instanceId: string, name: string) { +export function useReportDashboardName(client: RuntimeClient, name: string) { return createRuntimeServiceGetResource( - instanceId, + client, { - "name.name": name, - "name.kind": ResourceKind.Report, + name: { name, kind: ResourceKind.Report }, }, { query: { select: (data) => - getDashboardNameFromReport(data.resource?.report?.spec), + getDashboardNameFromReport(data.resource?.report?.spec!), }, }, ); @@ -67,12 +66,11 @@ export function useReportOwnerName( ); } -export function useIsReportCreatedByCode(instanceId: string, name: string) { +export function useIsReportCreatedByCode(client: RuntimeClient, name: string) { return createRuntimeServiceGetResource( - instanceId, + client, { - "name.name": name, - "name.kind": ResourceKind.Report, + name: { name, kind: ResourceKind.Report }, }, { query: { diff --git a/web-admin/src/lib/refetch-interval-store.ts b/web-admin/src/lib/refetch-interval-store.ts index 1b9f65994a4..ce0d154209a 100644 --- a/web-admin/src/lib/refetch-interval-store.ts +++ b/web-admin/src/lib/refetch-interval-store.ts @@ -2,7 +2,7 @@ import type { V1ListResourcesResponse, V1Resource, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; import type { Query } from "@tanstack/svelte-query"; export const INITIAL_REFETCH_INTERVAL = 200; // Start at 200ms for immediate feedback diff --git a/web-admin/src/routes/[organization]/[project]/+layout.svelte b/web-admin/src/routes/[organization]/[project]/+layout.svelte index 46f07e16c6e..04bc3e7de2b 100644 --- a/web-admin/src/routes/[organization]/[project]/+layout.svelte +++ b/web-admin/src/routes/[organization]/[project]/+layout.svelte @@ -53,7 +53,7 @@ import { metricsService } from "@rilldata/web-common/metrics/initMetrics"; import RuntimeProvider from "@rilldata/web-common/runtime-client/v2/RuntimeProvider.svelte"; import { RUNTIME_ACCESS_TOKEN_DEFAULT_TTL } from "@rilldata/web-common/runtime-client/constants"; - import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; + import type { HTTPError } from "@rilldata/web-common/lib/errors"; import type { AuthContext } from "@rilldata/web-common/runtime-client/v2/runtime-client"; import type { CreateQueryOptions } from "@tanstack/svelte-query"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; diff --git a/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts index 921436f721e..fe85f7cfd16 100644 --- a/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts @@ -1,6 +1,6 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.js"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; -import { isHTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper.js"; +import { isHTTPError } from "@rilldata/web-common/lib/errors"; import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client/query-options"; import { error } from "@sveltejs/kit"; diff --git a/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts b/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts index 5d3f0906696..059f040f91f 100644 --- a/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts +++ b/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts @@ -14,5 +14,5 @@ export const load: PageLoad = async ({ params, url, parent }) => { const query = getQueryFromUrl(url); // Open the query (this'll redirect to the relevant Explore page) - await openQuery({ query, organization, project, runtime }); + await openQuery({ query, organization, project, runtime: runtime! }); }; diff --git a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts index 80f70692a77..1c2549d79ae 100644 --- a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts @@ -1,6 +1,6 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.js"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; -import { isHTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper.js"; +import { isHTTPError } from "@rilldata/web-common/lib/errors"; import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client/query-options"; import { error } from "@sveltejs/kit"; diff --git a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte index cab71cf2217..b587ed9f460 100644 --- a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte @@ -5,16 +5,17 @@ import CtaContentContainer from "@rilldata/web-common/components/calls-to-action/CTAContentContainer.svelte"; import CtaLayoutContainer from "@rilldata/web-common/components/calls-to-action/CTALayoutContainer.svelte"; import CtaMessage from "@rilldata/web-common/components/calls-to-action/CTAMessage.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; + + const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = $runtime); $: organization = $page.params.organization; $: project = $page.params.project; $: reportId = $page.params.report; $: executionTime = $page.url.searchParams.get("execution_time"); $: token = $page.url.searchParams.get("token"); - const downloadReportMutation = createDownloadReportMutation(); + const downloadReportMutation = createDownloadReportMutation(runtimeClient); let downloadOnce = false; async function triggerDownload() { @@ -22,16 +23,15 @@ downloadOnce = true; await $downloadReportMutation.mutateAsync({ data: { - instanceId, reportId, executionTime, originBaseUrl: window.location.origin, - host: $runtime.host, + host: runtimeClient.host, }, }); } - $: if (reportId && $runtime) { + $: if (reportId && runtimeClient) { triggerDownload(); } diff --git a/web-common/src/features/alerts/AlertForm.svelte b/web-common/src/features/alerts/AlertForm.svelte index f2bd439a89a..7ef181ff6e3 100644 --- a/web-common/src/features/alerts/AlertForm.svelte +++ b/web-common/src/features/alerts/AlertForm.svelte @@ -118,7 +118,7 @@ $: ({ filters, timeControls } = props.mode === "create" ? getNewAlertInitialFiltersFormValues( - instanceId, + runtimeClient, metricsViewName, exploreName, $exploreState!, diff --git a/web-common/src/features/alerts/alert-preview-data.ts b/web-common/src/features/alerts/alert-preview-data.ts index 1b417ee3d87..c9477098fc1 100644 --- a/web-common/src/features/alerts/alert-preview-data.ts +++ b/web-common/src/features/alerts/alert-preview-data.ts @@ -51,14 +51,13 @@ export function getAlertPreviewData( ): CreateQueryResult { return derived( [ - useExploreValidSpec(client.instanceId, formValues.exploreName), + useExploreValidSpec(client, formValues.exploreName), filters.getStore(), timeControls.getStore(), ], ([validExploreSpec, filtersState, timeControlsState], set) => createQueryServiceMetricsViewAggregation( - client.instanceId, - formValues.metricsViewName, + client, getAlertPreviewQueryRequest( formValues, filtersState, diff --git a/web-common/src/features/alerts/create-alert-utils.ts b/web-common/src/features/alerts/create-alert-utils.ts index b728d1b50a2..5622fb71421 100644 --- a/web-common/src/features/alerts/create-alert-utils.ts +++ b/web-common/src/features/alerts/create-alert-utils.ts @@ -9,6 +9,7 @@ import { ExploreMetricsViewMetadata } from "@rilldata/web-common/features/dashbo import { TimeControls } from "@rilldata/web-common/features/dashboards/stores/TimeControls.ts"; import { getInitialScheduleFormValues } from "@rilldata/web-common/features/scheduled-reports/time-utils.ts"; import { V1Operation } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export function getNewAlertInitialFormValues( metricsViewName: string, @@ -53,13 +54,13 @@ export function getNewAlertInitialFormValues( } export function getNewAlertInitialFiltersFormValues( - instanceId: string, + client: RuntimeClient, metricsViewName: string, exploreName: string, exploreState: Partial, ) { const metricsViewMetadata = new ExploreMetricsViewMetadata( - instanceId, + client, metricsViewName, exploreName, ); diff --git a/web-common/src/features/alerts/delivery-tab/notifiers-utils.ts b/web-common/src/features/alerts/delivery-tab/notifiers-utils.ts index be0b4699c5a..96f695d2feb 100644 --- a/web-common/src/features/alerts/delivery-tab/notifiers-utils.ts +++ b/web-common/src/features/alerts/delivery-tab/notifiers-utils.ts @@ -1,9 +1,14 @@ import { createRuntimeServiceListNotifierConnectors } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; -export function getHasSlackConnection(runtimeId: string) { - return createRuntimeServiceListNotifierConnectors(runtimeId, { - query: { - select: (data) => !!data.connectors?.some((c) => c.name === "slack"), +export function getHasSlackConnection(client: RuntimeClient) { + return createRuntimeServiceListNotifierConnectors( + client, + {}, + { + query: { + select: (data) => !!data.connectors?.some((c) => c.name === "slack"), + }, }, - }); + ); } diff --git a/web-common/src/features/canvas/components/markdown/util.ts b/web-common/src/features/canvas/components/markdown/util.ts index 4c9c130a21d..0af9508634a 100644 --- a/web-common/src/features/canvas/components/markdown/util.ts +++ b/web-common/src/features/canvas/components/markdown/util.ts @@ -10,6 +10,7 @@ import type { QueryServiceResolveTemplatedStringBody, } from "@rilldata/web-common/runtime-client"; import { getQueryServiceResolveTemplatedStringQueryOptions } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived } from "svelte/store"; import type { ParsedFilters } from "../../stores/filter-state"; import type { Readable } from "svelte/motion"; @@ -127,7 +128,7 @@ function buildRequestBody(params: { export function getResolveTemplatedStringQueryOptions( component: MarkdownCanvasComponent, - instanceId: string, + client: RuntimeClient, ): Readable< ReturnType > { @@ -166,7 +167,7 @@ export function getResolveTemplatedStringQueryOptions( const enabled = !!needsTemplating && !!content && - !!instanceId && + !!client.instanceId && !!requestBody && (!hasTimeSeries || !!timeAndFilters?.timeRange); @@ -177,9 +178,12 @@ export function getResolveTemplatedStringQueryOptions( const queryEnabled = enabled && !!requestBody; + // Cast needed: QueryServiceResolveTemplatedStringBody uses string + // timestamps while the v2 proto request expects Timestamp objects; + // the v2 fromJson layer handles the conversion at runtime. return getQueryServiceResolveTemplatedStringQueryOptions( - instanceId, - body, + client, + body as any, { query: { enabled: queryEnabled, diff --git a/web-common/src/features/canvas/components/pivot/util.ts b/web-common/src/features/canvas/components/pivot/util.ts index ce81a4969f6..385e3c26103 100644 --- a/web-common/src/features/canvas/components/pivot/util.ts +++ b/web-common/src/features/canvas/components/pivot/util.ts @@ -268,6 +268,7 @@ export const usePivotForCanvas = ( pivotConfig: Readable, ) => { const pivotDashboardContext: PivotDashboardContext = { + runtimeClient: canvas.client, metricsViewName: metricsViewStore, queryClient: queryClient, enabled: !!canvas, diff --git a/web-common/src/features/canvas/state-managers/state-managers.ts b/web-common/src/features/canvas/state-managers/state-managers.ts index 4434a04fde7..cb45af80ca7 100644 --- a/web-common/src/features/canvas/state-managers/state-managers.ts +++ b/web-common/src/features/canvas/state-managers/state-managers.ts @@ -67,7 +67,12 @@ export function setCanvasStore( return canvasRegistry.get(id)!; } - const canvasEntity = new CanvasEntity(canvasName, instanceId, response); + const canvasEntity = new CanvasEntity( + canvasName, + instanceId, + response, + runtimeClient!, + ); const store: CanvasStore = { runtimeClient: runtimeClient!, canvasEntity, diff --git a/web-common/src/features/canvas/stores/time-state.ts b/web-common/src/features/canvas/stores/time-state.ts index 437c1556c8e..ed6370b970c 100644 --- a/web-common/src/features/canvas/stores/time-state.ts +++ b/web-common/src/features/canvas/stores/time-state.ts @@ -156,12 +156,7 @@ export class TimeState { } const promises = metricsViewsWithTimeSeries.map((mvName) => { - return deriveInterval( - range, - this.parent.instanceId, - mvName, - timeZone, - ); + return deriveInterval(range, this.parent.client, mvName, timeZone); }); Promise.all(promises) diff --git a/web-common/src/features/chat/core/citation-url-utils.ts b/web-common/src/features/chat/core/citation-url-utils.ts index b263ce4ac32..ec5335b7a83 100644 --- a/web-common/src/features/chat/core/citation-url-utils.ts +++ b/web-common/src/features/chat/core/citation-url-utils.ts @@ -1,6 +1,5 @@ import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { - getRuntimeServiceGetAIMessageQueryKey, type V1GetAIMessageResponse, type V1Message, } from "@rilldata/web-common/runtime-client"; diff --git a/web-common/src/features/chat/core/context/picker/data/canvases.ts b/web-common/src/features/chat/core/context/picker/data/canvases.ts index b66f5555de3..f15a9b9b77d 100644 --- a/web-common/src/features/chat/core/context/picker/data/canvases.ts +++ b/web-common/src/features/chat/core/context/picker/data/canvases.ts @@ -30,7 +30,6 @@ export function getCanvasesPickerOptions( ); const lastUsedCanvasNameStore = getLastUsedCanvasNameStore(client); const activeCanvasNameStore = getCanvasNameStore(); - const instanceId = client.instanceId; return derived( [canvasResourcesQuery, lastUsedCanvasNameStore, activeCanvasNameStore], @@ -58,7 +57,7 @@ export function getCanvasesPickerOptions( } satisfies PickerItem; const childrenQueryOptions = getCanvasComponentsQueryOptions( - instanceId, + client, canvasPickerItem, uiState.getExpandedStore(canvasPickerItem.id), ); @@ -86,16 +85,15 @@ export function getCanvasesPickerOptions( } function getCanvasComponentsQueryOptions( - instanceId: string, + client: RuntimeClient, canvasPickerItem: PickerItem, enabledStore: Readable, ) { const canvas = canvasPickerItem.context.canvas!; return derived(enabledStore, (enabled) => getQueryServiceResolveCanvasQueryOptions( - instanceId, - canvas, - {}, + client, + { canvas }, { query: { select: (data): PickerItem[] => { diff --git a/web-common/src/features/chat/core/context/picker/data/models.ts b/web-common/src/features/chat/core/context/picker/data/models.ts index ceba9c6aaa2..d2baeebab8e 100644 --- a/web-common/src/features/chat/core/context/picker/data/models.ts +++ b/web-common/src/features/chat/core/context/picker/data/models.ts @@ -38,7 +38,6 @@ export function getModelsPickerOptions( return derived( [modelResourcesQuery, activeResourceStore], ([modelResourcesResp, activeResource], set) => { - const instanceId = client.instanceId; const models = modelResourcesResp.data ?? []; const modelPickerItems: PickerItem[] = []; const modelQueryOptions: ReturnType< @@ -64,7 +63,7 @@ export function getModelsPickerOptions( } satisfies PickerItem; const childrenQueryOptions = getModelColumnsQueryOptions( - instanceId, + client, res, modelPickerItem, uiState.getExpandedStore(modelPickerItem.id), @@ -93,7 +92,7 @@ export function getModelsPickerOptions( } function getModelColumnsQueryOptions( - instanceId: string, + client: RuntimeClient, modelRes: V1Resource | undefined, modelPickerItem: PickerItem, enabledStore: Readable, @@ -102,9 +101,9 @@ function getModelColumnsQueryOptions( const table = modelRes?.model?.state?.resultTable ?? ""; return derived(enabledStore, (enabled) => getQueryServiceTableColumnsQueryOptions( - instanceId, - table, + client, { + tableName: table, connector, }, { diff --git a/web-common/src/features/chat/core/conversation-manager.ts b/web-common/src/features/chat/core/conversation-manager.ts index 8937ae816ff..f634408360b 100644 --- a/web-common/src/features/chat/core/conversation-manager.ts +++ b/web-common/src/features/chat/core/conversation-manager.ts @@ -87,7 +87,7 @@ export class ConversationManager { RpcStatus > { return createQuery( - getRuntimeServiceListConversationsQueryOptions(this.instanceId, { + getRuntimeServiceListConversationsQueryOptions(this.client, { // Filter to only show Rill client conversations, excluding MCP conversations userAgentPattern: "rill%", }), diff --git a/web-common/src/features/chat/core/conversation.spec.ts b/web-common/src/features/chat/core/conversation.spec.ts index c36fed1aef2..b354cf9d34e 100644 --- a/web-common/src/features/chat/core/conversation.spec.ts +++ b/web-common/src/features/chat/core/conversation.spec.ts @@ -46,7 +46,9 @@ const FORKED_CONVERSATION_ID = "forked-conv-456"; // ============================================================================= function getCacheKey(conversationId: string) { - return getRuntimeServiceGetConversationQueryKey(INSTANCE_ID, conversationId); + return getRuntimeServiceGetConversationQueryKey(INSTANCE_ID, { + conversationId, + }); } function getCachedData(conversationId: string) { diff --git a/web-common/src/features/chat/core/conversation.ts b/web-common/src/features/chat/core/conversation.ts index 83452d72b71..c3fb0dd1ada 100644 --- a/web-common/src/features/chat/core/conversation.ts +++ b/web-common/src/features/chat/core/conversation.ts @@ -25,7 +25,7 @@ import { type Readable, type Writable, } from "svelte/store"; -import type { HTTPError } from "../../../runtime-client/fetchWrapper"; +import type { HTTPError } from "../../../lib/errors"; import type { FeedbackCategory, FeedbackSentiment, @@ -108,8 +108,8 @@ export class Conversation { this.conversationIdStore, ($conversationId) => getRuntimeServiceGetConversationQueryOptions( - this.instanceId, - $conversationId, + this.client, + { conversationId: $conversationId }, { query: { enabled: $conversationId !== NEW_CONVERSATION_ID, @@ -487,11 +487,11 @@ export class Conversation { // This ensures the UI shows the conversation history immediately const originalCacheKey = getRuntimeServiceGetConversationQueryKey( this.instanceId, - originalConversationId, + { conversationId: originalConversationId }, ); const forkedCacheKey = getRuntimeServiceGetConversationQueryKey( this.instanceId, - forkedConversationId, + { conversationId: forkedConversationId }, ); const originalData = queryClient.getQueryData(originalCacheKey); @@ -520,12 +520,12 @@ export class Conversation { private transitionToRealConversation(realConversationId: string): void { const oldCacheKey = getRuntimeServiceGetConversationQueryKey( this.instanceId, - this.conversationId, // This is still "new" + { conversationId: this.conversationId }, // This is still "new" ); const newCacheKey = getRuntimeServiceGetConversationQueryKey( this.instanceId, - realConversationId, + { conversationId: realConversationId }, ); // Get existing data from "new" conversation cache @@ -578,10 +578,9 @@ export class Conversation { * Add message to TanStack Query cache */ private addMessageToCache(message: V1Message): void { - const cacheKey = getRuntimeServiceGetConversationQueryKey( - this.instanceId, - this.conversationId, - ); + const cacheKey = getRuntimeServiceGetConversationQueryKey(this.instanceId, { + conversationId: this.conversationId, + }); queryClient.setQueryData(cacheKey, (old) => { if (!old?.conversation) { // Create initial conversation structure if it doesn't exist @@ -613,10 +612,9 @@ export class Conversation { * Remove message from TanStack Query cache (for rollback) */ private removeMessageFromCache(messageId: string): void { - const cacheKey = getRuntimeServiceGetConversationQueryKey( - this.instanceId, - this.conversationId, - ); + const cacheKey = getRuntimeServiceGetConversationQueryKey(this.instanceId, { + conversationId: this.conversationId, + }); queryClient.setQueryData(cacheKey, (old) => { if (!old?.conversation) return old; diff --git a/web-common/src/features/chat/core/messages/text/citation-url-mapper.spec.ts b/web-common/src/features/chat/core/messages/text/citation-url-mapper.spec.ts index 2b62c147dc7..12058586b67 100644 --- a/web-common/src/features/chat/core/messages/text/citation-url-mapper.spec.ts +++ b/web-common/src/features/chat/core/messages/text/citation-url-mapper.spec.ts @@ -31,7 +31,9 @@ const MetricsResolverQueryURLEncoded = encodeURIComponent( describe("mapMetricsResolverQueryToUrlParams", () => { beforeAll(() => { const metricsViewTimeRangeQueryKey = - getQueryServiceMetricsViewTimeRangeQueryKey("", AD_BIDS_METRICS_NAME, {}); + getQueryServiceMetricsViewTimeRangeQueryKey("", { + metricsViewName: AD_BIDS_METRICS_NAME, + }); queryClient.setQueryData(metricsViewTimeRangeQueryKey, { timeRangeSummary: AD_BIDS_TIME_RANGE_SUMMARY, }); @@ -132,6 +134,7 @@ describe("mapMetricsResolverQueryToUrlParams", () => { for (const { title, url, expectedUrl } of testCases) { it(title, () => { const result = mapMetricsResolverQueryToUrl( + "", new URL(url), mockPage, MockMetricsViewAndExploreSpecs, diff --git a/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts b/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts index 7ef4185c712..650cf52a2da 100644 --- a/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts +++ b/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts @@ -1,5 +1,4 @@ import type { Conversation } from "@rilldata/web-common/features/chat/core/conversation.ts"; -import type { ErrorType } from "@rilldata/web-common/runtime-client/http-client.ts"; import type { RpcStatus, V1Message } from "@rilldata/web-common/runtime-client"; import { getMetricsViewAndExploreSpecsQueryOptions, @@ -33,7 +32,7 @@ const DASHBOARD_CITATION_URL_PATHNAME_REGEX = export function getMetricsResolverQueryToUrlMapperStore( conversation: Conversation, ): Readable<{ - error: ErrorType | null; + error: Error | null; isLoading: boolean; data?: (url: URL) => string; }> { @@ -61,6 +60,7 @@ export function getMetricsResolverQueryToUrlMapperStore( const mapper = (url: URL): string => mapMetricsResolverQueryToUrl( + conversation.runtimeClient.instanceId, url, page, metricsViewAndExploreSpecs, @@ -77,6 +77,7 @@ export function getMetricsResolverQueryToUrlMapperStore( } export function mapMetricsResolverQueryToUrl( + instanceId: string, url: URL, pageState: Page, { @@ -127,6 +128,7 @@ export function mapMetricsResolverQueryToUrl( ); const urlSearchParams = maybeGetExplorePageUrlSearchParams( + instanceId, partialExploreState, metricsViewSpec, exploreSpec, diff --git a/web-common/src/features/chat/core/utils.ts b/web-common/src/features/chat/core/utils.ts index 04d164073ce..cf299b8cab9 100644 --- a/web-common/src/features/chat/core/utils.ts +++ b/web-common/src/features/chat/core/utils.ts @@ -82,7 +82,7 @@ export function invalidateConversationsList(instanceId: string) { */ export function getLatestConversationQueryOptions(client: RuntimeClient) { const listConversationsQueryOptions = - getRuntimeServiceListConversationsQueryOptions(client.instanceId, { + getRuntimeServiceListConversationsQueryOptions(client, { // Filter to only show Rill client conversations, excluding MCP conversations userAgentPattern: "rill%", }); @@ -98,8 +98,8 @@ export function getLatestConversationQueryOptions(client: RuntimeClient) { return derived([lastConversationId], ([id]) => { return getRuntimeServiceGetConversationQueryOptions( - client.instanceId, - id ?? "", + client, + { conversationId: id ?? "" }, { query: { enabled: !!id, diff --git a/web-common/src/features/chat/share/ShareChatPopover.svelte b/web-common/src/features/chat/share/ShareChatPopover.svelte index e2805351a31..c4fac9b55f8 100644 --- a/web-common/src/features/chat/share/ShareChatPopover.svelte +++ b/web-common/src/features/chat/share/ShareChatPopover.svelte @@ -7,7 +7,7 @@ PopoverTrigger, } from "@rilldata/web-common/components/popover"; import { createRuntimeServiceShareConversation } from "@rilldata/web-common/runtime-client"; - import { isHTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; + import { isHTTPError } from "@rilldata/web-common/lib/errors"; import { Check, Link, Share } from "lucide-svelte"; export let conversationId: string | undefined = undefined; diff --git a/web-common/src/features/connectors/code-utils.spec.ts b/web-common/src/features/connectors/code-utils.spec.ts index 1062b04fcbb..a6a9dca9c46 100644 --- a/web-common/src/features/connectors/code-utils.spec.ts +++ b/web-common/src/features/connectors/code-utils.spec.ts @@ -1,5 +1,6 @@ import { describe, expect, it, vi, beforeEach } from "vitest"; import type { V1ConnectorDriver } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { replaceOlapConnectorInYAML, replaceOrAddEnvVariable, @@ -818,6 +819,10 @@ describe("compileConnectorYAML", () => { }); describe("updateDotEnvWithSecrets", () => { + const mockClient = { + instanceId: "test-instance-id", + } as unknown as RuntimeClient; + // Track fetchQuery calls so tests can inspect them let mockEnvBlob = ""; const mockQueryClient = { @@ -842,7 +847,7 @@ describe("updateDotEnvWithSecrets", () => { sql: "SELECT 1", }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -866,7 +871,7 @@ describe("updateDotEnvWithSecrets", () => { }, }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -883,7 +888,7 @@ describe("updateDotEnvWithSecrets", () => { const connector: V1ConnectorDriver = { name: "clickhouse" }; const formValues: Record = { password: "new_pw" }; const { newBlob, originalBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -901,7 +906,7 @@ describe("updateDotEnvWithSecrets", () => { const connector: V1ConnectorDriver = { name: "clickhouse" }; const formValues: Record = { password: "new_value" }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -919,7 +924,7 @@ describe("updateDotEnvWithSecrets", () => { dsn: undefined, }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -937,7 +942,7 @@ describe("updateDotEnvWithSecrets", () => { ], }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -955,7 +960,7 @@ describe("updateDotEnvWithSecrets", () => { headers: [{ key: "Authorization", value: "Bearer abc123" }], }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -972,7 +977,7 @@ describe("updateDotEnvWithSecrets", () => { headers: [{ key: "X-API-Key", value: "raw_api_key_value" }], }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -988,7 +993,7 @@ describe("updateDotEnvWithSecrets", () => { headers: [{ key: "Authorization", value: "Token secret_tok" }], }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -1008,7 +1013,7 @@ describe("updateDotEnvWithSecrets", () => { ], }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, @@ -1020,7 +1025,7 @@ describe("updateDotEnvWithSecrets", () => { it("should invalidate cache before reading .env", async () => { const connector: V1ConnectorDriver = { name: "clickhouse" }; await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, { password: "pw" }, @@ -1041,7 +1046,7 @@ describe("updateDotEnvWithSecrets", () => { const connector: V1ConnectorDriver = { name: "clickhouse" }; const { newBlob, originalBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, { password: "pw" }, @@ -1059,7 +1064,7 @@ describe("updateDotEnvWithSecrets", () => { const connector: V1ConnectorDriver = { name: "clickhouse" }; await expect( updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, { password: "pw" }, @@ -1082,7 +1087,7 @@ describe("updateDotEnvWithSecrets", () => { dsn: "clickhouse://...", }; const { newBlob } = await updateDotEnvWithSecrets( - "test-instance-id", + mockClient, mockQueryClient as any, connector, formValues, diff --git a/web-common/src/features/connectors/code-utils.ts b/web-common/src/features/connectors/code-utils.ts index 88bd6b2f81b..04dd91ab613 100644 --- a/web-common/src/features/connectors/code-utils.ts +++ b/web-common/src/features/connectors/code-utils.ts @@ -5,6 +5,7 @@ import { getRuntimeServiceGetFileQueryKey, runtimeServiceGetFile, } from "../../runtime-client"; +import type { RuntimeClient } from "../../runtime-client/v2"; import { fileArtifacts } from "@rilldata/web-common/features/entity-management/file-artifacts"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; @@ -254,7 +255,7 @@ driver: ${driverName}`; } export async function updateDotEnvWithSecrets( - instanceId: string, + client: RuntimeClient, queryClient: QueryClient, connector: V1ConnectorDriver, formValues: Record, @@ -266,7 +267,9 @@ export async function updateDotEnvWithSecrets( // Invalidate the cache to ensure we get fresh .env content // This prevents overwriting credentials added by a previous step await queryClient.invalidateQueries({ - queryKey: getRuntimeServiceGetFileQueryKey(instanceId, { path: ".env" }), + queryKey: getRuntimeServiceGetFileQueryKey(client.instanceId, { + path: ".env", + }), }); // Get the existing .env file with fresh data @@ -274,8 +277,10 @@ export async function updateDotEnvWithSecrets( let originalBlob: string; try { const file = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceGetFileQueryKey(instanceId, { path: ".env" }), - queryFn: () => runtimeServiceGetFile(instanceId, { path: ".env" }), + queryKey: getRuntimeServiceGetFileQueryKey(client.instanceId, { + path: ".env", + }), + queryFn: () => runtimeServiceGetFile(client, { path: ".env" }), }); blob = file.blob || ""; originalBlob = blob; // Keep original for conflict detection @@ -492,16 +497,16 @@ export function makeEnvVarKey( } export async function updateRillYAMLWithOlapConnector( - instanceId: string, + client: RuntimeClient, queryClient: QueryClient, newConnector: string, ): Promise { // Get the existing rill.yaml file const file = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceGetFileQueryKey(instanceId, { + queryKey: getRuntimeServiceGetFileQueryKey(client.instanceId, { path: "rill.yaml", }), - queryFn: () => runtimeServiceGetFile(instanceId, { path: "rill.yaml" }), + queryFn: () => runtimeServiceGetFile(client, { path: "rill.yaml" }), }); const blob = file.blob || ""; @@ -527,7 +532,7 @@ export function replaceOlapConnectorInYAML( } export async function createYamlModelFromTable( - instanceId: string, + client: RuntimeClient, queryClient: QueryClient, connector: string, database: string, @@ -535,10 +540,12 @@ export async function createYamlModelFromTable( table: string, ): Promise<[string, string]> { // Get driver name for makeSufficientlyQualifiedTableName - const analyzeConnectorsQueryKey = - getRuntimeServiceAnalyzeConnectorsQueryKey(instanceId); + const analyzeConnectorsQueryKey = getRuntimeServiceAnalyzeConnectorsQueryKey( + client.instanceId, + {}, + ); const analyzeConnectorsQueryFn = async () => - runtimeServiceAnalyzeConnectors(instanceId); + runtimeServiceAnalyzeConnectors(client, {}); const connectors = await queryClient.fetchQuery({ queryKey: analyzeConnectorsQueryKey, queryFn: analyzeConnectorsQueryFn, @@ -582,7 +589,7 @@ export async function createYamlModelFromTable( .replace("{{ dev_section }}", devSection); // Write the YAML file - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: newModelPath, blob: yamlContent, createOnly: true, @@ -590,14 +597,14 @@ export async function createYamlModelFromTable( // Invalidate relevant queries await queryClient.invalidateQueries({ - queryKey: ["runtimeServiceListFiles", instanceId], + queryKey: ["runtimeServiceListFiles", client.instanceId], }); return ["/" + newModelPath, newModelName]; } export async function createSqlModelFromTable( - instanceId: string, + client: RuntimeClient, queryClient: QueryClient, connector: string, database: string, @@ -606,10 +613,12 @@ export async function createSqlModelFromTable( addDevLimit: boolean = true, ): Promise<[string, string]> { // Get driver name - const analyzeConnectorsQueryKey = - getRuntimeServiceAnalyzeConnectorsQueryKey(instanceId); + const analyzeConnectorsQueryKey = getRuntimeServiceAnalyzeConnectorsQueryKey( + client.instanceId, + {}, + ); const analyzeConnectorsQueryFn = async () => - runtimeServiceAnalyzeConnectors(instanceId); + runtimeServiceAnalyzeConnectors(client, {}); const connectors = await queryClient.fetchQuery({ queryKey: analyzeConnectorsQueryKey, queryFn: analyzeConnectorsQueryFn, @@ -623,16 +632,18 @@ export async function createSqlModelFromTable( const driverName = analyzedConnector.driver?.name as string; // Determine whether the connector is the default OLAP connector - const runtimeInstanceQueryKey = - getRuntimeServiceGetInstanceQueryKey(instanceId); + const runtimeInstanceQueryKey = getRuntimeServiceGetInstanceQueryKey( + client.instanceId, + {}, + ); const runtimeInstanceQueryFn = async () => - runtimeServiceGetInstance(instanceId, { sensitive: true }); + runtimeServiceGetInstance(client, { sensitive: true }); const runtimeInstance = await queryClient.fetchQuery({ queryKey: runtimeInstanceQueryKey, queryFn: runtimeInstanceQueryFn, }); if (!runtimeInstance) { - throw new Error(`Could not find runtime instance ${instanceId}`); + throw new Error(`Could not find runtime instance ${client.instanceId}`); } const isDefaultOLAPConnector = runtimeInstance?.instance?.olapConnector === connector; @@ -675,7 +686,7 @@ export async function createSqlModelFromTable( modelSQL += `\n${devLimit}`; } - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: newModelPath, blob: modelSQL, createOnly: true, diff --git a/web-common/src/features/dashboards/dimension-search/useDimensionSearchResults.ts b/web-common/src/features/dashboards/dimension-search/useDimensionSearchResults.ts index fa48c3c008d..79100ea785a 100644 --- a/web-common/src/features/dashboards/dimension-search/useDimensionSearchResults.ts +++ b/web-common/src/features/dashboards/dimension-search/useDimensionSearchResults.ts @@ -4,6 +4,7 @@ import { type V1MetricsViewSpec, type V1TimeRangeSummary, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived } from "svelte/store"; export type DimensionSearchResult = { @@ -20,7 +21,7 @@ export type DimensionSearchResults = { const BatchSize = 5; export function useDimensionSearchResults( - instanceId: string, + client: RuntimeClient, metricsViewName: string, metricsView: V1MetricsViewSpec, timeRangeSummary: V1TimeRangeSummary, @@ -30,7 +31,8 @@ export function useDimensionSearchResults( const batches = createBatches(dimensions, BatchSize); return derived( batches.map((batch) => - createQueryServiceMetricsViewSearch(instanceId, metricsViewName, { + createQueryServiceMetricsViewSearch(client, { + metricsViewName, dimensions: batch.map((d) => d.name ?? ""), search: searchText, limit: 100, diff --git a/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte b/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte index d74150f4b86..1e8a4fc5e28 100644 --- a/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte +++ b/web-common/src/features/dashboards/dimension-table/DimensionDisplay.svelte @@ -70,7 +70,7 @@ $: ({ name: dimensionName = "" } = dimension); $: selectedValues = selectedDimensionValues( - client.instanceId, + client, [metricsViewName], $dashboardStore.whereFilter, dimensionName, diff --git a/web-common/src/features/dashboards/filters/Filters.svelte b/web-common/src/features/dashboards/filters/Filters.svelte index 45abbfcb8c6..9013843608c 100644 --- a/web-common/src/features/dashboards/filters/Filters.svelte +++ b/web-common/src/features/dashboards/filters/Filters.svelte @@ -235,7 +235,7 @@ const { interval, grain } = await deriveInterval( timeRangeName, - instanceId, + client, metricsViewName, activeTimeZone, column, @@ -298,7 +298,7 @@ const { interval, grain } = await deriveInterval( alias, - instanceId, + client, metricsViewName, tz, selectedTimeDimension, diff --git a/web-common/src/features/dashboards/filters/dimension-filters/dimension-filter-values.ts b/web-common/src/features/dashboards/filters/dimension-filters/dimension-filter-values.ts index 0530c4088fd..dde8b1356f5 100644 --- a/web-common/src/features/dashboards/filters/dimension-filters/dimension-filter-values.ts +++ b/web-common/src/features/dashboards/filters/dimension-filters/dimension-filter-values.ts @@ -13,6 +13,7 @@ import { V1BuiltinMeasure, } from "@rilldata/web-common/runtime-client"; import type { V1Expression } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { mergeDimensionAndMeasureFilters } from "../measure-filters/measure-filter-utils"; import { getFiltersForOtherDimensions } from "../../selectors"; @@ -37,7 +38,7 @@ type DimensionSearchArgs = { * even if they're not in the top 250. */ export function useDimensionSearch( - instanceId: string, + client: RuntimeClient, metricsViewNames: string[], dimensionName: string, { @@ -72,9 +73,9 @@ export function useDimensionSearch( }); return createQueryServiceMetricsViewAggregation( - instanceId, - mvName, + client, { + metricsView: mvName, dimensions: [{ name: dimensionName }], timeRange: { start: timeStart, end: timeEnd, timeDimension }, limit: "250", @@ -128,7 +129,7 @@ export function useDimensionSearch( * 3. For Contains mode, it returns the count of values matching the search text. */ export function useAllSearchResultsCount( - instanceId: string, + client: RuntimeClient, metricsViewNames: string[], dimensionName: string, { @@ -160,9 +161,9 @@ export function useAllSearchResultsCount( }); return createQueryServiceMetricsViewAggregation( - instanceId, - mvName, + client, { + metricsView: mvName, measures: [ { name: dimensionName + "__distinct_count", diff --git a/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts b/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts index a32027c8390..23099d4543e 100644 --- a/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts +++ b/web-common/src/features/dashboards/granular-access-policies/resetSelectedMockUserAfterNavigate.ts @@ -16,8 +16,7 @@ import { get } from "svelte/store"; */ export function resetSelectedMockUserAfterNavigate( queryClient: QueryClient, - instanceId: string, - runtimeClient?: RuntimeClient, + client: RuntimeClient, ) { beforeNavigate(({ to, from }) => { if (!to?.params || !from?.params) return; @@ -26,9 +25,7 @@ export function resetSelectedMockUserAfterNavigate( from.params.name !== to.params.name && get(selectedMockUserStore) !== null ) { - updateDevJWT(queryClient, instanceId, null, runtimeClient).catch( - console.error, - ); + updateDevJWT(queryClient, client, null).catch(console.error); } }); } diff --git a/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts b/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts index e520327be6f..9b05b73d016 100644 --- a/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts +++ b/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts @@ -5,31 +5,24 @@ import { import type { MockUser } from "@rilldata/web-common/features/dashboards/granular-access-policies/useMockUsers"; import { runtimeServiceIssueDevJWT } from "@rilldata/web-common/runtime-client"; import { invalidateAllMetricsViews } from "@rilldata/web-common/runtime-client/invalidation"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryClient } from "@tanstack/svelte-query"; export async function updateDevJWT( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, mockUser: MockUser | null, - runtimeClient?: RuntimeClient, ) { selectedMockUserStore.set(mockUser); if (mockUser === null) { selectedMockUserJWT.set(null); - runtimeClient?.updateJwt(undefined, "user"); - // BRIDGE (temporary): keep global store in sync for unmigrated consumers - runtime.update((runtimeState) => { - runtimeState.jwt = undefined; - return runtimeState; - }); + client.updateJwt(undefined, "user"); } else { try { const { name, email, groups, admin, ...customAttributes } = mockUser; - const { jwt } = await runtimeServiceIssueDevJWT({ + const { jwt } = await runtimeServiceIssueDevJWT(client, { email, name: name || "Mock User", admin: !!admin, @@ -40,20 +33,11 @@ export async function updateDevJWT( if (!jwt) throw new Error("No JWT returned"); selectedMockUserJWT.set(jwt); - runtimeClient?.updateJwt(jwt, "mock"); - // BRIDGE (temporary): keep global store in sync for unmigrated consumers - runtime.update((runtimeState) => { - runtimeState.jwt = { - token: jwt, - receivedAt: Date.now(), - authContext: "mock", - }; - return runtimeState; - }); + client.updateJwt(jwt, "mock"); } catch { // no-op } } - return invalidateAllMetricsViews(queryClient, instanceId); + return invalidateAllMetricsViews(queryClient, client.instanceId); } diff --git a/web-common/src/features/dashboards/granular-access-policies/useMockUsers.ts b/web-common/src/features/dashboards/granular-access-policies/useMockUsers.ts index c72620dab36..897d9fc294e 100644 --- a/web-common/src/features/dashboards/granular-access-policies/useMockUsers.ts +++ b/web-common/src/features/dashboards/granular-access-policies/useMockUsers.ts @@ -1,5 +1,6 @@ import { parseDocument } from "yaml"; import { createRuntimeServiceGetFile } from "../../../runtime-client"; +import type { RuntimeClient } from "../../../runtime-client/v2"; export interface MockUser { email?: string; @@ -9,9 +10,9 @@ export interface MockUser { attributes?: { [key: string]: any }; } -export function useMockUsers(instanceId: string) { +export function useMockUsers(client: RuntimeClient) { return createRuntimeServiceGetFile( - instanceId, + client, { path: `rill.yaml` }, { query: { diff --git a/web-common/src/features/dashboards/granular-access-policies/useSecurityPolicyCheck.ts b/web-common/src/features/dashboards/granular-access-policies/useSecurityPolicyCheck.ts index 337276299ad..074f2ccdfdc 100644 --- a/web-common/src/features/dashboards/granular-access-policies/useSecurityPolicyCheck.ts +++ b/web-common/src/features/dashboards/granular-access-policies/useSecurityPolicyCheck.ts @@ -1,9 +1,13 @@ import { parse } from "yaml"; import { createRuntimeServiceGetFile } from "../../../runtime-client"; +import type { RuntimeClient } from "../../../runtime-client/v2"; -export function useDashboardPolicyCheck(instanceId: string, filePath: string) { +export function useDashboardPolicyCheck( + client: RuntimeClient, + filePath: string, +) { return createRuntimeServiceGetFile( - instanceId, + client, { path: filePath, }, @@ -21,9 +25,9 @@ export function useDashboardPolicyCheck(instanceId: string, filePath: string) { ); } -export function useRillYamlPolicyCheck(instanceId: string) { +export function useRillYamlPolicyCheck(client: RuntimeClient) { return createRuntimeServiceGetFile( - instanceId, + client, { path: "rill.yaml", }, diff --git a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte index 62f27dbb32a..127914e68d3 100644 --- a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte +++ b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte @@ -99,7 +99,7 @@ {parentElement} {timeControlsReady} selectedValues={selectedDimensionValues( - client.instanceId, + client, [metricsViewName], $dashboardStore.whereFilter, dimension.name, diff --git a/web-common/src/features/dashboards/pivot/pivot-data-store.ts b/web-common/src/features/dashboards/pivot/pivot-data-store.ts index e2a68c27113..71fa58519b5 100644 --- a/web-common/src/features/dashboards/pivot/pivot-data-store.ts +++ b/web-common/src/features/dashboards/pivot/pivot-data-store.ts @@ -14,7 +14,7 @@ import type { V1MetricsViewAggregationResponse, V1MetricsViewAggregationSort, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import type { ColumnDef } from "@tanstack/svelte-table"; import { type Readable, derived, readable } from "svelte/store"; diff --git a/web-common/src/features/dashboards/pivot/pivot-expansion.ts b/web-common/src/features/dashboards/pivot/pivot-expansion.ts index b73e7047a29..e5e4f17956f 100644 --- a/web-common/src/features/dashboards/pivot/pivot-expansion.ts +++ b/web-common/src/features/dashboards/pivot/pivot-expansion.ts @@ -15,7 +15,7 @@ import type { V1MetricsViewAggregationResponse, V1MetricsViewAggregationResponseDataItem, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; import type { CreateQueryResult } from "@tanstack/svelte-query"; import { type Readable, derived, readable, writable } from "svelte/store"; import { diff --git a/web-common/src/features/dashboards/pivot/pivot-queries.ts b/web-common/src/features/dashboards/pivot/pivot-queries.ts index 6bc0105970c..543b0c01821 100644 --- a/web-common/src/features/dashboards/pivot/pivot-queries.ts +++ b/web-common/src/features/dashboards/pivot/pivot-queries.ts @@ -12,7 +12,7 @@ import { type V1MetricsViewAggregationResponseDataItem, type V1MetricsViewAggregationSort, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client/v2/gen/query-service"; import { type CreateQueryResult, diff --git a/web-common/src/features/dashboards/pivot/pivot-utils.ts b/web-common/src/features/dashboards/pivot/pivot-utils.ts index 21c29083b78..849a22483fb 100644 --- a/web-common/src/features/dashboards/pivot/pivot-utils.ts +++ b/web-common/src/features/dashboards/pivot/pivot-utils.ts @@ -17,7 +17,7 @@ import type { V1MetricsViewAggregationResponse, V1MetricsViewAggregationSort, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; import type { QueryObserverResult } from "@tanstack/svelte-query"; import type { Row } from "@tanstack/svelte-table"; import { SHOW_MORE_BUTTON } from "./pivot-constants"; diff --git a/web-common/src/features/dashboards/selectors.ts b/web-common/src/features/dashboards/selectors.ts index 1e6238ae361..c0c588b750b 100644 --- a/web-common/src/features/dashboards/selectors.ts +++ b/web-common/src/features/dashboards/selectors.ts @@ -33,19 +33,18 @@ import { } from "@tanstack/svelte-query"; import { derived, type Readable } from "svelte/store"; import type { DimensionThresholdFilter } from "web-common/src/features/dashboards/stores/explore-state"; -import type { ErrorType } from "../../runtime-client/http-client"; export function useMetricsView( - instanceId: string, + client: RuntimeClient, metricsViewName: string, queryOptions?: CreateQueryOptions< V1GetResourceResponse, - ErrorType, + RpcStatus, V1Resource >, ) { return useResource( - instanceId, + client, metricsViewName, ResourceKind.MetricsView, queryOptions, @@ -54,7 +53,7 @@ export function useMetricsView( export function getValidMetricsViewsQueryOptions(client: RuntimeClient) { return getRuntimeServiceListResourcesQueryOptions( - client.instanceId, + client, { kind: ResourceKind.MetricsView, }, @@ -67,23 +66,23 @@ export function getValidMetricsViewsQueryOptions(client: RuntimeClient) { ); } -export function useValidExplores(instanceId: string) { +export function useValidExplores(client: RuntimeClient) { // This is used in cloud as well so do not use "useClientFilteredResources" - return useFilteredResources(instanceId, ResourceKind.Explore, (data) => + return useFilteredResources(client, ResourceKind.Explore, (data) => data?.resources?.filter((res) => !!res.explore?.state?.validSpec), ); } -export function useValidCanvases(instanceId: string) { - return useFilteredResources(instanceId, ResourceKind.Canvas, (data) => +export function useValidCanvases(client: RuntimeClient) { + return useFilteredResources(client, ResourceKind.Canvas, (data) => data?.resources?.filter((res) => !!res.canvas?.state?.validSpec), ); } -export function useValidDashboards(instanceId: string) { +export function useValidDashboards(client: RuntimeClient) { return createRuntimeServiceListResources( - instanceId, - undefined, // TODO: it'd be nice if we could provide multiple kinds here + client, + {}, // TODO: it'd be nice if we could provide multiple kinds here { query: { select: (data) => { @@ -103,11 +102,11 @@ export function useValidDashboards(instanceId: string) { * Use {@link useDashboard} in the metrics view editor and other use cases. */ export const useMetricsViewValidSpec = ( - instanceId: string, + client: RuntimeClient, metricsViewName: string, selector?: (meta: V1MetricsViewSpec) => T, ) => { - return useResource(instanceId, metricsViewName, ResourceKind.MetricsView, { + return useResource(client, metricsViewName, ResourceKind.MetricsView, { select: (data) => selector ? selector(data.resource?.metricsView?.state?.validSpec ?? {}) @@ -116,7 +115,7 @@ export const useMetricsViewValidSpec = ( }; export function useMetricsViewTimeRange( - instanceId: string, + client: RuntimeClient, metricsViewName: string, options?: { query?: CreateQueryOptions; @@ -126,14 +125,13 @@ export function useMetricsViewTimeRange( const { query: queryOptions } = options ?? {}; const fullTimeRangeQueryOptionsStore = derived( - useMetricsViewValidSpec(instanceId, metricsViewName), + useMetricsViewValidSpec(client, metricsViewName), (validSpecResp) => { const metricsViewSpec = validSpecResp.data ?? {}; return getQueryServiceMetricsViewTimeRangeQueryOptions( - instanceId, - metricsViewName, - {}, + client, + { metricsViewName }, { query: { ...queryOptions, @@ -162,9 +160,8 @@ export function getMetricsViewTimeRangeFromExploreQueryOptions( const metricsViewName = exploreSpec.metricsView ?? ""; return getQueryServiceMetricsViewTimeRangeQueryOptions( - client.instanceId, - metricsViewName, - {}, + client, + { metricsViewName }, { query: { enabled: !!metricsViewSpec.timeDimension, @@ -175,20 +172,19 @@ export function getMetricsViewTimeRangeFromExploreQueryOptions( } export function hasValidMetricsViewTimeRange( - instanceId: string, + client: RuntimeClient, exploreName: string, ) { const fullTimeRangeQueryOptionsStore = derived( - useExploreValidSpec(instanceId, exploreName), + useExploreValidSpec(client, exploreName), (validSpecResp) => { const metricsViewSpec = validSpecResp.data?.metricsView ?? {}; const exploreSpec = validSpecResp.data?.explore ?? {}; const metricsViewName = exploreSpec.metricsView ?? ""; return getQueryServiceMetricsViewTimeRangeQueryOptions( - instanceId, - metricsViewName, - {}, + client, + { metricsViewName }, { query: { enabled: Boolean(metricsViewName && metricsViewSpec.timeDimension), @@ -240,11 +236,11 @@ export function additionalMeasures( } export const useGetMetricsViewsForModel = ( - instanceId: string, + client: RuntimeClient, modelName: string, ) => { return useClientFilteredResources( - instanceId, + client, ResourceKind.MetricsView, (res) => res.metricsView?.spec?.model === modelName || @@ -253,11 +249,11 @@ export const useGetMetricsViewsForModel = ( }; export const useGetExploresForMetricsView = ( - instanceId: string, + client: RuntimeClient, metricsViewName: string, ) => { return useClientFilteredResources( - instanceId, + client, ResourceKind.Explore, (res) => res.explore?.spec?.metricsView === metricsViewName, ); diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateDataLoader.ts b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateDataLoader.ts index 9f329af8c36..31f55b88ba5 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateDataLoader.ts +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateDataLoader.ts @@ -19,6 +19,7 @@ import { type V1MetricsViewSpec, type V1MetricsViewTimeRangeResponse, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { AfterNavigate } from "@sveltejs/kit"; import { createQuery, type QueryClient } from "@tanstack/svelte-query"; import { Settings } from "luxon"; @@ -55,7 +56,7 @@ export class DashboardStateDataLoader { >; public constructor( - instanceId: string, + private readonly client: RuntimeClient, private readonly exploreName: string, private readonly storageNamespacePrefix: string | undefined, private readonly bookmarkOrTokenExploreState: @@ -63,9 +64,9 @@ export class DashboardStateDataLoader { | undefined, public readonly disableMostRecentDashboardState: boolean, ) { - this.validSpecQuery = useExploreValidSpec(instanceId, exploreName); + this.validSpecQuery = useExploreValidSpec(client, exploreName); this.fullTimeRangeQuery = this.useFullTimeRangeQuery( - instanceId, + client, this.validSpecQuery, ); @@ -197,7 +198,7 @@ export class DashboardStateDataLoader { * Does an additional validation where null min and max returned throws an error instead. */ private useFullTimeRangeQuery( - instanceId: string, + client: RuntimeClient, validSpecQuery: ReturnType, queryClient?: QueryClient, ): CompoundQueryResult { @@ -216,9 +217,8 @@ export class DashboardStateDataLoader { }; return getQueryServiceMetricsViewTimeRangeQueryOptions( - instanceId, - metricsViewName, - {}, + client, + { metricsViewName }, { query: { enabled: Boolean(metricsViewSpec.timeDimension), diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte index e14d178c360..1b0739484ba 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte @@ -15,7 +15,7 @@ import { isUrlTooLong } from "@rilldata/web-common/features/dashboards/url-state/url-length-limits"; import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; - import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; + import type { HTTPError } from "@rilldata/web-common/lib/errors"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { onDestroy } from "svelte"; @@ -27,15 +27,14 @@ export let disableMostRecentDashboardState: boolean = false; const client = useRuntimeClient(); - const { instanceId } = client; - $: exploreSpecQuery = useExploreValidSpec(instanceId, exploreName); + $: exploreSpecQuery = useExploreValidSpec(client, exploreName); $: exploreSpec = $exploreSpecQuery.data?.explore ?? {}; $: metricsViewName = exploreSpec?.metricsView ?? ""; $: exploreStore = useExploreState(exploreName); $: dataLoader = new DashboardStateDataLoader( - instanceId, + client, exploreName, storageNamespacePrefix, bookmarkOrTokenExploreState, @@ -46,7 +45,7 @@ $: if (dataLoader) { stateSync?.teardown(); stateSync = new DashboardStateSync( - instanceId, + client, metricsViewName, exploreName, storageNamespacePrefix, diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts index 6a1184b4d74..1980c550af7 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateSync.ts @@ -15,6 +15,7 @@ import { import { updateExploreSessionStore } from "@rilldata/web-common/features/dashboards/state-managers/loaders/explore-web-view-store"; import { getCleanedUrlParamsForGoto } from "@rilldata/web-common/features/dashboards/url-state/convert-partial-explore-state-to-url-params"; import { createRillDefaultExploreUrlParams } from "@rilldata/web-common/features/dashboards/url-state/get-rill-default-explore-url-params"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { AfterNavigate } from "@sveltejs/kit"; import { getContext, setContext } from "svelte"; import { derived, get, type Readable } from "svelte/store"; @@ -51,7 +52,7 @@ export class DashboardStateSync { } public constructor( - private readonly instanceId: string, + private readonly client: RuntimeClient, metricsViewName: string, private readonly exploreName: string, private readonly extraPrefix: string | undefined, @@ -59,7 +60,7 @@ export class DashboardStateSync { ) { this.exploreStore = useExploreState(exploreName); this.timeControlStore = createTimeControlStoreFromName( - instanceId, + client, metricsViewName, exploreName, ); @@ -150,7 +151,7 @@ export class DashboardStateSync { initExploreState.selectedTimeRange, // initExploreState.selectedComparisonTimeRange, ] = await resolveTimeRanges( - this.instanceId, + this.client, exploreSpec, [ initExploreState.selectedTimeRange, @@ -246,7 +247,7 @@ export class DashboardStateSync { partialExplore.selectedTimeRange, // partialExplore.selectedComparisonTimeRange, ] = await resolveTimeRanges( - this.instanceId, + this.client, exploreSpec, [ partialExplore.selectedTimeRange, diff --git a/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts b/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts index 879434458e5..34faede12e6 100644 --- a/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts +++ b/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts @@ -14,12 +14,13 @@ import type { V1Expression, } from "@rilldata/web-common/runtime-client"; import { V1Operation } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, readable } from "svelte/store"; import type { AtLeast } from "../types"; import type { DashboardDataSources } from "./types"; export const selectedDimensionValues = ( - instanceId: string, + client: RuntimeClient, metricsViewNames: string[], whereFilter: V1Expression | undefined, dimensionName: string, @@ -65,7 +66,7 @@ export const selectedDimensionValues = ( dimExpr.cond.op === V1Operation.OPERATION_LIKE || dimExpr.cond.op === V1Operation.OPERATION_NLIKE ) { - return useDimensionSearch(instanceId, metricsViewNames, dimensionName, { + return useDimensionSearch(client, metricsViewNames, dimensionName, { mode: DimensionFilterMode.Contains, searchText: (dimExpr.cond?.exprs?.[1]?.val as string) ?? "", values: [], @@ -88,7 +89,7 @@ export const useSelectedValuesForCompareDimension = (ctx: StateManagers) => { [ctx.metricsViewName, ctx.dashboardStore], ([metricsViewName, exploreState], set) => selectedDimensionValues( - ctx.runtimeClient.instanceId, + ctx.runtimeClient, [metricsViewName], exploreState.whereFilter, exploreState.selectedComparisonDimension ?? "", diff --git a/web-common/src/features/dashboards/stores/ExploreMetricsViewMetadata.ts b/web-common/src/features/dashboards/stores/ExploreMetricsViewMetadata.ts index fb15cf97fb8..0673c80aa8c 100644 --- a/web-common/src/features/dashboards/stores/ExploreMetricsViewMetadata.ts +++ b/web-common/src/features/dashboards/stores/ExploreMetricsViewMetadata.ts @@ -7,6 +7,7 @@ import { type MetricsViewSpecDimension, type MetricsViewSpecMeasure, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, type Readable } from "svelte/store"; export class ExploreMetricsViewMetadata { @@ -21,18 +22,18 @@ export class ExploreMetricsViewMetadata { public readonly measureNameMap: Readable>; public constructor( - instanceId: string, + client: RuntimeClient, public readonly metricsViewName: string, exploreName: string, ) { this.validSpecQuery = useExploreValidSpec( - instanceId, + client, exploreName, undefined, queryClient, ); this.timeRangeSummary = useMetricsViewTimeRange( - instanceId, + client, metricsViewName, undefined, queryClient, diff --git a/web-common/src/features/dashboards/time-controls/new-time-controls.ts b/web-common/src/features/dashboards/time-controls/new-time-controls.ts index a07b420820c..a6622fc7fb8 100644 --- a/web-common/src/features/dashboards/time-controls/new-time-controls.ts +++ b/web-common/src/features/dashboards/time-controls/new-time-controls.ts @@ -15,6 +15,7 @@ import type { V1TimeRangeSummary, } from "@rilldata/web-common/runtime-client"; import { V1TimeGrain } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { DateTime, type DateTimeUnit, @@ -165,16 +166,16 @@ class MetricsTimeControls { private _subrange = new IntervalStore(); private _comparisonRange = new IntervalStore(); private _showComparison: Writable = writable(false); - private _instanceId: string; + private _client: RuntimeClient; private _metricsViewName: string; constructor( maxStart: DateTime, maxEnd: DateTime, - instanceId: string, + client: RuntimeClient, metricsViewName: string, ) { - this._instanceId = instanceId; + this._client = client; this._metricsViewName = metricsViewName; const maxInterval = Interval.fromDateTimes( maxStart.setZone("UTC"), @@ -195,7 +196,7 @@ class MetricsTimeControls { if (rightAnchor) { const interval = await deriveInterval( iso, - this._instanceId, + this._client, this._metricsViewName, get(this._zone).name, ); @@ -211,7 +212,7 @@ class MetricsTimeControls { if (rightAnchor) { const interval = await deriveInterval( name, - this._instanceId, + this._client, this._metricsViewName, get(this._zone).name, ); @@ -293,17 +294,17 @@ class TimeControls { get( metricsViewName: string, - instanceId?: string, + client?: RuntimeClient, maxStart?: DateTime, maxEnd?: DateTime, ) { let store = this._timeControls.get(metricsViewName); - if (!store && maxStart && maxEnd && instanceId) { + if (!store && maxStart && maxEnd && client) { store = new MetricsTimeControls( maxStart, maxEnd, - instanceId, + client, metricsViewName, ); this._timeControls.set(metricsViewName, store); @@ -347,7 +348,7 @@ import { getDefaultRangeBuckets } from "@rilldata/web-common/lib/time/defaults"; export async function deriveInterval( name: RillPeriodToDate | RillPreviousPeriod | ISODurationString | string, - instanceId: string, + client: RuntimeClient, metricsViewName: string, activeTimeZone: string, timeDimension?: string, @@ -372,7 +373,7 @@ export async function deriveInterval( const cacheBust = name.includes("now"); const response = await fetchTimeRanges({ - instanceId, + client, metricsViewName, rillTimes: [name], timeZone: activeTimeZone, diff --git a/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts b/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts index a2446e11ec4..4b99ad9dc99 100644 --- a/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts +++ b/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts @@ -5,10 +5,11 @@ import { queryServiceMetricsViewTimeRanges, type V1ExploreSpec, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; export async function resolveTimeRanges( - instanceId: string, + client: RuntimeClient, exploreSpec: V1ExploreSpec, timeRanges: (DashboardTimeControls | undefined)[], timeZone: string | undefined, @@ -43,7 +44,7 @@ export async function resolveTimeRanges( try { const timeRangesResp = await fetchTimeRanges({ - instanceId, + client, metricsViewName, rillTimes, timeZone, @@ -61,7 +62,7 @@ export async function resolveTimeRanges( return timeRangesToReturn; } catch (error) { console.error( - `Failed to resolve time ranges for metrics view ${metricsViewName} in instance ${instanceId}`, + `Failed to resolve time ranges for metrics view ${metricsViewName} in instance ${client.instanceId}`, error, ); return timeRangesToReturn; @@ -69,7 +70,7 @@ export async function resolveTimeRanges( } export async function fetchTimeRanges({ - instanceId, + client, metricsViewName, rillTimes, timeZone, @@ -77,7 +78,7 @@ export async function fetchTimeRanges({ executionTime, cacheBust = false, }: { - instanceId: string; + client: RuntimeClient; metricsViewName: string; rillTimes: string[]; timeDimension?: string | undefined; @@ -86,16 +87,16 @@ export async function fetchTimeRanges({ cacheBust?: boolean; }) { const requestBody = { + metricsViewName, expressions: rillTimes, timeZone, - executionTime, + executionTime: executionTime as any, priority: 100, timeDimension, }; const queryKey = getQueryServiceMetricsViewTimeRangesQueryKey( - instanceId, - metricsViewName, + client.instanceId, requestBody, ); @@ -107,12 +108,7 @@ export async function fetchTimeRanges({ const response = await queryClient.fetchQuery({ queryKey: queryKey, - queryFn: () => - queryServiceMetricsViewTimeRanges( - instanceId, - metricsViewName, - requestBody, - ), + queryFn: () => queryServiceMetricsViewTimeRanges(client, requestBody), staleTime: 60, }); diff --git a/web-common/src/features/dashboards/time-controls/time-control-store.ts b/web-common/src/features/dashboards/time-controls/time-control-store.ts index 79e57ebdd7c..e9e39ca5362 100644 --- a/web-common/src/features/dashboards/time-controls/time-control-store.ts +++ b/web-common/src/features/dashboards/time-controls/time-control-store.ts @@ -246,14 +246,14 @@ export function createTimeControlStore(ctx: StateManagers) { } export function createTimeControlStoreFromName( - instanceId: string, + client: RuntimeClient, metricsViewName: string, exploreName: string, ) { return derived( [ - useExploreValidSpec(instanceId, exploreName, undefined, queryClient), - useMetricsViewTimeRange(instanceId, metricsViewName, {}, queryClient), + useExploreValidSpec(client, exploreName, undefined, queryClient), + useMetricsViewTimeRange(client, metricsViewName, {}, queryClient), useExploreState(exploreName), ], ([validSpecResp, timeRangeSummaryResp, dashboardStore]) => diff --git a/web-common/src/features/dashboards/time-series/annotations-selectors.ts b/web-common/src/features/dashboards/time-series/annotations-selectors.ts index 3af665a6513..32452b88ec0 100644 --- a/web-common/src/features/dashboards/time-series/annotations-selectors.ts +++ b/web-common/src/features/dashboards/time-series/annotations-selectors.ts @@ -13,24 +13,25 @@ import { type V1MetricsViewAnnotationsResponseAnnotation, V1TimeGrain, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { createQuery } from "@tanstack/svelte-query"; import { DateTime, Interval } from "luxon"; import { derived, type Readable } from "svelte/store"; export function getAnnotationsForMeasure({ - instanceId, + client, exploreName, measureName, selectedTimeRange, dashboardTimezone, }: { - instanceId: string; + client: RuntimeClient; exploreName: string; measureName: string; selectedTimeRange: DashboardTimeControls | undefined; dashboardTimezone: string; }): Readable { - const exploreValidSpec = useExploreValidSpec(instanceId, exploreName); + const exploreValidSpec = useExploreValidSpec(client, exploreName); const selectedPeriod = TIME_GRAIN[selectedTimeRange?.interval ?? ""] ?.duration as Period | undefined; @@ -42,14 +43,14 @@ export function getAnnotationsForMeasure({ const metricsViewName = exploreSpec?.metricsView ?? ""; return getQueryServiceMetricsViewAnnotationsQueryOptions( - instanceId, - metricsViewName, + client, { + metricsViewName, timeRange: { - start: selectedTimeRange?.start.toISOString(), - end: selectedTimeRange?.end.toISOString(), + start: selectedTimeRange?.start.toISOString() as any, + end: selectedTimeRange?.end.toISOString() as any, }, - timeGrain: selectedTimeRange?.interval, + timeGrain: selectedTimeRange?.interval as any, measures: [measureName], }, { diff --git a/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts b/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts index 3f62d9cd944..5f566bbaa34 100644 --- a/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts +++ b/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts @@ -97,7 +97,7 @@ export function getDimensionValuesForComparison( let comparisonValues: (string | null)[] = []; if (surface === "chart") { return selectedDimensionValues( - ctx.runtimeClient.instanceId, + ctx.runtimeClient, [name], dashboardStore?.whereFilter, dimensionName, diff --git a/web-common/src/features/editor/FileWorkspaceHeader.svelte b/web-common/src/features/editor/FileWorkspaceHeader.svelte index a4f1c596170..1c730c6585b 100644 --- a/web-common/src/features/editor/FileWorkspaceHeader.svelte +++ b/web-common/src/features/editor/FileWorkspaceHeader.svelte @@ -20,11 +20,9 @@ $: [, fileName] = splitFolderAndFileName(filePath); $: isProtectedFile = PROTECTED_FILES.includes(filePath); - $: ({ instanceId } = runtimeClient); - const onChangeCallback = async (newTitle: string) => { const route = await handleEntityRename( - instanceId, + runtimeClient, newTitle, filePath, fileName, diff --git a/web-common/src/features/entity-management/FileAndResourceWatcher.svelte b/web-common/src/features/entity-management/FileAndResourceWatcher.svelte index 9c16a71e0ac..c9005141abf 100644 --- a/web-common/src/features/entity-management/FileAndResourceWatcher.svelte +++ b/web-common/src/features/entity-management/FileAndResourceWatcher.svelte @@ -18,6 +18,7 @@ export let host: string; export let instanceId: string; + $: fileAndResourceWatcher.setRuntimeClient(runtimeClient); $: fileAndResourceWatcher.setInstanceId(instanceId); $: watcherEndpoint = `${host}/v1/instances/${instanceId}/sse?events=file,resource`; diff --git a/web-common/src/features/entity-management/actions.ts b/web-common/src/features/entity-management/actions.ts index 1e131b7d77d..c5c61ea2c1b 100644 --- a/web-common/src/features/entity-management/actions.ts +++ b/web-common/src/features/entity-management/actions.ts @@ -14,7 +14,7 @@ import { runtimeServiceRenameFile, type RuntimeServicePutFileBody, } from "@rilldata/web-common/runtime-client"; -import { httpRequestQueue } from "@rilldata/web-common/runtime-client/http-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { get } from "svelte/store"; import { FolderNameToResourceKind, @@ -28,23 +28,25 @@ import { import { ResourceKind } from "./resource-selectors"; export async function runtimeServicePutFileAndWaitForReconciliation( - instanceId: string, + client: RuntimeClient, runtimeServicePutFileBody: RuntimeServicePutFileBody, ) { - const projectParserStartingVersion = getProjectParserVersion(instanceId); + const projectParserStartingVersion = getProjectParserVersion( + client.instanceId, + ); - await runtimeServicePutFile(instanceId, runtimeServicePutFileBody); + await runtimeServicePutFile(client, runtimeServicePutFileBody); // Wait for the file to be processed by the parser await waitForProjectParserVersion( - instanceId, + client.instanceId, projectParserStartingVersion + 1, ); } // Resource-level reconciliation export async function waitForResourceReconciliation( - instanceId: string, + client: RuntimeClient, resourceName: string, resourceKind: ResourceKind, ) { @@ -54,9 +56,8 @@ export async function waitForResourceReconciliation( while (true) { attempt++; try { - const resource = await runtimeServiceGetResource(instanceId, { - "name.kind": resourceKind, - "name.name": resourceName, + const resource = await runtimeServiceGetResource(client, { + name: { kind: resourceKind, name: resourceName }, }); // Check if there's a reconcile error @@ -101,7 +102,7 @@ export async function waitForResourceReconciliation( * Returns true if file was found, false if cancelled. */ export async function pollForFileCreation( - instanceId: string, + client: RuntimeClient, filePath: string, abortSignal: AbortSignal, pollIntervalMs: number = 1000, @@ -110,7 +111,7 @@ export async function pollForFileCreation( await new Promise((resolve) => setTimeout(resolve, pollIntervalMs)); try { - await runtimeServiceGetFile(instanceId, { path: filePath }); + await runtimeServiceGetFile(client, { path: filePath }); return true; // success, file exists } catch { // 404 error, file is not ready yet, continue polling @@ -120,7 +121,7 @@ export async function pollForFileCreation( } export async function renameFileArtifact( - instanceId: string, + client: RuntimeClient, fromPath: string, toPath: string, ) { @@ -145,12 +146,12 @@ export async function renameFileArtifact( } try { - await runtimeServiceRenameFile(instanceId, { + await runtimeServiceRenameFile(client, { fromPath, toPath, }); - httpRequestQueue.removeByName(fromName); + client.requestQueue.removeByName(fromName); const topLevelFromFolder = getTopLevelFolder(addLeadingSlash(fromPath)); const topLevelToFolder = getTopLevelFolder(addLeadingSlash(toPath)); @@ -173,7 +174,7 @@ export async function renameFileArtifact( } export async function duplicateFileArtifact( - instanceId: string, + client: RuntimeClient, filePath: string, ): Promise { // Get new file path @@ -187,7 +188,7 @@ export async function duplicateFileArtifact( const fileContent = get(fileArtifact.remoteContent); // Create new file - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: newFilePath, blob: fileContent ?? "", }); @@ -197,18 +198,18 @@ export async function duplicateFileArtifact( } export async function deleteFileArtifact( - instanceId: string, + client: RuntimeClient, filePath: string, force = false, ) { const name = extractFileName(filePath); try { - await runtimeServiceDeleteFile(instanceId, { + await runtimeServiceDeleteFile(client, { path: filePath, force, }); - httpRequestQueue.removeByName(name); + client.requestQueue.removeByName(name); } catch (err) { eventBus.emit("notification", { message: `Failed to delete ${name}: ${extractMessage(err.response?.data?.message ?? err.message)}`, diff --git a/web-common/src/features/entity-management/dag-utils.ts b/web-common/src/features/entity-management/dag-utils.ts index 005e1e16368..1053f7891d0 100644 --- a/web-common/src/features/entity-management/dag-utils.ts +++ b/web-common/src/features/entity-management/dag-utils.ts @@ -3,12 +3,16 @@ import { runtimeServiceListResources, type V1Resource, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { queryClient } from "../../lib/svelte-query/globalQueryClient"; -export async function isLeafResource(resource: V1Resource, instanceId: string) { +export async function isLeafResource( + resource: V1Resource, + client: RuntimeClient, +) { const allResources = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceListResourcesQueryKey(instanceId, undefined), - queryFn: () => runtimeServiceListResources(instanceId, undefined), + queryKey: getRuntimeServiceListResourcesQueryKey(client.instanceId, {}), + queryFn: () => runtimeServiceListResources(client, {}), }); if (!allResources || !allResources.resources) return false; diff --git a/web-common/src/features/entity-management/error-utils.ts b/web-common/src/features/entity-management/error-utils.ts index 243774eec48..01c0acc4bfc 100644 --- a/web-common/src/features/entity-management/error-utils.ts +++ b/web-common/src/features/entity-management/error-utils.ts @@ -1,5 +1,6 @@ import type { V1Resource } from "../../runtime-client"; import { createRuntimeServiceListResources } from "../../runtime-client"; +import type { RuntimeClient } from "../../runtime-client/v2"; import { resourceNameToId } from "./resource-utils"; /** @@ -11,13 +12,13 @@ import { resourceNameToId } from "./resource-utils"; * Cloud viewers, who have no access to the project's resource graph. */ export function createRootCauseErrorQuery( - instanceId: string, + client: RuntimeClient, resource: V1Resource | undefined, errorMessage: string | undefined, ) { return createRuntimeServiceListResources( - instanceId, - undefined, + client, + {}, { query: { enabled: !!errorMessage && !!resource, diff --git a/web-common/src/features/entity-management/file-and-resource-watcher.ts b/web-common/src/features/entity-management/file-and-resource-watcher.ts index 9b44d53acf8..96bb03f5426 100644 --- a/web-common/src/features/entity-management/file-and-resource-watcher.ts +++ b/web-common/src/features/entity-management/file-and-resource-watcher.ts @@ -27,6 +27,7 @@ import { } from "@rilldata/web-common/runtime-client/invalidation"; import { connectorExplorerStore } from "../connectors/explorer/connector-explorer-store"; import { sourceIngestionTracker } from "../sources/sources-store"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { isLeafResource } from "./dag-utils"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { SSEConnectionManager } from "@rilldata/web-common/runtime-client/sse-connection-manager"; @@ -133,11 +134,17 @@ export class FileAndResourceWatcher { } private _instanceId = ""; + private _runtimeClient: RuntimeClient | undefined; public setInstanceId(instanceId: string) { this._instanceId = instanceId; } + public setRuntimeClient(client: RuntimeClient) { + this._runtimeClient = client; + this._instanceId = client.instanceId; + } + private get instanceId() { return this._instanceId; } @@ -176,7 +183,7 @@ export class FileAndResourceWatcher { if (res.path === "/rill.yaml") { // If it's a rill.yaml file, invalidate the dev JWT queries void queryClient.invalidateQueries({ - queryKey: getRuntimeServiceIssueDevJWTQueryKey({}), + queryKey: getRuntimeServiceIssueDevJWTQueryKey(this.instanceId), }); await invalidate("init"); @@ -231,16 +238,14 @@ export class FileAndResourceWatcher { resource: V1Resource | undefined; }>( getRuntimeServiceGetResourceQueryKey(this.instanceId, { - "name.name": res.name.name, - "name.kind": res.name.kind, + name: { name: res.name.name, kind: res.name.kind }, }), )?.resource; // Set the updated resource in the query cache queryClient.setQueryData( getRuntimeServiceGetResourceQueryKey(this.instanceId, { - "name.name": res.name.name, - "name.kind": res.name.kind, + name: { name: res.name.name, kind: res.name.kind }, }), { resource: res?.resource, @@ -305,10 +310,10 @@ export class FileAndResourceWatcher { // Invalidate the connector's list of tables void queryClient.invalidateQueries({ - queryKey: getConnectorServiceOLAPListTablesQueryKey({ - instanceId: this.instanceId, - connector: res.name.name, - }), + queryKey: getConnectorServiceOLAPListTablesQueryKey( + this.instanceId, + { connector: res.name.name }, + ), }); // Done @@ -339,10 +344,10 @@ export class FileAndResourceWatcher { ); for (const connector of connectorsToInvalidate) { void queryClient.invalidateQueries({ - queryKey: getConnectorServiceOLAPListTablesQueryKey({ - instanceId: this.instanceId, - connector: connector, - }), + queryKey: getConnectorServiceOLAPListTablesQueryKey( + this.instanceId, + { connector }, + ), }); } } @@ -375,7 +380,8 @@ export class FileAndResourceWatcher { sourceIngestionTracker.isPending(filePath) && res.resource.meta.specVersion === "1" && // First file version res.resource.meta.stateVersion === "2" && // First ingest is complete - (await isLeafResource(res.resource, this.instanceId)); // Protects against existing projects reconciling anew + this._runtimeClient && + (await isLeafResource(res.resource, this._runtimeClient)); // Protects against existing projects reconciling anew if (isNewSource) { sourceIngestionTracker.trackIngested(filePath); } @@ -385,7 +391,7 @@ export class FileAndResourceWatcher { void queryClient.invalidateQueries({ queryKey: getRuntimeServiceGetModelPartitionsQueryKey( this.instanceId, - res.name.name, + { model: res.name.name }, ), }); } @@ -427,11 +433,9 @@ export class FileAndResourceWatcher { case ResourceKind.Canvas: { void queryClient.refetchQueries({ - queryKey: getQueryServiceResolveCanvasQueryKey( - this.instanceId, - res.name.name, - {}, - ), + queryKey: getQueryServiceResolveCanvasQueryKey(this.instanceId, { + canvas: res.name.name, + }), }); return; } @@ -494,10 +498,10 @@ export class FileAndResourceWatcher { // Invalidate the connector's list of tables void queryClient.invalidateQueries({ - queryKey: getConnectorServiceOLAPListTablesQueryKey({ - instanceId: this.instanceId, - connector: connectorName, - }), + queryKey: getConnectorServiceOLAPListTablesQueryKey( + this.instanceId, + { connector: connectorName }, + ), }); // Done diff --git a/web-common/src/features/entity-management/file-artifact.ts b/web-common/src/features/entity-management/file-artifact.ts index 51a35fbc0b7..fa7f579df05 100644 --- a/web-common/src/features/entity-management/file-artifact.ts +++ b/web-common/src/features/entity-management/file-artifact.ts @@ -131,7 +131,8 @@ export class FileArtifact { const queryFn: QueryFunction< Awaited> - > = ({ signal }) => runtimeServiceGetFile(instanceId, queryParams, signal); + > = ({ signal }) => + runtimeServiceGetFile(this.client, queryParams, { signal }); let fetchedContent: string | undefined = undefined; @@ -239,7 +240,7 @@ export class FileArtifact { try { const fileSavePromise = this.saveState.initiateSave(); - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(this.client, { path: this.path, blob, }); @@ -303,10 +304,10 @@ export class FileArtifact { this.lastStateUpdatedOn = undefined; } - getResource = (queryClient: QueryClient, instanceId: string) => { + getResource = (queryClient: QueryClient) => { return derived(this.resourceName, (name, set) => useResource( - instanceId, + this.client, name?.name as string, name?.kind as ResourceKind, undefined, @@ -317,10 +318,9 @@ export class FileArtifact { getParseError = ( queryClient: QueryClient, - instanceId: string, ): Readable => { const store = derived( - useProjectParser(queryClient, instanceId), + useProjectParser(queryClient, this.client), (projectParser) => { if (projectParser.isFetching) { return get(store); @@ -334,14 +334,11 @@ export class FileArtifact { return store; }; - getAllErrors = ( - queryClient: QueryClient, - instanceId: string, - ): Readable => { + getAllErrors = (queryClient: QueryClient): Readable => { const store = derived( [ - useProjectParser(queryClient, instanceId), - this.getResource(queryClient, instanceId), + useProjectParser(queryClient, this.client), + this.getResource(queryClient), ], ([projectParser, resource]) => { if (projectParser.isFetching || resource.isFetching) { @@ -368,9 +365,9 @@ export class FileArtifact { return store; }; - getHasErrors(queryClient: QueryClient, instanceId: string) { + getHasErrors(queryClient: QueryClient) { return derived( - this.getAllErrors(queryClient, instanceId), + this.getAllErrors(queryClient), (errors) => errors.length > 0, ); } diff --git a/web-common/src/features/entity-management/file-artifacts.ts b/web-common/src/features/entity-management/file-artifacts.ts index 20473e8d7bc..ad2b4fc7bae 100644 --- a/web-common/src/features/entity-management/file-artifacts.ts +++ b/web-common/src/features/entity-management/file-artifacts.ts @@ -39,13 +39,9 @@ export class FileArtifacts { readonly unsavedFiles = new UnsavedFilesStore(); private client!: RuntimeClient; - async init( - client: RuntimeClient, - queryClient: QueryClient, - instanceId: string, - ) { + async init(client: RuntimeClient, queryClient: QueryClient) { this.client = client; - const resources = await fetchResources(queryClient, instanceId); + const resources = await fetchResources(queryClient, client); for (const resource of resources) { switch (resource.meta?.name?.kind) { case ResourceKind.Connector: @@ -59,9 +55,11 @@ export class FileArtifacts { case ResourceKind.API: // set query data for GetResource to avoid refetching data we already have queryClient.setQueryData( - getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.name": resource.meta?.name?.name, - "name.kind": resource.meta?.name?.kind, + getRuntimeServiceGetResourceQueryKey(client.instanceId, { + name: { + name: resource.meta?.name?.name, + kind: resource.meta?.name?.kind, + }, }), { resource, @@ -165,15 +163,14 @@ export class FileArtifacts { */ async checkFileErrors( queryClient: QueryClient, - instanceId: string, filePath: string, ): Promise { const fileArtifact = this.getFileArtifact(filePath); - const hasErrorsStore = fileArtifact.getHasErrors(queryClient, instanceId); + const hasErrorsStore = fileArtifact.getHasErrors(queryClient); const hasErrors = get(hasErrorsStore); if (hasErrors) { - const errors = get(fileArtifact.getAllErrors(queryClient, instanceId)); + const errors = get(fileArtifact.getAllErrors(queryClient)); return errors[0]?.message ?? null; } return null; diff --git a/web-common/src/features/entity-management/file-selectors.ts b/web-common/src/features/entity-management/file-selectors.ts index f42e116be9d..1b1e61676c5 100644 --- a/web-common/src/features/entity-management/file-selectors.ts +++ b/web-common/src/features/entity-management/file-selectors.ts @@ -4,12 +4,16 @@ import { runtimeServiceListFiles, type V1ListFilesResponse, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryClient } from "@tanstack/svelte-query"; -export function useAllFileNames(queryClient: QueryClient, instanceId: string) { +export function useAllFileNames( + queryClient: QueryClient, + client: RuntimeClient, +) { return createRuntimeServiceListFiles( - instanceId, - undefined, + client, + {}, { query: { select: (data) => @@ -31,7 +35,7 @@ export function fileIsMainEntity(filePath: string) { } export function useFileNamesInDirectory( - instanceId: string, + client: RuntimeClient, directoryPath: string, ) { // Ensure the directory path starts with a slash @@ -39,18 +43,22 @@ export function useFileNamesInDirectory( directoryPath = `/${directoryPath}`; } - return createRuntimeServiceListFiles(instanceId, undefined, { - query: { - select: (data) => { - return useFileNamesInDirectorySelector(data, directoryPath); + return createRuntimeServiceListFiles( + client, + {}, + { + query: { + select: (data) => { + return useFileNamesInDirectorySelector(data, directoryPath); + }, }, }, - }); + ); } export async function getFileNamesInDirectory( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, directoryPath: string, ) { // Ensure the directory path starts with a slash @@ -61,9 +69,8 @@ export async function getFileNamesInDirectory( // Fetch all files in the project // (For now, we fetch all files at once, rather than individual requests for each directory.) const allFiles = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceListFilesQueryKey(instanceId, undefined), - queryFn: ({ signal }) => - runtimeServiceListFiles(instanceId, undefined, signal), + queryKey: getRuntimeServiceListFilesQueryKey(client.instanceId, {}), + queryFn: ({ signal }) => runtimeServiceListFiles(client, {}, { signal }), }); // Get the file names in the given directory @@ -112,7 +119,7 @@ export function useFileNamesInDirectorySelector( } export function useDirectoryNamesInDirectory( - instanceId: string, + client: RuntimeClient, directoryPath: string, ) { // Ensure the directory path starts with a slash @@ -120,13 +127,17 @@ export function useDirectoryNamesInDirectory( directoryPath = `/${directoryPath}`; } - return createRuntimeServiceListFiles(instanceId, undefined, { - query: { - select: (data) => { - return useDirectoryNamesInDirectorySelector(data, directoryPath); + return createRuntimeServiceListFiles( + client, + {}, + { + query: { + select: (data) => { + return useDirectoryNamesInDirectorySelector(data, directoryPath); + }, }, }, - }); + ); } export function useDirectoryNamesInDirectorySelector( diff --git a/web-common/src/features/entity-management/project-parser.ts b/web-common/src/features/entity-management/project-parser.ts index ea5f78ae3f9..688347e5289 100644 --- a/web-common/src/features/entity-management/project-parser.ts +++ b/web-common/src/features/entity-management/project-parser.ts @@ -8,8 +8,10 @@ import { ResourceKind, SingletonProjectParserName } from "./resource-selectors"; export function getProjectParserVersion(instanceId: string) { const projectParserQuery = queryClient.getQueryData( getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.kind": ResourceKind.ProjectParser, - "name.name": SingletonProjectParserName, + name: { + kind: ResourceKind.ProjectParser, + name: SingletonProjectParserName, + }, }), ); @@ -29,8 +31,10 @@ export async function waitForProjectParserVersion( while (currentVersion < version) { const projectParserQuery = queryClient.getQueryData( getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.kind": ResourceKind.ProjectParser, - "name.name": SingletonProjectParserName, + name: { + kind: ResourceKind.ProjectParser, + name: SingletonProjectParserName, + }, }), ); diff --git a/web-common/src/features/entity-management/resource-invalidations.ts b/web-common/src/features/entity-management/resource-invalidations.ts index 6c3cce99623..240231eb0f3 100644 --- a/web-common/src/features/entity-management/resource-invalidations.ts +++ b/web-common/src/features/entity-management/resource-invalidations.ts @@ -11,8 +11,7 @@ export function refreshResource( ) { return queryClient.setQueryData( getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.name": res.meta?.name?.name, - "name.kind": res.meta?.name?.kind, + name: { name: res.meta?.name?.name, kind: res.meta?.name?.kind }, }), { resource: res, diff --git a/web-common/src/features/entity-management/resource-selectors.ts b/web-common/src/features/entity-management/resource-selectors.ts index 9a987c7995f..3b24767f96a 100644 --- a/web-common/src/features/entity-management/resource-selectors.ts +++ b/web-common/src/features/entity-management/resource-selectors.ts @@ -15,7 +15,6 @@ import { type V1Resource, } from "@rilldata/web-common/runtime-client"; import type { CreateQueryOptions, QueryClient } from "@tanstack/svelte-query"; -import type { ErrorType } from "../../runtime-client/http-client"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; @@ -142,28 +141,27 @@ export function coerceResourceKind(res: V1Resource): ResourceKind | undefined { } export function useResource( - instanceId: string, + client: RuntimeClient, name: string, kind: ResourceKind, queryOptions?: Partial< CreateQueryOptions< V1GetResourceResponse, - ErrorType, + RpcStatus, T // T is the return type of the `select` function > >, queryClient?: QueryClient, ) { return createRuntimeServiceGetResource( - instanceId, + client, { - "name.kind": kind, - "name.name": name, + name: { kind, name }, }, { query: { select: (data) => data?.resource as T, - enabled: !!instanceId && !!name && !!kind, + enabled: !!client.instanceId && !!name && !!kind, ...queryOptions, }, }, @@ -177,28 +175,27 @@ export function useResource( * any `queryOptions`, not just `select` and `queryClient`. */ export function useResourceV2( - instanceId: string, + client: RuntimeClient, name: string, kind: ResourceKind, queryOptions?: Partial< CreateQueryOptions< V1GetResourceResponse, - ErrorType, + RpcStatus, T // T is the return type of the `select` function > >, queryClient?: QueryClient, ) { return createRuntimeServiceGetResource( - instanceId, + client, { - "name.kind": kind, - "name.name": name, + name: { kind, name }, }, { query: { select: (data) => data?.resource as T, - enabled: !!instanceId && !!name && !!kind, + enabled: !!client.instanceId && !!name && !!kind, ...queryOptions, }, }, @@ -208,13 +205,13 @@ export function useResourceV2( export function useProjectParser( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, queryOptions?: Partial< - CreateQueryOptions, V1Resource> + CreateQueryOptions >, ) { return useResource( - instanceId, + client, SingletonProjectParserName, ResourceKind.ProjectParser, queryOptions, @@ -223,13 +220,13 @@ export function useProjectParser( } export function useFilteredResources>( - instanceId: string, + client: RuntimeClient, kind: ResourceKind, selector: (data: V1ListResourcesResponse) => T = (data) => data.resources as T, ) { return createRuntimeServiceListResources( - instanceId, + client, { kind: kind, }, @@ -247,18 +244,22 @@ export function useFilteredResources>( * This is to improve network requests since we need the full list all the time as well. */ export function useClientFilteredResources( - instanceId: string, + client: RuntimeClient, kind: ResourceKind, filter: (res: V1Resource) => boolean = () => true, ) { - return createRuntimeServiceListResources(instanceId, undefined, { - query: { - select: (data) => - data.resources?.filter( - (res) => res.meta?.name?.kind === kind && filter(res), - ) ?? [], + return createRuntimeServiceListResources( + client, + {}, + { + query: { + select: (data) => + data.resources?.filter( + (res) => res.meta?.name?.kind === kind && filter(res), + ) ?? [], + }, }, - }); + ); } /** @@ -270,8 +271,8 @@ export function getClientFilteredResourcesQueryOptions( filter: (res: V1Resource) => boolean = () => true, ) { return getRuntimeServiceListResourcesQueryOptions( - client.instanceId, - undefined, + client, + {}, { query: { select: (data) => @@ -292,19 +293,17 @@ export function resourceIsLoading(resource?: V1Resource) { export async function fetchResource( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, name: string, kind: ResourceKind, ) { const resp = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.name": name, - "name.kind": kind, + queryKey: getRuntimeServiceGetResourceQueryKey(client.instanceId, { + name: { name, kind }, }), queryFn: () => - runtimeServiceGetResource(instanceId, { - "name.name": name, - "name.kind": kind, + runtimeServiceGetResource(client, { + name: { name, kind }, }), }); return resp.resource; @@ -312,11 +311,11 @@ export async function fetchResource( export async function fetchResources( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, ) { const resp = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceListResourcesQueryKey(instanceId), - queryFn: () => runtimeServiceListResources(instanceId, {}), + queryKey: getRuntimeServiceListResourcesQueryKey(client.instanceId, {}), + queryFn: () => runtimeServiceListResources(client, {}), }); return resp.resources ?? []; } @@ -330,8 +329,8 @@ export function getMetricsViewAndExploreSpecsQueryOptions( client: RuntimeClient, ) { return getRuntimeServiceListResourcesQueryOptions( - client.instanceId, - undefined, + client, + {}, { query: { select: (data) => { diff --git a/web-common/src/features/entity-management/ui-actions.ts b/web-common/src/features/entity-management/ui-actions.ts index 47e4423bda3..380eb1f5b8c 100644 --- a/web-common/src/features/entity-management/ui-actions.ts +++ b/web-common/src/features/entity-management/ui-actions.ts @@ -7,11 +7,12 @@ import { VALID_NAME_PATTERN, } from "@rilldata/web-common/features/entity-management/name-utils"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { queryClient } from "../../lib/svelte-query/globalQueryClient"; import { getFileNamesInDirectory } from "./file-selectors"; export async function handleEntityRename( - instanceId: string, + client: RuntimeClient, newName: string, existingPath: string, existingName: string, @@ -30,7 +31,7 @@ export async function handleEntityRename( // Check if the new name is already in use const fileNamesInDirectory = await getFileNamesInDirectory( queryClient, - instanceId, + client, folder, ); if (isDuplicateName(newName, existingName, fileNamesInDirectory)) { @@ -45,7 +46,7 @@ export async function handleEntityRename( try { const newFilePath = (folder ? `${folder}/` : "/") + newName; - await renameFileArtifact(instanceId, existingPath, newFilePath); + await renameFileArtifact(client, existingPath, newFilePath); return `/files/${removeLeadingSlash(newFilePath)}`; } catch (err) { diff --git a/web-common/src/features/explore-mappers/explore-validation.ts b/web-common/src/features/explore-mappers/explore-validation.ts index 0c7d0767959..09453ed1d2f 100644 --- a/web-common/src/features/explore-mappers/explore-validation.ts +++ b/web-common/src/features/explore-mappers/explore-validation.ts @@ -1,5 +1,6 @@ import { useGetExploresForMetricsView } from "@rilldata/web-common/features/dashboards/selectors"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, type Readable } from "svelte/store"; import type { DashboardSelectionCriteria, @@ -11,13 +12,10 @@ import type { * Validates if explore dashboards are available for the given metrics view */ export function useExploreAvailability( - instanceId: string, + client: RuntimeClient, metricsViewName: string, ): Readable { - const exploresQuery = useGetExploresForMetricsView( - instanceId, - metricsViewName, - ); + const exploresQuery = useGetExploresForMetricsView(client, metricsViewName); return derived(exploresQuery, (data) => { if (data.error) { diff --git a/web-common/src/features/explore-mappers/generate-explore-link.ts b/web-common/src/features/explore-mappers/generate-explore-link.ts index 9b969a6274e..65946b1c325 100644 --- a/web-common/src/features/explore-mappers/generate-explore-link.ts +++ b/web-common/src/features/explore-mappers/generate-explore-link.ts @@ -2,13 +2,14 @@ import type { ExploreState } from "@rilldata/web-common/features/dashboards/stor import { createLinkError } from "@rilldata/web-common/features/explore-mappers/explore-validation"; import { ExploreLinkErrorType } from "@rilldata/web-common/features/explore-mappers/types"; import { getExplorePageUrlSearchParams } from "@rilldata/web-common/features/explore-mappers/utils"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { EmbedStore } from "@rilldata/web-common/features/embeds/embed-store.ts"; /** * Generates the explore page URL with proper search parameters */ export async function generateExploreLink( - instanceId: string, + client: RuntimeClient, exploreState: Partial, exploreName: string, organization?: string | undefined, @@ -20,7 +21,7 @@ export async function generateExploreLink( // Generate search parameters from explore state const searchParams = await getExplorePageUrlSearchParams( - instanceId, + client, exploreName, exploreState, ); diff --git a/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.spec.ts b/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.spec.ts index 475cfd44e2f..0a5775533c5 100644 --- a/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.spec.ts +++ b/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.spec.ts @@ -32,6 +32,7 @@ import { V1Operation, V1TimeGrain, } from "@rilldata/web-common/runtime-client"; +import { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { beforeEach, describe, expect, it } from "vitest"; describe("getDashboardFromAggregationRequest", () => { @@ -339,8 +340,12 @@ async function runTest({ ignoreFilters: boolean; forceOpenPivot: boolean; }) { + const mockClient = new RuntimeClient({ + host: "http://localhost:9009", + instanceId: "default", + }); const mapQueryStore = mapQueryToDashboard( - "default", + mockClient, { exploreName: AD_BIDS_EXPLORE_NAME, queryName: "MetricsViewAggregation", diff --git a/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.ts b/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.ts index d481386808f..8cb4e50cdbf 100644 --- a/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.ts +++ b/web-common/src/features/explore-mappers/get-dashboard-from-aggregation-request.ts @@ -51,7 +51,7 @@ import type { SortingState } from "@tanstack/svelte-table"; export async function getDashboardFromAggregationRequest({ queryClient, - instanceId, + client, req, dashboard, timeRangeSummary, @@ -66,7 +66,6 @@ export async function getDashboardFromAggregationRequest({ if (exploreProtoState) { await mergeDashboardFromUrlState( queryClient, - instanceId, dashboard, metricsView, explore, @@ -76,7 +75,7 @@ export async function getDashboardFromAggregationRequest({ } await fillTimeRange( - instanceId, + client, explore, dashboard, req.timeRange, @@ -105,7 +104,7 @@ export async function getDashboardFromAggregationRequest({ // We do not support comparison based dimension threshold filter in dashboards right now. // So convert it to a toplist and add `in` filter. const expr = await convertQueryFilterToToplistQuery( - instanceId, + client, explore.metricsView ?? "", req, dimension, @@ -213,7 +212,6 @@ function exprHasComparison(expr: V1Expression) { async function mergeDashboardFromUrlState( queryClient: QueryClient, - instanceId: string, exploreState: ExploreState, metricsViewSpec: V1MetricsViewSpec, exploreSpec: V1ExploreSpec, diff --git a/web-common/src/features/explore-mappers/get-dashboard-from-comparison-request.ts b/web-common/src/features/explore-mappers/get-dashboard-from-comparison-request.ts index 13dc0e6fe94..1d242fc77c8 100644 --- a/web-common/src/features/explore-mappers/get-dashboard-from-comparison-request.ts +++ b/web-common/src/features/explore-mappers/get-dashboard-from-comparison-request.ts @@ -9,7 +9,7 @@ import { } from "@rilldata/web-common/runtime-client"; export async function getDashboardFromComparisonRequest({ - instanceId, + client, req, dashboard, metricsView, @@ -20,7 +20,7 @@ export async function getDashboardFromComparisonRequest({ if (req.where) dashboard.whereFilter = req.where; await fillTimeRange( - instanceId, + client, explore, dashboard, req.timeRange, diff --git a/web-common/src/features/explore-mappers/get-mapped-explore-url.ts b/web-common/src/features/explore-mappers/get-mapped-explore-url.ts index aa68fee3e8c..183ee3e3c2f 100644 --- a/web-common/src/features/explore-mappers/get-mapped-explore-url.ts +++ b/web-common/src/features/explore-mappers/get-mapped-explore-url.ts @@ -8,11 +8,12 @@ import { mapQueryToDashboard, } from "@rilldata/web-common/features/explore-mappers/map-to-explore.ts"; import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors.ts"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import { derived, readable } from "svelte/store"; export type MapExploreUrlContext = { - instanceId: string; + client: RuntimeClient; organization: string; project: string; token?: string; @@ -26,7 +27,7 @@ export type MapExploreUrlContext = { export function getMappedExploreUrl( req: MapQueryRequest, // Request object passed directly to mapQueryToDashboard opts: MapQueryStateOptions, // Map options passed directly to mapQueryToDashboard - { instanceId, organization, project, token }: MapExploreUrlContext, + { client, organization, project, token }: MapExploreUrlContext, ) { if (!req.queryArgsJson) return readable(""); const queryRequestProperties = JSON.parse(req.queryArgsJson); @@ -37,14 +38,9 @@ export function getMappedExploreUrl( return derived( [ - useExploreValidSpec(instanceId, req.exploreName, undefined, queryClient), - useMetricsViewTimeRange( - instanceId, - metricsViewName, - undefined, - queryClient, - ), - mapQueryToDashboard(instanceId, req, opts), + useExploreValidSpec(client, req.exploreName, undefined, queryClient), + useMetricsViewTimeRange(client, metricsViewName, undefined, queryClient), + mapQueryToDashboard(client, req, opts), page, ], ([validSpecResp, timeRangeSummaryResp, dashboardState, pageState]) => { diff --git a/web-common/src/features/explore-mappers/map-to-explore.ts b/web-common/src/features/explore-mappers/map-to-explore.ts index ea46b9c81ba..89b85350471 100644 --- a/web-common/src/features/explore-mappers/map-to-explore.ts +++ b/web-common/src/features/explore-mappers/map-to-explore.ts @@ -16,6 +16,7 @@ import { type V1MetricsViewAggregationRequest, type V1MetricsViewComparisonRequest, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, readable, type Readable } from "svelte/store"; export type MapQueryRequest = { @@ -43,7 +44,7 @@ export type MapQueryResponse = { * Used to show the relevant dashboard for a report/alert. */ export function mapQueryToDashboard( - instanceId: string, + client: RuntimeClient, { exploreName, queryName, queryArgsJson, executionTime }: MapQueryRequest, { exploreProtoState, @@ -105,12 +106,11 @@ export function mapQueryToDashboard( return derived( [ - useExploreValidSpec(instanceId, exploreName, undefined, queryClient), + useExploreValidSpec(client, exploreName, undefined, queryClient), // TODO: handle non-timestamp dashboards createQueryServiceMetricsViewTimeRange( - instanceId, - metricsViewName, - {}, + client, + { metricsViewName }, undefined, queryClient, ), @@ -130,8 +130,7 @@ export function mapQueryToDashboard( isFetching: false, isLoading: false, error: new Error( - validSpecResp.error?.response?.data?.message ?? - timeRangeSummary.error?.response?.data?.message, + validSpecResp.error?.message ?? timeRangeSummary.error?.message, ), }); return; @@ -179,7 +178,7 @@ export function mapQueryToDashboard( }; getDashboardState({ queryClient, - instanceId, + client, dashboard: defaultExploreState, req: queryRequestProperties, metricsView, diff --git a/web-common/src/features/explore-mappers/open-query.ts b/web-common/src/features/explore-mappers/open-query.ts index 7217580eaab..0ae88ae58aa 100644 --- a/web-common/src/features/explore-mappers/open-query.ts +++ b/web-common/src/features/explore-mappers/open-query.ts @@ -202,8 +202,7 @@ async function generateExploreLink( ), queryKey: getQueryServiceMetricsViewTimeRangeQueryKey( runtime.instanceId, - metricsViewName, - {}, + { metricsViewName }, ), staleTime: Infinity, gcTime: Infinity, diff --git a/web-common/src/features/explore-mappers/types.ts b/web-common/src/features/explore-mappers/types.ts index 44278008df3..2d3c5871d80 100644 --- a/web-common/src/features/explore-mappers/types.ts +++ b/web-common/src/features/explore-mappers/types.ts @@ -9,6 +9,7 @@ import type { V1MetricsViewToplistRequest, V1TimeRangeSummary, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryClient } from "@tanstack/svelte-query"; export type QueryRequests = @@ -22,7 +23,7 @@ export type TransformerProperties = QueryRequests; export type TransformerArgs = { queryClient: QueryClient; - instanceId: string; + client: RuntimeClient; dashboard: ExploreState; req: R; metricsView: V1MetricsViewSpec; diff --git a/web-common/src/features/explore-mappers/utils.ts b/web-common/src/features/explore-mappers/utils.ts index b96c97fb726..4fa93e42653 100644 --- a/web-common/src/features/explore-mappers/utils.ts +++ b/web-common/src/features/explore-mappers/utils.ts @@ -32,6 +32,7 @@ import { type V1TimeRange, type V1TimeRangeSummary, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; // We are manually sending in duration, offset and round to grain for previous complete ranges. // This is to map back that split const PreviousCompleteRangeReverseMap: Record = {}; @@ -43,7 +44,7 @@ for (const preset in PreviousCompleteRangeMap) { } export async function fillTimeRange( - instanceId: string, + client: RuntimeClient, exploreSpec: V1ExploreSpec, exploreState: ExploreState, reqTimeRange: V1TimeRange | undefined, @@ -100,7 +101,7 @@ export async function fillTimeRange( // Resolve time range overriding ref to `executionTime` and set to custom. // This keeps the time range consistent regardless of when the link is opened. [exploreState.selectedTimeRange] = await resolveTimeRanges( - instanceId, + client, exploreSpec, [exploreState.selectedTimeRange], exploreState.selectedTimezone, @@ -122,22 +123,21 @@ export function getExploreName(webOpenPath: string) { } export async function convertQueryFilterToToplistQuery( - instanceId: string, + client: RuntimeClient, metricsView: string, req: V1MetricsViewAggregationRequest, dimension: string, ) { - const params = { + const params = { + metricsViewName: metricsView, ...req, }; const toplist = await queryClient.fetchQuery({ queryKey: getQueryServiceMetricsViewAggregationQueryKey( - instanceId, - metricsView, + client.instanceId, params, ), - queryFn: () => - queryServiceMetricsViewAggregation(instanceId, metricsView, params), + queryFn: () => queryServiceMetricsViewAggregation(client, params), }); return createInExpression( dimension, @@ -146,20 +146,20 @@ export async function convertQueryFilterToToplistQuery( } export async function getExplorePageUrlSearchParams( - instanceId: string, + client: RuntimeClient, exploreName: string, exploreState: Partial, ): Promise { const { explore, metricsView } = await queryClient.fetchQuery({ queryFn: ({ signal }) => runtimeServiceGetExplore( - instanceId, + client, { name: exploreName, }, - signal, + { signal }, ), - queryKey: getRuntimeServiceGetExploreQueryKey(instanceId, { + queryKey: getRuntimeServiceGetExploreQueryKey(client.instanceId, { name: exploreName, }), // this loader function is run for every param change in url. @@ -178,12 +178,10 @@ export async function getExplorePageUrlSearchParams( ) { fullTimeRange = await queryClient.fetchQuery({ queryFn: () => - queryServiceMetricsViewTimeRange(instanceId, metricsViewName, {}), - queryKey: getQueryServiceMetricsViewTimeRangeQueryKey( - instanceId, + queryServiceMetricsViewTimeRange(client, { metricsViewName }), + queryKey: getQueryServiceMetricsViewTimeRangeQueryKey(client.instanceId, { metricsViewName, - {}, - ), + }), staleTime: Infinity, gcTime: Infinity, }); @@ -223,11 +221,9 @@ export function maybeGetExplorePageUrlSearchParams( const metricsViewName = exploreSpec.metricsView ?? ""; const metricsViewTimeRangeQueryKey = - getQueryServiceMetricsViewTimeRangeQueryKey( - instanceId, + getQueryServiceMetricsViewTimeRangeQueryKey(instanceId, { metricsViewName, - {}, - ); + }); // Get time range query from cache if present, else we will go to `/-/open-query` to fetch it. const queryResp = queryClient.getQueryData( diff --git a/web-common/src/features/explores/selectors.ts b/web-common/src/features/explores/selectors.ts index 39cba132490..73dab153cab 100644 --- a/web-common/src/features/explores/selectors.ts +++ b/web-common/src/features/explores/selectors.ts @@ -15,24 +15,19 @@ import { type V1MetricsViewSpec, getRuntimeServiceGetExploreQueryOptions, } from "@rilldata/web-common/runtime-client"; -import type { ErrorType } from "@rilldata/web-common/runtime-client/http-client"; import { error } from "@sveltejs/kit"; import { derived, type Readable } from "svelte/store"; export function useExplore( - instanceId: string, + client: RuntimeClient, exploreName: string, queryOptions?: Partial< - CreateQueryOptions< - V1GetExploreResponse, - ErrorType, - V1GetExploreResponse - > + CreateQueryOptions >, queryClient?: QueryClient, ) { return createRuntimeServiceGetExplore( - instanceId, + client, { name: exploreName }, { query: queryOptions, @@ -46,19 +41,19 @@ export type ExploreValidSpecResponse = { metricsView: V1MetricsViewSpec | undefined; }; export function useExploreValidSpec( - instanceId: string, + client: RuntimeClient, exploreName: string, queryOptions?: Partial< CreateQueryOptions< V1GetExploreResponse, - ErrorType, + RpcStatus, ExploreValidSpecResponse > >, queryClient?: QueryClient, ) { return createRuntimeServiceGetExplore( - instanceId, + client, { name: exploreName }, { query: { @@ -82,7 +77,7 @@ export function getExploreValidSpecQueryOptions( ) { return derived([exploreNameStore], ([exploreName]) => getRuntimeServiceGetExploreQueryOptions( - client.instanceId, + client, { name: exploreName, }, @@ -100,16 +95,19 @@ export function getExploreValidSpecQueryOptions( } export async function fetchExploreSpec( - instanceId: string, + client: RuntimeClient, exploreName: string, ) { const queryParams = { name: exploreName, }; - const queryKey = getRuntimeServiceGetExploreQueryKey(instanceId, queryParams); + const queryKey = getRuntimeServiceGetExploreQueryKey( + client.instanceId, + queryParams, + ); const queryFunction: QueryFunction< Awaited> - > = ({ signal }) => runtimeServiceGetExplore(instanceId, queryParams, signal); + > = ({ signal }) => runtimeServiceGetExplore(client, queryParams, { signal }); const response = await queryClient.fetchQuery({ queryFn: queryFunction, diff --git a/web-common/src/features/feature-flags.ts b/web-common/src/features/feature-flags.ts index 426b3a587ae..8f223ada5e7 100644 --- a/web-common/src/features/feature-flags.ts +++ b/web-common/src/features/feature-flags.ts @@ -79,8 +79,8 @@ class FeatureFlags { this.flagsUnsub?.(); this.flagsUnsub = createRuntimeServiceGetInstance( - client.instanceId, - undefined, + client, + {}, { query: { select: (data) => data?.instance?.featureFlags, diff --git a/web-common/src/features/file-explorer/new-files.ts b/web-common/src/features/file-explorer/new-files.ts index 87d9f952bf5..1d300dd8b0b 100644 --- a/web-common/src/features/file-explorer/new-files.ts +++ b/web-common/src/features/file-explorer/new-files.ts @@ -46,9 +46,7 @@ export async function createResourceFile( } const newPath = getPathForNewResourceFile(kind, baseResource); - const instanceId = client.instanceId; - - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: newPath, blob: generateBlobForNewResourceFile(kind, baseResource), create: true, diff --git a/web-common/src/features/file-explorer/transform-file-list.ts b/web-common/src/features/file-explorer/transform-file-list.ts index 1b9b1da8ffa..44fbfe4b385 100644 --- a/web-common/src/features/file-explorer/transform-file-list.ts +++ b/web-common/src/features/file-explorer/transform-file-list.ts @@ -82,9 +82,7 @@ export function getDirectoryHasErrors( ) { return derived( flattenDirectory(dir).map((filePath) => - fileArtifacts - .getFileArtifact(filePath) - .getAllErrors(queryClient, instanceId), + fileArtifacts.getFileArtifact(filePath).getAllErrors(queryClient), ), (filesErrors) => filesErrors.some((fileErrors) => fileErrors.length > 0), ); diff --git a/web-common/src/features/metrics-views/MetricsInspector.svelte b/web-common/src/features/metrics-views/MetricsInspector.svelte index 12ba7e59919..e1700263f34 100644 --- a/web-common/src/features/metrics-views/MetricsInspector.svelte +++ b/web-common/src/features/metrics-views/MetricsInspector.svelte @@ -22,8 +22,8 @@ $: fileArtifact = fileArtifacts.getFileArtifact(filePath); $: ({ remoteContent } = fileArtifact); - $: parseError = fileArtifact.getParseError(queryClient, instanceId); - $: resource = fileArtifact.getResource(queryClient, instanceId); + $: parseError = fileArtifact.getParseError(queryClient); + $: resource = fileArtifact.getResource(queryClient); $: ({ isLoading: isResourceLoading, error: resourceError, diff --git a/web-common/src/features/metrics-views/create-and-preview-explore.ts b/web-common/src/features/metrics-views/create-and-preview-explore.ts index e15010933e2..e9e6b887474 100644 --- a/web-common/src/features/metrics-views/create-and-preview-explore.ts +++ b/web-common/src/features/metrics-views/create-and-preview-explore.ts @@ -23,7 +23,7 @@ export async function createAndPreviewExplore( // Wait until the Explore resource is ready const fileArtifact = fileArtifacts.getFileArtifact(filePath); - const resource = fileArtifact.getResource(queryClient, instanceId); + const resource = fileArtifact.getResource(queryClient); await waitUntil(() => { return get(resource).data !== undefined; diff --git a/web-common/src/features/metrics-views/get-combined-measures-and-dimensions-for-metrics-views.ts b/web-common/src/features/metrics-views/get-combined-measures-and-dimensions-for-metrics-views.ts index d332285c52b..d0b3ccee1e5 100644 --- a/web-common/src/features/metrics-views/get-combined-measures-and-dimensions-for-metrics-views.ts +++ b/web-common/src/features/metrics-views/get-combined-measures-and-dimensions-for-metrics-views.ts @@ -16,9 +16,8 @@ export function getCombinedMeasuresAndDimensionsForMetricsViews( metricsViewNamesStore, (metricsViewNames) => metricsViewNames.map((metricsViewName) => - getRuntimeServiceGetResourceQueryOptions(client.instanceId, { - "name.kind": ResourceKind.MetricsView, - "name.name": metricsViewName, + getRuntimeServiceGetResourceQueryOptions(client, { + name: { kind: ResourceKind.MetricsView, name: metricsViewName }, }), ), ); diff --git a/web-common/src/features/metrics-views/metrics-view-selectors.ts b/web-common/src/features/metrics-views/metrics-view-selectors.ts index c1487254e51..3ba20ebf940 100644 --- a/web-common/src/features/metrics-views/metrics-view-selectors.ts +++ b/web-common/src/features/metrics-views/metrics-view-selectors.ts @@ -7,6 +7,7 @@ import { type V1MetricsViewSpec, type V1Resource, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived, get, type Readable } from "svelte/store"; import { ResourceKind, @@ -62,9 +63,9 @@ export class MetricsViewSelectors { typeof useFilteredResources> >; - constructor(instanceId: string, metricsViewsData?: MetricsViewsData) { + constructor(client: RuntimeClient, metricsViewsData?: MetricsViewsData) { this.allMetricsViews = useFilteredResources( - instanceId, + client, ResourceKind.MetricsView, ); diff --git a/web-common/src/features/models/navigation/ModelMenuItems.svelte b/web-common/src/features/models/navigation/ModelMenuItems.svelte index 0e58ad46985..88c41d23f21 100644 --- a/web-common/src/features/models/navigation/ModelMenuItems.svelte +++ b/web-common/src/features/models/navigation/ModelMenuItems.svelte @@ -36,7 +36,7 @@ $: fileArtifact = fileArtifacts.getFileArtifact(filePath); $: modelHasError = fileArtifact.getHasErrors(queryClient, instanceId); - $: modelQuery = fileArtifact.getResource(queryClient, instanceId); + $: modelQuery = fileArtifact.getResource(queryClient); $: modelResource = $modelQuery.data; $: connector = modelResource?.model?.spec?.outputConnector; $: modelIsIdle = diff --git a/web-common/src/features/models/partitions/TriggerPartition.svelte b/web-common/src/features/models/partitions/TriggerPartition.svelte index 4c351cbea3c..6f6f3cabb2a 100644 --- a/web-common/src/features/models/partitions/TriggerPartition.svelte +++ b/web-common/src/features/models/partitions/TriggerPartition.svelte @@ -84,7 +84,7 @@ params.file !== undefined ? fileArtifacts.getFileArtifact(addLeadingSlash(params.file)) : undefined; - $: resourceQuery = fileArtifact?.getResource(queryClient, instanceId); + $: resourceQuery = fileArtifact?.getResource(queryClient); $: resolvedResource = resource ?? $resourceQuery?.data; diff --git a/web-common/src/features/models/selectors.ts b/web-common/src/features/models/selectors.ts index 7437cea10b1..0dbf7b746b9 100644 --- a/web-common/src/features/models/selectors.ts +++ b/web-common/src/features/models/selectors.ts @@ -3,6 +3,7 @@ import { useClientFilteredResources, useResource, } from "@rilldata/web-common/features/entity-management/resource-selectors"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryClient } from "@tanstack/query-core"; import type { Readable } from "svelte/motion"; import { derived } from "svelte/store"; @@ -11,9 +12,9 @@ import { type TableColumnsWithName, } from "../sources/selectors"; -export function useModels(instanceId: string) { +export function useModels(client: RuntimeClient) { return useClientFilteredResources( - instanceId, + client, ResourceKind.Model, (res) => res.meta?.name?.name === res.model?.state?.resultTable && @@ -21,15 +22,15 @@ export function useModels(instanceId: string) { ); } -export function useModel(instanceId: string, name: string) { - return useResource(instanceId, name, ResourceKind.Model); +export function useModel(client: RuntimeClient, name: string) { + return useResource(client, name, ResourceKind.Model); } export function useAllModelColumns( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, ): Readable> { - return derived([useModels(instanceId)], ([allModels], set) => { + return derived([useModels(client)], ([allModels], set) => { if (!allModels.data?.length) { set([]); return; @@ -39,7 +40,7 @@ export function useAllModelColumns( allModels.data.map((r) => createTableColumnsWithName( queryClient, - instanceId, + client, r.model?.state?.resultConnector ?? "", "", "", diff --git a/web-common/src/features/project/selectors.ts b/web-common/src/features/project/selectors.ts index 02b0415d38d..733740eeb64 100644 --- a/web-common/src/features/project/selectors.ts +++ b/web-common/src/features/project/selectors.ts @@ -9,10 +9,11 @@ import { createQuery } from "@tanstack/svelte-query"; import { derived } from "svelte/store"; import { parse } from "yaml"; import { createRuntimeServiceGetFile } from "../../runtime-client"; +import type { RuntimeClient } from "../../runtime-client/v2"; -export function useProjectTitle(instanceId: string) { +export function useProjectTitle(client: RuntimeClient) { return createRuntimeServiceGetFile( - instanceId, + client, { path: "/rill.yaml" }, { query: { diff --git a/web-common/src/features/sample-data/generate-sample-data.ts b/web-common/src/features/sample-data/generate-sample-data.ts index b503e250e5b..a1a8d481269 100644 --- a/web-common/src/features/sample-data/generate-sample-data.ts +++ b/web-common/src/features/sample-data/generate-sample-data.ts @@ -17,7 +17,6 @@ export async function generateSampleData( initializeProject: boolean, userPrompt: string, ) { - const instanceId = client.instanceId; const agentPrompt = `Generate a new model with fresh data for the following user prompt: ${userPrompt}`; try { @@ -37,7 +36,7 @@ export async function generateSampleData( }, PROJECT_INIT_TIMEOUT_MS); }); - await runtimeServiceUnpackEmpty(instanceId, { + await runtimeServiceUnpackEmpty(client, { displayName: EMPTY_PROJECT_TITLE, force: true, }); diff --git a/web-common/src/features/scheduled-reports/FiltersForm.svelte b/web-common/src/features/scheduled-reports/FiltersForm.svelte index d182012db00..51c54910226 100644 --- a/web-common/src/features/scheduled-reports/FiltersForm.svelte +++ b/web-common/src/features/scheduled-reports/FiltersForm.svelte @@ -24,10 +24,13 @@ } from "@rilldata/web-common/lib/time/types.ts"; import { V1TimeGrain } from "@rilldata/web-common/runtime-client"; import { isMetricsViewQuery } from "@rilldata/web-common/runtime-client/invalidation.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { DateTime, Interval } from "luxon"; import { onMount } from "svelte"; import { fly } from "svelte/transition"; + const runtimeClient = useRuntimeClient(); + export let instanceId: string; export let filters: Filters; export let timeControls: TimeControls; @@ -206,7 +209,7 @@ const { interval, grain } = await deriveInterval( name, - instanceId, + runtimeClient, metricsViewName, $selectedTimezone, timeDimension, diff --git a/web-common/src/features/scheduled-reports/fields/selectors.ts b/web-common/src/features/scheduled-reports/fields/selectors.ts index 2b254e38c50..28d1a688b6c 100644 --- a/web-common/src/features/scheduled-reports/fields/selectors.ts +++ b/web-common/src/features/scheduled-reports/fields/selectors.ts @@ -8,71 +8,72 @@ import { TIME_GRAIN } from "@rilldata/web-common/lib/time/config.ts"; import { isGrainBigger } from "@rilldata/web-common/lib/time/grains"; import { V1TimeGrainToDateTimeUnit } from "@rilldata/web-common/lib/time/new-grains"; import { V1TimeGrain } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { derived } from "svelte/store"; -export function getFieldsForExplore(instanceId: string, exploreName: string) { - return derived( - useExploreValidSpec(instanceId, exploreName), - ($validSpecResp) => { - const metricsViewSpec = $validSpecResp.data?.metricsView ?? {}; - const minTimeGrain = metricsViewSpec.smallestTimeGrain; - const exploreSpec = $validSpecResp.data?.explore ?? {}; +export function getFieldsForExplore( + client: RuntimeClient, + exploreName: string, +) { + return derived(useExploreValidSpec(client, exploreName), ($validSpecResp) => { + const metricsViewSpec = $validSpecResp.data?.metricsView ?? {}; + const minTimeGrain = metricsViewSpec.smallestTimeGrain; + const exploreSpec = $validSpecResp.data?.explore ?? {}; - const measures = - metricsViewSpec.measures?.filter((measureSpec) => - exploreSpec.measures?.some( - (exploreMeasure) => exploreMeasure === measureSpec.name, - ), - ) ?? []; - const dimensions = - metricsViewSpec.dimensions?.filter((dimensionSpec) => - exploreSpec.dimensions?.some( - (exploreDimension) => exploreDimension === dimensionSpec.name, - ), - ) ?? []; - const allowedTimeGrains = Object.keys(TIME_GRAIN).filter( - (grain: V1TimeGrain) => - minTimeGrain === undefined || - minTimeGrain === V1TimeGrain.TIME_GRAIN_UNSPECIFIED || - !isGrainBigger(minTimeGrain, grain), - ); + const measures = + metricsViewSpec.measures?.filter((measureSpec) => + exploreSpec.measures?.some( + (exploreMeasure) => exploreMeasure === measureSpec.name, + ), + ) ?? []; + const dimensions = + metricsViewSpec.dimensions?.filter((dimensionSpec) => + exploreSpec.dimensions?.some( + (exploreDimension) => exploreDimension === dimensionSpec.name, + ), + ) ?? []; + const allowedTimeGrains = Object.keys(TIME_GRAIN).filter( + (grain: V1TimeGrain) => + minTimeGrain === undefined || + minTimeGrain === V1TimeGrain.TIME_GRAIN_UNSPECIFIED || + !isGrainBigger(minTimeGrain, grain), + ); - const displayMap: Record = {}; - const allowedRows: string[] = []; - const allowedColumns: string[] = []; + const displayMap: Record = {}; + const allowedRows: string[] = []; + const allowedColumns: string[] = []; - measures.forEach((measure) => { - displayMap[measure.name!] = { - label: getMeasureDisplayName(measure), - type: "measure", - }; - allowedColumns.push(measure.name!); - }); - - dimensions.forEach((dimension) => { - displayMap[dimension.name!] = { - label: getDimensionDisplayName(dimension), - type: "dimension", - }; - allowedRows.push(dimension.name!); - allowedColumns.push(dimension.name!); - }); + measures.forEach((measure) => { + displayMap[measure.name!] = { + label: getMeasureDisplayName(measure), + type: "measure", + }; + allowedColumns.push(measure.name!); + }); - allowedTimeGrains.forEach((grain) => { - const id = `${metricsViewSpec.timeDimension}_rill_${grain}`; - displayMap[id] = { - label: `Time ${V1TimeGrainToDateTimeUnit[grain]}`, - type: "time", - }; - allowedRows.push(id); - allowedColumns.push(id); - }); + dimensions.forEach((dimension) => { + displayMap[dimension.name!] = { + label: getDimensionDisplayName(dimension), + type: "dimension", + }; + allowedRows.push(dimension.name!); + allowedColumns.push(dimension.name!); + }); - return { - displayMap, - allowedRows, - allowedColumns, + allowedTimeGrains.forEach((grain) => { + const id = `${metricsViewSpec.timeDimension}_rill_${grain}`; + displayMap[id] = { + label: `Time ${V1TimeGrainToDateTimeUnit[grain]}`, + type: "time", }; - }, - ); + allowedRows.push(id); + allowedColumns.push(id); + }); + + return { + displayMap, + allowedRows, + allowedColumns, + }; + }); } diff --git a/web-common/src/features/scheduled-reports/utils.ts b/web-common/src/features/scheduled-reports/utils.ts index 91b2b737879..01983e70598 100644 --- a/web-common/src/features/scheduled-reports/utils.ts +++ b/web-common/src/features/scheduled-reports/utils.ts @@ -27,6 +27,7 @@ import { type V1TimeRange, type V1TimeRangeSummary, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export enum ReportRunAs { Recipient = "recipient", @@ -101,7 +102,7 @@ export function getDashboardNameFromReport(reportSpec: V1ReportSpec): string { } export function getFiltersAndTimeControlsFromAggregationRequest( - instanceId: string, + client: RuntimeClient, metricsViewName: string, exploreName: string, aggregationRequest: V1MetricsViewAggregationRequest, @@ -134,7 +135,7 @@ export function getFiltersAndTimeControlsFromAggregationRequest( ); const metricsViewMetadata = new ExploreMetricsViewMetadata( - instanceId, + client, metricsViewName, exploreName, ); diff --git a/web-common/src/features/sources/modal/AddDataForm.svelte b/web-common/src/features/sources/modal/AddDataForm.svelte index f3f166c7234..49e8121ea7e 100644 --- a/web-common/src/features/sources/modal/AddDataForm.svelte +++ b/web-common/src/features/sources/modal/AddDataForm.svelte @@ -224,7 +224,7 @@ saveAnyway = true; const result = await formManager.saveConnectorAnyway({ - instanceId: runtimeClient.instanceId, + client: runtimeClient, queryClient, values: $form, }); @@ -252,7 +252,7 @@ $: saveAnywayLoading = submitting && saveAnyway; handleOnUpdate = formManager.makeOnUpdate({ - instanceId: runtimeClient.instanceId, + client: runtimeClient, onClose, queryClient, getSelectedAuthMethod: () => activeAuthMethod || undefined, diff --git a/web-common/src/features/sources/modal/AddDataFormManager.ts b/web-common/src/features/sources/modal/AddDataFormManager.ts index 8cd151c6418..6c4daea6514 100644 --- a/web-common/src/features/sources/modal/AddDataFormManager.ts +++ b/web-common/src/features/sources/modal/AddDataFormManager.ts @@ -1,6 +1,7 @@ import type { SuperValidated } from "sveltekit-superforms"; import type { Writable } from "svelte/store"; import type { V1ConnectorDriver } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { AddDataFormType } from "./types"; import { getValidationSchemaForConnector } from "./FormValidation"; import { inferModelNameFromSQL, inferSourceName } from "../sourceUtils"; @@ -246,7 +247,7 @@ export class AddDataFormManager { makeOnUpdate(args: { onClose: () => void; - instanceId: string; + client: RuntimeClient; queryClient: QueryClient; getSelectedAuthMethod?: () => string | undefined; setParamsError: (message: string | null, details?: string) => void; @@ -254,7 +255,7 @@ export class AddDataFormManager { }) { const { onClose, - instanceId, + client, queryClient, getSelectedAuthMethod, setParamsError, @@ -351,7 +352,7 @@ export class AddDataFormManager { if (isStepFlowConnector && isOnSourceOrExplorerStep) { // Step 2: submit the source/model and close await submitAddSourceForm( - instanceId, + client, queryClient, connector, submitValues, @@ -361,7 +362,7 @@ export class AddDataFormManager { } else if (isStepFlowConnector && isOnConnectorStep) { // Step 1: test connector, persist config, then advance to step 2 await this.submitConnectorStepAndAdvance({ - instanceId, + client, queryClient, values, submitValues, @@ -371,7 +372,7 @@ export class AddDataFormManager { } else if (this.formType === "source") { // Single-step source form await submitAddSourceForm( - instanceId, + client, queryClient, connector, submitValues, @@ -380,7 +381,7 @@ export class AddDataFormManager { } else { // Single-step connector form await submitAddConnectorForm( - instanceId, + client, queryClient, connector, submitValues, @@ -400,7 +401,7 @@ export class AddDataFormManager { * persist connector config, then advance to the source/explorer step. */ private async submitConnectorStepAndAdvance(args: { - instanceId: string; + client: RuntimeClient; queryClient: QueryClient; values: FormData; submitValues: FormData; @@ -408,7 +409,7 @@ export class AddDataFormManager { isMultiStep: boolean; }) { const { - instanceId, + client, queryClient, values, submitValues, @@ -428,7 +429,7 @@ export class AddDataFormManager { // Test the connection, then persist config and advance const connectorInstanceName = await submitAddConnectorForm( - instanceId, + client, queryClient, this.connector, submitValues, @@ -634,18 +635,18 @@ export class AddDataFormManager { * Schema conditionals handle connector-specific requirements (e.g., SSL). */ async saveConnectorAnyway(args: { - instanceId: string; + client: RuntimeClient; queryClient: QueryClient; values: FormData; }): Promise<{ ok: true } | { ok: false; message: string; details?: string }> { - const { instanceId, queryClient, values } = args; + const { client, queryClient, values } = args; const schema = getConnectorSchema(this.schemaName); const processedValues = schema ? filterSchemaValuesForSubmit(schema, values, { step: "connector" }) : values; try { await submitAddConnectorForm( - instanceId, + client, queryClient, this.connector, processedValues, diff --git a/web-common/src/features/sources/modal/SourceImportedModal.svelte b/web-common/src/features/sources/modal/SourceImportedModal.svelte index f0cfa39b2e3..b88f0ed9aa0 100644 --- a/web-common/src/features/sources/modal/SourceImportedModal.svelte +++ b/web-common/src/features/sources/modal/SourceImportedModal.svelte @@ -34,7 +34,7 @@ $: if (sourcePath) { fileArtifact = fileArtifacts.getFileArtifact(sourcePath); - sourceQuery = fileArtifact.getResource(queryClient, instanceId); + sourceQuery = fileArtifact.getResource(queryClient); } $: sinkConnector = $sourceQuery?.data?.source?.spec?.sinkConnector; diff --git a/web-common/src/features/sources/modal/createSource.ts b/web-common/src/features/sources/modal/createSource.ts index 928c0df3616..3dc9e21632c 100644 --- a/web-common/src/features/sources/modal/createSource.ts +++ b/web-common/src/features/sources/modal/createSource.ts @@ -1,10 +1,11 @@ import { getFileAPIPathFromNameAndType } from "@rilldata/web-common/features/entity-management/entity-mappers"; import { EntityType } from "@rilldata/web-common/features/entity-management/types"; import { runtimeServicePutFile } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { sourceIngestionTracker } from "../sources-store"; export async function createSource( - instanceId: string, + client: RuntimeClient, tableName: string, yaml: string, ) { @@ -12,7 +13,7 @@ export async function createSource( const normalizedPath = `/${filePath}`; sourceIngestionTracker.trackPending(normalizedPath); try { - return await runtimeServicePutFile(instanceId, { + return await runtimeServicePutFile(client, { path: filePath, blob: yaml, // create source is used to upload and replace. diff --git a/web-common/src/features/sources/modal/submitAddDataForm.ts b/web-common/src/features/sources/modal/submitAddDataForm.ts index d80af00cf74..3965ac6ea60 100644 --- a/web-common/src/features/sources/modal/submitAddDataForm.ts +++ b/web-common/src/features/sources/modal/submitAddDataForm.ts @@ -13,6 +13,7 @@ import { runtimeServicePutFile, runtimeServiceUnpackEmpty, } from "../../../runtime-client"; +import type { RuntimeClient } from "../../../runtime-client/v2"; import { compileConnectorYAML, updateDotEnvWithSecrets, @@ -57,7 +58,7 @@ const connectorSubmissions = new Map< >(); async function beforeSubmitForm( - instanceId: string, + client: RuntimeClient, connector?: V1ConnectorDriver, ) { // Emit telemetry @@ -69,7 +70,7 @@ async function beforeSubmitForm( ); // If project is uninitialized, initialize an empty project - const projectInitialized = await isProjectInitialized(instanceId); + const projectInitialized = await isProjectInitialized(client); if (!projectInitialized) { // Determine the OLAP engine based on the connector being added let olapEngine = "duckdb"; // Default for data sources @@ -79,7 +80,7 @@ async function beforeSubmitForm( olapEngine = connector.name as string; } - await runtimeServiceUnpackEmpty(instanceId, { + await runtimeServiceUnpackEmpty(client, { displayName: EMPTY_PROJECT_TITLE, olap: olapEngine, // Explicitly set OLAP based on connector type }); @@ -92,24 +93,24 @@ async function beforeSubmitForm( } async function rollbackChanges( - instanceId: string, + client: RuntimeClient, newFilePath: string, originalEnvBlob: string | undefined, ) { // Clean-up the file - await runtimeServiceDeleteFile(instanceId, { + await runtimeServiceDeleteFile(client, { path: newFilePath, }); // Clean-up the `.env` file if (!originalEnvBlob) { // If .env file didn't exist before, delete it - await runtimeServiceDeleteFile(instanceId, { + await runtimeServiceDeleteFile(client, { path: ".env", }); } else { // If .env file existed before, restore its original content - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: ".env", blob: originalEnvBlob, create: true, @@ -120,13 +121,13 @@ async function rollbackChanges( async function setOlapConnectorInRillYAML( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, newConnectorName: string, ): Promise { - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: "rill.yaml", blob: await updateRillYAMLWithOlapConnector( - instanceId, + client, queryClient, newConnectorName, ), @@ -140,9 +141,8 @@ async function saveConnectorAnyway( connector: V1ConnectorDriver, formValues: AddDataFormValues, newConnectorName: string, - instanceId: string, + client: RuntimeClient, ): Promise { - const resolvedInstanceId = instanceId; const schema = getConnectorSchema(connector.name ?? ""); const schemaFields = schema ? getSchemaFieldMetaList(schema, { step: "connector" }) @@ -165,18 +165,12 @@ async function saveConnectorAnyway( // Update .env file with secrets (keep ordering consistent with Test and Connect) const { newBlob: newEnvBlob, originalBlob: envBlobForYaml } = - await updateDotEnvWithSecrets( - resolvedInstanceId, - queryClient, - connector, - formValues, - { - secretKeys: schemaSecretKeys, - schema: schema ?? undefined, - }, - ); + await updateDotEnvWithSecrets(client, queryClient, connector, formValues, { + secretKeys: schemaSecretKeys, + schema: schema ?? undefined, + }); - await runtimeServicePutFile(resolvedInstanceId, { + await runtimeServicePutFile(client, { path: ".env", blob: newEnvBlob, create: true, @@ -184,7 +178,7 @@ async function saveConnectorAnyway( }); // Always create/overwrite to ensure the connector file is created immediately - await runtimeServicePutFile(resolvedInstanceId, { + await runtimeServicePutFile(client, { path: newConnectorFilePath, blob: compileConnectorYAML(connector, formValues, { connectorInstanceName: newConnectorName, @@ -202,11 +196,7 @@ async function saveConnectorAnyway( }); if (OLAP_ENGINES.includes(connector.name as string)) { - await setOlapConnectorInRillYAML( - queryClient, - resolvedInstanceId, - newConnectorName, - ); + await setOlapConnectorInRillYAML(queryClient, client, newConnectorName); } // Go to the new connector file @@ -214,13 +204,13 @@ async function saveConnectorAnyway( } export async function submitAddConnectorForm( - instanceId: string, + client: RuntimeClient, queryClient: QueryClient, connector: V1ConnectorDriver, formValues: AddDataFormValues, saveAnyway: boolean = false, ): Promise { - await beforeSubmitForm(instanceId, connector); + await beforeSubmitForm(client, connector); const schema = getConnectorSchema(connector.name ?? ""); const schemaFields = schema ? getSchemaFieldMetaList(schema, { step: "connector" }) @@ -233,7 +223,7 @@ export async function submitAddConnectorForm( : []; // Create a unique key for this connector submission - const uniqueConnectorSubmissionKey = `${instanceId}:${connector.name}`; + const uniqueConnectorSubmissionKey = `${client.instanceId}:${connector.name}`; const newConnectorName = getName( connector.name as string, @@ -262,7 +252,7 @@ export async function submitAddConnectorForm( connector, formValues, newConnectorName, - instanceId, + client, ); return newConnectorName; } @@ -296,7 +286,7 @@ export async function submitAddConnectorForm( // Capture original .env and compute updated contents up front // Use originalBlob from updateDotEnvWithSecrets for consistent conflict detection const envResult = await updateDotEnvWithSecrets( - instanceId, + client, queryClient, connector, formValues, @@ -315,7 +305,7 @@ export async function submitAddConnectorForm( connector, formValues, newConnectorName, - instanceId, + client, ); return newConnectorName; } @@ -326,7 +316,7 @@ export async function submitAddConnectorForm( * 2. Create the `.yaml` file * 3. Wait for reconciliation and surface any file errors */ - await runtimeServicePutFileAndWaitForReconciliation(instanceId, { + await runtimeServicePutFileAndWaitForReconciliation(client, { path: ".env", blob: newEnvBlob, create: true, @@ -334,32 +324,28 @@ export async function submitAddConnectorForm( }); envWritten = true; - await runtimeServicePutFile( - instanceId, - { - path: newConnectorFilePath, - blob: compileConnectorYAML(connector, formValues, { - connectorInstanceName: newConnectorName, - orderedProperties: schemaFields, - secretKeys: schemaSecretKeys, - stringKeys: schemaStringKeys, - schema: schema ?? undefined, - existingEnvBlob: originalEnvBlob, - fieldFilter: schemaFields - ? (property) => !("internal" in property && property.internal) - : undefined, - }), - create: true, - createOnly: false, - }, - abortController.signal, - ); + await runtimeServicePutFile(client, { + path: newConnectorFilePath, + blob: compileConnectorYAML(connector, formValues, { + connectorInstanceName: newConnectorName, + orderedProperties: schemaFields, + secretKeys: schemaSecretKeys, + stringKeys: schemaStringKeys, + schema: schema ?? undefined, + existingEnvBlob: originalEnvBlob, + fieldFilter: schemaFields + ? (property) => !("internal" in property && property.internal) + : undefined, + }), + create: true, + createOnly: false, + }); connectorCreated = true; // Wait for connector resource-level reconciliation // This must happen after .env reconciliation since connectors depend on secrets await waitForResourceReconciliation( - instanceId, + client, newConnectorName, ResourceKind.Connector, ); @@ -368,7 +354,6 @@ export async function submitAddConnectorForm( // If the connector file has errors, rollback the changes const errorMessage = await fileArtifacts.checkFileErrors( queryClient, - instanceId, newConnectorFilePath, ); if (errorMessage) { @@ -376,11 +361,7 @@ export async function submitAddConnectorForm( } if (OLAP_ENGINES.includes(connector.name as string)) { - await setOlapConnectorInRillYAML( - queryClient, - instanceId, - newConnectorName, - ); + await setOlapConnectorInRillYAML(queryClient, client, newConnectorName); } // Go to the new connector file @@ -398,11 +379,7 @@ export async function submitAddConnectorForm( (envWritten || connectorCreated); if (shouldRollbackConnectorFile) { - await rollbackChanges( - instanceId, - newConnectorFilePath, - originalEnvBlob, - ); + await rollbackChanges(client, newConnectorFilePath, originalEnvBlob); } const errorDetails = (error as any).details; @@ -433,13 +410,13 @@ export async function submitAddConnectorForm( } export async function submitAddSourceForm( - instanceId: string, + client: RuntimeClient, queryClient: QueryClient, connector: V1ConnectorDriver, formValues: AddDataFormValues, connectorInstanceName?: string, ): Promise { - await beforeSubmitForm(instanceId, connector); + await beforeSubmitForm(client, connector); const newSourceName = formValues.name as string; const [rewrittenConnector, rewrittenFormValues] = prepareSourceFormData( @@ -470,7 +447,7 @@ export async function submitAddSourceForm( EntityType.Table, ); sourceIngestionTracker.trackPending(`/${newSourceFilePath}`); - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(client, { path: newSourceFilePath, blob: compileSourceYAML(rewrittenConnector, rewrittenFormValues, { secretKeys: schemaSecretKeys, @@ -485,7 +462,7 @@ export async function submitAddSourceForm( // Create or update the `.env` file const { newBlob: newEnvBlob, originalBlob: originalEnvBlob } = await updateDotEnvWithSecrets( - instanceId, + client, queryClient, rewrittenConnector, rewrittenFormValues, @@ -495,7 +472,7 @@ export async function submitAddSourceForm( ); // Make sure the file has reconciled before testing the connection - await runtimeServicePutFileAndWaitForReconciliation(instanceId, { + await runtimeServicePutFileAndWaitForReconciliation(client, { path: ".env", blob: newEnvBlob, create: true, @@ -506,14 +483,14 @@ export async function submitAddSourceForm( // This must happen after .env reconciliation since sources depend on secrets try { await waitForResourceReconciliation( - instanceId, + client, newSourceName, ResourceKind.Model, ); } catch (error) { // The source file was already created, so we need to delete it sourceIngestionTracker.trackCancelled(`/${newSourceFilePath}`); - await rollbackChanges(instanceId, newSourceFilePath, originalEnvBlob); + await rollbackChanges(client, newSourceFilePath, originalEnvBlob); const errorDetails = (error as any).details; throw { @@ -529,12 +506,11 @@ export async function submitAddSourceForm( // If the model file has errors, rollback the changes const errorMessage = await fileArtifacts.checkFileErrors( queryClient, - instanceId, newSourceFilePath, ); if (errorMessage) { sourceIngestionTracker.trackCancelled(`/${newSourceFilePath}`); - await rollbackChanges(instanceId, newSourceFilePath, originalEnvBlob); + await rollbackChanges(client, newSourceFilePath, originalEnvBlob); throw new Error(errorMessage); } diff --git a/web-common/src/features/sources/navigation/SourceMenuItems.svelte b/web-common/src/features/sources/navigation/SourceMenuItems.svelte index a0c192635d2..1f939436f7b 100644 --- a/web-common/src/features/sources/navigation/SourceMenuItems.svelte +++ b/web-common/src/features/sources/navigation/SourceMenuItems.svelte @@ -49,7 +49,7 @@ const { ai, generateCanvas } = featureFlags; - $: sourceQuery = fileArtifact.getResource(queryClient, instanceId); + $: sourceQuery = fileArtifact.getResource(queryClient); let source: V1Source | undefined; $: source = $sourceQuery.data?.source; $: sinkConnector = $sourceQuery.data?.source?.spec?.sinkConnector; diff --git a/web-common/src/features/sources/selectors.ts b/web-common/src/features/sources/selectors.ts index 6e3ec1f444e..7469e701612 100644 --- a/web-common/src/features/sources/selectors.ts +++ b/web-common/src/features/sources/selectors.ts @@ -7,6 +7,7 @@ import { createQueryServiceTableColumns, createRuntimeServiceGetFile, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { CreateQueryResult, QueryClient } from "@tanstack/svelte-query"; import { type Readable, derived } from "svelte/store"; import { parse } from "yaml"; @@ -17,9 +18,9 @@ export type SourceFromYaml = { path?: string; }; -export function useSources(instanceId: string) { +export function useSources(client: RuntimeClient) { return useClientFilteredResources( - instanceId, + client, ResourceKind.Model, (res) => res.meta?.name?.name === res.model?.state?.resultTable && @@ -27,9 +28,9 @@ export function useSources(instanceId: string) { ); } -export function useSourceFromYaml(instanceId: string, filePath: string) { +export function useSourceFromYaml(client: RuntimeClient, filePath: string) { return createRuntimeServiceGetFile( - instanceId, + client, { path: filePath }, { query: { @@ -42,9 +43,12 @@ export function useSourceFromYaml(instanceId: string, filePath: string) { /** * This client-side YAML parsing is a rudimentary hack to check if the source is a local file. */ -export function useIsLocalFileConnector(instanceId: string, filePath: string) { +export function useIsLocalFileConnector( + client: RuntimeClient, + filePath: string, +) { return createRuntimeServiceGetFile( - instanceId, + client, { path: filePath }, { query: { @@ -72,9 +76,9 @@ export type TableColumnsWithName = { export function useAllSourceColumns( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, ): Readable> { - return derived([useSources(instanceId)], ([allSources], set) => { + return derived([useSources(client)], ([allSources], set) => { if (!allSources.data?.length) { set([]); return; @@ -84,7 +88,7 @@ export function useAllSourceColumns( allSources.data.map((r) => createTableColumnsWithName( queryClient, - instanceId, + client, r.source?.state?.connector ?? "", "", "", @@ -104,16 +108,16 @@ export function useAllSourceColumns( */ export function createTableColumnsWithName( queryClient: QueryClient, - instanceId: string, + client: RuntimeClient, connector: string, database: string, databaseSchema: string, tableName: string, ) { return createQueryServiceTableColumns( - instanceId, - tableName, + client, { + tableName, connector, database, databaseSchema, diff --git a/web-common/src/features/templates/utils.ts b/web-common/src/features/templates/utils.ts index a78fa67be61..14102feb290 100644 --- a/web-common/src/features/templates/utils.ts +++ b/web-common/src/features/templates/utils.ts @@ -1,5 +1,5 @@ import type { V1MetricsViewSpec } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; +import type { HTTPError } from "@rilldata/web-common/lib/errors"; import type { QueryObserverResult } from "@tanstack/svelte-query"; export const isMeasureValid = ( diff --git a/web-common/src/features/themes/selectors.ts b/web-common/src/features/themes/selectors.ts index 9e37d9c0d5d..62d76f6824e 100644 --- a/web-common/src/features/themes/selectors.ts +++ b/web-common/src/features/themes/selectors.ts @@ -5,13 +5,14 @@ import { import { derived, type Readable } from "svelte/store"; import { Theme } from "./theme"; import type { RpcStatus } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { QueryObserverResult } from "@tanstack/svelte-query"; import type { CanvasResponse } from "../canvas/selector"; import type { ExploreValidSpecResponse } from "../explores/selectors"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; -export function useTheme(instanceId: string, name: string) { - return useResource(instanceId, name, ResourceKind.Theme); +export function useTheme(client: RuntimeClient, name: string) { + return useResource(client, name, ResourceKind.Theme); } function extractThemeInfo( @@ -41,7 +42,7 @@ export function createResolvedThemeStore( query: Readable< QueryObserverResult >, - instanceId: string, + client: RuntimeClient, ): Readable { const themeInput = derived([urlThemeName, query], ([$url, $query]) => { const { themeName, embeddedTheme } = extractThemeInfo($query.data); @@ -64,7 +65,7 @@ export function createResolvedThemeStore( // Case 2: Named theme (reference to theme resource) if (name) { const themeQuery = useResource( - instanceId, + client, name, ResourceKind.Theme, undefined, diff --git a/web-common/src/features/welcome/is-project-initialized.ts b/web-common/src/features/welcome/is-project-initialized.ts index 6b495fb7c72..01a69dd1eef 100644 --- a/web-common/src/features/welcome/is-project-initialized.ts +++ b/web-common/src/features/welcome/is-project-initialized.ts @@ -5,15 +5,16 @@ import { runtimeServiceListFiles, runtimeServiceUnpackEmpty, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import { EMPTY_PROJECT_TITLE } from "./constants"; -export async function isProjectInitialized(instanceId: string) { +export async function isProjectInitialized(client: RuntimeClient) { try { const files = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceListFilesQueryKey(instanceId, undefined), + queryKey: getRuntimeServiceListFilesQueryKey(client.instanceId, {}), queryFn: ({ signal }) => { - return runtimeServiceListFiles(instanceId, undefined, signal); + return runtimeServiceListFiles(client, {}, { signal }); }, }); @@ -24,9 +25,9 @@ export async function isProjectInitialized(instanceId: string) { } } -export async function handleUninitializedProject(instanceId: string) { +export async function handleUninitializedProject(client: RuntimeClient) { // If the project is not initialized, determine what page to route to dependent on the OLAP connector - const instance = await runtimeServiceGetInstance(instanceId, { + const instance = await runtimeServiceGetInstance(client, { sensitive: true, }); const olapConnector = instance.instance?.olapConnector; @@ -38,7 +39,7 @@ export async function handleUninitializedProject(instanceId: string) { // DuckDB-backed projects should head to the Welcome page for user-guided initialization if (olapConnector !== "duckdb") { // Clickhouse and Druid-backed projects should be initialized immediately - await runtimeServiceUnpackEmpty(instanceId, { + await runtimeServiceUnpackEmpty(client, { displayName: EMPTY_PROJECT_TITLE, olap: olapConnector, // Use the instance's configured OLAP connector force: true, diff --git a/web-common/src/features/workspaces/CanvasWorkspace.svelte b/web-common/src/features/workspaces/CanvasWorkspace.svelte index 4b96a042637..70af9ddff7b 100644 --- a/web-common/src/features/workspaces/CanvasWorkspace.svelte +++ b/web-common/src/features/workspaces/CanvasWorkspace.svelte @@ -54,10 +54,7 @@ $: canvasName = getNameFromFile(filePath); // Parse error for the editor gutter and banner - $: parseErrorQuery = fileArtifact.getParseError( - queryClient, - runtimeClient.instanceId, - ); + $: parseErrorQuery = fileArtifact.getParseError(queryClient); $: parseError = $parseErrorQuery; // Reconcile error resolved to root cause for the banner @@ -73,7 +70,7 @@ async function onChangeCallback(newTitle: string) { const newRoute = await handleEntityRename( - runtimeClient.instanceId, + runtimeClient, newTitle, filePath, fileName, diff --git a/web-common/src/features/workspaces/ExploreWorkspace.svelte b/web-common/src/features/workspaces/ExploreWorkspace.svelte index 1069fa1b027..2d873b65542 100644 --- a/web-common/src/features/workspaces/ExploreWorkspace.svelte +++ b/web-common/src/features/workspaces/ExploreWorkspace.svelte @@ -58,10 +58,7 @@ $: metricsViewName = metricsViewResource?.meta?.name?.name; // Parse error for the editor gutter and banner - $: parseErrorQuery = fileArtifact.getParseError( - queryClient, - runtimeClient.instanceId, - ); + $: parseErrorQuery = fileArtifact.getParseError(queryClient); $: parseError = $parseErrorQuery; // Reconcile error resolved to root cause for the banner @@ -78,7 +75,7 @@ async function onChangeCallback(newTitle: string) { const newRoute = await handleEntityRename( - runtimeClient.instanceId, + runtimeClient, newTitle, filePath, fileName, diff --git a/web-common/src/features/workspaces/MetricsWorkspace.svelte b/web-common/src/features/workspaces/MetricsWorkspace.svelte index 8cbb940ab06..a94a5856a67 100644 --- a/web-common/src/features/workspaces/MetricsWorkspace.svelte +++ b/web-common/src/features/workspaces/MetricsWorkspace.svelte @@ -63,10 +63,7 @@ $: selectedView = workspace.view; // Parse error for the editor gutter and banner - $: parseErrorQuery = fileArtifact.getParseError( - queryClient, - runtimeClient.instanceId, - ); + $: parseErrorQuery = fileArtifact.getParseError(queryClient); $: parseError = $parseErrorQuery; // Reconcile error resolved to root cause for the banner @@ -82,7 +79,7 @@ async function onChangeCallback(newTitle: string) { const newRoute = await handleEntityRename( - runtimeClient.instanceId, + runtimeClient, newTitle, filePath, fileName, diff --git a/web-common/src/features/workspaces/ModelWorkspace.svelte b/web-common/src/features/workspaces/ModelWorkspace.svelte index a296269e706..cfcd98cf3d6 100644 --- a/web-common/src/features/workspaces/ModelWorkspace.svelte +++ b/web-common/src/features/workspaces/ModelWorkspace.svelte @@ -42,10 +42,7 @@ $: workspace = workspaces.get(filePath); $: tableVisible = workspace.table.visible; - $: allErrorsStore = fileArtifact.getAllErrors( - queryClient, - runtimeClient.instanceId, - ); + $: allErrorsStore = fileArtifact.getAllErrors(queryClient); $: hasErrors = fileArtifact.getHasErrors( queryClient, runtimeClient.instanceId, @@ -79,7 +76,7 @@ async function handleNameChange(newTitle: string) { const newRoute = await handleEntityRename( - runtimeClient.instanceId, + runtimeClient, newTitle, filePath, fileName, diff --git a/web-common/src/lib/errors.ts b/web-common/src/lib/errors.ts new file mode 100644 index 00000000000..a88fec9c85a --- /dev/null +++ b/web-common/src/lib/errors.ts @@ -0,0 +1,24 @@ +export interface HTTPError { + response: { + status: number; + data: { + message: string; + }; + }; + message: string; + name: string; + traceId?: string; +} + +export function isHTTPError(error: unknown): error is HTTPError { + return ( + typeof error === "object" && + error !== null && + typeof (error as Record).response === "object" && + (error as Record>).response !== null && + typeof (error as { response: { status: unknown } }).response?.status === + "number" && + typeof (error as { response: { data: { message: unknown } } }).response + ?.data?.message === "string" + ); +} diff --git a/web-common/src/runtime-client/invalidation.ts b/web-common/src/runtime-client/invalidation.ts index 2a02c660309..dbd54bca77d 100644 --- a/web-common/src/runtime-client/invalidation.ts +++ b/web-common/src/runtime-client/invalidation.ts @@ -1,4 +1,4 @@ -import { getRuntimeServiceGetInstanceQueryKey } from "@rilldata/web-common/runtime-client/gen/runtime-service/runtime-service.ts"; +import { getRuntimeServiceGetInstanceQueryKey } from "@rilldata/web-common/runtime-client/v2/gen/runtime-service"; import { isColumnProfilingQuery, isProfilingQuery, diff --git a/web-common/src/runtime-client/query-options.ts b/web-common/src/runtime-client/query-options.ts index b195796d5d1..159c1beb057 100644 --- a/web-common/src/runtime-client/query-options.ts +++ b/web-common/src/runtime-client/query-options.ts @@ -3,8 +3,8 @@ import type { RuntimeServiceGetResourceParams, V1GetResourceResponse, } from "./gen/index.schemas"; -import type { RuntimeServiceGetResourceQueryResult } from "./gen/runtime-service/runtime-service"; -import { getRuntimeServiceGetResourceQueryKey } from "./gen/runtime-service/runtime-service"; +import type { V1GetResourceResponse as RuntimeServiceGetResourceQueryResult } from "./gen/index.schemas"; +import { getRuntimeServiceGetResourceQueryKey } from "./v2/gen/runtime-service"; interface RuntimeInfo { host: string; diff --git a/web-local/src/hooks.client.ts b/web-local/src/hooks.client.ts index 03c92bcf75f..38d493006e2 100644 --- a/web-local/src/hooks.client.ts +++ b/web-local/src/hooks.client.ts @@ -1,9 +1,5 @@ -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { setLocalServiceHost } from "@rilldata/web-common/runtime-client/local-service"; -import { LOCAL_HOST, LOCAL_INSTANCE_ID } from "./lib/local-runtime-config"; - -// BRIDGE (temporary): keep global store initialized for unmigrated Orval consumers -runtime.set({ host: LOCAL_HOST, instanceId: LOCAL_INSTANCE_ID }); +import { LOCAL_HOST } from "./lib/local-runtime-config"; // Initialize LocalService client with the runtime host setLocalServiceHost(LOCAL_HOST); diff --git a/web-local/src/lib/local-runtime-config.ts b/web-local/src/lib/local-runtime-config.ts index 1be5dedb5ca..2ed9844b0db 100644 --- a/web-local/src/lib/local-runtime-config.ts +++ b/web-local/src/lib/local-runtime-config.ts @@ -1,3 +1,5 @@ +import { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; + // Detect dev mode without depending on SvelteKit's $app/environment // (which is unavailable to tsc outside Vite/SvelteKit context) const isDev = @@ -5,3 +7,16 @@ const isDev = export const LOCAL_HOST = isDev ? "http://localhost:9009" : ""; export const LOCAL_INSTANCE_ID = "default"; + +// Singleton RuntimeClient for use in load functions (outside Svelte context). +// Web-local has no JWT auth, so this is a simple, long-lived instance. +let _localClient: RuntimeClient | null = null; +export function getLocalRuntimeClient(): RuntimeClient { + if (!_localClient) { + _localClient = new RuntimeClient({ + host: LOCAL_HOST, + instanceId: LOCAL_INSTANCE_ID, + }); + } + return _localClient; +} diff --git a/web-local/src/lib/time-ranges-test.ts b/web-local/src/lib/time-ranges-test.ts index 202f2efba16..de3de407b99 100644 --- a/web-local/src/lib/time-ranges-test.ts +++ b/web-local/src/lib/time-ranges-test.ts @@ -2,7 +2,7 @@ import { queryServiceMetricsViewTimeRanges, queryServiceMetricsViewTimeRange, } from "@rilldata/web-common/runtime-client"; -import { LOCAL_INSTANCE_ID } from "./local-runtime-config"; +import { getLocalRuntimeClient } from "./local-runtime-config"; import { Interval, DateTime, type DateTimeUnit } from "luxon"; import { GrainAliasToOrder } from "@rilldata/web-common/lib/time/new-grains"; @@ -335,15 +335,13 @@ function generateFirstNPeriodTests(metadata: TimeMetadata, n: number = 3) { } export async function runTests(metricsViewName: string) { - const instanceId = LOCAL_INSTANCE_ID; + const client = getLocalRuntimeClient(); let failures = 1; - const okay = await queryServiceMetricsViewTimeRange( - instanceId, + const okay = await queryServiceMetricsViewTimeRange(client, { metricsViewName, - {}, - ); + }); const { timeRangeSummary } = okay; if ( @@ -387,11 +385,10 @@ export async function runTests(metricsViewName: string) { const expressions = testCases.map((testCase) => testCase.syntax); - const response = await queryServiceMetricsViewTimeRanges( - instanceId, + const response = await queryServiceMetricsViewTimeRanges(client, { metricsViewName, - { expressions }, - ); + expressions, + }); testCases.forEach(({ interval, log }, i) => { const apiFormat = { diff --git a/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/+layout.ts b/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/+layout.ts index 7cc9d0b062e..5868cd9dbc0 100644 --- a/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/+layout.ts +++ b/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/+layout.ts @@ -1,11 +1,14 @@ -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; -import { get } from "svelte/store"; +import { getLocalRuntimeClient } from "../../../../../../../lib/local-runtime-config"; import { fetchMessage } from "@rilldata/web-common/features/chat/core/citation-url-utils.ts"; export async function load({ params: { conversationId, messageId } }) { - const rt = get(runtime); + const client = getLocalRuntimeClient(); - const message = await fetchMessage(rt, conversationId, messageId); + const message = await fetchMessage( + { host: client.host, instanceId: client.instanceId }, + conversationId, + messageId, + ); return { message, diff --git a/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts b/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts index e33d455baf8..fc2098207e4 100644 --- a/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts +++ b/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts @@ -1,16 +1,15 @@ -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; +import { getLocalRuntimeClient } from "../../../../../../../../../lib/local-runtime-config"; import { maybeGetMetricsResolverQueryFromMessage } from "@rilldata/web-common/features/chat/core/citation-url-utils.ts"; import { openQuery } from "@rilldata/web-common/features/explore-mappers/open-query.ts"; -import { get } from "svelte/store"; export async function load({ parent }) { const { message } = await parent(); const query = maybeGetMetricsResolverQueryFromMessage(message); - const rt = get(runtime); + const client = getLocalRuntimeClient(); await openQuery({ query, - runtime: rt, + runtime: { host: client.host, instanceId: client.instanceId }, }); } diff --git a/web-local/src/routes/(viz)/explore/[name]/+page.svelte b/web-local/src/routes/(viz)/explore/[name]/+page.svelte index c31f8a34866..a6a4dfb552e 100644 --- a/web-local/src/routes/(viz)/explore/[name]/+page.svelte +++ b/web-local/src/routes/(viz)/explore/[name]/+page.svelte @@ -24,11 +24,7 @@ export let data: PageData; $: ({ metricsView, explore, exploreName } = data); - resetSelectedMockUserAfterNavigate( - queryClient, - runtimeClient.instanceId, - runtimeClient, - ); + resetSelectedMockUserAfterNavigate(queryClient, runtimeClient); $: metricsViewName = metricsView?.meta?.name?.name as string; diff --git a/web-local/src/routes/(viz)/explore/[name]/+page.ts b/web-local/src/routes/(viz)/explore/[name]/+page.ts index 4dc334650bb..9426797c5c0 100644 --- a/web-local/src/routes/(viz)/explore/[name]/+page.ts +++ b/web-local/src/routes/(viz)/explore/[name]/+page.ts @@ -1,9 +1,9 @@ import { fetchExploreSpec } from "@rilldata/web-common/features/explores/selectors"; -import { LOCAL_INSTANCE_ID } from "../../../../lib/local-runtime-config"; +import { getLocalRuntimeClient } from "../../../../lib/local-runtime-config"; import { error } from "@sveltejs/kit"; export const load = async ({ params, depends }) => { - const instanceId = LOCAL_INSTANCE_ID; + const client = getLocalRuntimeClient(); const exploreName = params.name; @@ -11,7 +11,7 @@ export const load = async ({ params, depends }) => { try { const { explore, metricsView } = await fetchExploreSpec( - instanceId, + client, exploreName, ); diff --git a/web-local/src/routes/+layout.ts b/web-local/src/routes/+layout.ts index 5f4856f1c79..fa88c5d725b 100644 --- a/web-local/src/routes/+layout.ts +++ b/web-local/src/routes/+layout.ts @@ -8,7 +8,7 @@ import { type V1ListFilesResponse, } from "@rilldata/web-common/runtime-client/index.js"; import { handleUninitializedProject } from "@rilldata/web-common/features/welcome/is-project-initialized.js"; -import { LOCAL_INSTANCE_ID } from "../lib/local-runtime-config"; +import { getLocalRuntimeClient } from "../lib/local-runtime-config"; import { Settings } from "luxon"; Settings.defaultLocale = "en"; @@ -16,12 +16,12 @@ Settings.defaultLocale = "en"; export async function load({ url, depends, untrack }) { depends("init"); - const instanceId = LOCAL_INSTANCE_ID; + const client = getLocalRuntimeClient(); const files = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceListFilesQueryKey(instanceId, undefined), + queryKey: getRuntimeServiceListFilesQueryKey(client.instanceId, {}), queryFn: ({ signal }) => { - return runtimeServiceListFiles(instanceId, undefined, signal); + return runtimeServiceListFiles(client, {}, { signal }); }, }); @@ -40,7 +40,7 @@ export async function load({ url, depends, untrack }) { }); if (!initialized) { - initialized = await handleUninitializedProject(instanceId); + initialized = await handleUninitializedProject(client); } else if (redirectPath) { throw redirect(303, redirectPath); } From 6fa0bcbfc7f2c621c52e3ea59a77a11ec510cbd4 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 15:24:09 +0300 Subject: [PATCH 38/78] fix: resolve all svelte-check and unit test errors from v2 migration Migrate remaining consumers to v2 RuntimeClient signatures: - Replace runtime-store imports with useRuntimeClient() across 25 web-admin files - Replace instanceId string args with RuntimeClient in 58 web-common files - Remove deleted http-client imports from 5 files (ModelWorkspace + 4 column profiles) - Fix web-local canvas/explore pages to use useRuntimeClient() - Fix prettier formatting - Remove stale runtime-store mock from code-utils.spec.ts --- .../src/features/alerts/CreateAlert.svelte | 6 +- .../alerts/history/AlertHistoryTable.svelte | 6 +- .../alerts/metadata/AlertFilters.svelte | 6 +- .../alerts/metadata/AlertMetadata.svelte | 22 +++--- .../bookmarks/BookmarksFormDialog.svelte | 8 +-- .../features/bookmarks/CanvasBookmarks.svelte | 6 +- .../dashboards/listing/DashboardsTable.svelte | 6 +- .../listing/LastRefreshedDate.svelte | 6 +- .../src/features/embeds/ExploreEmbed.svelte | 5 +- .../embeds/TopNavigationBarEmbed.svelte | 4 +- .../github/ProjectGithubConnection.svelte | 8 +-- .../status/logs/ProjectLogsPage.svelte | 8 ++- .../status/overview/DeploymentSection.svelte | 10 +-- .../status/overview/ErrorsSection.svelte | 8 +-- .../ProjectGlobalStatusIndicator.svelte | 10 +-- .../status/overview/ResourcesSection.svelte | 6 +- .../status/overview/TablesSection.svelte | 10 +-- .../resource-table/ProjectResources.svelte | 33 ++++----- .../ProjectResourcesTable.svelte | 41 +++++------- .../status/tables/ProjectTables.svelte | 27 ++++---- .../metadata/ReportMetadata.svelte | 20 +++--- .../metadata/RunNowButton.svelte | 18 ++--- .../[organization]/[project]/+page.svelte | 8 +-- .../[project]/-/deploying/+page.svelte | 6 +- .../-/settings/public-urls/+page.svelte | 6 +- .../[token]/explore/[dashboard]/+page.svelte | 6 +- .../[project]/canvas/[dashboard]/+page.svelte | 13 ++-- .../ConnectedPreviewTable.svelte | 8 +-- .../src/features/alerts/AlertForm.svelte | 10 +-- .../alerts/criteria-tab/CriteriaForm.svelte | 2 +- .../alerts/data-tab/AlertDialogDataTab.svelte | 7 +- .../AlertDialogDeliveryTab.svelte | 2 +- .../src/features/canvas/CanvasBuilder.svelte | 5 +- .../canvas/CanvasInitialization.svelte | 7 +- .../features/canvas/CanvasPreviewCTAs.svelte | 4 +- .../components/markdown/Markdown.svelte | 2 +- .../canvas/explore-link/ExploreLink.svelte | 3 +- .../inspector/MetricSelectorDropdown.svelte | 7 +- .../canvas/inspector/PageEditor.svelte | 2 +- .../core/messages/chart/ChartBlock.svelte | 8 +-- .../column-types/NestedProfile.svelte | 2 - .../column-types/NumericProfile.svelte | 2 - .../column-types/TimestampProfile.svelte | 2 - .../column-types/VarcharProfile.svelte | 2 - .../components/charts/ChartContainer.svelte | 4 +- .../features/connectors/code-utils.spec.ts | 13 ---- .../connectors/explorer/TableEntry.svelte | 2 +- .../connectors/explorer/TableMenuItems.svelte | 4 +- .../big-number/MeasuresContainer.svelte | 5 +- .../GlobalDimensionSearchResults.svelte | 3 +- .../dimension-table/DimensionDisplay.svelte | 9 ++- .../dashboards/filters/Filters.svelte | 3 +- .../dimension-filters/DimensionFilter.svelte | 34 ++++------ .../DimensionFilterReadOnlyChip.svelte | 24 +++---- .../ViewAsButton.svelte | 7 +- .../dashboards/leaderboard/Leaderboard.svelte | 14 ++-- .../dashboards/rows-viewer/RowsViewer.svelte | 5 +- .../rows-viewer/RowsViewerAccordion.svelte | 9 ++- .../dashboards/workspace/Dashboard.svelte | 3 +- .../entity-management/AddAssetButton.svelte | 36 +++++----- .../entity-management/RenameAssetModal.svelte | 11 +-- .../explores/ExplorePreviewCTAs.svelte | 10 +-- .../explores/explore-link/ExploreLink.svelte | 2 +- .../file-explorer/FileExplorer.svelte | 67 ++++++++++--------- .../file-explorer/NavDirectoryEntry.svelte | 12 ++-- .../metrics-views/GoToDashboardButton.svelte | 4 +- .../metrics-views/MetricsViewMenuItems.svelte | 2 +- .../metrics-views/editor/Placeholder.svelte | 10 ++- .../models/navigation/ModelMenuItems.svelte | 4 +- .../workspace/CreateDashboardButton.svelte | 2 +- .../models/workspace/ModelEditor.svelte | 6 +- .../workspace/ModelWorkspaceCTAs.svelte | 2 +- .../navigation/GraphContainer.svelte | 18 +++-- .../quick-view/QuickView.svelte | 4 +- .../BaseScheduledReportForm.svelte | 2 +- .../ScheduledReportDialog.svelte | 4 +- .../fields/RowsAndColumnsForm.svelte | 5 +- .../features/sources/errors/ErrorPane.svelte | 2 +- .../features/sources/modal/AddDataForm.svelte | 2 +- .../sources/modal/AddDataModal.svelte | 2 +- .../features/sources/modal/FileDrop.svelte | 16 ++--- .../sources/modal/LocalSourceUpload.svelte | 14 ++-- .../sources/navigation/SourceMenuItems.svelte | 15 +++-- .../features/visual-editing/ThemeInput.svelte | 4 +- .../workspaces/CanvasWorkspace.svelte | 4 +- .../workspaces/ExploreWorkspace.svelte | 4 +- .../workspaces/MetricsWorkspace.svelte | 11 ++- .../features/workspaces/ModelWorkspace.svelte | 13 +--- .../workspaces/VisualExploreEditing.svelte | 11 ++- .../features/workspaces/VisualMetrics.svelte | 32 ++++----- .../workspaces/WorkspaceBreadcrumbs.svelte | 4 +- .../src/layout/ApplicationHeader.svelte | 6 +- .../(workspace)/files/[...file]/+page.svelte | 1 - .../routes/(viz)/canvas/[name]/+page.svelte | 13 ++-- .../routes/(viz)/explore/[name]/+page.svelte | 5 +- 95 files changed, 411 insertions(+), 476 deletions(-) diff --git a/web-admin/src/features/alerts/CreateAlert.svelte b/web-admin/src/features/alerts/CreateAlert.svelte index acbfde64eea..3a48edfbff7 100644 --- a/web-admin/src/features/alerts/CreateAlert.svelte +++ b/web-admin/src/features/alerts/CreateAlert.svelte @@ -10,7 +10,7 @@ import AlertForm from "@rilldata/web-common/features/alerts/AlertForm.svelte"; import { useMetricsViewValidSpec } from "@rilldata/web-common/features/dashboards/selectors"; import { getStateManagers } from "@rilldata/web-common/features/dashboards/state-managers/state-managers"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { BellPlusIcon } from "lucide-svelte"; const { @@ -22,9 +22,9 @@ dashboardStore, } = getStateManagers(); - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); - $: metricsView = useMetricsViewValidSpec(instanceId, $metricsViewName); + $: metricsView = useMetricsViewValidSpec(runtimeClient, $metricsViewName); $: hasTimeDimension = !!$metricsView?.data?.timeDimension; let open = false; diff --git a/web-admin/src/features/alerts/history/AlertHistoryTable.svelte b/web-admin/src/features/alerts/history/AlertHistoryTable.svelte index 0fdc9a7cedc..4b5fd28a996 100644 --- a/web-admin/src/features/alerts/history/AlertHistoryTable.svelte +++ b/web-admin/src/features/alerts/history/AlertHistoryTable.svelte @@ -4,15 +4,15 @@ import { useAlert } from "@rilldata/web-admin/features/alerts/selectors"; import ResourceList from "@rilldata/web-admin/features/resources/ResourceList.svelte"; import type { V1AlertExecution } from "@rilldata/web-common/runtime-client/gen/index.schemas"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { ColumnDef } from "@tanstack/svelte-table"; import { flexRender } from "@tanstack/svelte-table"; export let alert: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); - $: alertQuery = useAlert(instanceId, alert); + $: alertQuery = useAlert(runtimeClient, alert); /** * Table column definitions. diff --git a/web-admin/src/features/alerts/metadata/AlertFilters.svelte b/web-admin/src/features/alerts/metadata/AlertFilters.svelte index eed7b62db95..f709fb6642a 100644 --- a/web-admin/src/features/alerts/metadata/AlertFilters.svelte +++ b/web-admin/src/features/alerts/metadata/AlertFilters.svelte @@ -13,7 +13,7 @@ V1Expression, V1TimeRange, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { flip } from "svelte/animate"; import { fly } from "svelte/transition"; @@ -36,9 +36,9 @@ whereFilter = dimensionFilters; havingFilter = dimensionThresholdFilters; } - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); - $: metricsView = useMetricsView(instanceId, metricsViewName); + $: metricsView = useMetricsView(runtimeClient, metricsViewName); $: dimensionIdMap = getMapFromArray( $metricsView.data?.metricsView?.state?.validSpec?.dimensions ?? [], (dimension) => dimension.name, diff --git a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte index 4afd22b2e12..6d0b9094d36 100644 --- a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte +++ b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte @@ -32,21 +32,21 @@ getRuntimeServiceListResourcesQueryKey, type V1MetricsViewAggregationRequest, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useQueryClient } from "@tanstack/svelte-query"; export let organization: string; export let project: string; export let alert: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); - $: alertQuery = useAlert(instanceId, alert); - $: isAlertCreatedByCode = useIsAlertCreatedByCode(instanceId, alert); + $: alertQuery = useAlert(runtimeClient, alert); + $: isAlertCreatedByCode = useIsAlertCreatedByCode(runtimeClient, alert); // Get dashboard - $: exploreName = useAlertDashboardName(instanceId, alert); - $: validSpecResp = useExploreValidSpec(instanceId, $exploreName.data); + $: exploreName = useAlertDashboardName(runtimeClient, alert); + $: validSpecResp = useExploreValidSpec(runtimeClient, $exploreName.data); $: exploreSpec = $validSpecResp.data?.explore; $: metricsViewName = exploreSpec?.metricsView; $: dashboardTitle = exploreSpec?.displayName || $exploreName.data; @@ -56,7 +56,7 @@ $validSpecResp.error.response.status === 404; $: exploreIsValid = hasValidMetricsViewTimeRange( - instanceId, + runtimeClient, $exploreName.data, ); @@ -78,7 +78,7 @@ queryArgsJson, ) as V1MetricsViewAggregationRequest; - $: dashboardState = useAlertDashboardState(instanceId, alertSpec); + $: dashboardState = useAlertDashboardState(runtimeClient, alertSpec); $: snoozeLabel = humaniseAlertSnoozeOption(alertSpec); @@ -95,7 +95,7 @@ exploreProtoState: alertSpec?.annotations?.web_open_state, }, { - instanceId, + instanceId: runtimeClient.instanceId, organization, project, }, @@ -112,7 +112,9 @@ name: $alertQuery.data.resource.meta.name.name, }); await queryClient.invalidateQueries({ - queryKey: getRuntimeServiceListResourcesQueryKey(instanceId), + queryKey: getRuntimeServiceListResourcesQueryKey( + runtimeClient.instanceId, + ), }); // goto only after invalidate is complete goto(`/${organization}/${project}/-/alerts`); diff --git a/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte b/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte index 74049ad70be..de4069b7b42 100644 --- a/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte +++ b/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte @@ -33,7 +33,7 @@ } from "@rilldata/web-common/runtime-client"; import { InfoIcon } from "lucide-svelte"; import type { Interval } from "luxon"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { getCanvasStore } from "@rilldata/web-common/features/canvas/state-managers/state-managers"; import CanvasFilterChipsReadOnly from "@rilldata/web-common/features/dashboards/filters/CanvasFilterChipsReadOnly.svelte"; import { defaults, superForm } from "sveltekit-superforms"; @@ -51,11 +51,11 @@ export let metricsViewNames: string[]; export let onClose = () => {}; + const runtimeClient = useRuntimeClient(); + let filterState: undefined | Awaited> = undefined; - $: ({ instanceId } = $runtime); - $: ({ name: resourceName, kind: resourceKind } = resource); $: ({ url } = $page); @@ -123,7 +123,7 @@ if (resource.kind === ResourceKind.Canvas) { const uiFilters = getCanvasStore( resourceName, - instanceId, + runtimeClient.instanceId, ).canvasEntity.filterManager.getUIFiltersFromString(searchParams); return { diff --git a/web-admin/src/features/bookmarks/CanvasBookmarks.svelte b/web-admin/src/features/bookmarks/CanvasBookmarks.svelte index 30cfa28afcb..f4bb8f2da53 100644 --- a/web-admin/src/features/bookmarks/CanvasBookmarks.svelte +++ b/web-admin/src/features/bookmarks/CanvasBookmarks.svelte @@ -3,14 +3,14 @@ import { getCanvasCategorisedBookmarks } from "@rilldata/web-admin/features/bookmarks/selectors.ts"; import { useCanvas } from "@rilldata/web-common/features/canvas/selector"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.ts"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { writable } from "svelte/store"; export let organization: string; export let project: string; export let canvasName: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); const orgAndProjectNameStore = writable({ organization, project }); $: orgAndProjectNameStore.set({ organization, project }); @@ -23,7 +23,7 @@ canvasNameStore, ); - $: canvasResponse = useCanvas(instanceId, canvasName); + $: canvasResponse = useCanvas(runtimeClient, canvasName); $: metricsViews = $canvasResponse.data?.metricsViews || {}; diff --git a/web-admin/src/features/dashboards/listing/DashboardsTable.svelte b/web-admin/src/features/dashboards/listing/DashboardsTable.svelte index 831f3cd7d24..280df562578 100644 --- a/web-admin/src/features/dashboards/listing/DashboardsTable.svelte +++ b/web-admin/src/features/dashboards/listing/DashboardsTable.svelte @@ -6,7 +6,7 @@ import ExploreIcon from "@rilldata/web-common/components/icons/ExploreIcon.svelte"; import DelayedSpinner from "@rilldata/web-common/features/entity-management/DelayedSpinner.svelte"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { flexRender } from "@tanstack/svelte-table"; import DashboardsTableCompositeCell from "./DashboardsTableCompositeCell.svelte"; import { useDashboards } from "./selectors"; @@ -15,12 +15,12 @@ export let isPreview = false; export let previewLimit = 5; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: ({ params: { organization, project }, } = $page); - $: dashboards = useDashboards(instanceId); + $: dashboards = useDashboards(runtimeClient); $: ({ data: dashboardsData, isLoading, diff --git a/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte b/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte index dab0e38f48a..8d3647d0a8c 100644 --- a/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte +++ b/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte @@ -2,15 +2,15 @@ import Tooltip from "@rilldata/web-common/components/tooltip/Tooltip.svelte"; import TooltipContent from "@rilldata/web-common/components/tooltip/TooltipContent.svelte"; import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { timeAgo } from "./utils"; export let dashboard: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: lastRefreshedQuery = createRuntimeServiceGetExplore( - instanceId, + runtimeClient, { name: dashboard }, { query: { diff --git a/web-admin/src/features/embeds/ExploreEmbed.svelte b/web-admin/src/features/embeds/ExploreEmbed.svelte index a242a103aee..9e00a9c242b 100644 --- a/web-admin/src/features/embeds/ExploreEmbed.svelte +++ b/web-admin/src/features/embeds/ExploreEmbed.svelte @@ -4,6 +4,7 @@ import DashboardStateManager from "@rilldata/web-common/features/dashboards/state-managers/loaders/DashboardStateManager.svelte"; import { derived } from "svelte/store"; import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { errorStore } from "../../components/errors/error-store"; import { EmbedStorageNamespacePrefix } from "@rilldata/web-admin/features/embeds/constants.ts"; import { @@ -14,7 +15,9 @@ export let instanceId: string; export let exploreName: string; - $: explore = createRuntimeServiceGetExplore(instanceId, { + const runtimeClient = useRuntimeClient(); + + $: explore = createRuntimeServiceGetExplore(runtimeClient, { name: exploreName, }); $: ({ isSuccess, isError, error, data } = $explore); diff --git a/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte b/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte index 7e1609f80f0..c4b35b3dca5 100644 --- a/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte +++ b/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte @@ -11,11 +11,13 @@ V1Resource, V1ResourceName, } from "@rilldata/web-common/runtime-client"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let instanceId: string; export let activeResource: V1ResourceName; export let navigationEnabled: boolean = true; + const runtimeClient = useRuntimeClient(); const { twoTieredNavigation, dashboardChat } = featureFlags; $: onProjectPage = !activeResource; @@ -27,7 +29,7 @@ activeResource?.kind === ResourceKind.MetricsView.toString())); // Dashboard breadcrumb - $: dashboardsQuery = useValidDashboards(instanceId); + $: dashboardsQuery = useValidDashboards(runtimeClient); $: ({ data: dashboards } = $dashboardsQuery); let currentResource: V1Resource; $: currentResource = dashboards?.find( diff --git a/web-admin/src/features/projects/github/ProjectGithubConnection.svelte b/web-admin/src/features/projects/github/ProjectGithubConnection.svelte index 5df014200de..151e62dc312 100644 --- a/web-admin/src/features/projects/github/ProjectGithubConnection.svelte +++ b/web-admin/src/features/projects/github/ProjectGithubConnection.svelte @@ -7,12 +7,12 @@ getRepoNameFromGitRemote, getGitUrlFromRemote, } from "@rilldata/web-common/features/project/deploy/github-utils"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let organization: string; export let project: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: proj = createAdminServiceGetProject(organization, project); $: ({ @@ -22,9 +22,9 @@ $: isGithubConnected = !!gitRemote; $: isManagedGit = !!managedGitId; $: repoName = getRepoNameFromGitRemote(gitRemote); - $: githubLastSynced = useGithubLastSynced(instanceId); + $: githubLastSynced = useGithubLastSynced(runtimeClient); $: dashboardsLastUpdated = useDashboardsLastUpdated( - instanceId, + runtimeClient, organization, project, ); diff --git a/web-admin/src/features/projects/status/logs/ProjectLogsPage.svelte b/web-admin/src/features/projects/status/logs/ProjectLogsPage.svelte index f5367900e99..83affa8b8e7 100644 --- a/web-admin/src/features/projects/status/logs/ProjectLogsPage.svelte +++ b/web-admin/src/features/projects/status/logs/ProjectLogsPage.svelte @@ -5,7 +5,7 @@ SSEConnectionManager, ConnectionStatus, } from "@rilldata/web-common/runtime-client/sse-connection-manager"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { V1LogLevel, type V1Log } from "@rilldata/web-common/runtime-client"; import Search from "@rilldata/web-common/components/search/Search.svelte"; import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu"; @@ -17,6 +17,8 @@ parseStringParam, } from "../url-filter-sync"; + const runtimeClient = useRuntimeClient(); + const MAX_LOGS = 500; const REPLAY_LIMIT = 100; @@ -97,7 +99,7 @@ onMount(() => { mounted = true; - const { host, instanceId } = $runtime; + const { host, instanceId } = runtimeClient; if (!host || !instanceId) return; const url = `${host}/v1/instances/${instanceId}/sse?events=log&logs_replay=true&logs_replay_limit=${REPLAY_LIMIT}`; @@ -154,7 +156,7 @@ } function retryConnection() { - const { host, instanceId } = $runtime; + const { host, instanceId } = runtimeClient; if (!host || !instanceId) return; connectionError = null; diff --git a/web-admin/src/features/projects/status/overview/DeploymentSection.svelte b/web-admin/src/features/projects/status/overview/DeploymentSection.svelte index 205c7bffd21..0cd0724bc07 100644 --- a/web-admin/src/features/projects/status/overview/DeploymentSection.svelte +++ b/web-admin/src/features/projects/status/overview/DeploymentSection.svelte @@ -6,7 +6,7 @@ import { useDashboardsLastUpdated } from "@rilldata/web-admin/features/dashboards/listing/selectors"; import { useGithubLastSynced } from "@rilldata/web-admin/features/projects/selectors"; import { createRuntimeServiceGetInstance } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useProjectDeployment, useRuntimeVersion } from "../selectors"; import { formatEnvironmentName, @@ -21,7 +21,7 @@ export let organization: string; export let project: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); // Deployment $: projectDeployment = useProjectDeployment(organization, project); @@ -34,9 +34,9 @@ $: projectData = $proj.data?.project; $: primaryBranch = projectData?.primaryBranch; // Last synced - $: githubLastSynced = useGithubLastSynced(instanceId); + $: githubLastSynced = useGithubLastSynced(runtimeClient); $: dashboardsLastUpdated = useDashboardsLastUpdated( - instanceId, + runtimeClient, organization, project, ); @@ -47,7 +47,7 @@ $: version = $runtimeVersionQuery.data?.version ?? ""; // Connectors — sensitive: true is needed to read projectConnectors (OLAP/AI connector types) - $: instanceQuery = createRuntimeServiceGetInstance(instanceId, { + $: instanceQuery = createRuntimeServiceGetInstance(runtimeClient, { sensitive: true, }); $: instance = $instanceQuery.data?.instance; diff --git a/web-admin/src/features/projects/status/overview/ErrorsSection.svelte b/web-admin/src/features/projects/status/overview/ErrorsSection.svelte index fe11c38d144..8eb03ea4a3b 100644 --- a/web-admin/src/features/projects/status/overview/ErrorsSection.svelte +++ b/web-admin/src/features/projects/status/overview/ErrorsSection.svelte @@ -10,17 +10,17 @@ createRuntimeServiceGetResource, type V1Resource, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useResources } from "../selectors"; import AlertCircleOutline from "@rilldata/web-common/components/icons/AlertCircleOutline.svelte"; import { groupErrorsByKind, pluralizeKind } from "./overview-utils"; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: basePage = `/${$page.params.organization}/${$page.params.project}/-/status`; // Parse errors $: projectParserQuery = createRuntimeServiceGetResource( - instanceId, + runtimeClient, { name: { kind: ResourceKind.ProjectParser, @@ -33,7 +33,7 @@ $projectParserQuery.data?.resource?.projectParser?.state?.parseErrors ?? []; // Resource errors grouped by kind - $: resourcesQuery = useResources(instanceId); + $: resourcesQuery = useResources(runtimeClient); $: allResources = ($resourcesQuery.data?.resources ?? []) as V1Resource[]; $: erroredResources = allResources.filter((r) => !!r.meta?.reconcileError); diff --git a/web-admin/src/features/projects/status/overview/ProjectGlobalStatusIndicator.svelte b/web-admin/src/features/projects/status/overview/ProjectGlobalStatusIndicator.svelte index 33a32a2824a..7d75535f0f8 100644 --- a/web-admin/src/features/projects/status/overview/ProjectGlobalStatusIndicator.svelte +++ b/web-admin/src/features/projects/status/overview/ProjectGlobalStatusIndicator.svelte @@ -5,7 +5,7 @@ import LoadingSpinner from "@rilldata/web-common/components/icons/LoadingSpinner.svelte"; import { useProjectParser } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { createRuntimeServiceListResources } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useQueryClient } from "@tanstack/svelte-query"; import { useProjectDeployment } from "../selectors"; @@ -14,7 +14,7 @@ export let organization: string; export let project: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: projectDeployment = useProjectDeployment(organization, project); $: ({ data: deployment } = $projectDeployment); @@ -22,8 +22,8 @@ deployment?.status !== V1DeploymentStatus.DEPLOYMENT_STATUS_RUNNING; $: hasResourceErrorsQuery = createRuntimeServiceListResources( - instanceId, - undefined, + runtimeClient, + {}, { query: { select: (data) => { @@ -43,7 +43,7 @@ isLoading: hasResourceErrorsLoading, } = $hasResourceErrorsQuery); - $: projectParserQuery = useProjectParser(queryClient, instanceId, { + $: projectParserQuery = useProjectParser(queryClient, runtimeClient, { refetchOnMount: true, refetchOnWindowFocus: true, }); diff --git a/web-admin/src/features/projects/status/overview/ResourcesSection.svelte b/web-admin/src/features/projects/status/overview/ResourcesSection.svelte index 57b47dc34d1..d9545d5e528 100644 --- a/web-admin/src/features/projects/status/overview/ResourcesSection.svelte +++ b/web-admin/src/features/projects/status/overview/ResourcesSection.svelte @@ -1,15 +1,15 @@ diff --git a/web-admin/src/features/projects/status/overview/TablesSection.svelte b/web-admin/src/features/projects/status/overview/TablesSection.svelte index fbc45f8c834..e8c84545a22 100644 --- a/web-admin/src/features/projects/status/overview/TablesSection.svelte +++ b/web-admin/src/features/projects/status/overview/TablesSection.svelte @@ -1,17 +1,17 @@ diff --git a/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte b/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte index 151a7a4c13d..295692795ea 100644 --- a/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte +++ b/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte @@ -3,12 +3,12 @@ import ResourceTypeBadge from "@rilldata/web-common/features/entity-management/ResourceTypeBadge.svelte"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { - createRuntimeServiceCreateTrigger, + createRuntimeServiceCreateTriggerMutation, getRuntimeServiceListResourcesQueryKey, V1ReconcileStatus, type V1Resource, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { goto } from "$app/navigation"; import { page } from "$app/stores"; import { useQueryClient } from "@tanstack/svelte-query"; @@ -39,7 +39,9 @@ let openDropdownResourceKey = ""; - const createTrigger = createRuntimeServiceCreateTrigger(); + const runtimeClient = useRuntimeClient(); + const createTrigger = + createRuntimeServiceCreateTriggerMutation(runtimeClient); const queryClient = useQueryClient(); const openRefreshDialog = ( @@ -83,17 +85,14 @@ const handleRefreshErroredPartitions = async () => { await $createTrigger.mutateAsync({ - instanceId: $runtime.instanceId, - data: { - models: [ - { model: erroredPartitionsModelName, allErroredPartitions: true }, - ], - }, + models: [ + { model: erroredPartitionsModelName, allErroredPartitions: true }, + ], }); await queryClient.invalidateQueries({ queryKey: getRuntimeServiceListResourcesQueryKey( - $runtime.instanceId, + runtimeClient.instanceId, undefined, ), }); @@ -107,28 +106,22 @@ const handleRefresh = async () => { if (dialogResourceKind === ResourceKind.Model) { await $createTrigger.mutateAsync({ - instanceId: $runtime.instanceId, - data: { - models: [ - { - model: dialogResourceName, - full: dialogRefreshType === "full", - }, - ], - }, + models: [ + { + model: dialogResourceName, + full: dialogRefreshType === "full", + }, + ], }); } else { await $createTrigger.mutateAsync({ - instanceId: $runtime.instanceId, - data: { - resources: [{ kind: dialogResourceKind, name: dialogResourceName }], - }, + resources: [{ kind: dialogResourceKind, name: dialogResourceName }], }); } await queryClient.invalidateQueries({ queryKey: getRuntimeServiceListResourcesQueryKey( - $runtime.instanceId, + runtimeClient.instanceId, undefined, ), }); diff --git a/web-admin/src/features/projects/status/tables/ProjectTables.svelte b/web-admin/src/features/projects/status/tables/ProjectTables.svelte index c17936d50d0..3f1ba0f0b5b 100644 --- a/web-admin/src/features/projects/status/tables/ProjectTables.svelte +++ b/web-admin/src/features/projects/status/tables/ProjectTables.svelte @@ -7,9 +7,9 @@ import CaretUpIcon from "@rilldata/web-common/components/icons/CaretUpIcon.svelte"; import { goto } from "$app/navigation"; import { page } from "$app/stores"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { - createRuntimeServiceCreateTrigger, + createRuntimeServiceCreateTriggerMutation, createRuntimeServiceGetInstance, getRuntimeServiceListResourcesQueryKey, type V1Resource, @@ -36,10 +36,10 @@ } from "../url-filter-sync"; import { onMount } from "svelte"; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); // OLAP connector info - $: instanceQuery = createRuntimeServiceGetInstance(instanceId, { + $: instanceQuery = createRuntimeServiceGetInstance(runtimeClient, { sensitive: true, }); $: instance = $instanceQuery.data?.instance; @@ -67,12 +67,12 @@ // Use a writable store so createInfiniteQuery is called once during init; // parameter changes flow reactively through the store. const tablesParams = writable({ - instanceId: "", + client: runtimeClient, connector: "", searchPattern: undefined as string | undefined, }); $: tablesParams.set({ - instanceId, + client: runtimeClient, connector: connectorName, searchPattern, }); @@ -84,7 +84,7 @@ // TODO: populate from OLAPGetTable responses when per-table metadata is available let isViewMap = new Map(); // createQuery (unlike createInfiniteQuery) handles re-creation in $: blocks safely - $: modelResourcesQuery = useModelResources(instanceId); + $: modelResourcesQuery = useModelResources(runtimeClient); $: modelResources = $modelResourcesQuery.data ?? new Map(); let typeFilter: (typeof typeValues)[number] = parseEnumParam( $page.url.searchParams.get("type"), @@ -145,7 +145,8 @@ let selectedResource: V1Resource | null = null; let selectedModelName = ""; - const createTrigger = createRuntimeServiceCreateTrigger(); + const createTrigger = + createRuntimeServiceCreateTriggerMutation(runtimeClient); const queryClient = useQueryClient(); // Handlers @@ -190,14 +191,14 @@ try { await $createTrigger.mutateAsync({ - instanceId, - data: { - models: [{ model: selectedModelName, ...opts }], - }, + models: [{ model: selectedModelName, ...opts }], }); await queryClient.invalidateQueries({ - queryKey: getRuntimeServiceListResourcesQueryKey(instanceId, undefined), + queryKey: getRuntimeServiceListResourcesQueryKey( + runtimeClient.instanceId, + undefined, + ), }); } catch (error) { console.error("Failed to refresh model:", error); diff --git a/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte b/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte index 53e6c064033..c270ff41be4 100644 --- a/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte +++ b/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte @@ -14,7 +14,7 @@ import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; import ScheduledReportDialog from "@rilldata/web-common/features/scheduled-reports/ScheduledReportDialog.svelte"; import { getRuntimeServiceListResourcesQueryKey } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useQueryClient } from "@tanstack/svelte-query"; import { createAdminServiceDeleteReport } from "../../../client"; import ProjectAccessControls from "../../projects/ProjectAccessControls.svelte"; @@ -37,14 +37,14 @@ export let project: string; export let report: string; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); - $: reportQuery = useReport(instanceId, report); - $: isReportCreatedByCode = useIsReportCreatedByCode(instanceId, report); + $: reportQuery = useReport(runtimeClient, report); + $: isReportCreatedByCode = useIsReportCreatedByCode(runtimeClient, report); // Get dashboard - $: exploreName = useReportDashboardName(instanceId, report); - $: validSpecResp = useExploreValidSpec(instanceId, $exploreName.data); + $: exploreName = useReportDashboardName(runtimeClient, report); + $: validSpecResp = useExploreValidSpec(runtimeClient, $exploreName.data); $: exploreSpec = $validSpecResp.data?.explore; $: dashboardTitle = exploreSpec?.displayName || $exploreName.data; $: dashboardDoesNotExist = @@ -53,7 +53,7 @@ $validSpecResp.error.response.status === 404; $: exploreIsValid = hasValidMetricsViewTimeRange( - instanceId, + runtimeClient, $exploreName.data, ); @@ -87,7 +87,7 @@ forceOpenPivot: true, }, { - instanceId, + instanceId: runtimeClient.instanceId, organization, project, }, @@ -109,7 +109,9 @@ name: $reportQuery.data.resource.meta.name.name, }); queryClient.invalidateQueries({ - queryKey: getRuntimeServiceListResourcesQueryKey(instanceId), + queryKey: getRuntimeServiceListResourcesQueryKey( + runtimeClient.instanceId, + ), }); goto(`/${organization}/${project}/-/reports`); } diff --git a/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte b/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte index ba96ed464b3..d942a96e9b9 100644 --- a/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte +++ b/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte @@ -6,7 +6,7 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { getRuntimeServiceGetResourceQueryKey } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { useQueryClient } from "@tanstack/svelte-query"; import { useReport } from "../selectors"; @@ -14,11 +14,10 @@ export let project: string; export let report: string; - $: ({ instanceId } = $runtime); - + const runtimeClient = useRuntimeClient(); const queryClient = useQueryClient(); const triggerReport = createAdminServiceTriggerReport(); - const reportQuery = useReport(instanceId, report); + const reportQuery = useReport(runtimeClient, report); async function handleRunNow() { const lastExecution = @@ -42,10 +41,13 @@ lastExecution ) { await queryClient.invalidateQueries({ - queryKey: getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.name": report, - "name.kind": ResourceKind.Report, - }), + queryKey: getRuntimeServiceGetResourceQueryKey( + runtimeClient.instanceId, + { + "name.name": report, + "name.kind": ResourceKind.Report, + }, + ), }); await new Promise((resolve) => setTimeout(resolve, 1000)); } diff --git a/web-admin/src/routes/[organization]/[project]/+page.svelte b/web-admin/src/routes/[organization]/[project]/+page.svelte index 46177f6510b..124aec73b06 100644 --- a/web-admin/src/routes/[organization]/[project]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/+page.svelte @@ -6,18 +6,18 @@ import DelayedContent from "@rilldata/web-common/features/entity-management/DelayedContent.svelte"; import { featureFlags } from "@rilldata/web-common/features/feature-flags"; import { createRuntimeServiceGetInstance } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; const { chat } = featureFlags; + const runtimeClient = useRuntimeClient(); + $: ({ params: { project }, } = $page); - $: ({ instanceId } = $runtime); - // Query the instance to get the project display name - $: instanceQuery = createRuntimeServiceGetInstance(instanceId); + $: instanceQuery = createRuntimeServiceGetInstance(runtimeClient, {}); $: projectDisplayName = $instanceQuery.data?.instance?.projectDisplayName || project; $: isLoadingDisplayName = $instanceQuery.isLoading; diff --git a/web-admin/src/routes/[organization]/[project]/-/deploying/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/deploying/+page.svelte index c9fd8c2b6c9..1d80acbe29d 100644 --- a/web-admin/src/routes/[organization]/[project]/-/deploying/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/deploying/+page.svelte @@ -4,17 +4,17 @@ import { useDeployingDashboards } from "@rilldata/web-admin/features/dashboards/listing/deploying-dashboards.ts"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus.ts"; import type { PageData } from "./$types"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; export let data: PageData; const { organization, project, deployingDashboard } = data; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); // Make this reactive so that it fires once params are ready. // During a first deploy, runtime might not be available when deployment is still being created in the backend. $: deployingDashboardResp = useDeployingDashboards( - instanceId, + runtimeClient, organization.name, project.name, deployingDashboard, diff --git a/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte index a607a623c66..0e979121522 100644 --- a/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte @@ -8,11 +8,11 @@ import { useDashboards } from "@rilldata/web-admin/features/dashboards/listing/selectors"; import PublicURLsResourceTable from "@rilldata/web-admin/features/public-urls/PublicURLsResourceTable.svelte"; import DelayedSpinner from "@rilldata/web-common/features/entity-management/DelayedSpinner.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { useQueryClient } from "@tanstack/svelte-query"; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: organization = $page.params.organization; $: project = $page.params.project; @@ -40,7 +40,7 @@ (page) => page.tokens ?? [], ) ?? []; - $: dashboards = useDashboards(instanceId); + $: dashboards = useDashboards(runtimeClient); $: allRowsWithDashboardTitle = allRows.map((token) => { const dashboard = $dashboards.data?.find( diff --git a/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte index b7bdee3fa8d..f00814cf55a 100644 --- a/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte @@ -11,9 +11,9 @@ import DashboardStateManager from "@rilldata/web-common/features/dashboards/state-managers/loaders/DashboardStateManager.svelte"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; - $: ({ instanceId } = $runtime); + const runtimeClient = useRuntimeClient(); $: ({ organization, project, dashboard: exploreName } = $page.params); @@ -34,7 +34,7 @@ } // Call `GetExplore` to get the Explore's metrics view - $: exploreQuery = createRuntimeServiceGetExplore(instanceId, { + $: exploreQuery = createRuntimeServiceGetExplore(runtimeClient, { name: exploreName, }); $: ({ data: explore } = $exploreQuery); diff --git a/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte b/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte index 6342cd40fc4..2af842a964a 100644 --- a/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte @@ -1,7 +1,7 @@ -{#key instanceId} - +{#key runtimeClient.instanceId} + {/key} diff --git a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte index ed2ac1e0d94..b62bef1506c 100644 --- a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte +++ b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte @@ -21,9 +21,8 @@ let columns: VirtualizedTableColumns[] | undefined; let rows: V1TableRowsResponseDataItem[] | undefined; - $: ({ instanceId } = runtimeClient); - - $: columnsQuery = createQueryServiceTableColumns(instanceId, table, { + $: columnsQuery = createQueryServiceTableColumns(runtimeClient, { + tableName: table, connector, database, databaseSchema, @@ -34,7 +33,8 @@ error: columnsError, } = $columnsQuery); - $: rowsQuery = createQueryServiceTableRows(instanceId, table, { + $: rowsQuery = createQueryServiceTableRows(runtimeClient, { + tableName: table, connector, database, databaseSchema, diff --git a/web-common/src/features/alerts/AlertForm.svelte b/web-common/src/features/alerts/AlertForm.svelte index 7ef181ff6e3..b6056316792 100644 --- a/web-common/src/features/alerts/AlertForm.svelte +++ b/web-common/src/features/alerts/AlertForm.svelte @@ -89,7 +89,7 @@ $: metricsViewName = exploreSpec.metricsView ?? ""; $: allTimeRangeResp = useMetricsViewTimeRange( - instanceId, + runtimeClient, metricsViewName, undefined, queryClient, @@ -124,7 +124,7 @@ $exploreState!, ) : getFiltersAndTimeControlsFromAggregationRequest( - instanceId, + runtimeClient, metricsViewName, exploreName, JSON.parse( @@ -220,8 +220,10 @@ if (!isCreateForm) { void queryClient.invalidateQueries({ queryKey: getRuntimeServiceGetResourceQueryKey(instanceId, { - "name.name": alertName, - "name.kind": ResourceKind.Alert, + name: { + name: alertName, + kind: ResourceKind.Alert, + }, }), }); } diff --git a/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte b/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte index 7a96de4c6e3..664f7296f91 100644 --- a/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte +++ b/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte @@ -23,7 +23,7 @@ $: ({ selectedComparisonTimeRange } = timeControls); $: metricsView = useMetricsViewValidSpec( - runtimeClient.instanceId, + runtimeClient, $form["metricsViewName"], ); diff --git a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte index d8a19706fd3..c88881762bb 100644 --- a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte +++ b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte @@ -20,10 +20,7 @@ $: ({ form } = superFormInstance); $: metricsViewName = $form["metricsViewName"]; // memoise to avoid rerenders - $: metricsView = useMetricsViewValidSpec( - runtimeClient.instanceId, - metricsViewName, - ); + $: metricsView = useMetricsViewValidSpec(runtimeClient, metricsViewName); $: measureOptions = $metricsView.data?.measures @@ -55,7 +52,7 @@
diff --git a/web-common/src/features/canvas/CanvasBuilder.svelte b/web-common/src/features/canvas/CanvasBuilder.svelte index c3f57950eb3..3ac45874ee1 100644 --- a/web-common/src/features/canvas/CanvasBuilder.svelte +++ b/web-common/src/features/canvas/CanvasBuilder.svelte @@ -75,7 +75,10 @@ $: canvasData = $specStore.data; $: metricsViews = Object.entries(canvasData?.metricsViews ?? {}); - $: metricsViewQuery = useDefaultMetrics(instanceId, metricsViews?.[0]?.[0]); + $: metricsViewQuery = useDefaultMetrics( + runtimeClient, + metricsViews?.[0]?.[0], + ); $: ({ editorContent, updateEditorContent } = fileArtifact); $: contents = parseDocument($editorContent ?? ""); diff --git a/web-common/src/features/canvas/CanvasInitialization.svelte b/web-common/src/features/canvas/CanvasInitialization.svelte index 85ddc90433a..12fa37806c5 100644 --- a/web-common/src/features/canvas/CanvasInitialization.svelte +++ b/web-common/src/features/canvas/CanvasInitialization.svelte @@ -39,12 +39,7 @@ $: existingStore = getCanvasStoreUnguarded(canvasName, instanceId); - $: resourceQuery = useResource( - instanceId, - canvasName, - ResourceKind.Canvas, - {}, - ); + $: resourceQuery = useResource(client, canvasName, ResourceKind.Canvas, {}); $: fetchedCanvasQuery = !existingStore ? createQueryServiceResolveCanvas( diff --git a/web-common/src/features/canvas/CanvasPreviewCTAs.svelte b/web-common/src/features/canvas/CanvasPreviewCTAs.svelte index f944646a4b2..b22945466a0 100644 --- a/web-common/src/features/canvas/CanvasPreviewCTAs.svelte +++ b/web-common/src/features/canvas/CanvasPreviewCTAs.svelte @@ -9,9 +9,7 @@ export let canvasName: string; - $: ({ instanceId } = client); - - $: canvasQuery = useCanvas(instanceId, canvasName); + $: canvasQuery = useCanvas(client, canvasName); $: canvasFilePath = $canvasQuery.data?.filePath ?? ""; const { dashboardChat, readOnly } = featureFlags; diff --git a/web-common/src/features/canvas/components/markdown/Markdown.svelte b/web-common/src/features/canvas/components/markdown/Markdown.svelte index 595e1e43e35..7bced5f3437 100644 --- a/web-common/src/features/canvas/components/markdown/Markdown.svelte +++ b/web-common/src/features/canvas/components/markdown/Markdown.svelte @@ -30,7 +30,7 @@ const queryOptionsStore = getResolveTemplatedStringQueryOptions( component, - runtimeClient.instanceId, + runtimeClient, ); $: resolveQuery = createQuery(queryOptionsStore, queryClient); diff --git a/web-common/src/features/canvas/explore-link/ExploreLink.svelte b/web-common/src/features/canvas/explore-link/ExploreLink.svelte index d2d886cc60c..afa6f99bb4f 100644 --- a/web-common/src/features/canvas/explore-link/ExploreLink.svelte +++ b/web-common/src/features/canvas/explore-link/ExploreLink.svelte @@ -13,7 +13,6 @@ export let component: BaseCanvasComponent; export let mode: "inline" | "dropdown-item" | "icon-button" = "inline"; - $: ({ instanceId } = client); $: organization = $page.params.organization; $: project = $page.params.project; @@ -21,7 +20,7 @@ $: metricsViewName = $spec?.metrics_view; // Check if component can be linked to explore - $: exploreAvailability = useExploreAvailability(instanceId, metricsViewName); + $: exploreAvailability = useExploreAvailability(client, metricsViewName); $: context = derived( [exploreAvailability, component.timeAndFilterStore], diff --git a/web-common/src/features/canvas/inspector/MetricSelectorDropdown.svelte b/web-common/src/features/canvas/inspector/MetricSelectorDropdown.svelte index 4679d5ca064..02bdee01495 100644 --- a/web-common/src/features/canvas/inspector/MetricSelectorDropdown.svelte +++ b/web-common/src/features/canvas/inspector/MetricSelectorDropdown.svelte @@ -19,14 +19,9 @@ export let key: AllKeys; export let inputParam: ComponentInputParam; - $: ({ instanceId } = client); - $: spec = component.specStore; - $: metricsViewsQuery = useFilteredResources( - instanceId, - ResourceKind.MetricsView, - ); + $: metricsViewsQuery = useFilteredResources(client, ResourceKind.MetricsView); $: metricsViews = $metricsViewsQuery?.data ?? []; $: metricsViewNames = metricsViews diff --git a/web-common/src/features/canvas/inspector/PageEditor.svelte b/web-common/src/features/canvas/inspector/PageEditor.svelte index 5f03fc3eabf..c115b9fd5a4 100644 --- a/web-common/src/features/canvas/inspector/PageEditor.svelte +++ b/web-common/src/features/canvas/inspector/PageEditor.svelte @@ -87,7 +87,7 @@ $: title = stringGuard(rawTitle) || stringGuard(rawDisplayName); - $: themesQuery = useFilteredResources(client.instanceId, ResourceKind.Theme); + $: themesQuery = useFilteredResources(client, ResourceKind.Theme); $: themeNames = ($themesQuery?.data ?? []) .map((theme) => theme.meta?.name?.name ?? "") diff --git a/web-common/src/features/chat/core/messages/chart/ChartBlock.svelte b/web-common/src/features/chat/core/messages/chart/ChartBlock.svelte index bd455741d6d..73ab0c15fa3 100644 --- a/web-common/src/features/chat/core/messages/chart/ChartBlock.svelte +++ b/web-common/src/features/chat/core/messages/chart/ChartBlock.svelte @@ -28,8 +28,6 @@ $: organization = $page.params.organization; $: project = $page.params.project; - $: instanceId = runtimeClient.instanceId; - // Cast chartSpec to any for property access (type comes from parsed JSON) $: chartSpec = block.chartSpec as any; @@ -76,8 +74,8 @@ }); $: defaultThemeQuery = createRuntimeServiceGetInstance( - instanceId, - undefined, + runtimeClient, + {}, { query: { select: (data) => data?.instance?.theme, @@ -89,7 +87,7 @@ $: themeName = $defaultThemeQuery?.data; $: themeQuery = useResource( - instanceId, + runtimeClient, themeName!, ResourceKind.Theme, { diff --git a/web-common/src/features/column-profile/column-types/NestedProfile.svelte b/web-common/src/features/column-profile/column-types/NestedProfile.svelte index 15f91eacf02..8310e278f9e 100644 --- a/web-common/src/features/column-profile/column-types/NestedProfile.svelte +++ b/web-common/src/features/column-profile/column-types/NestedProfile.svelte @@ -4,7 +4,6 @@ DATA_TYPE_COLORS, INTERVALS, } from "@rilldata/web-common/lib/duckdb-data-types"; - import { httpRequestQueue } from "../../../runtime-client/http-client"; import { useRuntimeClient } from "../../../runtime-client/v2"; import ColumnProfileIcon from "../ColumnProfileIcon.svelte"; import ProfileContainer from "../ProfileContainer.svelte"; @@ -71,7 +70,6 @@ function toggleColumnProfile() { active = !active; - httpRequestQueue.prioritiseColumn(objectName, columnName, active); } $: fetchingSummaries = isFetching($nulls); diff --git a/web-common/src/features/column-profile/column-types/NumericProfile.svelte b/web-common/src/features/column-profile/column-types/NumericProfile.svelte index d25cdb347f8..461aafba842 100644 --- a/web-common/src/features/column-profile/column-types/NumericProfile.svelte +++ b/web-common/src/features/column-profile/column-types/NumericProfile.svelte @@ -13,7 +13,6 @@ } from "@rilldata/web-common/runtime-client/v2/gen"; import { getPriorityForColumn } from "@rilldata/web-common/runtime-client/v2/request-priorities"; import { derived } from "svelte/store"; - import { httpRequestQueue } from "../../../runtime-client/http-client"; import ColumnProfileIcon from "../ColumnProfileIcon.svelte"; import ProfileContainer from "../ProfileContainer.svelte"; import { @@ -147,7 +146,6 @@ function toggleColumnProfile() { active = !active; - httpRequestQueue.prioritiseColumn(objectName, columnName, active); } $: fetchingSummaries = FLOATS.has(type) diff --git a/web-common/src/features/column-profile/column-types/TimestampProfile.svelte b/web-common/src/features/column-profile/column-types/TimestampProfile.svelte index e9ca292ebac..9dc1da1d90a 100644 --- a/web-common/src/features/column-profile/column-types/TimestampProfile.svelte +++ b/web-common/src/features/column-profile/column-types/TimestampProfile.svelte @@ -4,7 +4,6 @@ import WithParentClientRect from "@rilldata/web-common/components/data-graphic/functional-components/WithParentClientRect.svelte"; import { copyToClipboard } from "@rilldata/web-common/lib/actions/copy-to-clipboard"; import { TIMESTAMP_TOKENS } from "@rilldata/web-common/lib/duckdb-data-types"; - import { httpRequestQueue } from "../../../runtime-client/http-client"; import { useRuntimeClient } from "../../../runtime-client/v2"; import ColumnProfileIcon from "../ColumnProfileIcon.svelte"; import ProfileContainer from "../ProfileContainer.svelte"; @@ -57,7 +56,6 @@ function toggleColumnProfile() { active = !active; - httpRequestQueue.prioritiseColumn(objectName, columnName, active); } $: fetchingSummaries = isFetching($timeSeries, $nullPercentage); diff --git a/web-common/src/features/column-profile/column-types/VarcharProfile.svelte b/web-common/src/features/column-profile/column-types/VarcharProfile.svelte index ebffe9e37f2..2f072d9c725 100644 --- a/web-common/src/features/column-profile/column-types/VarcharProfile.svelte +++ b/web-common/src/features/column-profile/column-types/VarcharProfile.svelte @@ -1,6 +1,5 @@ @@ -45,7 +44,7 @@ active={viewAsMenuOpen} removeTooltipText="Clear view" onRemove={() => { - updateDevJWT(queryClient, instanceId, null, client); + updateDevJWT(queryClient, client, null); }} >
@@ -62,7 +61,7 @@ {#each $mockUsers.data as user (user?.email)} { - updateDevJWT(queryClient, instanceId, user, client); + updateDevJWT(queryClient, client, user); }} class="flex gap-x-2 items-center" > diff --git a/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte b/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte index 175ec27e91e..00e882c1666 100644 --- a/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte +++ b/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte @@ -13,6 +13,7 @@ createQueryServiceMetricsViewAggregation, V1Operation, } from "@rilldata/web-common/runtime-client"; + import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { onMount } from "svelte"; import { getComparisonRequestMeasures, @@ -42,6 +43,7 @@ import type { selectedDimensionValues } from "../state-managers/selectors/dimension-filters"; import { getMeasuresForDimensionOrLeaderboardDisplay } from "../state-managers/selectors/dashboard-queries"; + const runtimeClient = useRuntimeClient(); const gutterWidth = 24; export let dimension: MetricsViewSpecDimension; @@ -165,9 +167,9 @@ ); $: sortedQuery = createQueryServiceMetricsViewAggregation( - instanceId, - metricsViewName, + runtimeClient, { + metricsView: metricsViewName, dimensions: [{ name: dimensionName }], measures, timeRange, @@ -185,9 +187,9 @@ ); $: totalsQuery = createQueryServiceMetricsViewAggregation( - instanceId, - metricsViewName, + runtimeClient, { + metricsView: metricsViewName, measures: leaderboardMeasureNames.map((name) => ({ name })), where, timeRange, @@ -223,9 +225,9 @@ $: belowTheFoldDataLimit = maxValuesToShow - aboveTheFold.length; $: belowTheFoldDataQuery = createQueryServiceMetricsViewAggregation( - instanceId, - metricsViewName, + runtimeClient, { + metricsView: metricsViewName, dimensions: [{ name: dimensionName }], where: sanitiseExpression( createAndExpression( diff --git a/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte b/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte index 3787fd3511b..b6261ae407a 100644 --- a/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte +++ b/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte @@ -20,7 +20,6 @@ export let timeRange: TimeRangeString; const client = useRuntimeClient(); - const { instanceId } = client; const SAMPLE_SIZE = 10000; const FALLBACK_SAMPLE_SIZE = 1000; @@ -33,9 +32,9 @@ $: timeDimension = $exploreState?.selectedTimeDimension; $: tableQuery = createQueryServiceMetricsViewRows( - instanceId, - metricsViewName, + client, { + metricsViewName, limit: $limit, where: filters, timeStart: timeRange.start, diff --git a/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte b/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte index 87150ff1f75..a9ae413070a 100644 --- a/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte +++ b/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte @@ -42,7 +42,6 @@ } = stateManagers; const client = useRuntimeClient(); - const { instanceId } = client; $: exploreState = useExploreState(exploreName); $: ({ whereFilter, dimensionThresholdFilters } = $exploreState); @@ -71,9 +70,9 @@ ); $: filteredTotalsQuery = createQueryServiceMetricsViewAggregation( - instanceId, - metricsViewName, + client, { + metricsView: metricsViewName, measures: [{ name: "count", builtinMeasure: "BUILTIN_MEASURE_COUNT" }], timeRange, where: filters, @@ -94,9 +93,9 @@ ); $: totalsQuery = createQueryServiceMetricsViewAggregation( - instanceId, - metricsViewName, + client, { + metricsView: metricsViewName, measures: [{ name: "count", builtinMeasure: "BUILTIN_MEASURE_COUNT" }], }, { diff --git a/web-common/src/features/dashboards/workspace/Dashboard.svelte b/web-common/src/features/dashboards/workspace/Dashboard.svelte index 66775b7cc8d..88727a8a17b 100644 --- a/web-common/src/features/dashboards/workspace/Dashboard.svelte +++ b/web-common/src/features/dashboards/workspace/Dashboard.svelte @@ -54,7 +54,6 @@ let resizing = false; const client = useRuntimeClient(); - const { instanceId } = client; $: ({ whereFilter, dimensionThresholdFilters, selectedTimeDimension } = $dashboardStore); @@ -131,7 +130,7 @@ let themeSource: Readable = urlThemeName; $: themeSource = isEmbedded && embedThemeName ? embedThemeName : urlThemeName; - $: theme = createResolvedThemeStore(themeSource, exploreQuery, instanceId); + $: theme = createResolvedThemeStore(themeSource, exploreQuery, client); // Publish the resolved theme to the shared store for external components (e.g., chat in layout) $: activeDashboardTheme.set($theme); diff --git a/web-common/src/features/entity-management/AddAssetButton.svelte b/web-common/src/features/entity-management/AddAssetButton.svelte index e23b139d8ed..fcd28b0eebc 100644 --- a/web-common/src/features/entity-management/AddAssetButton.svelte +++ b/web-common/src/features/entity-management/AddAssetButton.svelte @@ -14,8 +14,8 @@ } from "../../metrics/service/BehaviourEventTypes"; import { MetricsEventSpace } from "../../metrics/service/MetricsTypes"; import { - createRuntimeServiceCreateDirectory, - createRuntimeServicePutFile, + createRuntimeServiceCreateDirectoryMutation, + createRuntimeServicePutFileMutation, } from "../../runtime-client"; import { useRuntimeClient } from "../../runtime-client/v2"; import { useIsModelingSupportedForDefaultOlapDriverOLAP as useIsModelingSupportedForDefaultOlapDriver } from "../connectors/selectors"; @@ -39,11 +39,11 @@ let showExploreDialog = false; let generateDataDialog = false; - const createFile = createRuntimeServicePutFile(); - const createFolder = createRuntimeServiceCreateDirectory(); - const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); + + const createFile = createRuntimeServicePutFileMutation(runtimeClient); + const createFolder = + createRuntimeServiceCreateDirectoryMutation(runtimeClient); const { developerChat } = featureFlags; $: currentFile = $page.params.file; @@ -52,20 +52,20 @@ : ""; $: currentDirectoryFileNamesQuery = useFileNamesInDirectory( - instanceId, + runtimeClient, currentDirectory, ); $: currentDirectoryDirectoryNamesQuery = useDirectoryNamesInDirectory( - instanceId, + runtimeClient, currentDirectory, ); $: isModelingSupportedForDefaultOlapDriver = - useIsModelingSupportedForDefaultOlapDriver(instanceId); + useIsModelingSupportedForDefaultOlapDriver(runtimeClient); $: isModelingSupported = $isModelingSupportedForDefaultOlapDriver.data; $: metricsViewQuery = useFilteredResources( - instanceId, + runtimeClient, ResourceKind.MetricsView, ); @@ -99,10 +99,7 @@ : nextFolderName; await $createFolder.mutateAsync({ - instanceId: instanceId, - data: { - path: path, - }, + path: path, }); // Expand the directory to show the new folder @@ -125,13 +122,10 @@ : nextFileName; await $createFile.mutateAsync({ - instanceId: instanceId, - data: { - path, - blob: undefined, - create: true, - createOnly: true, - }, + path, + blob: undefined, + create: true, + createOnly: true, }); await goto(`/files/${path}`); diff --git a/web-common/src/features/entity-management/RenameAssetModal.svelte b/web-common/src/features/entity-management/RenameAssetModal.svelte index 7a23bcf4178..4ff64144e43 100644 --- a/web-common/src/features/entity-management/RenameAssetModal.svelte +++ b/web-common/src/features/entity-management/RenameAssetModal.svelte @@ -28,8 +28,6 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - let error: string; const [folderName, fileName] = splitFolderAndFileName(filePath); @@ -89,7 +87,7 @@ } try { const newPath = (folderName ? `${folderName}/` : "") + values.newName; - await renameFileArtifact(instanceId, filePath, newPath); + await renameFileArtifact(runtimeClient, filePath, newPath); if (isDir) { if ( $page.url.pathname.startsWith( @@ -116,8 +114,11 @@ }, }); - $: existingDirectories = useDirectoryNamesInDirectory(instanceId, folderName); - $: fileNamesInDirectory = useFileNamesInDirectory(instanceId, folderName); + $: existingDirectories = useDirectoryNamesInDirectory( + runtimeClient, + folderName, + ); + $: fileNamesInDirectory = useFileNamesInDirectory(runtimeClient, folderName); diff --git a/web-common/src/features/explores/explore-link/ExploreLink.svelte b/web-common/src/features/explores/explore-link/ExploreLink.svelte index b1ace496875..e95c351dc63 100644 --- a/web-common/src/features/explores/explore-link/ExploreLink.svelte +++ b/web-common/src/features/explores/explore-link/ExploreLink.svelte @@ -35,7 +35,7 @@ try { const exploreURL = await generateExploreLink( - runtimeClient.instanceId, + runtimeClient, exploreState, exploreName, organization, diff --git a/web-common/src/features/file-explorer/FileExplorer.svelte b/web-common/src/features/file-explorer/FileExplorer.svelte index 21a67df1379..215154593ce 100644 --- a/web-common/src/features/file-explorer/FileExplorer.svelte +++ b/web-common/src/features/file-explorer/FileExplorer.svelte @@ -29,36 +29,39 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - $: getFileTree = createRuntimeServiceListFiles(instanceId, undefined, { - query: { - select: (data) => { - if (!data || !data.files?.length) return; - - const files = data.files - // Sort alphabetically case-insensitive - .sort( - (a, b) => - a.path?.localeCompare(b.path ?? "", undefined, { - sensitivity: "base", - }) ?? 0, - ) - // Hide dot directories - .filter( - (file) => - !( - file.isDir && - // Check both the top-level directory and subdirectories - (file.path?.startsWith(".") || file.path?.includes("/.")) - ), - ) - // Hide the `tmp` directory - .filter((file) => !file.path?.startsWith("/tmp")); - - return transformFileList(files); + $: getFileTree = createRuntimeServiceListFiles( + runtimeClient, + {}, + { + query: { + select: (data) => { + if (!data || !data.files?.length) return; + + const files = data.files + // Sort alphabetically case-insensitive + .sort( + (a, b) => + a.path?.localeCompare(b.path ?? "", undefined, { + sensitivity: "base", + }) ?? 0, + ) + // Hide dot directories + .filter( + (file) => + !( + file.isDir && + // Check both the top-level directory and subdirectories + (file.path?.startsWith(".") || file.path?.includes("/.")) + ), + ) + // Hide the `tmp` directory + .filter((file) => !file.path?.startsWith("/tmp")); + + return transformFileList(files); + }, }, }, - }); + ); $: ({ data: fileTree } = $getFileTree); @@ -78,7 +81,7 @@ } try { - const newFilePath = await duplicateFileArtifact(instanceId, filePath); + const newFilePath = await duplicateFileArtifact(runtimeClient, filePath); await goto(`/files${newFilePath}`); } catch { eventBus.emit("notification", { @@ -101,14 +104,14 @@ return; } } - await deleteFileArtifact(instanceId, filePath); + await deleteFileArtifact(runtimeClient, filePath); if (isCurrentActivePage(filePath, isDir)) { await goto("/"); } } async function onForceDelete() { - await deleteFileArtifact(instanceId, forceDeletePath, true); + await deleteFileArtifact(runtimeClient, forceDeletePath, true); // onForceDelete is only called on folders, so isDir is always true if (isCurrentActivePage(forceDeletePath, true)) { await goto("/"); @@ -132,7 +135,7 @@ }); return; } - await renameFileArtifact(instanceId, fromPath, newFilePath); + await renameFileArtifact(runtimeClient, fromPath, newFilePath); if (isCurrentFile) { await goto(`/files${newFilePath}`); diff --git a/web-common/src/features/file-explorer/NavDirectoryEntry.svelte b/web-common/src/features/file-explorer/NavDirectoryEntry.svelte index 931eda2d23a..e1f0396ec14 100644 --- a/web-common/src/features/file-explorer/NavDirectoryEntry.svelte +++ b/web-common/src/features/file-explorer/NavDirectoryEntry.svelte @@ -15,7 +15,7 @@ import NavigationMenuItem from "@rilldata/web-common/layout/navigation/NavigationMenuItem.svelte"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import { Folder } from "lucide-svelte"; - import { createRuntimeServiceCreateDirectory } from "../../runtime-client"; + import { createRuntimeServiceCreateDirectoryMutation } from "../../runtime-client"; import { useRuntimeClient } from "../../runtime-client/v2"; import { removeLeadingSlash } from "../entity-management/entity-mappers"; import { getTopLevelFolder } from "../entity-management/file-path-utils"; @@ -32,7 +32,8 @@ let contextMenuOpen = false; - const createFolder = createRuntimeServiceCreateDirectory(); + const createFolder = + createRuntimeServiceCreateDirectoryMutation(runtimeClient); $: id = `${dir.path}-nav-entry`; $: expanded = $directoryState[dir.path]; @@ -44,7 +45,7 @@ $: hasErrors = getDirectoryHasErrors(queryClient, instanceId, dir); $: currentDirectoryDirectoryNamesQuery = useDirectoryNamesInDirectory( - instanceId, + runtimeClient, dir.path, ); @@ -67,10 +68,7 @@ : nextFolderName; await $createFolder.mutateAsync({ - instanceId: instanceId, - data: { - path: path, - }, + path: path, }); // Expand the directory to show the new folder diff --git a/web-common/src/features/metrics-views/GoToDashboardButton.svelte b/web-common/src/features/metrics-views/GoToDashboardButton.svelte index 4028d76c030..1e6d705bb6b 100644 --- a/web-common/src/features/metrics-views/GoToDashboardButton.svelte +++ b/web-common/src/features/metrics-views/GoToDashboardButton.svelte @@ -21,7 +21,7 @@ $: ({ instanceId } = runtimeClient); $: dashboardsQuery = useGetExploresForMetricsView( - instanceId, + runtimeClient, resource?.meta?.name?.name ?? "", ); $: dashboards = $dashboardsQuery.data ?? []; @@ -36,7 +36,7 @@ onClick={async () => { if (resource?.meta?.name?.name) await createCanvasDashboardFromMetricsView( - instanceId, + runtimeClient, resource.meta.name.name, ); }} diff --git a/web-common/src/features/metrics-views/MetricsViewMenuItems.svelte b/web-common/src/features/metrics-views/MetricsViewMenuItems.svelte index 55da6e44fc3..73d540cdca3 100644 --- a/web-common/src/features/metrics-views/MetricsViewMenuItems.svelte +++ b/web-common/src/features/metrics-views/MetricsViewMenuItems.svelte @@ -75,7 +75,7 @@ async function handleCreateCanvasDashboard() { if (!metricsViewName) return; - await createCanvasDashboardFromMetricsView(instanceId, metricsViewName); + await createCanvasDashboardFromMetricsView(runtimeClient, metricsViewName); } diff --git a/web-common/src/features/metrics-views/editor/Placeholder.svelte b/web-common/src/features/metrics-views/editor/Placeholder.svelte index 4b0821b2124..88480ebc68d 100644 --- a/web-common/src/features/metrics-views/editor/Placeholder.svelte +++ b/web-common/src/features/metrics-views/editor/Placeholder.svelte @@ -17,19 +17,17 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - $: isModelingSupportedForDefaultOlapDriver = - useIsModelingSupportedForDefaultOlapDriver(instanceId); + useIsModelingSupportedForDefaultOlapDriver(runtimeClient); $: isModelingSupported = $isModelingSupportedForDefaultOlapDriver.data; - $: models = useModels(instanceId); + $: models = useModels(runtimeClient); const buttonClasses = "inline hover:font-semibold underline underline-offset-2"; async function onAutogenerateConfigFromModel(modelRes: V1Resource) { await createDashboardFromTableInMetricsEditor( - instanceId, + runtimeClient, modelRes?.model?.state?.resultTable ?? "", filePath, ); @@ -39,7 +37,7 @@ async function onCreateSkeletonMetricsConfig() { const yaml = initBlankDashboardYAML(metricsName); - await runtimeServicePutFile(instanceId, { + await runtimeServicePutFile(runtimeClient, { path: filePath, blob: yaml, create: true, diff --git a/web-common/src/features/models/navigation/ModelMenuItems.svelte b/web-common/src/features/models/navigation/ModelMenuItems.svelte index 88c41d23f21..97afc75f04a 100644 --- a/web-common/src/features/models/navigation/ModelMenuItems.svelte +++ b/web-common/src/features/models/navigation/ModelMenuItems.svelte @@ -35,7 +35,7 @@ $: fileArtifact = fileArtifacts.getFileArtifact(filePath); - $: modelHasError = fileArtifact.getHasErrors(queryClient, instanceId); + $: modelHasError = fileArtifact.getHasErrors(queryClient); $: modelQuery = fileArtifact.getResource(queryClient); $: modelResource = $modelQuery.data; $: connector = modelResource?.model?.spec?.outputConnector; @@ -60,7 +60,7 @@ const previousActiveEntity = getScreenNameFromPage(); const addDevLimit = false; // Typically, the `dev` limit would be applied on the Source itself const [newModelPath, newModelName] = await createSqlModelFromTable( - instanceId, + runtimeClient, queryClient, connector as string, "", diff --git a/web-common/src/features/models/workspace/CreateDashboardButton.svelte b/web-common/src/features/models/workspace/CreateDashboardButton.svelte index 98c1db583be..829db39b397 100644 --- a/web-common/src/features/models/workspace/CreateDashboardButton.svelte +++ b/web-common/src/features/models/workspace/CreateDashboardButton.svelte @@ -23,7 +23,7 @@ $: ({ instanceId } = runtimeClient); - $: modelQuery = useModel(instanceId, modelName); + $: modelQuery = useModel(runtimeClient, modelName); $: connector = $modelQuery.data?.model?.spec?.outputConnector; $: modelIsIdle = $modelQuery.data?.meta?.reconcileStatus === diff --git a/web-common/src/features/models/workspace/ModelEditor.svelte b/web-common/src/features/models/workspace/ModelEditor.svelte index 7b2a53b2cb5..dcb6630c2d6 100644 --- a/web-common/src/features/models/workspace/ModelEditor.svelte +++ b/web-common/src/features/models/workspace/ModelEditor.svelte @@ -23,15 +23,13 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - $: ({ remoteContent } = fileArtifact); let editor: EditorView; let autocompleteCompartment = new Compartment(); // Autocomplete: source tables - $: allSourceColumns = useAllSourceColumns(queryClient, instanceId); + $: allSourceColumns = useAllSourceColumns(queryClient, runtimeClient); $: if ($allSourceColumns?.length) { for (const sourceTable of $allSourceColumns) { const sourceIdentifier = sourceTable?.tableName; @@ -43,7 +41,7 @@ } // Autocomplete: model tables - $: allModelColumns = useAllModelColumns(queryClient, instanceId); + $: allModelColumns = useAllModelColumns(queryClient, runtimeClient); $: if ($allModelColumns?.length) { for (const modelTable of $allModelColumns) { const modelIdentifier = modelTable?.tableName; diff --git a/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte b/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte index 7efe1e88837..ce6aa05050a 100644 --- a/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte +++ b/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte @@ -31,7 +31,7 @@ $: isModelIdle = resource?.meta?.reconcileStatus === V1ReconcileStatus.RECONCILE_STATUS_IDLE; - $: metricsViewsQuery = useGetMetricsViewsForModel(instanceId, modelName); + $: metricsViewsQuery = useGetMetricsViewsForModel(runtimeClient, modelName); $: availableMetricsViews = $metricsViewsQuery.data ?? []; diff --git a/web-common/src/features/resource-graph/navigation/GraphContainer.svelte b/web-common/src/features/resource-graph/navigation/GraphContainer.svelte index 1053f3a08c7..c18c26877d4 100644 --- a/web-common/src/features/resource-graph/navigation/GraphContainer.svelte +++ b/web-common/src/features/resource-graph/navigation/GraphContainer.svelte @@ -8,14 +8,18 @@ $: ({ instanceId } = runtimeClient); - $: resourcesQuery = createRuntimeServiceListResources(instanceId, undefined, { - query: { - retry: 2, - refetchOnMount: true, - refetchOnWindowFocus: false, - enabled: !!instanceId, + $: resourcesQuery = createRuntimeServiceListResources( + runtimeClient, + {}, + { + query: { + retry: 2, + refetchOnMount: true, + refetchOnWindowFocus: false, + enabled: !!instanceId, + }, }, - }); + ); $: resources = $resourcesQuery.data?.resources ?? []; $: errorMessage = $resourcesQuery.error diff --git a/web-common/src/features/resource-graph/quick-view/QuickView.svelte b/web-common/src/features/resource-graph/quick-view/QuickView.svelte index 5083ce6238b..35795536eb9 100644 --- a/web-common/src/features/resource-graph/quick-view/QuickView.svelte +++ b/web-common/src/features/resource-graph/quick-view/QuickView.svelte @@ -18,8 +18,8 @@ $: shouldFetchResources = currentState.open && !!instanceId; $: resourcesQuery = createRuntimeServiceListResources( - instanceId, - undefined, + runtimeClient, + {}, { query: { retry: 2, diff --git a/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte b/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte index 4d6836db1a3..35b32fb538a 100644 --- a/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte +++ b/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte @@ -51,7 +51,7 @@ (o) => o.value === $data["webOpenMode"], ); - $: hasSlackNotifier = getHasSlackConnection(runtimeClient.instanceId); + $: hasSlackNotifier = getHasSlackConnection(runtimeClient);
0; diff --git a/web-common/src/features/sources/errors/ErrorPane.svelte b/web-common/src/features/sources/errors/ErrorPane.svelte index 6671e0ac1ee..714bbe7202f 100644 --- a/web-common/src/features/sources/errors/ErrorPane.svelte +++ b/web-common/src/features/sources/errors/ErrorPane.svelte @@ -12,7 +12,7 @@ $: ({ instanceId } = runtimeClient); // Parse Source YAML client-side - $: sourceFromYaml = useSourceFromYaml(instanceId, filePath); + $: sourceFromYaml = useSourceFromYaml(runtimeClient, filePath); // Try to extract the connector type $: connectorType = $sourceFromYaml.data?.type; diff --git a/web-common/src/features/sources/modal/AddDataForm.svelte b/web-common/src/features/sources/modal/AddDataForm.svelte index 49e8121ea7e..a0d46d2d0b7 100644 --- a/web-common/src/features/sources/modal/AddDataForm.svelte +++ b/web-common/src/features/sources/modal/AddDataForm.svelte @@ -110,7 +110,7 @@ let existingEnvBlob: string | null = null; onMount(async () => { try { - const envFile = await runtimeServiceGetFile(runtimeClient.instanceId, { + const envFile = await runtimeServiceGetFile(runtimeClient, { path: ".env", }); existingEnvBlob = envFile.blob ?? ""; diff --git a/web-common/src/features/sources/modal/AddDataModal.svelte b/web-common/src/features/sources/modal/AddDataModal.svelte index a22304e8b3f..106553a3111 100644 --- a/web-common/src/features/sources/modal/AddDataModal.svelte +++ b/web-common/src/features/sources/modal/AddDataModal.svelte @@ -151,7 +151,7 @@ const runtimeClient = useRuntimeClient(); $: isModelingSupportedForDefaultOlapDriver = - useIsModelingSupportedForDefaultOlapDriver(runtimeClient.instanceId); + useIsModelingSupportedForDefaultOlapDriver(runtimeClient); $: isModelingSupported = $isModelingSupportedForDefaultOlapDriver.data; // FIXME: excluding salesforce until we implement the table discovery APIs diff --git a/web-common/src/features/sources/modal/FileDrop.svelte b/web-common/src/features/sources/modal/FileDrop.svelte index f153e90a683..e713012fd2e 100644 --- a/web-common/src/features/sources/modal/FileDrop.svelte +++ b/web-common/src/features/sources/modal/FileDrop.svelte @@ -3,7 +3,7 @@ import Overlay from "@rilldata/web-common/components/overlay/Overlay.svelte"; import { getFilePathFromNameAndType } from "@rilldata/web-common/features/entity-management/entity-mappers"; import { EntityType } from "@rilldata/web-common/features/entity-management/types"; - import { createRuntimeServiceUnpackEmpty } from "@rilldata/web-common/runtime-client"; + import { createRuntimeServiceUnpackEmptyMutation } from "@rilldata/web-common/runtime-client"; import { useRuntimeClient } from "../../../runtime-client/v2"; import { EMPTY_PROJECT_TITLE } from "../../welcome/constants"; import { isProjectInitialized } from "../../welcome/is-project-initialized"; @@ -17,7 +17,8 @@ $: ({ instanceId } = runtimeClient); - const unpackEmptyProject = createRuntimeServiceUnpackEmpty(); + const unpackEmptyProject = + createRuntimeServiceUnpackEmptyMutation(runtimeClient); const handleSourceDrop = async (e: DragEvent) => { showDropOverlay = false; @@ -29,17 +30,14 @@ const uploadedFiles = uploadTableFiles(Array.from(files), runtimeClient); - const initialized = await isProjectInitialized(instanceId); + const initialized = await isProjectInitialized(runtimeClient); for await (const { tableName, filePath } of uploadedFiles) { try { // If project is uninitialized, initialize an empty project if (!initialized) { $unpackEmptyProject.mutate({ - instanceId, - data: { - displayName: EMPTY_PROJECT_TITLE, - olap: "duckdb", // Explicitly set DuckDB as OLAP for local file uploads - }, + displayName: EMPTY_PROJECT_TITLE, + olap: "duckdb", // Explicitly set DuckDB as OLAP for local file uploads }); // Race condition: invalidate("init") must be called before we navigate to @@ -49,7 +47,7 @@ } const yaml = compileLocalFileSourceYAML(filePath); - await createSource(instanceId, tableName, yaml); + await createSource(runtimeClient, tableName, yaml); const newFilePath = getFilePathFromNameAndType( tableName, EntityType.Table, diff --git a/web-common/src/features/sources/modal/LocalSourceUpload.svelte b/web-common/src/features/sources/modal/LocalSourceUpload.svelte index e8812137e44..6ac560f0248 100644 --- a/web-common/src/features/sources/modal/LocalSourceUpload.svelte +++ b/web-common/src/features/sources/modal/LocalSourceUpload.svelte @@ -8,7 +8,7 @@ uploadTableFiles, } from "@rilldata/web-common/features/sources/modal/file-upload"; import { overlay } from "@rilldata/web-common/layout/overlay-store"; - import { createRuntimeServiceUnpackEmpty } from "@rilldata/web-common/runtime-client"; + import { createRuntimeServiceUnpackEmptyMutation } from "@rilldata/web-common/runtime-client"; import { useRuntimeClient } from "../../../runtime-client/v2"; import { EMPTY_PROJECT_TITLE } from "../../welcome/constants"; import { isProjectInitialized } from "../../welcome/is-project-initialized"; @@ -22,7 +22,8 @@ $: ({ instanceId } = runtimeClient); - const unpackEmptyProject = createRuntimeServiceUnpackEmpty(); + const unpackEmptyProject = + createRuntimeServiceUnpackEmptyMutation(runtimeClient); async function handleOpenFileDialog() { return handleUpload(await openFileUploadDialog()); @@ -36,11 +37,8 @@ // If project is uninitialized, initialize an empty project if (!initialized) { $unpackEmptyProject.mutate({ - instanceId, - data: { - displayName: EMPTY_PROJECT_TITLE, - olap: "duckdb", // Explicitly set DuckDB as OLAP for local file uploads - }, + displayName: EMPTY_PROJECT_TITLE, + olap: "duckdb", // Explicitly set DuckDB as OLAP for local file uploads }); // Race condition: invalidate("init") must be called before we navigate to @@ -50,7 +48,7 @@ } const yaml = compileLocalFileSourceYAML(filePath); - await createSource(instanceId, tableName, yaml); + await createSource(runtimeClient, tableName, yaml); const newFilePath = getFilePathFromNameAndType( tableName, EntityType.Table, diff --git a/web-common/src/features/sources/navigation/SourceMenuItems.svelte b/web-common/src/features/sources/navigation/SourceMenuItems.svelte index 1f939436f7b..708308037ae 100644 --- a/web-common/src/features/sources/navigation/SourceMenuItems.svelte +++ b/web-common/src/features/sources/navigation/SourceMenuItems.svelte @@ -53,7 +53,7 @@ let source: V1Source | undefined; $: source = $sourceQuery.data?.source; $: sinkConnector = $sourceQuery.data?.source?.spec?.sinkConnector; - $: sourceHasError = fileArtifact.getHasErrors(queryClient, instanceId); + $: sourceHasError = fileArtifact.getHasErrors(queryClient); $: sourceIsIdle = $sourceQuery.data?.meta?.reconcileStatus === V1ReconcileStatus.RECONCILE_STATUS_IDLE; @@ -75,7 +75,7 @@ openResourceGraphQuickView(sourceResource); } - $: sourceFromYaml = useSourceFromYaml(instanceId, filePath); + $: sourceFromYaml = useSourceFromYaml(runtimeClient, filePath); $: createMetricsViewFromTable = useCreateMetricsViewFromTableUIAction( runtimeClient, @@ -117,7 +117,7 @@ const previousActiveEntity = getScreenNameFromPage(); const addDevLimit = false; // Typically, the `dev` limit would be applied on the Source itself const [newModelPath, newModelName] = await createSqlModelFromTable( - instanceId, + runtimeClient, queryClient, connector, database, @@ -151,18 +151,21 @@ connector, filePath, $sourceQuery.data?.meta?.name?.name ?? "", - instanceId, + runtimeClient, ); } catch { // no-op } }; - $: isLocalFileConnectorQuery = useIsLocalFileConnector(instanceId, filePath); + $: isLocalFileConnectorQuery = useIsLocalFileConnector( + runtimeClient, + filePath, + ); $: isLocalFileConnector = $isLocalFileConnectorQuery.data; async function onReplaceSource() { - await replaceSourceWithUploadedFile(instanceId, filePath); + await replaceSourceWithUploadedFile(runtimeClient, filePath); overlay.set(null); } diff --git a/web-common/src/features/visual-editing/ThemeInput.svelte b/web-common/src/features/visual-editing/ThemeInput.svelte index 8147f3f08fc..09e64f40769 100644 --- a/web-common/src/features/visual-editing/ThemeInput.svelte +++ b/web-common/src/features/visual-editing/ThemeInput.svelte @@ -42,9 +42,9 @@ $: themeQuery = theme && typeof theme === "string" - ? useTheme(instanceId, theme) + ? useTheme(runtimeClient, theme) : !theme && projectDefaultTheme - ? useTheme(instanceId, projectDefaultTheme) + ? useTheme(runtimeClient, projectDefaultTheme) : undefined; $: fetchedTheme = $themeQuery?.data?.theme?.spec; diff --git a/web-common/src/features/workspaces/CanvasWorkspace.svelte b/web-common/src/features/workspaces/CanvasWorkspace.svelte index 70af9ddff7b..9760628119a 100644 --- a/web-common/src/features/workspaces/CanvasWorkspace.svelte +++ b/web-common/src/features/workspaces/CanvasWorkspace.svelte @@ -41,7 +41,7 @@ saveState: { saving }, } = fileArtifact); - $: resourceQuery = getResource(queryClient, runtimeClient.instanceId); + $: resourceQuery = getResource(queryClient); $: ({ data } = $resourceQuery); @@ -60,7 +60,7 @@ // Reconcile error resolved to root cause for the banner $: reconcileError = data?.meta?.reconcileError; $: rootCauseQuery = createRootCauseErrorQuery( - runtimeClient.instanceId, + runtimeClient, data, reconcileError, ); diff --git a/web-common/src/features/workspaces/ExploreWorkspace.svelte b/web-common/src/features/workspaces/ExploreWorkspace.svelte index 2d873b65542..d1b21473235 100644 --- a/web-common/src/features/workspaces/ExploreWorkspace.svelte +++ b/web-common/src/features/workspaces/ExploreWorkspace.svelte @@ -39,7 +39,7 @@ $: exploreName = $resourceName?.name ?? getNameFromFile(filePath); - $: query = createRuntimeServiceGetExplore(runtimeClient.instanceId, { + $: query = createRuntimeServiceGetExplore(runtimeClient, { name: exploreName, }); @@ -65,7 +65,7 @@ $: reconcileError = (exploreResource ?? metricsViewResource)?.meta ?.reconcileError; $: rootCauseQuery = createRootCauseErrorQuery( - runtimeClient.instanceId, + runtimeClient, exploreResource ?? metricsViewResource, reconcileError, ); diff --git a/web-common/src/features/workspaces/MetricsWorkspace.svelte b/web-common/src/features/workspaces/MetricsWorkspace.svelte index a94a5856a67..ea5edc4cb1d 100644 --- a/web-common/src/features/workspaces/MetricsWorkspace.svelte +++ b/web-common/src/features/workspaces/MetricsWorkspace.svelte @@ -37,10 +37,7 @@ $: metricsViewName = $resourceName?.name ?? getNameFromFile(filePath); - $: resourceQuery = fileArtifact.getResource( - queryClient, - runtimeClient.instanceId, - ); + $: resourceQuery = fileArtifact.getResource(queryClient); $: ({ data: resource } = $resourceQuery); $: isOldMetricsView = !$remoteContent?.includes("version: 1"); @@ -51,9 +48,9 @@ $: table = resource?.metricsView?.state?.validSpec?.table ?? ""; $: isModelingSupportedForDefaultOlapDriver = - useIsModelingSupportedForDefaultOlapDriver(runtimeClient.instanceId); + useIsModelingSupportedForDefaultOlapDriver(runtimeClient); $: isModelingSupportedForConnector = useIsModelingSupportedForConnector( - runtimeClient.instanceId, + runtimeClient, connector, ); $: isModelingSupported = connector @@ -69,7 +66,7 @@ // Reconcile error resolved to root cause for the banner $: reconcileError = resource?.meta?.reconcileError; $: rootCauseQuery = createRootCauseErrorQuery( - runtimeClient.instanceId, + runtimeClient, resource, reconcileError, ); diff --git a/web-common/src/features/workspaces/ModelWorkspace.svelte b/web-common/src/features/workspaces/ModelWorkspace.svelte index cfcd98cf3d6..6741c3e1b72 100644 --- a/web-common/src/features/workspaces/ModelWorkspace.svelte +++ b/web-common/src/features/workspaces/ModelWorkspace.svelte @@ -18,7 +18,7 @@ import { workspaces } from "@rilldata/web-common/layout/workspace/workspace-stores"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import type { V1Model } from "@rilldata/web-common/runtime-client"; - import { httpRequestQueue } from "@rilldata/web-common/runtime-client/http-client"; + import { isProfilingQuery } from "@rilldata/web-common/runtime-client/query-matcher"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { fade, slide } from "svelte/transition"; @@ -43,17 +43,11 @@ $: tableVisible = workspace.table.visible; $: allErrorsStore = fileArtifact.getAllErrors(queryClient); - $: hasErrors = fileArtifact.getHasErrors( - queryClient, - runtimeClient.instanceId, - ); + $: hasErrors = fileArtifact.getHasErrors(queryClient); $: allErrors = $allErrorsStore; - $: resourceQuery = fileArtifact.getResource( - queryClient, - runtimeClient.instanceId, - ); + $: resourceQuery = fileArtifact.getResource(queryClient); $: resource = $resourceQuery.data; $: model = $resourceQuery.data?.model; $: connector = (model as V1Model)?.spec?.outputConnector as string; @@ -68,7 +62,6 @@ $: isResourceReconciling = resourceIsLoading($resourceQuery.data); async function save() { - httpRequestQueue.removeByName(assetName); await queryClient.cancelQueries({ predicate: (query) => isProfilingQuery(query, assetName), }); diff --git a/web-common/src/features/workspaces/VisualExploreEditing.svelte b/web-common/src/features/workspaces/VisualExploreEditing.svelte index 4a3b35a2ed8..84e4b2c4a83 100644 --- a/web-common/src/features/workspaces/VisualExploreEditing.svelte +++ b/web-common/src/features/workspaces/VisualExploreEditing.svelte @@ -73,7 +73,7 @@ $: parsedDocument = parseDocument($editorContent ?? ""); $: metricsViewsQuery = useFilteredResources( - runtimeClient.instanceId, + runtimeClient, ResourceKind.MetricsView, ); @@ -162,18 +162,15 @@ $: dimensionExpression = rawDimensions instanceof YAMLMap ? rawDimensions?.get("expr") : ""; - $: themesQuery = useFilteredResources( - runtimeClient.instanceId, - ResourceKind.Theme, - ); + $: themesQuery = useFilteredResources(runtimeClient, ResourceKind.Theme); $: themeNames = ($themesQuery?.data ?? []) .map((theme) => theme.meta?.name?.name ?? "") .filter((string) => !string.endsWith("--theme")); $: defaultThemeQuery = createRuntimeServiceGetInstance( - runtimeClient.instanceId, - undefined, + runtimeClient, + {}, { query: { select: (data) => data?.instance?.theme, diff --git a/web-common/src/features/workspaces/VisualMetrics.svelte b/web-common/src/features/workspaces/VisualMetrics.svelte index 7fe159e3bcc..8f3d9141a96 100644 --- a/web-common/src/features/workspaces/VisualMetrics.svelte +++ b/web-common/src/features/workspaces/VisualMetrics.svelte @@ -92,7 +92,7 @@ const runtimeClient = useRuntimeClient(); - $: instance = createRuntimeServiceGetInstance(runtimeClient.instanceId, { + $: instance = createRuntimeServiceGetInstance(runtimeClient, { sensitive: true, }); @@ -111,10 +111,7 @@ }; $: isModelingSupportedForConnector = olapConnector - ? useIsModelingSupportedForConnector( - runtimeClient.instanceId, - olapConnector, - ) + ? useIsModelingSupportedForConnector(runtimeClient, olapConnector) : null; $: isModelingSupported = $isModelingSupportedForConnector?.data; @@ -135,9 +132,9 @@ $: noTableProperties = !yamlConnector && !database && !databaseSchema; - $: modelsQuery = useModels(runtimeClient.instanceId); - $: sourcesQuery = useSources(runtimeClient.instanceId); - $: metricsViewQuery = getResource(queryClient, runtimeClient.instanceId); + $: modelsQuery = useModels(runtimeClient); + $: sourcesQuery = useSources(runtimeClient); + $: metricsViewQuery = getResource(queryClient); $: modelNames = $modelsQuery?.data?.map(resourceToOption) ?? []; $: sourceNames = $sourcesQuery?.data?.map(resourceToOption) ?? []; @@ -154,7 +151,8 @@ $: hasValidModelOrSourceSelection = hasSourceSelected || hasModelSelected; $: hasNonDuckDBOLAPConnectorQuery = createRuntimeServiceAnalyzeConnectors( - runtimeClient.instanceId, + runtimeClient, + {}, { query: { select: (data) => { @@ -185,11 +183,7 @@ $: resourceQuery = resourceKind && - useResource( - runtimeClient.instanceId, - modelOrSourceOrTableName, - resourceKind, - ); + useResource(runtimeClient, modelOrSourceOrTableName, resourceKind); $: connector = yamlConnector || @@ -199,9 +193,9 @@ olapConnector; $: columnsQuery = createQueryServiceTableColumns( - runtimeClient.instanceId, - modelOrSourceOrTableName, + runtimeClient, { + tableName: modelOrSourceOrTableName, connector, database, databaseSchema, @@ -278,10 +272,8 @@ ); $: tablesQuery = createConnectorServiceOLAPListTables( - { - instanceId: runtimeClient.instanceId, - connector, - }, + runtimeClient, + { connector }, { query: { enabled: diff --git a/web-common/src/features/workspaces/WorkspaceBreadcrumbs.svelte b/web-common/src/features/workspaces/WorkspaceBreadcrumbs.svelte index b1ed673e9af..74a4ed2c13c 100644 --- a/web-common/src/features/workspaces/WorkspaceBreadcrumbs.svelte +++ b/web-common/src/features/workspaces/WorkspaceBreadcrumbs.svelte @@ -18,8 +18,8 @@ $: resourceName = resource?.meta?.name?.name; $: resourcesQuery = createRuntimeServiceListResources( - runtimeClient.instanceId, - undefined, + runtimeClient, + {}, { query: { retry: 2, refetchOnMount: true }, }, diff --git a/web-common/src/layout/ApplicationHeader.svelte b/web-common/src/layout/ApplicationHeader.svelte index 3251189cbee..87410efcc05 100644 --- a/web-common/src/layout/ApplicationHeader.svelte +++ b/web-common/src/layout/ApplicationHeader.svelte @@ -44,9 +44,9 @@ $: showDeployCTA = $deploy && !onDeployPage; $: showDeveloperChat = $developerChat && !onDeployPage; - $: exploresQuery = useValidExplores(instanceId); - $: canvasQuery = useValidCanvases(instanceId); - $: projectTitleQuery = useProjectTitle(instanceId); + $: exploresQuery = useValidExplores(runtimeClient); + $: canvasQuery = useValidCanvases(runtimeClient); + $: projectTitleQuery = useProjectTitle(runtimeClient); $: projectTitle = $projectTitleQuery?.data ?? "Untitled Rill Project"; diff --git a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte index bb345969ee6..de5efb4561a 100644 --- a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte +++ b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte @@ -32,7 +32,6 @@ let editor: EditorView; - $: ({ fileArtifact } = data); $: ({ autoSave, diff --git a/web-local/src/routes/(viz)/canvas/[name]/+page.svelte b/web-local/src/routes/(viz)/canvas/[name]/+page.svelte index 28be3a22416..47eb1f527e9 100644 --- a/web-local/src/routes/(viz)/canvas/[name]/+page.svelte +++ b/web-local/src/routes/(viz)/canvas/[name]/+page.svelte @@ -1,21 +1,26 @@ -{#key instanceId} +{#key runtimeClient.instanceId}
- +
diff --git a/web-local/src/routes/(viz)/explore/[name]/+page.svelte b/web-local/src/routes/(viz)/explore/[name]/+page.svelte index a6a4dfb552e..3e601f20d2f 100644 --- a/web-local/src/routes/(viz)/explore/[name]/+page.svelte +++ b/web-local/src/routes/(viz)/explore/[name]/+page.svelte @@ -15,7 +15,6 @@ import { isHTTPError } from "@rilldata/web-common/lib/errors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { PageData } from "./$types"; @@ -28,15 +27,13 @@ $: metricsViewName = metricsView?.meta?.name?.name as string; - $: ({ instanceId } = $runtime); - $: filePaths = [ ...(explore.meta?.filePaths ?? []), ...(metricsView.meta?.filePaths ?? []), ]; $: exploreQuery = useExploreValidSpec(runtimeClient, exploreName); $: measures = $exploreQuery.data?.explore?.measures ?? []; - $: projectParserQuery = useProjectParser(queryClient, instanceId, { + $: projectParserQuery = useProjectParser(queryClient, runtimeClient, { enabled: $selectedMockUserStore?.admin, }); From 9c65c7b6e4658249b7a2d68e7f73d86cfc3fea38 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 17:51:53 +0300 Subject: [PATCH 39/78] fix: resolve remaining v2 RuntimeClient migration errors blocking build - Fix missing barrel exports: use `*Mutation(runtimeClient)` pattern for `ShareConversation`, `UnpackExample`, `UnpackEmpty`, `CreateTrigger`, and `QueryServiceExport` mutations - Fix `MapExploreUrlContext` shape: pass `{ client: runtimeClient }` instead of `{ instanceId }` in AlertMetadata and ReportMetadata - Fix `getHomeBookmarkExploreState` call: pass `runtimeClient` instead of `instanceId` in explore page - Remove dead `export let instanceId` props from 5 components and their parent call sites now that they use `useRuntimeClient()` internally - Fix ESLint `no-non-null-asserted-optional-chain` with type assertions in alert and report selectors - Fix v2 protobuf request format in RunNowButton: use nested `name` object instead of dot-notation keys - Fix error type checking in ExploreEmbed: use `isHTTPError()` guard - Replace missing `createRuntimeServiceGetModelPartitionsInfinite` with `createInfiniteQuery` using v2 RPC primitives in PartitionsTable --- .../alerts/metadata/AlertMetadata.svelte | 2 +- web-admin/src/features/alerts/selectors.ts | 7 ++- .../src/features/embeds/ExploreEmbed.svelte | 5 +- .../embeds/TopNavigationBarEmbed.svelte | 1 - .../metadata/ReportMetadata.svelte | 2 +- .../metadata/RunNowButton.svelte | 3 +- .../features/scheduled-reports/selectors.ts | 5 +- web-admin/src/routes/-/embed/+layout.svelte | 6 +-- .../-/embed/explore/[name]/+page.svelte | 4 +- .../explore/[dashboard]/+page.svelte | 3 +- .../alerts/data-tab/AlertDialogDataTab.svelte | 7 +-- .../chat/layouts/fullpage/FullPageChat.svelte | 1 - .../chat/layouts/sidebar/SidebarHeader.svelte | 4 -- .../chat/share/ShareChatPopover.svelte | 10 ++-- .../dashboards/leaderboard/Leaderboard.svelte | 1 - .../leaderboard/LeaderboardDisplay.svelte | 2 - .../src/features/exports/ExportMenu.svelte | 4 +- .../incremental/ModelRefreshButton.svelte | 12 ++--- .../models/partitions/PartitionsTable.svelte | 49 +++++++++++-------- .../models/partitions/TriggerPartition.svelte | 20 ++++---- .../onboarding/OnboardingWorkspace.svelte | 13 ++--- .../BaseScheduledReportForm.svelte | 8 +-- .../scheduled-reports/FiltersForm.svelte | 1 - .../fields/RowsAndColumnsForm.svelte | 1 - .../src/features/welcome/ProjectCards.svelte | 19 +++---- 25 files changed, 82 insertions(+), 108 deletions(-) diff --git a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte index 6d0b9094d36..d09b830c944 100644 --- a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte +++ b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte @@ -95,7 +95,7 @@ exploreProtoState: alertSpec?.annotations?.web_open_state, }, { - instanceId: runtimeClient.instanceId, + client: runtimeClient, organization, project, }, diff --git a/web-admin/src/features/alerts/selectors.ts b/web-admin/src/features/alerts/selectors.ts index 3adbfa250f9..8311ada89bf 100644 --- a/web-admin/src/features/alerts/selectors.ts +++ b/web-admin/src/features/alerts/selectors.ts @@ -8,7 +8,10 @@ import { createRuntimeServiceGetResource, createRuntimeServiceListResources, } from "@rilldata/web-common/runtime-client"; -import type { V1AlertSpec } from "@rilldata/web-common/runtime-client/gen/index.schemas"; +import type { + V1AlertSpec, + V1ExploreSpec, +} from "@rilldata/web-common/runtime-client/gen/index.schemas"; import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { smartRefetchIntervalFunc } from "@rilldata/web-admin/lib/refetch-interval-store"; import { derived, type Readable, readable } from "svelte/store"; @@ -136,7 +139,7 @@ export function useAlertDashboardState( getDashboardStateFromUrl( webState, data.metricsView?.metricsView?.state?.validSpec ?? {}, - data.explore?.explore?.state?.validSpec!, + data.explore?.explore?.state?.validSpec as V1ExploreSpec, ), }, }, diff --git a/web-admin/src/features/embeds/ExploreEmbed.svelte b/web-admin/src/features/embeds/ExploreEmbed.svelte index 9e00a9c242b..7f401ffd7d2 100644 --- a/web-admin/src/features/embeds/ExploreEmbed.svelte +++ b/web-admin/src/features/embeds/ExploreEmbed.svelte @@ -3,6 +3,7 @@ import StateManagersProvider from "@rilldata/web-common/features/dashboards/state-managers/StateManagersProvider.svelte"; import DashboardStateManager from "@rilldata/web-common/features/dashboards/state-managers/loaders/DashboardStateManager.svelte"; import { derived } from "svelte/store"; + import { isHTTPError } from "@rilldata/web-common/lib/errors"; import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { errorStore } from "../../components/errors/error-store"; @@ -12,7 +13,6 @@ resolveEmbedTheme, } from "@rilldata/web-common/features/embeds/embed-theme"; - export let instanceId: string; export let exploreName: string; const runtimeClient = useRuntimeClient(); @@ -21,7 +21,8 @@ name: exploreName, }); $: ({ isSuccess, isError, error, data } = $explore); - $: isExploreNotFound = isError && error?.response?.status === 404; + $: isExploreNotFound = + isError && isHTTPError(error) && error.response.status === 404; // We check for explore.state.validSpec instead of meta.reconcileError. validSpec persists // from previous valid explores, allowing display even when the current explore spec is invalid diff --git a/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte b/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte index c4b35b3dca5..83e3c0af27c 100644 --- a/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte +++ b/web-admin/src/features/embeds/TopNavigationBarEmbed.svelte @@ -13,7 +13,6 @@ } from "@rilldata/web-common/runtime-client"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; - export let instanceId: string; export let activeResource: V1ResourceName; export let navigationEnabled: boolean = true; diff --git a/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte b/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte index c270ff41be4..863c096437a 100644 --- a/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte +++ b/web-admin/src/features/scheduled-reports/metadata/ReportMetadata.svelte @@ -87,7 +87,7 @@ forceOpenPivot: true, }, { - instanceId: runtimeClient.instanceId, + client: runtimeClient, organization, project, }, diff --git a/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte b/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte index d942a96e9b9..57643aa6902 100644 --- a/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte +++ b/web-admin/src/features/scheduled-reports/metadata/RunNowButton.svelte @@ -44,8 +44,7 @@ queryKey: getRuntimeServiceGetResourceQueryKey( runtimeClient.instanceId, { - "name.name": report, - "name.kind": ResourceKind.Report, + name: { name: report, kind: ResourceKind.Report }, }, ), }); diff --git a/web-admin/src/features/scheduled-reports/selectors.ts b/web-admin/src/features/scheduled-reports/selectors.ts index 88ff2d22e4c..fc4183350d3 100644 --- a/web-admin/src/features/scheduled-reports/selectors.ts +++ b/web-admin/src/features/scheduled-reports/selectors.ts @@ -1,6 +1,7 @@ import { createAdminServiceSearchProjectUsers } from "@rilldata/web-admin/client"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { getDashboardNameFromReport } from "@rilldata/web-common/features/scheduled-reports/utils"; +import type { V1ReportSpec } from "@rilldata/web-common/runtime-client/gen/index.schemas"; import { createRuntimeServiceGetResource, createRuntimeServiceListResources, @@ -39,7 +40,9 @@ export function useReportDashboardName(client: RuntimeClient, name: string) { { query: { select: (data) => - getDashboardNameFromReport(data.resource?.report?.spec!), + getDashboardNameFromReport( + data.resource?.report?.spec as V1ReportSpec, + ), }, }, ); diff --git a/web-admin/src/routes/-/embed/+layout.svelte b/web-admin/src/routes/-/embed/+layout.svelte index 1a40e5fd15b..6d5e6a85dcd 100644 --- a/web-admin/src/routes/-/embed/+layout.svelte +++ b/web-admin/src/routes/-/embed/+layout.svelte @@ -131,11 +131,7 @@ class="flex items-center w-full pr-4 py-1 min-h-[2.5rem]" class:border-b={!onProjectPage} > - +
{/if} diff --git a/web-admin/src/routes/-/embed/explore/[name]/+page.svelte b/web-admin/src/routes/-/embed/explore/[name]/+page.svelte index 892d21b16e6..874ce00b992 100644 --- a/web-admin/src/routes/-/embed/explore/[name]/+page.svelte +++ b/web-admin/src/routes/-/embed/explore/[name]/+page.svelte @@ -3,7 +3,7 @@ import type { PageData } from "./$types"; export let data: PageData; - $: ({ instanceId, exploreName } = data); + $: ({ exploreName } = data); - + diff --git a/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte b/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte index 3595914664a..375b269d638 100644 --- a/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte @@ -26,7 +26,6 @@ $: ({ project } = data); const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); $: ({ organization: orgName, project: projectName, @@ -78,7 +77,7 @@ $: bookmarkExploreStateQuery = getHomeBookmarkExploreState( project?.id, - instanceId, + runtimeClient, metricsViewName, exploreName, ); diff --git a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte index c88881762bb..b8ca7e8bd12 100644 --- a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte +++ b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte @@ -51,12 +51,7 @@
- + diff --git a/web-common/src/features/chat/layouts/sidebar/SidebarHeader.svelte b/web-common/src/features/chat/layouts/sidebar/SidebarHeader.svelte index 5161ace22b3..b82511babb2 100644 --- a/web-common/src/features/chat/layouts/sidebar/SidebarHeader.svelte +++ b/web-common/src/features/chat/layouts/sidebar/SidebarHeader.svelte @@ -5,7 +5,6 @@ import PlusIcon from "../../../../components/icons/PlusIcon.svelte"; import { featureFlags } from "@rilldata/web-common/features/feature-flags"; import { type V1Conversation } from "../../../../runtime-client"; - import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { ConversationManager } from "../../core/conversation-manager"; import ShareChatPopover from "../../share/ShareChatPopover.svelte"; import ConversationHistoryMenu from "./ConversationHistoryMenu.svelte"; @@ -16,8 +15,6 @@ const { adminServer } = featureFlags; - const runtimeClient = useRuntimeClient(); - $: instanceId = runtimeClient.instanceId; $: organization = $page.params.organization; $: project = $page.params.project; @@ -55,7 +52,6 @@ {#if $adminServer} ; - export let instanceId: string; export let whereFilter: V1Expression; export let dimensionThresholdFilters: DimensionThresholdFilter[]; export let leaderboardSortByMeasureName: string; diff --git a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte index 127914e68d3..f4962712cee 100644 --- a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte +++ b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte @@ -44,7 +44,6 @@ } = StateManagers; const client = useRuntimeClient(); - const { instanceId } = client; let parentElement: HTMLDivElement; @@ -87,7 +86,6 @@ leaderboardShowContextForAllMeasures={$leaderboardShowContextForAllMeasures} {whereFilter} {dimensionThresholdFilters} - {instanceId} {tableWidth} {timeRange} {dimensionColumnWidth} diff --git a/web-common/src/features/exports/ExportMenu.svelte b/web-common/src/features/exports/ExportMenu.svelte index c7044b81715..00ba3b4598e 100644 --- a/web-common/src/features/exports/ExportMenu.svelte +++ b/web-common/src/features/exports/ExportMenu.svelte @@ -7,7 +7,7 @@ import TooltipContent from "@rilldata/web-common/components/tooltip/TooltipContent.svelte"; import { featureFlags } from "@rilldata/web-common/features/feature-flags"; import { - createQueryServiceExport, + createQueryServiceExportMutation, V1ExportFormat, type V1Query, } from "@rilldata/web-common/runtime-client"; @@ -38,7 +38,7 @@ scheduledReportQuery = getQuery(true); } - const exportDash = createQueryServiceExport(); + const exportDash = createQueryServiceExportMutation(runtimeClient); const { reports, adminServer, exportHeader } = featureFlags; async function handleExport(options: { diff --git a/web-common/src/features/models/incremental/ModelRefreshButton.svelte b/web-common/src/features/models/incremental/ModelRefreshButton.svelte index 7cd7cc3b5dd..650f402abdc 100644 --- a/web-common/src/features/models/incremental/ModelRefreshButton.svelte +++ b/web-common/src/features/models/incremental/ModelRefreshButton.svelte @@ -7,7 +7,7 @@ import { V1ReconcileStatus, type V1Resource, - createRuntimeServiceCreateTrigger, + createRuntimeServiceCreateTriggerMutation, } from "@rilldata/web-common/runtime-client"; import { useRuntimeClient } from "../../../runtime-client/v2"; @@ -15,19 +15,15 @@ export let hasUnsavedChanges: boolean; const runtimeClient = useRuntimeClient(); - const triggerMutation = createRuntimeServiceCreateTrigger(); - - $: ({ instanceId } = runtimeClient); + const triggerMutation = + createRuntimeServiceCreateTriggerMutation(runtimeClient); $: isIncrementalModel = resource?.model?.spec?.incremental; $: isModelIdle = resource?.meta?.reconcileStatus === V1ReconcileStatus.RECONCILE_STATUS_IDLE; function refreshModel(full: boolean) { void $triggerMutation.mutateAsync({ - instanceId, - data: { - models: [{ model: resource?.meta?.name?.name, full: full }], - }, + models: [{ model: resource?.meta?.name?.name, full: full }], }); } diff --git a/web-common/src/features/models/partitions/PartitionsTable.svelte b/web-common/src/features/models/partitions/PartitionsTable.svelte index bb972f92245..ebfe5c8876a 100644 --- a/web-common/src/features/models/partitions/PartitionsTable.svelte +++ b/web-common/src/features/models/partitions/PartitionsTable.svelte @@ -13,8 +13,11 @@ import { type V1ModelPartition, type V1Resource, - createRuntimeServiceGetModelPartitionsInfinite, + type V1GetModelPartitionsResponse, + runtimeServiceGetModelPartitions, + getRuntimeServiceGetModelPartitionsQueryKey, } from "../../../runtime-client"; + import { createInfiniteQuery } from "@tanstack/svelte-query"; import { useRuntimeClient } from "../../../runtime-client/v2"; import DataCell from "./DataCell.svelte"; @@ -28,7 +31,6 @@ const runtimeClient = useRuntimeClient(); $: modelName = resource?.meta?.name?.name as string; - $: ({ instanceId } = runtimeClient); // ========================== // Infinite Query @@ -37,25 +39,30 @@ ...(whereErrored ? { errored: true } : {}), ...(wherePending ? { pending: true } : {}), }; - $: query = createRuntimeServiceGetModelPartitionsInfinite( - instanceId, - modelName, - { - ...baseParams, + $: query = createInfiniteQuery({ + queryKey: [ + ...getRuntimeServiceGetModelPartitionsQueryKey(runtimeClient.instanceId, { + model: modelName, + ...baseParams, + }), + "infinite", + ], + queryFn: ({ pageParam }) => + runtimeServiceGetModelPartitions(runtimeClient, { + model: modelName, + ...baseParams, + pageToken: pageParam as string | undefined, + }), + initialPageParam: undefined, + getNextPageParam: (lastPage) => { + if (lastPage.nextPageToken !== "") { + return lastPage.nextPageToken; + } + return undefined; }, - { - query: { - getNextPageParam: (lastPage) => { - if (lastPage.nextPageToken !== "") { - return lastPage.nextPageToken; - } - return undefined; - }, - enabled: !!modelName, - refetchOnMount: true, - }, - }, - ); + enabled: !!modelName, + refetchOnMount: true, + }); $: ({ error } = $query); // ========================== @@ -251,7 +258,7 @@ Error: {error.response.data.message}Error: {error.message} diff --git a/web-common/src/features/models/partitions/TriggerPartition.svelte b/web-common/src/features/models/partitions/TriggerPartition.svelte index 6f6f3cabb2a..96a4c1a83c0 100644 --- a/web-common/src/features/models/partitions/TriggerPartition.svelte +++ b/web-common/src/features/models/partitions/TriggerPartition.svelte @@ -5,7 +5,7 @@ import { Button } from "../../../components/button"; import { V1ReconcileStatus, - createRuntimeServiceCreateTrigger, + createRuntimeServiceCreateTriggerMutation, getRuntimeServiceGetModelPartitionsQueryKey, type V1Resource, } from "../../../runtime-client"; @@ -15,7 +15,8 @@ const runtimeClient = useRuntimeClient(); const queryClient = useQueryClient(); - const triggerMutation = createRuntimeServiceCreateTrigger(); + const triggerMutation = + createRuntimeServiceCreateTriggerMutation(runtimeClient); export let partitionKey: string; export let resource: V1Resource | undefined = undefined; @@ -39,15 +40,12 @@ } await $triggerMutation.mutateAsync({ - instanceId, - data: { - models: [ - { - model: modelName, - partitions: [partitionKey], - }, - ], - }, + models: [ + { + model: modelName, + partitions: [partitionKey], + }, + ], }); // Poll for updates since partition execution happens asynchronously diff --git a/web-common/src/features/onboarding/OnboardingWorkspace.svelte b/web-common/src/features/onboarding/OnboardingWorkspace.svelte index 71db976646f..cef56e824e0 100644 --- a/web-common/src/features/onboarding/OnboardingWorkspace.svelte +++ b/web-common/src/features/onboarding/OnboardingWorkspace.svelte @@ -2,7 +2,7 @@ import { goto } from "$app/navigation"; import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu"; import Button from "../../components/button/Button.svelte"; - import { createRuntimeServiceUnpackExample } from "../../runtime-client"; + import { createRuntimeServiceUnpackExampleMutation } from "../../runtime-client"; import { useRuntimeClient } from "../../runtime-client/v2"; import { addSourceModal } from "../sources/modal/add-source-visibility"; import ImportData from "@rilldata/web-common/components/icons/ImportData.svelte"; @@ -22,9 +22,9 @@ import { fileArtifacts } from "@rilldata/web-common/features/entity-management/file-artifacts.ts"; const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - const unpackExampleProject = createRuntimeServiceUnpackExample(); + const unpackExampleProject = + createRuntimeServiceUnpackExampleMutation(runtimeClient); async function unpackProject(example: (typeof EXAMPLES)[number]) { await behaviourEvent?.fireSplashEvent( @@ -38,11 +38,8 @@ try { await $unpackExampleProject.mutateAsync({ - instanceId, - data: { - name: example.name, - force: true, - }, + name: example.name, + force: true, }); await waitUntil(() => fileArtifacts.hasFileArtifact(example.firstFile)); diff --git a/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte b/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte index 35b32fb538a..2412966b773 100644 --- a/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte +++ b/web-common/src/features/scheduled-reports/BaseScheduledReportForm.svelte @@ -126,19 +126,13 @@
- +
diff --git a/web-common/src/features/scheduled-reports/FiltersForm.svelte b/web-common/src/features/scheduled-reports/FiltersForm.svelte index 51c54910226..253405a7c59 100644 --- a/web-common/src/features/scheduled-reports/FiltersForm.svelte +++ b/web-common/src/features/scheduled-reports/FiltersForm.svelte @@ -31,7 +31,6 @@ const runtimeClient = useRuntimeClient(); - export let instanceId: string; export let filters: Filters; export let timeControls: TimeControls; export let readOnly = false; diff --git a/web-common/src/features/scheduled-reports/fields/RowsAndColumnsForm.svelte b/web-common/src/features/scheduled-reports/fields/RowsAndColumnsForm.svelte index a421de93d5f..93449c92ec2 100644 --- a/web-common/src/features/scheduled-reports/fields/RowsAndColumnsForm.svelte +++ b/web-common/src/features/scheduled-reports/fields/RowsAndColumnsForm.svelte @@ -8,7 +8,6 @@ export let rows: string[]; export let columns: string[]; export let columnErrors: ValidationErrors["columns"]; - export let instanceId: string; export let exploreName: string; const runtimeClient = useRuntimeClient(); diff --git a/web-common/src/features/welcome/ProjectCards.svelte b/web-common/src/features/welcome/ProjectCards.svelte index 7fbda540fe9..605309b5fef 100644 --- a/web-common/src/features/welcome/ProjectCards.svelte +++ b/web-common/src/features/welcome/ProjectCards.svelte @@ -11,8 +11,8 @@ } from "../../metrics/service/BehaviourEventTypes"; import { MetricsEventSpace } from "../../metrics/service/MetricsTypes"; import { - createRuntimeServiceUnpackEmpty, - createRuntimeServiceUnpackExample, + createRuntimeServiceUnpackEmptyMutation, + createRuntimeServiceUnpackExampleMutation, } from "../../runtime-client"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; @@ -24,13 +24,13 @@ connectorLabelMapping, } from "@rilldata/web-common/features/connectors/connector-icon-mapping.ts"; - const unpackExampleProject = createRuntimeServiceUnpackExample(); - const unpackEmptyProject = createRuntimeServiceUnpackEmpty(); + const unpackExampleProject = + createRuntimeServiceUnpackExampleMutation(runtimeClient); + const unpackEmptyProject = + createRuntimeServiceUnpackEmptyMutation(runtimeClient); let selectedProjectName: string | null = null; - $: ({ instanceId } = runtimeClient); - $: ({ mutateAsync: unpackExample } = $unpackExampleProject); $: ({ mutateAsync: unpackEmpty } = $unpackEmptyProject); @@ -51,11 +51,8 @@ try { await mutationFunction({ - instanceId, - data: { - [key]: selectedProjectName, - force: true, - }, + [key]: selectedProjectName, + force: true, }); setTimeout(() => { From 9e022c66bba95c0991b1ca7510aeb8980e94a0a5 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 18:25:45 +0300 Subject: [PATCH 40/78] fix: remove dead `instanceId` vars and fix remaining v2 call signatures Clean up unused variables left behind by the v2 RuntimeClient migration (13 ESLint errors) and fix 5 svelte-check type errors from mismatched call signatures. --- .../src/components/preview-table/ConnectedPreviewTable.svelte | 2 +- web-common/src/features/chat/core/citation-url-utils.ts | 1 - web-common/src/features/chat/core/context/metadata.ts | 2 -- web-common/src/features/chat/core/messages/Messages.svelte | 3 ++- .../features/chat/core/messages/text/citation-url-mapper.ts | 2 +- .../src/features/chat/layouts/sidebar/SidebarChat.svelte | 1 - web-common/src/features/explore-mappers/utils.ts | 1 - web-common/src/features/feature-flags.ts | 1 - web-common/src/features/file-explorer/NavFile.svelte | 4 +--- web-common/src/features/metrics-views/MetricsInspector.svelte | 4 +--- web-common/src/features/sample-data/GenerateSampleData.svelte | 1 - web-common/src/features/sample-data/generate-sample-data.ts | 2 -- web-common/src/features/sources/errors/ErrorPane.svelte | 2 -- web-common/src/features/sources/modal/FileDrop.svelte | 2 -- .../src/features/sources/modal/LocalSourceUpload.svelte | 2 -- web-common/src/features/visual-editing/ThemeInput.svelte | 2 -- web-common/src/layout/ApplicationHeader.svelte | 2 -- 17 files changed, 6 insertions(+), 28 deletions(-) diff --git a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte index b62bef1506c..e2b41212a1a 100644 --- a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte +++ b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte @@ -55,7 +55,7 @@ {:else if rowsError || columnsError} {:else if rows && columns} diff --git a/web-common/src/features/chat/core/citation-url-utils.ts b/web-common/src/features/chat/core/citation-url-utils.ts index ec5335b7a83..637c615693d 100644 --- a/web-common/src/features/chat/core/citation-url-utils.ts +++ b/web-common/src/features/chat/core/citation-url-utils.ts @@ -1,4 +1,3 @@ -import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { type V1GetAIMessageResponse, type V1Message, diff --git a/web-common/src/features/chat/core/context/metadata.ts b/web-common/src/features/chat/core/context/metadata.ts index f8aa0a242ea..9d12f428f40 100644 --- a/web-common/src/features/chat/core/context/metadata.ts +++ b/web-common/src/features/chat/core/context/metadata.ts @@ -49,8 +49,6 @@ export function getInlineChatContextMetadata( queryClient, ); - const instanceId = client.instanceId; - return derived( [metricsViewsQuery, canvasResourcesQuery], ([metricsViewsResp, canvasResourcesResp], set) => { diff --git a/web-common/src/features/chat/core/messages/Messages.svelte b/web-common/src/features/chat/core/messages/Messages.svelte index 3db9cfd3808..a9ea5e3e2ef 100644 --- a/web-common/src/features/chat/core/messages/Messages.svelte +++ b/web-common/src/features/chat/core/messages/Messages.svelte @@ -28,7 +28,8 @@ // Prefetch tools metadata for tool call display names const listToolsQueryOptionsStore = getRuntimeServiceListToolsQueryOptions( - runtimeClient.instanceId, + runtimeClient, + {}, ); const listToolsQuery = createQuery(listToolsQueryOptionsStore); $: tools = $listToolsQuery.data?.tools; diff --git a/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts b/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts index 650cf52a2da..845fa7931b6 100644 --- a/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts +++ b/web-common/src/features/chat/core/messages/text/citation-url-mapper.ts @@ -1,5 +1,5 @@ import type { Conversation } from "@rilldata/web-common/features/chat/core/conversation.ts"; -import type { RpcStatus, V1Message } from "@rilldata/web-common/runtime-client"; +import type { V1Message } from "@rilldata/web-common/runtime-client"; import { getMetricsViewAndExploreSpecsQueryOptions, type MetricsViewAndExploreSpecs, diff --git a/web-common/src/features/chat/layouts/sidebar/SidebarChat.svelte b/web-common/src/features/chat/layouts/sidebar/SidebarChat.svelte index 6a9dce687bc..c2ebf8631f3 100644 --- a/web-common/src/features/chat/layouts/sidebar/SidebarChat.svelte +++ b/web-common/src/features/chat/layouts/sidebar/SidebarChat.svelte @@ -18,7 +18,6 @@ export let config: ChatConfig; const runtimeClient = useRuntimeClient(); - $: instanceId = runtimeClient.instanceId; // Initialize conversation manager with browser storage for conversation management $: conversationManager = getConversationManager(runtimeClient, { diff --git a/web-common/src/features/explore-mappers/utils.ts b/web-common/src/features/explore-mappers/utils.ts index 4fa93e42653..ffb4fbdd847 100644 --- a/web-common/src/features/explore-mappers/utils.ts +++ b/web-common/src/features/explore-mappers/utils.ts @@ -22,7 +22,6 @@ import { getQueryServiceMetricsViewTimeRangeQueryKey, getRuntimeServiceGetExploreQueryKey, queryServiceMetricsViewAggregation, - type QueryServiceMetricsViewAggregationBody, queryServiceMetricsViewTimeRange, runtimeServiceGetExplore, type V1ExploreSpec, diff --git a/web-common/src/features/feature-flags.ts b/web-common/src/features/feature-flags.ts index 8f223ada5e7..2946eb97378 100644 --- a/web-common/src/features/feature-flags.ts +++ b/web-common/src/features/feature-flags.ts @@ -2,7 +2,6 @@ import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryCl import { writable } from "svelte/store"; import { createRuntimeServiceGetInstance, - getRuntimeServiceGetInstanceQueryKey, type V1GetInstanceResponse, type V1InstanceFeatureFlags, } from "../runtime-client"; diff --git a/web-common/src/features/file-explorer/NavFile.svelte b/web-common/src/features/file-explorer/NavFile.svelte index 75d3b601c2e..50d2a120c2e 100644 --- a/web-common/src/features/file-explorer/NavFile.svelte +++ b/web-common/src/features/file-explorer/NavFile.svelte @@ -63,8 +63,6 @@ saveState: { saving, error }, } = fileArtifact); - $: ({ instanceId } = runtimeClient); - $: resourceKind = ($resourceName?.kind ?? $inferredResourceKind) as ResourceKind; $: padding = getPaddingFromPath(filePath); @@ -73,7 +71,7 @@ $: isDotFile = fileName && fileName.startsWith("."); $: isProtectedFile = PROTECTED_FILES.includes(filePath); - $: hasErrors = fileArtifact.getHasErrors(queryClient, instanceId); + $: hasErrors = fileArtifact.getHasErrors(queryClient); function fireTelemetry() { const previousScreenName = getScreenNameFromPage(); diff --git a/web-common/src/features/metrics-views/MetricsInspector.svelte b/web-common/src/features/metrics-views/MetricsInspector.svelte index e1700263f34..31938188073 100644 --- a/web-common/src/features/metrics-views/MetricsInspector.svelte +++ b/web-common/src/features/metrics-views/MetricsInspector.svelte @@ -18,8 +18,6 @@ export let databaseSchema: string; export let table: string; - $: ({ instanceId } = runtimeClient); - $: fileArtifact = fileArtifacts.getFileArtifact(filePath); $: ({ remoteContent } = fileArtifact); $: parseError = fileArtifact.getParseError(queryClient); @@ -32,8 +30,8 @@ $: resourceReconcileError = resourceData?.meta?.reconcileError; $: tableQuery = createConnectorServiceOLAPGetTable( + runtimeClient, { - instanceId, connector, database, databaseSchema, diff --git a/web-common/src/features/sample-data/GenerateSampleData.svelte b/web-common/src/features/sample-data/GenerateSampleData.svelte index 71b067999c4..0f5e4005be5 100644 --- a/web-common/src/features/sample-data/GenerateSampleData.svelte +++ b/web-common/src/features/sample-data/GenerateSampleData.svelte @@ -17,7 +17,6 @@ const runtimeClient = useRuntimeClient(); const initializeProject = type === "init"; - $: ({ instanceId } = runtimeClient); const { developerChat } = featureFlags; const FORM_ID = "generate-sample-data-form"; diff --git a/web-common/src/features/sample-data/generate-sample-data.ts b/web-common/src/features/sample-data/generate-sample-data.ts index a1a8d481269..2c435535d91 100644 --- a/web-common/src/features/sample-data/generate-sample-data.ts +++ b/web-common/src/features/sample-data/generate-sample-data.ts @@ -17,8 +17,6 @@ export async function generateSampleData( initializeProject: boolean, userPrompt: string, ) { - const agentPrompt = `Generate a new model with fresh data for the following user prompt: ${userPrompt}`; - try { if (initializeProject) { overlay.set({ diff --git a/web-common/src/features/sources/errors/ErrorPane.svelte b/web-common/src/features/sources/errors/ErrorPane.svelte index 714bbe7202f..81120f93b98 100644 --- a/web-common/src/features/sources/errors/ErrorPane.svelte +++ b/web-common/src/features/sources/errors/ErrorPane.svelte @@ -9,8 +9,6 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - // Parse Source YAML client-side $: sourceFromYaml = useSourceFromYaml(runtimeClient, filePath); diff --git a/web-common/src/features/sources/modal/FileDrop.svelte b/web-common/src/features/sources/modal/FileDrop.svelte index e713012fd2e..961607a74f8 100644 --- a/web-common/src/features/sources/modal/FileDrop.svelte +++ b/web-common/src/features/sources/modal/FileDrop.svelte @@ -15,8 +15,6 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - const unpackEmptyProject = createRuntimeServiceUnpackEmptyMutation(runtimeClient); diff --git a/web-common/src/features/sources/modal/LocalSourceUpload.svelte b/web-common/src/features/sources/modal/LocalSourceUpload.svelte index 6ac560f0248..a7891bf10b2 100644 --- a/web-common/src/features/sources/modal/LocalSourceUpload.svelte +++ b/web-common/src/features/sources/modal/LocalSourceUpload.svelte @@ -20,8 +20,6 @@ const runtimeClient = useRuntimeClient(); - $: ({ instanceId } = runtimeClient); - const unpackEmptyProject = createRuntimeServiceUnpackEmptyMutation(runtimeClient); diff --git a/web-common/src/features/visual-editing/ThemeInput.svelte b/web-common/src/features/visual-editing/ThemeInput.svelte index 09e64f40769..7661c27ddb6 100644 --- a/web-common/src/features/visual-editing/ThemeInput.svelte +++ b/web-common/src/features/visual-editing/ThemeInput.svelte @@ -32,8 +32,6 @@ let lastPresetTheme: string | undefined = undefined; - $: ({ instanceId } = runtimeClient); - $: isPresetMode = theme === undefined || typeof theme === "string"; $: embeddedTheme = typeof theme === "object" ? theme : undefined; diff --git a/web-common/src/layout/ApplicationHeader.svelte b/web-common/src/layout/ApplicationHeader.svelte index 1c3bc090e4c..dcee11d2ef9 100644 --- a/web-common/src/layout/ApplicationHeader.svelte +++ b/web-common/src/layout/ApplicationHeader.svelte @@ -31,8 +31,6 @@ export let mode: string; - $: ({ instanceId } = runtimeClient); - $: ({ params: { name: dashboardName }, route, From 5213771501bc7eba0842e0353432c677c6c412d6 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 22:52:11 +0300 Subject: [PATCH 41/78] fix: remove unused `runtimeClient` in `NavFile`, fix `$lib` alias in web-local Remove the now-unused `useRuntimeClient()` call in NavFile.svelte and replace the `$lib/local-runtime-config` import with a relative path in web-local's +layout.svelte to fix svelte-check resolution. --- web-common/src/features/file-explorer/NavFile.svelte | 3 --- web-local/src/routes/+layout.svelte | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/web-common/src/features/file-explorer/NavFile.svelte b/web-common/src/features/file-explorer/NavFile.svelte index 50d2a120c2e..9ef9f63d998 100644 --- a/web-common/src/features/file-explorer/NavFile.svelte +++ b/web-common/src/features/file-explorer/NavFile.svelte @@ -22,7 +22,6 @@ ResourceKindToScreenMap, } from "@rilldata/web-common/metrics/service/MetricsTypes"; import type { V1ResourceName } from "@rilldata/web-common/runtime-client"; - import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { Save } from "lucide-svelte"; import type { Readable } from "svelte/store"; import CopyIcon from "../../components/icons/CopyIcon.svelte"; @@ -43,8 +42,6 @@ export let onDelete: (filePath: string, isDir: boolean) => void; export let onMouseDown: (e: MouseEvent, dragData: NavDragData) => void; - const runtimeClient = useRuntimeClient(); - let contextMenuOpen = false; let resourceName: Readable; diff --git a/web-local/src/routes/+layout.svelte b/web-local/src/routes/+layout.svelte index 04b82b55c9b..df0f8149582 100644 --- a/web-local/src/routes/+layout.svelte +++ b/web-local/src/routes/+layout.svelte @@ -21,7 +21,7 @@ initMetrics, } from "@rilldata/web-common/metrics/initMetrics"; import { localServiceGetMetadata } from "@rilldata/web-common/runtime-client/local-service"; - import { LOCAL_HOST, LOCAL_INSTANCE_ID } from "$lib/local-runtime-config"; + import { LOCAL_HOST, LOCAL_INSTANCE_ID } from "../lib/local-runtime-config"; import RuntimeProvider from "@rilldata/web-common/runtime-client/v2/RuntimeProvider.svelte"; import type { Query } from "@tanstack/query-core"; import { QueryClientProvider } from "@tanstack/svelte-query"; From a1ca2fdfdfd732cbb35398c5b1fee0695e41788d Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 23:14:39 +0300 Subject: [PATCH 42/78] fix: allow empty-string host in RuntimeProvider, fix `client` arg in annotations RuntimeProvider's `{#if host && instanceId}` guard treated empty-string host as invalid, but web-local uses `""` (same-origin) in production mode. Changed to `{#if instanceId}`. Also fixed `getAnnotationsForMeasure` call in MetricsTimeSeriesCharts which passed `instanceId` (string) where `client` (RuntimeClient) was expected, causing a crash on dashboard load. --- .../time-series/MetricsTimeSeriesCharts.svelte | 3 +-- .../src/runtime-client/v2/RuntimeProvider.svelte | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte b/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte index 7ea077047e7..6aa53ce21a7 100644 --- a/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte +++ b/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte @@ -96,7 +96,6 @@ $: activeTimeGrain = selectedTimeRange?.interval; const client = useRuntimeClient(); - const { instanceId } = client; let scrubStart; let scrubEnd; @@ -272,7 +271,7 @@ $: annotationsForMeasures = renderedMeasures.map((measure) => getAnnotationsForMeasure({ - instanceId, + client, exploreName, measureName: measure.name!, selectedTimeRange, diff --git a/web-common/src/runtime-client/v2/RuntimeProvider.svelte b/web-common/src/runtime-client/v2/RuntimeProvider.svelte index b6436bb7ccd..e9fa3cb32b5 100644 --- a/web-common/src/runtime-client/v2/RuntimeProvider.svelte +++ b/web-common/src/runtime-client/v2/RuntimeProvider.svelte @@ -1,10 +1,10 @@ -{#if host && instanceId} +{#if client} {/if} From 3f2591fe5ec9be623e5f4e4ce120c066153bcb3b Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 23:25:17 +0300 Subject: [PATCH 43/78] fix: set `FileArtifacts` client synchronously to prevent undefined access during render Children of `FileAndResourceWatcher` render before `onMount` fires, so `fileArtifacts.getFileArtifact()` was creating `FileArtifact` instances with an undefined client. Add `setClient()` and call it in the script block so it runs before children mount. --- .../entity-management/FileAndResourceWatcher.svelte | 4 ++++ .../src/features/entity-management/file-artifacts.ts | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/web-common/src/features/entity-management/FileAndResourceWatcher.svelte b/web-common/src/features/entity-management/FileAndResourceWatcher.svelte index c9005141abf..184ebd543eb 100644 --- a/web-common/src/features/entity-management/FileAndResourceWatcher.svelte +++ b/web-common/src/features/entity-management/FileAndResourceWatcher.svelte @@ -18,6 +18,10 @@ export let host: string; export let instanceId: string; + // Set client synchronously so children can access it during initial render. + // init() (in onMount) handles the async resource prefetch. + fileArtifacts.setClient(runtimeClient); + $: fileAndResourceWatcher.setRuntimeClient(runtimeClient); $: fileAndResourceWatcher.setInstanceId(instanceId); diff --git a/web-common/src/features/entity-management/file-artifacts.ts b/web-common/src/features/entity-management/file-artifacts.ts index ad2b4fc7bae..f9338c3503e 100644 --- a/web-common/src/features/entity-management/file-artifacts.ts +++ b/web-common/src/features/entity-management/file-artifacts.ts @@ -39,6 +39,14 @@ export class FileArtifacts { readonly unsavedFiles = new UnsavedFilesStore(); private client!: RuntimeClient; + /** + * Must be called synchronously (in the script block, not onMount) + * so that child components can access the client during initial render. + */ + setClient(client: RuntimeClient) { + this.client = client; + } + async init(client: RuntimeClient, queryClient: QueryClient) { this.client = client; const resources = await fetchResources(queryClient, client); From ca80172d4c8c954fe459c9da34ab8c95587fe110 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Thu, 26 Feb 2026 23:51:48 +0300 Subject: [PATCH 44/78] fix: validate `RuntimeClient` constructor args, remove redundant template guard Add runtime validation for `host` (must be a string) and `instanceId` (must be non-empty) in the `RuntimeClient` constructor. This turns silent broken state into an immediate error. Remove the `{#if client}` template guard from `RuntimeProvider` since all callers already ensure valid props before mounting. --- .../src/runtime-client/v2/RuntimeProvider.svelte | 4 +--- web-common/src/runtime-client/v2/runtime-client.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/web-common/src/runtime-client/v2/RuntimeProvider.svelte b/web-common/src/runtime-client/v2/RuntimeProvider.svelte index e9fa3cb32b5..9575b47ec47 100644 --- a/web-common/src/runtime-client/v2/RuntimeProvider.svelte +++ b/web-common/src/runtime-client/v2/RuntimeProvider.svelte @@ -32,6 +32,4 @@ }); -{#if client} - -{/if} + diff --git a/web-common/src/runtime-client/v2/runtime-client.ts b/web-common/src/runtime-client/v2/runtime-client.ts index 9f542d5271f..398e806e003 100644 --- a/web-common/src/runtime-client/v2/runtime-client.ts +++ b/web-common/src/runtime-client/v2/runtime-client.ts @@ -34,6 +34,18 @@ export class RuntimeClient { jwt?: string; authContext?: AuthContext; }) { + if (typeof opts.host !== "string") { + throw new Error( + "RuntimeClient requires host to be a string. " + + "An empty string is valid (same-origin for local dev).", + ); + } + if (!opts.instanceId) { + throw new Error( + "RuntimeClient requires a non-empty instanceId. " + + "The caller should not mount RuntimeProvider until instanceId is available.", + ); + } this.host = opts.host; this.instanceId = opts.instanceId; this.currentJwt = opts.jwt; From 5a3a1031df01eed1d4896f996e0bb5cd4e2fb29d Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Fri, 27 Feb 2026 11:46:28 +0300 Subject: [PATCH 45/78] fix: replace manual REST `fetch()` calls with v2 RPC, remove dead query-key matching code - Delete `query-options.ts`; migrate alert/report load functions to v2 `getRuntimeServiceGetResourceQueryOptions` with `ConnectError` handling - Replace `runtimeFetch()` in `open-query.ts` with `runtimeServiceListResources`, `runtimeServiceGetExplore`, and `queryServiceMetricsViewTimeRange` - Migrate `getFeatureFlags()` to use `runtimeServiceGetInstance` via `RuntimeClient` - Add `createRuntimeClientFromLayout` helper in web-admin for load functions - Add `connectCodeToHTTPStatus` utility for mapping gRPC codes to HTTP status - Remove old `/v1/...` format branches from `invalidation.ts` and `query-matcher.ts` - Remove unused `isMetricsViewQuery`, `isRuntimeQuery`, `QueryRequestType` enum, `ProfilingQueryExtractor` regex, and related dead code --- web-admin/src/lib/runtime-client-utils.ts | 21 ++++ .../[organization]/[project]/-/ai/+layout.ts | 5 +- .../message/[messageId]/-/open/+page.ts | 4 +- .../[project]/-/alerts/[alert]/+layout.ts | 18 ++-- .../[project]/-/open-query/+page.ts | 18 ++-- .../[project]/-/reports/[report]/+layout.ts | 18 ++-- .../dashboards/filters/Filters.svelte | 6 +- .../features/explore-mappers/open-query.ts | 90 +++++----------- web-common/src/features/feature-flags.ts | 27 ++--- .../scheduled-reports/FiltersForm.svelte | 4 +- web-common/src/lib/errors.ts | 43 ++++++++ web-common/src/runtime-client/invalidation.ts | 62 ++--------- .../src/runtime-client/query-matcher.ts | 102 ++---------------- .../src/runtime-client/query-options.ts | 40 ------- .../message/[messageId]/-/open/+page.ts | 2 +- .../src/routes/(viz)/-/open-query/+page.ts | 7 +- 16 files changed, 156 insertions(+), 311 deletions(-) create mode 100644 web-admin/src/lib/runtime-client-utils.ts delete mode 100644 web-common/src/runtime-client/query-options.ts diff --git a/web-admin/src/lib/runtime-client-utils.ts b/web-admin/src/lib/runtime-client-utils.ts new file mode 100644 index 00000000000..71fc752de2f --- /dev/null +++ b/web-admin/src/lib/runtime-client-utils.ts @@ -0,0 +1,21 @@ +import { + RuntimeClient, + type AuthContext, +} from "@rilldata/web-common/runtime-client/v2"; + +/** + * Construct a RuntimeClient from the layout `runtime` data + * that web-admin passes through `await parent()`. + */ +export function createRuntimeClientFromLayout(runtime: { + host: string; + instanceId: string; + jwt?: { token: string; authContext?: string }; +}): RuntimeClient { + return new RuntimeClient({ + host: runtime.host, + instanceId: runtime.instanceId, + jwt: runtime.jwt?.token, + authContext: runtime.jwt?.authContext as AuthContext, + }); +} diff --git a/web-admin/src/routes/[organization]/[project]/-/ai/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/ai/+layout.ts index 0a9805d4254..793777a23fe 100644 --- a/web-admin/src/routes/[organization]/[project]/-/ai/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/ai/+layout.ts @@ -3,6 +3,7 @@ import { setLastConversationId, } from "@rilldata/web-common/features/chat/layouts/fullpage/fullpage-store"; import { getFeatureFlags } from "@rilldata/web-common/features/feature-flags.js"; +import { createRuntimeClientFromLayout } from "@rilldata/web-admin/lib/runtime-client-utils"; import { redirect } from "@sveltejs/kit"; export const load = async ({ @@ -11,10 +12,10 @@ export const load = async ({ url, parent, }) => { - // Wait for the feature flags to load const { runtime } = await parent(); + const client = createRuntimeClientFromLayout(runtime); - const fetchedFeatureFlags = await getFeatureFlags(runtime); + const fetchedFeatureFlags = await getFeatureFlags(client); // Redirect to `/-/dashboards` if chat feature is disabled // NOTE: In the future, we'll use user-level `ai` permissions for more granular access control diff --git a/web-admin/src/routes/[organization]/[project]/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts b/web-admin/src/routes/[organization]/[project]/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts index f0d6fded58a..6e693150695 100644 --- a/web-admin/src/routes/[organization]/[project]/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts +++ b/web-admin/src/routes/[organization]/[project]/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts @@ -1,14 +1,16 @@ import { maybeGetMetricsResolverQueryFromMessage } from "@rilldata/web-common/features/chat/core/citation-url-utils.ts"; import { openQuery } from "@rilldata/web-common/features/explore-mappers/open-query.ts"; +import { createRuntimeClientFromLayout } from "@rilldata/web-admin/lib/runtime-client-utils"; export async function load({ parent, params: { organization, project } }) { const { runtime, message } = await parent(); + const client = createRuntimeClientFromLayout(runtime); const query = maybeGetMetricsResolverQueryFromMessage(message); await openQuery({ query, - runtime, + client, organization, project, }); diff --git a/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts index fe85f7cfd16..19b6711d1d4 100644 --- a/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts @@ -1,24 +1,24 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.js"; +import { connectCodeToHTTPStatus } from "@rilldata/web-common/lib/errors"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; -import { isHTTPError } from "@rilldata/web-common/lib/errors"; -import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client/query-options"; +import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client"; import { error } from "@sveltejs/kit"; +import { ConnectError } from "@connectrpc/connect"; +import { createRuntimeClientFromLayout } from "@rilldata/web-admin/lib/runtime-client-utils"; export async function load({ params, parent }) { const { runtime } = await parent(); + const client = createRuntimeClientFromLayout(runtime); const alertData = await queryClient .fetchQuery( - getRuntimeServiceGetResourceQueryOptions(runtime, { - "name.kind": ResourceKind.Alert, - "name.name": params.alert, + getRuntimeServiceGetResourceQueryOptions(client, { + name: { kind: ResourceKind.Alert, name: params.alert }, }), ) .catch((e) => { - if (!isHTTPError(e)) { - throw error(500, "Error fetching alert"); - } - throw error(e.response.status, e.response.data.message); + const ce = ConnectError.from(e); + throw error(connectCodeToHTTPStatus(ce.code), ce.rawMessage); }); return { diff --git a/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts b/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts index 059f040f91f..62b600cf361 100644 --- a/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts +++ b/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts @@ -1,18 +1,18 @@ import { openQuery } from "@rilldata/web-common/features/explore-mappers/open-query"; +import { createRuntimeClientFromLayout } from "@rilldata/web-admin/lib/runtime-client-utils"; import type { PageLoad } from "./$types"; import { getQueryFromUrl } from "@rilldata/web-common/features/chat/core/citation-url-utils.ts"; export const load: PageLoad = async ({ params, url, parent }) => { - // Only proceed once the runtime in parent is ready - const parentData = await parent(); - - // Get the organization and project from the URL - const organization = params.organization; - const project = params.project; - const runtime = parentData.runtime; + const { runtime } = await parent(); + const client = createRuntimeClientFromLayout(runtime!); const query = getQueryFromUrl(url); - // Open the query (this'll redirect to the relevant Explore page) - await openQuery({ query, organization, project, runtime: runtime! }); + await openQuery({ + query, + organization: params.organization, + project: params.project, + client, + }); }; diff --git a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts index 1c2549d79ae..7b0dc7919e7 100644 --- a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts @@ -1,24 +1,24 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.js"; +import { connectCodeToHTTPStatus } from "@rilldata/web-common/lib/errors"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; -import { isHTTPError } from "@rilldata/web-common/lib/errors"; -import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client/query-options"; +import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client"; import { error } from "@sveltejs/kit"; +import { ConnectError } from "@connectrpc/connect"; +import { createRuntimeClientFromLayout } from "@rilldata/web-admin/lib/runtime-client-utils"; export async function load({ params, parent }) { const { runtime } = await parent(); + const client = createRuntimeClientFromLayout(runtime); const reportData = await queryClient .fetchQuery( - getRuntimeServiceGetResourceQueryOptions(runtime, { - "name.kind": ResourceKind.Report, - "name.name": params.report, + getRuntimeServiceGetResourceQueryOptions(client, { + name: { kind: ResourceKind.Report, name: params.report }, }), ) .catch((e) => { - if (!isHTTPError(e)) { - throw error(500, "Error fetching report"); - } - throw error(e.response.status, e.response.data.message); + const ce = ConnectError.from(e); + throw error(connectCodeToHTTPStatus(ce.code), ce.rawMessage); }); return { diff --git a/web-common/src/features/dashboards/filters/Filters.svelte b/web-common/src/features/dashboards/filters/Filters.svelte index c9eaa385a12..0bb5ada2bb3 100644 --- a/web-common/src/features/dashboards/filters/Filters.svelte +++ b/web-common/src/features/dashboards/filters/Filters.svelte @@ -21,7 +21,7 @@ V1TimeGrain, type V1ExploreTimeRange, } from "@rilldata/web-common/runtime-client"; - import { isMetricsViewQuery } from "@rilldata/web-common/runtime-client/invalidation.ts"; + import { invalidationForMetricsViewData } from "@rilldata/web-common/runtime-client/invalidation.ts"; import { DateTime, Interval } from "luxon"; import { flip } from "svelte/animate"; import { fly } from "svelte/transition"; @@ -224,7 +224,7 @@ await queryClient.cancelQueries({ predicate: (query) => - isMetricsViewQuery(query.queryHash, metricsViewName), + invalidationForMetricsViewData(query, metricsViewName), }); metricsExplorerStore.setTimeDimension($exploreName, column); @@ -292,7 +292,7 @@ await queryClient.cancelQueries({ predicate: (query) => - isMetricsViewQuery(query.queryHash, metricsViewName), + invalidationForMetricsViewData(query, metricsViewName), }); const { interval, grain } = await deriveInterval( diff --git a/web-common/src/features/explore-mappers/open-query.ts b/web-common/src/features/explore-mappers/open-query.ts index 0ae88ae58aa..5543633ff69 100644 --- a/web-common/src/features/explore-mappers/open-query.ts +++ b/web-common/src/features/explore-mappers/open-query.ts @@ -7,12 +7,14 @@ import { getQueryServiceMetricsViewTimeRangeQueryKey, getRuntimeServiceGetExploreQueryKey, getRuntimeServiceListResourcesQueryKey, + queryServiceMetricsViewTimeRange, + runtimeServiceGetExplore, + runtimeServiceListResources, type V1ExploreSpec, - type V1GetExploreResponse, - type V1ListResourcesResponse, type V1MetricsViewSpec, type V1MetricsViewTimeRangeResponse, } from "@rilldata/web-common/runtime-client"; +import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import type { Schema as MetricsResolverQuery } from "@rilldata/web-common/runtime-client/gen/resolvers/metrics/schema.ts"; import { error, redirect } from "@sveltejs/kit"; import { getTimeControlState } from "@rilldata/web-common/features/dashboards/time-controls/time-control-store.ts"; @@ -20,44 +22,14 @@ import { convertPartialExploreStateToUrlParams } from "@rilldata/web-common/feat import { createLinkError } from "@rilldata/web-common/features/explore-mappers/explore-validation.ts"; import { ExploreLinkErrorType } from "@rilldata/web-common/features/explore-mappers/types.ts"; -interface RuntimeInfo { - host: string; - instanceId: string; - jwt?: { token: string } | undefined; -} - -async function runtimeFetch( - runtime: RuntimeInfo, - path: string, - opts?: { method?: string; body?: unknown; signal?: AbortSignal }, -): Promise { - const headers: Record = { - "Content-Type": "application/json", - }; - if (runtime.jwt) { - headers["Authorization"] = `Bearer ${runtime.jwt.token}`; - } - const resp = await fetch(`${runtime.host}${path}`, { - method: opts?.method ?? "GET", - headers, - ...(opts?.body !== undefined ? { body: JSON.stringify(opts.body) } : {}), - signal: opts?.signal, - }); - if (!resp.ok) { - const data = await resp.json().catch(() => ({})); - throw { response: { status: resp.status, data } }; - } - return (await resp.json()) as T; -} - export async function openQuery({ query, organization, project, - runtime, + client, }: { query: MetricsResolverQuery; - runtime: RuntimeInfo; + client: RuntimeClient; organization?: string; project?: string; }) { @@ -72,12 +44,12 @@ export async function openQuery({ // Find an explore dashboard that uses this metrics view const exploreName = await findExploreForMetricsView( - runtime, + client, metricsViewName, ); const { metricsViewSpec, exploreSpec } = await getExploreSpecs( - runtime, + client, exploreName, ); @@ -90,7 +62,7 @@ export async function openQuery({ // Generate the final explore URL exploreURL = await generateExploreLink( - runtime, + client, exploreState, metricsViewSpec, exploreSpec, @@ -118,19 +90,17 @@ export async function openQuery({ * TODO: try to find an explore that has as many measures/dimensions in the query */ async function findExploreForMetricsView( - runtime: RuntimeInfo, + client: RuntimeClient, metricsViewName: string, ): Promise { + const request = { kind: ResourceKind.Explore }; const exploreResources = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceListResourcesQueryKey(runtime.instanceId, { - kind: ResourceKind.Explore, - }), + queryKey: getRuntimeServiceListResourcesQueryKey( + client.instanceId, + request, + ), queryFn: ({ signal }) => - runtimeFetch( - runtime, - `/v1/instances/${runtime.instanceId}/resources?kind=${ResourceKind.Explore}`, - { signal }, - ), + runtimeServiceListResources(client, request, { signal }), }); if (exploreResources.resources) { @@ -146,17 +116,12 @@ async function findExploreForMetricsView( ); } -async function getExploreSpecs(runtime: RuntimeInfo, exploreName: string) { +async function getExploreSpecs(client: RuntimeClient, exploreName: string) { + const request = { name: exploreName }; const getExploreResponse = await queryClient.fetchQuery({ - queryKey: getRuntimeServiceGetExploreQueryKey(runtime.instanceId, { - name: exploreName, - }), + queryKey: getRuntimeServiceGetExploreQueryKey(client.instanceId, request), queryFn: ({ signal }) => - runtimeFetch( - runtime, - `/v1/instances/${runtime.instanceId}/resources/explore?name=${encodeURIComponent(exploreName)}`, - { signal }, - ), + runtimeServiceGetExplore(client, request, { signal }), }); const exploreResource = getExploreResponse.explore; const metricsViewResource = getExploreResponse.metricsView; @@ -179,7 +144,7 @@ async function getExploreSpecs(runtime: RuntimeInfo, exploreName: string) { * Generates the explore page URL with proper search parameters */ async function generateExploreLink( - runtime: RuntimeInfo, + client: RuntimeClient, exploreState: Partial, metricsViewSpec: V1MetricsViewSpec, exploreSpec: V1ExploreSpec, @@ -193,17 +158,14 @@ async function generateExploreLink( const metricsViewName = exploreSpec.metricsView; let fullTimeRange: V1MetricsViewTimeRangeResponse | undefined; if (metricsViewSpec.timeDimension && metricsViewName) { + const request = { metricsViewName }; fullTimeRange = await queryClient.fetchQuery({ - queryFn: ({ signal }) => - runtimeFetch( - runtime, - `/v1/instances/${runtime.instanceId}/queries/metrics-views/${encodeURIComponent(metricsViewName)}/time-range-summary`, - { method: "POST", body: {}, signal }, - ), queryKey: getQueryServiceMetricsViewTimeRangeQueryKey( - runtime.instanceId, - { metricsViewName }, + client.instanceId, + request, ), + queryFn: ({ signal }) => + queryServiceMetricsViewTimeRange(client, request, { signal }), staleTime: Infinity, gcTime: Infinity, }); diff --git a/web-common/src/features/feature-flags.ts b/web-common/src/features/feature-flags.ts index 2946eb97378..db062167ad0 100644 --- a/web-common/src/features/feature-flags.ts +++ b/web-common/src/features/feature-flags.ts @@ -2,7 +2,7 @@ import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryCl import { writable } from "svelte/store"; import { createRuntimeServiceGetInstance, - type V1GetInstanceResponse, + runtimeServiceGetInstance, type V1InstanceFeatureFlags, } from "../runtime-client"; import type { RuntimeClient } from "../runtime-client/v2"; @@ -126,24 +126,13 @@ class FeatureFlags { export const featureFlags = new FeatureFlags(); -interface RuntimeInfo { - host: string; - instanceId: string; - jwt?: { token: string } | undefined; -} - -export async function getFeatureFlags(runtime: RuntimeInfo) { - const resp = await fetch( - `${runtime.host}/v1/instances/${runtime.instanceId}`, - { - headers: runtime.jwt - ? { Authorization: `Bearer ${runtime.jwt.token}` } - : {}, - }, - ); - if (!resp.ok) { +export async function getFeatureFlags( + client: RuntimeClient, +): Promise { + try { + const data = await runtimeServiceGetInstance(client, {}); + return data.instance?.featureFlags ?? {}; + } catch { return {}; } - const data = (await resp.json()) as V1GetInstanceResponse; - return data.instance?.featureFlags ?? {}; } diff --git a/web-common/src/features/scheduled-reports/FiltersForm.svelte b/web-common/src/features/scheduled-reports/FiltersForm.svelte index 253405a7c59..63c798bdb2e 100644 --- a/web-common/src/features/scheduled-reports/FiltersForm.svelte +++ b/web-common/src/features/scheduled-reports/FiltersForm.svelte @@ -23,7 +23,7 @@ TimeRangePreset, } from "@rilldata/web-common/lib/time/types.ts"; import { V1TimeGrain } from "@rilldata/web-common/runtime-client"; - import { isMetricsViewQuery } from "@rilldata/web-common/runtime-client/invalidation.ts"; + import { invalidationForMetricsViewData } from "@rilldata/web-common/runtime-client/invalidation.ts"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { DateTime, Interval } from "luxon"; import { onMount } from "svelte"; @@ -203,7 +203,7 @@ await queryClient.cancelQueries({ predicate: (query) => - isMetricsViewQuery(query.queryHash, metricsViewName), + invalidationForMetricsViewData(query, metricsViewName), }); const { interval, grain } = await deriveInterval( diff --git a/web-common/src/lib/errors.ts b/web-common/src/lib/errors.ts index a88fec9c85a..a76f81f7abb 100644 --- a/web-common/src/lib/errors.ts +++ b/web-common/src/lib/errors.ts @@ -22,3 +22,46 @@ export function isHTTPError(error: unknown): error is HTTPError { ?.data?.message === "string" ); } + +/** + * Maps a ConnectRPC error code to an HTTP status code. + * See https://connectrpc.com/docs/protocol#error-codes + */ +export function connectCodeToHTTPStatus(code: number): number { + switch (code) { + case 1: // Canceled + return 408; + case 2: // Unknown + return 500; + case 3: // InvalidArgument + return 400; + case 4: // DeadlineExceeded + return 408; + case 5: // NotFound + return 404; + case 6: // AlreadyExists + return 409; + case 7: // PermissionDenied + return 403; + case 8: // ResourceExhausted + return 429; + case 9: // FailedPrecondition + return 412; + case 10: // Aborted + return 409; + case 11: // OutOfRange + return 400; + case 12: // Unimplemented + return 501; + case 13: // Internal + return 500; + case 14: // Unavailable + return 503; + case 15: // DataLoss + return 500; + case 16: // Unauthenticated + return 401; + default: + return 500; + } +} diff --git a/web-common/src/runtime-client/invalidation.ts b/web-common/src/runtime-client/invalidation.ts index dbd54bca77d..43c485bf4ed 100644 --- a/web-common/src/runtime-client/invalidation.ts +++ b/web-common/src/runtime-client/invalidation.ts @@ -6,17 +6,12 @@ import { } from "@rilldata/web-common/runtime-client/query-matcher"; import type { Query, QueryClient } from "@tanstack/svelte-query"; -// --- Query key format helpers --- -// During migration, queries may use either the old URL-path format -// (e.g. ["/v1/instances/{id}/..."]) or the new service/method format -// (e.g. ["QueryService", "metricsViewAggregation", instanceId, request]). - -/** Matches both old and new key formats for a given instanceId. */ +/** Matches the new key format for a given instanceId. */ function isRuntimeQueryForInstance( queryKey: readonly unknown[], instanceId: string, ): boolean { - // New format: [ServiceName, methodName, instanceId, request] + // Format: [ServiceName, methodName, instanceId, request] if (queryKey.length >= 3 && queryKey[2] === instanceId) { const svc = queryKey[0]; return ( @@ -25,11 +20,7 @@ function isRuntimeQueryForInstance( svc === "ConnectorService" ); } - // Old format: ["/v1/instances/{instanceId}/..."] - return ( - typeof queryKey[0] === "string" && - queryKey[0].startsWith(`/v1/instances/${instanceId}`) - ); + return false; } /** Checks if a query key matches a metrics view query (by name). */ @@ -37,7 +28,7 @@ function isMetricsViewQueryKey( queryKey: readonly unknown[], metricsViewName: string, ): boolean { - // New format: ["QueryService", "metricsView*", instanceId, { metricsViewName, ... }] + // Format: ["QueryService", "metricsView*", instanceId, { metricsViewName, ... }] if ( queryKey[0] === "QueryService" && typeof queryKey[1] === "string" && @@ -58,7 +49,7 @@ function isComponentResolveKey( queryKey: readonly unknown[], componentName: string, ): boolean { - // New format: ["QueryService", "resolveComponent", instanceId, { component: name }] + // Format: ["QueryService", "resolveComponent", instanceId, { component: name }] if (queryKey[0] === "QueryService" && queryKey[1] === "resolveComponent") { const request = queryKey[3]; return ( @@ -81,24 +72,11 @@ export function invalidateRuntimeQueries( }); } -export function isMetricsViewQuery(queryHash: string, metricsViewName: string) { - const r = new RegExp( - `/v1/instances/[a-zA-Z0-9-]+/queries/metrics-views/${metricsViewName}/`, - ); - return r.test(queryHash); -} - export function invalidationForMetricsViewData( query: Query, metricsViewName: string, ) { - // New key format - if (isMetricsViewQueryKey(query.queryKey, metricsViewName)) return true; - // Old key format - return ( - typeof query.queryKey[0] === "string" && - isMetricsViewQuery(query.queryKey[0], metricsViewName) - ); + return isMetricsViewQueryKey(query.queryKey, metricsViewName); } export const invalidateMetricsViewData = ( @@ -139,17 +117,11 @@ export async function invalidateAllMetricsViews( type: "active", predicate: (query) => { const key = query.queryKey; - // New format: ["RuntimeService", "getResource" or "listResources", instanceId, ...] - if ( + // Format: ["RuntimeService", "getResource" or "listResources", instanceId, ...] + return ( key[0] === "RuntimeService" && (key[1] === "getResource" || key[1] === "listResources") && key[2] === instanceId - ) - return true; - // Old format - return ( - typeof key[0] === "string" && - key[0].startsWith(`/v1/instances/${instanceId}/resource`) ); }, }); @@ -160,19 +132,12 @@ export async function invalidateAllMetricsViews( void queryClient.resetQueries({ predicate: (query: Query) => { const key = query.queryKey; - // New format: ["QueryService", "metricsView*", instanceId, ...] - if ( + // Format: ["QueryService", "metricsView*", instanceId, ...] + return ( key[0] === "QueryService" && typeof key[1] === "string" && key[1].startsWith("metricsView") && key[2] === instanceId - ) { - return true; - } - // Old format - return ( - typeof key[0] === "string" && - key[0].startsWith(`/v1/instances/${instanceId}/queries/metrics-views`) ); }, }); @@ -217,13 +182,8 @@ export async function invalidateComponentData( name: string, failed: boolean, ) { - const componentAPIRegex = new RegExp( - `/v1/instances/[a-zA-Z0-9-]+/queries/components/${name}/resolve`, - ); - const matchesComponent = (query: Query) => - isComponentResolveKey(query.queryKey, name) || - componentAPIRegex.test(query.queryHash); + isComponentResolveKey(query.queryKey, name); queryClient.removeQueries({ predicate: matchesComponent, diff --git a/web-common/src/runtime-client/query-matcher.ts b/web-common/src/runtime-client/query-matcher.ts index 3c6306f600b..78b844ec15b 100644 --- a/web-common/src/runtime-client/query-matcher.ts +++ b/web-common/src/runtime-client/query-matcher.ts @@ -1,60 +1,6 @@ import type { Query } from "@tanstack/query-core"; -import { ResourceKind } from "../features/entity-management/resource-selectors"; -export function isRuntimeQuery(query: Query): boolean { - const key = query.queryKey; - // New format: [ServiceName, methodName, instanceId, request] - const svc = key[0]; - if ( - svc === "QueryService" || - svc === "RuntimeService" || - svc === "ConnectorService" - ) { - return true; - } - // Old format: ["/v1/instances/..."] - return typeof svc === "string" && svc.startsWith("/v1/instances/"); -} - -export function isGetResourceMetricsViewQuery(query: Query): boolean { - const key = query.queryKey; - // Format: ["RuntimeService", "getResource", instanceId, { name: { kind, name } }] - if (key[0] === "RuntimeService" && key[1] === "getResource") { - const request = key[3]; - if (typeof request !== "object" || request === null) return false; - const name = (request as Record).name; - return ( - typeof name === "object" && - name !== null && - (name as Record).kind === ResourceKind.MetricsView - ); - } - return false; -} - -export enum QueryRequestType { - MetricsViewTopList = "toplist", - MetricsViewCompareTopList = "compare-toplist", - MetricsViewTimeSeries = "timeseries", - MetricsViewTotals = "totals", - MetricsViewRows = "rows", - MetricsViewTimeRange = "time-range-summary", - ColumnRollupInterval = "rollup-interval", - ColumnTopK = "topk", - ColumnNullCount = "null-count", - ColumnDescriptiveStatistics = "descriptive-statistics", - ColumnTimeGrain = "smallest-time-grain", - ColumnNumericHistogram = "numeric-histogram", - ColumnRugHistogram = "rug-histogram", - ColumnTimeRange = "time-range-summary", - ColumnCardinality = "column-cardinality", - ColumnTimeSeries = "timeseries", - TableCardinality = "table-cardinality", - TableColumns = "columns-profile", - TableRows = "rows", -} - -// New format method names that correspond to profiling queries +// Method names that correspond to profiling queries const profilingMethods = new Set([ "columnRollupInterval", "columnTopK", @@ -77,29 +23,13 @@ const tableProfilingMethods = new Set([ "tableRows", ]); -/** Extract the table name from a new-format profiling query's request object */ +/** Extract the table name from a profiling query's request object */ function getTableNameFromRequest(request: unknown): string | undefined { if (typeof request !== "object" || request === null) return undefined; return (request as Record).tableName as string | undefined; } -const TableProfilingQuery: Partial> = { - [QueryRequestType.TableCardinality]: true, - [QueryRequestType.TableColumns]: true, - [QueryRequestType.TableRows]: true, -}; - -const ProfilingQueryExtractor = - /v1\/instances\/[a-zA-Z0-9-]+\/queries\/([a-zA-Z0-9-]+)\/tables\/(.+?)"/; - -function isOlapQuery(queryHash: string, name: string) { - return ( - queryHash.includes(`"/v1/connectors/olap/table"`) && - queryHash.includes(`"${name}"`) - ); -} - -function isNewFormatOlapQuery(query: Query, name: string): boolean { +function isOlapQuery(query: Query, name: string): boolean { const key = query.queryKey; if ( key[0] === "ConnectorService" && @@ -116,7 +46,6 @@ function isNewFormatOlapQuery(query: Query, name: string): boolean { } export function isProfilingQuery(query: Query, name: string): boolean { - // New format if ( query.queryKey[0] === "QueryService" && profilingMethods.has(query.queryKey[1] as string) @@ -124,17 +53,10 @@ export function isProfilingQuery(query: Query, name: string): boolean { const tableName = getTableNameFromRequest(query.queryKey[3]); return tableName === name; } - if (isNewFormatOlapQuery(query, name)) return true; - // Old format - const queryExtractorMatch = ProfilingQueryExtractor.exec(query.queryHash); - if (!queryExtractorMatch) return isOlapQuery(query.queryHash, name); - - const [, , table] = queryExtractorMatch; - return table === name; + return isOlapQuery(query, name); } export function isTableProfilingQuery(query: Query, name: string): boolean { - // New format if ( query.queryKey[0] === "QueryService" && tableProfilingMethods.has(query.queryKey[1] as string) @@ -142,17 +64,10 @@ export function isTableProfilingQuery(query: Query, name: string): boolean { const tableName = getTableNameFromRequest(query.queryKey[3]); return tableName === name; } - if (isNewFormatOlapQuery(query, name)) return true; - // Old format - const queryExtractorMatch = ProfilingQueryExtractor.exec(query.queryHash); - if (!queryExtractorMatch) return isOlapQuery(query.queryHash, name); - - const [, type, table] = queryExtractorMatch; - return table === name && type in TableProfilingQuery; + return isOlapQuery(query, name); } export function isColumnProfilingQuery(query: Query, name: string) { - // New format if ( query.queryKey[0] === "QueryService" && profilingMethods.has(query.queryKey[1] as string) && @@ -161,10 +76,5 @@ export function isColumnProfilingQuery(query: Query, name: string) { const tableName = getTableNameFromRequest(query.queryKey[3]); return tableName === name; } - // Old format - const queryExtractorMatch = ProfilingQueryExtractor.exec(query.queryHash); - if (!queryExtractorMatch) return false; - - const [, type, table] = queryExtractorMatch; - return table === name && !(type in TableProfilingQuery); + return false; } diff --git a/web-common/src/runtime-client/query-options.ts b/web-common/src/runtime-client/query-options.ts deleted file mode 100644 index 159c1beb057..00000000000 --- a/web-common/src/runtime-client/query-options.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { FetchQueryOptions } from "@tanstack/svelte-query"; -import type { - RuntimeServiceGetResourceParams, - V1GetResourceResponse, -} from "./gen/index.schemas"; -import type { V1GetResourceResponse as RuntimeServiceGetResourceQueryResult } from "./gen/index.schemas"; -import { getRuntimeServiceGetResourceQueryKey } from "./v2/gen/runtime-service"; - -interface RuntimeInfo { - host: string; - instanceId: string; - jwt?: { token: string } | undefined; -} - -export function getRuntimeServiceGetResourceQueryOptions( - runtime: RuntimeInfo, - params: RuntimeServiceGetResourceParams, -) { - return >{ - queryKey: getRuntimeServiceGetResourceQueryKey(runtime.instanceId, params), - queryFn: async () => { - const searchParams = new URLSearchParams(); - for (const [key, value] of Object.entries(params)) { - if (value !== undefined) searchParams.set(key, String(value)); - } - const url = `${runtime.host}/v1/instances/${runtime.instanceId}/resource?${searchParams}`; - const headers: Record = {}; - if (runtime.jwt) { - headers["Authorization"] = `Bearer ${runtime.jwt.token}`; - } - const resp = await fetch(url, { headers }); - if (!resp.ok) { - const data = await resp.json().catch(() => ({})); - throw { response: { status: resp.status, data } }; - } - return (await resp.json()) as V1GetResourceResponse; - }, - staleTime: Infinity, - }; -} diff --git a/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts b/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts index fc2098207e4..da5f22bae41 100644 --- a/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts +++ b/web-local/src/routes/(viz)/-/ai/[conversationId]/message/[messageId]/-/open/+page.ts @@ -10,6 +10,6 @@ export async function load({ parent }) { await openQuery({ query, - runtime: { host: client.host, instanceId: client.instanceId }, + client, }); } diff --git a/web-local/src/routes/(viz)/-/open-query/+page.ts b/web-local/src/routes/(viz)/-/open-query/+page.ts index 7c638622873..abfa2a31456 100644 --- a/web-local/src/routes/(viz)/-/open-query/+page.ts +++ b/web-local/src/routes/(viz)/-/open-query/+page.ts @@ -1,8 +1,5 @@ import { openQuery } from "@rilldata/web-common/features/explore-mappers/open-query"; -import { - LOCAL_HOST, - LOCAL_INSTANCE_ID, -} from "../../../../lib/local-runtime-config"; +import { getLocalRuntimeClient } from "../../../../lib/local-runtime-config"; import { getQueryFromUrl } from "@rilldata/web-common/features/chat/core/citation-url-utils.ts"; export async function load({ url }) { @@ -10,6 +7,6 @@ export async function load({ url }) { await openQuery({ query, - runtime: { host: LOCAL_HOST, instanceId: LOCAL_INSTANCE_ID }, + client: getLocalRuntimeClient(), }); } From 7fa13bd02d0ad3a8eea52a2889b6cd160c0fd399 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Fri, 27 Feb 2026 11:47:06 +0300 Subject: [PATCH 46/78] fix: update web-local for v2 RPC compatibility - Harden error handling in files/[...file]/+page.ts for ConnectError shape - Set `fileArtifacts` client early in root layout so child load functions can access it before components render - Update Playwright test assertions to match ConnectRPC endpoint URLs instead of old REST `/v1/...` patterns --- .../(workspace)/files/[...file]/+page.ts | 6 +++-- web-local/src/routes/+layout.ts | 5 ++++ web-local/tests/file-explorer.spec.ts | 6 +++-- web-local/tests/utils/commonHelpers.ts | 24 ++++++------------- web-local/tests/utils/sourceHelpers.ts | 4 +++- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.ts b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.ts index b181dac62c3..6c2e5fd0650 100644 --- a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.ts +++ b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.ts @@ -34,12 +34,14 @@ export const load = async ({ params: { file }, parent }) => { fileArtifact, }; } catch (e) { - const statusCode = e.response.status; + // ConnectError has .code/.message; Axios errors have .response.status + const statusCode = e?.response?.status ?? 500; + const message = e?.response?.data?.message ?? e?.message ?? "Unknown error"; if (statusCode === 404 || statusCode === 400) { throw error(404, "File not found: " + path); } else { - throw error(e.response.status, e.response.data?.message); + throw error(statusCode, message); } } }; diff --git a/web-local/src/routes/+layout.ts b/web-local/src/routes/+layout.ts index fa88c5d725b..58023fb7ad1 100644 --- a/web-local/src/routes/+layout.ts +++ b/web-local/src/routes/+layout.ts @@ -7,6 +7,7 @@ import { runtimeServiceListFiles, type V1ListFilesResponse, } from "@rilldata/web-common/runtime-client/index.js"; +import { fileArtifacts } from "@rilldata/web-common/features/entity-management/file-artifacts.js"; import { handleUninitializedProject } from "@rilldata/web-common/features/welcome/is-project-initialized.js"; import { getLocalRuntimeClient } from "../lib/local-runtime-config"; import { Settings } from "luxon"; @@ -18,6 +19,10 @@ export async function load({ url, depends, untrack }) { const client = getLocalRuntimeClient(); + // Set the client on fileArtifacts early so child page load functions + // (e.g., files/[...file]/+page.ts) can access it before components render. + fileArtifacts.setClient(client); + const files = await queryClient.fetchQuery({ queryKey: getRuntimeServiceListFilesQueryKey(client.instanceId, {}), queryFn: ({ signal }) => { diff --git a/web-local/tests/file-explorer.spec.ts b/web-local/tests/file-explorer.spec.ts index 4bfa62a7260..d5c471ce3a1 100644 --- a/web-local/tests/file-explorer.spec.ts +++ b/web-local/tests/file-explorer.spec.ts @@ -98,8 +98,10 @@ test.describe("File Explorer", () => { await page.getByLabel("my-directory actions menu").click(); await page.getByRole("menuitem", { name: "New folder" }).hover(); const [createDirectoryResponse, getFilesResponse] = await Promise.all([ - page.waitForResponse("**/v1/instances/default/files/dir"), - page.waitForResponse("**/v1/instances/default/files"), + page.waitForResponse( + "**/rill.runtime.v1.RuntimeService/CreateDirectory", + ), + page.waitForResponse("**/rill.runtime.v1.RuntimeService/ListFiles"), page.getByRole("menuitem", { name: "New folder" }).click(), ]); diff --git a/web-local/tests/utils/commonHelpers.ts b/web-local/tests/utils/commonHelpers.ts index da28a2e7cd8..1e3daa7b3d1 100644 --- a/web-local/tests/utils/commonHelpers.ts +++ b/web-local/tests/utils/commonHelpers.ts @@ -24,20 +24,14 @@ export async function clickMenuButton( export async function waitForProfiling( page: Page, - name: string, + _name: string, columns: Array, ) { return Promise.all( [ - page.waitForResponse( - new RegExp(`/queries/columns-profile/tables/${name}`), - ), - columns.map((column) => - page.waitForResponse( - new RegExp( - `/queries/null-count/tables/${name}\\?connector=duckdb&database=&databaseSchema=&columnName=${column}`, - ), - ), + page.waitForResponse("**/rill.runtime.v1.QueryService/TableColumns"), + columns.map(() => + page.waitForResponse("**/rill.runtime.v1.QueryService/ColumnNullCount"), ), ].flat(), ); @@ -99,7 +93,7 @@ export async function renameFileUsingMenu( // type new fileName and submit await page.locator("#rill-portal input").fill(toFileName); await Promise.all([ - page.waitForResponse(/rename/), + page.waitForResponse("**/rill.runtime.v1.RuntimeService/RenameFile"), clickModalButton(page, "Change Name"), ]); } @@ -117,14 +111,10 @@ export async function renameFileUsingTitle( } export async function deleteFile(page: Page, filePath: string) { - // open context menu and click rename + // open context menu and click delete await openFileNavEntryContextMenu(page, filePath); await Promise.all([ - page.waitForResponse( - (response) => - response.url().includes(encodeURIComponent(filePath)) && - response.request().method() === "DELETE", - ), + page.waitForResponse("**/rill.runtime.v1.RuntimeService/DeleteFile"), clickMenuButton(page, "Delete"), ]); } diff --git a/web-local/tests/utils/sourceHelpers.ts b/web-local/tests/utils/sourceHelpers.ts index 2aca6cc5862..e31b45b901f 100644 --- a/web-local/tests/utils/sourceHelpers.ts +++ b/web-local/tests/utils/sourceHelpers.ts @@ -42,7 +42,9 @@ export async function uploadFile( const fileUploadPromise = fileChooser.setFiles([ path.join(TestDataPath, file), ]); - const fileRespWaitPromise = page.waitForResponse(/files\/entry/); + const fileRespWaitPromise = page.waitForResponse( + "**/rill.runtime.v1.RuntimeService/PutFile", + ); // TODO: infer duplicate if (isDuplicate) { From 0a02a6acd40b043f8915c299b96ffb9c424c80f5 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Fri, 27 Feb 2026 12:21:42 +0300 Subject: [PATCH 47/78] fix: handle ConnectRPC errors in REST-style error checks The ConnectRPC migration changed error objects from Axios-style (`error.response.status`) to ConnectError (`error.code`). Several error handlers still checked the old format, causing silent failures: - `connectors/selectors.ts`: DuckDB connector 404 fallback never fired, leaving `isModelingSupported` false and disabling "Add Model" + source connectors in the Add Data modal - `actions.ts`: resource reconciliation polling couldn't detect 404s - `pivot-utils.ts`: error status extraction returned null for all errors - `file-and-resource-watcher.ts`: `invalidateAll` matched old query hash format that no longer exists Adds `isNotFoundError()` helper that handles both ConnectRPC and REST error shapes. --- .../src/features/connectors/selectors.ts | 3 ++- .../features/dashboards/pivot/pivot-utils.ts | 20 ++++++++++++++---- .../src/features/entity-management/actions.ts | 7 ++++--- .../file-and-resource-watcher.ts | 14 +++++++++++-- web-common/src/lib/errors.ts | 21 +++++++++++++++++++ 5 files changed, 55 insertions(+), 10 deletions(-) diff --git a/web-common/src/features/connectors/selectors.ts b/web-common/src/features/connectors/selectors.ts index 1f77077685b..b61ba328002 100644 --- a/web-common/src/features/connectors/selectors.ts +++ b/web-common/src/features/connectors/selectors.ts @@ -6,6 +6,7 @@ import { type V1GetResourceResponse, } from "../../runtime-client"; import type { RuntimeClient } from "../../runtime-client/v2"; +import { isNotFoundError } from "../../lib/errors"; import { createRuntimeServiceGetInstance, getRuntimeServiceGetResourceQueryKey, @@ -35,7 +36,7 @@ function createModelingSupportQueryOptions( }); } catch (error) { // Handle legacy DuckDB projects where no explicit connector resource exists - if (connectorName === "duckdb" && error?.response?.status === 404) { + if (connectorName === "duckdb" && isNotFoundError(error)) { // Return a synthetic DuckDB connector return { resource: { diff --git a/web-common/src/features/dashboards/pivot/pivot-utils.ts b/web-common/src/features/dashboards/pivot/pivot-utils.ts index 849a22483fb..2f2224221ea 100644 --- a/web-common/src/features/dashboards/pivot/pivot-utils.ts +++ b/web-common/src/features/dashboards/pivot/pivot-utils.ts @@ -17,7 +17,10 @@ import type { V1MetricsViewAggregationResponse, V1MetricsViewAggregationSort, } from "@rilldata/web-common/runtime-client"; -import type { HTTPError } from "@rilldata/web-common/lib/errors"; +import { + connectCodeToHTTPStatus, + type HTTPError, +} from "@rilldata/web-common/lib/errors"; import type { QueryObserverResult } from "@tanstack/svelte-query"; import type { Row } from "@tanstack/svelte-table"; import { SHOW_MORE_BUTTON } from "./pivot-constants"; @@ -642,10 +645,19 @@ export function getFiltersForCell( export function getErrorFromResponse( queryResult: QueryObserverResult, ): PivotQueryError { + const err = queryResult?.error; + // ConnectError has .code (gRPC status) and .rawMessage; Axios has .response.status + const statusCode = + (err as unknown as { code?: number })?.code !== undefined + ? connectCodeToHTTPStatus((err as unknown as { code: number }).code) + : err?.response?.status || null; + const message = + (err as unknown as { rawMessage?: string })?.rawMessage ?? + err?.response?.data?.message; return { - statusCode: queryResult?.error?.response?.status || null, - message: queryResult?.error?.response?.data?.message, - traceId: queryResult?.error?.traceId, + statusCode, + message, + traceId: err?.traceId, }; } diff --git a/web-common/src/features/entity-management/actions.ts b/web-common/src/features/entity-management/actions.ts index c5c61ea2c1b..690ec39f586 100644 --- a/web-common/src/features/entity-management/actions.ts +++ b/web-common/src/features/entity-management/actions.ts @@ -6,6 +6,7 @@ import { } from "@rilldata/web-common/features/entity-management/file-path-utils"; import { fileIsMainEntity } from "@rilldata/web-common/features/entity-management/file-selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; +import { isNotFoundError } from "@rilldata/web-common/lib/errors"; import { runtimeServiceDeleteFile, runtimeServiceGetFile, @@ -78,7 +79,7 @@ export async function waitForResourceReconciliation( continue; } catch (error) { // Resource not found could mean it was deleted due to reconcile failure - if (error?.status === 404 || error?.response?.status === 404) { + if (isNotFoundError(error)) { if (attempt >= 3) { // After 6 seconds, assume reconcile failure throw new Error( @@ -168,7 +169,7 @@ export async function renameFileArtifact( } } catch (err) { eventBus.emit("notification", { - message: `Failed to rename ${fromName} to ${toName}: ${extractMessage(err.response?.data?.message ?? err.message)}`, + message: `Failed to rename ${fromName} to ${toName}: ${extractMessage(err.rawMessage ?? err.response?.data?.message ?? err.message)}`, }); } } @@ -212,7 +213,7 @@ export async function deleteFileArtifact( client.requestQueue.removeByName(name); } catch (err) { eventBus.emit("notification", { - message: `Failed to delete ${name}: ${extractMessage(err.response?.data?.message ?? err.message)}`, + message: `Failed to delete ${name}: ${extractMessage(err.rawMessage ?? err.response?.data?.message ?? err.message)}`, }); } } diff --git a/web-common/src/features/entity-management/file-and-resource-watcher.ts b/web-common/src/features/entity-management/file-and-resource-watcher.ts index 96bb03f5426..0e277095f07 100644 --- a/web-common/src/features/entity-management/file-and-resource-watcher.ts +++ b/web-common/src/features/entity-management/file-and-resource-watcher.ts @@ -152,8 +152,18 @@ export class FileAndResourceWatcher { private invalidateAll() { // Invalidate all runtime queries on reconnect return queryClient.invalidateQueries({ - predicate: (query) => - query.queryHash.includes(`v1/instances/${this.instanceId}`), + predicate: (query) => { + const key = query.queryKey; + if (key.length >= 3 && key[2] === this.instanceId) { + const svc = key[0]; + return ( + svc === "QueryService" || + svc === "RuntimeService" || + svc === "ConnectorService" + ); + } + return false; + }, }); } diff --git a/web-common/src/lib/errors.ts b/web-common/src/lib/errors.ts index a76f81f7abb..84cbbc311e6 100644 --- a/web-common/src/lib/errors.ts +++ b/web-common/src/lib/errors.ts @@ -23,6 +23,27 @@ export function isHTTPError(error: unknown): error is HTTPError { ); } +/** + * Returns true if the error is a ConnectRPC NotFound error (code 5). + * Works for any error shape: ConnectError, Axios/REST, or plain objects. + */ +export function isNotFoundError(error: unknown): boolean { + if (!error || typeof error !== "object") return false; + const e = error as Record; + // ConnectError: { code: 5 } + if (e.code === 5) return true; + // Axios/REST: { response: { status: 404 } } or { status: 404 } + if (e.status === 404) return true; + const resp = e.response; + if ( + resp && + typeof resp === "object" && + (resp as Record).status === 404 + ) + return true; + return false; +} + /** * Maps a ConnectRPC error code to an HTTP status code. * See https://connectrpc.com/docs/protocol#error-codes From 12fec358833f776219080f3fe2aab0e9cdbdaf8a Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Fri, 27 Feb 2026 12:46:08 +0300 Subject: [PATCH 48/78] fix: replace REST-style error handling with ConnectRPC-compatible utilities After migrating to ConnectRPC, error objects changed shape: `error.response.status` became `error.code` (gRPC codes) and `error.response.data.message` became `error.rawMessage`. ~20 files still assumed Axios/REST error shapes, causing silent failures in error display, 404 detection, and telemetry. Add `extractErrorMessage()`, `extractErrorStatusCode()`, and `isErrorCode()` utilities to `errors.ts` that handle both ConnectRPC and legacy error shapes. Replace all `isHTTPError()` + property access patterns and direct `.response?.data?.message` patterns across web-common, web-local, and web-admin. --- .../alerts/metadata/AlertMetadata.svelte | 6 +- .../src/features/embeds/ExploreEmbed.svelte | 5 +- .../metadata/ReportMetadata.svelte | 6 +- web-admin/src/routes/+layout.svelte | 8 +-- .../explore/[dashboard]/+page.svelte | 7 +- .../canvas/ai-generation/generateCanvas.ts | 7 +- .../components/markdown/Markdown.svelte | 8 +-- .../src/features/chat/core/conversation.ts | 11 ++- .../chat/share/ShareChatPopover.svelte | 6 +- .../src/features/connectors/code-utils.ts | 3 +- .../connectors/explorer/DatabaseEntry.svelte | 7 +- .../explorer/DatabaseExplorer.svelte | 7 +- .../connectors/explorer/TableSchema.svelte | 6 +- .../dashboards/rows-viewer/RowsViewer.svelte | 7 +- .../loaders/DashboardStateManager.svelte | 13 ++-- .../dashboards/workspace/Dashboard.svelte | 13 ++-- .../features/entity-management/ui-actions.ts | 3 +- .../metrics-views/MetricsInspector.svelte | 14 +--- .../ai-generation/generateMetricsView.ts | 9 +-- .../src/features/sources/modal/utils.ts | 19 +++++- web-common/src/features/templates/utils.ts | 16 ++--- web-common/src/lib/errors.ts | 68 +++++++++++++++++++ web-common/src/metrics/ErrorEventHandler.ts | 33 ++++----- .../routes/(viz)/explore/[name]/+page.svelte | 17 ++--- web-local/src/routes/+layout.svelte | 7 +- 25 files changed, 172 insertions(+), 134 deletions(-) diff --git a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte index d09b830c944..ab43a19a811 100644 --- a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte +++ b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte @@ -1,6 +1,6 @@ diff --git a/web-common/src/features/chat/core/conversation.ts b/web-common/src/features/chat/core/conversation.ts index c3fb0dd1ada..6b688f566e8 100644 --- a/web-common/src/features/chat/core/conversation.ts +++ b/web-common/src/features/chat/core/conversation.ts @@ -25,7 +25,7 @@ import { type Readable, type Writable, } from "svelte/store"; -import type { HTTPError } from "../../../lib/errors"; +import { extractErrorMessage } from "../../../lib/errors"; import type { FeedbackCategory, FeedbackSentiment, @@ -152,11 +152,10 @@ export class Conversation { * Get a reactive store for conversation query errors */ public getConversationQueryError(): Readable { - return derived( - this.getConversationQuery(), - ($getConversationQuery) => - ($getConversationQuery.error as HTTPError)?.response?.data?.message ?? - null, + return derived(this.getConversationQuery(), ($getConversationQuery) => + $getConversationQuery.error + ? extractErrorMessage($getConversationQuery.error) + : null, ); } diff --git a/web-common/src/features/chat/share/ShareChatPopover.svelte b/web-common/src/features/chat/share/ShareChatPopover.svelte index 15beb79d08a..58303a32227 100644 --- a/web-common/src/features/chat/share/ShareChatPopover.svelte +++ b/web-common/src/features/chat/share/ShareChatPopover.svelte @@ -7,7 +7,7 @@ PopoverTrigger, } from "@rilldata/web-common/components/popover"; import { createRuntimeServiceShareConversationMutation } from "@rilldata/web-common/runtime-client"; - import { isHTTPError } from "@rilldata/web-common/lib/errors"; + import { extractErrorMessage } from "@rilldata/web-common/lib/errors"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; import { Check, Link, Share } from "lucide-svelte"; @@ -55,9 +55,7 @@ }, COPIED_FEEDBACK_DURATION_MS); } catch (error) { console.error("[ShareChatPopover] Share failed:", error); - shareError = isHTTPError(error) - ? error.response.data.message - : "Failed to create share link"; + shareError = extractErrorMessage(error); } finally { isSharing = false; } diff --git a/web-common/src/features/connectors/code-utils.ts b/web-common/src/features/connectors/code-utils.ts index 04dd91ab613..d77abeaa879 100644 --- a/web-common/src/features/connectors/code-utils.ts +++ b/web-common/src/features/connectors/code-utils.ts @@ -8,6 +8,7 @@ import { import type { RuntimeClient } from "../../runtime-client/v2"; import { fileArtifacts } from "@rilldata/web-common/features/entity-management/file-artifacts"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; +import { extractErrorMessage } from "@rilldata/web-common/lib/errors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { getName, @@ -286,7 +287,7 @@ export async function updateDotEnvWithSecrets( originalBlob = blob; // Keep original for conflict detection } catch (error) { // Handle the case where the .env file does not exist - if (error?.response?.data?.message?.includes("no such file")) { + if (extractErrorMessage(error).includes("no such file")) { blob = ""; originalBlob = ""; } else { diff --git a/web-common/src/features/connectors/explorer/DatabaseEntry.svelte b/web-common/src/features/connectors/explorer/DatabaseEntry.svelte index 01e7b9ce33e..f390b85833a 100644 --- a/web-common/src/features/connectors/explorer/DatabaseEntry.svelte +++ b/web-common/src/features/connectors/explorer/DatabaseEntry.svelte @@ -2,7 +2,7 @@ import { Database } from "lucide-svelte"; import { slide } from "svelte/transition"; import CaretDownIcon from "../../../components/icons/CaretDownIcon.svelte"; - import { isHTTPError } from "../../../lib/errors"; + import { extractErrorMessage } from "../../../lib/errors"; import { LIST_SLIDE_DURATION as duration } from "../../../layout/config"; import type { V1AnalyzedConnector } from "../../../runtime-client"; import { useRuntimeClient } from "../../../runtime-client/v2"; @@ -52,10 +52,7 @@
    {#if expanded} {#if error} - Error: {error.message || - (isHTTPError(error) ? error.response.data.message : "")} + Error: {extractErrorMessage(error)} {:else if isLoading} Loading schemas... {:else if data} diff --git a/web-common/src/features/connectors/explorer/DatabaseExplorer.svelte b/web-common/src/features/connectors/explorer/DatabaseExplorer.svelte index 0f2fbbf7ad4..5a8fc730375 100644 --- a/web-common/src/features/connectors/explorer/DatabaseExplorer.svelte +++ b/web-common/src/features/connectors/explorer/DatabaseExplorer.svelte @@ -1,6 +1,6 @@ diff --git a/web-admin/src/routes/[organization]/[project]/+layout.svelte b/web-admin/src/routes/[organization]/[project]/+layout.svelte index d87a4b9daee..4fab1a67bec 100644 --- a/web-admin/src/routes/[organization]/[project]/+layout.svelte +++ b/web-admin/src/routes/[organization]/[project]/+layout.svelte @@ -8,7 +8,8 @@ > = { gcTime: Math.min(RUNTIME_ACCESS_TOKEN_DEFAULT_TTL, 1000 * 60 * 5), // Make sure we don't keep a stale JWT in the cache refetchInterval: (query) => { - switch (query.state.data?.deployment?.status) { + const status = query.state.data?.deployment?.status; + switch (status) { case V1DeploymentStatus.DEPLOYMENT_STATUS_PENDING: case V1DeploymentStatus.DEPLOYMENT_STATUS_UPDATING: return PollTimeWhenProjectDeploymentPending; @@ -20,6 +21,7 @@ return false; } }, + refetchIntervalInBackground: true, // Keep polling while the tab is hidden (e.g. deploy loader) refetchOnMount: true, refetchOnReconnect: true, refetchOnWindowFocus: true, diff --git a/web-admin/tests/setup/setup.ts b/web-admin/tests/setup/setup.ts index ce2ddd7dd07..c598f633588 100644 --- a/web-admin/tests/setup/setup.ts +++ b/web-admin/tests/setup/setup.ts @@ -202,6 +202,7 @@ setup.describe("global setup", () => { // Navigate to the project URL and expect to see the successful deployment const url = match[0]; + await adminPage.goto(url); await expect( adminPage.getByRole("link", { name: RILL_ORG_NAME }), @@ -212,7 +213,8 @@ setup.describe("global setup", () => { // Expect to land on the project home page await adminPage.waitForURL(`/${RILL_ORG_NAME}/${RILL_PROJECT_NAME}`); - // Temporary fix to wait for the project to be ready. + // Poll with page reloads until the deployment is ready and the project title appears. + // Each reload triggers a fresh GetProject API call via the SvelteKit load function. // TODO: add a refetch to the project API await expect .poll( From a5ff1dc15c22ec9f28af917bc6410b7ed080c2f5 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Mon, 2 Mar 2026 13:09:46 +0300 Subject: [PATCH 52/78] fix: `Heap.delete` must try `moveUp` before `moveDown` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When deleting an item, the last element is moved into the vacated position. If the replacement has higher priority than the parent, it needs to bubble up — but only `moveDown` was called. This matches the pattern already used by `updateItem`. --- web-common/src/runtime-client/v2/heap.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web-common/src/runtime-client/v2/heap.ts b/web-common/src/runtime-client/v2/heap.ts index 3780f3f019d..c1ff7c261c5 100644 --- a/web-common/src/runtime-client/v2/heap.ts +++ b/web-common/src/runtime-client/v2/heap.ts @@ -58,7 +58,9 @@ export class Heap { this.array[idx] = this.array.pop()!; this.array[idx].index = idx; this.setIndex(this.array[idx], idx); - this.moveDown(idx); + if (!this.moveUp(idx)) { + this.moveDown(idx); + } } else { this.array.pop(); } From c2445464ce45a6dbf039591e9f59f08416fb00de Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Mon, 2 Mar 2026 13:10:24 +0300 Subject: [PATCH 53/78] fix: `removeByName` must reject pending promises before deleting When removing all queued requests for a resource, the pending promises were left unresolved. Callers awaiting those requests would hang forever. Now iterates the inner queryHeap and rejects each entry with an AbortError before removing the name entry from the outer heap. --- web-common/src/runtime-client/v2/request-queue.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/web-common/src/runtime-client/v2/request-queue.ts b/web-common/src/runtime-client/v2/request-queue.ts index 801c3c06118..604b07d14e8 100644 --- a/web-common/src/runtime-client/v2/request-queue.ts +++ b/web-common/src/runtime-client/v2/request-queue.ts @@ -167,7 +167,13 @@ export class RequestQueue { /** Remove all queued requests for a resource (entity deleted/renamed). */ removeByName(resourceName: string): void { - this.nameHeap.delete(undefined, resourceName); + const nameEntry = this.nameHeap.get(resourceName); + if (!nameEntry) return; + while (!nameEntry.queryHeap.empty()) { + const entry = nameEntry.queryHeap.pop()!; + entry.reject?.(new DOMException("Request cancelled", "AbortError")); + } + this.nameHeap.delete(nameEntry); } /** Deprioritize a resource (user navigated away). */ From d703a0754ec495d129bc72d45b07f0a7929a6218 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Mon, 2 Mar 2026 13:12:20 +0300 Subject: [PATCH 54/78] refactor: use `async/await` in generated base functions Converts the generated raw RPC functions from `.then()` chains to `async/await` for better stack traces and readability. --- web-common/scripts/generate-query-hooks.ts | 14 +- .../v2/gen/connector-service.ts | 206 ++- .../runtime-client/v2/gen/query-service.ts | 914 +++++------ .../runtime-client/v2/gen/runtime-service.ts | 1335 +++++++---------- 4 files changed, 1067 insertions(+), 1402 deletions(-) diff --git a/web-common/scripts/generate-query-hooks.ts b/web-common/scripts/generate-query-hooks.ts index be1e95c5879..455f46dc035 100644 --- a/web-common/scripts/generate-query-hooks.ts +++ b/web-common/scripts/generate-query-hooks.ts @@ -289,15 +289,16 @@ function generateServiceFile(service: ServiceDef): string { `/**`, ` * Raw RPC call: ${serviceName}.${m.methodName}`, ` */`, - `export function ${fullName}(`, + `export async function ${fullName}(`, ` client: RuntimeClient,`, ` request: ${requestType},`, ` options?: { signal?: AbortSignal },`, `): Promise<${responseType}> {`, - ` return client.${serviceClientProp}.${m.methodKey}(`, + ` const r = await client.${serviceClientProp}.${m.methodKey}(`, ` ${m.inputType}.fromJson(stripUndefined(${requestSpread}) as unknown as JsonValue),`, ` { signal: options?.signal },`, - ` ).then(r => r.toJson({ emitDefaultValues: true }) as unknown as ${responseType});`, + ` );`, + ` return r.toJson({ emitDefaultValues: true }) as unknown as ${responseType};`, `}`, ``, ); @@ -375,13 +376,14 @@ function generateServiceFile(service: ServiceDef): string { `/**`, ` * Raw RPC call (mutation): ${serviceName}.${m.methodName}`, ` */`, - `export function ${fullName}(`, + `export async function ${fullName}(`, ` client: RuntimeClient,`, ` request: ${requestType},`, `): Promise<${responseType}> {`, - ` return client.${serviceClientProp}.${m.methodKey}(`, + ` const r = await client.${serviceClientProp}.${m.methodKey}(`, ` ${m.inputType}.fromJson(stripUndefined(${requestSpread}) as unknown as JsonValue),`, - ` ).then(r => r.toJson({ emitDefaultValues: true }) as unknown as ${responseType});`, + ` );`, + ` return r.toJson({ emitDefaultValues: true }) as unknown as ${responseType};`, `}`, ``, ); diff --git a/web-common/src/runtime-client/v2/gen/connector-service.ts b/web-common/src/runtime-client/v2/gen/connector-service.ts index fafdd528f2e..64dbb20b704 100644 --- a/web-common/src/runtime-client/v2/gen/connector-service.ts +++ b/web-common/src/runtime-client/v2/gen/connector-service.ts @@ -56,27 +56,23 @@ function stripUndefined(obj: Record): Record { /** * Raw RPC call: ConnectorService.ListBuckets */ -export function connectorServiceListBuckets( +export async function connectorServiceListBuckets( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .listBuckets( - ListBucketsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListBucketsResponse, - ); + const r = await client.connectorService.listBuckets( + ListBucketsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListBucketsResponse; } export function getConnectorServiceListBucketsQueryKey( @@ -139,27 +135,23 @@ export function createConnectorServiceListBuckets< /** * Raw RPC call: ConnectorService.ListObjects */ -export function connectorServiceListObjects( +export async function connectorServiceListObjects( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .listObjects( - ListObjectsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListObjectsResponse, - ); + const r = await client.connectorService.listObjects( + ListObjectsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListObjectsResponse; } export function getConnectorServiceListObjectsQueryKey( @@ -222,27 +214,23 @@ export function createConnectorServiceListObjects< /** * Raw RPC call: ConnectorService.OLAPListTables */ -export function connectorServiceOLAPListTables( +export async function connectorServiceOLAPListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .oLAPListTables( - OLAPListTablesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1OLAPListTablesResponse, - ); + const r = await client.connectorService.oLAPListTables( + OLAPListTablesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1OLAPListTablesResponse; } export function getConnectorServiceOLAPListTablesQueryKey( @@ -305,27 +293,23 @@ export function createConnectorServiceOLAPListTables< /** * Raw RPC call: ConnectorService.OLAPGetTable */ -export function connectorServiceOLAPGetTable( +export async function connectorServiceOLAPGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .oLAPGetTable( - OLAPGetTableRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1OLAPGetTableResponse, - ); + const r = await client.connectorService.oLAPGetTable( + OLAPGetTableRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1OLAPGetTableResponse; } export function getConnectorServiceOLAPGetTableQueryKey( @@ -388,27 +372,23 @@ export function createConnectorServiceOLAPGetTable< /** * Raw RPC call: ConnectorService.ListDatabaseSchemas */ -export function connectorServiceListDatabaseSchemas( +export async function connectorServiceListDatabaseSchemas( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .listDatabaseSchemas( - ListDatabaseSchemasRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListDatabaseSchemasResponse, - ); + const r = await client.connectorService.listDatabaseSchemas( + ListDatabaseSchemasRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListDatabaseSchemasResponse; } export function getConnectorServiceListDatabaseSchemasQueryKey( @@ -475,27 +455,23 @@ export function createConnectorServiceListDatabaseSchemas< /** * Raw RPC call: ConnectorService.ListTables */ -export function connectorServiceListTables( +export async function connectorServiceListTables( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .listTables( - ListTablesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListTablesResponse, - ); + const r = await client.connectorService.listTables( + ListTablesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListTablesResponse; } export function getConnectorServiceListTablesQueryKey( @@ -551,25 +527,21 @@ export function createConnectorServiceListTables( /** * Raw RPC call: ConnectorService.GetTable */ -export function connectorServiceGetTable( +export async function connectorServiceGetTable( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.connectorService - .getTable( - GetTableRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GetTableResponse, - ); + const r = await client.connectorService.getTable( + GetTableRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1GetTableResponse; } export function getConnectorServiceGetTableQueryKey( diff --git a/web-common/src/runtime-client/v2/gen/query-service.ts b/web-common/src/runtime-client/v2/gen/query-service.ts index 209ca53c250..aca6b729fba 100644 --- a/web-common/src/runtime-client/v2/gen/query-service.ts +++ b/web-common/src/runtime-client/v2/gen/query-service.ts @@ -123,27 +123,23 @@ function stripUndefined(obj: Record): Record { /** * Raw RPC call: QueryService.MetricsViewAggregation */ -export function queryServiceMetricsViewAggregation( +export async function queryServiceMetricsViewAggregation( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewAggregation( - MetricsViewAggregationRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewAggregationResponse, - ); + const r = await client.queryService.metricsViewAggregation( + MetricsViewAggregationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewAggregationResponse; } export function getQueryServiceMetricsViewAggregationQueryKey( @@ -211,27 +207,23 @@ export function createQueryServiceMetricsViewAggregation< /** * Raw RPC call: QueryService.MetricsViewToplist */ -export function queryServiceMetricsViewToplist( +export async function queryServiceMetricsViewToplist( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewToplist( - MetricsViewToplistRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewToplistResponse, - ); + const r = await client.queryService.metricsViewToplist( + MetricsViewToplistRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewToplistResponse; } export function getQueryServiceMetricsViewToplistQueryKey( @@ -298,27 +290,23 @@ export function createQueryServiceMetricsViewToplist< /** * Raw RPC call: QueryService.MetricsViewComparison */ -export function queryServiceMetricsViewComparison( +export async function queryServiceMetricsViewComparison( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewComparison( - MetricsViewComparisonRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewComparisonResponse, - ); + const r = await client.queryService.metricsViewComparison( + MetricsViewComparisonRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewComparisonResponse; } export function getQueryServiceMetricsViewComparisonQueryKey( @@ -386,27 +374,23 @@ export function createQueryServiceMetricsViewComparison< /** * Raw RPC call: QueryService.MetricsViewTimeSeries */ -export function queryServiceMetricsViewTimeSeries( +export async function queryServiceMetricsViewTimeSeries( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewTimeSeries( - MetricsViewTimeSeriesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewTimeSeriesResponse, - ); + const r = await client.queryService.metricsViewTimeSeries( + MetricsViewTimeSeriesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTimeSeriesResponse; } export function getQueryServiceMetricsViewTimeSeriesQueryKey( @@ -474,27 +458,23 @@ export function createQueryServiceMetricsViewTimeSeries< /** * Raw RPC call: QueryService.MetricsViewTotals */ -export function queryServiceMetricsViewTotals( +export async function queryServiceMetricsViewTotals( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewTotals( - MetricsViewTotalsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewTotalsResponse, - ); + const r = await client.queryService.metricsViewTotals( + MetricsViewTotalsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTotalsResponse; } export function getQueryServiceMetricsViewTotalsQueryKey( @@ -561,27 +541,23 @@ export function createQueryServiceMetricsViewTotals< /** * Raw RPC call: QueryService.MetricsViewRows */ -export function queryServiceMetricsViewRows( +export async function queryServiceMetricsViewRows( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewRows( - MetricsViewRowsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewRowsResponse, - ); + const r = await client.queryService.metricsViewRows( + MetricsViewRowsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewRowsResponse; } export function getQueryServiceMetricsViewRowsQueryKey( @@ -648,27 +624,23 @@ export function createQueryServiceMetricsViewRows< /** * Raw RPC call: QueryService.MetricsViewTimeRange */ -export function queryServiceMetricsViewTimeRange( +export async function queryServiceMetricsViewTimeRange( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewTimeRange( - MetricsViewTimeRangeRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewTimeRangeResponse, - ); + const r = await client.queryService.metricsViewTimeRange( + MetricsViewTimeRangeRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTimeRangeResponse; } export function getQueryServiceMetricsViewTimeRangeQueryKey( @@ -735,27 +707,23 @@ export function createQueryServiceMetricsViewTimeRange< /** * Raw RPC call: QueryService.MetricsViewSchema */ -export function queryServiceMetricsViewSchema( +export async function queryServiceMetricsViewSchema( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewSchema( - MetricsViewSchemaRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewSchemaResponse, - ); + const r = await client.queryService.metricsViewSchema( + MetricsViewSchemaRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewSchemaResponse; } export function getQueryServiceMetricsViewSchemaQueryKey( @@ -822,27 +790,23 @@ export function createQueryServiceMetricsViewSchema< /** * Raw RPC call: QueryService.MetricsViewSearch */ -export function queryServiceMetricsViewSearch( +export async function queryServiceMetricsViewSearch( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewSearch( - MetricsViewSearchRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewSearchResponse, - ); + const r = await client.queryService.metricsViewSearch( + MetricsViewSearchRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewSearchResponse; } export function getQueryServiceMetricsViewSearchQueryKey( @@ -909,27 +873,23 @@ export function createQueryServiceMetricsViewSearch< /** * Raw RPC call: QueryService.MetricsViewTimeRanges */ -export function queryServiceMetricsViewTimeRanges( +export async function queryServiceMetricsViewTimeRanges( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewTimeRanges( - MetricsViewTimeRangesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewTimeRangesResponse, - ); + const r = await client.queryService.metricsViewTimeRanges( + MetricsViewTimeRangesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewTimeRangesResponse; } export function getQueryServiceMetricsViewTimeRangesQueryKey( @@ -997,27 +957,23 @@ export function createQueryServiceMetricsViewTimeRanges< /** * Raw RPC call: QueryService.MetricsViewAnnotations */ -export function queryServiceMetricsViewAnnotations( +export async function queryServiceMetricsViewAnnotations( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .metricsViewAnnotations( - MetricsViewAnnotationsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1MetricsViewAnnotationsResponse, - ); + const r = await client.queryService.metricsViewAnnotations( + MetricsViewAnnotationsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1MetricsViewAnnotationsResponse; } export function getQueryServiceMetricsViewAnnotationsQueryKey( @@ -1085,7 +1041,7 @@ export function createQueryServiceMetricsViewAnnotations< /** * Raw RPC call: QueryService.ConvertExpressionToMetricsSQL */ -export function queryServiceConvertExpressionToMetricsSQL( +export async function queryServiceConvertExpressionToMetricsSQL( client: RuntimeClient, request: Omit< PartialMessage, @@ -1093,22 +1049,18 @@ export function queryServiceConvertExpressionToMetricsSQL( >, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .convertExpressionToMetricsSQL( - ConvertExpressionToMetricsSQLRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ConvertExpressionToMetricsSQLResponse, - ); + const r = await client.queryService.convertExpressionToMetricsSQL( + ConvertExpressionToMetricsSQLRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ConvertExpressionToMetricsSQLResponse; } export function getQueryServiceConvertExpressionToMetricsSQLQueryKey( @@ -1187,27 +1139,23 @@ export function createQueryServiceConvertExpressionToMetricsSQL< /** * Raw RPC call: QueryService.ResolveCanvas */ -export function queryServiceResolveCanvas( +export async function queryServiceResolveCanvas( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .resolveCanvas( - ResolveCanvasRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ResolveCanvasResponse, - ); + const r = await client.queryService.resolveCanvas( + ResolveCanvasRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ResolveCanvasResponse; } export function getQueryServiceResolveCanvasQueryKey( @@ -1265,27 +1213,23 @@ export function createQueryServiceResolveCanvas< /** * Raw RPC call: QueryService.ResolveComponent */ -export function queryServiceResolveComponent( +export async function queryServiceResolveComponent( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .resolveComponent( - ResolveComponentRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ResolveComponentResponse, - ); + const r = await client.queryService.resolveComponent( + ResolveComponentRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ResolveComponentResponse; } export function getQueryServiceResolveComponentQueryKey( @@ -1352,27 +1296,23 @@ export function createQueryServiceResolveComponent< /** * Raw RPC call: QueryService.ResolveTemplatedString */ -export function queryServiceResolveTemplatedString( +export async function queryServiceResolveTemplatedString( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .resolveTemplatedString( - ResolveTemplatedStringRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ResolveTemplatedStringResponse, - ); + const r = await client.queryService.resolveTemplatedString( + ResolveTemplatedStringRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ResolveTemplatedStringResponse; } export function getQueryServiceResolveTemplatedStringQueryKey( @@ -1440,27 +1380,23 @@ export function createQueryServiceResolveTemplatedString< /** * Raw RPC call: QueryService.ColumnRollupInterval */ -export function queryServiceColumnRollupInterval( +export async function queryServiceColumnRollupInterval( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnRollupInterval( - ColumnRollupIntervalRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnRollupIntervalResponse, - ); + const r = await client.queryService.columnRollupInterval( + ColumnRollupIntervalRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnRollupIntervalResponse; } export function getQueryServiceColumnRollupIntervalQueryKey( @@ -1527,27 +1463,23 @@ export function createQueryServiceColumnRollupInterval< /** * Raw RPC call: QueryService.ColumnTopK */ -export function queryServiceColumnTopK( +export async function queryServiceColumnTopK( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnTopK( - ColumnTopKRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnTopKResponse, - ); + const r = await client.queryService.columnTopK( + ColumnTopKRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTopKResponse; } export function getQueryServiceColumnTopKQueryKey( @@ -1603,27 +1535,23 @@ export function createQueryServiceColumnTopK( /** * Raw RPC call: QueryService.ColumnNullCount */ -export function queryServiceColumnNullCount( +export async function queryServiceColumnNullCount( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnNullCount( - ColumnNullCountRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnNullCountResponse, - ); + const r = await client.queryService.columnNullCount( + ColumnNullCountRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnNullCountResponse; } export function getQueryServiceColumnNullCountQueryKey( @@ -1690,27 +1618,23 @@ export function createQueryServiceColumnNullCount< /** * Raw RPC call: QueryService.ColumnDescriptiveStatistics */ -export function queryServiceColumnDescriptiveStatistics( +export async function queryServiceColumnDescriptiveStatistics( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnDescriptiveStatistics( - ColumnDescriptiveStatisticsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnDescriptiveStatisticsResponse, - ); + const r = await client.queryService.columnDescriptiveStatistics( + ColumnDescriptiveStatisticsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnDescriptiveStatisticsResponse; } export function getQueryServiceColumnDescriptiveStatisticsQueryKey( @@ -1780,27 +1704,23 @@ export function createQueryServiceColumnDescriptiveStatistics< /** * Raw RPC call: QueryService.ColumnTimeGrain */ -export function queryServiceColumnTimeGrain( +export async function queryServiceColumnTimeGrain( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnTimeGrain( - ColumnTimeGrainRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnTimeGrainResponse, - ); + const r = await client.queryService.columnTimeGrain( + ColumnTimeGrainRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTimeGrainResponse; } export function getQueryServiceColumnTimeGrainQueryKey( @@ -1867,27 +1787,23 @@ export function createQueryServiceColumnTimeGrain< /** * Raw RPC call: QueryService.ColumnNumericHistogram */ -export function queryServiceColumnNumericHistogram( +export async function queryServiceColumnNumericHistogram( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnNumericHistogram( - ColumnNumericHistogramRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnNumericHistogramResponse, - ); + const r = await client.queryService.columnNumericHistogram( + ColumnNumericHistogramRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnNumericHistogramResponse; } export function getQueryServiceColumnNumericHistogramQueryKey( @@ -1955,27 +1871,23 @@ export function createQueryServiceColumnNumericHistogram< /** * Raw RPC call: QueryService.ColumnRugHistogram */ -export function queryServiceColumnRugHistogram( +export async function queryServiceColumnRugHistogram( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnRugHistogram( - ColumnRugHistogramRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnRugHistogramResponse, - ); + const r = await client.queryService.columnRugHistogram( + ColumnRugHistogramRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnRugHistogramResponse; } export function getQueryServiceColumnRugHistogramQueryKey( @@ -2042,27 +1954,23 @@ export function createQueryServiceColumnRugHistogram< /** * Raw RPC call: QueryService.ColumnTimeRange */ -export function queryServiceColumnTimeRange( +export async function queryServiceColumnTimeRange( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnTimeRange( - ColumnTimeRangeRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnTimeRangeResponse, - ); + const r = await client.queryService.columnTimeRange( + ColumnTimeRangeRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTimeRangeResponse; } export function getQueryServiceColumnTimeRangeQueryKey( @@ -2129,27 +2037,23 @@ export function createQueryServiceColumnTimeRange< /** * Raw RPC call: QueryService.ColumnCardinality */ -export function queryServiceColumnCardinality( +export async function queryServiceColumnCardinality( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnCardinality( - ColumnCardinalityRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnCardinalityResponse, - ); + const r = await client.queryService.columnCardinality( + ColumnCardinalityRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnCardinalityResponse; } export function getQueryServiceColumnCardinalityQueryKey( @@ -2216,27 +2120,23 @@ export function createQueryServiceColumnCardinality< /** * Raw RPC call: QueryService.ColumnTimeSeries */ -export function queryServiceColumnTimeSeries( +export async function queryServiceColumnTimeSeries( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .columnTimeSeries( - ColumnTimeSeriesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ColumnTimeSeriesResponse, - ); + const r = await client.queryService.columnTimeSeries( + ColumnTimeSeriesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ColumnTimeSeriesResponse; } export function getQueryServiceColumnTimeSeriesQueryKey( @@ -2303,27 +2203,23 @@ export function createQueryServiceColumnTimeSeries< /** * Raw RPC call: QueryService.TableCardinality */ -export function queryServiceTableCardinality( +export async function queryServiceTableCardinality( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .tableCardinality( - TableCardinalityRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1TableCardinalityResponse, - ); + const r = await client.queryService.tableCardinality( + TableCardinalityRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1TableCardinalityResponse; } export function getQueryServiceTableCardinalityQueryKey( @@ -2390,27 +2286,23 @@ export function createQueryServiceTableCardinality< /** * Raw RPC call: QueryService.TableColumns */ -export function queryServiceTableColumns( +export async function queryServiceTableColumns( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .tableColumns( - TableColumnsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1TableColumnsResponse, - ); + const r = await client.queryService.tableColumns( + TableColumnsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1TableColumnsResponse; } export function getQueryServiceTableColumnsQueryKey( @@ -2466,25 +2358,23 @@ export function createQueryServiceTableColumns( /** * Raw RPC call: QueryService.TableRows */ -export function queryServiceTableRows( +export async function queryServiceTableRows( client: RuntimeClient, request: Omit, options?: { signal?: AbortSignal }, ): Promise { - return client.queryService - .tableRows( - TableRowsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1TableRowsResponse, - ); + const r = await client.queryService.tableRows( + TableRowsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1TableRowsResponse; } export function getQueryServiceTableRowsQueryKey( @@ -2537,23 +2427,19 @@ export function createQueryServiceTableRows( /** * Raw RPC call (mutation): QueryService.Query */ -export function queryServiceQuery( +export async function queryServiceQuery( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.queryService - .query( - QueryRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1QueryResponse, - ); + const r = await client.queryService.query( + QueryRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1QueryResponse; } export function getQueryServiceQueryMutationOptions( @@ -2598,23 +2484,19 @@ export function createQueryServiceQueryMutation( /** * Raw RPC call (mutation): QueryService.Export */ -export function queryServiceExport( +export async function queryServiceExport( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.queryService - .export( - ExportRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1ExportResponse, - ); + const r = await client.queryService.export( + ExportRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1ExportResponse; } export function getQueryServiceExportMutationOptions( @@ -2659,25 +2541,21 @@ export function createQueryServiceExportMutation( /** * Raw RPC call (mutation): QueryService.ExportReport */ -export function queryServiceExportReport( +export async function queryServiceExportReport( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.queryService - .exportReport( - ExportReportRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ExportReportResponse, - ); + const r = await client.queryService.exportReport( + ExportReportRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ExportReportResponse; } export function getQueryServiceExportReportMutationOptions( diff --git a/web-common/src/runtime-client/v2/gen/runtime-service.ts b/web-common/src/runtime-client/v2/gen/runtime-service.ts index 5446b9b5a7a..c72778089b7 100644 --- a/web-common/src/runtime-client/v2/gen/runtime-service.ts +++ b/web-common/src/runtime-client/v2/gen/runtime-service.ts @@ -142,19 +142,16 @@ function stripUndefined(obj: Record): Record { /** * Raw RPC call: RuntimeService.Ping */ -export function runtimeServicePing( +export async function runtimeServicePing( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .ping( - PingRequest.fromJson(stripUndefined(request) as unknown as JsonValue), - { signal: options?.signal }, - ) - .then( - (r) => r.toJson({ emitDefaultValues: true }) as unknown as V1PingResponse, - ); + const r = await client.runtimeService.ping( + PingRequest.fromJson(stripUndefined(request) as unknown as JsonValue), + { signal: options?.signal }, + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1PingResponse; } export function getRuntimeServicePingQueryKey( @@ -203,20 +200,16 @@ export function createRuntimeServicePing( /** * Raw RPC call: RuntimeService.Health */ -export function runtimeServiceHealth( +export async function runtimeServiceHealth( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .health( - HealthRequest.fromJson(stripUndefined(request) as unknown as JsonValue), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1HealthResponse, - ); + const r = await client.runtimeService.health( + HealthRequest.fromJson(stripUndefined(request) as unknown as JsonValue), + { signal: options?.signal }, + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1HealthResponse; } export function getRuntimeServiceHealthQueryKey( @@ -265,27 +258,23 @@ export function createRuntimeServiceHealth( /** * Raw RPC call: RuntimeService.InstanceHealth */ -export function runtimeServiceInstanceHealth( +export async function runtimeServiceInstanceHealth( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .instanceHealth( - InstanceHealthRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1InstanceHealthResponse, - ); + const r = await client.runtimeService.instanceHealth( + InstanceHealthRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1InstanceHealthResponse; } export function getRuntimeServiceInstanceHealthQueryKey( @@ -348,24 +337,20 @@ export function createRuntimeServiceInstanceHealth< /** * Raw RPC call: RuntimeService.ListInstances */ -export function runtimeServiceListInstances( +export async function runtimeServiceListInstances( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listInstances( - ListInstancesRequest.fromJson( - stripUndefined(request) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListInstancesResponse, - ); + const r = await client.runtimeService.listInstances( + ListInstancesRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListInstancesResponse; } export function getRuntimeServiceListInstancesQueryKey( @@ -428,27 +413,23 @@ export function createRuntimeServiceListInstances< /** * Raw RPC call: RuntimeService.GetInstance */ -export function runtimeServiceGetInstance( +export async function runtimeServiceGetInstance( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getInstance( - GetInstanceRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GetInstanceResponse, - ); + const r = await client.runtimeService.getInstance( + GetInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetInstanceResponse; } export function getRuntimeServiceGetInstanceQueryKey( @@ -504,25 +485,23 @@ export function createRuntimeServiceGetInstance( /** * Raw RPC call: RuntimeService.ListFiles */ -export function runtimeServiceListFiles( +export async function runtimeServiceListFiles( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listFiles( - ListFilesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1ListFilesResponse, - ); + const r = await client.runtimeService.listFiles( + ListFilesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListFilesResponse; } export function getRuntimeServiceListFilesQueryKey( @@ -578,25 +557,21 @@ export function createRuntimeServiceListFiles( /** * Raw RPC call: RuntimeService.GetFile */ -export function runtimeServiceGetFile( +export async function runtimeServiceGetFile( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getFile( - GetFileRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GetFileResponse, - ); + const r = await client.runtimeService.getFile( + GetFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1GetFileResponse; } export function getRuntimeServiceGetFileQueryKey( @@ -647,24 +622,20 @@ export function createRuntimeServiceGetFile( /** * Raw RPC call: RuntimeService.ListExamples */ -export function runtimeServiceListExamples( +export async function runtimeServiceListExamples( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listExamples( - ListExamplesRequest.fromJson( - stripUndefined(request) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListExamplesResponse, - ); + const r = await client.runtimeService.listExamples( + ListExamplesRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListExamplesResponse; } export function getRuntimeServiceListExamplesQueryKey( @@ -722,27 +693,23 @@ export function createRuntimeServiceListExamples< /** * Raw RPC call: RuntimeService.QueryResolver */ -export function runtimeServiceQueryResolver( +export async function runtimeServiceQueryResolver( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .queryResolver( - QueryResolverRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1QueryResolverResponse, - ); + const r = await client.runtimeService.queryResolver( + QueryResolverRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1QueryResolverResponse; } export function getRuntimeServiceQueryResolverQueryKey( @@ -805,25 +772,21 @@ export function createRuntimeServiceQueryResolver< /** * Raw RPC call: RuntimeService.GetLogs */ -export function runtimeServiceGetLogs( +export async function runtimeServiceGetLogs( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getLogs( - GetLogsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GetLogsResponse, - ); + const r = await client.runtimeService.getLogs( + GetLogsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1GetLogsResponse; } export function getRuntimeServiceGetLogsQueryKey( @@ -874,27 +837,23 @@ export function createRuntimeServiceGetLogs( /** * Raw RPC call: RuntimeService.ListResources */ -export function runtimeServiceListResources( +export async function runtimeServiceListResources( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listResources( - ListResourcesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListResourcesResponse, - ); + const r = await client.runtimeService.listResources( + ListResourcesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListResourcesResponse; } export function getRuntimeServiceListResourcesQueryKey( @@ -957,27 +916,23 @@ export function createRuntimeServiceListResources< /** * Raw RPC call: RuntimeService.GetResource */ -export function runtimeServiceGetResource( +export async function runtimeServiceGetResource( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getResource( - GetResourceRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GetResourceResponse, - ); + const r = await client.runtimeService.getResource( + GetResourceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetResourceResponse; } export function getRuntimeServiceGetResourceQueryKey( @@ -1033,27 +988,23 @@ export function createRuntimeServiceGetResource( /** * Raw RPC call: RuntimeService.GetExplore */ -export function runtimeServiceGetExplore( +export async function runtimeServiceGetExplore( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getExplore( - GetExploreRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GetExploreResponse, - ); + const r = await client.runtimeService.getExplore( + GetExploreRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetExploreResponse; } export function getRuntimeServiceGetExploreQueryKey( @@ -1109,27 +1060,23 @@ export function createRuntimeServiceGetExplore( /** * Raw RPC call: RuntimeService.GetModelPartitions */ -export function runtimeServiceGetModelPartitions( +export async function runtimeServiceGetModelPartitions( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getModelPartitions( - GetModelPartitionsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GetModelPartitionsResponse, - ); + const r = await client.runtimeService.getModelPartitions( + GetModelPartitionsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetModelPartitionsResponse; } export function getRuntimeServiceGetModelPartitionsQueryKey( @@ -1196,24 +1143,20 @@ export function createRuntimeServiceGetModelPartitions< /** * Raw RPC call: RuntimeService.ListConnectorDrivers */ -export function runtimeServiceListConnectorDrivers( +export async function runtimeServiceListConnectorDrivers( client: RuntimeClient, request: PartialMessage, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listConnectorDrivers( - ListConnectorDriversRequest.fromJson( - stripUndefined(request) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListConnectorDriversResponse, - ); + const r = await client.runtimeService.listConnectorDrivers( + ListConnectorDriversRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListConnectorDriversResponse; } export function getRuntimeServiceListConnectorDriversQueryKey( @@ -1280,27 +1223,23 @@ export function createRuntimeServiceListConnectorDrivers< /** * Raw RPC call: RuntimeService.AnalyzeConnectors */ -export function runtimeServiceAnalyzeConnectors( +export async function runtimeServiceAnalyzeConnectors( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .analyzeConnectors( - AnalyzeConnectorsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1AnalyzeConnectorsResponse, - ); + const r = await client.runtimeService.analyzeConnectors( + AnalyzeConnectorsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1AnalyzeConnectorsResponse; } export function getRuntimeServiceAnalyzeConnectorsQueryKey( @@ -1367,27 +1306,23 @@ export function createRuntimeServiceAnalyzeConnectors< /** * Raw RPC call: RuntimeService.ListNotifierConnectors */ -export function runtimeServiceListNotifierConnectors( +export async function runtimeServiceListNotifierConnectors( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listNotifierConnectors( - ListNotifierConnectorsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListNotifierConnectorsResponse, - ); + const r = await client.runtimeService.listNotifierConnectors( + ListNotifierConnectorsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListNotifierConnectorsResponse; } export function getRuntimeServiceListNotifierConnectorsQueryKey( @@ -1455,27 +1390,23 @@ export function createRuntimeServiceListNotifierConnectors< /** * Raw RPC call: RuntimeService.ListConversations */ -export function runtimeServiceListConversations( +export async function runtimeServiceListConversations( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listConversations( - ListConversationsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListConversationsResponse, - ); + const r = await client.runtimeService.listConversations( + ListConversationsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListConversationsResponse; } export function getRuntimeServiceListConversationsQueryKey( @@ -1542,27 +1473,23 @@ export function createRuntimeServiceListConversations< /** * Raw RPC call: RuntimeService.GetConversation */ -export function runtimeServiceGetConversation( +export async function runtimeServiceGetConversation( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .getConversation( - GetConversationRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GetConversationResponse, - ); + const r = await client.runtimeService.getConversation( + GetConversationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GetConversationResponse; } export function getRuntimeServiceGetConversationQueryKey( @@ -1629,25 +1556,23 @@ export function createRuntimeServiceGetConversation< /** * Raw RPC call: RuntimeService.ListTools */ -export function runtimeServiceListTools( +export async function runtimeServiceListTools( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listTools( - ListToolsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1ListToolsResponse, - ); + const r = await client.runtimeService.listTools( + ListToolsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListToolsResponse; } export function getRuntimeServiceListToolsQueryKey( @@ -1703,24 +1628,20 @@ export function createRuntimeServiceListTools( /** * Raw RPC call: RuntimeService.IssueDevJWT */ -export function runtimeServiceIssueDevJWT( +export async function runtimeServiceIssueDevJWT( client: RuntimeClient, request: V1IssueDevJWTRequest, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .issueDevJWT( - IssueDevJWTRequest.fromJson( - stripUndefined(request) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1IssueDevJWTResponse, - ); + const r = await client.runtimeService.issueDevJWT( + IssueDevJWTRequest.fromJson( + stripUndefined(request) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1IssueDevJWTResponse; } export function getRuntimeServiceIssueDevJWTQueryKey( @@ -1776,27 +1697,23 @@ export function createRuntimeServiceIssueDevJWT( /** * Raw RPC call: RuntimeService.AnalyzeVariables */ -export function runtimeServiceAnalyzeVariables( +export async function runtimeServiceAnalyzeVariables( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .analyzeVariables( - AnalyzeVariablesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1AnalyzeVariablesResponse, - ); + const r = await client.runtimeService.analyzeVariables( + AnalyzeVariablesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1AnalyzeVariablesResponse; } export function getRuntimeServiceAnalyzeVariablesQueryKey( @@ -1863,27 +1780,23 @@ export function createRuntimeServiceAnalyzeVariables< /** * Raw RPC call: RuntimeService.ListGitCommits */ -export function runtimeServiceListGitCommits( +export async function runtimeServiceListGitCommits( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listGitCommits( - ListGitCommitsRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListGitCommitsResponse, - ); + const r = await client.runtimeService.listGitCommits( + ListGitCommitsRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListGitCommitsResponse; } export function getRuntimeServiceListGitCommitsQueryKey( @@ -1946,27 +1859,23 @@ export function createRuntimeServiceListGitCommits< /** * Raw RPC call: RuntimeService.ListGitBranches */ -export function runtimeServiceListGitBranches( +export async function runtimeServiceListGitBranches( client: RuntimeClient, request: Omit, "instanceId">, options?: { signal?: AbortSignal }, ): Promise { - return client.runtimeService - .listGitBranches( - ListGitBranchesRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - { signal: options?.signal }, - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ListGitBranchesResponse, - ); + const r = await client.runtimeService.listGitBranches( + ListGitBranchesRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + { signal: options?.signal }, + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ListGitBranchesResponse; } export function getRuntimeServiceListGitBranchesQueryKey( @@ -2033,25 +1942,21 @@ export function createRuntimeServiceListGitBranches< /** * Raw RPC call (mutation): RuntimeService.CreateInstance */ -export function runtimeServiceCreateInstance( +export async function runtimeServiceCreateInstance( client: RuntimeClient, request: Omit, ): Promise { - return client.runtimeService - .createInstance( - CreateInstanceRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1CreateInstanceResponse, - ); + const r = await client.runtimeService.createInstance( + CreateInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1CreateInstanceResponse; } export function getRuntimeServiceCreateInstanceMutationOptions( @@ -2099,25 +2004,21 @@ export function createRuntimeServiceCreateInstanceMutation( /** * Raw RPC call (mutation): RuntimeService.EditInstance */ -export function runtimeServiceEditInstance( +export async function runtimeServiceEditInstance( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .editInstance( - EditInstanceRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1EditInstanceResponse, - ); + const r = await client.runtimeService.editInstance( + EditInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1EditInstanceResponse; } export function getRuntimeServiceEditInstanceMutationOptions( @@ -2165,25 +2066,21 @@ export function createRuntimeServiceEditInstanceMutation( /** * Raw RPC call (mutation): RuntimeService.DeleteInstance */ -export function runtimeServiceDeleteInstance( +export async function runtimeServiceDeleteInstance( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .deleteInstance( - DeleteInstanceRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1DeleteInstanceResponse, - ); + const r = await client.runtimeService.deleteInstance( + DeleteInstanceRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1DeleteInstanceResponse; } export function getRuntimeServiceDeleteInstanceMutationOptions( @@ -2231,25 +2128,21 @@ export function createRuntimeServiceDeleteInstanceMutation( /** * Raw RPC call (mutation): RuntimeService.ReloadConfig */ -export function runtimeServiceReloadConfig( +export async function runtimeServiceReloadConfig( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .reloadConfig( - ReloadConfigRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ReloadConfigResponse, - ); + const r = await client.runtimeService.reloadConfig( + ReloadConfigRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ReloadConfigResponse; } export function getRuntimeServiceReloadConfigMutationOptions( @@ -2297,23 +2190,19 @@ export function createRuntimeServiceReloadConfigMutation( /** * Raw RPC call (mutation): RuntimeService.PutFile */ -export function runtimeServicePutFile( +export async function runtimeServicePutFile( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .putFile( - PutFileRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1PutFileResponse, - ); + const r = await client.runtimeService.putFile( + PutFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1PutFileResponse; } export function getRuntimeServicePutFileMutationOptions( @@ -2361,25 +2250,21 @@ export function createRuntimeServicePutFileMutation( /** * Raw RPC call (mutation): RuntimeService.CreateDirectory */ -export function runtimeServiceCreateDirectory( +export async function runtimeServiceCreateDirectory( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .createDirectory( - CreateDirectoryRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1CreateDirectoryResponse, - ); + const r = await client.runtimeService.createDirectory( + CreateDirectoryRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1CreateDirectoryResponse; } export function getRuntimeServiceCreateDirectoryMutationOptions( @@ -2427,25 +2312,21 @@ export function createRuntimeServiceCreateDirectoryMutation( /** * Raw RPC call (mutation): RuntimeService.DeleteFile */ -export function runtimeServiceDeleteFile( +export async function runtimeServiceDeleteFile( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .deleteFile( - DeleteFileRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1DeleteFileResponse, - ); + const r = await client.runtimeService.deleteFile( + DeleteFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1DeleteFileResponse; } export function getRuntimeServiceDeleteFileMutationOptions( @@ -2493,25 +2374,21 @@ export function createRuntimeServiceDeleteFileMutation( /** * Raw RPC call (mutation): RuntimeService.RenameFile */ -export function runtimeServiceRenameFile( +export async function runtimeServiceRenameFile( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .renameFile( - RenameFileRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1RenameFileResponse, - ); + const r = await client.runtimeService.renameFile( + RenameFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1RenameFileResponse; } export function getRuntimeServiceRenameFileMutationOptions( @@ -2559,25 +2436,21 @@ export function createRuntimeServiceRenameFileMutation( /** * Raw RPC call (mutation): RuntimeService.UnpackExample */ -export function runtimeServiceUnpackExample( +export async function runtimeServiceUnpackExample( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .unpackExample( - UnpackExampleRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1UnpackExampleResponse, - ); + const r = await client.runtimeService.unpackExample( + UnpackExampleRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1UnpackExampleResponse; } export function getRuntimeServiceUnpackExampleMutationOptions( @@ -2625,25 +2498,21 @@ export function createRuntimeServiceUnpackExampleMutation( /** * Raw RPC call (mutation): RuntimeService.UnpackEmpty */ -export function runtimeServiceUnpackEmpty( +export async function runtimeServiceUnpackEmpty( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .unpackEmpty( - UnpackEmptyRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1UnpackEmptyResponse, - ); + const r = await client.runtimeService.unpackEmpty( + UnpackEmptyRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1UnpackEmptyResponse; } export function getRuntimeServiceUnpackEmptyMutationOptions( @@ -2691,25 +2560,21 @@ export function createRuntimeServiceUnpackEmptyMutation( /** * Raw RPC call (mutation): RuntimeService.GenerateMetricsViewFile */ -export function runtimeServiceGenerateMetricsViewFile( +export async function runtimeServiceGenerateMetricsViewFile( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .generateMetricsViewFile( - GenerateMetricsViewFileRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GenerateMetricsViewFileResponse, - ); + const r = await client.runtimeService.generateMetricsViewFile( + GenerateMetricsViewFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateMetricsViewFileResponse; } export function getRuntimeServiceGenerateMetricsViewFileMutationOptions( @@ -2756,25 +2621,21 @@ export function createRuntimeServiceGenerateMetricsViewFileMutation( /** * Raw RPC call (mutation): RuntimeService.GenerateCanvasFile */ -export function runtimeServiceGenerateCanvasFile( +export async function runtimeServiceGenerateCanvasFile( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .generateCanvasFile( - GenerateCanvasFileRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GenerateCanvasFileResponse, - ); + const r = await client.runtimeService.generateCanvasFile( + GenerateCanvasFileRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateCanvasFileResponse; } export function getRuntimeServiceGenerateCanvasFileMutationOptions( @@ -2822,25 +2683,21 @@ export function createRuntimeServiceGenerateCanvasFileMutation( /** * Raw RPC call (mutation): RuntimeService.GenerateResolver */ -export function runtimeServiceGenerateResolver( +export async function runtimeServiceGenerateResolver( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .generateResolver( - GenerateResolverRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GenerateResolverResponse, - ); + const r = await client.runtimeService.generateResolver( + GenerateResolverRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateResolverResponse; } export function getRuntimeServiceGenerateResolverMutationOptions( @@ -2888,25 +2745,21 @@ export function createRuntimeServiceGenerateResolverMutation( /** * Raw RPC call (mutation): RuntimeService.GenerateRenderer */ -export function runtimeServiceGenerateRenderer( +export async function runtimeServiceGenerateRenderer( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .generateRenderer( - GenerateRendererRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GenerateRendererResponse, - ); + const r = await client.runtimeService.generateRenderer( + GenerateRendererRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GenerateRendererResponse; } export function getRuntimeServiceGenerateRendererMutationOptions( @@ -2954,25 +2807,21 @@ export function createRuntimeServiceGenerateRendererMutation( /** * Raw RPC call (mutation): RuntimeService.CreateTrigger */ -export function runtimeServiceCreateTrigger( +export async function runtimeServiceCreateTrigger( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .createTrigger( - CreateTriggerRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1CreateTriggerResponse, - ); + const r = await client.runtimeService.createTrigger( + CreateTriggerRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1CreateTriggerResponse; } export function getRuntimeServiceCreateTriggerMutationOptions( @@ -3020,25 +2869,21 @@ export function createRuntimeServiceCreateTriggerMutation( /** * Raw RPC call (mutation): RuntimeService.ShareConversation */ -export function runtimeServiceShareConversation( +export async function runtimeServiceShareConversation( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .shareConversation( - ShareConversationRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ShareConversationResponse, - ); + const r = await client.runtimeService.shareConversation( + ShareConversationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ShareConversationResponse; } export function getRuntimeServiceShareConversationMutationOptions( @@ -3086,25 +2931,21 @@ export function createRuntimeServiceShareConversationMutation( /** * Raw RPC call (mutation): RuntimeService.ForkConversation */ -export function runtimeServiceForkConversation( +export async function runtimeServiceForkConversation( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .forkConversation( - ForkConversationRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1ForkConversationResponse, - ); + const r = await client.runtimeService.forkConversation( + ForkConversationRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1ForkConversationResponse; } export function getRuntimeServiceForkConversationMutationOptions( @@ -3152,23 +2993,19 @@ export function createRuntimeServiceForkConversationMutation( /** * Raw RPC call (mutation): RuntimeService.Complete */ -export function runtimeServiceComplete( +export async function runtimeServiceComplete( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .complete( - CompleteRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1CompleteResponse, - ); + const r = await client.runtimeService.complete( + CompleteRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1CompleteResponse; } export function getRuntimeServiceCompleteMutationOptions( @@ -3216,23 +3053,21 @@ export function createRuntimeServiceCompleteMutation( /** * Raw RPC call (mutation): RuntimeService.GitStatus */ -export function runtimeServiceGitStatus( +export async function runtimeServiceGitStatus( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .gitStatus( - GitStatusRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GitStatusResponse, - ); + const r = await client.runtimeService.gitStatus( + GitStatusRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GitStatusResponse; } export function getRuntimeServiceGitStatusMutationOptions( @@ -3280,23 +3115,21 @@ export function createRuntimeServiceGitStatusMutation( /** * Raw RPC call (mutation): RuntimeService.GitCommit */ -export function runtimeServiceGitCommit( +export async function runtimeServiceGitCommit( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .gitCommit( - GitCommitRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GitCommitResponse, - ); + const r = await client.runtimeService.gitCommit( + GitCommitRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GitCommitResponse; } export function getRuntimeServiceGitCommitMutationOptions( @@ -3344,25 +3177,21 @@ export function createRuntimeServiceGitCommitMutation( /** * Raw RPC call (mutation): RuntimeService.RestoreGitCommit */ -export function runtimeServiceRestoreGitCommit( +export async function runtimeServiceRestoreGitCommit( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .restoreGitCommit( - RestoreGitCommitRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1RestoreGitCommitResponse, - ); + const r = await client.runtimeService.restoreGitCommit( + RestoreGitCommitRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1RestoreGitCommitResponse; } export function getRuntimeServiceRestoreGitCommitMutationOptions( @@ -3410,25 +3239,21 @@ export function createRuntimeServiceRestoreGitCommitMutation( /** * Raw RPC call (mutation): RuntimeService.GitMergeToBranch */ -export function runtimeServiceGitMergeToBranch( +export async function runtimeServiceGitMergeToBranch( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .gitMergeToBranch( - GitMergeToBranchRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GitMergeToBranchResponse, - ); + const r = await client.runtimeService.gitMergeToBranch( + GitMergeToBranchRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GitMergeToBranchResponse; } export function getRuntimeServiceGitMergeToBranchMutationOptions( @@ -3476,25 +3301,21 @@ export function createRuntimeServiceGitMergeToBranchMutation( /** * Raw RPC call (mutation): RuntimeService.GitSwitchBranch */ -export function runtimeServiceGitSwitchBranch( +export async function runtimeServiceGitSwitchBranch( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .gitSwitchBranch( - GitSwitchBranchRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ - emitDefaultValues: true, - }) as unknown as V1GitSwitchBranchResponse, - ); + const r = await client.runtimeService.gitSwitchBranch( + GitSwitchBranchRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ + emitDefaultValues: true, + }) as unknown as V1GitSwitchBranchResponse; } export function getRuntimeServiceGitSwitchBranchMutationOptions( @@ -3542,23 +3363,19 @@ export function createRuntimeServiceGitSwitchBranchMutation( /** * Raw RPC call (mutation): RuntimeService.GitPull */ -export function runtimeServiceGitPull( +export async function runtimeServiceGitPull( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .gitPull( - GitPullRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GitPullResponse, - ); + const r = await client.runtimeService.gitPull( + GitPullRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1GitPullResponse; } export function getRuntimeServiceGitPullMutationOptions( @@ -3606,23 +3423,19 @@ export function createRuntimeServiceGitPullMutation( /** * Raw RPC call (mutation): RuntimeService.GitPush */ -export function runtimeServiceGitPush( +export async function runtimeServiceGitPush( client: RuntimeClient, request: Omit, "instanceId">, ): Promise { - return client.runtimeService - .gitPush( - GitPushRequest.fromJson( - stripUndefined({ - instanceId: client.instanceId, - ...request, - }) as unknown as JsonValue, - ), - ) - .then( - (r) => - r.toJson({ emitDefaultValues: true }) as unknown as V1GitPushResponse, - ); + const r = await client.runtimeService.gitPush( + GitPushRequest.fromJson( + stripUndefined({ + instanceId: client.instanceId, + ...request, + }) as unknown as JsonValue, + ), + ); + return r.toJson({ emitDefaultValues: true }) as unknown as V1GitPushResponse; } export function getRuntimeServiceGitPushMutationOptions( From 3f2c517d02c80227b6c339fe68f3ce084049f461 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Mon, 2 Mar 2026 13:13:20 +0300 Subject: [PATCH 55/78] fix: guard `runtimeClientStore` clear against stale identity If two RuntimeProvider instances overlap during a route transition, the first one's onDestroy could clear the store while the second is still active. Now checks identity before clearing. --- web-common/src/runtime-client/v2/RuntimeProvider.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-common/src/runtime-client/v2/RuntimeProvider.svelte b/web-common/src/runtime-client/v2/RuntimeProvider.svelte index 9575b47ec47..7750eb3e2ee 100644 --- a/web-common/src/runtime-client/v2/RuntimeProvider.svelte +++ b/web-common/src/runtime-client/v2/RuntimeProvider.svelte @@ -27,7 +27,7 @@ } onDestroy(() => { - runtimeClientStore.set(null); + runtimeClientStore.update((c) => (c === client ? null : c)); client.dispose(); }); From ef2e38fd2d775bfaf50ed6ff92003d12b96e71d7 Mon Sep 17 00:00:00 2001 From: Eric P Green Date: Mon, 2 Mar 2026 13:13:58 +0300 Subject: [PATCH 56/78] chore: remove `frontend.md` from this branch Moving the frontend style guide to a dedicated PR. The example in this file referenced the deleted runtime-store pattern and needs updating. --- .claude/rules/frontend.md | 149 -------------------------------------- 1 file changed, 149 deletions(-) delete mode 100644 .claude/rules/frontend.md diff --git a/.claude/rules/frontend.md b/.claude/rules/frontend.md deleted file mode 100644 index f0f5f61c00a..00000000000 --- a/.claude/rules/frontend.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -paths: *.svelte, *.ts ---- - -# Frontend Style Guide - -This is a living document that captures frontend conventions and best practices for the Rill web applications. - -## TypeScript - -- File names use kebab-case -- Boolean variables: `isX` (e.g., `isConversationLoading`) -- Functions use `function` keyword, not arrow functions -- Prefer options objects over multiple parameters for optional configuration -- Avoid too many layers of abstraction -- Prefer `null` over empty string `""` when representing "no value" — it's more semantically clear - -## Naming Conventions - -| Type | Convention | Example | -| ------------------- | ---------------- | ------------------------- | -| TypeScript files | kebab-case | `user-management.ts` | -| Svelte components | PascalCase | `ProjectCard.svelte` | -| Directories | kebab-case | `user-management/` | -| Variables/functions | camelCase | `getProjectPermissions()` | -| True constants | UPPER_SNAKE_CASE | `MAX_FILE_SIZE` | -| Interfaces/types | PascalCase | `ProjectPermissions` | - -## Svelte - -- Keep components small and focused -- Do not use `createEventDispatcher` (deprecated in Svelte 5) — use callback props instead -- Use SuperForms for form handling -- Prefer idiomatic Svelte over patterns from other frameworks -- Use semantic HTML -- Lean into the existing design system — don't custom-build modals, popovers, dropdowns -- In script blocks, place function declarations at the bottom -- Break long reactive statement sequences into logical groups with comments - -### Styles - -- Default to component-scoped `